Skip to content

Instantly share code, notes, and snippets.

@estasney
Last active January 18, 2022 03:59
Show Gist options
  • Save estasney/8cd83feb49a608660f10a38d9db3871c to your computer and use it in GitHub Desktop.
Save estasney/8cd83feb49a608660f10a38d9db3871c to your computer and use it in GitHub Desktop.
DndTree
This file has been truncated, but you can view the full file.
(()=>{"use strict";var __webpack_modules__={922:module=>{eval('\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n\nmodule.exports = function (cssWithMappingToString) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = "";\n var needLayer = typeof item[5] !== "undefined";\n\n if (item[4]) {\n content += "@supports (".concat(item[4], ") {");\n }\n\n if (item[2]) {\n content += "@media ".concat(item[2], " {");\n }\n\n if (needLayer) {\n content += "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {");\n }\n\n content += cssWithMappingToString(item);\n\n if (needLayer) {\n content += "}";\n }\n\n if (item[2]) {\n content += "}";\n }\n\n if (item[4]) {\n content += "}";\n }\n\n return content;\n }).join("");\n }; // import a list of modules into the list\n\n\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === "string") {\n modules = [[null, modules, undefined]];\n }\n\n var alreadyImportedModules = {};\n\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n\n if (typeof layer !== "undefined") {\n if (typeof item[5] === "undefined") {\n item[5] = layer;\n } else {\n item[1] = "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {").concat(item[1], "}");\n item[5] = layer;\n }\n }\n\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = "@media ".concat(item[2], " {").concat(item[1], "}");\n item[2] = media;\n }\n }\n\n if (supports) {\n if (!item[4]) {\n item[4] = "".concat(supports);\n } else {\n item[1] = "@supports (".concat(item[4], ") {").concat(item[1], "}");\n item[4] = supports;\n }\n }\n\n list.push(item);\n }\n };\n\n return list;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LENBQVVPLFFBQVYsQ0FBVjtBQUNELFNBRkQsTUFFTztBQUNMVixVQUFBQSxJQUFJLENBQUMsQ0FBRCxDQUFKLEdBQVUsY0FBY0csTUFBZCxDQUFxQkgsSUFBSSxDQUFDLENBQUQsQ0FBekIsRUFBOEIsS0FBOUIsRUFBcUNHLE1BQXJDLENBQTRDSCxJQUFJLENBQUMsQ0FBRCxDQUFoRCxFQUFxRCxHQUFyRCxDQUFWO0FBQ0FBLFVBQUFBLElBQUksQ0FBQyxDQUFELENBQUosR0FBVVUsUUFBVjtBQUNEO0FBQ0Y7O0FBRURiLE1BQUFBLElBQUksQ0FBQ29CLElBQUwsQ0FBVWpCLElBQVY7QUFDRDtBQUNGLEdBckREOztBQXVEQSxTQUFPSCxJQUFQO0FBQ0QsQ0EvRkQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanM/MjRmYiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuLypcbiAgTUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcbiAgQXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcpIHtcbiAgdmFyIGxpc3QgPSBbXTsgLy8gcmV0dXJuIHRoZSBsaXN0IG9mIG1vZHVsZXMgYXMgY3NzIHN0cmluZ1xuXG4gIGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHZhciBjb250ZW50ID0gXCJcIjtcbiAgICAgIHZhciBuZWVkTGF5ZXIgPSB0eXBlb2YgaXRlbVs1XSAhPT0gXCJ1bmRlZmluZWRcIjtcblxuICAgICAgaWYgKGl0ZW1bNF0pIHtcbiAgICAgICAgY29udGVudCArPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KGl0ZW1bNF0sIFwiKSB7XCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXRlbVsyXSkge1xuICAgICAgICBjb250ZW50ICs9IFwiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLCBcIiB7XCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAobmVlZExheWVyKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAbGF5ZXJcIi5jb25jYXQoaXRlbVs1XS5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KGl0ZW1bNV0pIDogXCJcIiwgXCIge1wiKTtcbiAgICAgIH1cblxuICAgICAgY29udGVudCArPSBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0pO1xuXG4gICAgICBpZiAobmVlZExheWVyKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG5cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG5cbiAgICAgIGlmIChpdGVtWzRdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH0pLmpvaW4oXCJcIik7XG4gIH07IC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XG5cblxuICBsaXN0LmkgPSBmdW5jdGlvbiBpKG1vZHVsZXMsIG1lZGlhLCBkZWR1cGUsIHN1cHBvcnRzLCBsYXllcikge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgbW9kdWxlcyA9IFtbbnVsbCwgbW9kdWxlcywgdW5kZWZpbmVkXV07XG4gICAgfVxuXG4gICAgdmFyIGFscmVhZHlJbXBvcnRlZE1vZHVsZXMgPSB7fTtcblxuICAgIGlmIChkZWR1cGUpIHtcbiAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgdGhpcy5sZW5ndGg7IGsrKykge1xuICAgICAgICB2YXIgaWQgPSB0aGlzW2tdWzBdO1xuXG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpZF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2sgPSAwOyBfayA8IG1vZHVsZXMubGVuZ3RoOyBfaysrKSB7XG4gICAgICB2YXIgaXRlbSA9IFtdLmNvbmNhdChtb2R1bGVzW19rXSk7XG5cbiAgICAgIGlmIChkZWR1cGUgJiYgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpdGVtWzBdXSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBsYXllciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW1bNV0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQGxheWVyXCIuY29uY2F0KGl0ZW1bNV0ubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChpdGVtWzVdKSA6IFwiXCIsIFwiIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG1lZGlhKSB7XG4gICAgICAgIGlmICghaXRlbVsyXSkge1xuICAgICAgICAgIGl0ZW1bMl0gPSBtZWRpYTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHN1cHBvcnRzKSB7XG4gICAgICAgIGlmICghaXRlbVs0XSkge1xuICAgICAgICAgIGl0ZW1bNF0gPSBcIlwiLmNvbmNhdChzdXBwb3J0cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQHN1cHBvcnRzIChcIi5jb25jYXQoaXRlbVs0XSwgXCIpIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzRdID0gc3VwcG9ydHM7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGlzdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gbGlzdDtcbn07Il0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJjc3NXaXRoTWFwcGluZ1RvU3RyaW5nIiwibGlzdCIsInRvU3RyaW5nIiwibWFwIiwiaXRlbSIsImNvbnRlbnQiLCJuZWVkTGF5ZXIiLCJjb25jYXQiLCJsZW5ndGgiLCJqb2luIiwiaSIsIm1vZHVsZXMiLCJtZWRpYSIsImRlZHVwZSIsInN1cHBvcnRzIiwibGF5ZXIiLCJ1bmRlZmluZWQiLCJhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzIiwiayIsImlkIiwiX2siLCJwdXNoIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///922\n')},251:module=>{eval('\n\nmodule.exports = function (item) {\n var content = item[1];\n var cssMapping = item[3];\n\n if (!cssMapping) {\n return content;\n }\n\n if (typeof btoa === "function") {\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64);\n var sourceMapping = "/*# ".concat(data, " */");\n var sourceURLs = cssMapping.sources.map(function (source) {\n return "/*# sourceURL=".concat(cssMapping.sourceRoot || "").concat(source, " */");\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join("\\n");\n }\n\n return [content].join("\\n");\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjUxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViQSxNQUFNLENBQUNDLE9BQVAsR0FBaUIsVUFBVUMsSUFBVixFQUFnQjtBQUMvQixNQUFJQyxPQUFPLEdBQUdELElBQUksQ0FBQyxDQUFELENBQWxCO0FBQ0EsTUFBSUUsVUFBVSxHQUFHRixJQUFJLENBQUMsQ0FBRCxDQUFyQjs7QUFFQSxNQUFJLENBQUNFLFVBQUwsRUFBaUI7QUFDZixXQUFPRCxPQUFQO0FBQ0Q7O0FBRUQsTUFBSSxPQUFPRSxJQUFQLEtBQWdCLFVBQXBCLEVBQWdDO0FBQzlCLFFBQUlDLE1BQU0sR0FBR0QsSUFBSSxDQUFDRSxRQUFRLENBQUNDLGtCQUFrQixDQUFDQyxJQUFJLENBQUNDLFNBQUwsQ0FBZU4sVUFBZixDQUFELENBQW5CLENBQVQsQ0FBakI7QUFDQSxRQUFJTyxJQUFJLEdBQUcsK0RBQStEQyxNQUEvRCxDQUFzRU4sTUFBdEUsQ0FBWDtBQUNBLFFBQUlPLGFBQWEsR0FBRyxPQUFPRCxNQUFQLENBQWNELElBQWQsRUFBb0IsS0FBcEIsQ0FBcEI7QUFDQSxRQUFJRyxVQUFVLEdBQUdWLFVBQVUsQ0FBQ1csT0FBWCxDQUFtQkMsR0FBbkIsQ0FBdUIsVUFBVUMsTUFBVixFQUFrQjtBQUN4RCxhQUFPLGlCQUFpQkwsTUFBakIsQ0FBd0JSLFVBQVUsQ0FBQ2MsVUFBWCxJQUF5QixFQUFqRCxFQUFxRE4sTUFBckQsQ0FBNERLLE1BQTVELEVBQW9FLEtBQXBFLENBQVA7QUFDRCxLQUZnQixDQUFqQjtBQUdBLFdBQU8sQ0FBQ2QsT0FBRCxFQUFVUyxNQUFWLENBQWlCRSxVQUFqQixFQUE2QkYsTUFBN0IsQ0FBb0MsQ0FBQ0MsYUFBRCxDQUFwQyxFQUFxRE0sSUFBckQsQ0FBMEQsSUFBMUQsQ0FBUDtBQUNEOztBQUVELFNBQU8sQ0FBQ2hCLE9BQUQsRUFBVWdCLElBQVYsQ0FBZSxJQUFmLENBQVA7QUFDRCxDQW5CRCIsInNvdXJjZXMiOlsid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanM/YWYxMiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlbSkge1xuICB2YXIgY29udGVudCA9IGl0ZW1bMV07XG4gIHZhciBjc3NNYXBwaW5nID0gaXRlbVszXTtcblxuICBpZiAoIWNzc01hcHBpbmcpIHtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYnRvYSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdmFyIGJhc2U2NCA9IGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KGNzc01hcHBpbmcpKSkpO1xuICAgIHZhciBkYXRhID0gXCJzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxcIi5jb25jYXQoYmFzZTY0KTtcbiAgICB2YXIgc291cmNlTWFwcGluZyA9IFwiLyojIFwiLmNvbmNhdChkYXRhLCBcIiAqL1wiKTtcbiAgICB2YXIgc291cmNlVVJMcyA9IGNzc01hcHBpbmcuc291cmNlcy5tYXAoZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgcmV0dXJuIFwiLyojIHNvdXJjZVVSTD1cIi5jb25jYXQoY3NzTWFwcGluZy5zb3VyY2VSb290IHx8IFwiXCIpLmNvbmNhdChzb3VyY2UsIFwiICovXCIpO1xuICAgIH0pO1xuICAgIHJldHVybiBbY29udGVudF0uY29uY2F0KHNvdXJjZVVSTHMpLmNvbmNhdChbc291cmNlTWFwcGluZ10pLmpvaW4oXCJcXG5cIik7XG4gIH1cblxuICByZXR1cm4gW2NvbnRlbnRdLmpvaW4oXCJcXG5cIik7XG59OyJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwiaXRlbSIsImNvbnRlbnQiLCJjc3NNYXBwaW5nIiwiYnRvYSIsImJhc2U2NCIsInVuZXNjYXBlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiSlNPTiIsInN0cmluZ2lmeSIsImRhdGEiLCJjb25jYXQiLCJzb3VyY2VNYXBwaW5nIiwic291cmNlVVJMcyIsInNvdXJjZXMiLCJtYXAiLCJzb3VyY2UiLCJzb3VyY2VSb290Iiwiam9pbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///251\n')},502:(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__)=>{eval('\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selector.js\nfunction none() {}\n\n/* harmony default export */ function selector(selector) {\n return selector == null ? none : function () {\n return this.querySelector(selector);\n };\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/select.js\n\n\n/* harmony default export */ function selection_select(select) {\n if (typeof select !== "function") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if ("__data__" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/array.js\n// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don’t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nfunction array(x) {\n return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selectorAll.js\nfunction empty() {\n return [];\n}\n\n/* harmony default export */ function selectorAll(selector) {\n return selector == null ? empty : function () {\n return this.querySelectorAll(selector);\n };\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/selectAll.js\n\n\n\n\nfunction arrayAll(select) {\n return function () {\n return array(select.apply(this, arguments));\n };\n}\n\n/* harmony default export */ function selectAll(select) {\n if (typeof select === "function") select = arrayAll(select);else select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/matcher.js\n/* harmony default export */ function matcher(selector) {\n return function () {\n return this.matches(selector);\n };\n}\nfunction childMatcher(selector) {\n return function (node) {\n return node.matches(selector);\n };\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/selectChild.js\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n return function () {\n return find.call(this.children, match);\n };\n}\n\nfunction childFirst() {\n return this.firstElementChild;\n}\n\n/* harmony default export */ function selectChild(match) {\n return this.select(match == null ? childFirst : childFind(typeof match === "function" ? match : childMatcher(match)));\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/selectChildren.js\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n return function () {\n return filter.call(this.children, match);\n };\n}\n\n/* harmony default export */ function selectChildren(match) {\n return this.selectAll(match == null ? children : childrenFilter(typeof match === "function" ? match : childMatcher(match)));\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/filter.js\n\n\n/* harmony default export */ function selection_filter(match) {\n if (typeof match !== "function") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/sparse.js\n/* harmony default export */ function sparse(update) {\n return new Array(update.length);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/enter.js\n\n\n/* harmony default export */ function enter() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\nfunction EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function (child) {\n return this._parent.insertBefore(child, this._next);\n },\n insertBefore: function (child, next) {\n return this._parent.insertBefore(child, next);\n },\n querySelector: function (selector) {\n return this._parent.querySelector(selector);\n },\n querySelectorAll: function (selector) {\n return this._parent.querySelectorAll(selector);\n }\n};\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/constant.js\n/* harmony default export */ function src_constant(x) {\n return function () {\n return x;\n };\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/data.js\n\n\n\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length; // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n } // Put any non-null nodes that don’t fit into exit.\n\n\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = new Map(),\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue; // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + "";\n\n if (nodeByKeyValue.has(keyValue)) {\n exit[i] = node;\n } else {\n nodeByKeyValue.set(keyValue, node);\n }\n }\n } // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n\n\n for (i = 0; i < dataLength; ++i) {\n keyValue = key.call(parent, data[i], i, data) + "";\n\n if (node = nodeByKeyValue.get(keyValue)) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue.delete(keyValue);\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n } // Add any remaining nodes that were not bound to data to exit.\n\n\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && nodeByKeyValue.get(keyValues[i]) === node) {\n exit[i] = node;\n }\n }\n}\n\nfunction datum(node) {\n return node.__data__;\n}\n\n/* harmony default export */ function data(value, key) {\n if (!arguments.length) return Array.from(this, datum);\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n if (typeof value !== "function") value = src_constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key); // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n} // Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn’t worried about “live” collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don’t; we’d rather avoid a gratuitous copy.)\n\nfunction arraylike(data) {\n return typeof data === "object" && "length" in data ? data // Array, TypedArray, NodeList, array-like\n : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/exit.js\n\n\n/* harmony default export */ function exit() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/join.js\n/* harmony default export */ function join(onenter, onupdate, onexit) {\n var enter = this.enter(),\n update = this,\n exit = this.exit();\n\n if (typeof onenter === "function") {\n enter = onenter(enter);\n if (enter) enter = enter.selection();\n } else {\n enter = enter.append(onenter + "");\n }\n\n if (onupdate != null) {\n update = onupdate(update);\n if (update) update = update.selection();\n }\n\n if (onexit == null) exit.remove();else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/merge.js\n\n/* harmony default export */ function merge(context) {\n var selection = context.selection ? context.selection() : context;\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/order.js\n/* harmony default export */ function order() {\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/sort.js\n\n/* harmony default export */ function sort(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/call.js\n/* harmony default export */ function call() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/nodes.js\n/* harmony default export */ function nodes() {\n return Array.from(this);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/node.js\n/* harmony default export */ function node() {\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/size.js\n/* harmony default export */ function size() {\n let size = 0;\n\n for (const node of this) ++size; // eslint-disable-line no-unused-vars\n\n\n return size;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/empty.js\n/* harmony default export */ function selection_empty() {\n return !this.node();\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/each.js\n/* harmony default export */ function each(callback) {\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/namespaces.js\nvar xhtml = "http://www.w3.org/1999/xhtml";\n/* harmony default export */ const namespaces = ({\n svg: "http://www.w3.org/2000/svg",\n xhtml: xhtml,\n xlink: "http://www.w3.org/1999/xlink",\n xml: "http://www.w3.org/XML/1998/namespace",\n xmlns: "http://www.w3.org/2000/xmlns/"\n});\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/namespace.js\n\n/* harmony default export */ function namespace(name) {\n var prefix = name += "",\n i = prefix.indexOf(":");\n if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {\n space: namespaces[prefix],\n local: name\n } : name; // eslint-disable-line no-prototype-builtins\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/attr.js\n\n\nfunction attrRemove(name) {\n return function () {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function () {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function () {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function () {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function () {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function () {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\n/* harmony default export */ function attr(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local ? node.getAttributeNS(fullname.space, fullname.local) : node.getAttribute(fullname);\n }\n\n return this.each((value == null ? fullname.local ? attrRemoveNS : attrRemove : typeof value === "function" ? fullname.local ? attrFunctionNS : attrFunction : fullname.local ? attrConstantNS : attrConstant)(fullname, value));\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/window.js\n/* harmony default export */ function src_window(node) {\n return node.ownerDocument && node.ownerDocument.defaultView // node is a Node\n || node.document && node // node is a Window\n || node.defaultView; // node is a Document\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/style.js\n\n\nfunction styleRemove(name) {\n return function () {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function () {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function () {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);else this.style.setProperty(name, v, priority);\n };\n}\n\n/* harmony default export */ function style(name, value, priority) {\n return arguments.length > 1 ? this.each((value == null ? styleRemove : typeof value === "function" ? styleFunction : styleConstant)(name, value, priority == null ? "" : priority)) : styleValue(this.node(), name);\n}\nfunction styleValue(node, name) {\n return node.style.getPropertyValue(name) || src_window(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/property.js\nfunction propertyRemove(name) {\n return function () {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function () {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function () {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];else this[name] = v;\n };\n}\n\n/* harmony default export */ function property(name, value) {\n return arguments.length > 1 ? this.each((value == null ? propertyRemove : typeof value === "function" ? propertyFunction : propertyConstant)(name, value)) : this.node()[name];\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/classed.js\nfunction classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute("class") || "");\n}\n\nClassList.prototype = {\n add: function (name) {\n var i = this._names.indexOf(name);\n\n if (i < 0) {\n this._names.push(name);\n\n this._node.setAttribute("class", this._names.join(" "));\n }\n },\n remove: function (name) {\n var i = this._names.indexOf(name);\n\n if (i >= 0) {\n this._names.splice(i, 1);\n\n this._node.setAttribute("class", this._names.join(" "));\n }\n },\n contains: function (name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node),\n i = -1,\n n = names.length;\n\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node),\n i = -1,\n n = names.length;\n\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function () {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function () {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function () {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\n/* harmony default export */ function classed(name, value) {\n var names = classArray(name + "");\n\n if (arguments.length < 2) {\n var list = classList(this.node()),\n i = -1,\n n = names.length;\n\n while (++i < n) if (!list.contains(names[i])) return false;\n\n return true;\n }\n\n return this.each((typeof value === "function" ? classedFunction : value ? classedTrue : classedFalse)(names, value));\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/text.js\nfunction textRemove() {\n this.textContent = "";\n}\n\nfunction textConstant(value) {\n return function () {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function () {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? "" : v;\n };\n}\n\n/* harmony default export */ function selection_text(value) {\n return arguments.length ? this.each(value == null ? textRemove : (typeof value === "function" ? textFunction : textConstant)(value)) : this.node().textContent;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/html.js\nfunction htmlRemove() {\n this.innerHTML = "";\n}\n\nfunction htmlConstant(value) {\n return function () {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function () {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? "" : v;\n };\n}\n\n/* harmony default export */ function html(value) {\n return arguments.length ? this.each(value == null ? htmlRemove : (typeof value === "function" ? htmlFunction : htmlConstant)(value)) : this.node().innerHTML;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/raise.js\nfunction raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\n/* harmony default export */ function selection_raise() {\n return this.each(raise);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/lower.js\nfunction lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\n/* harmony default export */ function selection_lower() {\n return this.each(lower);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/creator.js\n\n\n\nfunction creatorInherit(name) {\n return function () {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml ? document.createElement(name) : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function () {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\n/* harmony default export */ function creator(name) {\n var fullname = namespace(name);\n return (fullname.local ? creatorFixed : creatorInherit)(fullname);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/append.js\n\n/* harmony default export */ function append(name) {\n var create = typeof name === "function" ? name : creator(name);\n return this.select(function () {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/insert.js\n\n\n\nfunction constantNull() {\n return null;\n}\n\n/* harmony default export */ function insert(name, before) {\n var create = typeof name === "function" ? name : creator(name),\n select = before == null ? constantNull : typeof before === "function" ? before : selector(before);\n return this.select(function () {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/remove.js\nfunction remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\n/* harmony default export */ function selection_remove() {\n return this.each(remove);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/clone.js\nfunction selection_cloneShallow() {\n var clone = this.cloneNode(false),\n parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true),\n parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\n/* harmony default export */ function clone(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/datum.js\n/* harmony default export */ function selection_datum(value) {\n return arguments.length ? this.property("__data__", value) : this.node().__data__;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/on.js\nfunction contextListener(listener) {\n return function (event) {\n listener.call(this, event, this.__data__);\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function (t) {\n var name = "",\n i = t.indexOf(".");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {\n type: t,\n name: name\n };\n });\n}\n\nfunction onRemove(typename) {\n return function () {\n var on = this.__on;\n if (!on) return;\n\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n } else {\n on[++i] = o;\n }\n }\n\n if (++i) on.length = i;else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, options) {\n return function () {\n var on = this.__on,\n o,\n listener = contextListener(value);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n this.addEventListener(o.type, o.listener = listener, o.options = options);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, options);\n o = {\n type: typename.type,\n name: typename.name,\n value: value,\n listener: listener,\n options: options\n };\n if (!on) this.__on = [o];else on.push(o);\n };\n}\n\n/* harmony default export */ function on(typename, value, options) {\n var typenames = parseTypenames(typename + ""),\n i,\n n = typenames.length,\n t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n\n return this;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/dispatch.js\n\n\nfunction dispatchEvent(node, type, params) {\n var window = src_window(node),\n event = window.CustomEvent;\n\n if (typeof event === "function") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent("Event");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function () {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function () {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\n/* harmony default export */ function selection_dispatch(type, params) {\n return this.each((typeof params === "function" ? dispatchFunction : dispatchConstant)(type, params));\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/iterator.js\n/* harmony default export */ function* iterator() {\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) yield node;\n }\n }\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/index.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar root = [null];\nfunction Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n return this;\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selectAll,\n selectChild: selectChild,\n selectChildren: selectChildren,\n filter: selection_filter,\n data: data,\n enter: enter,\n exit: exit,\n join: join,\n merge: merge,\n selection: selection_selection,\n order: order,\n sort: sort,\n call: call,\n nodes: nodes,\n node: node,\n size: size,\n empty: selection_empty,\n each: each,\n attr: attr,\n style: style,\n property: property,\n classed: classed,\n text: selection_text,\n html: html,\n raise: selection_raise,\n lower: selection_lower,\n append: append,\n insert: insert,\n remove: selection_remove,\n clone: clone,\n datum: selection_datum,\n on: on,\n dispatch: selection_dispatch,\n [Symbol.iterator]: iterator\n};\n/* harmony default export */ const src_selection = (selection);\n;// CONCATENATED MODULE: ./node_modules/d3-dispatch/src/dispatch.js\nvar noop = {\n value: () => {}\n};\n\nfunction dispatch_dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + "") || t in _ || /[\\s.]/.test(t)) throw new Error("illegal type: " + t);\n _[t] = [];\n }\n\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction dispatch_parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function (t) {\n var name = "",\n i = t.indexOf(".");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error("unknown type: " + t);\n return {\n type: t,\n name: name\n };\n });\n}\n\nDispatch.prototype = dispatch_dispatch.prototype = {\n constructor: Dispatch,\n on: function (typename, callback) {\n var _ = this._,\n T = dispatch_parseTypenames(typename + "", _),\n t,\n i = -1,\n n = T.length; // If no callback was specified, return the callback of the given type and name.\n\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n\n return;\n } // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n\n\n if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback);\n\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function () {\n var copy = {},\n _ = this._;\n\n for (var t in _) copy[t] = _[t].slice();\n\n return new Dispatch(copy);\n },\n call: function (type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);\n\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function (type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);\n\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n\n if (callback != null) type.push({\n name: name,\n value: callback\n });\n return type;\n}\n\n/* harmony default export */ const src_dispatch = (dispatch_dispatch);\n;// CONCATENATED MODULE: ./node_modules/d3-timer/src/timer.js\nvar timer_frame = 0,\n // is an animation frame pending?\ntimeout = 0,\n // is a timeout pending?\ninterval = 0,\n // are any timers active?\npokeDelay = 1000,\n // how frequently we check for clock skew\ntaskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === "object" && performance.now ? performance : Date,\n setFrame = typeof window === "object" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function (f) {\n setTimeout(f, 17);\n};\nfunction now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nfunction Timer() {\n this._call = this._time = this._next = null;\n}\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function (callback, delay, time) {\n if (typeof callback !== "function") throw new TypeError("callback is not a function");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;else taskHead = this;\n taskTail = this;\n }\n\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function () {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\nfunction timer(callback, delay, time) {\n var t = new Timer();\n t.restart(callback, delay, time);\n return t;\n}\nfunction timerFlush() {\n now(); // Get the current time, if not already set.\n\n ++timer_frame; // Pretend we’ve set an alarm, if we haven’t already.\n\n var t = taskHead,\n e;\n\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n t = t._next;\n }\n\n --timer_frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n timer_frame = timeout = 0;\n\n try {\n timerFlush();\n } finally {\n timer_frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(),\n delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0,\n t1 = taskHead,\n t2,\n time = Infinity;\n\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (timer_frame) return; // Soonest alarm already set, or will be.\n\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n timer_frame = 1, setFrame(wake);\n }\n}\n;// CONCATENATED MODULE: ./node_modules/d3-timer/src/timeout.js\n\n/* harmony default export */ function src_timeout(callback, delay, time) {\n var t = new Timer();\n delay = delay == null ? 0 : +delay;\n t.restart(elapsed => {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/schedule.js\n\n\nvar emptyOn = src_dispatch("start", "end", "cancel", "interrupt");\nvar emptyTween = [];\nvar CREATED = 0;\nvar SCHEDULED = 1;\nvar STARTING = 2;\nvar STARTED = 3;\nvar RUNNING = 4;\nvar ENDING = 5;\nvar ENDED = 6;\n/* harmony default export */ function schedule(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index,\n // For context during callback.\n group: group,\n // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\nfunction init(node, id) {\n var schedule = schedule_get(node, id);\n if (schedule.state > CREATED) throw new Error("too late; already scheduled");\n return schedule;\n}\nfunction schedule_set(node, id) {\n var schedule = schedule_get(node, id);\n if (schedule.state > STARTED) throw new Error("too late; already running");\n return schedule;\n}\nfunction schedule_get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error("transition not found");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween; // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time); // If the elapsed delay is less than our first sleep, start immediately.\n\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o; // If the state is not SCHEDULED, then we previously errored on start.\n\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue; // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n\n if (o.state === STARTED) return src_timeout(start); // Interrupt the active transition, if any.\n\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call("interrupt", node, node.__data__, o.index, o.group);\n delete schedules[i];\n } // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call("cancel", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n } // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n\n\n src_timeout(function () {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n }); // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n\n self.state = STARTING;\n self.on.call("start", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n\n self.state = STARTED; // Initialize the tween, deleting null tween.\n\n tween = new Array(n = self.tween.length);\n\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n } // Dispatch the end event.\n\n\n if (self.state === ENDING) {\n self.on.call("end", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n\n\n delete node.__transition;\n }\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/interrupt.js\n\n/* harmony default export */ function src_interrupt(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n if (!schedules) return;\n name = name == null ? null : name + "";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) {\n empty = false;\n continue;\n }\n\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? "interrupt" : "cancel", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/selection/interrupt.js\n\n/* harmony default export */ function selection_interrupt(name) {\n return this.each(function () {\n src_interrupt(this, name);\n });\n}\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/number.js\n/* harmony default export */ function number(a, b) {\n return a = +a, b = +b, function (t) {\n return a * (1 - t) + b * t;\n };\n}\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/transform/decompose.js\nvar degrees = 180 / Math.PI;\nvar identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n/* harmony default export */ function decompose(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/transform/parse.js\n\nvar svgNode;\n/* eslint-disable no-undef */\n\nfunction parseCss(value) {\n const m = new (typeof DOMMatrix === "function" ? DOMMatrix : WebKitCSSMatrix)(value + "");\n return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\nfunction parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS("http://www.w3.org/2000/svg", "g");\n svgNode.setAttribute("transform", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/transform/index.js\n\n\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n function pop(s) {\n return s.length ? s.pop() + " " : "";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push("translate(", null, pxComma, null, pxParen);\n q.push({\n i: i - 4,\n x: number(xa, xb)\n }, {\n i: i - 2,\n x: number(ya, yb)\n });\n } else if (xb || yb) {\n s.push("translate(" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360;else if (b - a > 180) a += 360; // shortest path\n\n q.push({\n i: s.push(pop(s) + "rotate(", null, degParen) - 2,\n x: number(a, b)\n });\n } else if (b) {\n s.push(pop(s) + "rotate(" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({\n i: s.push(pop(s) + "skewX(", null, degParen) - 2,\n x: number(a, b)\n });\n } else if (b) {\n s.push(pop(s) + "skewX(" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + "scale(", null, ",", null, ")");\n q.push({\n i: i - 4,\n x: number(xa, xb)\n }, {\n i: i - 2,\n x: number(ya, yb)\n });\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + "scale(" + xb + "," + yb + ")");\n }\n }\n\n return function (a, b) {\n var s = [],\n // string constants and placeholders\n q = []; // number interpolators\n\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n\n return function (t) {\n var i = -1,\n n = q.length,\n o;\n\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n\n return s.join("");\n };\n };\n}\n\nvar interpolateTransformCss = interpolateTransform(parseCss, "px, ", "px)", "deg)");\nvar interpolateTransformSvg = interpolateTransform(parseSvg, ", ", ")", ")");\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/tween.js\n\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function () {\n var schedule = schedule_set(this, id),\n tween = schedule.tween; // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== "function") throw new Error();\n return function () {\n var schedule = schedule_set(this, id),\n tween = schedule.tween; // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n\n for (var t = {\n name: name,\n value: value\n }, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\n/* harmony default export */ function tween(name, value) {\n var id = this._id;\n name += "";\n\n if (arguments.length < 2) {\n var tween = schedule_get(this.node(), id).tween;\n\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\nfunction tweenValue(transition, name, value) {\n var id = transition._id;\n transition.each(function () {\n var schedule = schedule_set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n return function (node) {\n return schedule_get(node, id).value[name];\n };\n}\n;// CONCATENATED MODULE: ./node_modules/d3-color/src/define.js\n/* harmony default export */ function src_define(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\nfunction extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n\n for (var key in definition) prototype[key] = definition[key];\n\n return prototype;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-color/src/color.js\n\nfunction Color() {}\nvar darker = 0.7;\nvar brighter = 1 / darker;\nvar reI = "\\\\s*([+-]?\\\\d+)\\\\s*",\n reN = "\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*",\n reP = "\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp("^rgb\\\\(" + [reI, reI, reI] + "\\\\)$"),\n reRgbPercent = new RegExp("^rgb\\\\(" + [reP, reP, reP] + "\\\\)$"),\n reRgbaInteger = new RegExp("^rgba\\\\(" + [reI, reI, reI, reN] + "\\\\)$"),\n reRgbaPercent = new RegExp("^rgba\\\\(" + [reP, reP, reP, reN] + "\\\\)$"),\n reHslPercent = new RegExp("^hsl\\\\(" + [reN, reP, reP] + "\\\\)$"),\n reHslaPercent = new RegExp("^hsla\\\\(" + [reN, reP, reP, reN] + "\\\\)$");\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\nsrc_define(Color, color, {\n copy: function (channels) {\n return Object.assign(new this.constructor(), this, channels);\n },\n displayable: function () {\n return this.rgb().displayable();\n },\n hex: color_formatHex,\n // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nfunction color(format) {\n var m, l;\n format = (format + "").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb(m >> 8 & 0xf | m >> 4 & 0xf0, m >> 4 & 0xf | m & 0xf0, (m & 0xf) << 4 | m & 0xf, 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba(m >> 12 & 0xf | m >> 8 & 0xf0, m >> 8 & 0xf | m >> 4 & 0xf0, m >> 4 & 0xf | m & 0xf0, ((m & 0xf) << 4 | m & 0xf) / 0xff) // #f000\n : null // invalid hex\n ) : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === "transparent" ? new Rgb(NaN, NaN, NaN, 0) : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nfunction rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb();\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\nfunction color_rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\nfunction Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\nsrc_define(Rgb, color_rgb, extend(Color, {\n brighter: function (k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function (k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function () {\n return this;\n },\n displayable: function () {\n return -0.5 <= this.r && this.r < 255.5 && -0.5 <= this.g && this.g < 255.5 && -0.5 <= this.b && this.b < 255.5 && 0 <= this.opacity && this.opacity <= 1;\n },\n hex: rgb_formatHex,\n // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return "#" + hex(this.r) + hex(this.g) + hex(this.b);\n}\n\nfunction rgb_formatRgb() {\n var a = this.opacity;\n a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? "rgb(" : "rgba(") + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + ", " + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + ", " + Math.max(0, Math.min(255, Math.round(this.b) || 0)) + (a === 1 ? ")" : ", " + a + ")");\n}\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? "0" : "") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;else if (l <= 0 || l >= 1) h = s = NaN;else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nfunction hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl();\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;else if (g === max) h = (b - r) / s + 2;else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n\n return new Hsl(h, s, l, o.opacity);\n}\nfunction hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\nsrc_define(Hsl, hsl, extend(Color, {\n brighter: function (k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function (k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function () {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2), hsl2rgb(h, m1, m2), hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2), this.opacity);\n },\n displayable: function () {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s)) && 0 <= this.l && this.l <= 1 && 0 <= this.opacity && this.opacity <= 1;\n },\n formatHsl: function () {\n var a = this.opacity;\n a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? "hsl(" : "hsla(") + (this.h || 0) + ", " + (this.s || 0) * 100 + "%, " + (this.l || 0) * 100 + "%" + (a === 1 ? ")" : ", " + a + ")");\n }\n}));\n/* From FvD 13.37, CSS Color Module Level 3 */\n\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60 : h < 180 ? m2 : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60 : m1) * 255;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/basis.js\nfunction basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1,\n t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0 + (4 - 6 * t2 + 3 * t3) * v1 + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2 + t3 * v3) / 6;\n}\n/* harmony default export */ function src_basis(values) {\n var n = values.length - 1;\n return function (t) {\n var i = t <= 0 ? t = 0 : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/basisClosed.js\n\n/* harmony default export */ function basisClosed(values) {\n var n = values.length;\n return function (t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/constant.js\n/* harmony default export */ const d3_interpolate_src_constant = (x => () => x);\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/color.js\n\n\nfunction linear(a, d) {\n return function (t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function (t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nfunction hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : d3_interpolate_src_constant(isNaN(a) ? b : a);\n}\nfunction gamma(y) {\n return (y = +y) === 1 ? nogamma : function (a, b) {\n return b - a ? exponential(a, b, y) : d3_interpolate_src_constant(isNaN(a) ? b : a);\n };\n}\nfunction nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : d3_interpolate_src_constant(isNaN(a) ? b : a);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/rgb.js\n\n\n\n\n/* harmony default export */ const rgb = ((function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = color_rgb(start)).r, (end = color_rgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function (t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + "";\n };\n }\n\n rgb.gamma = rgbGamma;\n return rgb;\n})(1));\n\nfunction rgbSpline(spline) {\n return function (colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i,\n color;\n\n for (i = 0; i < n; ++i) {\n color = color_rgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function (t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + "";\n };\n };\n}\n\nvar rgbBasis = rgbSpline(src_basis);\nvar rgbBasisClosed = rgbSpline(basisClosed);\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/string.js\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, "g");\n\nfunction zero(b) {\n return function () {\n return b;\n };\n}\n\nfunction one(b) {\n return function (t) {\n return b(t) + "";\n };\n}\n\n/* harmony default export */ function string(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0,\n // scan index for next number in b\n am,\n // current match in a\n bm,\n // current match in b\n bs,\n // string preceding current number in b, if any\n i = -1,\n // index in s\n s = [],\n // string constants and placeholders\n q = []; // number interpolators\n // Coerce inputs to strings.\n\n a = a + "", b = b + ""; // Interpolate pairs of numbers in a & b.\n\n while ((am = reA.exec(a)) && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) {\n // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n if ((am = am[0]) === (bm = bm[0])) {\n // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else {\n // interpolate non-matching numbers\n s[++i] = null;\n q.push({\n i: i,\n x: number(am, bm)\n });\n }\n\n bi = reB.lastIndex;\n } // Add remains of b.\n\n\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n } // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n\n\n return s.length < 2 ? q[0] ? one(q[0].x) : zero(b) : (b = q.length, function (t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n\n return s.join("");\n });\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/interpolate.js\n\n\n/* harmony default export */ function transition_interpolate(a, b) {\n var c;\n return (typeof b === "number" ? number : b instanceof color ? rgb : (c = color(b)) ? (b = c, rgb) : string)(a, b);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/attr.js\n\n\n\n\n\nfunction attr_attrRemove(name) {\n return function () {\n this.removeAttribute(name);\n };\n}\n\nfunction attr_attrRemoveNS(fullname) {\n return function () {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attr_attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + "",\n interpolate0;\n return function () {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null : string0 === string00 ? interpolate0 : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attr_attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + "",\n interpolate0;\n return function () {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null : string0 === string00 ? interpolate0 : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attr_attrFunction(name, interpolate, value) {\n var string00, string10, interpolate0;\n return function () {\n var string0,\n value1 = value(this),\n string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + "";\n return string0 === string1 ? null : string0 === string00 && string1 === string10 ? interpolate0 : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attr_attrFunctionNS(fullname, interpolate, value) {\n var string00, string10, interpolate0;\n return function () {\n var string0,\n value1 = value(this),\n string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + "";\n return string0 === string1 ? null : string0 === string00 && string1 === string10 ? interpolate0 : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\n/* harmony default export */ function transition_attr(name, value) {\n var fullname = namespace(name),\n i = fullname === "transform" ? interpolateTransformSvg : transition_interpolate;\n return this.attrTween(name, typeof value === "function" ? (fullname.local ? attr_attrFunctionNS : attr_attrFunction)(fullname, i, tweenValue(this, "attr." + name, value)) : value == null ? (fullname.local ? attr_attrRemoveNS : attr_attrRemove)(fullname) : (fullname.local ? attr_attrConstantNS : attr_attrConstant)(fullname, i, value));\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/attrTween.js\n\n\nfunction attrInterpolate(name, i) {\n return function (t) {\n this.setAttribute(name, i.call(this, t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function (t) {\n this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n\n tween._value = value;\n return tween;\n}\n\n/* harmony default export */ function transition_attrTween(name, value) {\n var key = "attr." + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== "function") throw new Error();\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/delay.js\n\n\nfunction delayFunction(id, value) {\n return function () {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function () {\n init(this, id).delay = value;\n };\n}\n\n/* harmony default export */ function delay(value) {\n var id = this._id;\n return arguments.length ? this.each((typeof value === "function" ? delayFunction : delayConstant)(id, value)) : schedule_get(this.node(), id).delay;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/duration.js\n\n\nfunction durationFunction(id, value) {\n return function () {\n schedule_set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function () {\n schedule_set(this, id).duration = value;\n };\n}\n\n/* harmony default export */ function duration(value) {\n var id = this._id;\n return arguments.length ? this.each((typeof value === "function" ? durationFunction : durationConstant)(id, value)) : schedule_get(this.node(), id).duration;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/ease.js\n\n\nfunction easeConstant(id, value) {\n if (typeof value !== "function") throw new Error();\n return function () {\n schedule_set(this, id).ease = value;\n };\n}\n\n/* harmony default export */ function ease(value) {\n var id = this._id;\n return arguments.length ? this.each(easeConstant(id, value)) : schedule_get(this.node(), id).ease;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/easeVarying.js\n\n\nfunction easeVarying(id, value) {\n return function () {\n var v = value.apply(this, arguments);\n if (typeof v !== "function") throw new Error();\n schedule_set(this, id).ease = v;\n };\n}\n\n/* harmony default export */ function transition_easeVarying(value) {\n if (typeof value !== "function") throw new Error();\n return this.each(easeVarying(this._id, value));\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/filter.js\n\n\n/* harmony default export */ function transition_filter(match) {\n if (typeof match !== "function") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/merge.js\n\n/* harmony default export */ function transition_merge(transition) {\n if (transition._id !== this._id) throw new Error();\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/on.js\n\n\nfunction start(name) {\n return (name + "").trim().split(/^|\\s+/).every(function (t) {\n var i = t.indexOf(".");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === "start";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0,\n on1,\n sit = start(name) ? init : schedule_set;\n return function () {\n var schedule = sit(this, id),\n on = schedule.on; // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n schedule.on = on1;\n };\n}\n\n/* harmony default export */ function transition_on(name, listener) {\n var id = this._id;\n return arguments.length < 2 ? schedule_get(this.node(), id).on.on(name) : this.each(onFunction(id, name, listener));\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/remove.js\nfunction removeFunction(id) {\n return function () {\n var parent = this.parentNode;\n\n for (var i in this.__transition) if (+i !== id) return;\n\n if (parent) parent.removeChild(this);\n };\n}\n\n/* harmony default export */ function transition_remove() {\n return this.on("end.remove", removeFunction(this._id));\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/select.js\n\n\n\n/* harmony default export */ function transition_select(select) {\n var name = this._name,\n id = this._id;\n if (typeof select !== "function") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if ("__data__" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, schedule_get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/selectAll.js\n\n\n\n/* harmony default export */ function transition_selectAll(select) {\n var name = this._name,\n id = this._id;\n if (typeof select !== "function") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = schedule_get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/selection.js\n\nvar selection_Selection = src_selection.prototype.constructor;\n/* harmony default export */ function transition_selection() {\n return new selection_Selection(this._groups, this._parents);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/style.js\n\n\n\n\n\n\nfunction styleNull(name, interpolate) {\n var string00, string10, interpolate0;\n return function () {\n var string0 = styleValue(this, name),\n string1 = (this.style.removeProperty(name), styleValue(this, name));\n return string0 === string1 ? null : string0 === string00 && string1 === string10 ? interpolate0 : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction style_styleRemove(name) {\n return function () {\n this.style.removeProperty(name);\n };\n}\n\nfunction style_styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + "",\n interpolate0;\n return function () {\n var string0 = styleValue(this, name);\n return string0 === string1 ? null : string0 === string00 ? interpolate0 : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction style_styleFunction(name, interpolate, value) {\n var string00, string10, interpolate0;\n return function () {\n var string0 = styleValue(this, name),\n value1 = value(this),\n string1 = value1 + "";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), styleValue(this, name));\n return string0 === string1 ? null : string0 === string00 && string1 === string10 ? interpolate0 : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0,\n on1,\n listener0,\n key = "style." + name,\n event = "end." + key,\n remove;\n return function () {\n var schedule = schedule_set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = style_styleRemove(name)) : undefined; // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n schedule.on = on1;\n };\n}\n\n/* harmony default export */ function transition_style(name, value, priority) {\n var i = (name += "") === "transform" ? interpolateTransformCss : transition_interpolate;\n return value == null ? this.styleTween(name, styleNull(name, i)).on("end.style." + name, style_styleRemove(name)) : typeof value === "function" ? this.styleTween(name, style_styleFunction(name, i, tweenValue(this, "style." + name, value))).each(styleMaybeRemove(this._id, name)) : this.styleTween(name, style_styleConstant(name, i, value), priority).on("end.style." + name, null);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/styleTween.js\nfunction styleInterpolate(name, i, priority) {\n return function (t) {\n this.style.setProperty(name, i.call(this, t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n\n tween._value = value;\n return tween;\n}\n\n/* harmony default export */ function transition_styleTween(name, value, priority) {\n var key = "style." + (name += "");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== "function") throw new Error();\n return this.tween(key, styleTween(name, value, priority == null ? "" : priority));\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/text.js\n\n\nfunction text_textConstant(value) {\n return function () {\n this.textContent = value;\n };\n}\n\nfunction text_textFunction(value) {\n return function () {\n var value1 = value(this);\n this.textContent = value1 == null ? "" : value1;\n };\n}\n\n/* harmony default export */ function transition_text(value) {\n return this.tween("text", typeof value === "function" ? text_textFunction(tweenValue(this, "text", value)) : text_textConstant(value == null ? "" : value + ""));\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/textTween.js\nfunction textInterpolate(i) {\n return function (t) {\n this.textContent = i.call(this, t);\n };\n}\n\nfunction textTween(value) {\n var t0, i0;\n\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n return t0;\n }\n\n tween._value = value;\n return tween;\n}\n\n/* harmony default export */ function transition_textTween(value) {\n var key = "text";\n if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== "function") throw new Error();\n return this.tween(key, textTween(value));\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/transition.js\n\n\n/* harmony default export */ function transition() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = schedule_get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/end.js\n\n/* harmony default export */ function end() {\n var on0,\n on1,\n that = this,\n id = that._id,\n size = that.size();\n return new Promise(function (resolve, reject) {\n var cancel = {\n value: reject\n },\n end = {\n value: function () {\n if (--size === 0) resolve();\n }\n };\n that.each(function () {\n var schedule = schedule_set(this, id),\n on = schedule.on; // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n\n if (on !== on0) {\n on1 = (on0 = on).copy();\n\n on1._.cancel.push(cancel);\n\n on1._.interrupt.push(cancel);\n\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n }); // The selection was empty, resolve end immediately\n\n if (size === 0) resolve();\n });\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/index.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar id = 0;\nfunction Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\nfunction transition_transition(name) {\n return src_selection().transition(name);\n}\nfunction newId() {\n return ++id;\n}\nvar selection_prototype = src_selection.prototype;\nTransition.prototype = transition_transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n selectChild: selection_prototype.selectChild,\n selectChildren: selection_prototype.selectChildren,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n textTween: transition_textTween,\n remove: transition_remove,\n tween: tween,\n delay: delay,\n duration: duration,\n ease: ease,\n easeVarying: transition_easeVarying,\n end: end,\n [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n;// CONCATENATED MODULE: ./node_modules/d3-ease/src/cubic.js\nfunction cubicIn(t) {\n return t * t * t;\n}\nfunction cubicOut(t) {\n return --t * t * t + 1;\n}\nfunction cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/selection/transition.js\n\n\n\n\nvar defaultTiming = {\n time: null,\n // Set on use.\n delay: 0,\n duration: 250,\n ease: cubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n throw new Error(`transition ${id} not found`);\n }\n }\n\n return timing;\n}\n\n/* harmony default export */ function selection_transition(name) {\n var id, timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + "";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/selection/index.js\n\n\n\nsrc_selection.prototype.interrupt = selection_interrupt;\nsrc_selection.prototype.transition = selection_transition;\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/index.js\n\n\n\n\n;// CONCATENATED MODULE: ./node_modules/d3-brush/src/brush.js\n\n\n\n\n\n\n\n\nvar MODE_DRAG = {\n name: "drag"\n},\n MODE_SPACE = {\n name: "space"\n},\n MODE_HANDLE = {\n name: "handle"\n},\n MODE_CENTER = {\n name: "center"\n};\nconst {\n abs,\n max,\n min\n} = Math;\n\nfunction number1(e) {\n return [+e[0], +e[1]];\n}\n\nfunction number2(e) {\n return [number1(e[0]), number1(e[1])];\n}\n\nvar X = {\n name: "x",\n handles: ["w", "e"].map(type),\n input: function (x, e) {\n return x == null ? null : [[+x[0], e[0][1]], [+x[1], e[1][1]]];\n },\n output: function (xy) {\n return xy && [xy[0][0], xy[1][0]];\n }\n};\nvar Y = {\n name: "y",\n handles: ["n", "s"].map(type),\n input: function (y, e) {\n return y == null ? null : [[e[0][0], +y[0]], [e[1][0], +y[1]]];\n },\n output: function (xy) {\n return xy && [xy[0][1], xy[1][1]];\n }\n};\nvar XY = {\n name: "xy",\n handles: ["n", "w", "e", "s", "nw", "ne", "sw", "se"].map(type),\n input: function (xy) {\n return xy == null ? null : number2(xy);\n },\n output: function (xy) {\n return xy;\n }\n};\nvar cursors = {\n overlay: "crosshair",\n selection: "move",\n n: "ns-resize",\n e: "ew-resize",\n s: "ns-resize",\n w: "ew-resize",\n nw: "nwse-resize",\n ne: "nesw-resize",\n se: "nwse-resize",\n sw: "nesw-resize"\n};\nvar flipX = {\n e: "w",\n w: "e",\n nw: "ne",\n ne: "nw",\n se: "sw",\n sw: "se"\n};\nvar flipY = {\n n: "s",\n s: "n",\n nw: "sw",\n ne: "se",\n se: "ne",\n sw: "nw"\n};\nvar signsX = {\n overlay: +1,\n selection: +1,\n n: null,\n e: +1,\n s: null,\n w: -1,\n nw: -1,\n ne: +1,\n se: +1,\n sw: -1\n};\nvar signsY = {\n overlay: +1,\n selection: +1,\n n: -1,\n e: null,\n s: +1,\n w: null,\n nw: -1,\n ne: -1,\n se: +1,\n sw: +1\n};\n\nfunction type(t) {\n return {\n type: t\n };\n} // Ignore right-click, since that should open the context menu.\n\n\nfunction defaultFilter(event) {\n return !event.ctrlKey && !event.button;\n}\n\nfunction defaultExtent() {\n var svg = this.ownerSVGElement || this;\n\n if (svg.hasAttribute("viewBox")) {\n svg = svg.viewBox.baseVal;\n return [[svg.x, svg.y], [svg.x + svg.width, svg.y + svg.height]];\n }\n\n return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || "ontouchstart" in this;\n} // Like d3.local, but with the name “__brush” rather than auto-generated.\n\n\nfunction local(node) {\n while (!node.__brush) if (!(node = node.parentNode)) return;\n\n return node.__brush;\n}\n\nfunction brush_empty(extent) {\n return extent[0][0] === extent[1][0] || extent[0][1] === extent[1][1];\n}\n\nfunction brushSelection(node) {\n var state = node.__brush;\n return state ? state.dim.output(state.selection) : null;\n}\nfunction brushX() {\n return brush_brush(X);\n}\nfunction brushY() {\n return brush_brush(Y);\n}\n/* harmony default export */ function brush() {\n return brush_brush(XY);\n}\n\nfunction brush_brush(dim) {\n var extent = defaultExtent,\n filter = defaultFilter,\n touchable = defaultTouchable,\n keys = true,\n listeners = dispatch("start", "brush", "end"),\n handleSize = 6,\n touchending;\n\n function brush(group) {\n var overlay = group.property("__brush", initialize).selectAll(".overlay").data([type("overlay")]);\n overlay.enter().append("rect").attr("class", "overlay").attr("pointer-events", "all").attr("cursor", cursors.overlay).merge(overlay).each(function () {\n var extent = local(this).extent;\n select(this).attr("x", extent[0][0]).attr("y", extent[0][1]).attr("width", extent[1][0] - extent[0][0]).attr("height", extent[1][1] - extent[0][1]);\n });\n group.selectAll(".selection").data([type("selection")]).enter().append("rect").attr("class", "selection").attr("cursor", cursors.selection).attr("fill", "#777").attr("fill-opacity", 0.3).attr("stroke", "#fff").attr("shape-rendering", "crispEdges");\n var handle = group.selectAll(".handle").data(dim.handles, function (d) {\n return d.type;\n });\n handle.exit().remove();\n handle.enter().append("rect").attr("class", function (d) {\n return "handle handle--" + d.type;\n }).attr("cursor", function (d) {\n return cursors[d.type];\n });\n group.each(redraw).attr("fill", "none").attr("pointer-events", "all").on("mousedown.brush", started).filter(touchable).on("touchstart.brush", started).on("touchmove.brush", touchmoved).on("touchend.brush touchcancel.brush", touchended).style("touch-action", "none").style("-webkit-tap-highlight-color", "rgba(0,0,0,0)");\n }\n\n brush.move = function (group, selection, event) {\n if (group.tween) {\n group.on("start.brush", function (event) {\n emitter(this, arguments).beforestart().start(event);\n }).on("interrupt.brush end.brush", function (event) {\n emitter(this, arguments).end(event);\n }).tween("brush", function () {\n var that = this,\n state = that.__brush,\n emit = emitter(that, arguments),\n selection0 = state.selection,\n selection1 = dim.input(typeof selection === "function" ? selection.apply(this, arguments) : selection, state.extent),\n i = interpolate(selection0, selection1);\n\n function tween(t) {\n state.selection = t === 1 && selection1 === null ? null : i(t);\n redraw.call(that);\n emit.brush();\n }\n\n return selection0 !== null && selection1 !== null ? tween : tween(1);\n });\n } else {\n group.each(function () {\n var that = this,\n args = arguments,\n state = that.__brush,\n selection1 = dim.input(typeof selection === "function" ? selection.apply(that, args) : selection, state.extent),\n emit = emitter(that, args).beforestart();\n interrupt(that);\n state.selection = selection1 === null ? null : selection1;\n redraw.call(that);\n emit.start(event).brush(event).end(event);\n });\n }\n };\n\n brush.clear = function (group, event) {\n brush.move(group, null, event);\n };\n\n function redraw() {\n var group = select(this),\n selection = local(this).selection;\n\n if (selection) {\n group.selectAll(".selection").style("display", null).attr("x", selection[0][0]).attr("y", selection[0][1]).attr("width", selection[1][0] - selection[0][0]).attr("height", selection[1][1] - selection[0][1]);\n group.selectAll(".handle").style("display", null).attr("x", function (d) {\n return d.type[d.type.length - 1] === "e" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2;\n }).attr("y", function (d) {\n return d.type[0] === "s" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2;\n }).attr("width", function (d) {\n return d.type === "n" || d.type === "s" ? selection[1][0] - selection[0][0] + handleSize : handleSize;\n }).attr("height", function (d) {\n return d.type === "e" || d.type === "w" ? selection[1][1] - selection[0][1] + handleSize : handleSize;\n });\n } else {\n group.selectAll(".selection,.handle").style("display", "none").attr("x", null).attr("y", null).attr("width", null).attr("height", null);\n }\n }\n\n function emitter(that, args, clean) {\n var emit = that.__brush.emitter;\n return emit && (!clean || !emit.clean) ? emit : new Emitter(that, args, clean);\n }\n\n function Emitter(that, args, clean) {\n this.that = that;\n this.args = args;\n this.state = that.__brush;\n this.active = 0;\n this.clean = clean;\n }\n\n Emitter.prototype = {\n beforestart: function () {\n if (++this.active === 1) this.state.emitter = this, this.starting = true;\n return this;\n },\n start: function (event, mode) {\n if (this.starting) this.starting = false, this.emit("start", event, mode);else this.emit("brush", event);\n return this;\n },\n brush: function (event, mode) {\n this.emit("brush", event, mode);\n return this;\n },\n end: function (event, mode) {\n if (--this.active === 0) delete this.state.emitter, this.emit("end", event, mode);\n return this;\n },\n emit: function (type, event, mode) {\n var d = select(this.that).datum();\n listeners.call(type, this.that, new BrushEvent(type, {\n sourceEvent: event,\n target: brush,\n selection: dim.output(this.state.selection),\n mode,\n dispatch: listeners\n }), d);\n }\n };\n\n function started(event) {\n if (touchending && !event.touches) return;\n if (!filter.apply(this, arguments)) return;\n var that = this,\n type = event.target.__data__.type,\n mode = (keys && event.metaKey ? type = "overlay" : type) === "selection" ? MODE_DRAG : keys && event.altKey ? MODE_CENTER : MODE_HANDLE,\n signX = dim === Y ? null : signsX[type],\n signY = dim === X ? null : signsY[type],\n state = local(that),\n extent = state.extent,\n selection = state.selection,\n W = extent[0][0],\n w0,\n w1,\n N = extent[0][1],\n n0,\n n1,\n E = extent[1][0],\n e0,\n e1,\n S = extent[1][1],\n s0,\n s1,\n dx = 0,\n dy = 0,\n moving,\n shifting = signX && signY && keys && event.shiftKey,\n lockX,\n lockY,\n points = Array.from(event.touches || [event], t => {\n const i = t.identifier;\n t = pointer(t, that);\n t.point0 = t.slice();\n t.identifier = i;\n return t;\n });\n interrupt(that);\n var emit = emitter(that, arguments, true).beforestart();\n\n if (type === "overlay") {\n if (selection) moving = true;\n const pts = [points[0], points[1] || points[0]];\n state.selection = selection = [[w0 = dim === Y ? W : min(pts[0][0], pts[1][0]), n0 = dim === X ? N : min(pts[0][1], pts[1][1])], [e0 = dim === Y ? E : max(pts[0][0], pts[1][0]), s0 = dim === X ? S : max(pts[0][1], pts[1][1])]];\n if (points.length > 1) move(event);\n } else {\n w0 = selection[0][0];\n n0 = selection[0][1];\n e0 = selection[1][0];\n s0 = selection[1][1];\n }\n\n w1 = w0;\n n1 = n0;\n e1 = e0;\n s1 = s0;\n var group = select(that).attr("pointer-events", "none");\n var overlay = group.selectAll(".overlay").attr("cursor", cursors[type]);\n\n if (event.touches) {\n emit.moved = moved;\n emit.ended = ended;\n } else {\n var view = select(event.view).on("mousemove.brush", moved, true).on("mouseup.brush", ended, true);\n if (keys) view.on("keydown.brush", keydowned, true).on("keyup.brush", keyupped, true);\n dragDisable(event.view);\n }\n\n redraw.call(that);\n emit.start(event, mode.name);\n\n function moved(event) {\n for (const p of event.changedTouches || [event]) {\n for (const d of points) if (d.identifier === p.identifier) d.cur = pointer(p, that);\n }\n\n if (shifting && !lockX && !lockY && points.length === 1) {\n const point = points[0];\n if (abs(point.cur[0] - point[0]) > abs(point.cur[1] - point[1])) lockY = true;else lockX = true;\n }\n\n for (const point of points) if (point.cur) point[0] = point.cur[0], point[1] = point.cur[1];\n\n moving = true;\n noevent(event);\n move(event);\n }\n\n function move(event) {\n const point = points[0],\n point0 = point.point0;\n var t;\n dx = point[0] - point0[0];\n dy = point[1] - point0[1];\n\n switch (mode) {\n case MODE_SPACE:\n case MODE_DRAG:\n {\n if (signX) dx = max(W - w0, min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;\n if (signY) dy = max(N - n0, min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;\n break;\n }\n\n case MODE_HANDLE:\n {\n if (points[1]) {\n if (signX) w1 = max(W, min(E, points[0][0])), e1 = max(W, min(E, points[1][0])), signX = 1;\n if (signY) n1 = max(N, min(S, points[0][1])), s1 = max(N, min(S, points[1][1])), signY = 1;\n } else {\n if (signX < 0) dx = max(W - w0, min(E - w0, dx)), w1 = w0 + dx, e1 = e0;else if (signX > 0) dx = max(W - e0, min(E - e0, dx)), w1 = w0, e1 = e0 + dx;\n if (signY < 0) dy = max(N - n0, min(S - n0, dy)), n1 = n0 + dy, s1 = s0;else if (signY > 0) dy = max(N - s0, min(S - s0, dy)), n1 = n0, s1 = s0 + dy;\n }\n\n break;\n }\n\n case MODE_CENTER:\n {\n if (signX) w1 = max(W, min(E, w0 - dx * signX)), e1 = max(W, min(E, e0 + dx * signX));\n if (signY) n1 = max(N, min(S, n0 - dy * signY)), s1 = max(N, min(S, s0 + dy * signY));\n break;\n }\n }\n\n if (e1 < w1) {\n signX *= -1;\n t = w0, w0 = e0, e0 = t;\n t = w1, w1 = e1, e1 = t;\n if (type in flipX) overlay.attr("cursor", cursors[type = flipX[type]]);\n }\n\n if (s1 < n1) {\n signY *= -1;\n t = n0, n0 = s0, s0 = t;\n t = n1, n1 = s1, s1 = t;\n if (type in flipY) overlay.attr("cursor", cursors[type = flipY[type]]);\n }\n\n if (state.selection) selection = state.selection; // May be set by brush.move!\n\n if (lockX) w1 = selection[0][0], e1 = selection[1][0];\n if (lockY) n1 = selection[0][1], s1 = selection[1][1];\n\n if (selection[0][0] !== w1 || selection[0][1] !== n1 || selection[1][0] !== e1 || selection[1][1] !== s1) {\n state.selection = [[w1, n1], [e1, s1]];\n redraw.call(that);\n emit.brush(event, mode.name);\n }\n }\n\n function ended(event) {\n nopropagation(event);\n\n if (event.touches) {\n if (event.touches.length) return;\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function () {\n touchending = null;\n }, 500); // Ghost clicks are delayed!\n } else {\n dragEnable(event.view, moving);\n view.on("keydown.brush keyup.brush mousemove.brush mouseup.brush", null);\n }\n\n group.attr("pointer-events", "all");\n overlay.attr("cursor", cursors.overlay);\n if (state.selection) selection = state.selection; // May be set by brush.move (on start)!\n\n if (brush_empty(selection)) state.selection = null, redraw.call(that);\n emit.end(event, mode.name);\n }\n\n function keydowned(event) {\n switch (event.keyCode) {\n case 16:\n {\n // SHIFT\n shifting = signX && signY;\n break;\n }\n\n case 18:\n {\n // ALT\n if (mode === MODE_HANDLE) {\n if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n mode = MODE_CENTER;\n move(event);\n }\n\n break;\n }\n\n case 32:\n {\n // SPACE; takes priority over ALT\n if (mode === MODE_HANDLE || mode === MODE_CENTER) {\n if (signX < 0) e0 = e1 - dx;else if (signX > 0) w0 = w1 - dx;\n if (signY < 0) s0 = s1 - dy;else if (signY > 0) n0 = n1 - dy;\n mode = MODE_SPACE;\n overlay.attr("cursor", cursors.selection);\n move(event);\n }\n\n break;\n }\n\n default:\n return;\n }\n\n noevent(event);\n }\n\n function keyupped(event) {\n switch (event.keyCode) {\n case 16:\n {\n // SHIFT\n if (shifting) {\n lockX = lockY = shifting = false;\n move(event);\n }\n\n break;\n }\n\n case 18:\n {\n // ALT\n if (mode === MODE_CENTER) {\n if (signX < 0) e0 = e1;else if (signX > 0) w0 = w1;\n if (signY < 0) s0 = s1;else if (signY > 0) n0 = n1;\n mode = MODE_HANDLE;\n move(event);\n }\n\n break;\n }\n\n case 32:\n {\n // SPACE\n if (mode === MODE_SPACE) {\n if (event.altKey) {\n if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n mode = MODE_CENTER;\n } else {\n if (signX < 0) e0 = e1;else if (signX > 0) w0 = w1;\n if (signY < 0) s0 = s1;else if (signY > 0) n0 = n1;\n mode = MODE_HANDLE;\n }\n\n overlay.attr("cursor", cursors[type]);\n move(event);\n }\n\n break;\n }\n\n default:\n return;\n }\n\n noevent(event);\n }\n }\n\n function touchmoved(event) {\n emitter(this, arguments).moved(event);\n }\n\n function touchended(event) {\n emitter(this, arguments).ended(event);\n }\n\n function initialize() {\n var state = this.__brush || {\n selection: null\n };\n state.extent = number2(extent.apply(this, arguments));\n state.dim = dim;\n return state;\n }\n\n brush.extent = function (_) {\n return arguments.length ? (extent = typeof _ === "function" ? _ : constant(number2(_)), brush) : extent;\n };\n\n brush.filter = function (_) {\n return arguments.length ? (filter = typeof _ === "function" ? _ : constant(!!_), brush) : filter;\n };\n\n brush.touchable = function (_) {\n return arguments.length ? (touchable = typeof _ === "function" ? _ : constant(!!_), brush) : touchable;\n };\n\n brush.handleSize = function (_) {\n return arguments.length ? (handleSize = +_, brush) : handleSize;\n };\n\n brush.keyModifiers = function (_) {\n return arguments.length ? (keys = !!_, brush) : keys;\n };\n\n brush.on = function () {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? brush : value;\n };\n\n return brush;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-brush/src/index.js\n\n;// CONCATENATED MODULE: ./node_modules/d3-color/src/index.js\n\n\n\n;// CONCATENATED MODULE: ./node_modules/d3-ease/src/index.js\n\n\n\n\n\n\n\n\n\n\n;// CONCATENATED MODULE: ./node_modules/d3-fetch/src/json.js\nfunction responseJson(response) {\n if (!response.ok) throw new Error(response.status + " " + response.statusText);\n if (response.status === 204 || response.status === 205) return;\n return response.json();\n}\n\n/* harmony default export */ function json(input, init) {\n return fetch(input, init).then(responseJson);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-fetch/src/index.js\n\n\n\n\n\n\n\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/accessors.js\nfunction optional(f) {\n return f == null ? null : required(f);\n}\nfunction required(f) {\n if (typeof f !== "function") throw new Error();\n return f;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/hierarchy/count.js\nfunction count(node) {\n var sum = 0,\n children = node.children,\n i = children && children.length;\n if (!i) sum = 1;else while (--i >= 0) sum += children[i].value;\n node.value = sum;\n}\n\n/* harmony default export */ function hierarchy_count() {\n return this.eachAfter(count);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/hierarchy/each.js\n/* harmony default export */ function hierarchy_each(callback, that) {\n let index = -1;\n\n for (const node of this) {\n callback.call(that, node, ++index, this);\n }\n\n return this;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/hierarchy/eachBefore.js\n/* harmony default export */ function eachBefore(callback, that) {\n var node = this,\n nodes = [node],\n children,\n i,\n index = -1;\n\n while (node = nodes.pop()) {\n callback.call(that, node, ++index, this);\n\n if (children = node.children) {\n for (i = children.length - 1; i >= 0; --i) {\n nodes.push(children[i]);\n }\n }\n }\n\n return this;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/hierarchy/eachAfter.js\n/* harmony default export */ function eachAfter(callback, that) {\n var node = this,\n nodes = [node],\n next = [],\n children,\n i,\n n,\n index = -1;\n\n while (node = nodes.pop()) {\n next.push(node);\n\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n nodes.push(children[i]);\n }\n }\n }\n\n while (node = next.pop()) {\n callback.call(that, node, ++index, this);\n }\n\n return this;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/hierarchy/find.js\n/* harmony default export */ function hierarchy_find(callback, that) {\n let index = -1;\n\n for (const node of this) {\n if (callback.call(that, node, ++index, this)) {\n return node;\n }\n }\n}\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/hierarchy/sum.js\n/* harmony default export */ function sum(value) {\n return this.eachAfter(function (node) {\n var sum = +value(node.data) || 0,\n children = node.children,\n i = children && children.length;\n\n while (--i >= 0) sum += children[i].value;\n\n node.value = sum;\n });\n}\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/hierarchy/sort.js\n/* harmony default export */ function hierarchy_sort(compare) {\n return this.eachBefore(function (node) {\n if (node.children) {\n node.children.sort(compare);\n }\n });\n}\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/hierarchy/path.js\n/* harmony default export */ function path(end) {\n var start = this,\n ancestor = leastCommonAncestor(start, end),\n nodes = [start];\n\n while (start !== ancestor) {\n start = start.parent;\n nodes.push(start);\n }\n\n var k = nodes.length;\n\n while (end !== ancestor) {\n nodes.splice(k, 0, end);\n end = end.parent;\n }\n\n return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = a.ancestors(),\n bNodes = b.ancestors(),\n c = null;\n a = aNodes.pop();\n b = bNodes.pop();\n\n while (a === b) {\n c = a;\n a = aNodes.pop();\n b = bNodes.pop();\n }\n\n return c;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/hierarchy/ancestors.js\n/* harmony default export */ function ancestors() {\n var node = this,\n nodes = [node];\n\n while (node = node.parent) {\n nodes.push(node);\n }\n\n return nodes;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/hierarchy/descendants.js\n/* harmony default export */ function descendants() {\n return Array.from(this);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/hierarchy/leaves.js\n/* harmony default export */ function leaves() {\n var leaves = [];\n this.eachBefore(function (node) {\n if (!node.children) {\n leaves.push(node);\n }\n });\n return leaves;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/hierarchy/links.js\n/* harmony default export */ function links() {\n var root = this,\n links = [];\n root.each(function (node) {\n if (node !== root) {\n // Don’t include the root’s parent, if any.\n links.push({\n source: node.parent,\n target: node\n });\n }\n });\n return links;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/hierarchy/iterator.js\n/* harmony default export */ function* hierarchy_iterator() {\n var node = this,\n current,\n next = [node],\n children,\n i,\n n;\n\n do {\n current = next.reverse(), next = [];\n\n while (node = current.pop()) {\n yield node;\n\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n next.push(children[i]);\n }\n }\n }\n } while (next.length);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/hierarchy/index.js\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction hierarchy(data, children) {\n if (data instanceof Map) {\n data = [undefined, data];\n if (children === undefined) children = mapChildren;\n } else if (children === undefined) {\n children = objectChildren;\n }\n\n var root = new Node(data),\n node,\n nodes = [root],\n child,\n childs,\n i,\n n;\n\n while (node = nodes.pop()) {\n if ((childs = children(node.data)) && (n = (childs = Array.from(childs)).length)) {\n node.children = childs;\n\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = childs[i] = new Node(childs[i]));\n child.parent = node;\n child.depth = node.depth + 1;\n }\n }\n }\n\n return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n return hierarchy(this).eachBefore(copyData);\n}\n\nfunction objectChildren(d) {\n return d.children;\n}\n\nfunction mapChildren(d) {\n return Array.isArray(d) ? d[1] : null;\n}\n\nfunction copyData(node) {\n if (node.data.value !== undefined) node.value = node.data.value;\n node.data = node.data.data;\n}\n\nfunction computeHeight(node) {\n var height = 0;\n\n do node.height = height; while ((node = node.parent) && node.height < ++height);\n}\nfunction Node(data) {\n this.data = data;\n this.depth = this.height = 0;\n this.parent = null;\n}\nNode.prototype = hierarchy.prototype = {\n constructor: Node,\n count: hierarchy_count,\n each: hierarchy_each,\n eachAfter: eachAfter,\n eachBefore: eachBefore,\n find: hierarchy_find,\n sum: sum,\n sort: hierarchy_sort,\n path: path,\n ancestors: ancestors,\n descendants: descendants,\n leaves: leaves,\n links: links,\n copy: node_copy,\n [Symbol.iterator]: hierarchy_iterator\n};\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/stratify.js\n\n\nvar preroot = {\n depth: -1\n},\n ambiguous = {},\n imputed = {};\n\nfunction defaultId(d) {\n return d.id;\n}\n\nfunction defaultParentId(d) {\n return d.parentId;\n}\n\n/* harmony default export */ function stratify() {\n var id = defaultId,\n parentId = defaultParentId,\n path;\n\n function stratify(data) {\n var nodes = Array.from(data),\n currentId = id,\n currentParentId = parentId,\n n,\n d,\n i,\n root,\n parent,\n node,\n nodeId,\n nodeKey,\n nodeByKey = new Map();\n\n if (path != null) {\n const I = nodes.map((d, i) => normalize(path(d, i, data)));\n const P = I.map(parentof);\n const S = new Set(I).add("");\n\n for (const i of P) {\n if (!S.has(i)) {\n S.add(i);\n I.push(i);\n P.push(parentof(i));\n nodes.push(imputed);\n }\n }\n\n currentId = (_, i) => I[i];\n\n currentParentId = (_, i) => P[i];\n }\n\n for (i = 0, n = nodes.length; i < n; ++i) {\n d = nodes[i], node = nodes[i] = new Node(d);\n\n if ((nodeId = currentId(d, i, data)) != null && (nodeId += "")) {\n nodeKey = node.id = nodeId;\n nodeByKey.set(nodeKey, nodeByKey.has(nodeKey) ? ambiguous : node);\n }\n\n if ((nodeId = currentParentId(d, i, data)) != null && (nodeId += "")) {\n node.parent = nodeId;\n }\n }\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n\n if (nodeId = node.parent) {\n parent = nodeByKey.get(nodeId);\n if (!parent) throw new Error("missing: " + nodeId);\n if (parent === ambiguous) throw new Error("ambiguous: " + nodeId);\n if (parent.children) parent.children.push(node);else parent.children = [node];\n node.parent = parent;\n } else {\n if (root) throw new Error("multiple roots");\n root = node;\n }\n }\n\n if (!root) throw new Error("no root"); // When imputing internal nodes, only introduce roots if needed.\n // Then replace the imputed marker data with null.\n\n if (path != null) {\n while (root.data === imputed && root.children.length === 1) {\n root = root.children[0], --n;\n }\n\n for (let i = nodes.length - 1; i >= 0; --i) {\n node = nodes[i];\n if (node.data !== imputed) break;\n node.data = null;\n }\n }\n\n root.parent = preroot;\n root.eachBefore(function (node) {\n node.depth = node.parent.depth + 1;\n --n;\n }).eachBefore(computeHeight);\n root.parent = null;\n if (n > 0) throw new Error("cycle");\n return root;\n }\n\n stratify.id = function (x) {\n return arguments.length ? (id = optional(x), stratify) : id;\n };\n\n stratify.parentId = function (x) {\n return arguments.length ? (parentId = optional(x), stratify) : parentId;\n };\n\n stratify.path = function (x) {\n return arguments.length ? (path = optional(x), stratify) : path;\n };\n\n return stratify;\n} // To normalize a path, we coerce to a string, strip the trailing slash if any\n// (as long as the trailing slash is not immediately preceded by another slash),\n// and add leading slash if missing.\n\nfunction normalize(path) {\n path = `${path}`;\n let i = path.length;\n if (slash(path, i - 1) && !slash(path, i - 2)) path = path.slice(0, -1);\n return path[0] === "/" ? path : `/${path}`;\n} // Walk backwards to find the first slash that is not the leading slash, e.g.:\n// "/foo/bar" ⇥ "/foo", "/foo" ⇥ "/", "/" ↦ "". (The root is special-cased\n// because the id of the root must be a truthy value.)\n\n\nfunction parentof(path) {\n let i = path.length;\n if (i < 2) return "";\n\n while (--i > 1) if (slash(path, i)) break;\n\n return path.slice(0, i);\n} // Slashes can be escaped; to determine whether a slash is a path delimiter, we\n// count the number of preceding backslashes escaping the forward slash: an odd\n// number indicates an escaped forward slash.\n\n\nfunction slash(path, i) {\n if (path[i] === "/") {\n let k = 0;\n\n while (i > 0 && path[--i] === "\\\\") ++k;\n\n if ((k & 1) === 0) return true;\n }\n\n return false;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/tree.js\n\n\nfunction defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n} // function radialSeparation(a, b) {\n// return (a.parent === b.parent ? 1 : 2) / a.depth;\n// }\n// This function is used to traverse the left contour of a subtree (or\n// subforest). It returns the successor of v on this contour. This successor is\n// either given by the leftmost child of v or by the thread of v. The function\n// returns null if and only if v is on the highest level of its subtree.\n\n\nfunction nextLeft(v) {\n var children = v.children;\n return children ? children[0] : v.t;\n} // This function works analogously to nextLeft.\n\n\nfunction nextRight(v) {\n var children = v.children;\n return children ? children[children.length - 1] : v.t;\n} // Shifts the current subtree rooted at w+. This is done by increasing\n// prelim(w+) and mod(w+) by shift.\n\n\nfunction moveSubtree(wm, wp, shift) {\n var change = shift / (wp.i - wm.i);\n wp.c -= change;\n wp.s += shift;\n wm.c += change;\n wp.z += shift;\n wp.m += shift;\n} // All other shifts, applied to the smaller subtrees between w- and w+, are\n// performed by this function. To prepare the shifts, we have to adjust\n// change(w+), shift(w+), and change(w-).\n\n\nfunction executeShifts(v) {\n var shift = 0,\n change = 0,\n children = v.children,\n i = children.length,\n w;\n\n while (--i >= 0) {\n w = children[i];\n w.z += shift;\n w.m += shift;\n shift += w.s + (change += w.c);\n }\n} // If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,\n// returns the specified (default) ancestor.\n\n\nfunction nextAncestor(vim, v, ancestor) {\n return vim.a.parent === v.parent ? vim.a : ancestor;\n}\n\nfunction TreeNode(node, i) {\n this._ = node;\n this.parent = null;\n this.children = null;\n this.A = null; // default ancestor\n\n this.a = this; // ancestor\n\n this.z = 0; // prelim\n\n this.m = 0; // mod\n\n this.c = 0; // change\n\n this.s = 0; // shift\n\n this.t = null; // thread\n\n this.i = i; // number\n}\n\nTreeNode.prototype = Object.create(Node.prototype);\n\nfunction treeRoot(root) {\n var tree = new TreeNode(root, 0),\n node,\n nodes = [tree],\n child,\n children,\n i,\n n;\n\n while (node = nodes.pop()) {\n if (children = node._.children) {\n node.children = new Array(n = children.length);\n\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new TreeNode(children[i], i));\n child.parent = node;\n }\n }\n }\n\n (tree.parent = new TreeNode(null, 0)).children = [tree];\n return tree;\n} // Node-link tree diagram using the Reingold-Tilford "tidy" algorithm\n\n\n/* harmony default export */ function src_tree() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = null;\n\n function tree(root) {\n var t = treeRoot(root); // Compute the layout using Buchheim et al.’s algorithm.\n\n t.eachAfter(firstWalk), t.parent.m = -t.z;\n t.eachBefore(secondWalk); // If a fixed node size is specified, scale x and y.\n\n if (nodeSize) root.eachBefore(sizeNode); // If a fixed tree size is specified, scale x and y based on the extent.\n // Compute the left-most, right-most, and depth-most nodes for extents.\n else {\n var left = root,\n right = root,\n bottom = root;\n root.eachBefore(function (node) {\n if (node.x < left.x) left = node;\n if (node.x > right.x) right = node;\n if (node.depth > bottom.depth) bottom = node;\n });\n var s = left === right ? 1 : separation(left, right) / 2,\n tx = s - left.x,\n kx = dx / (right.x + s + tx),\n ky = dy / (bottom.depth || 1);\n root.eachBefore(function (node) {\n node.x = (node.x + tx) * kx;\n node.y = node.depth * ky;\n });\n }\n return root;\n } // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is\n // applied recursively to the children of v, as well as the function\n // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the\n // node v is placed to the midpoint of its outermost children.\n\n\n function firstWalk(v) {\n var children = v.children,\n siblings = v.parent.children,\n w = v.i ? siblings[v.i - 1] : null;\n\n if (children) {\n executeShifts(v);\n var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n\n if (w) {\n v.z = w.z + separation(v._, w._);\n v.m = v.z - midpoint;\n } else {\n v.z = midpoint;\n }\n } else if (w) {\n v.z = w.z + separation(v._, w._);\n }\n\n v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n } // Computes all real x-coordinates by summing up the modifiers recursively.\n\n\n function secondWalk(v) {\n v._.x = v.z + v.parent.m;\n v.m += v.parent.m;\n } // The core of the algorithm. Here, a new subtree is combined with the\n // previous subtrees. Threads are used to traverse the inside and outside\n // contours of the left and right subtree up to the highest common level. The\n // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the\n // superscript o means outside and i means inside, the subscript - means left\n // subtree and + means right subtree. For summing up the modifiers along the\n // contour, we use respective variables si+, si-, so-, and so+. Whenever two\n // nodes of the inside contours conflict, we compute the left one of the\n // greatest uncommon ancestors using the function ANCESTOR and call MOVE\n // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.\n // Finally, we add a new thread (if necessary).\n\n\n function apportion(v, w, ancestor) {\n if (w) {\n var vip = v,\n vop = v,\n vim = w,\n vom = vip.parent.children[0],\n sip = vip.m,\n sop = vop.m,\n sim = vim.m,\n som = vom.m,\n shift;\n\n while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {\n vom = nextLeft(vom);\n vop = nextRight(vop);\n vop.a = v;\n shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n\n if (shift > 0) {\n moveSubtree(nextAncestor(vim, v, ancestor), v, shift);\n sip += shift;\n sop += shift;\n }\n\n sim += vim.m;\n sip += vip.m;\n som += vom.m;\n sop += vop.m;\n }\n\n if (vim && !nextRight(vop)) {\n vop.t = vim;\n vop.m += sim - sop;\n }\n\n if (vip && !nextLeft(vom)) {\n vom.t = vip;\n vom.m += sip - som;\n ancestor = v;\n }\n }\n\n return ancestor;\n }\n\n function sizeNode(node) {\n node.x *= dx;\n node.y = node.depth * dy;\n }\n\n tree.separation = function (x) {\n return arguments.length ? (separation = x, tree) : separation;\n };\n\n tree.size = function (x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : nodeSize ? null : [dx, dy];\n };\n\n tree.nodeSize = function (x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : nodeSize ? [dx, dy] : null;\n };\n\n return tree;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/index.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n;// CONCATENATED MODULE: ./node_modules/d3-array/src/ticks.js\nvar e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\nfunction ticks(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n let r0 = Math.round(start / step),\n r1 = Math.round(stop / step);\n if (r0 * step < start) ++r0;\n if (r1 * step > stop) --r1;\n ticks = new Array(n = r1 - r0 + 1);\n\n while (++i < n) ticks[i] = (r0 + i) * step;\n } else {\n step = -step;\n let r0 = Math.round(start * step),\n r1 = Math.round(stop * step);\n if (r0 / step < start) ++r0;\n if (r1 / step > stop) --r1;\n ticks = new Array(n = r1 - r0 + 1);\n\n while (++i < n) ticks[i] = (r0 + i) / step;\n }\n\n if (reverse) ticks.reverse();\n return ticks;\n}\nfunction tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0 ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power) : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\nfunction tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;else if (error >= e5) step1 *= 5;else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-array/src/ascending.js\nfunction ascending_ascending(a, b) {\n return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-array/src/bisector.js\n\nfunction bisector(f) {\n let delta = f;\n let compare1 = f;\n let compare2 = f;\n\n if (f.length !== 2) {\n delta = (d, x) => f(d) - x;\n\n compare1 = ascending_ascending;\n\n compare2 = (d, x) => ascending_ascending(f(d), x);\n }\n\n function left(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n\n do {\n const mid = lo + hi >>> 1;\n if (compare2(a[mid], x) < 0) lo = mid + 1;else hi = mid;\n } while (lo < hi);\n }\n\n return lo;\n }\n\n function right(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n\n do {\n const mid = lo + hi >>> 1;\n if (compare2(a[mid], x) <= 0) lo = mid + 1;else hi = mid;\n } while (lo < hi);\n }\n\n return lo;\n }\n\n function center(a, x, lo = 0, hi = a.length) {\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {\n left,\n center,\n right\n };\n}\n;// CONCATENATED MODULE: ./node_modules/d3-array/src/number.js\nfunction number_number(x) {\n return x === null ? NaN : +x;\n}\nfunction* numbers(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n;// CONCATENATED MODULE: ./node_modules/d3-array/src/bisect.js\n\n\n\nconst ascendingBisect = bisector(ascending_ascending);\nconst bisectRight = ascendingBisect.right;\nconst bisectLeft = ascendingBisect.left;\nconst bisectCenter = bisector(number_number).center;\n/* harmony default export */ const bisect = (bisectRight);\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/array.js\n\n\n/* harmony default export */ function src_array(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\nfunction genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n\n for (; i < nb; ++i) c[i] = b[i];\n\n return function (t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n\n return c;\n };\n}\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/date.js\n/* harmony default export */ function date(a, b) {\n var d = new Date();\n return a = +a, b = +b, function (t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/object.js\n\n/* harmony default export */ function object(a, b) {\n var i = {},\n c = {},\n k;\n if (a === null || typeof a !== "object") a = {};\n if (b === null || typeof b !== "object") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function (t) {\n for (k in i) c[k] = i[k](t);\n\n return c;\n };\n}\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/numberArray.js\n/* harmony default export */ function src_numberArray(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function (t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n\n return c;\n };\n}\nfunction numberArray_isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/value.js\n\n\n\n\n\n\n\n\n\n/* harmony default export */ function value(a, b) {\n var t = typeof b,\n c;\n return b == null || t === "boolean" ? d3_interpolate_src_constant(b) : (t === "number" ? number : t === "string" ? (c = color(b)) ? (b = c, rgb) : string : b instanceof color ? rgb : b instanceof Date ? date : numberArray_isNumberArray(b) ? src_numberArray : Array.isArray(b) ? genericArray : typeof b.valueOf !== "function" && typeof b.toString !== "function" || isNaN(b) ? object : number)(a, b);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/round.js\n/* harmony default export */ function round(a, b) {\n return a = +a, b = +b, function (t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n;// CONCATENATED MODULE: ./node_modules/d3-scale/src/constant.js\nfunction constants(x) {\n return function () {\n return x;\n };\n}\n;// CONCATENATED MODULE: ./node_modules/d3-scale/src/number.js\nfunction src_number_number(x) {\n return +x;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-scale/src/continuous.js\n\n\n\n\nvar unit = [0, 1];\nfunction continuous_identity(x) {\n return x;\n}\n\nfunction continuous_normalize(a, b) {\n return (b -= a = +a) ? function (x) {\n return (x - a) / b;\n } : constants(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n var t;\n if (a > b) t = a, a = b, b = t;\n return function (x) {\n return Math.max(a, Math.min(b, x));\n };\n} // normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\n\n\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0],\n d1 = domain[1],\n r0 = range[0],\n r1 = range[1];\n if (d1 < d0) d0 = continuous_normalize(d1, d0), r0 = interpolate(r1, r0);else d0 = continuous_normalize(d0, d1), r0 = interpolate(r0, r1);\n return function (x) {\n return r0(d0(x));\n };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1; // Reverse descending domains.\n\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = continuous_normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function (x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nfunction copy(source, target) {\n return target.domain(source.domain()).range(source.range()).interpolate(source.interpolate()).clamp(source.clamp()).unknown(source.unknown());\n}\nfunction transformer() {\n var domain = unit,\n range = unit,\n interpolate = value,\n transform,\n untransform,\n unknown,\n clamp = continuous_identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n var n = Math.min(domain.length, range.length);\n if (clamp !== continuous_identity) clamp = clamper(domain[0], domain[n - 1]);\n piecewise = n > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function (y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), number)))(y)));\n };\n\n scale.domain = function (_) {\n return arguments.length ? (domain = Array.from(_, src_number_number), rescale()) : domain.slice();\n };\n\n scale.range = function (_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function (_) {\n return range = Array.from(_), interpolate = round, rescale();\n };\n\n scale.clamp = function (_) {\n return arguments.length ? (clamp = _ ? true : continuous_identity, rescale()) : clamp !== continuous_identity;\n };\n\n scale.interpolate = function (_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function (_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function (t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\nfunction continuous() {\n return transformer()(continuous_identity, continuous_identity);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-scale/src/init.js\nfunction initRange(domain, range) {\n switch (arguments.length) {\n case 0:\n break;\n\n case 1:\n this.range(domain);\n break;\n\n default:\n this.range(range).domain(domain);\n break;\n }\n\n return this;\n}\nfunction init_initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0:\n break;\n\n case 1:\n {\n if (typeof domain === "function") this.interpolator(domain);else this.range(domain);\n break;\n }\n\n default:\n {\n this.domain(domain);\n if (typeof interpolator === "function") this.interpolator(interpolator);else this.range(interpolator);\n break;\n }\n }\n\n return this;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-format/src/formatSpecifier.js\n// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\nfunction formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error("invalid format: " + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nfunction FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? " " : specifier.fill + "";\n this.align = specifier.align === undefined ? ">" : specifier.align + "";\n this.sign = specifier.sign === undefined ? "-" : specifier.sign + "";\n this.symbol = specifier.symbol === undefined ? "" : specifier.symbol + "";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? "" : specifier.type + "";\n}\n\nFormatSpecifier.prototype.toString = function () {\n return this.fill + this.align + this.sign + this.symbol + (this.zero ? "0" : "") + (this.width === undefined ? "" : Math.max(1, this.width | 0)) + (this.comma ? "," : "") + (this.precision === undefined ? "" : "." + Math.max(0, this.precision | 0)) + (this.trim ? "~" : "") + this.type;\n};\n;// CONCATENATED MODULE: ./node_modules/d3-format/src/formatDecimal.js\n/* harmony default export */ function formatDecimal(x) {\n return Math.abs(x = Math.round(x)) >= 1e21 ? x.toLocaleString("en").replace(/,/g, "") : x.toString(10);\n} // Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns ["123", 0].\n\nfunction formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e")) < 0) return null; // NaN, ±Infinity\n\n var i,\n coefficient = x.slice(0, i); // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n\n return [coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient, +x.slice(i + 1)];\n}\n;// CONCATENATED MODULE: ./node_modules/d3-format/src/exponent.js\n\n/* harmony default export */ function exponent(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-format/src/precisionPrefix.js\n\n/* harmony default export */ function precisionPrefix(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n;// CONCATENATED MODULE: ./node_modules/d3-format/src/formatGroup.js\n/* harmony default export */ function formatGroup(grouping, thousands) {\n return function (value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n;// CONCATENATED MODULE: ./node_modules/d3-format/src/formatNumerals.js\n/* harmony default export */ function formatNumerals(numerals) {\n return function (value) {\n return value.replace(/[0-9]/g, function (i) {\n return numerals[+i];\n });\n };\n}\n;// CONCATENATED MODULE: ./node_modules/d3-format/src/formatTrim.js\n// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\n/* harmony default export */ function formatTrim(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case ".":\n i0 = i1 = i;\n break;\n\n case "0":\n if (i0 === 0) i0 = i;\n i1 = i;\n break;\n\n default:\n if (!+s[i]) break out;\n if (i0 > 0) i0 = 0;\n break;\n }\n }\n\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-format/src/formatPrefixAuto.js\n\nvar prefixExponent;\n/* harmony default export */ function formatPrefixAuto(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + "";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient : i > n ? coefficient + new Array(i - n + 1).join("0") : i > 0 ? coefficient.slice(0, i) + "." + coefficient.slice(i) : "0." + new Array(1 - i).join("0") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n;// CONCATENATED MODULE: ./node_modules/d3-format/src/formatRounded.js\n\n/* harmony default export */ function formatRounded(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + "";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? "0." + new Array(-exponent).join("0") + coefficient : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + "." + coefficient.slice(exponent + 1) : coefficient + new Array(exponent - coefficient.length + 2).join("0");\n}\n;// CONCATENATED MODULE: ./node_modules/d3-format/src/formatTypes.js\n\n\n\n/* harmony default export */ const formatTypes = ({\n "%": (x, p) => (x * 100).toFixed(p),\n "b": x => Math.round(x).toString(2),\n "c": x => x + "",\n "d": formatDecimal,\n "e": (x, p) => x.toExponential(p),\n "f": (x, p) => x.toFixed(p),\n "g": (x, p) => x.toPrecision(p),\n "o": x => Math.round(x).toString(8),\n "p": (x, p) => formatRounded(x * 100, p),\n "r": formatRounded,\n "s": formatPrefixAuto,\n "X": x => Math.round(x).toString(16).toUpperCase(),\n "x": x => Math.round(x).toString(16)\n});\n;// CONCATENATED MODULE: ./node_modules/d3-format/src/identity.js\n/* harmony default export */ function src_identity(x) {\n return x;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-format/src/locale.js\n\n\n\n\n\n\n\n\nvar map = Array.prototype.map,\n prefixes = ["y", "z", "a", "f", "p", "n", "µ", "m", "", "k", "M", "G", "T", "P", "E", "Z", "Y"];\n/* harmony default export */ function locale(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? src_identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + ""),\n currencyPrefix = locale.currency === undefined ? "" : locale.currency[0] + "",\n currencySuffix = locale.currency === undefined ? "" : locale.currency[1] + "",\n decimal = locale.decimal === undefined ? "." : locale.decimal + "",\n numerals = locale.numerals === undefined ? src_identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? "%" : locale.percent + "",\n minus = locale.minus === undefined ? "−" : locale.minus + "",\n nan = locale.nan === undefined ? "NaN" : locale.nan + "";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type; // The "n" type is an alias for ",g".\n\n if (type === "n") comma = true, type = "g"; // The "" type, and any invalid type, is an alias for ".12~g".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = "g"; // If zero fill is specified, padding goes after sign and before digits.\n\n if (zero || fill === "0" && align === "=") zero = true, fill = "0", align = "="; // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n\n var prefix = symbol === "$" ? currencyPrefix : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "",\n suffix = symbol === "$" ? currencySuffix : /[%p]/.test(type) ? percent : ""; // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type); // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n\n precision = precision === undefined ? 6 : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision)) : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i,\n n,\n c;\n\n if (type === "c") {\n valueSuffix = formatType(value) + valueSuffix;\n value = "";\n } else {\n value = +value; // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n\n var valueNegative = value < 0 || 1 / value < 0; // Perform the initial formatting.\n\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision); // Trim insignificant zeros.\n\n if (trim) value = formatTrim(value); // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n\n if (valueNegative && +value === 0 && sign !== "+") valueNegative = false; // Compute the prefix and suffix.\n\n valuePrefix = (valueNegative ? sign === "(" ? sign : minus : sign === "-" || sign === "(" ? "" : sign) + valuePrefix;\n valueSuffix = (type === "s" ? prefixes[8 + prefixExponent / 3] : "") + valueSuffix + (valueNegative && sign === "(" ? ")" : ""); // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n\n if (maybeSuffix) {\n i = -1, n = value.length;\n\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n } // If the fill character is not "0", grouping is applied before padding.\n\n\n if (comma && !zero) value = group(value, Infinity); // Compute the padding.\n\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : ""; // If the fill character is "0", grouping is applied after padding.\n\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = ""; // Reconstruct the final output based on the desired alignment.\n\n switch (align) {\n case "<":\n value = valuePrefix + value + valueSuffix + padding;\n break;\n\n case "=":\n value = valuePrefix + padding + value + valueSuffix;\n break;\n\n case "^":\n value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length);\n break;\n\n default:\n value = padding + valuePrefix + value + valueSuffix;\n break;\n }\n\n return numerals(value);\n }\n\n format.toString = function () {\n return specifier + "";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = "f", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function (value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n;// CONCATENATED MODULE: ./node_modules/d3-format/src/defaultLocale.js\n\nvar defaultLocale_locale;\nvar format;\nvar formatPrefix;\ndefaultLocale({\n thousands: ",",\n grouping: [3],\n currency: ["$", ""]\n});\nfunction defaultLocale(definition) {\n defaultLocale_locale = locale(definition);\n format = defaultLocale_locale.format;\n formatPrefix = defaultLocale_locale.formatPrefix;\n return defaultLocale_locale;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-format/src/precisionRound.js\n\n/* harmony default export */ function precisionRound(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-format/src/precisionFixed.js\n\n/* harmony default export */ function precisionFixed(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n;// CONCATENATED MODULE: ./node_modules/d3-scale/src/tickFormat.js\n\n\nfunction tickFormat(start, stop, count, specifier) {\n var step = tickStep(start, stop, count),\n precision;\n specifier = formatSpecifier(specifier == null ? ",f" : specifier);\n\n switch (specifier.type) {\n case "s":\n {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n\n case "":\n case "e":\n case "g":\n case "p":\n case "r":\n {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === "e");\n break;\n }\n\n case "f":\n case "%":\n {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === "%") * 2;\n break;\n }\n }\n\n return format(specifier);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-scale/src/linear.js\n\n\n\n\nfunction linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function (count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function (count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function (count) {\n if (count == null) count = 10;\n var d = domain();\n var i0 = 0;\n var i1 = d.length - 1;\n var start = d[i0];\n var stop = d[i1];\n var prestep;\n var step;\n var maxIter = 10;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n\n while (maxIter-- > 0) {\n step = tickIncrement(start, stop, count);\n\n if (step === prestep) {\n d[i0] = start;\n d[i1] = stop;\n return domain(d);\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n } else {\n break;\n }\n\n prestep = step;\n }\n\n return scale;\n };\n\n return scale;\n}\nfunction linear_linear() {\n var scale = continuous();\n\n scale.copy = function () {\n return copy(scale, linear_linear());\n };\n\n initRange.apply(scale, arguments);\n return linearish(scale);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-scale/src/quantize.js\n\n\n\nfunction quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1],\n unknown;\n\n function scale(x) {\n return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n\n return scale;\n }\n\n scale.domain = function (_) {\n return arguments.length ? ([x0, x1] = _, x0 = +x0, x1 = +x1, rescale()) : [x0, x1];\n };\n\n scale.range = function (_) {\n return arguments.length ? (n = (range = Array.from(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function (y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : i < 1 ? [x0, domain[0]] : i >= n ? [domain[n - 1], x1] : [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function (_) {\n return arguments.length ? (unknown = _, scale) : scale;\n };\n\n scale.thresholds = function () {\n return domain.slice();\n };\n\n scale.copy = function () {\n return quantize().domain([x0, x1]).range(range).unknown(unknown);\n };\n\n return initRange.apply(linearish(scale), arguments);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-scale/src/sequential.js\n\n\n\n\n\n\n\n\nfunction sequential_transformer() {\n var x0 = 0,\n x1 = 1,\n t0,\n t1,\n k10,\n transform,\n interpolator = continuous_identity,\n clamp = false,\n unknown;\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function (_) {\n return arguments.length ? ([x0, x1] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];\n };\n\n scale.clamp = function (_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function (_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n function range(interpolate) {\n return function (_) {\n var r0, r1;\n return arguments.length ? ([r0, r1] = _, interpolator = interpolate(r0, r1), scale) : [interpolator(0), interpolator(1)];\n };\n }\n\n scale.range = range(value);\n scale.rangeRound = range(round);\n\n scale.unknown = function (_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function (t) {\n transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);\n return scale;\n };\n}\n\nfunction sequential_copy(source, target) {\n return target.domain(source.domain()).interpolator(source.interpolator()).clamp(source.clamp()).unknown(source.unknown());\n}\nfunction sequential() {\n var scale = linearish(sequential_transformer()(continuous_identity));\n\n scale.copy = function () {\n return sequential_copy(scale, sequential());\n };\n\n return init_initInterpolator.apply(scale, arguments);\n}\nfunction sequentialLog() {\n var scale = loggish(sequential_transformer()).domain([1, 10]);\n\n scale.copy = function () {\n return sequential_copy(scale, sequentialLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\nfunction sequentialSymlog() {\n var scale = symlogish(sequential_transformer());\n\n scale.copy = function () {\n return sequential_copy(scale, sequentialSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\nfunction sequentialPow() {\n var scale = powish(sequential_transformer());\n\n scale.copy = function () {\n return sequential_copy(scale, sequentialPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\nfunction sequentialSqrt() {\n return sequentialPow.apply(null, arguments).exponent(0.5);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-scale/src/index.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n;// CONCATENATED MODULE: ./node_modules/d3-color/src/math.js\nconst radians = Math.PI / 180;\nconst math_degrees = 180 / Math.PI;\n;// CONCATENATED MODULE: ./node_modules/d3-color/src/cubehelix.js\n\n\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)),\n // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * math_degrees - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nfunction cubehelix_cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\nfunction Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\nsrc_define(Cubehelix, cubehelix_cubehelix, extend(Color, {\n brighter: function (k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function (k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function () {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * radians,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(255 * (l + a * (A * cosh + B * sinh)), 255 * (l + a * (C * cosh + D * sinh)), 255 * (l + a * (E * cosh)), this.opacity);\n }\n}));\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/cubehelix.js\n\n\n\nfunction cubehelix(hue) {\n return function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = cubehelix_cubehelix(start)).h, (end = cubehelix_cubehelix(end)).h),\n s = nogamma(start.s, end.s),\n l = nogamma(start.l, end.l),\n opacity = nogamma(start.opacity, end.opacity);\n return function (t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + "";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n return cubehelix;\n }(1);\n}\n\n/* harmony default export */ const src_cubehelix = (cubehelix(hue));\nvar cubehelixLong = cubehelix(nogamma);\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js\n\n\nvar warm = cubehelixLong(cubehelix_cubehelix(-100, 0.75, 0.35), cubehelix_cubehelix(80, 1.50, 0.8));\nvar cool = cubehelixLong(cubehelix_cubehelix(260, 0.75, 0.35), cubehelix_cubehelix(80, 1.50, 0.8));\nvar c = cubehelix_cubehelix();\n/* harmony default export */ function rainbow(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n c.h = 360 * t - 100;\n c.s = 1.5 - 1.5 * ts;\n c.l = 0.8 - 0.9 * ts;\n return c + "";\n}\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/index.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/select.js\n\n/* harmony default export */ function src_select(selector) {\n return typeof selector === "string" ? new Selection([[document.querySelector(selector)]], [document.documentElement]) : new Selection([[selector]], root);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/create.js\n\n\n/* harmony default export */ function src_create(name) {\n return src_select(creator(name).call(document.documentElement));\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/index.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n;// CONCATENATED MODULE: ./node_modules/d3-path/src/path.js\nconst pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n\n this._ = "";\n}\n\nfunction path_path() {\n return new Path();\n}\n\nPath.prototype = path_path.prototype = {\n constructor: Path,\n moveTo: function (x, y) {\n this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y);\n },\n closePath: function () {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += "Z";\n }\n },\n lineTo: function (x, y) {\n this._ += "L" + (this._x1 = +x) + "," + (this._y1 = +y);\n },\n quadraticCurveTo: function (x1, y1, x, y) {\n this._ += "Q" + +x1 + "," + +y1 + "," + (this._x1 = +x) + "," + (this._y1 = +y);\n },\n bezierCurveTo: function (x1, y1, x2, y2, x, y) {\n this._ += "C" + +x1 + "," + +y1 + "," + +x2 + "," + +y2 + "," + (this._x1 = +x) + "," + (this._y1 = +y);\n },\n arcTo: function (x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01; // Is the radius negative? Error.\n\n if (r < 0) throw new Error("negative radius: " + r); // Is this path empty? Move to (x1,y1).\n\n if (this._x1 === null) {\n this._ += "M" + (this._x1 = x1) + "," + (this._y1 = y1);\n } // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon)) ; // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += "L" + (this._x1 = x1) + "," + (this._y1 = y1);\n } // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21; // If the start tangent is not coincident with (x0,y0), line to.\n\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += "L" + (x1 + t01 * x01) + "," + (y1 + t01 * y01);\n }\n\n this._ += "A" + r + "," + r + ",0,0," + +(y01 * x20 > x01 * y20) + "," + (this._x1 = x1 + t21 * x21) + "," + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function (x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0; // Is the radius negative? Error.\n\n if (r < 0) throw new Error("negative radius: " + r); // Is this path empty? Move to (x0,y0).\n\n if (this._x1 === null) {\n this._ += "M" + x0 + "," + y0;\n } // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += "L" + x0 + "," + y0;\n } // Is this arc empty? We’re done.\n\n\n if (!r) return; // Does the angle go the wrong way? Flip the direction.\n\n if (da < 0) da = da % tau + tau; // Is this a complete circle? Draw two arcs to complete the circle.\n\n if (da > tauEpsilon) {\n this._ += "A" + r + "," + r + ",0,1," + cw + "," + (x - dx) + "," + (y - dy) + "A" + r + "," + r + ",0,1," + cw + "," + (this._x1 = x0) + "," + (this._y1 = y0);\n } // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += "A" + r + "," + r + ",0," + +(da >= pi) + "," + cw + "," + (this._x1 = x + r * Math.cos(a1)) + "," + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function (x, y, w, h) {\n this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y) + "h" + +w + "v" + +h + "h" + -w + "Z";\n },\n toString: function () {\n return this._;\n }\n};\n/* harmony default export */ const src_path = (path_path);\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/array.js\nvar slice = Array.prototype.slice;\n/* harmony default export */ function d3_shape_src_array(x) {\n return typeof x === "object" && "length" in x ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/constant.js\n/* harmony default export */ function d3_shape_src_constant(x) {\n return function constant() {\n return x;\n };\n}\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/curve/bump.js\n\n\nclass Bump {\n constructor(context, x) {\n this._context = context;\n this._x = x;\n }\n\n areaStart() {\n this._line = 0;\n }\n\n areaEnd() {\n this._line = NaN;\n }\n\n lineStart() {\n this._point = 0;\n }\n\n lineEnd() {\n if (this._line || this._line !== 0 && this._point === 1) this._context.closePath();\n this._line = 1 - this._line;\n }\n\n point(x, y) {\n x = +x, y = +y;\n\n switch (this._point) {\n case 0:\n {\n this._point = 1;\n if (this._line) this._context.lineTo(x, y);else this._context.moveTo(x, y);\n break;\n }\n\n case 1:\n this._point = 2;\n // falls through\n\n default:\n {\n if (this._x) this._context.bezierCurveTo(this._x0 = (this._x0 + x) / 2, this._y0, this._x0, y, x, y);else this._context.bezierCurveTo(this._x0, this._y0 = (this._y0 + y) / 2, x, this._y0, x, y);\n break;\n }\n }\n\n this._x0 = x, this._y0 = y;\n }\n\n}\n\nclass BumpRadial {\n constructor(context) {\n this._context = context;\n }\n\n lineStart() {\n this._point = 0;\n }\n\n lineEnd() {}\n\n point(x, y) {\n x = +x, y = +y;\n\n if (this._point++ === 0) {\n this._x0 = x, this._y0 = y;\n } else {\n const p0 = pointRadial(this._x0, this._y0);\n const p1 = pointRadial(this._x0, this._y0 = (this._y0 + y) / 2);\n const p2 = pointRadial(x, this._y0);\n const p3 = pointRadial(x, y);\n\n this._context.moveTo(...p0);\n\n this._context.bezierCurveTo(...p1, ...p2, ...p3);\n }\n }\n\n}\n\nfunction bumpX(context) {\n return new Bump(context, true);\n}\nfunction bump_bumpY(context) {\n return new Bump(context, false);\n}\nfunction bump_bumpRadial(context) {\n return new BumpRadial(context);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/point.js\nfunction point_x(p) {\n return p[0];\n}\nfunction point_y(p) {\n return p[1];\n}\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/link.js\n\n\n\n\n\n\nfunction linkSource(d) {\n return d.source;\n}\n\nfunction linkTarget(d) {\n return d.target;\n}\n\nfunction link_link(curve) {\n let source = linkSource;\n let target = linkTarget;\n let x = point_x;\n let y = point_y;\n let context = null;\n let output = null;\n\n function link() {\n let buffer;\n const argv = slice.call(arguments);\n const s = source.apply(this, argv);\n const t = target.apply(this, argv);\n if (context == null) output = curve(buffer = src_path());\n output.lineStart();\n argv[0] = s, output.point(+x.apply(this, argv), +y.apply(this, argv));\n argv[0] = t, output.point(+x.apply(this, argv), +y.apply(this, argv));\n output.lineEnd();\n if (buffer) return output = null, buffer + "" || null;\n }\n\n link.source = function (_) {\n return arguments.length ? (source = _, link) : source;\n };\n\n link.target = function (_) {\n return arguments.length ? (target = _, link) : target;\n };\n\n link.x = function (_) {\n return arguments.length ? (x = typeof _ === "function" ? _ : d3_shape_src_constant(+_), link) : x;\n };\n\n link.y = function (_) {\n return arguments.length ? (y = typeof _ === "function" ? _ : d3_shape_src_constant(+_), link) : y;\n };\n\n link.context = function (_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), link) : context;\n };\n\n return link;\n}\nfunction linkHorizontal() {\n return link_link(bumpX);\n}\nfunction linkVertical() {\n return link_link(bumpY);\n}\nfunction linkRadial() {\n const l = link_link(bumpRadial);\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n return l;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/math.js\nconst math_abs = Math.abs;\nconst atan2 = Math.atan2;\nconst cos = Math.cos;\nconst math_max = Math.max;\nconst math_min = Math.min;\nconst sin = Math.sin;\nconst sqrt = Math.sqrt;\nconst math_epsilon = 1e-12;\nconst math_pi = Math.PI;\nconst halfPi = math_pi / 2;\nconst math_tau = 2 * math_pi;\nfunction acos(x) {\n return x > 1 ? 0 : x < -1 ? math_pi : Math.acos(x);\n}\nfunction asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/symbol/asterisk.js\n\nconst sqrt3 = sqrt(3);\n/* harmony default export */ const asterisk = ({\n draw(context, size) {\n const r = sqrt(size + math_min(size / 28, 0.75)) * 0.59436;\n const t = r / 2;\n const u = t * sqrt3;\n context.moveTo(0, r);\n context.lineTo(0, -r);\n context.moveTo(-u, -t);\n context.lineTo(u, t);\n context.moveTo(-u, t);\n context.lineTo(u, -t);\n }\n\n});\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/symbol/circle.js\n\n/* harmony default export */ const circle = ({\n draw(context, size) {\n const r = sqrt(size / math_pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, math_tau);\n }\n\n});\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/symbol/cross.js\n\n/* harmony default export */ const cross = ({\n draw(context, size) {\n const r = sqrt(size / 5) / 2;\n context.moveTo(-3 * r, -r);\n context.lineTo(-r, -r);\n context.lineTo(-r, -3 * r);\n context.lineTo(r, -3 * r);\n context.lineTo(r, -r);\n context.lineTo(3 * r, -r);\n context.lineTo(3 * r, r);\n context.lineTo(r, r);\n context.lineTo(r, 3 * r);\n context.lineTo(-r, 3 * r);\n context.lineTo(-r, r);\n context.lineTo(-3 * r, r);\n context.closePath();\n }\n\n});\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/symbol/diamond.js\n\nconst tan30 = sqrt(1 / 3);\nconst tan30_2 = tan30 * 2;\n/* harmony default export */ const diamond = ({\n draw(context, size) {\n const y = sqrt(size / tan30_2);\n const x = y * tan30;\n context.moveTo(0, -y);\n context.lineTo(x, 0);\n context.lineTo(0, y);\n context.lineTo(-x, 0);\n context.closePath();\n }\n\n});\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/symbol/diamond2.js\n\n/* harmony default export */ const diamond2 = ({\n draw(context, size) {\n const r = sqrt(size) * 0.62625;\n context.moveTo(0, -r);\n context.lineTo(r, 0);\n context.lineTo(0, r);\n context.lineTo(-r, 0);\n context.closePath();\n }\n\n});\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/symbol/plus.js\n\n/* harmony default export */ const plus = ({\n draw(context, size) {\n const r = sqrt(size - math_min(size / 7, 2)) * 0.87559;\n context.moveTo(-r, 0);\n context.lineTo(r, 0);\n context.moveTo(0, r);\n context.lineTo(0, -r);\n }\n\n});\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/symbol/square.js\n\n/* harmony default export */ const square = ({\n draw(context, size) {\n const w = sqrt(size);\n const x = -w / 2;\n context.rect(x, x, w, w);\n }\n\n});\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/symbol/square2.js\n\n/* harmony default export */ const square2 = ({\n draw(context, size) {\n const r = sqrt(size) * 0.4431;\n context.moveTo(r, r);\n context.lineTo(r, -r);\n context.lineTo(-r, -r);\n context.lineTo(-r, r);\n context.closePath();\n }\n\n});\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/symbol/star.js\n\nconst ka = 0.89081309152928522810;\nconst kr = sin(math_pi / 10) / sin(7 * math_pi / 10);\nconst kx = sin(math_tau / 10) * kr;\nconst ky = -cos(math_tau / 10) * kr;\n/* harmony default export */ const star = ({\n draw(context, size) {\n const r = sqrt(size * ka);\n const x = kx * r;\n const y = ky * r;\n context.moveTo(0, -r);\n context.lineTo(x, y);\n\n for (let i = 1; i < 5; ++i) {\n const a = math_tau * i / 5;\n const c = cos(a);\n const s = sin(a);\n context.lineTo(s * r, -c * r);\n context.lineTo(c * x - s * y, s * x + c * y);\n }\n\n context.closePath();\n }\n\n});\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/symbol/triangle.js\n\nconst triangle_sqrt3 = sqrt(3);\n/* harmony default export */ const triangle = ({\n draw(context, size) {\n const y = -sqrt(size / (triangle_sqrt3 * 3));\n context.moveTo(0, y * 2);\n context.lineTo(-triangle_sqrt3 * y, -y);\n context.lineTo(triangle_sqrt3 * y, -y);\n context.closePath();\n }\n\n});\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/symbol/triangle2.js\n\nconst triangle2_sqrt3 = sqrt(3);\n/* harmony default export */ const triangle2 = ({\n draw(context, size) {\n const s = sqrt(size) * 0.6824;\n const t = s / 2;\n const u = s * triangle2_sqrt3 / 2; // cos(Math.PI / 6)\n\n context.moveTo(0, -s);\n context.lineTo(u, t);\n context.lineTo(-u, t);\n context.closePath();\n }\n\n});\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/symbol/wye.js\n\nconst wye_c = -0.5;\nconst s = sqrt(3) / 2;\nconst k = 1 / sqrt(12);\nconst a = (k / 2 + 1) * 3;\n/* harmony default export */ const wye = ({\n draw(context, size) {\n const r = sqrt(size / a);\n const x0 = r / 2,\n y0 = r * k;\n const x1 = x0,\n y1 = r * k + r;\n const x2 = -x1,\n y2 = y1;\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n context.lineTo(x2, y2);\n context.lineTo(wye_c * x0 - s * y0, s * x0 + wye_c * y0);\n context.lineTo(wye_c * x1 - s * y1, s * x1 + wye_c * y1);\n context.lineTo(wye_c * x2 - s * y2, s * x2 + wye_c * y2);\n context.lineTo(wye_c * x0 + s * y0, wye_c * y0 - s * x0);\n context.lineTo(wye_c * x1 + s * y1, wye_c * y1 - s * x1);\n context.lineTo(wye_c * x2 + s * y2, wye_c * y2 - s * x2);\n context.closePath();\n }\n\n});\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/symbol/x.js\n\n/* harmony default export */ const x = ({\n draw(context, size) {\n const r = sqrt(size - math_min(size / 6, 1.7)) * 0.6189;\n context.moveTo(-r, -r);\n context.lineTo(r, r);\n context.moveTo(-r, r);\n context.lineTo(r, -r);\n }\n\n});\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/symbol.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n // These symbols are designed to be filled.\n\nconst symbolsFill = [circle, cross, diamond, square, star, triangle, wye]; // These symbols are designed to be stroked (with a width of 1.5px and round caps).\n\nconst symbolsStroke = [circle, plus, x, triangle2, asterisk, square2, diamond2];\nfunction symbol_Symbol(type, size) {\n let context = null;\n type = typeof type === "function" ? type : d3_shape_src_constant(type || circle);\n size = typeof size === "function" ? size : d3_shape_src_constant(size === undefined ? 64 : +size);\n\n function symbol() {\n let buffer;\n if (!context) context = buffer = src_path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + "" || null;\n }\n\n symbol.type = function (_) {\n return arguments.length ? (type = typeof _ === "function" ? _ : d3_shape_src_constant(_), symbol) : type;\n };\n\n symbol.size = function (_) {\n return arguments.length ? (size = typeof _ === "function" ? _ : d3_shape_src_constant(+_), symbol) : size;\n };\n\n symbol.context = function (_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/index.js\n\n\n\n\n // Note: radialArea is deprecated!\n\n // Note: radialLine is deprecated!\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n;// CONCATENATED MODULE: ./node_modules/d3-drag/src/noevent.js\n// These are typically used in conjunction with noevent to ensure that we can\n// preventDefault on the event.\nconst nonpassive = {\n passive: false\n};\nconst nonpassivecapture = {\n capture: true,\n passive: false\n};\nfunction noevent_nopropagation(event) {\n event.stopImmediatePropagation();\n}\n/* harmony default export */ function src_noevent(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n;// CONCATENATED MODULE: ./node_modules/d3-drag/src/nodrag.js\n\n\n/* harmony default export */ function nodrag(view) {\n var root = view.document.documentElement,\n selection = src_select(view).on("dragstart.drag", src_noevent, nonpassivecapture);\n\n if ("onselectstart" in root) {\n selection.on("selectstart.drag", src_noevent, nonpassivecapture);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = "none";\n }\n}\nfunction yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = src_select(view).on("dragstart.drag", null);\n\n if (noclick) {\n selection.on("click.drag", src_noevent, nonpassivecapture);\n setTimeout(function () {\n selection.on("click.drag", null);\n }, 0);\n }\n\n if ("onselectstart" in root) {\n selection.on("selectstart.drag", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/zoom.js\nvar epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n/* harmony default export */ const src_zoom = ((function zoomRho(rho, rho2, rho4) {\n // p0 = [ux0, uy0, w0]\n // p1 = [ux1, uy1, w1]\n function zoom(p0, p1) {\n var ux0 = p0[0],\n uy0 = p0[1],\n w0 = p0[2],\n ux1 = p1[0],\n uy1 = p1[1],\n w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S; // Special case for u0 ≅ u1.\n\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n\n i = function (t) {\n return [ux0 + t * dx, uy0 + t * dy, w0 * Math.exp(rho * t * S)];\n };\n } // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n\n i = function (t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [ux0 + u * dx, uy0 + u * dy, w0 * coshr0 / cosh(rho * s + r0)];\n };\n }\n\n i.duration = S * 1000 * rho / Math.SQRT2;\n return i;\n }\n\n zoom.rho = function (_) {\n var _1 = Math.max(1e-3, +_),\n _2 = _1 * _1,\n _4 = _2 * _2;\n\n return zoomRho(_1, _2, _4);\n };\n\n return zoom;\n})(Math.SQRT2, 2, 4));\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/sourceEvent.js\n/* harmony default export */ function sourceEvent(event) {\n let sourceEvent;\n\n while (sourceEvent = event.sourceEvent) event = sourceEvent;\n\n return event;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/pointer.js\n\n/* harmony default export */ function src_pointer(event, node) {\n event = sourceEvent(event);\n if (node === undefined) node = event.currentTarget;\n\n if (node) {\n var svg = node.ownerSVGElement || node;\n\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n\n if (node.getBoundingClientRect) {\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n }\n }\n\n return [event.pageX, event.pageY];\n}\n;// CONCATENATED MODULE: ./node_modules/d3-zoom/src/constant.js\n/* harmony default export */ const d3_zoom_src_constant = (x => () => x);\n;// CONCATENATED MODULE: ./node_modules/d3-zoom/src/event.js\nfunction ZoomEvent(type, {\n sourceEvent,\n target,\n transform,\n dispatch\n}) {\n Object.defineProperties(this, {\n type: {\n value: type,\n enumerable: true,\n configurable: true\n },\n sourceEvent: {\n value: sourceEvent,\n enumerable: true,\n configurable: true\n },\n target: {\n value: target,\n enumerable: true,\n configurable: true\n },\n transform: {\n value: transform,\n enumerable: true,\n configurable: true\n },\n _: {\n value: dispatch\n }\n });\n}\n;// CONCATENATED MODULE: ./node_modules/d3-zoom/src/transform.js\nfunction Transform(k, x, y) {\n this.k = k;\n this.x = x;\n this.y = y;\n}\nTransform.prototype = {\n constructor: Transform,\n scale: function (k) {\n return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n },\n translate: function (x, y) {\n return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n },\n apply: function (point) {\n return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n },\n applyX: function (x) {\n return x * this.k + this.x;\n },\n applyY: function (y) {\n return y * this.k + this.y;\n },\n invert: function (location) {\n return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n },\n invertX: function (x) {\n return (x - this.x) / this.k;\n },\n invertY: function (y) {\n return (y - this.y) / this.k;\n },\n rescaleX: function (x) {\n return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n },\n rescaleY: function (y) {\n return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n },\n toString: function () {\n return "translate(" + this.x + "," + this.y + ") scale(" + this.k + ")";\n }\n};\nvar transform_identity = new Transform(1, 0, 0);\ntransform.prototype = Transform.prototype;\nfunction transform(node) {\n while (!node.__zoom) if (!(node = node.parentNode)) return transform_identity;\n\n return node.__zoom;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-zoom/src/noevent.js\nfunction src_noevent_nopropagation(event) {\n event.stopImmediatePropagation();\n}\n/* harmony default export */ function d3_zoom_src_noevent(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n;// CONCATENATED MODULE: ./node_modules/d3-zoom/src/zoom.js\n\n\n\n\n\n\n\n\n // Ignore right-click, since that should open the context menu.\n// except for pinch-to-zoom, which is sent as a wheel+ctrlKey event\n\nfunction zoom_defaultFilter(event) {\n return (!event.ctrlKey || event.type === \'wheel\') && !event.button;\n}\n\nfunction zoom_defaultExtent() {\n var e = this;\n\n if (e instanceof SVGElement) {\n e = e.ownerSVGElement || e;\n\n if (e.hasAttribute("viewBox")) {\n e = e.viewBox.baseVal;\n return [[e.x, e.y], [e.x + e.width, e.y + e.height]];\n }\n\n return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]];\n }\n\n return [[0, 0], [e.clientWidth, e.clientHeight]];\n}\n\nfunction defaultTransform() {\n return this.__zoom || transform_identity;\n}\n\nfunction defaultWheelDelta(event) {\n return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * (event.ctrlKey ? 10 : 1);\n}\n\nfunction zoom_defaultTouchable() {\n return navigator.maxTouchPoints || "ontouchstart" in this;\n}\n\nfunction defaultConstrain(transform, extent, translateExtent) {\n var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],\n dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],\n dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],\n dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];\n return transform.translate(dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1), dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1));\n}\n\n/* harmony default export */ function zoom() {\n var filter = zoom_defaultFilter,\n extent = zoom_defaultExtent,\n constrain = defaultConstrain,\n wheelDelta = defaultWheelDelta,\n touchable = zoom_defaultTouchable,\n scaleExtent = [0, Infinity],\n translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],\n duration = 250,\n interpolate = src_zoom,\n listeners = src_dispatch("start", "zoom", "end"),\n touchstarting,\n touchfirst,\n touchending,\n touchDelay = 500,\n wheelDelay = 150,\n clickDistance2 = 0,\n tapDistance = 10;\n\n function zoom(selection) {\n selection.property("__zoom", defaultTransform).on("wheel.zoom", wheeled, {\n passive: false\n }).on("mousedown.zoom", mousedowned).on("dblclick.zoom", dblclicked).filter(touchable).on("touchstart.zoom", touchstarted).on("touchmove.zoom", touchmoved).on("touchend.zoom touchcancel.zoom", touchended).style("-webkit-tap-highlight-color", "rgba(0,0,0,0)");\n }\n\n zoom.transform = function (collection, transform, point, event) {\n var selection = collection.selection ? collection.selection() : collection;\n selection.property("__zoom", defaultTransform);\n\n if (collection !== selection) {\n schedule(collection, transform, point, event);\n } else {\n selection.interrupt().each(function () {\n gesture(this, arguments).event(event).start().zoom(null, typeof transform === "function" ? transform.apply(this, arguments) : transform).end();\n });\n }\n };\n\n zoom.scaleBy = function (selection, k, p, event) {\n zoom.scaleTo(selection, function () {\n var k0 = this.__zoom.k,\n k1 = typeof k === "function" ? k.apply(this, arguments) : k;\n return k0 * k1;\n }, p, event);\n };\n\n zoom.scaleTo = function (selection, k, p, event) {\n zoom.transform(selection, function () {\n var e = extent.apply(this, arguments),\n t0 = this.__zoom,\n p0 = p == null ? centroid(e) : typeof p === "function" ? p.apply(this, arguments) : p,\n p1 = t0.invert(p0),\n k1 = typeof k === "function" ? k.apply(this, arguments) : k;\n return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);\n }, p, event);\n };\n\n zoom.translateBy = function (selection, x, y, event) {\n zoom.transform(selection, function () {\n return constrain(this.__zoom.translate(typeof x === "function" ? x.apply(this, arguments) : x, typeof y === "function" ? y.apply(this, arguments) : y), extent.apply(this, arguments), translateExtent);\n }, null, event);\n };\n\n zoom.translateTo = function (selection, x, y, p, event) {\n zoom.transform(selection, function () {\n var e = extent.apply(this, arguments),\n t = this.__zoom,\n p0 = p == null ? centroid(e) : typeof p === "function" ? p.apply(this, arguments) : p;\n return constrain(transform_identity.translate(p0[0], p0[1]).scale(t.k).translate(typeof x === "function" ? -x.apply(this, arguments) : -x, typeof y === "function" ? -y.apply(this, arguments) : -y), e, translateExtent);\n }, p, event);\n };\n\n function scale(transform, k) {\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));\n return k === transform.k ? transform : new Transform(k, transform.x, transform.y);\n }\n\n function translate(transform, p0, p1) {\n var x = p0[0] - p1[0] * transform.k,\n y = p0[1] - p1[1] * transform.k;\n return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);\n }\n\n function centroid(extent) {\n return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];\n }\n\n function schedule(transition, transform, point, event) {\n transition.on("start.zoom", function () {\n gesture(this, arguments).event(event).start();\n }).on("interrupt.zoom end.zoom", function () {\n gesture(this, arguments).event(event).end();\n }).tween("zoom", function () {\n var that = this,\n args = arguments,\n g = gesture(that, args).event(event),\n e = extent.apply(that, args),\n p = point == null ? centroid(e) : typeof point === "function" ? point.apply(that, args) : point,\n w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),\n a = that.__zoom,\n b = typeof transform === "function" ? transform.apply(that, args) : transform,\n i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));\n return function (t) {\n if (t === 1) t = b; // Avoid rounding error on end.\n else {\n var l = i(t),\n k = w / l[2];\n t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k);\n }\n g.zoom(null, t);\n };\n });\n }\n\n function gesture(that, args, clean) {\n return !clean && that.__zooming || new Gesture(that, args);\n }\n\n function Gesture(that, args) {\n this.that = that;\n this.args = args;\n this.active = 0;\n this.sourceEvent = null;\n this.extent = extent.apply(that, args);\n this.taps = 0;\n }\n\n Gesture.prototype = {\n event: function (event) {\n if (event) this.sourceEvent = event;\n return this;\n },\n start: function () {\n if (++this.active === 1) {\n this.that.__zooming = this;\n this.emit("start");\n }\n\n return this;\n },\n zoom: function (key, transform) {\n if (this.mouse && key !== "mouse") this.mouse[1] = transform.invert(this.mouse[0]);\n if (this.touch0 && key !== "touch") this.touch0[1] = transform.invert(this.touch0[0]);\n if (this.touch1 && key !== "touch") this.touch1[1] = transform.invert(this.touch1[0]);\n this.that.__zoom = transform;\n this.emit("zoom");\n return this;\n },\n end: function () {\n if (--this.active === 0) {\n delete this.that.__zooming;\n this.emit("end");\n }\n\n return this;\n },\n emit: function (type) {\n var d = src_select(this.that).datum();\n listeners.call(type, this.that, new ZoomEvent(type, {\n sourceEvent: this.sourceEvent,\n target: zoom,\n type,\n transform: this.that.__zoom,\n dispatch: listeners\n }), d);\n }\n };\n\n function wheeled(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var g = gesture(this, args).event(event),\n t = this.__zoom,\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),\n p = src_pointer(event); // If the mouse is in the same location as before, reuse it.\n // If there were recent wheel events, reset the wheel idle timeout.\n\n if (g.wheel) {\n if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {\n g.mouse[1] = t.invert(g.mouse[0] = p);\n }\n\n clearTimeout(g.wheel);\n } // If this wheel event won’t trigger a transform change, ignore it.\n else if (t.k === k) return; // Otherwise, capture the mouse point and location at the start.\n else {\n g.mouse = [p, t.invert(p)];\n src_interrupt(this);\n g.start();\n }\n\n d3_zoom_src_noevent(event);\n g.wheel = setTimeout(wheelidled, wheelDelay);\n g.zoom("mouse", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));\n\n function wheelidled() {\n g.wheel = null;\n g.end();\n }\n }\n\n function mousedowned(event, ...args) {\n if (touchending || !filter.apply(this, arguments)) return;\n var currentTarget = event.currentTarget,\n g = gesture(this, args, true).event(event),\n v = src_select(event.view).on("mousemove.zoom", mousemoved, true).on("mouseup.zoom", mouseupped, true),\n p = src_pointer(event, currentTarget),\n x0 = event.clientX,\n y0 = event.clientY;\n nodrag(event.view);\n src_noevent_nopropagation(event);\n g.mouse = [p, this.__zoom.invert(p)];\n src_interrupt(this);\n g.start();\n\n function mousemoved(event) {\n d3_zoom_src_noevent(event);\n\n if (!g.moved) {\n var dx = event.clientX - x0,\n dy = event.clientY - y0;\n g.moved = dx * dx + dy * dy > clickDistance2;\n }\n\n g.event(event).zoom("mouse", constrain(translate(g.that.__zoom, g.mouse[0] = src_pointer(event, currentTarget), g.mouse[1]), g.extent, translateExtent));\n }\n\n function mouseupped(event) {\n v.on("mousemove.zoom mouseup.zoom", null);\n yesdrag(event.view, g.moved);\n d3_zoom_src_noevent(event);\n g.event(event).end();\n }\n }\n\n function dblclicked(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var t0 = this.__zoom,\n p0 = src_pointer(event.changedTouches ? event.changedTouches[0] : event, this),\n p1 = t0.invert(p0),\n k1 = t0.k * (event.shiftKey ? 0.5 : 2),\n t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, args), translateExtent);\n d3_zoom_src_noevent(event);\n if (duration > 0) src_select(this).transition().duration(duration).call(schedule, t1, p0, event);else src_select(this).call(zoom.transform, t1, p0, event);\n }\n\n function touchstarted(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var touches = event.touches,\n n = touches.length,\n g = gesture(this, args, event.changedTouches.length === n).event(event),\n started,\n i,\n t,\n p;\n src_noevent_nopropagation(event);\n\n for (i = 0; i < n; ++i) {\n t = touches[i], p = src_pointer(t, this);\n p = [p, this.__zoom.invert(p), t.identifier];\n if (!g.touch0) g.touch0 = p, started = true, g.taps = 1 + !!touchstarting;else if (!g.touch1 && g.touch0[2] !== p[2]) g.touch1 = p, g.taps = 0;\n }\n\n if (touchstarting) touchstarting = clearTimeout(touchstarting);\n\n if (started) {\n if (g.taps < 2) touchfirst = p[0], touchstarting = setTimeout(function () {\n touchstarting = null;\n }, touchDelay);\n src_interrupt(this);\n g.start();\n }\n }\n\n function touchmoved(event, ...args) {\n if (!this.__zooming) return;\n var g = gesture(this, args).event(event),\n touches = event.changedTouches,\n n = touches.length,\n i,\n t,\n p,\n l;\n d3_zoom_src_noevent(event);\n\n for (i = 0; i < n; ++i) {\n t = touches[i], p = src_pointer(t, this);\n if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;\n }\n\n t = g.that.__zoom;\n\n if (g.touch1) {\n var p0 = g.touch0[0],\n l0 = g.touch0[1],\n p1 = g.touch1[0],\n l1 = g.touch1[1],\n dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,\n dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;\n t = scale(t, Math.sqrt(dp / dl));\n p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];\n l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];\n } else if (g.touch0) p = g.touch0[0], l = g.touch0[1];else return;\n\n g.zoom("touch", constrain(translate(t, p, l), g.extent, translateExtent));\n }\n\n function touchended(event, ...args) {\n if (!this.__zooming) return;\n var g = gesture(this, args).event(event),\n touches = event.changedTouches,\n n = touches.length,\n i,\n t;\n src_noevent_nopropagation(event);\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function () {\n touchending = null;\n }, touchDelay);\n\n for (i = 0; i < n; ++i) {\n t = touches[i];\n if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;\n }\n\n if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;\n if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]);else {\n g.end(); // If this was a dbltap, reroute to the (optional) dblclick.zoom handler.\n\n if (g.taps === 2) {\n t = src_pointer(t, this);\n\n if (Math.hypot(touchfirst[0] - t[0], touchfirst[1] - t[1]) < tapDistance) {\n var p = src_select(this).on("dblclick.zoom");\n if (p) p.apply(this, arguments);\n }\n }\n }\n }\n\n zoom.wheelDelta = function (_) {\n return arguments.length ? (wheelDelta = typeof _ === "function" ? _ : d3_zoom_src_constant(+_), zoom) : wheelDelta;\n };\n\n zoom.filter = function (_) {\n return arguments.length ? (filter = typeof _ === "function" ? _ : d3_zoom_src_constant(!!_), zoom) : filter;\n };\n\n zoom.touchable = function (_) {\n return arguments.length ? (touchable = typeof _ === "function" ? _ : d3_zoom_src_constant(!!_), zoom) : touchable;\n };\n\n zoom.extent = function (_) {\n return arguments.length ? (extent = typeof _ === "function" ? _ : d3_zoom_src_constant([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;\n };\n\n zoom.scaleExtent = function (_) {\n return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];\n };\n\n zoom.translateExtent = function (_) {\n return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];\n };\n\n zoom.constrain = function (_) {\n return arguments.length ? (constrain = _, zoom) : constrain;\n };\n\n zoom.duration = function (_) {\n return arguments.length ? (duration = +_, zoom) : duration;\n };\n\n zoom.interpolate = function (_) {\n return arguments.length ? (interpolate = _, zoom) : interpolate;\n };\n\n zoom.on = function () {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? zoom : value;\n };\n\n zoom.clickDistance = function (_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);\n };\n\n zoom.tapDistance = function (_) {\n return arguments.length ? (tapDistance = +_, zoom) : tapDistance;\n };\n\n return zoom;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-zoom/src/index.js\n\n\n;// CONCATENATED MODULE: ./node_modules/d3/src/index.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\nvar injectStylesIntoStyleTag = __webpack_require__(379);\nvar injectStylesIntoStyleTag_default = /*#__PURE__*/__webpack_require__.n(injectStylesIntoStyleTag);\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/styleDomAPI.js\nvar styleDomAPI = __webpack_require__(795);\nvar styleDomAPI_default = /*#__PURE__*/__webpack_require__.n(styleDomAPI);\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/insertBySelector.js\nvar insertBySelector = __webpack_require__(569);\nvar insertBySelector_default = /*#__PURE__*/__webpack_require__.n(insertBySelector);\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\nvar setAttributesWithoutAttributes = __webpack_require__(565);\nvar setAttributesWithoutAttributes_default = /*#__PURE__*/__webpack_require__.n(setAttributesWithoutAttributes);\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/insertStyleElement.js\nvar insertStyleElement = __webpack_require__(216);\nvar insertStyleElement_default = /*#__PURE__*/__webpack_require__.n(insertStyleElement);\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/styleTagTransform.js\nvar styleTagTransform = __webpack_require__(589);\nvar styleTagTransform_default = /*#__PURE__*/__webpack_require__.n(styleTagTransform);\n// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./src/FileUpload/FileUpload.css\nvar FileUpload = __webpack_require__(561);\n;// CONCATENATED MODULE: ./src/FileUpload/FileUpload.css\n\n \n \n \n \n \n \n \n \n \n\nvar options = {};\n\noptions.styleTagTransform = (styleTagTransform_default());\noptions.setAttributes = (setAttributesWithoutAttributes_default());\n\n options.insert = insertBySelector_default().bind(null, "head");\n \noptions.domAPI = (styleDomAPI_default());\noptions.insertStyleElement = (insertStyleElement_default());\n\nvar update = injectStylesIntoStyleTag_default()(FileUpload/* default */.Z, options);\n\n\n\n\n /* harmony default export */ const FileUpload_FileUpload = (FileUpload/* default */.Z && FileUpload/* default.locals */.Z.locals ? FileUpload/* default.locals */.Z.locals : undefined);\n\n;// CONCATENATED MODULE: ./src/FileUpload/FileUpload.ts\n\n\nconst makeHeader = message => {\n const header = document.createElement(\'h1\');\n const headerContent = document.createTextNode(message);\n header.appendChild(headerContent);\n return header;\n};\n\nconst makeDropbox = (handleUpload, message) => {\n const header = makeHeader(message);\n const dropbox = document.createElement(\'div\');\n\n const dragenter = e => {\n e.stopPropagation();\n e.preventDefault();\n };\n\n const dragover = e => {\n e.stopPropagation();\n e.preventDefault();\n };\n\n const drop = async e => {\n e.stopPropagation();\n e.preventDefault();\n const dt = e.dataTransfer;\n const files = dt.files;\n await handleUpload(files);\n removeDropbox();\n };\n\n const removeDropbox = () => {\n dropbox.removeEventListener(\'dragenter\', dragenter);\n dropbox.removeEventListener(\'dragover\', dragover);\n dropbox.removeEventListener(\'drop\', drop);\n document.body.removeChild(dropbox);\n };\n\n dropbox.setAttribute(\'id\', \'fileUpload\');\n dropbox.appendChild(header);\n dropbox.addEventListener(\'dragenter\', dragenter, false);\n dropbox.addEventListener(\'dragover\', dragover, false);\n dropbox.addEventListener(\'drop\', drop, false);\n document.body.appendChild(dropbox);\n};\n;// CONCATENATED MODULE: ./src/dndTree/preprocess/index.ts\nconst createNode = node => {\n if (node.id === \'Root\') {\n return {\n id: \'Root\',\n type: \'node\',\n parentId: undefined,\n words: undefined\n };\n } else {\n return {\n id: node.id,\n type: \'node\',\n parentId: undefined,\n words: undefined\n };\n }\n};\n\nconst levelLinkNodes = data => {\n const {\n nodes,\n links\n } = data;\n links.forEach(e => {\n const {\n source,\n target\n } = e;\n const targetNode = nodes.find(p => p.id === target);\n\n if (!targetNode || targetNode.id.toLowerCase() === \'root\') {\n throw new Error();\n }\n\n targetNode.parentId = source;\n });\n return nodes;\n};\n\nconst preprocessData = data => {\n const nodeIsTopic = d => {\n return !d.is_word;\n };\n\n const nodeIsWord = d => {\n return d.is_word;\n };\n\n const topicNodes = data.nodes.filter(nodeIsTopic);\n const scaffoldNodes = topicNodes.map(createNode);\n const wordNodes = data.nodes.filter(nodeIsWord);\n const idToNodeType = new Map(data.nodes.map(d => [d.id, !d.is_word]));\n const wordIdToName = new Map(wordNodes.map(d => [d.id, d.name]));\n\n const linkIsTopical = d => {\n const sourceIsTopic = Boolean(idToNodeType.get(d.source));\n const targetIsTopic = Boolean(idToNodeType.get(d.target));\n return sourceIsTopic && targetIsTopic;\n };\n\n const linkIsTopicalWord = d => {\n if (!(\'weight\' in d)) {\n return false;\n }\n\n const sourceIsTopic = Boolean(idToNodeType.get(d.source));\n const targetIsTopic = Boolean(idToNodeType.get(d.target));\n return sourceIsTopic && !targetIsTopic;\n };\n\n const topicLinks = data.links.filter(linkIsTopical);\n const nodeWordLinks = data.links.filter(linkIsTopicalWord);\n const hTopicNodes = levelLinkNodes({\n nodes: scaffoldNodes,\n links: topicLinks\n });\n const nodeWordsMap = new Map(nodeWordLinks.map(d => [d.source, []]));\n nodeWordLinks.forEach(d => {\n let nodeWords = nodeWordsMap.get(d.source);\n nodeWords = nodeWords ? nodeWords : [];\n const wordName = wordIdToName.get(d.target);\n\n if (!wordName) {\n throw new Error();\n }\n\n nodeWords.push({\n index: nodeWords.length + 1,\n name: wordName,\n weight: d.weight,\n x: 0,\n y: 0,\n vx: 0,\n vy: 0\n });\n nodeWordsMap.set(d.source, nodeWords);\n }); // Assign (word, weight) to nodes\n\n hTopicNodes.forEach(e => {\n e.words = nodeWordsMap.get(e.id);\n });\n return hTopicNodes;\n};\n;// CONCATENATED MODULE: ./src/dndTree/DndConfig.ts\nconst DefaultDndConfig = {\n animationDuration: 750,\n initialDepth: 20,\n size: {\n height: window.innerHeight,\n width: window.innerWidth\n },\n margin: {\n top: 30,\n right: 120,\n bottom: 30,\n left: 60\n },\n dScale: {\n dx: 20,\n dy: window.innerWidth / 6\n },\n cloudOptions: {\n fontSize: [8, 15],\n fontStyle: \'Impact\',\n rotateAngles: [0, 90],\n rotateWeights: [0.8, 0.2],\n opacity: [0.2, 0.8],\n layoutSize: [100, 100],\n padding: 1\n }\n};\n// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./src/dndTree/index.css\nvar dndTree = __webpack_require__(436);\n;// CONCATENATED MODULE: ./src/dndTree/index.css\n\n \n \n \n \n \n \n \n \n \n\nvar dndTree_options = {};\n\ndndTree_options.styleTagTransform = (styleTagTransform_default());\ndndTree_options.setAttributes = (setAttributesWithoutAttributes_default());\n\n dndTree_options.insert = insertBySelector_default().bind(null, "head");\n \ndndTree_options.domAPI = (styleDomAPI_default());\ndndTree_options.insertStyleElement = (insertStyleElement_default());\n\nvar dndTree_update = injectStylesIntoStyleTag_default()(dndTree/* default */.Z, dndTree_options);\n\n\n\n\n /* harmony default export */ const src_dndTree = (dndTree/* default */.Z && dndTree/* default.locals */.Z.locals ? dndTree/* default.locals */.Z.locals : undefined);\n\n;// CONCATENATED MODULE: ./src/dndTree/dndTree.ts\n\n\n\nconst Config = DefaultDndConfig;\n\nconst shimNode = node => {\n return { ...node,\n _children: undefined,\n x0: 0,\n y0: 0\n };\n};\n\nfunction makeTree(n) {\n const nodeShims = n.map(shimNode); // @ts-expect-error\n\n const rootNode = stratify()(nodeShims);\n const treeSize = [Config.size.height - Config.margin.top - Config.margin.bottom, Config.size.width - Config.margin.left - Config.margin.right];\n const tree = src_tree().size(treeSize).separation(d => d.depth * 1.2);\n rootNode.x0 = Config.dScale.dy / 2;\n rootNode.y0 = 0;\n const maxDepth = rootNode.descendants().map(d => d.depth).reduce((a, b) => Math.max(a, b)); // Initial setup for collapsing\n\n rootNode.descendants().forEach(d => {\n if (d.depth && d.depth > Config.initialDepth) {\n if (d.children) {\n d._children = d.children;\n d.children = undefined;\n }\n }\n });\n const viewBox = [-Config.margin.left, -Config.margin.top, Config.size.width, Config.size.height]; // @ts-expect-error\n\n const root = tree(rootNode);\n const nodeSymbolCircle = symbolsFill[0];\n const nodeSymbolPlus = symbolsFill[1];\n const svg = src_create(\'svg\').attr(\'viewBox\', viewBox).attr(\'cursor\', \'grab\');\n const svgGroup = svg.append(\'g\');\n const zoomListener = zoom().scaleExtent([0.1, 50]).on(\'zoom\', event => svgGroup.attr(\'transform\', event.transform));\n svg.call(zoomListener); // All links\n\n const gLink = svgGroup.append(\'g\').attr(\'fill\', \'none\').attr(\'stroke\', \'#555555\').attr(\'stroke-opacity\', 0.4).attr(\'stroke-width\', 1.5);\n const gNode = svgGroup.append(\'g\').attr(\'cursor\', \'pointer\').attr(\'pointer-events\', \'all\');\n const colorScale = sequential(rainbow).domain([0, maxDepth]);\n const sizeScaleTopics = linear_linear().range([3, 1]).domain([0, maxDepth]);\n const fontSizeScale = linear_linear().range([8, 14]).domain([0, 1]);\n const opacityScaler = quantize().domain([0, 1]).range([0.25, 1]);\n const diagonal = linkHorizontal().x(d => d.y).y(d => d.x);\n\n function update(source) {\n const nodes = root.descendants().reverse();\n const links = root.links(); // Rerun tree layout\n // @ts-expect-error\n\n tree(root);\n let nodeParent = gNode.selectAll(\'g.nodeParent\') //@ts-expect-error\n .data(nodes, d => d.id);\n nodeParent.exit().transition().ease(cubicIn).duration(Config.animationDuration).remove().attr(\'transform\', d => `translate(${source.y},${source.x})`).attr(\'fill-opacity\', 0).attr(\'stroke-opacity\', 0);\n nodeParent.select(\'path\').attr(\'class\', \'nodeShape\').attr(\'d\', symbol_Symbol().type(d => !d.children && d._children ? nodeSymbolPlus : nodeSymbolCircle)).attr(\'fill\', d => {\n const rgb = colorScale(d.depth);\n return color(rgb).formatHex();\n });\n const nodeEnter = nodeParent.enter().append(\'g\').attr(\'class\', \'nodeParent\').attr(\'transform\', d => `translate(${source.y0},${source.x0})`).attr(\'fill-opacity\', 0).attr(\'stroke-opacity\', 0) // .attr("transform", d => `translate(${source.y0}, ${source.x0})`)\n .on(\'click\', (event, d) => {\n // @ts-expect-error\n const sD = d;\n\n if (sD.children) {\n sD.descendants().reverse().forEach(s => {\n if (s.children) {\n s._children = s.children;\n s.children = undefined;\n } else {\n s.children = s._children;\n s._children = undefined;\n }\n });\n } else {\n sD.children = sD._children;\n sD._children = undefined;\n\n if (!sD.children) {\n throw new Error();\n }\n\n sD.children.forEach(c => {\n if (c.children) {\n c._children = c.children;\n c.children = undefined;\n }\n });\n }\n\n update(sD);\n });\n nodeEnter.append(\'path\').attr(\'class\', \'nodeShape\').attr(\'fill\', d => {\n const rgb = colorScale(d.depth);\n return color(rgb).formatHex();\n }).attr(\'d\', symbol_Symbol().type(d => !d.children && d._children ? nodeSymbolPlus : nodeSymbolCircle)).attr(\'transform\', d => `scale(${sizeScaleTopics(d.depth)})`);\n nodeEnter.append(\'g\').attr(\'class\', \'wordContainer\'); // @ts-expect-error\n\n nodeParent = nodeEnter.merge(nodeParent);\n nodeParent.transition().ease(cubicIn).duration(Config.animationDuration).attr(\'transform\', d => `translate(${d.y},${d.x})`).attr(\'fill-opacity\', 1).attr(\'stroke-opacity\', 1); // Words\n\n const nodeWords = nodeParent.select(\'.wordContainer\');\n\n const quadrant = i => {\n const remainder = i % 4;\n\n switch (remainder) {\n case 0:\n {\n return [1, 1];\n }\n\n case 1:\n {\n return [1, -1];\n }\n\n case 2:\n {\n return [-1, -1];\n }\n\n case 3:\n {\n return [-1, 1];\n }\n\n default:\n {\n throw new Error(\'Logic Error\');\n }\n }\n };\n\n const spiralWords = i => {\n const [signX, signY] = quadrant(i);\n const magnitude = Math.floor(i / 4);\n const x = (50 + 2 * magnitude) * signX;\n const y = (20 + 10 * magnitude) * signY;\n return `translate(${x},${y})`;\n };\n\n const nodeWordsChildren = nodeWords.selectAll(\'text\').data(d => d.data.words ? d.data.words : []);\n nodeWordsChildren.enter().append(\'text\').style(\'font-size\', d => `${fontSizeScale(d.weight)}px`).attr(\'transform\', (d, i, e) => {\n return spiralWords(i);\n }).style(\'opacity\', d => opacityScaler(d.weight)).text(d => d.name).attr(\'text-anchor\', \'middle\');\n const link = gLink.selectAll(\'path\').data(links, d => // @ts-expect-error\n d.target.data.id); // Enter any new links at the parent\'s previous position.\n\n const linkEnter = link.enter().append(\'path\').attr(\'d\', d => {\n // @ts-expect-error\n const o = {\n x: source.x0,\n y: source.y0\n }; // @ts-expect-error\n\n return diagonal({\n source: o,\n target: o\n });\n }); // Transition links to their new position.\n\n link // @ts-expect-error\n .merge(linkEnter).transition().ease(cubicIn).duration(Config.animationDuration) // @ts-expect-error\n .attr(\'d\', diagonal); // Transition exiting nodes to the parent\'s new position.\n\n link.exit().transition().ease(cubicIn).duration(Config.animationDuration).remove().attr(\'d\', d => {\n const o = {\n x: source.x,\n y: source.y\n }; // @ts-expect-error\n\n return diagonal({\n source: o,\n target: o\n });\n });\n root.eachBefore(d => {\n // @ts-expect-error\n d.x0 = d.x; // @ts-expect-error\n\n d.y0 = d.y;\n });\n }\n\n update(root);\n return svg.node();\n}\n;// CONCATENATED MODULE: ./src/dndTree/index.ts\n\n\n\n\n\nconst fileUploaded = async f => {\n const uploadFile = f[0];\n const uploadFileUrl = window.URL.createObjectURL(uploadFile);\n const rawData = await json(uploadFileUrl);\n\n if (!rawData) {\n throw new Error(\'No Data\');\n }\n\n const data = preprocessData(rawData);\n const chart = makeTree(data);\n\n if (!chart) {\n throw new Error(\'Error making chart\');\n }\n\n document.body.appendChild(chart);\n};\n\nconst setupDropbox = () => {\n console.log(\'Creating Dropbox\');\n makeDropbox(fileUploaded, \'Drag and Drop a .json File to Create DndTree\');\n};\n\ndocument.addEventListener(\'DOMContentLoaded\', setupDropbox);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTAyLmpzIiwibWFwcGluZ3MiOiI7O0FBQUEsU0FBU0EsSUFBVCxHQUFnQixDQUFFOztBQUVsQiw2QkFBZSxrQkFBU0MsUUFBVCxFQUFtQjtBQUNoQyxTQUFPQSxRQUFRLElBQUksSUFBWixHQUFtQkQsSUFBbkIsR0FBMEIsWUFBVztBQUMxQyxXQUFPLEtBQUtFLGFBQUwsQ0FBbUJELFFBQW5CLENBQVA7QUFDRCxHQUZEO0FBR0QsQzs7QUNORDtBQUNBO0FBRUEsNkJBQWUsMEJBQVNHLE1BQVQsRUFBaUI7QUFDOUIsTUFBSSxPQUFPQSxNQUFQLEtBQWtCLFVBQXRCLEVBQWtDQSxNQUFNLEdBQUdILFFBQVEsQ0FBQ0csTUFBRCxDQUFqQjs7QUFFbEMsT0FBSyxJQUFJQyxNQUFNLEdBQUcsS0FBS0MsT0FBbEIsRUFBMkJDLENBQUMsR0FBR0YsTUFBTSxDQUFDRyxNQUF0QyxFQUE4Q0MsU0FBUyxHQUFHLElBQUlDLEtBQUosQ0FBVUgsQ0FBVixDQUExRCxFQUF3RUksQ0FBQyxHQUFHLENBQWpGLEVBQW9GQSxDQUFDLEdBQUdKLENBQXhGLEVBQTJGLEVBQUVJLENBQTdGLEVBQWdHO0FBQzlGLFNBQUssSUFBSUMsS0FBSyxHQUFHUCxNQUFNLENBQUNNLENBQUQsQ0FBbEIsRUFBdUJFLENBQUMsR0FBR0QsS0FBSyxDQUFDSixNQUFqQyxFQUF5Q00sUUFBUSxHQUFHTCxTQUFTLENBQUNFLENBQUQsQ0FBVCxHQUFlLElBQUlELEtBQUosQ0FBVUcsQ0FBVixDQUFuRSxFQUFpRkUsSUFBakYsRUFBdUZDLE9BQXZGLEVBQWdHQyxDQUFDLEdBQUcsQ0FBekcsRUFBNEdBLENBQUMsR0FBR0osQ0FBaEgsRUFBbUgsRUFBRUksQ0FBckgsRUFBd0g7QUFDdEgsVUFBSSxDQUFDRixJQUFJLEdBQUdILEtBQUssQ0FBQ0ssQ0FBRCxDQUFiLE1BQXNCRCxPQUFPLEdBQUdaLE1BQU0sQ0FBQ2MsSUFBUCxDQUFZSCxJQUFaLEVBQWtCQSxJQUFJLENBQUNJLFFBQXZCLEVBQWlDRixDQUFqQyxFQUFvQ0wsS0FBcEMsQ0FBaEMsQ0FBSixFQUFpRjtBQUMvRSxZQUFJLGNBQWNHLElBQWxCLEVBQXdCQyxPQUFPLENBQUNHLFFBQVIsR0FBbUJKLElBQUksQ0FBQ0ksUUFBeEI7QUFDeEJMLFFBQUFBLFFBQVEsQ0FBQ0csQ0FBRCxDQUFSLEdBQWNELE9BQWQ7QUFDRDtBQUNGO0FBQ0Y7O0FBRUQsU0FBTyxJQUFJYixTQUFKLENBQWNNLFNBQWQsRUFBeUIsS0FBS1csUUFBOUIsQ0FBUDtBQUNELEM7O0FDaEJEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNlLFNBQVNDLEtBQVQsQ0FBZUMsQ0FBZixFQUFrQjtBQUMvQixTQUFPQSxDQUFDLElBQUksSUFBTCxHQUFZLEVBQVosR0FBaUJaLEtBQUssQ0FBQ2EsT0FBTixDQUFjRCxDQUFkLElBQW1CQSxDQUFuQixHQUF1QlosS0FBSyxDQUFDYyxJQUFOLENBQVdGLENBQVgsQ0FBL0M7QUFDRCxDOztBQ1JELFNBQVNHLEtBQVQsR0FBaUI7QUFDZixTQUFPLEVBQVA7QUFDRDs7QUFFRCw2QkFBZSxxQkFBU3hCLFFBQVQsRUFBbUI7QUFDaEMsU0FBT0EsUUFBUSxJQUFJLElBQVosR0FBbUJ3QixLQUFuQixHQUEyQixZQUFXO0FBQzNDLFdBQU8sS0FBS0MsZ0JBQUwsQ0FBc0J6QixRQUF0QixDQUFQO0FBQ0QsR0FGRDtBQUdELEM7O0FDUkQ7QUFDQTtBQUNBOztBQUVBLFNBQVMyQixRQUFULENBQWtCeEIsTUFBbEIsRUFBMEI7QUFDeEIsU0FBTyxZQUFXO0FBQ2hCLFdBQU9pQixLQUFLLENBQUNqQixNQUFNLENBQUN5QixLQUFQLENBQWEsSUFBYixFQUFtQkMsU0FBbkIsQ0FBRCxDQUFaO0FBQ0QsR0FGRDtBQUdEOztBQUVELDZCQUFlLG1CQUFTMUIsTUFBVCxFQUFpQjtBQUM5QixNQUFJLE9BQU9BLE1BQVAsS0FBa0IsVUFBdEIsRUFBa0NBLE1BQU0sR0FBR3dCLFFBQVEsQ0FBQ3hCLE1BQUQsQ0FBakIsQ0FBbEMsS0FDS0EsTUFBTSxHQUFHdUIsV0FBVyxDQUFDdkIsTUFBRCxDQUFwQjs7QUFFTCxPQUFLLElBQUlDLE1BQU0sR0FBRyxLQUFLQyxPQUFsQixFQUEyQkMsQ0FBQyxHQUFHRixNQUFNLENBQUNHLE1BQXRDLEVBQThDQyxTQUFTLEdBQUcsRUFBMUQsRUFBOERzQixPQUFPLEdBQUcsRUFBeEUsRUFBNEVwQixDQUFDLEdBQUcsQ0FBckYsRUFBd0ZBLENBQUMsR0FBR0osQ0FBNUYsRUFBK0YsRUFBRUksQ0FBakcsRUFBb0c7QUFDbEcsU0FBSyxJQUFJQyxLQUFLLEdBQUdQLE1BQU0sQ0FBQ00sQ0FBRCxDQUFsQixFQUF1QkUsQ0FBQyxHQUFHRCxLQUFLLENBQUNKLE1BQWpDLEVBQXlDTyxJQUF6QyxFQUErQ0UsQ0FBQyxHQUFHLENBQXhELEVBQTJEQSxDQUFDLEdBQUdKLENBQS9ELEVBQWtFLEVBQUVJLENBQXBFLEVBQXVFO0FBQ3JFLFVBQUlGLElBQUksR0FBR0gsS0FBSyxDQUFDSyxDQUFELENBQWhCLEVBQXFCO0FBQ25CUixRQUFBQSxTQUFTLENBQUN1QixJQUFWLENBQWU1QixNQUFNLENBQUNjLElBQVAsQ0FBWUgsSUFBWixFQUFrQkEsSUFBSSxDQUFDSSxRQUF2QixFQUFpQ0YsQ0FBakMsRUFBb0NMLEtBQXBDLENBQWY7QUFDQW1CLFFBQUFBLE9BQU8sQ0FBQ0MsSUFBUixDQUFhakIsSUFBYjtBQUNEO0FBQ0Y7QUFDRjs7QUFFRCxTQUFPLElBQUlaLFNBQUosQ0FBY00sU0FBZCxFQUF5QnNCLE9BQXpCLENBQVA7QUFDRCxDOztBQ3hCRCw2QkFBZSxpQkFBUzlCLFFBQVQsRUFBbUI7QUFDaEMsU0FBTyxZQUFXO0FBQ2hCLFdBQU8sS0FBS2dDLE9BQUwsQ0FBYWhDLFFBQWIsQ0FBUDtBQUNELEdBRkQ7QUFHRDtBQUVNLFNBQVNpQyxZQUFULENBQXNCakMsUUFBdEIsRUFBZ0M7QUFDckMsU0FBTyxVQUFTYyxJQUFULEVBQWU7QUFDcEIsV0FBT0EsSUFBSSxDQUFDa0IsT0FBTCxDQUFhaEMsUUFBYixDQUFQO0FBQ0QsR0FGRDtBQUdELEM7O0FDVkQ7QUFFQSxJQUFJa0MsSUFBSSxHQUFHekIsS0FBSyxDQUFDMEIsU0FBTixDQUFnQkQsSUFBM0I7O0FBRUEsU0FBU0UsU0FBVCxDQUFtQkMsS0FBbkIsRUFBMEI7QUFDeEIsU0FBTyxZQUFXO0FBQ2hCLFdBQU9ILElBQUksQ0FBQ2pCLElBQUwsQ0FBVSxLQUFLcUIsUUFBZixFQUF5QkQsS0FBekIsQ0FBUDtBQUNELEdBRkQ7QUFHRDs7QUFFRCxTQUFTRSxVQUFULEdBQXNCO0FBQ3BCLFNBQU8sS0FBS0MsaUJBQVo7QUFDRDs7QUFFRCw2QkFBZSxxQkFBU0gsS0FBVCxFQUFnQjtBQUM3QixTQUFPLEtBQUtsQyxNQUFMLENBQVlrQyxLQUFLLElBQUksSUFBVCxHQUFnQkUsVUFBaEIsR0FDYkgsU0FBUyxDQUFDLE9BQU9DLEtBQVAsS0FBaUIsVUFBakIsR0FBOEJBLEtBQTlCLEdBQXNDSixZQUFZLENBQUNJLEtBQUQsQ0FBbkQsQ0FEUixDQUFQO0FBRUQsQzs7QUNqQkQ7QUFFQSxJQUFJSSxNQUFNLEdBQUdoQyxLQUFLLENBQUMwQixTQUFOLENBQWdCTSxNQUE3Qjs7QUFFQSxTQUFTSCxRQUFULEdBQW9CO0FBQ2xCLFNBQU83QixLQUFLLENBQUNjLElBQU4sQ0FBVyxLQUFLZSxRQUFoQixDQUFQO0FBQ0Q7O0FBRUQsU0FBU0ksY0FBVCxDQUF3QkwsS0FBeEIsRUFBK0I7QUFDN0IsU0FBTyxZQUFXO0FBQ2hCLFdBQU9JLE1BQU0sQ0FBQ3hCLElBQVAsQ0FBWSxLQUFLcUIsUUFBakIsRUFBMkJELEtBQTNCLENBQVA7QUFDRCxHQUZEO0FBR0Q7O0FBRUQsNkJBQWUsd0JBQVNBLEtBQVQsRUFBZ0I7QUFDN0IsU0FBTyxLQUFLTSxTQUFMLENBQWVOLEtBQUssSUFBSSxJQUFULEdBQWdCQyxRQUFoQixHQUNoQkksY0FBYyxDQUFDLE9BQU9MLEtBQVAsS0FBaUIsVUFBakIsR0FBOEJBLEtBQTlCLEdBQXNDSixZQUFZLENBQUNJLEtBQUQsQ0FBbkQsQ0FEYixDQUFQO0FBRUQsQzs7QUNqQkQ7QUFDQTtBQUVBLDZCQUFlLDBCQUFTQSxLQUFULEVBQWdCO0FBQzdCLE1BQUksT0FBT0EsS0FBUCxLQUFpQixVQUFyQixFQUFpQ0EsS0FBSyxHQUFHTyxPQUFPLENBQUNQLEtBQUQsQ0FBZjs7QUFFakMsT0FBSyxJQUFJakMsTUFBTSxHQUFHLEtBQUtDLE9BQWxCLEVBQTJCQyxDQUFDLEdBQUdGLE1BQU0sQ0FBQ0csTUFBdEMsRUFBOENDLFNBQVMsR0FBRyxJQUFJQyxLQUFKLENBQVVILENBQVYsQ0FBMUQsRUFBd0VJLENBQUMsR0FBRyxDQUFqRixFQUFvRkEsQ0FBQyxHQUFHSixDQUF4RixFQUEyRixFQUFFSSxDQUE3RixFQUFnRztBQUM5RixTQUFLLElBQUlDLEtBQUssR0FBR1AsTUFBTSxDQUFDTSxDQUFELENBQWxCLEVBQXVCRSxDQUFDLEdBQUdELEtBQUssQ0FBQ0osTUFBakMsRUFBeUNNLFFBQVEsR0FBR0wsU0FBUyxDQUFDRSxDQUFELENBQVQsR0FBZSxFQUFuRSxFQUF1RUksSUFBdkUsRUFBNkVFLENBQUMsR0FBRyxDQUF0RixFQUF5RkEsQ0FBQyxHQUFHSixDQUE3RixFQUFnRyxFQUFFSSxDQUFsRyxFQUFxRztBQUNuRyxVQUFJLENBQUNGLElBQUksR0FBR0gsS0FBSyxDQUFDSyxDQUFELENBQWIsS0FBcUJxQixLQUFLLENBQUNwQixJQUFOLENBQVdILElBQVgsRUFBaUJBLElBQUksQ0FBQ0ksUUFBdEIsRUFBZ0NGLENBQWhDLEVBQW1DTCxLQUFuQyxDQUF6QixFQUFvRTtBQUNsRUUsUUFBQUEsUUFBUSxDQUFDa0IsSUFBVCxDQUFjakIsSUFBZDtBQUNEO0FBQ0Y7QUFDRjs7QUFFRCxTQUFPLElBQUlaLFNBQUosQ0FBY00sU0FBZCxFQUF5QixLQUFLVyxRQUE5QixDQUFQO0FBQ0QsQzs7QUNmRCw2QkFBZSxnQkFBUzBCLE1BQVQsRUFBaUI7QUFDOUIsU0FBTyxJQUFJcEMsS0FBSixDQUFVb0MsTUFBTSxDQUFDdEMsTUFBakIsQ0FBUDtBQUNELEM7O0FDRkQ7QUFDQTtBQUVBLDZCQUFlLGlCQUFXO0FBQ3hCLFNBQU8sSUFBSUwsU0FBSixDQUFjLEtBQUs2QyxNQUFMLElBQWUsS0FBSzFDLE9BQUwsQ0FBYTJDLEdBQWIsQ0FBaUJGLE1BQWpCLENBQTdCLEVBQXVELEtBQUszQixRQUE1RCxDQUFQO0FBQ0Q7QUFFTSxTQUFTOEIsU0FBVCxDQUFtQkMsTUFBbkIsRUFBMkJDLEtBQTNCLEVBQWtDO0FBQ3ZDLE9BQUtDLGFBQUwsR0FBcUJGLE1BQU0sQ0FBQ0UsYUFBNUI7QUFDQSxPQUFLQyxZQUFMLEdBQW9CSCxNQUFNLENBQUNHLFlBQTNCO0FBQ0EsT0FBS0MsS0FBTCxHQUFhLElBQWI7QUFDQSxPQUFLQyxPQUFMLEdBQWVMLE1BQWY7QUFDQSxPQUFLaEMsUUFBTCxHQUFnQmlDLEtBQWhCO0FBQ0Q7QUFFREYsU0FBUyxDQUFDZCxTQUFWLEdBQXNCO0FBQ3BCcUIsRUFBQUEsV0FBVyxFQUFFUCxTQURPO0FBRXBCUSxFQUFBQSxXQUFXLEVBQUUsVUFBU0MsS0FBVCxFQUFnQjtBQUFFLFdBQU8sS0FBS0gsT0FBTCxDQUFhSSxZQUFiLENBQTBCRCxLQUExQixFQUFpQyxLQUFLSixLQUF0QyxDQUFQO0FBQXNELEdBRmpFO0FBR3BCSyxFQUFBQSxZQUFZLEVBQUUsVUFBU0QsS0FBVCxFQUFnQkUsSUFBaEIsRUFBc0I7QUFBRSxXQUFPLEtBQUtMLE9BQUwsQ0FBYUksWUFBYixDQUEwQkQsS0FBMUIsRUFBaUNFLElBQWpDLENBQVA7QUFBZ0QsR0FIbEU7QUFJcEIzRCxFQUFBQSxhQUFhLEVBQUUsVUFBU0QsUUFBVCxFQUFtQjtBQUFFLFdBQU8sS0FBS3VELE9BQUwsQ0FBYXRELGFBQWIsQ0FBMkJELFFBQTNCLENBQVA7QUFBOEMsR0FKOUQ7QUFLcEJ5QixFQUFBQSxnQkFBZ0IsRUFBRSxVQUFTekIsUUFBVCxFQUFtQjtBQUFFLFdBQU8sS0FBS3VELE9BQUwsQ0FBYTlCLGdCQUFiLENBQThCekIsUUFBOUIsQ0FBUDtBQUFpRDtBQUxwRSxDQUF0QixDOztBQ2ZBLDZCQUFlLHNCQUFTcUIsQ0FBVCxFQUFZO0FBQ3pCLFNBQU8sWUFBVztBQUNoQixXQUFPQSxDQUFQO0FBQ0QsR0FGRDtBQUdELEM7O0FDSkQ7QUFDQTtBQUNBOztBQUVBLFNBQVN5QyxTQUFULENBQW1CWixNQUFuQixFQUEyQnZDLEtBQTNCLEVBQWtDb0QsS0FBbEMsRUFBeUNsQixNQUF6QyxFQUFpRG1CLElBQWpELEVBQXVEQyxJQUF2RCxFQUE2RDtBQUMzRCxNQUFJakQsQ0FBQyxHQUFHLENBQVI7QUFBQSxNQUNJRixJQURKO0FBQUEsTUFFSW9ELFdBQVcsR0FBR3ZELEtBQUssQ0FBQ0osTUFGeEI7QUFBQSxNQUdJNEQsVUFBVSxHQUFHRixJQUFJLENBQUMxRCxNQUh0QixDQUQyRCxDQU0zRDtBQUNBO0FBQ0E7O0FBQ0EsU0FBT1MsQ0FBQyxHQUFHbUQsVUFBWCxFQUF1QixFQUFFbkQsQ0FBekIsRUFBNEI7QUFDMUIsUUFBSUYsSUFBSSxHQUFHSCxLQUFLLENBQUNLLENBQUQsQ0FBaEIsRUFBcUI7QUFDbkJGLE1BQUFBLElBQUksQ0FBQ0ksUUFBTCxHQUFnQitDLElBQUksQ0FBQ2pELENBQUQsQ0FBcEI7QUFDQTZCLE1BQUFBLE1BQU0sQ0FBQzdCLENBQUQsQ0FBTixHQUFZRixJQUFaO0FBQ0QsS0FIRCxNQUdPO0FBQ0xpRCxNQUFBQSxLQUFLLENBQUMvQyxDQUFELENBQUwsR0FBVyxJQUFJaUMsU0FBSixDQUFjQyxNQUFkLEVBQXNCZSxJQUFJLENBQUNqRCxDQUFELENBQTFCLENBQVg7QUFDRDtBQUNGLEdBaEIwRCxDQWtCM0Q7OztBQUNBLFNBQU9BLENBQUMsR0FBR2tELFdBQVgsRUFBd0IsRUFBRWxELENBQTFCLEVBQTZCO0FBQzNCLFFBQUlGLElBQUksR0FBR0gsS0FBSyxDQUFDSyxDQUFELENBQWhCLEVBQXFCO0FBQ25CZ0QsTUFBQUEsSUFBSSxDQUFDaEQsQ0FBRCxDQUFKLEdBQVVGLElBQVY7QUFDRDtBQUNGO0FBQ0Y7O0FBRUQsU0FBU3NELE9BQVQsQ0FBaUJsQixNQUFqQixFQUF5QnZDLEtBQXpCLEVBQWdDb0QsS0FBaEMsRUFBdUNsQixNQUF2QyxFQUErQ21CLElBQS9DLEVBQXFEQyxJQUFyRCxFQUEyREksR0FBM0QsRUFBZ0U7QUFDOUQsTUFBSXJELENBQUo7QUFBQSxNQUNJRixJQURKO0FBQUEsTUFFSXdELGNBQWMsR0FBRyxJQUFJQyxHQUFKLEVBRnJCO0FBQUEsTUFHSUwsV0FBVyxHQUFHdkQsS0FBSyxDQUFDSixNQUh4QjtBQUFBLE1BSUk0RCxVQUFVLEdBQUdGLElBQUksQ0FBQzFELE1BSnRCO0FBQUEsTUFLSWlFLFNBQVMsR0FBRyxJQUFJL0QsS0FBSixDQUFVeUQsV0FBVixDQUxoQjtBQUFBLE1BTUlPLFFBTkosQ0FEOEQsQ0FTOUQ7QUFDQTs7QUFDQSxPQUFLekQsQ0FBQyxHQUFHLENBQVQsRUFBWUEsQ0FBQyxHQUFHa0QsV0FBaEIsRUFBNkIsRUFBRWxELENBQS9CLEVBQWtDO0FBQ2hDLFFBQUlGLElBQUksR0FBR0gsS0FBSyxDQUFDSyxDQUFELENBQWhCLEVBQXFCO0FBQ25Cd0QsTUFBQUEsU0FBUyxDQUFDeEQsQ0FBRCxDQUFULEdBQWV5RCxRQUFRLEdBQUdKLEdBQUcsQ0FBQ3BELElBQUosQ0FBU0gsSUFBVCxFQUFlQSxJQUFJLENBQUNJLFFBQXBCLEVBQThCRixDQUE5QixFQUFpQ0wsS0FBakMsSUFBMEMsRUFBcEU7O0FBQ0EsVUFBSTJELGNBQWMsQ0FBQ0ksR0FBZixDQUFtQkQsUUFBbkIsQ0FBSixFQUFrQztBQUNoQ1QsUUFBQUEsSUFBSSxDQUFDaEQsQ0FBRCxDQUFKLEdBQVVGLElBQVY7QUFDRCxPQUZELE1BRU87QUFDTHdELFFBQUFBLGNBQWMsQ0FBQ0ssR0FBZixDQUFtQkYsUUFBbkIsRUFBNkIzRCxJQUE3QjtBQUNEO0FBQ0Y7QUFDRixHQXBCNkQsQ0FzQjlEO0FBQ0E7QUFDQTs7O0FBQ0EsT0FBS0UsQ0FBQyxHQUFHLENBQVQsRUFBWUEsQ0FBQyxHQUFHbUQsVUFBaEIsRUFBNEIsRUFBRW5ELENBQTlCLEVBQWlDO0FBQy9CeUQsSUFBQUEsUUFBUSxHQUFHSixHQUFHLENBQUNwRCxJQUFKLENBQVNpQyxNQUFULEVBQWlCZSxJQUFJLENBQUNqRCxDQUFELENBQXJCLEVBQTBCQSxDQUExQixFQUE2QmlELElBQTdCLElBQXFDLEVBQWhEOztBQUNBLFFBQUluRCxJQUFJLEdBQUd3RCxjQUFjLENBQUNNLEdBQWYsQ0FBbUJILFFBQW5CLENBQVgsRUFBeUM7QUFDdkM1QixNQUFBQSxNQUFNLENBQUM3QixDQUFELENBQU4sR0FBWUYsSUFBWjtBQUNBQSxNQUFBQSxJQUFJLENBQUNJLFFBQUwsR0FBZ0IrQyxJQUFJLENBQUNqRCxDQUFELENBQXBCO0FBQ0FzRCxNQUFBQSxjQUFjLENBQUNPLE1BQWYsQ0FBc0JKLFFBQXRCO0FBQ0QsS0FKRCxNQUlPO0FBQ0xWLE1BQUFBLEtBQUssQ0FBQy9DLENBQUQsQ0FBTCxHQUFXLElBQUlpQyxTQUFKLENBQWNDLE1BQWQsRUFBc0JlLElBQUksQ0FBQ2pELENBQUQsQ0FBMUIsQ0FBWDtBQUNEO0FBQ0YsR0FsQzZELENBb0M5RDs7O0FBQ0EsT0FBS0EsQ0FBQyxHQUFHLENBQVQsRUFBWUEsQ0FBQyxHQUFHa0QsV0FBaEIsRUFBNkIsRUFBRWxELENBQS9CLEVBQWtDO0FBQ2hDLFFBQUksQ0FBQ0YsSUFBSSxHQUFHSCxLQUFLLENBQUNLLENBQUQsQ0FBYixLQUFzQnNELGNBQWMsQ0FBQ00sR0FBZixDQUFtQkosU0FBUyxDQUFDeEQsQ0FBRCxDQUE1QixNQUFxQ0YsSUFBL0QsRUFBc0U7QUFDcEVrRCxNQUFBQSxJQUFJLENBQUNoRCxDQUFELENBQUosR0FBVUYsSUFBVjtBQUNEO0FBQ0Y7QUFDRjs7QUFFRCxTQUFTcUMsS0FBVCxDQUFlckMsSUFBZixFQUFxQjtBQUNuQixTQUFPQSxJQUFJLENBQUNJLFFBQVo7QUFDRDs7QUFFRCw2QkFBZSxjQUFTNEQsS0FBVCxFQUFnQlQsR0FBaEIsRUFBcUI7QUFDbEMsTUFBSSxDQUFDeEMsU0FBUyxDQUFDdEIsTUFBZixFQUF1QixPQUFPRSxLQUFLLENBQUNjLElBQU4sQ0FBVyxJQUFYLEVBQWlCNEIsS0FBakIsQ0FBUDtBQUV2QixNQUFJNEIsSUFBSSxHQUFHVixHQUFHLEdBQUdELE9BQUgsR0FBYU4sU0FBM0I7QUFBQSxNQUNJaEMsT0FBTyxHQUFHLEtBQUtYLFFBRG5CO0FBQUEsTUFFSWYsTUFBTSxHQUFHLEtBQUtDLE9BRmxCO0FBSUEsTUFBSSxPQUFPeUUsS0FBUCxLQUFpQixVQUFyQixFQUFpQ0EsS0FBSyxHQUFHakIsWUFBUSxDQUFDaUIsS0FBRCxDQUFoQjs7QUFFakMsT0FBSyxJQUFJeEUsQ0FBQyxHQUFHRixNQUFNLENBQUNHLE1BQWYsRUFBdUJzQyxNQUFNLEdBQUcsSUFBSXBDLEtBQUosQ0FBVUgsQ0FBVixDQUFoQyxFQUE4Q3lELEtBQUssR0FBRyxJQUFJdEQsS0FBSixDQUFVSCxDQUFWLENBQXRELEVBQW9FMEQsSUFBSSxHQUFHLElBQUl2RCxLQUFKLENBQVVILENBQVYsQ0FBM0UsRUFBeUZJLENBQUMsR0FBRyxDQUFsRyxFQUFxR0EsQ0FBQyxHQUFHSixDQUF6RyxFQUE0RyxFQUFFSSxDQUE5RyxFQUFpSDtBQUMvRyxRQUFJd0MsTUFBTSxHQUFHcEIsT0FBTyxDQUFDcEIsQ0FBRCxDQUFwQjtBQUFBLFFBQ0lDLEtBQUssR0FBR1AsTUFBTSxDQUFDTSxDQUFELENBRGxCO0FBQUEsUUFFSXdELFdBQVcsR0FBR3ZELEtBQUssQ0FBQ0osTUFGeEI7QUFBQSxRQUdJMEQsSUFBSSxHQUFHZSxTQUFTLENBQUNGLEtBQUssQ0FBQzdELElBQU4sQ0FBV2lDLE1BQVgsRUFBbUJBLE1BQU0sSUFBSUEsTUFBTSxDQUFDaEMsUUFBcEMsRUFBOENSLENBQTlDLEVBQWlEb0IsT0FBakQsQ0FBRCxDQUhwQjtBQUFBLFFBSUlxQyxVQUFVLEdBQUdGLElBQUksQ0FBQzFELE1BSnRCO0FBQUEsUUFLSTBFLFVBQVUsR0FBR2xCLEtBQUssQ0FBQ3JELENBQUQsQ0FBTCxHQUFXLElBQUlELEtBQUosQ0FBVTBELFVBQVYsQ0FMNUI7QUFBQSxRQU1JZSxXQUFXLEdBQUdyQyxNQUFNLENBQUNuQyxDQUFELENBQU4sR0FBWSxJQUFJRCxLQUFKLENBQVUwRCxVQUFWLENBTjlCO0FBQUEsUUFPSWdCLFNBQVMsR0FBR25CLElBQUksQ0FBQ3RELENBQUQsQ0FBSixHQUFVLElBQUlELEtBQUosQ0FBVXlELFdBQVYsQ0FQMUI7QUFTQWEsSUFBQUEsSUFBSSxDQUFDN0IsTUFBRCxFQUFTdkMsS0FBVCxFQUFnQnNFLFVBQWhCLEVBQTRCQyxXQUE1QixFQUF5Q0MsU0FBekMsRUFBb0RsQixJQUFwRCxFQUEwREksR0FBMUQsQ0FBSixDQVYrRyxDQVkvRztBQUNBO0FBQ0E7O0FBQ0EsU0FBSyxJQUFJZSxFQUFFLEdBQUcsQ0FBVCxFQUFZQyxFQUFFLEdBQUcsQ0FBakIsRUFBb0JDLFFBQXBCLEVBQThCMUIsSUFBbkMsRUFBeUN3QixFQUFFLEdBQUdqQixVQUE5QyxFQUEwRCxFQUFFaUIsRUFBNUQsRUFBZ0U7QUFDOUQsVUFBSUUsUUFBUSxHQUFHTCxVQUFVLENBQUNHLEVBQUQsQ0FBekIsRUFBK0I7QUFDN0IsWUFBSUEsRUFBRSxJQUFJQyxFQUFWLEVBQWNBLEVBQUUsR0FBR0QsRUFBRSxHQUFHLENBQVY7O0FBQ2QsZUFBTyxFQUFFeEIsSUFBSSxHQUFHc0IsV0FBVyxDQUFDRyxFQUFELENBQXBCLEtBQTZCLEVBQUVBLEVBQUYsR0FBT2xCLFVBQTNDLENBQXNEOztBQUN0RG1CLFFBQUFBLFFBQVEsQ0FBQ2hDLEtBQVQsR0FBaUJNLElBQUksSUFBSSxJQUF6QjtBQUNEO0FBQ0Y7QUFDRjs7QUFFRGYsRUFBQUEsTUFBTSxHQUFHLElBQUkzQyxTQUFKLENBQWMyQyxNQUFkLEVBQXNCZixPQUF0QixDQUFUO0FBQ0FlLEVBQUFBLE1BQU0sQ0FBQ0UsTUFBUCxHQUFnQmdCLEtBQWhCO0FBQ0FsQixFQUFBQSxNQUFNLENBQUMwQyxLQUFQLEdBQWV2QixJQUFmO0FBQ0EsU0FBT25CLE1BQVA7QUFDRCxFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQSxTQUFTbUMsU0FBVCxDQUFtQmYsSUFBbkIsRUFBeUI7QUFDdkIsU0FBTyxPQUFPQSxJQUFQLEtBQWdCLFFBQWhCLElBQTRCLFlBQVlBLElBQXhDLEdBQ0hBLElBREcsQ0FDRTtBQURGLElBRUh4RCxLQUFLLENBQUNjLElBQU4sQ0FBVzBDLElBQVgsQ0FGSixDQUR1QixDQUdEO0FBQ3ZCLEM7O0FDL0hEO0FBQ0E7QUFFQSw2QkFBZSxnQkFBVztBQUN4QixTQUFPLElBQUkvRCxTQUFKLENBQWMsS0FBS3FGLEtBQUwsSUFBYyxLQUFLbEYsT0FBTCxDQUFhMkMsR0FBYixDQUFpQkYsTUFBakIsQ0FBNUIsRUFBc0QsS0FBSzNCLFFBQTNELENBQVA7QUFDRCxDOztBQ0xELDZCQUFlLGNBQVNxRSxPQUFULEVBQWtCQyxRQUFsQixFQUE0QkMsTUFBNUIsRUFBb0M7QUFDakQsTUFBSTNCLEtBQUssR0FBRyxLQUFLQSxLQUFMLEVBQVo7QUFBQSxNQUEwQmxCLE1BQU0sR0FBRyxJQUFuQztBQUFBLE1BQXlDbUIsSUFBSSxHQUFHLEtBQUtBLElBQUwsRUFBaEQ7O0FBQ0EsTUFBSSxPQUFPd0IsT0FBUCxLQUFtQixVQUF2QixFQUFtQztBQUNqQ3pCLElBQUFBLEtBQUssR0FBR3lCLE9BQU8sQ0FBQ3pCLEtBQUQsQ0FBZjtBQUNBLFFBQUlBLEtBQUosRUFBV0EsS0FBSyxHQUFHQSxLQUFLLENBQUM0QixTQUFOLEVBQVI7QUFDWixHQUhELE1BR087QUFDTDVCLElBQUFBLEtBQUssR0FBR0EsS0FBSyxDQUFDNkIsTUFBTixDQUFhSixPQUFPLEdBQUcsRUFBdkIsQ0FBUjtBQUNEOztBQUNELE1BQUlDLFFBQVEsSUFBSSxJQUFoQixFQUFzQjtBQUNwQjVDLElBQUFBLE1BQU0sR0FBRzRDLFFBQVEsQ0FBQzVDLE1BQUQsQ0FBakI7QUFDQSxRQUFJQSxNQUFKLEVBQVlBLE1BQU0sR0FBR0EsTUFBTSxDQUFDOEMsU0FBUCxFQUFUO0FBQ2I7O0FBQ0QsTUFBSUQsTUFBTSxJQUFJLElBQWQsRUFBb0IxQixJQUFJLENBQUM2QixNQUFMLEdBQXBCLEtBQXdDSCxNQUFNLENBQUMxQixJQUFELENBQU47QUFDeEMsU0FBT0QsS0FBSyxJQUFJbEIsTUFBVCxHQUFrQmtCLEtBQUssQ0FBQytCLEtBQU4sQ0FBWWpELE1BQVosRUFBb0JrRCxLQUFwQixFQUFsQixHQUFnRGxELE1BQXZEO0FBQ0QsQzs7QUNkRDtBQUVBLDZCQUFlLGVBQVNtRCxPQUFULEVBQWtCO0FBQy9CLE1BQUlMLFNBQVMsR0FBR0ssT0FBTyxDQUFDTCxTQUFSLEdBQW9CSyxPQUFPLENBQUNMLFNBQVIsRUFBcEIsR0FBMENLLE9BQTFEOztBQUVBLE9BQUssSUFBSUMsT0FBTyxHQUFHLEtBQUs1RixPQUFuQixFQUE0QjZGLE9BQU8sR0FBR1AsU0FBUyxDQUFDdEYsT0FBaEQsRUFBeUQ4RixFQUFFLEdBQUdGLE9BQU8sQ0FBQzFGLE1BQXRFLEVBQThFNkYsRUFBRSxHQUFHRixPQUFPLENBQUMzRixNQUEzRixFQUFtR0QsQ0FBQyxHQUFHK0YsSUFBSSxDQUFDQyxHQUFMLENBQVNILEVBQVQsRUFBYUMsRUFBYixDQUF2RyxFQUF5SEcsTUFBTSxHQUFHLElBQUk5RixLQUFKLENBQVUwRixFQUFWLENBQWxJLEVBQWlKekYsQ0FBQyxHQUFHLENBQTFKLEVBQTZKQSxDQUFDLEdBQUdKLENBQWpLLEVBQW9LLEVBQUVJLENBQXRLLEVBQXlLO0FBQ3ZLLFNBQUssSUFBSThGLE1BQU0sR0FBR1AsT0FBTyxDQUFDdkYsQ0FBRCxDQUFwQixFQUF5QitGLE1BQU0sR0FBR1AsT0FBTyxDQUFDeEYsQ0FBRCxDQUF6QyxFQUE4Q0UsQ0FBQyxHQUFHNEYsTUFBTSxDQUFDakcsTUFBekQsRUFBaUV1RixLQUFLLEdBQUdTLE1BQU0sQ0FBQzdGLENBQUQsQ0FBTixHQUFZLElBQUlELEtBQUosQ0FBVUcsQ0FBVixDQUFyRixFQUFtR0UsSUFBbkcsRUFBeUdFLENBQUMsR0FBRyxDQUFsSCxFQUFxSEEsQ0FBQyxHQUFHSixDQUF6SCxFQUE0SCxFQUFFSSxDQUE5SCxFQUFpSTtBQUMvSCxVQUFJRixJQUFJLEdBQUcwRixNQUFNLENBQUN4RixDQUFELENBQU4sSUFBYXlGLE1BQU0sQ0FBQ3pGLENBQUQsQ0FBOUIsRUFBbUM7QUFDakM4RSxRQUFBQSxLQUFLLENBQUM5RSxDQUFELENBQUwsR0FBV0YsSUFBWDtBQUNEO0FBQ0Y7QUFDRjs7QUFFRCxTQUFPSixDQUFDLEdBQUd5RixFQUFYLEVBQWUsRUFBRXpGLENBQWpCLEVBQW9CO0FBQ2xCNkYsSUFBQUEsTUFBTSxDQUFDN0YsQ0FBRCxDQUFOLEdBQVl1RixPQUFPLENBQUN2RixDQUFELENBQW5CO0FBQ0Q7O0FBRUQsU0FBTyxJQUFJUixTQUFKLENBQWNxRyxNQUFkLEVBQXNCLEtBQUtwRixRQUEzQixDQUFQO0FBQ0QsQzs7QUNsQkQsNkJBQWUsaUJBQVc7QUFFeEIsT0FBSyxJQUFJZixNQUFNLEdBQUcsS0FBS0MsT0FBbEIsRUFBMkJLLENBQUMsR0FBRyxDQUFDLENBQWhDLEVBQW1DSixDQUFDLEdBQUdGLE1BQU0sQ0FBQ0csTUFBbkQsRUFBMkQsRUFBRUcsQ0FBRixHQUFNSixDQUFqRSxHQUFxRTtBQUNuRSxTQUFLLElBQUlLLEtBQUssR0FBR1AsTUFBTSxDQUFDTSxDQUFELENBQWxCLEVBQXVCTSxDQUFDLEdBQUdMLEtBQUssQ0FBQ0osTUFBTixHQUFlLENBQTFDLEVBQTZDcUQsSUFBSSxHQUFHakQsS0FBSyxDQUFDSyxDQUFELENBQXpELEVBQThERixJQUFuRSxFQUF5RSxFQUFFRSxDQUFGLElBQU8sQ0FBaEYsR0FBb0Y7QUFDbEYsVUFBSUYsSUFBSSxHQUFHSCxLQUFLLENBQUNLLENBQUQsQ0FBaEIsRUFBcUI7QUFDbkIsWUFBSTRDLElBQUksSUFBSTlDLElBQUksQ0FBQzRGLHVCQUFMLENBQTZCOUMsSUFBN0IsSUFBcUMsQ0FBakQsRUFBb0RBLElBQUksQ0FBQytDLFVBQUwsQ0FBZ0JoRCxZQUFoQixDQUE2QjdDLElBQTdCLEVBQW1DOEMsSUFBbkM7QUFDcERBLFFBQUFBLElBQUksR0FBRzlDLElBQVA7QUFDRDtBQUNGO0FBQ0Y7O0FBRUQsU0FBTyxJQUFQO0FBQ0QsQzs7QUNaRDtBQUVBLDZCQUFlLGNBQVM4RixPQUFULEVBQWtCO0FBQy9CLE1BQUksQ0FBQ0EsT0FBTCxFQUFjQSxPQUFPLEdBQUdDLFNBQVY7O0FBRWQsV0FBU0MsV0FBVCxDQUFxQkMsQ0FBckIsRUFBd0JDLENBQXhCLEVBQTJCO0FBQ3pCLFdBQU9ELENBQUMsSUFBSUMsQ0FBTCxHQUFTSixPQUFPLENBQUNHLENBQUMsQ0FBQzdGLFFBQUgsRUFBYThGLENBQUMsQ0FBQzlGLFFBQWYsQ0FBaEIsR0FBMkMsQ0FBQzZGLENBQUQsR0FBSyxDQUFDQyxDQUF4RDtBQUNEOztBQUVELE9BQUssSUFBSTVHLE1BQU0sR0FBRyxLQUFLQyxPQUFsQixFQUEyQkMsQ0FBQyxHQUFHRixNQUFNLENBQUNHLE1BQXRDLEVBQThDMEcsVUFBVSxHQUFHLElBQUl4RyxLQUFKLENBQVVILENBQVYsQ0FBM0QsRUFBeUVJLENBQUMsR0FBRyxDQUFsRixFQUFxRkEsQ0FBQyxHQUFHSixDQUF6RixFQUE0RixFQUFFSSxDQUE5RixFQUFpRztBQUMvRixTQUFLLElBQUlDLEtBQUssR0FBR1AsTUFBTSxDQUFDTSxDQUFELENBQWxCLEVBQXVCRSxDQUFDLEdBQUdELEtBQUssQ0FBQ0osTUFBakMsRUFBeUMyRyxTQUFTLEdBQUdELFVBQVUsQ0FBQ3ZHLENBQUQsQ0FBVixHQUFnQixJQUFJRCxLQUFKLENBQVVHLENBQVYsQ0FBckUsRUFBbUZFLElBQW5GLEVBQXlGRSxDQUFDLEdBQUcsQ0FBbEcsRUFBcUdBLENBQUMsR0FBR0osQ0FBekcsRUFBNEcsRUFBRUksQ0FBOUcsRUFBaUg7QUFDL0csVUFBSUYsSUFBSSxHQUFHSCxLQUFLLENBQUNLLENBQUQsQ0FBaEIsRUFBcUI7QUFDbkJrRyxRQUFBQSxTQUFTLENBQUNsRyxDQUFELENBQVQsR0FBZUYsSUFBZjtBQUNEO0FBQ0Y7O0FBQ0RvRyxJQUFBQSxTQUFTLENBQUNDLElBQVYsQ0FBZUwsV0FBZjtBQUNEOztBQUVELFNBQU8sSUFBSTVHLFNBQUosQ0FBYytHLFVBQWQsRUFBMEIsS0FBSzlGLFFBQS9CLEVBQXlDNEUsS0FBekMsRUFBUDtBQUNEOztBQUVELFNBQVNjLFNBQVQsQ0FBbUJFLENBQW5CLEVBQXNCQyxDQUF0QixFQUF5QjtBQUN2QixTQUFPRCxDQUFDLEdBQUdDLENBQUosR0FBUSxDQUFDLENBQVQsR0FBYUQsQ0FBQyxHQUFHQyxDQUFKLEdBQVEsQ0FBUixHQUFZRCxDQUFDLElBQUlDLENBQUwsR0FBUyxDQUFULEdBQWFJLEdBQTdDO0FBQ0QsQzs7QUN2QkQsNkJBQWUsZ0JBQVc7QUFDeEIsTUFBSUMsUUFBUSxHQUFHeEYsU0FBUyxDQUFDLENBQUQsQ0FBeEI7QUFDQUEsRUFBQUEsU0FBUyxDQUFDLENBQUQsQ0FBVCxHQUFlLElBQWY7QUFDQXdGLEVBQUFBLFFBQVEsQ0FBQ3pGLEtBQVQsQ0FBZSxJQUFmLEVBQXFCQyxTQUFyQjtBQUNBLFNBQU8sSUFBUDtBQUNELEM7O0FDTEQsNkJBQWUsaUJBQVc7QUFDeEIsU0FBT3BCLEtBQUssQ0FBQ2MsSUFBTixDQUFXLElBQVgsQ0FBUDtBQUNELEM7O0FDRkQsNkJBQWUsZ0JBQVc7QUFFeEIsT0FBSyxJQUFJbkIsTUFBTSxHQUFHLEtBQUtDLE9BQWxCLEVBQTJCSyxDQUFDLEdBQUcsQ0FBL0IsRUFBa0NKLENBQUMsR0FBR0YsTUFBTSxDQUFDRyxNQUFsRCxFQUEwREcsQ0FBQyxHQUFHSixDQUE5RCxFQUFpRSxFQUFFSSxDQUFuRSxFQUFzRTtBQUNwRSxTQUFLLElBQUlDLEtBQUssR0FBR1AsTUFBTSxDQUFDTSxDQUFELENBQWxCLEVBQXVCTSxDQUFDLEdBQUcsQ0FBM0IsRUFBOEJKLENBQUMsR0FBR0QsS0FBSyxDQUFDSixNQUE3QyxFQUFxRFMsQ0FBQyxHQUFHSixDQUF6RCxFQUE0RCxFQUFFSSxDQUE5RCxFQUFpRTtBQUMvRCxVQUFJRixJQUFJLEdBQUdILEtBQUssQ0FBQ0ssQ0FBRCxDQUFoQjtBQUNBLFVBQUlGLElBQUosRUFBVSxPQUFPQSxJQUFQO0FBQ1g7QUFDRjs7QUFFRCxTQUFPLElBQVA7QUFDRCxDOztBQ1ZELDZCQUFlLGdCQUFXO0FBQ3hCLE1BQUl3RyxJQUFJLEdBQUcsQ0FBWDs7QUFDQSxPQUFLLE1BQU14RyxJQUFYLElBQW1CLElBQW5CLEVBQXlCLEVBQUV3RyxJQUFGLENBRkQsQ0FFUzs7O0FBQ2pDLFNBQU9BLElBQVA7QUFDRCxDOztBQ0pELDZCQUFlLDJCQUFXO0FBQ3hCLFNBQU8sQ0FBQyxLQUFLeEcsSUFBTCxFQUFSO0FBQ0QsQzs7QUNGRCw2QkFBZSxjQUFTdUcsUUFBVCxFQUFtQjtBQUVoQyxPQUFLLElBQUlqSCxNQUFNLEdBQUcsS0FBS0MsT0FBbEIsRUFBMkJLLENBQUMsR0FBRyxDQUEvQixFQUFrQ0osQ0FBQyxHQUFHRixNQUFNLENBQUNHLE1BQWxELEVBQTBERyxDQUFDLEdBQUdKLENBQTlELEVBQWlFLEVBQUVJLENBQW5FLEVBQXNFO0FBQ3BFLFNBQUssSUFBSUMsS0FBSyxHQUFHUCxNQUFNLENBQUNNLENBQUQsQ0FBbEIsRUFBdUJNLENBQUMsR0FBRyxDQUEzQixFQUE4QkosQ0FBQyxHQUFHRCxLQUFLLENBQUNKLE1BQXhDLEVBQWdETyxJQUFyRCxFQUEyREUsQ0FBQyxHQUFHSixDQUEvRCxFQUFrRSxFQUFFSSxDQUFwRSxFQUF1RTtBQUNyRSxVQUFJRixJQUFJLEdBQUdILEtBQUssQ0FBQ0ssQ0FBRCxDQUFoQixFQUFxQnFHLFFBQVEsQ0FBQ3BHLElBQVQsQ0FBY0gsSUFBZCxFQUFvQkEsSUFBSSxDQUFDSSxRQUF6QixFQUFtQ0YsQ0FBbkMsRUFBc0NMLEtBQXRDO0FBQ3RCO0FBQ0Y7O0FBRUQsU0FBTyxJQUFQO0FBQ0QsQzs7QUNUTSxJQUFJNEcsS0FBSyxHQUFHLDhCQUFaO0FBRVAsaURBQWU7QUFDYkMsRUFBQUEsR0FBRyxFQUFFLDRCQURRO0FBRWJELEVBQUFBLEtBQUssRUFBRUEsS0FGTTtBQUdiRSxFQUFBQSxLQUFLLEVBQUUsOEJBSE07QUFJYkMsRUFBQUEsR0FBRyxFQUFFLHNDQUpRO0FBS2JDLEVBQUFBLEtBQUssRUFBRTtBQUxNLENBQWYsRTs7QUNGQTtBQUVBLDZCQUFlLG1CQUFTRSxJQUFULEVBQWU7QUFDNUIsTUFBSUMsTUFBTSxHQUFHRCxJQUFJLElBQUksRUFBckI7QUFBQSxNQUF5QjdHLENBQUMsR0FBRzhHLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlLEdBQWYsQ0FBN0I7QUFDQSxNQUFJL0csQ0FBQyxJQUFJLENBQUwsSUFBVSxDQUFDOEcsTUFBTSxHQUFHRCxJQUFJLENBQUNHLEtBQUwsQ0FBVyxDQUFYLEVBQWNoSCxDQUFkLENBQVYsTUFBZ0MsT0FBOUMsRUFBdUQ2RyxJQUFJLEdBQUdBLElBQUksQ0FBQ0csS0FBTCxDQUFXaEgsQ0FBQyxHQUFHLENBQWYsQ0FBUDtBQUN2RCxTQUFPNEcseUJBQUEsQ0FBMEJFLE1BQTFCLElBQW9DO0FBQUNJLElBQUFBLEtBQUssRUFBRU4sVUFBVSxDQUFDRSxNQUFELENBQWxCO0FBQTRCSyxJQUFBQSxLQUFLLEVBQUVOO0FBQW5DLEdBQXBDLEdBQStFQSxJQUF0RixDQUg0QixDQUdnRTtBQUM3RixDOztBQ05EOztBQUVBLFNBQVNRLFVBQVQsQ0FBb0JSLElBQXBCLEVBQTBCO0FBQ3hCLFNBQU8sWUFBVztBQUNoQixTQUFLUyxlQUFMLENBQXFCVCxJQUFyQjtBQUNELEdBRkQ7QUFHRDs7QUFFRCxTQUFTVSxZQUFULENBQXNCQyxRQUF0QixFQUFnQztBQUM5QixTQUFPLFlBQVc7QUFDaEIsU0FBS0MsaUJBQUwsQ0FBdUJELFFBQVEsQ0FBQ04sS0FBaEMsRUFBdUNNLFFBQVEsQ0FBQ0wsS0FBaEQ7QUFDRCxHQUZEO0FBR0Q7O0FBRUQsU0FBU08sWUFBVCxDQUFzQmIsSUFBdEIsRUFBNEIvQyxLQUE1QixFQUFtQztBQUNqQyxTQUFPLFlBQVc7QUFDaEIsU0FBSzZELFlBQUwsQ0FBa0JkLElBQWxCLEVBQXdCL0MsS0FBeEI7QUFDRCxHQUZEO0FBR0Q7O0FBRUQsU0FBUzhELGNBQVQsQ0FBd0JKLFFBQXhCLEVBQWtDMUQsS0FBbEMsRUFBeUM7QUFDdkMsU0FBTyxZQUFXO0FBQ2hCLFNBQUsrRCxjQUFMLENBQW9CTCxRQUFRLENBQUNOLEtBQTdCLEVBQW9DTSxRQUFRLENBQUNMLEtBQTdDLEVBQW9EckQsS0FBcEQ7QUFDRCxHQUZEO0FBR0Q7O0FBRUQsU0FBU2dFLFlBQVQsQ0FBc0JqQixJQUF0QixFQUE0Qi9DLEtBQTVCLEVBQW1DO0FBQ2pDLFNBQU8sWUFBVztBQUNoQixRQUFJaUUsQ0FBQyxHQUFHakUsS0FBSyxDQUFDbEQsS0FBTixDQUFZLElBQVosRUFBa0JDLFNBQWxCLENBQVI7QUFDQSxRQUFJa0gsQ0FBQyxJQUFJLElBQVQsRUFBZSxLQUFLVCxlQUFMLENBQXFCVCxJQUFyQixFQUFmLEtBQ0ssS0FBS2MsWUFBTCxDQUFrQmQsSUFBbEIsRUFBd0JrQixDQUF4QjtBQUNOLEdBSkQ7QUFLRDs7QUFFRCxTQUFTQyxjQUFULENBQXdCUixRQUF4QixFQUFrQzFELEtBQWxDLEVBQXlDO0FBQ3ZDLFNBQU8sWUFBVztBQUNoQixRQUFJaUUsQ0FBQyxHQUFHakUsS0FBSyxDQUFDbEQsS0FBTixDQUFZLElBQVosRUFBa0JDLFNBQWxCLENBQVI7QUFDQSxRQUFJa0gsQ0FBQyxJQUFJLElBQVQsRUFBZSxLQUFLTixpQkFBTCxDQUF1QkQsUUFBUSxDQUFDTixLQUFoQyxFQUF1Q00sUUFBUSxDQUFDTCxLQUFoRCxFQUFmLEtBQ0ssS0FBS1UsY0FBTCxDQUFvQkwsUUFBUSxDQUFDTixLQUE3QixFQUFvQ00sUUFBUSxDQUFDTCxLQUE3QyxFQUFvRFksQ0FBcEQ7QUFDTixHQUpEO0FBS0Q7O0FBRUQsNkJBQWUsY0FBU2xCLElBQVQsRUFBZS9DLEtBQWYsRUFBc0I7QUFDbkMsTUFBSTBELFFBQVEsR0FBR0osU0FBUyxDQUFDUCxJQUFELENBQXhCOztBQUVBLE1BQUloRyxTQUFTLENBQUN0QixNQUFWLEdBQW1CLENBQXZCLEVBQTBCO0FBQ3hCLFFBQUlPLElBQUksR0FBRyxLQUFLQSxJQUFMLEVBQVg7QUFDQSxXQUFPMEgsUUFBUSxDQUFDTCxLQUFULEdBQ0RySCxJQUFJLENBQUNtSSxjQUFMLENBQW9CVCxRQUFRLENBQUNOLEtBQTdCLEVBQW9DTSxRQUFRLENBQUNMLEtBQTdDLENBREMsR0FFRHJILElBQUksQ0FBQ29JLFlBQUwsQ0FBa0JWLFFBQWxCLENBRk47QUFHRDs7QUFFRCxTQUFPLEtBQUtXLElBQUwsQ0FBVSxDQUFDckUsS0FBSyxJQUFJLElBQVQsR0FDWDBELFFBQVEsQ0FBQ0wsS0FBVCxHQUFpQkksWUFBakIsR0FBZ0NGLFVBRHJCLEdBQ29DLE9BQU92RCxLQUFQLEtBQWlCLFVBQWpCLEdBQy9DMEQsUUFBUSxDQUFDTCxLQUFULEdBQWlCYSxjQUFqQixHQUFrQ0YsWUFEYSxHQUUvQ04sUUFBUSxDQUFDTCxLQUFULEdBQWlCUyxjQUFqQixHQUFrQ0YsWUFIeEIsRUFHd0NGLFFBSHhDLEVBR2tEMUQsS0FIbEQsQ0FBVixDQUFQO0FBSUQsQzs7QUN4REQsNkJBQWUsb0JBQVNoRSxJQUFULEVBQWU7QUFDNUIsU0FBUUEsSUFBSSxDQUFDc0MsYUFBTCxJQUFzQnRDLElBQUksQ0FBQ3NDLGFBQUwsQ0FBbUJnRyxXQUExQyxDQUF1RDtBQUF2RCxLQUNDdEksSUFBSSxDQUFDdUksUUFBTCxJQUFpQnZJLElBRGxCLENBQ3dCO0FBRHhCLEtBRUFBLElBQUksQ0FBQ3NJLFdBRlosQ0FENEIsQ0FHSDtBQUMxQixDOztBQ0pEOztBQUVBLFNBQVNFLFdBQVQsQ0FBcUJ6QixJQUFyQixFQUEyQjtBQUN6QixTQUFPLFlBQVc7QUFDaEIsU0FBSzBCLEtBQUwsQ0FBV0MsY0FBWCxDQUEwQjNCLElBQTFCO0FBQ0QsR0FGRDtBQUdEOztBQUVELFNBQVM0QixhQUFULENBQXVCNUIsSUFBdkIsRUFBNkIvQyxLQUE3QixFQUFvQzRFLFFBQXBDLEVBQThDO0FBQzVDLFNBQU8sWUFBVztBQUNoQixTQUFLSCxLQUFMLENBQVdJLFdBQVgsQ0FBdUI5QixJQUF2QixFQUE2Qi9DLEtBQTdCLEVBQW9DNEUsUUFBcEM7QUFDRCxHQUZEO0FBR0Q7O0FBRUQsU0FBU0UsYUFBVCxDQUF1Qi9CLElBQXZCLEVBQTZCL0MsS0FBN0IsRUFBb0M0RSxRQUFwQyxFQUE4QztBQUM1QyxTQUFPLFlBQVc7QUFDaEIsUUFBSVgsQ0FBQyxHQUFHakUsS0FBSyxDQUFDbEQsS0FBTixDQUFZLElBQVosRUFBa0JDLFNBQWxCLENBQVI7QUFDQSxRQUFJa0gsQ0FBQyxJQUFJLElBQVQsRUFBZSxLQUFLUSxLQUFMLENBQVdDLGNBQVgsQ0FBMEIzQixJQUExQixFQUFmLEtBQ0ssS0FBSzBCLEtBQUwsQ0FBV0ksV0FBWCxDQUF1QjlCLElBQXZCLEVBQTZCa0IsQ0FBN0IsRUFBZ0NXLFFBQWhDO0FBQ04sR0FKRDtBQUtEOztBQUVELDZCQUFlLGVBQVM3QixJQUFULEVBQWUvQyxLQUFmLEVBQXNCNEUsUUFBdEIsRUFBZ0M7QUFDN0MsU0FBTzdILFNBQVMsQ0FBQ3RCLE1BQVYsR0FBbUIsQ0FBbkIsR0FDRCxLQUFLNEksSUFBTCxDQUFVLENBQUNyRSxLQUFLLElBQUksSUFBVCxHQUNMd0UsV0FESyxHQUNTLE9BQU94RSxLQUFQLEtBQWlCLFVBQWpCLEdBQ2Q4RSxhQURjLEdBRWRILGFBSEksRUFHVzVCLElBSFgsRUFHaUIvQyxLQUhqQixFQUd3QjRFLFFBQVEsSUFBSSxJQUFaLEdBQW1CLEVBQW5CLEdBQXdCQSxRQUhoRCxDQUFWLENBREMsR0FLREcsVUFBVSxDQUFDLEtBQUsvSSxJQUFMLEVBQUQsRUFBYytHLElBQWQsQ0FMaEI7QUFNRDtBQUVNLFNBQVNnQyxVQUFULENBQW9CL0ksSUFBcEIsRUFBMEIrRyxJQUExQixFQUFnQztBQUNyQyxTQUFPL0csSUFBSSxDQUFDeUksS0FBTCxDQUFXTyxnQkFBWCxDQUE0QmpDLElBQTVCLEtBQ0F1QixVQUFXLENBQUN0SSxJQUFELENBQVgsQ0FBa0JpSixnQkFBbEIsQ0FBbUNqSixJQUFuQyxFQUF5QyxJQUF6QyxFQUErQ2dKLGdCQUEvQyxDQUFnRWpDLElBQWhFLENBRFA7QUFFRCxDOztBQ2xDRCxTQUFTbUMsY0FBVCxDQUF3Qm5DLElBQXhCLEVBQThCO0FBQzVCLFNBQU8sWUFBVztBQUNoQixXQUFPLEtBQUtBLElBQUwsQ0FBUDtBQUNELEdBRkQ7QUFHRDs7QUFFRCxTQUFTb0MsZ0JBQVQsQ0FBMEJwQyxJQUExQixFQUFnQy9DLEtBQWhDLEVBQXVDO0FBQ3JDLFNBQU8sWUFBVztBQUNoQixTQUFLK0MsSUFBTCxJQUFhL0MsS0FBYjtBQUNELEdBRkQ7QUFHRDs7QUFFRCxTQUFTb0YsZ0JBQVQsQ0FBMEJyQyxJQUExQixFQUFnQy9DLEtBQWhDLEVBQXVDO0FBQ3JDLFNBQU8sWUFBVztBQUNoQixRQUFJaUUsQ0FBQyxHQUFHakUsS0FBSyxDQUFDbEQsS0FBTixDQUFZLElBQVosRUFBa0JDLFNBQWxCLENBQVI7QUFDQSxRQUFJa0gsQ0FBQyxJQUFJLElBQVQsRUFBZSxPQUFPLEtBQUtsQixJQUFMLENBQVAsQ0FBZixLQUNLLEtBQUtBLElBQUwsSUFBYWtCLENBQWI7QUFDTixHQUpEO0FBS0Q7O0FBRUQsNkJBQWUsa0JBQVNsQixJQUFULEVBQWUvQyxLQUFmLEVBQXNCO0FBQ25DLFNBQU9qRCxTQUFTLENBQUN0QixNQUFWLEdBQW1CLENBQW5CLEdBQ0QsS0FBSzRJLElBQUwsQ0FBVSxDQUFDckUsS0FBSyxJQUFJLElBQVQsR0FDUGtGLGNBRE8sR0FDVSxPQUFPbEYsS0FBUCxLQUFpQixVQUFqQixHQUNqQm9GLGdCQURpQixHQUVqQkQsZ0JBSE0sRUFHWXBDLElBSFosRUFHa0IvQyxLQUhsQixDQUFWLENBREMsR0FLRCxLQUFLaEUsSUFBTCxHQUFZK0csSUFBWixDQUxOO0FBTUQsQzs7QUMzQkQsU0FBU3NDLFVBQVQsQ0FBb0JDLE1BQXBCLEVBQTRCO0FBQzFCLFNBQU9BLE1BQU0sQ0FBQ0MsSUFBUCxHQUFjQyxLQUFkLENBQW9CLE9BQXBCLENBQVA7QUFDRDs7QUFFRCxTQUFTQyxTQUFULENBQW1CekosSUFBbkIsRUFBeUI7QUFDdkIsU0FBT0EsSUFBSSxDQUFDeUosU0FBTCxJQUFrQixJQUFJQyxTQUFKLENBQWMxSixJQUFkLENBQXpCO0FBQ0Q7O0FBRUQsU0FBUzBKLFNBQVQsQ0FBbUIxSixJQUFuQixFQUF5QjtBQUN2QixPQUFLMkosS0FBTCxHQUFhM0osSUFBYjtBQUNBLE9BQUs0SixNQUFMLEdBQWNQLFVBQVUsQ0FBQ3JKLElBQUksQ0FBQ29JLFlBQUwsQ0FBa0IsT0FBbEIsS0FBOEIsRUFBL0IsQ0FBeEI7QUFDRDs7QUFFRHNCLFNBQVMsQ0FBQ3JJLFNBQVYsR0FBc0I7QUFDcEJ3SSxFQUFBQSxHQUFHLEVBQUUsVUFBUzlDLElBQVQsRUFBZTtBQUNsQixRQUFJN0csQ0FBQyxHQUFHLEtBQUswSixNQUFMLENBQVkzQyxPQUFaLENBQW9CRixJQUFwQixDQUFSOztBQUNBLFFBQUk3RyxDQUFDLEdBQUcsQ0FBUixFQUFXO0FBQ1QsV0FBSzBKLE1BQUwsQ0FBWTNJLElBQVosQ0FBaUI4RixJQUFqQjs7QUFDQSxXQUFLNEMsS0FBTCxDQUFXOUIsWUFBWCxDQUF3QixPQUF4QixFQUFpQyxLQUFLK0IsTUFBTCxDQUFZRSxJQUFaLENBQWlCLEdBQWpCLENBQWpDO0FBQ0Q7QUFDRixHQVBtQjtBQVFwQi9FLEVBQUFBLE1BQU0sRUFBRSxVQUFTZ0MsSUFBVCxFQUFlO0FBQ3JCLFFBQUk3RyxDQUFDLEdBQUcsS0FBSzBKLE1BQUwsQ0FBWTNDLE9BQVosQ0FBb0JGLElBQXBCLENBQVI7O0FBQ0EsUUFBSTdHLENBQUMsSUFBSSxDQUFULEVBQVk7QUFDVixXQUFLMEosTUFBTCxDQUFZRyxNQUFaLENBQW1CN0osQ0FBbkIsRUFBc0IsQ0FBdEI7O0FBQ0EsV0FBS3lKLEtBQUwsQ0FBVzlCLFlBQVgsQ0FBd0IsT0FBeEIsRUFBaUMsS0FBSytCLE1BQUwsQ0FBWUUsSUFBWixDQUFpQixHQUFqQixDQUFqQztBQUNEO0FBQ0YsR0FkbUI7QUFlcEJFLEVBQUFBLFFBQVEsRUFBRSxVQUFTakQsSUFBVCxFQUFlO0FBQ3ZCLFdBQU8sS0FBSzZDLE1BQUwsQ0FBWTNDLE9BQVosQ0FBb0JGLElBQXBCLEtBQTZCLENBQXBDO0FBQ0Q7QUFqQm1CLENBQXRCOztBQW9CQSxTQUFTa0QsVUFBVCxDQUFvQmpLLElBQXBCLEVBQTBCa0ssS0FBMUIsRUFBaUM7QUFDL0IsTUFBSUMsSUFBSSxHQUFHVixTQUFTLENBQUN6SixJQUFELENBQXBCO0FBQUEsTUFBNEJFLENBQUMsR0FBRyxDQUFDLENBQWpDO0FBQUEsTUFBb0NKLENBQUMsR0FBR29LLEtBQUssQ0FBQ3pLLE1BQTlDOztBQUNBLFNBQU8sRUFBRVMsQ0FBRixHQUFNSixDQUFiLEVBQWdCcUssSUFBSSxDQUFDTixHQUFMLENBQVNLLEtBQUssQ0FBQ2hLLENBQUQsQ0FBZDtBQUNqQjs7QUFFRCxTQUFTa0ssYUFBVCxDQUF1QnBLLElBQXZCLEVBQTZCa0ssS0FBN0IsRUFBb0M7QUFDbEMsTUFBSUMsSUFBSSxHQUFHVixTQUFTLENBQUN6SixJQUFELENBQXBCO0FBQUEsTUFBNEJFLENBQUMsR0FBRyxDQUFDLENBQWpDO0FBQUEsTUFBb0NKLENBQUMsR0FBR29LLEtBQUssQ0FBQ3pLLE1BQTlDOztBQUNBLFNBQU8sRUFBRVMsQ0FBRixHQUFNSixDQUFiLEVBQWdCcUssSUFBSSxDQUFDcEYsTUFBTCxDQUFZbUYsS0FBSyxDQUFDaEssQ0FBRCxDQUFqQjtBQUNqQjs7QUFFRCxTQUFTbUssV0FBVCxDQUFxQkgsS0FBckIsRUFBNEI7QUFDMUIsU0FBTyxZQUFXO0FBQ2hCRCxJQUFBQSxVQUFVLENBQUMsSUFBRCxFQUFPQyxLQUFQLENBQVY7QUFDRCxHQUZEO0FBR0Q7O0FBRUQsU0FBU0ksWUFBVCxDQUFzQkosS0FBdEIsRUFBNkI7QUFDM0IsU0FBTyxZQUFXO0FBQ2hCRSxJQUFBQSxhQUFhLENBQUMsSUFBRCxFQUFPRixLQUFQLENBQWI7QUFDRCxHQUZEO0FBR0Q7O0FBRUQsU0FBU0ssZUFBVCxDQUF5QkwsS0FBekIsRUFBZ0NsRyxLQUFoQyxFQUF1QztBQUNyQyxTQUFPLFlBQVc7QUFDaEIsS0FBQ0EsS0FBSyxDQUFDbEQsS0FBTixDQUFZLElBQVosRUFBa0JDLFNBQWxCLElBQStCa0osVUFBL0IsR0FBNENHLGFBQTdDLEVBQTRELElBQTVELEVBQWtFRixLQUFsRTtBQUNELEdBRkQ7QUFHRDs7QUFFRCw2QkFBZSxpQkFBU25ELElBQVQsRUFBZS9DLEtBQWYsRUFBc0I7QUFDbkMsTUFBSWtHLEtBQUssR0FBR2IsVUFBVSxDQUFDdEMsSUFBSSxHQUFHLEVBQVIsQ0FBdEI7O0FBRUEsTUFBSWhHLFNBQVMsQ0FBQ3RCLE1BQVYsR0FBbUIsQ0FBdkIsRUFBMEI7QUFDeEIsUUFBSTBLLElBQUksR0FBR1YsU0FBUyxDQUFDLEtBQUt6SixJQUFMLEVBQUQsQ0FBcEI7QUFBQSxRQUFtQ0UsQ0FBQyxHQUFHLENBQUMsQ0FBeEM7QUFBQSxRQUEyQ0osQ0FBQyxHQUFHb0ssS0FBSyxDQUFDekssTUFBckQ7O0FBQ0EsV0FBTyxFQUFFUyxDQUFGLEdBQU1KLENBQWIsRUFBZ0IsSUFBSSxDQUFDcUssSUFBSSxDQUFDSCxRQUFMLENBQWNFLEtBQUssQ0FBQ2hLLENBQUQsQ0FBbkIsQ0FBTCxFQUE4QixPQUFPLEtBQVA7O0FBQzlDLFdBQU8sSUFBUDtBQUNEOztBQUVELFNBQU8sS0FBS21JLElBQUwsQ0FBVSxDQUFDLE9BQU9yRSxLQUFQLEtBQWlCLFVBQWpCLEdBQ1p1RyxlQURZLEdBQ012RyxLQUFLLEdBQ3ZCcUcsV0FEdUIsR0FFdkJDLFlBSFcsRUFHR0osS0FISCxFQUdVbEcsS0FIVixDQUFWLENBQVA7QUFJRCxDOztBQzFFRCxTQUFTd0csVUFBVCxHQUFzQjtBQUNwQixPQUFLQyxXQUFMLEdBQW1CLEVBQW5CO0FBQ0Q7O0FBRUQsU0FBU0MsWUFBVCxDQUFzQjFHLEtBQXRCLEVBQTZCO0FBQzNCLFNBQU8sWUFBVztBQUNoQixTQUFLeUcsV0FBTCxHQUFtQnpHLEtBQW5CO0FBQ0QsR0FGRDtBQUdEOztBQUVELFNBQVMyRyxZQUFULENBQXNCM0csS0FBdEIsRUFBNkI7QUFDM0IsU0FBTyxZQUFXO0FBQ2hCLFFBQUlpRSxDQUFDLEdBQUdqRSxLQUFLLENBQUNsRCxLQUFOLENBQVksSUFBWixFQUFrQkMsU0FBbEIsQ0FBUjtBQUNBLFNBQUswSixXQUFMLEdBQW1CeEMsQ0FBQyxJQUFJLElBQUwsR0FBWSxFQUFaLEdBQWlCQSxDQUFwQztBQUNELEdBSEQ7QUFJRDs7QUFFRCw2QkFBZSx3QkFBU2pFLEtBQVQsRUFBZ0I7QUFDN0IsU0FBT2pELFNBQVMsQ0FBQ3RCLE1BQVYsR0FDRCxLQUFLNEksSUFBTCxDQUFVckUsS0FBSyxJQUFJLElBQVQsR0FDTndHLFVBRE0sR0FDTyxDQUFDLE9BQU94RyxLQUFQLEtBQWlCLFVBQWpCLEdBQ2QyRyxZQURjLEdBRWRELFlBRmEsRUFFQzFHLEtBRkQsQ0FEakIsQ0FEQyxHQUtELEtBQUtoRSxJQUFMLEdBQVl5SyxXQUxsQjtBQU1ELEM7O0FDeEJELFNBQVNHLFVBQVQsR0FBc0I7QUFDcEIsT0FBS0MsU0FBTCxHQUFpQixFQUFqQjtBQUNEOztBQUVELFNBQVNDLFlBQVQsQ0FBc0I5RyxLQUF0QixFQUE2QjtBQUMzQixTQUFPLFlBQVc7QUFDaEIsU0FBSzZHLFNBQUwsR0FBaUI3RyxLQUFqQjtBQUNELEdBRkQ7QUFHRDs7QUFFRCxTQUFTK0csWUFBVCxDQUFzQi9HLEtBQXRCLEVBQTZCO0FBQzNCLFNBQU8sWUFBVztBQUNoQixRQUFJaUUsQ0FBQyxHQUFHakUsS0FBSyxDQUFDbEQsS0FBTixDQUFZLElBQVosRUFBa0JDLFNBQWxCLENBQVI7QUFDQSxTQUFLOEosU0FBTCxHQUFpQjVDLENBQUMsSUFBSSxJQUFMLEdBQVksRUFBWixHQUFpQkEsQ0FBbEM7QUFDRCxHQUhEO0FBSUQ7O0FBRUQsNkJBQWUsY0FBU2pFLEtBQVQsRUFBZ0I7QUFDN0IsU0FBT2pELFNBQVMsQ0FBQ3RCLE1BQVYsR0FDRCxLQUFLNEksSUFBTCxDQUFVckUsS0FBSyxJQUFJLElBQVQsR0FDTjRHLFVBRE0sR0FDTyxDQUFDLE9BQU81RyxLQUFQLEtBQWlCLFVBQWpCLEdBQ2QrRyxZQURjLEdBRWRELFlBRmEsRUFFQzlHLEtBRkQsQ0FEakIsQ0FEQyxHQUtELEtBQUtoRSxJQUFMLEdBQVk2SyxTQUxsQjtBQU1ELEM7O0FDeEJELFNBQVNHLEtBQVQsR0FBaUI7QUFDZixNQUFJLEtBQUtDLFdBQVQsRUFBc0IsS0FBS3BGLFVBQUwsQ0FBZ0JsRCxXQUFoQixDQUE0QixJQUE1QjtBQUN2Qjs7QUFFRCw2QkFBZSwyQkFBVztBQUN4QixTQUFPLEtBQUswRixJQUFMLENBQVUyQyxLQUFWLENBQVA7QUFDRCxDOztBQ05ELFNBQVNFLEtBQVQsR0FBaUI7QUFDZixNQUFJLEtBQUtDLGVBQVQsRUFBMEIsS0FBS3RGLFVBQUwsQ0FBZ0JoRCxZQUFoQixDQUE2QixJQUE3QixFQUFtQyxLQUFLZ0QsVUFBTCxDQUFnQnVGLFVBQW5EO0FBQzNCOztBQUVELDZCQUFlLDJCQUFXO0FBQ3hCLFNBQU8sS0FBSy9DLElBQUwsQ0FBVTZDLEtBQVYsQ0FBUDtBQUNELEM7O0FDTkQ7QUFDQTs7QUFFQSxTQUFTRyxjQUFULENBQXdCdEUsSUFBeEIsRUFBOEI7QUFDNUIsU0FBTyxZQUFXO0FBQ2hCLFFBQUl3QixRQUFRLEdBQUcsS0FBS2pHLGFBQXBCO0FBQUEsUUFDSWdKLEdBQUcsR0FBRyxLQUFLL0ksWUFEZjtBQUVBLFdBQU8rSSxHQUFHLEtBQUs3RSxLQUFSLElBQWlCOEIsUUFBUSxDQUFDZ0QsZUFBVCxDQUF5QmhKLFlBQXpCLEtBQTBDa0UsS0FBM0QsR0FDRDhCLFFBQVEsQ0FBQ2lELGFBQVQsQ0FBdUJ6RSxJQUF2QixDQURDLEdBRUR3QixRQUFRLENBQUNrRCxlQUFULENBQXlCSCxHQUF6QixFQUE4QnZFLElBQTlCLENBRk47QUFHRCxHQU5EO0FBT0Q7O0FBRUQsU0FBUzJFLFlBQVQsQ0FBc0JoRSxRQUF0QixFQUFnQztBQUM5QixTQUFPLFlBQVc7QUFDaEIsV0FBTyxLQUFLcEYsYUFBTCxDQUFtQm1KLGVBQW5CLENBQW1DL0QsUUFBUSxDQUFDTixLQUE1QyxFQUFtRE0sUUFBUSxDQUFDTCxLQUE1RCxDQUFQO0FBQ0QsR0FGRDtBQUdEOztBQUVELDZCQUFlLGlCQUFTTixJQUFULEVBQWU7QUFDNUIsTUFBSVcsUUFBUSxHQUFHSixTQUFTLENBQUNQLElBQUQsQ0FBeEI7QUFDQSxTQUFPLENBQUNXLFFBQVEsQ0FBQ0wsS0FBVCxHQUNGcUUsWUFERSxHQUVGTCxjQUZDLEVBRWUzRCxRQUZmLENBQVA7QUFHRCxDOztBQ3hCRDtBQUVBLDZCQUFlLGdCQUFTWCxJQUFULEVBQWU7QUFDNUIsTUFBSTZFLE1BQU0sR0FBRyxPQUFPN0UsSUFBUCxLQUFnQixVQUFoQixHQUE2QkEsSUFBN0IsR0FBb0M0RSxPQUFPLENBQUM1RSxJQUFELENBQXhEO0FBQ0EsU0FBTyxLQUFLMUgsTUFBTCxDQUFZLFlBQVc7QUFDNUIsV0FBTyxLQUFLc0QsV0FBTCxDQUFpQmlKLE1BQU0sQ0FBQzlLLEtBQVAsQ0FBYSxJQUFiLEVBQW1CQyxTQUFuQixDQUFqQixDQUFQO0FBQ0QsR0FGTSxDQUFQO0FBR0QsQzs7QUNQRDtBQUNBOztBQUVBLFNBQVM4SyxZQUFULEdBQXdCO0FBQ3RCLFNBQU8sSUFBUDtBQUNEOztBQUVELDZCQUFlLGdCQUFTOUUsSUFBVCxFQUFlK0UsTUFBZixFQUF1QjtBQUNwQyxNQUFJRixNQUFNLEdBQUcsT0FBTzdFLElBQVAsS0FBZ0IsVUFBaEIsR0FBNkJBLElBQTdCLEdBQW9DNEUsT0FBTyxDQUFDNUUsSUFBRCxDQUF4RDtBQUFBLE1BQ0kxSCxNQUFNLEdBQUd5TSxNQUFNLElBQUksSUFBVixHQUFpQkQsWUFBakIsR0FBZ0MsT0FBT0MsTUFBUCxLQUFrQixVQUFsQixHQUErQkEsTUFBL0IsR0FBd0M1TSxRQUFRLENBQUM0TSxNQUFELENBRDdGO0FBRUEsU0FBTyxLQUFLek0sTUFBTCxDQUFZLFlBQVc7QUFDNUIsV0FBTyxLQUFLd0QsWUFBTCxDQUFrQitJLE1BQU0sQ0FBQzlLLEtBQVAsQ0FBYSxJQUFiLEVBQW1CQyxTQUFuQixDQUFsQixFQUFpRDFCLE1BQU0sQ0FBQ3lCLEtBQVAsQ0FBYSxJQUFiLEVBQW1CQyxTQUFuQixLQUFpQyxJQUFsRixDQUFQO0FBQ0QsR0FGTSxDQUFQO0FBR0QsQzs7QUNiRCxTQUFTZ0UsTUFBVCxHQUFrQjtBQUNoQixNQUFJM0MsTUFBTSxHQUFHLEtBQUt5RCxVQUFsQjtBQUNBLE1BQUl6RCxNQUFKLEVBQVlBLE1BQU0sQ0FBQzJKLFdBQVAsQ0FBbUIsSUFBbkI7QUFDYjs7QUFFRCw2QkFBZSw0QkFBVztBQUN4QixTQUFPLEtBQUsxRCxJQUFMLENBQVV0RCxNQUFWLENBQVA7QUFDRCxDOztBQ1BELFNBQVNpSCxzQkFBVCxHQUFrQztBQUNoQyxNQUFJQyxLQUFLLEdBQUcsS0FBS0MsU0FBTCxDQUFlLEtBQWYsQ0FBWjtBQUFBLE1BQW1DOUosTUFBTSxHQUFHLEtBQUt5RCxVQUFqRDtBQUNBLFNBQU96RCxNQUFNLEdBQUdBLE1BQU0sQ0FBQ1MsWUFBUCxDQUFvQm9KLEtBQXBCLEVBQTJCLEtBQUtoQixXQUFoQyxDQUFILEdBQWtEZ0IsS0FBL0Q7QUFDRDs7QUFFRCxTQUFTRSxtQkFBVCxHQUErQjtBQUM3QixNQUFJRixLQUFLLEdBQUcsS0FBS0MsU0FBTCxDQUFlLElBQWYsQ0FBWjtBQUFBLE1BQWtDOUosTUFBTSxHQUFHLEtBQUt5RCxVQUFoRDtBQUNBLFNBQU96RCxNQUFNLEdBQUdBLE1BQU0sQ0FBQ1MsWUFBUCxDQUFvQm9KLEtBQXBCLEVBQTJCLEtBQUtoQixXQUFoQyxDQUFILEdBQWtEZ0IsS0FBL0Q7QUFDRDs7QUFFRCw2QkFBZSxlQUFTRyxJQUFULEVBQWU7QUFDNUIsU0FBTyxLQUFLL00sTUFBTCxDQUFZK00sSUFBSSxHQUFHRCxtQkFBSCxHQUF5Qkgsc0JBQXpDLENBQVA7QUFDRCxDOztBQ1pELDZCQUFlLHlCQUFTaEksS0FBVCxFQUFnQjtBQUM3QixTQUFPakQsU0FBUyxDQUFDdEIsTUFBVixHQUNELEtBQUs0TSxRQUFMLENBQWMsVUFBZCxFQUEwQnJJLEtBQTFCLENBREMsR0FFRCxLQUFLaEUsSUFBTCxHQUFZSSxRQUZsQjtBQUdELEM7O0FDSkQsU0FBU2tNLGVBQVQsQ0FBeUJDLFFBQXpCLEVBQW1DO0FBQ2pDLFNBQU8sVUFBU0MsS0FBVCxFQUFnQjtBQUNyQkQsSUFBQUEsUUFBUSxDQUFDcE0sSUFBVCxDQUFjLElBQWQsRUFBb0JxTSxLQUFwQixFQUEyQixLQUFLcE0sUUFBaEM7QUFDRCxHQUZEO0FBR0Q7O0FBRUQsU0FBU3FNLGNBQVQsQ0FBd0JDLFNBQXhCLEVBQW1DO0FBQ2pDLFNBQU9BLFNBQVMsQ0FBQ25ELElBQVYsR0FBaUJDLEtBQWpCLENBQXVCLE9BQXZCLEVBQWdDdEgsR0FBaEMsQ0FBb0MsVUFBU3lLLENBQVQsRUFBWTtBQUNyRCxRQUFJNUYsSUFBSSxHQUFHLEVBQVg7QUFBQSxRQUFlN0csQ0FBQyxHQUFHeU0sQ0FBQyxDQUFDMUYsT0FBRixDQUFVLEdBQVYsQ0FBbkI7QUFDQSxRQUFJL0csQ0FBQyxJQUFJLENBQVQsRUFBWTZHLElBQUksR0FBRzRGLENBQUMsQ0FBQ3pGLEtBQUYsQ0FBUWhILENBQUMsR0FBRyxDQUFaLENBQVAsRUFBdUJ5TSxDQUFDLEdBQUdBLENBQUMsQ0FBQ3pGLEtBQUYsQ0FBUSxDQUFSLEVBQVdoSCxDQUFYLENBQTNCO0FBQ1osV0FBTztBQUFDME0sTUFBQUEsSUFBSSxFQUFFRCxDQUFQO0FBQVU1RixNQUFBQSxJQUFJLEVBQUVBO0FBQWhCLEtBQVA7QUFDRCxHQUpNLENBQVA7QUFLRDs7QUFFRCxTQUFTOEYsUUFBVCxDQUFrQkMsUUFBbEIsRUFBNEI7QUFDMUIsU0FBTyxZQUFXO0FBQ2hCLFFBQUlDLEVBQUUsR0FBRyxLQUFLQyxJQUFkO0FBQ0EsUUFBSSxDQUFDRCxFQUFMLEVBQVM7O0FBQ1QsU0FBSyxJQUFJbk4sQ0FBQyxHQUFHLENBQVIsRUFBV00sQ0FBQyxHQUFHLENBQUMsQ0FBaEIsRUFBbUJWLENBQUMsR0FBR3VOLEVBQUUsQ0FBQ3ROLE1BQTFCLEVBQWtDd04sQ0FBdkMsRUFBMENyTixDQUFDLEdBQUdKLENBQTlDLEVBQWlELEVBQUVJLENBQW5ELEVBQXNEO0FBQ3BELFVBQUlxTixDQUFDLEdBQUdGLEVBQUUsQ0FBQ25OLENBQUQsQ0FBTixFQUFXLENBQUMsQ0FBQ2tOLFFBQVEsQ0FBQ0YsSUFBVixJQUFrQkssQ0FBQyxDQUFDTCxJQUFGLEtBQVdFLFFBQVEsQ0FBQ0YsSUFBdkMsS0FBZ0RLLENBQUMsQ0FBQ2xHLElBQUYsS0FBVytGLFFBQVEsQ0FBQy9GLElBQW5GLEVBQXlGO0FBQ3ZGLGFBQUttRyxtQkFBTCxDQUF5QkQsQ0FBQyxDQUFDTCxJQUEzQixFQUFpQ0ssQ0FBQyxDQUFDVixRQUFuQyxFQUE2Q1UsQ0FBQyxDQUFDRSxPQUEvQztBQUNELE9BRkQsTUFFTztBQUNMSixRQUFBQSxFQUFFLENBQUMsRUFBRTdNLENBQUgsQ0FBRixHQUFVK00sQ0FBVjtBQUNEO0FBQ0Y7O0FBQ0QsUUFBSSxFQUFFL00sQ0FBTixFQUFTNk0sRUFBRSxDQUFDdE4sTUFBSCxHQUFZUyxDQUFaLENBQVQsS0FDSyxPQUFPLEtBQUs4TSxJQUFaO0FBQ04sR0FaRDtBQWFEOztBQUVELFNBQVNJLEtBQVQsQ0FBZU4sUUFBZixFQUF5QjlJLEtBQXpCLEVBQWdDbUosT0FBaEMsRUFBeUM7QUFDdkMsU0FBTyxZQUFXO0FBQ2hCLFFBQUlKLEVBQUUsR0FBRyxLQUFLQyxJQUFkO0FBQUEsUUFBb0JDLENBQXBCO0FBQUEsUUFBdUJWLFFBQVEsR0FBR0QsZUFBZSxDQUFDdEksS0FBRCxDQUFqRDtBQUNBLFFBQUkrSSxFQUFKLEVBQVEsS0FBSyxJQUFJbk4sQ0FBQyxHQUFHLENBQVIsRUFBV0osQ0FBQyxHQUFHdU4sRUFBRSxDQUFDdE4sTUFBdkIsRUFBK0JHLENBQUMsR0FBR0osQ0FBbkMsRUFBc0MsRUFBRUksQ0FBeEMsRUFBMkM7QUFDakQsVUFBSSxDQUFDcU4sQ0FBQyxHQUFHRixFQUFFLENBQUNuTixDQUFELENBQVAsRUFBWWdOLElBQVosS0FBcUJFLFFBQVEsQ0FBQ0YsSUFBOUIsSUFBc0NLLENBQUMsQ0FBQ2xHLElBQUYsS0FBVytGLFFBQVEsQ0FBQy9GLElBQTlELEVBQW9FO0FBQ2xFLGFBQUttRyxtQkFBTCxDQUF5QkQsQ0FBQyxDQUFDTCxJQUEzQixFQUFpQ0ssQ0FBQyxDQUFDVixRQUFuQyxFQUE2Q1UsQ0FBQyxDQUFDRSxPQUEvQztBQUNBLGFBQUtFLGdCQUFMLENBQXNCSixDQUFDLENBQUNMLElBQXhCLEVBQThCSyxDQUFDLENBQUNWLFFBQUYsR0FBYUEsUUFBM0MsRUFBcURVLENBQUMsQ0FBQ0UsT0FBRixHQUFZQSxPQUFqRTtBQUNBRixRQUFBQSxDQUFDLENBQUNqSixLQUFGLEdBQVVBLEtBQVY7QUFDQTtBQUNEO0FBQ0Y7QUFDRCxTQUFLcUosZ0JBQUwsQ0FBc0JQLFFBQVEsQ0FBQ0YsSUFBL0IsRUFBcUNMLFFBQXJDLEVBQStDWSxPQUEvQztBQUNBRixJQUFBQSxDQUFDLEdBQUc7QUFBQ0wsTUFBQUEsSUFBSSxFQUFFRSxRQUFRLENBQUNGLElBQWhCO0FBQXNCN0YsTUFBQUEsSUFBSSxFQUFFK0YsUUFBUSxDQUFDL0YsSUFBckM7QUFBMkMvQyxNQUFBQSxLQUFLLEVBQUVBLEtBQWxEO0FBQXlEdUksTUFBQUEsUUFBUSxFQUFFQSxRQUFuRTtBQUE2RVksTUFBQUEsT0FBTyxFQUFFQTtBQUF0RixLQUFKO0FBQ0EsUUFBSSxDQUFDSixFQUFMLEVBQVMsS0FBS0MsSUFBTCxHQUFZLENBQUNDLENBQUQsQ0FBWixDQUFULEtBQ0tGLEVBQUUsQ0FBQzlMLElBQUgsQ0FBUWdNLENBQVI7QUFDTixHQWREO0FBZUQ7O0FBRUQsNkJBQWUsWUFBU0gsUUFBVCxFQUFtQjlJLEtBQW5CLEVBQTBCbUosT0FBMUIsRUFBbUM7QUFDaEQsTUFBSVQsU0FBUyxHQUFHRCxjQUFjLENBQUNLLFFBQVEsR0FBRyxFQUFaLENBQTlCO0FBQUEsTUFBK0M1TSxDQUEvQztBQUFBLE1BQWtESixDQUFDLEdBQUc0TSxTQUFTLENBQUNqTixNQUFoRTtBQUFBLE1BQXdFa04sQ0FBeEU7O0FBRUEsTUFBSTVMLFNBQVMsQ0FBQ3RCLE1BQVYsR0FBbUIsQ0FBdkIsRUFBMEI7QUFDeEIsUUFBSXNOLEVBQUUsR0FBRyxLQUFLL00sSUFBTCxHQUFZZ04sSUFBckI7O0FBQ0EsUUFBSUQsRUFBSixFQUFRLEtBQUssSUFBSW5OLENBQUMsR0FBRyxDQUFSLEVBQVdKLENBQUMsR0FBR3VOLEVBQUUsQ0FBQ3ROLE1BQWxCLEVBQTBCd04sQ0FBL0IsRUFBa0NyTixDQUFDLEdBQUdKLENBQXRDLEVBQXlDLEVBQUVJLENBQTNDLEVBQThDO0FBQ3BELFdBQUtNLENBQUMsR0FBRyxDQUFKLEVBQU8rTSxDQUFDLEdBQUdGLEVBQUUsQ0FBQ25OLENBQUQsQ0FBbEIsRUFBdUJNLENBQUMsR0FBR0osQ0FBM0IsRUFBOEIsRUFBRUksQ0FBaEMsRUFBbUM7QUFDakMsWUFBSSxDQUFDeU0sQ0FBQyxHQUFHRCxTQUFTLENBQUN4TSxDQUFELENBQWQsRUFBbUIwTSxJQUFuQixLQUE0QkssQ0FBQyxDQUFDTCxJQUE5QixJQUFzQ0QsQ0FBQyxDQUFDNUYsSUFBRixLQUFXa0csQ0FBQyxDQUFDbEcsSUFBdkQsRUFBNkQ7QUFDM0QsaUJBQU9rRyxDQUFDLENBQUNqSixLQUFUO0FBQ0Q7QUFDRjtBQUNGO0FBQ0Q7QUFDRDs7QUFFRCtJLEVBQUFBLEVBQUUsR0FBRy9JLEtBQUssR0FBR29KLEtBQUgsR0FBV1AsUUFBckI7O0FBQ0EsT0FBSzNNLENBQUMsR0FBRyxDQUFULEVBQVlBLENBQUMsR0FBR0osQ0FBaEIsRUFBbUIsRUFBRUksQ0FBckIsRUFBd0IsS0FBS21JLElBQUwsQ0FBVTBFLEVBQUUsQ0FBQ0wsU0FBUyxDQUFDeE0sQ0FBRCxDQUFWLEVBQWU4RCxLQUFmLEVBQXNCbUosT0FBdEIsQ0FBWjs7QUFDeEIsU0FBTyxJQUFQO0FBQ0QsQzs7QUNsRUQ7O0FBRUEsU0FBU0csYUFBVCxDQUF1QnROLElBQXZCLEVBQTZCNE0sSUFBN0IsRUFBbUNXLE1BQW5DLEVBQTJDO0FBQ3pDLE1BQUlDLE1BQU0sR0FBR2xGLFVBQVcsQ0FBQ3RJLElBQUQsQ0FBeEI7QUFBQSxNQUNJd00sS0FBSyxHQUFHZ0IsTUFBTSxDQUFDQyxXQURuQjs7QUFHQSxNQUFJLE9BQU9qQixLQUFQLEtBQWlCLFVBQXJCLEVBQWlDO0FBQy9CQSxJQUFBQSxLQUFLLEdBQUcsSUFBSUEsS0FBSixDQUFVSSxJQUFWLEVBQWdCVyxNQUFoQixDQUFSO0FBQ0QsR0FGRCxNQUVPO0FBQ0xmLElBQUFBLEtBQUssR0FBR2dCLE1BQU0sQ0FBQ2pGLFFBQVAsQ0FBZ0JtRixXQUFoQixDQUE0QixPQUE1QixDQUFSO0FBQ0EsUUFBSUgsTUFBSixFQUFZZixLQUFLLENBQUNtQixTQUFOLENBQWdCZixJQUFoQixFQUFzQlcsTUFBTSxDQUFDSyxPQUE3QixFQUFzQ0wsTUFBTSxDQUFDTSxVQUE3QyxHQUEwRHJCLEtBQUssQ0FBQ3NCLE1BQU4sR0FBZVAsTUFBTSxDQUFDTyxNQUFoRixDQUFaLEtBQ0t0QixLQUFLLENBQUNtQixTQUFOLENBQWdCZixJQUFoQixFQUFzQixLQUF0QixFQUE2QixLQUE3QjtBQUNOOztBQUVENU0sRUFBQUEsSUFBSSxDQUFDc04sYUFBTCxDQUFtQmQsS0FBbkI7QUFDRDs7QUFFRCxTQUFTdUIsZ0JBQVQsQ0FBMEJuQixJQUExQixFQUFnQ1csTUFBaEMsRUFBd0M7QUFDdEMsU0FBTyxZQUFXO0FBQ2hCLFdBQU9ELGFBQWEsQ0FBQyxJQUFELEVBQU9WLElBQVAsRUFBYVcsTUFBYixDQUFwQjtBQUNELEdBRkQ7QUFHRDs7QUFFRCxTQUFTUyxnQkFBVCxDQUEwQnBCLElBQTFCLEVBQWdDVyxNQUFoQyxFQUF3QztBQUN0QyxTQUFPLFlBQVc7QUFDaEIsV0FBT0QsYUFBYSxDQUFDLElBQUQsRUFBT1YsSUFBUCxFQUFhVyxNQUFNLENBQUN6TSxLQUFQLENBQWEsSUFBYixFQUFtQkMsU0FBbkIsQ0FBYixDQUFwQjtBQUNELEdBRkQ7QUFHRDs7QUFFRCw2QkFBZSw0QkFBUzZMLElBQVQsRUFBZVcsTUFBZixFQUF1QjtBQUNwQyxTQUFPLEtBQUtsRixJQUFMLENBQVUsQ0FBQyxPQUFPa0YsTUFBUCxLQUFrQixVQUFsQixHQUNaUyxnQkFEWSxHQUVaRCxnQkFGVyxFQUVPbkIsSUFGUCxFQUVhVyxNQUZiLENBQVYsQ0FBUDtBQUdELEM7O0FDakNELDZCQUFlLHFCQUFZO0FBQ3pCLE9BQUssSUFBSWpPLE1BQU0sR0FBRyxLQUFLQyxPQUFsQixFQUEyQkssQ0FBQyxHQUFHLENBQS9CLEVBQWtDSixDQUFDLEdBQUdGLE1BQU0sQ0FBQ0csTUFBbEQsRUFBMERHLENBQUMsR0FBR0osQ0FBOUQsRUFBaUUsRUFBRUksQ0FBbkUsRUFBc0U7QUFDcEUsU0FBSyxJQUFJQyxLQUFLLEdBQUdQLE1BQU0sQ0FBQ00sQ0FBRCxDQUFsQixFQUF1Qk0sQ0FBQyxHQUFHLENBQTNCLEVBQThCSixDQUFDLEdBQUdELEtBQUssQ0FBQ0osTUFBeEMsRUFBZ0RPLElBQXJELEVBQTJERSxDQUFDLEdBQUdKLENBQS9ELEVBQWtFLEVBQUVJLENBQXBFLEVBQXVFO0FBQ3JFLFVBQUlGLElBQUksR0FBR0gsS0FBSyxDQUFDSyxDQUFELENBQWhCLEVBQXFCLE1BQU1GLElBQU47QUFDdEI7QUFDRjtBQUNGLEM7O0FDTkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFTyxJQUFJbVEsSUFBSSxHQUFHLENBQUMsSUFBRCxDQUFYO0FBRUEsU0FBUy9RLFNBQVQsQ0FBbUJFLE1BQW5CLEVBQTJCMEIsT0FBM0IsRUFBb0M7QUFDekMsT0FBS3pCLE9BQUwsR0FBZUQsTUFBZjtBQUNBLE9BQUtlLFFBQUwsR0FBZ0JXLE9BQWhCO0FBQ0Q7O0FBRUQsU0FBUzZELFNBQVQsR0FBcUI7QUFDbkIsU0FBTyxJQUFJekYsU0FBSixDQUFjLENBQUMsQ0FBQ21KLFFBQVEsQ0FBQ2dELGVBQVYsQ0FBRCxDQUFkLEVBQTRDNEUsSUFBNUMsQ0FBUDtBQUNEOztBQUVELFNBQVNDLG1CQUFULEdBQStCO0FBQzdCLFNBQU8sSUFBUDtBQUNEOztBQUVEaFIsU0FBUyxDQUFDaUMsU0FBVixHQUFzQndELFNBQVMsQ0FBQ3hELFNBQVYsR0FBc0I7QUFDMUNxQixFQUFBQSxXQUFXLEVBQUV0RCxTQUQ2QjtBQUUxQ0MsRUFBQUEsTUFBTSxFQUFFNE8sZ0JBRmtDO0FBRzFDcE0sRUFBQUEsU0FBUyxFQUFFcU0sU0FIK0I7QUFJMUNtQyxFQUFBQSxXQUFXLEVBQUVsQyxXQUo2QjtBQUsxQ21DLEVBQUFBLGNBQWMsRUFBRWxDLGNBTDBCO0FBTTFDek0sRUFBQUEsTUFBTSxFQUFFME0sZ0JBTmtDO0FBTzFDbEwsRUFBQUEsSUFBSSxFQUFFbUwsSUFQb0M7QUFRMUNyTCxFQUFBQSxLQUFLLEVBQUVzTCxLQVJtQztBQVMxQ3JMLEVBQUFBLElBQUksRUFBRXNMLElBVG9DO0FBVTFDMUUsRUFBQUEsSUFBSSxFQUFFMkUsSUFWb0M7QUFXMUN6SixFQUFBQSxLQUFLLEVBQUUwSixLQVhtQztBQVkxQzdKLEVBQUFBLFNBQVMsRUFBRXVMLG1CQVorQjtBQWExQ25MLEVBQUFBLEtBQUssRUFBRTBKLEtBYm1DO0FBYzFDdEksRUFBQUEsSUFBSSxFQUFFdUksSUFkb0M7QUFlMUN6TyxFQUFBQSxJQUFJLEVBQUUwTyxJQWZvQztBQWdCMUMwQixFQUFBQSxLQUFLLEVBQUV6QixLQWhCbUM7QUFpQjFDOU8sRUFBQUEsSUFBSSxFQUFFK08sSUFqQm9DO0FBa0IxQ3ZJLEVBQUFBLElBQUksRUFBRXdJLElBbEJvQztBQW1CMUN0TyxFQUFBQSxLQUFLLEVBQUV1TyxlQW5CbUM7QUFvQjFDNUcsRUFBQUEsSUFBSSxFQUFFNkcsSUFwQm9DO0FBcUIxQ3NCLEVBQUFBLElBQUksRUFBRXJCLElBckJvQztBQXNCMUMxRyxFQUFBQSxLQUFLLEVBQUUyRyxLQXRCbUM7QUF1QjFDL0MsRUFBQUEsUUFBUSxFQUFFZ0QsUUF2QmdDO0FBd0IxQ29CLEVBQUFBLE9BQU8sRUFBRW5CLE9BeEJpQztBQXlCMUNvQixFQUFBQSxJQUFJLEVBQUVuQixjQXpCb0M7QUEwQjFDb0IsRUFBQUEsSUFBSSxFQUFFbkIsSUExQm9DO0FBMkIxQ3hFLEVBQUFBLEtBQUssRUFBRXlFLGVBM0JtQztBQTRCMUN2RSxFQUFBQSxLQUFLLEVBQUV3RSxlQTVCbUM7QUE2QjFDNUssRUFBQUEsTUFBTSxFQUFFNkssTUE3QmtDO0FBOEIxQ2lCLEVBQUFBLE1BQU0sRUFBRWhCLE1BOUJrQztBQStCMUM3SyxFQUFBQSxNQUFNLEVBQUU4SyxnQkEvQmtDO0FBZ0MxQzVELEVBQUFBLEtBQUssRUFBRTZELEtBaENtQztBQWlDMUN6TixFQUFBQSxLQUFLLEVBQUUwTixlQWpDbUM7QUFrQzFDaEQsRUFBQUEsRUFBRSxFQUFFaUQsRUFsQ3NDO0FBbUMxQ2EsRUFBQUEsUUFBUSxFQUFFWixrQkFuQ2dDO0FBb0MxQyxHQUFDYSxNQUFNLENBQUNDLFFBQVIsR0FBbUJiLFFBQWtCQTtBQXBDSyxDQUE1QztBQXVDQSxvREFBZXJMLFNBQWYsRTs7QUN6RkEsSUFBSW1NLElBQUksR0FBRztBQUFDaE4sRUFBQUEsS0FBSyxFQUFFLE1BQU0sQ0FBRTtBQUFoQixDQUFYOztBQUVBLFNBQVM2TSxpQkFBVCxHQUFvQjtBQUNsQixPQUFLLElBQUkzUSxDQUFDLEdBQUcsQ0FBUixFQUFXSixDQUFDLEdBQUdpQixTQUFTLENBQUN0QixNQUF6QixFQUFpQ3dSLENBQUMsR0FBRyxFQUFyQyxFQUF5Q3RFLENBQTlDLEVBQWlEek0sQ0FBQyxHQUFHSixDQUFyRCxFQUF3RCxFQUFFSSxDQUExRCxFQUE2RDtBQUMzRCxRQUFJLEVBQUV5TSxDQUFDLEdBQUc1TCxTQUFTLENBQUNiLENBQUQsQ0FBVCxHQUFlLEVBQXJCLEtBQTZCeU0sQ0FBQyxJQUFJc0UsQ0FBbEMsSUFBd0MsUUFBUUMsSUFBUixDQUFhdkUsQ0FBYixDQUE1QyxFQUE2RCxNQUFNLElBQUl3RSxLQUFKLENBQVUsbUJBQW1CeEUsQ0FBN0IsQ0FBTjtBQUM3RHNFLElBQUFBLENBQUMsQ0FBQ3RFLENBQUQsQ0FBRCxHQUFPLEVBQVA7QUFDRDs7QUFDRCxTQUFPLElBQUl5RSxRQUFKLENBQWFILENBQWIsQ0FBUDtBQUNEOztBQUVELFNBQVNHLFFBQVQsQ0FBa0JILENBQWxCLEVBQXFCO0FBQ25CLE9BQUtBLENBQUwsR0FBU0EsQ0FBVDtBQUNEOztBQUVELFNBQVN4RSx1QkFBVCxDQUF3QkMsU0FBeEIsRUFBbUMyRSxLQUFuQyxFQUEwQztBQUN4QyxTQUFPM0UsU0FBUyxDQUFDbkQsSUFBVixHQUFpQkMsS0FBakIsQ0FBdUIsT0FBdkIsRUFBZ0N0SCxHQUFoQyxDQUFvQyxVQUFTeUssQ0FBVCxFQUFZO0FBQ3JELFFBQUk1RixJQUFJLEdBQUcsRUFBWDtBQUFBLFFBQWU3RyxDQUFDLEdBQUd5TSxDQUFDLENBQUMxRixPQUFGLENBQVUsR0FBVixDQUFuQjtBQUNBLFFBQUkvRyxDQUFDLElBQUksQ0FBVCxFQUFZNkcsSUFBSSxHQUFHNEYsQ0FBQyxDQUFDekYsS0FBRixDQUFRaEgsQ0FBQyxHQUFHLENBQVosQ0FBUCxFQUF1QnlNLENBQUMsR0FBR0EsQ0FBQyxDQUFDekYsS0FBRixDQUFRLENBQVIsRUFBV2hILENBQVgsQ0FBM0I7QUFDWixRQUFJeU0sQ0FBQyxJQUFJLENBQUMwRSxLQUFLLENBQUNsSyxjQUFOLENBQXFCd0YsQ0FBckIsQ0FBVixFQUFtQyxNQUFNLElBQUl3RSxLQUFKLENBQVUsbUJBQW1CeEUsQ0FBN0IsQ0FBTjtBQUNuQyxXQUFPO0FBQUNDLE1BQUFBLElBQUksRUFBRUQsQ0FBUDtBQUFVNUYsTUFBQUEsSUFBSSxFQUFFQTtBQUFoQixLQUFQO0FBQ0QsR0FMTSxDQUFQO0FBTUQ7O0FBRURxSyxRQUFRLENBQUMvUCxTQUFULEdBQXFCd1AsaUJBQVEsQ0FBQ3hQLFNBQVQsR0FBcUI7QUFDeENxQixFQUFBQSxXQUFXLEVBQUUwTyxRQUQyQjtBQUV4Q3JFLEVBQUFBLEVBQUUsRUFBRSxVQUFTRCxRQUFULEVBQW1CdkcsUUFBbkIsRUFBNkI7QUFDL0IsUUFBSTBLLENBQUMsR0FBRyxLQUFLQSxDQUFiO0FBQUEsUUFDSUssQ0FBQyxHQUFHN0UsdUJBQWMsQ0FBQ0ssUUFBUSxHQUFHLEVBQVosRUFBZ0JtRSxDQUFoQixDQUR0QjtBQUFBLFFBRUl0RSxDQUZKO0FBQUEsUUFHSXpNLENBQUMsR0FBRyxDQUFDLENBSFQ7QUFBQSxRQUlJSixDQUFDLEdBQUd3UixDQUFDLENBQUM3UixNQUpWLENBRCtCLENBTy9COztBQUNBLFFBQUlzQixTQUFTLENBQUN0QixNQUFWLEdBQW1CLENBQXZCLEVBQTBCO0FBQ3hCLGFBQU8sRUFBRVMsQ0FBRixHQUFNSixDQUFiLEVBQWdCLElBQUksQ0FBQzZNLENBQUMsR0FBRyxDQUFDRyxRQUFRLEdBQUd3RSxDQUFDLENBQUNwUixDQUFELENBQWIsRUFBa0IwTSxJQUF2QixNQUFpQ0QsQ0FBQyxHQUFHN0ksR0FBRyxDQUFDbU4sQ0FBQyxDQUFDdEUsQ0FBRCxDQUFGLEVBQU9HLFFBQVEsQ0FBQy9GLElBQWhCLENBQXhDLENBQUosRUFBb0UsT0FBTzRGLENBQVA7O0FBQ3BGO0FBQ0QsS0FYOEIsQ0FhL0I7QUFDQTs7O0FBQ0EsUUFBSXBHLFFBQVEsSUFBSSxJQUFaLElBQW9CLE9BQU9BLFFBQVAsS0FBb0IsVUFBNUMsRUFBd0QsTUFBTSxJQUFJNEssS0FBSixDQUFVLHVCQUF1QjVLLFFBQWpDLENBQU47O0FBQ3hELFdBQU8sRUFBRXJHLENBQUYsR0FBTUosQ0FBYixFQUFnQjtBQUNkLFVBQUk2TSxDQUFDLEdBQUcsQ0FBQ0csUUFBUSxHQUFHd0UsQ0FBQyxDQUFDcFIsQ0FBRCxDQUFiLEVBQWtCME0sSUFBMUIsRUFBZ0NxRSxDQUFDLENBQUN0RSxDQUFELENBQUQsR0FBTzlJLEdBQUcsQ0FBQ29OLENBQUMsQ0FBQ3RFLENBQUQsQ0FBRixFQUFPRyxRQUFRLENBQUMvRixJQUFoQixFQUFzQlIsUUFBdEIsQ0FBVixDQUFoQyxLQUNLLElBQUlBLFFBQVEsSUFBSSxJQUFoQixFQUFzQixLQUFLb0csQ0FBTCxJQUFVc0UsQ0FBVixFQUFhQSxDQUFDLENBQUN0RSxDQUFELENBQUQsR0FBTzlJLEdBQUcsQ0FBQ29OLENBQUMsQ0FBQ3RFLENBQUQsQ0FBRixFQUFPRyxRQUFRLENBQUMvRixJQUFoQixFQUFzQixJQUF0QixDQUFWO0FBQ3pDOztBQUVELFdBQU8sSUFBUDtBQUNELEdBeEJ1QztBQXlCeEN3SyxFQUFBQSxJQUFJLEVBQUUsWUFBVztBQUNmLFFBQUlBLElBQUksR0FBRyxFQUFYO0FBQUEsUUFBZU4sQ0FBQyxHQUFHLEtBQUtBLENBQXhCOztBQUNBLFNBQUssSUFBSXRFLENBQVQsSUFBY3NFLENBQWQsRUFBaUJNLElBQUksQ0FBQzVFLENBQUQsQ0FBSixHQUFVc0UsQ0FBQyxDQUFDdEUsQ0FBRCxDQUFELENBQUt6RixLQUFMLEVBQVY7O0FBQ2pCLFdBQU8sSUFBSWtLLFFBQUosQ0FBYUcsSUFBYixDQUFQO0FBQ0QsR0E3QnVDO0FBOEJ4Q3BSLEVBQUFBLElBQUksRUFBRSxVQUFTeU0sSUFBVCxFQUFlNEUsSUFBZixFQUFxQjtBQUN6QixRQUFJLENBQUMxUixDQUFDLEdBQUdpQixTQUFTLENBQUN0QixNQUFWLEdBQW1CLENBQXhCLElBQTZCLENBQWpDLEVBQW9DLEtBQUssSUFBSWdTLElBQUksR0FBRyxJQUFJOVIsS0FBSixDQUFVRyxDQUFWLENBQVgsRUFBeUJJLENBQUMsR0FBRyxDQUE3QixFQUFnQ0osQ0FBaEMsRUFBbUM2TSxDQUF4QyxFQUEyQ3pNLENBQUMsR0FBR0osQ0FBL0MsRUFBa0QsRUFBRUksQ0FBcEQsRUFBdUR1UixJQUFJLENBQUN2UixDQUFELENBQUosR0FBVWEsU0FBUyxDQUFDYixDQUFDLEdBQUcsQ0FBTCxDQUFuQjtBQUMzRixRQUFJLENBQUMsS0FBSytRLENBQUwsQ0FBTzlKLGNBQVAsQ0FBc0J5RixJQUF0QixDQUFMLEVBQWtDLE1BQU0sSUFBSXVFLEtBQUosQ0FBVSxtQkFBbUJ2RSxJQUE3QixDQUFOOztBQUNsQyxTQUFLRCxDQUFDLEdBQUcsS0FBS3NFLENBQUwsQ0FBT3JFLElBQVAsQ0FBSixFQUFrQjFNLENBQUMsR0FBRyxDQUF0QixFQUF5QkosQ0FBQyxHQUFHNk0sQ0FBQyxDQUFDbE4sTUFBcEMsRUFBNENTLENBQUMsR0FBR0osQ0FBaEQsRUFBbUQsRUFBRUksQ0FBckQsRUFBd0R5TSxDQUFDLENBQUN6TSxDQUFELENBQUQsQ0FBSzhELEtBQUwsQ0FBV2xELEtBQVgsQ0FBaUIwUSxJQUFqQixFQUF1QkMsSUFBdkI7QUFDekQsR0FsQ3VDO0FBbUN4QzNRLEVBQUFBLEtBQUssRUFBRSxVQUFTOEwsSUFBVCxFQUFlNEUsSUFBZixFQUFxQkMsSUFBckIsRUFBMkI7QUFDaEMsUUFBSSxDQUFDLEtBQUtSLENBQUwsQ0FBTzlKLGNBQVAsQ0FBc0J5RixJQUF0QixDQUFMLEVBQWtDLE1BQU0sSUFBSXVFLEtBQUosQ0FBVSxtQkFBbUJ2RSxJQUE3QixDQUFOOztBQUNsQyxTQUFLLElBQUlELENBQUMsR0FBRyxLQUFLc0UsQ0FBTCxDQUFPckUsSUFBUCxDQUFSLEVBQXNCMU0sQ0FBQyxHQUFHLENBQTFCLEVBQTZCSixDQUFDLEdBQUc2TSxDQUFDLENBQUNsTixNQUF4QyxFQUFnRFMsQ0FBQyxHQUFHSixDQUFwRCxFQUF1RCxFQUFFSSxDQUF6RCxFQUE0RHlNLENBQUMsQ0FBQ3pNLENBQUQsQ0FBRCxDQUFLOEQsS0FBTCxDQUFXbEQsS0FBWCxDQUFpQjBRLElBQWpCLEVBQXVCQyxJQUF2QjtBQUM3RDtBQXRDdUMsQ0FBMUM7O0FBeUNBLFNBQVMzTixHQUFULENBQWE4SSxJQUFiLEVBQW1CN0YsSUFBbkIsRUFBeUI7QUFDdkIsT0FBSyxJQUFJN0csQ0FBQyxHQUFHLENBQVIsRUFBV0osQ0FBQyxHQUFHOE0sSUFBSSxDQUFDbk4sTUFBcEIsRUFBNEJpUyxDQUFqQyxFQUFvQ3hSLENBQUMsR0FBR0osQ0FBeEMsRUFBMkMsRUFBRUksQ0FBN0MsRUFBZ0Q7QUFDOUMsUUFBSSxDQUFDd1IsQ0FBQyxHQUFHOUUsSUFBSSxDQUFDMU0sQ0FBRCxDQUFULEVBQWM2RyxJQUFkLEtBQXVCQSxJQUEzQixFQUFpQztBQUMvQixhQUFPMkssQ0FBQyxDQUFDMU4sS0FBVDtBQUNEO0FBQ0Y7QUFDRjs7QUFFRCxTQUFTSCxHQUFULENBQWErSSxJQUFiLEVBQW1CN0YsSUFBbkIsRUFBeUJSLFFBQXpCLEVBQW1DO0FBQ2pDLE9BQUssSUFBSXJHLENBQUMsR0FBRyxDQUFSLEVBQVdKLENBQUMsR0FBRzhNLElBQUksQ0FBQ25OLE1BQXpCLEVBQWlDUyxDQUFDLEdBQUdKLENBQXJDLEVBQXdDLEVBQUVJLENBQTFDLEVBQTZDO0FBQzNDLFFBQUkwTSxJQUFJLENBQUMxTSxDQUFELENBQUosQ0FBUTZHLElBQVIsS0FBaUJBLElBQXJCLEVBQTJCO0FBQ3pCNkYsTUFBQUEsSUFBSSxDQUFDMU0sQ0FBRCxDQUFKLEdBQVU4USxJQUFWLEVBQWdCcEUsSUFBSSxHQUFHQSxJQUFJLENBQUMxRixLQUFMLENBQVcsQ0FBWCxFQUFjaEgsQ0FBZCxFQUFpQnlSLE1BQWpCLENBQXdCL0UsSUFBSSxDQUFDMUYsS0FBTCxDQUFXaEgsQ0FBQyxHQUFHLENBQWYsQ0FBeEIsQ0FBdkI7QUFDQTtBQUNEO0FBQ0Y7O0FBQ0QsTUFBSXFHLFFBQVEsSUFBSSxJQUFoQixFQUFzQnFHLElBQUksQ0FBQzNMLElBQUwsQ0FBVTtBQUFDOEYsSUFBQUEsSUFBSSxFQUFFQSxJQUFQO0FBQWEvQyxJQUFBQSxLQUFLLEVBQUV1QztBQUFwQixHQUFWO0FBQ3RCLFNBQU9xRyxJQUFQO0FBQ0Q7O0FBRUQsbURBQWVpRSxpQkFBZixFOztBQ25GQSxJQUFJZSxXQUFLLEdBQUcsQ0FBWjtBQUFBLElBQWU7QUFDWEMsT0FBTyxHQUFHLENBRGQ7QUFBQSxJQUNpQjtBQUNiQyxRQUFRLEdBQUcsQ0FGZjtBQUFBLElBRWtCO0FBQ2RDLFNBQVMsR0FBRyxJQUhoQjtBQUFBLElBR3NCO0FBQ2xCQyxRQUpKO0FBQUEsSUFLSUMsUUFMSjtBQUFBLElBTUlDLFNBQVMsR0FBRyxDQU5oQjtBQUFBLElBT0lDLFFBQVEsR0FBRyxDQVBmO0FBQUEsSUFRSUMsU0FBUyxHQUFHLENBUmhCO0FBQUEsSUFTSUMsS0FBSyxHQUFHLE9BQU9DLFdBQVAsS0FBdUIsUUFBdkIsSUFBbUNBLFdBQVcsQ0FBQ0MsR0FBL0MsR0FBcURELFdBQXJELEdBQW1FRSxJQVQvRTtBQUFBLElBVUlDLFFBQVEsR0FBRyxPQUFPakYsTUFBUCxLQUFrQixRQUFsQixJQUE4QkEsTUFBTSxDQUFDa0YscUJBQXJDLEdBQTZEbEYsTUFBTSxDQUFDa0YscUJBQVAsQ0FBNkJ6TyxJQUE3QixDQUFrQ3VKLE1BQWxDLENBQTdELEdBQXlHLFVBQVNtRixDQUFULEVBQVk7QUFBRUMsRUFBQUEsVUFBVSxDQUFDRCxDQUFELEVBQUksRUFBSixDQUFWO0FBQW9CLENBVjFKO0FBWU8sU0FBU0osR0FBVCxHQUFlO0FBQ3BCLFNBQU9KLFFBQVEsS0FBS00sUUFBUSxDQUFDSSxRQUFELENBQVIsRUFBb0JWLFFBQVEsR0FBR0UsS0FBSyxDQUFDRSxHQUFOLEtBQWNILFNBQWxELENBQWY7QUFDRDs7QUFFRCxTQUFTUyxRQUFULEdBQW9CO0FBQ2xCVixFQUFBQSxRQUFRLEdBQUcsQ0FBWDtBQUNEOztBQUVNLFNBQVNXLEtBQVQsR0FBaUI7QUFDdEIsT0FBS0MsS0FBTCxHQUNBLEtBQUtDLEtBQUwsR0FDQSxLQUFLeFEsS0FBTCxHQUFhLElBRmI7QUFHRDtBQUVEc1EsS0FBSyxDQUFDelIsU0FBTixHQUFrQjRSLEtBQUssQ0FBQzVSLFNBQU4sR0FBa0I7QUFDbENxQixFQUFBQSxXQUFXLEVBQUVvUSxLQURxQjtBQUVsQ0ksRUFBQUEsT0FBTyxFQUFFLFVBQVMzTSxRQUFULEVBQW1CNE0sS0FBbkIsRUFBMEJDLElBQTFCLEVBQWdDO0FBQ3ZDLFFBQUksT0FBTzdNLFFBQVAsS0FBb0IsVUFBeEIsRUFBb0MsTUFBTSxJQUFJOE0sU0FBSixDQUFjLDRCQUFkLENBQU47QUFDcENELElBQUFBLElBQUksR0FBRyxDQUFDQSxJQUFJLElBQUksSUFBUixHQUFlYixHQUFHLEVBQWxCLEdBQXVCLENBQUNhLElBQXpCLEtBQWtDRCxLQUFLLElBQUksSUFBVCxHQUFnQixDQUFoQixHQUFvQixDQUFDQSxLQUF2RCxDQUFQOztBQUNBLFFBQUksQ0FBQyxLQUFLM1EsS0FBTixJQUFleVAsUUFBUSxLQUFLLElBQWhDLEVBQXNDO0FBQ3BDLFVBQUlBLFFBQUosRUFBY0EsUUFBUSxDQUFDelAsS0FBVCxHQUFpQixJQUFqQixDQUFkLEtBQ0t3UCxRQUFRLEdBQUcsSUFBWDtBQUNMQyxNQUFBQSxRQUFRLEdBQUcsSUFBWDtBQUNEOztBQUNELFNBQUtjLEtBQUwsR0FBYXhNLFFBQWI7QUFDQSxTQUFLeU0sS0FBTCxHQUFhSSxJQUFiO0FBQ0FFLElBQUFBLEtBQUs7QUFDTixHQWJpQztBQWNsQ0MsRUFBQUEsSUFBSSxFQUFFLFlBQVc7QUFDZixRQUFJLEtBQUtSLEtBQVQsRUFBZ0I7QUFDZCxXQUFLQSxLQUFMLEdBQWEsSUFBYjtBQUNBLFdBQUtDLEtBQUwsR0FBYVEsUUFBYjtBQUNBRixNQUFBQSxLQUFLO0FBQ047QUFDRjtBQXBCaUMsQ0FBcEM7QUF1Qk8sU0FBU0wsS0FBVCxDQUFlMU0sUUFBZixFQUF5QjRNLEtBQXpCLEVBQWdDQyxJQUFoQyxFQUFzQztBQUMzQyxNQUFJekcsQ0FBQyxHQUFHLElBQUltRyxLQUFKLEVBQVI7QUFDQW5HLEVBQUFBLENBQUMsQ0FBQ3VHLE9BQUYsQ0FBVTNNLFFBQVYsRUFBb0I0TSxLQUFwQixFQUEyQkMsSUFBM0I7QUFDQSxTQUFPekcsQ0FBUDtBQUNEO0FBRU0sU0FBUzhHLFVBQVQsR0FBc0I7QUFDM0JsQixFQUFBQSxHQUFHLEdBRHdCLENBQ3BCOztBQUNQLElBQUVYLFdBQUYsQ0FGMkIsQ0FFbEI7O0FBQ1QsTUFBSWpGLENBQUMsR0FBR3FGLFFBQVI7QUFBQSxNQUFrQjBCLENBQWxCOztBQUNBLFNBQU8vRyxDQUFQLEVBQVU7QUFDUixRQUFJLENBQUMrRyxDQUFDLEdBQUd2QixRQUFRLEdBQUd4RixDQUFDLENBQUNxRyxLQUFsQixLQUE0QixDQUFoQyxFQUFtQ3JHLENBQUMsQ0FBQ29HLEtBQUYsQ0FBUTVTLElBQVIsQ0FBYXdULFNBQWIsRUFBd0JELENBQXhCO0FBQ25DL0csSUFBQUEsQ0FBQyxHQUFHQSxDQUFDLENBQUNuSyxLQUFOO0FBQ0Q7O0FBQ0QsSUFBRW9QLFdBQUY7QUFDRDs7QUFFRCxTQUFTZ0MsSUFBVCxHQUFnQjtBQUNkekIsRUFBQUEsUUFBUSxHQUFHLENBQUNELFNBQVMsR0FBR0csS0FBSyxDQUFDRSxHQUFOLEVBQWIsSUFBNEJILFNBQXZDO0FBQ0FSLEVBQUFBLFdBQUssR0FBR0MsT0FBTyxHQUFHLENBQWxCOztBQUNBLE1BQUk7QUFDRjRCLElBQUFBLFVBQVU7QUFDWCxHQUZELFNBRVU7QUFDUjdCLElBQUFBLFdBQUssR0FBRyxDQUFSO0FBQ0FpQyxJQUFBQSxHQUFHO0FBQ0gxQixJQUFBQSxRQUFRLEdBQUcsQ0FBWDtBQUNEO0FBQ0Y7O0FBRUQsU0FBUzJCLElBQVQsR0FBZ0I7QUFDZCxNQUFJdkIsR0FBRyxHQUFHRixLQUFLLENBQUNFLEdBQU4sRUFBVjtBQUFBLE1BQXVCWSxLQUFLLEdBQUdaLEdBQUcsR0FBR0wsU0FBckM7QUFDQSxNQUFJaUIsS0FBSyxHQUFHcEIsU0FBWixFQUF1QkssU0FBUyxJQUFJZSxLQUFiLEVBQW9CakIsU0FBUyxHQUFHSyxHQUFoQztBQUN4Qjs7QUFFRCxTQUFTc0IsR0FBVCxHQUFlO0FBQ2IsTUFBSUUsRUFBSjtBQUFBLE1BQVFDLEVBQUUsR0FBR2hDLFFBQWI7QUFBQSxNQUF1QmlDLEVBQXZCO0FBQUEsTUFBMkJiLElBQUksR0FBR0ksUUFBbEM7O0FBQ0EsU0FBT1EsRUFBUCxFQUFXO0FBQ1QsUUFBSUEsRUFBRSxDQUFDakIsS0FBUCxFQUFjO0FBQ1osVUFBSUssSUFBSSxHQUFHWSxFQUFFLENBQUNoQixLQUFkLEVBQXFCSSxJQUFJLEdBQUdZLEVBQUUsQ0FBQ2hCLEtBQVY7QUFDckJlLE1BQUFBLEVBQUUsR0FBR0MsRUFBTCxFQUFTQSxFQUFFLEdBQUdBLEVBQUUsQ0FBQ3hSLEtBQWpCO0FBQ0QsS0FIRCxNQUdPO0FBQ0x5UixNQUFBQSxFQUFFLEdBQUdELEVBQUUsQ0FBQ3hSLEtBQVIsRUFBZXdSLEVBQUUsQ0FBQ3hSLEtBQUgsR0FBVyxJQUExQjtBQUNBd1IsTUFBQUEsRUFBRSxHQUFHRCxFQUFFLEdBQUdBLEVBQUUsQ0FBQ3ZSLEtBQUgsR0FBV3lSLEVBQWQsR0FBbUJqQyxRQUFRLEdBQUdpQyxFQUFyQztBQUNEO0FBQ0Y7O0FBQ0RoQyxFQUFBQSxRQUFRLEdBQUc4QixFQUFYO0FBQ0FULEVBQUFBLEtBQUssQ0FBQ0YsSUFBRCxDQUFMO0FBQ0Q7O0FBRUQsU0FBU0UsS0FBVCxDQUFlRixJQUFmLEVBQXFCO0FBQ25CLE1BQUl4QixXQUFKLEVBQVcsT0FEUSxDQUNBOztBQUNuQixNQUFJQyxPQUFKLEVBQWFBLE9BQU8sR0FBR3FDLFlBQVksQ0FBQ3JDLE9BQUQsQ0FBdEI7QUFDYixNQUFJc0IsS0FBSyxHQUFHQyxJQUFJLEdBQUdqQixRQUFuQixDQUhtQixDQUdVOztBQUM3QixNQUFJZ0IsS0FBSyxHQUFHLEVBQVosRUFBZ0I7QUFDZCxRQUFJQyxJQUFJLEdBQUdJLFFBQVgsRUFBcUIzQixPQUFPLEdBQUdlLFVBQVUsQ0FBQ2dCLElBQUQsRUFBT1IsSUFBSSxHQUFHZixLQUFLLENBQUNFLEdBQU4sRUFBUCxHQUFxQkgsU0FBNUIsQ0FBcEI7QUFDckIsUUFBSU4sUUFBSixFQUFjQSxRQUFRLEdBQUdxQyxhQUFhLENBQUNyQyxRQUFELENBQXhCO0FBQ2YsR0FIRCxNQUdPO0FBQ0wsUUFBSSxDQUFDQSxRQUFMLEVBQWVJLFNBQVMsR0FBR0csS0FBSyxDQUFDRSxHQUFOLEVBQVosRUFBeUJULFFBQVEsR0FBR3NDLFdBQVcsQ0FBQ04sSUFBRCxFQUFPL0IsU0FBUCxDQUEvQztBQUNmSCxJQUFBQSxXQUFLLEdBQUcsQ0FBUixFQUFXYSxRQUFRLENBQUNtQixJQUFELENBQW5CO0FBQ0Q7QUFDRixDOztBQzdHRDtBQUVBLDZCQUFlLHFCQUFTck4sUUFBVCxFQUFtQjRNLEtBQW5CLEVBQTBCQyxJQUExQixFQUFnQztBQUM3QyxNQUFJekcsQ0FBQyxHQUFHLElBQUltRyxLQUFKLEVBQVI7QUFDQUssRUFBQUEsS0FBSyxHQUFHQSxLQUFLLElBQUksSUFBVCxHQUFnQixDQUFoQixHQUFvQixDQUFDQSxLQUE3QjtBQUNBeEcsRUFBQUEsQ0FBQyxDQUFDdUcsT0FBRixDQUFVbUIsT0FBTyxJQUFJO0FBQ25CMUgsSUFBQUEsQ0FBQyxDQUFDNEcsSUFBRjtBQUNBaE4sSUFBQUEsUUFBUSxDQUFDOE4sT0FBTyxHQUFHbEIsS0FBWCxDQUFSO0FBQ0QsR0FIRCxFQUdHQSxLQUhILEVBR1VDLElBSFY7QUFJQSxTQUFPekcsQ0FBUDtBQUNELEM7O0FDVkQ7QUFDQTtBQUVBLElBQUkySCxPQUFPLEdBQUd6RCxZQUFRLENBQUMsT0FBRCxFQUFVLEtBQVYsRUFBaUIsUUFBakIsRUFBMkIsV0FBM0IsQ0FBdEI7QUFDQSxJQUFJMEQsVUFBVSxHQUFHLEVBQWpCO0FBRU8sSUFBSUMsT0FBTyxHQUFHLENBQWQ7QUFDQSxJQUFJQyxTQUFTLEdBQUcsQ0FBaEI7QUFDQSxJQUFJQyxRQUFRLEdBQUcsQ0FBZjtBQUNBLElBQUlDLE9BQU8sR0FBRyxDQUFkO0FBQ0EsSUFBSUMsT0FBTyxHQUFHLENBQWQ7QUFDQSxJQUFJQyxNQUFNLEdBQUcsQ0FBYjtBQUNBLElBQUlDLEtBQUssR0FBRyxDQUFaO0FBRVAsNkJBQWUsa0JBQVM5VSxJQUFULEVBQWUrRyxJQUFmLEVBQXFCZ08sRUFBckIsRUFBeUJDLEtBQXpCLEVBQWdDblYsS0FBaEMsRUFBdUNvVixNQUF2QyxFQUErQztBQUM1RCxNQUFJQyxTQUFTLEdBQUdsVixJQUFJLENBQUNtVixZQUFyQjtBQUNBLE1BQUksQ0FBQ0QsU0FBTCxFQUFnQmxWLElBQUksQ0FBQ21WLFlBQUwsR0FBb0IsRUFBcEIsQ0FBaEIsS0FDSyxJQUFJSixFQUFFLElBQUlHLFNBQVYsRUFBcUI7QUFDMUJ0SixFQUFBQSxNQUFNLENBQUM1TCxJQUFELEVBQU8rVSxFQUFQLEVBQVc7QUFDZmhPLElBQUFBLElBQUksRUFBRUEsSUFEUztBQUVmaU8sSUFBQUEsS0FBSyxFQUFFQSxLQUZRO0FBRUQ7QUFDZG5WLElBQUFBLEtBQUssRUFBRUEsS0FIUTtBQUdEO0FBQ2RrTixJQUFBQSxFQUFFLEVBQUV1SCxPQUpXO0FBS2ZjLElBQUFBLEtBQUssRUFBRWIsVUFMUTtBQU1mbkIsSUFBQUEsSUFBSSxFQUFFNkIsTUFBTSxDQUFDN0IsSUFORTtBQU9mRCxJQUFBQSxLQUFLLEVBQUU4QixNQUFNLENBQUM5QixLQVBDO0FBUWZrQyxJQUFBQSxRQUFRLEVBQUVKLE1BQU0sQ0FBQ0ksUUFSRjtBQVNmQyxJQUFBQSxJQUFJLEVBQUVMLE1BQU0sQ0FBQ0ssSUFURTtBQVVmckMsSUFBQUEsS0FBSyxFQUFFLElBVlE7QUFXZnNDLElBQUFBLEtBQUssRUFBRWY7QUFYUSxHQUFYLENBQU47QUFhRDtBQUVNLFNBQVNnQixJQUFULENBQWN4VixJQUFkLEVBQW9CK1UsRUFBcEIsRUFBd0I7QUFDN0IsTUFBSVUsUUFBUSxHQUFHM1IsWUFBRyxDQUFDOUQsSUFBRCxFQUFPK1UsRUFBUCxDQUFsQjtBQUNBLE1BQUlVLFFBQVEsQ0FBQ0YsS0FBVCxHQUFpQmYsT0FBckIsRUFBOEIsTUFBTSxJQUFJckQsS0FBSixDQUFVLDZCQUFWLENBQU47QUFDOUIsU0FBT3NFLFFBQVA7QUFDRDtBQUVNLFNBQVM1UixZQUFULENBQWE3RCxJQUFiLEVBQW1CK1UsRUFBbkIsRUFBdUI7QUFDNUIsTUFBSVUsUUFBUSxHQUFHM1IsWUFBRyxDQUFDOUQsSUFBRCxFQUFPK1UsRUFBUCxDQUFsQjtBQUNBLE1BQUlVLFFBQVEsQ0FBQ0YsS0FBVCxHQUFpQlosT0FBckIsRUFBOEIsTUFBTSxJQUFJeEQsS0FBSixDQUFVLDJCQUFWLENBQU47QUFDOUIsU0FBT3NFLFFBQVA7QUFDRDtBQUVNLFNBQVMzUixZQUFULENBQWE5RCxJQUFiLEVBQW1CK1UsRUFBbkIsRUFBdUI7QUFDNUIsTUFBSVUsUUFBUSxHQUFHelYsSUFBSSxDQUFDbVYsWUFBcEI7QUFDQSxNQUFJLENBQUNNLFFBQUQsSUFBYSxFQUFFQSxRQUFRLEdBQUdBLFFBQVEsQ0FBQ1YsRUFBRCxDQUFyQixDQUFqQixFQUE2QyxNQUFNLElBQUk1RCxLQUFKLENBQVUsc0JBQVYsQ0FBTjtBQUM3QyxTQUFPc0UsUUFBUDtBQUNEOztBQUVELFNBQVM3SixNQUFULENBQWdCNUwsSUFBaEIsRUFBc0IrVSxFQUF0QixFQUEwQlcsSUFBMUIsRUFBZ0M7QUFDOUIsTUFBSVIsU0FBUyxHQUFHbFYsSUFBSSxDQUFDbVYsWUFBckI7QUFBQSxNQUNJQyxLQURKLENBRDhCLENBSTlCO0FBQ0E7O0FBQ0FGLEVBQUFBLFNBQVMsQ0FBQ0gsRUFBRCxDQUFULEdBQWdCVyxJQUFoQjtBQUNBQSxFQUFBQSxJQUFJLENBQUN6QyxLQUFMLEdBQWFBLEtBQUssQ0FBQ3dDLFFBQUQsRUFBVyxDQUFYLEVBQWNDLElBQUksQ0FBQ3RDLElBQW5CLENBQWxCOztBQUVBLFdBQVNxQyxRQUFULENBQWtCcEIsT0FBbEIsRUFBMkI7QUFDekJxQixJQUFBQSxJQUFJLENBQUNILEtBQUwsR0FBYWQsU0FBYjtBQUNBaUIsSUFBQUEsSUFBSSxDQUFDekMsS0FBTCxDQUFXQyxPQUFYLENBQW1CeUMsS0FBbkIsRUFBMEJELElBQUksQ0FBQ3ZDLEtBQS9CLEVBQXNDdUMsSUFBSSxDQUFDdEMsSUFBM0MsRUFGeUIsQ0FJekI7O0FBQ0EsUUFBSXNDLElBQUksQ0FBQ3ZDLEtBQUwsSUFBY2tCLE9BQWxCLEVBQTJCc0IsS0FBSyxDQUFDdEIsT0FBTyxHQUFHcUIsSUFBSSxDQUFDdkMsS0FBaEIsQ0FBTDtBQUM1Qjs7QUFFRCxXQUFTd0MsS0FBVCxDQUFldEIsT0FBZixFQUF3QjtBQUN0QixRQUFJblUsQ0FBSixFQUFPTixDQUFQLEVBQVVFLENBQVYsRUFBYW1OLENBQWIsQ0FEc0IsQ0FHdEI7O0FBQ0EsUUFBSXlJLElBQUksQ0FBQ0gsS0FBTCxLQUFlZCxTQUFuQixFQUE4QixPQUFPbEIsSUFBSSxFQUFYOztBQUU5QixTQUFLclQsQ0FBTCxJQUFVZ1YsU0FBVixFQUFxQjtBQUNuQmpJLE1BQUFBLENBQUMsR0FBR2lJLFNBQVMsQ0FBQ2hWLENBQUQsQ0FBYjtBQUNBLFVBQUkrTSxDQUFDLENBQUNsRyxJQUFGLEtBQVcyTyxJQUFJLENBQUMzTyxJQUFwQixFQUEwQixTQUZQLENBSW5CO0FBQ0E7QUFDQTs7QUFDQSxVQUFJa0csQ0FBQyxDQUFDc0ksS0FBRixLQUFZWixPQUFoQixFQUF5QixPQUFPOUMsV0FBTyxDQUFDOEQsS0FBRCxDQUFkLENBUE4sQ0FTbkI7O0FBQ0EsVUFBSTFJLENBQUMsQ0FBQ3NJLEtBQUYsS0FBWVgsT0FBaEIsRUFBeUI7QUFDdkIzSCxRQUFBQSxDQUFDLENBQUNzSSxLQUFGLEdBQVVULEtBQVY7QUFDQTdILFFBQUFBLENBQUMsQ0FBQ2dHLEtBQUYsQ0FBUU0sSUFBUjtBQUNBdEcsUUFBQUEsQ0FBQyxDQUFDRixFQUFGLENBQUs1TSxJQUFMLENBQVUsV0FBVixFQUF1QkgsSUFBdkIsRUFBNkJBLElBQUksQ0FBQ0ksUUFBbEMsRUFBNEM2TSxDQUFDLENBQUMrSCxLQUE5QyxFQUFxRC9ILENBQUMsQ0FBQ3BOLEtBQXZEO0FBQ0EsZUFBT3FWLFNBQVMsQ0FBQ2hWLENBQUQsQ0FBaEI7QUFDRCxPQUxELENBT0E7QUFQQSxXQVFLLElBQUksQ0FBQ0EsQ0FBRCxHQUFLNlUsRUFBVCxFQUFhO0FBQ2hCOUgsUUFBQUEsQ0FBQyxDQUFDc0ksS0FBRixHQUFVVCxLQUFWO0FBQ0E3SCxRQUFBQSxDQUFDLENBQUNnRyxLQUFGLENBQVFNLElBQVI7QUFDQXRHLFFBQUFBLENBQUMsQ0FBQ0YsRUFBRixDQUFLNU0sSUFBTCxDQUFVLFFBQVYsRUFBb0JILElBQXBCLEVBQTBCQSxJQUFJLENBQUNJLFFBQS9CLEVBQXlDNk0sQ0FBQyxDQUFDK0gsS0FBM0MsRUFBa0QvSCxDQUFDLENBQUNwTixLQUFwRDtBQUNBLGVBQU9xVixTQUFTLENBQUNoVixDQUFELENBQWhCO0FBQ0Q7QUFDRixLQTlCcUIsQ0FnQ3RCO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQTJSLElBQUFBLFdBQU8sQ0FBQyxZQUFXO0FBQ2pCLFVBQUk2RCxJQUFJLENBQUNILEtBQUwsS0FBZVosT0FBbkIsRUFBNEI7QUFDMUJlLFFBQUFBLElBQUksQ0FBQ0gsS0FBTCxHQUFhWCxPQUFiO0FBQ0FjLFFBQUFBLElBQUksQ0FBQ3pDLEtBQUwsQ0FBV0MsT0FBWCxDQUFtQjBDLElBQW5CLEVBQXlCRixJQUFJLENBQUN2QyxLQUE5QixFQUFxQ3VDLElBQUksQ0FBQ3RDLElBQTFDO0FBQ0F3QyxRQUFBQSxJQUFJLENBQUN2QixPQUFELENBQUo7QUFDRDtBQUNGLEtBTk0sQ0FBUCxDQXBDc0IsQ0E0Q3RCO0FBQ0E7O0FBQ0FxQixJQUFBQSxJQUFJLENBQUNILEtBQUwsR0FBYWIsUUFBYjtBQUNBZ0IsSUFBQUEsSUFBSSxDQUFDM0ksRUFBTCxDQUFRNU0sSUFBUixDQUFhLE9BQWIsRUFBc0JILElBQXRCLEVBQTRCQSxJQUFJLENBQUNJLFFBQWpDLEVBQTJDc1YsSUFBSSxDQUFDVixLQUFoRCxFQUF1RFUsSUFBSSxDQUFDN1YsS0FBNUQ7QUFDQSxRQUFJNlYsSUFBSSxDQUFDSCxLQUFMLEtBQWViLFFBQW5CLEVBQTZCLE9BaERQLENBZ0RlOztBQUNyQ2dCLElBQUFBLElBQUksQ0FBQ0gsS0FBTCxHQUFhWixPQUFiLENBakRzQixDQW1EdEI7O0FBQ0FTLElBQUFBLEtBQUssR0FBRyxJQUFJelYsS0FBSixDQUFVRyxDQUFDLEdBQUc0VixJQUFJLENBQUNOLEtBQUwsQ0FBVzNWLE1BQXpCLENBQVI7O0FBQ0EsU0FBS1MsQ0FBQyxHQUFHLENBQUosRUFBT04sQ0FBQyxHQUFHLENBQUMsQ0FBakIsRUFBb0JNLENBQUMsR0FBR0osQ0FBeEIsRUFBMkIsRUFBRUksQ0FBN0IsRUFBZ0M7QUFDOUIsVUFBSStNLENBQUMsR0FBR3lJLElBQUksQ0FBQ04sS0FBTCxDQUFXbFYsQ0FBWCxFQUFjOEQsS0FBZCxDQUFvQjdELElBQXBCLENBQXlCSCxJQUF6QixFQUErQkEsSUFBSSxDQUFDSSxRQUFwQyxFQUE4Q3NWLElBQUksQ0FBQ1YsS0FBbkQsRUFBMERVLElBQUksQ0FBQzdWLEtBQS9ELENBQVIsRUFBK0U7QUFDN0V1VixRQUFBQSxLQUFLLENBQUMsRUFBRXhWLENBQUgsQ0FBTCxHQUFhcU4sQ0FBYjtBQUNEO0FBQ0Y7O0FBQ0RtSSxJQUFBQSxLQUFLLENBQUMzVixNQUFOLEdBQWVHLENBQUMsR0FBRyxDQUFuQjtBQUNEOztBQUVELFdBQVNnVyxJQUFULENBQWN2QixPQUFkLEVBQXVCO0FBQ3JCLFFBQUkxSCxDQUFDLEdBQUcwSCxPQUFPLEdBQUdxQixJQUFJLENBQUNMLFFBQWYsR0FBMEJLLElBQUksQ0FBQ0osSUFBTCxDQUFVblYsSUFBVixDQUFlLElBQWYsRUFBcUJrVSxPQUFPLEdBQUdxQixJQUFJLENBQUNMLFFBQXBDLENBQTFCLElBQTJFSyxJQUFJLENBQUN6QyxLQUFMLENBQVdDLE9BQVgsQ0FBbUJLLElBQW5CLEdBQTBCbUMsSUFBSSxDQUFDSCxLQUFMLEdBQWFWLE1BQXZDLEVBQStDLENBQTFILENBQVI7QUFBQSxRQUNJM1UsQ0FBQyxHQUFHLENBQUMsQ0FEVDtBQUFBLFFBRUlKLENBQUMsR0FBR3NWLEtBQUssQ0FBQzNWLE1BRmQ7O0FBSUEsV0FBTyxFQUFFUyxDQUFGLEdBQU1KLENBQWIsRUFBZ0I7QUFDZHNWLE1BQUFBLEtBQUssQ0FBQ2xWLENBQUQsQ0FBTCxDQUFTQyxJQUFULENBQWNILElBQWQsRUFBb0IyTSxDQUFwQjtBQUNELEtBUG9CLENBU3JCOzs7QUFDQSxRQUFJK0ksSUFBSSxDQUFDSCxLQUFMLEtBQWVWLE1BQW5CLEVBQTJCO0FBQ3pCYSxNQUFBQSxJQUFJLENBQUMzSSxFQUFMLENBQVE1TSxJQUFSLENBQWEsS0FBYixFQUFvQkgsSUFBcEIsRUFBMEJBLElBQUksQ0FBQ0ksUUFBL0IsRUFBeUNzVixJQUFJLENBQUNWLEtBQTlDLEVBQXFEVSxJQUFJLENBQUM3VixLQUExRDtBQUNBMFQsTUFBQUEsSUFBSTtBQUNMO0FBQ0Y7O0FBRUQsV0FBU0EsSUFBVCxHQUFnQjtBQUNkbUMsSUFBQUEsSUFBSSxDQUFDSCxLQUFMLEdBQWFULEtBQWI7QUFDQVksSUFBQUEsSUFBSSxDQUFDekMsS0FBTCxDQUFXTSxJQUFYO0FBQ0EsV0FBTzJCLFNBQVMsQ0FBQ0gsRUFBRCxDQUFoQjs7QUFDQSxTQUFLLElBQUk3VSxDQUFULElBQWNnVixTQUFkLEVBQXlCLE9BSlgsQ0FJbUI7OztBQUNqQyxXQUFPbFYsSUFBSSxDQUFDbVYsWUFBWjtBQUNEO0FBQ0YsQzs7QUN4SkQ7QUFFQSw2QkFBZSx1QkFBU25WLElBQVQsRUFBZStHLElBQWYsRUFBcUI7QUFDbEMsTUFBSW1PLFNBQVMsR0FBR2xWLElBQUksQ0FBQ21WLFlBQXJCO0FBQUEsTUFDSU0sUUFESjtBQUFBLE1BRUlJLE1BRko7QUFBQSxNQUdJblYsS0FBSyxHQUFHLElBSFo7QUFBQSxNQUlJUixDQUpKO0FBTUEsTUFBSSxDQUFDZ1YsU0FBTCxFQUFnQjtBQUVoQm5PLEVBQUFBLElBQUksR0FBR0EsSUFBSSxJQUFJLElBQVIsR0FBZSxJQUFmLEdBQXNCQSxJQUFJLEdBQUcsRUFBcEM7O0FBRUEsT0FBSzdHLENBQUwsSUFBVWdWLFNBQVYsRUFBcUI7QUFDbkIsUUFBSSxDQUFDTyxRQUFRLEdBQUdQLFNBQVMsQ0FBQ2hWLENBQUQsQ0FBckIsRUFBMEI2RyxJQUExQixLQUFtQ0EsSUFBdkMsRUFBNkM7QUFBRXJHLE1BQUFBLEtBQUssR0FBRyxLQUFSO0FBQWU7QUFBVzs7QUFDekVtVixJQUFBQSxNQUFNLEdBQUdKLFFBQVEsQ0FBQ0YsS0FBVCxHQUFpQmIsUUFBakIsSUFBNkJlLFFBQVEsQ0FBQ0YsS0FBVCxHQUFpQlYsTUFBdkQ7QUFDQVksSUFBQUEsUUFBUSxDQUFDRixLQUFULEdBQWlCVCxLQUFqQjtBQUNBVyxJQUFBQSxRQUFRLENBQUN4QyxLQUFULENBQWVNLElBQWY7QUFDQWtDLElBQUFBLFFBQVEsQ0FBQzFJLEVBQVQsQ0FBWTVNLElBQVosQ0FBaUIwVixNQUFNLEdBQUcsV0FBSCxHQUFpQixRQUF4QyxFQUFrRDdWLElBQWxELEVBQXdEQSxJQUFJLENBQUNJLFFBQTdELEVBQXVFcVYsUUFBUSxDQUFDVCxLQUFoRixFQUF1RlMsUUFBUSxDQUFDNVYsS0FBaEc7QUFDQSxXQUFPcVYsU0FBUyxDQUFDaFYsQ0FBRCxDQUFoQjtBQUNEOztBQUVELE1BQUlRLEtBQUosRUFBVyxPQUFPVixJQUFJLENBQUNtVixZQUFaO0FBQ1osQzs7QUN2QkQ7QUFFQSw2QkFBZSw2QkFBU3BPLElBQVQsRUFBZTtBQUM1QixTQUFPLEtBQUtzQixJQUFMLENBQVUsWUFBVztBQUMxQnlOLElBQUFBLGFBQVMsQ0FBQyxJQUFELEVBQU8vTyxJQUFQLENBQVQ7QUFDRCxHQUZNLENBQVA7QUFHRCxDOztBQ05ELDZCQUFlLGdCQUFTZCxDQUFULEVBQVlDLENBQVosRUFBZTtBQUM1QixTQUFPRCxDQUFDLEdBQUcsQ0FBQ0EsQ0FBTCxFQUFRQyxDQUFDLEdBQUcsQ0FBQ0EsQ0FBYixFQUFnQixVQUFTeUcsQ0FBVCxFQUFZO0FBQ2pDLFdBQU8xRyxDQUFDLElBQUksSUFBSTBHLENBQVIsQ0FBRCxHQUFjekcsQ0FBQyxHQUFHeUcsQ0FBekI7QUFDRCxHQUZEO0FBR0QsQzs7QUNKRCxJQUFJb0osT0FBTyxHQUFHLE1BQU14USxJQUFJLENBQUN5USxFQUF6QjtBQUVPLElBQUlDLFFBQVEsR0FBRztBQUNwQkMsRUFBQUEsVUFBVSxFQUFFLENBRFE7QUFFcEJDLEVBQUFBLFVBQVUsRUFBRSxDQUZRO0FBR3BCQyxFQUFBQSxNQUFNLEVBQUUsQ0FIWTtBQUlwQkMsRUFBQUEsS0FBSyxFQUFFLENBSmE7QUFLcEJDLEVBQUFBLE1BQU0sRUFBRSxDQUxZO0FBTXBCQyxFQUFBQSxNQUFNLEVBQUU7QUFOWSxDQUFmO0FBU1AsNkJBQWUsbUJBQVN0USxDQUFULEVBQVlDLENBQVosRUFBZXdMLENBQWYsRUFBa0I4RSxDQUFsQixFQUFxQjlDLENBQXJCLEVBQXdCZixDQUF4QixFQUEyQjtBQUN4QyxNQUFJMkQsTUFBSixFQUFZQyxNQUFaLEVBQW9CRixLQUFwQjtBQUNBLE1BQUlDLE1BQU0sR0FBRy9RLElBQUksQ0FBQ2tSLElBQUwsQ0FBVXhRLENBQUMsR0FBR0EsQ0FBSixHQUFRQyxDQUFDLEdBQUdBLENBQXRCLENBQWIsRUFBdUNELENBQUMsSUFBSXFRLE1BQUwsRUFBYXBRLENBQUMsSUFBSW9RLE1BQWxCO0FBQ3ZDLE1BQUlELEtBQUssR0FBR3BRLENBQUMsR0FBR3lMLENBQUosR0FBUXhMLENBQUMsR0FBR3NRLENBQXhCLEVBQTJCOUUsQ0FBQyxJQUFJekwsQ0FBQyxHQUFHb1EsS0FBVCxFQUFnQkcsQ0FBQyxJQUFJdFEsQ0FBQyxHQUFHbVEsS0FBekI7QUFDM0IsTUFBSUUsTUFBTSxHQUFHaFIsSUFBSSxDQUFDa1IsSUFBTCxDQUFVL0UsQ0FBQyxHQUFHQSxDQUFKLEdBQVE4RSxDQUFDLEdBQUdBLENBQXRCLENBQWIsRUFBdUM5RSxDQUFDLElBQUk2RSxNQUFMLEVBQWFDLENBQUMsSUFBSUQsTUFBbEIsRUFBMEJGLEtBQUssSUFBSUUsTUFBbkM7QUFDdkMsTUFBSXRRLENBQUMsR0FBR3VRLENBQUosR0FBUXRRLENBQUMsR0FBR3dMLENBQWhCLEVBQW1CekwsQ0FBQyxHQUFHLENBQUNBLENBQUwsRUFBUUMsQ0FBQyxHQUFHLENBQUNBLENBQWIsRUFBZ0JtUSxLQUFLLEdBQUcsQ0FBQ0EsS0FBekIsRUFBZ0NDLE1BQU0sR0FBRyxDQUFDQSxNQUExQztBQUNuQixTQUFPO0FBQ0xKLElBQUFBLFVBQVUsRUFBRXhDLENBRFA7QUFFTHlDLElBQUFBLFVBQVUsRUFBRXhELENBRlA7QUFHTHlELElBQUFBLE1BQU0sRUFBRTdRLElBQUksQ0FBQ21SLEtBQUwsQ0FBV3hRLENBQVgsRUFBY0QsQ0FBZCxJQUFtQjhQLE9BSHRCO0FBSUxNLElBQUFBLEtBQUssRUFBRTlRLElBQUksQ0FBQ29SLElBQUwsQ0FBVU4sS0FBVixJQUFtQk4sT0FKckI7QUFLTE8sSUFBQUEsTUFBTSxFQUFFQSxNQUxIO0FBTUxDLElBQUFBLE1BQU0sRUFBRUE7QUFOSCxHQUFQO0FBUUQsQzs7QUN6QkQ7QUFFQSxJQUFJTSxPQUFKO0FBRUE7O0FBQ08sU0FBU0MsUUFBVCxDQUFrQjlTLEtBQWxCLEVBQXlCO0FBQzlCLFFBQU14RSxDQUFDLEdBQUcsS0FBSyxPQUFPdVgsU0FBUCxLQUFxQixVQUFyQixHQUFrQ0EsU0FBbEMsR0FBOENDLGVBQW5ELEVBQW9FaFQsS0FBSyxHQUFHLEVBQTVFLENBQVY7QUFDQSxTQUFPeEUsQ0FBQyxDQUFDeVgsVUFBRixHQUFlaEIsUUFBZixHQUEwQlcsU0FBUyxDQUFDcFgsQ0FBQyxDQUFDeUcsQ0FBSCxFQUFNekcsQ0FBQyxDQUFDMEcsQ0FBUixFQUFXMUcsQ0FBQyxDQUFDa1MsQ0FBYixFQUFnQmxTLENBQUMsQ0FBQ2dYLENBQWxCLEVBQXFCaFgsQ0FBQyxDQUFDa1UsQ0FBdkIsRUFBMEJsVSxDQUFDLENBQUNtVCxDQUE1QixDQUExQztBQUNEO0FBRU0sU0FBU3VFLFFBQVQsQ0FBa0JsVCxLQUFsQixFQUF5QjtBQUM5QixNQUFJQSxLQUFLLElBQUksSUFBYixFQUFtQixPQUFPaVMsUUFBUDtBQUNuQixNQUFJLENBQUNZLE9BQUwsRUFBY0EsT0FBTyxHQUFHdE8sUUFBUSxDQUFDa0QsZUFBVCxDQUF5Qiw0QkFBekIsRUFBdUQsR0FBdkQsQ0FBVjtBQUNkb0wsRUFBQUEsT0FBTyxDQUFDaFAsWUFBUixDQUFxQixXQUFyQixFQUFrQzdELEtBQWxDO0FBQ0EsTUFBSSxFQUFFQSxLQUFLLEdBQUc2UyxPQUFPLENBQUNNLFNBQVIsQ0FBa0JDLE9BQWxCLENBQTBCQyxXQUExQixFQUFWLENBQUosRUFBd0QsT0FBT3BCLFFBQVA7QUFDeERqUyxFQUFBQSxLQUFLLEdBQUdBLEtBQUssQ0FBQ3NULE1BQWQ7QUFDQSxTQUFPVixTQUFTLENBQUM1UyxLQUFLLENBQUNpQyxDQUFQLEVBQVVqQyxLQUFLLENBQUNrQyxDQUFoQixFQUFtQmxDLEtBQUssQ0FBQzBOLENBQXpCLEVBQTRCMU4sS0FBSyxDQUFDd1MsQ0FBbEMsRUFBcUN4UyxLQUFLLENBQUMwUCxDQUEzQyxFQUE4QzFQLEtBQUssQ0FBQzJPLENBQXBELENBQWhCO0FBQ0QsQzs7QUNqQkQ7QUFDQTs7QUFFQSxTQUFTNkUsb0JBQVQsQ0FBOEJDLEtBQTlCLEVBQXFDQyxPQUFyQyxFQUE4Q0MsT0FBOUMsRUFBdURDLFFBQXZELEVBQWlFO0FBRS9ELFdBQVNDLEdBQVQsQ0FBYUMsQ0FBYixFQUFnQjtBQUNkLFdBQU9BLENBQUMsQ0FBQ3JZLE1BQUYsR0FBV3FZLENBQUMsQ0FBQ0QsR0FBRixLQUFVLEdBQXJCLEdBQTJCLEVBQWxDO0FBQ0Q7O0FBRUQsV0FBU0UsU0FBVCxDQUFtQkMsRUFBbkIsRUFBdUJDLEVBQXZCLEVBQTJCQyxFQUEzQixFQUErQkMsRUFBL0IsRUFBbUNMLENBQW5DLEVBQXNDTSxDQUF0QyxFQUF5QztBQUN2QyxRQUFJSixFQUFFLEtBQUtFLEVBQVAsSUFBYUQsRUFBRSxLQUFLRSxFQUF4QixFQUE0QjtBQUMxQixVQUFJalksQ0FBQyxHQUFHNFgsQ0FBQyxDQUFDN1csSUFBRixDQUFPLFlBQVAsRUFBcUIsSUFBckIsRUFBMkJ5VyxPQUEzQixFQUFvQyxJQUFwQyxFQUEwQ0MsT0FBMUMsQ0FBUjtBQUNBUyxNQUFBQSxDQUFDLENBQUNuWCxJQUFGLENBQU87QUFBQ2YsUUFBQUEsQ0FBQyxFQUFFQSxDQUFDLEdBQUcsQ0FBUjtBQUFXSyxRQUFBQSxDQUFDLEVBQUVnWCxNQUFNLENBQUNTLEVBQUQsRUFBS0UsRUFBTDtBQUFwQixPQUFQLEVBQXNDO0FBQUNoWSxRQUFBQSxDQUFDLEVBQUVBLENBQUMsR0FBRyxDQUFSO0FBQVdLLFFBQUFBLENBQUMsRUFBRWdYLE1BQU0sQ0FBQ1UsRUFBRCxFQUFLRSxFQUFMO0FBQXBCLE9BQXRDO0FBQ0QsS0FIRCxNQUdPLElBQUlELEVBQUUsSUFBSUMsRUFBVixFQUFjO0FBQ25CTCxNQUFBQSxDQUFDLENBQUM3VyxJQUFGLENBQU8sZUFBZWlYLEVBQWYsR0FBb0JSLE9BQXBCLEdBQThCUyxFQUE5QixHQUFtQ1IsT0FBMUM7QUFDRDtBQUNGOztBQUVELFdBQVN2QixNQUFULENBQWdCblEsQ0FBaEIsRUFBbUJDLENBQW5CLEVBQXNCNFIsQ0FBdEIsRUFBeUJNLENBQXpCLEVBQTRCO0FBQzFCLFFBQUluUyxDQUFDLEtBQUtDLENBQVYsRUFBYTtBQUNYLFVBQUlELENBQUMsR0FBR0MsQ0FBSixHQUFRLEdBQVosRUFBaUJBLENBQUMsSUFBSSxHQUFMLENBQWpCLEtBQWdDLElBQUlBLENBQUMsR0FBR0QsQ0FBSixHQUFRLEdBQVosRUFBaUJBLENBQUMsSUFBSSxHQUFMLENBRHRDLENBQ2dEOztBQUMzRG1TLE1BQUFBLENBQUMsQ0FBQ25YLElBQUYsQ0FBTztBQUFDZixRQUFBQSxDQUFDLEVBQUU0WCxDQUFDLENBQUM3VyxJQUFGLENBQU80VyxHQUFHLENBQUNDLENBQUQsQ0FBSCxHQUFTLFNBQWhCLEVBQTJCLElBQTNCLEVBQWlDRixRQUFqQyxJQUE2QyxDQUFqRDtBQUFvRHJYLFFBQUFBLENBQUMsRUFBRWdYLE1BQU0sQ0FBQ3RSLENBQUQsRUFBSUMsQ0FBSjtBQUE3RCxPQUFQO0FBQ0QsS0FIRCxNQUdPLElBQUlBLENBQUosRUFBTztBQUNaNFIsTUFBQUEsQ0FBQyxDQUFDN1csSUFBRixDQUFPNFcsR0FBRyxDQUFDQyxDQUFELENBQUgsR0FBUyxTQUFULEdBQXFCNVIsQ0FBckIsR0FBeUIwUixRQUFoQztBQUNEO0FBQ0Y7O0FBRUQsV0FBU3ZCLEtBQVQsQ0FBZXBRLENBQWYsRUFBa0JDLENBQWxCLEVBQXFCNFIsQ0FBckIsRUFBd0JNLENBQXhCLEVBQTJCO0FBQ3pCLFFBQUluUyxDQUFDLEtBQUtDLENBQVYsRUFBYTtBQUNYa1MsTUFBQUEsQ0FBQyxDQUFDblgsSUFBRixDQUFPO0FBQUNmLFFBQUFBLENBQUMsRUFBRTRYLENBQUMsQ0FBQzdXLElBQUYsQ0FBTzRXLEdBQUcsQ0FBQ0MsQ0FBRCxDQUFILEdBQVMsUUFBaEIsRUFBMEIsSUFBMUIsRUFBZ0NGLFFBQWhDLElBQTRDLENBQWhEO0FBQW1EclgsUUFBQUEsQ0FBQyxFQUFFZ1gsTUFBTSxDQUFDdFIsQ0FBRCxFQUFJQyxDQUFKO0FBQTVELE9BQVA7QUFDRCxLQUZELE1BRU8sSUFBSUEsQ0FBSixFQUFPO0FBQ1o0UixNQUFBQSxDQUFDLENBQUM3VyxJQUFGLENBQU80VyxHQUFHLENBQUNDLENBQUQsQ0FBSCxHQUFTLFFBQVQsR0FBb0I1UixDQUFwQixHQUF3QjBSLFFBQS9CO0FBQ0Q7QUFDRjs7QUFFRCxXQUFTUyxLQUFULENBQWVMLEVBQWYsRUFBbUJDLEVBQW5CLEVBQXVCQyxFQUF2QixFQUEyQkMsRUFBM0IsRUFBK0JMLENBQS9CLEVBQWtDTSxDQUFsQyxFQUFxQztBQUNuQyxRQUFJSixFQUFFLEtBQUtFLEVBQVAsSUFBYUQsRUFBRSxLQUFLRSxFQUF4QixFQUE0QjtBQUMxQixVQUFJalksQ0FBQyxHQUFHNFgsQ0FBQyxDQUFDN1csSUFBRixDQUFPNFcsR0FBRyxDQUFDQyxDQUFELENBQUgsR0FBUyxRQUFoQixFQUEwQixJQUExQixFQUFnQyxHQUFoQyxFQUFxQyxJQUFyQyxFQUEyQyxHQUEzQyxDQUFSO0FBQ0FNLE1BQUFBLENBQUMsQ0FBQ25YLElBQUYsQ0FBTztBQUFDZixRQUFBQSxDQUFDLEVBQUVBLENBQUMsR0FBRyxDQUFSO0FBQVdLLFFBQUFBLENBQUMsRUFBRWdYLE1BQU0sQ0FBQ1MsRUFBRCxFQUFLRSxFQUFMO0FBQXBCLE9BQVAsRUFBc0M7QUFBQ2hZLFFBQUFBLENBQUMsRUFBRUEsQ0FBQyxHQUFHLENBQVI7QUFBV0ssUUFBQUEsQ0FBQyxFQUFFZ1gsTUFBTSxDQUFDVSxFQUFELEVBQUtFLEVBQUw7QUFBcEIsT0FBdEM7QUFDRCxLQUhELE1BR08sSUFBSUQsRUFBRSxLQUFLLENBQVAsSUFBWUMsRUFBRSxLQUFLLENBQXZCLEVBQTBCO0FBQy9CTCxNQUFBQSxDQUFDLENBQUM3VyxJQUFGLENBQU80VyxHQUFHLENBQUNDLENBQUQsQ0FBSCxHQUFTLFFBQVQsR0FBb0JJLEVBQXBCLEdBQXlCLEdBQXpCLEdBQStCQyxFQUEvQixHQUFvQyxHQUEzQztBQUNEO0FBQ0Y7O0FBRUQsU0FBTyxVQUFTbFMsQ0FBVCxFQUFZQyxDQUFaLEVBQWU7QUFDcEIsUUFBSTRSLENBQUMsR0FBRyxFQUFSO0FBQUEsUUFBWTtBQUNSTSxJQUFBQSxDQUFDLEdBQUcsRUFEUixDQURvQixDQUVSOztBQUNablMsSUFBQUEsQ0FBQyxHQUFHd1IsS0FBSyxDQUFDeFIsQ0FBRCxDQUFULEVBQWNDLENBQUMsR0FBR3VSLEtBQUssQ0FBQ3ZSLENBQUQsQ0FBdkI7QUFDQTZSLElBQUFBLFNBQVMsQ0FBQzlSLENBQUMsQ0FBQ2lRLFVBQUgsRUFBZWpRLENBQUMsQ0FBQ2tRLFVBQWpCLEVBQTZCalEsQ0FBQyxDQUFDZ1EsVUFBL0IsRUFBMkNoUSxDQUFDLENBQUNpUSxVQUE3QyxFQUF5RDJCLENBQXpELEVBQTRETSxDQUE1RCxDQUFUO0FBQ0FoQyxJQUFBQSxNQUFNLENBQUNuUSxDQUFDLENBQUNtUSxNQUFILEVBQVdsUSxDQUFDLENBQUNrUSxNQUFiLEVBQXFCMEIsQ0FBckIsRUFBd0JNLENBQXhCLENBQU47QUFDQS9CLElBQUFBLEtBQUssQ0FBQ3BRLENBQUMsQ0FBQ29RLEtBQUgsRUFBVW5RLENBQUMsQ0FBQ21RLEtBQVosRUFBbUJ5QixDQUFuQixFQUFzQk0sQ0FBdEIsQ0FBTDtBQUNBQyxJQUFBQSxLQUFLLENBQUNwUyxDQUFDLENBQUNxUSxNQUFILEVBQVdyUSxDQUFDLENBQUNzUSxNQUFiLEVBQXFCclEsQ0FBQyxDQUFDb1EsTUFBdkIsRUFBK0JwUSxDQUFDLENBQUNxUSxNQUFqQyxFQUF5Q3VCLENBQXpDLEVBQTRDTSxDQUE1QyxDQUFMO0FBQ0FuUyxJQUFBQSxDQUFDLEdBQUdDLENBQUMsR0FBRyxJQUFSLENBUm9CLENBUU47O0FBQ2QsV0FBTyxVQUFTeUcsQ0FBVCxFQUFZO0FBQ2pCLFVBQUl6TSxDQUFDLEdBQUcsQ0FBQyxDQUFUO0FBQUEsVUFBWUosQ0FBQyxHQUFHc1ksQ0FBQyxDQUFDM1ksTUFBbEI7QUFBQSxVQUEwQndOLENBQTFCOztBQUNBLGFBQU8sRUFBRS9NLENBQUYsR0FBTUosQ0FBYixFQUFnQmdZLENBQUMsQ0FBQyxDQUFDN0ssQ0FBQyxHQUFHbUwsQ0FBQyxDQUFDbFksQ0FBRCxDQUFOLEVBQVdBLENBQVosQ0FBRCxHQUFrQitNLENBQUMsQ0FBQzFNLENBQUYsQ0FBSW9NLENBQUosQ0FBbEI7O0FBQ2hCLGFBQU9tTCxDQUFDLENBQUNoTyxJQUFGLENBQU8sRUFBUCxDQUFQO0FBQ0QsS0FKRDtBQUtELEdBZEQ7QUFlRDs7QUFFTSxJQUFJd08sdUJBQXVCLEdBQUdkLG9CQUFvQixDQUFDVixRQUFELEVBQVcsTUFBWCxFQUFtQixLQUFuQixFQUEwQixNQUExQixDQUFsRDtBQUNBLElBQUl5Qix1QkFBdUIsR0FBR2Ysb0JBQW9CLENBQUNOLFFBQUQsRUFBVyxJQUFYLEVBQWlCLEdBQWpCLEVBQXNCLEdBQXRCLENBQWxELEM7O0FDOURQOztBQUVBLFNBQVNzQixXQUFULENBQXFCekQsRUFBckIsRUFBeUJoTyxJQUF6QixFQUErQjtBQUM3QixNQUFJMFIsTUFBSixFQUFZQyxNQUFaO0FBQ0EsU0FBTyxZQUFXO0FBQ2hCLFFBQUlqRCxRQUFRLEdBQUc1UixZQUFHLENBQUMsSUFBRCxFQUFPa1IsRUFBUCxDQUFsQjtBQUFBLFFBQ0lLLEtBQUssR0FBR0ssUUFBUSxDQUFDTCxLQURyQixDQURnQixDQUloQjtBQUNBO0FBQ0E7O0FBQ0EsUUFBSUEsS0FBSyxLQUFLcUQsTUFBZCxFQUFzQjtBQUNwQkMsTUFBQUEsTUFBTSxHQUFHRCxNQUFNLEdBQUdyRCxLQUFsQjs7QUFDQSxXQUFLLElBQUlsVixDQUFDLEdBQUcsQ0FBUixFQUFXSixDQUFDLEdBQUc0WSxNQUFNLENBQUNqWixNQUEzQixFQUFtQ1MsQ0FBQyxHQUFHSixDQUF2QyxFQUEwQyxFQUFFSSxDQUE1QyxFQUErQztBQUM3QyxZQUFJd1ksTUFBTSxDQUFDeFksQ0FBRCxDQUFOLENBQVU2RyxJQUFWLEtBQW1CQSxJQUF2QixFQUE2QjtBQUMzQjJSLFVBQUFBLE1BQU0sR0FBR0EsTUFBTSxDQUFDeFIsS0FBUCxFQUFUO0FBQ0F3UixVQUFBQSxNQUFNLENBQUMzTyxNQUFQLENBQWM3SixDQUFkLEVBQWlCLENBQWpCO0FBQ0E7QUFDRDtBQUNGO0FBQ0Y7O0FBRUR1VixJQUFBQSxRQUFRLENBQUNMLEtBQVQsR0FBaUJzRCxNQUFqQjtBQUNELEdBbkJEO0FBb0JEOztBQUVELFNBQVNDLGFBQVQsQ0FBdUI1RCxFQUF2QixFQUEyQmhPLElBQTNCLEVBQWlDL0MsS0FBakMsRUFBd0M7QUFDdEMsTUFBSXlVLE1BQUosRUFBWUMsTUFBWjtBQUNBLE1BQUksT0FBTzFVLEtBQVAsS0FBaUIsVUFBckIsRUFBaUMsTUFBTSxJQUFJbU4sS0FBSixFQUFOO0FBQ2pDLFNBQU8sWUFBVztBQUNoQixRQUFJc0UsUUFBUSxHQUFHNVIsWUFBRyxDQUFDLElBQUQsRUFBT2tSLEVBQVAsQ0FBbEI7QUFBQSxRQUNJSyxLQUFLLEdBQUdLLFFBQVEsQ0FBQ0wsS0FEckIsQ0FEZ0IsQ0FJaEI7QUFDQTtBQUNBOztBQUNBLFFBQUlBLEtBQUssS0FBS3FELE1BQWQsRUFBc0I7QUFDcEJDLE1BQUFBLE1BQU0sR0FBRyxDQUFDRCxNQUFNLEdBQUdyRCxLQUFWLEVBQWlCbE8sS0FBakIsRUFBVDs7QUFDQSxXQUFLLElBQUl5RixDQUFDLEdBQUc7QUFBQzVGLFFBQUFBLElBQUksRUFBRUEsSUFBUDtBQUFhL0MsUUFBQUEsS0FBSyxFQUFFQTtBQUFwQixPQUFSLEVBQW9DOUQsQ0FBQyxHQUFHLENBQXhDLEVBQTJDSixDQUFDLEdBQUc0WSxNQUFNLENBQUNqWixNQUEzRCxFQUFtRVMsQ0FBQyxHQUFHSixDQUF2RSxFQUEwRSxFQUFFSSxDQUE1RSxFQUErRTtBQUM3RSxZQUFJd1ksTUFBTSxDQUFDeFksQ0FBRCxDQUFOLENBQVU2RyxJQUFWLEtBQW1CQSxJQUF2QixFQUE2QjtBQUMzQjJSLFVBQUFBLE1BQU0sQ0FBQ3hZLENBQUQsQ0FBTixHQUFZeU0sQ0FBWjtBQUNBO0FBQ0Q7QUFDRjs7QUFDRCxVQUFJek0sQ0FBQyxLQUFLSixDQUFWLEVBQWE0WSxNQUFNLENBQUN6WCxJQUFQLENBQVkwTCxDQUFaO0FBQ2Q7O0FBRUQ4SSxJQUFBQSxRQUFRLENBQUNMLEtBQVQsR0FBaUJzRCxNQUFqQjtBQUNELEdBbkJEO0FBb0JEOztBQUVELDZCQUFlLGVBQVMzUixJQUFULEVBQWUvQyxLQUFmLEVBQXNCO0FBQ25DLE1BQUkrUSxFQUFFLEdBQUcsS0FBSzZELEdBQWQ7QUFFQTdSLEVBQUFBLElBQUksSUFBSSxFQUFSOztBQUVBLE1BQUloRyxTQUFTLENBQUN0QixNQUFWLEdBQW1CLENBQXZCLEVBQTBCO0FBQ3hCLFFBQUkyVixLQUFLLEdBQUd0UixZQUFHLENBQUMsS0FBSzlELElBQUwsRUFBRCxFQUFjK1UsRUFBZCxDQUFILENBQXFCSyxLQUFqQzs7QUFDQSxTQUFLLElBQUlsVixDQUFDLEdBQUcsQ0FBUixFQUFXSixDQUFDLEdBQUdzVixLQUFLLENBQUMzVixNQUFyQixFQUE2QmtOLENBQWxDLEVBQXFDek0sQ0FBQyxHQUFHSixDQUF6QyxFQUE0QyxFQUFFSSxDQUE5QyxFQUFpRDtBQUMvQyxVQUFJLENBQUN5TSxDQUFDLEdBQUd5SSxLQUFLLENBQUNsVixDQUFELENBQVYsRUFBZTZHLElBQWYsS0FBd0JBLElBQTVCLEVBQWtDO0FBQ2hDLGVBQU80RixDQUFDLENBQUMzSSxLQUFUO0FBQ0Q7QUFDRjs7QUFDRCxXQUFPLElBQVA7QUFDRDs7QUFFRCxTQUFPLEtBQUtxRSxJQUFMLENBQVUsQ0FBQ3JFLEtBQUssSUFBSSxJQUFULEdBQWdCd1UsV0FBaEIsR0FBOEJHLGFBQS9CLEVBQThDNUQsRUFBOUMsRUFBa0RoTyxJQUFsRCxFQUF3RC9DLEtBQXhELENBQVYsQ0FBUDtBQUNEO0FBRU0sU0FBUzZVLFVBQVQsQ0FBb0JDLFVBQXBCLEVBQWdDL1IsSUFBaEMsRUFBc0MvQyxLQUF0QyxFQUE2QztBQUNsRCxNQUFJK1EsRUFBRSxHQUFHK0QsVUFBVSxDQUFDRixHQUFwQjtBQUVBRSxFQUFBQSxVQUFVLENBQUN6USxJQUFYLENBQWdCLFlBQVc7QUFDekIsUUFBSW9OLFFBQVEsR0FBRzVSLFlBQUcsQ0FBQyxJQUFELEVBQU9rUixFQUFQLENBQWxCO0FBQ0EsS0FBQ1UsUUFBUSxDQUFDelIsS0FBVCxLQUFtQnlSLFFBQVEsQ0FBQ3pSLEtBQVQsR0FBaUIsRUFBcEMsQ0FBRCxFQUEwQytDLElBQTFDLElBQWtEL0MsS0FBSyxDQUFDbEQsS0FBTixDQUFZLElBQVosRUFBa0JDLFNBQWxCLENBQWxEO0FBQ0QsR0FIRDtBQUtBLFNBQU8sVUFBU2YsSUFBVCxFQUFlO0FBQ3BCLFdBQU84RCxZQUFHLENBQUM5RCxJQUFELEVBQU8rVSxFQUFQLENBQUgsQ0FBYy9RLEtBQWQsQ0FBb0IrQyxJQUFwQixDQUFQO0FBQ0QsR0FGRDtBQUdELEM7O0FDaEZELDZCQUFlLG9CQUFTckUsV0FBVCxFQUFzQnFXLE9BQXRCLEVBQStCMVgsU0FBL0IsRUFBMEM7QUFDdkRxQixFQUFBQSxXQUFXLENBQUNyQixTQUFaLEdBQXdCMFgsT0FBTyxDQUFDMVgsU0FBUixHQUFvQkEsU0FBNUM7QUFDQUEsRUFBQUEsU0FBUyxDQUFDcUIsV0FBVixHQUF3QkEsV0FBeEI7QUFDRDtBQUVNLFNBQVNzVyxNQUFULENBQWdCNVcsTUFBaEIsRUFBd0I2VyxVQUF4QixFQUFvQztBQUN6QyxNQUFJNVgsU0FBUyxHQUFHNlgsTUFBTSxDQUFDdE4sTUFBUCxDQUFjeEosTUFBTSxDQUFDZixTQUFyQixDQUFoQjs7QUFDQSxPQUFLLElBQUlrQyxHQUFULElBQWdCMFYsVUFBaEIsRUFBNEI1WCxTQUFTLENBQUNrQyxHQUFELENBQVQsR0FBaUIwVixVQUFVLENBQUMxVixHQUFELENBQTNCOztBQUM1QixTQUFPbEMsU0FBUDtBQUNELEM7O0FDVEQ7QUFFTyxTQUFTK1gsS0FBVCxHQUFpQixDQUFFO0FBRW5CLElBQUlDLE1BQU0sR0FBRyxHQUFiO0FBQ0EsSUFBSUMsUUFBUSxHQUFHLElBQUlELE1BQW5CO0FBRVAsSUFBSUUsR0FBRyxHQUFHLHFCQUFWO0FBQUEsSUFDSUMsR0FBRyxHQUFHLCtDQURWO0FBQUEsSUFFSUMsR0FBRyxHQUFHLGdEQUZWO0FBQUEsSUFHSUMsS0FBSyxHQUFHLG9CQUhaO0FBQUEsSUFJSUMsWUFBWSxHQUFHLElBQUlDLE1BQUosQ0FBVyxZQUFZLENBQUNMLEdBQUQsRUFBTUEsR0FBTixFQUFXQSxHQUFYLENBQVosR0FBOEIsTUFBekMsQ0FKbkI7QUFBQSxJQUtJTSxZQUFZLEdBQUcsSUFBSUQsTUFBSixDQUFXLFlBQVksQ0FBQ0gsR0FBRCxFQUFNQSxHQUFOLEVBQVdBLEdBQVgsQ0FBWixHQUE4QixNQUF6QyxDQUxuQjtBQUFBLElBTUlLLGFBQWEsR0FBRyxJQUFJRixNQUFKLENBQVcsYUFBYSxDQUFDTCxHQUFELEVBQU1BLEdBQU4sRUFBV0EsR0FBWCxFQUFnQkMsR0FBaEIsQ0FBYixHQUFvQyxNQUEvQyxDQU5wQjtBQUFBLElBT0lPLGFBQWEsR0FBRyxJQUFJSCxNQUFKLENBQVcsYUFBYSxDQUFDSCxHQUFELEVBQU1BLEdBQU4sRUFBV0EsR0FBWCxFQUFnQkQsR0FBaEIsQ0FBYixHQUFvQyxNQUEvQyxDQVBwQjtBQUFBLElBUUlRLFlBQVksR0FBRyxJQUFJSixNQUFKLENBQVcsWUFBWSxDQUFDSixHQUFELEVBQU1DLEdBQU4sRUFBV0EsR0FBWCxDQUFaLEdBQThCLE1BQXpDLENBUm5CO0FBQUEsSUFTSVEsYUFBYSxHQUFHLElBQUlMLE1BQUosQ0FBVyxhQUFhLENBQUNKLEdBQUQsRUFBTUMsR0FBTixFQUFXQSxHQUFYLEVBQWdCRCxHQUFoQixDQUFiLEdBQW9DLE1BQS9DLENBVHBCO0FBV0EsSUFBSVUsS0FBSyxHQUFHO0FBQ1ZDLEVBQUFBLFNBQVMsRUFBRSxRQUREO0FBRVZDLEVBQUFBLFlBQVksRUFBRSxRQUZKO0FBR1ZDLEVBQUFBLElBQUksRUFBRSxRQUhJO0FBSVZDLEVBQUFBLFVBQVUsRUFBRSxRQUpGO0FBS1ZDLEVBQUFBLEtBQUssRUFBRSxRQUxHO0FBTVZDLEVBQUFBLEtBQUssRUFBRSxRQU5HO0FBT1ZDLEVBQUFBLE1BQU0sRUFBRSxRQVBFO0FBUVZDLEVBQUFBLEtBQUssRUFBRSxRQVJHO0FBU1ZDLEVBQUFBLGNBQWMsRUFBRSxRQVROO0FBVVZDLEVBQUFBLElBQUksRUFBRSxRQVZJO0FBV1ZDLEVBQUFBLFVBQVUsRUFBRSxRQVhGO0FBWVZDLEVBQUFBLEtBQUssRUFBRSxRQVpHO0FBYVZDLEVBQUFBLFNBQVMsRUFBRSxRQWJEO0FBY1ZDLEVBQUFBLFNBQVMsRUFBRSxRQWREO0FBZVZDLEVBQUFBLFVBQVUsRUFBRSxRQWZGO0FBZ0JWQyxFQUFBQSxTQUFTLEVBQUUsUUFoQkQ7QUFpQlZDLEVBQUFBLEtBQUssRUFBRSxRQWpCRztBQWtCVkMsRUFBQUEsY0FBYyxFQUFFLFFBbEJOO0FBbUJWQyxFQUFBQSxRQUFRLEVBQUUsUUFuQkE7QUFvQlZDLEVBQUFBLE9BQU8sRUFBRSxRQXBCQztBQXFCVkMsRUFBQUEsSUFBSSxFQUFFLFFBckJJO0FBc0JWQyxFQUFBQSxRQUFRLEVBQUUsUUF0QkE7QUF1QlZDLEVBQUFBLFFBQVEsRUFBRSxRQXZCQTtBQXdCVkMsRUFBQUEsYUFBYSxFQUFFLFFBeEJMO0FBeUJWQyxFQUFBQSxRQUFRLEVBQUUsUUF6QkE7QUEwQlZDLEVBQUFBLFNBQVMsRUFBRSxRQTFCRDtBQTJCVkMsRUFBQUEsUUFBUSxFQUFFLFFBM0JBO0FBNEJWQyxFQUFBQSxTQUFTLEVBQUUsUUE1QkQ7QUE2QlZDLEVBQUFBLFdBQVcsRUFBRSxRQTdCSDtBQThCVkMsRUFBQUEsY0FBYyxFQUFFLFFBOUJOO0FBK0JWQyxFQUFBQSxVQUFVLEVBQUUsUUEvQkY7QUFnQ1ZDLEVBQUFBLFVBQVUsRUFBRSxRQWhDRjtBQWlDVkMsRUFBQUEsT0FBTyxFQUFFLFFBakNDO0FBa0NWQyxFQUFBQSxVQUFVLEVBQUUsUUFsQ0Y7QUFtQ1ZDLEVBQUFBLFlBQVksRUFBRSxRQW5DSjtBQW9DVkMsRUFBQUEsYUFBYSxFQUFFLFFBcENMO0FBcUNWQyxFQUFBQSxhQUFhLEVBQUUsUUFyQ0w7QUFzQ1ZDLEVBQUFBLGFBQWEsRUFBRSxRQXRDTDtBQXVDVkMsRUFBQUEsYUFBYSxFQUFFLFFBdkNMO0FBd0NWQyxFQUFBQSxVQUFVLEVBQUUsUUF4Q0Y7QUF5Q1ZDLEVBQUFBLFFBQVEsRUFBRSxRQXpDQTtBQTBDVkMsRUFBQUEsV0FBVyxFQUFFLFFBMUNIO0FBMkNWQyxFQUFBQSxPQUFPLEVBQUUsUUEzQ0M7QUE0Q1ZDLEVBQUFBLE9BQU8sRUFBRSxRQTVDQztBQTZDVkMsRUFBQUEsVUFBVSxFQUFFLFFBN0NGO0FBOENWQyxFQUFBQSxTQUFTLEVBQUUsUUE5Q0Q7QUErQ1ZDLEVBQUFBLFdBQVcsRUFBRSxRQS9DSDtBQWdEVkMsRUFBQUEsV0FBVyxFQUFFLFFBaERIO0FBaURWQyxFQUFBQSxPQUFPLEVBQUUsUUFqREM7QUFrRFZDLEVBQUFBLFNBQVMsRUFBRSxRQWxERDtBQW1EVkMsRUFBQUEsVUFBVSxFQUFFLFFBbkRGO0FBb0RWQyxFQUFBQSxJQUFJLEVBQUUsUUFwREk7QUFxRFZDLEVBQUFBLFNBQVMsRUFBRSxRQXJERDtBQXNEVkMsRUFBQUEsSUFBSSxFQUFFLFFBdERJO0FBdURWQyxFQUFBQSxLQUFLLEVBQUUsUUF2REc7QUF3RFZDLEVBQUFBLFdBQVcsRUFBRSxRQXhESDtBQXlEVkMsRUFBQUEsSUFBSSxFQUFFLFFBekRJO0FBMERWQyxFQUFBQSxRQUFRLEVBQUUsUUExREE7QUEyRFZDLEVBQUFBLE9BQU8sRUFBRSxRQTNEQztBQTREVkMsRUFBQUEsU0FBUyxFQUFFLFFBNUREO0FBNkRWQyxFQUFBQSxNQUFNLEVBQUUsUUE3REU7QUE4RFZDLEVBQUFBLEtBQUssRUFBRSxRQTlERztBQStEVkMsRUFBQUEsS0FBSyxFQUFFLFFBL0RHO0FBZ0VWQyxFQUFBQSxRQUFRLEVBQUUsUUFoRUE7QUFpRVZDLEVBQUFBLGFBQWEsRUFBRSxRQWpFTDtBQWtFVkMsRUFBQUEsU0FBUyxFQUFFLFFBbEVEO0FBbUVWQyxFQUFBQSxZQUFZLEVBQUUsUUFuRUo7QUFvRVZDLEVBQUFBLFNBQVMsRUFBRSxRQXBFRDtBQXFFVkMsRUFBQUEsVUFBVSxFQUFFLFFBckVGO0FBc0VWQyxFQUFBQSxTQUFTLEVBQUUsUUF0RUQ7QUF1RVZDLEVBQUFBLG9CQUFvQixFQUFFLFFBdkVaO0FBd0VWQyxFQUFBQSxTQUFTLEVBQUUsUUF4RUQ7QUF5RVZDLEVBQUFBLFVBQVUsRUFBRSxRQXpFRjtBQTBFVkMsRUFBQUEsU0FBUyxFQUFFLFFBMUVEO0FBMkVWQyxFQUFBQSxTQUFTLEVBQUUsUUEzRUQ7QUE0RVZDLEVBQUFBLFdBQVcsRUFBRSxRQTVFSDtBQTZFVkMsRUFBQUEsYUFBYSxFQUFFLFFBN0VMO0FBOEVWQyxFQUFBQSxZQUFZLEVBQUUsUUE5RUo7QUErRVZDLEVBQUFBLGNBQWMsRUFBRSxRQS9FTjtBQWdGVkMsRUFBQUEsY0FBYyxFQUFFLFFBaEZOO0FBaUZWQyxFQUFBQSxjQUFjLEVBQUUsUUFqRk47QUFrRlZDLEVBQUFBLFdBQVcsRUFBRSxRQWxGSDtBQW1GVkMsRUFBQUEsSUFBSSxFQUFFLFFBbkZJO0FBb0ZWQyxFQUFBQSxTQUFTLEVBQUUsUUFwRkQ7QUFxRlZDLEVBQUFBLEtBQUssRUFBRSxRQXJGRztBQXNGVkMsRUFBQUEsT0FBTyxFQUFFLFFBdEZDO0FBdUZWQyxFQUFBQSxNQUFNLEVBQUUsUUF2RkU7QUF3RlZDLEVBQUFBLGdCQUFnQixFQUFFLFFBeEZSO0FBeUZWQyxFQUFBQSxVQUFVLEVBQUUsUUF6RkY7QUEwRlZDLEVBQUFBLFlBQVksRUFBRSxRQTFGSjtBQTJGVkMsRUFBQUEsWUFBWSxFQUFFLFFBM0ZKO0FBNEZWQyxFQUFBQSxjQUFjLEVBQUUsUUE1Rk47QUE2RlZDLEVBQUFBLGVBQWUsRUFBRSxRQTdGUDtBQThGVkMsRUFBQUEsaUJBQWlCLEVBQUUsUUE5RlQ7QUErRlZDLEVBQUFBLGVBQWUsRUFBRSxRQS9GUDtBQWdHVkMsRUFBQUEsZUFBZSxFQUFFLFFBaEdQO0FBaUdWQyxFQUFBQSxZQUFZLEVBQUUsUUFqR0o7QUFrR1ZDLEVBQUFBLFNBQVMsRUFBRSxRQWxHRDtBQW1HVkMsRUFBQUEsU0FBUyxFQUFFLFFBbkdEO0FBb0dWQyxFQUFBQSxRQUFRLEVBQUUsUUFwR0E7QUFxR1ZDLEVBQUFBLFdBQVcsRUFBRSxRQXJHSDtBQXNHVkMsRUFBQUEsSUFBSSxFQUFFLFFBdEdJO0FBdUdWQyxFQUFBQSxPQUFPLEVBQUUsUUF2R0M7QUF3R1ZDLEVBQUFBLEtBQUssRUFBRSxRQXhHRztBQXlHVkMsRUFBQUEsU0FBUyxFQUFFLFFBekdEO0FBMEdWQyxFQUFBQSxNQUFNLEVBQUUsUUExR0U7QUEyR1ZDLEVBQUFBLFNBQVMsRUFBRSxRQTNHRDtBQTRHVkMsRUFBQUEsTUFBTSxFQUFFLFFBNUdFO0FBNkdWQyxFQUFBQSxhQUFhLEVBQUUsUUE3R0w7QUE4R1ZDLEVBQUFBLFNBQVMsRUFBRSxRQTlHRDtBQStHVkMsRUFBQUEsYUFBYSxFQUFFLFFBL0dMO0FBZ0hWQyxFQUFBQSxhQUFhLEVBQUUsUUFoSEw7QUFpSFZDLEVBQUFBLFVBQVUsRUFBRSxRQWpIRjtBQWtIVkMsRUFBQUEsU0FBUyxFQUFFLFFBbEhEO0FBbUhWQyxFQUFBQSxJQUFJLEVBQUUsUUFuSEk7QUFvSFZDLEVBQUFBLElBQUksRUFBRSxRQXBISTtBQXFIVkMsRUFBQUEsSUFBSSxFQUFFLFFBckhJO0FBc0hWQyxFQUFBQSxVQUFVLEVBQUUsUUF0SEY7QUF1SFZDLEVBQUFBLE1BQU0sRUFBRSxRQXZIRTtBQXdIVkMsRUFBQUEsYUFBYSxFQUFFLFFBeEhMO0FBeUhWQyxFQUFBQSxHQUFHLEVBQUUsUUF6SEs7QUEwSFZDLEVBQUFBLFNBQVMsRUFBRSxRQTFIRDtBQTJIVkMsRUFBQUEsU0FBUyxFQUFFLFFBM0hEO0FBNEhWQyxFQUFBQSxXQUFXLEVBQUUsUUE1SEg7QUE2SFZDLEVBQUFBLE1BQU0sRUFBRSxRQTdIRTtBQThIVkMsRUFBQUEsVUFBVSxFQUFFLFFBOUhGO0FBK0hWQyxFQUFBQSxRQUFRLEVBQUUsUUEvSEE7QUFnSVZDLEVBQUFBLFFBQVEsRUFBRSxRQWhJQTtBQWlJVkMsRUFBQUEsTUFBTSxFQUFFLFFBaklFO0FBa0lWQyxFQUFBQSxNQUFNLEVBQUUsUUFsSUU7QUFtSVZDLEVBQUFBLE9BQU8sRUFBRSxRQW5JQztBQW9JVkMsRUFBQUEsU0FBUyxFQUFFLFFBcElEO0FBcUlWQyxFQUFBQSxTQUFTLEVBQUUsUUFySUQ7QUFzSVZDLEVBQUFBLFNBQVMsRUFBRSxRQXRJRDtBQXVJVkMsRUFBQUEsSUFBSSxFQUFFLFFBdklJO0FBd0lWQyxFQUFBQSxXQUFXLEVBQUUsUUF4SUg7QUF5SVZDLEVBQUFBLFNBQVMsRUFBRSxRQXpJRDtBQTBJVkMsRUFBQUEsR0FBRyxFQUFFLFFBMUlLO0FBMklWQyxFQUFBQSxJQUFJLEVBQUUsUUEzSUk7QUE0SVZDLEVBQUFBLE9BQU8sRUFBRSxRQTVJQztBQTZJVkMsRUFBQUEsTUFBTSxFQUFFLFFBN0lFO0FBOElWQyxFQUFBQSxTQUFTLEVBQUUsUUE5SUQ7QUErSVZDLEVBQUFBLE1BQU0sRUFBRSxRQS9JRTtBQWdKVkMsRUFBQUEsS0FBSyxFQUFFLFFBaEpHO0FBaUpWQyxFQUFBQSxLQUFLLEVBQUUsUUFqSkc7QUFrSlZDLEVBQUFBLFVBQVUsRUFBRSxRQWxKRjtBQW1KVkMsRUFBQUEsTUFBTSxFQUFFLFFBbkpFO0FBb0pWQyxFQUFBQSxXQUFXLEVBQUU7QUFwSkgsQ0FBWjtBQXVKQW5LLFVBQU0sQ0FBQ0MsS0FBRCxFQUFRbUssS0FBUixFQUFlO0FBQ25CaFMsRUFBQUEsSUFBSSxFQUFFLFVBQVNpUyxRQUFULEVBQW1CO0FBQ3ZCLFdBQU90SyxNQUFNLENBQUN1SyxNQUFQLENBQWMsSUFBSSxLQUFLL2dCLFdBQVQsRUFBZCxFQUFvQyxJQUFwQyxFQUEwQzhnQixRQUExQyxDQUFQO0FBQ0QsR0FIa0I7QUFJbkJFLEVBQUFBLFdBQVcsRUFBRSxZQUFXO0FBQ3RCLFdBQU8sS0FBS0MsR0FBTCxHQUFXRCxXQUFYLEVBQVA7QUFDRCxHQU5rQjtBQU9uQkUsRUFBQUEsR0FBRyxFQUFFQyxlQVBjO0FBT0c7QUFDdEJDLEVBQUFBLFNBQVMsRUFBRUQsZUFSUTtBQVNuQkUsRUFBQUEsU0FBUyxFQUFFQyxlQVRRO0FBVW5CQyxFQUFBQSxTQUFTLEVBQUVDLGVBVlE7QUFXbkJDLEVBQUFBLFFBQVEsRUFBRUQ7QUFYUyxDQUFmLENBQU47O0FBY0EsU0FBU0wsZUFBVCxHQUEyQjtBQUN6QixTQUFPLEtBQUtGLEdBQUwsR0FBV0csU0FBWCxFQUFQO0FBQ0Q7O0FBRUQsU0FBU0UsZUFBVCxHQUEyQjtBQUN6QixTQUFPSSxVQUFVLENBQUMsSUFBRCxDQUFWLENBQWlCTCxTQUFqQixFQUFQO0FBQ0Q7O0FBRUQsU0FBU0csZUFBVCxHQUEyQjtBQUN6QixTQUFPLEtBQUtQLEdBQUwsR0FBV00sU0FBWCxFQUFQO0FBQ0Q7O0FBRWMsU0FBU1YsS0FBVCxDQUFlYyxNQUFmLEVBQXVCO0FBQ3BDLE1BQUk3a0IsQ0FBSixFQUFPOGtCLENBQVA7QUFDQUQsRUFBQUEsTUFBTSxHQUFHLENBQUNBLE1BQU0sR0FBRyxFQUFWLEVBQWM5YSxJQUFkLEdBQXFCZ2IsV0FBckIsRUFBVDtBQUNBLFNBQU8sQ0FBQy9rQixDQUFDLEdBQUdrYSxLQUFLLENBQUM4SyxJQUFOLENBQVdILE1BQVgsQ0FBTCxLQUE0QkMsQ0FBQyxHQUFHOWtCLENBQUMsQ0FBQyxDQUFELENBQUQsQ0FBS0MsTUFBVCxFQUFpQkQsQ0FBQyxHQUFHaWxCLFFBQVEsQ0FBQ2psQixDQUFDLENBQUMsQ0FBRCxDQUFGLEVBQU8sRUFBUCxDQUE3QixFQUF5QzhrQixDQUFDLEtBQUssQ0FBTixHQUFVSSxJQUFJLENBQUNsbEIsQ0FBRCxDQUFkLENBQWtCO0FBQWxCLElBQ3RFOGtCLENBQUMsS0FBSyxDQUFOLEdBQVUsSUFBSUssR0FBSixDQUFTbmxCLENBQUMsSUFBSSxDQUFMLEdBQVMsR0FBVixHQUFrQkEsQ0FBQyxJQUFJLENBQUwsR0FBUyxJQUFuQyxFQUEyQ0EsQ0FBQyxJQUFJLENBQUwsR0FBUyxHQUFWLEdBQWtCQSxDQUFDLEdBQUcsSUFBaEUsRUFBd0UsQ0FBQ0EsQ0FBQyxHQUFHLEdBQUwsS0FBYSxDQUFkLEdBQW9CQSxDQUFDLEdBQUcsR0FBL0YsRUFBcUcsQ0FBckcsQ0FBVixDQUFrSDtBQUFsSCxJQUNBOGtCLENBQUMsS0FBSyxDQUFOLEdBQVVNLElBQUksQ0FBQ3BsQixDQUFDLElBQUksRUFBTCxHQUFVLElBQVgsRUFBaUJBLENBQUMsSUFBSSxFQUFMLEdBQVUsSUFBM0IsRUFBaUNBLENBQUMsSUFBSSxDQUFMLEdBQVMsSUFBMUMsRUFBZ0QsQ0FBQ0EsQ0FBQyxHQUFHLElBQUwsSUFBYSxJQUE3RCxDQUFkLENBQWlGO0FBQWpGLElBQ0E4a0IsQ0FBQyxLQUFLLENBQU4sR0FBVU0sSUFBSSxDQUFFcGxCLENBQUMsSUFBSSxFQUFMLEdBQVUsR0FBWCxHQUFtQkEsQ0FBQyxJQUFJLENBQUwsR0FBUyxJQUE3QixFQUFxQ0EsQ0FBQyxJQUFJLENBQUwsR0FBUyxHQUFWLEdBQWtCQSxDQUFDLElBQUksQ0FBTCxHQUFTLElBQS9ELEVBQXVFQSxDQUFDLElBQUksQ0FBTCxHQUFTLEdBQVYsR0FBa0JBLENBQUMsR0FBRyxJQUE1RixFQUFtRyxDQUFFLENBQUNBLENBQUMsR0FBRyxHQUFMLEtBQWEsQ0FBZCxHQUFvQkEsQ0FBQyxHQUFHLEdBQXpCLElBQWlDLElBQXBJLENBQWQsQ0FBd0o7QUFBeEosSUFDQSxJQUpDLENBSUs7QUFKTCxNQUtELENBQUNBLENBQUMsR0FBR21hLFlBQVksQ0FBQzZLLElBQWIsQ0FBa0JILE1BQWxCLENBQUwsSUFBa0MsSUFBSU0sR0FBSixDQUFRbmxCLENBQUMsQ0FBQyxDQUFELENBQVQsRUFBY0EsQ0FBQyxDQUFDLENBQUQsQ0FBZixFQUFvQkEsQ0FBQyxDQUFDLENBQUQsQ0FBckIsRUFBMEIsQ0FBMUIsQ0FBbEMsQ0FBK0Q7QUFBL0QsSUFDQSxDQUFDQSxDQUFDLEdBQUdxYSxZQUFZLENBQUMySyxJQUFiLENBQWtCSCxNQUFsQixDQUFMLElBQWtDLElBQUlNLEdBQUosQ0FBUW5sQixDQUFDLENBQUMsQ0FBRCxDQUFELEdBQU8sR0FBUCxHQUFhLEdBQXJCLEVBQTBCQSxDQUFDLENBQUMsQ0FBRCxDQUFELEdBQU8sR0FBUCxHQUFhLEdBQXZDLEVBQTRDQSxDQUFDLENBQUMsQ0FBRCxDQUFELEdBQU8sR0FBUCxHQUFhLEdBQXpELEVBQThELENBQTlELENBQWxDLENBQW1HO0FBQW5HLElBQ0EsQ0FBQ0EsQ0FBQyxHQUFHc2EsYUFBYSxDQUFDMEssSUFBZCxDQUFtQkgsTUFBbkIsQ0FBTCxJQUFtQ08sSUFBSSxDQUFDcGxCLENBQUMsQ0FBQyxDQUFELENBQUYsRUFBT0EsQ0FBQyxDQUFDLENBQUQsQ0FBUixFQUFhQSxDQUFDLENBQUMsQ0FBRCxDQUFkLEVBQW1CQSxDQUFDLENBQUMsQ0FBRCxDQUFwQixDQUF2QyxDQUFnRTtBQUFoRSxJQUNBLENBQUNBLENBQUMsR0FBR3VhLGFBQWEsQ0FBQ3lLLElBQWQsQ0FBbUJILE1BQW5CLENBQUwsSUFBbUNPLElBQUksQ0FBQ3BsQixDQUFDLENBQUMsQ0FBRCxDQUFELEdBQU8sR0FBUCxHQUFhLEdBQWQsRUFBbUJBLENBQUMsQ0FBQyxDQUFELENBQUQsR0FBTyxHQUFQLEdBQWEsR0FBaEMsRUFBcUNBLENBQUMsQ0FBQyxDQUFELENBQUQsR0FBTyxHQUFQLEdBQWEsR0FBbEQsRUFBdURBLENBQUMsQ0FBQyxDQUFELENBQXhELENBQXZDLENBQW9HO0FBQXBHLElBQ0EsQ0FBQ0EsQ0FBQyxHQUFHd2EsWUFBWSxDQUFDd0ssSUFBYixDQUFrQkgsTUFBbEIsQ0FBTCxJQUFrQ1EsSUFBSSxDQUFDcmxCLENBQUMsQ0FBQyxDQUFELENBQUYsRUFBT0EsQ0FBQyxDQUFDLENBQUQsQ0FBRCxHQUFPLEdBQWQsRUFBbUJBLENBQUMsQ0FBQyxDQUFELENBQUQsR0FBTyxHQUExQixFQUErQixDQUEvQixDQUF0QyxDQUF3RTtBQUF4RSxJQUNBLENBQUNBLENBQUMsR0FBR3lhLGFBQWEsQ0FBQ3VLLElBQWQsQ0FBbUJILE1BQW5CLENBQUwsSUFBbUNRLElBQUksQ0FBQ3JsQixDQUFDLENBQUMsQ0FBRCxDQUFGLEVBQU9BLENBQUMsQ0FBQyxDQUFELENBQUQsR0FBTyxHQUFkLEVBQW1CQSxDQUFDLENBQUMsQ0FBRCxDQUFELEdBQU8sR0FBMUIsRUFBK0JBLENBQUMsQ0FBQyxDQUFELENBQWhDLENBQXZDLENBQTRFO0FBQTVFLElBQ0EwYSxLQUFLLENBQUMvUyxjQUFOLENBQXFCa2QsTUFBckIsSUFBK0JLLElBQUksQ0FBQ3hLLEtBQUssQ0FBQ21LLE1BQUQsQ0FBTixDQUFuQyxDQUFtRDtBQUFuRCxJQUNBQSxNQUFNLEtBQUssYUFBWCxHQUEyQixJQUFJTSxHQUFKLENBQVFyZSxHQUFSLEVBQWFBLEdBQWIsRUFBa0JBLEdBQWxCLEVBQXVCLENBQXZCLENBQTNCLEdBQ0EsSUFiTjtBQWNEOztBQUVELFNBQVNvZSxJQUFULENBQWM1a0IsQ0FBZCxFQUFpQjtBQUNmLFNBQU8sSUFBSTZrQixHQUFKLENBQVE3a0IsQ0FBQyxJQUFJLEVBQUwsR0FBVSxJQUFsQixFQUF3QkEsQ0FBQyxJQUFJLENBQUwsR0FBUyxJQUFqQyxFQUF1Q0EsQ0FBQyxHQUFHLElBQTNDLEVBQWlELENBQWpELENBQVA7QUFDRDs7QUFFRCxTQUFTOGtCLElBQVQsQ0FBY0UsQ0FBZCxFQUFpQkMsQ0FBakIsRUFBb0I3ZSxDQUFwQixFQUF1QkQsQ0FBdkIsRUFBMEI7QUFDeEIsTUFBSUEsQ0FBQyxJQUFJLENBQVQsRUFBWTZlLENBQUMsR0FBR0MsQ0FBQyxHQUFHN2UsQ0FBQyxHQUFHSSxHQUFaO0FBQ1osU0FBTyxJQUFJcWUsR0FBSixDQUFRRyxDQUFSLEVBQVdDLENBQVgsRUFBYzdlLENBQWQsRUFBaUJELENBQWpCLENBQVA7QUFDRDs7QUFFTSxTQUFTK2UsVUFBVCxDQUFvQi9YLENBQXBCLEVBQXVCO0FBQzVCLE1BQUksRUFBRUEsQ0FBQyxZQUFZbU0sS0FBZixDQUFKLEVBQTJCbk0sQ0FBQyxHQUFHc1csS0FBSyxDQUFDdFcsQ0FBRCxDQUFUO0FBQzNCLE1BQUksQ0FBQ0EsQ0FBTCxFQUFRLE9BQU8sSUFBSTBYLEdBQUosRUFBUDtBQUNSMVgsRUFBQUEsQ0FBQyxHQUFHQSxDQUFDLENBQUMwVyxHQUFGLEVBQUo7QUFDQSxTQUFPLElBQUlnQixHQUFKLENBQVExWCxDQUFDLENBQUM2WCxDQUFWLEVBQWE3WCxDQUFDLENBQUM4WCxDQUFmLEVBQWtCOVgsQ0FBQyxDQUFDL0csQ0FBcEIsRUFBdUIrRyxDQUFDLENBQUNnWSxPQUF6QixDQUFQO0FBQ0Q7QUFFTSxTQUFTdEIsU0FBVCxDQUFhbUIsQ0FBYixFQUFnQkMsQ0FBaEIsRUFBbUI3ZSxDQUFuQixFQUFzQitlLE9BQXRCLEVBQStCO0FBQ3BDLFNBQU9sa0IsU0FBUyxDQUFDdEIsTUFBVixLQUFxQixDQUFyQixHQUF5QnVsQixVQUFVLENBQUNGLENBQUQsQ0FBbkMsR0FBeUMsSUFBSUgsR0FBSixDQUFRRyxDQUFSLEVBQVdDLENBQVgsRUFBYzdlLENBQWQsRUFBaUIrZSxPQUFPLElBQUksSUFBWCxHQUFrQixDQUFsQixHQUFzQkEsT0FBdkMsQ0FBaEQ7QUFDRDtBQUVNLFNBQVNOLEdBQVQsQ0FBYUcsQ0FBYixFQUFnQkMsQ0FBaEIsRUFBbUI3ZSxDQUFuQixFQUFzQitlLE9BQXRCLEVBQStCO0FBQ3BDLE9BQUtILENBQUwsR0FBUyxDQUFDQSxDQUFWO0FBQ0EsT0FBS0MsQ0FBTCxHQUFTLENBQUNBLENBQVY7QUFDQSxPQUFLN2UsQ0FBTCxHQUFTLENBQUNBLENBQVY7QUFDQSxPQUFLK2UsT0FBTCxHQUFlLENBQUNBLE9BQWhCO0FBQ0Q7QUFFRDlMLFVBQU0sQ0FBQ3dMLEdBQUQsRUFBTWhCLFNBQU4sRUFBVzNLLE1BQU0sQ0FBQ0ksS0FBRCxFQUFRO0FBQzdCRSxFQUFBQSxRQUFRLEVBQUUsVUFBUzRMLENBQVQsRUFBWTtBQUNwQkEsSUFBQUEsQ0FBQyxHQUFHQSxDQUFDLElBQUksSUFBTCxHQUFZNUwsUUFBWixHQUF1Qi9ULElBQUksQ0FBQzRmLEdBQUwsQ0FBUzdMLFFBQVQsRUFBbUI0TCxDQUFuQixDQUEzQjtBQUNBLFdBQU8sSUFBSVAsR0FBSixDQUFRLEtBQUtHLENBQUwsR0FBU0ksQ0FBakIsRUFBb0IsS0FBS0gsQ0FBTCxHQUFTRyxDQUE3QixFQUFnQyxLQUFLaGYsQ0FBTCxHQUFTZ2YsQ0FBekMsRUFBNEMsS0FBS0QsT0FBakQsQ0FBUDtBQUNELEdBSjRCO0FBSzdCNUwsRUFBQUEsTUFBTSxFQUFFLFVBQVM2TCxDQUFULEVBQVk7QUFDbEJBLElBQUFBLENBQUMsR0FBR0EsQ0FBQyxJQUFJLElBQUwsR0FBWTdMLE1BQVosR0FBcUI5VCxJQUFJLENBQUM0ZixHQUFMLENBQVM5TCxNQUFULEVBQWlCNkwsQ0FBakIsQ0FBekI7QUFDQSxXQUFPLElBQUlQLEdBQUosQ0FBUSxLQUFLRyxDQUFMLEdBQVNJLENBQWpCLEVBQW9CLEtBQUtILENBQUwsR0FBU0csQ0FBN0IsRUFBZ0MsS0FBS2hmLENBQUwsR0FBU2dmLENBQXpDLEVBQTRDLEtBQUtELE9BQWpELENBQVA7QUFDRCxHQVI0QjtBQVM3QnRCLEVBQUFBLEdBQUcsRUFBRSxZQUFXO0FBQ2QsV0FBTyxJQUFQO0FBQ0QsR0FYNEI7QUFZN0JELEVBQUFBLFdBQVcsRUFBRSxZQUFXO0FBQ3RCLFdBQVEsQ0FBQyxHQUFELElBQVEsS0FBS29CLENBQWIsSUFBa0IsS0FBS0EsQ0FBTCxHQUFTLEtBQTVCLElBQ0MsQ0FBQyxHQUFELElBQVEsS0FBS0MsQ0FBYixJQUFrQixLQUFLQSxDQUFMLEdBQVMsS0FENUIsSUFFQyxDQUFDLEdBQUQsSUFBUSxLQUFLN2UsQ0FBYixJQUFrQixLQUFLQSxDQUFMLEdBQVMsS0FGNUIsSUFHQyxLQUFLLEtBQUsrZSxPQUFWLElBQXFCLEtBQUtBLE9BQUwsSUFBZ0IsQ0FIN0M7QUFJRCxHQWpCNEI7QUFrQjdCckIsRUFBQUEsR0FBRyxFQUFFd0IsYUFsQndCO0FBa0JUO0FBQ3BCdEIsRUFBQUEsU0FBUyxFQUFFc0IsYUFuQmtCO0FBb0I3Qm5CLEVBQUFBLFNBQVMsRUFBRW9CLGFBcEJrQjtBQXFCN0JsQixFQUFBQSxRQUFRLEVBQUVrQjtBQXJCbUIsQ0FBUixDQUFqQixDQUFOOztBQXdCQSxTQUFTRCxhQUFULEdBQXlCO0FBQ3ZCLFNBQU8sTUFBTXhCLEdBQUcsQ0FBQyxLQUFLa0IsQ0FBTixDQUFULEdBQW9CbEIsR0FBRyxDQUFDLEtBQUttQixDQUFOLENBQXZCLEdBQWtDbkIsR0FBRyxDQUFDLEtBQUsxZCxDQUFOLENBQTVDO0FBQ0Q7O0FBRUQsU0FBU21mLGFBQVQsR0FBeUI7QUFDdkIsTUFBSXBmLENBQUMsR0FBRyxLQUFLZ2YsT0FBYjtBQUFzQmhmLEVBQUFBLENBQUMsR0FBR3FmLEtBQUssQ0FBQ3JmLENBQUQsQ0FBTCxHQUFXLENBQVgsR0FBZVYsSUFBSSxDQUFDZ2dCLEdBQUwsQ0FBUyxDQUFULEVBQVloZ0IsSUFBSSxDQUFDQyxHQUFMLENBQVMsQ0FBVCxFQUFZUyxDQUFaLENBQVosQ0FBbkI7QUFDdEIsU0FBTyxDQUFDQSxDQUFDLEtBQUssQ0FBTixHQUFVLE1BQVYsR0FBbUIsT0FBcEIsSUFDRFYsSUFBSSxDQUFDZ2dCLEdBQUwsQ0FBUyxDQUFULEVBQVloZ0IsSUFBSSxDQUFDQyxHQUFMLENBQVMsR0FBVCxFQUFjRCxJQUFJLENBQUNpZ0IsS0FBTCxDQUFXLEtBQUtWLENBQWhCLEtBQXNCLENBQXBDLENBQVosQ0FEQyxHQUNxRCxJQURyRCxHQUVEdmYsSUFBSSxDQUFDZ2dCLEdBQUwsQ0FBUyxDQUFULEVBQVloZ0IsSUFBSSxDQUFDQyxHQUFMLENBQVMsR0FBVCxFQUFjRCxJQUFJLENBQUNpZ0IsS0FBTCxDQUFXLEtBQUtULENBQWhCLEtBQXNCLENBQXBDLENBQVosQ0FGQyxHQUVxRCxJQUZyRCxHQUdEeGYsSUFBSSxDQUFDZ2dCLEdBQUwsQ0FBUyxDQUFULEVBQVloZ0IsSUFBSSxDQUFDQyxHQUFMLENBQVMsR0FBVCxFQUFjRCxJQUFJLENBQUNpZ0IsS0FBTCxDQUFXLEtBQUt0ZixDQUFoQixLQUFzQixDQUFwQyxDQUFaLENBSEMsSUFJQUQsQ0FBQyxLQUFLLENBQU4sR0FBVSxHQUFWLEdBQWdCLE9BQU9BLENBQVAsR0FBVyxHQUozQixDQUFQO0FBS0Q7O0FBRUQsU0FBUzJkLEdBQVQsQ0FBYTVmLEtBQWIsRUFBb0I7QUFDbEJBLEVBQUFBLEtBQUssR0FBR3VCLElBQUksQ0FBQ2dnQixHQUFMLENBQVMsQ0FBVCxFQUFZaGdCLElBQUksQ0FBQ0MsR0FBTCxDQUFTLEdBQVQsRUFBY0QsSUFBSSxDQUFDaWdCLEtBQUwsQ0FBV3hoQixLQUFYLEtBQXFCLENBQW5DLENBQVosQ0FBUjtBQUNBLFNBQU8sQ0FBQ0EsS0FBSyxHQUFHLEVBQVIsR0FBYSxHQUFiLEdBQW1CLEVBQXBCLElBQTBCQSxLQUFLLENBQUNtZ0IsUUFBTixDQUFlLEVBQWYsQ0FBakM7QUFDRDs7QUFFRCxTQUFTVSxJQUFULENBQWNZLENBQWQsRUFBaUIzTixDQUFqQixFQUFvQndNLENBQXBCLEVBQXVCcmUsQ0FBdkIsRUFBMEI7QUFDeEIsTUFBSUEsQ0FBQyxJQUFJLENBQVQsRUFBWXdmLENBQUMsR0FBRzNOLENBQUMsR0FBR3dNLENBQUMsR0FBR2hlLEdBQVosQ0FBWixLQUNLLElBQUlnZSxDQUFDLElBQUksQ0FBTCxJQUFVQSxDQUFDLElBQUksQ0FBbkIsRUFBc0JtQixDQUFDLEdBQUczTixDQUFDLEdBQUd4UixHQUFSLENBQXRCLEtBQ0EsSUFBSXdSLENBQUMsSUFBSSxDQUFULEVBQVkyTixDQUFDLEdBQUduZixHQUFKO0FBQ2pCLFNBQU8sSUFBSW9mLEdBQUosQ0FBUUQsQ0FBUixFQUFXM04sQ0FBWCxFQUFjd00sQ0FBZCxFQUFpQnJlLENBQWpCLENBQVA7QUFDRDs7QUFFTSxTQUFTbWUsVUFBVCxDQUFvQm5YLENBQXBCLEVBQXVCO0FBQzVCLE1BQUlBLENBQUMsWUFBWXlZLEdBQWpCLEVBQXNCLE9BQU8sSUFBSUEsR0FBSixDQUFRelksQ0FBQyxDQUFDd1ksQ0FBVixFQUFheFksQ0FBQyxDQUFDNkssQ0FBZixFQUFrQjdLLENBQUMsQ0FBQ3FYLENBQXBCLEVBQXVCclgsQ0FBQyxDQUFDZ1ksT0FBekIsQ0FBUDtBQUN0QixNQUFJLEVBQUVoWSxDQUFDLFlBQVltTSxLQUFmLENBQUosRUFBMkJuTSxDQUFDLEdBQUdzVyxLQUFLLENBQUN0VyxDQUFELENBQVQ7QUFDM0IsTUFBSSxDQUFDQSxDQUFMLEVBQVEsT0FBTyxJQUFJeVksR0FBSixFQUFQO0FBQ1IsTUFBSXpZLENBQUMsWUFBWXlZLEdBQWpCLEVBQXNCLE9BQU96WSxDQUFQO0FBQ3RCQSxFQUFBQSxDQUFDLEdBQUdBLENBQUMsQ0FBQzBXLEdBQUYsRUFBSjtBQUNBLE1BQUltQixDQUFDLEdBQUc3WCxDQUFDLENBQUM2WCxDQUFGLEdBQU0sR0FBZDtBQUFBLE1BQ0lDLENBQUMsR0FBRzlYLENBQUMsQ0FBQzhYLENBQUYsR0FBTSxHQURkO0FBQUEsTUFFSTdlLENBQUMsR0FBRytHLENBQUMsQ0FBQy9HLENBQUYsR0FBTSxHQUZkO0FBQUEsTUFHSVYsR0FBRyxHQUFHRCxJQUFJLENBQUNDLEdBQUwsQ0FBU3NmLENBQVQsRUFBWUMsQ0FBWixFQUFlN2UsQ0FBZixDQUhWO0FBQUEsTUFJSXFmLEdBQUcsR0FBR2hnQixJQUFJLENBQUNnZ0IsR0FBTCxDQUFTVCxDQUFULEVBQVlDLENBQVosRUFBZTdlLENBQWYsQ0FKVjtBQUFBLE1BS0l1ZixDQUFDLEdBQUduZixHQUxSO0FBQUEsTUFNSXdSLENBQUMsR0FBR3lOLEdBQUcsR0FBRy9mLEdBTmQ7QUFBQSxNQU9JOGUsQ0FBQyxHQUFHLENBQUNpQixHQUFHLEdBQUcvZixHQUFQLElBQWMsQ0FQdEI7O0FBUUEsTUFBSXNTLENBQUosRUFBTztBQUNMLFFBQUlnTixDQUFDLEtBQUtTLEdBQVYsRUFBZUUsQ0FBQyxHQUFHLENBQUNWLENBQUMsR0FBRzdlLENBQUwsSUFBVTRSLENBQVYsR0FBYyxDQUFDaU4sQ0FBQyxHQUFHN2UsQ0FBTCxJQUFVLENBQTVCLENBQWYsS0FDSyxJQUFJNmUsQ0FBQyxLQUFLUSxHQUFWLEVBQWVFLENBQUMsR0FBRyxDQUFDdmYsQ0FBQyxHQUFHNGUsQ0FBTCxJQUFVaE4sQ0FBVixHQUFjLENBQWxCLENBQWYsS0FDQTJOLENBQUMsR0FBRyxDQUFDWCxDQUFDLEdBQUdDLENBQUwsSUFBVWpOLENBQVYsR0FBYyxDQUFsQjtBQUNMQSxJQUFBQSxDQUFDLElBQUl3TSxDQUFDLEdBQUcsR0FBSixHQUFVaUIsR0FBRyxHQUFHL2YsR0FBaEIsR0FBc0IsSUFBSStmLEdBQUosR0FBVS9mLEdBQXJDO0FBQ0FpZ0IsSUFBQUEsQ0FBQyxJQUFJLEVBQUw7QUFDRCxHQU5ELE1BTU87QUFDTDNOLElBQUFBLENBQUMsR0FBR3dNLENBQUMsR0FBRyxDQUFKLElBQVNBLENBQUMsR0FBRyxDQUFiLEdBQWlCLENBQWpCLEdBQXFCbUIsQ0FBekI7QUFDRDs7QUFDRCxTQUFPLElBQUlDLEdBQUosQ0FBUUQsQ0FBUixFQUFXM04sQ0FBWCxFQUFjd00sQ0FBZCxFQUFpQnJYLENBQUMsQ0FBQ2dZLE9BQW5CLENBQVA7QUFDRDtBQUVNLFNBQVNVLEdBQVQsQ0FBYUYsQ0FBYixFQUFnQjNOLENBQWhCLEVBQW1Cd00sQ0FBbkIsRUFBc0JXLE9BQXRCLEVBQStCO0FBQ3BDLFNBQU9sa0IsU0FBUyxDQUFDdEIsTUFBVixLQUFxQixDQUFyQixHQUF5QjJrQixVQUFVLENBQUNxQixDQUFELENBQW5DLEdBQXlDLElBQUlDLEdBQUosQ0FBUUQsQ0FBUixFQUFXM04sQ0FBWCxFQUFjd00sQ0FBZCxFQUFpQlcsT0FBTyxJQUFJLElBQVgsR0FBa0IsQ0FBbEIsR0FBc0JBLE9BQXZDLENBQWhEO0FBQ0Q7O0FBRUQsU0FBU1MsR0FBVCxDQUFhRCxDQUFiLEVBQWdCM04sQ0FBaEIsRUFBbUJ3TSxDQUFuQixFQUFzQlcsT0FBdEIsRUFBK0I7QUFDN0IsT0FBS1EsQ0FBTCxHQUFTLENBQUNBLENBQVY7QUFDQSxPQUFLM04sQ0FBTCxHQUFTLENBQUNBLENBQVY7QUFDQSxPQUFLd00sQ0FBTCxHQUFTLENBQUNBLENBQVY7QUFDQSxPQUFLVyxPQUFMLEdBQWUsQ0FBQ0EsT0FBaEI7QUFDRDs7QUFFRDlMLFVBQU0sQ0FBQ3VNLEdBQUQsRUFBTUMsR0FBTixFQUFXM00sTUFBTSxDQUFDSSxLQUFELEVBQVE7QUFDN0JFLEVBQUFBLFFBQVEsRUFBRSxVQUFTNEwsQ0FBVCxFQUFZO0FBQ3BCQSxJQUFBQSxDQUFDLEdBQUdBLENBQUMsSUFBSSxJQUFMLEdBQVk1TCxRQUFaLEdBQXVCL1QsSUFBSSxDQUFDNGYsR0FBTCxDQUFTN0wsUUFBVCxFQUFtQjRMLENBQW5CLENBQTNCO0FBQ0EsV0FBTyxJQUFJUSxHQUFKLENBQVEsS0FBS0QsQ0FBYixFQUFnQixLQUFLM04sQ0FBckIsRUFBd0IsS0FBS3dNLENBQUwsR0FBU1ksQ0FBakMsRUFBb0MsS0FBS0QsT0FBekMsQ0FBUDtBQUNELEdBSjRCO0FBSzdCNUwsRUFBQUEsTUFBTSxFQUFFLFVBQVM2TCxDQUFULEVBQVk7QUFDbEJBLElBQUFBLENBQUMsR0FBR0EsQ0FBQyxJQUFJLElBQUwsR0FBWTdMLE1BQVosR0FBcUI5VCxJQUFJLENBQUM0ZixHQUFMLENBQVM5TCxNQUFULEVBQWlCNkwsQ0FBakIsQ0FBekI7QUFDQSxXQUFPLElBQUlRLEdBQUosQ0FBUSxLQUFLRCxDQUFiLEVBQWdCLEtBQUszTixDQUFyQixFQUF3QixLQUFLd00sQ0FBTCxHQUFTWSxDQUFqQyxFQUFvQyxLQUFLRCxPQUF6QyxDQUFQO0FBQ0QsR0FSNEI7QUFTN0J0QixFQUFBQSxHQUFHLEVBQUUsWUFBVztBQUNkLFFBQUk4QixDQUFDLEdBQUcsS0FBS0EsQ0FBTCxHQUFTLEdBQVQsR0FBZSxDQUFDLEtBQUtBLENBQUwsR0FBUyxDQUFWLElBQWUsR0FBdEM7QUFBQSxRQUNJM04sQ0FBQyxHQUFHd04sS0FBSyxDQUFDRyxDQUFELENBQUwsSUFBWUgsS0FBSyxDQUFDLEtBQUt4TixDQUFOLENBQWpCLEdBQTRCLENBQTVCLEdBQWdDLEtBQUtBLENBRDdDO0FBQUEsUUFFSXdNLENBQUMsR0FBRyxLQUFLQSxDQUZiO0FBQUEsUUFHSXNCLEVBQUUsR0FBR3RCLENBQUMsR0FBRyxDQUFDQSxDQUFDLEdBQUcsR0FBSixHQUFVQSxDQUFWLEdBQWMsSUFBSUEsQ0FBbkIsSUFBd0J4TSxDQUhyQztBQUFBLFFBSUl4UyxFQUFFLEdBQUcsSUFBSWdmLENBQUosR0FBUXNCLEVBSmpCO0FBS0EsV0FBTyxJQUFJakIsR0FBSixDQUNMa0IsT0FBTyxDQUFDSixDQUFDLElBQUksR0FBTCxHQUFXQSxDQUFDLEdBQUcsR0FBZixHQUFxQkEsQ0FBQyxHQUFHLEdBQTFCLEVBQStCbmdCLEVBQS9CLEVBQW1Dc2dCLEVBQW5DLENBREYsRUFFTEMsT0FBTyxDQUFDSixDQUFELEVBQUluZ0IsRUFBSixFQUFRc2dCLEVBQVIsQ0FGRixFQUdMQyxPQUFPLENBQUNKLENBQUMsR0FBRyxHQUFKLEdBQVVBLENBQUMsR0FBRyxHQUFkLEdBQW9CQSxDQUFDLEdBQUcsR0FBekIsRUFBOEJuZ0IsRUFBOUIsRUFBa0NzZ0IsRUFBbEMsQ0FIRixFQUlMLEtBQUtYLE9BSkEsQ0FBUDtBQU1ELEdBckI0QjtBQXNCN0J2QixFQUFBQSxXQUFXLEVBQUUsWUFBVztBQUN0QixXQUFPLENBQUMsS0FBSyxLQUFLNUwsQ0FBVixJQUFlLEtBQUtBLENBQUwsSUFBVSxDQUF6QixJQUE4QndOLEtBQUssQ0FBQyxLQUFLeE4sQ0FBTixDQUFwQyxLQUNDLEtBQUssS0FBS3dNLENBQVYsSUFBZSxLQUFLQSxDQUFMLElBQVUsQ0FEMUIsSUFFQyxLQUFLLEtBQUtXLE9BQVYsSUFBcUIsS0FBS0EsT0FBTCxJQUFnQixDQUY3QztBQUdELEdBMUI0QjtBQTJCN0JsQixFQUFBQSxTQUFTLEVBQUUsWUFBVztBQUNwQixRQUFJOWQsQ0FBQyxHQUFHLEtBQUtnZixPQUFiO0FBQXNCaGYsSUFBQUEsQ0FBQyxHQUFHcWYsS0FBSyxDQUFDcmYsQ0FBRCxDQUFMLEdBQVcsQ0FBWCxHQUFlVixJQUFJLENBQUNnZ0IsR0FBTCxDQUFTLENBQVQsRUFBWWhnQixJQUFJLENBQUNDLEdBQUwsQ0FBUyxDQUFULEVBQVlTLENBQVosQ0FBWixDQUFuQjtBQUN0QixXQUFPLENBQUNBLENBQUMsS0FBSyxDQUFOLEdBQVUsTUFBVixHQUFtQixPQUFwQixLQUNBLEtBQUt3ZixDQUFMLElBQVUsQ0FEVixJQUNlLElBRGYsR0FFRCxDQUFDLEtBQUszTixDQUFMLElBQVUsQ0FBWCxJQUFnQixHQUZmLEdBRXFCLEtBRnJCLEdBR0QsQ0FBQyxLQUFLd00sQ0FBTCxJQUFVLENBQVgsSUFBZ0IsR0FIZixHQUdxQixHQUhyQixJQUlBcmUsQ0FBQyxLQUFLLENBQU4sR0FBVSxHQUFWLEdBQWdCLE9BQU9BLENBQVAsR0FBVyxHQUozQixDQUFQO0FBS0Q7QUFsQzRCLENBQVIsQ0FBakIsQ0FBTjtBQXFDQTs7QUFDQSxTQUFTNGYsT0FBVCxDQUFpQkosQ0FBakIsRUFBb0JuZ0IsRUFBcEIsRUFBd0JzZ0IsRUFBeEIsRUFBNEI7QUFDMUIsU0FBTyxDQUFDSCxDQUFDLEdBQUcsRUFBSixHQUFTbmdCLEVBQUUsR0FBRyxDQUFDc2dCLEVBQUUsR0FBR3RnQixFQUFOLElBQVltZ0IsQ0FBWixHQUFnQixFQUE5QixHQUNGQSxDQUFDLEdBQUcsR0FBSixHQUFVRyxFQUFWLEdBQ0FILENBQUMsR0FBRyxHQUFKLEdBQVVuZ0IsRUFBRSxHQUFHLENBQUNzZ0IsRUFBRSxHQUFHdGdCLEVBQU4sS0FBYSxNQUFNbWdCLENBQW5CLElBQXdCLEVBQXZDLEdBQ0FuZ0IsRUFIQyxJQUdLLEdBSFo7QUFJRCxDOztBQ2xYTSxTQUFTd2dCLEtBQVQsQ0FBZTlSLEVBQWYsRUFBbUIrUixFQUFuQixFQUF1QkMsRUFBdkIsRUFBMkJDLEVBQTNCLEVBQStCQyxFQUEvQixFQUFtQztBQUN4QyxNQUFJalMsRUFBRSxHQUFHRCxFQUFFLEdBQUdBLEVBQWQ7QUFBQSxNQUFrQm1TLEVBQUUsR0FBR2xTLEVBQUUsR0FBR0QsRUFBNUI7QUFDQSxTQUFPLENBQUMsQ0FBQyxJQUFJLElBQUlBLEVBQVIsR0FBYSxJQUFJQyxFQUFqQixHQUFzQmtTLEVBQXZCLElBQTZCSixFQUE3QixHQUNGLENBQUMsSUFBSSxJQUFJOVIsRUFBUixHQUFhLElBQUlrUyxFQUFsQixJQUF3QkgsRUFEdEIsR0FFRixDQUFDLElBQUksSUFBSWhTLEVBQVIsR0FBYSxJQUFJQyxFQUFqQixHQUFzQixJQUFJa1MsRUFBM0IsSUFBaUNGLEVBRi9CLEdBR0ZFLEVBQUUsR0FBR0QsRUFISixJQUdVLENBSGpCO0FBSUQ7QUFFRCw2QkFBZSxtQkFBU0UsTUFBVCxFQUFpQjtBQUM5QixNQUFJdG1CLENBQUMsR0FBR3NtQixNQUFNLENBQUMzbUIsTUFBUCxHQUFnQixDQUF4QjtBQUNBLFNBQU8sVUFBU2tOLENBQVQsRUFBWTtBQUNqQixRQUFJek0sQ0FBQyxHQUFHeU0sQ0FBQyxJQUFJLENBQUwsR0FBVUEsQ0FBQyxHQUFHLENBQWQsR0FBbUJBLENBQUMsSUFBSSxDQUFMLElBQVVBLENBQUMsR0FBRyxDQUFKLEVBQU83TSxDQUFDLEdBQUcsQ0FBckIsSUFBMEJ5RixJQUFJLENBQUM4Z0IsS0FBTCxDQUFXMVosQ0FBQyxHQUFHN00sQ0FBZixDQUFyRDtBQUFBLFFBQ0lrbUIsRUFBRSxHQUFHSSxNQUFNLENBQUNsbUIsQ0FBRCxDQURmO0FBQUEsUUFFSStsQixFQUFFLEdBQUdHLE1BQU0sQ0FBQ2xtQixDQUFDLEdBQUcsQ0FBTCxDQUZmO0FBQUEsUUFHSTZsQixFQUFFLEdBQUc3bEIsQ0FBQyxHQUFHLENBQUosR0FBUWttQixNQUFNLENBQUNsbUIsQ0FBQyxHQUFHLENBQUwsQ0FBZCxHQUF3QixJQUFJOGxCLEVBQUosR0FBU0MsRUFIMUM7QUFBQSxRQUlJQyxFQUFFLEdBQUdobUIsQ0FBQyxHQUFHSixDQUFDLEdBQUcsQ0FBUixHQUFZc21CLE1BQU0sQ0FBQ2xtQixDQUFDLEdBQUcsQ0FBTCxDQUFsQixHQUE0QixJQUFJK2xCLEVBQUosR0FBU0QsRUFKOUM7QUFLQSxXQUFPRixLQUFLLENBQUMsQ0FBQ25aLENBQUMsR0FBR3pNLENBQUMsR0FBR0osQ0FBVCxJQUFjQSxDQUFmLEVBQWtCaW1CLEVBQWxCLEVBQXNCQyxFQUF0QixFQUEwQkMsRUFBMUIsRUFBOEJDLEVBQTlCLENBQVo7QUFDRCxHQVBEO0FBUUQsQzs7QUNsQkQ7QUFFQSw2QkFBZSxxQkFBU0UsTUFBVCxFQUFpQjtBQUM5QixNQUFJdG1CLENBQUMsR0FBR3NtQixNQUFNLENBQUMzbUIsTUFBZjtBQUNBLFNBQU8sVUFBU2tOLENBQVQsRUFBWTtBQUNqQixRQUFJek0sQ0FBQyxHQUFHcUYsSUFBSSxDQUFDOGdCLEtBQUwsQ0FBVyxDQUFDLENBQUMxWixDQUFDLElBQUksQ0FBTixJQUFXLENBQVgsR0FBZSxFQUFFQSxDQUFqQixHQUFxQkEsQ0FBdEIsSUFBMkI3TSxDQUF0QyxDQUFSO0FBQUEsUUFDSWltQixFQUFFLEdBQUdLLE1BQU0sQ0FBQyxDQUFDbG1CLENBQUMsR0FBR0osQ0FBSixHQUFRLENBQVQsSUFBY0EsQ0FBZixDQURmO0FBQUEsUUFFSWttQixFQUFFLEdBQUdJLE1BQU0sQ0FBQ2xtQixDQUFDLEdBQUdKLENBQUwsQ0FGZjtBQUFBLFFBR0ltbUIsRUFBRSxHQUFHRyxNQUFNLENBQUMsQ0FBQ2xtQixDQUFDLEdBQUcsQ0FBTCxJQUFVSixDQUFYLENBSGY7QUFBQSxRQUlJb21CLEVBQUUsR0FBR0UsTUFBTSxDQUFDLENBQUNsbUIsQ0FBQyxHQUFHLENBQUwsSUFBVUosQ0FBWCxDQUpmO0FBS0EsV0FBT2dtQixLQUFLLENBQUMsQ0FBQ25aLENBQUMsR0FBR3pNLENBQUMsR0FBR0osQ0FBVCxJQUFjQSxDQUFmLEVBQWtCaW1CLEVBQWxCLEVBQXNCQyxFQUF0QixFQUEwQkMsRUFBMUIsRUFBOEJDLEVBQTlCLENBQVo7QUFDRCxHQVBEO0FBUUQsQzs7QUNaRCxrRUFBZTNsQixDQUFDLElBQUksTUFBTUEsQ0FBMUIsRTs7QUNBQTs7QUFFQSxTQUFTK2xCLE1BQVQsQ0FBZ0JyZ0IsQ0FBaEIsRUFBbUJ1USxDQUFuQixFQUFzQjtBQUNwQixTQUFPLFVBQVM3SixDQUFULEVBQVk7QUFDakIsV0FBTzFHLENBQUMsR0FBRzBHLENBQUMsR0FBRzZKLENBQWY7QUFDRCxHQUZEO0FBR0Q7O0FBRUQsU0FBUytQLFdBQVQsQ0FBcUJ0Z0IsQ0FBckIsRUFBd0JDLENBQXhCLEVBQTJCc2dCLENBQTNCLEVBQThCO0FBQzVCLFNBQU92Z0IsQ0FBQyxHQUFHVixJQUFJLENBQUM0ZixHQUFMLENBQVNsZixDQUFULEVBQVl1Z0IsQ0FBWixDQUFKLEVBQW9CdGdCLENBQUMsR0FBR1gsSUFBSSxDQUFDNGYsR0FBTCxDQUFTamYsQ0FBVCxFQUFZc2dCLENBQVosSUFBaUJ2Z0IsQ0FBekMsRUFBNEN1Z0IsQ0FBQyxHQUFHLElBQUlBLENBQXBELEVBQXVELFVBQVM3WixDQUFULEVBQVk7QUFDeEUsV0FBT3BILElBQUksQ0FBQzRmLEdBQUwsQ0FBU2xmLENBQUMsR0FBRzBHLENBQUMsR0FBR3pHLENBQWpCLEVBQW9Cc2dCLENBQXBCLENBQVA7QUFDRCxHQUZEO0FBR0Q7O0FBRU0sU0FBU0MsR0FBVCxDQUFheGdCLENBQWIsRUFBZ0JDLENBQWhCLEVBQW1CO0FBQ3hCLE1BQUlzUSxDQUFDLEdBQUd0USxDQUFDLEdBQUdELENBQVo7QUFDQSxTQUFPdVEsQ0FBQyxHQUFHOFAsTUFBTSxDQUFDcmdCLENBQUQsRUFBSXVRLENBQUMsR0FBRyxHQUFKLElBQVdBLENBQUMsR0FBRyxDQUFDLEdBQWhCLEdBQXNCQSxDQUFDLEdBQUcsTUFBTWpSLElBQUksQ0FBQ2lnQixLQUFMLENBQVdoUCxDQUFDLEdBQUcsR0FBZixDQUFoQyxHQUFzREEsQ0FBMUQsQ0FBVCxHQUF3RXpULDJCQUFRLENBQUN1aUIsS0FBSyxDQUFDcmYsQ0FBRCxDQUFMLEdBQVdDLENBQVgsR0FBZUQsQ0FBaEIsQ0FBeEY7QUFDRDtBQUVNLFNBQVN5Z0IsS0FBVCxDQUFlRixDQUFmLEVBQWtCO0FBQ3ZCLFNBQU8sQ0FBQ0EsQ0FBQyxHQUFHLENBQUNBLENBQU4sTUFBYSxDQUFiLEdBQWlCRyxPQUFqQixHQUEyQixVQUFTMWdCLENBQVQsRUFBWUMsQ0FBWixFQUFlO0FBQy9DLFdBQU9BLENBQUMsR0FBR0QsQ0FBSixHQUFRc2dCLFdBQVcsQ0FBQ3RnQixDQUFELEVBQUlDLENBQUosRUFBT3NnQixDQUFQLENBQW5CLEdBQStCempCLDJCQUFRLENBQUN1aUIsS0FBSyxDQUFDcmYsQ0FBRCxDQUFMLEdBQVdDLENBQVgsR0FBZUQsQ0FBaEIsQ0FBOUM7QUFDRCxHQUZEO0FBR0Q7QUFFYyxTQUFTMGdCLE9BQVQsQ0FBaUIxZ0IsQ0FBakIsRUFBb0JDLENBQXBCLEVBQXVCO0FBQ3BDLE1BQUlzUSxDQUFDLEdBQUd0USxDQUFDLEdBQUdELENBQVo7QUFDQSxTQUFPdVEsQ0FBQyxHQUFHOFAsTUFBTSxDQUFDcmdCLENBQUQsRUFBSXVRLENBQUosQ0FBVCxHQUFrQnpULDJCQUFRLENBQUN1aUIsS0FBSyxDQUFDcmYsQ0FBRCxDQUFMLEdBQVdDLENBQVgsR0FBZUQsQ0FBaEIsQ0FBbEM7QUFDRCxDOztBQzVCRDtBQUNBO0FBQ0E7QUFDQTtBQUVBLDBDQUFlLENBQUMsU0FBUzZnQixRQUFULENBQWtCTixDQUFsQixFQUFxQjtBQUNuQyxNQUFJakQsS0FBSyxHQUFHbUQsS0FBSyxDQUFDRixDQUFELENBQWpCOztBQUVBLFdBQVM3QyxHQUFULENBQWFoTyxLQUFiLEVBQW9Cb1IsR0FBcEIsRUFBeUI7QUFDdkIsUUFBSWpDLENBQUMsR0FBR3ZCLEtBQUssQ0FBQyxDQUFDNU4sS0FBSyxHQUFHaVIsU0FBUSxDQUFDalIsS0FBRCxDQUFqQixFQUEwQm1QLENBQTNCLEVBQThCLENBQUNpQyxHQUFHLEdBQUdILFNBQVEsQ0FBQ0csR0FBRCxDQUFmLEVBQXNCakMsQ0FBcEQsQ0FBYjtBQUFBLFFBQ0lDLENBQUMsR0FBR3hCLEtBQUssQ0FBQzVOLEtBQUssQ0FBQ29QLENBQVAsRUFBVWdDLEdBQUcsQ0FBQ2hDLENBQWQsQ0FEYjtBQUFBLFFBRUk3ZSxDQUFDLEdBQUdxZCxLQUFLLENBQUM1TixLQUFLLENBQUN6UCxDQUFQLEVBQVU2Z0IsR0FBRyxDQUFDN2dCLENBQWQsQ0FGYjtBQUFBLFFBR0krZSxPQUFPLEdBQUcwQixPQUFPLENBQUNoUixLQUFLLENBQUNzUCxPQUFQLEVBQWdCOEIsR0FBRyxDQUFDOUIsT0FBcEIsQ0FIckI7QUFJQSxXQUFPLFVBQVN0WSxDQUFULEVBQVk7QUFDakJnSixNQUFBQSxLQUFLLENBQUNtUCxDQUFOLEdBQVVBLENBQUMsQ0FBQ25ZLENBQUQsQ0FBWDtBQUNBZ0osTUFBQUEsS0FBSyxDQUFDb1AsQ0FBTixHQUFVQSxDQUFDLENBQUNwWSxDQUFELENBQVg7QUFDQWdKLE1BQUFBLEtBQUssQ0FBQ3pQLENBQU4sR0FBVUEsQ0FBQyxDQUFDeUcsQ0FBRCxDQUFYO0FBQ0FnSixNQUFBQSxLQUFLLENBQUNzUCxPQUFOLEdBQWdCQSxPQUFPLENBQUN0WSxDQUFELENBQXZCO0FBQ0EsYUFBT2dKLEtBQUssR0FBRyxFQUFmO0FBQ0QsS0FORDtBQU9EOztBQUVEZ08sRUFBQUEsR0FBRyxDQUFDK0MsS0FBSixHQUFZSSxRQUFaO0FBRUEsU0FBT25ELEdBQVA7QUFDRCxDQXBCYyxFQW9CWixDQXBCWSxDQUFmOztBQXNCQSxTQUFTcUQsU0FBVCxDQUFtQkMsTUFBbkIsRUFBMkI7QUFDekIsU0FBTyxVQUFTQyxNQUFULEVBQWlCO0FBQ3RCLFFBQUlwbkIsQ0FBQyxHQUFHb25CLE1BQU0sQ0FBQ3puQixNQUFmO0FBQUEsUUFDSXFsQixDQUFDLEdBQUcsSUFBSW5sQixLQUFKLENBQVVHLENBQVYsQ0FEUjtBQUFBLFFBRUlpbEIsQ0FBQyxHQUFHLElBQUlwbEIsS0FBSixDQUFVRyxDQUFWLENBRlI7QUFBQSxRQUdJb0csQ0FBQyxHQUFHLElBQUl2RyxLQUFKLENBQVVHLENBQVYsQ0FIUjtBQUFBLFFBSUlJLENBSko7QUFBQSxRQUlPcWpCLEtBSlA7O0FBS0EsU0FBS3JqQixDQUFDLEdBQUcsQ0FBVCxFQUFZQSxDQUFDLEdBQUdKLENBQWhCLEVBQW1CLEVBQUVJLENBQXJCLEVBQXdCO0FBQ3RCcWpCLE1BQUFBLEtBQUssR0FBR3FELFNBQVEsQ0FBQ00sTUFBTSxDQUFDaG5CLENBQUQsQ0FBUCxDQUFoQjtBQUNBNGtCLE1BQUFBLENBQUMsQ0FBQzVrQixDQUFELENBQUQsR0FBT3FqQixLQUFLLENBQUN1QixDQUFOLElBQVcsQ0FBbEI7QUFDQUMsTUFBQUEsQ0FBQyxDQUFDN2tCLENBQUQsQ0FBRCxHQUFPcWpCLEtBQUssQ0FBQ3dCLENBQU4sSUFBVyxDQUFsQjtBQUNBN2UsTUFBQUEsQ0FBQyxDQUFDaEcsQ0FBRCxDQUFELEdBQU9xakIsS0FBSyxDQUFDcmQsQ0FBTixJQUFXLENBQWxCO0FBQ0Q7O0FBQ0Q0ZSxJQUFBQSxDQUFDLEdBQUdtQyxNQUFNLENBQUNuQyxDQUFELENBQVY7QUFDQUMsSUFBQUEsQ0FBQyxHQUFHa0MsTUFBTSxDQUFDbEMsQ0FBRCxDQUFWO0FBQ0E3ZSxJQUFBQSxDQUFDLEdBQUcrZ0IsTUFBTSxDQUFDL2dCLENBQUQsQ0FBVjtBQUNBcWQsSUFBQUEsS0FBSyxDQUFDMEIsT0FBTixHQUFnQixDQUFoQjtBQUNBLFdBQU8sVUFBU3RZLENBQVQsRUFBWTtBQUNqQjRXLE1BQUFBLEtBQUssQ0FBQ3VCLENBQU4sR0FBVUEsQ0FBQyxDQUFDblksQ0FBRCxDQUFYO0FBQ0E0VyxNQUFBQSxLQUFLLENBQUN3QixDQUFOLEdBQVVBLENBQUMsQ0FBQ3BZLENBQUQsQ0FBWDtBQUNBNFcsTUFBQUEsS0FBSyxDQUFDcmQsQ0FBTixHQUFVQSxDQUFDLENBQUN5RyxDQUFELENBQVg7QUFDQSxhQUFPNFcsS0FBSyxHQUFHLEVBQWY7QUFDRCxLQUxEO0FBTUQsR0F0QkQ7QUF1QkQ7O0FBRU0sSUFBSTRELFFBQVEsR0FBR0gsU0FBUyxDQUFDbEIsU0FBRCxDQUF4QjtBQUNBLElBQUlzQixjQUFjLEdBQUdKLFNBQVMsQ0FBQ0gsV0FBRCxDQUE5QixDOztBQ3REUDtBQUVBLElBQUlRLEdBQUcsR0FBRyw2Q0FBVjtBQUFBLElBQ0lDLEdBQUcsR0FBRyxJQUFJMU4sTUFBSixDQUFXeU4sR0FBRyxDQUFDRSxNQUFmLEVBQXVCLEdBQXZCLENBRFY7O0FBR0EsU0FBU0MsSUFBVCxDQUFjdGhCLENBQWQsRUFBaUI7QUFDZixTQUFPLFlBQVc7QUFDaEIsV0FBT0EsQ0FBUDtBQUNELEdBRkQ7QUFHRDs7QUFFRCxTQUFTdWhCLEdBQVQsQ0FBYXZoQixDQUFiLEVBQWdCO0FBQ2QsU0FBTyxVQUFTeUcsQ0FBVCxFQUFZO0FBQ2pCLFdBQU96RyxDQUFDLENBQUN5RyxDQUFELENBQUQsR0FBTyxFQUFkO0FBQ0QsR0FGRDtBQUdEOztBQUVELDZCQUFlLGdCQUFTMUcsQ0FBVCxFQUFZQyxDQUFaLEVBQWU7QUFDNUIsTUFBSXdoQixFQUFFLEdBQUdMLEdBQUcsQ0FBQ00sU0FBSixHQUFnQkwsR0FBRyxDQUFDSyxTQUFKLEdBQWdCLENBQXpDO0FBQUEsTUFBNEM7QUFDeENDLEVBQUFBLEVBREo7QUFBQSxNQUNRO0FBQ0pDLEVBQUFBLEVBRko7QUFBQSxNQUVRO0FBQ0pDLEVBQUFBLEVBSEo7QUFBQSxNQUdRO0FBQ0o1bkIsRUFBQUEsQ0FBQyxHQUFHLENBQUMsQ0FKVDtBQUFBLE1BSVk7QUFDUjRYLEVBQUFBLENBQUMsR0FBRyxFQUxSO0FBQUEsTUFLWTtBQUNSTSxFQUFBQSxDQUFDLEdBQUcsRUFOUixDQUQ0QixDQU9oQjtBQUVaOztBQUNBblMsRUFBQUEsQ0FBQyxHQUFHQSxDQUFDLEdBQUcsRUFBUixFQUFZQyxDQUFDLEdBQUdBLENBQUMsR0FBRyxFQUFwQixDQVY0QixDQVk1Qjs7QUFDQSxTQUFPLENBQUMwaEIsRUFBRSxHQUFHUCxHQUFHLENBQUM3QyxJQUFKLENBQVN2ZSxDQUFULENBQU4sTUFDQzRoQixFQUFFLEdBQUdQLEdBQUcsQ0FBQzlDLElBQUosQ0FBU3RlLENBQVQsQ0FETixDQUFQLEVBQzJCO0FBQ3pCLFFBQUksQ0FBQzRoQixFQUFFLEdBQUdELEVBQUUsQ0FBQzdTLEtBQVQsSUFBa0IwUyxFQUF0QixFQUEwQjtBQUFFO0FBQzFCSSxNQUFBQSxFQUFFLEdBQUc1aEIsQ0FBQyxDQUFDZ0IsS0FBRixDQUFRd2dCLEVBQVIsRUFBWUksRUFBWixDQUFMO0FBQ0EsVUFBSWhRLENBQUMsQ0FBQzVYLENBQUQsQ0FBTCxFQUFVNFgsQ0FBQyxDQUFDNVgsQ0FBRCxDQUFELElBQVE0bkIsRUFBUixDQUFWLENBQXNCO0FBQXRCLFdBQ0toUSxDQUFDLENBQUMsRUFBRTVYLENBQUgsQ0FBRCxHQUFTNG5CLEVBQVQ7QUFDTjs7QUFDRCxRQUFJLENBQUNGLEVBQUUsR0FBR0EsRUFBRSxDQUFDLENBQUQsQ0FBUixPQUFrQkMsRUFBRSxHQUFHQSxFQUFFLENBQUMsQ0FBRCxDQUF6QixDQUFKLEVBQW1DO0FBQUU7QUFDbkMsVUFBSS9QLENBQUMsQ0FBQzVYLENBQUQsQ0FBTCxFQUFVNFgsQ0FBQyxDQUFDNVgsQ0FBRCxDQUFELElBQVEybkIsRUFBUixDQUFWLENBQXNCO0FBQXRCLFdBQ0svUCxDQUFDLENBQUMsRUFBRTVYLENBQUgsQ0FBRCxHQUFTMm5CLEVBQVQ7QUFDTixLQUhELE1BR087QUFBRTtBQUNQL1AsTUFBQUEsQ0FBQyxDQUFDLEVBQUU1WCxDQUFILENBQUQsR0FBUyxJQUFUO0FBQ0FrWSxNQUFBQSxDQUFDLENBQUNuWCxJQUFGLENBQU87QUFBQ2YsUUFBQUEsQ0FBQyxFQUFFQSxDQUFKO0FBQU9LLFFBQUFBLENBQUMsRUFBRWdYLE1BQU0sQ0FBQ3FRLEVBQUQsRUFBS0MsRUFBTDtBQUFoQixPQUFQO0FBQ0Q7O0FBQ0RILElBQUFBLEVBQUUsR0FBR0osR0FBRyxDQUFDSyxTQUFUO0FBQ0QsR0E1QjJCLENBOEI1Qjs7O0FBQ0EsTUFBSUQsRUFBRSxHQUFHeGhCLENBQUMsQ0FBQ3pHLE1BQVgsRUFBbUI7QUFDakJxb0IsSUFBQUEsRUFBRSxHQUFHNWhCLENBQUMsQ0FBQ2dCLEtBQUYsQ0FBUXdnQixFQUFSLENBQUw7QUFDQSxRQUFJNVAsQ0FBQyxDQUFDNVgsQ0FBRCxDQUFMLEVBQVU0WCxDQUFDLENBQUM1WCxDQUFELENBQUQsSUFBUTRuQixFQUFSLENBQVYsQ0FBc0I7QUFBdEIsU0FDS2hRLENBQUMsQ0FBQyxFQUFFNVgsQ0FBSCxDQUFELEdBQVM0bkIsRUFBVDtBQUNOLEdBbkMyQixDQXFDNUI7QUFDQTs7O0FBQ0EsU0FBT2hRLENBQUMsQ0FBQ3JZLE1BQUYsR0FBVyxDQUFYLEdBQWdCMlksQ0FBQyxDQUFDLENBQUQsQ0FBRCxHQUNqQnFQLEdBQUcsQ0FBQ3JQLENBQUMsQ0FBQyxDQUFELENBQUQsQ0FBSzdYLENBQU4sQ0FEYyxHQUVqQmluQixJQUFJLENBQUN0aEIsQ0FBRCxDQUZILElBR0FBLENBQUMsR0FBR2tTLENBQUMsQ0FBQzNZLE1BQU4sRUFBYyxVQUFTa04sQ0FBVCxFQUFZO0FBQ3pCLFNBQUssSUFBSXpNLENBQUMsR0FBRyxDQUFSLEVBQVcrTSxDQUFoQixFQUFtQi9NLENBQUMsR0FBR2dHLENBQXZCLEVBQTBCLEVBQUVoRyxDQUE1QixFQUErQjRYLENBQUMsQ0FBQyxDQUFDN0ssQ0FBQyxHQUFHbUwsQ0FBQyxDQUFDbFksQ0FBRCxDQUFOLEVBQVdBLENBQVosQ0FBRCxHQUFrQitNLENBQUMsQ0FBQzFNLENBQUYsQ0FBSW9NLENBQUosQ0FBbEI7O0FBQy9CLFdBQU9tTCxDQUFDLENBQUNoTyxJQUFGLENBQU8sRUFBUCxDQUFQO0FBQ0QsR0FOQSxDQUFQO0FBT0QsQzs7QUMvREQ7QUFDQTtBQUVBLDZCQUFlLGdDQUFTN0QsQ0FBVCxFQUFZQyxDQUFaLEVBQWU7QUFDNUIsTUFBSXdMLENBQUo7QUFDQSxTQUFPLENBQUMsT0FBT3hMLENBQVAsS0FBYSxRQUFiLEdBQXdCNmhCLE1BQXhCLEdBQ0Y3aEIsQ0FBQyxZQUFZcWQsS0FBYixHQUFxQnlFLEdBQXJCLEdBQ0EsQ0FBQ3RXLENBQUMsR0FBRzZSLEtBQUssQ0FBQ3JkLENBQUQsQ0FBVixLQUFrQkEsQ0FBQyxHQUFHd0wsQ0FBSixFQUFPc1csR0FBekIsSUFDQUMsTUFIQyxFQUdrQmhpQixDQUhsQixFQUdxQkMsQ0FIckIsQ0FBUDtBQUlELEM7O0FDVEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBU3FCLGVBQVQsQ0FBb0JSLElBQXBCLEVBQTBCO0FBQ3hCLFNBQU8sWUFBVztBQUNoQixTQUFLUyxlQUFMLENBQXFCVCxJQUFyQjtBQUNELEdBRkQ7QUFHRDs7QUFFRCxTQUFTVSxpQkFBVCxDQUFzQkMsUUFBdEIsRUFBZ0M7QUFDOUIsU0FBTyxZQUFXO0FBQ2hCLFNBQUtDLGlCQUFMLENBQXVCRCxRQUFRLENBQUNOLEtBQWhDLEVBQXVDTSxRQUFRLENBQUNMLEtBQWhEO0FBQ0QsR0FGRDtBQUdEOztBQUVELFNBQVNPLGlCQUFULENBQXNCYixJQUF0QixFQUE0Qm1oQixXQUE1QixFQUF5Q0MsTUFBekMsRUFBaUQ7QUFDL0MsTUFBSUMsUUFBSjtBQUFBLE1BQ0lDLE9BQU8sR0FBR0YsTUFBTSxHQUFHLEVBRHZCO0FBQUEsTUFFSUcsWUFGSjtBQUdBLFNBQU8sWUFBVztBQUNoQixRQUFJQyxPQUFPLEdBQUcsS0FBS25nQixZQUFMLENBQWtCckIsSUFBbEIsQ0FBZDtBQUNBLFdBQU93aEIsT0FBTyxLQUFLRixPQUFaLEdBQXNCLElBQXRCLEdBQ0RFLE9BQU8sS0FBS0gsUUFBWixHQUF1QkUsWUFBdkIsR0FDQUEsWUFBWSxHQUFHSixXQUFXLENBQUNFLFFBQVEsR0FBR0csT0FBWixFQUFxQkosTUFBckIsQ0FGaEM7QUFHRCxHQUxEO0FBTUQ7O0FBRUQsU0FBU3JnQixtQkFBVCxDQUF3QkosUUFBeEIsRUFBa0N3Z0IsV0FBbEMsRUFBK0NDLE1BQS9DLEVBQXVEO0FBQ3JELE1BQUlDLFFBQUo7QUFBQSxNQUNJQyxPQUFPLEdBQUdGLE1BQU0sR0FBRyxFQUR2QjtBQUFBLE1BRUlHLFlBRko7QUFHQSxTQUFPLFlBQVc7QUFDaEIsUUFBSUMsT0FBTyxHQUFHLEtBQUtwZ0IsY0FBTCxDQUFvQlQsUUFBUSxDQUFDTixLQUE3QixFQUFvQ00sUUFBUSxDQUFDTCxLQUE3QyxDQUFkO0FBQ0EsV0FBT2toQixPQUFPLEtBQUtGLE9BQVosR0FBc0IsSUFBdEIsR0FDREUsT0FBTyxLQUFLSCxRQUFaLEdBQXVCRSxZQUF2QixHQUNBQSxZQUFZLEdBQUdKLFdBQVcsQ0FBQ0UsUUFBUSxHQUFHRyxPQUFaLEVBQXFCSixNQUFyQixDQUZoQztBQUdELEdBTEQ7QUFNRDs7QUFFRCxTQUFTbmdCLGlCQUFULENBQXNCakIsSUFBdEIsRUFBNEJtaEIsV0FBNUIsRUFBeUNsa0IsS0FBekMsRUFBZ0Q7QUFDOUMsTUFBSW9rQixRQUFKLEVBQ0lJLFFBREosRUFFSUYsWUFGSjtBQUdBLFNBQU8sWUFBVztBQUNoQixRQUFJQyxPQUFKO0FBQUEsUUFBYUosTUFBTSxHQUFHbmtCLEtBQUssQ0FBQyxJQUFELENBQTNCO0FBQUEsUUFBbUNxa0IsT0FBbkM7QUFDQSxRQUFJRixNQUFNLElBQUksSUFBZCxFQUFvQixPQUFPLEtBQUssS0FBSzNnQixlQUFMLENBQXFCVCxJQUFyQixDQUFaO0FBQ3BCd2hCLElBQUFBLE9BQU8sR0FBRyxLQUFLbmdCLFlBQUwsQ0FBa0JyQixJQUFsQixDQUFWO0FBQ0FzaEIsSUFBQUEsT0FBTyxHQUFHRixNQUFNLEdBQUcsRUFBbkI7QUFDQSxXQUFPSSxPQUFPLEtBQUtGLE9BQVosR0FBc0IsSUFBdEIsR0FDREUsT0FBTyxLQUFLSCxRQUFaLElBQXdCQyxPQUFPLEtBQUtHLFFBQXBDLEdBQStDRixZQUEvQyxJQUNDRSxRQUFRLEdBQUdILE9BQVgsRUFBb0JDLFlBQVksR0FBR0osV0FBVyxDQUFDRSxRQUFRLEdBQUdHLE9BQVosRUFBcUJKLE1BQXJCLENBRC9DLENBRE47QUFHRCxHQVJEO0FBU0Q7O0FBRUQsU0FBU2pnQixtQkFBVCxDQUF3QlIsUUFBeEIsRUFBa0N3Z0IsV0FBbEMsRUFBK0Nsa0IsS0FBL0MsRUFBc0Q7QUFDcEQsTUFBSW9rQixRQUFKLEVBQ0lJLFFBREosRUFFSUYsWUFGSjtBQUdBLFNBQU8sWUFBVztBQUNoQixRQUFJQyxPQUFKO0FBQUEsUUFBYUosTUFBTSxHQUFHbmtCLEtBQUssQ0FBQyxJQUFELENBQTNCO0FBQUEsUUFBbUNxa0IsT0FBbkM7QUFDQSxRQUFJRixNQUFNLElBQUksSUFBZCxFQUFvQixPQUFPLEtBQUssS0FBS3hnQixpQkFBTCxDQUF1QkQsUUFBUSxDQUFDTixLQUFoQyxFQUF1Q00sUUFBUSxDQUFDTCxLQUFoRCxDQUFaO0FBQ3BCa2hCLElBQUFBLE9BQU8sR0FBRyxLQUFLcGdCLGNBQUwsQ0FBb0JULFFBQVEsQ0FBQ04sS0FBN0IsRUFBb0NNLFFBQVEsQ0FBQ0wsS0FBN0MsQ0FBVjtBQUNBZ2hCLElBQUFBLE9BQU8sR0FBR0YsTUFBTSxHQUFHLEVBQW5CO0FBQ0EsV0FBT0ksT0FBTyxLQUFLRixPQUFaLEdBQXNCLElBQXRCLEdBQ0RFLE9BQU8sS0FBS0gsUUFBWixJQUF3QkMsT0FBTyxLQUFLRyxRQUFwQyxHQUErQ0YsWUFBL0MsSUFDQ0UsUUFBUSxHQUFHSCxPQUFYLEVBQW9CQyxZQUFZLEdBQUdKLFdBQVcsQ0FBQ0UsUUFBUSxHQUFHRyxPQUFaLEVBQXFCSixNQUFyQixDQUQvQyxDQUROO0FBR0QsR0FSRDtBQVNEOztBQUVELDZCQUFlLHlCQUFTcGhCLElBQVQsRUFBZS9DLEtBQWYsRUFBc0I7QUFDbkMsTUFBSTBELFFBQVEsR0FBR0osU0FBUyxDQUFDUCxJQUFELENBQXhCO0FBQUEsTUFBZ0M3RyxDQUFDLEdBQUd3SCxRQUFRLEtBQUssV0FBYixHQUEyQjhQLHVCQUEzQixHQUFrRDBRLHNCQUF0RjtBQUNBLFNBQU8sS0FBS08sU0FBTCxDQUFlMWhCLElBQWYsRUFBcUIsT0FBTy9DLEtBQVAsS0FBaUIsVUFBakIsR0FDdEIsQ0FBQzBELFFBQVEsQ0FBQ0wsS0FBVCxHQUFpQmEsbUJBQWpCLEdBQWtDRixpQkFBbkMsRUFBaUROLFFBQWpELEVBQTJEeEgsQ0FBM0QsRUFBOEQyWSxVQUFVLENBQUMsSUFBRCxFQUFPLFVBQVU5UixJQUFqQixFQUF1Qi9DLEtBQXZCLENBQXhFLENBRHNCLEdBRXRCQSxLQUFLLElBQUksSUFBVCxHQUFnQixDQUFDMEQsUUFBUSxDQUFDTCxLQUFULEdBQWlCSSxpQkFBakIsR0FBZ0NGLGVBQWpDLEVBQTZDRyxRQUE3QyxDQUFoQixHQUNBLENBQUNBLFFBQVEsQ0FBQ0wsS0FBVCxHQUFpQlMsbUJBQWpCLEdBQWtDRixpQkFBbkMsRUFBaURGLFFBQWpELEVBQTJEeEgsQ0FBM0QsRUFBOEQ4RCxLQUE5RCxDQUhDLENBQVA7QUFJRCxDOztBQzdFRDs7QUFFQSxTQUFTMGtCLGVBQVQsQ0FBeUIzaEIsSUFBekIsRUFBK0I3RyxDQUEvQixFQUFrQztBQUNoQyxTQUFPLFVBQVN5TSxDQUFULEVBQVk7QUFDakIsU0FBSzlFLFlBQUwsQ0FBa0JkLElBQWxCLEVBQXdCN0csQ0FBQyxDQUFDQyxJQUFGLENBQU8sSUFBUCxFQUFhd00sQ0FBYixDQUF4QjtBQUNELEdBRkQ7QUFHRDs7QUFFRCxTQUFTZ2MsaUJBQVQsQ0FBMkJqaEIsUUFBM0IsRUFBcUN4SCxDQUFyQyxFQUF3QztBQUN0QyxTQUFPLFVBQVN5TSxDQUFULEVBQVk7QUFDakIsU0FBSzVFLGNBQUwsQ0FBb0JMLFFBQVEsQ0FBQ04sS0FBN0IsRUFBb0NNLFFBQVEsQ0FBQ0wsS0FBN0MsRUFBb0RuSCxDQUFDLENBQUNDLElBQUYsQ0FBTyxJQUFQLEVBQWF3TSxDQUFiLENBQXBEO0FBQ0QsR0FGRDtBQUdEOztBQUVELFNBQVNpYyxXQUFULENBQXFCbGhCLFFBQXJCLEVBQStCMUQsS0FBL0IsRUFBc0M7QUFDcEMsTUFBSStQLEVBQUosRUFBUXpQLEVBQVI7O0FBQ0EsV0FBUzhRLEtBQVQsR0FBaUI7QUFDZixRQUFJbFYsQ0FBQyxHQUFHOEQsS0FBSyxDQUFDbEQsS0FBTixDQUFZLElBQVosRUFBa0JDLFNBQWxCLENBQVI7QUFDQSxRQUFJYixDQUFDLEtBQUtvRSxFQUFWLEVBQWN5UCxFQUFFLEdBQUcsQ0FBQ3pQLEVBQUUsR0FBR3BFLENBQU4sS0FBWXlvQixpQkFBaUIsQ0FBQ2poQixRQUFELEVBQVd4SCxDQUFYLENBQWxDO0FBQ2QsV0FBTzZULEVBQVA7QUFDRDs7QUFDRHFCLEVBQUFBLEtBQUssQ0FBQ3lULE1BQU4sR0FBZTdrQixLQUFmO0FBQ0EsU0FBT29SLEtBQVA7QUFDRDs7QUFFRCxTQUFTcVQsU0FBVCxDQUFtQjFoQixJQUFuQixFQUF5Qi9DLEtBQXpCLEVBQWdDO0FBQzlCLE1BQUkrUCxFQUFKLEVBQVF6UCxFQUFSOztBQUNBLFdBQVM4USxLQUFULEdBQWlCO0FBQ2YsUUFBSWxWLENBQUMsR0FBRzhELEtBQUssQ0FBQ2xELEtBQU4sQ0FBWSxJQUFaLEVBQWtCQyxTQUFsQixDQUFSO0FBQ0EsUUFBSWIsQ0FBQyxLQUFLb0UsRUFBVixFQUFjeVAsRUFBRSxHQUFHLENBQUN6UCxFQUFFLEdBQUdwRSxDQUFOLEtBQVl3b0IsZUFBZSxDQUFDM2hCLElBQUQsRUFBTzdHLENBQVAsQ0FBaEM7QUFDZCxXQUFPNlQsRUFBUDtBQUNEOztBQUNEcUIsRUFBQUEsS0FBSyxDQUFDeVQsTUFBTixHQUFlN2tCLEtBQWY7QUFDQSxTQUFPb1IsS0FBUDtBQUNEOztBQUVELDZCQUFlLDhCQUFTck8sSUFBVCxFQUFlL0MsS0FBZixFQUFzQjtBQUNuQyxNQUFJVCxHQUFHLEdBQUcsVUFBVXdELElBQXBCO0FBQ0EsTUFBSWhHLFNBQVMsQ0FBQ3RCLE1BQVYsR0FBbUIsQ0FBdkIsRUFBMEIsT0FBTyxDQUFDOEQsR0FBRyxHQUFHLEtBQUs2UixLQUFMLENBQVc3UixHQUFYLENBQVAsS0FBMkJBLEdBQUcsQ0FBQ3NsQixNQUF0QztBQUMxQixNQUFJN2tCLEtBQUssSUFBSSxJQUFiLEVBQW1CLE9BQU8sS0FBS29SLEtBQUwsQ0FBVzdSLEdBQVgsRUFBZ0IsSUFBaEIsQ0FBUDtBQUNuQixNQUFJLE9BQU9TLEtBQVAsS0FBaUIsVUFBckIsRUFBaUMsTUFBTSxJQUFJbU4sS0FBSixFQUFOO0FBQ2pDLE1BQUl6SixRQUFRLEdBQUdKLFNBQVMsQ0FBQ1AsSUFBRCxDQUF4QjtBQUNBLFNBQU8sS0FBS3FPLEtBQUwsQ0FBVzdSLEdBQVgsRUFBZ0IsQ0FBQ21FLFFBQVEsQ0FBQ0wsS0FBVCxHQUFpQnVoQixXQUFqQixHQUErQkgsU0FBaEMsRUFBMkMvZ0IsUUFBM0MsRUFBcUQxRCxLQUFyRCxDQUFoQixDQUFQO0FBQ0QsQzs7QUMzQ0Q7O0FBRUEsU0FBUzhrQixhQUFULENBQXVCL1QsRUFBdkIsRUFBMkIvUSxLQUEzQixFQUFrQztBQUNoQyxTQUFPLFlBQVc7QUFDaEJ3UixJQUFBQSxJQUFJLENBQUMsSUFBRCxFQUFPVCxFQUFQLENBQUosQ0FBZTVCLEtBQWYsR0FBdUIsQ0FBQ25QLEtBQUssQ0FBQ2xELEtBQU4sQ0FBWSxJQUFaLEVBQWtCQyxTQUFsQixDQUF4QjtBQUNELEdBRkQ7QUFHRDs7QUFFRCxTQUFTZ29CLGFBQVQsQ0FBdUJoVSxFQUF2QixFQUEyQi9RLEtBQTNCLEVBQWtDO0FBQ2hDLFNBQU9BLEtBQUssR0FBRyxDQUFDQSxLQUFULEVBQWdCLFlBQVc7QUFDaEN3UixJQUFBQSxJQUFJLENBQUMsSUFBRCxFQUFPVCxFQUFQLENBQUosQ0FBZTVCLEtBQWYsR0FBdUJuUCxLQUF2QjtBQUNELEdBRkQ7QUFHRDs7QUFFRCw2QkFBZSxlQUFTQSxLQUFULEVBQWdCO0FBQzdCLE1BQUkrUSxFQUFFLEdBQUcsS0FBSzZELEdBQWQ7QUFFQSxTQUFPN1gsU0FBUyxDQUFDdEIsTUFBVixHQUNELEtBQUs0SSxJQUFMLENBQVUsQ0FBQyxPQUFPckUsS0FBUCxLQUFpQixVQUFqQixHQUNQOGtCLGFBRE8sR0FFUEMsYUFGTSxFQUVTaFUsRUFGVCxFQUVhL1EsS0FGYixDQUFWLENBREMsR0FJREYsWUFBRyxDQUFDLEtBQUs5RCxJQUFMLEVBQUQsRUFBYytVLEVBQWQsQ0FBSCxDQUFxQjVCLEtBSjNCO0FBS0QsQzs7QUN0QkQ7O0FBRUEsU0FBUzZWLGdCQUFULENBQTBCalUsRUFBMUIsRUFBOEIvUSxLQUE5QixFQUFxQztBQUNuQyxTQUFPLFlBQVc7QUFDaEJILElBQUFBLFlBQUcsQ0FBQyxJQUFELEVBQU9rUixFQUFQLENBQUgsQ0FBY00sUUFBZCxHQUF5QixDQUFDclIsS0FBSyxDQUFDbEQsS0FBTixDQUFZLElBQVosRUFBa0JDLFNBQWxCLENBQTFCO0FBQ0QsR0FGRDtBQUdEOztBQUVELFNBQVNrb0IsZ0JBQVQsQ0FBMEJsVSxFQUExQixFQUE4Qi9RLEtBQTlCLEVBQXFDO0FBQ25DLFNBQU9BLEtBQUssR0FBRyxDQUFDQSxLQUFULEVBQWdCLFlBQVc7QUFDaENILElBQUFBLFlBQUcsQ0FBQyxJQUFELEVBQU9rUixFQUFQLENBQUgsQ0FBY00sUUFBZCxHQUF5QnJSLEtBQXpCO0FBQ0QsR0FGRDtBQUdEOztBQUVELDZCQUFlLGtCQUFTQSxLQUFULEVBQWdCO0FBQzdCLE1BQUkrUSxFQUFFLEdBQUcsS0FBSzZELEdBQWQ7QUFFQSxTQUFPN1gsU0FBUyxDQUFDdEIsTUFBVixHQUNELEtBQUs0SSxJQUFMLENBQVUsQ0FBQyxPQUFPckUsS0FBUCxLQUFpQixVQUFqQixHQUNQZ2xCLGdCQURPLEdBRVBDLGdCQUZNLEVBRVlsVSxFQUZaLEVBRWdCL1EsS0FGaEIsQ0FBVixDQURDLEdBSURGLFlBQUcsQ0FBQyxLQUFLOUQsSUFBTCxFQUFELEVBQWMrVSxFQUFkLENBQUgsQ0FBcUJNLFFBSjNCO0FBS0QsQzs7QUN0QkQ7O0FBRUEsU0FBUzZULFlBQVQsQ0FBc0JuVSxFQUF0QixFQUEwQi9RLEtBQTFCLEVBQWlDO0FBQy9CLE1BQUksT0FBT0EsS0FBUCxLQUFpQixVQUFyQixFQUFpQyxNQUFNLElBQUltTixLQUFKLEVBQU47QUFDakMsU0FBTyxZQUFXO0FBQ2hCdE4sSUFBQUEsWUFBRyxDQUFDLElBQUQsRUFBT2tSLEVBQVAsQ0FBSCxDQUFjTyxJQUFkLEdBQXFCdFIsS0FBckI7QUFDRCxHQUZEO0FBR0Q7O0FBRUQsNkJBQWUsY0FBU0EsS0FBVCxFQUFnQjtBQUM3QixNQUFJK1EsRUFBRSxHQUFHLEtBQUs2RCxHQUFkO0FBRUEsU0FBTzdYLFNBQVMsQ0FBQ3RCLE1BQVYsR0FDRCxLQUFLNEksSUFBTCxDQUFVNmdCLFlBQVksQ0FBQ25VLEVBQUQsRUFBSy9RLEtBQUwsQ0FBdEIsQ0FEQyxHQUVERixZQUFHLENBQUMsS0FBSzlELElBQUwsRUFBRCxFQUFjK1UsRUFBZCxDQUFILENBQXFCTyxJQUYzQjtBQUdELEM7O0FDZkQ7O0FBRUEsU0FBUzZULFdBQVQsQ0FBcUJwVSxFQUFyQixFQUF5Qi9RLEtBQXpCLEVBQWdDO0FBQzlCLFNBQU8sWUFBVztBQUNoQixRQUFJaUUsQ0FBQyxHQUFHakUsS0FBSyxDQUFDbEQsS0FBTixDQUFZLElBQVosRUFBa0JDLFNBQWxCLENBQVI7QUFDQSxRQUFJLE9BQU9rSCxDQUFQLEtBQWEsVUFBakIsRUFBNkIsTUFBTSxJQUFJa0osS0FBSixFQUFOO0FBQzdCdE4sSUFBQUEsWUFBRyxDQUFDLElBQUQsRUFBT2tSLEVBQVAsQ0FBSCxDQUFjTyxJQUFkLEdBQXFCck4sQ0FBckI7QUFDRCxHQUpEO0FBS0Q7O0FBRUQsNkJBQWUsZ0NBQVNqRSxLQUFULEVBQWdCO0FBQzdCLE1BQUksT0FBT0EsS0FBUCxLQUFpQixVQUFyQixFQUFpQyxNQUFNLElBQUltTixLQUFKLEVBQU47QUFDakMsU0FBTyxLQUFLOUksSUFBTCxDQUFVOGdCLFdBQVcsQ0FBQyxLQUFLdlEsR0FBTixFQUFXNVUsS0FBWCxDQUFyQixDQUFQO0FBQ0QsQzs7QUNiRDtBQUNBO0FBRUEsNkJBQWUsMkJBQVN6QyxLQUFULEVBQWdCO0FBQzdCLE1BQUksT0FBT0EsS0FBUCxLQUFpQixVQUFyQixFQUFpQ0EsS0FBSyxHQUFHTyxPQUFPLENBQUNQLEtBQUQsQ0FBZjs7QUFFakMsT0FBSyxJQUFJakMsTUFBTSxHQUFHLEtBQUtDLE9BQWxCLEVBQTJCQyxDQUFDLEdBQUdGLE1BQU0sQ0FBQ0csTUFBdEMsRUFBOENDLFNBQVMsR0FBRyxJQUFJQyxLQUFKLENBQVVILENBQVYsQ0FBMUQsRUFBd0VJLENBQUMsR0FBRyxDQUFqRixFQUFvRkEsQ0FBQyxHQUFHSixDQUF4RixFQUEyRixFQUFFSSxDQUE3RixFQUFnRztBQUM5RixTQUFLLElBQUlDLEtBQUssR0FBR1AsTUFBTSxDQUFDTSxDQUFELENBQWxCLEVBQXVCRSxDQUFDLEdBQUdELEtBQUssQ0FBQ0osTUFBakMsRUFBeUNNLFFBQVEsR0FBR0wsU0FBUyxDQUFDRSxDQUFELENBQVQsR0FBZSxFQUFuRSxFQUF1RUksSUFBdkUsRUFBNkVFLENBQUMsR0FBRyxDQUF0RixFQUF5RkEsQ0FBQyxHQUFHSixDQUE3RixFQUFnRyxFQUFFSSxDQUFsRyxFQUFxRztBQUNuRyxVQUFJLENBQUNGLElBQUksR0FBR0gsS0FBSyxDQUFDSyxDQUFELENBQWIsS0FBcUJxQixLQUFLLENBQUNwQixJQUFOLENBQVdILElBQVgsRUFBaUJBLElBQUksQ0FBQ0ksUUFBdEIsRUFBZ0NGLENBQWhDLEVBQW1DTCxLQUFuQyxDQUF6QixFQUFvRTtBQUNsRUUsUUFBQUEsUUFBUSxDQUFDa0IsSUFBVCxDQUFjakIsSUFBZDtBQUNEO0FBQ0Y7QUFDRjs7QUFFRCxTQUFPLElBQUlvcEIsVUFBSixDQUFlMXBCLFNBQWYsRUFBMEIsS0FBS1csUUFBL0IsRUFBeUMsS0FBS2dwQixLQUE5QyxFQUFxRCxLQUFLelEsR0FBMUQsQ0FBUDtBQUNELEM7O0FDZkQ7QUFFQSw2QkFBZSwwQkFBU0UsVUFBVCxFQUFxQjtBQUNsQyxNQUFJQSxVQUFVLENBQUNGLEdBQVgsS0FBbUIsS0FBS0EsR0FBNUIsRUFBaUMsTUFBTSxJQUFJekgsS0FBSixFQUFOOztBQUVqQyxPQUFLLElBQUloTSxPQUFPLEdBQUcsS0FBSzVGLE9BQW5CLEVBQTRCNkYsT0FBTyxHQUFHMFQsVUFBVSxDQUFDdlosT0FBakQsRUFBMEQ4RixFQUFFLEdBQUdGLE9BQU8sQ0FBQzFGLE1BQXZFLEVBQStFNkYsRUFBRSxHQUFHRixPQUFPLENBQUMzRixNQUE1RixFQUFvR0QsQ0FBQyxHQUFHK0YsSUFBSSxDQUFDQyxHQUFMLENBQVNILEVBQVQsRUFBYUMsRUFBYixDQUF4RyxFQUEwSEcsTUFBTSxHQUFHLElBQUk5RixLQUFKLENBQVUwRixFQUFWLENBQW5JLEVBQWtKekYsQ0FBQyxHQUFHLENBQTNKLEVBQThKQSxDQUFDLEdBQUdKLENBQWxLLEVBQXFLLEVBQUVJLENBQXZLLEVBQTBLO0FBQ3hLLFNBQUssSUFBSThGLE1BQU0sR0FBR1AsT0FBTyxDQUFDdkYsQ0FBRCxDQUFwQixFQUF5QitGLE1BQU0sR0FBR1AsT0FBTyxDQUFDeEYsQ0FBRCxDQUF6QyxFQUE4Q0UsQ0FBQyxHQUFHNEYsTUFBTSxDQUFDakcsTUFBekQsRUFBaUV1RixLQUFLLEdBQUdTLE1BQU0sQ0FBQzdGLENBQUQsQ0FBTixHQUFZLElBQUlELEtBQUosQ0FBVUcsQ0FBVixDQUFyRixFQUFtR0UsSUFBbkcsRUFBeUdFLENBQUMsR0FBRyxDQUFsSCxFQUFxSEEsQ0FBQyxHQUFHSixDQUF6SCxFQUE0SCxFQUFFSSxDQUE5SCxFQUFpSTtBQUMvSCxVQUFJRixJQUFJLEdBQUcwRixNQUFNLENBQUN4RixDQUFELENBQU4sSUFBYXlGLE1BQU0sQ0FBQ3pGLENBQUQsQ0FBOUIsRUFBbUM7QUFDakM4RSxRQUFBQSxLQUFLLENBQUM5RSxDQUFELENBQUwsR0FBV0YsSUFBWDtBQUNEO0FBQ0Y7QUFDRjs7QUFFRCxTQUFPSixDQUFDLEdBQUd5RixFQUFYLEVBQWUsRUFBRXpGLENBQWpCLEVBQW9CO0FBQ2xCNkYsSUFBQUEsTUFBTSxDQUFDN0YsQ0FBRCxDQUFOLEdBQVl1RixPQUFPLENBQUN2RixDQUFELENBQW5CO0FBQ0Q7O0FBRUQsU0FBTyxJQUFJd3BCLFVBQUosQ0FBZTNqQixNQUFmLEVBQXVCLEtBQUtwRixRQUE1QixFQUFzQyxLQUFLZ3BCLEtBQTNDLEVBQWtELEtBQUt6USxHQUF2RCxDQUFQO0FBQ0QsQzs7QUNsQkQ7O0FBRUEsU0FBU2pELEtBQVQsQ0FBZTVPLElBQWYsRUFBcUI7QUFDbkIsU0FBTyxDQUFDQSxJQUFJLEdBQUcsRUFBUixFQUFZd0MsSUFBWixHQUFtQkMsS0FBbkIsQ0FBeUIsT0FBekIsRUFBa0M4ZixLQUFsQyxDQUF3QyxVQUFTM2MsQ0FBVCxFQUFZO0FBQ3pELFFBQUl6TSxDQUFDLEdBQUd5TSxDQUFDLENBQUMxRixPQUFGLENBQVUsR0FBVixDQUFSO0FBQ0EsUUFBSS9HLENBQUMsSUFBSSxDQUFULEVBQVl5TSxDQUFDLEdBQUdBLENBQUMsQ0FBQ3pGLEtBQUYsQ0FBUSxDQUFSLEVBQVdoSCxDQUFYLENBQUo7QUFDWixXQUFPLENBQUN5TSxDQUFELElBQU1BLENBQUMsS0FBSyxPQUFuQjtBQUNELEdBSk0sQ0FBUDtBQUtEOztBQUVELFNBQVM0YyxVQUFULENBQW9CeFUsRUFBcEIsRUFBd0JoTyxJQUF4QixFQUE4QndGLFFBQTlCLEVBQXdDO0FBQ3RDLE1BQUlpZCxHQUFKO0FBQUEsTUFBU0MsR0FBVDtBQUFBLE1BQWNDLEdBQUcsR0FBRy9ULEtBQUssQ0FBQzVPLElBQUQsQ0FBTCxHQUFjeU8sSUFBZCxHQUFxQjNSLFlBQXpDO0FBQ0EsU0FBTyxZQUFXO0FBQ2hCLFFBQUk0UixRQUFRLEdBQUdpVSxHQUFHLENBQUMsSUFBRCxFQUFPM1UsRUFBUCxDQUFsQjtBQUFBLFFBQ0loSSxFQUFFLEdBQUcwSSxRQUFRLENBQUMxSSxFQURsQixDQURnQixDQUloQjtBQUNBO0FBQ0E7O0FBQ0EsUUFBSUEsRUFBRSxLQUFLeWMsR0FBWCxFQUFnQixDQUFDQyxHQUFHLEdBQUcsQ0FBQ0QsR0FBRyxHQUFHemMsRUFBUCxFQUFXd0UsSUFBWCxFQUFQLEVBQTBCeEUsRUFBMUIsQ0FBNkJoRyxJQUE3QixFQUFtQ3dGLFFBQW5DO0FBRWhCa0osSUFBQUEsUUFBUSxDQUFDMUksRUFBVCxHQUFjMGMsR0FBZDtBQUNELEdBVkQ7QUFXRDs7QUFFRCw2QkFBZSx1QkFBUzFpQixJQUFULEVBQWV3RixRQUFmLEVBQXlCO0FBQ3RDLE1BQUl3SSxFQUFFLEdBQUcsS0FBSzZELEdBQWQ7QUFFQSxTQUFPN1gsU0FBUyxDQUFDdEIsTUFBVixHQUFtQixDQUFuQixHQUNEcUUsWUFBRyxDQUFDLEtBQUs5RCxJQUFMLEVBQUQsRUFBYytVLEVBQWQsQ0FBSCxDQUFxQmhJLEVBQXJCLENBQXdCQSxFQUF4QixDQUEyQmhHLElBQTNCLENBREMsR0FFRCxLQUFLc0IsSUFBTCxDQUFVa2hCLFVBQVUsQ0FBQ3hVLEVBQUQsRUFBS2hPLElBQUwsRUFBV3dGLFFBQVgsQ0FBcEIsQ0FGTjtBQUdELEM7O0FDL0JELFNBQVNvZCxjQUFULENBQXdCNVUsRUFBeEIsRUFBNEI7QUFDMUIsU0FBTyxZQUFXO0FBQ2hCLFFBQUkzUyxNQUFNLEdBQUcsS0FBS3lELFVBQWxCOztBQUNBLFNBQUssSUFBSTNGLENBQVQsSUFBYyxLQUFLaVYsWUFBbkIsRUFBaUMsSUFBSSxDQUFDalYsQ0FBRCxLQUFPNlUsRUFBWCxFQUFlOztBQUNoRCxRQUFJM1MsTUFBSixFQUFZQSxNQUFNLENBQUMySixXQUFQLENBQW1CLElBQW5CO0FBQ2IsR0FKRDtBQUtEOztBQUVELDZCQUFlLDZCQUFXO0FBQ3hCLFNBQU8sS0FBS2dCLEVBQUwsQ0FBUSxZQUFSLEVBQXNCNGMsY0FBYyxDQUFDLEtBQUsvUSxHQUFOLENBQXBDLENBQVA7QUFDRCxDOztBQ1ZEO0FBQ0E7QUFDQTtBQUVBLDZCQUFlLDJCQUFTdlosTUFBVCxFQUFpQjtBQUM5QixNQUFJMEgsSUFBSSxHQUFHLEtBQUtzaUIsS0FBaEI7QUFBQSxNQUNJdFUsRUFBRSxHQUFHLEtBQUs2RCxHQURkO0FBR0EsTUFBSSxPQUFPdlosTUFBUCxLQUFrQixVQUF0QixFQUFrQ0EsTUFBTSxHQUFHSCxRQUFRLENBQUNHLE1BQUQsQ0FBakI7O0FBRWxDLE9BQUssSUFBSUMsTUFBTSxHQUFHLEtBQUtDLE9BQWxCLEVBQTJCQyxDQUFDLEdBQUdGLE1BQU0sQ0FBQ0csTUFBdEMsRUFBOENDLFNBQVMsR0FBRyxJQUFJQyxLQUFKLENBQVVILENBQVYsQ0FBMUQsRUFBd0VJLENBQUMsR0FBRyxDQUFqRixFQUFvRkEsQ0FBQyxHQUFHSixDQUF4RixFQUEyRixFQUFFSSxDQUE3RixFQUFnRztBQUM5RixTQUFLLElBQUlDLEtBQUssR0FBR1AsTUFBTSxDQUFDTSxDQUFELENBQWxCLEVBQXVCRSxDQUFDLEdBQUdELEtBQUssQ0FBQ0osTUFBakMsRUFBeUNNLFFBQVEsR0FBR0wsU0FBUyxDQUFDRSxDQUFELENBQVQsR0FBZSxJQUFJRCxLQUFKLENBQVVHLENBQVYsQ0FBbkUsRUFBaUZFLElBQWpGLEVBQXVGQyxPQUF2RixFQUFnR0MsQ0FBQyxHQUFHLENBQXpHLEVBQTRHQSxDQUFDLEdBQUdKLENBQWhILEVBQW1ILEVBQUVJLENBQXJILEVBQXdIO0FBQ3RILFVBQUksQ0FBQ0YsSUFBSSxHQUFHSCxLQUFLLENBQUNLLENBQUQsQ0FBYixNQUFzQkQsT0FBTyxHQUFHWixNQUFNLENBQUNjLElBQVAsQ0FBWUgsSUFBWixFQUFrQkEsSUFBSSxDQUFDSSxRQUF2QixFQUFpQ0YsQ0FBakMsRUFBb0NMLEtBQXBDLENBQWhDLENBQUosRUFBaUY7QUFDL0UsWUFBSSxjQUFjRyxJQUFsQixFQUF3QkMsT0FBTyxDQUFDRyxRQUFSLEdBQW1CSixJQUFJLENBQUNJLFFBQXhCO0FBQ3hCTCxRQUFBQSxRQUFRLENBQUNHLENBQUQsQ0FBUixHQUFjRCxPQUFkO0FBQ0F3VixRQUFBQSxRQUFRLENBQUMxVixRQUFRLENBQUNHLENBQUQsQ0FBVCxFQUFjNkcsSUFBZCxFQUFvQmdPLEVBQXBCLEVBQXdCN1UsQ0FBeEIsRUFBMkJILFFBQTNCLEVBQXFDK0QsWUFBRyxDQUFDOUQsSUFBRCxFQUFPK1UsRUFBUCxDQUF4QyxDQUFSO0FBQ0Q7QUFDRjtBQUNGOztBQUVELFNBQU8sSUFBSXFVLFVBQUosQ0FBZTFwQixTQUFmLEVBQTBCLEtBQUtXLFFBQS9CLEVBQXlDMEcsSUFBekMsRUFBK0NnTyxFQUEvQyxDQUFQO0FBQ0QsQzs7QUNyQkQ7QUFDQTtBQUNBO0FBRUEsNkJBQWUsOEJBQVMxVixNQUFULEVBQWlCO0FBQzlCLE1BQUkwSCxJQUFJLEdBQUcsS0FBS3NpQixLQUFoQjtBQUFBLE1BQ0l0VSxFQUFFLEdBQUcsS0FBSzZELEdBRGQ7QUFHQSxNQUFJLE9BQU92WixNQUFQLEtBQWtCLFVBQXRCLEVBQWtDQSxNQUFNLEdBQUd1QixXQUFXLENBQUN2QixNQUFELENBQXBCOztBQUVsQyxPQUFLLElBQUlDLE1BQU0sR0FBRyxLQUFLQyxPQUFsQixFQUEyQkMsQ0FBQyxHQUFHRixNQUFNLENBQUNHLE1BQXRDLEVBQThDQyxTQUFTLEdBQUcsRUFBMUQsRUFBOERzQixPQUFPLEdBQUcsRUFBeEUsRUFBNEVwQixDQUFDLEdBQUcsQ0FBckYsRUFBd0ZBLENBQUMsR0FBR0osQ0FBNUYsRUFBK0YsRUFBRUksQ0FBakcsRUFBb0c7QUFDbEcsU0FBSyxJQUFJQyxLQUFLLEdBQUdQLE1BQU0sQ0FBQ00sQ0FBRCxDQUFsQixFQUF1QkUsQ0FBQyxHQUFHRCxLQUFLLENBQUNKLE1BQWpDLEVBQXlDTyxJQUF6QyxFQUErQ0UsQ0FBQyxHQUFHLENBQXhELEVBQTJEQSxDQUFDLEdBQUdKLENBQS9ELEVBQWtFLEVBQUVJLENBQXBFLEVBQXVFO0FBQ3JFLFVBQUlGLElBQUksR0FBR0gsS0FBSyxDQUFDSyxDQUFELENBQWhCLEVBQXFCO0FBQ25CLGFBQUssSUFBSXNCLFFBQVEsR0FBR25DLE1BQU0sQ0FBQ2MsSUFBUCxDQUFZSCxJQUFaLEVBQWtCQSxJQUFJLENBQUNJLFFBQXZCLEVBQWlDRixDQUFqQyxFQUFvQ0wsS0FBcEMsQ0FBZixFQUEyRCtDLEtBQTNELEVBQWtFZ25CLE9BQU8sR0FBRzlsQixZQUFHLENBQUM5RCxJQUFELEVBQU8rVSxFQUFQLENBQS9FLEVBQTJGbVEsQ0FBQyxHQUFHLENBQS9GLEVBQWtHWixDQUFDLEdBQUc5aUIsUUFBUSxDQUFDL0IsTUFBcEgsRUFBNEh5bEIsQ0FBQyxHQUFHWixDQUFoSSxFQUFtSSxFQUFFWSxDQUFySSxFQUF3STtBQUN0SSxjQUFJdGlCLEtBQUssR0FBR3BCLFFBQVEsQ0FBQzBqQixDQUFELENBQXBCLEVBQXlCO0FBQ3ZCelAsWUFBQUEsUUFBUSxDQUFDN1MsS0FBRCxFQUFRbUUsSUFBUixFQUFjZ08sRUFBZCxFQUFrQm1RLENBQWxCLEVBQXFCMWpCLFFBQXJCLEVBQStCb29CLE9BQS9CLENBQVI7QUFDRDtBQUNGOztBQUNEbHFCLFFBQUFBLFNBQVMsQ0FBQ3VCLElBQVYsQ0FBZU8sUUFBZjtBQUNBUixRQUFBQSxPQUFPLENBQUNDLElBQVIsQ0FBYWpCLElBQWI7QUFDRDtBQUNGO0FBQ0Y7O0FBRUQsU0FBTyxJQUFJb3BCLFVBQUosQ0FBZTFwQixTQUFmLEVBQTBCc0IsT0FBMUIsRUFBbUMrRixJQUFuQyxFQUF5Q2dPLEVBQXpDLENBQVA7QUFDRCxDOztBQ3pCRDtBQUVBLElBQUkzVixtQkFBUyxHQUFHeUYsbUNBQWhCO0FBRUEsNkJBQWUsZ0NBQVc7QUFDeEIsU0FBTyxJQUFJekYsbUJBQUosQ0FBYyxLQUFLRyxPQUFuQixFQUE0QixLQUFLYyxRQUFqQyxDQUFQO0FBQ0QsQzs7QUNORDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVN3cEIsU0FBVCxDQUFtQjlpQixJQUFuQixFQUF5Qm1oQixXQUF6QixFQUFzQztBQUNwQyxNQUFJRSxRQUFKLEVBQ0lJLFFBREosRUFFSUYsWUFGSjtBQUdBLFNBQU8sWUFBVztBQUNoQixRQUFJQyxPQUFPLEdBQUc5ZixVQUFLLENBQUMsSUFBRCxFQUFPMUIsSUFBUCxDQUFuQjtBQUFBLFFBQ0lzaEIsT0FBTyxJQUFJLEtBQUs1ZixLQUFMLENBQVdDLGNBQVgsQ0FBMEIzQixJQUExQixHQUFpQzBCLFVBQUssQ0FBQyxJQUFELEVBQU8xQixJQUFQLENBQTFDLENBRFg7QUFFQSxXQUFPd2hCLE9BQU8sS0FBS0YsT0FBWixHQUFzQixJQUF0QixHQUNERSxPQUFPLEtBQUtILFFBQVosSUFBd0JDLE9BQU8sS0FBS0csUUFBcEMsR0FBK0NGLFlBQS9DLEdBQ0FBLFlBQVksR0FBR0osV0FBVyxDQUFDRSxRQUFRLEdBQUdHLE9BQVosRUFBcUJDLFFBQVEsR0FBR0gsT0FBaEMsQ0FGaEM7QUFHRCxHQU5EO0FBT0Q7O0FBRUQsU0FBUzdmLGlCQUFULENBQXFCekIsSUFBckIsRUFBMkI7QUFDekIsU0FBTyxZQUFXO0FBQ2hCLFNBQUswQixLQUFMLENBQVdDLGNBQVgsQ0FBMEIzQixJQUExQjtBQUNELEdBRkQ7QUFHRDs7QUFFRCxTQUFTNEIsbUJBQVQsQ0FBdUI1QixJQUF2QixFQUE2Qm1oQixXQUE3QixFQUEwQ0MsTUFBMUMsRUFBa0Q7QUFDaEQsTUFBSUMsUUFBSjtBQUFBLE1BQ0lDLE9BQU8sR0FBR0YsTUFBTSxHQUFHLEVBRHZCO0FBQUEsTUFFSUcsWUFGSjtBQUdBLFNBQU8sWUFBVztBQUNoQixRQUFJQyxPQUFPLEdBQUc5ZixVQUFLLENBQUMsSUFBRCxFQUFPMUIsSUFBUCxDQUFuQjtBQUNBLFdBQU93aEIsT0FBTyxLQUFLRixPQUFaLEdBQXNCLElBQXRCLEdBQ0RFLE9BQU8sS0FBS0gsUUFBWixHQUF1QkUsWUFBdkIsR0FDQUEsWUFBWSxHQUFHSixXQUFXLENBQUNFLFFBQVEsR0FBR0csT0FBWixFQUFxQkosTUFBckIsQ0FGaEM7QUFHRCxHQUxEO0FBTUQ7O0FBRUQsU0FBU3JmLG1CQUFULENBQXVCL0IsSUFBdkIsRUFBNkJtaEIsV0FBN0IsRUFBMENsa0IsS0FBMUMsRUFBaUQ7QUFDL0MsTUFBSW9rQixRQUFKLEVBQ0lJLFFBREosRUFFSUYsWUFGSjtBQUdBLFNBQU8sWUFBVztBQUNoQixRQUFJQyxPQUFPLEdBQUc5ZixVQUFLLENBQUMsSUFBRCxFQUFPMUIsSUFBUCxDQUFuQjtBQUFBLFFBQ0lvaEIsTUFBTSxHQUFHbmtCLEtBQUssQ0FBQyxJQUFELENBRGxCO0FBQUEsUUFFSXFrQixPQUFPLEdBQUdGLE1BQU0sR0FBRyxFQUZ2QjtBQUdBLFFBQUlBLE1BQU0sSUFBSSxJQUFkLEVBQW9CRSxPQUFPLEdBQUdGLE1BQU0sSUFBSSxLQUFLMWYsS0FBTCxDQUFXQyxjQUFYLENBQTBCM0IsSUFBMUIsR0FBaUMwQixVQUFLLENBQUMsSUFBRCxFQUFPMUIsSUFBUCxDQUExQyxDQUFoQjtBQUNwQixXQUFPd2hCLE9BQU8sS0FBS0YsT0FBWixHQUFzQixJQUF0QixHQUNERSxPQUFPLEtBQUtILFFBQVosSUFBd0JDLE9BQU8sS0FBS0csUUFBcEMsR0FBK0NGLFlBQS9DLElBQ0NFLFFBQVEsR0FBR0gsT0FBWCxFQUFvQkMsWUFBWSxHQUFHSixXQUFXLENBQUNFLFFBQVEsR0FBR0csT0FBWixFQUFxQkosTUFBckIsQ0FEL0MsQ0FETjtBQUdELEdBUkQ7QUFTRDs7QUFFRCxTQUFTMkIsZ0JBQVQsQ0FBMEIvVSxFQUExQixFQUE4QmhPLElBQTlCLEVBQW9DO0FBQ2xDLE1BQUl5aUIsR0FBSjtBQUFBLE1BQVNDLEdBQVQ7QUFBQSxNQUFjTSxTQUFkO0FBQUEsTUFBeUJ4bUIsR0FBRyxHQUFHLFdBQVd3RCxJQUExQztBQUFBLE1BQWdEeUYsS0FBSyxHQUFHLFNBQVNqSixHQUFqRTtBQUFBLE1BQXNFd0IsTUFBdEU7QUFDQSxTQUFPLFlBQVc7QUFDaEIsUUFBSTBRLFFBQVEsR0FBRzVSLFlBQUcsQ0FBQyxJQUFELEVBQU9rUixFQUFQLENBQWxCO0FBQUEsUUFDSWhJLEVBQUUsR0FBRzBJLFFBQVEsQ0FBQzFJLEVBRGxCO0FBQUEsUUFFSVIsUUFBUSxHQUFHa0osUUFBUSxDQUFDelIsS0FBVCxDQUFlVCxHQUFmLEtBQXVCLElBQXZCLEdBQThCd0IsTUFBTSxLQUFLQSxNQUFNLEdBQUd5RCxpQkFBVyxDQUFDekIsSUFBRCxDQUF6QixDQUFwQyxHQUF1RTRNLFNBRnRGLENBRGdCLENBS2hCO0FBQ0E7QUFDQTs7QUFDQSxRQUFJNUcsRUFBRSxLQUFLeWMsR0FBUCxJQUFjTyxTQUFTLEtBQUt4ZCxRQUFoQyxFQUEwQyxDQUFDa2QsR0FBRyxHQUFHLENBQUNELEdBQUcsR0FBR3pjLEVBQVAsRUFBV3dFLElBQVgsRUFBUCxFQUEwQnhFLEVBQTFCLENBQTZCUCxLQUE3QixFQUFvQ3VkLFNBQVMsR0FBR3hkLFFBQWhEO0FBRTFDa0osSUFBQUEsUUFBUSxDQUFDMUksRUFBVCxHQUFjMGMsR0FBZDtBQUNELEdBWEQ7QUFZRDs7QUFFRCw2QkFBZSwwQkFBUzFpQixJQUFULEVBQWUvQyxLQUFmLEVBQXNCNEUsUUFBdEIsRUFBZ0M7QUFDN0MsTUFBSTFJLENBQUMsR0FBRyxDQUFDNkcsSUFBSSxJQUFJLEVBQVQsTUFBaUIsV0FBakIsR0FBK0J5USx1QkFBL0IsR0FBc0QwUSxzQkFBOUQ7QUFDQSxTQUFPbGtCLEtBQUssSUFBSSxJQUFULEdBQWdCLEtBQ2xCZ21CLFVBRGtCLENBQ1BqakIsSUFETyxFQUNEOGlCLFNBQVMsQ0FBQzlpQixJQUFELEVBQU83RyxDQUFQLENBRFIsRUFFbEI2TSxFQUZrQixDQUVmLGVBQWVoRyxJQUZBLEVBRU15QixpQkFBVyxDQUFDekIsSUFBRCxDQUZqQixDQUFoQixHQUdILE9BQU8vQyxLQUFQLEtBQWlCLFVBQWpCLEdBQThCLEtBQzdCZ21CLFVBRDZCLENBQ2xCampCLElBRGtCLEVBQ1orQixtQkFBYSxDQUFDL0IsSUFBRCxFQUFPN0csQ0FBUCxFQUFVMlksVUFBVSxDQUFDLElBQUQsRUFBTyxXQUFXOVIsSUFBbEIsRUFBd0IvQyxLQUF4QixDQUFwQixDQURELEVBRTdCcUUsSUFGNkIsQ0FFeEJ5aEIsZ0JBQWdCLENBQUMsS0FBS2xSLEdBQU4sRUFBVzdSLElBQVgsQ0FGUSxDQUE5QixHQUdBLEtBQ0NpakIsVUFERCxDQUNZampCLElBRFosRUFDa0I0QixtQkFBYSxDQUFDNUIsSUFBRCxFQUFPN0csQ0FBUCxFQUFVOEQsS0FBVixDQUQvQixFQUNpRDRFLFFBRGpELEVBRUNtRSxFQUZELENBRUksZUFBZWhHLElBRm5CLEVBRXlCLElBRnpCLENBTko7QUFTRCxDOztBQy9FRCxTQUFTa2pCLGdCQUFULENBQTBCbGpCLElBQTFCLEVBQWdDN0csQ0FBaEMsRUFBbUMwSSxRQUFuQyxFQUE2QztBQUMzQyxTQUFPLFVBQVMrRCxDQUFULEVBQVk7QUFDakIsU0FBS2xFLEtBQUwsQ0FBV0ksV0FBWCxDQUF1QjlCLElBQXZCLEVBQTZCN0csQ0FBQyxDQUFDQyxJQUFGLENBQU8sSUFBUCxFQUFhd00sQ0FBYixDQUE3QixFQUE4Qy9ELFFBQTlDO0FBQ0QsR0FGRDtBQUdEOztBQUVELFNBQVNvaEIsVUFBVCxDQUFvQmpqQixJQUFwQixFQUEwQi9DLEtBQTFCLEVBQWlDNEUsUUFBakMsRUFBMkM7QUFDekMsTUFBSStELENBQUosRUFBT3JJLEVBQVA7O0FBQ0EsV0FBUzhRLEtBQVQsR0FBaUI7QUFDZixRQUFJbFYsQ0FBQyxHQUFHOEQsS0FBSyxDQUFDbEQsS0FBTixDQUFZLElBQVosRUFBa0JDLFNBQWxCLENBQVI7QUFDQSxRQUFJYixDQUFDLEtBQUtvRSxFQUFWLEVBQWNxSSxDQUFDLEdBQUcsQ0FBQ3JJLEVBQUUsR0FBR3BFLENBQU4sS0FBWStwQixnQkFBZ0IsQ0FBQ2xqQixJQUFELEVBQU83RyxDQUFQLEVBQVUwSSxRQUFWLENBQWhDO0FBQ2QsV0FBTytELENBQVA7QUFDRDs7QUFDRHlJLEVBQUFBLEtBQUssQ0FBQ3lULE1BQU4sR0FBZTdrQixLQUFmO0FBQ0EsU0FBT29SLEtBQVA7QUFDRDs7QUFFRCw2QkFBZSwrQkFBU3JPLElBQVQsRUFBZS9DLEtBQWYsRUFBc0I0RSxRQUF0QixFQUFnQztBQUM3QyxNQUFJckYsR0FBRyxHQUFHLFlBQVl3RCxJQUFJLElBQUksRUFBcEIsQ0FBVjtBQUNBLE1BQUloRyxTQUFTLENBQUN0QixNQUFWLEdBQW1CLENBQXZCLEVBQTBCLE9BQU8sQ0FBQzhELEdBQUcsR0FBRyxLQUFLNlIsS0FBTCxDQUFXN1IsR0FBWCxDQUFQLEtBQTJCQSxHQUFHLENBQUNzbEIsTUFBdEM7QUFDMUIsTUFBSTdrQixLQUFLLElBQUksSUFBYixFQUFtQixPQUFPLEtBQUtvUixLQUFMLENBQVc3UixHQUFYLEVBQWdCLElBQWhCLENBQVA7QUFDbkIsTUFBSSxPQUFPUyxLQUFQLEtBQWlCLFVBQXJCLEVBQWlDLE1BQU0sSUFBSW1OLEtBQUosRUFBTjtBQUNqQyxTQUFPLEtBQUtpRSxLQUFMLENBQVc3UixHQUFYLEVBQWdCeW1CLFVBQVUsQ0FBQ2pqQixJQUFELEVBQU8vQyxLQUFQLEVBQWM0RSxRQUFRLElBQUksSUFBWixHQUFtQixFQUFuQixHQUF3QkEsUUFBdEMsQ0FBMUIsQ0FBUDtBQUNELEM7O0FDdkJEOztBQUVBLFNBQVM4QixpQkFBVCxDQUFzQjFHLEtBQXRCLEVBQTZCO0FBQzNCLFNBQU8sWUFBVztBQUNoQixTQUFLeUcsV0FBTCxHQUFtQnpHLEtBQW5CO0FBQ0QsR0FGRDtBQUdEOztBQUVELFNBQVMyRyxpQkFBVCxDQUFzQjNHLEtBQXRCLEVBQTZCO0FBQzNCLFNBQU8sWUFBVztBQUNoQixRQUFJbWtCLE1BQU0sR0FBR25rQixLQUFLLENBQUMsSUFBRCxDQUFsQjtBQUNBLFNBQUt5RyxXQUFMLEdBQW1CMGQsTUFBTSxJQUFJLElBQVYsR0FBaUIsRUFBakIsR0FBc0JBLE1BQXpDO0FBQ0QsR0FIRDtBQUlEOztBQUVELDZCQUFlLHlCQUFTbmtCLEtBQVQsRUFBZ0I7QUFDN0IsU0FBTyxLQUFLb1IsS0FBTCxDQUFXLE1BQVgsRUFBbUIsT0FBT3BSLEtBQVAsS0FBaUIsVUFBakIsR0FDcEIyRyxpQkFBWSxDQUFDa08sVUFBVSxDQUFDLElBQUQsRUFBTyxNQUFQLEVBQWU3VSxLQUFmLENBQVgsQ0FEUSxHQUVwQjBHLGlCQUFZLENBQUMxRyxLQUFLLElBQUksSUFBVCxHQUFnQixFQUFoQixHQUFxQkEsS0FBSyxHQUFHLEVBQTlCLENBRlgsQ0FBUDtBQUdELEM7O0FDbkJELFNBQVNrbUIsZUFBVCxDQUF5QmhxQixDQUF6QixFQUE0QjtBQUMxQixTQUFPLFVBQVN5TSxDQUFULEVBQVk7QUFDakIsU0FBS2xDLFdBQUwsR0FBbUJ2SyxDQUFDLENBQUNDLElBQUYsQ0FBTyxJQUFQLEVBQWF3TSxDQUFiLENBQW5CO0FBQ0QsR0FGRDtBQUdEOztBQUVELFNBQVN3ZCxTQUFULENBQW1Cbm1CLEtBQW5CLEVBQTBCO0FBQ3hCLE1BQUkrUCxFQUFKLEVBQVF6UCxFQUFSOztBQUNBLFdBQVM4USxLQUFULEdBQWlCO0FBQ2YsUUFBSWxWLENBQUMsR0FBRzhELEtBQUssQ0FBQ2xELEtBQU4sQ0FBWSxJQUFaLEVBQWtCQyxTQUFsQixDQUFSO0FBQ0EsUUFBSWIsQ0FBQyxLQUFLb0UsRUFBVixFQUFjeVAsRUFBRSxHQUFHLENBQUN6UCxFQUFFLEdBQUdwRSxDQUFOLEtBQVlncUIsZUFBZSxDQUFDaHFCLENBQUQsQ0FBaEM7QUFDZCxXQUFPNlQsRUFBUDtBQUNEOztBQUNEcUIsRUFBQUEsS0FBSyxDQUFDeVQsTUFBTixHQUFlN2tCLEtBQWY7QUFDQSxTQUFPb1IsS0FBUDtBQUNEOztBQUVELDZCQUFlLDhCQUFTcFIsS0FBVCxFQUFnQjtBQUM3QixNQUFJVCxHQUFHLEdBQUcsTUFBVjtBQUNBLE1BQUl4QyxTQUFTLENBQUN0QixNQUFWLEdBQW1CLENBQXZCLEVBQTBCLE9BQU8sQ0FBQzhELEdBQUcsR0FBRyxLQUFLNlIsS0FBTCxDQUFXN1IsR0FBWCxDQUFQLEtBQTJCQSxHQUFHLENBQUNzbEIsTUFBdEM7QUFDMUIsTUFBSTdrQixLQUFLLElBQUksSUFBYixFQUFtQixPQUFPLEtBQUtvUixLQUFMLENBQVc3UixHQUFYLEVBQWdCLElBQWhCLENBQVA7QUFDbkIsTUFBSSxPQUFPUyxLQUFQLEtBQWlCLFVBQXJCLEVBQWlDLE1BQU0sSUFBSW1OLEtBQUosRUFBTjtBQUNqQyxTQUFPLEtBQUtpRSxLQUFMLENBQVc3UixHQUFYLEVBQWdCNG1CLFNBQVMsQ0FBQ25tQixLQUFELENBQXpCLENBQVA7QUFDRCxDOztBQ3ZCRDtBQUNBO0FBRUEsNkJBQWUsc0JBQVc7QUFDeEIsTUFBSStDLElBQUksR0FBRyxLQUFLc2lCLEtBQWhCO0FBQUEsTUFDSWdCLEdBQUcsR0FBRyxLQUFLelIsR0FEZjtBQUFBLE1BRUkwUixHQUFHLEdBQUdGLEtBQUssRUFGZjs7QUFJQSxPQUFLLElBQUk5cUIsTUFBTSxHQUFHLEtBQUtDLE9BQWxCLEVBQTJCQyxDQUFDLEdBQUdGLE1BQU0sQ0FBQ0csTUFBdEMsRUFBOENHLENBQUMsR0FBRyxDQUF2RCxFQUEwREEsQ0FBQyxHQUFHSixDQUE5RCxFQUFpRSxFQUFFSSxDQUFuRSxFQUFzRTtBQUNwRSxTQUFLLElBQUlDLEtBQUssR0FBR1AsTUFBTSxDQUFDTSxDQUFELENBQWxCLEVBQXVCRSxDQUFDLEdBQUdELEtBQUssQ0FBQ0osTUFBakMsRUFBeUNPLElBQXpDLEVBQStDRSxDQUFDLEdBQUcsQ0FBeEQsRUFBMkRBLENBQUMsR0FBR0osQ0FBL0QsRUFBa0UsRUFBRUksQ0FBcEUsRUFBdUU7QUFDckUsVUFBSUYsSUFBSSxHQUFHSCxLQUFLLENBQUNLLENBQUQsQ0FBaEIsRUFBcUI7QUFDbkIsWUFBSTBwQixPQUFPLEdBQUc5bEIsWUFBRyxDQUFDOUQsSUFBRCxFQUFPcXFCLEdBQVAsQ0FBakI7QUFDQTVVLFFBQUFBLFFBQVEsQ0FBQ3pWLElBQUQsRUFBTytHLElBQVAsRUFBYXVqQixHQUFiLEVBQWtCcHFCLENBQWxCLEVBQXFCTCxLQUFyQixFQUE0QjtBQUNsQ3VULFVBQUFBLElBQUksRUFBRXdXLE9BQU8sQ0FBQ3hXLElBQVIsR0FBZXdXLE9BQU8sQ0FBQ3pXLEtBQXZCLEdBQStCeVcsT0FBTyxDQUFDdlUsUUFEWDtBQUVsQ2xDLFVBQUFBLEtBQUssRUFBRSxDQUYyQjtBQUdsQ2tDLFVBQUFBLFFBQVEsRUFBRXVVLE9BQU8sQ0FBQ3ZVLFFBSGdCO0FBSWxDQyxVQUFBQSxJQUFJLEVBQUVzVSxPQUFPLENBQUN0VTtBQUpvQixTQUE1QixDQUFSO0FBTUQ7QUFDRjtBQUNGOztBQUVELFNBQU8sSUFBSThULFVBQUosQ0FBZTlwQixNQUFmLEVBQXVCLEtBQUtlLFFBQTVCLEVBQXNDMEcsSUFBdEMsRUFBNEN1akIsR0FBNUMsQ0FBUDtBQUNELEM7O0FDdkJEO0FBRUEsNkJBQWUsZUFBVztBQUN4QixNQUFJZCxHQUFKO0FBQUEsTUFBU0MsR0FBVDtBQUFBLE1BQWNqWSxJQUFJLEdBQUcsSUFBckI7QUFBQSxNQUEyQnVELEVBQUUsR0FBR3ZELElBQUksQ0FBQ29ILEdBQXJDO0FBQUEsTUFBMENwUyxJQUFJLEdBQUdnTCxJQUFJLENBQUNoTCxJQUFMLEVBQWpEO0FBQ0EsU0FBTyxJQUFJK2pCLE9BQUosQ0FBWSxVQUFTQyxPQUFULEVBQWtCQyxNQUFsQixFQUEwQjtBQUMzQyxRQUFJQyxNQUFNLEdBQUc7QUFBQzFtQixNQUFBQSxLQUFLLEVBQUV5bUI7QUFBUixLQUFiO0FBQUEsUUFDSTFELEdBQUcsR0FBRztBQUFDL2lCLE1BQUFBLEtBQUssRUFBRSxZQUFXO0FBQUUsWUFBSSxFQUFFd0MsSUFBRixLQUFXLENBQWYsRUFBa0Jna0IsT0FBTztBQUFLO0FBQW5ELEtBRFY7QUFHQWhaLElBQUFBLElBQUksQ0FBQ25KLElBQUwsQ0FBVSxZQUFXO0FBQ25CLFVBQUlvTixRQUFRLEdBQUc1UixZQUFHLENBQUMsSUFBRCxFQUFPa1IsRUFBUCxDQUFsQjtBQUFBLFVBQ0loSSxFQUFFLEdBQUcwSSxRQUFRLENBQUMxSSxFQURsQixDQURtQixDQUluQjtBQUNBO0FBQ0E7O0FBQ0EsVUFBSUEsRUFBRSxLQUFLeWMsR0FBWCxFQUFnQjtBQUNkQyxRQUFBQSxHQUFHLEdBQUcsQ0FBQ0QsR0FBRyxHQUFHemMsRUFBUCxFQUFXd0UsSUFBWCxFQUFOOztBQUNBa1ksUUFBQUEsR0FBRyxDQUFDeFksQ0FBSixDQUFNeVosTUFBTixDQUFhenBCLElBQWIsQ0FBa0J5cEIsTUFBbEI7O0FBQ0FqQixRQUFBQSxHQUFHLENBQUN4WSxDQUFKLENBQU02RSxTQUFOLENBQWdCN1UsSUFBaEIsQ0FBcUJ5cEIsTUFBckI7O0FBQ0FqQixRQUFBQSxHQUFHLENBQUN4WSxDQUFKLENBQU04VixHQUFOLENBQVU5bEIsSUFBVixDQUFlOGxCLEdBQWY7QUFDRDs7QUFFRHRSLE1BQUFBLFFBQVEsQ0FBQzFJLEVBQVQsR0FBYzBjLEdBQWQ7QUFDRCxLQWZELEVBSjJDLENBcUIzQzs7QUFDQSxRQUFJampCLElBQUksS0FBSyxDQUFiLEVBQWdCZ2tCLE9BQU87QUFDeEIsR0F2Qk0sQ0FBUDtBQXdCRCxDOztBQzVCRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxJQUFJelYsRUFBRSxHQUFHLENBQVQ7QUFFTyxTQUFTcVUsVUFBVCxDQUFvQjlwQixNQUFwQixFQUE0QjBCLE9BQTVCLEVBQXFDK0YsSUFBckMsRUFBMkNnTyxFQUEzQyxFQUErQztBQUNwRCxPQUFLeFYsT0FBTCxHQUFlRCxNQUFmO0FBQ0EsT0FBS2UsUUFBTCxHQUFnQlcsT0FBaEI7QUFDQSxPQUFLcW9CLEtBQUwsR0FBYXRpQixJQUFiO0FBQ0EsT0FBSzZSLEdBQUwsR0FBVzdELEVBQVg7QUFDRDtBQUVjLFNBQVMrRCxxQkFBVCxDQUFvQi9SLElBQXBCLEVBQTBCO0FBQ3ZDLFNBQU9sQyxhQUFTLEdBQUdpVSxVQUFaLENBQXVCL1IsSUFBdkIsQ0FBUDtBQUNEO0FBRU0sU0FBU3FqQixLQUFULEdBQWlCO0FBQ3RCLFNBQU8sRUFBRXJWLEVBQVQ7QUFDRDtBQUVELElBQUlnWCxtQkFBbUIsR0FBR2xuQix1QkFBMUI7QUFFQXVrQixVQUFVLENBQUMvbkIsU0FBWCxHQUF1QnlYLHFCQUFVLENBQUN6WCxTQUFYLEdBQXVCO0FBQzVDcUIsRUFBQUEsV0FBVyxFQUFFMG1CLFVBRCtCO0FBRTVDL3BCLEVBQUFBLE1BQU0sRUFBRWdzQixpQkFGb0M7QUFHNUN4cEIsRUFBQUEsU0FBUyxFQUFFeXBCLG9CQUhpQztBQUk1Q2piLEVBQUFBLFdBQVcsRUFBRTBiLG1CQUFtQixDQUFDMWIsV0FKVztBQUs1Q0MsRUFBQUEsY0FBYyxFQUFFeWIsbUJBQW1CLENBQUN6YixjQUxRO0FBTTVDM08sRUFBQUEsTUFBTSxFQUFFc3BCLGlCQU5vQztBQU81Q2ptQixFQUFBQSxLQUFLLEVBQUVrbUIsZ0JBUHFDO0FBUTVDcm1CLEVBQUFBLFNBQVMsRUFBRTBtQixvQkFSaUM7QUFTNUN6UyxFQUFBQSxVQUFVLEVBQUU4UyxVQVRnQztBQVU1Q3pyQixFQUFBQSxJQUFJLEVBQUU0ckIsbUJBQW1CLENBQUM1ckIsSUFWa0I7QUFXNUNvUSxFQUFBQSxLQUFLLEVBQUV3YixtQkFBbUIsQ0FBQ3hiLEtBWGlCO0FBWTVDdlEsRUFBQUEsSUFBSSxFQUFFK3JCLG1CQUFtQixDQUFDL3JCLElBWmtCO0FBYTVDd0csRUFBQUEsSUFBSSxFQUFFdWxCLG1CQUFtQixDQUFDdmxCLElBYmtCO0FBYzVDOUYsRUFBQUEsS0FBSyxFQUFFcXJCLG1CQUFtQixDQUFDcnJCLEtBZGlCO0FBZTVDMkgsRUFBQUEsSUFBSSxFQUFFMGpCLG1CQUFtQixDQUFDMWpCLElBZmtCO0FBZ0I1QzBFLEVBQUFBLEVBQUUsRUFBRW9lLGFBaEJ3QztBQWlCNUMzYSxFQUFBQSxJQUFJLEVBQUVtYSxlQWpCc0M7QUFrQjVDbEMsRUFBQUEsU0FBUyxFQUFFbUMsb0JBbEJpQztBQW1CNUNuaUIsRUFBQUEsS0FBSyxFQUFFK2lCLGdCQW5CcUM7QUFvQjVDeEIsRUFBQUEsVUFBVSxFQUFFeUIscUJBcEJnQztBQXFCNUMvYSxFQUFBQSxJQUFJLEVBQUVnYixlQXJCc0M7QUFzQjVDdkIsRUFBQUEsU0FBUyxFQUFFd0Isb0JBdEJpQztBQXVCNUM1bUIsRUFBQUEsTUFBTSxFQUFFcW1CLGlCQXZCb0M7QUF3QjVDaFcsRUFBQUEsS0FBSyxFQUFFeVcsS0F4QnFDO0FBeUI1QzFZLEVBQUFBLEtBQUssRUFBRTBYLEtBekJxQztBQTBCNUN4VixFQUFBQSxRQUFRLEVBQUV5VixRQTFCa0M7QUEyQjVDeFYsRUFBQUEsSUFBSSxFQUFFeVYsSUEzQnNDO0FBNEI1QzVCLEVBQUFBLFdBQVcsRUFBRTZCLHNCQTVCK0I7QUE2QjVDakUsRUFBQUEsR0FBRyxFQUFFK0UsR0E3QnVDO0FBOEI1QyxHQUFDaGIsTUFBTSxDQUFDQyxRQUFSLEdBQW1CZ2IsbUJBQW1CLENBQUNqYixNQUFNLENBQUNDLFFBQVI7QUE5Qk0sQ0FBOUMsQzs7QUN6Q08sU0FBU2liLE9BQVQsQ0FBaUJyZixDQUFqQixFQUFvQjtBQUN6QixTQUFPQSxDQUFDLEdBQUdBLENBQUosR0FBUUEsQ0FBZjtBQUNEO0FBRU0sU0FBU3NmLFFBQVQsQ0FBa0J0ZixDQUFsQixFQUFxQjtBQUMxQixTQUFPLEVBQUVBLENBQUYsR0FBTUEsQ0FBTixHQUFVQSxDQUFWLEdBQWMsQ0FBckI7QUFDRDtBQUVNLFNBQVN1ZixVQUFULENBQW9CdmYsQ0FBcEIsRUFBdUI7QUFDNUIsU0FBTyxDQUFDLENBQUNBLENBQUMsSUFBSSxDQUFOLEtBQVksQ0FBWixHQUFnQkEsQ0FBQyxHQUFHQSxDQUFKLEdBQVFBLENBQXhCLEdBQTRCLENBQUNBLENBQUMsSUFBSSxDQUFOLElBQVdBLENBQVgsR0FBZUEsQ0FBZixHQUFtQixDQUFoRCxJQUFxRCxDQUE1RDtBQUNELEM7O0FDVkQ7QUFDQTtBQUNBO0FBQ0E7QUFFQSxJQUFJeWYsYUFBYSxHQUFHO0FBQ2xCaFosRUFBQUEsSUFBSSxFQUFFLElBRFk7QUFDTjtBQUNaRCxFQUFBQSxLQUFLLEVBQUUsQ0FGVztBQUdsQmtDLEVBQUFBLFFBQVEsRUFBRSxHQUhRO0FBSWxCQyxFQUFBQSxJQUFJLEVBQUU2VyxVQUFjQTtBQUpGLENBQXBCOztBQU9BLFNBQVN2QyxPQUFULENBQWlCNXBCLElBQWpCLEVBQXVCK1UsRUFBdkIsRUFBMkI7QUFDekIsTUFBSUUsTUFBSjs7QUFDQSxTQUFPLEVBQUVBLE1BQU0sR0FBR2pWLElBQUksQ0FBQ21WLFlBQWhCLEtBQWlDLEVBQUVGLE1BQU0sR0FBR0EsTUFBTSxDQUFDRixFQUFELENBQWpCLENBQXhDLEVBQWdFO0FBQzlELFFBQUksRUFBRS9VLElBQUksR0FBR0EsSUFBSSxDQUFDNkYsVUFBZCxDQUFKLEVBQStCO0FBQzdCLFlBQU0sSUFBSXNMLEtBQUosQ0FBVyxjQUFhNEQsRUFBRyxZQUEzQixDQUFOO0FBQ0Q7QUFDRjs7QUFDRCxTQUFPRSxNQUFQO0FBQ0Q7O0FBRUQsNkJBQWUsOEJBQVNsTyxJQUFULEVBQWU7QUFDNUIsTUFBSWdPLEVBQUosRUFDSUUsTUFESjs7QUFHQSxNQUFJbE8sSUFBSSxZQUFZcWlCLFVBQXBCLEVBQWdDO0FBQzlCclUsSUFBQUEsRUFBRSxHQUFHaE8sSUFBSSxDQUFDNlIsR0FBVixFQUFlN1IsSUFBSSxHQUFHQSxJQUFJLENBQUNzaUIsS0FBM0I7QUFDRCxHQUZELE1BRU87QUFDTHRVLElBQUFBLEVBQUUsR0FBR3FWLEtBQUssRUFBVixFQUFjLENBQUNuVixNQUFNLEdBQUdtWCxhQUFWLEVBQXlCaFosSUFBekIsR0FBZ0NiLEdBQUcsRUFBakQsRUFBcUR4TCxJQUFJLEdBQUdBLElBQUksSUFBSSxJQUFSLEdBQWUsSUFBZixHQUFzQkEsSUFBSSxHQUFHLEVBQXpGO0FBQ0Q7O0FBRUQsT0FBSyxJQUFJekgsTUFBTSxHQUFHLEtBQUtDLE9BQWxCLEVBQTJCQyxDQUFDLEdBQUdGLE1BQU0sQ0FBQ0csTUFBdEMsRUFBOENHLENBQUMsR0FBRyxDQUF2RCxFQUEwREEsQ0FBQyxHQUFHSixDQUE5RCxFQUFpRSxFQUFFSSxDQUFuRSxFQUFzRTtBQUNwRSxTQUFLLElBQUlDLEtBQUssR0FBR1AsTUFBTSxDQUFDTSxDQUFELENBQWxCLEVBQXVCRSxDQUFDLEdBQUdELEtBQUssQ0FBQ0osTUFBakMsRUFBeUNPLElBQXpDLEVBQStDRSxDQUFDLEdBQUcsQ0FBeEQsRUFBMkRBLENBQUMsR0FBR0osQ0FBL0QsRUFBa0UsRUFBRUksQ0FBcEUsRUFBdUU7QUFDckUsVUFBSUYsSUFBSSxHQUFHSCxLQUFLLENBQUNLLENBQUQsQ0FBaEIsRUFBcUI7QUFDbkJ1VixRQUFBQSxRQUFRLENBQUN6VixJQUFELEVBQU8rRyxJQUFQLEVBQWFnTyxFQUFiLEVBQWlCN1UsQ0FBakIsRUFBb0JMLEtBQXBCLEVBQTJCb1YsTUFBTSxJQUFJMlUsT0FBTyxDQUFDNXBCLElBQUQsRUFBTytVLEVBQVAsQ0FBNUMsQ0FBUjtBQUNEO0FBQ0Y7QUFDRjs7QUFFRCxTQUFPLElBQUlxVSxVQUFKLENBQWU5cEIsTUFBZixFQUF1QixLQUFLZSxRQUE1QixFQUFzQzBHLElBQXRDLEVBQTRDZ08sRUFBNUMsQ0FBUDtBQUNELEM7O0FDekNEO0FBQ0E7QUFDQTtBQUVBbFEsaUNBQUEsR0FBZ0N3bkIsbUJBQWhDO0FBQ0F4bkIsa0NBQUEsR0FBaUN5bkIsb0JBQWpDLEM7O0FDTEE7QUFDQTtBQUNBOzs7QUNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsSUFBSVEsU0FBUyxHQUFHO0FBQUMvbEIsRUFBQUEsSUFBSSxFQUFFO0FBQVAsQ0FBaEI7QUFBQSxJQUNJZ21CLFVBQVUsR0FBRztBQUFDaG1CLEVBQUFBLElBQUksRUFBRTtBQUFQLENBRGpCO0FBQUEsSUFFSWltQixXQUFXLEdBQUc7QUFBQ2ptQixFQUFBQSxJQUFJLEVBQUU7QUFBUCxDQUZsQjtBQUFBLElBR0lrbUIsV0FBVyxHQUFHO0FBQUNsbUIsRUFBQUEsSUFBSSxFQUFFO0FBQVAsQ0FIbEI7QUFLQSxNQUFNO0FBQUNtbUIsRUFBQUEsR0FBRDtBQUFNM0gsRUFBQUEsR0FBTjtBQUFXL2YsRUFBQUE7QUFBWCxJQUFrQkQsSUFBeEI7O0FBRUEsU0FBUzRuQixPQUFULENBQWlCelosQ0FBakIsRUFBb0I7QUFDbEIsU0FBTyxDQUFDLENBQUNBLENBQUMsQ0FBQyxDQUFELENBQUgsRUFBUSxDQUFDQSxDQUFDLENBQUMsQ0FBRCxDQUFWLENBQVA7QUFDRDs7QUFFRCxTQUFTMFosT0FBVCxDQUFpQjFaLENBQWpCLEVBQW9CO0FBQ2xCLFNBQU8sQ0FBQ3laLE9BQU8sQ0FBQ3paLENBQUMsQ0FBQyxDQUFELENBQUYsQ0FBUixFQUFnQnlaLE9BQU8sQ0FBQ3paLENBQUMsQ0FBQyxDQUFELENBQUYsQ0FBdkIsQ0FBUDtBQUNEOztBQUVELElBQUkyWixDQUFDLEdBQUc7QUFDTnRtQixFQUFBQSxJQUFJLEVBQUUsR0FEQTtBQUVOdW1CLEVBQUFBLE9BQU8sRUFBRSxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVdwckIsR0FBWCxDQUFlMEssSUFBZixDQUZIO0FBR04yZ0IsRUFBQUEsS0FBSyxFQUFFLFVBQVNodEIsQ0FBVCxFQUFZbVQsQ0FBWixFQUFlO0FBQUUsV0FBT25ULENBQUMsSUFBSSxJQUFMLEdBQVksSUFBWixHQUFtQixDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLENBQUQsQ0FBSCxFQUFRbVQsQ0FBQyxDQUFDLENBQUQsQ0FBRCxDQUFLLENBQUwsQ0FBUixDQUFELEVBQW1CLENBQUMsQ0FBQ25ULENBQUMsQ0FBQyxDQUFELENBQUgsRUFBUW1ULENBQUMsQ0FBQyxDQUFELENBQUQsQ0FBSyxDQUFMLENBQVIsQ0FBbkIsQ0FBMUI7QUFBaUUsR0FIbkY7QUFJTjhaLEVBQUFBLE1BQU0sRUFBRSxVQUFTQyxFQUFULEVBQWE7QUFBRSxXQUFPQSxFQUFFLElBQUksQ0FBQ0EsRUFBRSxDQUFDLENBQUQsQ0FBRixDQUFNLENBQU4sQ0FBRCxFQUFXQSxFQUFFLENBQUMsQ0FBRCxDQUFGLENBQU0sQ0FBTixDQUFYLENBQWI7QUFBb0M7QUFKckQsQ0FBUjtBQU9BLElBQUlDLENBQUMsR0FBRztBQUNOM21CLEVBQUFBLElBQUksRUFBRSxHQURBO0FBRU51bUIsRUFBQUEsT0FBTyxFQUFFLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBV3ByQixHQUFYLENBQWUwSyxJQUFmLENBRkg7QUFHTjJnQixFQUFBQSxLQUFLLEVBQUUsVUFBUy9HLENBQVQsRUFBWTlTLENBQVosRUFBZTtBQUFFLFdBQU84UyxDQUFDLElBQUksSUFBTCxHQUFZLElBQVosR0FBbUIsQ0FBQyxDQUFDOVMsQ0FBQyxDQUFDLENBQUQsQ0FBRCxDQUFLLENBQUwsQ0FBRCxFQUFVLENBQUM4UyxDQUFDLENBQUMsQ0FBRCxDQUFaLENBQUQsRUFBbUIsQ0FBQzlTLENBQUMsQ0FBQyxDQUFELENBQUQsQ0FBSyxDQUFMLENBQUQsRUFBVSxDQUFDOFMsQ0FBQyxDQUFDLENBQUQsQ0FBWixDQUFuQixDQUExQjtBQUFpRSxHQUhuRjtBQUlOZ0gsRUFBQUEsTUFBTSxFQUFFLFVBQVNDLEVBQVQsRUFBYTtBQUFFLFdBQU9BLEVBQUUsSUFBSSxDQUFDQSxFQUFFLENBQUMsQ0FBRCxDQUFGLENBQU0sQ0FBTixDQUFELEVBQVdBLEVBQUUsQ0FBQyxDQUFELENBQUYsQ0FBTSxDQUFOLENBQVgsQ0FBYjtBQUFvQztBQUpyRCxDQUFSO0FBT0EsSUFBSUUsRUFBRSxHQUFHO0FBQ1A1bUIsRUFBQUEsSUFBSSxFQUFFLElBREM7QUFFUHVtQixFQUFBQSxPQUFPLEVBQUUsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLEdBQVgsRUFBZ0IsR0FBaEIsRUFBcUIsSUFBckIsRUFBMkIsSUFBM0IsRUFBaUMsSUFBakMsRUFBdUMsSUFBdkMsRUFBNkNwckIsR0FBN0MsQ0FBaUQwSyxJQUFqRCxDQUZGO0FBR1AyZ0IsRUFBQUEsS0FBSyxFQUFFLFVBQVNFLEVBQVQsRUFBYTtBQUFFLFdBQU9BLEVBQUUsSUFBSSxJQUFOLEdBQWEsSUFBYixHQUFvQkwsT0FBTyxDQUFDSyxFQUFELENBQWxDO0FBQXlDLEdBSHhEO0FBSVBELEVBQUFBLE1BQU0sRUFBRSxVQUFTQyxFQUFULEVBQWE7QUFBRSxXQUFPQSxFQUFQO0FBQVk7QUFKNUIsQ0FBVDtBQU9BLElBQUlHLE9BQU8sR0FBRztBQUNaQyxFQUFBQSxPQUFPLEVBQUUsV0FERztBQUVaaHBCLEVBQUFBLFNBQVMsRUFBRSxNQUZDO0FBR1ovRSxFQUFBQSxDQUFDLEVBQUUsV0FIUztBQUlaNFQsRUFBQUEsQ0FBQyxFQUFFLFdBSlM7QUFLWm9FLEVBQUFBLENBQUMsRUFBRSxXQUxTO0FBTVpnVyxFQUFBQSxDQUFDLEVBQUUsV0FOUztBQU9aQyxFQUFBQSxFQUFFLEVBQUUsYUFQUTtBQVFaQyxFQUFBQSxFQUFFLEVBQUUsYUFSUTtBQVNaQyxFQUFBQSxFQUFFLEVBQUUsYUFUUTtBQVVaQyxFQUFBQSxFQUFFLEVBQUU7QUFWUSxDQUFkO0FBYUEsSUFBSUMsS0FBSyxHQUFHO0FBQ1Z6YSxFQUFBQSxDQUFDLEVBQUUsR0FETztBQUVWb2EsRUFBQUEsQ0FBQyxFQUFFLEdBRk87QUFHVkMsRUFBQUEsRUFBRSxFQUFFLElBSE07QUFJVkMsRUFBQUEsRUFBRSxFQUFFLElBSk07QUFLVkMsRUFBQUEsRUFBRSxFQUFFLElBTE07QUFNVkMsRUFBQUEsRUFBRSxFQUFFO0FBTk0sQ0FBWjtBQVNBLElBQUlFLEtBQUssR0FBRztBQUNWdHVCLEVBQUFBLENBQUMsRUFBRSxHQURPO0FBRVZnWSxFQUFBQSxDQUFDLEVBQUUsR0FGTztBQUdWaVcsRUFBQUEsRUFBRSxFQUFFLElBSE07QUFJVkMsRUFBQUEsRUFBRSxFQUFFLElBSk07QUFLVkMsRUFBQUEsRUFBRSxFQUFFLElBTE07QUFNVkMsRUFBQUEsRUFBRSxFQUFFO0FBTk0sQ0FBWjtBQVNBLElBQUlHLE1BQU0sR0FBRztBQUNYUixFQUFBQSxPQUFPLEVBQUUsQ0FBQyxDQURDO0FBRVhocEIsRUFBQUEsU0FBUyxFQUFFLENBQUMsQ0FGRDtBQUdYL0UsRUFBQUEsQ0FBQyxFQUFFLElBSFE7QUFJWDRULEVBQUFBLENBQUMsRUFBRSxDQUFDLENBSk87QUFLWG9FLEVBQUFBLENBQUMsRUFBRSxJQUxRO0FBTVhnVyxFQUFBQSxDQUFDLEVBQUUsQ0FBQyxDQU5PO0FBT1hDLEVBQUFBLEVBQUUsRUFBRSxDQUFDLENBUE07QUFRWEMsRUFBQUEsRUFBRSxFQUFFLENBQUMsQ0FSTTtBQVNYQyxFQUFBQSxFQUFFLEVBQUUsQ0FBQyxDQVRNO0FBVVhDLEVBQUFBLEVBQUUsRUFBRSxDQUFDO0FBVk0sQ0FBYjtBQWFBLElBQUlJLE1BQU0sR0FBRztBQUNYVCxFQUFBQSxPQUFPLEVBQUUsQ0FBQyxDQURDO0FBRVhocEIsRUFBQUEsU0FBUyxFQUFFLENBQUMsQ0FGRDtBQUdYL0UsRUFBQUEsQ0FBQyxFQUFFLENBQUMsQ0FITztBQUlYNFQsRUFBQUEsQ0FBQyxFQUFFLElBSlE7QUFLWG9FLEVBQUFBLENBQUMsRUFBRSxDQUFDLENBTE87QUFNWGdXLEVBQUFBLENBQUMsRUFBRSxJQU5RO0FBT1hDLEVBQUFBLEVBQUUsRUFBRSxDQUFDLENBUE07QUFRWEMsRUFBQUEsRUFBRSxFQUFFLENBQUMsQ0FSTTtBQVNYQyxFQUFBQSxFQUFFLEVBQUUsQ0FBQyxDQVRNO0FBVVhDLEVBQUFBLEVBQUUsRUFBRSxDQUFDO0FBVk0sQ0FBYjs7QUFhQSxTQUFTdGhCLElBQVQsQ0FBY0QsQ0FBZCxFQUFpQjtBQUNmLFNBQU87QUFBQ0MsSUFBQUEsSUFBSSxFQUFFRDtBQUFQLEdBQVA7QUFDRCxFQUVEOzs7QUFDQSxTQUFTNGhCLGFBQVQsQ0FBdUIvaEIsS0FBdkIsRUFBOEI7QUFDNUIsU0FBTyxDQUFDQSxLQUFLLENBQUNnaUIsT0FBUCxJQUFrQixDQUFDaGlCLEtBQUssQ0FBQ2lpQixNQUFoQztBQUNEOztBQUVELFNBQVNDLGFBQVQsR0FBeUI7QUFDdkIsTUFBSWhvQixHQUFHLEdBQUcsS0FBS2lvQixlQUFMLElBQXdCLElBQWxDOztBQUNBLE1BQUlqb0IsR0FBRyxDQUFDa29CLFlBQUosQ0FBaUIsU0FBakIsQ0FBSixFQUFpQztBQUMvQmxvQixJQUFBQSxHQUFHLEdBQUdBLEdBQUcsQ0FBQ21vQixPQUFKLENBQVl6WCxPQUFsQjtBQUNBLFdBQU8sQ0FBQyxDQUFDMVEsR0FBRyxDQUFDbkcsQ0FBTCxFQUFRbUcsR0FBRyxDQUFDOGYsQ0FBWixDQUFELEVBQWlCLENBQUM5ZixHQUFHLENBQUNuRyxDQUFKLEdBQVFtRyxHQUFHLENBQUNvb0IsS0FBYixFQUFvQnBvQixHQUFHLENBQUM4ZixDQUFKLEdBQVE5ZixHQUFHLENBQUNxb0IsTUFBaEMsQ0FBakIsQ0FBUDtBQUNEOztBQUNELFNBQU8sQ0FBQyxDQUFDLENBQUQsRUFBSSxDQUFKLENBQUQsRUFBUyxDQUFDcm9CLEdBQUcsQ0FBQ29vQixLQUFKLENBQVUxWCxPQUFWLENBQWtCcFQsS0FBbkIsRUFBMEIwQyxHQUFHLENBQUNxb0IsTUFBSixDQUFXM1gsT0FBWCxDQUFtQnBULEtBQTdDLENBQVQsQ0FBUDtBQUNEOztBQUVELFNBQVNnckIsZ0JBQVQsR0FBNEI7QUFDMUIsU0FBT0MsU0FBUyxDQUFDQyxjQUFWLElBQTZCLGtCQUFrQixJQUF0RDtBQUNELEVBRUQ7OztBQUNBLFNBQVM3bkIsS0FBVCxDQUFlckgsSUFBZixFQUFxQjtBQUNuQixTQUFPLENBQUNBLElBQUksQ0FBQ212QixPQUFiLEVBQXNCLElBQUksRUFBRW52QixJQUFJLEdBQUdBLElBQUksQ0FBQzZGLFVBQWQsQ0FBSixFQUErQjs7QUFDckQsU0FBTzdGLElBQUksQ0FBQ212QixPQUFaO0FBQ0Q7O0FBRUQsU0FBU3p1QixXQUFULENBQWUwdUIsTUFBZixFQUF1QjtBQUNyQixTQUFPQSxNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVUsQ0FBVixNQUFpQkEsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVLENBQVYsQ0FBakIsSUFDQUEsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVLENBQVYsTUFBaUJBLE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVSxDQUFWLENBRHhCO0FBRUQ7O0FBRU0sU0FBU0MsY0FBVCxDQUF3QnJ2QixJQUF4QixFQUE4QjtBQUNuQyxNQUFJdVYsS0FBSyxHQUFHdlYsSUFBSSxDQUFDbXZCLE9BQWpCO0FBQ0EsU0FBTzVaLEtBQUssR0FBR0EsS0FBSyxDQUFDK1osR0FBTixDQUFVOUIsTUFBVixDQUFpQmpZLEtBQUssQ0FBQzFRLFNBQXZCLENBQUgsR0FBdUMsSUFBbkQ7QUFDRDtBQUVNLFNBQVMwcUIsTUFBVCxHQUFrQjtBQUN2QixTQUFPQyxXQUFLLENBQUNuQyxDQUFELENBQVo7QUFDRDtBQUVNLFNBQVNvQyxNQUFULEdBQWtCO0FBQ3ZCLFNBQU9ELFdBQUssQ0FBQzlCLENBQUQsQ0FBWjtBQUNEO0FBRUQsNkJBQWUsaUJBQVc7QUFDeEIsU0FBTzhCLFdBQUssQ0FBQzdCLEVBQUQsQ0FBWjtBQUNEOztBQUVELFNBQVM2QixXQUFULENBQWVGLEdBQWYsRUFBb0I7QUFDbEIsTUFBSUYsTUFBTSxHQUFHVixhQUFiO0FBQUEsTUFDSS9zQixNQUFNLEdBQUc0c0IsYUFEYjtBQUFBLE1BRUltQixTQUFTLEdBQUdWLGdCQUZoQjtBQUFBLE1BR0lXLElBQUksR0FBRyxJQUhYO0FBQUEsTUFJSUMsU0FBUyxHQUFHL2UsUUFBUSxDQUFDLE9BQUQsRUFBVSxPQUFWLEVBQW1CLEtBQW5CLENBSnhCO0FBQUEsTUFLSWdmLFVBQVUsR0FBRyxDQUxqQjtBQUFBLE1BTUlDLFdBTko7O0FBUUEsV0FBU04sS0FBVCxDQUFlM3ZCLEtBQWYsRUFBc0I7QUFDcEIsUUFBSWd1QixPQUFPLEdBQUdodUIsS0FBSyxDQUNkd00sUUFEUyxDQUNBLFNBREEsRUFDVzBqQixVQURYLEVBRVhsdUIsU0FGVyxDQUVELFVBRkMsRUFHWHNCLElBSFcsQ0FHTixDQUFDeUosSUFBSSxDQUFDLFNBQUQsQ0FBTCxDQUhNLENBQWQ7QUFLQWloQixJQUFBQSxPQUFPLENBQUM1cUIsS0FBUixHQUFnQjZCLE1BQWhCLENBQXVCLE1BQXZCLEVBQ0swTCxJQURMLENBQ1UsT0FEVixFQUNtQixTQURuQixFQUVLQSxJQUZMLENBRVUsZ0JBRlYsRUFFNEIsS0FGNUIsRUFHS0EsSUFITCxDQUdVLFFBSFYsRUFHb0JvZCxPQUFPLENBQUNDLE9BSDVCLEVBSUc3b0IsS0FKSCxDQUlTNm9CLE9BSlQsRUFLS3hsQixJQUxMLENBS1UsWUFBVztBQUNmLFVBQUkrbUIsTUFBTSxHQUFHL25CLEtBQUssQ0FBQyxJQUFELENBQUwsQ0FBWStuQixNQUF6QjtBQUNBL3ZCLE1BQUFBLE1BQU0sQ0FBQyxJQUFELENBQU4sQ0FDS21SLElBREwsQ0FDVSxHQURWLEVBQ2U0ZSxNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVUsQ0FBVixDQURmLEVBRUs1ZSxJQUZMLENBRVUsR0FGVixFQUVlNGUsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVLENBQVYsQ0FGZixFQUdLNWUsSUFITCxDQUdVLE9BSFYsRUFHbUI0ZSxNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVUsQ0FBVixJQUFlQSxNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVUsQ0FBVixDQUhsQyxFQUlLNWUsSUFKTCxDQUlVLFFBSlYsRUFJb0I0ZSxNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVUsQ0FBVixJQUFlQSxNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVUsQ0FBVixDQUpuQztBQUtELEtBWkw7QUFjQXZ2QixJQUFBQSxLQUFLLENBQUNnQyxTQUFOLENBQWdCLFlBQWhCLEVBQ0dzQixJQURILENBQ1EsQ0FBQ3lKLElBQUksQ0FBQyxXQUFELENBQUwsQ0FEUixFQUVHM0osS0FGSCxHQUVXNkIsTUFGWCxDQUVrQixNQUZsQixFQUdLMEwsSUFITCxDQUdVLE9BSFYsRUFHbUIsV0FIbkIsRUFJS0EsSUFKTCxDQUlVLFFBSlYsRUFJb0JvZCxPQUFPLENBQUMvb0IsU0FKNUIsRUFLSzJMLElBTEwsQ0FLVSxNQUxWLEVBS2tCLE1BTGxCLEVBTUtBLElBTkwsQ0FNVSxjQU5WLEVBTTBCLEdBTjFCLEVBT0tBLElBUEwsQ0FPVSxRQVBWLEVBT29CLE1BUHBCLEVBUUtBLElBUkwsQ0FRVSxpQkFSVixFQVE2QixZQVI3QjtBQVVBLFFBQUl3ZixNQUFNLEdBQUdud0IsS0FBSyxDQUFDZ0MsU0FBTixDQUFnQixTQUFoQixFQUNWc0IsSUFEVSxDQUNMbXNCLEdBQUcsQ0FBQ2hDLE9BREMsRUFDUSxVQUFTOVcsQ0FBVCxFQUFZO0FBQUUsYUFBT0EsQ0FBQyxDQUFDNUosSUFBVDtBQUFnQixLQUR0QyxDQUFiO0FBR0FvakIsSUFBQUEsTUFBTSxDQUFDOXNCLElBQVAsR0FBYzZCLE1BQWQ7QUFFQWlyQixJQUFBQSxNQUFNLENBQUMvc0IsS0FBUCxHQUFlNkIsTUFBZixDQUFzQixNQUF0QixFQUNLMEwsSUFETCxDQUNVLE9BRFYsRUFDbUIsVUFBU2dHLENBQVQsRUFBWTtBQUFFLGFBQU8sb0JBQW9CQSxDQUFDLENBQUM1SixJQUE3QjtBQUFvQyxLQURyRSxFQUVLNEQsSUFGTCxDQUVVLFFBRlYsRUFFb0IsVUFBU2dHLENBQVQsRUFBWTtBQUFFLGFBQU9vWCxPQUFPLENBQUNwWCxDQUFDLENBQUM1SixJQUFILENBQWQ7QUFBeUIsS0FGM0Q7QUFJQS9NLElBQUFBLEtBQUssQ0FDQXdJLElBREwsQ0FDVTRuQixNQURWLEVBRUt6ZixJQUZMLENBRVUsTUFGVixFQUVrQixNQUZsQixFQUdLQSxJQUhMLENBR1UsZ0JBSFYsRUFHNEIsS0FINUIsRUFJS3pELEVBSkwsQ0FJUSxpQkFKUixFQUkyQm1qQixPQUozQixFQUtHdnVCLE1BTEgsQ0FLVSt0QixTQUxWLEVBTUszaUIsRUFOTCxDQU1RLGtCQU5SLEVBTTRCbWpCLE9BTjVCLEVBT0tuakIsRUFQTCxDQU9RLGlCQVBSLEVBTzJCb2pCLFVBUDNCLEVBUUtwakIsRUFSTCxDQVFRLGtDQVJSLEVBUTRDcWpCLFVBUjVDLEVBU0szbkIsS0FUTCxDQVNXLGNBVFgsRUFTMkIsTUFUM0IsRUFVS0EsS0FWTCxDQVVXLDZCQVZYLEVBVTBDLGVBVjFDO0FBV0Q7O0FBRUQrbUIsRUFBQUEsS0FBSyxDQUFDYSxJQUFOLEdBQWEsVUFBU3h3QixLQUFULEVBQWdCZ0YsU0FBaEIsRUFBMkIySCxLQUEzQixFQUFrQztBQUM3QyxRQUFJM00sS0FBSyxDQUFDdVYsS0FBVixFQUFpQjtBQUNmdlYsTUFBQUEsS0FBSyxDQUNBa04sRUFETCxDQUNRLGFBRFIsRUFDdUIsVUFBU1AsS0FBVCxFQUFnQjtBQUFFOGpCLFFBQUFBLE9BQU8sQ0FBQyxJQUFELEVBQU92dkIsU0FBUCxDQUFQLENBQXlCd3ZCLFdBQXpCLEdBQXVDNWEsS0FBdkMsQ0FBNkNuSixLQUE3QztBQUFzRCxPQUQvRixFQUVLTyxFQUZMLENBRVEsMkJBRlIsRUFFcUMsVUFBU1AsS0FBVCxFQUFnQjtBQUFFOGpCLFFBQUFBLE9BQU8sQ0FBQyxJQUFELEVBQU92dkIsU0FBUCxDQUFQLENBQXlCZ21CLEdBQXpCLENBQTZCdmEsS0FBN0I7QUFBc0MsT0FGN0YsRUFHSzRJLEtBSEwsQ0FHVyxPQUhYLEVBR29CLFlBQVc7QUFDekIsWUFBSTVELElBQUksR0FBRyxJQUFYO0FBQUEsWUFDSStELEtBQUssR0FBRy9ELElBQUksQ0FBQzJkLE9BRGpCO0FBQUEsWUFFSXFCLElBQUksR0FBR0YsT0FBTyxDQUFDOWUsSUFBRCxFQUFPelEsU0FBUCxDQUZsQjtBQUFBLFlBR0kwdkIsVUFBVSxHQUFHbGIsS0FBSyxDQUFDMVEsU0FIdkI7QUFBQSxZQUlJNnJCLFVBQVUsR0FBR3BCLEdBQUcsQ0FBQy9CLEtBQUosQ0FBVSxPQUFPMW9CLFNBQVAsS0FBcUIsVUFBckIsR0FBa0NBLFNBQVMsQ0FBQy9ELEtBQVYsQ0FBZ0IsSUFBaEIsRUFBc0JDLFNBQXRCLENBQWxDLEdBQXFFOEQsU0FBL0UsRUFBMEYwUSxLQUFLLENBQUM2WixNQUFoRyxDQUpqQjtBQUFBLFlBS0lsdkIsQ0FBQyxHQUFHZ29CLFdBQVcsQ0FBQ3VJLFVBQUQsRUFBYUMsVUFBYixDQUxuQjs7QUFPQSxpQkFBU3RiLEtBQVQsQ0FBZXpJLENBQWYsRUFBa0I7QUFDaEI0SSxVQUFBQSxLQUFLLENBQUMxUSxTQUFOLEdBQWtCOEgsQ0FBQyxLQUFLLENBQU4sSUFBVytqQixVQUFVLEtBQUssSUFBMUIsR0FBaUMsSUFBakMsR0FBd0N4d0IsQ0FBQyxDQUFDeU0sQ0FBRCxDQUEzRDtBQUNBc2pCLFVBQUFBLE1BQU0sQ0FBQzl2QixJQUFQLENBQVlxUixJQUFaO0FBQ0FnZixVQUFBQSxJQUFJLENBQUNoQixLQUFMO0FBQ0Q7O0FBRUQsZUFBT2lCLFVBQVUsS0FBSyxJQUFmLElBQXVCQyxVQUFVLEtBQUssSUFBdEMsR0FBNkN0YixLQUE3QyxHQUFxREEsS0FBSyxDQUFDLENBQUQsQ0FBakU7QUFDRCxPQWxCTDtBQW1CRCxLQXBCRCxNQW9CTztBQUNMdlYsTUFBQUEsS0FBSyxDQUNBd0ksSUFETCxDQUNVLFlBQVc7QUFDZixZQUFJbUosSUFBSSxHQUFHLElBQVg7QUFBQSxZQUNJQyxJQUFJLEdBQUcxUSxTQURYO0FBQUEsWUFFSXdVLEtBQUssR0FBRy9ELElBQUksQ0FBQzJkLE9BRmpCO0FBQUEsWUFHSXVCLFVBQVUsR0FBR3BCLEdBQUcsQ0FBQy9CLEtBQUosQ0FBVSxPQUFPMW9CLFNBQVAsS0FBcUIsVUFBckIsR0FBa0NBLFNBQVMsQ0FBQy9ELEtBQVYsQ0FBZ0IwUSxJQUFoQixFQUFzQkMsSUFBdEIsQ0FBbEMsR0FBZ0U1TSxTQUExRSxFQUFxRjBRLEtBQUssQ0FBQzZaLE1BQTNGLENBSGpCO0FBQUEsWUFJSW9CLElBQUksR0FBR0YsT0FBTyxDQUFDOWUsSUFBRCxFQUFPQyxJQUFQLENBQVAsQ0FBb0I4ZSxXQUFwQixFQUpYO0FBTUF6YSxRQUFBQSxTQUFTLENBQUN0RSxJQUFELENBQVQ7QUFDQStELFFBQUFBLEtBQUssQ0FBQzFRLFNBQU4sR0FBa0I2ckIsVUFBVSxLQUFLLElBQWYsR0FBc0IsSUFBdEIsR0FBNkJBLFVBQS9DO0FBQ0FULFFBQUFBLE1BQU0sQ0FBQzl2QixJQUFQLENBQVlxUixJQUFaO0FBQ0FnZixRQUFBQSxJQUFJLENBQUM3YSxLQUFMLENBQVduSixLQUFYLEVBQWtCZ2pCLEtBQWxCLENBQXdCaGpCLEtBQXhCLEVBQStCdWEsR0FBL0IsQ0FBbUN2YSxLQUFuQztBQUNELE9BWkw7QUFhRDtBQUNGLEdBcENEOztBQXNDQWdqQixFQUFBQSxLQUFLLENBQUNtQixLQUFOLEdBQWMsVUFBUzl3QixLQUFULEVBQWdCMk0sS0FBaEIsRUFBdUI7QUFDbkNnakIsSUFBQUEsS0FBSyxDQUFDYSxJQUFOLENBQVd4d0IsS0FBWCxFQUFrQixJQUFsQixFQUF3QjJNLEtBQXhCO0FBQ0QsR0FGRDs7QUFJQSxXQUFTeWpCLE1BQVQsR0FBa0I7QUFDaEIsUUFBSXB3QixLQUFLLEdBQUdSLE1BQU0sQ0FBQyxJQUFELENBQWxCO0FBQUEsUUFDSXdGLFNBQVMsR0FBR3dDLEtBQUssQ0FBQyxJQUFELENBQUwsQ0FBWXhDLFNBRDVCOztBQUdBLFFBQUlBLFNBQUosRUFBZTtBQUNiaEYsTUFBQUEsS0FBSyxDQUFDZ0MsU0FBTixDQUFnQixZQUFoQixFQUNLNEcsS0FETCxDQUNXLFNBRFgsRUFDc0IsSUFEdEIsRUFFSytILElBRkwsQ0FFVSxHQUZWLEVBRWUzTCxTQUFTLENBQUMsQ0FBRCxDQUFULENBQWEsQ0FBYixDQUZmLEVBR0syTCxJQUhMLENBR1UsR0FIVixFQUdlM0wsU0FBUyxDQUFDLENBQUQsQ0FBVCxDQUFhLENBQWIsQ0FIZixFQUlLMkwsSUFKTCxDQUlVLE9BSlYsRUFJbUIzTCxTQUFTLENBQUMsQ0FBRCxDQUFULENBQWEsQ0FBYixJQUFrQkEsU0FBUyxDQUFDLENBQUQsQ0FBVCxDQUFhLENBQWIsQ0FKckMsRUFLSzJMLElBTEwsQ0FLVSxRQUxWLEVBS29CM0wsU0FBUyxDQUFDLENBQUQsQ0FBVCxDQUFhLENBQWIsSUFBa0JBLFNBQVMsQ0FBQyxDQUFELENBQVQsQ0FBYSxDQUFiLENBTHRDO0FBT0FoRixNQUFBQSxLQUFLLENBQUNnQyxTQUFOLENBQWdCLFNBQWhCLEVBQ0s0RyxLQURMLENBQ1csU0FEWCxFQUNzQixJQUR0QixFQUVLK0gsSUFGTCxDQUVVLEdBRlYsRUFFZSxVQUFTZ0csQ0FBVCxFQUFZO0FBQUUsZUFBT0EsQ0FBQyxDQUFDNUosSUFBRixDQUFPNEosQ0FBQyxDQUFDNUosSUFBRixDQUFPbk4sTUFBUCxHQUFnQixDQUF2QixNQUE4QixHQUE5QixHQUFvQ29GLFNBQVMsQ0FBQyxDQUFELENBQVQsQ0FBYSxDQUFiLElBQWtCZ3JCLFVBQVUsR0FBRyxDQUFuRSxHQUF1RWhyQixTQUFTLENBQUMsQ0FBRCxDQUFULENBQWEsQ0FBYixJQUFrQmdyQixVQUFVLEdBQUcsQ0FBN0c7QUFBaUgsT0FGOUksRUFHS3JmLElBSEwsQ0FHVSxHQUhWLEVBR2UsVUFBU2dHLENBQVQsRUFBWTtBQUFFLGVBQU9BLENBQUMsQ0FBQzVKLElBQUYsQ0FBTyxDQUFQLE1BQWMsR0FBZCxHQUFvQi9ILFNBQVMsQ0FBQyxDQUFELENBQVQsQ0FBYSxDQUFiLElBQWtCZ3JCLFVBQVUsR0FBRyxDQUFuRCxHQUF1RGhyQixTQUFTLENBQUMsQ0FBRCxDQUFULENBQWEsQ0FBYixJQUFrQmdyQixVQUFVLEdBQUcsQ0FBN0Y7QUFBaUcsT0FIOUgsRUFJS3JmLElBSkwsQ0FJVSxPQUpWLEVBSW1CLFVBQVNnRyxDQUFULEVBQVk7QUFBRSxlQUFPQSxDQUFDLENBQUM1SixJQUFGLEtBQVcsR0FBWCxJQUFrQjRKLENBQUMsQ0FBQzVKLElBQUYsS0FBVyxHQUE3QixHQUFtQy9ILFNBQVMsQ0FBQyxDQUFELENBQVQsQ0FBYSxDQUFiLElBQWtCQSxTQUFTLENBQUMsQ0FBRCxDQUFULENBQWEsQ0FBYixDQUFsQixHQUFvQ2dyQixVQUF2RSxHQUFvRkEsVUFBM0Y7QUFBd0csT0FKekksRUFLS3JmLElBTEwsQ0FLVSxRQUxWLEVBS29CLFVBQVNnRyxDQUFULEVBQVk7QUFBRSxlQUFPQSxDQUFDLENBQUM1SixJQUFGLEtBQVcsR0FBWCxJQUFrQjRKLENBQUMsQ0FBQzVKLElBQUYsS0FBVyxHQUE3QixHQUFtQy9ILFNBQVMsQ0FBQyxDQUFELENBQVQsQ0FBYSxDQUFiLElBQWtCQSxTQUFTLENBQUMsQ0FBRCxDQUFULENBQWEsQ0FBYixDQUFsQixHQUFvQ2dyQixVQUF2RSxHQUFvRkEsVUFBM0Y7QUFBd0csT0FMMUk7QUFNRCxLQWRELE1BZ0JLO0FBQ0hod0IsTUFBQUEsS0FBSyxDQUFDZ0MsU0FBTixDQUFnQixvQkFBaEIsRUFDSzRHLEtBREwsQ0FDVyxTQURYLEVBQ3NCLE1BRHRCLEVBRUsrSCxJQUZMLENBRVUsR0FGVixFQUVlLElBRmYsRUFHS0EsSUFITCxDQUdVLEdBSFYsRUFHZSxJQUhmLEVBSUtBLElBSkwsQ0FJVSxPQUpWLEVBSW1CLElBSm5CLEVBS0tBLElBTEwsQ0FLVSxRQUxWLEVBS29CLElBTHBCO0FBTUQ7QUFDRjs7QUFFRCxXQUFTOGYsT0FBVCxDQUFpQjllLElBQWpCLEVBQXVCQyxJQUF2QixFQUE2Qm1mLEtBQTdCLEVBQW9DO0FBQ2xDLFFBQUlKLElBQUksR0FBR2hmLElBQUksQ0FBQzJkLE9BQUwsQ0FBYW1CLE9BQXhCO0FBQ0EsV0FBT0UsSUFBSSxLQUFLLENBQUNJLEtBQUQsSUFBVSxDQUFDSixJQUFJLENBQUNJLEtBQXJCLENBQUosR0FBa0NKLElBQWxDLEdBQXlDLElBQUlLLE9BQUosQ0FBWXJmLElBQVosRUFBa0JDLElBQWxCLEVBQXdCbWYsS0FBeEIsQ0FBaEQ7QUFDRDs7QUFFRCxXQUFTQyxPQUFULENBQWlCcmYsSUFBakIsRUFBdUJDLElBQXZCLEVBQTZCbWYsS0FBN0IsRUFBb0M7QUFDbEMsU0FBS3BmLElBQUwsR0FBWUEsSUFBWjtBQUNBLFNBQUtDLElBQUwsR0FBWUEsSUFBWjtBQUNBLFNBQUs4RCxLQUFMLEdBQWEvRCxJQUFJLENBQUMyZCxPQUFsQjtBQUNBLFNBQUt0WixNQUFMLEdBQWMsQ0FBZDtBQUNBLFNBQUsrYSxLQUFMLEdBQWFBLEtBQWI7QUFDRDs7QUFFREMsRUFBQUEsT0FBTyxDQUFDeHZCLFNBQVIsR0FBb0I7QUFDbEJrdkIsSUFBQUEsV0FBVyxFQUFFLFlBQVc7QUFDdEIsVUFBSSxFQUFFLEtBQUsxYSxNQUFQLEtBQWtCLENBQXRCLEVBQXlCLEtBQUtOLEtBQUwsQ0FBVythLE9BQVgsR0FBcUIsSUFBckIsRUFBMkIsS0FBS1EsUUFBTCxHQUFnQixJQUEzQztBQUN6QixhQUFPLElBQVA7QUFDRCxLQUppQjtBQUtsQm5iLElBQUFBLEtBQUssRUFBRSxVQUFTbkosS0FBVCxFQUFnQnVrQixJQUFoQixFQUFzQjtBQUMzQixVQUFJLEtBQUtELFFBQVQsRUFBbUIsS0FBS0EsUUFBTCxHQUFnQixLQUFoQixFQUF1QixLQUFLTixJQUFMLENBQVUsT0FBVixFQUFtQmhrQixLQUFuQixFQUEwQnVrQixJQUExQixDQUF2QixDQUFuQixLQUNLLEtBQUtQLElBQUwsQ0FBVSxPQUFWLEVBQW1CaGtCLEtBQW5CO0FBQ0wsYUFBTyxJQUFQO0FBQ0QsS0FUaUI7QUFVbEJnakIsSUFBQUEsS0FBSyxFQUFFLFVBQVNoakIsS0FBVCxFQUFnQnVrQixJQUFoQixFQUFzQjtBQUMzQixXQUFLUCxJQUFMLENBQVUsT0FBVixFQUFtQmhrQixLQUFuQixFQUEwQnVrQixJQUExQjtBQUNBLGFBQU8sSUFBUDtBQUNELEtBYmlCO0FBY2xCaEssSUFBQUEsR0FBRyxFQUFFLFVBQVN2YSxLQUFULEVBQWdCdWtCLElBQWhCLEVBQXNCO0FBQ3pCLFVBQUksRUFBRSxLQUFLbGIsTUFBUCxLQUFrQixDQUF0QixFQUF5QixPQUFPLEtBQUtOLEtBQUwsQ0FBVythLE9BQWxCLEVBQTJCLEtBQUtFLElBQUwsQ0FBVSxLQUFWLEVBQWlCaGtCLEtBQWpCLEVBQXdCdWtCLElBQXhCLENBQTNCO0FBQ3pCLGFBQU8sSUFBUDtBQUNELEtBakJpQjtBQWtCbEJQLElBQUFBLElBQUksRUFBRSxVQUFTNWpCLElBQVQsRUFBZUosS0FBZixFQUFzQnVrQixJQUF0QixFQUE0QjtBQUNoQyxVQUFJdmEsQ0FBQyxHQUFHblgsTUFBTSxDQUFDLEtBQUttUyxJQUFOLENBQU4sQ0FBa0JuUCxLQUFsQixFQUFSO0FBQ0F1dEIsTUFBQUEsU0FBUyxDQUFDenZCLElBQVYsQ0FDRXlNLElBREYsRUFFRSxLQUFLNEUsSUFGUCxFQUdFLElBQUltYixVQUFKLENBQWUvZixJQUFmLEVBQXFCO0FBQ25Cb2tCLFFBQUFBLFdBQVcsRUFBRXhrQixLQURNO0FBRW5CeWtCLFFBQUFBLE1BQU0sRUFBRXpCLEtBRlc7QUFHbkIzcUIsUUFBQUEsU0FBUyxFQUFFeXFCLEdBQUcsQ0FBQzlCLE1BQUosQ0FBVyxLQUFLalksS0FBTCxDQUFXMVEsU0FBdEIsQ0FIUTtBQUluQmtzQixRQUFBQSxJQUptQjtBQUtuQmxnQixRQUFBQSxRQUFRLEVBQUUrZTtBQUxTLE9BQXJCLENBSEYsRUFVRXBaLENBVkY7QUFZRDtBQWhDaUIsR0FBcEI7O0FBbUNBLFdBQVMwWixPQUFULENBQWlCMWpCLEtBQWpCLEVBQXdCO0FBQ3RCLFFBQUlzakIsV0FBVyxJQUFJLENBQUN0akIsS0FBSyxDQUFDMGtCLE9BQTFCLEVBQW1DO0FBQ25DLFFBQUksQ0FBQ3Z2QixNQUFNLENBQUNiLEtBQVAsQ0FBYSxJQUFiLEVBQW1CQyxTQUFuQixDQUFMLEVBQW9DO0FBRXBDLFFBQUl5USxJQUFJLEdBQUcsSUFBWDtBQUFBLFFBQ0k1RSxJQUFJLEdBQUdKLEtBQUssQ0FBQ3lrQixNQUFOLENBQWE3d0IsUUFBYixDQUFzQndNLElBRGpDO0FBQUEsUUFFSW1rQixJQUFJLEdBQUcsQ0FBQ3BCLElBQUksSUFBSW5qQixLQUFLLENBQUMya0IsT0FBZCxHQUF3QnZrQixJQUFJLEdBQUcsU0FBL0IsR0FBMkNBLElBQTVDLE1BQXNELFdBQXRELEdBQW9Fa2dCLFNBQXBFLEdBQWlGNkMsSUFBSSxJQUFJbmpCLEtBQUssQ0FBQzRrQixNQUFkLEdBQXVCbkUsV0FBdkIsR0FBcUNELFdBRmpJO0FBQUEsUUFHSXFFLEtBQUssR0FBRy9CLEdBQUcsS0FBSzVCLENBQVIsR0FBWSxJQUFaLEdBQW1CVyxNQUFNLENBQUN6aEIsSUFBRCxDQUhyQztBQUFBLFFBSUkwa0IsS0FBSyxHQUFHaEMsR0FBRyxLQUFLakMsQ0FBUixHQUFZLElBQVosR0FBbUJpQixNQUFNLENBQUMxaEIsSUFBRCxDQUpyQztBQUFBLFFBS0kySSxLQUFLLEdBQUdsTyxLQUFLLENBQUNtSyxJQUFELENBTGpCO0FBQUEsUUFNSTRkLE1BQU0sR0FBRzdaLEtBQUssQ0FBQzZaLE1BTm5CO0FBQUEsUUFPSXZxQixTQUFTLEdBQUcwUSxLQUFLLENBQUMxUSxTQVB0QjtBQUFBLFFBUUkwc0IsQ0FBQyxHQUFHbkMsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVLENBQVYsQ0FSUjtBQUFBLFFBUXNCb0MsRUFSdEI7QUFBQSxRQVEwQkMsRUFSMUI7QUFBQSxRQVNJQyxDQUFDLEdBQUd0QyxNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVUsQ0FBVixDQVRSO0FBQUEsUUFTc0J1QyxFQVR0QjtBQUFBLFFBUzBCQyxFQVQxQjtBQUFBLFFBVUlDLENBQUMsR0FBR3pDLE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVSxDQUFWLENBVlI7QUFBQSxRQVVzQjBDLEVBVnRCO0FBQUEsUUFVMEJDLEVBVjFCO0FBQUEsUUFXSUMsQ0FBQyxHQUFHNUMsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVLENBQVYsQ0FYUjtBQUFBLFFBV3NCNkMsRUFYdEI7QUFBQSxRQVcwQkMsRUFYMUI7QUFBQSxRQVlJQyxFQUFFLEdBQUcsQ0FaVDtBQUFBLFFBYUlDLEVBQUUsR0FBRyxDQWJUO0FBQUEsUUFjSUMsTUFkSjtBQUFBLFFBZUlDLFFBQVEsR0FBR2pCLEtBQUssSUFBSUMsS0FBVCxJQUFrQjNCLElBQWxCLElBQTBCbmpCLEtBQUssQ0FBQytsQixRQWYvQztBQUFBLFFBZ0JJQyxLQWhCSjtBQUFBLFFBaUJJQyxLQWpCSjtBQUFBLFFBa0JJQyxNQUFNLEdBQUcveUIsS0FBSyxDQUFDYyxJQUFOLENBQVcrTCxLQUFLLENBQUMwa0IsT0FBTixJQUFpQixDQUFDMWtCLEtBQUQsQ0FBNUIsRUFBcUNHLENBQUMsSUFBSTtBQUNqRCxZQUFNek0sQ0FBQyxHQUFHeU0sQ0FBQyxDQUFDZ21CLFVBQVo7QUFDQWhtQixNQUFBQSxDQUFDLEdBQUcrZixPQUFPLENBQUMvZixDQUFELEVBQUk2RSxJQUFKLENBQVg7QUFDQTdFLE1BQUFBLENBQUMsQ0FBQ2ltQixNQUFGLEdBQVdqbUIsQ0FBQyxDQUFDekYsS0FBRixFQUFYO0FBQ0F5RixNQUFBQSxDQUFDLENBQUNnbUIsVUFBRixHQUFlenlCLENBQWY7QUFDQSxhQUFPeU0sQ0FBUDtBQUNELEtBTlEsQ0FsQmI7QUEwQkFtSixJQUFBQSxTQUFTLENBQUN0RSxJQUFELENBQVQ7QUFDQSxRQUFJZ2YsSUFBSSxHQUFHRixPQUFPLENBQUM5ZSxJQUFELEVBQU96USxTQUFQLEVBQWtCLElBQWxCLENBQVAsQ0FBK0J3dkIsV0FBL0IsRUFBWDs7QUFFQSxRQUFJM2pCLElBQUksS0FBSyxTQUFiLEVBQXdCO0FBQ3RCLFVBQUkvSCxTQUFKLEVBQWV3dEIsTUFBTSxHQUFHLElBQVQ7QUFDZixZQUFNUSxHQUFHLEdBQUcsQ0FBQ0gsTUFBTSxDQUFDLENBQUQsQ0FBUCxFQUFZQSxNQUFNLENBQUMsQ0FBRCxDQUFOLElBQWFBLE1BQU0sQ0FBQyxDQUFELENBQS9CLENBQVo7QUFDQW5kLE1BQUFBLEtBQUssQ0FBQzFRLFNBQU4sR0FBa0JBLFNBQVMsR0FBRyxDQUFDLENBQzNCMnNCLEVBQUUsR0FBR2xDLEdBQUcsS0FBSzVCLENBQVIsR0FBWTZELENBQVosR0FBZ0IvckIsR0FBRyxDQUFDcXRCLEdBQUcsQ0FBQyxDQUFELENBQUgsQ0FBTyxDQUFQLENBQUQsRUFBWUEsR0FBRyxDQUFDLENBQUQsQ0FBSCxDQUFPLENBQVAsQ0FBWixDQURHLEVBRTNCbEIsRUFBRSxHQUFHckMsR0FBRyxLQUFLakMsQ0FBUixHQUFZcUUsQ0FBWixHQUFnQmxzQixHQUFHLENBQUNxdEIsR0FBRyxDQUFDLENBQUQsQ0FBSCxDQUFPLENBQVAsQ0FBRCxFQUFZQSxHQUFHLENBQUMsQ0FBRCxDQUFILENBQU8sQ0FBUCxDQUFaLENBRkcsQ0FBRCxFQUd6QixDQUNEZixFQUFFLEdBQUd4QyxHQUFHLEtBQUs1QixDQUFSLEdBQVltRSxDQUFaLEdBQWdCdE0sR0FBRyxDQUFDc04sR0FBRyxDQUFDLENBQUQsQ0FBSCxDQUFPLENBQVAsQ0FBRCxFQUFZQSxHQUFHLENBQUMsQ0FBRCxDQUFILENBQU8sQ0FBUCxDQUFaLENBRHZCLEVBRURaLEVBQUUsR0FBRzNDLEdBQUcsS0FBS2pDLENBQVIsR0FBWTJFLENBQVosR0FBZ0J6TSxHQUFHLENBQUNzTixHQUFHLENBQUMsQ0FBRCxDQUFILENBQU8sQ0FBUCxDQUFELEVBQVlBLEdBQUcsQ0FBQyxDQUFELENBQUgsQ0FBTyxDQUFQLENBQVosQ0FGdkIsQ0FIeUIsQ0FBOUI7QUFPQSxVQUFJSCxNQUFNLENBQUNqekIsTUFBUCxHQUFnQixDQUFwQixFQUF1QjR3QixJQUFJLENBQUM3akIsS0FBRCxDQUFKO0FBQ3hCLEtBWEQsTUFXTztBQUNMZ2xCLE1BQUFBLEVBQUUsR0FBRzNzQixTQUFTLENBQUMsQ0FBRCxDQUFULENBQWEsQ0FBYixDQUFMO0FBQ0E4c0IsTUFBQUEsRUFBRSxHQUFHOXNCLFNBQVMsQ0FBQyxDQUFELENBQVQsQ0FBYSxDQUFiLENBQUw7QUFDQWl0QixNQUFBQSxFQUFFLEdBQUdqdEIsU0FBUyxDQUFDLENBQUQsQ0FBVCxDQUFhLENBQWIsQ0FBTDtBQUNBb3RCLE1BQUFBLEVBQUUsR0FBR3B0QixTQUFTLENBQUMsQ0FBRCxDQUFULENBQWEsQ0FBYixDQUFMO0FBQ0Q7O0FBRUQ0c0IsSUFBQUEsRUFBRSxHQUFHRCxFQUFMO0FBQ0FJLElBQUFBLEVBQUUsR0FBR0QsRUFBTDtBQUNBSSxJQUFBQSxFQUFFLEdBQUdELEVBQUw7QUFDQUksSUFBQUEsRUFBRSxHQUFHRCxFQUFMO0FBRUEsUUFBSXB5QixLQUFLLEdBQUdSLE1BQU0sQ0FBQ21TLElBQUQsQ0FBTixDQUNQaEIsSUFETyxDQUNGLGdCQURFLEVBQ2dCLE1BRGhCLENBQVo7QUFHQSxRQUFJcWQsT0FBTyxHQUFHaHVCLEtBQUssQ0FBQ2dDLFNBQU4sQ0FBZ0IsVUFBaEIsRUFDVDJPLElBRFMsQ0FDSixRQURJLEVBQ01vZCxPQUFPLENBQUNoaEIsSUFBRCxDQURiLENBQWQ7O0FBR0EsUUFBSUosS0FBSyxDQUFDMGtCLE9BQVYsRUFBbUI7QUFDakJWLE1BQUFBLElBQUksQ0FBQ3NDLEtBQUwsR0FBYUEsS0FBYjtBQUNBdEMsTUFBQUEsSUFBSSxDQUFDdUMsS0FBTCxHQUFhQSxLQUFiO0FBQ0QsS0FIRCxNQUdPO0FBQ0wsVUFBSUMsSUFBSSxHQUFHM3pCLE1BQU0sQ0FBQ21OLEtBQUssQ0FBQ3dtQixJQUFQLENBQU4sQ0FDTmptQixFQURNLENBQ0gsaUJBREcsRUFDZ0IrbEIsS0FEaEIsRUFDdUIsSUFEdkIsRUFFTi9sQixFQUZNLENBRUgsZUFGRyxFQUVjZ21CLEtBRmQsRUFFcUIsSUFGckIsQ0FBWDtBQUdBLFVBQUlwRCxJQUFKLEVBQVVxRCxJQUFJLENBQ1RqbUIsRUFESyxDQUNGLGVBREUsRUFDZWttQixTQURmLEVBQzBCLElBRDFCLEVBRUxsbUIsRUFGSyxDQUVGLGFBRkUsRUFFYW1tQixRQUZiLEVBRXVCLElBRnZCO0FBSVYxRyxNQUFBQSxXQUFXLENBQUNoZ0IsS0FBSyxDQUFDd21CLElBQVAsQ0FBWDtBQUNEOztBQUVEL0MsSUFBQUEsTUFBTSxDQUFDOXZCLElBQVAsQ0FBWXFSLElBQVo7QUFDQWdmLElBQUFBLElBQUksQ0FBQzdhLEtBQUwsQ0FBV25KLEtBQVgsRUFBa0J1a0IsSUFBSSxDQUFDaHFCLElBQXZCOztBQUVBLGFBQVMrckIsS0FBVCxDQUFldG1CLEtBQWYsRUFBc0I7QUFDcEIsV0FBSyxNQUFNMm1CLENBQVgsSUFBZ0IzbUIsS0FBSyxDQUFDNG1CLGNBQU4sSUFBd0IsQ0FBQzVtQixLQUFELENBQXhDLEVBQWlEO0FBQy9DLGFBQUssTUFBTWdLLENBQVgsSUFBZ0JrYyxNQUFoQixFQUNFLElBQUlsYyxDQUFDLENBQUNtYyxVQUFGLEtBQWlCUSxDQUFDLENBQUNSLFVBQXZCLEVBQW1DbmMsQ0FBQyxDQUFDNmMsR0FBRixHQUFRM0csT0FBTyxDQUFDeUcsQ0FBRCxFQUFJM2hCLElBQUosQ0FBZjtBQUN0Qzs7QUFDRCxVQUFJOGdCLFFBQVEsSUFBSSxDQUFDRSxLQUFiLElBQXNCLENBQUNDLEtBQXZCLElBQWdDQyxNQUFNLENBQUNqekIsTUFBUCxLQUFrQixDQUF0RCxFQUF5RDtBQUN2RCxjQUFNNnpCLEtBQUssR0FBR1osTUFBTSxDQUFDLENBQUQsQ0FBcEI7QUFDQSxZQUFJeEYsR0FBRyxDQUFDb0csS0FBSyxDQUFDRCxHQUFOLENBQVUsQ0FBVixJQUFlQyxLQUFLLENBQUMsQ0FBRCxDQUFyQixDQUFILEdBQStCcEcsR0FBRyxDQUFDb0csS0FBSyxDQUFDRCxHQUFOLENBQVUsQ0FBVixJQUFlQyxLQUFLLENBQUMsQ0FBRCxDQUFyQixDQUF0QyxFQUNFYixLQUFLLEdBQUcsSUFBUixDQURGLEtBR0VELEtBQUssR0FBRyxJQUFSO0FBQ0g7O0FBQ0QsV0FBSyxNQUFNYyxLQUFYLElBQW9CWixNQUFwQixFQUNFLElBQUlZLEtBQUssQ0FBQ0QsR0FBVixFQUFlQyxLQUFLLENBQUMsQ0FBRCxDQUFMLEdBQVdBLEtBQUssQ0FBQ0QsR0FBTixDQUFVLENBQVYsQ0FBWCxFQUF5QkMsS0FBSyxDQUFDLENBQUQsQ0FBTCxHQUFXQSxLQUFLLENBQUNELEdBQU4sQ0FBVSxDQUFWLENBQXBDOztBQUNqQmhCLE1BQUFBLE1BQU0sR0FBRyxJQUFUO0FBQ0F6RixNQUFBQSxPQUFPLENBQUNwZ0IsS0FBRCxDQUFQO0FBQ0E2akIsTUFBQUEsSUFBSSxDQUFDN2pCLEtBQUQsQ0FBSjtBQUNEOztBQUVELGFBQVM2akIsSUFBVCxDQUFjN2pCLEtBQWQsRUFBcUI7QUFDbkIsWUFBTThtQixLQUFLLEdBQUdaLE1BQU0sQ0FBQyxDQUFELENBQXBCO0FBQUEsWUFBeUJFLE1BQU0sR0FBR1UsS0FBSyxDQUFDVixNQUF4QztBQUNBLFVBQUlqbUIsQ0FBSjtBQUVBd2xCLE1BQUFBLEVBQUUsR0FBR21CLEtBQUssQ0FBQyxDQUFELENBQUwsR0FBV1YsTUFBTSxDQUFDLENBQUQsQ0FBdEI7QUFDQVIsTUFBQUEsRUFBRSxHQUFHa0IsS0FBSyxDQUFDLENBQUQsQ0FBTCxHQUFXVixNQUFNLENBQUMsQ0FBRCxDQUF0Qjs7QUFFQSxjQUFRN0IsSUFBUjtBQUNFLGFBQUtoRSxVQUFMO0FBQ0EsYUFBS0QsU0FBTDtBQUFnQjtBQUNkLGdCQUFJdUUsS0FBSixFQUFXYyxFQUFFLEdBQUc1TSxHQUFHLENBQUNnTSxDQUFDLEdBQUdDLEVBQUwsRUFBU2hzQixHQUFHLENBQUNxc0IsQ0FBQyxHQUFHQyxFQUFMLEVBQVNLLEVBQVQsQ0FBWixDQUFSLEVBQW1DVixFQUFFLEdBQUdELEVBQUUsR0FBR1csRUFBN0MsRUFBaURKLEVBQUUsR0FBR0QsRUFBRSxHQUFHSyxFQUEzRDtBQUNYLGdCQUFJYixLQUFKLEVBQVdjLEVBQUUsR0FBRzdNLEdBQUcsQ0FBQ21NLENBQUMsR0FBR0MsRUFBTCxFQUFTbnNCLEdBQUcsQ0FBQ3dzQixDQUFDLEdBQUdDLEVBQUwsRUFBU0csRUFBVCxDQUFaLENBQVIsRUFBbUNSLEVBQUUsR0FBR0QsRUFBRSxHQUFHUyxFQUE3QyxFQUFpREYsRUFBRSxHQUFHRCxFQUFFLEdBQUdHLEVBQTNEO0FBQ1g7QUFDRDs7QUFDRCxhQUFLcEYsV0FBTDtBQUFrQjtBQUNoQixnQkFBSTBGLE1BQU0sQ0FBQyxDQUFELENBQVYsRUFBZTtBQUNiLGtCQUFJckIsS0FBSixFQUFXSSxFQUFFLEdBQUdsTSxHQUFHLENBQUNnTSxDQUFELEVBQUkvckIsR0FBRyxDQUFDcXNCLENBQUQsRUFBSWEsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVLENBQVYsQ0FBSixDQUFQLENBQVIsRUFBbUNYLEVBQUUsR0FBR3hNLEdBQUcsQ0FBQ2dNLENBQUQsRUFBSS9yQixHQUFHLENBQUNxc0IsQ0FBRCxFQUFJYSxNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVUsQ0FBVixDQUFKLENBQVAsQ0FBM0MsRUFBc0VyQixLQUFLLEdBQUcsQ0FBOUU7QUFDWCxrQkFBSUMsS0FBSixFQUFXTSxFQUFFLEdBQUdyTSxHQUFHLENBQUNtTSxDQUFELEVBQUlsc0IsR0FBRyxDQUFDd3NCLENBQUQsRUFBSVUsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVLENBQVYsQ0FBSixDQUFQLENBQVIsRUFBbUNSLEVBQUUsR0FBRzNNLEdBQUcsQ0FBQ21NLENBQUQsRUFBSWxzQixHQUFHLENBQUN3c0IsQ0FBRCxFQUFJVSxNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVUsQ0FBVixDQUFKLENBQVAsQ0FBM0MsRUFBc0VwQixLQUFLLEdBQUcsQ0FBOUU7QUFDWixhQUhELE1BR087QUFDTCxrQkFBSUQsS0FBSyxHQUFHLENBQVosRUFBZWMsRUFBRSxHQUFHNU0sR0FBRyxDQUFDZ00sQ0FBQyxHQUFHQyxFQUFMLEVBQVNoc0IsR0FBRyxDQUFDcXNCLENBQUMsR0FBR0wsRUFBTCxFQUFTVyxFQUFULENBQVosQ0FBUixFQUFtQ1YsRUFBRSxHQUFHRCxFQUFFLEdBQUdXLEVBQTdDLEVBQWlESixFQUFFLEdBQUdELEVBQXRELENBQWYsS0FDSyxJQUFJVCxLQUFLLEdBQUcsQ0FBWixFQUFlYyxFQUFFLEdBQUc1TSxHQUFHLENBQUNnTSxDQUFDLEdBQUdPLEVBQUwsRUFBU3RzQixHQUFHLENBQUNxc0IsQ0FBQyxHQUFHQyxFQUFMLEVBQVNLLEVBQVQsQ0FBWixDQUFSLEVBQW1DVixFQUFFLEdBQUdELEVBQXhDLEVBQTRDTyxFQUFFLEdBQUdELEVBQUUsR0FBR0ssRUFBdEQ7QUFDcEIsa0JBQUliLEtBQUssR0FBRyxDQUFaLEVBQWVjLEVBQUUsR0FBRzdNLEdBQUcsQ0FBQ21NLENBQUMsR0FBR0MsRUFBTCxFQUFTbnNCLEdBQUcsQ0FBQ3dzQixDQUFDLEdBQUdMLEVBQUwsRUFBU1MsRUFBVCxDQUFaLENBQVIsRUFBbUNSLEVBQUUsR0FBR0QsRUFBRSxHQUFHUyxFQUE3QyxFQUFpREYsRUFBRSxHQUFHRCxFQUF0RCxDQUFmLEtBQ0ssSUFBSVgsS0FBSyxHQUFHLENBQVosRUFBZWMsRUFBRSxHQUFHN00sR0FBRyxDQUFDbU0sQ0FBQyxHQUFHTyxFQUFMLEVBQVN6c0IsR0FBRyxDQUFDd3NCLENBQUMsR0FBR0MsRUFBTCxFQUFTRyxFQUFULENBQVosQ0FBUixFQUFtQ1IsRUFBRSxHQUFHRCxFQUF4QyxFQUE0Q08sRUFBRSxHQUFHRCxFQUFFLEdBQUdHLEVBQXREO0FBQ3JCOztBQUNEO0FBQ0Q7O0FBQ0QsYUFBS25GLFdBQUw7QUFBa0I7QUFDaEIsZ0JBQUlvRSxLQUFKLEVBQVdJLEVBQUUsR0FBR2xNLEdBQUcsQ0FBQ2dNLENBQUQsRUFBSS9yQixHQUFHLENBQUNxc0IsQ0FBRCxFQUFJTCxFQUFFLEdBQUdXLEVBQUUsR0FBR2QsS0FBZCxDQUFQLENBQVIsRUFBc0NVLEVBQUUsR0FBR3hNLEdBQUcsQ0FBQ2dNLENBQUQsRUFBSS9yQixHQUFHLENBQUNxc0IsQ0FBRCxFQUFJQyxFQUFFLEdBQUdLLEVBQUUsR0FBR2QsS0FBZCxDQUFQLENBQTlDO0FBQ1gsZ0JBQUlDLEtBQUosRUFBV00sRUFBRSxHQUFHck0sR0FBRyxDQUFDbU0sQ0FBRCxFQUFJbHNCLEdBQUcsQ0FBQ3dzQixDQUFELEVBQUlMLEVBQUUsR0FBR1MsRUFBRSxHQUFHZCxLQUFkLENBQVAsQ0FBUixFQUFzQ1ksRUFBRSxHQUFHM00sR0FBRyxDQUFDbU0sQ0FBRCxFQUFJbHNCLEdBQUcsQ0FBQ3dzQixDQUFELEVBQUlDLEVBQUUsR0FBR0csRUFBRSxHQUFHZCxLQUFkLENBQVAsQ0FBOUM7QUFDWDtBQUNEO0FBdkJIOztBQTBCQSxVQUFJUyxFQUFFLEdBQUdOLEVBQVQsRUFBYTtBQUNYSixRQUFBQSxLQUFLLElBQUksQ0FBQyxDQUFWO0FBQ0Exa0IsUUFBQUEsQ0FBQyxHQUFHNmtCLEVBQUosRUFBUUEsRUFBRSxHQUFHTSxFQUFiLEVBQWlCQSxFQUFFLEdBQUdubEIsQ0FBdEI7QUFDQUEsUUFBQUEsQ0FBQyxHQUFHOGtCLEVBQUosRUFBUUEsRUFBRSxHQUFHTSxFQUFiLEVBQWlCQSxFQUFFLEdBQUdwbEIsQ0FBdEI7QUFDQSxZQUFJQyxJQUFJLElBQUl1aEIsS0FBWixFQUFtQk4sT0FBTyxDQUFDcmQsSUFBUixDQUFhLFFBQWIsRUFBdUJvZCxPQUFPLENBQUNoaEIsSUFBSSxHQUFHdWhCLEtBQUssQ0FBQ3ZoQixJQUFELENBQWIsQ0FBOUI7QUFDcEI7O0FBRUQsVUFBSXNsQixFQUFFLEdBQUdOLEVBQVQsRUFBYTtBQUNYTixRQUFBQSxLQUFLLElBQUksQ0FBQyxDQUFWO0FBQ0Eza0IsUUFBQUEsQ0FBQyxHQUFHZ2xCLEVBQUosRUFBUUEsRUFBRSxHQUFHTSxFQUFiLEVBQWlCQSxFQUFFLEdBQUd0bEIsQ0FBdEI7QUFDQUEsUUFBQUEsQ0FBQyxHQUFHaWxCLEVBQUosRUFBUUEsRUFBRSxHQUFHTSxFQUFiLEVBQWlCQSxFQUFFLEdBQUd2bEIsQ0FBdEI7QUFDQSxZQUFJQyxJQUFJLElBQUl3aEIsS0FBWixFQUFtQlAsT0FBTyxDQUFDcmQsSUFBUixDQUFhLFFBQWIsRUFBdUJvZCxPQUFPLENBQUNoaEIsSUFBSSxHQUFHd2hCLEtBQUssQ0FBQ3hoQixJQUFELENBQWIsQ0FBOUI7QUFDcEI7O0FBRUQsVUFBSTJJLEtBQUssQ0FBQzFRLFNBQVYsRUFBcUJBLFNBQVMsR0FBRzBRLEtBQUssQ0FBQzFRLFNBQWxCLENBL0NGLENBK0MrQjs7QUFDbEQsVUFBSTJ0QixLQUFKLEVBQVdmLEVBQUUsR0FBRzVzQixTQUFTLENBQUMsQ0FBRCxDQUFULENBQWEsQ0FBYixDQUFMLEVBQXNCa3RCLEVBQUUsR0FBR2x0QixTQUFTLENBQUMsQ0FBRCxDQUFULENBQWEsQ0FBYixDQUEzQjtBQUNYLFVBQUk0dEIsS0FBSixFQUFXYixFQUFFLEdBQUcvc0IsU0FBUyxDQUFDLENBQUQsQ0FBVCxDQUFhLENBQWIsQ0FBTCxFQUFzQnF0QixFQUFFLEdBQUdydEIsU0FBUyxDQUFDLENBQUQsQ0FBVCxDQUFhLENBQWIsQ0FBM0I7O0FBRVgsVUFBSUEsU0FBUyxDQUFDLENBQUQsQ0FBVCxDQUFhLENBQWIsTUFBb0I0c0IsRUFBcEIsSUFDRzVzQixTQUFTLENBQUMsQ0FBRCxDQUFULENBQWEsQ0FBYixNQUFvQitzQixFQUR2QixJQUVHL3NCLFNBQVMsQ0FBQyxDQUFELENBQVQsQ0FBYSxDQUFiLE1BQW9Ca3RCLEVBRnZCLElBR0dsdEIsU0FBUyxDQUFDLENBQUQsQ0FBVCxDQUFhLENBQWIsTUFBb0JxdEIsRUFIM0IsRUFHK0I7QUFDN0IzYyxRQUFBQSxLQUFLLENBQUMxUSxTQUFOLEdBQWtCLENBQUMsQ0FBQzRzQixFQUFELEVBQUtHLEVBQUwsQ0FBRCxFQUFXLENBQUNHLEVBQUQsRUFBS0csRUFBTCxDQUFYLENBQWxCO0FBQ0FqQyxRQUFBQSxNQUFNLENBQUM5dkIsSUFBUCxDQUFZcVIsSUFBWjtBQUNBZ2YsUUFBQUEsSUFBSSxDQUFDaEIsS0FBTCxDQUFXaGpCLEtBQVgsRUFBa0J1a0IsSUFBSSxDQUFDaHFCLElBQXZCO0FBQ0Q7QUFDRjs7QUFFRCxhQUFTZ3NCLEtBQVQsQ0FBZXZtQixLQUFmLEVBQXNCO0FBQ3BCcWdCLE1BQUFBLGFBQWEsQ0FBQ3JnQixLQUFELENBQWI7O0FBQ0EsVUFBSUEsS0FBSyxDQUFDMGtCLE9BQVYsRUFBbUI7QUFDakIsWUFBSTFrQixLQUFLLENBQUMwa0IsT0FBTixDQUFjenhCLE1BQWxCLEVBQTBCO0FBQzFCLFlBQUlxd0IsV0FBSixFQUFpQjViLFlBQVksQ0FBQzRiLFdBQUQsQ0FBWjtBQUNqQkEsUUFBQUEsV0FBVyxHQUFHbGQsVUFBVSxDQUFDLFlBQVc7QUFBRWtkLFVBQUFBLFdBQVcsR0FBRyxJQUFkO0FBQXFCLFNBQW5DLEVBQXFDLEdBQXJDLENBQXhCLENBSGlCLENBR2tEO0FBQ3BFLE9BSkQsTUFJTztBQUNMckQsUUFBQUEsVUFBVSxDQUFDamdCLEtBQUssQ0FBQ3dtQixJQUFQLEVBQWFYLE1BQWIsQ0FBVjtBQUNBVyxRQUFBQSxJQUFJLENBQUNqbUIsRUFBTCxDQUFRLHlEQUFSLEVBQW1FLElBQW5FO0FBQ0Q7O0FBQ0RsTixNQUFBQSxLQUFLLENBQUMyUSxJQUFOLENBQVcsZ0JBQVgsRUFBNkIsS0FBN0I7QUFDQXFkLE1BQUFBLE9BQU8sQ0FBQ3JkLElBQVIsQ0FBYSxRQUFiLEVBQXVCb2QsT0FBTyxDQUFDQyxPQUEvQjtBQUNBLFVBQUl0WSxLQUFLLENBQUMxUSxTQUFWLEVBQXFCQSxTQUFTLEdBQUcwUSxLQUFLLENBQUMxUSxTQUFsQixDQVpELENBWThCOztBQUNsRCxVQUFJbkUsV0FBSyxDQUFDbUUsU0FBRCxDQUFULEVBQXNCMFEsS0FBSyxDQUFDMVEsU0FBTixHQUFrQixJQUFsQixFQUF3Qm9yQixNQUFNLENBQUM5dkIsSUFBUCxDQUFZcVIsSUFBWixDQUF4QjtBQUN0QmdmLE1BQUFBLElBQUksQ0FBQ3pKLEdBQUwsQ0FBU3ZhLEtBQVQsRUFBZ0J1a0IsSUFBSSxDQUFDaHFCLElBQXJCO0FBQ0Q7O0FBRUQsYUFBU2tzQixTQUFULENBQW1Cem1CLEtBQW5CLEVBQTBCO0FBQ3hCLGNBQVFBLEtBQUssQ0FBQyttQixPQUFkO0FBQ0UsYUFBSyxFQUFMO0FBQVM7QUFBRTtBQUNUakIsWUFBQUEsUUFBUSxHQUFHakIsS0FBSyxJQUFJQyxLQUFwQjtBQUNBO0FBQ0Q7O0FBQ0QsYUFBSyxFQUFMO0FBQVM7QUFBRTtBQUNULGdCQUFJUCxJQUFJLEtBQUsvRCxXQUFiLEVBQTBCO0FBQ3hCLGtCQUFJcUUsS0FBSixFQUFXUyxFQUFFLEdBQUdDLEVBQUUsR0FBR0ksRUFBRSxHQUFHZCxLQUFmLEVBQXNCRyxFQUFFLEdBQUdDLEVBQUUsR0FBR1UsRUFBRSxHQUFHZCxLQUFyQztBQUNYLGtCQUFJQyxLQUFKLEVBQVdXLEVBQUUsR0FBR0MsRUFBRSxHQUFHRSxFQUFFLEdBQUdkLEtBQWYsRUFBc0JLLEVBQUUsR0FBR0MsRUFBRSxHQUFHUSxFQUFFLEdBQUdkLEtBQXJDO0FBQ1hQLGNBQUFBLElBQUksR0FBRzlELFdBQVA7QUFDQW9ELGNBQUFBLElBQUksQ0FBQzdqQixLQUFELENBQUo7QUFDRDs7QUFDRDtBQUNEOztBQUNELGFBQUssRUFBTDtBQUFTO0FBQUU7QUFDVCxnQkFBSXVrQixJQUFJLEtBQUsvRCxXQUFULElBQXdCK0QsSUFBSSxLQUFLOUQsV0FBckMsRUFBa0Q7QUFDaEQsa0JBQUlvRSxLQUFLLEdBQUcsQ0FBWixFQUFlUyxFQUFFLEdBQUdDLEVBQUUsR0FBR0ksRUFBVixDQUFmLEtBQWtDLElBQUlkLEtBQUssR0FBRyxDQUFaLEVBQWVHLEVBQUUsR0FBR0MsRUFBRSxHQUFHVSxFQUFWO0FBQ2pELGtCQUFJYixLQUFLLEdBQUcsQ0FBWixFQUFlVyxFQUFFLEdBQUdDLEVBQUUsR0FBR0UsRUFBVixDQUFmLEtBQWtDLElBQUlkLEtBQUssR0FBRyxDQUFaLEVBQWVLLEVBQUUsR0FBR0MsRUFBRSxHQUFHUSxFQUFWO0FBQ2pEckIsY0FBQUEsSUFBSSxHQUFHaEUsVUFBUDtBQUNBYyxjQUFBQSxPQUFPLENBQUNyZCxJQUFSLENBQWEsUUFBYixFQUF1Qm9kLE9BQU8sQ0FBQy9vQixTQUEvQjtBQUNBd3JCLGNBQUFBLElBQUksQ0FBQzdqQixLQUFELENBQUo7QUFDRDs7QUFDRDtBQUNEOztBQUNEO0FBQVM7QUF4Qlg7O0FBMEJBb2dCLE1BQUFBLE9BQU8sQ0FBQ3BnQixLQUFELENBQVA7QUFDRDs7QUFFRCxhQUFTMG1CLFFBQVQsQ0FBa0IxbUIsS0FBbEIsRUFBeUI7QUFDdkIsY0FBUUEsS0FBSyxDQUFDK21CLE9BQWQ7QUFDRSxhQUFLLEVBQUw7QUFBUztBQUFFO0FBQ1QsZ0JBQUlqQixRQUFKLEVBQWM7QUFDWkUsY0FBQUEsS0FBSyxHQUFHQyxLQUFLLEdBQUdILFFBQVEsR0FBRyxLQUEzQjtBQUNBakMsY0FBQUEsSUFBSSxDQUFDN2pCLEtBQUQsQ0FBSjtBQUNEOztBQUNEO0FBQ0Q7O0FBQ0QsYUFBSyxFQUFMO0FBQVM7QUFBRTtBQUNULGdCQUFJdWtCLElBQUksS0FBSzlELFdBQWIsRUFBMEI7QUFDeEIsa0JBQUlvRSxLQUFLLEdBQUcsQ0FBWixFQUFlUyxFQUFFLEdBQUdDLEVBQUwsQ0FBZixLQUE2QixJQUFJVixLQUFLLEdBQUcsQ0FBWixFQUFlRyxFQUFFLEdBQUdDLEVBQUw7QUFDNUMsa0JBQUlILEtBQUssR0FBRyxDQUFaLEVBQWVXLEVBQUUsR0FBR0MsRUFBTCxDQUFmLEtBQTZCLElBQUlaLEtBQUssR0FBRyxDQUFaLEVBQWVLLEVBQUUsR0FBR0MsRUFBTDtBQUM1Q2IsY0FBQUEsSUFBSSxHQUFHL0QsV0FBUDtBQUNBcUQsY0FBQUEsSUFBSSxDQUFDN2pCLEtBQUQsQ0FBSjtBQUNEOztBQUNEO0FBQ0Q7O0FBQ0QsYUFBSyxFQUFMO0FBQVM7QUFBRTtBQUNULGdCQUFJdWtCLElBQUksS0FBS2hFLFVBQWIsRUFBeUI7QUFDdkIsa0JBQUl2Z0IsS0FBSyxDQUFDNGtCLE1BQVYsRUFBa0I7QUFDaEIsb0JBQUlDLEtBQUosRUFBV1MsRUFBRSxHQUFHQyxFQUFFLEdBQUdJLEVBQUUsR0FBR2QsS0FBZixFQUFzQkcsRUFBRSxHQUFHQyxFQUFFLEdBQUdVLEVBQUUsR0FBR2QsS0FBckM7QUFDWCxvQkFBSUMsS0FBSixFQUFXVyxFQUFFLEdBQUdDLEVBQUUsR0FBR0UsRUFBRSxHQUFHZCxLQUFmLEVBQXNCSyxFQUFFLEdBQUdDLEVBQUUsR0FBR1EsRUFBRSxHQUFHZCxLQUFyQztBQUNYUCxnQkFBQUEsSUFBSSxHQUFHOUQsV0FBUDtBQUNELGVBSkQsTUFJTztBQUNMLG9CQUFJb0UsS0FBSyxHQUFHLENBQVosRUFBZVMsRUFBRSxHQUFHQyxFQUFMLENBQWYsS0FBNkIsSUFBSVYsS0FBSyxHQUFHLENBQVosRUFBZUcsRUFBRSxHQUFHQyxFQUFMO0FBQzVDLG9CQUFJSCxLQUFLLEdBQUcsQ0FBWixFQUFlVyxFQUFFLEdBQUdDLEVBQUwsQ0FBZixLQUE2QixJQUFJWixLQUFLLEdBQUcsQ0FBWixFQUFlSyxFQUFFLEdBQUdDLEVBQUw7QUFDNUNiLGdCQUFBQSxJQUFJLEdBQUcvRCxXQUFQO0FBQ0Q7O0FBQ0RhLGNBQUFBLE9BQU8sQ0FBQ3JkLElBQVIsQ0FBYSxRQUFiLEVBQXVCb2QsT0FBTyxDQUFDaGhCLElBQUQsQ0FBOUI7QUFDQXlqQixjQUFBQSxJQUFJLENBQUM3akIsS0FBRCxDQUFKO0FBQ0Q7O0FBQ0Q7QUFDRDs7QUFDRDtBQUFTO0FBakNYOztBQW1DQW9nQixNQUFBQSxPQUFPLENBQUNwZ0IsS0FBRCxDQUFQO0FBQ0Q7QUFDRjs7QUFFRCxXQUFTMmpCLFVBQVQsQ0FBb0IzakIsS0FBcEIsRUFBMkI7QUFDekI4akIsSUFBQUEsT0FBTyxDQUFDLElBQUQsRUFBT3Z2QixTQUFQLENBQVAsQ0FBeUIreEIsS0FBekIsQ0FBK0J0bUIsS0FBL0I7QUFDRDs7QUFFRCxXQUFTNGpCLFVBQVQsQ0FBb0I1akIsS0FBcEIsRUFBMkI7QUFDekI4akIsSUFBQUEsT0FBTyxDQUFDLElBQUQsRUFBT3Z2QixTQUFQLENBQVAsQ0FBeUJneUIsS0FBekIsQ0FBK0J2bUIsS0FBL0I7QUFDRDs7QUFFRCxXQUFTdWpCLFVBQVQsR0FBc0I7QUFDcEIsUUFBSXhhLEtBQUssR0FBRyxLQUFLNFosT0FBTCxJQUFnQjtBQUFDdHFCLE1BQUFBLFNBQVMsRUFBRTtBQUFaLEtBQTVCO0FBQ0EwUSxJQUFBQSxLQUFLLENBQUM2WixNQUFOLEdBQWVoQyxPQUFPLENBQUNnQyxNQUFNLENBQUN0dUIsS0FBUCxDQUFhLElBQWIsRUFBbUJDLFNBQW5CLENBQUQsQ0FBdEI7QUFDQXdVLElBQUFBLEtBQUssQ0FBQytaLEdBQU4sR0FBWUEsR0FBWjtBQUNBLFdBQU8vWixLQUFQO0FBQ0Q7O0FBRURpYSxFQUFBQSxLQUFLLENBQUNKLE1BQU4sR0FBZSxVQUFTbmUsQ0FBVCxFQUFZO0FBQ3pCLFdBQU9sUSxTQUFTLENBQUN0QixNQUFWLElBQW9CMnZCLE1BQU0sR0FBRyxPQUFPbmUsQ0FBUCxLQUFhLFVBQWIsR0FBMEJBLENBQTFCLEdBQThCbE8sUUFBUSxDQUFDcXFCLE9BQU8sQ0FBQ25jLENBQUQsQ0FBUixDQUEvQyxFQUE2RHVlLEtBQWpGLElBQTBGSixNQUFqRztBQUNELEdBRkQ7O0FBSUFJLEVBQUFBLEtBQUssQ0FBQzd0QixNQUFOLEdBQWUsVUFBU3NQLENBQVQsRUFBWTtBQUN6QixXQUFPbFEsU0FBUyxDQUFDdEIsTUFBVixJQUFvQmtDLE1BQU0sR0FBRyxPQUFPc1AsQ0FBUCxLQUFhLFVBQWIsR0FBMEJBLENBQTFCLEdBQThCbE8sUUFBUSxDQUFDLENBQUMsQ0FBQ2tPLENBQUgsQ0FBL0MsRUFBc0R1ZSxLQUExRSxJQUFtRjd0QixNQUExRjtBQUNELEdBRkQ7O0FBSUE2dEIsRUFBQUEsS0FBSyxDQUFDRSxTQUFOLEdBQWtCLFVBQVN6ZSxDQUFULEVBQVk7QUFDNUIsV0FBT2xRLFNBQVMsQ0FBQ3RCLE1BQVYsSUFBb0Jpd0IsU0FBUyxHQUFHLE9BQU96ZSxDQUFQLEtBQWEsVUFBYixHQUEwQkEsQ0FBMUIsR0FBOEJsTyxRQUFRLENBQUMsQ0FBQyxDQUFDa08sQ0FBSCxDQUFsRCxFQUF5RHVlLEtBQTdFLElBQXNGRSxTQUE3RjtBQUNELEdBRkQ7O0FBSUFGLEVBQUFBLEtBQUssQ0FBQ0ssVUFBTixHQUFtQixVQUFTNWUsQ0FBVCxFQUFZO0FBQzdCLFdBQU9sUSxTQUFTLENBQUN0QixNQUFWLElBQW9Cb3dCLFVBQVUsR0FBRyxDQUFDNWUsQ0FBZCxFQUFpQnVlLEtBQXJDLElBQThDSyxVQUFyRDtBQUNELEdBRkQ7O0FBSUFMLEVBQUFBLEtBQUssQ0FBQ2dFLFlBQU4sR0FBcUIsVUFBU3ZpQixDQUFULEVBQVk7QUFDL0IsV0FBT2xRLFNBQVMsQ0FBQ3RCLE1BQVYsSUFBb0Jrd0IsSUFBSSxHQUFHLENBQUMsQ0FBQzFlLENBQVQsRUFBWXVlLEtBQWhDLElBQXlDRyxJQUFoRDtBQUNELEdBRkQ7O0FBSUFILEVBQUFBLEtBQUssQ0FBQ3ppQixFQUFOLEdBQVcsWUFBVztBQUNwQixRQUFJL0ksS0FBSyxHQUFHNHJCLFNBQVMsQ0FBQzdpQixFQUFWLENBQWFqTSxLQUFiLENBQW1COHVCLFNBQW5CLEVBQThCN3VCLFNBQTlCLENBQVo7QUFDQSxXQUFPaUQsS0FBSyxLQUFLNHJCLFNBQVYsR0FBc0JKLEtBQXRCLEdBQThCeHJCLEtBQXJDO0FBQ0QsR0FIRDs7QUFLQSxTQUFPd3JCLEtBQVA7QUFDRCxDOzs7O0FFNW1CRDtBQUNBOzs7QUNEQTtBQUlBO0FBT0E7QUFPQTtBQU9BO0FBT0E7QUFPQTtBQU9BO0FBT0E7OztBQ3JEQSxTQUFTaUksWUFBVCxDQUFzQkMsUUFBdEIsRUFBZ0M7QUFDOUIsTUFBSSxDQUFDQSxRQUFRLENBQUNDLEVBQWQsRUFBa0IsTUFBTSxJQUFJeG1CLEtBQUosQ0FBVXVtQixRQUFRLENBQUNFLE1BQVQsR0FBa0IsR0FBbEIsR0FBd0JGLFFBQVEsQ0FBQ0csVUFBM0MsQ0FBTjtBQUNsQixNQUFJSCxRQUFRLENBQUNFLE1BQVQsS0FBb0IsR0FBcEIsSUFBMkJGLFFBQVEsQ0FBQ0UsTUFBVCxLQUFvQixHQUFuRCxFQUF3RDtBQUN4RCxTQUFPRixRQUFRLENBQUNJLElBQVQsRUFBUDtBQUNEOztBQUVELDZCQUFlLGNBQVN2SyxLQUFULEVBQWdCL1gsSUFBaEIsRUFBc0I7QUFDbkMsU0FBT3VpQixLQUFLLENBQUN4SyxLQUFELEVBQVEvWCxJQUFSLENBQUwsQ0FBbUJ3aUIsSUFBbkIsQ0FBd0JQLFlBQXhCLENBQVA7QUFDRCxDOztBQ1JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDTE8sU0FBU2MsUUFBVCxDQUFrQjVsQixDQUFsQixFQUFxQjtBQUMxQixTQUFPQSxDQUFDLElBQUksSUFBTCxHQUFZLElBQVosR0FBbUI2bEIsUUFBUSxDQUFDN2xCLENBQUQsQ0FBbEM7QUFDRDtBQUVNLFNBQVM2bEIsUUFBVCxDQUFrQjdsQixDQUFsQixFQUFxQjtBQUMxQixNQUFJLE9BQU9BLENBQVAsS0FBYSxVQUFqQixFQUE2QixNQUFNLElBQUl4QixLQUFKLEVBQU47QUFDN0IsU0FBT3dCLENBQVA7QUFDRCxDOztBQ1BELFNBQVM4bEIsS0FBVCxDQUFlejRCLElBQWYsRUFBcUI7QUFDbkIsTUFBSTA0QixHQUFHLEdBQUcsQ0FBVjtBQUFBLE1BQ0lsM0IsUUFBUSxHQUFHeEIsSUFBSSxDQUFDd0IsUUFEcEI7QUFBQSxNQUVJdEIsQ0FBQyxHQUFHc0IsUUFBUSxJQUFJQSxRQUFRLENBQUMvQixNQUY3QjtBQUdBLE1BQUksQ0FBQ1MsQ0FBTCxFQUFRdzRCLEdBQUcsR0FBRyxDQUFOLENBQVIsS0FDSyxPQUFPLEVBQUV4NEIsQ0FBRixJQUFPLENBQWQsRUFBaUJ3NEIsR0FBRyxJQUFJbDNCLFFBQVEsQ0FBQ3RCLENBQUQsQ0FBUixDQUFZOEQsS0FBbkI7QUFDdEJoRSxFQUFBQSxJQUFJLENBQUNnRSxLQUFMLEdBQWEwMEIsR0FBYjtBQUNEOztBQUVELDZCQUFlLDJCQUFXO0FBQ3hCLFNBQU8sS0FBS0MsU0FBTCxDQUFlRixLQUFmLENBQVA7QUFDRCxDOztBQ1hELDZCQUFlLHdCQUFTbHlCLFFBQVQsRUFBbUJpTCxJQUFuQixFQUF5QjtBQUN0QyxNQUFJd0QsS0FBSyxHQUFHLENBQUMsQ0FBYjs7QUFDQSxPQUFLLE1BQU1oVixJQUFYLElBQW1CLElBQW5CLEVBQXlCO0FBQ3ZCdUcsSUFBQUEsUUFBUSxDQUFDcEcsSUFBVCxDQUFjcVIsSUFBZCxFQUFvQnhSLElBQXBCLEVBQTBCLEVBQUVnVixLQUE1QixFQUFtQyxJQUFuQztBQUNEOztBQUNELFNBQU8sSUFBUDtBQUNELEM7O0FDTkQsNkJBQWUsb0JBQVN6TyxRQUFULEVBQW1CaUwsSUFBbkIsRUFBeUI7QUFDdEMsTUFBSXhSLElBQUksR0FBRyxJQUFYO0FBQUEsTUFBaUJ1USxLQUFLLEdBQUcsQ0FBQ3ZRLElBQUQsQ0FBekI7QUFBQSxNQUFpQ3dCLFFBQWpDO0FBQUEsTUFBMkN0QixDQUEzQztBQUFBLE1BQThDOFUsS0FBSyxHQUFHLENBQUMsQ0FBdkQ7O0FBQ0EsU0FBT2hWLElBQUksR0FBR3VRLEtBQUssQ0FBQ3NILEdBQU4sRUFBZCxFQUEyQjtBQUN6QnRSLElBQUFBLFFBQVEsQ0FBQ3BHLElBQVQsQ0FBY3FSLElBQWQsRUFBb0J4UixJQUFwQixFQUEwQixFQUFFZ1YsS0FBNUIsRUFBbUMsSUFBbkM7O0FBQ0EsUUFBSXhULFFBQVEsR0FBR3hCLElBQUksQ0FBQ3dCLFFBQXBCLEVBQThCO0FBQzVCLFdBQUt0QixDQUFDLEdBQUdzQixRQUFRLENBQUMvQixNQUFULEdBQWtCLENBQTNCLEVBQThCUyxDQUFDLElBQUksQ0FBbkMsRUFBc0MsRUFBRUEsQ0FBeEMsRUFBMkM7QUFDekNxUSxRQUFBQSxLQUFLLENBQUN0UCxJQUFOLENBQVdPLFFBQVEsQ0FBQ3RCLENBQUQsQ0FBbkI7QUFDRDtBQUNGO0FBQ0Y7O0FBQ0QsU0FBTyxJQUFQO0FBQ0QsQzs7QUNYRCw2QkFBZSxtQkFBU3FHLFFBQVQsRUFBbUJpTCxJQUFuQixFQUF5QjtBQUN0QyxNQUFJeFIsSUFBSSxHQUFHLElBQVg7QUFBQSxNQUFpQnVRLEtBQUssR0FBRyxDQUFDdlEsSUFBRCxDQUF6QjtBQUFBLE1BQWlDOEMsSUFBSSxHQUFHLEVBQXhDO0FBQUEsTUFBNEN0QixRQUE1QztBQUFBLE1BQXNEdEIsQ0FBdEQ7QUFBQSxNQUF5REosQ0FBekQ7QUFBQSxNQUE0RGtWLEtBQUssR0FBRyxDQUFDLENBQXJFOztBQUNBLFNBQU9oVixJQUFJLEdBQUd1USxLQUFLLENBQUNzSCxHQUFOLEVBQWQsRUFBMkI7QUFDekIvVSxJQUFBQSxJQUFJLENBQUM3QixJQUFMLENBQVVqQixJQUFWOztBQUNBLFFBQUl3QixRQUFRLEdBQUd4QixJQUFJLENBQUN3QixRQUFwQixFQUE4QjtBQUM1QixXQUFLdEIsQ0FBQyxHQUFHLENBQUosRUFBT0osQ0FBQyxHQUFHMEIsUUFBUSxDQUFDL0IsTUFBekIsRUFBaUNTLENBQUMsR0FBR0osQ0FBckMsRUFBd0MsRUFBRUksQ0FBMUMsRUFBNkM7QUFDM0NxUSxRQUFBQSxLQUFLLENBQUN0UCxJQUFOLENBQVdPLFFBQVEsQ0FBQ3RCLENBQUQsQ0FBbkI7QUFDRDtBQUNGO0FBQ0Y7O0FBQ0QsU0FBT0YsSUFBSSxHQUFHOEMsSUFBSSxDQUFDK1UsR0FBTCxFQUFkLEVBQTBCO0FBQ3hCdFIsSUFBQUEsUUFBUSxDQUFDcEcsSUFBVCxDQUFjcVIsSUFBZCxFQUFvQnhSLElBQXBCLEVBQTBCLEVBQUVnVixLQUE1QixFQUFtQyxJQUFuQztBQUNEOztBQUNELFNBQU8sSUFBUDtBQUNELEM7O0FDZEQsNkJBQWUsd0JBQVN6TyxRQUFULEVBQW1CaUwsSUFBbkIsRUFBeUI7QUFDdEMsTUFBSXdELEtBQUssR0FBRyxDQUFDLENBQWI7O0FBQ0EsT0FBSyxNQUFNaFYsSUFBWCxJQUFtQixJQUFuQixFQUF5QjtBQUN2QixRQUFJdUcsUUFBUSxDQUFDcEcsSUFBVCxDQUFjcVIsSUFBZCxFQUFvQnhSLElBQXBCLEVBQTBCLEVBQUVnVixLQUE1QixFQUFtQyxJQUFuQyxDQUFKLEVBQThDO0FBQzVDLGFBQU9oVixJQUFQO0FBQ0Q7QUFDRjtBQUNGLEM7O0FDUEQsNkJBQWUsYUFBU2dFLEtBQVQsRUFBZ0I7QUFDN0IsU0FBTyxLQUFLMjBCLFNBQUwsQ0FBZSxVQUFTMzRCLElBQVQsRUFBZTtBQUNuQyxRQUFJMDRCLEdBQUcsR0FBRyxDQUFDMTBCLEtBQUssQ0FBQ2hFLElBQUksQ0FBQ21ELElBQU4sQ0FBTixJQUFxQixDQUEvQjtBQUFBLFFBQ0kzQixRQUFRLEdBQUd4QixJQUFJLENBQUN3QixRQURwQjtBQUFBLFFBRUl0QixDQUFDLEdBQUdzQixRQUFRLElBQUlBLFFBQVEsQ0FBQy9CLE1BRjdCOztBQUdBLFdBQU8sRUFBRVMsQ0FBRixJQUFPLENBQWQsRUFBaUJ3NEIsR0FBRyxJQUFJbDNCLFFBQVEsQ0FBQ3RCLENBQUQsQ0FBUixDQUFZOEQsS0FBbkI7O0FBQ2pCaEUsSUFBQUEsSUFBSSxDQUFDZ0UsS0FBTCxHQUFhMDBCLEdBQWI7QUFDRCxHQU5NLENBQVA7QUFPRCxDOztBQ1JELDZCQUFlLHdCQUFTNXlCLE9BQVQsRUFBa0I7QUFDL0IsU0FBTyxLQUFLOHlCLFVBQUwsQ0FBZ0IsVUFBUzU0QixJQUFULEVBQWU7QUFDcEMsUUFBSUEsSUFBSSxDQUFDd0IsUUFBVCxFQUFtQjtBQUNqQnhCLE1BQUFBLElBQUksQ0FBQ3dCLFFBQUwsQ0FBYzZFLElBQWQsQ0FBbUJQLE9BQW5CO0FBQ0Q7QUFDRixHQUpNLENBQVA7QUFLRCxDOztBQ05ELDZCQUFlLGNBQVNpaEIsR0FBVCxFQUFjO0FBQzNCLE1BQUlwUixLQUFLLEdBQUcsSUFBWjtBQUFBLE1BQ0lrakIsUUFBUSxHQUFHQyxtQkFBbUIsQ0FBQ25qQixLQUFELEVBQVFvUixHQUFSLENBRGxDO0FBQUEsTUFFSXhXLEtBQUssR0FBRyxDQUFDb0YsS0FBRCxDQUZaOztBQUdBLFNBQU9BLEtBQUssS0FBS2tqQixRQUFqQixFQUEyQjtBQUN6QmxqQixJQUFBQSxLQUFLLEdBQUdBLEtBQUssQ0FBQ3ZULE1BQWQ7QUFDQW1PLElBQUFBLEtBQUssQ0FBQ3RQLElBQU4sQ0FBVzBVLEtBQVg7QUFDRDs7QUFDRCxNQUFJdVAsQ0FBQyxHQUFHM1UsS0FBSyxDQUFDOVEsTUFBZDs7QUFDQSxTQUFPc25CLEdBQUcsS0FBSzhSLFFBQWYsRUFBeUI7QUFDdkJ0b0IsSUFBQUEsS0FBSyxDQUFDeEcsTUFBTixDQUFhbWIsQ0FBYixFQUFnQixDQUFoQixFQUFtQjZCLEdBQW5CO0FBQ0FBLElBQUFBLEdBQUcsR0FBR0EsR0FBRyxDQUFDM2tCLE1BQVY7QUFDRDs7QUFDRCxTQUFPbU8sS0FBUDtBQUNEOztBQUVELFNBQVN1b0IsbUJBQVQsQ0FBNkI3eUIsQ0FBN0IsRUFBZ0NDLENBQWhDLEVBQW1DO0FBQ2pDLE1BQUlELENBQUMsS0FBS0MsQ0FBVixFQUFhLE9BQU9ELENBQVA7QUFDYixNQUFJOHlCLE1BQU0sR0FBRzl5QixDQUFDLENBQUMreUIsU0FBRixFQUFiO0FBQUEsTUFDSUMsTUFBTSxHQUFHL3lCLENBQUMsQ0FBQzh5QixTQUFGLEVBRGI7QUFBQSxNQUVJdG5CLENBQUMsR0FBRyxJQUZSO0FBR0F6TCxFQUFBQSxDQUFDLEdBQUc4eUIsTUFBTSxDQUFDbGhCLEdBQVAsRUFBSjtBQUNBM1IsRUFBQUEsQ0FBQyxHQUFHK3lCLE1BQU0sQ0FBQ3BoQixHQUFQLEVBQUo7O0FBQ0EsU0FBTzVSLENBQUMsS0FBS0MsQ0FBYixFQUFnQjtBQUNkd0wsSUFBQUEsQ0FBQyxHQUFHekwsQ0FBSjtBQUNBQSxJQUFBQSxDQUFDLEdBQUc4eUIsTUFBTSxDQUFDbGhCLEdBQVAsRUFBSjtBQUNBM1IsSUFBQUEsQ0FBQyxHQUFHK3lCLE1BQU0sQ0FBQ3BoQixHQUFQLEVBQUo7QUFDRDs7QUFDRCxTQUFPbkcsQ0FBUDtBQUNELEM7O0FDN0JELDZCQUFlLHFCQUFXO0FBQ3hCLE1BQUkxUixJQUFJLEdBQUcsSUFBWDtBQUFBLE1BQWlCdVEsS0FBSyxHQUFHLENBQUN2USxJQUFELENBQXpCOztBQUNBLFNBQU9BLElBQUksR0FBR0EsSUFBSSxDQUFDb0MsTUFBbkIsRUFBMkI7QUFDekJtTyxJQUFBQSxLQUFLLENBQUN0UCxJQUFOLENBQVdqQixJQUFYO0FBQ0Q7O0FBQ0QsU0FBT3VRLEtBQVA7QUFDRCxDOztBQ05ELDZCQUFlLHVCQUFXO0FBQ3hCLFNBQU81USxLQUFLLENBQUNjLElBQU4sQ0FBVyxJQUFYLENBQVA7QUFDRCxDOztBQ0ZELDZCQUFlLGtCQUFXO0FBQ3hCLE1BQUl5NEIsTUFBTSxHQUFHLEVBQWI7QUFDQSxPQUFLTixVQUFMLENBQWdCLFVBQVM1NEIsSUFBVCxFQUFlO0FBQzdCLFFBQUksQ0FBQ0EsSUFBSSxDQUFDd0IsUUFBVixFQUFvQjtBQUNsQjAzQixNQUFBQSxNQUFNLENBQUNqNEIsSUFBUCxDQUFZakIsSUFBWjtBQUNEO0FBQ0YsR0FKRDtBQUtBLFNBQU9rNUIsTUFBUDtBQUNELEM7O0FDUkQsNkJBQWUsaUJBQVc7QUFDeEIsTUFBSS9vQixJQUFJLEdBQUcsSUFBWDtBQUFBLE1BQWlCZ3BCLEtBQUssR0FBRyxFQUF6QjtBQUNBaHBCLEVBQUFBLElBQUksQ0FBQzlILElBQUwsQ0FBVSxVQUFTckksSUFBVCxFQUFlO0FBQ3ZCLFFBQUlBLElBQUksS0FBS21RLElBQWIsRUFBbUI7QUFBRTtBQUNuQmdwQixNQUFBQSxLQUFLLENBQUNsNEIsSUFBTixDQUFXO0FBQUNzbUIsUUFBQUEsTUFBTSxFQUFFdm5CLElBQUksQ0FBQ29DLE1BQWQ7QUFBc0I2dUIsUUFBQUEsTUFBTSxFQUFFanhCO0FBQTlCLE9BQVg7QUFDRDtBQUNGLEdBSkQ7QUFLQSxTQUFPbTVCLEtBQVA7QUFDRCxDOztBQ1JELDZCQUFlLCtCQUFZO0FBQ3pCLE1BQUluNUIsSUFBSSxHQUFHLElBQVg7QUFBQSxNQUFpQm81QixPQUFqQjtBQUFBLE1BQTBCdDJCLElBQUksR0FBRyxDQUFDOUMsSUFBRCxDQUFqQztBQUFBLE1BQXlDd0IsUUFBekM7QUFBQSxNQUFtRHRCLENBQW5EO0FBQUEsTUFBc0RKLENBQXREOztBQUNBLEtBQUc7QUFDRHM1QixJQUFBQSxPQUFPLEdBQUd0MkIsSUFBSSxDQUFDdTJCLE9BQUwsRUFBVixFQUEwQnYyQixJQUFJLEdBQUcsRUFBakM7O0FBQ0EsV0FBTzlDLElBQUksR0FBR281QixPQUFPLENBQUN2aEIsR0FBUixFQUFkLEVBQTZCO0FBQzNCLFlBQU03WCxJQUFOOztBQUNBLFVBQUl3QixRQUFRLEdBQUd4QixJQUFJLENBQUN3QixRQUFwQixFQUE4QjtBQUM1QixhQUFLdEIsQ0FBQyxHQUFHLENBQUosRUFBT0osQ0FBQyxHQUFHMEIsUUFBUSxDQUFDL0IsTUFBekIsRUFBaUNTLENBQUMsR0FBR0osQ0FBckMsRUFBd0MsRUFBRUksQ0FBMUMsRUFBNkM7QUFDM0M0QyxVQUFBQSxJQUFJLENBQUM3QixJQUFMLENBQVVPLFFBQVEsQ0FBQ3RCLENBQUQsQ0FBbEI7QUFDRDtBQUNGO0FBQ0Y7QUFDRixHQVZELFFBVVM0QyxJQUFJLENBQUNyRCxNQVZkO0FBV0QsQzs7QUNiRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVlLFNBQVMwNkIsU0FBVCxDQUFtQmgzQixJQUFuQixFQUF5QjNCLFFBQXpCLEVBQW1DO0FBQ2hELE1BQUkyQixJQUFJLFlBQVlNLEdBQXBCLEVBQXlCO0FBQ3ZCTixJQUFBQSxJQUFJLEdBQUcsQ0FBQ3dRLFNBQUQsRUFBWXhRLElBQVosQ0FBUDtBQUNBLFFBQUkzQixRQUFRLEtBQUttUyxTQUFqQixFQUE0Qm5TLFFBQVEsR0FBRzQ0QixXQUFYO0FBQzdCLEdBSEQsTUFHTyxJQUFJNTRCLFFBQVEsS0FBS21TLFNBQWpCLEVBQTRCO0FBQ2pDblMsSUFBQUEsUUFBUSxHQUFHNjRCLGNBQVg7QUFDRDs7QUFFRCxNQUFJbHFCLElBQUksR0FBRyxJQUFJbXFCLElBQUosQ0FBU24zQixJQUFULENBQVg7QUFBQSxNQUNJbkQsSUFESjtBQUFBLE1BRUl1USxLQUFLLEdBQUcsQ0FBQ0osSUFBRCxDQUZaO0FBQUEsTUFHSXZOLEtBSEo7QUFBQSxNQUlJMjNCLE1BSko7QUFBQSxNQUtJcjZCLENBTEo7QUFBQSxNQU1JSixDQU5KOztBQVFBLFNBQU9FLElBQUksR0FBR3VRLEtBQUssQ0FBQ3NILEdBQU4sRUFBZCxFQUEyQjtBQUN6QixRQUFJLENBQUMwaUIsTUFBTSxHQUFHLzRCLFFBQVEsQ0FBQ3hCLElBQUksQ0FBQ21ELElBQU4sQ0FBbEIsTUFBbUNyRCxDQUFDLEdBQUcsQ0FBQ3k2QixNQUFNLEdBQUc1NkIsS0FBSyxDQUFDYyxJQUFOLENBQVc4NUIsTUFBWCxDQUFWLEVBQThCOTZCLE1BQXJFLENBQUosRUFBa0Y7QUFDaEZPLE1BQUFBLElBQUksQ0FBQ3dCLFFBQUwsR0FBZ0IrNEIsTUFBaEI7O0FBQ0EsV0FBS3I2QixDQUFDLEdBQUdKLENBQUMsR0FBRyxDQUFiLEVBQWdCSSxDQUFDLElBQUksQ0FBckIsRUFBd0IsRUFBRUEsQ0FBMUIsRUFBNkI7QUFDM0JxUSxRQUFBQSxLQUFLLENBQUN0UCxJQUFOLENBQVcyQixLQUFLLEdBQUcyM0IsTUFBTSxDQUFDcjZCLENBQUQsQ0FBTixHQUFZLElBQUlvNkIsSUFBSixDQUFTQyxNQUFNLENBQUNyNkIsQ0FBRCxDQUFmLENBQS9CO0FBQ0EwQyxRQUFBQSxLQUFLLENBQUNSLE1BQU4sR0FBZXBDLElBQWY7QUFDQTRDLFFBQUFBLEtBQUssQ0FBQzQzQixLQUFOLEdBQWN4NkIsSUFBSSxDQUFDdzZCLEtBQUwsR0FBYSxDQUEzQjtBQUNEO0FBQ0Y7QUFDRjs7QUFFRCxTQUFPcnFCLElBQUksQ0FBQ3lvQixVQUFMLENBQWdCNkIsYUFBaEIsQ0FBUDtBQUNEOztBQUVELFNBQVNDLFNBQVQsR0FBcUI7QUFDbkIsU0FBT1AsU0FBUyxDQUFDLElBQUQsQ0FBVCxDQUFnQnZCLFVBQWhCLENBQTJCK0IsUUFBM0IsQ0FBUDtBQUNEOztBQUVELFNBQVNOLGNBQVQsQ0FBd0I3akIsQ0FBeEIsRUFBMkI7QUFDekIsU0FBT0EsQ0FBQyxDQUFDaFYsUUFBVDtBQUNEOztBQUVELFNBQVM0NEIsV0FBVCxDQUFxQjVqQixDQUFyQixFQUF3QjtBQUN0QixTQUFPN1csS0FBSyxDQUFDYSxPQUFOLENBQWNnVyxDQUFkLElBQW1CQSxDQUFDLENBQUMsQ0FBRCxDQUFwQixHQUEwQixJQUFqQztBQUNEOztBQUVELFNBQVNta0IsUUFBVCxDQUFrQjM2QixJQUFsQixFQUF3QjtBQUN0QixNQUFJQSxJQUFJLENBQUNtRCxJQUFMLENBQVVhLEtBQVYsS0FBb0IyUCxTQUF4QixFQUFtQzNULElBQUksQ0FBQ2dFLEtBQUwsR0FBYWhFLElBQUksQ0FBQ21ELElBQUwsQ0FBVWEsS0FBdkI7QUFDbkNoRSxFQUFBQSxJQUFJLENBQUNtRCxJQUFMLEdBQVluRCxJQUFJLENBQUNtRCxJQUFMLENBQVVBLElBQXRCO0FBQ0Q7O0FBRU0sU0FBU3MzQixhQUFULENBQXVCejZCLElBQXZCLEVBQTZCO0FBQ2xDLE1BQUkrdUIsTUFBTSxHQUFHLENBQWI7O0FBQ0EsS0FBRy91QixJQUFJLENBQUMrdUIsTUFBTCxHQUFjQSxNQUFkLENBQUgsUUFDTyxDQUFDL3VCLElBQUksR0FBR0EsSUFBSSxDQUFDb0MsTUFBYixLQUF5QnBDLElBQUksQ0FBQyt1QixNQUFMLEdBQWMsRUFBRUEsTUFEaEQ7QUFFRDtBQUVNLFNBQVN1TCxJQUFULENBQWNuM0IsSUFBZCxFQUFvQjtBQUN6QixPQUFLQSxJQUFMLEdBQVlBLElBQVo7QUFDQSxPQUFLcTNCLEtBQUwsR0FDQSxLQUFLekwsTUFBTCxHQUFjLENBRGQ7QUFFQSxPQUFLM3NCLE1BQUwsR0FBYyxJQUFkO0FBQ0Q7QUFFRGs0QixJQUFJLENBQUNqNUIsU0FBTCxHQUFpQjg0QixTQUFTLENBQUM5NEIsU0FBVixHQUFzQjtBQUNyQ3FCLEVBQUFBLFdBQVcsRUFBRTQzQixJQUR3QjtBQUVyQzdCLEVBQUFBLEtBQUssRUFBRWEsZUFGOEI7QUFHckNqeEIsRUFBQUEsSUFBSSxFQUFFa3hCLGNBSCtCO0FBSXJDWixFQUFBQSxTQUFTLEVBQUVjLFNBSjBCO0FBS3JDYixFQUFBQSxVQUFVLEVBQUVZLFVBTHlCO0FBTXJDcDRCLEVBQUFBLElBQUksRUFBRXM0QixjQU4rQjtBQU9yQ2hCLEVBQUFBLEdBQUcsRUFBRWlCLEdBUGdDO0FBUXJDdHpCLEVBQUFBLElBQUksRUFBRXV6QixjQVIrQjtBQVNyQ2dCLEVBQUFBLElBQUksRUFBRWYsSUFUK0I7QUFVckNiLEVBQUFBLFNBQVMsRUFBRWMsU0FWMEI7QUFXckNlLEVBQUFBLFdBQVcsRUFBRWQsV0FYd0I7QUFZckNiLEVBQUFBLE1BQU0sRUFBRWMsTUFaNkI7QUFhckNiLEVBQUFBLEtBQUssRUFBRWMsS0FiOEI7QUFjckMxb0IsRUFBQUEsSUFBSSxFQUFFbXBCLFNBZCtCO0FBZXJDLEdBQUM1cEIsTUFBTSxDQUFDQyxRQUFSLEdBQW1CbXBCLGtCQUFhQTtBQWZLLENBQXZDLEM7O0FDMUVBO0FBQ0E7QUFFQSxJQUFJWSxPQUFPLEdBQUc7QUFBQ04sRUFBQUEsS0FBSyxFQUFFLENBQUM7QUFBVCxDQUFkO0FBQUEsSUFDSU8sU0FBUyxHQUFHLEVBRGhCO0FBQUEsSUFFSUMsT0FBTyxHQUFHLEVBRmQ7O0FBSUEsU0FBU0MsU0FBVCxDQUFtQnprQixDQUFuQixFQUFzQjtBQUNwQixTQUFPQSxDQUFDLENBQUN6QixFQUFUO0FBQ0Q7O0FBRUQsU0FBU21tQixlQUFULENBQXlCMWtCLENBQXpCLEVBQTRCO0FBQzFCLFNBQU9BLENBQUMsQ0FBQzJrQixRQUFUO0FBQ0Q7O0FBRUQsNkJBQWUsb0JBQVc7QUFDeEIsTUFBSXBtQixFQUFFLEdBQUdrbUIsU0FBVDtBQUFBLE1BQ0lFLFFBQVEsR0FBR0QsZUFEZjtBQUFBLE1BRUlOLElBRko7O0FBSUEsV0FBU1EsUUFBVCxDQUFrQmo0QixJQUFsQixFQUF3QjtBQUN0QixRQUFJb04sS0FBSyxHQUFHNVEsS0FBSyxDQUFDYyxJQUFOLENBQVcwQyxJQUFYLENBQVo7QUFBQSxRQUNJazRCLFNBQVMsR0FBR3RtQixFQURoQjtBQUFBLFFBRUl1bUIsZUFBZSxHQUFHSCxRQUZ0QjtBQUFBLFFBR0lyN0IsQ0FISjtBQUFBLFFBSUkwVyxDQUpKO0FBQUEsUUFLSXRXLENBTEo7QUFBQSxRQU1JaVEsSUFOSjtBQUFBLFFBT0kvTixNQVBKO0FBQUEsUUFRSXBDLElBUko7QUFBQSxRQVNJdTdCLE1BVEo7QUFBQSxRQVVJQyxPQVZKO0FBQUEsUUFXSUMsU0FBUyxHQUFHLElBQUloNEIsR0FBSixFQVhoQjs7QUFhQSxRQUFJbTNCLElBQUksSUFBSSxJQUFaLEVBQWtCO0FBQ2hCLFlBQU1jLENBQUMsR0FBR25yQixLQUFLLENBQUNyTyxHQUFOLENBQVUsQ0FBQ3NVLENBQUQsRUFBSXRXLENBQUosS0FBVXk3QixTQUFTLENBQUNmLElBQUksQ0FBQ3BrQixDQUFELEVBQUl0VyxDQUFKLEVBQU9pRCxJQUFQLENBQUwsQ0FBN0IsQ0FBVjtBQUNBLFlBQU15NEIsQ0FBQyxHQUFHRixDQUFDLENBQUN4NUIsR0FBRixDQUFNMjVCLFFBQU4sQ0FBVjtBQUNBLFlBQU03SixDQUFDLEdBQUcsSUFBSThKLEdBQUosQ0FBUUosQ0FBUixFQUFXN3hCLEdBQVgsQ0FBZSxFQUFmLENBQVY7O0FBQ0EsV0FBSyxNQUFNM0osQ0FBWCxJQUFnQjA3QixDQUFoQixFQUFtQjtBQUNqQixZQUFJLENBQUM1SixDQUFDLENBQUNwdUIsR0FBRixDQUFNMUQsQ0FBTixDQUFMLEVBQWU7QUFDYjh4QixVQUFBQSxDQUFDLENBQUNub0IsR0FBRixDQUFNM0osQ0FBTjtBQUNBdzdCLFVBQUFBLENBQUMsQ0FBQ3o2QixJQUFGLENBQU9mLENBQVA7QUFDQTA3QixVQUFBQSxDQUFDLENBQUMzNkIsSUFBRixDQUFPNDZCLFFBQVEsQ0FBQzM3QixDQUFELENBQWY7QUFDQXFRLFVBQUFBLEtBQUssQ0FBQ3RQLElBQU4sQ0FBVys1QixPQUFYO0FBQ0Q7QUFDRjs7QUFDREssTUFBQUEsU0FBUyxHQUFHLENBQUNwcUIsQ0FBRCxFQUFJL1EsQ0FBSixLQUFVdzdCLENBQUMsQ0FBQ3g3QixDQUFELENBQXZCOztBQUNBbzdCLE1BQUFBLGVBQWUsR0FBRyxDQUFDcnFCLENBQUQsRUFBSS9RLENBQUosS0FBVTA3QixDQUFDLENBQUMxN0IsQ0FBRCxDQUE3QjtBQUNEOztBQUVELFNBQUtBLENBQUMsR0FBRyxDQUFKLEVBQU9KLENBQUMsR0FBR3lRLEtBQUssQ0FBQzlRLE1BQXRCLEVBQThCUyxDQUFDLEdBQUdKLENBQWxDLEVBQXFDLEVBQUVJLENBQXZDLEVBQTBDO0FBQ3hDc1csTUFBQUEsQ0FBQyxHQUFHakcsS0FBSyxDQUFDclEsQ0FBRCxDQUFULEVBQWNGLElBQUksR0FBR3VRLEtBQUssQ0FBQ3JRLENBQUQsQ0FBTCxHQUFXLElBQUlvNkIsSUFBSixDQUFTOWpCLENBQVQsQ0FBaEM7O0FBQ0EsVUFBSSxDQUFDK2tCLE1BQU0sR0FBR0YsU0FBUyxDQUFDN2tCLENBQUQsRUFBSXRXLENBQUosRUFBT2lELElBQVAsQ0FBbkIsS0FBb0MsSUFBcEMsS0FBNkNvNEIsTUFBTSxJQUFJLEVBQXZELENBQUosRUFBZ0U7QUFDOURDLFFBQUFBLE9BQU8sR0FBR3g3QixJQUFJLENBQUMrVSxFQUFMLEdBQVV3bUIsTUFBcEI7QUFDQUUsUUFBQUEsU0FBUyxDQUFDNTNCLEdBQVYsQ0FBYzIzQixPQUFkLEVBQXVCQyxTQUFTLENBQUM3M0IsR0FBVixDQUFjNDNCLE9BQWQsSUFBeUJULFNBQXpCLEdBQXFDLzZCLElBQTVEO0FBQ0Q7O0FBQ0QsVUFBSSxDQUFDdTdCLE1BQU0sR0FBR0QsZUFBZSxDQUFDOWtCLENBQUQsRUFBSXRXLENBQUosRUFBT2lELElBQVAsQ0FBekIsS0FBMEMsSUFBMUMsS0FBbURvNEIsTUFBTSxJQUFJLEVBQTdELENBQUosRUFBc0U7QUFDcEV2N0IsUUFBQUEsSUFBSSxDQUFDb0MsTUFBTCxHQUFjbTVCLE1BQWQ7QUFDRDtBQUNGOztBQUVELFNBQUtyN0IsQ0FBQyxHQUFHLENBQVQsRUFBWUEsQ0FBQyxHQUFHSixDQUFoQixFQUFtQixFQUFFSSxDQUFyQixFQUF3QjtBQUN0QkYsTUFBQUEsSUFBSSxHQUFHdVEsS0FBSyxDQUFDclEsQ0FBRCxDQUFaOztBQUNBLFVBQUlxN0IsTUFBTSxHQUFHdjdCLElBQUksQ0FBQ29DLE1BQWxCLEVBQTBCO0FBQ3hCQSxRQUFBQSxNQUFNLEdBQUdxNUIsU0FBUyxDQUFDMzNCLEdBQVYsQ0FBY3kzQixNQUFkLENBQVQ7QUFDQSxZQUFJLENBQUNuNUIsTUFBTCxFQUFhLE1BQU0sSUFBSStPLEtBQUosQ0FBVSxjQUFjb3FCLE1BQXhCLENBQU47QUFDYixZQUFJbjVCLE1BQU0sS0FBSzI0QixTQUFmLEVBQTBCLE1BQU0sSUFBSTVwQixLQUFKLENBQVUsZ0JBQWdCb3FCLE1BQTFCLENBQU47QUFDMUIsWUFBSW41QixNQUFNLENBQUNaLFFBQVgsRUFBcUJZLE1BQU0sQ0FBQ1osUUFBUCxDQUFnQlAsSUFBaEIsQ0FBcUJqQixJQUFyQixFQUFyQixLQUNLb0MsTUFBTSxDQUFDWixRQUFQLEdBQWtCLENBQUN4QixJQUFELENBQWxCO0FBQ0xBLFFBQUFBLElBQUksQ0FBQ29DLE1BQUwsR0FBY0EsTUFBZDtBQUNELE9BUEQsTUFPTztBQUNMLFlBQUkrTixJQUFKLEVBQVUsTUFBTSxJQUFJZ0IsS0FBSixDQUFVLGdCQUFWLENBQU47QUFDVmhCLFFBQUFBLElBQUksR0FBR25RLElBQVA7QUFDRDtBQUNGOztBQUVELFFBQUksQ0FBQ21RLElBQUwsRUFBVyxNQUFNLElBQUlnQixLQUFKLENBQVUsU0FBVixDQUFOLENBeERXLENBMER0QjtBQUNBOztBQUNBLFFBQUl5cEIsSUFBSSxJQUFJLElBQVosRUFBa0I7QUFDaEIsYUFBT3pxQixJQUFJLENBQUNoTixJQUFMLEtBQWM2M0IsT0FBZCxJQUF5QjdxQixJQUFJLENBQUMzTyxRQUFMLENBQWMvQixNQUFkLEtBQXlCLENBQXpELEVBQTREO0FBQzFEMFEsUUFBQUEsSUFBSSxHQUFHQSxJQUFJLENBQUMzTyxRQUFMLENBQWMsQ0FBZCxDQUFQLEVBQXlCLEVBQUUxQixDQUEzQjtBQUNEOztBQUNELFdBQUssSUFBSUksQ0FBQyxHQUFHcVEsS0FBSyxDQUFDOVEsTUFBTixHQUFlLENBQTVCLEVBQStCUyxDQUFDLElBQUksQ0FBcEMsRUFBdUMsRUFBRUEsQ0FBekMsRUFBNEM7QUFDMUNGLFFBQUFBLElBQUksR0FBR3VRLEtBQUssQ0FBQ3JRLENBQUQsQ0FBWjtBQUNBLFlBQUlGLElBQUksQ0FBQ21ELElBQUwsS0FBYzYzQixPQUFsQixFQUEyQjtBQUMzQmg3QixRQUFBQSxJQUFJLENBQUNtRCxJQUFMLEdBQVksSUFBWjtBQUNEO0FBQ0Y7O0FBRURnTixJQUFBQSxJQUFJLENBQUMvTixNQUFMLEdBQWMwNEIsT0FBZDtBQUNBM3FCLElBQUFBLElBQUksQ0FBQ3lvQixVQUFMLENBQWdCLFVBQVM1NEIsSUFBVCxFQUFlO0FBQUVBLE1BQUFBLElBQUksQ0FBQ3c2QixLQUFMLEdBQWF4NkIsSUFBSSxDQUFDb0MsTUFBTCxDQUFZbzRCLEtBQVosR0FBb0IsQ0FBakM7QUFBb0MsUUFBRTE2QixDQUFGO0FBQU0sS0FBM0UsRUFBNkU4NEIsVUFBN0UsQ0FBd0Y2QixhQUF4RjtBQUNBdHFCLElBQUFBLElBQUksQ0FBQy9OLE1BQUwsR0FBYyxJQUFkO0FBQ0EsUUFBSXRDLENBQUMsR0FBRyxDQUFSLEVBQVcsTUFBTSxJQUFJcVIsS0FBSixDQUFVLE9BQVYsQ0FBTjtBQUVYLFdBQU9oQixJQUFQO0FBQ0Q7O0FBRURpckIsRUFBQUEsUUFBUSxDQUFDcm1CLEVBQVQsR0FBYyxVQUFTeFUsQ0FBVCxFQUFZO0FBQ3hCLFdBQU9RLFNBQVMsQ0FBQ3RCLE1BQVYsSUFBb0JzVixFQUFFLEdBQUd3akIsUUFBUSxDQUFDaDRCLENBQUQsQ0FBYixFQUFrQjY2QixRQUF0QyxJQUFrRHJtQixFQUF6RDtBQUNELEdBRkQ7O0FBSUFxbUIsRUFBQUEsUUFBUSxDQUFDRCxRQUFULEdBQW9CLFVBQVM1NkIsQ0FBVCxFQUFZO0FBQzlCLFdBQU9RLFNBQVMsQ0FBQ3RCLE1BQVYsSUFBb0IwN0IsUUFBUSxHQUFHNUMsUUFBUSxDQUFDaDRCLENBQUQsQ0FBbkIsRUFBd0I2NkIsUUFBNUMsSUFBd0RELFFBQS9EO0FBQ0QsR0FGRDs7QUFJQUMsRUFBQUEsUUFBUSxDQUFDUixJQUFULEdBQWdCLFVBQVNyNkIsQ0FBVCxFQUFZO0FBQzFCLFdBQU9RLFNBQVMsQ0FBQ3RCLE1BQVYsSUFBb0JtN0IsSUFBSSxHQUFHckMsUUFBUSxDQUFDaDRCLENBQUQsQ0FBZixFQUFvQjY2QixRQUF4QyxJQUFvRFIsSUFBM0Q7QUFDRCxHQUZEOztBQUlBLFNBQU9RLFFBQVA7QUFDRCxFQUVEO0FBQ0E7QUFDQTs7QUFDQSxTQUFTTyxTQUFULENBQW1CZixJQUFuQixFQUF5QjtBQUN2QkEsRUFBQUEsSUFBSSxHQUFJLEdBQUVBLElBQUssRUFBZjtBQUNBLE1BQUkxNkIsQ0FBQyxHQUFHMDZCLElBQUksQ0FBQ243QixNQUFiO0FBQ0EsTUFBSXM4QixLQUFLLENBQUNuQixJQUFELEVBQU8xNkIsQ0FBQyxHQUFHLENBQVgsQ0FBTCxJQUFzQixDQUFDNjdCLEtBQUssQ0FBQ25CLElBQUQsRUFBTzE2QixDQUFDLEdBQUcsQ0FBWCxDQUFoQyxFQUErQzA2QixJQUFJLEdBQUdBLElBQUksQ0FBQzF6QixLQUFMLENBQVcsQ0FBWCxFQUFjLENBQUMsQ0FBZixDQUFQO0FBQy9DLFNBQU8wekIsSUFBSSxDQUFDLENBQUQsQ0FBSixLQUFZLEdBQVosR0FBa0JBLElBQWxCLEdBQTBCLElBQUdBLElBQUssRUFBekM7QUFDRCxFQUVEO0FBQ0E7QUFDQTs7O0FBQ0EsU0FBU2lCLFFBQVQsQ0FBa0JqQixJQUFsQixFQUF3QjtBQUN0QixNQUFJMTZCLENBQUMsR0FBRzA2QixJQUFJLENBQUNuN0IsTUFBYjtBQUNBLE1BQUlTLENBQUMsR0FBRyxDQUFSLEVBQVcsT0FBTyxFQUFQOztBQUNYLFNBQU8sRUFBRUEsQ0FBRixHQUFNLENBQWIsRUFBZ0IsSUFBSTY3QixLQUFLLENBQUNuQixJQUFELEVBQU8xNkIsQ0FBUCxDQUFULEVBQW9COztBQUNwQyxTQUFPMDZCLElBQUksQ0FBQzF6QixLQUFMLENBQVcsQ0FBWCxFQUFjaEgsQ0FBZCxDQUFQO0FBQ0QsRUFFRDtBQUNBO0FBQ0E7OztBQUNBLFNBQVM2N0IsS0FBVCxDQUFlbkIsSUFBZixFQUFxQjE2QixDQUFyQixFQUF3QjtBQUN0QixNQUFJMDZCLElBQUksQ0FBQzE2QixDQUFELENBQUosS0FBWSxHQUFoQixFQUFxQjtBQUNuQixRQUFJZ2xCLENBQUMsR0FBRyxDQUFSOztBQUNBLFdBQU9obEIsQ0FBQyxHQUFHLENBQUosSUFBUzA2QixJQUFJLENBQUMsRUFBRTE2QixDQUFILENBQUosS0FBYyxJQUE5QixFQUFvQyxFQUFFZ2xCLENBQUY7O0FBQ3BDLFFBQUksQ0FBQ0EsQ0FBQyxHQUFHLENBQUwsTUFBWSxDQUFoQixFQUFtQixPQUFPLElBQVA7QUFDcEI7O0FBQ0QsU0FBTyxLQUFQO0FBQ0QsQzs7QUNoSkQ7O0FBRUEsU0FBUzhXLGlCQUFULENBQTJCLzFCLENBQTNCLEVBQThCQyxDQUE5QixFQUFpQztBQUMvQixTQUFPRCxDQUFDLENBQUM3RCxNQUFGLEtBQWE4RCxDQUFDLENBQUM5RCxNQUFmLEdBQXdCLENBQXhCLEdBQTRCLENBQW5DO0FBQ0QsRUFFRDtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0EsU0FBUzY1QixRQUFULENBQWtCaDBCLENBQWxCLEVBQXFCO0FBQ25CLE1BQUl6RyxRQUFRLEdBQUd5RyxDQUFDLENBQUN6RyxRQUFqQjtBQUNBLFNBQU9BLFFBQVEsR0FBR0EsUUFBUSxDQUFDLENBQUQsQ0FBWCxHQUFpQnlHLENBQUMsQ0FBQzBFLENBQWxDO0FBQ0QsRUFFRDs7O0FBQ0EsU0FBU3V2QixTQUFULENBQW1CajBCLENBQW5CLEVBQXNCO0FBQ3BCLE1BQUl6RyxRQUFRLEdBQUd5RyxDQUFDLENBQUN6RyxRQUFqQjtBQUNBLFNBQU9BLFFBQVEsR0FBR0EsUUFBUSxDQUFDQSxRQUFRLENBQUMvQixNQUFULEdBQWtCLENBQW5CLENBQVgsR0FBbUN3SSxDQUFDLENBQUMwRSxDQUFwRDtBQUNELEVBRUQ7QUFDQTs7O0FBQ0EsU0FBU3d2QixXQUFULENBQXFCQyxFQUFyQixFQUF5QkMsRUFBekIsRUFBNkJDLEtBQTdCLEVBQW9DO0FBQ2xDLE1BQUlDLE1BQU0sR0FBR0QsS0FBSyxJQUFJRCxFQUFFLENBQUNuOEIsQ0FBSCxHQUFPazhCLEVBQUUsQ0FBQ2w4QixDQUFkLENBQWxCO0FBQ0FtOEIsRUFBQUEsRUFBRSxDQUFDM3FCLENBQUgsSUFBUTZxQixNQUFSO0FBQ0FGLEVBQUFBLEVBQUUsQ0FBQ3ZrQixDQUFILElBQVF3a0IsS0FBUjtBQUNBRixFQUFBQSxFQUFFLENBQUMxcUIsQ0FBSCxJQUFRNnFCLE1BQVI7QUFDQUYsRUFBQUEsRUFBRSxDQUFDRyxDQUFILElBQVFGLEtBQVI7QUFDQUQsRUFBQUEsRUFBRSxDQUFDNzhCLENBQUgsSUFBUTg4QixLQUFSO0FBQ0QsRUFFRDtBQUNBO0FBQ0E7OztBQUNBLFNBQVNHLGFBQVQsQ0FBdUJ4MEIsQ0FBdkIsRUFBMEI7QUFDeEIsTUFBSXEwQixLQUFLLEdBQUcsQ0FBWjtBQUFBLE1BQ0lDLE1BQU0sR0FBRyxDQURiO0FBQUEsTUFFSS82QixRQUFRLEdBQUd5RyxDQUFDLENBQUN6RyxRQUZqQjtBQUFBLE1BR0l0QixDQUFDLEdBQUdzQixRQUFRLENBQUMvQixNQUhqQjtBQUFBLE1BSUlxdUIsQ0FKSjs7QUFLQSxTQUFPLEVBQUU1dEIsQ0FBRixJQUFPLENBQWQsRUFBaUI7QUFDZjR0QixJQUFBQSxDQUFDLEdBQUd0c0IsUUFBUSxDQUFDdEIsQ0FBRCxDQUFaO0FBQ0E0dEIsSUFBQUEsQ0FBQyxDQUFDME8sQ0FBRixJQUFPRixLQUFQO0FBQ0F4TyxJQUFBQSxDQUFDLENBQUN0dUIsQ0FBRixJQUFPODhCLEtBQVA7QUFDQUEsSUFBQUEsS0FBSyxJQUFJeE8sQ0FBQyxDQUFDaFcsQ0FBRixJQUFPeWtCLE1BQU0sSUFBSXpPLENBQUMsQ0FBQ3BjLENBQW5CLENBQVQ7QUFDRDtBQUNGLEVBRUQ7QUFDQTs7O0FBQ0EsU0FBU2dyQixZQUFULENBQXNCQyxHQUF0QixFQUEyQjEwQixDQUEzQixFQUE4QjR3QixRQUE5QixFQUF3QztBQUN0QyxTQUFPOEQsR0FBRyxDQUFDMTJCLENBQUosQ0FBTTdELE1BQU4sS0FBaUI2RixDQUFDLENBQUM3RixNQUFuQixHQUE0QnU2QixHQUFHLENBQUMxMkIsQ0FBaEMsR0FBb0M0eUIsUUFBM0M7QUFDRDs7QUFFRCxTQUFTK0QsUUFBVCxDQUFrQjU4QixJQUFsQixFQUF3QkUsQ0FBeEIsRUFBMkI7QUFDekIsT0FBSytRLENBQUwsR0FBU2pSLElBQVQ7QUFDQSxPQUFLb0MsTUFBTCxHQUFjLElBQWQ7QUFDQSxPQUFLWixRQUFMLEdBQWdCLElBQWhCO0FBQ0EsT0FBS3E3QixDQUFMLEdBQVMsSUFBVCxDQUp5QixDQUlWOztBQUNmLE9BQUs1MkIsQ0FBTCxHQUFTLElBQVQsQ0FMeUIsQ0FLVjs7QUFDZixPQUFLdTJCLENBQUwsR0FBUyxDQUFULENBTnlCLENBTWI7O0FBQ1osT0FBS2g5QixDQUFMLEdBQVMsQ0FBVCxDQVB5QixDQU9iOztBQUNaLE9BQUtrUyxDQUFMLEdBQVMsQ0FBVCxDQVJ5QixDQVFiOztBQUNaLE9BQUtvRyxDQUFMLEdBQVMsQ0FBVCxDQVR5QixDQVNiOztBQUNaLE9BQUtuTCxDQUFMLEdBQVMsSUFBVCxDQVZ5QixDQVVWOztBQUNmLE9BQUt6TSxDQUFMLEdBQVNBLENBQVQsQ0FYeUIsQ0FXYjtBQUNiOztBQUVEMDhCLFFBQVEsQ0FBQ3Y3QixTQUFULEdBQXFCNlgsTUFBTSxDQUFDdE4sTUFBUCxDQUFjMHVCLGNBQWQsQ0FBckI7O0FBRUEsU0FBU3dDLFFBQVQsQ0FBa0Izc0IsSUFBbEIsRUFBd0I7QUFDdEIsTUFBSTRzQixJQUFJLEdBQUcsSUFBSUgsUUFBSixDQUFhenNCLElBQWIsRUFBbUIsQ0FBbkIsQ0FBWDtBQUFBLE1BQ0luUSxJQURKO0FBQUEsTUFFSXVRLEtBQUssR0FBRyxDQUFDd3NCLElBQUQsQ0FGWjtBQUFBLE1BR0luNkIsS0FISjtBQUFBLE1BSUlwQixRQUpKO0FBQUEsTUFLSXRCLENBTEo7QUFBQSxNQU1JSixDQU5KOztBQVFBLFNBQU9FLElBQUksR0FBR3VRLEtBQUssQ0FBQ3NILEdBQU4sRUFBZCxFQUEyQjtBQUN6QixRQUFJclcsUUFBUSxHQUFHeEIsSUFBSSxDQUFDaVIsQ0FBTCxDQUFPelAsUUFBdEIsRUFBZ0M7QUFDOUJ4QixNQUFBQSxJQUFJLENBQUN3QixRQUFMLEdBQWdCLElBQUk3QixLQUFKLENBQVVHLENBQUMsR0FBRzBCLFFBQVEsQ0FBQy9CLE1BQXZCLENBQWhCOztBQUNBLFdBQUtTLENBQUMsR0FBR0osQ0FBQyxHQUFHLENBQWIsRUFBZ0JJLENBQUMsSUFBSSxDQUFyQixFQUF3QixFQUFFQSxDQUExQixFQUE2QjtBQUMzQnFRLFFBQUFBLEtBQUssQ0FBQ3RQLElBQU4sQ0FBVzJCLEtBQUssR0FBRzVDLElBQUksQ0FBQ3dCLFFBQUwsQ0FBY3RCLENBQWQsSUFBbUIsSUFBSTA4QixRQUFKLENBQWFwN0IsUUFBUSxDQUFDdEIsQ0FBRCxDQUFyQixFQUEwQkEsQ0FBMUIsQ0FBdEM7QUFDQTBDLFFBQUFBLEtBQUssQ0FBQ1IsTUFBTixHQUFlcEMsSUFBZjtBQUNEO0FBQ0Y7QUFDRjs7QUFFRCxHQUFDKzhCLElBQUksQ0FBQzM2QixNQUFMLEdBQWMsSUFBSXc2QixRQUFKLENBQWEsSUFBYixFQUFtQixDQUFuQixDQUFmLEVBQXNDcDdCLFFBQXRDLEdBQWlELENBQUN1N0IsSUFBRCxDQUFqRDtBQUNBLFNBQU9BLElBQVA7QUFDRCxFQUVEOzs7QUFDQSw2QkFBZSxvQkFBVztBQUN4QixNQUFJQyxVQUFVLEdBQUdoQixpQkFBakI7QUFBQSxNQUNJN0osRUFBRSxHQUFHLENBRFQ7QUFBQSxNQUVJQyxFQUFFLEdBQUcsQ0FGVDtBQUFBLE1BR0k2SyxRQUFRLEdBQUcsSUFIZjs7QUFLQSxXQUFTRixJQUFULENBQWM1c0IsSUFBZCxFQUFvQjtBQUNsQixRQUFJeEQsQ0FBQyxHQUFHbXdCLFFBQVEsQ0FBQzNzQixJQUFELENBQWhCLENBRGtCLENBR2xCOztBQUNBeEQsSUFBQUEsQ0FBQyxDQUFDZ3NCLFNBQUYsQ0FBWXVFLFNBQVosR0FBd0J2d0IsQ0FBQyxDQUFDdkssTUFBRixDQUFTNUMsQ0FBVCxHQUFhLENBQUNtTixDQUFDLENBQUM2dkIsQ0FBeEM7QUFDQTd2QixJQUFBQSxDQUFDLENBQUNpc0IsVUFBRixDQUFhdUUsVUFBYixFQUxrQixDQU9sQjs7QUFDQSxRQUFJRixRQUFKLEVBQWM5c0IsSUFBSSxDQUFDeW9CLFVBQUwsQ0FBZ0J3RSxRQUFoQixFQUFkLENBRUE7QUFDQTtBQUhBLFNBSUs7QUFDSCxVQUFJQyxJQUFJLEdBQUdsdEIsSUFBWDtBQUFBLFVBQ0ltdEIsS0FBSyxHQUFHbnRCLElBRFo7QUFBQSxVQUVJb3RCLE1BQU0sR0FBR3B0QixJQUZiO0FBR0FBLE1BQUFBLElBQUksQ0FBQ3lvQixVQUFMLENBQWdCLFVBQVM1NEIsSUFBVCxFQUFlO0FBQzdCLFlBQUlBLElBQUksQ0FBQ08sQ0FBTCxHQUFTODhCLElBQUksQ0FBQzk4QixDQUFsQixFQUFxQjg4QixJQUFJLEdBQUdyOUIsSUFBUDtBQUNyQixZQUFJQSxJQUFJLENBQUNPLENBQUwsR0FBUys4QixLQUFLLENBQUMvOEIsQ0FBbkIsRUFBc0IrOEIsS0FBSyxHQUFHdDlCLElBQVI7QUFDdEIsWUFBSUEsSUFBSSxDQUFDdzZCLEtBQUwsR0FBYStDLE1BQU0sQ0FBQy9DLEtBQXhCLEVBQStCK0MsTUFBTSxHQUFHdjlCLElBQVQ7QUFDaEMsT0FKRDtBQUtBLFVBQUk4WCxDQUFDLEdBQUd1bEIsSUFBSSxLQUFLQyxLQUFULEdBQWlCLENBQWpCLEdBQXFCTixVQUFVLENBQUNLLElBQUQsRUFBT0MsS0FBUCxDQUFWLEdBQTBCLENBQXZEO0FBQUEsVUFDSUUsRUFBRSxHQUFHMWxCLENBQUMsR0FBR3VsQixJQUFJLENBQUM5OEIsQ0FEbEI7QUFBQSxVQUVJazlCLEVBQUUsR0FBR3RMLEVBQUUsSUFBSW1MLEtBQUssQ0FBQy84QixDQUFOLEdBQVV1WCxDQUFWLEdBQWMwbEIsRUFBbEIsQ0FGWDtBQUFBLFVBR0lFLEVBQUUsR0FBR3RMLEVBQUUsSUFBSW1MLE1BQU0sQ0FBQy9DLEtBQVAsSUFBZ0IsQ0FBcEIsQ0FIWDtBQUlBcnFCLE1BQUFBLElBQUksQ0FBQ3lvQixVQUFMLENBQWdCLFVBQVM1NEIsSUFBVCxFQUFlO0FBQzdCQSxRQUFBQSxJQUFJLENBQUNPLENBQUwsR0FBUyxDQUFDUCxJQUFJLENBQUNPLENBQUwsR0FBU2k5QixFQUFWLElBQWdCQyxFQUF6QjtBQUNBejlCLFFBQUFBLElBQUksQ0FBQ3dtQixDQUFMLEdBQVN4bUIsSUFBSSxDQUFDdzZCLEtBQUwsR0FBYWtELEVBQXRCO0FBQ0QsT0FIRDtBQUlEO0FBRUQsV0FBT3Z0QixJQUFQO0FBQ0QsR0F0Q3VCLENBd0N4QjtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0EsV0FBUytzQixTQUFULENBQW1CajFCLENBQW5CLEVBQXNCO0FBQ3BCLFFBQUl6RyxRQUFRLEdBQUd5RyxDQUFDLENBQUN6RyxRQUFqQjtBQUFBLFFBQ0ltOEIsUUFBUSxHQUFHMTFCLENBQUMsQ0FBQzdGLE1BQUYsQ0FBU1osUUFEeEI7QUFBQSxRQUVJc3NCLENBQUMsR0FBRzdsQixDQUFDLENBQUMvSCxDQUFGLEdBQU15OUIsUUFBUSxDQUFDMTFCLENBQUMsQ0FBQy9ILENBQUYsR0FBTSxDQUFQLENBQWQsR0FBMEIsSUFGbEM7O0FBR0EsUUFBSXNCLFFBQUosRUFBYztBQUNaaTdCLE1BQUFBLGFBQWEsQ0FBQ3gwQixDQUFELENBQWI7QUFDQSxVQUFJMjFCLFFBQVEsR0FBRyxDQUFDcDhCLFFBQVEsQ0FBQyxDQUFELENBQVIsQ0FBWWc3QixDQUFaLEdBQWdCaDdCLFFBQVEsQ0FBQ0EsUUFBUSxDQUFDL0IsTUFBVCxHQUFrQixDQUFuQixDQUFSLENBQThCKzhCLENBQS9DLElBQW9ELENBQW5FOztBQUNBLFVBQUkxTyxDQUFKLEVBQU87QUFDTDdsQixRQUFBQSxDQUFDLENBQUN1MEIsQ0FBRixHQUFNMU8sQ0FBQyxDQUFDME8sQ0FBRixHQUFNUSxVQUFVLENBQUMvMEIsQ0FBQyxDQUFDZ0osQ0FBSCxFQUFNNmMsQ0FBQyxDQUFDN2MsQ0FBUixDQUF0QjtBQUNBaEosUUFBQUEsQ0FBQyxDQUFDekksQ0FBRixHQUFNeUksQ0FBQyxDQUFDdTBCLENBQUYsR0FBTW9CLFFBQVo7QUFDRCxPQUhELE1BR087QUFDTDMxQixRQUFBQSxDQUFDLENBQUN1MEIsQ0FBRixHQUFNb0IsUUFBTjtBQUNEO0FBQ0YsS0FURCxNQVNPLElBQUk5UCxDQUFKLEVBQU87QUFDWjdsQixNQUFBQSxDQUFDLENBQUN1MEIsQ0FBRixHQUFNMU8sQ0FBQyxDQUFDME8sQ0FBRixHQUFNUSxVQUFVLENBQUMvMEIsQ0FBQyxDQUFDZ0osQ0FBSCxFQUFNNmMsQ0FBQyxDQUFDN2MsQ0FBUixDQUF0QjtBQUNEOztBQUNEaEosSUFBQUEsQ0FBQyxDQUFDN0YsTUFBRixDQUFTeTZCLENBQVQsR0FBYWdCLFNBQVMsQ0FBQzUxQixDQUFELEVBQUk2bEIsQ0FBSixFQUFPN2xCLENBQUMsQ0FBQzdGLE1BQUYsQ0FBU3k2QixDQUFULElBQWNjLFFBQVEsQ0FBQyxDQUFELENBQTdCLENBQXRCO0FBQ0QsR0E3RHVCLENBK0R4Qjs7O0FBQ0EsV0FBU1IsVUFBVCxDQUFvQmwxQixDQUFwQixFQUF1QjtBQUNyQkEsSUFBQUEsQ0FBQyxDQUFDZ0osQ0FBRixDQUFJMVEsQ0FBSixHQUFRMEgsQ0FBQyxDQUFDdTBCLENBQUYsR0FBTXYwQixDQUFDLENBQUM3RixNQUFGLENBQVM1QyxDQUF2QjtBQUNBeUksSUFBQUEsQ0FBQyxDQUFDekksQ0FBRixJQUFPeUksQ0FBQyxDQUFDN0YsTUFBRixDQUFTNUMsQ0FBaEI7QUFDRCxHQW5FdUIsQ0FxRXhCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLFdBQVNxK0IsU0FBVCxDQUFtQjUxQixDQUFuQixFQUFzQjZsQixDQUF0QixFQUF5QitLLFFBQXpCLEVBQW1DO0FBQ2pDLFFBQUkvSyxDQUFKLEVBQU87QUFDTCxVQUFJZ1EsR0FBRyxHQUFHNzFCLENBQVY7QUFBQSxVQUNJODFCLEdBQUcsR0FBRzkxQixDQURWO0FBQUEsVUFFSTAwQixHQUFHLEdBQUc3TyxDQUZWO0FBQUEsVUFHSWtRLEdBQUcsR0FBR0YsR0FBRyxDQUFDMTdCLE1BQUosQ0FBV1osUUFBWCxDQUFvQixDQUFwQixDQUhWO0FBQUEsVUFJSXk4QixHQUFHLEdBQUdILEdBQUcsQ0FBQ3QrQixDQUpkO0FBQUEsVUFLSTArQixHQUFHLEdBQUdILEdBQUcsQ0FBQ3YrQixDQUxkO0FBQUEsVUFNSTIrQixHQUFHLEdBQUd4QixHQUFHLENBQUNuOUIsQ0FOZDtBQUFBLFVBT0k0K0IsR0FBRyxHQUFHSixHQUFHLENBQUN4K0IsQ0FQZDtBQUFBLFVBUUk4OEIsS0FSSjs7QUFTQSxhQUFPSyxHQUFHLEdBQUdULFNBQVMsQ0FBQ1MsR0FBRCxDQUFmLEVBQXNCbUIsR0FBRyxHQUFHN0IsUUFBUSxDQUFDNkIsR0FBRCxDQUFwQyxFQUEyQ25CLEdBQUcsSUFBSW1CLEdBQXpELEVBQThEO0FBQzVERSxRQUFBQSxHQUFHLEdBQUcvQixRQUFRLENBQUMrQixHQUFELENBQWQ7QUFDQUQsUUFBQUEsR0FBRyxHQUFHN0IsU0FBUyxDQUFDNkIsR0FBRCxDQUFmO0FBQ0FBLFFBQUFBLEdBQUcsQ0FBQzkzQixDQUFKLEdBQVFnQyxDQUFSO0FBQ0FxMEIsUUFBQUEsS0FBSyxHQUFHSyxHQUFHLENBQUNILENBQUosR0FBUTJCLEdBQVIsR0FBY0wsR0FBRyxDQUFDdEIsQ0FBbEIsR0FBc0J5QixHQUF0QixHQUE0QmpCLFVBQVUsQ0FBQ0wsR0FBRyxDQUFDMXJCLENBQUwsRUFBUTZzQixHQUFHLENBQUM3c0IsQ0FBWixDQUE5Qzs7QUFDQSxZQUFJcXJCLEtBQUssR0FBRyxDQUFaLEVBQWU7QUFDYkgsVUFBQUEsV0FBVyxDQUFDTyxZQUFZLENBQUNDLEdBQUQsRUFBTTEwQixDQUFOLEVBQVM0d0IsUUFBVCxDQUFiLEVBQWlDNXdCLENBQWpDLEVBQW9DcTBCLEtBQXBDLENBQVg7QUFDQTJCLFVBQUFBLEdBQUcsSUFBSTNCLEtBQVA7QUFDQTRCLFVBQUFBLEdBQUcsSUFBSTVCLEtBQVA7QUFDRDs7QUFDRDZCLFFBQUFBLEdBQUcsSUFBSXhCLEdBQUcsQ0FBQ245QixDQUFYO0FBQ0F5K0IsUUFBQUEsR0FBRyxJQUFJSCxHQUFHLENBQUN0K0IsQ0FBWDtBQUNBNCtCLFFBQUFBLEdBQUcsSUFBSUosR0FBRyxDQUFDeCtCLENBQVg7QUFDQTArQixRQUFBQSxHQUFHLElBQUlILEdBQUcsQ0FBQ3YrQixDQUFYO0FBQ0Q7O0FBQ0QsVUFBSW05QixHQUFHLElBQUksQ0FBQ1QsU0FBUyxDQUFDNkIsR0FBRCxDQUFyQixFQUE0QjtBQUMxQkEsUUFBQUEsR0FBRyxDQUFDcHhCLENBQUosR0FBUWd3QixHQUFSO0FBQ0FvQixRQUFBQSxHQUFHLENBQUN2K0IsQ0FBSixJQUFTMitCLEdBQUcsR0FBR0QsR0FBZjtBQUNEOztBQUNELFVBQUlKLEdBQUcsSUFBSSxDQUFDN0IsUUFBUSxDQUFDK0IsR0FBRCxDQUFwQixFQUEyQjtBQUN6QkEsUUFBQUEsR0FBRyxDQUFDcnhCLENBQUosR0FBUW14QixHQUFSO0FBQ0FFLFFBQUFBLEdBQUcsQ0FBQ3grQixDQUFKLElBQVN5K0IsR0FBRyxHQUFHRyxHQUFmO0FBQ0F2RixRQUFBQSxRQUFRLEdBQUc1d0IsQ0FBWDtBQUNEO0FBQ0Y7O0FBQ0QsV0FBTzR3QixRQUFQO0FBQ0Q7O0FBRUQsV0FBU3VFLFFBQVQsQ0FBa0JwOUIsSUFBbEIsRUFBd0I7QUFDdEJBLElBQUFBLElBQUksQ0FBQ08sQ0FBTCxJQUFVNHhCLEVBQVY7QUFDQW55QixJQUFBQSxJQUFJLENBQUN3bUIsQ0FBTCxHQUFTeG1CLElBQUksQ0FBQ3c2QixLQUFMLEdBQWFwSSxFQUF0QjtBQUNEOztBQUVEMkssRUFBQUEsSUFBSSxDQUFDQyxVQUFMLEdBQWtCLFVBQVN6OEIsQ0FBVCxFQUFZO0FBQzVCLFdBQU9RLFNBQVMsQ0FBQ3RCLE1BQVYsSUFBb0J1OUIsVUFBVSxHQUFHejhCLENBQWIsRUFBZ0J3OEIsSUFBcEMsSUFBNENDLFVBQW5EO0FBQ0QsR0FGRDs7QUFJQUQsRUFBQUEsSUFBSSxDQUFDdjJCLElBQUwsR0FBWSxVQUFTakcsQ0FBVCxFQUFZO0FBQ3RCLFdBQU9RLFNBQVMsQ0FBQ3RCLE1BQVYsSUFBb0J3OUIsUUFBUSxHQUFHLEtBQVgsRUFBa0I5SyxFQUFFLEdBQUcsQ0FBQzV4QixDQUFDLENBQUMsQ0FBRCxDQUF6QixFQUE4QjZ4QixFQUFFLEdBQUcsQ0FBQzd4QixDQUFDLENBQUMsQ0FBRCxDQUFyQyxFQUEwQ3c4QixJQUE5RCxJQUF1RUUsUUFBUSxHQUFHLElBQUgsR0FBVSxDQUFDOUssRUFBRCxFQUFLQyxFQUFMLENBQWhHO0FBQ0QsR0FGRDs7QUFJQTJLLEVBQUFBLElBQUksQ0FBQ0UsUUFBTCxHQUFnQixVQUFTMThCLENBQVQsRUFBWTtBQUMxQixXQUFPUSxTQUFTLENBQUN0QixNQUFWLElBQW9CdzlCLFFBQVEsR0FBRyxJQUFYLEVBQWlCOUssRUFBRSxHQUFHLENBQUM1eEIsQ0FBQyxDQUFDLENBQUQsQ0FBeEIsRUFBNkI2eEIsRUFBRSxHQUFHLENBQUM3eEIsQ0FBQyxDQUFDLENBQUQsQ0FBcEMsRUFBeUN3OEIsSUFBN0QsSUFBc0VFLFFBQVEsR0FBRyxDQUFDOUssRUFBRCxFQUFLQyxFQUFMLENBQUgsR0FBYyxJQUFuRztBQUNELEdBRkQ7O0FBSUEsU0FBTzJLLElBQVA7QUFDRCxDOztBQzVPRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNiQSxJQUFJa0MsR0FBRyxHQUFHMTVCLElBQUksQ0FBQ2tSLElBQUwsQ0FBVSxFQUFWLENBQVY7QUFBQSxJQUNJeW9CLEVBQUUsR0FBRzM1QixJQUFJLENBQUNrUixJQUFMLENBQVUsRUFBVixDQURUO0FBQUEsSUFFSTBvQixFQUFFLEdBQUc1NUIsSUFBSSxDQUFDa1IsSUFBTCxDQUFVLENBQVYsQ0FGVDtBQUllLFNBQVMyb0IsS0FBVCxDQUFlenBCLEtBQWYsRUFBc0JwQyxJQUF0QixFQUE0QmtsQixLQUE1QixFQUFtQztBQUNoRCxNQUFJWSxPQUFKO0FBQUEsTUFDSW41QixDQUFDLEdBQUcsQ0FBQyxDQURUO0FBQUEsTUFFSUosQ0FGSjtBQUFBLE1BR0lzL0IsS0FISjtBQUFBLE1BSUlDLElBSko7QUFNQTlyQixFQUFBQSxJQUFJLEdBQUcsQ0FBQ0EsSUFBUixFQUFjb0MsS0FBSyxHQUFHLENBQUNBLEtBQXZCLEVBQThCOGlCLEtBQUssR0FBRyxDQUFDQSxLQUF2QztBQUNBLE1BQUk5aUIsS0FBSyxLQUFLcEMsSUFBVixJQUFrQmtsQixLQUFLLEdBQUcsQ0FBOUIsRUFBaUMsT0FBTyxDQUFDOWlCLEtBQUQsQ0FBUDtBQUNqQyxNQUFJMGpCLE9BQU8sR0FBRzlsQixJQUFJLEdBQUdvQyxLQUFyQixFQUE0QjdWLENBQUMsR0FBRzZWLEtBQUosRUFBV0EsS0FBSyxHQUFHcEMsSUFBbkIsRUFBeUJBLElBQUksR0FBR3pULENBQWhDO0FBQzVCLE1BQUksQ0FBQ3UvQixJQUFJLEdBQUdDLGFBQWEsQ0FBQzNwQixLQUFELEVBQVFwQyxJQUFSLEVBQWNrbEIsS0FBZCxDQUFyQixNQUErQyxDQUEvQyxJQUFvRCxDQUFDOEcsUUFBUSxDQUFDRixJQUFELENBQWpFLEVBQXlFLE9BQU8sRUFBUDs7QUFFekUsTUFBSUEsSUFBSSxHQUFHLENBQVgsRUFBYztBQUNaLFFBQUlHLEVBQUUsR0FBR2o2QixJQUFJLENBQUNpZ0IsS0FBTCxDQUFXN1AsS0FBSyxHQUFHMHBCLElBQW5CLENBQVQ7QUFBQSxRQUFtQ0ksRUFBRSxHQUFHbDZCLElBQUksQ0FBQ2lnQixLQUFMLENBQVdqUyxJQUFJLEdBQUc4ckIsSUFBbEIsQ0FBeEM7QUFDQSxRQUFJRyxFQUFFLEdBQUdILElBQUwsR0FBWTFwQixLQUFoQixFQUF1QixFQUFFNnBCLEVBQUY7QUFDdkIsUUFBSUMsRUFBRSxHQUFHSixJQUFMLEdBQVk5ckIsSUFBaEIsRUFBc0IsRUFBRWtzQixFQUFGO0FBQ3RCTCxJQUFBQSxLQUFLLEdBQUcsSUFBSXovQixLQUFKLENBQVVHLENBQUMsR0FBRzIvQixFQUFFLEdBQUdELEVBQUwsR0FBVSxDQUF4QixDQUFSOztBQUNBLFdBQU8sRUFBRXQvQixDQUFGLEdBQU1KLENBQWIsRUFBZ0JzL0IsS0FBSyxDQUFDbC9CLENBQUQsQ0FBTCxHQUFXLENBQUNzL0IsRUFBRSxHQUFHdC9CLENBQU4sSUFBV20vQixJQUF0QjtBQUNqQixHQU5ELE1BTU87QUFDTEEsSUFBQUEsSUFBSSxHQUFHLENBQUNBLElBQVI7QUFDQSxRQUFJRyxFQUFFLEdBQUdqNkIsSUFBSSxDQUFDaWdCLEtBQUwsQ0FBVzdQLEtBQUssR0FBRzBwQixJQUFuQixDQUFUO0FBQUEsUUFBbUNJLEVBQUUsR0FBR2w2QixJQUFJLENBQUNpZ0IsS0FBTCxDQUFXalMsSUFBSSxHQUFHOHJCLElBQWxCLENBQXhDO0FBQ0EsUUFBSUcsRUFBRSxHQUFHSCxJQUFMLEdBQVkxcEIsS0FBaEIsRUFBdUIsRUFBRTZwQixFQUFGO0FBQ3ZCLFFBQUlDLEVBQUUsR0FBR0osSUFBTCxHQUFZOXJCLElBQWhCLEVBQXNCLEVBQUVrc0IsRUFBRjtBQUN0QkwsSUFBQUEsS0FBSyxHQUFHLElBQUl6L0IsS0FBSixDQUFVRyxDQUFDLEdBQUcyL0IsRUFBRSxHQUFHRCxFQUFMLEdBQVUsQ0FBeEIsQ0FBUjs7QUFDQSxXQUFPLEVBQUV0L0IsQ0FBRixHQUFNSixDQUFiLEVBQWdCcy9CLEtBQUssQ0FBQ2wvQixDQUFELENBQUwsR0FBVyxDQUFDcy9CLEVBQUUsR0FBR3QvQixDQUFOLElBQVdtL0IsSUFBdEI7QUFDakI7O0FBRUQsTUFBSWhHLE9BQUosRUFBYStGLEtBQUssQ0FBQy9GLE9BQU47QUFFYixTQUFPK0YsS0FBUDtBQUNEO0FBRU0sU0FBU0UsYUFBVCxDQUF1QjNwQixLQUF2QixFQUE4QnBDLElBQTlCLEVBQW9Da2xCLEtBQXBDLEVBQTJDO0FBQ2hELE1BQUk0RyxJQUFJLEdBQUcsQ0FBQzlyQixJQUFJLEdBQUdvQyxLQUFSLElBQWlCcFEsSUFBSSxDQUFDZ2dCLEdBQUwsQ0FBUyxDQUFULEVBQVlrVCxLQUFaLENBQTVCO0FBQUEsTUFDSWlILEtBQUssR0FBR242QixJQUFJLENBQUM4Z0IsS0FBTCxDQUFXOWdCLElBQUksQ0FBQ282QixHQUFMLENBQVNOLElBQVQsSUFBaUI5NUIsSUFBSSxDQUFDcTZCLElBQWpDLENBRFo7QUFBQSxNQUVJQyxLQUFLLEdBQUdSLElBQUksR0FBRzk1QixJQUFJLENBQUM0ZixHQUFMLENBQVMsRUFBVCxFQUFhdWEsS0FBYixDQUZuQjtBQUdBLFNBQU9BLEtBQUssSUFBSSxDQUFULEdBQ0QsQ0FBQ0csS0FBSyxJQUFJWixHQUFULEdBQWUsRUFBZixHQUFvQlksS0FBSyxJQUFJWCxFQUFULEdBQWMsQ0FBZCxHQUFrQlcsS0FBSyxJQUFJVixFQUFULEdBQWMsQ0FBZCxHQUFrQixDQUF6RCxJQUE4RDU1QixJQUFJLENBQUM0ZixHQUFMLENBQVMsRUFBVCxFQUFhdWEsS0FBYixDQUQ3RCxHQUVELENBQUNuNkIsSUFBSSxDQUFDNGYsR0FBTCxDQUFTLEVBQVQsRUFBYSxDQUFDdWEsS0FBZCxDQUFELElBQXlCRyxLQUFLLElBQUlaLEdBQVQsR0FBZSxFQUFmLEdBQW9CWSxLQUFLLElBQUlYLEVBQVQsR0FBYyxDQUFkLEdBQWtCVyxLQUFLLElBQUlWLEVBQVQsR0FBYyxDQUFkLEdBQWtCLENBQWpGLENBRk47QUFHRDtBQUVNLFNBQVNXLFFBQVQsQ0FBa0JucUIsS0FBbEIsRUFBeUJwQyxJQUF6QixFQUErQmtsQixLQUEvQixFQUFzQztBQUMzQyxNQUFJc0gsS0FBSyxHQUFHeDZCLElBQUksQ0FBQzJuQixHQUFMLENBQVMzWixJQUFJLEdBQUdvQyxLQUFoQixJQUF5QnBRLElBQUksQ0FBQ2dnQixHQUFMLENBQVMsQ0FBVCxFQUFZa1QsS0FBWixDQUFyQztBQUFBLE1BQ0l1SCxLQUFLLEdBQUd6NkIsSUFBSSxDQUFDNGYsR0FBTCxDQUFTLEVBQVQsRUFBYTVmLElBQUksQ0FBQzhnQixLQUFMLENBQVc5Z0IsSUFBSSxDQUFDbzZCLEdBQUwsQ0FBU0ksS0FBVCxJQUFrQng2QixJQUFJLENBQUNxNkIsSUFBbEMsQ0FBYixDQURaO0FBQUEsTUFFSUMsS0FBSyxHQUFHRSxLQUFLLEdBQUdDLEtBRnBCO0FBR0EsTUFBSUgsS0FBSyxJQUFJWixHQUFiLEVBQWtCZSxLQUFLLElBQUksRUFBVCxDQUFsQixLQUNLLElBQUlILEtBQUssSUFBSVgsRUFBYixFQUFpQmMsS0FBSyxJQUFJLENBQVQsQ0FBakIsS0FDQSxJQUFJSCxLQUFLLElBQUlWLEVBQWIsRUFBaUJhLEtBQUssSUFBSSxDQUFUO0FBQ3RCLFNBQU96c0IsSUFBSSxHQUFHb0MsS0FBUCxHQUFlLENBQUNxcUIsS0FBaEIsR0FBd0JBLEtBQS9CO0FBQ0QsQzs7QUNyRGMsU0FBU2o2QixtQkFBVCxDQUFtQkUsQ0FBbkIsRUFBc0JDLENBQXRCLEVBQXlCO0FBQ3RDLFNBQU9ELENBQUMsSUFBSSxJQUFMLElBQWFDLENBQUMsSUFBSSxJQUFsQixHQUF5QkksR0FBekIsR0FBK0JMLENBQUMsR0FBR0MsQ0FBSixHQUFRLENBQUMsQ0FBVCxHQUFhRCxDQUFDLEdBQUdDLENBQUosR0FBUSxDQUFSLEdBQVlELENBQUMsSUFBSUMsQ0FBTCxHQUFTLENBQVQsR0FBYUksR0FBNUU7QUFDRCxDOztBQ0ZEO0FBRWUsU0FBUzI1QixRQUFULENBQWtCdHRCLENBQWxCLEVBQXFCO0FBQ2xDLE1BQUl1dEIsS0FBSyxHQUFHdnRCLENBQVo7QUFDQSxNQUFJd3RCLFFBQVEsR0FBR3h0QixDQUFmO0FBQ0EsTUFBSXl0QixRQUFRLEdBQUd6dEIsQ0FBZjs7QUFFQSxNQUFJQSxDQUFDLENBQUNsVCxNQUFGLEtBQWEsQ0FBakIsRUFBb0I7QUFDbEJ5Z0MsSUFBQUEsS0FBSyxHQUFHLENBQUMxcEIsQ0FBRCxFQUFJalcsQ0FBSixLQUFVb1MsQ0FBQyxDQUFDNkQsQ0FBRCxDQUFELEdBQU9qVyxDQUF6Qjs7QUFDQTQvQixJQUFBQSxRQUFRLEdBQUdwNkIsbUJBQVg7O0FBQ0FxNkIsSUFBQUEsUUFBUSxHQUFHLENBQUM1cEIsQ0FBRCxFQUFJalcsQ0FBSixLQUFVd0YsbUJBQVMsQ0FBQzRNLENBQUMsQ0FBQzZELENBQUQsQ0FBRixFQUFPalcsQ0FBUCxDQUE5QjtBQUNEOztBQUVELFdBQVM4OEIsSUFBVCxDQUFjcDNCLENBQWQsRUFBaUIxRixDQUFqQixFQUFvQjgvQixFQUFFLEdBQUcsQ0FBekIsRUFBNEJDLEVBQUUsR0FBR3I2QixDQUFDLENBQUN4RyxNQUFuQyxFQUEyQztBQUN6QyxRQUFJNGdDLEVBQUUsR0FBR0MsRUFBVCxFQUFhO0FBQ1gsVUFBSUgsUUFBUSxDQUFDNS9CLENBQUQsRUFBSUEsQ0FBSixDQUFSLEtBQW1CLENBQXZCLEVBQTBCLE9BQU8rL0IsRUFBUDs7QUFDMUIsU0FBRztBQUNELGNBQU1DLEdBQUcsR0FBSUYsRUFBRSxHQUFHQyxFQUFOLEtBQWMsQ0FBMUI7QUFDQSxZQUFJRixRQUFRLENBQUNuNkIsQ0FBQyxDQUFDczZCLEdBQUQsQ0FBRixFQUFTaGdDLENBQVQsQ0FBUixHQUFzQixDQUExQixFQUE2QjgvQixFQUFFLEdBQUdFLEdBQUcsR0FBRyxDQUFYLENBQTdCLEtBQ0tELEVBQUUsR0FBR0MsR0FBTDtBQUNOLE9BSkQsUUFJU0YsRUFBRSxHQUFHQyxFQUpkO0FBS0Q7O0FBQ0QsV0FBT0QsRUFBUDtBQUNEOztBQUVELFdBQVMvQyxLQUFULENBQWVyM0IsQ0FBZixFQUFrQjFGLENBQWxCLEVBQXFCOC9CLEVBQUUsR0FBRyxDQUExQixFQUE2QkMsRUFBRSxHQUFHcjZCLENBQUMsQ0FBQ3hHLE1BQXBDLEVBQTRDO0FBQzFDLFFBQUk0Z0MsRUFBRSxHQUFHQyxFQUFULEVBQWE7QUFDWCxVQUFJSCxRQUFRLENBQUM1L0IsQ0FBRCxFQUFJQSxDQUFKLENBQVIsS0FBbUIsQ0FBdkIsRUFBMEIsT0FBTysvQixFQUFQOztBQUMxQixTQUFHO0FBQ0QsY0FBTUMsR0FBRyxHQUFJRixFQUFFLEdBQUdDLEVBQU4sS0FBYyxDQUExQjtBQUNBLFlBQUlGLFFBQVEsQ0FBQ242QixDQUFDLENBQUNzNkIsR0FBRCxDQUFGLEVBQVNoZ0MsQ0FBVCxDQUFSLElBQXVCLENBQTNCLEVBQThCOC9CLEVBQUUsR0FBR0UsR0FBRyxHQUFHLENBQVgsQ0FBOUIsS0FDS0QsRUFBRSxHQUFHQyxHQUFMO0FBQ04sT0FKRCxRQUlTRixFQUFFLEdBQUdDLEVBSmQ7QUFLRDs7QUFDRCxXQUFPRCxFQUFQO0FBQ0Q7O0FBRUQsV0FBU0csTUFBVCxDQUFnQnY2QixDQUFoQixFQUFtQjFGLENBQW5CLEVBQXNCOC9CLEVBQUUsR0FBRyxDQUEzQixFQUE4QkMsRUFBRSxHQUFHcjZCLENBQUMsQ0FBQ3hHLE1BQXJDLEVBQTZDO0FBQzNDLFVBQU1TLENBQUMsR0FBR205QixJQUFJLENBQUNwM0IsQ0FBRCxFQUFJMUYsQ0FBSixFQUFPOC9CLEVBQVAsRUFBV0MsRUFBRSxHQUFHLENBQWhCLENBQWQ7QUFDQSxXQUFPcGdDLENBQUMsR0FBR21nQyxFQUFKLElBQVVILEtBQUssQ0FBQ2o2QixDQUFDLENBQUMvRixDQUFDLEdBQUcsQ0FBTCxDQUFGLEVBQVdLLENBQVgsQ0FBTCxHQUFxQixDQUFDMi9CLEtBQUssQ0FBQ2o2QixDQUFDLENBQUMvRixDQUFELENBQUYsRUFBT0ssQ0FBUCxDQUFyQyxHQUFpREwsQ0FBQyxHQUFHLENBQXJELEdBQXlEQSxDQUFoRTtBQUNEOztBQUVELFNBQU87QUFBQ205QixJQUFBQSxJQUFEO0FBQU9tRCxJQUFBQSxNQUFQO0FBQWVsRCxJQUFBQTtBQUFmLEdBQVA7QUFDRCxDOztBQzNDYyxTQUFTL2xCLGFBQVQsQ0FBZ0JoWCxDQUFoQixFQUFtQjtBQUNoQyxTQUFPQSxDQUFDLEtBQUssSUFBTixHQUFhK0YsR0FBYixHQUFtQixDQUFDL0YsQ0FBM0I7QUFDRDtBQUVNLFVBQVVrZ0MsT0FBVixDQUFrQnJhLE1BQWxCLEVBQTBCc2EsT0FBMUIsRUFBbUM7QUFDeEMsTUFBSUEsT0FBTyxLQUFLL3NCLFNBQWhCLEVBQTJCO0FBQ3pCLFNBQUssSUFBSTNQLEtBQVQsSUFBa0JvaUIsTUFBbEIsRUFBMEI7QUFDeEIsVUFBSXBpQixLQUFLLElBQUksSUFBVCxJQUFpQixDQUFDQSxLQUFLLEdBQUcsQ0FBQ0EsS0FBVixLQUFvQkEsS0FBekMsRUFBZ0Q7QUFDOUMsY0FBTUEsS0FBTjtBQUNEO0FBQ0Y7QUFDRixHQU5ELE1BTU87QUFDTCxRQUFJZ1IsS0FBSyxHQUFHLENBQUMsQ0FBYjs7QUFDQSxTQUFLLElBQUloUixLQUFULElBQWtCb2lCLE1BQWxCLEVBQTBCO0FBQ3hCLFVBQUksQ0FBQ3BpQixLQUFLLEdBQUcwOEIsT0FBTyxDQUFDMThCLEtBQUQsRUFBUSxFQUFFZ1IsS0FBVixFQUFpQm9SLE1BQWpCLENBQWhCLEtBQTZDLElBQTdDLElBQXFELENBQUNwaUIsS0FBSyxHQUFHLENBQUNBLEtBQVYsS0FBb0JBLEtBQTdFLEVBQW9GO0FBQ2xGLGNBQU1BLEtBQU47QUFDRDtBQUNGO0FBQ0Y7QUFDRixDOztBQ25CRDtBQUNBO0FBQ0E7QUFFQSxNQUFNMjhCLGVBQWUsR0FBR1YsUUFBUSxDQUFDbDZCLG1CQUFELENBQWhDO0FBQ08sTUFBTTY2QixXQUFXLEdBQUdELGVBQWUsQ0FBQ3JELEtBQXBDO0FBQ0EsTUFBTXVELFVBQVUsR0FBR0YsZUFBZSxDQUFDdEQsSUFBbkM7QUFDQSxNQUFNeUQsWUFBWSxHQUFHYixRQUFRLENBQUMxb0IsYUFBRCxDQUFSLENBQWlCaXBCLE1BQXRDO0FBQ1AsNkNBQWVJLFdBQWYsRTs7QUNSQTtBQUNBO0FBRUEsNkJBQWUsbUJBQVMzNkIsQ0FBVCxFQUFZQyxDQUFaLEVBQWU7QUFDNUIsU0FBTyxDQUFDODZCLGFBQWEsQ0FBQzk2QixDQUFELENBQWIsR0FBbUI2NkIsV0FBbkIsR0FBaUNFLFlBQWxDLEVBQWdEaDdCLENBQWhELEVBQW1EQyxDQUFuRCxDQUFQO0FBQ0Q7QUFFTSxTQUFTKzZCLFlBQVQsQ0FBc0JoN0IsQ0FBdEIsRUFBeUJDLENBQXpCLEVBQTRCO0FBQ2pDLE1BQUlnN0IsRUFBRSxHQUFHaDdCLENBQUMsR0FBR0EsQ0FBQyxDQUFDekcsTUFBTCxHQUFjLENBQXhCO0FBQUEsTUFDSTBoQyxFQUFFLEdBQUdsN0IsQ0FBQyxHQUFHVixJQUFJLENBQUNDLEdBQUwsQ0FBUzA3QixFQUFULEVBQWFqN0IsQ0FBQyxDQUFDeEcsTUFBZixDQUFILEdBQTRCLENBRHRDO0FBQUEsTUFFSWMsQ0FBQyxHQUFHLElBQUlaLEtBQUosQ0FBVXdoQyxFQUFWLENBRlI7QUFBQSxNQUdJenZCLENBQUMsR0FBRyxJQUFJL1IsS0FBSixDQUFVdWhDLEVBQVYsQ0FIUjtBQUFBLE1BSUloaEMsQ0FKSjs7QUFNQSxPQUFLQSxDQUFDLEdBQUcsQ0FBVCxFQUFZQSxDQUFDLEdBQUdpaEMsRUFBaEIsRUFBb0IsRUFBRWpoQyxDQUF0QixFQUF5QkssQ0FBQyxDQUFDTCxDQUFELENBQUQsR0FBTzhELEtBQUssQ0FBQ2lDLENBQUMsQ0FBQy9GLENBQUQsQ0FBRixFQUFPZ0csQ0FBQyxDQUFDaEcsQ0FBRCxDQUFSLENBQVo7O0FBQ3pCLFNBQU9BLENBQUMsR0FBR2doQyxFQUFYLEVBQWUsRUFBRWhoQyxDQUFqQixFQUFvQndSLENBQUMsQ0FBQ3hSLENBQUQsQ0FBRCxHQUFPZ0csQ0FBQyxDQUFDaEcsQ0FBRCxDQUFSOztBQUVwQixTQUFPLFVBQVN5TSxDQUFULEVBQVk7QUFDakIsU0FBS3pNLENBQUMsR0FBRyxDQUFULEVBQVlBLENBQUMsR0FBR2loQyxFQUFoQixFQUFvQixFQUFFamhDLENBQXRCLEVBQXlCd1IsQ0FBQyxDQUFDeFIsQ0FBRCxDQUFELEdBQU9LLENBQUMsQ0FBQ0wsQ0FBRCxDQUFELENBQUt5TSxDQUFMLENBQVA7O0FBQ3pCLFdBQU8rRSxDQUFQO0FBQ0QsR0FIRDtBQUlELEM7O0FDckJELDZCQUFlLGNBQVN6TCxDQUFULEVBQVlDLENBQVosRUFBZTtBQUM1QixNQUFJc1EsQ0FBQyxHQUFHLElBQUloRSxJQUFKLEVBQVI7QUFDQSxTQUFPdk0sQ0FBQyxHQUFHLENBQUNBLENBQUwsRUFBUUMsQ0FBQyxHQUFHLENBQUNBLENBQWIsRUFBZ0IsVUFBU3lHLENBQVQsRUFBWTtBQUNqQyxXQUFPNkosQ0FBQyxDQUFDNHFCLE9BQUYsQ0FBVW43QixDQUFDLElBQUksSUFBSTBHLENBQVIsQ0FBRCxHQUFjekcsQ0FBQyxHQUFHeUcsQ0FBNUIsR0FBZ0M2SixDQUF2QztBQUNELEdBRkQ7QUFHRCxDOztBQ0xEO0FBRUEsNkJBQWUsZ0JBQVN2USxDQUFULEVBQVlDLENBQVosRUFBZTtBQUM1QixNQUFJaEcsQ0FBQyxHQUFHLEVBQVI7QUFBQSxNQUNJd1IsQ0FBQyxHQUFHLEVBRFI7QUFBQSxNQUVJd1QsQ0FGSjtBQUlBLE1BQUlqZixDQUFDLEtBQUssSUFBTixJQUFjLE9BQU9BLENBQVAsS0FBYSxRQUEvQixFQUF5Q0EsQ0FBQyxHQUFHLEVBQUo7QUFDekMsTUFBSUMsQ0FBQyxLQUFLLElBQU4sSUFBYyxPQUFPQSxDQUFQLEtBQWEsUUFBL0IsRUFBeUNBLENBQUMsR0FBRyxFQUFKOztBQUV6QyxPQUFLZ2YsQ0FBTCxJQUFVaGYsQ0FBVixFQUFhO0FBQ1gsUUFBSWdmLENBQUMsSUFBSWpmLENBQVQsRUFBWTtBQUNWL0YsTUFBQUEsQ0FBQyxDQUFDZ2xCLENBQUQsQ0FBRCxHQUFPbGhCLEtBQUssQ0FBQ2lDLENBQUMsQ0FBQ2lmLENBQUQsQ0FBRixFQUFPaGYsQ0FBQyxDQUFDZ2YsQ0FBRCxDQUFSLENBQVo7QUFDRCxLQUZELE1BRU87QUFDTHhULE1BQUFBLENBQUMsQ0FBQ3dULENBQUQsQ0FBRCxHQUFPaGYsQ0FBQyxDQUFDZ2YsQ0FBRCxDQUFSO0FBQ0Q7QUFDRjs7QUFFRCxTQUFPLFVBQVN2WSxDQUFULEVBQVk7QUFDakIsU0FBS3VZLENBQUwsSUFBVWhsQixDQUFWLEVBQWF3UixDQUFDLENBQUN3VCxDQUFELENBQUQsR0FBT2hsQixDQUFDLENBQUNnbEIsQ0FBRCxDQUFELENBQUt2WSxDQUFMLENBQVA7O0FBQ2IsV0FBTytFLENBQVA7QUFDRCxHQUhEO0FBSUQsQzs7QUN0QkQsNkJBQWUseUJBQVN6TCxDQUFULEVBQVlDLENBQVosRUFBZTtBQUM1QixNQUFJLENBQUNBLENBQUwsRUFBUUEsQ0FBQyxHQUFHLEVBQUo7QUFDUixNQUFJcEcsQ0FBQyxHQUFHbUcsQ0FBQyxHQUFHVixJQUFJLENBQUNDLEdBQUwsQ0FBU1UsQ0FBQyxDQUFDekcsTUFBWCxFQUFtQndHLENBQUMsQ0FBQ3hHLE1BQXJCLENBQUgsR0FBa0MsQ0FBM0M7QUFBQSxNQUNJaVMsQ0FBQyxHQUFHeEwsQ0FBQyxDQUFDZ0IsS0FBRixFQURSO0FBQUEsTUFFSWhILENBRko7QUFHQSxTQUFPLFVBQVN5TSxDQUFULEVBQVk7QUFDakIsU0FBS3pNLENBQUMsR0FBRyxDQUFULEVBQVlBLENBQUMsR0FBR0osQ0FBaEIsRUFBbUIsRUFBRUksQ0FBckIsRUFBd0J3UixDQUFDLENBQUN4UixDQUFELENBQUQsR0FBTytGLENBQUMsQ0FBQy9GLENBQUQsQ0FBRCxJQUFRLElBQUl5TSxDQUFaLElBQWlCekcsQ0FBQyxDQUFDaEcsQ0FBRCxDQUFELEdBQU95TSxDQUEvQjs7QUFDeEIsV0FBTytFLENBQVA7QUFDRCxHQUhEO0FBSUQ7QUFFTSxTQUFTc3ZCLHlCQUFULENBQXVCemdDLENBQXZCLEVBQTBCO0FBQy9CLFNBQU84Z0MsV0FBVyxDQUFDQyxNQUFaLENBQW1CL2dDLENBQW5CLEtBQXlCLEVBQUVBLENBQUMsWUFBWWdoQyxRQUFmLENBQWhDO0FBQ0QsQzs7QUNiRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSw2QkFBZSxlQUFTdDdCLENBQVQsRUFBWUMsQ0FBWixFQUFlO0FBQzVCLE1BQUl5RyxDQUFDLEdBQUcsT0FBT3pHLENBQWY7QUFBQSxNQUFrQndMLENBQWxCO0FBQ0EsU0FBT3hMLENBQUMsSUFBSSxJQUFMLElBQWF5RyxDQUFDLEtBQUssU0FBbkIsR0FBK0I1SiwyQkFBUSxDQUFDbUQsQ0FBRCxDQUF2QyxHQUNELENBQUN5RyxDQUFDLEtBQUssUUFBTixHQUFpQjRLLE1BQWpCLEdBQ0Q1SyxDQUFDLEtBQUssUUFBTixHQUFrQixDQUFDK0UsQ0FBQyxHQUFHNlIsS0FBSyxDQUFDcmQsQ0FBRCxDQUFWLEtBQWtCQSxDQUFDLEdBQUd3TCxDQUFKLEVBQU9pUyxHQUF6QixJQUFnQ3JhLE1BQWxELEdBQ0FwRCxDQUFDLFlBQVlxZCxLQUFiLEdBQXFCSSxHQUFyQixHQUNBemQsQ0FBQyxZQUFZc00sSUFBYixHQUFvQmd2QixJQUFwQixHQUNBUix5QkFBYSxDQUFDOTZCLENBQUQsQ0FBYixHQUFtQjY2QixlQUFuQixHQUNBcGhDLEtBQUssQ0FBQ2EsT0FBTixDQUFjMEYsQ0FBZCxJQUFtQis2QixZQUFuQixHQUNBLE9BQU8vNkIsQ0FBQyxDQUFDdzdCLE9BQVQsS0FBcUIsVUFBckIsSUFBbUMsT0FBT3g3QixDQUFDLENBQUNpZSxRQUFULEtBQXNCLFVBQXpELElBQXVFbUIsS0FBSyxDQUFDcGYsQ0FBRCxDQUE1RSxHQUFrRnU3QixNQUFsRixHQUNBbHFCLE1BUEEsRUFPUXRSLENBUFIsRUFPV0MsQ0FQWCxDQUROO0FBU0QsQzs7QUNyQkQsNkJBQWUsZUFBU0QsQ0FBVCxFQUFZQyxDQUFaLEVBQWU7QUFDNUIsU0FBT0QsQ0FBQyxHQUFHLENBQUNBLENBQUwsRUFBUUMsQ0FBQyxHQUFHLENBQUNBLENBQWIsRUFBZ0IsVUFBU3lHLENBQVQsRUFBWTtBQUNqQyxXQUFPcEgsSUFBSSxDQUFDaWdCLEtBQUwsQ0FBV3ZmLENBQUMsSUFBSSxJQUFJMEcsQ0FBUixDQUFELEdBQWN6RyxDQUFDLEdBQUd5RyxDQUE3QixDQUFQO0FBQ0QsR0FGRDtBQUdELEM7O0FDSmMsU0FBU2cxQixTQUFULENBQW1CcGhDLENBQW5CLEVBQXNCO0FBQ25DLFNBQU8sWUFBVztBQUNoQixXQUFPQSxDQUFQO0FBQ0QsR0FGRDtBQUdELEM7O0FDSmMsU0FBU2dYLGlCQUFULENBQWdCaFgsQ0FBaEIsRUFBbUI7QUFDaEMsU0FBTyxDQUFDQSxDQUFSO0FBQ0QsQzs7QUNGRDtBQUNBO0FBQ0E7QUFDQTtBQUVBLElBQUl3aEMsSUFBSSxHQUFHLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FBWDtBQUVPLFNBQVM5ckIsbUJBQVQsQ0FBa0IxVixDQUFsQixFQUFxQjtBQUMxQixTQUFPQSxDQUFQO0FBQ0Q7O0FBRUQsU0FBU283QixvQkFBVCxDQUFtQjExQixDQUFuQixFQUFzQkMsQ0FBdEIsRUFBeUI7QUFDdkIsU0FBTyxDQUFDQSxDQUFDLElBQUtELENBQUMsR0FBRyxDQUFDQSxDQUFaLElBQ0QsVUFBUzFGLENBQVQsRUFBWTtBQUFFLFdBQU8sQ0FBQ0EsQ0FBQyxHQUFHMEYsQ0FBTCxJQUFVQyxDQUFqQjtBQUFxQixHQURsQyxHQUVEbkQsU0FBUSxDQUFDdWlCLEtBQUssQ0FBQ3BmLENBQUQsQ0FBTCxHQUFXSSxHQUFYLEdBQWlCLEdBQWxCLENBRmQ7QUFHRDs7QUFFRCxTQUFTMDdCLE9BQVQsQ0FBaUIvN0IsQ0FBakIsRUFBb0JDLENBQXBCLEVBQXVCO0FBQ3JCLE1BQUl5RyxDQUFKO0FBQ0EsTUFBSTFHLENBQUMsR0FBR0MsQ0FBUixFQUFXeUcsQ0FBQyxHQUFHMUcsQ0FBSixFQUFPQSxDQUFDLEdBQUdDLENBQVgsRUFBY0EsQ0FBQyxHQUFHeUcsQ0FBbEI7QUFDWCxTQUFPLFVBQVNwTSxDQUFULEVBQVk7QUFBRSxXQUFPZ0YsSUFBSSxDQUFDZ2dCLEdBQUwsQ0FBU3RmLENBQVQsRUFBWVYsSUFBSSxDQUFDQyxHQUFMLENBQVNVLENBQVQsRUFBWTNGLENBQVosQ0FBWixDQUFQO0FBQXFDLEdBQTFEO0FBQ0QsRUFFRDtBQUNBOzs7QUFDQSxTQUFTMGhDLEtBQVQsQ0FBZUMsTUFBZixFQUF1QkMsS0FBdkIsRUFBOEJqYSxXQUE5QixFQUEyQztBQUN6QyxNQUFJa2EsRUFBRSxHQUFHRixNQUFNLENBQUMsQ0FBRCxDQUFmO0FBQUEsTUFBb0JHLEVBQUUsR0FBR0gsTUFBTSxDQUFDLENBQUQsQ0FBL0I7QUFBQSxNQUFvQzFDLEVBQUUsR0FBRzJDLEtBQUssQ0FBQyxDQUFELENBQTlDO0FBQUEsTUFBbUQxQyxFQUFFLEdBQUcwQyxLQUFLLENBQUMsQ0FBRCxDQUE3RDtBQUNBLE1BQUlFLEVBQUUsR0FBR0QsRUFBVCxFQUFhQSxFQUFFLEdBQUd6RyxvQkFBUyxDQUFDMEcsRUFBRCxFQUFLRCxFQUFMLENBQWQsRUFBd0I1QyxFQUFFLEdBQUd0WCxXQUFXLENBQUN1WCxFQUFELEVBQUtELEVBQUwsQ0FBeEMsQ0FBYixLQUNLNEMsRUFBRSxHQUFHekcsb0JBQVMsQ0FBQ3lHLEVBQUQsRUFBS0MsRUFBTCxDQUFkLEVBQXdCN0MsRUFBRSxHQUFHdFgsV0FBVyxDQUFDc1gsRUFBRCxFQUFLQyxFQUFMLENBQXhDO0FBQ0wsU0FBTyxVQUFTbC9CLENBQVQsRUFBWTtBQUFFLFdBQU9pL0IsRUFBRSxDQUFDNEMsRUFBRSxDQUFDN2hDLENBQUQsQ0FBSCxDQUFUO0FBQW1CLEdBQXhDO0FBQ0Q7O0FBRUQsU0FBUytoQyxPQUFULENBQWlCSixNQUFqQixFQUF5QkMsS0FBekIsRUFBZ0NqYSxXQUFoQyxFQUE2QztBQUMzQyxNQUFJdG9CLENBQUMsR0FBRzJGLElBQUksQ0FBQ0MsR0FBTCxDQUFTMDhCLE1BQU0sQ0FBQ3ppQyxNQUFoQixFQUF3QjBpQyxLQUFLLENBQUMxaUMsTUFBOUIsSUFBd0MsQ0FBaEQ7QUFBQSxNQUNJK1csQ0FBQyxHQUFHLElBQUk3VyxLQUFKLENBQVVDLENBQVYsQ0FEUjtBQUFBLE1BRUlrbEIsQ0FBQyxHQUFHLElBQUlubEIsS0FBSixDQUFVQyxDQUFWLENBRlI7QUFBQSxNQUdJTSxDQUFDLEdBQUcsQ0FBQyxDQUhULENBRDJDLENBTTNDOztBQUNBLE1BQUlnaUMsTUFBTSxDQUFDdGlDLENBQUQsQ0FBTixHQUFZc2lDLE1BQU0sQ0FBQyxDQUFELENBQXRCLEVBQTJCO0FBQ3pCQSxJQUFBQSxNQUFNLEdBQUdBLE1BQU0sQ0FBQ2g3QixLQUFQLEdBQWVteUIsT0FBZixFQUFUO0FBQ0E4SSxJQUFBQSxLQUFLLEdBQUdBLEtBQUssQ0FBQ2o3QixLQUFOLEdBQWNteUIsT0FBZCxFQUFSO0FBQ0Q7O0FBRUQsU0FBTyxFQUFFbjVCLENBQUYsR0FBTU4sQ0FBYixFQUFnQjtBQUNkNFcsSUFBQUEsQ0FBQyxDQUFDdFcsQ0FBRCxDQUFELEdBQU95N0Isb0JBQVMsQ0FBQ3VHLE1BQU0sQ0FBQ2hpQyxDQUFELENBQVAsRUFBWWdpQyxNQUFNLENBQUNoaUMsQ0FBQyxHQUFHLENBQUwsQ0FBbEIsQ0FBaEI7QUFDQTRrQixJQUFBQSxDQUFDLENBQUM1a0IsQ0FBRCxDQUFELEdBQU9nb0IsV0FBVyxDQUFDaWEsS0FBSyxDQUFDamlDLENBQUQsQ0FBTixFQUFXaWlDLEtBQUssQ0FBQ2ppQyxDQUFDLEdBQUcsQ0FBTCxDQUFoQixDQUFsQjtBQUNEOztBQUVELFNBQU8sVUFBU0ssQ0FBVCxFQUFZO0FBQ2pCLFFBQUlMLENBQUMsR0FBRzBoQyxNQUFNLENBQUNNLE1BQUQsRUFBUzNoQyxDQUFULEVBQVksQ0FBWixFQUFlWCxDQUFmLENBQU4sR0FBMEIsQ0FBbEM7QUFDQSxXQUFPa2xCLENBQUMsQ0FBQzVrQixDQUFELENBQUQsQ0FBS3NXLENBQUMsQ0FBQ3RXLENBQUQsQ0FBRCxDQUFLSyxDQUFMLENBQUwsQ0FBUDtBQUNELEdBSEQ7QUFJRDs7QUFFTSxTQUFTZ1IsSUFBVCxDQUFjZ1csTUFBZCxFQUFzQjBKLE1BQXRCLEVBQThCO0FBQ25DLFNBQU9BLE1BQU0sQ0FDUmlSLE1BREUsQ0FDSzNhLE1BQU0sQ0FBQzJhLE1BQVAsRUFETCxFQUVGQyxLQUZFLENBRUk1YSxNQUFNLENBQUM0YSxLQUFQLEVBRkosRUFHRmphLFdBSEUsQ0FHVVgsTUFBTSxDQUFDVyxXQUFQLEVBSFYsRUFJRnFhLEtBSkUsQ0FJSWhiLE1BQU0sQ0FBQ2diLEtBQVAsRUFKSixFQUtGQyxPQUxFLENBS01qYixNQUFNLENBQUNpYixPQUFQLEVBTE4sQ0FBUDtBQU1EO0FBRU0sU0FBU0MsV0FBVCxHQUF1QjtBQUM1QixNQUFJUCxNQUFNLEdBQUdILElBQWI7QUFBQSxNQUNJSSxLQUFLLEdBQUdKLElBRFo7QUFBQSxNQUVJN1osV0FBVyxHQUFHMlosS0FGbEI7QUFBQSxNQUdJMXFCLFNBSEo7QUFBQSxNQUlJdXJCLFdBSko7QUFBQSxNQUtJRixPQUxKO0FBQUEsTUFNSUQsS0FBSyxHQUFHdHNCLG1CQU5aO0FBQUEsTUFPSTBzQixTQVBKO0FBQUEsTUFRSW5WLE1BUko7QUFBQSxNQVNJRCxLQVRKOztBQVdBLFdBQVNxVixPQUFULEdBQW1CO0FBQ2pCLFFBQUk5aUMsQ0FBQyxHQUFHeUYsSUFBSSxDQUFDQyxHQUFMLENBQVMwOEIsTUFBTSxDQUFDemlDLE1BQWhCLEVBQXdCMGlDLEtBQUssQ0FBQzFpQyxNQUE5QixDQUFSO0FBQ0EsUUFBSThpQyxLQUFLLEtBQUt0c0IsbUJBQWQsRUFBd0Jzc0IsS0FBSyxHQUFHUCxPQUFPLENBQUNFLE1BQU0sQ0FBQyxDQUFELENBQVAsRUFBWUEsTUFBTSxDQUFDcGlDLENBQUMsR0FBRyxDQUFMLENBQWxCLENBQWY7QUFDeEI2aUMsSUFBQUEsU0FBUyxHQUFHN2lDLENBQUMsR0FBRyxDQUFKLEdBQVF3aUMsT0FBUixHQUFrQkwsS0FBOUI7QUFDQXpVLElBQUFBLE1BQU0sR0FBR0QsS0FBSyxHQUFHLElBQWpCO0FBQ0EsV0FBT2xWLEtBQVA7QUFDRDs7QUFFRCxXQUFTQSxLQUFULENBQWU5WCxDQUFmLEVBQWtCO0FBQ2hCLFdBQU9BLENBQUMsSUFBSSxJQUFMLElBQWEra0IsS0FBSyxDQUFDL2tCLENBQUMsR0FBRyxDQUFDQSxDQUFOLENBQWxCLEdBQTZCaWlDLE9BQTdCLEdBQXVDLENBQUNoVixNQUFNLEtBQUtBLE1BQU0sR0FBR21WLFNBQVMsQ0FBQ1QsTUFBTSxDQUFDaGdDLEdBQVAsQ0FBV2lWLFNBQVgsQ0FBRCxFQUF3QmdyQixLQUF4QixFQUErQmphLFdBQS9CLENBQXZCLENBQVAsRUFBNEUvUSxTQUFTLENBQUNvckIsS0FBSyxDQUFDaGlDLENBQUQsQ0FBTixDQUFyRixDQUE5QztBQUNEOztBQUVEOFgsRUFBQUEsS0FBSyxDQUFDd3FCLE1BQU4sR0FBZSxVQUFTcmMsQ0FBVCxFQUFZO0FBQ3pCLFdBQU8rYixLQUFLLENBQUNHLFdBQVcsQ0FBQyxDQUFDblYsS0FBSyxLQUFLQSxLQUFLLEdBQUdvVixTQUFTLENBQUNSLEtBQUQsRUFBUUQsTUFBTSxDQUFDaGdDLEdBQVAsQ0FBV2lWLFNBQVgsQ0FBUixFQUErQjRRLE1BQS9CLENBQXRCLENBQU4sRUFBZ0Z2QixDQUFoRixDQUFELENBQVosQ0FBWjtBQUNELEdBRkQ7O0FBSUFuTyxFQUFBQSxLQUFLLENBQUM2cEIsTUFBTixHQUFlLFVBQVNqeEIsQ0FBVCxFQUFZO0FBQ3pCLFdBQU9sUSxTQUFTLENBQUN0QixNQUFWLElBQW9CeWlDLE1BQU0sR0FBR3ZpQyxLQUFLLENBQUNjLElBQU4sQ0FBV3dRLENBQVgsRUFBY3NHLGlCQUFkLENBQVQsRUFBZ0NxckIsT0FBTyxFQUEzRCxJQUFpRVYsTUFBTSxDQUFDaDdCLEtBQVAsRUFBeEU7QUFDRCxHQUZEOztBQUlBbVIsRUFBQUEsS0FBSyxDQUFDOHBCLEtBQU4sR0FBYyxVQUFTbHhCLENBQVQsRUFBWTtBQUN4QixXQUFPbFEsU0FBUyxDQUFDdEIsTUFBVixJQUFvQjBpQyxLQUFLLEdBQUd4aUMsS0FBSyxDQUFDYyxJQUFOLENBQVd3USxDQUFYLENBQVIsRUFBdUIyeEIsT0FBTyxFQUFsRCxJQUF3RFQsS0FBSyxDQUFDajdCLEtBQU4sRUFBL0Q7QUFDRCxHQUZEOztBQUlBbVIsRUFBQUEsS0FBSyxDQUFDeXFCLFVBQU4sR0FBbUIsVUFBUzd4QixDQUFULEVBQVk7QUFDN0IsV0FBT2t4QixLQUFLLEdBQUd4aUMsS0FBSyxDQUFDYyxJQUFOLENBQVd3USxDQUFYLENBQVIsRUFBdUJpWCxXQUFXLEdBQUc0WixLQUFyQyxFQUF1RGMsT0FBTyxFQUFyRTtBQUNELEdBRkQ7O0FBSUF2cUIsRUFBQUEsS0FBSyxDQUFDa3FCLEtBQU4sR0FBYyxVQUFTdHhCLENBQVQsRUFBWTtBQUN4QixXQUFPbFEsU0FBUyxDQUFDdEIsTUFBVixJQUFvQjhpQyxLQUFLLEdBQUd0eEIsQ0FBQyxHQUFHLElBQUgsR0FBVWdGLG1CQUFuQixFQUE2QjJzQixPQUFPLEVBQXhELElBQThETCxLQUFLLEtBQUt0c0IsbUJBQS9FO0FBQ0QsR0FGRDs7QUFJQW9DLEVBQUFBLEtBQUssQ0FBQzZQLFdBQU4sR0FBb0IsVUFBU2pYLENBQVQsRUFBWTtBQUM5QixXQUFPbFEsU0FBUyxDQUFDdEIsTUFBVixJQUFvQnlvQixXQUFXLEdBQUdqWCxDQUFkLEVBQWlCMnhCLE9BQU8sRUFBNUMsSUFBa0QxYSxXQUF6RDtBQUNELEdBRkQ7O0FBSUE3UCxFQUFBQSxLQUFLLENBQUNtcUIsT0FBTixHQUFnQixVQUFTdnhCLENBQVQsRUFBWTtBQUMxQixXQUFPbFEsU0FBUyxDQUFDdEIsTUFBVixJQUFvQitpQyxPQUFPLEdBQUd2eEIsQ0FBVixFQUFhb0gsS0FBakMsSUFBMENtcUIsT0FBakQ7QUFDRCxHQUZEOztBQUlBLFNBQU8sVUFBUzcxQixDQUFULEVBQVlvMkIsQ0FBWixFQUFlO0FBQ3BCNXJCLElBQUFBLFNBQVMsR0FBR3hLLENBQVosRUFBZSsxQixXQUFXLEdBQUdLLENBQTdCO0FBQ0EsV0FBT0gsT0FBTyxFQUFkO0FBQ0QsR0FIRDtBQUlEO0FBRWMsU0FBU0ksVUFBVCxHQUFzQjtBQUNuQyxTQUFPUCxXQUFXLEdBQUd4c0IsbUJBQUgsRUFBYUEsbUJBQWIsQ0FBbEI7QUFDRCxDOztBQzVITSxTQUFTZ3RCLFNBQVQsQ0FBbUJmLE1BQW5CLEVBQTJCQyxLQUEzQixFQUFrQztBQUN2QyxVQUFRcGhDLFNBQVMsQ0FBQ3RCLE1BQWxCO0FBQ0UsU0FBSyxDQUFMO0FBQVE7O0FBQ1IsU0FBSyxDQUFMO0FBQVEsV0FBSzBpQyxLQUFMLENBQVdELE1BQVg7QUFBb0I7O0FBQzVCO0FBQVMsV0FBS0MsS0FBTCxDQUFXQSxLQUFYLEVBQWtCRCxNQUFsQixDQUF5QkEsTUFBekI7QUFBa0M7QUFIN0M7O0FBS0EsU0FBTyxJQUFQO0FBQ0Q7QUFFTSxTQUFTZ0IscUJBQVQsQ0FBMEJoQixNQUExQixFQUFrQ2lCLFlBQWxDLEVBQWdEO0FBQ3JELFVBQVFwaUMsU0FBUyxDQUFDdEIsTUFBbEI7QUFDRSxTQUFLLENBQUw7QUFBUTs7QUFDUixTQUFLLENBQUw7QUFBUTtBQUNOLFlBQUksT0FBT3lpQyxNQUFQLEtBQWtCLFVBQXRCLEVBQWtDLEtBQUtpQixZQUFMLENBQWtCakIsTUFBbEIsRUFBbEMsS0FDSyxLQUFLQyxLQUFMLENBQVdELE1BQVg7QUFDTDtBQUNEOztBQUNEO0FBQVM7QUFDUCxhQUFLQSxNQUFMLENBQVlBLE1BQVo7QUFDQSxZQUFJLE9BQU9pQixZQUFQLEtBQXdCLFVBQTVCLEVBQXdDLEtBQUtBLFlBQUwsQ0FBa0JBLFlBQWxCLEVBQXhDLEtBQ0ssS0FBS2hCLEtBQUwsQ0FBV2dCLFlBQVg7QUFDTDtBQUNEO0FBWkg7O0FBY0EsU0FBTyxJQUFQO0FBQ0QsQzs7QUN6QkQ7QUFDQSxJQUFJQyxFQUFFLEdBQUcsMEVBQVQ7QUFFZSxTQUFTQyxlQUFULENBQXlCQyxTQUF6QixFQUFvQztBQUNqRCxNQUFJLEVBQUUvaEMsS0FBSyxHQUFHNmhDLEVBQUUsQ0FBQzVlLElBQUgsQ0FBUThlLFNBQVIsQ0FBVixDQUFKLEVBQW1DLE1BQU0sSUFBSW55QixLQUFKLENBQVUscUJBQXFCbXlCLFNBQS9CLENBQU47QUFDbkMsTUFBSS9oQyxLQUFKO0FBQ0EsU0FBTyxJQUFJZ2lDLGVBQUosQ0FBb0I7QUFDekJDLElBQUFBLElBQUksRUFBRWppQyxLQUFLLENBQUMsQ0FBRCxDQURjO0FBRXpCa2lDLElBQUFBLEtBQUssRUFBRWxpQyxLQUFLLENBQUMsQ0FBRCxDQUZhO0FBR3pCbWlDLElBQUFBLElBQUksRUFBRW5pQyxLQUFLLENBQUMsQ0FBRCxDQUhjO0FBSXpCb2lDLElBQUFBLE1BQU0sRUFBRXBpQyxLQUFLLENBQUMsQ0FBRCxDQUpZO0FBS3pCaW1CLElBQUFBLElBQUksRUFBRWptQixLQUFLLENBQUMsQ0FBRCxDQUxjO0FBTXpCdXRCLElBQUFBLEtBQUssRUFBRXZ0QixLQUFLLENBQUMsQ0FBRCxDQU5hO0FBT3pCcWlDLElBQUFBLEtBQUssRUFBRXJpQyxLQUFLLENBQUMsQ0FBRCxDQVBhO0FBUXpCc2lDLElBQUFBLFNBQVMsRUFBRXRpQyxLQUFLLENBQUMsQ0FBRCxDQUFMLElBQVlBLEtBQUssQ0FBQyxDQUFELENBQUwsQ0FBUzJGLEtBQVQsQ0FBZSxDQUFmLENBUkU7QUFTekJxQyxJQUFBQSxJQUFJLEVBQUVoSSxLQUFLLENBQUMsQ0FBRCxDQVRjO0FBVXpCcUwsSUFBQUEsSUFBSSxFQUFFckwsS0FBSyxDQUFDLEVBQUQ7QUFWYyxHQUFwQixDQUFQO0FBWUQ7QUFFRDhoQyxlQUFlLENBQUNoaUMsU0FBaEIsR0FBNEJraUMsZUFBZSxDQUFDbGlDLFNBQTVDLEVBQXVEOztBQUVoRCxTQUFTa2lDLGVBQVQsQ0FBeUJELFNBQXpCLEVBQW9DO0FBQ3pDLE9BQUtFLElBQUwsR0FBWUYsU0FBUyxDQUFDRSxJQUFWLEtBQW1CN3ZCLFNBQW5CLEdBQStCLEdBQS9CLEdBQXFDMnZCLFNBQVMsQ0FBQ0UsSUFBVixHQUFpQixFQUFsRTtBQUNBLE9BQUtDLEtBQUwsR0FBYUgsU0FBUyxDQUFDRyxLQUFWLEtBQW9COXZCLFNBQXBCLEdBQWdDLEdBQWhDLEdBQXNDMnZCLFNBQVMsQ0FBQ0csS0FBVixHQUFrQixFQUFyRTtBQUNBLE9BQUtDLElBQUwsR0FBWUosU0FBUyxDQUFDSSxJQUFWLEtBQW1CL3ZCLFNBQW5CLEdBQStCLEdBQS9CLEdBQXFDMnZCLFNBQVMsQ0FBQ0ksSUFBVixHQUFpQixFQUFsRTtBQUNBLE9BQUtDLE1BQUwsR0FBY0wsU0FBUyxDQUFDSyxNQUFWLEtBQXFCaHdCLFNBQXJCLEdBQWlDLEVBQWpDLEdBQXNDMnZCLFNBQVMsQ0FBQ0ssTUFBVixHQUFtQixFQUF2RTtBQUNBLE9BQUtuYyxJQUFMLEdBQVksQ0FBQyxDQUFDOGIsU0FBUyxDQUFDOWIsSUFBeEI7QUFDQSxPQUFLc0gsS0FBTCxHQUFhd1UsU0FBUyxDQUFDeFUsS0FBVixLQUFvQm5iLFNBQXBCLEdBQWdDQSxTQUFoQyxHQUE0QyxDQUFDMnZCLFNBQVMsQ0FBQ3hVLEtBQXBFO0FBQ0EsT0FBSzhVLEtBQUwsR0FBYSxDQUFDLENBQUNOLFNBQVMsQ0FBQ00sS0FBekI7QUFDQSxPQUFLQyxTQUFMLEdBQWlCUCxTQUFTLENBQUNPLFNBQVYsS0FBd0Jsd0IsU0FBeEIsR0FBb0NBLFNBQXBDLEdBQWdELENBQUMydkIsU0FBUyxDQUFDTyxTQUE1RTtBQUNBLE9BQUt0NkIsSUFBTCxHQUFZLENBQUMsQ0FBQys1QixTQUFTLENBQUMvNUIsSUFBeEI7QUFDQSxPQUFLcUQsSUFBTCxHQUFZMDJCLFNBQVMsQ0FBQzEyQixJQUFWLEtBQW1CK0csU0FBbkIsR0FBK0IsRUFBL0IsR0FBb0MydkIsU0FBUyxDQUFDMTJCLElBQVYsR0FBaUIsRUFBakU7QUFDRDs7QUFFRDIyQixlQUFlLENBQUNsaUMsU0FBaEIsQ0FBMEI4aUIsUUFBMUIsR0FBcUMsWUFBVztBQUM5QyxTQUFPLEtBQUtxZixJQUFMLEdBQ0QsS0FBS0MsS0FESixHQUVELEtBQUtDLElBRkosR0FHRCxLQUFLQyxNQUhKLElBSUEsS0FBS25jLElBQUwsR0FBWSxHQUFaLEdBQWtCLEVBSmxCLEtBS0EsS0FBS3NILEtBQUwsS0FBZW5iLFNBQWYsR0FBMkIsRUFBM0IsR0FBZ0NwTyxJQUFJLENBQUNnZ0IsR0FBTCxDQUFTLENBQVQsRUFBWSxLQUFLdUosS0FBTCxHQUFhLENBQXpCLENBTGhDLEtBTUEsS0FBSzhVLEtBQUwsR0FBYSxHQUFiLEdBQW1CLEVBTm5CLEtBT0EsS0FBS0MsU0FBTCxLQUFtQmx3QixTQUFuQixHQUErQixFQUEvQixHQUFvQyxNQUFNcE8sSUFBSSxDQUFDZ2dCLEdBQUwsQ0FBUyxDQUFULEVBQVksS0FBS3NlLFNBQUwsR0FBaUIsQ0FBN0IsQ0FQMUMsS0FRQSxLQUFLdDZCLElBQUwsR0FBWSxHQUFaLEdBQWtCLEVBUmxCLElBU0QsS0FBS3FELElBVFg7QUFVRCxDQVhELEM7O0FDbkNBLDZCQUFlLHVCQUFTck0sQ0FBVCxFQUFZO0FBQ3pCLFNBQU9nRixJQUFJLENBQUMybkIsR0FBTCxDQUFTM3NCLENBQUMsR0FBR2dGLElBQUksQ0FBQ2lnQixLQUFMLENBQVdqbEIsQ0FBWCxDQUFiLEtBQStCLElBQS9CLEdBQ0RBLENBQUMsQ0FBQ3VqQyxjQUFGLENBQWlCLElBQWpCLEVBQXVCQyxPQUF2QixDQUErQixJQUEvQixFQUFxQyxFQUFyQyxDQURDLEdBRUR4akMsQ0FBQyxDQUFDNGpCLFFBQUYsQ0FBVyxFQUFYLENBRk47QUFHRCxFQUVEO0FBQ0E7QUFDQTs7QUFDTyxTQUFTNmYsa0JBQVQsQ0FBNEJ6akMsQ0FBNUIsRUFBK0I0eUIsQ0FBL0IsRUFBa0M7QUFDdkMsTUFBSSxDQUFDanpCLENBQUMsR0FBRyxDQUFDSyxDQUFDLEdBQUc0eUIsQ0FBQyxHQUFHNXlCLENBQUMsQ0FBQzBqQyxhQUFGLENBQWdCOVEsQ0FBQyxHQUFHLENBQXBCLENBQUgsR0FBNEI1eUIsQ0FBQyxDQUFDMGpDLGFBQUYsRUFBbEMsRUFBcURoOUIsT0FBckQsQ0FBNkQsR0FBN0QsQ0FBTCxJQUEwRSxDQUE5RSxFQUFpRixPQUFPLElBQVAsQ0FEMUMsQ0FDdUQ7O0FBQzlGLE1BQUkvRyxDQUFKO0FBQUEsTUFBT2drQyxXQUFXLEdBQUczakMsQ0FBQyxDQUFDMkcsS0FBRixDQUFRLENBQVIsRUFBV2hILENBQVgsQ0FBckIsQ0FGdUMsQ0FJdkM7QUFDQTs7QUFDQSxTQUFPLENBQ0xna0MsV0FBVyxDQUFDemtDLE1BQVosR0FBcUIsQ0FBckIsR0FBeUJ5a0MsV0FBVyxDQUFDLENBQUQsQ0FBWCxHQUFpQkEsV0FBVyxDQUFDaDlCLEtBQVosQ0FBa0IsQ0FBbEIsQ0FBMUMsR0FBaUVnOUIsV0FENUQsRUFFTCxDQUFDM2pDLENBQUMsQ0FBQzJHLEtBQUYsQ0FBUWhILENBQUMsR0FBRyxDQUFaLENBRkksQ0FBUDtBQUlELEM7O0FDbkJEO0FBRUEsNkJBQWUsa0JBQVNLLENBQVQsRUFBWTtBQUN6QixTQUFPQSxDQUFDLEdBQUd5akMsa0JBQWtCLENBQUN6K0IsSUFBSSxDQUFDMm5CLEdBQUwsQ0FBUzNzQixDQUFULENBQUQsQ0FBdEIsRUFBcUNBLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUQsQ0FBSixHQUFVK0YsR0FBdkQ7QUFDRCxDOztBQ0pEO0FBRUEsNkJBQWUseUJBQVMrNEIsSUFBVCxFQUFlcjdCLEtBQWYsRUFBc0I7QUFDbkMsU0FBT3VCLElBQUksQ0FBQ2dnQixHQUFMLENBQVMsQ0FBVCxFQUFZaGdCLElBQUksQ0FBQ2dnQixHQUFMLENBQVMsQ0FBQyxDQUFWLEVBQWFoZ0IsSUFBSSxDQUFDQyxHQUFMLENBQVMsQ0FBVCxFQUFZRCxJQUFJLENBQUM4Z0IsS0FBTCxDQUFXOGQsUUFBUSxDQUFDbmdDLEtBQUQsQ0FBUixHQUFrQixDQUE3QixDQUFaLENBQWIsSUFBNkQsQ0FBN0QsR0FBaUVtZ0MsUUFBUSxDQUFDNStCLElBQUksQ0FBQzJuQixHQUFMLENBQVNtUyxJQUFULENBQUQsQ0FBckYsQ0FBUDtBQUNELEM7O0FDSkQsNkJBQWUscUJBQVMrRSxRQUFULEVBQW1CQyxTQUFuQixFQUE4QjtBQUMzQyxTQUFPLFVBQVNyZ0MsS0FBVCxFQUFnQjhxQixLQUFoQixFQUF1QjtBQUM1QixRQUFJNXVCLENBQUMsR0FBRzhELEtBQUssQ0FBQ3ZFLE1BQWQ7QUFBQSxRQUNJa04sQ0FBQyxHQUFHLEVBRFI7QUFBQSxRQUVJL00sQ0FBQyxHQUFHLENBRlI7QUFBQSxRQUdJbWxCLENBQUMsR0FBR3FmLFFBQVEsQ0FBQyxDQUFELENBSGhCO0FBQUEsUUFJSTNrQyxNQUFNLEdBQUcsQ0FKYjs7QUFNQSxXQUFPUyxDQUFDLEdBQUcsQ0FBSixJQUFTNmtCLENBQUMsR0FBRyxDQUFwQixFQUF1QjtBQUNyQixVQUFJdGxCLE1BQU0sR0FBR3NsQixDQUFULEdBQWEsQ0FBYixHQUFpQitKLEtBQXJCLEVBQTRCL0osQ0FBQyxHQUFHeGYsSUFBSSxDQUFDZ2dCLEdBQUwsQ0FBUyxDQUFULEVBQVl1SixLQUFLLEdBQUdydkIsTUFBcEIsQ0FBSjtBQUM1QmtOLE1BQUFBLENBQUMsQ0FBQzFMLElBQUYsQ0FBTytDLEtBQUssQ0FBQ3NnQyxTQUFOLENBQWdCcGtDLENBQUMsSUFBSTZrQixDQUFyQixFQUF3QjdrQixDQUFDLEdBQUc2a0IsQ0FBNUIsQ0FBUDtBQUNBLFVBQUksQ0FBQ3RsQixNQUFNLElBQUlzbEIsQ0FBQyxHQUFHLENBQWYsSUFBb0IrSixLQUF4QixFQUErQjtBQUMvQi9KLE1BQUFBLENBQUMsR0FBR3FmLFFBQVEsQ0FBQ3hrQyxDQUFDLEdBQUcsQ0FBQ0EsQ0FBQyxHQUFHLENBQUwsSUFBVXdrQyxRQUFRLENBQUMza0MsTUFBeEIsQ0FBWjtBQUNEOztBQUVELFdBQU9rTixDQUFDLENBQUMwc0IsT0FBRixHQUFZdnZCLElBQVosQ0FBaUJ1NkIsU0FBakIsQ0FBUDtBQUNELEdBZkQ7QUFnQkQsQzs7QUNqQkQsNkJBQWUsd0JBQVNFLFFBQVQsRUFBbUI7QUFDaEMsU0FBTyxVQUFTdmdDLEtBQVQsRUFBZ0I7QUFDckIsV0FBT0EsS0FBSyxDQUFDKy9CLE9BQU4sQ0FBYyxRQUFkLEVBQXdCLFVBQVM3akMsQ0FBVCxFQUFZO0FBQ3pDLGFBQU9xa0MsUUFBUSxDQUFDLENBQUNya0MsQ0FBRixDQUFmO0FBQ0QsS0FGTSxDQUFQO0FBR0QsR0FKRDtBQUtELEM7O0FDTkQ7QUFDQSw2QkFBZSxvQkFBUzRYLENBQVQsRUFBWTtBQUN6QjBzQixFQUFBQSxHQUFHLEVBQUUsS0FBSyxJQUFJMWtDLENBQUMsR0FBR2dZLENBQUMsQ0FBQ3JZLE1BQVYsRUFBa0JTLENBQUMsR0FBRyxDQUF0QixFQUF5Qm9FLEVBQUUsR0FBRyxDQUFDLENBQS9CLEVBQWtDQyxFQUF2QyxFQUEyQ3JFLENBQUMsR0FBR0osQ0FBL0MsRUFBa0QsRUFBRUksQ0FBcEQsRUFBdUQ7QUFDMUQsWUFBUTRYLENBQUMsQ0FBQzVYLENBQUQsQ0FBVDtBQUNFLFdBQUssR0FBTDtBQUFVb0UsUUFBQUEsRUFBRSxHQUFHQyxFQUFFLEdBQUdyRSxDQUFWO0FBQWE7O0FBQ3ZCLFdBQUssR0FBTDtBQUFVLFlBQUlvRSxFQUFFLEtBQUssQ0FBWCxFQUFjQSxFQUFFLEdBQUdwRSxDQUFMO0FBQVFxRSxRQUFBQSxFQUFFLEdBQUdyRSxDQUFMO0FBQVE7O0FBQ3hDO0FBQVMsWUFBSSxDQUFDLENBQUM0WCxDQUFDLENBQUM1WCxDQUFELENBQVAsRUFBWSxNQUFNc2tDLEdBQU47QUFBVyxZQUFJbGdDLEVBQUUsR0FBRyxDQUFULEVBQVlBLEVBQUUsR0FBRyxDQUFMO0FBQVE7QUFIdEQ7QUFLRDs7QUFDRCxTQUFPQSxFQUFFLEdBQUcsQ0FBTCxHQUFTd1QsQ0FBQyxDQUFDNVEsS0FBRixDQUFRLENBQVIsRUFBVzVDLEVBQVgsSUFBaUJ3VCxDQUFDLENBQUM1USxLQUFGLENBQVEzQyxFQUFFLEdBQUcsQ0FBYixDQUExQixHQUE0Q3VULENBQW5EO0FBQ0QsQzs7QUNWRDtBQUVPLElBQUkyc0IsY0FBSjtBQUVQLDZCQUFlLDBCQUFTbGtDLENBQVQsRUFBWTR5QixDQUFaLEVBQWU7QUFDNUIsTUFBSTNjLENBQUMsR0FBR3d0QixrQkFBa0IsQ0FBQ3pqQyxDQUFELEVBQUk0eUIsQ0FBSixDQUExQjtBQUNBLE1BQUksQ0FBQzNjLENBQUwsRUFBUSxPQUFPalcsQ0FBQyxHQUFHLEVBQVg7QUFDUixNQUFJMmpDLFdBQVcsR0FBRzF0QixDQUFDLENBQUMsQ0FBRCxDQUFuQjtBQUFBLE1BQ0kydEIsUUFBUSxHQUFHM3RCLENBQUMsQ0FBQyxDQUFELENBRGhCO0FBQUEsTUFFSXRXLENBQUMsR0FBR2lrQyxRQUFRLElBQUlNLGNBQWMsR0FBR2wvQixJQUFJLENBQUNnZ0IsR0FBTCxDQUFTLENBQUMsQ0FBVixFQUFhaGdCLElBQUksQ0FBQ0MsR0FBTCxDQUFTLENBQVQsRUFBWUQsSUFBSSxDQUFDOGdCLEtBQUwsQ0FBVzhkLFFBQVEsR0FBRyxDQUF0QixDQUFaLENBQWIsSUFBc0QsQ0FBM0UsQ0FBUixHQUF3RixDQUZoRztBQUFBLE1BR0lya0MsQ0FBQyxHQUFHb2tDLFdBQVcsQ0FBQ3prQyxNQUhwQjtBQUlBLFNBQU9TLENBQUMsS0FBS0osQ0FBTixHQUFVb2tDLFdBQVYsR0FDRGhrQyxDQUFDLEdBQUdKLENBQUosR0FBUW9rQyxXQUFXLEdBQUcsSUFBSXZrQyxLQUFKLENBQVVPLENBQUMsR0FBR0osQ0FBSixHQUFRLENBQWxCLEVBQXFCZ0ssSUFBckIsQ0FBMEIsR0FBMUIsQ0FBdEIsR0FDQTVKLENBQUMsR0FBRyxDQUFKLEdBQVFna0MsV0FBVyxDQUFDaDlCLEtBQVosQ0FBa0IsQ0FBbEIsRUFBcUJoSCxDQUFyQixJQUEwQixHQUExQixHQUFnQ2drQyxXQUFXLENBQUNoOUIsS0FBWixDQUFrQmhILENBQWxCLENBQXhDLEdBQ0EsT0FBTyxJQUFJUCxLQUFKLENBQVUsSUFBSU8sQ0FBZCxFQUFpQjRKLElBQWpCLENBQXNCLEdBQXRCLENBQVAsR0FBb0NrNkIsa0JBQWtCLENBQUN6akMsQ0FBRCxFQUFJZ0YsSUFBSSxDQUFDZ2dCLEdBQUwsQ0FBUyxDQUFULEVBQVk0TixDQUFDLEdBQUdqekIsQ0FBSixHQUFRLENBQXBCLENBQUosQ0FBbEIsQ0FBOEMsQ0FBOUMsQ0FIMUMsQ0FQNEIsQ0FVZ0U7QUFDN0YsQzs7QUNmRDtBQUVBLDZCQUFlLHVCQUFTSyxDQUFULEVBQVk0eUIsQ0FBWixFQUFlO0FBQzVCLE1BQUkzYyxDQUFDLEdBQUd3dEIsa0JBQWtCLENBQUN6akMsQ0FBRCxFQUFJNHlCLENBQUosQ0FBMUI7QUFDQSxNQUFJLENBQUMzYyxDQUFMLEVBQVEsT0FBT2pXLENBQUMsR0FBRyxFQUFYO0FBQ1IsTUFBSTJqQyxXQUFXLEdBQUcxdEIsQ0FBQyxDQUFDLENBQUQsQ0FBbkI7QUFBQSxNQUNJMnRCLFFBQVEsR0FBRzN0QixDQUFDLENBQUMsQ0FBRCxDQURoQjtBQUVBLFNBQU8ydEIsUUFBUSxHQUFHLENBQVgsR0FBZSxPQUFPLElBQUl4a0MsS0FBSixDQUFVLENBQUN3a0MsUUFBWCxFQUFxQnI2QixJQUFyQixDQUEwQixHQUExQixDQUFQLEdBQXdDbzZCLFdBQXZELEdBQ0RBLFdBQVcsQ0FBQ3prQyxNQUFaLEdBQXFCMGtDLFFBQVEsR0FBRyxDQUFoQyxHQUFvQ0QsV0FBVyxDQUFDaDlCLEtBQVosQ0FBa0IsQ0FBbEIsRUFBcUJpOUIsUUFBUSxHQUFHLENBQWhDLElBQXFDLEdBQXJDLEdBQTJDRCxXQUFXLENBQUNoOUIsS0FBWixDQUFrQmk5QixRQUFRLEdBQUcsQ0FBN0IsQ0FBL0UsR0FDQUQsV0FBVyxHQUFHLElBQUl2a0MsS0FBSixDQUFVd2tDLFFBQVEsR0FBR0QsV0FBVyxDQUFDemtDLE1BQXZCLEdBQWdDLENBQTFDLEVBQTZDcUssSUFBN0MsQ0FBa0QsR0FBbEQsQ0FGcEI7QUFHRCxDOztBQ1ZEO0FBQ0E7QUFDQTtBQUVBLGtEQUFlO0FBQ2IsT0FBSyxDQUFDdkosQ0FBRCxFQUFJNHlCLENBQUosS0FBVSxDQUFDNXlCLENBQUMsR0FBRyxHQUFMLEVBQVVza0MsT0FBVixDQUFrQjFSLENBQWxCLENBREY7QUFFYixPQUFNNXlCLENBQUQsSUFBT2dGLElBQUksQ0FBQ2lnQixLQUFMLENBQVdqbEIsQ0FBWCxFQUFjNGpCLFFBQWQsQ0FBdUIsQ0FBdkIsQ0FGQztBQUdiLE9BQU01akIsQ0FBRCxJQUFPQSxDQUFDLEdBQUcsRUFISDtBQUliLE9BQUtta0MsYUFKUTtBQUtiLE9BQUssQ0FBQ25rQyxDQUFELEVBQUk0eUIsQ0FBSixLQUFVNXlCLENBQUMsQ0FBQzBqQyxhQUFGLENBQWdCOVEsQ0FBaEIsQ0FMRjtBQU1iLE9BQUssQ0FBQzV5QixDQUFELEVBQUk0eUIsQ0FBSixLQUFVNXlCLENBQUMsQ0FBQ3NrQyxPQUFGLENBQVUxUixDQUFWLENBTkY7QUFPYixPQUFLLENBQUM1eUIsQ0FBRCxFQUFJNHlCLENBQUosS0FBVTV5QixDQUFDLENBQUN1a0MsV0FBRixDQUFjM1IsQ0FBZCxDQVBGO0FBUWIsT0FBTTV5QixDQUFELElBQU9nRixJQUFJLENBQUNpZ0IsS0FBTCxDQUFXamxCLENBQVgsRUFBYzRqQixRQUFkLENBQXVCLENBQXZCLENBUkM7QUFTYixPQUFLLENBQUM1akIsQ0FBRCxFQUFJNHlCLENBQUosS0FBVXlSLGFBQWEsQ0FBQ3JrQyxDQUFDLEdBQUcsR0FBTCxFQUFVNHlCLENBQVYsQ0FUZjtBQVViLE9BQUt5UixhQVZRO0FBV2IsT0FBS0QsZ0JBWFE7QUFZYixPQUFNcGtDLENBQUQsSUFBT2dGLElBQUksQ0FBQ2lnQixLQUFMLENBQVdqbEIsQ0FBWCxFQUFjNGpCLFFBQWQsQ0FBdUIsRUFBdkIsRUFBMkI0Z0IsV0FBM0IsRUFaQztBQWFiLE9BQU14a0MsQ0FBRCxJQUFPZ0YsSUFBSSxDQUFDaWdCLEtBQUwsQ0FBV2psQixDQUFYLEVBQWM0akIsUUFBZCxDQUF1QixFQUF2QjtBQWJDLENBQWYsRTs7QUNKQSw2QkFBZSxzQkFBUzVqQixDQUFULEVBQVk7QUFDekIsU0FBT0EsQ0FBUDtBQUNELEM7O0FDRkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLElBQUkyQixHQUFHLEdBQUd2QyxLQUFLLENBQUMwQixTQUFOLENBQWdCYSxHQUExQjtBQUFBLElBQ0lrakMsUUFBUSxHQUFHLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxHQUFULEVBQWEsR0FBYixFQUFpQixHQUFqQixFQUFxQixHQUFyQixFQUF5QixHQUF6QixFQUE2QixHQUE3QixFQUFpQyxFQUFqQyxFQUFvQyxHQUFwQyxFQUF3QyxHQUF4QyxFQUE0QyxHQUE1QyxFQUFnRCxHQUFoRCxFQUFvRCxHQUFwRCxFQUF3RCxHQUF4RCxFQUE0RCxHQUE1RCxFQUFnRSxHQUFoRSxDQURmO0FBR0EsNkJBQWUsZ0JBQVNDLE1BQVQsRUFBaUI7QUFDOUIsTUFBSXhsQyxLQUFLLEdBQUd3bEMsTUFBTSxDQUFDakIsUUFBUCxLQUFvQnp3QixTQUFwQixJQUFpQzB4QixNQUFNLENBQUNoQixTQUFQLEtBQXFCMXdCLFNBQXRELEdBQWtFc0MsWUFBbEUsR0FBNkUrdUIsV0FBVyxDQUFDOWlDLEdBQUcsQ0FBQy9CLElBQUosQ0FBU2tsQyxNQUFNLENBQUNqQixRQUFoQixFQUEwQmtCLE1BQTFCLENBQUQsRUFBb0NELE1BQU0sQ0FBQ2hCLFNBQVAsR0FBbUIsRUFBdkQsQ0FBcEc7QUFBQSxNQUNJa0IsY0FBYyxHQUFHRixNQUFNLENBQUNHLFFBQVAsS0FBb0I3eEIsU0FBcEIsR0FBZ0MsRUFBaEMsR0FBcUMweEIsTUFBTSxDQUFDRyxRQUFQLENBQWdCLENBQWhCLElBQXFCLEVBRC9FO0FBQUEsTUFFSUMsY0FBYyxHQUFHSixNQUFNLENBQUNHLFFBQVAsS0FBb0I3eEIsU0FBcEIsR0FBZ0MsRUFBaEMsR0FBcUMweEIsTUFBTSxDQUFDRyxRQUFQLENBQWdCLENBQWhCLElBQXFCLEVBRi9FO0FBQUEsTUFHSUUsT0FBTyxHQUFHTCxNQUFNLENBQUNLLE9BQVAsS0FBbUIveEIsU0FBbkIsR0FBK0IsR0FBL0IsR0FBcUMweEIsTUFBTSxDQUFDSyxPQUFQLEdBQWlCLEVBSHBFO0FBQUEsTUFJSW5CLFFBQVEsR0FBR2MsTUFBTSxDQUFDZCxRQUFQLEtBQW9CNXdCLFNBQXBCLEdBQWdDc0MsWUFBaEMsR0FBMkNndkIsY0FBYyxDQUFDL2lDLEdBQUcsQ0FBQy9CLElBQUosQ0FBU2tsQyxNQUFNLENBQUNkLFFBQWhCLEVBQTBCb0IsTUFBMUIsQ0FBRCxDQUp4RTtBQUFBLE1BS0lDLE9BQU8sR0FBR1AsTUFBTSxDQUFDTyxPQUFQLEtBQW1CanlCLFNBQW5CLEdBQStCLEdBQS9CLEdBQXFDMHhCLE1BQU0sQ0FBQ08sT0FBUCxHQUFpQixFQUxwRTtBQUFBLE1BTUlDLEtBQUssR0FBR1IsTUFBTSxDQUFDUSxLQUFQLEtBQWlCbHlCLFNBQWpCLEdBQTZCLEdBQTdCLEdBQW1DMHhCLE1BQU0sQ0FBQ1EsS0FBUCxHQUFlLEVBTjlEO0FBQUEsTUFPSUMsR0FBRyxHQUFHVCxNQUFNLENBQUNTLEdBQVAsS0FBZW55QixTQUFmLEdBQTJCLEtBQTNCLEdBQW1DMHhCLE1BQU0sQ0FBQ1MsR0FBUCxHQUFhLEVBUDFEOztBQVNBLFdBQVNDLFNBQVQsQ0FBbUJ6QyxTQUFuQixFQUE4QjtBQUM1QkEsSUFBQUEsU0FBUyxHQUFHRCxlQUFlLENBQUNDLFNBQUQsQ0FBM0I7QUFFQSxRQUFJRSxJQUFJLEdBQUdGLFNBQVMsQ0FBQ0UsSUFBckI7QUFBQSxRQUNJQyxLQUFLLEdBQUdILFNBQVMsQ0FBQ0csS0FEdEI7QUFBQSxRQUVJQyxJQUFJLEdBQUdKLFNBQVMsQ0FBQ0ksSUFGckI7QUFBQSxRQUdJQyxNQUFNLEdBQUdMLFNBQVMsQ0FBQ0ssTUFIdkI7QUFBQSxRQUlJbmMsSUFBSSxHQUFHOGIsU0FBUyxDQUFDOWIsSUFKckI7QUFBQSxRQUtJc0gsS0FBSyxHQUFHd1UsU0FBUyxDQUFDeFUsS0FMdEI7QUFBQSxRQU1JOFUsS0FBSyxHQUFHTixTQUFTLENBQUNNLEtBTnRCO0FBQUEsUUFPSUMsU0FBUyxHQUFHUCxTQUFTLENBQUNPLFNBUDFCO0FBQUEsUUFRSXQ2QixJQUFJLEdBQUcrNUIsU0FBUyxDQUFDLzVCLElBUnJCO0FBQUEsUUFTSXFELElBQUksR0FBRzAyQixTQUFTLENBQUMxMkIsSUFUckIsQ0FINEIsQ0FjNUI7O0FBQ0EsUUFBSUEsSUFBSSxLQUFLLEdBQWIsRUFBa0JnM0IsS0FBSyxHQUFHLElBQVIsRUFBY2gzQixJQUFJLEdBQUcsR0FBckIsQ0FBbEIsQ0FFQTtBQUZBLFNBR0ssSUFBSSxDQUFDdTRCLFdBQVcsQ0FBQ3Y0QixJQUFELENBQWhCLEVBQXdCaTNCLFNBQVMsS0FBS2x3QixTQUFkLEtBQTRCa3dCLFNBQVMsR0FBRyxFQUF4QyxHQUE2Q3Q2QixJQUFJLEdBQUcsSUFBcEQsRUFBMERxRCxJQUFJLEdBQUcsR0FBakUsQ0FsQkQsQ0FvQjVCOztBQUNBLFFBQUk0YSxJQUFJLElBQUtnYyxJQUFJLEtBQUssR0FBVCxJQUFnQkMsS0FBSyxLQUFLLEdBQXZDLEVBQTZDamMsSUFBSSxHQUFHLElBQVAsRUFBYWdjLElBQUksR0FBRyxHQUFwQixFQUF5QkMsS0FBSyxHQUFHLEdBQWpDLENBckJqQixDQXVCNUI7QUFDQTs7QUFDQSxRQUFJejhCLE1BQU0sR0FBRzI4QixNQUFNLEtBQUssR0FBWCxHQUFpQjRCLGNBQWpCLEdBQWtDNUIsTUFBTSxLQUFLLEdBQVgsSUFBa0IsU0FBU3p5QixJQUFULENBQWN0RSxJQUFkLENBQWxCLEdBQXdDLE1BQU1BLElBQUksQ0FBQzJYLFdBQUwsRUFBOUMsR0FBbUUsRUFBbEg7QUFBQSxRQUNJeWhCLE1BQU0sR0FBR3JDLE1BQU0sS0FBSyxHQUFYLEdBQWlCOEIsY0FBakIsR0FBa0MsT0FBT3YwQixJQUFQLENBQVl0RSxJQUFaLElBQW9CZzVCLE9BQXBCLEdBQThCLEVBRDdFLENBekI0QixDQTRCNUI7QUFDQTtBQUNBOztBQUNBLFFBQUlLLFVBQVUsR0FBR2QsV0FBVyxDQUFDdjRCLElBQUQsQ0FBNUI7QUFBQSxRQUNJczVCLFdBQVcsR0FBRyxhQUFhaDFCLElBQWIsQ0FBa0J0RSxJQUFsQixDQURsQixDQS9CNEIsQ0FrQzVCO0FBQ0E7QUFDQTtBQUNBOztBQUNBaTNCLElBQUFBLFNBQVMsR0FBR0EsU0FBUyxLQUFLbHdCLFNBQWQsR0FBMEIsQ0FBMUIsR0FDTixTQUFTekMsSUFBVCxDQUFjdEUsSUFBZCxJQUFzQnJILElBQUksQ0FBQ2dnQixHQUFMLENBQVMsQ0FBVCxFQUFZaGdCLElBQUksQ0FBQ0MsR0FBTCxDQUFTLEVBQVQsRUFBYXErQixTQUFiLENBQVosQ0FBdEIsR0FDQXQrQixJQUFJLENBQUNnZ0IsR0FBTCxDQUFTLENBQVQsRUFBWWhnQixJQUFJLENBQUNDLEdBQUwsQ0FBUyxFQUFULEVBQWFxK0IsU0FBYixDQUFaLENBRk47O0FBSUEsYUFBU3hmLE1BQVQsQ0FBZ0JyZ0IsS0FBaEIsRUFBdUI7QUFDckIsVUFBSW1pQyxXQUFXLEdBQUduL0IsTUFBbEI7QUFBQSxVQUNJby9CLFdBQVcsR0FBR0osTUFEbEI7QUFBQSxVQUVJOWxDLENBRko7QUFBQSxVQUVPSixDQUZQO0FBQUEsVUFFVTRSLENBRlY7O0FBSUEsVUFBSTlFLElBQUksS0FBSyxHQUFiLEVBQWtCO0FBQ2hCdzVCLFFBQUFBLFdBQVcsR0FBR0gsVUFBVSxDQUFDamlDLEtBQUQsQ0FBVixHQUFvQm9pQyxXQUFsQztBQUNBcGlDLFFBQUFBLEtBQUssR0FBRyxFQUFSO0FBQ0QsT0FIRCxNQUdPO0FBQ0xBLFFBQUFBLEtBQUssR0FBRyxDQUFDQSxLQUFULENBREssQ0FHTDs7QUFDQSxZQUFJcWlDLGFBQWEsR0FBR3JpQyxLQUFLLEdBQUcsQ0FBUixJQUFhLElBQUlBLEtBQUosR0FBWSxDQUE3QyxDQUpLLENBTUw7O0FBQ0FBLFFBQUFBLEtBQUssR0FBR3NoQixLQUFLLENBQUN0aEIsS0FBRCxDQUFMLEdBQWU4aEMsR0FBZixHQUFxQkcsVUFBVSxDQUFDMWdDLElBQUksQ0FBQzJuQixHQUFMLENBQVNscEIsS0FBVCxDQUFELEVBQWtCNi9CLFNBQWxCLENBQXZDLENBUEssQ0FTTDs7QUFDQSxZQUFJdDZCLElBQUosRUFBVXZGLEtBQUssR0FBR2toQyxVQUFVLENBQUNsaEMsS0FBRCxDQUFsQixDQVZMLENBWUw7O0FBQ0EsWUFBSXFpQyxhQUFhLElBQUksQ0FBQ3JpQyxLQUFELEtBQVcsQ0FBNUIsSUFBaUMwL0IsSUFBSSxLQUFLLEdBQTlDLEVBQW1EMkMsYUFBYSxHQUFHLEtBQWhCLENBYjlDLENBZUw7O0FBQ0FGLFFBQUFBLFdBQVcsR0FBRyxDQUFDRSxhQUFhLEdBQUkzQyxJQUFJLEtBQUssR0FBVCxHQUFlQSxJQUFmLEdBQXNCbUMsS0FBMUIsR0FBbUNuQyxJQUFJLEtBQUssR0FBVCxJQUFnQkEsSUFBSSxLQUFLLEdBQXpCLEdBQStCLEVBQS9CLEdBQW9DQSxJQUFyRixJQUE2RnlDLFdBQTNHO0FBQ0FDLFFBQUFBLFdBQVcsR0FBRyxDQUFDeDVCLElBQUksS0FBSyxHQUFULEdBQWV3NEIsUUFBUSxDQUFDLElBQUlYLGNBQWMsR0FBRyxDQUF0QixDQUF2QixHQUFrRCxFQUFuRCxJQUF5RDJCLFdBQXpELElBQXdFQyxhQUFhLElBQUkzQyxJQUFJLEtBQUssR0FBMUIsR0FBZ0MsR0FBaEMsR0FBc0MsRUFBOUcsQ0FBZCxDQWpCSyxDQW1CTDtBQUNBOztBQUNBLFlBQUl3QyxXQUFKLEVBQWlCO0FBQ2ZobUMsVUFBQUEsQ0FBQyxHQUFHLENBQUMsQ0FBTCxFQUFRSixDQUFDLEdBQUdrRSxLQUFLLENBQUN2RSxNQUFsQjs7QUFDQSxpQkFBTyxFQUFFUyxDQUFGLEdBQU1KLENBQWIsRUFBZ0I7QUFDZCxnQkFBSTRSLENBQUMsR0FBRzFOLEtBQUssQ0FBQ3NpQyxVQUFOLENBQWlCcG1DLENBQWpCLENBQUosRUFBeUIsS0FBS3dSLENBQUwsSUFBVUEsQ0FBQyxHQUFHLEVBQTNDLEVBQStDO0FBQzdDMDBCLGNBQUFBLFdBQVcsR0FBRyxDQUFDMTBCLENBQUMsS0FBSyxFQUFOLEdBQVdnMEIsT0FBTyxHQUFHMWhDLEtBQUssQ0FBQ2tELEtBQU4sQ0FBWWhILENBQUMsR0FBRyxDQUFoQixDQUFyQixHQUEwQzhELEtBQUssQ0FBQ2tELEtBQU4sQ0FBWWhILENBQVosQ0FBM0MsSUFBNkRrbUMsV0FBM0U7QUFDQXBpQyxjQUFBQSxLQUFLLEdBQUdBLEtBQUssQ0FBQ2tELEtBQU4sQ0FBWSxDQUFaLEVBQWVoSCxDQUFmLENBQVI7QUFDQTtBQUNEO0FBQ0Y7QUFDRjtBQUNGLE9BdkNvQixDQXlDckI7OztBQUNBLFVBQUkwakMsS0FBSyxJQUFJLENBQUNwYyxJQUFkLEVBQW9CeGpCLEtBQUssR0FBR25FLEtBQUssQ0FBQ21FLEtBQUQsRUFBUXdQLFFBQVIsQ0FBYixDQTFDQyxDQTRDckI7O0FBQ0EsVUFBSS9ULE1BQU0sR0FBRzBtQyxXQUFXLENBQUMxbUMsTUFBWixHQUFxQnVFLEtBQUssQ0FBQ3ZFLE1BQTNCLEdBQW9DMm1DLFdBQVcsQ0FBQzNtQyxNQUE3RDtBQUFBLFVBQ0k4bUMsT0FBTyxHQUFHOW1DLE1BQU0sR0FBR3F2QixLQUFULEdBQWlCLElBQUludkIsS0FBSixDQUFVbXZCLEtBQUssR0FBR3J2QixNQUFSLEdBQWlCLENBQTNCLEVBQThCcUssSUFBOUIsQ0FBbUMwNUIsSUFBbkMsQ0FBakIsR0FBNEQsRUFEMUUsQ0E3Q3FCLENBZ0RyQjs7QUFDQSxVQUFJSSxLQUFLLElBQUlwYyxJQUFiLEVBQW1CeGpCLEtBQUssR0FBR25FLEtBQUssQ0FBQzBtQyxPQUFPLEdBQUd2aUMsS0FBWCxFQUFrQnVpQyxPQUFPLENBQUM5bUMsTUFBUixHQUFpQnF2QixLQUFLLEdBQUdzWCxXQUFXLENBQUMzbUMsTUFBckMsR0FBOEMrVCxRQUFoRSxDQUFiLEVBQXdGK3lCLE9BQU8sR0FBRyxFQUFsRyxDQWpERSxDQW1EckI7O0FBQ0EsY0FBUTlDLEtBQVI7QUFDRSxhQUFLLEdBQUw7QUFBVXovQixVQUFBQSxLQUFLLEdBQUdtaUMsV0FBVyxHQUFHbmlDLEtBQWQsR0FBc0JvaUMsV0FBdEIsR0FBb0NHLE9BQTVDO0FBQXFEOztBQUMvRCxhQUFLLEdBQUw7QUFBVXZpQyxVQUFBQSxLQUFLLEdBQUdtaUMsV0FBVyxHQUFHSSxPQUFkLEdBQXdCdmlDLEtBQXhCLEdBQWdDb2lDLFdBQXhDO0FBQXFEOztBQUMvRCxhQUFLLEdBQUw7QUFBVXBpQyxVQUFBQSxLQUFLLEdBQUd1aUMsT0FBTyxDQUFDci9CLEtBQVIsQ0FBYyxDQUFkLEVBQWlCekgsTUFBTSxHQUFHOG1DLE9BQU8sQ0FBQzltQyxNQUFSLElBQWtCLENBQTVDLElBQWlEMG1DLFdBQWpELEdBQStEbmlDLEtBQS9ELEdBQXVFb2lDLFdBQXZFLEdBQXFGRyxPQUFPLENBQUNyL0IsS0FBUixDQUFjekgsTUFBZCxDQUE3RjtBQUFvSDs7QUFDOUg7QUFBU3VFLFVBQUFBLEtBQUssR0FBR3VpQyxPQUFPLEdBQUdKLFdBQVYsR0FBd0JuaUMsS0FBeEIsR0FBZ0NvaUMsV0FBeEM7QUFBcUQ7QUFKaEU7O0FBT0EsYUFBTzdCLFFBQVEsQ0FBQ3ZnQyxLQUFELENBQWY7QUFDRDs7QUFFRHFnQixJQUFBQSxNQUFNLENBQUNGLFFBQVAsR0FBa0IsWUFBVztBQUMzQixhQUFPbWYsU0FBUyxHQUFHLEVBQW5CO0FBQ0QsS0FGRDs7QUFJQSxXQUFPamYsTUFBUDtBQUNEOztBQUVELFdBQVNtaUIsWUFBVCxDQUFzQmxELFNBQXRCLEVBQWlDdC9CLEtBQWpDLEVBQXdDO0FBQ3RDLFFBQUkyTyxDQUFDLEdBQUdvekIsU0FBUyxFQUFFekMsU0FBUyxHQUFHRCxlQUFlLENBQUNDLFNBQUQsQ0FBM0IsRUFBd0NBLFNBQVMsQ0FBQzEyQixJQUFWLEdBQWlCLEdBQXpELEVBQThEMDJCLFNBQWhFLEVBQWpCO0FBQUEsUUFDSTV2QixDQUFDLEdBQUduTyxJQUFJLENBQUNnZ0IsR0FBTCxDQUFTLENBQUMsQ0FBVixFQUFhaGdCLElBQUksQ0FBQ0MsR0FBTCxDQUFTLENBQVQsRUFBWUQsSUFBSSxDQUFDOGdCLEtBQUwsQ0FBVzhkLFFBQVEsQ0FBQ25nQyxLQUFELENBQVIsR0FBa0IsQ0FBN0IsQ0FBWixDQUFiLElBQTZELENBRHJFO0FBQUEsUUFFSWtoQixDQUFDLEdBQUczZixJQUFJLENBQUM0ZixHQUFMLENBQVMsRUFBVCxFQUFhLENBQUN6UixDQUFkLENBRlI7QUFBQSxRQUdJMU0sTUFBTSxHQUFHbytCLFFBQVEsQ0FBQyxJQUFJMXhCLENBQUMsR0FBRyxDQUFULENBSHJCO0FBSUEsV0FBTyxVQUFTMVAsS0FBVCxFQUFnQjtBQUNyQixhQUFPMk8sQ0FBQyxDQUFDdVMsQ0FBQyxHQUFHbGhCLEtBQUwsQ0FBRCxHQUFlZ0QsTUFBdEI7QUFDRCxLQUZEO0FBR0Q7O0FBRUQsU0FBTztBQUNMcWQsSUFBQUEsTUFBTSxFQUFFMGhCLFNBREg7QUFFTFMsSUFBQUEsWUFBWSxFQUFFQTtBQUZULEdBQVA7QUFJRCxDOztBQ25KRDtBQUVBLElBQUluQixvQkFBSjtBQUNPLElBQUloaEIsTUFBSjtBQUNBLElBQUltaUIsWUFBSjtBQUVQRSxhQUFhLENBQUM7QUFDWnJDLEVBQUFBLFNBQVMsRUFBRSxHQURDO0FBRVpELEVBQUFBLFFBQVEsRUFBRSxDQUFDLENBQUQsQ0FGRTtBQUdab0IsRUFBQUEsUUFBUSxFQUFFLENBQUMsR0FBRCxFQUFNLEVBQU47QUFIRSxDQUFELENBQWI7QUFNZSxTQUFTa0IsYUFBVCxDQUF1Qnp0QixVQUF2QixFQUFtQztBQUNoRG9zQixFQUFBQSxvQkFBTSxHQUFHb0IsTUFBWSxDQUFDeHRCLFVBQUQsQ0FBckI7QUFDQW9MLEVBQUFBLE1BQU0sR0FBR2doQixvQkFBTSxDQUFDaGhCLE1BQWhCO0FBQ0FtaUIsRUFBQUEsWUFBWSxHQUFHbkIsb0JBQU0sQ0FBQ21CLFlBQXRCO0FBQ0EsU0FBT25CLG9CQUFQO0FBQ0QsQzs7QUNqQkQ7QUFFQSw2QkFBZSx3QkFBU2hHLElBQVQsRUFBZTlaLEdBQWYsRUFBb0I7QUFDakM4WixFQUFBQSxJQUFJLEdBQUc5NUIsSUFBSSxDQUFDMm5CLEdBQUwsQ0FBU21TLElBQVQsQ0FBUCxFQUF1QjlaLEdBQUcsR0FBR2hnQixJQUFJLENBQUMybkIsR0FBTCxDQUFTM0gsR0FBVCxJQUFnQjhaLElBQTdDO0FBQ0EsU0FBTzk1QixJQUFJLENBQUNnZ0IsR0FBTCxDQUFTLENBQVQsRUFBWTRlLFFBQVEsQ0FBQzVlLEdBQUQsQ0FBUixHQUFnQjRlLFFBQVEsQ0FBQzlFLElBQUQsQ0FBcEMsSUFBOEMsQ0FBckQ7QUFDRCxDOztBQ0xEO0FBRUEsNkJBQWUsd0JBQVNBLElBQVQsRUFBZTtBQUM1QixTQUFPOTVCLElBQUksQ0FBQ2dnQixHQUFMLENBQVMsQ0FBVCxFQUFZLENBQUM0ZSxRQUFRLENBQUM1K0IsSUFBSSxDQUFDMm5CLEdBQUwsQ0FBU21TLElBQVQsQ0FBRCxDQUFyQixDQUFQO0FBQ0QsQzs7QUNKRDtBQUNBO0FBRWUsU0FBU3lILFVBQVQsQ0FBb0JueEIsS0FBcEIsRUFBMkJwQyxJQUEzQixFQUFpQ2tsQixLQUFqQyxFQUF3QzZLLFNBQXhDLEVBQW1EO0FBQ2hFLE1BQUlqRSxJQUFJLEdBQUdTLFFBQVEsQ0FBQ25xQixLQUFELEVBQVFwQyxJQUFSLEVBQWNrbEIsS0FBZCxDQUFuQjtBQUFBLE1BQ0lvTCxTQURKO0FBRUFQLEVBQUFBLFNBQVMsR0FBR0QsZUFBZSxDQUFDQyxTQUFTLElBQUksSUFBYixHQUFvQixJQUFwQixHQUEyQkEsU0FBNUIsQ0FBM0I7O0FBQ0EsVUFBUUEsU0FBUyxDQUFDMTJCLElBQWxCO0FBQ0UsU0FBSyxHQUFMO0FBQVU7QUFDUixZQUFJNUksS0FBSyxHQUFHdUIsSUFBSSxDQUFDZ2dCLEdBQUwsQ0FBU2hnQixJQUFJLENBQUMybkIsR0FBTCxDQUFTdlgsS0FBVCxDQUFULEVBQTBCcFEsSUFBSSxDQUFDMm5CLEdBQUwsQ0FBUzNaLElBQVQsQ0FBMUIsQ0FBWjtBQUNBLFlBQUkrdkIsU0FBUyxDQUFDTyxTQUFWLElBQXVCLElBQXZCLElBQStCLENBQUN2ZSxLQUFLLENBQUN1ZSxTQUFTLEdBQUcrQyxlQUFlLENBQUN2SCxJQUFELEVBQU9yN0IsS0FBUCxDQUE1QixDQUF6QyxFQUFxRnMvQixTQUFTLENBQUNPLFNBQVYsR0FBc0JBLFNBQXRCO0FBQ3JGLGVBQU8yQyxZQUFZLENBQUNsRCxTQUFELEVBQVl0L0IsS0FBWixDQUFuQjtBQUNEOztBQUNELFNBQUssRUFBTDtBQUNBLFNBQUssR0FBTDtBQUNBLFNBQUssR0FBTDtBQUNBLFNBQUssR0FBTDtBQUNBLFNBQUssR0FBTDtBQUFVO0FBQ1IsWUFBSXMvQixTQUFTLENBQUNPLFNBQVYsSUFBdUIsSUFBdkIsSUFBK0IsQ0FBQ3ZlLEtBQUssQ0FBQ3VlLFNBQVMsR0FBR2dELGNBQWMsQ0FBQ3hILElBQUQsRUFBTzk1QixJQUFJLENBQUNnZ0IsR0FBTCxDQUFTaGdCLElBQUksQ0FBQzJuQixHQUFMLENBQVN2WCxLQUFULENBQVQsRUFBMEJwUSxJQUFJLENBQUMybkIsR0FBTCxDQUFTM1osSUFBVCxDQUExQixDQUFQLENBQTNCLENBQXpDLEVBQXdIK3ZCLFNBQVMsQ0FBQ08sU0FBVixHQUFzQkEsU0FBUyxJQUFJUCxTQUFTLENBQUMxMkIsSUFBVixLQUFtQixHQUF2QixDQUEvQjtBQUN4SDtBQUNEOztBQUNELFNBQUssR0FBTDtBQUNBLFNBQUssR0FBTDtBQUFVO0FBQ1IsWUFBSTAyQixTQUFTLENBQUNPLFNBQVYsSUFBdUIsSUFBdkIsSUFBK0IsQ0FBQ3ZlLEtBQUssQ0FBQ3VlLFNBQVMsR0FBRzhDLGNBQWMsQ0FBQ3RILElBQUQsQ0FBM0IsQ0FBekMsRUFBNkVpRSxTQUFTLENBQUNPLFNBQVYsR0FBc0JBLFNBQVMsR0FBRyxDQUFDUCxTQUFTLENBQUMxMkIsSUFBVixLQUFtQixHQUFwQixJQUEyQixDQUE3RDtBQUM3RTtBQUNEO0FBbEJIOztBQW9CQSxTQUFPeVgsTUFBTSxDQUFDaWYsU0FBRCxDQUFiO0FBQ0QsQzs7QUM1QkQ7QUFDQTtBQUNBO0FBQ0E7QUFFTyxTQUFTeUQsU0FBVCxDQUFtQjF1QixLQUFuQixFQUEwQjtBQUMvQixNQUFJNnBCLE1BQU0sR0FBRzdwQixLQUFLLENBQUM2cEIsTUFBbkI7O0FBRUE3cEIsRUFBQUEsS0FBSyxDQUFDK21CLEtBQU4sR0FBYyxVQUFTM0csS0FBVCxFQUFnQjtBQUM1QixRQUFJamlCLENBQUMsR0FBRzByQixNQUFNLEVBQWQ7QUFDQSxXQUFPOUMsS0FBSyxDQUFDNW9CLENBQUMsQ0FBQyxDQUFELENBQUYsRUFBT0EsQ0FBQyxDQUFDQSxDQUFDLENBQUMvVyxNQUFGLEdBQVcsQ0FBWixDQUFSLEVBQXdCZzVCLEtBQUssSUFBSSxJQUFULEdBQWdCLEVBQWhCLEdBQXFCQSxLQUE3QyxDQUFaO0FBQ0QsR0FIRDs7QUFLQXBnQixFQUFBQSxLQUFLLENBQUN5dUIsVUFBTixHQUFtQixVQUFTck8sS0FBVCxFQUFnQjZLLFNBQWhCLEVBQTJCO0FBQzVDLFFBQUk5c0IsQ0FBQyxHQUFHMHJCLE1BQU0sRUFBZDtBQUNBLFdBQU80RSxVQUFVLENBQUN0d0IsQ0FBQyxDQUFDLENBQUQsQ0FBRixFQUFPQSxDQUFDLENBQUNBLENBQUMsQ0FBQy9XLE1BQUYsR0FBVyxDQUFaLENBQVIsRUFBd0JnNUIsS0FBSyxJQUFJLElBQVQsR0FBZ0IsRUFBaEIsR0FBcUJBLEtBQTdDLEVBQW9ENkssU0FBcEQsQ0FBakI7QUFDRCxHQUhEOztBQUtBanJCLEVBQUFBLEtBQUssQ0FBQzJ1QixJQUFOLEdBQWEsVUFBU3ZPLEtBQVQsRUFBZ0I7QUFDM0IsUUFBSUEsS0FBSyxJQUFJLElBQWIsRUFBbUJBLEtBQUssR0FBRyxFQUFSO0FBRW5CLFFBQUlqaUIsQ0FBQyxHQUFHMHJCLE1BQU0sRUFBZDtBQUNBLFFBQUk1OUIsRUFBRSxHQUFHLENBQVQ7QUFDQSxRQUFJQyxFQUFFLEdBQUdpUyxDQUFDLENBQUMvVyxNQUFGLEdBQVcsQ0FBcEI7QUFDQSxRQUFJa1csS0FBSyxHQUFHYSxDQUFDLENBQUNsUyxFQUFELENBQWI7QUFDQSxRQUFJaVAsSUFBSSxHQUFHaUQsQ0FBQyxDQUFDalMsRUFBRCxDQUFaO0FBQ0EsUUFBSTBpQyxPQUFKO0FBQ0EsUUFBSTVILElBQUo7QUFDQSxRQUFJNkgsT0FBTyxHQUFHLEVBQWQ7O0FBRUEsUUFBSTN6QixJQUFJLEdBQUdvQyxLQUFYLEVBQWtCO0FBQ2hCMHBCLE1BQUFBLElBQUksR0FBRzFwQixLQUFQLEVBQWNBLEtBQUssR0FBR3BDLElBQXRCLEVBQTRCQSxJQUFJLEdBQUc4ckIsSUFBbkM7QUFDQUEsTUFBQUEsSUFBSSxHQUFHLzZCLEVBQVAsRUFBV0EsRUFBRSxHQUFHQyxFQUFoQixFQUFvQkEsRUFBRSxHQUFHODZCLElBQXpCO0FBQ0Q7O0FBRUQsV0FBTzZILE9BQU8sS0FBSyxDQUFuQixFQUFzQjtBQUNwQjdILE1BQUFBLElBQUksR0FBR0MsYUFBYSxDQUFDM3BCLEtBQUQsRUFBUXBDLElBQVIsRUFBY2tsQixLQUFkLENBQXBCOztBQUNBLFVBQUk0RyxJQUFJLEtBQUs0SCxPQUFiLEVBQXNCO0FBQ3BCendCLFFBQUFBLENBQUMsQ0FBQ2xTLEVBQUQsQ0FBRCxHQUFRcVIsS0FBUjtBQUNBYSxRQUFBQSxDQUFDLENBQUNqUyxFQUFELENBQUQsR0FBUWdQLElBQVI7QUFDQSxlQUFPMnVCLE1BQU0sQ0FBQzFyQixDQUFELENBQWI7QUFDRCxPQUpELE1BSU8sSUFBSTZvQixJQUFJLEdBQUcsQ0FBWCxFQUFjO0FBQ25CMXBCLFFBQUFBLEtBQUssR0FBR3BRLElBQUksQ0FBQzhnQixLQUFMLENBQVcxUSxLQUFLLEdBQUcwcEIsSUFBbkIsSUFBMkJBLElBQW5DO0FBQ0E5ckIsUUFBQUEsSUFBSSxHQUFHaE8sSUFBSSxDQUFDNGhDLElBQUwsQ0FBVTV6QixJQUFJLEdBQUc4ckIsSUFBakIsSUFBeUJBLElBQWhDO0FBQ0QsT0FITSxNQUdBLElBQUlBLElBQUksR0FBRyxDQUFYLEVBQWM7QUFDbkIxcEIsUUFBQUEsS0FBSyxHQUFHcFEsSUFBSSxDQUFDNGhDLElBQUwsQ0FBVXh4QixLQUFLLEdBQUcwcEIsSUFBbEIsSUFBMEJBLElBQWxDO0FBQ0E5ckIsUUFBQUEsSUFBSSxHQUFHaE8sSUFBSSxDQUFDOGdCLEtBQUwsQ0FBVzlTLElBQUksR0FBRzhyQixJQUFsQixJQUEwQkEsSUFBakM7QUFDRCxPQUhNLE1BR0E7QUFDTDtBQUNEOztBQUNENEgsTUFBQUEsT0FBTyxHQUFHNUgsSUFBVjtBQUNEOztBQUVELFdBQU9obkIsS0FBUDtBQUNELEdBcENEOztBQXNDQSxTQUFPQSxLQUFQO0FBQ0Q7QUFFYyxTQUFTaU8sYUFBVCxHQUFrQjtBQUMvQixNQUFJak8sS0FBSyxHQUFHMnFCLFVBQVUsRUFBdEI7O0FBRUEzcUIsRUFBQUEsS0FBSyxDQUFDOUcsSUFBTixHQUFhLFlBQVc7QUFDdEIsV0FBT0EsSUFBSSxDQUFDOEcsS0FBRCxFQUFRaU8sYUFBTSxFQUFkLENBQVg7QUFDRCxHQUZEOztBQUlBMmMsRUFBQUEsZUFBQSxDQUFnQjVxQixLQUFoQixFQUF1QnRYLFNBQXZCO0FBRUEsU0FBT2dtQyxTQUFTLENBQUMxdUIsS0FBRCxDQUFoQjtBQUNELEM7O0FDckVEO0FBQ0E7QUFDQTtBQUVlLFNBQVMrdUIsUUFBVCxHQUFvQjtBQUNqQyxNQUFJQyxFQUFFLEdBQUcsQ0FBVDtBQUFBLE1BQ0lDLEVBQUUsR0FBRyxDQURUO0FBQUEsTUFFSXhuQyxDQUFDLEdBQUcsQ0FGUjtBQUFBLE1BR0lvaUMsTUFBTSxHQUFHLENBQUMsR0FBRCxDQUhiO0FBQUEsTUFJSUMsS0FBSyxHQUFHLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FKWjtBQUFBLE1BS0lLLE9BTEo7O0FBT0EsV0FBU25xQixLQUFULENBQWU5WCxDQUFmLEVBQWtCO0FBQ2hCLFdBQU9BLENBQUMsSUFBSSxJQUFMLElBQWFBLENBQUMsSUFBSUEsQ0FBbEIsR0FBc0I0aEMsS0FBSyxDQUFDUCxNQUFNLENBQUNNLE1BQUQsRUFBUzNoQyxDQUFULEVBQVksQ0FBWixFQUFlVCxDQUFmLENBQVAsQ0FBM0IsR0FBdUQwaUMsT0FBOUQ7QUFDRDs7QUFFRCxXQUFTSSxPQUFULEdBQW1CO0FBQ2pCLFFBQUkxaUMsQ0FBQyxHQUFHLENBQUMsQ0FBVDtBQUNBZ2lDLElBQUFBLE1BQU0sR0FBRyxJQUFJdmlDLEtBQUosQ0FBVUcsQ0FBVixDQUFUOztBQUNBLFdBQU8sRUFBRUksQ0FBRixHQUFNSixDQUFiLEVBQWdCb2lDLE1BQU0sQ0FBQ2hpQyxDQUFELENBQU4sR0FBWSxDQUFDLENBQUNBLENBQUMsR0FBRyxDQUFMLElBQVVvbkMsRUFBVixHQUFlLENBQUNwbkMsQ0FBQyxHQUFHSixDQUFMLElBQVV1bkMsRUFBMUIsS0FBaUN2bkMsQ0FBQyxHQUFHLENBQXJDLENBQVo7O0FBQ2hCLFdBQU91WSxLQUFQO0FBQ0Q7O0FBRURBLEVBQUFBLEtBQUssQ0FBQzZwQixNQUFOLEdBQWUsVUFBU2p4QixDQUFULEVBQVk7QUFDekIsV0FBT2xRLFNBQVMsQ0FBQ3RCLE1BQVYsSUFBb0IsQ0FBQzRuQyxFQUFELEVBQUtDLEVBQUwsSUFBV3IyQixDQUFYLEVBQWNvMkIsRUFBRSxHQUFHLENBQUNBLEVBQXBCLEVBQXdCQyxFQUFFLEdBQUcsQ0FBQ0EsRUFBOUIsRUFBa0MxRSxPQUFPLEVBQTdELElBQW1FLENBQUN5RSxFQUFELEVBQUtDLEVBQUwsQ0FBMUU7QUFDRCxHQUZEOztBQUlBanZCLEVBQUFBLEtBQUssQ0FBQzhwQixLQUFOLEdBQWMsVUFBU2x4QixDQUFULEVBQVk7QUFDeEIsV0FBT2xRLFNBQVMsQ0FBQ3RCLE1BQVYsSUFBb0JLLENBQUMsR0FBRyxDQUFDcWlDLEtBQUssR0FBR3hpQyxLQUFLLENBQUNjLElBQU4sQ0FBV3dRLENBQVgsQ0FBVCxFQUF3QnhSLE1BQXhCLEdBQWlDLENBQXJDLEVBQXdDbWpDLE9BQU8sRUFBbkUsSUFBeUVULEtBQUssQ0FBQ2o3QixLQUFOLEVBQWhGO0FBQ0QsR0FGRDs7QUFJQW1SLEVBQUFBLEtBQUssQ0FBQ2t2QixZQUFOLEdBQXFCLFVBQVMvZ0IsQ0FBVCxFQUFZO0FBQy9CLFFBQUl0bUIsQ0FBQyxHQUFHaWlDLEtBQUssQ0FBQ2w3QixPQUFOLENBQWN1ZixDQUFkLENBQVI7QUFDQSxXQUFPdG1CLENBQUMsR0FBRyxDQUFKLEdBQVEsQ0FBQ29HLEdBQUQsRUFBTUEsR0FBTixDQUFSLEdBQ0RwRyxDQUFDLEdBQUcsQ0FBSixHQUFRLENBQUNtbkMsRUFBRCxFQUFLbkYsTUFBTSxDQUFDLENBQUQsQ0FBWCxDQUFSLEdBQ0FoaUMsQ0FBQyxJQUFJSixDQUFMLEdBQVMsQ0FBQ29pQyxNQUFNLENBQUNwaUMsQ0FBQyxHQUFHLENBQUwsQ0FBUCxFQUFnQnduQyxFQUFoQixDQUFULEdBQ0EsQ0FBQ3BGLE1BQU0sQ0FBQ2hpQyxDQUFDLEdBQUcsQ0FBTCxDQUFQLEVBQWdCZ2lDLE1BQU0sQ0FBQ2hpQyxDQUFELENBQXRCLENBSE47QUFJRCxHQU5EOztBQVFBbVksRUFBQUEsS0FBSyxDQUFDbXFCLE9BQU4sR0FBZ0IsVUFBU3Z4QixDQUFULEVBQVk7QUFDMUIsV0FBT2xRLFNBQVMsQ0FBQ3RCLE1BQVYsSUFBb0IraUMsT0FBTyxHQUFHdnhCLENBQVYsRUFBYW9ILEtBQWpDLElBQTBDQSxLQUFqRDtBQUNELEdBRkQ7O0FBSUFBLEVBQUFBLEtBQUssQ0FBQ212QixVQUFOLEdBQW1CLFlBQVc7QUFDNUIsV0FBT3RGLE1BQU0sQ0FBQ2g3QixLQUFQLEVBQVA7QUFDRCxHQUZEOztBQUlBbVIsRUFBQUEsS0FBSyxDQUFDOUcsSUFBTixHQUFhLFlBQVc7QUFDdEIsV0FBTzYxQixRQUFRLEdBQ1ZsRixNQURFLENBQ0ssQ0FBQ21GLEVBQUQsRUFBS0MsRUFBTCxDQURMLEVBRUZuRixLQUZFLENBRUlBLEtBRkosRUFHRkssT0FIRSxDQUdNQSxPQUhOLENBQVA7QUFJRCxHQUxEOztBQU9BLFNBQU9TLGVBQUEsQ0FBZ0I4RCxTQUFTLENBQUMxdUIsS0FBRCxDQUF6QixFQUFrQ3RYLFNBQWxDLENBQVA7QUFDRCxDOztBQ3ZERDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTMGhDLHNCQUFULEdBQXVCO0FBQ3JCLE1BQUk0RSxFQUFFLEdBQUcsQ0FBVDtBQUFBLE1BQ0lDLEVBQUUsR0FBRyxDQURUO0FBQUEsTUFFSXZ6QixFQUZKO0FBQUEsTUFHSUMsRUFISjtBQUFBLE1BSUk0ekIsR0FKSjtBQUFBLE1BS0l6d0IsU0FMSjtBQUFBLE1BTUlnc0IsWUFBWSxHQUFHbHRCLG1CQU5uQjtBQUFBLE1BT0lzc0IsS0FBSyxHQUFHLEtBUFo7QUFBQSxNQVFJQyxPQVJKOztBQVVBLFdBQVNucUIsS0FBVCxDQUFlOVgsQ0FBZixFQUFrQjtBQUNoQixXQUFPQSxDQUFDLElBQUksSUFBTCxJQUFhK2tCLEtBQUssQ0FBQy9rQixDQUFDLEdBQUcsQ0FBQ0EsQ0FBTixDQUFsQixHQUE2QmlpQyxPQUE3QixHQUF1Q1csWUFBWSxDQUFDeUUsR0FBRyxLQUFLLENBQVIsR0FBWSxHQUFaLElBQW1Ccm5DLENBQUMsR0FBRyxDQUFDNFcsU0FBUyxDQUFDNVcsQ0FBRCxDQUFULEdBQWV3VCxFQUFoQixJQUFzQjZ6QixHQUExQixFQUErQnJGLEtBQUssR0FBR2g5QixJQUFJLENBQUNnZ0IsR0FBTCxDQUFTLENBQVQsRUFBWWhnQixJQUFJLENBQUNDLEdBQUwsQ0FBUyxDQUFULEVBQVlqRixDQUFaLENBQVosQ0FBSCxHQUFpQ0EsQ0FBeEYsQ0FBRCxDQUExRDtBQUNEOztBQUVEOFgsRUFBQUEsS0FBSyxDQUFDNnBCLE1BQU4sR0FBZSxVQUFTanhCLENBQVQsRUFBWTtBQUN6QixXQUFPbFEsU0FBUyxDQUFDdEIsTUFBVixJQUFvQixDQUFDNG5DLEVBQUQsRUFBS0MsRUFBTCxJQUFXcjJCLENBQVgsRUFBYzhDLEVBQUUsR0FBR29ELFNBQVMsQ0FBQ2t3QixFQUFFLEdBQUcsQ0FBQ0EsRUFBUCxDQUE1QixFQUF3Q3J6QixFQUFFLEdBQUdtRCxTQUFTLENBQUNtd0IsRUFBRSxHQUFHLENBQUNBLEVBQVAsQ0FBdEQsRUFBa0VNLEdBQUcsR0FBRzd6QixFQUFFLEtBQUtDLEVBQVAsR0FBWSxDQUFaLEdBQWdCLEtBQUtBLEVBQUUsR0FBR0QsRUFBVixDQUF4RixFQUF1R3NFLEtBQTNILElBQW9JLENBQUNndkIsRUFBRCxFQUFLQyxFQUFMLENBQTNJO0FBQ0QsR0FGRDs7QUFJQWp2QixFQUFBQSxLQUFLLENBQUNrcUIsS0FBTixHQUFjLFVBQVN0eEIsQ0FBVCxFQUFZO0FBQ3hCLFdBQU9sUSxTQUFTLENBQUN0QixNQUFWLElBQW9COGlDLEtBQUssR0FBRyxDQUFDLENBQUN0eEIsQ0FBVixFQUFhb0gsS0FBakMsSUFBMENrcUIsS0FBakQ7QUFDRCxHQUZEOztBQUlBbHFCLEVBQUFBLEtBQUssQ0FBQzhxQixZQUFOLEdBQXFCLFVBQVNseUIsQ0FBVCxFQUFZO0FBQy9CLFdBQU9sUSxTQUFTLENBQUN0QixNQUFWLElBQW9CMGpDLFlBQVksR0FBR2x5QixDQUFmLEVBQWtCb0gsS0FBdEMsSUFBK0M4cUIsWUFBdEQ7QUFDRCxHQUZEOztBQUlBLFdBQVNoQixLQUFULENBQWVqYSxXQUFmLEVBQTRCO0FBQzFCLFdBQU8sVUFBU2pYLENBQVQsRUFBWTtBQUNqQixVQUFJdXVCLEVBQUosRUFBUUMsRUFBUjtBQUNBLGFBQU8xK0IsU0FBUyxDQUFDdEIsTUFBVixJQUFvQixDQUFDKy9CLEVBQUQsRUFBS0MsRUFBTCxJQUFXeHVCLENBQVgsRUFBY2t5QixZQUFZLEdBQUdqYixXQUFXLENBQUNzWCxFQUFELEVBQUtDLEVBQUwsQ0FBeEMsRUFBa0RwbkIsS0FBdEUsSUFBK0UsQ0FBQzhxQixZQUFZLENBQUMsQ0FBRCxDQUFiLEVBQWtCQSxZQUFZLENBQUMsQ0FBRCxDQUE5QixDQUF0RjtBQUNELEtBSEQ7QUFJRDs7QUFFRDlxQixFQUFBQSxLQUFLLENBQUM4cEIsS0FBTixHQUFjQSxLQUFLLENBQUNqYSxLQUFELENBQW5CO0FBRUE3UCxFQUFBQSxLQUFLLENBQUN5cUIsVUFBTixHQUFtQlgsS0FBSyxDQUFDTCxLQUFELENBQXhCOztBQUVBenBCLEVBQUFBLEtBQUssQ0FBQ21xQixPQUFOLEdBQWdCLFVBQVN2eEIsQ0FBVCxFQUFZO0FBQzFCLFdBQU9sUSxTQUFTLENBQUN0QixNQUFWLElBQW9CK2lDLE9BQU8sR0FBR3Z4QixDQUFWLEVBQWFvSCxLQUFqQyxJQUEwQ21xQixPQUFqRDtBQUNELEdBRkQ7O0FBSUEsU0FBTyxVQUFTNzFCLENBQVQsRUFBWTtBQUNqQndLLElBQUFBLFNBQVMsR0FBR3hLLENBQVosRUFBZW9ILEVBQUUsR0FBR3BILENBQUMsQ0FBQzA2QixFQUFELENBQXJCLEVBQTJCcnpCLEVBQUUsR0FBR3JILENBQUMsQ0FBQzI2QixFQUFELENBQWpDLEVBQXVDTSxHQUFHLEdBQUc3ekIsRUFBRSxLQUFLQyxFQUFQLEdBQVksQ0FBWixHQUFnQixLQUFLQSxFQUFFLEdBQUdELEVBQVYsQ0FBN0Q7QUFDQSxXQUFPc0UsS0FBUDtBQUNELEdBSEQ7QUFJRDs7QUFFTSxTQUFTOUcsZUFBVCxDQUFjZ1csTUFBZCxFQUFzQjBKLE1BQXRCLEVBQThCO0FBQ25DLFNBQU9BLE1BQU0sQ0FDUmlSLE1BREUsQ0FDSzNhLE1BQU0sQ0FBQzJhLE1BQVAsRUFETCxFQUVGaUIsWUFGRSxDQUVXNWIsTUFBTSxDQUFDNGIsWUFBUCxFQUZYLEVBR0ZaLEtBSEUsQ0FHSWhiLE1BQU0sQ0FBQ2diLEtBQVAsRUFISixFQUlGQyxPQUpFLENBSU1qYixNQUFNLENBQUNpYixPQUFQLEVBSk4sQ0FBUDtBQUtEO0FBRWMsU0FBU3FGLFVBQVQsR0FBc0I7QUFDbkMsTUFBSXh2QixLQUFLLEdBQUcwdUIsU0FBUyxDQUFDdEUsc0JBQVcsR0FBR3hzQixtQkFBSCxDQUFaLENBQXJCOztBQUVBb0MsRUFBQUEsS0FBSyxDQUFDOUcsSUFBTixHQUFhLFlBQVc7QUFDdEIsV0FBT0EsZUFBSSxDQUFDOEcsS0FBRCxFQUFRd3ZCLFVBQVUsRUFBbEIsQ0FBWDtBQUNELEdBRkQ7O0FBSUEsU0FBTzNFLDJCQUFBLENBQXVCN3FCLEtBQXZCLEVBQThCdFgsU0FBOUIsQ0FBUDtBQUNEO0FBRU0sU0FBUyttQyxhQUFULEdBQXlCO0FBQzlCLE1BQUl6dkIsS0FBSyxHQUFHb3ZCLE9BQU8sQ0FBQ2hGLHNCQUFXLEVBQVosQ0FBUCxDQUF1QlAsTUFBdkIsQ0FBOEIsQ0FBQyxDQUFELEVBQUksRUFBSixDQUE5QixDQUFaOztBQUVBN3BCLEVBQUFBLEtBQUssQ0FBQzlHLElBQU4sR0FBYSxZQUFXO0FBQ3RCLFdBQU9BLGVBQUksQ0FBQzhHLEtBQUQsRUFBUXl2QixhQUFhLEVBQXJCLENBQUosQ0FBNkJDLElBQTdCLENBQWtDMXZCLEtBQUssQ0FBQzB2QixJQUFOLEVBQWxDLENBQVA7QUFDRCxHQUZEOztBQUlBLFNBQU83RSxnQkFBZ0IsQ0FBQ3BpQyxLQUFqQixDQUF1QnVYLEtBQXZCLEVBQThCdFgsU0FBOUIsQ0FBUDtBQUNEO0FBRU0sU0FBU2luQyxnQkFBVCxHQUE0QjtBQUNqQyxNQUFJM3ZCLEtBQUssR0FBR3F2QixTQUFTLENBQUNqRixzQkFBVyxFQUFaLENBQXJCOztBQUVBcHFCLEVBQUFBLEtBQUssQ0FBQzlHLElBQU4sR0FBYSxZQUFXO0FBQ3RCLFdBQU9BLGVBQUksQ0FBQzhHLEtBQUQsRUFBUTJ2QixnQkFBZ0IsRUFBeEIsQ0FBSixDQUFnQ2psQyxRQUFoQyxDQUF5Q3NWLEtBQUssQ0FBQ3RWLFFBQU4sRUFBekMsQ0FBUDtBQUNELEdBRkQ7O0FBSUEsU0FBT21nQyxnQkFBZ0IsQ0FBQ3BpQyxLQUFqQixDQUF1QnVYLEtBQXZCLEVBQThCdFgsU0FBOUIsQ0FBUDtBQUNEO0FBRU0sU0FBU2tuQyxhQUFULEdBQXlCO0FBQzlCLE1BQUk1dkIsS0FBSyxHQUFHc3ZCLE1BQU0sQ0FBQ2xGLHNCQUFXLEVBQVosQ0FBbEI7O0FBRUFwcUIsRUFBQUEsS0FBSyxDQUFDOUcsSUFBTixHQUFhLFlBQVc7QUFDdEIsV0FBT0EsZUFBSSxDQUFDOEcsS0FBRCxFQUFRNHZCLGFBQWEsRUFBckIsQ0FBSixDQUE2QjlELFFBQTdCLENBQXNDOXJCLEtBQUssQ0FBQzhyQixRQUFOLEVBQXRDLENBQVA7QUFDRCxHQUZEOztBQUlBLFNBQU9qQixnQkFBZ0IsQ0FBQ3BpQyxLQUFqQixDQUF1QnVYLEtBQXZCLEVBQThCdFgsU0FBOUIsQ0FBUDtBQUNEO0FBRU0sU0FBU21uQyxjQUFULEdBQTBCO0FBQy9CLFNBQU9ELGFBQWEsQ0FBQ25uQyxLQUFkLENBQW9CLElBQXBCLEVBQTBCQyxTQUExQixFQUFxQ29qQyxRQUFyQyxDQUE4QyxHQUE5QyxDQUFQO0FBQ0QsQzs7QUMxR0Q7QUFLQTtBQUlBO0FBSUE7QUFJQTtBQUlBO0FBS0E7QUFLQTtBQUlBO0FBSUE7QUFJQTtBQUlBO0FBSUE7QUFJQTtBQVFBO0FBSUE7OztBQ25FTyxNQUFNZ0csT0FBTyxHQUFHNWtDLElBQUksQ0FBQ3lRLEVBQUwsR0FBVSxHQUExQjtBQUNBLE1BQU1ELFlBQU8sR0FBRyxNQUFNeFEsSUFBSSxDQUFDeVEsRUFBM0IsQzs7QUNEUDtBQUNBO0FBQ0E7QUFFQSxJQUFJNm1CLENBQUMsR0FBRyxDQUFDLE9BQVQ7QUFBQSxJQUNJdU4sQ0FBQyxHQUFHLENBQUMsT0FEVDtBQUFBLElBRUlDLENBQUMsR0FBRyxDQUFDLE9BRlQ7QUFBQSxJQUdJQyxDQUFDLEdBQUcsQ0FBQyxPQUhUO0FBQUEsSUFJSXpZLENBQUMsR0FBRyxDQUFDLE9BSlQ7QUFBQSxJQUtJMFksRUFBRSxHQUFHMVksQ0FBQyxHQUFHeVksQ0FMYjtBQUFBLElBTUlFLEVBQUUsR0FBRzNZLENBQUMsR0FBR3VZLENBTmI7QUFBQSxJQU9JSyxLQUFLLEdBQUdMLENBQUMsR0FBR0MsQ0FBSixHQUFRQyxDQUFDLEdBQUd6TixDQVB4Qjs7QUFTQSxTQUFTNk4sZ0JBQVQsQ0FBMEJ6OUIsQ0FBMUIsRUFBNkI7QUFDM0IsTUFBSUEsQ0FBQyxZQUFZMDlCLFNBQWpCLEVBQTRCLE9BQU8sSUFBSUEsU0FBSixDQUFjMTlCLENBQUMsQ0FBQ3dZLENBQWhCLEVBQW1CeFksQ0FBQyxDQUFDNkssQ0FBckIsRUFBd0I3SyxDQUFDLENBQUNxWCxDQUExQixFQUE2QnJYLENBQUMsQ0FBQ2dZLE9BQS9CLENBQVA7QUFDNUIsTUFBSSxFQUFFaFksQ0FBQyxZQUFZMFgsR0FBZixDQUFKLEVBQXlCMVgsQ0FBQyxHQUFHK1gsVUFBVSxDQUFDL1gsQ0FBRCxDQUFkO0FBQ3pCLE1BQUk2WCxDQUFDLEdBQUc3WCxDQUFDLENBQUM2WCxDQUFGLEdBQU0sR0FBZDtBQUFBLE1BQ0lDLENBQUMsR0FBRzlYLENBQUMsQ0FBQzhYLENBQUYsR0FBTSxHQURkO0FBQUEsTUFFSTdlLENBQUMsR0FBRytHLENBQUMsQ0FBQy9HLENBQUYsR0FBTSxHQUZkO0FBQUEsTUFHSW9lLENBQUMsR0FBRyxDQUFDbW1CLEtBQUssR0FBR3ZrQyxDQUFSLEdBQVlxa0MsRUFBRSxHQUFHemxCLENBQWpCLEdBQXFCMGxCLEVBQUUsR0FBR3psQixDQUEzQixLQUFpQzBsQixLQUFLLEdBQUdGLEVBQVIsR0FBYUMsRUFBOUMsQ0FIUjtBQUFBLE1BSUlJLEVBQUUsR0FBRzFrQyxDQUFDLEdBQUdvZSxDQUpiO0FBQUEsTUFLSVksQ0FBQyxHQUFHLENBQUMyTSxDQUFDLElBQUk5TSxDQUFDLEdBQUdULENBQVIsQ0FBRCxHQUFjK2xCLENBQUMsR0FBR08sRUFBbkIsSUFBeUJOLENBTGpDO0FBQUEsTUFNSXh5QixDQUFDLEdBQUd2UyxJQUFJLENBQUNrUixJQUFMLENBQVV5TyxDQUFDLEdBQUdBLENBQUosR0FBUTBsQixFQUFFLEdBQUdBLEVBQXZCLEtBQThCL1ksQ0FBQyxHQUFHdk4sQ0FBSixJQUFTLElBQUlBLENBQWIsQ0FBOUIsQ0FOUjtBQUFBLE1BTXdEO0FBQ3BEbUIsRUFBQUEsQ0FBQyxHQUFHM04sQ0FBQyxHQUFHdlMsSUFBSSxDQUFDbVIsS0FBTCxDQUFXd08sQ0FBWCxFQUFjMGxCLEVBQWQsSUFBb0I3MEIsWUFBcEIsR0FBOEIsR0FBakMsR0FBdUN6UCxHQVBoRDtBQVFBLFNBQU8sSUFBSXFrQyxTQUFKLENBQWNsbEIsQ0FBQyxHQUFHLENBQUosR0FBUUEsQ0FBQyxHQUFHLEdBQVosR0FBa0JBLENBQWhDLEVBQW1DM04sQ0FBbkMsRUFBc0N3TSxDQUF0QyxFQUF5Q3JYLENBQUMsQ0FBQ2dZLE9BQTNDLENBQVA7QUFDRDs7QUFFYyxTQUFTMk8sbUJBQVQsQ0FBbUJuTyxDQUFuQixFQUFzQjNOLENBQXRCLEVBQXlCd00sQ0FBekIsRUFBNEJXLE9BQTVCLEVBQXFDO0FBQ2xELFNBQU9sa0IsU0FBUyxDQUFDdEIsTUFBVixLQUFxQixDQUFyQixHQUF5QmlyQyxnQkFBZ0IsQ0FBQ2psQixDQUFELENBQXpDLEdBQStDLElBQUlrbEIsU0FBSixDQUFjbGxCLENBQWQsRUFBaUIzTixDQUFqQixFQUFvQndNLENBQXBCLEVBQXVCVyxPQUFPLElBQUksSUFBWCxHQUFrQixDQUFsQixHQUFzQkEsT0FBN0MsQ0FBdEQ7QUFDRDtBQUVNLFNBQVMwbEIsU0FBVCxDQUFtQmxsQixDQUFuQixFQUFzQjNOLENBQXRCLEVBQXlCd00sQ0FBekIsRUFBNEJXLE9BQTVCLEVBQXFDO0FBQzFDLE9BQUtRLENBQUwsR0FBUyxDQUFDQSxDQUFWO0FBQ0EsT0FBSzNOLENBQUwsR0FBUyxDQUFDQSxDQUFWO0FBQ0EsT0FBS3dNLENBQUwsR0FBUyxDQUFDQSxDQUFWO0FBQ0EsT0FBS1csT0FBTCxHQUFlLENBQUNBLE9BQWhCO0FBQ0Q7QUFFRDlMLFVBQU0sQ0FBQ3d4QixTQUFELEVBQVkvVyxtQkFBWixFQUF1QjVhLE1BQU0sQ0FBQ0ksS0FBRCxFQUFRO0FBQ3pDRSxFQUFBQSxRQUFRLEVBQUUsVUFBUzRMLENBQVQsRUFBWTtBQUNwQkEsSUFBQUEsQ0FBQyxHQUFHQSxDQUFDLElBQUksSUFBTCxHQUFZNUwsUUFBWixHQUF1Qi9ULElBQUksQ0FBQzRmLEdBQUwsQ0FBUzdMLFFBQVQsRUFBbUI0TCxDQUFuQixDQUEzQjtBQUNBLFdBQU8sSUFBSXlsQixTQUFKLENBQWMsS0FBS2xsQixDQUFuQixFQUFzQixLQUFLM04sQ0FBM0IsRUFBOEIsS0FBS3dNLENBQUwsR0FBU1ksQ0FBdkMsRUFBMEMsS0FBS0QsT0FBL0MsQ0FBUDtBQUNELEdBSndDO0FBS3pDNUwsRUFBQUEsTUFBTSxFQUFFLFVBQVM2TCxDQUFULEVBQVk7QUFDbEJBLElBQUFBLENBQUMsR0FBR0EsQ0FBQyxJQUFJLElBQUwsR0FBWTdMLE1BQVosR0FBcUI5VCxJQUFJLENBQUM0ZixHQUFMLENBQVM5TCxNQUFULEVBQWlCNkwsQ0FBakIsQ0FBekI7QUFDQSxXQUFPLElBQUl5bEIsU0FBSixDQUFjLEtBQUtsbEIsQ0FBbkIsRUFBc0IsS0FBSzNOLENBQTNCLEVBQThCLEtBQUt3TSxDQUFMLEdBQVNZLENBQXZDLEVBQTBDLEtBQUtELE9BQS9DLENBQVA7QUFDRCxHQVJ3QztBQVN6Q3RCLEVBQUFBLEdBQUcsRUFBRSxZQUFXO0FBQ2QsUUFBSThCLENBQUMsR0FBR0gsS0FBSyxDQUFDLEtBQUtHLENBQU4sQ0FBTCxHQUFnQixDQUFoQixHQUFvQixDQUFDLEtBQUtBLENBQUwsR0FBUyxHQUFWLElBQWlCMGtCLE9BQTdDO0FBQUEsUUFDSTdsQixDQUFDLEdBQUcsQ0FBQyxLQUFLQSxDQURkO0FBQUEsUUFFSXJlLENBQUMsR0FBR3FmLEtBQUssQ0FBQyxLQUFLeE4sQ0FBTixDQUFMLEdBQWdCLENBQWhCLEdBQW9CLEtBQUtBLENBQUwsR0FBU3dNLENBQVQsSUFBYyxJQUFJQSxDQUFsQixDQUY1QjtBQUFBLFFBR0l1bUIsSUFBSSxHQUFHdGxDLElBQUksQ0FBQ3VsQyxHQUFMLENBQVNybEIsQ0FBVCxDQUhYO0FBQUEsUUFJSXNsQixJQUFJLEdBQUd4bEMsSUFBSSxDQUFDeWxDLEdBQUwsQ0FBU3ZsQixDQUFULENBSlg7QUFLQSxXQUFPLElBQUlkLEdBQUosQ0FDTCxPQUFPTCxDQUFDLEdBQUdyZSxDQUFDLElBQUk0MkIsQ0FBQyxHQUFHZ08sSUFBSixHQUFXVCxDQUFDLEdBQUdXLElBQW5CLENBQVosQ0FESyxFQUVMLE9BQU96bUIsQ0FBQyxHQUFHcmUsQ0FBQyxJQUFJb2tDLENBQUMsR0FBR1EsSUFBSixHQUFXUCxDQUFDLEdBQUdTLElBQW5CLENBQVosQ0FGSyxFQUdMLE9BQU96bUIsQ0FBQyxHQUFHcmUsQ0FBQyxJQUFJNHJCLENBQUMsR0FBR2daLElBQVIsQ0FBWixDQUhLLEVBSUwsS0FBSzVsQixPQUpBLENBQVA7QUFNRDtBQXJCd0MsQ0FBUixDQUE3QixDQUFOLEM7O0FDdENBO0FBQ0E7O0FBRUEsU0FBUzJPLFNBQVQsQ0FBbUJuTixHQUFuQixFQUF3QjtBQUN0QixTQUFRLFNBQVN5a0IsY0FBVCxDQUF3QjFrQixDQUF4QixFQUEyQjtBQUNqQ0EsSUFBQUEsQ0FBQyxHQUFHLENBQUNBLENBQUw7O0FBRUEsYUFBU29OLFNBQVQsQ0FBbUJqZSxLQUFuQixFQUEwQm9SLEdBQTFCLEVBQStCO0FBQzdCLFVBQUl0QixDQUFDLEdBQUdnQixHQUFHLENBQUMsQ0FBQzlRLEtBQUssR0FBR3MxQixtQkFBYyxDQUFDdDFCLEtBQUQsQ0FBdkIsRUFBZ0M4UCxDQUFqQyxFQUFvQyxDQUFDc0IsR0FBRyxHQUFHa2tCLG1CQUFjLENBQUNsa0IsR0FBRCxDQUFyQixFQUE0QnRCLENBQWhFLENBQVg7QUFBQSxVQUNJM04sQ0FBQyxHQUFHeUwsT0FBSyxDQUFDNU4sS0FBSyxDQUFDbUMsQ0FBUCxFQUFVaVAsR0FBRyxDQUFDalAsQ0FBZCxDQURiO0FBQUEsVUFFSXdNLENBQUMsR0FBR2YsT0FBSyxDQUFDNU4sS0FBSyxDQUFDMk8sQ0FBUCxFQUFVeUMsR0FBRyxDQUFDekMsQ0FBZCxDQUZiO0FBQUEsVUFHSVcsT0FBTyxHQUFHMUIsT0FBSyxDQUFDNU4sS0FBSyxDQUFDc1AsT0FBUCxFQUFnQjhCLEdBQUcsQ0FBQzlCLE9BQXBCLENBSG5CO0FBSUEsYUFBTyxVQUFTdFksQ0FBVCxFQUFZO0FBQ2pCZ0osUUFBQUEsS0FBSyxDQUFDOFAsQ0FBTixHQUFVQSxDQUFDLENBQUM5WSxDQUFELENBQVg7QUFDQWdKLFFBQUFBLEtBQUssQ0FBQ21DLENBQU4sR0FBVUEsQ0FBQyxDQUFDbkwsQ0FBRCxDQUFYO0FBQ0FnSixRQUFBQSxLQUFLLENBQUMyTyxDQUFOLEdBQVVBLENBQUMsQ0FBQy9lLElBQUksQ0FBQzRmLEdBQUwsQ0FBU3hZLENBQVQsRUFBWTZaLENBQVosQ0FBRCxDQUFYO0FBQ0E3USxRQUFBQSxLQUFLLENBQUNzUCxPQUFOLEdBQWdCQSxPQUFPLENBQUN0WSxDQUFELENBQXZCO0FBQ0EsZUFBT2dKLEtBQUssR0FBRyxFQUFmO0FBQ0QsT0FORDtBQU9EOztBQUVEaWUsSUFBQUEsU0FBUyxDQUFDbE4sS0FBVixHQUFrQndrQixjQUFsQjtBQUVBLFdBQU90WCxTQUFQO0FBQ0QsR0FwQk0sQ0FvQkosQ0FwQkksQ0FBUDtBQXFCRDs7QUFFRCxvREFBZUEsU0FBUyxDQUFDbk4sR0FBRCxDQUF4QjtBQUNPLElBQUkwa0IsYUFBYSxHQUFHdlgsU0FBUyxDQUFDclEsT0FBRCxDQUE3QixDOztBQzVCUDtBQUNBO0FBRU8sSUFBSThuQixJQUFJLEdBQUdELGFBQXdCLENBQUN4WCxtQkFBUyxDQUFDLENBQUMsR0FBRixFQUFPLElBQVAsRUFBYSxJQUFiLENBQVYsRUFBOEJBLG1CQUFTLENBQUMsRUFBRCxFQUFLLElBQUwsRUFBVyxHQUFYLENBQXZDLENBQW5DO0FBRUEsSUFBSTBYLElBQUksR0FBR0YsYUFBd0IsQ0FBQ3hYLG1CQUFTLENBQUMsR0FBRCxFQUFNLElBQU4sRUFBWSxJQUFaLENBQVYsRUFBNkJBLG1CQUFTLENBQUMsRUFBRCxFQUFLLElBQUwsRUFBVyxHQUFYLENBQXRDLENBQW5DO0FBRVAsSUFBSWxpQixDQUFDLEdBQUdraUIsbUJBQVMsRUFBakI7QUFFQSw2QkFBZSxpQkFBU2puQixDQUFULEVBQVk7QUFDekIsTUFBSUEsQ0FBQyxHQUFHLENBQUosSUFBU0EsQ0FBQyxHQUFHLENBQWpCLEVBQW9CQSxDQUFDLElBQUlwSCxJQUFJLENBQUM4Z0IsS0FBTCxDQUFXMVosQ0FBWCxDQUFMO0FBQ3BCLE1BQUk0K0IsRUFBRSxHQUFHaG1DLElBQUksQ0FBQzJuQixHQUFMLENBQVN2Z0IsQ0FBQyxHQUFHLEdBQWIsQ0FBVDtBQUNBK0UsRUFBQUEsQ0FBQyxDQUFDK1QsQ0FBRixHQUFNLE1BQU05WSxDQUFOLEdBQVUsR0FBaEI7QUFDQStFLEVBQUFBLENBQUMsQ0FBQ29HLENBQUYsR0FBTSxNQUFNLE1BQU15ekIsRUFBbEI7QUFDQTc1QixFQUFBQSxDQUFDLENBQUM0UyxDQUFGLEdBQU0sTUFBTSxNQUFNaW5CLEVBQWxCO0FBQ0EsU0FBTzc1QixDQUFDLEdBQUcsRUFBWDtBQUNELEM7O0FDaEJEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDekNBO0FBRUEsNkJBQWUsb0JBQVN4UyxRQUFULEVBQW1CO0FBQ2hDLFNBQU8sT0FBT0EsUUFBUCxLQUFvQixRQUFwQixHQUNELElBQUlFLFNBQUosQ0FBYyxDQUFDLENBQUNtSixRQUFRLENBQUNwSixhQUFULENBQXVCRCxRQUF2QixDQUFELENBQUQsQ0FBZCxFQUFvRCxDQUFDcUosUUFBUSxDQUFDZ0QsZUFBVixDQUFwRCxDQURDLEdBRUQsSUFBSW5NLFNBQUosQ0FBYyxDQUFDLENBQUNGLFFBQUQsQ0FBRCxDQUFkLEVBQTRCaVIsSUFBNUIsQ0FGTjtBQUdELEM7O0FDTkQ7QUFDQTtBQUVBLDZCQUFlLG9CQUFTcEosSUFBVCxFQUFlO0FBQzVCLFNBQU8xSCxVQUFNLENBQUNzTSxPQUFPLENBQUM1RSxJQUFELENBQVAsQ0FBYzVHLElBQWQsQ0FBbUJvSSxRQUFRLENBQUNnRCxlQUE1QixDQUFELENBQWI7QUFDRCxDOztBQ0xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ2JBLE1BQU1pbEMsRUFBRSxHQUFHanJDLElBQUksQ0FBQ3lRLEVBQWhCO0FBQUEsTUFDSXk2QixHQUFHLEdBQUcsSUFBSUQsRUFEZDtBQUFBLE1BRUlFLE9BQU8sR0FBRyxJQUZkO0FBQUEsTUFHSUMsVUFBVSxHQUFHRixHQUFHLEdBQUdDLE9BSHZCOztBQUtBLFNBQVNFLElBQVQsR0FBZ0I7QUFDZCxPQUFLQyxHQUFMLEdBQVcsS0FBS0MsR0FBTCxHQUFXO0FBQ3RCLE9BQUtDLEdBQUwsR0FBVyxLQUFLQyxHQUFMLEdBQVcsSUFEdEIsQ0FEYyxDQUVjOztBQUM1QixPQUFLLy9CLENBQUwsR0FBUyxFQUFUO0FBQ0Q7O0FBRUQsU0FBUzJwQixTQUFULEdBQWdCO0FBQ2QsU0FBTyxJQUFJZ1csSUFBSixFQUFQO0FBQ0Q7O0FBRURBLElBQUksQ0FBQ3Z2QyxTQUFMLEdBQWlCdTVCLFNBQUksQ0FBQ3Y1QixTQUFMLEdBQWlCO0FBQ2hDcUIsRUFBQUEsV0FBVyxFQUFFa3VDLElBRG1CO0FBRWhDSyxFQUFBQSxNQUFNLEVBQUUsVUFBUzF3QyxDQUFULEVBQVlpbUIsQ0FBWixFQUFlO0FBQ3JCLFNBQUt2VixDQUFMLElBQVUsT0FBTyxLQUFLNC9CLEdBQUwsR0FBVyxLQUFLRSxHQUFMLEdBQVcsQ0FBQ3h3QyxDQUE5QixJQUFtQyxHQUFuQyxJQUEwQyxLQUFLdXdDLEdBQUwsR0FBVyxLQUFLRSxHQUFMLEdBQVcsQ0FBQ3hxQixDQUFqRSxDQUFWO0FBQ0QsR0FKK0I7QUFLaEMwcUIsRUFBQUEsU0FBUyxFQUFFLFlBQVc7QUFDcEIsUUFBSSxLQUFLSCxHQUFMLEtBQWEsSUFBakIsRUFBdUI7QUFDckIsV0FBS0EsR0FBTCxHQUFXLEtBQUtGLEdBQWhCLEVBQXFCLEtBQUtHLEdBQUwsR0FBVyxLQUFLRixHQUFyQztBQUNBLFdBQUs3L0IsQ0FBTCxJQUFVLEdBQVY7QUFDRDtBQUNGLEdBVitCO0FBV2hDa2dDLEVBQUFBLE1BQU0sRUFBRSxVQUFTNXdDLENBQVQsRUFBWWltQixDQUFaLEVBQWU7QUFDckIsU0FBS3ZWLENBQUwsSUFBVSxPQUFPLEtBQUs4L0IsR0FBTCxHQUFXLENBQUN4d0MsQ0FBbkIsSUFBd0IsR0FBeEIsSUFBK0IsS0FBS3l3QyxHQUFMLEdBQVcsQ0FBQ3hxQixDQUEzQyxDQUFWO0FBQ0QsR0FiK0I7QUFjaEM0cUIsRUFBQUEsZ0JBQWdCLEVBQUUsVUFBUzlKLEVBQVQsRUFBYStKLEVBQWIsRUFBaUI5d0MsQ0FBakIsRUFBb0JpbUIsQ0FBcEIsRUFBdUI7QUFDdkMsU0FBS3ZWLENBQUwsSUFBVSxNQUFPLENBQUNxMkIsRUFBUixHQUFjLEdBQWQsR0FBcUIsQ0FBQytKLEVBQXRCLEdBQTRCLEdBQTVCLElBQW1DLEtBQUtOLEdBQUwsR0FBVyxDQUFDeHdDLENBQS9DLElBQW9ELEdBQXBELElBQTJELEtBQUt5d0MsR0FBTCxHQUFXLENBQUN4cUIsQ0FBdkUsQ0FBVjtBQUNELEdBaEIrQjtBQWlCaEM4cUIsRUFBQUEsYUFBYSxFQUFFLFVBQVNoSyxFQUFULEVBQWErSixFQUFiLEVBQWlCRSxFQUFqQixFQUFxQkMsRUFBckIsRUFBeUJqeEMsQ0FBekIsRUFBNEJpbUIsQ0FBNUIsRUFBK0I7QUFDNUMsU0FBS3ZWLENBQUwsSUFBVSxNQUFPLENBQUNxMkIsRUFBUixHQUFjLEdBQWQsR0FBcUIsQ0FBQytKLEVBQXRCLEdBQTRCLEdBQTVCLEdBQW1DLENBQUNFLEVBQXBDLEdBQTBDLEdBQTFDLEdBQWlELENBQUNDLEVBQWxELEdBQXdELEdBQXhELElBQStELEtBQUtULEdBQUwsR0FBVyxDQUFDeHdDLENBQTNFLElBQWdGLEdBQWhGLElBQXVGLEtBQUt5d0MsR0FBTCxHQUFXLENBQUN4cUIsQ0FBbkcsQ0FBVjtBQUNELEdBbkIrQjtBQW9CaENpckIsRUFBQUEsS0FBSyxFQUFFLFVBQVNuSyxFQUFULEVBQWErSixFQUFiLEVBQWlCRSxFQUFqQixFQUFxQkMsRUFBckIsRUFBeUIxc0IsQ0FBekIsRUFBNEI7QUFDakN3aUIsSUFBQUEsRUFBRSxHQUFHLENBQUNBLEVBQU4sRUFBVStKLEVBQUUsR0FBRyxDQUFDQSxFQUFoQixFQUFvQkUsRUFBRSxHQUFHLENBQUNBLEVBQTFCLEVBQThCQyxFQUFFLEdBQUcsQ0FBQ0EsRUFBcEMsRUFBd0Mxc0IsQ0FBQyxHQUFHLENBQUNBLENBQTdDO0FBQ0EsUUFBSXVpQixFQUFFLEdBQUcsS0FBSzBKLEdBQWQ7QUFBQSxRQUNJVyxFQUFFLEdBQUcsS0FBS1YsR0FEZDtBQUFBLFFBRUlXLEdBQUcsR0FBR0osRUFBRSxHQUFHakssRUFGZjtBQUFBLFFBR0lzSyxHQUFHLEdBQUdKLEVBQUUsR0FBR0gsRUFIZjtBQUFBLFFBSUlRLEdBQUcsR0FBR3hLLEVBQUUsR0FBR0MsRUFKZjtBQUFBLFFBS0l3SyxHQUFHLEdBQUdKLEVBQUUsR0FBR0wsRUFMZjtBQUFBLFFBTUlVLEtBQUssR0FBR0YsR0FBRyxHQUFHQSxHQUFOLEdBQVlDLEdBQUcsR0FBR0EsR0FOOUIsQ0FGaUMsQ0FVakM7O0FBQ0EsUUFBSWh0QixDQUFDLEdBQUcsQ0FBUixFQUFXLE1BQU0sSUFBSTNULEtBQUosQ0FBVSxzQkFBc0IyVCxDQUFoQyxDQUFOLENBWHNCLENBYWpDOztBQUNBLFFBQUksS0FBS2lzQixHQUFMLEtBQWEsSUFBakIsRUFBdUI7QUFDckIsV0FBSzkvQixDQUFMLElBQVUsT0FBTyxLQUFLOC9CLEdBQUwsR0FBV3pKLEVBQWxCLElBQXdCLEdBQXhCLElBQStCLEtBQUswSixHQUFMLEdBQVdLLEVBQTFDLENBQVY7QUFDRCxLQUZELENBSUE7QUFKQSxTQUtLLElBQUksRUFBRVUsS0FBSyxHQUFHckIsT0FBVixDQUFKLEVBQXVCLENBQXZCLENBRUw7QUFDQTtBQUNBO0FBSkssU0FLQSxJQUFJLEVBQUVuckMsSUFBSSxDQUFDMm5CLEdBQUwsQ0FBUzRrQixHQUFHLEdBQUdILEdBQU4sR0FBWUMsR0FBRyxHQUFHQyxHQUEzQixJQUFrQ25CLE9BQXBDLEtBQWdELENBQUM1ckIsQ0FBckQsRUFBd0Q7QUFDM0QsV0FBSzdULENBQUwsSUFBVSxPQUFPLEtBQUs4L0IsR0FBTCxHQUFXekosRUFBbEIsSUFBd0IsR0FBeEIsSUFBK0IsS0FBSzBKLEdBQUwsR0FBV0ssRUFBMUMsQ0FBVjtBQUNELEtBRkksQ0FJTDtBQUpLLFNBS0E7QUFDSCxVQUFJVyxHQUFHLEdBQUdULEVBQUUsR0FBR2xLLEVBQWY7QUFBQSxVQUNJNEssR0FBRyxHQUFHVCxFQUFFLEdBQUdFLEVBRGY7QUFBQSxVQUVJUSxLQUFLLEdBQUdQLEdBQUcsR0FBR0EsR0FBTixHQUFZQyxHQUFHLEdBQUdBLEdBRjlCO0FBQUEsVUFHSU8sS0FBSyxHQUFHSCxHQUFHLEdBQUdBLEdBQU4sR0FBWUMsR0FBRyxHQUFHQSxHQUg5QjtBQUFBLFVBSUlHLEdBQUcsR0FBRzdzQyxJQUFJLENBQUNrUixJQUFMLENBQVV5N0IsS0FBVixDQUpWO0FBQUEsVUFLSUcsR0FBRyxHQUFHOXNDLElBQUksQ0FBQ2tSLElBQUwsQ0FBVXM3QixLQUFWLENBTFY7QUFBQSxVQU1JenRCLENBQUMsR0FBR1EsQ0FBQyxHQUFHdmYsSUFBSSxDQUFDcWQsR0FBTCxDQUFTLENBQUM0dEIsRUFBRSxHQUFHanJDLElBQUksQ0FBQytzQyxJQUFMLENBQVUsQ0FBQ0osS0FBSyxHQUFHSCxLQUFSLEdBQWdCSSxLQUFqQixLQUEyQixJQUFJQyxHQUFKLEdBQVVDLEdBQXJDLENBQVYsQ0FBTixJQUE4RCxDQUF2RSxDQU5aO0FBQUEsVUFPSUUsR0FBRyxHQUFHanVCLENBQUMsR0FBRyt0QixHQVBkO0FBQUEsVUFRSUcsR0FBRyxHQUFHbHVCLENBQUMsR0FBRzh0QixHQVJkLENBREcsQ0FXSDs7QUFDQSxVQUFJN3NDLElBQUksQ0FBQzJuQixHQUFMLENBQVNxbEIsR0FBRyxHQUFHLENBQWYsSUFBb0I3QixPQUF4QixFQUFpQztBQUMvQixhQUFLei9CLENBQUwsSUFBVSxPQUFPcTJCLEVBQUUsR0FBR2lMLEdBQUcsR0FBR1YsR0FBbEIsSUFBeUIsR0FBekIsSUFBZ0NSLEVBQUUsR0FBR2tCLEdBQUcsR0FBR1QsR0FBM0MsQ0FBVjtBQUNEOztBQUVELFdBQUs3Z0MsQ0FBTCxJQUFVLE1BQU02VCxDQUFOLEdBQVUsR0FBVixHQUFnQkEsQ0FBaEIsR0FBb0IsT0FBcEIsR0FBK0IsRUFBRWd0QixHQUFHLEdBQUdFLEdBQU4sR0FBWUgsR0FBRyxHQUFHSSxHQUFwQixDQUEvQixHQUEyRCxHQUEzRCxJQUFrRSxLQUFLbEIsR0FBTCxHQUFXekosRUFBRSxHQUFHa0wsR0FBRyxHQUFHYixHQUF4RixJQUErRixHQUEvRixJQUFzRyxLQUFLWCxHQUFMLEdBQVdLLEVBQUUsR0FBR21CLEdBQUcsR0FBR1osR0FBNUgsQ0FBVjtBQUNEO0FBQ0YsR0FuRStCO0FBb0VoQ2EsRUFBQUEsR0FBRyxFQUFFLFVBQVNseUMsQ0FBVCxFQUFZaW1CLENBQVosRUFBZTFCLENBQWYsRUFBa0I0dEIsRUFBbEIsRUFBc0JDLEVBQXRCLEVBQTBCQyxHQUExQixFQUErQjtBQUNsQ3J5QyxJQUFBQSxDQUFDLEdBQUcsQ0FBQ0EsQ0FBTCxFQUFRaW1CLENBQUMsR0FBRyxDQUFDQSxDQUFiLEVBQWdCMUIsQ0FBQyxHQUFHLENBQUNBLENBQXJCLEVBQXdCOHRCLEdBQUcsR0FBRyxDQUFDLENBQUNBLEdBQWhDO0FBQ0EsUUFBSXpnQixFQUFFLEdBQUdyTixDQUFDLEdBQUd2ZixJQUFJLENBQUN1bEMsR0FBTCxDQUFTNEgsRUFBVCxDQUFiO0FBQUEsUUFDSXRnQixFQUFFLEdBQUd0TixDQUFDLEdBQUd2ZixJQUFJLENBQUN5bEMsR0FBTCxDQUFTMEgsRUFBVCxDQURiO0FBQUEsUUFFSXJMLEVBQUUsR0FBRzltQyxDQUFDLEdBQUc0eEIsRUFGYjtBQUFBLFFBR0l1ZixFQUFFLEdBQUdsckIsQ0FBQyxHQUFHNEwsRUFIYjtBQUFBLFFBSUl5Z0IsRUFBRSxHQUFHLElBQUlELEdBSmI7QUFBQSxRQUtJRSxFQUFFLEdBQUdGLEdBQUcsR0FBR0YsRUFBRSxHQUFHQyxFQUFSLEdBQWFBLEVBQUUsR0FBR0QsRUFMOUIsQ0FGa0MsQ0FTbEM7O0FBQ0EsUUFBSTV0QixDQUFDLEdBQUcsQ0FBUixFQUFXLE1BQU0sSUFBSTNULEtBQUosQ0FBVSxzQkFBc0IyVCxDQUFoQyxDQUFOLENBVnVCLENBWWxDOztBQUNBLFFBQUksS0FBS2lzQixHQUFMLEtBQWEsSUFBakIsRUFBdUI7QUFDckIsV0FBSzkvQixDQUFMLElBQVUsTUFBTW8yQixFQUFOLEdBQVcsR0FBWCxHQUFpQnFLLEVBQTNCO0FBQ0QsS0FGRCxDQUlBO0FBSkEsU0FLSyxJQUFJbnNDLElBQUksQ0FBQzJuQixHQUFMLENBQVMsS0FBSzZqQixHQUFMLEdBQVcxSixFQUFwQixJQUEwQnFKLE9BQTFCLElBQXFDbnJDLElBQUksQ0FBQzJuQixHQUFMLENBQVMsS0FBSzhqQixHQUFMLEdBQVdVLEVBQXBCLElBQTBCaEIsT0FBbkUsRUFBNEU7QUFDL0UsV0FBS3ovQixDQUFMLElBQVUsTUFBTW8yQixFQUFOLEdBQVcsR0FBWCxHQUFpQnFLLEVBQTNCO0FBQ0QsS0FwQmlDLENBc0JsQzs7O0FBQ0EsUUFBSSxDQUFDNXNCLENBQUwsRUFBUSxPQXZCMEIsQ0F5QmxDOztBQUNBLFFBQUlndUIsRUFBRSxHQUFHLENBQVQsRUFBWUEsRUFBRSxHQUFHQSxFQUFFLEdBQUdyQyxHQUFMLEdBQVdBLEdBQWhCLENBMUJzQixDQTRCbEM7O0FBQ0EsUUFBSXFDLEVBQUUsR0FBR25DLFVBQVQsRUFBcUI7QUFDbkIsV0FBSzEvQixDQUFMLElBQVUsTUFBTTZULENBQU4sR0FBVSxHQUFWLEdBQWdCQSxDQUFoQixHQUFvQixPQUFwQixHQUE4Qit0QixFQUE5QixHQUFtQyxHQUFuQyxJQUEwQ3R5QyxDQUFDLEdBQUc0eEIsRUFBOUMsSUFBb0QsR0FBcEQsSUFBMkQzTCxDQUFDLEdBQUc0TCxFQUEvRCxJQUFxRSxHQUFyRSxHQUEyRXROLENBQTNFLEdBQStFLEdBQS9FLEdBQXFGQSxDQUFyRixHQUF5RixPQUF6RixHQUFtRyt0QixFQUFuRyxHQUF3RyxHQUF4RyxJQUErRyxLQUFLOUIsR0FBTCxHQUFXMUosRUFBMUgsSUFBZ0ksR0FBaEksSUFBdUksS0FBSzJKLEdBQUwsR0FBV1UsRUFBbEosQ0FBVjtBQUNELEtBRkQsQ0FJQTtBQUpBLFNBS0ssSUFBSW9CLEVBQUUsR0FBR3BDLE9BQVQsRUFBa0I7QUFDckIsV0FBS3ovQixDQUFMLElBQVUsTUFBTTZULENBQU4sR0FBVSxHQUFWLEdBQWdCQSxDQUFoQixHQUFvQixLQUFwQixHQUE2QixFQUFFZ3VCLEVBQUUsSUFBSXRDLEVBQVIsQ0FBN0IsR0FBNEMsR0FBNUMsR0FBa0RxQyxFQUFsRCxHQUF1RCxHQUF2RCxJQUE4RCxLQUFLOUIsR0FBTCxHQUFXeHdDLENBQUMsR0FBR3VrQixDQUFDLEdBQUd2ZixJQUFJLENBQUN1bEMsR0FBTCxDQUFTNkgsRUFBVCxDQUFqRixJQUFpRyxHQUFqRyxJQUF3RyxLQUFLM0IsR0FBTCxHQUFXeHFCLENBQUMsR0FBRzFCLENBQUMsR0FBR3ZmLElBQUksQ0FBQ3lsQyxHQUFMLENBQVMySCxFQUFULENBQTNILENBQVY7QUFDRDtBQUNGLEdBekcrQjtBQTBHaENJLEVBQUFBLElBQUksRUFBRSxVQUFTeHlDLENBQVQsRUFBWWltQixDQUFaLEVBQWVzSCxDQUFmLEVBQWtCckksQ0FBbEIsRUFBcUI7QUFDekIsU0FBS3hVLENBQUwsSUFBVSxPQUFPLEtBQUs0L0IsR0FBTCxHQUFXLEtBQUtFLEdBQUwsR0FBVyxDQUFDeHdDLENBQTlCLElBQW1DLEdBQW5DLElBQTBDLEtBQUt1d0MsR0FBTCxHQUFXLEtBQUtFLEdBQUwsR0FBVyxDQUFDeHFCLENBQWpFLElBQXNFLEdBQXRFLEdBQTZFLENBQUNzSCxDQUE5RSxHQUFtRixHQUFuRixHQUEwRixDQUFDckksQ0FBM0YsR0FBZ0csR0FBaEcsR0FBdUcsQ0FBQ3FJLENBQXhHLEdBQTZHLEdBQXZIO0FBQ0QsR0E1RytCO0FBNkdoQzNKLEVBQUFBLFFBQVEsRUFBRSxZQUFXO0FBQ25CLFdBQU8sS0FBS2xULENBQVo7QUFDRDtBQS9HK0IsQ0FBbEM7QUFrSEEsK0NBQWUycEIsU0FBZixFOztBQ2pJTyxJQUFJMXpCLEtBQUssR0FBR3ZILEtBQUssQ0FBQzBCLFNBQU4sQ0FBZ0I2RixLQUE1QjtBQUVQLDZCQUFlLDRCQUFTM0csQ0FBVCxFQUFZO0FBQ3pCLFNBQU8sT0FBT0EsQ0FBUCxLQUFhLFFBQWIsSUFBeUIsWUFBWUEsQ0FBckMsR0FDSEEsQ0FERyxDQUNEO0FBREMsSUFFSFosS0FBSyxDQUFDYyxJQUFOLENBQVdGLENBQVgsQ0FGSixDQUR5QixDQUdOO0FBQ3BCLEM7O0FDTkQsNkJBQWUsK0JBQVNBLENBQVQsRUFBWTtBQUN6QixTQUFPLFNBQVN3QyxRQUFULEdBQW9CO0FBQ3pCLFdBQU94QyxDQUFQO0FBQ0QsR0FGRDtBQUdELEM7O0FDSkQ7O0FBRUEsTUFBTTB5QyxJQUFOLENBQVc7QUFDVHZ3QyxFQUFBQSxXQUFXLENBQUN3QyxPQUFELEVBQVUzRSxDQUFWLEVBQWE7QUFDdEIsU0FBSzJ5QyxRQUFMLEdBQWdCaHVDLE9BQWhCO0FBQ0EsU0FBS2l1QyxFQUFMLEdBQVU1eUMsQ0FBVjtBQUNEOztBQUNENnlDLEVBQUFBLFNBQVMsR0FBRztBQUNWLFNBQUtDLEtBQUwsR0FBYSxDQUFiO0FBQ0Q7O0FBQ0RDLEVBQUFBLE9BQU8sR0FBRztBQUNSLFNBQUtELEtBQUwsR0FBYS9zQyxHQUFiO0FBQ0Q7O0FBQ0RpdEMsRUFBQUEsU0FBUyxHQUFHO0FBQ1YsU0FBS0MsTUFBTCxHQUFjLENBQWQ7QUFDRDs7QUFDREMsRUFBQUEsT0FBTyxHQUFHO0FBQ1IsUUFBSSxLQUFLSixLQUFMLElBQWUsS0FBS0EsS0FBTCxLQUFlLENBQWYsSUFBb0IsS0FBS0csTUFBTCxLQUFnQixDQUF2RCxFQUEyRCxLQUFLTixRQUFMLENBQWNoQyxTQUFkO0FBQzNELFNBQUttQyxLQUFMLEdBQWEsSUFBSSxLQUFLQSxLQUF0QjtBQUNEOztBQUNEL2YsRUFBQUEsS0FBSyxDQUFDL3lCLENBQUQsRUFBSWltQixDQUFKLEVBQU87QUFDVmptQixJQUFBQSxDQUFDLEdBQUcsQ0FBQ0EsQ0FBTCxFQUFRaW1CLENBQUMsR0FBRyxDQUFDQSxDQUFiOztBQUNBLFlBQVEsS0FBS2d0QixNQUFiO0FBQ0UsV0FBSyxDQUFMO0FBQVE7QUFDTixlQUFLQSxNQUFMLEdBQWMsQ0FBZDtBQUNBLGNBQUksS0FBS0gsS0FBVCxFQUFnQixLQUFLSCxRQUFMLENBQWMvQixNQUFkLENBQXFCNXdDLENBQXJCLEVBQXdCaW1CLENBQXhCLEVBQWhCLEtBQ0ssS0FBSzBzQixRQUFMLENBQWNqQyxNQUFkLENBQXFCMXdDLENBQXJCLEVBQXdCaW1CLENBQXhCO0FBQ0w7QUFDRDs7QUFDRCxXQUFLLENBQUw7QUFBUSxhQUFLZ3RCLE1BQUwsR0FBYyxDQUFkO0FBQWlCOztBQUN6QjtBQUFTO0FBQ1AsY0FBSSxLQUFLTCxFQUFULEVBQWEsS0FBS0QsUUFBTCxDQUFjNUIsYUFBZCxDQUE0QixLQUFLVCxHQUFMLEdBQVcsQ0FBQyxLQUFLQSxHQUFMLEdBQVd0d0MsQ0FBWixJQUFpQixDQUF4RCxFQUEyRCxLQUFLdXdDLEdBQWhFLEVBQXFFLEtBQUtELEdBQTFFLEVBQStFcnFCLENBQS9FLEVBQWtGam1CLENBQWxGLEVBQXFGaW1CLENBQXJGLEVBQWIsS0FDSyxLQUFLMHNCLFFBQUwsQ0FBYzVCLGFBQWQsQ0FBNEIsS0FBS1QsR0FBakMsRUFBc0MsS0FBS0MsR0FBTCxHQUFXLENBQUMsS0FBS0EsR0FBTCxHQUFXdHFCLENBQVosSUFBaUIsQ0FBbEUsRUFBcUVqbUIsQ0FBckUsRUFBd0UsS0FBS3V3QyxHQUE3RSxFQUFrRnZ3QyxDQUFsRixFQUFxRmltQixDQUFyRjtBQUNMO0FBQ0Q7QUFaSDs7QUFjQSxTQUFLcXFCLEdBQUwsR0FBV3R3QyxDQUFYLEVBQWMsS0FBS3V3QyxHQUFMLEdBQVd0cUIsQ0FBekI7QUFDRDs7QUFuQ1E7O0FBc0NYLE1BQU1rdEIsVUFBTixDQUFpQjtBQUNmaHhDLEVBQUFBLFdBQVcsQ0FBQ3dDLE9BQUQsRUFBVTtBQUNuQixTQUFLZ3VDLFFBQUwsR0FBZ0JodUMsT0FBaEI7QUFDRDs7QUFDRHF1QyxFQUFBQSxTQUFTLEdBQUc7QUFDVixTQUFLQyxNQUFMLEdBQWMsQ0FBZDtBQUNEOztBQUNEQyxFQUFBQSxPQUFPLEdBQUcsQ0FBRTs7QUFDWm5nQixFQUFBQSxLQUFLLENBQUMveUIsQ0FBRCxFQUFJaW1CLENBQUosRUFBTztBQUNWam1CLElBQUFBLENBQUMsR0FBRyxDQUFDQSxDQUFMLEVBQVFpbUIsQ0FBQyxHQUFHLENBQUNBLENBQWI7O0FBQ0EsUUFBSSxLQUFLZ3RCLE1BQUwsT0FBa0IsQ0FBdEIsRUFBeUI7QUFDdkIsV0FBSzNDLEdBQUwsR0FBV3R3QyxDQUFYLEVBQWMsS0FBS3V3QyxHQUFMLEdBQVd0cUIsQ0FBekI7QUFDRCxLQUZELE1BRU87QUFDTCxZQUFNbXRCLEVBQUUsR0FBR1gsV0FBVyxDQUFDLEtBQUtuQyxHQUFOLEVBQVcsS0FBS0MsR0FBaEIsQ0FBdEI7QUFDQSxZQUFNOEMsRUFBRSxHQUFHWixXQUFXLENBQUMsS0FBS25DLEdBQU4sRUFBVyxLQUFLQyxHQUFMLEdBQVcsQ0FBQyxLQUFLQSxHQUFMLEdBQVd0cUIsQ0FBWixJQUFpQixDQUF2QyxDQUF0QjtBQUNBLFlBQU1xdEIsRUFBRSxHQUFHYixXQUFXLENBQUN6eUMsQ0FBRCxFQUFJLEtBQUt1d0MsR0FBVCxDQUF0QjtBQUNBLFlBQU1nRCxFQUFFLEdBQUdkLFdBQVcsQ0FBQ3p5QyxDQUFELEVBQUlpbUIsQ0FBSixDQUF0Qjs7QUFDQSxXQUFLMHNCLFFBQUwsQ0FBY2pDLE1BQWQsQ0FBcUIsR0FBRzBDLEVBQXhCOztBQUNBLFdBQUtULFFBQUwsQ0FBYzVCLGFBQWQsQ0FBNEIsR0FBR3NDLEVBQS9CLEVBQW1DLEdBQUdDLEVBQXRDLEVBQTBDLEdBQUdDLEVBQTdDO0FBQ0Q7QUFDRjs7QUFwQmM7O0FBdUJWLFNBQVNDLEtBQVQsQ0FBZTd1QyxPQUFmLEVBQXdCO0FBQzdCLFNBQU8sSUFBSSt0QyxJQUFKLENBQVMvdEMsT0FBVCxFQUFrQixJQUFsQixDQUFQO0FBQ0Q7QUFFTSxTQUFTOHVDLFVBQVQsQ0FBZTl1QyxPQUFmLEVBQXdCO0FBQzdCLFNBQU8sSUFBSSt0QyxJQUFKLENBQVMvdEMsT0FBVCxFQUFrQixLQUFsQixDQUFQO0FBQ0Q7QUFFTSxTQUFTK3VDLGVBQVQsQ0FBb0IvdUMsT0FBcEIsRUFBNkI7QUFDbEMsU0FBTyxJQUFJd3VDLFVBQUosQ0FBZXh1QyxPQUFmLENBQVA7QUFDRCxDOztBQ3pFTSxTQUFTM0UsT0FBVCxDQUFXNHlCLENBQVgsRUFBYztBQUNuQixTQUFPQSxDQUFDLENBQUMsQ0FBRCxDQUFSO0FBQ0Q7QUFFTSxTQUFTM00sT0FBVCxDQUFXMk0sQ0FBWCxFQUFjO0FBQ25CLFNBQU9BLENBQUMsQ0FBQyxDQUFELENBQVI7QUFDRCxDOztBQ05EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBU2loQixVQUFULENBQW9CNTlCLENBQXBCLEVBQXVCO0FBQ3JCLFNBQU9BLENBQUMsQ0FBQytRLE1BQVQ7QUFDRDs7QUFFRCxTQUFTOHNCLFVBQVQsQ0FBb0I3OUIsQ0FBcEIsRUFBdUI7QUFDckIsU0FBT0EsQ0FBQyxDQUFDeWEsTUFBVDtBQUNEOztBQUVNLFNBQVNxakIsU0FBVCxDQUFjQyxLQUFkLEVBQXFCO0FBQzFCLE1BQUlodEIsTUFBTSxHQUFHNnNCLFVBQWI7QUFDQSxNQUFJbmpCLE1BQU0sR0FBR29qQixVQUFiO0FBQ0EsTUFBSTl6QyxDQUFDLEdBQUcyekMsT0FBUjtBQUNBLE1BQUkxdEIsQ0FBQyxHQUFHMnRCLE9BQVI7QUFDQSxNQUFJanZDLE9BQU8sR0FBRyxJQUFkO0FBQ0EsTUFBSXNvQixNQUFNLEdBQUcsSUFBYjs7QUFFQSxXQUFTOG1CLElBQVQsR0FBZ0I7QUFDZCxRQUFJcGMsTUFBSjtBQUNBLFVBQU1zYyxJQUFJLEdBQUd0dEMsVUFBQSxDQUFXbkcsU0FBWCxDQUFiO0FBQ0EsVUFBTStXLENBQUMsR0FBR3lQLE1BQU0sQ0FBQ3ptQixLQUFQLENBQWEsSUFBYixFQUFtQjB6QyxJQUFuQixDQUFWO0FBQ0EsVUFBTTduQyxDQUFDLEdBQUdza0IsTUFBTSxDQUFDbndCLEtBQVAsQ0FBYSxJQUFiLEVBQW1CMHpDLElBQW5CLENBQVY7QUFDQSxRQUFJdHZDLE9BQU8sSUFBSSxJQUFmLEVBQXFCc29CLE1BQU0sR0FBRyttQixLQUFLLENBQUNyYyxNQUFNLEdBQUcwQyxRQUFJLEVBQWQsQ0FBZDtBQUNyQnBOLElBQUFBLE1BQU0sQ0FBQytsQixTQUFQO0FBQ0FpQixJQUFBQSxJQUFJLENBQUMsQ0FBRCxDQUFKLEdBQVUxOEIsQ0FBVixFQUFhMFYsTUFBTSxDQUFDOEYsS0FBUCxDQUFhLENBQUMveUIsQ0FBQyxDQUFDTyxLQUFGLENBQVEsSUFBUixFQUFjMHpDLElBQWQsQ0FBZCxFQUFtQyxDQUFDaHVCLENBQUMsQ0FBQzFsQixLQUFGLENBQVEsSUFBUixFQUFjMHpDLElBQWQsQ0FBcEMsQ0FBYjtBQUNBQSxJQUFBQSxJQUFJLENBQUMsQ0FBRCxDQUFKLEdBQVU3bkMsQ0FBVixFQUFhNmdCLE1BQU0sQ0FBQzhGLEtBQVAsQ0FBYSxDQUFDL3lCLENBQUMsQ0FBQ08sS0FBRixDQUFRLElBQVIsRUFBYzB6QyxJQUFkLENBQWQsRUFBbUMsQ0FBQ2h1QixDQUFDLENBQUMxbEIsS0FBRixDQUFRLElBQVIsRUFBYzB6QyxJQUFkLENBQXBDLENBQWI7QUFDQWhuQixJQUFBQSxNQUFNLENBQUNpbUIsT0FBUDtBQUNBLFFBQUl2YixNQUFKLEVBQVksT0FBTzFLLE1BQU0sR0FBRyxJQUFULEVBQWUwSyxNQUFNLEdBQUcsRUFBVCxJQUFlLElBQXJDO0FBQ2I7O0FBRURvYyxFQUFBQSxJQUFJLENBQUMvc0IsTUFBTCxHQUFjLFVBQVN0VyxDQUFULEVBQVk7QUFDeEIsV0FBT2xRLFNBQVMsQ0FBQ3RCLE1BQVYsSUFBb0I4bkIsTUFBTSxHQUFHdFcsQ0FBVCxFQUFZcWpDLElBQWhDLElBQXdDL3NCLE1BQS9DO0FBQ0QsR0FGRDs7QUFJQStzQixFQUFBQSxJQUFJLENBQUNyakIsTUFBTCxHQUFjLFVBQVNoZ0IsQ0FBVCxFQUFZO0FBQ3hCLFdBQU9sUSxTQUFTLENBQUN0QixNQUFWLElBQW9Cd3hCLE1BQU0sR0FBR2hnQixDQUFULEVBQVlxakMsSUFBaEMsSUFBd0NyakIsTUFBL0M7QUFDRCxHQUZEOztBQUlBcWpCLEVBQUFBLElBQUksQ0FBQy96QyxDQUFMLEdBQVMsVUFBUzBRLENBQVQsRUFBWTtBQUNuQixXQUFPbFEsU0FBUyxDQUFDdEIsTUFBVixJQUFvQmMsQ0FBQyxHQUFHLE9BQU8wUSxDQUFQLEtBQWEsVUFBYixHQUEwQkEsQ0FBMUIsR0FBOEJsTyxxQkFBUSxDQUFDLENBQUNrTyxDQUFGLENBQTFDLEVBQWdEcWpDLElBQXBFLElBQTRFL3pDLENBQW5GO0FBQ0QsR0FGRDs7QUFJQSt6QyxFQUFBQSxJQUFJLENBQUM5dEIsQ0FBTCxHQUFTLFVBQVN2VixDQUFULEVBQVk7QUFDbkIsV0FBT2xRLFNBQVMsQ0FBQ3RCLE1BQVYsSUFBb0IrbUIsQ0FBQyxHQUFHLE9BQU92VixDQUFQLEtBQWEsVUFBYixHQUEwQkEsQ0FBMUIsR0FBOEJsTyxxQkFBUSxDQUFDLENBQUNrTyxDQUFGLENBQTFDLEVBQWdEcWpDLElBQXBFLElBQTRFOXRCLENBQW5GO0FBQ0QsR0FGRDs7QUFJQTh0QixFQUFBQSxJQUFJLENBQUNwdkMsT0FBTCxHQUFlLFVBQVMrTCxDQUFULEVBQVk7QUFDekIsV0FBT2xRLFNBQVMsQ0FBQ3RCLE1BQVYsSUFBb0J3UixDQUFDLElBQUksSUFBTCxHQUFZL0wsT0FBTyxHQUFHc29CLE1BQU0sR0FBRyxJQUEvQixHQUFzQ0EsTUFBTSxHQUFHK21CLEtBQUssQ0FBQ3J2QyxPQUFPLEdBQUcrTCxDQUFYLENBQXBELEVBQW1FcWpDLElBQXZGLElBQStGcHZDLE9BQXRHO0FBQ0QsR0FGRDs7QUFJQSxTQUFPb3ZDLElBQVA7QUFDRDtBQUVNLFNBQVNHLGNBQVQsR0FBMEI7QUFDL0IsU0FBT0gsU0FBSSxDQUFDUCxLQUFELENBQVg7QUFDRDtBQUVNLFNBQVNXLFlBQVQsR0FBd0I7QUFDN0IsU0FBT0osU0FBSSxDQUFDTixLQUFELENBQVg7QUFDRDtBQUVNLFNBQVNXLFVBQVQsR0FBc0I7QUFDM0IsUUFBTXJ3QixDQUFDLEdBQUdnd0IsU0FBSSxDQUFDTCxVQUFELENBQWQ7QUFDQTN2QixFQUFBQSxDQUFDLENBQUNzd0IsS0FBRixHQUFVdHdCLENBQUMsQ0FBQy9qQixDQUFaLEVBQWUsT0FBTytqQixDQUFDLENBQUMvakIsQ0FBeEI7QUFDQStqQixFQUFBQSxDQUFDLENBQUN1d0IsTUFBRixHQUFXdndCLENBQUMsQ0FBQ2tDLENBQWIsRUFBZ0IsT0FBT2xDLENBQUMsQ0FBQ2tDLENBQXpCO0FBQ0EsU0FBT2xDLENBQVA7QUFDRCxDOztBQ3ZFTSxNQUFNNEksUUFBRyxHQUFHM25CLElBQUksQ0FBQzJuQixHQUFqQjtBQUNBLE1BQU14VyxLQUFLLEdBQUduUixJQUFJLENBQUNtUixLQUFuQjtBQUNBLE1BQU1vMEIsR0FBRyxHQUFHdmxDLElBQUksQ0FBQ3VsQyxHQUFqQjtBQUNBLE1BQU12bEIsUUFBRyxHQUFHaGdCLElBQUksQ0FBQ2dnQixHQUFqQjtBQUNBLE1BQU0vZixRQUFHLEdBQUdELElBQUksQ0FBQ0MsR0FBakI7QUFDQSxNQUFNd2xDLEdBQUcsR0FBR3psQyxJQUFJLENBQUN5bEMsR0FBakI7QUFDQSxNQUFNdjBCLElBQUksR0FBR2xSLElBQUksQ0FBQ2tSLElBQWxCO0FBRUEsTUFBTWk2QixZQUFPLEdBQUcsS0FBaEI7QUFDQSxNQUFNRixPQUFFLEdBQUdqckMsSUFBSSxDQUFDeVEsRUFBaEI7QUFDQSxNQUFNOCtCLE1BQU0sR0FBR3RFLE9BQUUsR0FBRyxDQUFwQjtBQUNBLE1BQU1DLFFBQUcsR0FBRyxJQUFJRCxPQUFoQjtBQUVBLFNBQVM4QixJQUFULENBQWMveEMsQ0FBZCxFQUFpQjtBQUN0QixTQUFPQSxDQUFDLEdBQUcsQ0FBSixHQUFRLENBQVIsR0FBWUEsQ0FBQyxHQUFHLENBQUMsQ0FBTCxHQUFTaXdDLE9BQVQsR0FBY2pyQyxJQUFJLENBQUMrc0MsSUFBTCxDQUFVL3hDLENBQVYsQ0FBakM7QUFDRDtBQUVNLFNBQVN3MEMsSUFBVCxDQUFjeDBDLENBQWQsRUFBaUI7QUFDdEIsU0FBT0EsQ0FBQyxJQUFJLENBQUwsR0FBU3UwQyxNQUFULEdBQWtCdjBDLENBQUMsSUFBSSxDQUFDLENBQU4sR0FBVSxDQUFDdTBDLE1BQVgsR0FBb0J2dkMsSUFBSSxDQUFDd3ZDLElBQUwsQ0FBVXgwQyxDQUFWLENBQTdDO0FBQ0QsQzs7QUNuQkQ7QUFFQSxNQUFNeTBDLEtBQUssR0FBR3YrQixJQUFJLENBQUMsQ0FBRCxDQUFsQjtBQUVBLCtDQUFlO0FBQ2J3K0IsRUFBQUEsSUFBSSxDQUFDL3ZDLE9BQUQsRUFBVXNCLElBQVYsRUFBZ0I7QUFDbEIsVUFBTXNlLENBQUMsR0FBR3JPLElBQUksQ0FBQ2pRLElBQUksR0FBR2hCLFFBQUcsQ0FBQ2dCLElBQUksR0FBRyxFQUFSLEVBQVksSUFBWixDQUFYLENBQUosR0FBb0MsT0FBOUM7QUFDQSxVQUFNbUcsQ0FBQyxHQUFHbVksQ0FBQyxHQUFHLENBQWQ7QUFDQSxVQUFNaWUsQ0FBQyxHQUFHcDJCLENBQUMsR0FBR3FvQyxLQUFkO0FBQ0E5dkMsSUFBQUEsT0FBTyxDQUFDK3JDLE1BQVIsQ0FBZSxDQUFmLEVBQWtCbnNCLENBQWxCO0FBQ0E1ZixJQUFBQSxPQUFPLENBQUNpc0MsTUFBUixDQUFlLENBQWYsRUFBa0IsQ0FBQ3JzQixDQUFuQjtBQUNBNWYsSUFBQUEsT0FBTyxDQUFDK3JDLE1BQVIsQ0FBZSxDQUFDbE8sQ0FBaEIsRUFBbUIsQ0FBQ3AyQixDQUFwQjtBQUNBekgsSUFBQUEsT0FBTyxDQUFDaXNDLE1BQVIsQ0FBZXBPLENBQWYsRUFBa0JwMkIsQ0FBbEI7QUFDQXpILElBQUFBLE9BQU8sQ0FBQytyQyxNQUFSLENBQWUsQ0FBQ2xPLENBQWhCLEVBQW1CcDJCLENBQW5CO0FBQ0F6SCxJQUFBQSxPQUFPLENBQUNpc0MsTUFBUixDQUFlcE8sQ0FBZixFQUFrQixDQUFDcDJCLENBQW5CO0FBQ0Q7O0FBWFksQ0FBZixFOztBQ0pBO0FBRUEsNkNBQWU7QUFDYnNvQyxFQUFBQSxJQUFJLENBQUMvdkMsT0FBRCxFQUFVc0IsSUFBVixFQUFnQjtBQUNsQixVQUFNc2UsQ0FBQyxHQUFHck8sSUFBSSxDQUFDalEsSUFBSSxHQUFHZ3FDLE9BQVIsQ0FBZDtBQUNBdHJDLElBQUFBLE9BQU8sQ0FBQytyQyxNQUFSLENBQWVuc0IsQ0FBZixFQUFrQixDQUFsQjtBQUNBNWYsSUFBQUEsT0FBTyxDQUFDdXRDLEdBQVIsQ0FBWSxDQUFaLEVBQWUsQ0FBZixFQUFrQjN0QixDQUFsQixFQUFxQixDQUFyQixFQUF3QjJyQixRQUF4QjtBQUNEOztBQUxZLENBQWYsRTs7QUNGQTtBQUVBLDRDQUFlO0FBQ2J3RSxFQUFBQSxJQUFJLENBQUMvdkMsT0FBRCxFQUFVc0IsSUFBVixFQUFnQjtBQUNsQixVQUFNc2UsQ0FBQyxHQUFHck8sSUFBSSxDQUFDalEsSUFBSSxHQUFHLENBQVIsQ0FBSixHQUFpQixDQUEzQjtBQUNBdEIsSUFBQUEsT0FBTyxDQUFDK3JDLE1BQVIsQ0FBZSxDQUFDLENBQUQsR0FBS25zQixDQUFwQixFQUF1QixDQUFDQSxDQUF4QjtBQUNBNWYsSUFBQUEsT0FBTyxDQUFDaXNDLE1BQVIsQ0FBZSxDQUFDcnNCLENBQWhCLEVBQW1CLENBQUNBLENBQXBCO0FBQ0E1ZixJQUFBQSxPQUFPLENBQUNpc0MsTUFBUixDQUFlLENBQUNyc0IsQ0FBaEIsRUFBbUIsQ0FBQyxDQUFELEdBQUtBLENBQXhCO0FBQ0E1ZixJQUFBQSxPQUFPLENBQUNpc0MsTUFBUixDQUFlcnNCLENBQWYsRUFBa0IsQ0FBQyxDQUFELEdBQUtBLENBQXZCO0FBQ0E1ZixJQUFBQSxPQUFPLENBQUNpc0MsTUFBUixDQUFlcnNCLENBQWYsRUFBa0IsQ0FBQ0EsQ0FBbkI7QUFDQTVmLElBQUFBLE9BQU8sQ0FBQ2lzQyxNQUFSLENBQWUsSUFBSXJzQixDQUFuQixFQUFzQixDQUFDQSxDQUF2QjtBQUNBNWYsSUFBQUEsT0FBTyxDQUFDaXNDLE1BQVIsQ0FBZSxJQUFJcnNCLENBQW5CLEVBQXNCQSxDQUF0QjtBQUNBNWYsSUFBQUEsT0FBTyxDQUFDaXNDLE1BQVIsQ0FBZXJzQixDQUFmLEVBQWtCQSxDQUFsQjtBQUNBNWYsSUFBQUEsT0FBTyxDQUFDaXNDLE1BQVIsQ0FBZXJzQixDQUFmLEVBQWtCLElBQUlBLENBQXRCO0FBQ0E1ZixJQUFBQSxPQUFPLENBQUNpc0MsTUFBUixDQUFlLENBQUNyc0IsQ0FBaEIsRUFBbUIsSUFBSUEsQ0FBdkI7QUFDQTVmLElBQUFBLE9BQU8sQ0FBQ2lzQyxNQUFSLENBQWUsQ0FBQ3JzQixDQUFoQixFQUFtQkEsQ0FBbkI7QUFDQTVmLElBQUFBLE9BQU8sQ0FBQ2lzQyxNQUFSLENBQWUsQ0FBQyxDQUFELEdBQUtyc0IsQ0FBcEIsRUFBdUJBLENBQXZCO0FBQ0E1ZixJQUFBQSxPQUFPLENBQUNnc0MsU0FBUjtBQUNEOztBQWhCWSxDQUFmLEU7O0FDRkE7QUFFQSxNQUFNZ0UsS0FBSyxHQUFHeitCLElBQUksQ0FBQyxJQUFJLENBQUwsQ0FBbEI7QUFDQSxNQUFNMCtCLE9BQU8sR0FBR0QsS0FBSyxHQUFHLENBQXhCO0FBRUEsOENBQWU7QUFDYkQsRUFBQUEsSUFBSSxDQUFDL3ZDLE9BQUQsRUFBVXNCLElBQVYsRUFBZ0I7QUFDbEIsVUFBTWdnQixDQUFDLEdBQUcvUCxJQUFJLENBQUNqUSxJQUFJLEdBQUcydUMsT0FBUixDQUFkO0FBQ0EsVUFBTTUwQyxDQUFDLEdBQUdpbUIsQ0FBQyxHQUFHMHVCLEtBQWQ7QUFDQWh3QyxJQUFBQSxPQUFPLENBQUMrckMsTUFBUixDQUFlLENBQWYsRUFBa0IsQ0FBQ3pxQixDQUFuQjtBQUNBdGhCLElBQUFBLE9BQU8sQ0FBQ2lzQyxNQUFSLENBQWU1d0MsQ0FBZixFQUFrQixDQUFsQjtBQUNBMkUsSUFBQUEsT0FBTyxDQUFDaXNDLE1BQVIsQ0FBZSxDQUFmLEVBQWtCM3FCLENBQWxCO0FBQ0F0aEIsSUFBQUEsT0FBTyxDQUFDaXNDLE1BQVIsQ0FBZSxDQUFDNXdDLENBQWhCLEVBQW1CLENBQW5CO0FBQ0EyRSxJQUFBQSxPQUFPLENBQUNnc0MsU0FBUjtBQUNEOztBQVRZLENBQWYsRTs7QUNMQTtBQUVBLCtDQUFlO0FBQ2IrRCxFQUFBQSxJQUFJLENBQUMvdkMsT0FBRCxFQUFVc0IsSUFBVixFQUFnQjtBQUNsQixVQUFNc2UsQ0FBQyxHQUFHck8sSUFBSSxDQUFDalEsSUFBRCxDQUFKLEdBQWEsT0FBdkI7QUFDQXRCLElBQUFBLE9BQU8sQ0FBQytyQyxNQUFSLENBQWUsQ0FBZixFQUFrQixDQUFDbnNCLENBQW5CO0FBQ0E1ZixJQUFBQSxPQUFPLENBQUNpc0MsTUFBUixDQUFlcnNCLENBQWYsRUFBa0IsQ0FBbEI7QUFDQTVmLElBQUFBLE9BQU8sQ0FBQ2lzQyxNQUFSLENBQWUsQ0FBZixFQUFrQnJzQixDQUFsQjtBQUNBNWYsSUFBQUEsT0FBTyxDQUFDaXNDLE1BQVIsQ0FBZSxDQUFDcnNCLENBQWhCLEVBQW1CLENBQW5CO0FBQ0E1ZixJQUFBQSxPQUFPLENBQUNnc0MsU0FBUjtBQUNEOztBQVJZLENBQWYsRTs7QUNGQTtBQUVBLDJDQUFlO0FBQ2IrRCxFQUFBQSxJQUFJLENBQUMvdkMsT0FBRCxFQUFVc0IsSUFBVixFQUFnQjtBQUNsQixVQUFNc2UsQ0FBQyxHQUFHck8sSUFBSSxDQUFDalEsSUFBSSxHQUFHaEIsUUFBRyxDQUFDZ0IsSUFBSSxHQUFHLENBQVIsRUFBVyxDQUFYLENBQVgsQ0FBSixHQUFnQyxPQUExQztBQUNBdEIsSUFBQUEsT0FBTyxDQUFDK3JDLE1BQVIsQ0FBZSxDQUFDbnNCLENBQWhCLEVBQW1CLENBQW5CO0FBQ0E1ZixJQUFBQSxPQUFPLENBQUNpc0MsTUFBUixDQUFlcnNCLENBQWYsRUFBa0IsQ0FBbEI7QUFDQTVmLElBQUFBLE9BQU8sQ0FBQytyQyxNQUFSLENBQWUsQ0FBZixFQUFrQm5zQixDQUFsQjtBQUNBNWYsSUFBQUEsT0FBTyxDQUFDaXNDLE1BQVIsQ0FBZSxDQUFmLEVBQWtCLENBQUNyc0IsQ0FBbkI7QUFDRDs7QUFQWSxDQUFmLEU7O0FDRkE7QUFFQSw2Q0FBZTtBQUNibXdCLEVBQUFBLElBQUksQ0FBQy92QyxPQUFELEVBQVVzQixJQUFWLEVBQWdCO0FBQ2xCLFVBQU1zbkIsQ0FBQyxHQUFHclgsSUFBSSxDQUFDalEsSUFBRCxDQUFkO0FBQ0EsVUFBTWpHLENBQUMsR0FBRyxDQUFDdXRCLENBQUQsR0FBSyxDQUFmO0FBQ0E1b0IsSUFBQUEsT0FBTyxDQUFDNnRDLElBQVIsQ0FBYXh5QyxDQUFiLEVBQWdCQSxDQUFoQixFQUFtQnV0QixDQUFuQixFQUFzQkEsQ0FBdEI7QUFDRDs7QUFMWSxDQUFmLEU7O0FDRkE7QUFFQSw4Q0FBZTtBQUNibW5CLEVBQUFBLElBQUksQ0FBQy92QyxPQUFELEVBQVVzQixJQUFWLEVBQWdCO0FBQ2xCLFVBQU1zZSxDQUFDLEdBQUdyTyxJQUFJLENBQUNqUSxJQUFELENBQUosR0FBYSxNQUF2QjtBQUNBdEIsSUFBQUEsT0FBTyxDQUFDK3JDLE1BQVIsQ0FBZW5zQixDQUFmLEVBQWtCQSxDQUFsQjtBQUNBNWYsSUFBQUEsT0FBTyxDQUFDaXNDLE1BQVIsQ0FBZXJzQixDQUFmLEVBQWtCLENBQUNBLENBQW5CO0FBQ0E1ZixJQUFBQSxPQUFPLENBQUNpc0MsTUFBUixDQUFlLENBQUNyc0IsQ0FBaEIsRUFBbUIsQ0FBQ0EsQ0FBcEI7QUFDQTVmLElBQUFBLE9BQU8sQ0FBQ2lzQyxNQUFSLENBQWUsQ0FBQ3JzQixDQUFoQixFQUFtQkEsQ0FBbkI7QUFDQTVmLElBQUFBLE9BQU8sQ0FBQ2dzQyxTQUFSO0FBQ0Q7O0FBUlksQ0FBZixFOztBQ0ZBO0FBRUEsTUFBTWtFLEVBQUUsR0FBRyxzQkFBWDtBQUNBLE1BQU1DLEVBQUUsR0FBR3JLLEdBQUcsQ0FBQ3dGLE9BQUUsR0FBRyxFQUFOLENBQUgsR0FBZXhGLEdBQUcsQ0FBQyxJQUFJd0YsT0FBSixHQUFTLEVBQVYsQ0FBN0I7QUFDQSxNQUFNL1MsRUFBRSxHQUFHdU4sR0FBRyxDQUFDeUYsUUFBRyxHQUFHLEVBQVAsQ0FBSCxHQUFnQjRFLEVBQTNCO0FBQ0EsTUFBTTNYLEVBQUUsR0FBRyxDQUFDb04sR0FBRyxDQUFDMkYsUUFBRyxHQUFHLEVBQVAsQ0FBSixHQUFpQjRFLEVBQTVCO0FBRUEsMkNBQWU7QUFDYkosRUFBQUEsSUFBSSxDQUFDL3ZDLE9BQUQsRUFBVXNCLElBQVYsRUFBZ0I7QUFDbEIsVUFBTXNlLENBQUMsR0FBR3JPLElBQUksQ0FBQ2pRLElBQUksR0FBRzR1QyxFQUFSLENBQWQ7QUFDQSxVQUFNNzBDLENBQUMsR0FBR2s5QixFQUFFLEdBQUczWSxDQUFmO0FBQ0EsVUFBTTBCLENBQUMsR0FBR2tYLEVBQUUsR0FBRzVZLENBQWY7QUFDQTVmLElBQUFBLE9BQU8sQ0FBQytyQyxNQUFSLENBQWUsQ0FBZixFQUFrQixDQUFDbnNCLENBQW5CO0FBQ0E1ZixJQUFBQSxPQUFPLENBQUNpc0MsTUFBUixDQUFlNXdDLENBQWYsRUFBa0JpbUIsQ0FBbEI7O0FBQ0EsU0FBSyxJQUFJdG1CLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUcsQ0FBcEIsRUFBdUIsRUFBRUEsQ0FBekIsRUFBNEI7QUFDMUIsWUFBTStGLENBQUMsR0FBR3dxQyxRQUFHLEdBQUd2d0MsQ0FBTixHQUFVLENBQXBCO0FBQ0EsWUFBTXdSLENBQUMsR0FBR281QixHQUFHLENBQUM3a0MsQ0FBRCxDQUFiO0FBQ0EsWUFBTTZSLENBQUMsR0FBR2t6QixHQUFHLENBQUMva0MsQ0FBRCxDQUFiO0FBQ0FmLE1BQUFBLE9BQU8sQ0FBQ2lzQyxNQUFSLENBQWVyNUIsQ0FBQyxHQUFHZ04sQ0FBbkIsRUFBc0IsQ0FBQ3BULENBQUQsR0FBS29ULENBQTNCO0FBQ0E1ZixNQUFBQSxPQUFPLENBQUNpc0MsTUFBUixDQUFlei9CLENBQUMsR0FBR25SLENBQUosR0FBUXVYLENBQUMsR0FBRzBPLENBQTNCLEVBQThCMU8sQ0FBQyxHQUFHdlgsQ0FBSixHQUFRbVIsQ0FBQyxHQUFHOFUsQ0FBMUM7QUFDRDs7QUFDRHRoQixJQUFBQSxPQUFPLENBQUNnc0MsU0FBUjtBQUNEOztBQWZZLENBQWYsRTs7QUNQQTtBQUVBLE1BQU04RCxjQUFLLEdBQUd2K0IsSUFBSSxDQUFDLENBQUQsQ0FBbEI7QUFFQSwrQ0FBZTtBQUNidytCLEVBQUFBLElBQUksQ0FBQy92QyxPQUFELEVBQVVzQixJQUFWLEVBQWdCO0FBQ2xCLFVBQU1nZ0IsQ0FBQyxHQUFHLENBQUMvUCxJQUFJLENBQUNqUSxJQUFJLElBQUl3dUMsY0FBSyxHQUFHLENBQVosQ0FBTCxDQUFmO0FBQ0E5dkMsSUFBQUEsT0FBTyxDQUFDK3JDLE1BQVIsQ0FBZSxDQUFmLEVBQWtCenFCLENBQUMsR0FBRyxDQUF0QjtBQUNBdGhCLElBQUFBLE9BQU8sQ0FBQ2lzQyxNQUFSLENBQWUsQ0FBQzZELGNBQUQsR0FBU3h1QixDQUF4QixFQUEyQixDQUFDQSxDQUE1QjtBQUNBdGhCLElBQUFBLE9BQU8sQ0FBQ2lzQyxNQUFSLENBQWU2RCxjQUFLLEdBQUd4dUIsQ0FBdkIsRUFBMEIsQ0FBQ0EsQ0FBM0I7QUFDQXRoQixJQUFBQSxPQUFPLENBQUNnc0MsU0FBUjtBQUNEOztBQVBZLENBQWYsRTs7QUNKQTtBQUVBLE1BQU04RCxlQUFLLEdBQUd2K0IsSUFBSSxDQUFDLENBQUQsQ0FBbEI7QUFFQSxnREFBZTtBQUNidytCLEVBQUFBLElBQUksQ0FBQy92QyxPQUFELEVBQVVzQixJQUFWLEVBQWdCO0FBQ2xCLFVBQU1zUixDQUFDLEdBQUdyQixJQUFJLENBQUNqUSxJQUFELENBQUosR0FBYSxNQUF2QjtBQUNBLFVBQU1tRyxDQUFDLEdBQUdtTCxDQUFDLEdBQUksQ0FBZjtBQUNBLFVBQU1pckIsQ0FBQyxHQUFJanJCLENBQUMsR0FBR2s5QixlQUFMLEdBQWMsQ0FBeEIsQ0FIa0IsQ0FHUzs7QUFDM0I5dkMsSUFBQUEsT0FBTyxDQUFDK3JDLE1BQVIsQ0FBZSxDQUFmLEVBQWtCLENBQUNuNUIsQ0FBbkI7QUFDQTVTLElBQUFBLE9BQU8sQ0FBQ2lzQyxNQUFSLENBQWVwTyxDQUFmLEVBQWtCcDJCLENBQWxCO0FBQ0F6SCxJQUFBQSxPQUFPLENBQUNpc0MsTUFBUixDQUFlLENBQUNwTyxDQUFoQixFQUFtQnAyQixDQUFuQjtBQUNBekgsSUFBQUEsT0FBTyxDQUFDZ3NDLFNBQVI7QUFDRDs7QUFUWSxDQUFmLEU7O0FDSkE7QUFFQSxNQUFNeC9CLEtBQUMsR0FBRyxDQUFDLEdBQVg7QUFDQSxNQUFNb0csQ0FBQyxHQUFHckIsSUFBSSxDQUFDLENBQUQsQ0FBSixHQUFVLENBQXBCO0FBQ0EsTUFBTXlPLENBQUMsR0FBRyxJQUFJek8sSUFBSSxDQUFDLEVBQUQsQ0FBbEI7QUFDQSxNQUFNeFEsQ0FBQyxHQUFHLENBQUNpZixDQUFDLEdBQUcsQ0FBSixHQUFRLENBQVQsSUFBYyxDQUF4QjtBQUVBLDBDQUFlO0FBQ2IrdkIsRUFBQUEsSUFBSSxDQUFDL3ZDLE9BQUQsRUFBVXNCLElBQVYsRUFBZ0I7QUFDbEIsVUFBTXNlLENBQUMsR0FBR3JPLElBQUksQ0FBQ2pRLElBQUksR0FBR1AsQ0FBUixDQUFkO0FBQ0EsVUFBTW9oQyxFQUFFLEdBQUd2aUIsQ0FBQyxHQUFHLENBQWY7QUFBQSxVQUFrQjRzQixFQUFFLEdBQUc1c0IsQ0FBQyxHQUFHSSxDQUEzQjtBQUNBLFVBQU1vaUIsRUFBRSxHQUFHRCxFQUFYO0FBQUEsVUFBZWdLLEVBQUUsR0FBR3ZzQixDQUFDLEdBQUdJLENBQUosR0FBUUosQ0FBNUI7QUFDQSxVQUFNeXNCLEVBQUUsR0FBRyxDQUFDakssRUFBWjtBQUFBLFVBQWdCa0ssRUFBRSxHQUFHSCxFQUFyQjtBQUNBbnNDLElBQUFBLE9BQU8sQ0FBQytyQyxNQUFSLENBQWU1SixFQUFmLEVBQW1CcUssRUFBbkI7QUFDQXhzQyxJQUFBQSxPQUFPLENBQUNpc0MsTUFBUixDQUFlN0osRUFBZixFQUFtQitKLEVBQW5CO0FBQ0Fuc0MsSUFBQUEsT0FBTyxDQUFDaXNDLE1BQVIsQ0FBZUksRUFBZixFQUFtQkMsRUFBbkI7QUFDQXRzQyxJQUFBQSxPQUFPLENBQUNpc0MsTUFBUixDQUFlei9CLEtBQUMsR0FBRzIxQixFQUFKLEdBQVN2dkIsQ0FBQyxHQUFHNDVCLEVBQTVCLEVBQWdDNTVCLENBQUMsR0FBR3V2QixFQUFKLEdBQVMzMUIsS0FBQyxHQUFHZ2dDLEVBQTdDO0FBQ0F4c0MsSUFBQUEsT0FBTyxDQUFDaXNDLE1BQVIsQ0FBZXovQixLQUFDLEdBQUc0MUIsRUFBSixHQUFTeHZCLENBQUMsR0FBR3U1QixFQUE1QixFQUFnQ3Y1QixDQUFDLEdBQUd3dkIsRUFBSixHQUFTNTFCLEtBQUMsR0FBRzIvQixFQUE3QztBQUNBbnNDLElBQUFBLE9BQU8sQ0FBQ2lzQyxNQUFSLENBQWV6L0IsS0FBQyxHQUFHNi9CLEVBQUosR0FBU3o1QixDQUFDLEdBQUcwNUIsRUFBNUIsRUFBZ0MxNUIsQ0FBQyxHQUFHeTVCLEVBQUosR0FBUzcvQixLQUFDLEdBQUc4L0IsRUFBN0M7QUFDQXRzQyxJQUFBQSxPQUFPLENBQUNpc0MsTUFBUixDQUFlei9CLEtBQUMsR0FBRzIxQixFQUFKLEdBQVN2dkIsQ0FBQyxHQUFHNDVCLEVBQTVCLEVBQWdDaGdDLEtBQUMsR0FBR2dnQyxFQUFKLEdBQVM1NUIsQ0FBQyxHQUFHdXZCLEVBQTdDO0FBQ0FuaUMsSUFBQUEsT0FBTyxDQUFDaXNDLE1BQVIsQ0FBZXovQixLQUFDLEdBQUc0MUIsRUFBSixHQUFTeHZCLENBQUMsR0FBR3U1QixFQUE1QixFQUFnQzMvQixLQUFDLEdBQUcyL0IsRUFBSixHQUFTdjVCLENBQUMsR0FBR3d2QixFQUE3QztBQUNBcGlDLElBQUFBLE9BQU8sQ0FBQ2lzQyxNQUFSLENBQWV6L0IsS0FBQyxHQUFHNi9CLEVBQUosR0FBU3o1QixDQUFDLEdBQUcwNUIsRUFBNUIsRUFBZ0M5L0IsS0FBQyxHQUFHOC9CLEVBQUosR0FBUzE1QixDQUFDLEdBQUd5NUIsRUFBN0M7QUFDQXJzQyxJQUFBQSxPQUFPLENBQUNnc0MsU0FBUjtBQUNEOztBQWhCWSxDQUFmLEU7O0FDUEE7QUFFQSx3Q0FBZTtBQUNiK0QsRUFBQUEsSUFBSSxDQUFDL3ZDLE9BQUQsRUFBVXNCLElBQVYsRUFBZ0I7QUFDbEIsVUFBTXNlLENBQUMsR0FBR3JPLElBQUksQ0FBQ2pRLElBQUksR0FBR2hCLFFBQUcsQ0FBQ2dCLElBQUksR0FBRyxDQUFSLEVBQVcsR0FBWCxDQUFYLENBQUosR0FBa0MsTUFBNUM7QUFDQXRCLElBQUFBLE9BQU8sQ0FBQytyQyxNQUFSLENBQWUsQ0FBQ25zQixDQUFoQixFQUFtQixDQUFDQSxDQUFwQjtBQUNBNWYsSUFBQUEsT0FBTyxDQUFDaXNDLE1BQVIsQ0FBZXJzQixDQUFmLEVBQWtCQSxDQUFsQjtBQUNBNWYsSUFBQUEsT0FBTyxDQUFDK3JDLE1BQVIsQ0FBZSxDQUFDbnNCLENBQWhCLEVBQW1CQSxDQUFuQjtBQUNBNWYsSUFBQUEsT0FBTyxDQUFDaXNDLE1BQVIsQ0FBZXJzQixDQUFmLEVBQWtCLENBQUNBLENBQW5CO0FBQ0Q7O0FBUFksQ0FBZixFOztBQ0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Q0FHQTs7QUFDTyxNQUFNb3hCLFdBQVcsR0FBRyxDQUN6QlgsTUFEeUIsRUFFekJDLEtBRnlCLEVBR3pCQyxPQUh5QixFQUl6QkcsTUFKeUIsRUFLekJFLElBTHlCLEVBTXpCQyxRQU55QixFQU96QkUsR0FQeUIsQ0FBcEIsRUFVUDs7QUFDTyxNQUFNRSxhQUFhLEdBQUcsQ0FDM0JaLE1BRDJCLEVBRTNCSSxJQUYyQixFQUczQnAxQyxDQUgyQixFQUkzQnkxQyxTQUoyQixFQUszQlYsUUFMMkIsRUFNM0JPLE9BTjJCLEVBTzNCSCxRQVAyQixDQUF0QjtBQVVRLFNBQVM1a0MsYUFBVCxDQUFnQmxFLElBQWhCLEVBQXNCcEcsSUFBdEIsRUFBNEI7QUFDekMsTUFBSXRCLE9BQU8sR0FBRyxJQUFkO0FBRUEwSCxFQUFBQSxJQUFJLEdBQUcsT0FBT0EsSUFBUCxLQUFnQixVQUFoQixHQUE2QkEsSUFBN0IsR0FBb0M3SixxQkFBUSxDQUFDNkosSUFBSSxJQUFJMm9DLE1BQVQsQ0FBbkQ7QUFDQS91QyxFQUFBQSxJQUFJLEdBQUcsT0FBT0EsSUFBUCxLQUFnQixVQUFoQixHQUE2QkEsSUFBN0IsR0FBb0N6RCxxQkFBUSxDQUFDeUQsSUFBSSxLQUFLbU4sU0FBVCxHQUFxQixFQUFyQixHQUEwQixDQUFDbk4sSUFBNUIsQ0FBbkQ7O0FBRUEsV0FBU205QixNQUFULEdBQWtCO0FBQ2hCLFFBQUl6TCxNQUFKO0FBQ0EsUUFBSSxDQUFDaHpCLE9BQUwsRUFBY0EsT0FBTyxHQUFHZ3pCLE1BQU0sR0FBRzBDLFFBQUksRUFBdkI7QUFDZGh1QixJQUFBQSxJQUFJLENBQUM5TCxLQUFMLENBQVcsSUFBWCxFQUFpQkMsU0FBakIsRUFBNEJrMEMsSUFBNUIsQ0FBaUMvdkMsT0FBakMsRUFBMEMsQ0FBQ3NCLElBQUksQ0FBQzFGLEtBQUwsQ0FBVyxJQUFYLEVBQWlCQyxTQUFqQixDQUEzQztBQUNBLFFBQUltM0IsTUFBSixFQUFZLE9BQU9oekIsT0FBTyxHQUFHLElBQVYsRUFBZ0JnekIsTUFBTSxHQUFHLEVBQVQsSUFBZSxJQUF0QztBQUNiOztBQUVEeUwsRUFBQUEsTUFBTSxDQUFDLzJCLElBQVAsR0FBYyxVQUFTcUUsQ0FBVCxFQUFZO0FBQ3hCLFdBQU9sUSxTQUFTLENBQUN0QixNQUFWLElBQW9CbU4sSUFBSSxHQUFHLE9BQU9xRSxDQUFQLEtBQWEsVUFBYixHQUEwQkEsQ0FBMUIsR0FBOEJsTyxxQkFBUSxDQUFDa08sQ0FBRCxDQUE3QyxFQUFrRDB5QixNQUF0RSxJQUFnRi8yQixJQUF2RjtBQUNELEdBRkQ7O0FBSUErMkIsRUFBQUEsTUFBTSxDQUFDbjlCLElBQVAsR0FBYyxVQUFTeUssQ0FBVCxFQUFZO0FBQ3hCLFdBQU9sUSxTQUFTLENBQUN0QixNQUFWLElBQW9CK0csSUFBSSxHQUFHLE9BQU95SyxDQUFQLEtBQWEsVUFBYixHQUEwQkEsQ0FBMUIsR0FBOEJsTyxxQkFBUSxDQUFDLENBQUNrTyxDQUFGLENBQTdDLEVBQW1EMHlCLE1BQXZFLElBQWlGbjlCLElBQXhGO0FBQ0QsR0FGRDs7QUFJQW05QixFQUFBQSxNQUFNLENBQUN6K0IsT0FBUCxHQUFpQixVQUFTK0wsQ0FBVCxFQUFZO0FBQzNCLFdBQU9sUSxTQUFTLENBQUN0QixNQUFWLElBQW9CeUYsT0FBTyxHQUFHK0wsQ0FBQyxJQUFJLElBQUwsR0FBWSxJQUFaLEdBQW1CQSxDQUE3QixFQUFnQzB5QixNQUFwRCxJQUE4RHorQixPQUFyRTtBQUNELEdBRkQ7O0FBSUEsU0FBT3krQixNQUFQO0FBQ0QsQzs7QUNoRUQ7QUFDQTtBQUNBO0FBQ0E7Q0FDOEU7O0NBQ0E7O0FBQzlFO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNuREE7QUFDQTtBQUNPLE1BQU1rVyxVQUFVLEdBQUc7QUFBQ0MsRUFBQUEsT0FBTyxFQUFFO0FBQVYsQ0FBbkI7QUFDQSxNQUFNQyxpQkFBaUIsR0FBRztBQUFDQyxFQUFBQSxPQUFPLEVBQUUsSUFBVjtBQUFnQkYsRUFBQUEsT0FBTyxFQUFFO0FBQXpCLENBQTFCO0FBRUEsU0FBU2p0QixxQkFBVCxDQUF1QnJnQixLQUF2QixFQUE4QjtBQUNuQ0EsRUFBQUEsS0FBSyxDQUFDeXRDLHdCQUFOO0FBQ0Q7QUFFRCw2QkFBZSxxQkFBU3p0QyxLQUFULEVBQWdCO0FBQzdCQSxFQUFBQSxLQUFLLENBQUMwdEMsY0FBTjtBQUNBMXRDLEVBQUFBLEtBQUssQ0FBQ3l0Qyx3QkFBTjtBQUNELEM7O0FDWkQ7QUFDQTtBQUVBLDZCQUFlLGdCQUFTam5CLElBQVQsRUFBZTtBQUM1QixNQUFJN2lCLElBQUksR0FBRzZpQixJQUFJLENBQUN6cUIsUUFBTCxDQUFjZ0QsZUFBekI7QUFBQSxNQUNJMUcsU0FBUyxHQUFHeEYsVUFBTSxDQUFDMnpCLElBQUQsQ0FBTixDQUFham1CLEVBQWIsQ0FBZ0IsZ0JBQWhCLEVBQWtDNmYsV0FBbEMsRUFBMkNtdEIsaUJBQTNDLENBRGhCOztBQUVBLE1BQUksbUJBQW1CNXBDLElBQXZCLEVBQTZCO0FBQzNCdEwsSUFBQUEsU0FBUyxDQUFDa0ksRUFBVixDQUFhLGtCQUFiLEVBQWlDNmYsV0FBakMsRUFBMENtdEIsaUJBQTFDO0FBQ0QsR0FGRCxNQUVPO0FBQ0w1cEMsSUFBQUEsSUFBSSxDQUFDZ3FDLFVBQUwsR0FBa0JocUMsSUFBSSxDQUFDMUgsS0FBTCxDQUFXMnhDLGFBQTdCO0FBQ0FqcUMsSUFBQUEsSUFBSSxDQUFDMUgsS0FBTCxDQUFXMnhDLGFBQVgsR0FBMkIsTUFBM0I7QUFDRDtBQUNGO0FBRU0sU0FBU0MsT0FBVCxDQUFpQnJuQixJQUFqQixFQUF1QnNuQixPQUF2QixFQUFnQztBQUNyQyxNQUFJbnFDLElBQUksR0FBRzZpQixJQUFJLENBQUN6cUIsUUFBTCxDQUFjZ0QsZUFBekI7QUFBQSxNQUNJMUcsU0FBUyxHQUFHeEYsVUFBTSxDQUFDMnpCLElBQUQsQ0FBTixDQUFham1CLEVBQWIsQ0FBZ0IsZ0JBQWhCLEVBQWtDLElBQWxDLENBRGhCOztBQUVBLE1BQUl1dEMsT0FBSixFQUFhO0FBQ1h6MUMsSUFBQUEsU0FBUyxDQUFDa0ksRUFBVixDQUFhLFlBQWIsRUFBMkI2ZixXQUEzQixFQUFvQ210QixpQkFBcEM7QUFDQW5uQyxJQUFBQSxVQUFVLENBQUMsWUFBVztBQUFFL04sTUFBQUEsU0FBUyxDQUFDa0ksRUFBVixDQUFhLFlBQWIsRUFBMkIsSUFBM0I7QUFBbUMsS0FBakQsRUFBbUQsQ0FBbkQsQ0FBVjtBQUNEOztBQUNELE1BQUksbUJBQW1Cb0QsSUFBdkIsRUFBNkI7QUFDM0J0TCxJQUFBQSxTQUFTLENBQUNrSSxFQUFWLENBQWEsa0JBQWIsRUFBaUMsSUFBakM7QUFDRCxHQUZELE1BRU87QUFDTG9ELElBQUFBLElBQUksQ0FBQzFILEtBQUwsQ0FBVzJ4QyxhQUFYLEdBQTJCanFDLElBQUksQ0FBQ2dxQyxVQUFoQztBQUNBLFdBQU9ocUMsSUFBSSxDQUFDZ3FDLFVBQVo7QUFDRDtBQUNGLEM7O0FDM0JELElBQUlJLFFBQVEsR0FBRyxLQUFmOztBQUVBLFNBQVMxUCxJQUFULENBQWN0cUMsQ0FBZCxFQUFpQjtBQUNmLFNBQU8sQ0FBQyxDQUFDQSxDQUFDLEdBQUdnRixJQUFJLENBQUNpMUMsR0FBTCxDQUFTajZDLENBQVQsQ0FBTCxJQUFvQixJQUFJQSxDQUF6QixJQUE4QixDQUFyQztBQUNEOztBQUVELFNBQVN3cUMsSUFBVCxDQUFjeHFDLENBQWQsRUFBaUI7QUFDZixTQUFPLENBQUMsQ0FBQ0EsQ0FBQyxHQUFHZ0YsSUFBSSxDQUFDaTFDLEdBQUwsQ0FBU2o2QyxDQUFULENBQUwsSUFBb0IsSUFBSUEsQ0FBekIsSUFBOEIsQ0FBckM7QUFDRDs7QUFFRCxTQUFTazZDLElBQVQsQ0FBY2w2QyxDQUFkLEVBQWlCO0FBQ2YsU0FBTyxDQUFDLENBQUNBLENBQUMsR0FBR2dGLElBQUksQ0FBQ2kxQyxHQUFMLENBQVMsSUFBSWo2QyxDQUFiLENBQUwsSUFBd0IsQ0FBekIsS0FBK0JBLENBQUMsR0FBRyxDQUFuQyxDQUFQO0FBQ0Q7O0FBRUQsK0NBQWUsQ0FBQyxTQUFTbTZDLE9BQVQsQ0FBaUJDLEdBQWpCLEVBQXNCQyxJQUF0QixFQUE0QkMsSUFBNUIsRUFBa0M7QUFFaEQ7QUFDQTtBQUNBLFdBQVNDLElBQVQsQ0FBY25ILEVBQWQsRUFBa0JDLEVBQWxCLEVBQXNCO0FBQ3BCLFFBQUltSCxHQUFHLEdBQUdwSCxFQUFFLENBQUMsQ0FBRCxDQUFaO0FBQUEsUUFBaUJxSCxHQUFHLEdBQUdySCxFQUFFLENBQUMsQ0FBRCxDQUF6QjtBQUFBLFFBQThCbmlCLEVBQUUsR0FBR21pQixFQUFFLENBQUMsQ0FBRCxDQUFyQztBQUFBLFFBQ0lzSCxHQUFHLEdBQUdySCxFQUFFLENBQUMsQ0FBRCxDQURaO0FBQUEsUUFDaUJzSCxHQUFHLEdBQUd0SCxFQUFFLENBQUMsQ0FBRCxDQUR6QjtBQUFBLFFBQzhCbmlCLEVBQUUsR0FBR21pQixFQUFFLENBQUMsQ0FBRCxDQURyQztBQUFBLFFBRUl6aEIsRUFBRSxHQUFHOG9CLEdBQUcsR0FBR0YsR0FGZjtBQUFBLFFBR0kzb0IsRUFBRSxHQUFHOG9CLEdBQUcsR0FBR0YsR0FIZjtBQUFBLFFBSUlHLEVBQUUsR0FBR2hwQixFQUFFLEdBQUdBLEVBQUwsR0FBVUMsRUFBRSxHQUFHQSxFQUp4QjtBQUFBLFFBS0lseUIsQ0FMSjtBQUFBLFFBTUk4eEIsQ0FOSixDQURvQixDQVNwQjs7QUFDQSxRQUFJbXBCLEVBQUUsR0FBR1osUUFBVCxFQUFtQjtBQUNqQnZvQixNQUFBQSxDQUFDLEdBQUd6c0IsSUFBSSxDQUFDbzZCLEdBQUwsQ0FBU2xPLEVBQUUsR0FBR0QsRUFBZCxJQUFvQm1wQixHQUF4Qjs7QUFDQXo2QyxNQUFBQSxDQUFDLEdBQUcsVUFBU3lNLENBQVQsRUFBWTtBQUNkLGVBQU8sQ0FDTG91QyxHQUFHLEdBQUdwdUMsQ0FBQyxHQUFHd2xCLEVBREwsRUFFTDZvQixHQUFHLEdBQUdydUMsQ0FBQyxHQUFHeWxCLEVBRkwsRUFHTFosRUFBRSxHQUFHanNCLElBQUksQ0FBQ2kxQyxHQUFMLENBQVNHLEdBQUcsR0FBR2h1QyxDQUFOLEdBQVVxbEIsQ0FBbkIsQ0FIQSxDQUFQO0FBS0QsT0FORDtBQU9ELEtBVEQsQ0FXQTtBQVhBLFNBWUs7QUFDSCxVQUFJcVEsRUFBRSxHQUFHOThCLElBQUksQ0FBQ2tSLElBQUwsQ0FBVTBrQyxFQUFWLENBQVQ7QUFBQSxVQUNJQyxFQUFFLEdBQUcsQ0FBQzNwQixFQUFFLEdBQUdBLEVBQUwsR0FBVUQsRUFBRSxHQUFHQSxFQUFmLEdBQW9CcXBCLElBQUksR0FBR00sRUFBNUIsS0FBbUMsSUFBSTNwQixFQUFKLEdBQVNvcEIsSUFBVCxHQUFnQnZZLEVBQW5ELENBRFQ7QUFBQSxVQUVJZ1osRUFBRSxHQUFHLENBQUM1cEIsRUFBRSxHQUFHQSxFQUFMLEdBQVVELEVBQUUsR0FBR0EsRUFBZixHQUFvQnFwQixJQUFJLEdBQUdNLEVBQTVCLEtBQW1DLElBQUkxcEIsRUFBSixHQUFTbXBCLElBQVQsR0FBZ0J2WSxFQUFuRCxDQUZUO0FBQUEsVUFHSTdDLEVBQUUsR0FBR2o2QixJQUFJLENBQUNvNkIsR0FBTCxDQUFTcDZCLElBQUksQ0FBQ2tSLElBQUwsQ0FBVTJrQyxFQUFFLEdBQUdBLEVBQUwsR0FBVSxDQUFwQixJQUF5QkEsRUFBbEMsQ0FIVDtBQUFBLFVBSUkzYixFQUFFLEdBQUdsNkIsSUFBSSxDQUFDbzZCLEdBQUwsQ0FBU3A2QixJQUFJLENBQUNrUixJQUFMLENBQVU0a0MsRUFBRSxHQUFHQSxFQUFMLEdBQVUsQ0FBcEIsSUFBeUJBLEVBQWxDLENBSlQ7QUFLQXJwQixNQUFBQSxDQUFDLEdBQUcsQ0FBQ3lOLEVBQUUsR0FBR0QsRUFBTixJQUFZbWIsR0FBaEI7O0FBQ0F6NkMsTUFBQUEsQ0FBQyxHQUFHLFVBQVN5TSxDQUFULEVBQVk7QUFDZCxZQUFJbUwsQ0FBQyxHQUFHbkwsQ0FBQyxHQUFHcWxCLENBQVo7QUFBQSxZQUNJc3BCLE1BQU0sR0FBR3pRLElBQUksQ0FBQ3JMLEVBQUQsQ0FEakI7QUFBQSxZQUVJdUQsQ0FBQyxHQUFHdlIsRUFBRSxJQUFJb3BCLElBQUksR0FBR3ZZLEVBQVgsQ0FBRixJQUFvQmlaLE1BQU0sR0FBR2IsSUFBSSxDQUFDRSxHQUFHLEdBQUc3aUMsQ0FBTixHQUFVMG5CLEVBQVgsQ0FBYixHQUE4QnVMLElBQUksQ0FBQ3ZMLEVBQUQsQ0FBdEQsQ0FGUjtBQUdBLGVBQU8sQ0FDTHViLEdBQUcsR0FBR2hZLENBQUMsR0FBRzVRLEVBREwsRUFFTDZvQixHQUFHLEdBQUdqWSxDQUFDLEdBQUczUSxFQUZMLEVBR0xaLEVBQUUsR0FBRzhwQixNQUFMLEdBQWN6USxJQUFJLENBQUM4UCxHQUFHLEdBQUc3aUMsQ0FBTixHQUFVMG5CLEVBQVgsQ0FIYixDQUFQO0FBS0QsT0FURDtBQVVEOztBQUVEdC9CLElBQUFBLENBQUMsQ0FBQ21WLFFBQUYsR0FBYTJjLENBQUMsR0FBRyxJQUFKLEdBQVcyb0IsR0FBWCxHQUFpQnAxQyxJQUFJLENBQUNnMkMsS0FBbkM7QUFFQSxXQUFPcjdDLENBQVA7QUFDRDs7QUFFRDQ2QyxFQUFBQSxJQUFJLENBQUNILEdBQUwsR0FBVyxVQUFTMXBDLENBQVQsRUFBWTtBQUNyQixRQUFJdXFDLEVBQUUsR0FBR2oyQyxJQUFJLENBQUNnZ0IsR0FBTCxDQUFTLElBQVQsRUFBZSxDQUFDdFUsQ0FBaEIsQ0FBVDtBQUFBLFFBQTZCd3FDLEVBQUUsR0FBR0QsRUFBRSxHQUFHQSxFQUF2QztBQUFBLFFBQTJDRSxFQUFFLEdBQUdELEVBQUUsR0FBR0EsRUFBckQ7O0FBQ0EsV0FBT2YsT0FBTyxDQUFDYyxFQUFELEVBQUtDLEVBQUwsRUFBU0MsRUFBVCxDQUFkO0FBQ0QsR0FIRDs7QUFLQSxTQUFPWixJQUFQO0FBQ0QsQ0F4RGMsRUF3RFp2MUMsSUFBSSxDQUFDZzJDLEtBeERPLEVBd0RBLENBeERBLEVBd0RHLENBeERILENBQWYsRTs7QUNkQSw2QkFBZSxxQkFBUy91QyxLQUFULEVBQWdCO0FBQzdCLE1BQUl3a0IsV0FBSjs7QUFDQSxTQUFPQSxXQUFXLEdBQUd4a0IsS0FBSyxDQUFDd2tCLFdBQTNCLEVBQXdDeGtCLEtBQUssR0FBR3drQixXQUFSOztBQUN4QyxTQUFPeGtCLEtBQVA7QUFDRCxDOztBQ0pEO0FBRUEsNkJBQWUscUJBQVNBLEtBQVQsRUFBZ0J4TSxJQUFoQixFQUFzQjtBQUNuQ3dNLEVBQUFBLEtBQUssR0FBR3drQixXQUFXLENBQUN4a0IsS0FBRCxDQUFuQjtBQUNBLE1BQUl4TSxJQUFJLEtBQUsyVCxTQUFiLEVBQXdCM1QsSUFBSSxHQUFHd00sS0FBSyxDQUFDbXZDLGFBQWI7O0FBQ3hCLE1BQUkzN0MsSUFBSixFQUFVO0FBQ1IsUUFBSTBHLEdBQUcsR0FBRzFHLElBQUksQ0FBQzJ1QixlQUFMLElBQXdCM3VCLElBQWxDOztBQUNBLFFBQUkwRyxHQUFHLENBQUNrMUMsY0FBUixFQUF3QjtBQUN0QixVQUFJdG9CLEtBQUssR0FBRzVzQixHQUFHLENBQUNrMUMsY0FBSixFQUFaO0FBQ0F0b0IsTUFBQUEsS0FBSyxDQUFDL3lCLENBQU4sR0FBVWlNLEtBQUssQ0FBQ3F2QyxPQUFoQixFQUF5QnZvQixLQUFLLENBQUM5TSxDQUFOLEdBQVVoYSxLQUFLLENBQUNzdkMsT0FBekM7QUFDQXhvQixNQUFBQSxLQUFLLEdBQUdBLEtBQUssQ0FBQ3lvQixlQUFOLENBQXNCLzdDLElBQUksQ0FBQ2c4QyxZQUFMLEdBQW9CQyxPQUFwQixFQUF0QixDQUFSO0FBQ0EsYUFBTyxDQUFDM29CLEtBQUssQ0FBQy95QixDQUFQLEVBQVUreUIsS0FBSyxDQUFDOU0sQ0FBaEIsQ0FBUDtBQUNEOztBQUNELFFBQUl4bUIsSUFBSSxDQUFDazhDLHFCQUFULEVBQWdDO0FBQzlCLFVBQUluSixJQUFJLEdBQUcveUMsSUFBSSxDQUFDazhDLHFCQUFMLEVBQVg7QUFDQSxhQUFPLENBQUMxdkMsS0FBSyxDQUFDcXZDLE9BQU4sR0FBZ0I5SSxJQUFJLENBQUMxVixJQUFyQixHQUE0QnI5QixJQUFJLENBQUNtOEMsVUFBbEMsRUFBOEMzdkMsS0FBSyxDQUFDc3ZDLE9BQU4sR0FBZ0IvSSxJQUFJLENBQUNxSixHQUFyQixHQUEyQnA4QyxJQUFJLENBQUNxOEMsU0FBOUUsQ0FBUDtBQUNEO0FBQ0Y7O0FBQ0QsU0FBTyxDQUFDN3ZDLEtBQUssQ0FBQzh2QyxLQUFQLEVBQWM5dkMsS0FBSyxDQUFDK3ZDLEtBQXBCLENBQVA7QUFDRCxDOztBQ25CRCwyREFBZWg4QyxDQUFDLElBQUksTUFBTUEsQ0FBMUIsRTs7QUNBZSxTQUFTaThDLFNBQVQsQ0FBbUI1dkMsSUFBbkIsRUFBeUI7QUFDdENva0IsRUFBQUEsV0FEc0M7QUFFdENDLEVBQUFBLE1BRnNDO0FBR3RDOVosRUFBQUEsU0FIc0M7QUFJdEN0RyxFQUFBQTtBQUpzQyxDQUF6QixFQUtaO0FBQ0RxSSxFQUFBQSxNQUFNLENBQUN1akMsZ0JBQVAsQ0FBd0IsSUFBeEIsRUFBOEI7QUFDNUI3dkMsSUFBQUEsSUFBSSxFQUFFO0FBQUM1SSxNQUFBQSxLQUFLLEVBQUU0SSxJQUFSO0FBQWM4dkMsTUFBQUEsVUFBVSxFQUFFLElBQTFCO0FBQWdDQyxNQUFBQSxZQUFZLEVBQUU7QUFBOUMsS0FEc0I7QUFFNUIzckIsSUFBQUEsV0FBVyxFQUFFO0FBQUNodEIsTUFBQUEsS0FBSyxFQUFFZ3RCLFdBQVI7QUFBcUIwckIsTUFBQUEsVUFBVSxFQUFFLElBQWpDO0FBQXVDQyxNQUFBQSxZQUFZLEVBQUU7QUFBckQsS0FGZTtBQUc1QjFyQixJQUFBQSxNQUFNLEVBQUU7QUFBQ2p0QixNQUFBQSxLQUFLLEVBQUVpdEIsTUFBUjtBQUFnQnlyQixNQUFBQSxVQUFVLEVBQUUsSUFBNUI7QUFBa0NDLE1BQUFBLFlBQVksRUFBRTtBQUFoRCxLQUhvQjtBQUk1QnhsQyxJQUFBQSxTQUFTLEVBQUU7QUFBQ25ULE1BQUFBLEtBQUssRUFBRW1ULFNBQVI7QUFBbUJ1bEMsTUFBQUEsVUFBVSxFQUFFLElBQS9CO0FBQXFDQyxNQUFBQSxZQUFZLEVBQUU7QUFBbkQsS0FKaUI7QUFLNUIxckMsSUFBQUEsQ0FBQyxFQUFFO0FBQUNqTixNQUFBQSxLQUFLLEVBQUU2TTtBQUFSO0FBTHlCLEdBQTlCO0FBT0QsQzs7QUNiTSxTQUFTK3JDLFNBQVQsQ0FBbUIxM0IsQ0FBbkIsRUFBc0Iza0IsQ0FBdEIsRUFBeUJpbUIsQ0FBekIsRUFBNEI7QUFDakMsT0FBS3RCLENBQUwsR0FBU0EsQ0FBVDtBQUNBLE9BQUsza0IsQ0FBTCxHQUFTQSxDQUFUO0FBQ0EsT0FBS2ltQixDQUFMLEdBQVNBLENBQVQ7QUFDRDtBQUVEbzJCLFNBQVMsQ0FBQ3Y3QyxTQUFWLEdBQXNCO0FBQ3BCcUIsRUFBQUEsV0FBVyxFQUFFazZDLFNBRE87QUFFcEJ2a0MsRUFBQUEsS0FBSyxFQUFFLFVBQVM2TSxDQUFULEVBQVk7QUFDakIsV0FBT0EsQ0FBQyxLQUFLLENBQU4sR0FBVSxJQUFWLEdBQWlCLElBQUkwM0IsU0FBSixDQUFjLEtBQUsxM0IsQ0FBTCxHQUFTQSxDQUF2QixFQUEwQixLQUFLM2tCLENBQS9CLEVBQWtDLEtBQUtpbUIsQ0FBdkMsQ0FBeEI7QUFDRCxHQUptQjtBQUtwQnpPLEVBQUFBLFNBQVMsRUFBRSxVQUFTeFgsQ0FBVCxFQUFZaW1CLENBQVosRUFBZTtBQUN4QixXQUFPam1CLENBQUMsS0FBSyxDQUFOLEdBQVVpbUIsQ0FBQyxLQUFLLENBQWhCLEdBQW9CLElBQXBCLEdBQTJCLElBQUlvMkIsU0FBSixDQUFjLEtBQUsxM0IsQ0FBbkIsRUFBc0IsS0FBSzNrQixDQUFMLEdBQVMsS0FBSzJrQixDQUFMLEdBQVMza0IsQ0FBeEMsRUFBMkMsS0FBS2ltQixDQUFMLEdBQVMsS0FBS3RCLENBQUwsR0FBU3NCLENBQTdELENBQWxDO0FBQ0QsR0FQbUI7QUFRcEIxbEIsRUFBQUEsS0FBSyxFQUFFLFVBQVN3eUIsS0FBVCxFQUFnQjtBQUNyQixXQUFPLENBQUNBLEtBQUssQ0FBQyxDQUFELENBQUwsR0FBVyxLQUFLcE8sQ0FBaEIsR0FBb0IsS0FBSzNrQixDQUExQixFQUE2Qit5QixLQUFLLENBQUMsQ0FBRCxDQUFMLEdBQVcsS0FBS3BPLENBQWhCLEdBQW9CLEtBQUtzQixDQUF0RCxDQUFQO0FBQ0QsR0FWbUI7QUFXcEJxMkIsRUFBQUEsTUFBTSxFQUFFLFVBQVN0OEMsQ0FBVCxFQUFZO0FBQ2xCLFdBQU9BLENBQUMsR0FBRyxLQUFLMmtCLENBQVQsR0FBYSxLQUFLM2tCLENBQXpCO0FBQ0QsR0FibUI7QUFjcEJ1OEMsRUFBQUEsTUFBTSxFQUFFLFVBQVN0MkIsQ0FBVCxFQUFZO0FBQ2xCLFdBQU9BLENBQUMsR0FBRyxLQUFLdEIsQ0FBVCxHQUFhLEtBQUtzQixDQUF6QjtBQUNELEdBaEJtQjtBQWlCcEJxYyxFQUFBQSxNQUFNLEVBQUUsVUFBU2thLFFBQVQsRUFBbUI7QUFDekIsV0FBTyxDQUFDLENBQUNBLFFBQVEsQ0FBQyxDQUFELENBQVIsR0FBYyxLQUFLeDhDLENBQXBCLElBQXlCLEtBQUsya0IsQ0FBL0IsRUFBa0MsQ0FBQzYzQixRQUFRLENBQUMsQ0FBRCxDQUFSLEdBQWMsS0FBS3YyQixDQUFwQixJQUF5QixLQUFLdEIsQ0FBaEUsQ0FBUDtBQUNELEdBbkJtQjtBQW9CcEI4M0IsRUFBQUEsT0FBTyxFQUFFLFVBQVN6OEMsQ0FBVCxFQUFZO0FBQ25CLFdBQU8sQ0FBQ0EsQ0FBQyxHQUFHLEtBQUtBLENBQVYsSUFBZSxLQUFLMmtCLENBQTNCO0FBQ0QsR0F0Qm1CO0FBdUJwQiszQixFQUFBQSxPQUFPLEVBQUUsVUFBU3oyQixDQUFULEVBQVk7QUFDbkIsV0FBTyxDQUFDQSxDQUFDLEdBQUcsS0FBS0EsQ0FBVixJQUFlLEtBQUt0QixDQUEzQjtBQUNELEdBekJtQjtBQTBCcEJnNEIsRUFBQUEsUUFBUSxFQUFFLFVBQVMzOEMsQ0FBVCxFQUFZO0FBQ3BCLFdBQU9BLENBQUMsQ0FBQ2dSLElBQUYsR0FBUzJ3QixNQUFULENBQWdCM2hDLENBQUMsQ0FBQzRoQyxLQUFGLEdBQVVqZ0MsR0FBVixDQUFjLEtBQUs4NkMsT0FBbkIsRUFBNEIsSUFBNUIsRUFBa0M5NkMsR0FBbEMsQ0FBc0MzQixDQUFDLENBQUNzaUMsTUFBeEMsRUFBZ0R0aUMsQ0FBaEQsQ0FBaEIsQ0FBUDtBQUNELEdBNUJtQjtBQTZCcEI0OEMsRUFBQUEsUUFBUSxFQUFFLFVBQVMzMkIsQ0FBVCxFQUFZO0FBQ3BCLFdBQU9BLENBQUMsQ0FBQ2pWLElBQUYsR0FBUzJ3QixNQUFULENBQWdCMWIsQ0FBQyxDQUFDMmIsS0FBRixHQUFVamdDLEdBQVYsQ0FBYyxLQUFLKzZDLE9BQW5CLEVBQTRCLElBQTVCLEVBQWtDLzZDLEdBQWxDLENBQXNDc2tCLENBQUMsQ0FBQ3FjLE1BQXhDLEVBQWdEcmMsQ0FBaEQsQ0FBaEIsQ0FBUDtBQUNELEdBL0JtQjtBQWdDcEJyQyxFQUFBQSxRQUFRLEVBQUUsWUFBVztBQUNuQixXQUFPLGVBQWUsS0FBSzVqQixDQUFwQixHQUF3QixHQUF4QixHQUE4QixLQUFLaW1CLENBQW5DLEdBQXVDLFVBQXZDLEdBQW9ELEtBQUt0QixDQUF6RCxHQUE2RCxHQUFwRTtBQUNEO0FBbENtQixDQUF0QjtBQXFDTyxJQUFJalAsa0JBQVEsR0FBRyxJQUFJMm1DLFNBQUosQ0FBYyxDQUFkLEVBQWlCLENBQWpCLEVBQW9CLENBQXBCLENBQWY7QUFFUHpsQyxTQUFTLENBQUM5VixTQUFWLEdBQXNCdTdDLFNBQVMsQ0FBQ3Y3QyxTQUFoQztBQUVlLFNBQVM4VixTQUFULENBQW1CblgsSUFBbkIsRUFBeUI7QUFDdEMsU0FBTyxDQUFDQSxJQUFJLENBQUNvOUMsTUFBYixFQUFxQixJQUFJLEVBQUVwOUMsSUFBSSxHQUFHQSxJQUFJLENBQUM2RixVQUFkLENBQUosRUFBK0IsT0FBT29RLGtCQUFQOztBQUNwRCxTQUFPalcsSUFBSSxDQUFDbzlDLE1BQVo7QUFDRCxDOztBQ2xETSxTQUFTdndCLHlCQUFULENBQXVCcmdCLEtBQXZCLEVBQThCO0FBQ25DQSxFQUFBQSxLQUFLLENBQUN5dEMsd0JBQU47QUFDRDtBQUVELDZCQUFlLDZCQUFTenRDLEtBQVQsRUFBZ0I7QUFDN0JBLEVBQUFBLEtBQUssQ0FBQzB0QyxjQUFOO0FBQ0ExdEMsRUFBQUEsS0FBSyxDQUFDeXRDLHdCQUFOO0FBQ0QsQzs7QUNQRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0NBR0E7QUFDQTs7QUFDQSxTQUFTMXJCLGtCQUFULENBQXVCL2hCLEtBQXZCLEVBQThCO0FBQzVCLFNBQU8sQ0FBQyxDQUFDQSxLQUFLLENBQUNnaUIsT0FBUCxJQUFrQmhpQixLQUFLLENBQUNJLElBQU4sS0FBZSxPQUFsQyxLQUE4QyxDQUFDSixLQUFLLENBQUNpaUIsTUFBNUQ7QUFDRDs7QUFFRCxTQUFTQyxrQkFBVCxHQUF5QjtBQUN2QixNQUFJaGIsQ0FBQyxHQUFHLElBQVI7O0FBQ0EsTUFBSUEsQ0FBQyxZQUFZNHBDLFVBQWpCLEVBQTZCO0FBQzNCNXBDLElBQUFBLENBQUMsR0FBR0EsQ0FBQyxDQUFDaWIsZUFBRixJQUFxQmpiLENBQXpCOztBQUNBLFFBQUlBLENBQUMsQ0FBQ2tiLFlBQUYsQ0FBZSxTQUFmLENBQUosRUFBK0I7QUFDN0JsYixNQUFBQSxDQUFDLEdBQUdBLENBQUMsQ0FBQ21iLE9BQUYsQ0FBVXpYLE9BQWQ7QUFDQSxhQUFPLENBQUMsQ0FBQzFELENBQUMsQ0FBQ25ULENBQUgsRUFBTW1ULENBQUMsQ0FBQzhTLENBQVIsQ0FBRCxFQUFhLENBQUM5UyxDQUFDLENBQUNuVCxDQUFGLEdBQU1tVCxDQUFDLENBQUNvYixLQUFULEVBQWdCcGIsQ0FBQyxDQUFDOFMsQ0FBRixHQUFNOVMsQ0FBQyxDQUFDcWIsTUFBeEIsQ0FBYixDQUFQO0FBQ0Q7O0FBQ0QsV0FBTyxDQUFDLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FBRCxFQUFTLENBQUNyYixDQUFDLENBQUNvYixLQUFGLENBQVExWCxPQUFSLENBQWdCcFQsS0FBakIsRUFBd0IwUCxDQUFDLENBQUNxYixNQUFGLENBQVMzWCxPQUFULENBQWlCcFQsS0FBekMsQ0FBVCxDQUFQO0FBQ0Q7O0FBQ0QsU0FBTyxDQUFDLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FBRCxFQUFTLENBQUMwUCxDQUFDLENBQUM2cEMsV0FBSCxFQUFnQjdwQyxDQUFDLENBQUM4cEMsWUFBbEIsQ0FBVCxDQUFQO0FBQ0Q7O0FBRUQsU0FBU0MsZ0JBQVQsR0FBNEI7QUFDMUIsU0FBTyxLQUFLTCxNQUFMLElBQWVubkMsa0JBQXRCO0FBQ0Q7O0FBRUQsU0FBU3luQyxpQkFBVCxDQUEyQmx4QyxLQUEzQixFQUFrQztBQUNoQyxTQUFPLENBQUNBLEtBQUssQ0FBQ214QyxNQUFQLElBQWlCbnhDLEtBQUssQ0FBQ294QyxTQUFOLEtBQW9CLENBQXBCLEdBQXdCLElBQXhCLEdBQStCcHhDLEtBQUssQ0FBQ294QyxTQUFOLEdBQWtCLENBQWxCLEdBQXNCLEtBQXRFLEtBQWdGcHhDLEtBQUssQ0FBQ2dpQixPQUFOLEdBQWdCLEVBQWhCLEdBQXFCLENBQXJHLENBQVA7QUFDRDs7QUFFRCxTQUFTUSxxQkFBVCxHQUE0QjtBQUMxQixTQUFPQyxTQUFTLENBQUNDLGNBQVYsSUFBNkIsa0JBQWtCLElBQXREO0FBQ0Q7O0FBRUQsU0FBUzJ1QixnQkFBVCxDQUEwQjFtQyxTQUExQixFQUFxQ2lZLE1BQXJDLEVBQTZDMHVCLGVBQTdDLEVBQThEO0FBQzVELE1BQUlDLEdBQUcsR0FBRzVtQyxTQUFTLENBQUM2bEMsT0FBVixDQUFrQjV0QixNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVUsQ0FBVixDQUFsQixJQUFrQzB1QixlQUFlLENBQUMsQ0FBRCxDQUFmLENBQW1CLENBQW5CLENBQTVDO0FBQUEsTUFDSUUsR0FBRyxHQUFHN21DLFNBQVMsQ0FBQzZsQyxPQUFWLENBQWtCNXRCLE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVSxDQUFWLENBQWxCLElBQWtDMHVCLGVBQWUsQ0FBQyxDQUFELENBQWYsQ0FBbUIsQ0FBbkIsQ0FENUM7QUFBQSxNQUVJRyxHQUFHLEdBQUc5bUMsU0FBUyxDQUFDOGxDLE9BQVYsQ0FBa0I3dEIsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVLENBQVYsQ0FBbEIsSUFBa0MwdUIsZUFBZSxDQUFDLENBQUQsQ0FBZixDQUFtQixDQUFuQixDQUY1QztBQUFBLE1BR0lJLEdBQUcsR0FBRy9tQyxTQUFTLENBQUM4bEMsT0FBVixDQUFrQjd0QixNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVUsQ0FBVixDQUFsQixJQUFrQzB1QixlQUFlLENBQUMsQ0FBRCxDQUFmLENBQW1CLENBQW5CLENBSDVDO0FBSUEsU0FBTzNtQyxTQUFTLENBQUNZLFNBQVYsQ0FDTGltQyxHQUFHLEdBQUdELEdBQU4sR0FBWSxDQUFDQSxHQUFHLEdBQUdDLEdBQVAsSUFBYyxDQUExQixHQUE4Qno0QyxJQUFJLENBQUNDLEdBQUwsQ0FBUyxDQUFULEVBQVl1NEMsR0FBWixLQUFvQng0QyxJQUFJLENBQUNnZ0IsR0FBTCxDQUFTLENBQVQsRUFBWXk0QixHQUFaLENBRDdDLEVBRUxFLEdBQUcsR0FBR0QsR0FBTixHQUFZLENBQUNBLEdBQUcsR0FBR0MsR0FBUCxJQUFjLENBQTFCLEdBQThCMzRDLElBQUksQ0FBQ0MsR0FBTCxDQUFTLENBQVQsRUFBWXk0QyxHQUFaLEtBQW9CMTRDLElBQUksQ0FBQ2dnQixHQUFMLENBQVMsQ0FBVCxFQUFZMjRCLEdBQVosQ0FGN0MsQ0FBUDtBQUlEOztBQUVELDZCQUFlLGdCQUFXO0FBQ3hCLE1BQUl2OEMsTUFBTSxHQUFHNHNCLGtCQUFiO0FBQUEsTUFDSWEsTUFBTSxHQUFHVixrQkFEYjtBQUFBLE1BRUl5dkIsU0FBUyxHQUFHTixnQkFGaEI7QUFBQSxNQUdJTyxVQUFVLEdBQUdWLGlCQUhqQjtBQUFBLE1BSUlodUIsU0FBUyxHQUFHVixxQkFKaEI7QUFBQSxNQUtJcXZCLFdBQVcsR0FBRyxDQUFDLENBQUQsRUFBSTdxQyxRQUFKLENBTGxCO0FBQUEsTUFNSXNxQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLENBQUN0cUMsUUFBRixFQUFZLENBQUNBLFFBQWIsQ0FBRCxFQUF5QixDQUFDQSxRQUFELEVBQVdBLFFBQVgsQ0FBekIsQ0FOdEI7QUFBQSxNQU9JNkIsUUFBUSxHQUFHLEdBUGY7QUFBQSxNQVFJNlMsV0FBVyxHQUFHbTFCLFFBUmxCO0FBQUEsTUFTSXp0QixTQUFTLEdBQUcvZSxZQUFRLENBQUMsT0FBRCxFQUFVLE1BQVYsRUFBa0IsS0FBbEIsQ0FUeEI7QUFBQSxNQVVJeXRDLGFBVko7QUFBQSxNQVdJQyxVQVhKO0FBQUEsTUFZSXp1QixXQVpKO0FBQUEsTUFhSTB1QixVQUFVLEdBQUcsR0FiakI7QUFBQSxNQWNJQyxVQUFVLEdBQUcsR0FkakI7QUFBQSxNQWVJQyxjQUFjLEdBQUcsQ0FmckI7QUFBQSxNQWdCSUMsV0FBVyxHQUFHLEVBaEJsQjs7QUFrQkEsV0FBUzdELElBQVQsQ0FBY2oyQyxTQUFkLEVBQXlCO0FBQ3ZCQSxJQUFBQSxTQUFTLENBQ0p3SCxRQURMLENBQ2MsUUFEZCxFQUN3Qm94QyxnQkFEeEIsRUFFSzF3QyxFQUZMLENBRVEsWUFGUixFQUVzQjZ4QyxPQUZ0QixFQUUrQjtBQUFDOUUsTUFBQUEsT0FBTyxFQUFFO0FBQVYsS0FGL0IsRUFHSy9zQyxFQUhMLENBR1EsZ0JBSFIsRUFHMEI4eEMsV0FIMUIsRUFJSzl4QyxFQUpMLENBSVEsZUFKUixFQUl5Qit4QyxVQUp6QixFQUtHbjlDLE1BTEgsQ0FLVSt0QixTQUxWLEVBTUszaUIsRUFOTCxDQU1RLGlCQU5SLEVBTTJCZ3lDLFlBTjNCLEVBT0toeUMsRUFQTCxDQU9RLGdCQVBSLEVBTzBCb2pCLFVBUDFCLEVBUUtwakIsRUFSTCxDQVFRLGdDQVJSLEVBUTBDcWpCLFVBUjFDLEVBU0szbkIsS0FUTCxDQVNXLDZCQVRYLEVBUzBDLGVBVDFDO0FBVUQ7O0FBRURxeUMsRUFBQUEsSUFBSSxDQUFDM2pDLFNBQUwsR0FBaUIsVUFBUzZuQyxVQUFULEVBQXFCN25DLFNBQXJCLEVBQWdDbWMsS0FBaEMsRUFBdUM5bUIsS0FBdkMsRUFBOEM7QUFDN0QsUUFBSTNILFNBQVMsR0FBR202QyxVQUFVLENBQUNuNkMsU0FBWCxHQUF1Qm02QyxVQUFVLENBQUNuNkMsU0FBWCxFQUF2QixHQUFnRG02QyxVQUFoRTtBQUNBbjZDLElBQUFBLFNBQVMsQ0FBQ3dILFFBQVYsQ0FBbUIsUUFBbkIsRUFBNkJveEMsZ0JBQTdCOztBQUNBLFFBQUl1QixVQUFVLEtBQUtuNkMsU0FBbkIsRUFBOEI7QUFDNUI0USxNQUFBQSxRQUFRLENBQUN1cEMsVUFBRCxFQUFhN25DLFNBQWIsRUFBd0JtYyxLQUF4QixFQUErQjltQixLQUEvQixDQUFSO0FBQ0QsS0FGRCxNQUVPO0FBQ0wzSCxNQUFBQSxTQUFTLENBQUNpUixTQUFWLEdBQXNCek4sSUFBdEIsQ0FBMkIsWUFBVztBQUNwQzQyQyxRQUFBQSxPQUFPLENBQUMsSUFBRCxFQUFPbCtDLFNBQVAsQ0FBUCxDQUNHeUwsS0FESCxDQUNTQSxLQURULEVBRUdtSixLQUZILEdBR0dtbEMsSUFISCxDQUdRLElBSFIsRUFHYyxPQUFPM2pDLFNBQVAsS0FBcUIsVUFBckIsR0FBa0NBLFNBQVMsQ0FBQ3JXLEtBQVYsQ0FBZ0IsSUFBaEIsRUFBc0JDLFNBQXRCLENBQWxDLEdBQXFFb1csU0FIbkYsRUFJRzRQLEdBSkg7QUFLRCxPQU5EO0FBT0Q7QUFDRixHQWREOztBQWdCQSt6QixFQUFBQSxJQUFJLENBQUNvRSxPQUFMLEdBQWUsVUFBU3I2QyxTQUFULEVBQW9CcWdCLENBQXBCLEVBQXVCaU8sQ0FBdkIsRUFBMEIzbUIsS0FBMUIsRUFBaUM7QUFDOUNzdUMsSUFBQUEsSUFBSSxDQUFDcUUsT0FBTCxDQUFhdDZDLFNBQWIsRUFBd0IsWUFBVztBQUNqQyxVQUFJdTZDLEVBQUUsR0FBRyxLQUFLaEMsTUFBTCxDQUFZbDRCLENBQXJCO0FBQUEsVUFDSW02QixFQUFFLEdBQUcsT0FBT242QixDQUFQLEtBQWEsVUFBYixHQUEwQkEsQ0FBQyxDQUFDcGtCLEtBQUYsQ0FBUSxJQUFSLEVBQWNDLFNBQWQsQ0FBMUIsR0FBcURta0IsQ0FEOUQ7QUFFQSxhQUFPazZCLEVBQUUsR0FBR0MsRUFBWjtBQUNELEtBSkQsRUFJR2xzQixDQUpILEVBSU0zbUIsS0FKTjtBQUtELEdBTkQ7O0FBUUFzdUMsRUFBQUEsSUFBSSxDQUFDcUUsT0FBTCxHQUFlLFVBQVN0NkMsU0FBVCxFQUFvQnFnQixDQUFwQixFQUF1QmlPLENBQXZCLEVBQTBCM21CLEtBQTFCLEVBQWlDO0FBQzlDc3VDLElBQUFBLElBQUksQ0FBQzNqQyxTQUFMLENBQWV0UyxTQUFmLEVBQTBCLFlBQVc7QUFDbkMsVUFBSTZPLENBQUMsR0FBRzBiLE1BQU0sQ0FBQ3R1QixLQUFQLENBQWEsSUFBYixFQUFtQkMsU0FBbkIsQ0FBUjtBQUFBLFVBQ0lnVCxFQUFFLEdBQUcsS0FBS3FwQyxNQURkO0FBQUEsVUFFSXpKLEVBQUUsR0FBR3hnQixDQUFDLElBQUksSUFBTCxHQUFZbXNCLFFBQVEsQ0FBQzVyQyxDQUFELENBQXBCLEdBQTBCLE9BQU95ZixDQUFQLEtBQWEsVUFBYixHQUEwQkEsQ0FBQyxDQUFDcnlCLEtBQUYsQ0FBUSxJQUFSLEVBQWNDLFNBQWQsQ0FBMUIsR0FBcURveUIsQ0FGeEY7QUFBQSxVQUdJeWdCLEVBQUUsR0FBRzcvQixFQUFFLENBQUM4dUIsTUFBSCxDQUFVOFEsRUFBVixDQUhUO0FBQUEsVUFJSTBMLEVBQUUsR0FBRyxPQUFPbjZCLENBQVAsS0FBYSxVQUFiLEdBQTBCQSxDQUFDLENBQUNwa0IsS0FBRixDQUFRLElBQVIsRUFBY0MsU0FBZCxDQUExQixHQUFxRG1rQixDQUo5RDtBQUtBLGFBQU9pNUIsU0FBUyxDQUFDcG1DLFNBQVMsQ0FBQ00sS0FBSyxDQUFDdEUsRUFBRCxFQUFLc3JDLEVBQUwsQ0FBTixFQUFnQjFMLEVBQWhCLEVBQW9CQyxFQUFwQixDQUFWLEVBQW1DbGdDLENBQW5DLEVBQXNDb3FDLGVBQXRDLENBQWhCO0FBQ0QsS0FQRCxFQU9HM3FCLENBUEgsRUFPTTNtQixLQVBOO0FBUUQsR0FURDs7QUFXQXN1QyxFQUFBQSxJQUFJLENBQUN5RSxXQUFMLEdBQW1CLFVBQVMxNkMsU0FBVCxFQUFvQnRFLENBQXBCLEVBQXVCaW1CLENBQXZCLEVBQTBCaGEsS0FBMUIsRUFBaUM7QUFDbERzdUMsSUFBQUEsSUFBSSxDQUFDM2pDLFNBQUwsQ0FBZXRTLFNBQWYsRUFBMEIsWUFBVztBQUNuQyxhQUFPczVDLFNBQVMsQ0FBQyxLQUFLZixNQUFMLENBQVlybEMsU0FBWixDQUNmLE9BQU94WCxDQUFQLEtBQWEsVUFBYixHQUEwQkEsQ0FBQyxDQUFDTyxLQUFGLENBQVEsSUFBUixFQUFjQyxTQUFkLENBQTFCLEdBQXFEUixDQUR0QyxFQUVmLE9BQU9pbUIsQ0FBUCxLQUFhLFVBQWIsR0FBMEJBLENBQUMsQ0FBQzFsQixLQUFGLENBQVEsSUFBUixFQUFjQyxTQUFkLENBQTFCLEdBQXFEeWxCLENBRnRDLENBQUQsRUFHYjRJLE1BQU0sQ0FBQ3R1QixLQUFQLENBQWEsSUFBYixFQUFtQkMsU0FBbkIsQ0FIYSxFQUdrQis4QyxlQUhsQixDQUFoQjtBQUlELEtBTEQsRUFLRyxJQUxILEVBS1N0eEMsS0FMVDtBQU1ELEdBUEQ7O0FBU0FzdUMsRUFBQUEsSUFBSSxDQUFDMEUsV0FBTCxHQUFtQixVQUFTMzZDLFNBQVQsRUFBb0J0RSxDQUFwQixFQUF1QmltQixDQUF2QixFQUEwQjJNLENBQTFCLEVBQTZCM21CLEtBQTdCLEVBQW9DO0FBQ3JEc3VDLElBQUFBLElBQUksQ0FBQzNqQyxTQUFMLENBQWV0UyxTQUFmLEVBQTBCLFlBQVc7QUFDbkMsVUFBSTZPLENBQUMsR0FBRzBiLE1BQU0sQ0FBQ3R1QixLQUFQLENBQWEsSUFBYixFQUFtQkMsU0FBbkIsQ0FBUjtBQUFBLFVBQ0k0TCxDQUFDLEdBQUcsS0FBS3l3QyxNQURiO0FBQUEsVUFFSXpKLEVBQUUsR0FBR3hnQixDQUFDLElBQUksSUFBTCxHQUFZbXNCLFFBQVEsQ0FBQzVyQyxDQUFELENBQXBCLEdBQTBCLE9BQU95ZixDQUFQLEtBQWEsVUFBYixHQUEwQkEsQ0FBQyxDQUFDcnlCLEtBQUYsQ0FBUSxJQUFSLEVBQWNDLFNBQWQsQ0FBMUIsR0FBcURveUIsQ0FGeEY7QUFHQSxhQUFPZ3JCLFNBQVMsQ0FBQ2xvQyw0QkFBQSxDQUFtQjA5QixFQUFFLENBQUMsQ0FBRCxDQUFyQixFQUEwQkEsRUFBRSxDQUFDLENBQUQsQ0FBNUIsRUFBaUN0N0IsS0FBakMsQ0FBdUMxTCxDQUFDLENBQUN1WSxDQUF6QyxFQUE0Q25OLFNBQTVDLENBQ2YsT0FBT3hYLENBQVAsS0FBYSxVQUFiLEdBQTBCLENBQUNBLENBQUMsQ0FBQ08sS0FBRixDQUFRLElBQVIsRUFBY0MsU0FBZCxDQUEzQixHQUFzRCxDQUFDUixDQUR4QyxFQUVmLE9BQU9pbUIsQ0FBUCxLQUFhLFVBQWIsR0FBMEIsQ0FBQ0EsQ0FBQyxDQUFDMWxCLEtBQUYsQ0FBUSxJQUFSLEVBQWNDLFNBQWQsQ0FBM0IsR0FBc0QsQ0FBQ3lsQixDQUZ4QyxDQUFELEVBR2I5UyxDQUhhLEVBR1ZvcUMsZUFIVSxDQUFoQjtBQUlELEtBUkQsRUFRRzNxQixDQVJILEVBUU0zbUIsS0FSTjtBQVNELEdBVkQ7O0FBWUEsV0FBUzZMLEtBQVQsQ0FBZWxCLFNBQWYsRUFBMEIrTixDQUExQixFQUE2QjtBQUMzQkEsSUFBQUEsQ0FBQyxHQUFHM2YsSUFBSSxDQUFDZ2dCLEdBQUwsQ0FBUzg0QixXQUFXLENBQUMsQ0FBRCxDQUFwQixFQUF5Qjk0QyxJQUFJLENBQUNDLEdBQUwsQ0FBUzY0QyxXQUFXLENBQUMsQ0FBRCxDQUFwQixFQUF5Qm41QixDQUF6QixDQUF6QixDQUFKO0FBQ0EsV0FBT0EsQ0FBQyxLQUFLL04sU0FBUyxDQUFDK04sQ0FBaEIsR0FBb0IvTixTQUFwQixHQUFnQyxJQUFJeWxDLFNBQUosQ0FBYzEzQixDQUFkLEVBQWlCL04sU0FBUyxDQUFDNVcsQ0FBM0IsRUFBOEI0VyxTQUFTLENBQUNxUCxDQUF4QyxDQUF2QztBQUNEOztBQUVELFdBQVN6TyxTQUFULENBQW1CWixTQUFuQixFQUE4Qnc4QixFQUE5QixFQUFrQ0MsRUFBbEMsRUFBc0M7QUFDcEMsUUFBSXJ6QyxDQUFDLEdBQUdvekMsRUFBRSxDQUFDLENBQUQsQ0FBRixHQUFRQyxFQUFFLENBQUMsQ0FBRCxDQUFGLEdBQVF6OEIsU0FBUyxDQUFDK04sQ0FBbEM7QUFBQSxRQUFxQ3NCLENBQUMsR0FBR210QixFQUFFLENBQUMsQ0FBRCxDQUFGLEdBQVFDLEVBQUUsQ0FBQyxDQUFELENBQUYsR0FBUXo4QixTQUFTLENBQUMrTixDQUFuRTtBQUNBLFdBQU8za0IsQ0FBQyxLQUFLNFcsU0FBUyxDQUFDNVcsQ0FBaEIsSUFBcUJpbUIsQ0FBQyxLQUFLclAsU0FBUyxDQUFDcVAsQ0FBckMsR0FBeUNyUCxTQUF6QyxHQUFxRCxJQUFJeWxDLFNBQUosQ0FBY3psQyxTQUFTLENBQUMrTixDQUF4QixFQUEyQjNrQixDQUEzQixFQUE4QmltQixDQUE5QixDQUE1RDtBQUNEOztBQUVELFdBQVM4NEIsUUFBVCxDQUFrQmx3QixNQUFsQixFQUEwQjtBQUN4QixXQUFPLENBQUMsQ0FBQyxDQUFDQSxNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVUsQ0FBVixDQUFELEdBQWdCLENBQUNBLE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVSxDQUFWLENBQWxCLElBQWtDLENBQW5DLEVBQXNDLENBQUMsQ0FBQ0EsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVLENBQVYsQ0FBRCxHQUFnQixDQUFDQSxNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVUsQ0FBVixDQUFsQixJQUFrQyxDQUF4RSxDQUFQO0FBQ0Q7O0FBRUQsV0FBUzNaLFFBQVQsQ0FBa0JxRCxVQUFsQixFQUE4QjNCLFNBQTlCLEVBQXlDbWMsS0FBekMsRUFBZ0Q5bUIsS0FBaEQsRUFBdUQ7QUFDckRzTSxJQUFBQSxVQUFVLENBQ0wvTCxFQURMLENBQ1EsWUFEUixFQUNzQixZQUFXO0FBQUVreUMsTUFBQUEsT0FBTyxDQUFDLElBQUQsRUFBT2wrQyxTQUFQLENBQVAsQ0FBeUJ5TCxLQUF6QixDQUErQkEsS0FBL0IsRUFBc0NtSixLQUF0QztBQUFnRCxLQURuRixFQUVLNUksRUFGTCxDQUVRLHlCQUZSLEVBRW1DLFlBQVc7QUFBRWt5QyxNQUFBQSxPQUFPLENBQUMsSUFBRCxFQUFPbCtDLFNBQVAsQ0FBUCxDQUF5QnlMLEtBQXpCLENBQStCQSxLQUEvQixFQUFzQ3VhLEdBQXRDO0FBQThDLEtBRjlGLEVBR0szUixLQUhMLENBR1csTUFIWCxFQUdtQixZQUFXO0FBQ3hCLFVBQUk1RCxJQUFJLEdBQUcsSUFBWDtBQUFBLFVBQ0lDLElBQUksR0FBRzFRLFNBRFg7QUFBQSxVQUVJZ2tCLENBQUMsR0FBR2s2QixPQUFPLENBQUN6dEMsSUFBRCxFQUFPQyxJQUFQLENBQVAsQ0FBb0JqRixLQUFwQixDQUEwQkEsS0FBMUIsQ0FGUjtBQUFBLFVBR0lrSCxDQUFDLEdBQUcwYixNQUFNLENBQUN0dUIsS0FBUCxDQUFhMFEsSUFBYixFQUFtQkMsSUFBbkIsQ0FIUjtBQUFBLFVBSUkwaEIsQ0FBQyxHQUFHRyxLQUFLLElBQUksSUFBVCxHQUFnQmdzQixRQUFRLENBQUM1ckMsQ0FBRCxDQUF4QixHQUE4QixPQUFPNGYsS0FBUCxLQUFpQixVQUFqQixHQUE4QkEsS0FBSyxDQUFDeHlCLEtBQU4sQ0FBWTBRLElBQVosRUFBa0JDLElBQWxCLENBQTlCLEdBQXdENmhCLEtBSjlGO0FBQUEsVUFLSXhGLENBQUMsR0FBR3ZvQixJQUFJLENBQUNnZ0IsR0FBTCxDQUFTN1IsQ0FBQyxDQUFDLENBQUQsQ0FBRCxDQUFLLENBQUwsSUFBVUEsQ0FBQyxDQUFDLENBQUQsQ0FBRCxDQUFLLENBQUwsQ0FBbkIsRUFBNEJBLENBQUMsQ0FBQyxDQUFELENBQUQsQ0FBSyxDQUFMLElBQVVBLENBQUMsQ0FBQyxDQUFELENBQUQsQ0FBSyxDQUFMLENBQXRDLENBTFI7QUFBQSxVQU1Jek4sQ0FBQyxHQUFHdUwsSUFBSSxDQUFDNHJDLE1BTmI7QUFBQSxVQU9JbDNDLENBQUMsR0FBRyxPQUFPaVIsU0FBUCxLQUFxQixVQUFyQixHQUFrQ0EsU0FBUyxDQUFDclcsS0FBVixDQUFnQjBRLElBQWhCLEVBQXNCQyxJQUF0QixDQUFsQyxHQUFnRTBGLFNBUHhFO0FBQUEsVUFRSWpYLENBQUMsR0FBR2dvQixXQUFXLENBQUNqaUIsQ0FBQyxDQUFDNDhCLE1BQUYsQ0FBUzFQLENBQVQsRUFBWXhoQixNQUFaLENBQW1CbWMsQ0FBQyxHQUFHN25CLENBQUMsQ0FBQ2lmLENBQXpCLENBQUQsRUFBOEJoZixDQUFDLENBQUMyOEIsTUFBRixDQUFTMVAsQ0FBVCxFQUFZeGhCLE1BQVosQ0FBbUJtYyxDQUFDLEdBQUc1bkIsQ0FBQyxDQUFDZ2YsQ0FBekIsQ0FBOUIsQ0FSbkI7QUFTQSxhQUFPLFVBQVN2WSxDQUFULEVBQVk7QUFDakIsWUFBSUEsQ0FBQyxLQUFLLENBQVYsRUFBYUEsQ0FBQyxHQUFHekcsQ0FBSixDQUFiLENBQW9CO0FBQXBCLGFBQ0s7QUFBRSxjQUFJb2UsQ0FBQyxHQUFHcGtCLENBQUMsQ0FBQ3lNLENBQUQsQ0FBVDtBQUFBLGNBQWN1WSxDQUFDLEdBQUc0SSxDQUFDLEdBQUd4SixDQUFDLENBQUMsQ0FBRCxDQUF2QjtBQUE0QjNYLFVBQUFBLENBQUMsR0FBRyxJQUFJaXdDLFNBQUosQ0FBYzEzQixDQUFkLEVBQWlCaU8sQ0FBQyxDQUFDLENBQUQsQ0FBRCxHQUFPN08sQ0FBQyxDQUFDLENBQUQsQ0FBRCxHQUFPWSxDQUEvQixFQUFrQ2lPLENBQUMsQ0FBQyxDQUFELENBQUQsR0FBTzdPLENBQUMsQ0FBQyxDQUFELENBQUQsR0FBT1ksQ0FBaEQsQ0FBSjtBQUF5RDtBQUM1RkgsUUFBQUEsQ0FBQyxDQUFDKzFCLElBQUYsQ0FBTyxJQUFQLEVBQWFudUMsQ0FBYjtBQUNELE9BSkQ7QUFLRCxLQWxCTDtBQW1CRDs7QUFFRCxXQUFTc3lDLE9BQVQsQ0FBaUJ6dEMsSUFBakIsRUFBdUJDLElBQXZCLEVBQTZCbWYsS0FBN0IsRUFBb0M7QUFDbEMsV0FBUSxDQUFDQSxLQUFELElBQVVwZixJQUFJLENBQUNpdUMsU0FBaEIsSUFBOEIsSUFBSUMsT0FBSixDQUFZbHVDLElBQVosRUFBa0JDLElBQWxCLENBQXJDO0FBQ0Q7O0FBRUQsV0FBU2l1QyxPQUFULENBQWlCbHVDLElBQWpCLEVBQXVCQyxJQUF2QixFQUE2QjtBQUMzQixTQUFLRCxJQUFMLEdBQVlBLElBQVo7QUFDQSxTQUFLQyxJQUFMLEdBQVlBLElBQVo7QUFDQSxTQUFLb0UsTUFBTCxHQUFjLENBQWQ7QUFDQSxTQUFLbWIsV0FBTCxHQUFtQixJQUFuQjtBQUNBLFNBQUs1QixNQUFMLEdBQWNBLE1BQU0sQ0FBQ3R1QixLQUFQLENBQWEwUSxJQUFiLEVBQW1CQyxJQUFuQixDQUFkO0FBQ0EsU0FBS2t1QyxJQUFMLEdBQVksQ0FBWjtBQUNEOztBQUVERCxFQUFBQSxPQUFPLENBQUNyK0MsU0FBUixHQUFvQjtBQUNsQm1MLElBQUFBLEtBQUssRUFBRSxVQUFTQSxLQUFULEVBQWdCO0FBQ3JCLFVBQUlBLEtBQUosRUFBVyxLQUFLd2tCLFdBQUwsR0FBbUJ4a0IsS0FBbkI7QUFDWCxhQUFPLElBQVA7QUFDRCxLQUppQjtBQUtsQm1KLElBQUFBLEtBQUssRUFBRSxZQUFXO0FBQ2hCLFVBQUksRUFBRSxLQUFLRSxNQUFQLEtBQWtCLENBQXRCLEVBQXlCO0FBQ3ZCLGFBQUtyRSxJQUFMLENBQVVpdUMsU0FBVixHQUFzQixJQUF0QjtBQUNBLGFBQUtqdkIsSUFBTCxDQUFVLE9BQVY7QUFDRDs7QUFDRCxhQUFPLElBQVA7QUFDRCxLQVhpQjtBQVlsQnNxQixJQUFBQSxJQUFJLEVBQUUsVUFBU3YzQyxHQUFULEVBQWM0VCxTQUFkLEVBQXlCO0FBQzdCLFVBQUksS0FBS3lvQyxLQUFMLElBQWNyOEMsR0FBRyxLQUFLLE9BQTFCLEVBQW1DLEtBQUtxOEMsS0FBTCxDQUFXLENBQVgsSUFBZ0J6b0MsU0FBUyxDQUFDMHJCLE1BQVYsQ0FBaUIsS0FBSytjLEtBQUwsQ0FBVyxDQUFYLENBQWpCLENBQWhCO0FBQ25DLFVBQUksS0FBS0MsTUFBTCxJQUFldDhDLEdBQUcsS0FBSyxPQUEzQixFQUFvQyxLQUFLczhDLE1BQUwsQ0FBWSxDQUFaLElBQWlCMW9DLFNBQVMsQ0FBQzByQixNQUFWLENBQWlCLEtBQUtnZCxNQUFMLENBQVksQ0FBWixDQUFqQixDQUFqQjtBQUNwQyxVQUFJLEtBQUtDLE1BQUwsSUFBZXY4QyxHQUFHLEtBQUssT0FBM0IsRUFBb0MsS0FBS3U4QyxNQUFMLENBQVksQ0FBWixJQUFpQjNvQyxTQUFTLENBQUMwckIsTUFBVixDQUFpQixLQUFLaWQsTUFBTCxDQUFZLENBQVosQ0FBakIsQ0FBakI7QUFDcEMsV0FBS3R1QyxJQUFMLENBQVU0ckMsTUFBVixHQUFtQmptQyxTQUFuQjtBQUNBLFdBQUtxWixJQUFMLENBQVUsTUFBVjtBQUNBLGFBQU8sSUFBUDtBQUNELEtBbkJpQjtBQW9CbEJ6SixJQUFBQSxHQUFHLEVBQUUsWUFBVztBQUNkLFVBQUksRUFBRSxLQUFLbFIsTUFBUCxLQUFrQixDQUF0QixFQUF5QjtBQUN2QixlQUFPLEtBQUtyRSxJQUFMLENBQVVpdUMsU0FBakI7QUFDQSxhQUFLanZCLElBQUwsQ0FBVSxLQUFWO0FBQ0Q7O0FBQ0QsYUFBTyxJQUFQO0FBQ0QsS0ExQmlCO0FBMkJsQkEsSUFBQUEsSUFBSSxFQUFFLFVBQVM1akIsSUFBVCxFQUFlO0FBQ25CLFVBQUk0SixDQUFDLEdBQUduWCxVQUFNLENBQUMsS0FBS21TLElBQU4sQ0FBTixDQUFrQm5QLEtBQWxCLEVBQVI7QUFDQXV0QixNQUFBQSxTQUFTLENBQUN6dkIsSUFBVixDQUNFeU0sSUFERixFQUVFLEtBQUs0RSxJQUZQLEVBR0UsSUFBSWdyQyxTQUFKLENBQWM1dkMsSUFBZCxFQUFvQjtBQUNsQm9rQixRQUFBQSxXQUFXLEVBQUUsS0FBS0EsV0FEQTtBQUVsQkMsUUFBQUEsTUFBTSxFQUFFNnBCLElBRlU7QUFHbEJsdUMsUUFBQUEsSUFIa0I7QUFJbEJ1SyxRQUFBQSxTQUFTLEVBQUUsS0FBSzNGLElBQUwsQ0FBVTRyQyxNQUpIO0FBS2xCdnNDLFFBQUFBLFFBQVEsRUFBRStlO0FBTFEsT0FBcEIsQ0FIRixFQVVFcFosQ0FWRjtBQVlEO0FBekNpQixHQUFwQjs7QUE0Q0EsV0FBU29vQyxPQUFULENBQWlCcHlDLEtBQWpCLEVBQXdCLEdBQUdpRixJQUEzQixFQUFpQztBQUMvQixRQUFJLENBQUM5UCxNQUFNLENBQUNiLEtBQVAsQ0FBYSxJQUFiLEVBQW1CQyxTQUFuQixDQUFMLEVBQW9DO0FBQ3BDLFFBQUlna0IsQ0FBQyxHQUFHazZCLE9BQU8sQ0FBQyxJQUFELEVBQU94dEMsSUFBUCxDQUFQLENBQW9CakYsS0FBcEIsQ0FBMEJBLEtBQTFCLENBQVI7QUFBQSxRQUNJRyxDQUFDLEdBQUcsS0FBS3l3QyxNQURiO0FBQUEsUUFFSWw0QixDQUFDLEdBQUczZixJQUFJLENBQUNnZ0IsR0FBTCxDQUFTODRCLFdBQVcsQ0FBQyxDQUFELENBQXBCLEVBQXlCOTRDLElBQUksQ0FBQ0MsR0FBTCxDQUFTNjRDLFdBQVcsQ0FBQyxDQUFELENBQXBCLEVBQXlCMXhDLENBQUMsQ0FBQ3VZLENBQUYsR0FBTTNmLElBQUksQ0FBQzRmLEdBQUwsQ0FBUyxDQUFULEVBQVlpNUIsVUFBVSxDQUFDdDlDLEtBQVgsQ0FBaUIsSUFBakIsRUFBdUJDLFNBQXZCLENBQVosQ0FBL0IsQ0FBekIsQ0FGUjtBQUFBLFFBR0lveUIsQ0FBQyxHQUFHekcsV0FBTyxDQUFDbGdCLEtBQUQsQ0FIZixDQUYrQixDQU8vQjtBQUNBOztBQUNBLFFBQUl1WSxDQUFDLENBQUNnN0IsS0FBTixFQUFhO0FBQ1gsVUFBSWg3QixDQUFDLENBQUM2NkIsS0FBRixDQUFRLENBQVIsRUFBVyxDQUFYLE1BQWtCenNCLENBQUMsQ0FBQyxDQUFELENBQW5CLElBQTBCcE8sQ0FBQyxDQUFDNjZCLEtBQUYsQ0FBUSxDQUFSLEVBQVcsQ0FBWCxNQUFrQnpzQixDQUFDLENBQUMsQ0FBRCxDQUFqRCxFQUFzRDtBQUNwRHBPLFFBQUFBLENBQUMsQ0FBQzY2QixLQUFGLENBQVEsQ0FBUixJQUFhanpDLENBQUMsQ0FBQ2syQixNQUFGLENBQVM5ZCxDQUFDLENBQUM2NkIsS0FBRixDQUFRLENBQVIsSUFBYXpzQixDQUF0QixDQUFiO0FBQ0Q7O0FBQ0RqZixNQUFBQSxZQUFZLENBQUM2USxDQUFDLENBQUNnN0IsS0FBSCxDQUFaO0FBQ0QsS0FMRCxDQU9BO0FBUEEsU0FRSyxJQUFJcHpDLENBQUMsQ0FBQ3VZLENBQUYsS0FBUUEsQ0FBWixFQUFlLE9BQWYsQ0FFTDtBQUZLLFNBR0E7QUFDSEgsTUFBQUEsQ0FBQyxDQUFDNjZCLEtBQUYsR0FBVSxDQUFDenNCLENBQUQsRUFBSXhtQixDQUFDLENBQUNrMkIsTUFBRixDQUFTMVAsQ0FBVCxDQUFKLENBQVY7QUFDQXJkLE1BQUFBLGFBQVMsQ0FBQyxJQUFELENBQVQ7QUFDQWlQLE1BQUFBLENBQUMsQ0FBQ3BQLEtBQUY7QUFDRDs7QUFFRGlYLElBQUFBLG1CQUFPLENBQUNwZ0IsS0FBRCxDQUFQO0FBQ0F1WSxJQUFBQSxDQUFDLENBQUNnN0IsS0FBRixHQUFVbnRDLFVBQVUsQ0FBQ290QyxVQUFELEVBQWF2QixVQUFiLENBQXBCO0FBQ0ExNUIsSUFBQUEsQ0FBQyxDQUFDKzFCLElBQUYsQ0FBTyxPQUFQLEVBQWdCcUQsU0FBUyxDQUFDcG1DLFNBQVMsQ0FBQ00sS0FBSyxDQUFDMUwsQ0FBRCxFQUFJdVksQ0FBSixDQUFOLEVBQWNILENBQUMsQ0FBQzY2QixLQUFGLENBQVEsQ0FBUixDQUFkLEVBQTBCNzZCLENBQUMsQ0FBQzY2QixLQUFGLENBQVEsQ0FBUixDQUExQixDQUFWLEVBQWlENzZCLENBQUMsQ0FBQ3FLLE1BQW5ELEVBQTJEMHVCLGVBQTNELENBQXpCOztBQUVBLGFBQVNrQyxVQUFULEdBQXNCO0FBQ3BCajdCLE1BQUFBLENBQUMsQ0FBQ2c3QixLQUFGLEdBQVUsSUFBVjtBQUNBaDdCLE1BQUFBLENBQUMsQ0FBQ2dDLEdBQUY7QUFDRDtBQUNGOztBQUVELFdBQVM4M0IsV0FBVCxDQUFxQnJ5QyxLQUFyQixFQUE0QixHQUFHaUYsSUFBL0IsRUFBcUM7QUFDbkMsUUFBSXFlLFdBQVcsSUFBSSxDQUFDbnVCLE1BQU0sQ0FBQ2IsS0FBUCxDQUFhLElBQWIsRUFBbUJDLFNBQW5CLENBQXBCLEVBQW1EO0FBQ25ELFFBQUk0NkMsYUFBYSxHQUFHbnZDLEtBQUssQ0FBQ212QyxhQUExQjtBQUFBLFFBQ0k1MkIsQ0FBQyxHQUFHazZCLE9BQU8sQ0FBQyxJQUFELEVBQU94dEMsSUFBUCxFQUFhLElBQWIsQ0FBUCxDQUEwQmpGLEtBQTFCLENBQWdDQSxLQUFoQyxDQURSO0FBQUEsUUFFSXZFLENBQUMsR0FBRzVJLFVBQU0sQ0FBQ21OLEtBQUssQ0FBQ3dtQixJQUFQLENBQU4sQ0FBbUJqbUIsRUFBbkIsQ0FBc0IsZ0JBQXRCLEVBQXdDa3pDLFVBQXhDLEVBQW9ELElBQXBELEVBQTBEbHpDLEVBQTFELENBQTZELGNBQTdELEVBQTZFbXpDLFVBQTdFLEVBQXlGLElBQXpGLENBRlI7QUFBQSxRQUdJL3NCLENBQUMsR0FBR3pHLFdBQU8sQ0FBQ2xnQixLQUFELEVBQVFtdkMsYUFBUixDQUhmO0FBQUEsUUFJSXRVLEVBQUUsR0FBRzc2QixLQUFLLENBQUNxdkMsT0FKZjtBQUFBLFFBS0luSyxFQUFFLEdBQUdsbEMsS0FBSyxDQUFDc3ZDLE9BTGY7QUFPQXR2QixJQUFBQSxNQUFXLENBQUNoZ0IsS0FBSyxDQUFDd21CLElBQVAsQ0FBWDtBQUNBbkcsSUFBQUEseUJBQWEsQ0FBQ3JnQixLQUFELENBQWI7QUFDQXVZLElBQUFBLENBQUMsQ0FBQzY2QixLQUFGLEdBQVUsQ0FBQ3pzQixDQUFELEVBQUksS0FBS2lxQixNQUFMLENBQVl2YSxNQUFaLENBQW1CMVAsQ0FBbkIsQ0FBSixDQUFWO0FBQ0FyZCxJQUFBQSxhQUFTLENBQUMsSUFBRCxDQUFUO0FBQ0FpUCxJQUFBQSxDQUFDLENBQUNwUCxLQUFGOztBQUVBLGFBQVNzcUMsVUFBVCxDQUFvQnp6QyxLQUFwQixFQUEyQjtBQUN6Qm9nQixNQUFBQSxtQkFBTyxDQUFDcGdCLEtBQUQsQ0FBUDs7QUFDQSxVQUFJLENBQUN1WSxDQUFDLENBQUMrTixLQUFQLEVBQWM7QUFDWixZQUFJWCxFQUFFLEdBQUczbEIsS0FBSyxDQUFDcXZDLE9BQU4sR0FBZ0J4VSxFQUF6QjtBQUFBLFlBQTZCalYsRUFBRSxHQUFHNWxCLEtBQUssQ0FBQ3N2QyxPQUFOLEdBQWdCcEssRUFBbEQ7QUFDQTNzQixRQUFBQSxDQUFDLENBQUMrTixLQUFGLEdBQVVYLEVBQUUsR0FBR0EsRUFBTCxHQUFVQyxFQUFFLEdBQUdBLEVBQWYsR0FBb0Jzc0IsY0FBOUI7QUFDRDs7QUFDRDM1QixNQUFBQSxDQUFDLENBQUN2WSxLQUFGLENBQVFBLEtBQVIsRUFDRXN1QyxJQURGLENBQ08sT0FEUCxFQUNnQnFELFNBQVMsQ0FBQ3BtQyxTQUFTLENBQUNnTixDQUFDLENBQUN2VCxJQUFGLENBQU80ckMsTUFBUixFQUFnQnI0QixDQUFDLENBQUM2NkIsS0FBRixDQUFRLENBQVIsSUFBYWx6QixXQUFPLENBQUNsZ0IsS0FBRCxFQUFRbXZDLGFBQVIsQ0FBcEMsRUFBNEQ1MkIsQ0FBQyxDQUFDNjZCLEtBQUYsQ0FBUSxDQUFSLENBQTVELENBQVYsRUFBbUY3NkIsQ0FBQyxDQUFDcUssTUFBckYsRUFBNkYwdUIsZUFBN0YsQ0FEekI7QUFFRDs7QUFFRCxhQUFTb0MsVUFBVCxDQUFvQjF6QyxLQUFwQixFQUEyQjtBQUN6QnZFLE1BQUFBLENBQUMsQ0FBQzhFLEVBQUYsQ0FBSyw2QkFBTCxFQUFvQyxJQUFwQztBQUNBMGYsTUFBQUEsT0FBVSxDQUFDamdCLEtBQUssQ0FBQ3dtQixJQUFQLEVBQWFqTyxDQUFDLENBQUMrTixLQUFmLENBQVY7QUFDQWxHLE1BQUFBLG1CQUFPLENBQUNwZ0IsS0FBRCxDQUFQO0FBQ0F1WSxNQUFBQSxDQUFDLENBQUN2WSxLQUFGLENBQVFBLEtBQVIsRUFBZXVhLEdBQWY7QUFDRDtBQUNGOztBQUVELFdBQVMrM0IsVUFBVCxDQUFvQnR5QyxLQUFwQixFQUEyQixHQUFHaUYsSUFBOUIsRUFBb0M7QUFDbEMsUUFBSSxDQUFDOVAsTUFBTSxDQUFDYixLQUFQLENBQWEsSUFBYixFQUFtQkMsU0FBbkIsQ0FBTCxFQUFvQztBQUNwQyxRQUFJZ1QsRUFBRSxHQUFHLEtBQUtxcEMsTUFBZDtBQUFBLFFBQ0l6SixFQUFFLEdBQUdqbkIsV0FBTyxDQUFDbGdCLEtBQUssQ0FBQzRtQixjQUFOLEdBQXVCNW1CLEtBQUssQ0FBQzRtQixjQUFOLENBQXFCLENBQXJCLENBQXZCLEdBQWlENW1CLEtBQWxELEVBQXlELElBQXpELENBRGhCO0FBQUEsUUFFSW9uQyxFQUFFLEdBQUc3L0IsRUFBRSxDQUFDOHVCLE1BQUgsQ0FBVThRLEVBQVYsQ0FGVDtBQUFBLFFBR0kwTCxFQUFFLEdBQUd0ckMsRUFBRSxDQUFDbVIsQ0FBSCxJQUFRMVksS0FBSyxDQUFDK2xCLFFBQU4sR0FBaUIsR0FBakIsR0FBdUIsQ0FBL0IsQ0FIVDtBQUFBLFFBSUl2ZSxFQUFFLEdBQUdtcUMsU0FBUyxDQUFDcG1DLFNBQVMsQ0FBQ00sS0FBSyxDQUFDdEUsRUFBRCxFQUFLc3JDLEVBQUwsQ0FBTixFQUFnQjFMLEVBQWhCLEVBQW9CQyxFQUFwQixDQUFWLEVBQW1DeGtCLE1BQU0sQ0FBQ3R1QixLQUFQLENBQWEsSUFBYixFQUFtQjJRLElBQW5CLENBQW5DLEVBQTZEcXNDLGVBQTdELENBSmxCO0FBTUFseEIsSUFBQUEsbUJBQU8sQ0FBQ3BnQixLQUFELENBQVA7QUFDQSxRQUFJNkksUUFBUSxHQUFHLENBQWYsRUFBa0JoVyxVQUFNLENBQUMsSUFBRCxDQUFOLENBQWF5WixVQUFiLEdBQTBCekQsUUFBMUIsQ0FBbUNBLFFBQW5DLEVBQTZDbFYsSUFBN0MsQ0FBa0RzVixRQUFsRCxFQUE0RHpCLEVBQTVELEVBQWdFMi9CLEVBQWhFLEVBQW9Fbm5DLEtBQXBFLEVBQWxCLEtBQ0tuTixVQUFNLENBQUMsSUFBRCxDQUFOLENBQWFjLElBQWIsQ0FBa0IyNkMsSUFBSSxDQUFDM2pDLFNBQXZCLEVBQWtDbkQsRUFBbEMsRUFBc0MyL0IsRUFBdEMsRUFBMENubkMsS0FBMUM7QUFDTjs7QUFFRCxXQUFTdXlDLFlBQVQsQ0FBc0J2eUMsS0FBdEIsRUFBNkIsR0FBR2lGLElBQWhDLEVBQXNDO0FBQ3BDLFFBQUksQ0FBQzlQLE1BQU0sQ0FBQ2IsS0FBUCxDQUFhLElBQWIsRUFBbUJDLFNBQW5CLENBQUwsRUFBb0M7QUFDcEMsUUFBSW13QixPQUFPLEdBQUcxa0IsS0FBSyxDQUFDMGtCLE9BQXBCO0FBQUEsUUFDSXB4QixDQUFDLEdBQUdveEIsT0FBTyxDQUFDenhCLE1BRGhCO0FBQUEsUUFFSXNsQixDQUFDLEdBQUdrNkIsT0FBTyxDQUFDLElBQUQsRUFBT3h0QyxJQUFQLEVBQWFqRixLQUFLLENBQUM0bUIsY0FBTixDQUFxQjN6QixNQUFyQixLQUFnQ0ssQ0FBN0MsQ0FBUCxDQUF1RDBNLEtBQXZELENBQTZEQSxLQUE3RCxDQUZSO0FBQUEsUUFHSTBqQixPQUhKO0FBQUEsUUFHYWh3QixDQUhiO0FBQUEsUUFHZ0J5TSxDQUhoQjtBQUFBLFFBR21Cd21CLENBSG5CO0FBS0F0RyxJQUFBQSx5QkFBYSxDQUFDcmdCLEtBQUQsQ0FBYjs7QUFDQSxTQUFLdE0sQ0FBQyxHQUFHLENBQVQsRUFBWUEsQ0FBQyxHQUFHSixDQUFoQixFQUFtQixFQUFFSSxDQUFyQixFQUF3QjtBQUN0QnlNLE1BQUFBLENBQUMsR0FBR3VrQixPQUFPLENBQUNoeEIsQ0FBRCxDQUFYLEVBQWdCaXpCLENBQUMsR0FBR3pHLFdBQU8sQ0FBQy9mLENBQUQsRUFBSSxJQUFKLENBQTNCO0FBQ0F3bUIsTUFBQUEsQ0FBQyxHQUFHLENBQUNBLENBQUQsRUFBSSxLQUFLaXFCLE1BQUwsQ0FBWXZhLE1BQVosQ0FBbUIxUCxDQUFuQixDQUFKLEVBQTJCeG1CLENBQUMsQ0FBQ2dtQixVQUE3QixDQUFKO0FBQ0EsVUFBSSxDQUFDNU4sQ0FBQyxDQUFDODZCLE1BQVAsRUFBZTk2QixDQUFDLENBQUM4NkIsTUFBRixHQUFXMXNCLENBQVgsRUFBY2pELE9BQU8sR0FBRyxJQUF4QixFQUE4Qm5MLENBQUMsQ0FBQzQ2QixJQUFGLEdBQVMsSUFBSSxDQUFDLENBQUNyQixhQUE3QyxDQUFmLEtBQ0ssSUFBSSxDQUFDdjVCLENBQUMsQ0FBQys2QixNQUFILElBQWEvNkIsQ0FBQyxDQUFDODZCLE1BQUYsQ0FBUyxDQUFULE1BQWdCMXNCLENBQUMsQ0FBQyxDQUFELENBQWxDLEVBQXVDcE8sQ0FBQyxDQUFDKzZCLE1BQUYsR0FBVzNzQixDQUFYLEVBQWNwTyxDQUFDLENBQUM0NkIsSUFBRixHQUFTLENBQXZCO0FBQzdDOztBQUVELFFBQUlyQixhQUFKLEVBQW1CQSxhQUFhLEdBQUdwcUMsWUFBWSxDQUFDb3FDLGFBQUQsQ0FBNUI7O0FBRW5CLFFBQUlwdUIsT0FBSixFQUFhO0FBQ1gsVUFBSW5MLENBQUMsQ0FBQzQ2QixJQUFGLEdBQVMsQ0FBYixFQUFnQnBCLFVBQVUsR0FBR3ByQixDQUFDLENBQUMsQ0FBRCxDQUFkLEVBQW1CbXJCLGFBQWEsR0FBRzFyQyxVQUFVLENBQUMsWUFBVztBQUFFMHJDLFFBQUFBLGFBQWEsR0FBRyxJQUFoQjtBQUF1QixPQUFyQyxFQUF1Q0UsVUFBdkMsQ0FBN0M7QUFDaEIxb0MsTUFBQUEsYUFBUyxDQUFDLElBQUQsQ0FBVDtBQUNBaVAsTUFBQUEsQ0FBQyxDQUFDcFAsS0FBRjtBQUNEO0FBQ0Y7O0FBRUQsV0FBU3dhLFVBQVQsQ0FBb0IzakIsS0FBcEIsRUFBMkIsR0FBR2lGLElBQTlCLEVBQW9DO0FBQ2xDLFFBQUksQ0FBQyxLQUFLZ3VDLFNBQVYsRUFBcUI7QUFDckIsUUFBSTE2QixDQUFDLEdBQUdrNkIsT0FBTyxDQUFDLElBQUQsRUFBT3h0QyxJQUFQLENBQVAsQ0FBb0JqRixLQUFwQixDQUEwQkEsS0FBMUIsQ0FBUjtBQUFBLFFBQ0kwa0IsT0FBTyxHQUFHMWtCLEtBQUssQ0FBQzRtQixjQURwQjtBQUFBLFFBRUl0ekIsQ0FBQyxHQUFHb3hCLE9BQU8sQ0FBQ3p4QixNQUZoQjtBQUFBLFFBRXdCUyxDQUZ4QjtBQUFBLFFBRTJCeU0sQ0FGM0I7QUFBQSxRQUU4QndtQixDQUY5QjtBQUFBLFFBRWlDN08sQ0FGakM7QUFJQXNJLElBQUFBLG1CQUFPLENBQUNwZ0IsS0FBRCxDQUFQOztBQUNBLFNBQUt0TSxDQUFDLEdBQUcsQ0FBVCxFQUFZQSxDQUFDLEdBQUdKLENBQWhCLEVBQW1CLEVBQUVJLENBQXJCLEVBQXdCO0FBQ3RCeU0sTUFBQUEsQ0FBQyxHQUFHdWtCLE9BQU8sQ0FBQ2h4QixDQUFELENBQVgsRUFBZ0JpekIsQ0FBQyxHQUFHekcsV0FBTyxDQUFDL2YsQ0FBRCxFQUFJLElBQUosQ0FBM0I7QUFDQSxVQUFJb1ksQ0FBQyxDQUFDODZCLE1BQUYsSUFBWTk2QixDQUFDLENBQUM4NkIsTUFBRixDQUFTLENBQVQsTUFBZ0JsekMsQ0FBQyxDQUFDZ21CLFVBQWxDLEVBQThDNU4sQ0FBQyxDQUFDODZCLE1BQUYsQ0FBUyxDQUFULElBQWMxc0IsQ0FBZCxDQUE5QyxLQUNLLElBQUlwTyxDQUFDLENBQUMrNkIsTUFBRixJQUFZLzZCLENBQUMsQ0FBQys2QixNQUFGLENBQVMsQ0FBVCxNQUFnQm56QyxDQUFDLENBQUNnbUIsVUFBbEMsRUFBOEM1TixDQUFDLENBQUMrNkIsTUFBRixDQUFTLENBQVQsSUFBYzNzQixDQUFkO0FBQ3BEOztBQUNEeG1CLElBQUFBLENBQUMsR0FBR29ZLENBQUMsQ0FBQ3ZULElBQUYsQ0FBTzRyQyxNQUFYOztBQUNBLFFBQUlyNEIsQ0FBQyxDQUFDKzZCLE1BQU4sRUFBYztBQUNaLFVBQUluTSxFQUFFLEdBQUc1dUIsQ0FBQyxDQUFDODZCLE1BQUYsQ0FBUyxDQUFULENBQVQ7QUFBQSxVQUFzQk0sRUFBRSxHQUFHcDdCLENBQUMsQ0FBQzg2QixNQUFGLENBQVMsQ0FBVCxDQUEzQjtBQUFBLFVBQ0lqTSxFQUFFLEdBQUc3dUIsQ0FBQyxDQUFDKzZCLE1BQUYsQ0FBUyxDQUFULENBRFQ7QUFBQSxVQUNzQk0sRUFBRSxHQUFHcjdCLENBQUMsQ0FBQys2QixNQUFGLENBQVMsQ0FBVCxDQUQzQjtBQUFBLFVBRUlPLEVBQUUsR0FBRyxDQUFDQSxFQUFFLEdBQUd6TSxFQUFFLENBQUMsQ0FBRCxDQUFGLEdBQVFELEVBQUUsQ0FBQyxDQUFELENBQWhCLElBQXVCME0sRUFBdkIsR0FBNEIsQ0FBQ0EsRUFBRSxHQUFHek0sRUFBRSxDQUFDLENBQUQsQ0FBRixHQUFRRCxFQUFFLENBQUMsQ0FBRCxDQUFoQixJQUF1QjBNLEVBRjVEO0FBQUEsVUFHSUMsRUFBRSxHQUFHLENBQUNBLEVBQUUsR0FBR0YsRUFBRSxDQUFDLENBQUQsQ0FBRixHQUFRRCxFQUFFLENBQUMsQ0FBRCxDQUFoQixJQUF1QkcsRUFBdkIsR0FBNEIsQ0FBQ0EsRUFBRSxHQUFHRixFQUFFLENBQUMsQ0FBRCxDQUFGLEdBQVFELEVBQUUsQ0FBQyxDQUFELENBQWhCLElBQXVCRyxFQUg1RDtBQUlBM3pDLE1BQUFBLENBQUMsR0FBRzBMLEtBQUssQ0FBQzFMLENBQUQsRUFBSXBILElBQUksQ0FBQ2tSLElBQUwsQ0FBVTRwQyxFQUFFLEdBQUdDLEVBQWYsQ0FBSixDQUFUO0FBQ0FudEIsTUFBQUEsQ0FBQyxHQUFHLENBQUMsQ0FBQ3dnQixFQUFFLENBQUMsQ0FBRCxDQUFGLEdBQVFDLEVBQUUsQ0FBQyxDQUFELENBQVgsSUFBa0IsQ0FBbkIsRUFBc0IsQ0FBQ0QsRUFBRSxDQUFDLENBQUQsQ0FBRixHQUFRQyxFQUFFLENBQUMsQ0FBRCxDQUFYLElBQWtCLENBQXhDLENBQUo7QUFDQXR2QixNQUFBQSxDQUFDLEdBQUcsQ0FBQyxDQUFDNjdCLEVBQUUsQ0FBQyxDQUFELENBQUYsR0FBUUMsRUFBRSxDQUFDLENBQUQsQ0FBWCxJQUFrQixDQUFuQixFQUFzQixDQUFDRCxFQUFFLENBQUMsQ0FBRCxDQUFGLEdBQVFDLEVBQUUsQ0FBQyxDQUFELENBQVgsSUFBa0IsQ0FBeEMsQ0FBSjtBQUNELEtBUkQsTUFTSyxJQUFJcjdCLENBQUMsQ0FBQzg2QixNQUFOLEVBQWMxc0IsQ0FBQyxHQUFHcE8sQ0FBQyxDQUFDODZCLE1BQUYsQ0FBUyxDQUFULENBQUosRUFBaUJ2N0IsQ0FBQyxHQUFHUyxDQUFDLENBQUM4NkIsTUFBRixDQUFTLENBQVQsQ0FBckIsQ0FBZCxLQUNBOztBQUVMOTZCLElBQUFBLENBQUMsQ0FBQysxQixJQUFGLENBQU8sT0FBUCxFQUFnQnFELFNBQVMsQ0FBQ3BtQyxTQUFTLENBQUNwTCxDQUFELEVBQUl3bUIsQ0FBSixFQUFPN08sQ0FBUCxDQUFWLEVBQXFCUyxDQUFDLENBQUNxSyxNQUF2QixFQUErQjB1QixlQUEvQixDQUF6QjtBQUNEOztBQUVELFdBQVMxdEIsVUFBVCxDQUFvQjVqQixLQUFwQixFQUEyQixHQUFHaUYsSUFBOUIsRUFBb0M7QUFDbEMsUUFBSSxDQUFDLEtBQUtndUMsU0FBVixFQUFxQjtBQUNyQixRQUFJMTZCLENBQUMsR0FBR2s2QixPQUFPLENBQUMsSUFBRCxFQUFPeHRDLElBQVAsQ0FBUCxDQUFvQmpGLEtBQXBCLENBQTBCQSxLQUExQixDQUFSO0FBQUEsUUFDSTBrQixPQUFPLEdBQUcxa0IsS0FBSyxDQUFDNG1CLGNBRHBCO0FBQUEsUUFFSXR6QixDQUFDLEdBQUdveEIsT0FBTyxDQUFDenhCLE1BRmhCO0FBQUEsUUFFd0JTLENBRnhCO0FBQUEsUUFFMkJ5TSxDQUYzQjtBQUlBa2dCLElBQUFBLHlCQUFhLENBQUNyZ0IsS0FBRCxDQUFiO0FBQ0EsUUFBSXNqQixXQUFKLEVBQWlCNWIsWUFBWSxDQUFDNGIsV0FBRCxDQUFaO0FBQ2pCQSxJQUFBQSxXQUFXLEdBQUdsZCxVQUFVLENBQUMsWUFBVztBQUFFa2QsTUFBQUEsV0FBVyxHQUFHLElBQWQ7QUFBcUIsS0FBbkMsRUFBcUMwdUIsVUFBckMsQ0FBeEI7O0FBQ0EsU0FBS3QrQyxDQUFDLEdBQUcsQ0FBVCxFQUFZQSxDQUFDLEdBQUdKLENBQWhCLEVBQW1CLEVBQUVJLENBQXJCLEVBQXdCO0FBQ3RCeU0sTUFBQUEsQ0FBQyxHQUFHdWtCLE9BQU8sQ0FBQ2h4QixDQUFELENBQVg7QUFDQSxVQUFJNmtCLENBQUMsQ0FBQzg2QixNQUFGLElBQVk5NkIsQ0FBQyxDQUFDODZCLE1BQUYsQ0FBUyxDQUFULE1BQWdCbHpDLENBQUMsQ0FBQ2dtQixVQUFsQyxFQUE4QyxPQUFPNU4sQ0FBQyxDQUFDODZCLE1BQVQsQ0FBOUMsS0FDSyxJQUFJOTZCLENBQUMsQ0FBQys2QixNQUFGLElBQVkvNkIsQ0FBQyxDQUFDKzZCLE1BQUYsQ0FBUyxDQUFULE1BQWdCbnpDLENBQUMsQ0FBQ2dtQixVQUFsQyxFQUE4QyxPQUFPNU4sQ0FBQyxDQUFDKzZCLE1BQVQ7QUFDcEQ7O0FBQ0QsUUFBSS82QixDQUFDLENBQUMrNkIsTUFBRixJQUFZLENBQUMvNkIsQ0FBQyxDQUFDODZCLE1BQW5CLEVBQTJCOTZCLENBQUMsQ0FBQzg2QixNQUFGLEdBQVc5NkIsQ0FBQyxDQUFDKzZCLE1BQWIsRUFBcUIsT0FBTy82QixDQUFDLENBQUMrNkIsTUFBOUI7QUFDM0IsUUFBSS82QixDQUFDLENBQUM4NkIsTUFBTixFQUFjOTZCLENBQUMsQ0FBQzg2QixNQUFGLENBQVMsQ0FBVCxJQUFjLEtBQUt6QyxNQUFMLENBQVl2YSxNQUFaLENBQW1COWQsQ0FBQyxDQUFDODZCLE1BQUYsQ0FBUyxDQUFULENBQW5CLENBQWQsQ0FBZCxLQUNLO0FBQ0g5NkIsTUFBQUEsQ0FBQyxDQUFDZ0MsR0FBRixHQURHLENBRUg7O0FBQ0EsVUFBSWhDLENBQUMsQ0FBQzQ2QixJQUFGLEtBQVcsQ0FBZixFQUFrQjtBQUNoQmh6QyxRQUFBQSxDQUFDLEdBQUcrZixXQUFPLENBQUMvZixDQUFELEVBQUksSUFBSixDQUFYOztBQUNBLFlBQUlwSCxJQUFJLENBQUNnN0MsS0FBTCxDQUFXaEMsVUFBVSxDQUFDLENBQUQsQ0FBVixHQUFnQjV4QyxDQUFDLENBQUMsQ0FBRCxDQUE1QixFQUFpQzR4QyxVQUFVLENBQUMsQ0FBRCxDQUFWLEdBQWdCNXhDLENBQUMsQ0FBQyxDQUFELENBQWxELElBQXlEZ3lDLFdBQTdELEVBQTBFO0FBQ3hFLGNBQUl4ckIsQ0FBQyxHQUFHOXpCLFVBQU0sQ0FBQyxJQUFELENBQU4sQ0FBYTBOLEVBQWIsQ0FBZ0IsZUFBaEIsQ0FBUjtBQUNBLGNBQUlvbUIsQ0FBSixFQUFPQSxDQUFDLENBQUNyeUIsS0FBRixDQUFRLElBQVIsRUFBY0MsU0FBZDtBQUNSO0FBQ0Y7QUFDRjtBQUNGOztBQUVEKzVDLEVBQUFBLElBQUksQ0FBQ3NELFVBQUwsR0FBa0IsVUFBU250QyxDQUFULEVBQVk7QUFDNUIsV0FBT2xRLFNBQVMsQ0FBQ3RCLE1BQVYsSUFBb0IyK0MsVUFBVSxHQUFHLE9BQU9udEMsQ0FBUCxLQUFhLFVBQWIsR0FBMEJBLENBQTFCLEdBQThCbE8sb0JBQVEsQ0FBQyxDQUFDa08sQ0FBRixDQUFuRCxFQUF5RDZwQyxJQUE3RSxJQUFxRnNELFVBQTVGO0FBQ0QsR0FGRDs7QUFJQXRELEVBQUFBLElBQUksQ0FBQ241QyxNQUFMLEdBQWMsVUFBU3NQLENBQVQsRUFBWTtBQUN4QixXQUFPbFEsU0FBUyxDQUFDdEIsTUFBVixJQUFvQmtDLE1BQU0sR0FBRyxPQUFPc1AsQ0FBUCxLQUFhLFVBQWIsR0FBMEJBLENBQTFCLEdBQThCbE8sb0JBQVEsQ0FBQyxDQUFDLENBQUNrTyxDQUFILENBQS9DLEVBQXNENnBDLElBQTFFLElBQWtGbjVDLE1BQXpGO0FBQ0QsR0FGRDs7QUFJQW01QyxFQUFBQSxJQUFJLENBQUNwckIsU0FBTCxHQUFpQixVQUFTemUsQ0FBVCxFQUFZO0FBQzNCLFdBQU9sUSxTQUFTLENBQUN0QixNQUFWLElBQW9CaXdCLFNBQVMsR0FBRyxPQUFPemUsQ0FBUCxLQUFhLFVBQWIsR0FBMEJBLENBQTFCLEdBQThCbE8sb0JBQVEsQ0FBQyxDQUFDLENBQUNrTyxDQUFILENBQWxELEVBQXlENnBDLElBQTdFLElBQXFGcHJCLFNBQTVGO0FBQ0QsR0FGRDs7QUFJQW9yQixFQUFBQSxJQUFJLENBQUMxckIsTUFBTCxHQUFjLFVBQVNuZSxDQUFULEVBQVk7QUFDeEIsV0FBT2xRLFNBQVMsQ0FBQ3RCLE1BQVYsSUFBb0IydkIsTUFBTSxHQUFHLE9BQU9uZSxDQUFQLEtBQWEsVUFBYixHQUEwQkEsQ0FBMUIsR0FBOEJsTyxvQkFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDa08sQ0FBQyxDQUFDLENBQUQsQ0FBRCxDQUFLLENBQUwsQ0FBRixFQUFXLENBQUNBLENBQUMsQ0FBQyxDQUFELENBQUQsQ0FBSyxDQUFMLENBQVosQ0FBRCxFQUF1QixDQUFDLENBQUNBLENBQUMsQ0FBQyxDQUFELENBQUQsQ0FBSyxDQUFMLENBQUYsRUFBVyxDQUFDQSxDQUFDLENBQUMsQ0FBRCxDQUFELENBQUssQ0FBTCxDQUFaLENBQXZCLENBQUQsQ0FBL0MsRUFBK0Y2cEMsSUFBbkgsSUFBMkgxckIsTUFBbEk7QUFDRCxHQUZEOztBQUlBMHJCLEVBQUFBLElBQUksQ0FBQ3VELFdBQUwsR0FBbUIsVUFBU3B0QyxDQUFULEVBQVk7QUFDN0IsV0FBT2xRLFNBQVMsQ0FBQ3RCLE1BQVYsSUFBb0I0K0MsV0FBVyxDQUFDLENBQUQsQ0FBWCxHQUFpQixDQUFDcHRDLENBQUMsQ0FBQyxDQUFELENBQW5CLEVBQXdCb3RDLFdBQVcsQ0FBQyxDQUFELENBQVgsR0FBaUIsQ0FBQ3B0QyxDQUFDLENBQUMsQ0FBRCxDQUEzQyxFQUFnRDZwQyxJQUFwRSxJQUE0RSxDQUFDdUQsV0FBVyxDQUFDLENBQUQsQ0FBWixFQUFpQkEsV0FBVyxDQUFDLENBQUQsQ0FBNUIsQ0FBbkY7QUFDRCxHQUZEOztBQUlBdkQsRUFBQUEsSUFBSSxDQUFDZ0QsZUFBTCxHQUF1QixVQUFTN3NDLENBQVQsRUFBWTtBQUNqQyxXQUFPbFEsU0FBUyxDQUFDdEIsTUFBVixJQUFvQnErQyxlQUFlLENBQUMsQ0FBRCxDQUFmLENBQW1CLENBQW5CLElBQXdCLENBQUM3c0MsQ0FBQyxDQUFDLENBQUQsQ0FBRCxDQUFLLENBQUwsQ0FBekIsRUFBa0M2c0MsZUFBZSxDQUFDLENBQUQsQ0FBZixDQUFtQixDQUFuQixJQUF3QixDQUFDN3NDLENBQUMsQ0FBQyxDQUFELENBQUQsQ0FBSyxDQUFMLENBQTNELEVBQW9FNnNDLGVBQWUsQ0FBQyxDQUFELENBQWYsQ0FBbUIsQ0FBbkIsSUFBd0IsQ0FBQzdzQyxDQUFDLENBQUMsQ0FBRCxDQUFELENBQUssQ0FBTCxDQUE3RixFQUFzRzZzQyxlQUFlLENBQUMsQ0FBRCxDQUFmLENBQW1CLENBQW5CLElBQXdCLENBQUM3c0MsQ0FBQyxDQUFDLENBQUQsQ0FBRCxDQUFLLENBQUwsQ0FBL0gsRUFBd0k2cEMsSUFBNUosSUFBb0ssQ0FBQyxDQUFDZ0QsZUFBZSxDQUFDLENBQUQsQ0FBZixDQUFtQixDQUFuQixDQUFELEVBQXdCQSxlQUFlLENBQUMsQ0FBRCxDQUFmLENBQW1CLENBQW5CLENBQXhCLENBQUQsRUFBaUQsQ0FBQ0EsZUFBZSxDQUFDLENBQUQsQ0FBZixDQUFtQixDQUFuQixDQUFELEVBQXdCQSxlQUFlLENBQUMsQ0FBRCxDQUFmLENBQW1CLENBQW5CLENBQXhCLENBQWpELENBQTNLO0FBQ0QsR0FGRDs7QUFJQWhELEVBQUFBLElBQUksQ0FBQ3FELFNBQUwsR0FBaUIsVUFBU2x0QyxDQUFULEVBQVk7QUFDM0IsV0FBT2xRLFNBQVMsQ0FBQ3RCLE1BQVYsSUFBb0IwK0MsU0FBUyxHQUFHbHRDLENBQVosRUFBZTZwQyxJQUFuQyxJQUEyQ3FELFNBQWxEO0FBQ0QsR0FGRDs7QUFJQXJELEVBQUFBLElBQUksQ0FBQ3psQyxRQUFMLEdBQWdCLFVBQVNwRSxDQUFULEVBQVk7QUFDMUIsV0FBT2xRLFNBQVMsQ0FBQ3RCLE1BQVYsSUFBb0I0VixRQUFRLEdBQUcsQ0FBQ3BFLENBQVosRUFBZTZwQyxJQUFuQyxJQUEyQ3psQyxRQUFsRDtBQUNELEdBRkQ7O0FBSUF5bEMsRUFBQUEsSUFBSSxDQUFDNXlCLFdBQUwsR0FBbUIsVUFBU2pYLENBQVQsRUFBWTtBQUM3QixXQUFPbFEsU0FBUyxDQUFDdEIsTUFBVixJQUFvQnlvQixXQUFXLEdBQUdqWCxDQUFkLEVBQWlCNnBDLElBQXJDLElBQTZDNXlCLFdBQXBEO0FBQ0QsR0FGRDs7QUFJQTR5QixFQUFBQSxJQUFJLENBQUMvdEMsRUFBTCxHQUFVLFlBQVc7QUFDbkIsUUFBSS9JLEtBQUssR0FBRzRyQixTQUFTLENBQUM3aUIsRUFBVixDQUFhak0sS0FBYixDQUFtQjh1QixTQUFuQixFQUE4Qjd1QixTQUE5QixDQUFaO0FBQ0EsV0FBT2lELEtBQUssS0FBSzRyQixTQUFWLEdBQXNCa3JCLElBQXRCLEdBQTZCOTJDLEtBQXBDO0FBQ0QsR0FIRDs7QUFLQTgyQyxFQUFBQSxJQUFJLENBQUMwRixhQUFMLEdBQXFCLFVBQVN2dkMsQ0FBVCxFQUFZO0FBQy9CLFdBQU9sUSxTQUFTLENBQUN0QixNQUFWLElBQW9CaS9DLGNBQWMsR0FBRyxDQUFDenRDLENBQUMsR0FBRyxDQUFDQSxDQUFOLElBQVdBLENBQTVCLEVBQStCNnBDLElBQW5ELElBQTJEdjFDLElBQUksQ0FBQ2tSLElBQUwsQ0FBVWlvQyxjQUFWLENBQWxFO0FBQ0QsR0FGRDs7QUFJQTVELEVBQUFBLElBQUksQ0FBQzZELFdBQUwsR0FBbUIsVUFBUzF0QyxDQUFULEVBQVk7QUFDN0IsV0FBT2xRLFNBQVMsQ0FBQ3RCLE1BQVYsSUFBb0JrL0MsV0FBVyxHQUFHLENBQUMxdEMsQ0FBZixFQUFrQjZwQyxJQUF0QyxJQUE4QzZELFdBQXJEO0FBQ0QsR0FGRDs7QUFJQSxTQUFPN0QsSUFBUDtBQUNELEM7O0FDOWJEOzs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMzQkEsTUFBa0c7QUFDbEcsTUFBd0Y7QUFDeEYsTUFBK0Y7QUFDL0YsTUFBa0g7QUFDbEgsTUFBMkc7QUFDM0csTUFBMkc7QUFDM0csTUFBdUk7QUFDdkk7QUFDQTs7QUFFQTs7QUFFQSw0QkFBNEIsNkJBQW1CO0FBQy9DLHdCQUF3QiwwQ0FBYTs7QUFFckMsdUJBQXVCLCtCQUFhO0FBQ3BDO0FBQ0EsaUJBQWlCLHVCQUFNO0FBQ3ZCLDZCQUE2Qiw4QkFBa0I7O0FBRS9DLGFBQWEsa0NBQUcsQ0FBQyx5QkFBTzs7OztBQUlpRjtBQUN6RyxPQUFPLDREQUFlLHlCQUFPLElBQUksdUNBQWMsR0FBRyx1Q0FBYyxZQUFZLEVBQUM7OztBQzFCN0U7O0FBRUEsTUFBTThGLFVBQVUsR0FBSUMsT0FBRCxJQUFxQjtBQUNwQyxRQUFNQyxNQUFNLEdBQUd2NEMsUUFBUSxDQUFDaUQsYUFBVCxDQUF1QixJQUF2QixDQUFmO0FBQ0EsUUFBTXUxQyxhQUFhLEdBQUd4NEMsUUFBUSxDQUFDeTRDLGNBQVQsQ0FBd0JILE9BQXhCLENBQXRCO0FBQ0FDLEVBQUFBLE1BQU0sQ0FBQ24rQyxXQUFQLENBQW1CbytDLGFBQW5CO0FBQ0EsU0FBT0QsTUFBUDtBQUNILENBTEQ7O0FBT08sTUFBTUcsV0FBVyxHQUFHLENBQUNDLFlBQUQsRUFBaUNMLE9BQWpDLEtBQTJEO0FBQ2xGLFFBQU1DLE1BQU0sR0FBR0YsVUFBVSxDQUFDQyxPQUFELENBQXpCO0FBQ0EsUUFBTU0sT0FBTyxHQUFHNTRDLFFBQVEsQ0FBQ2lELGFBQVQsQ0FBdUIsS0FBdkIsQ0FBaEI7O0FBRUEsUUFBTTQxQyxTQUFTLEdBQUkxdEMsQ0FBRCxJQUFxRTtBQUNuRkEsSUFBQUEsQ0FBQyxDQUFDMnRDLGVBQUY7QUFDQTN0QyxJQUFBQSxDQUFDLENBQUN3bUMsY0FBRjtBQUNILEdBSEQ7O0FBS0EsUUFBTW9ILFFBQVEsR0FBSTV0QyxDQUFELElBQXFFO0FBQ2xGQSxJQUFBQSxDQUFDLENBQUMydEMsZUFBRjtBQUNBM3RDLElBQUFBLENBQUMsQ0FBQ3dtQyxjQUFGO0FBQ0gsR0FIRDs7QUFLQSxRQUFNcUgsSUFBSSxHQUFHLE1BQU83dEMsQ0FBUCxJQUE4RjtBQUN2R0EsSUFBQUEsQ0FBQyxDQUFDMnRDLGVBQUY7QUFDQTN0QyxJQUFBQSxDQUFDLENBQUN3bUMsY0FBRjtBQUVBLFVBQU1zSCxFQUFFLEdBQUc5dEMsQ0FBQyxDQUFDK3RDLFlBQWI7QUFDQSxVQUFNQyxLQUFLLEdBQUdGLEVBQUUsQ0FBQ0UsS0FBakI7QUFDQSxVQUFNUixZQUFZLENBQUNRLEtBQUQsQ0FBbEI7QUFDQUMsSUFBQUEsYUFBYTtBQUNoQixHQVJEOztBQVVBLFFBQU1BLGFBQWEsR0FBRyxNQUFNO0FBQ3hCUixJQUFBQSxPQUFPLENBQUNqMEMsbUJBQVIsQ0FBNEIsV0FBNUIsRUFBeUNrMEMsU0FBekM7QUFDQUQsSUFBQUEsT0FBTyxDQUFDajBDLG1CQUFSLENBQTRCLFVBQTVCLEVBQXdDbzBDLFFBQXhDO0FBQ0FILElBQUFBLE9BQU8sQ0FBQ2owQyxtQkFBUixDQUE0QixNQUE1QixFQUFvQ3EwQyxJQUFwQztBQUNBaDVDLElBQUFBLFFBQVEsQ0FBQ3E1QyxJQUFULENBQWM3MUMsV0FBZCxDQUEwQm8xQyxPQUExQjtBQUNILEdBTEQ7O0FBT0FBLEVBQUFBLE9BQU8sQ0FBQ3Q1QyxZQUFSLENBQXFCLElBQXJCLEVBQTJCLFlBQTNCO0FBQ0FzNUMsRUFBQUEsT0FBTyxDQUFDeCtDLFdBQVIsQ0FBb0JtK0MsTUFBcEI7QUFFQUssRUFBQUEsT0FBTyxDQUFDOXpDLGdCQUFSLENBQXlCLFdBQXpCLEVBQXNDK3pDLFNBQXRDLEVBQWlELEtBQWpEO0FBQ0FELEVBQUFBLE9BQU8sQ0FBQzl6QyxnQkFBUixDQUF5QixVQUF6QixFQUFxQ2kwQyxRQUFyQyxFQUErQyxLQUEvQztBQUNBSCxFQUFBQSxPQUFPLENBQUM5ekMsZ0JBQVIsQ0FBeUIsTUFBekIsRUFBaUNrMEMsSUFBakMsRUFBdUMsS0FBdkM7QUFDQWg1QyxFQUFBQSxRQUFRLENBQUNxNUMsSUFBVCxDQUFjai9DLFdBQWQsQ0FBMEJ3K0MsT0FBMUI7QUFJSCxDQXpDTSxDOztBQzBCUCxNQUFNVSxVQUFVLEdBQUk3aEQsSUFBRCxJQUEwQztBQUMzRCxNQUFJQSxJQUFJLENBQUMrVSxFQUFMLEtBQVksTUFBaEIsRUFBd0I7QUFDdEIsV0FBTztBQUNMQSxNQUFBQSxFQUFFLEVBQUUsTUFEQztBQUVMbkksTUFBQUEsSUFBSSxFQUFFLE1BRkQ7QUFHTHV1QixNQUFBQSxRQUFRLEVBQUV4bkIsU0FITDtBQUlMbXVDLE1BQUFBLEtBQUssRUFBRW51QztBQUpGLEtBQVA7QUFNRCxHQVBELE1BT087QUFDTCxXQUFPO0FBQ0xvQixNQUFBQSxFQUFFLEVBQUUvVSxJQUFJLENBQUMrVSxFQURKO0FBRUxuSSxNQUFBQSxJQUFJLEVBQUUsTUFGRDtBQUdMdXVCLE1BQUFBLFFBQVEsRUFBRXhuQixTQUhMO0FBSUxtdUMsTUFBQUEsS0FBSyxFQUFFbnVDO0FBSkYsS0FBUDtBQU1EO0FBQ0YsQ0FoQkQ7O0FBa0JBLE1BQU1vdUMsY0FBYyxHQUFJNStDLElBQUQsSUFHRDtBQUNwQixRQUFNO0FBQUVvTixJQUFBQSxLQUFGO0FBQVM0b0IsSUFBQUE7QUFBVCxNQUFtQmgyQixJQUF6QjtBQUVBZzJCLEVBQUFBLEtBQUssQ0FBQzZvQixPQUFOLENBQWV0dUMsQ0FBRCxJQUFPO0FBQ25CLFVBQU07QUFBRTZULE1BQUFBLE1BQUY7QUFBVTBKLE1BQUFBO0FBQVYsUUFBcUJ2ZCxDQUEzQjtBQUNBLFVBQU11dUMsVUFBVSxHQUFHMXhDLEtBQUssQ0FBQ25QLElBQU4sQ0FBWSt4QixDQUFELElBQU9BLENBQUMsQ0FBQ3BlLEVBQUYsS0FBU2tjLE1BQTNCLENBQW5COztBQUNBLFFBQUksQ0FBQ2d4QixVQUFELElBQWVBLFVBQVUsQ0FBQ2x0QyxFQUFYLENBQWN3UCxXQUFkLE9BQWdDLE1BQW5ELEVBQTJEO0FBQ3pELFlBQU0sSUFBSXBULEtBQUosRUFBTjtBQUNEOztBQUNEOHdDLElBQUFBLFVBQVUsQ0FBQzltQixRQUFYLEdBQXNCNVQsTUFBdEI7QUFDRCxHQVBEO0FBU0EsU0FBT2hYLEtBQVA7QUFDRCxDQWhCRDs7QUFrQk8sTUFBTTJ4QyxjQUFjLEdBQUkvK0MsSUFBRCxJQUFxQztBQUNqRSxRQUFNZy9DLFdBQVcsR0FBSTNyQyxDQUFELElBQXdDO0FBQzFELFdBQU8sQ0FBQ0EsQ0FBQyxDQUFDNHJDLE9BQVY7QUFDRCxHQUZEOztBQUdBLFFBQU1DLFVBQVUsR0FBSTdyQyxDQUFELElBQW9DO0FBQ3JELFdBQU9BLENBQUMsQ0FBQzRyQyxPQUFUO0FBQ0QsR0FGRDs7QUFHQSxRQUFNRSxVQUFVLEdBQUduL0MsSUFBSSxDQUFDb04sS0FBTCxDQUFXNU8sTUFBWCxDQUFrQndnRCxXQUFsQixDQUFuQjtBQUNBLFFBQU1JLGFBQWEsR0FBR0QsVUFBVSxDQUFDcGdELEdBQVgsQ0FBZTIvQyxVQUFmLENBQXRCO0FBQ0EsUUFBTVcsU0FBUyxHQUFHci9DLElBQUksQ0FBQ29OLEtBQUwsQ0FBVzVPLE1BQVgsQ0FBa0IwZ0QsVUFBbEIsQ0FBbEI7QUFFQSxRQUFNSSxZQUFZLEdBQUcsSUFBSWgvQyxHQUFKLENBQ2pCTixJQUFJLENBQUNvTixLQUFMLENBQVdyTyxHQUFYLENBQWVzVSxDQUFDLElBQUksQ0FBQ0EsQ0FBQyxDQUFDekIsRUFBSCxFQUFPLENBQUN5QixDQUFDLENBQUM0ckMsT0FBVixDQUFwQixDQURpQixDQUFyQjtBQUlBLFFBQU1NLFlBQVksR0FBRyxJQUFJai9DLEdBQUosQ0FDakIrK0MsU0FBUyxDQUFDdGdELEdBQVYsQ0FBZXNVLENBQUQsSUFBTyxDQUFDQSxDQUFDLENBQUN6QixFQUFILEVBQU95QixDQUFDLENBQUN6UCxJQUFULENBQXJCLENBRGlCLENBQXJCOztBQU1BLFFBQU00N0MsYUFBYSxHQUFJbnNDLENBQUQsSUFBMEM7QUFDOUQsVUFBTW9zQyxhQUFhLEdBQUdDLE9BQU8sQ0FBQ0osWUFBWSxDQUFDMytDLEdBQWIsQ0FBaUIwUyxDQUFDLENBQUMrUSxNQUFuQixDQUFELENBQTdCO0FBQ0EsVUFBTXU3QixhQUFhLEdBQUdELE9BQU8sQ0FBQ0osWUFBWSxDQUFDMytDLEdBQWIsQ0FBaUIwUyxDQUFDLENBQUN5YSxNQUFuQixDQUFELENBQTdCO0FBQ0EsV0FBTzJ4QixhQUFhLElBQUlFLGFBQXhCO0FBQ0QsR0FKRDs7QUFNQSxRQUFNQyxpQkFBaUIsR0FBSXZzQyxDQUFELElBQWtEO0FBRTFFLFFBQUksRUFBRSxZQUFZQSxDQUFkLENBQUosRUFBc0I7QUFDcEIsYUFBTyxLQUFQO0FBQ0Q7O0FBQ0QsVUFBTW9zQyxhQUFhLEdBQUdDLE9BQU8sQ0FBQ0osWUFBWSxDQUFDMytDLEdBQWIsQ0FBaUIwUyxDQUFDLENBQUMrUSxNQUFuQixDQUFELENBQTdCO0FBQ0EsVUFBTXU3QixhQUFhLEdBQUdELE9BQU8sQ0FBQ0osWUFBWSxDQUFDMytDLEdBQWIsQ0FBaUIwUyxDQUFDLENBQUN5YSxNQUFuQixDQUFELENBQTdCO0FBQ0EsV0FBTzJ4QixhQUFhLElBQUksQ0FBQ0UsYUFBekI7QUFDRCxHQVJEOztBQVVBLFFBQU1FLFVBQVUsR0FBRzcvQyxJQUFJLENBQUNnMkIsS0FBTCxDQUFXeDNCLE1BQVgsQ0FBa0JnaEQsYUFBbEIsQ0FBbkI7QUFDQSxRQUFNTSxhQUFhLEdBQUc5L0MsSUFBSSxDQUFDZzJCLEtBQUwsQ0FBV3gzQixNQUFYLENBQWtCb2hELGlCQUFsQixDQUF0QjtBQUVBLFFBQU1HLFdBQVcsR0FBR25CLGNBQWMsQ0FBQztBQUNqQ3h4QyxJQUFBQSxLQUFLLEVBQUVneUMsYUFEMEI7QUFFakNwcEIsSUFBQUEsS0FBSyxFQUFFNnBCO0FBRjBCLEdBQUQsQ0FBbEM7QUFLQSxRQUFNRyxZQUFZLEdBQUcsSUFBSTEvQyxHQUFKLENBQ2pCdy9DLGFBQWEsQ0FBQy9nRCxHQUFkLENBQW1Cc1UsQ0FBRCxJQUFPLENBQUNBLENBQUMsQ0FBQytRLE1BQUgsRUFBVyxFQUFYLENBQXpCLENBRGlCLENBQXJCO0FBSUEwN0IsRUFBQUEsYUFBYSxDQUFDakIsT0FBZCxDQUF1QnhyQyxDQUFELElBQU87QUFDM0IsUUFBSTRzQyxTQUFTLEdBQUdELFlBQVksQ0FBQ3IvQyxHQUFiLENBQWlCMFMsQ0FBQyxDQUFDK1EsTUFBbkIsQ0FBaEI7QUFDQTY3QixJQUFBQSxTQUFTLEdBQUdBLFNBQVMsR0FBR0EsU0FBSCxHQUFlLEVBQXBDO0FBQ0EsVUFBTUMsUUFBUSxHQUFHWCxZQUFZLENBQUM1K0MsR0FBYixDQUFpQjBTLENBQUMsQ0FBQ3lhLE1BQW5CLENBQWpCOztBQUNBLFFBQUksQ0FBQ295QixRQUFMLEVBQWU7QUFDYixZQUFNLElBQUlseUMsS0FBSixFQUFOO0FBQ0Q7O0FBQ0RpeUMsSUFBQUEsU0FBUyxDQUFDbmlELElBQVYsQ0FBZTtBQUFFK1QsTUFBQUEsS0FBSyxFQUFFb3VDLFNBQVMsQ0FBQzNqRCxNQUFWLEdBQW1CLENBQTVCO0FBQStCc0gsTUFBQUEsSUFBSSxFQUFFczhDLFFBQXJDO0FBQStDQyxNQUFBQSxNQUFNLEVBQUU5c0MsQ0FBQyxDQUFDOHNDLE1BQXpEO0FBQWlFL2lELE1BQUFBLENBQUMsRUFBRSxDQUFwRTtBQUF1RWltQixNQUFBQSxDQUFDLEVBQUUsQ0FBMUU7QUFBNkUrOEIsTUFBQUEsRUFBRSxFQUFFLENBQWpGO0FBQW9GQyxNQUFBQSxFQUFFLEVBQUU7QUFBeEYsS0FBZjtBQUNBTCxJQUFBQSxZQUFZLENBQUN0L0MsR0FBYixDQUFpQjJTLENBQUMsQ0FBQytRLE1BQW5CLEVBQTJCNjdCLFNBQTNCO0FBQ0QsR0FURCxFQWpEaUUsQ0E0RGpFOztBQUNBRixFQUFBQSxXQUFXLENBQUNsQixPQUFaLENBQXFCdHVDLENBQUQsSUFBTztBQUN6QkEsSUFBQUEsQ0FBQyxDQUFDb3VDLEtBQUYsR0FBVXFCLFlBQVksQ0FBQ3IvQyxHQUFiLENBQWlCNFAsQ0FBQyxDQUFDcUIsRUFBbkIsQ0FBVjtBQUNELEdBRkQ7QUFJQSxTQUFPbXVDLFdBQVA7QUFDRCxDQWxFTSxDOztBQ3RDQSxNQUFNTyxnQkFBNEIsR0FBRztBQUN4Q0MsRUFBQUEsaUJBQWlCLEVBQUUsR0FEcUI7QUFFeENDLEVBQUFBLFlBQVksRUFBRSxFQUYwQjtBQUd4Q245QyxFQUFBQSxJQUFJLEVBQUU7QUFDRnVvQixJQUFBQSxNQUFNLEVBQUV2aEIsTUFBTSxDQUFDbzJDLFdBRGI7QUFFRjkwQixJQUFBQSxLQUFLLEVBQUV0aEIsTUFBTSxDQUFDcTJDO0FBRlosR0FIa0M7QUFPeENDLEVBQUFBLE1BQU0sRUFBRTtBQUNKMUgsSUFBQUEsR0FBRyxFQUFFLEVBREQ7QUFFSjllLElBQUFBLEtBQUssRUFBRSxHQUZIO0FBR0pDLElBQUFBLE1BQU0sRUFBRSxFQUhKO0FBSUpGLElBQUFBLElBQUksRUFBRTtBQUpGLEdBUGdDO0FBYXhDMG1CLEVBQUFBLE1BQU0sRUFBRTtBQUNKNXhCLElBQUFBLEVBQUUsRUFBRSxFQURBO0FBRUpDLElBQUFBLEVBQUUsRUFBRTVrQixNQUFNLENBQUNxMkMsVUFBUCxHQUFvQjtBQUZwQixHQWJnQztBQWlCeENHLEVBQUFBLFlBQVksRUFBRTtBQUNkQyxJQUFBQSxRQUFRLEVBQUUsQ0FBQyxDQUFELEVBQUksRUFBSixDQURJO0FBRWRDLElBQUFBLFNBQVMsRUFBRSxRQUZHO0FBR2RDLElBQUFBLFlBQVksRUFBRSxDQUFDLENBQUQsRUFBSSxFQUFKLENBSEE7QUFJZEMsSUFBQUEsYUFBYSxFQUFFLENBQUMsR0FBRCxFQUFNLEdBQU4sQ0FKRDtBQUtkbi9CLElBQUFBLE9BQU8sRUFBRSxDQUFDLEdBQUQsRUFBTSxHQUFOLENBTEs7QUFNZG8vQixJQUFBQSxVQUFVLEVBQUUsQ0FBQyxHQUFELEVBQU0sR0FBTixDQU5FO0FBT2Q5ZCxJQUFBQSxPQUFPLEVBQUU7QUFQSztBQWpCMEIsQ0FBckMsQzs7Ozs7QUNoQ1AsTUFBa0c7QUFDbEcsTUFBd0Y7QUFDeEYsTUFBK0Y7QUFDL0YsTUFBa0g7QUFDbEgsTUFBMkc7QUFDM0csTUFBMkc7QUFDM0csTUFBa0k7QUFDbEk7QUFDQTs7QUFFQSxJQUFJLGVBQU87O0FBRVgsZUFBTyxxQkFBcUIsNkJBQW1CO0FBQy9DLGVBQU8saUJBQWlCLDBDQUFhOztBQUVyQyxNQUFNLGVBQU8sVUFBVSwrQkFBYTtBQUNwQztBQUNBLGVBQU8sVUFBVSx1QkFBTTtBQUN2QixlQUFPLHNCQUFzQiw4QkFBa0I7O0FBRS9DLElBQUksY0FBTSxHQUFHLGtDQUFHLENBQUMsc0JBQU8sRUFBRSxlQUFPOzs7O0FBSW1FO0FBQ3BHLE9BQU8sa0RBQWUsc0JBQU8sSUFBSSxvQ0FBYyxHQUFHLG9DQUFjLFlBQVksRUFBQzs7O0FDMUI3RTtBQUVBO0FBRUE7QUFFQSxNQUFNZ2UsTUFBTSxHQUFHZCxnQkFBZjs7QUFRQSxNQUFNZSxRQUFRLEdBQUl4a0QsSUFBRCxJQUFtQztBQUNsRCxTQUFPLEVBQ0wsR0FBR0EsSUFERTtBQUVMeWtELElBQUFBLFNBQVMsRUFBRTl3QyxTQUZOO0FBR0wwekIsSUFBQUEsRUFBRSxFQUFFLENBSEM7QUFJTHFLLElBQUFBLEVBQUUsRUFBRTtBQUpDLEdBQVA7QUFNRCxDQVBEOztBQVNPLFNBQVNnVCxRQUFULENBQWtCNWtELENBQWxCLEVBQXFDO0FBQzFDLFFBQU02a0QsU0FBUyxHQUFHN2tELENBQUMsQ0FBQ29DLEdBQUYsQ0FBTXNpRCxRQUFOLENBQWxCLENBRDBDLENBRTFDOztBQUNBLFFBQU1JLFFBQThDLEdBQUdOLFFBQUEsR0FBb0RLLFNBQXBELENBQXZEO0FBRUEsUUFBTUUsUUFBMEIsR0FBRyxDQUNqQ04sTUFBTSxDQUFDLzlDLElBQVAsQ0FBWXVvQixNQUFaLEdBQXFCdzFCLE1BQU0sQ0FBQ1QsTUFBUCxDQUFjMUgsR0FBbkMsR0FBeUNtSSxNQUFNLENBQUNULE1BQVAsQ0FBY3ZtQixNQUR0QixFQUVqQ2duQixNQUFNLENBQUMvOUMsSUFBUCxDQUFZc29CLEtBQVosR0FBb0J5MUIsTUFBTSxDQUFDVCxNQUFQLENBQWN6bUIsSUFBbEMsR0FBeUNrbkIsTUFBTSxDQUFDVCxNQUFQLENBQWN4bUIsS0FGdEIsQ0FBbkM7QUFLQSxRQUFNUCxJQUFJLEdBQUd1bkIsUUFBQSxHQUFnRDk5QyxJQUFoRCxDQUFxRHErQyxRQUFyRCxFQUErRDduQixVQUEvRCxDQUEyRXhtQixDQUFELElBQU9BLENBQUMsQ0FBQ2drQixLQUFGLEdBQVEsR0FBekYsQ0FBYjtBQUNBb3FCLEVBQUFBLFFBQVEsQ0FBQ3ZkLEVBQVQsR0FBY2tkLE1BQU0sQ0FBQ1IsTUFBUCxDQUFjM3hCLEVBQWQsR0FBbUIsQ0FBakM7QUFDQXd5QixFQUFBQSxRQUFRLENBQUNsVCxFQUFULEdBQWMsQ0FBZDtBQUNBLFFBQU1vVCxRQUFRLEdBQUdGLFFBQVEsQ0FBQy9wQixXQUFULEdBQXVCMzRCLEdBQXZCLENBQTJCc1UsQ0FBQyxJQUFJQSxDQUFDLENBQUNna0IsS0FBbEMsRUFBeUN1cUIsTUFBekMsQ0FBZ0QsQ0FBQzkrQyxDQUFELEVBQUlDLENBQUosS0FBVVgsSUFBSSxDQUFDZ2dCLEdBQUwsQ0FBU3RmLENBQVQsRUFBWUMsQ0FBWixDQUExRCxDQUFqQixDQWIwQyxDQWMxQzs7QUFDQTArQyxFQUFBQSxRQUFRLENBQUMvcEIsV0FBVCxHQUF1Qm1uQixPQUF2QixDQUFnQ3hyQyxDQUFELElBQU87QUFFcEMsUUFBSUEsQ0FBQyxDQUFDZ2tCLEtBQUYsSUFBV2hrQixDQUFDLENBQUNna0IsS0FBRixHQUFVK3BCLE1BQU0sQ0FBQ1osWUFBaEMsRUFBOEM7QUFDNUMsVUFBSW50QyxDQUFDLENBQUNoVixRQUFOLEVBQWdCO0FBQ2RnVixRQUFBQSxDQUFDLENBQUNpdUMsU0FBRixHQUFjanVDLENBQUMsQ0FBQ2hWLFFBQWhCO0FBQ0FnVixRQUFBQSxDQUFDLENBQUNoVixRQUFGLEdBQWFtUyxTQUFiO0FBQ0Q7QUFDRjtBQUNGLEdBUkQ7QUFVQSxRQUFNa2IsT0FBTyxHQUFHLENBQUMsQ0FBQzAxQixNQUFNLENBQUNULE1BQVAsQ0FBY3ptQixJQUFoQixFQUFzQixDQUFDa25CLE1BQU0sQ0FBQ1QsTUFBUCxDQUFjMUgsR0FBckMsRUFBMENtSSxNQUFNLENBQUMvOUMsSUFBUCxDQUFZc29CLEtBQXRELEVBQTZEeTFCLE1BQU0sQ0FBQy85QyxJQUFQLENBQVl1b0IsTUFBekUsQ0FBaEIsQ0F6QjBDLENBMEIxQzs7QUFDQSxRQUFNNWUsSUFBbUMsR0FBRzRzQixJQUFJLENBQUM2bkIsUUFBRCxDQUFoRDtBQUVBLFFBQU1JLGdCQUFnQixHQUFHVixjQUF6QjtBQUNBLFFBQU1XLGNBQWMsR0FBR1gsY0FBdkI7QUFFQSxRQUFNNTlDLEdBQUcsR0FBRzQ5QyxVQUFBLENBQ0YsS0FERSxFQUNLOXpDLElBREwsQ0FDVSxTQURWLEVBQ3FCcWUsT0FEckIsRUFDOEJyZSxJQUQ5QixDQUNtQyxRQURuQyxFQUM2QyxNQUQ3QyxDQUFaO0FBSUEsUUFBTTAwQyxRQUFRLEdBQUd4K0MsR0FBRyxDQUFDNUIsTUFBSixDQUFXLEdBQVgsQ0FBakI7QUFFQSxRQUFNcWdELFlBQVksR0FBR2IsSUFBQSxHQUNoQmpHLFdBRGdCLENBQ0osQ0FBQyxHQUFELEVBQU0sRUFBTixDQURJLEVBQ090eEMsRUFEUCxDQUNVLE1BRFYsRUFDa0JQLEtBQUssSUFBSTA0QyxRQUFRLENBQUMxMEMsSUFBVCxDQUFjLFdBQWQsRUFBMkJoRSxLQUFLLENBQUMySyxTQUFqQyxDQUQzQixDQUFyQjtBQUdBelEsRUFBQUEsR0FBRyxDQUFDdkcsSUFBSixDQUFTZ2xELFlBQVQsRUF6QzBDLENBMkMxQzs7QUFDQSxRQUFNQyxLQUFLLEdBQUdGLFFBQVEsQ0FDbkJwZ0QsTUFEVyxDQUNKLEdBREksRUFFWDBMLElBRlcsQ0FFTixNQUZNLEVBRUUsTUFGRixFQUdYQSxJQUhXLENBR04sUUFITSxFQUdJLFNBSEosRUFJWEEsSUFKVyxDQUlOLGdCQUpNLEVBSVksR0FKWixFQUtYQSxJQUxXLENBS04sY0FMTSxFQUtVLEdBTFYsQ0FBZDtBQU9BLFFBQU02MEMsS0FBSyxHQUFHSCxRQUFRLENBQ25CcGdELE1BRFcsQ0FDSixHQURJLEVBRVgwTCxJQUZXLENBRU4sUUFGTSxFQUVJLFNBRkosRUFHWEEsSUFIVyxDQUdOLGdCQUhNLEVBR1ksS0FIWixDQUFkO0FBT0EsUUFBTTgwQyxVQUFVLEdBQUdoQixVQUFBLENBQ0FBLE9BREEsRUFFaEJwaUIsTUFGZ0IsQ0FFVCxDQUFDLENBQUQsRUFBSTRpQixRQUFKLENBRlMsQ0FBbkI7QUFJQSxRQUFNUyxlQUFlLEdBQUdqQixhQUFBLEdBQ25CbmlCLEtBRG1CLENBQ2IsQ0FBQyxDQUFELEVBQUksQ0FBSixDQURhLEVBRW5CRCxNQUZtQixDQUVaLENBQUMsQ0FBRCxFQUFJNGlCLFFBQUosQ0FGWSxDQUF4QjtBQUlBLFFBQU1VLGFBQWEsR0FBR2xCLGFBQUEsR0FDakJuaUIsS0FEaUIsQ0FDWCxDQUFDLENBQUQsRUFBSSxFQUFKLENBRFcsRUFFakJELE1BRmlCLENBRVYsQ0FBQyxDQUFELEVBQUksQ0FBSixDQUZVLENBQXRCO0FBS0EsUUFBTXVqQixhQUFhLEdBQUduQixRQUFBLEdBQ2pCcGlCLE1BRGlCLENBQ1YsQ0FBQyxDQUFELEVBQUksQ0FBSixDQURVLEVBRWpCQyxLQUZpQixDQUVYLENBQUMsSUFBRCxFQUFPLENBQVAsQ0FGVyxDQUF0QjtBQUtBLFFBQU11akIsUUFBUSxHQUFHcEIsY0FBQSxHQUVHL2pELENBRkgsQ0FFTWlXLENBQUQsSUFBT0EsQ0FBQyxDQUFDZ1EsQ0FGZCxFQUVpQkEsQ0FGakIsQ0FFb0JoUSxDQUFELElBQU9BLENBQUMsQ0FBQ2pXLENBRjVCLENBQWpCOztBQUlBLFdBQVN3QixNQUFULENBQWdCd2xCLE1BQWhCLEVBQXFDO0FBQ25DLFVBQU1oWCxLQUFLLEdBQUdKLElBQUksQ0FBQzBxQixXQUFMLEdBQW1CeEIsT0FBbkIsRUFBZDtBQUNBLFVBQU1GLEtBQUssR0FBR2hwQixJQUFJLENBQUNncEIsS0FBTCxFQUFkLENBRm1DLENBSW5DO0FBQ0E7O0FBQ0E0RCxJQUFBQSxJQUFJLENBQUM1c0IsSUFBRCxDQUFKO0FBQ0EsUUFBSXcxQyxVQUFVLEdBQUdOLEtBQUssQ0FDbkJ4akQsU0FEYyxDQUNKLGNBREksRUFFYjtBQUZhLEtBR2RzQixJQUhjLENBR1RvTixLQUhTLEVBR0ZpRyxDQUFDLElBQUlBLENBQUMsQ0FBQ3pCLEVBSEwsQ0FBakI7QUFNQTR3QyxJQUFBQSxVQUFVLENBQ1B6aUQsSUFESCxHQUVHNFYsVUFGSCxHQUdHeEQsSUFISCxDQUdRZ3ZDLE9BSFIsRUFJR2p2QyxRQUpILENBSVlrdkMsTUFBTSxDQUFDYixpQkFKbkIsRUFLRzMrQyxNQUxILEdBTUd5TCxJQU5ILENBTVEsV0FOUixFQU1zQmdHLENBQUQsSUFBUSxhQUFZK1EsTUFBTSxDQUFDZixDQUFFLElBQUdlLE1BQU0sQ0FBQ2huQixDQUFFLEdBTjlELEVBT0dpUSxJQVBILENBT1EsY0FQUixFQU93QixDQVB4QixFQVFHQSxJQVJILENBUVEsZ0JBUlIsRUFRMEIsQ0FSMUI7QUFVQW0xQyxJQUFBQSxVQUFVLENBQ1B0bUQsTUFESCxDQUNVLE1BRFYsRUFFR21SLElBRkgsQ0FFUSxPQUZSLEVBRWlCLFdBRmpCLEVBR0dBLElBSEgsQ0FJSSxHQUpKLEVBS0k4ekMsYUFBQSxHQUVHMTNDLElBRkgsQ0FFUzRKLENBQUQsSUFDSixDQUFDQSxDQUFDLENBQUNoVixRQUFILElBQWVnVixDQUFDLENBQUNpdUMsU0FBakIsR0FBNkJRLGNBQTdCLEdBQThDRCxnQkFIbEQsQ0FMSixFQVdHeDBDLElBWEgsQ0FXUSxNQVhSLEVBV2lCZ0csQ0FBRCxJQUFPO0FBQ25CLFlBQU1tTixHQUFHLEdBQUcyaEMsVUFBVSxDQUFDOXVDLENBQUMsQ0FBQ2drQixLQUFILENBQXRCO0FBQ0EsYUFBTzhwQixLQUFBLENBQVMzZ0MsR0FBVCxFQUFlRyxTQUFmLEVBQVA7QUFDRCxLQWRIO0FBZ0JBLFVBQU04aEMsU0FBUyxHQUFHRCxVQUFVLENBQ3pCMWlELEtBRGUsR0FFZjZCLE1BRmUsQ0FFUixHQUZRLEVBR2YwTCxJQUhlLENBR1YsT0FIVSxFQUdELFlBSEMsRUFJZkEsSUFKZSxDQUlWLFdBSlUsRUFJSWdHLENBQUQsSUFBUSxhQUFZK1EsTUFBTSxDQUFDbXFCLEVBQUcsSUFBR25xQixNQUFNLENBQUM4ZixFQUFHLEdBSjlDLEVBS2Y3MkIsSUFMZSxDQUtWLGNBTFUsRUFLTSxDQUxOLEVBTWZBLElBTmUsQ0FNVixnQkFOVSxFQU1RLENBTlIsRUFPaEI7QUFQZ0IsS0FRZnpELEVBUmUsQ0FRWixPQVJZLEVBUUgsQ0FBQ1AsS0FBRCxFQUFRZ0ssQ0FBUixLQUFjO0FBQ3pCO0FBQ0EsWUFBTXF2QyxFQUE2QyxHQUFHcnZDLENBQXREOztBQUNBLFVBQUlxdkMsRUFBRSxDQUFDcmtELFFBQVAsRUFBaUI7QUFFZnFrRCxRQUFBQSxFQUFFLENBQUNockIsV0FBSCxHQUNHeEIsT0FESCxHQUVHMm9CLE9BRkgsQ0FFWWxxQyxDQUFELElBQU87QUFDZCxjQUFJQSxDQUFDLENBQUN0VyxRQUFOLEVBQWdCO0FBQ2RzVyxZQUFBQSxDQUFDLENBQUMyc0MsU0FBRixHQUFjM3NDLENBQUMsQ0FBQ3RXLFFBQWhCO0FBQ0FzVyxZQUFBQSxDQUFDLENBQUN0VyxRQUFGLEdBQWFtUyxTQUFiO0FBQ0QsV0FIRCxNQUdPO0FBQ0xtRSxZQUFBQSxDQUFDLENBQUN0VyxRQUFGLEdBQWFzVyxDQUFDLENBQUMyc0MsU0FBZjtBQUNBM3NDLFlBQUFBLENBQUMsQ0FBQzJzQyxTQUFGLEdBQWM5d0MsU0FBZDtBQUNEO0FBQ0YsU0FWSDtBQVdELE9BYkQsTUFhTztBQUNMa3lDLFFBQUFBLEVBQUUsQ0FBQ3JrRCxRQUFILEdBQWNxa0QsRUFBRSxDQUFDcEIsU0FBakI7QUFDQW9CLFFBQUFBLEVBQUUsQ0FBQ3BCLFNBQUgsR0FBZTl3QyxTQUFmOztBQUNBLFlBQUksQ0FBQ2t5QyxFQUFFLENBQUNya0QsUUFBUixFQUFrQjtBQUNoQixnQkFBTSxJQUFJMlAsS0FBSixFQUFOO0FBQ0Q7O0FBQ0QwMEMsUUFBQUEsRUFBRSxDQUFDcmtELFFBQUgsQ0FBWXdnRCxPQUFaLENBQXFCdHdDLENBQUQsSUFBTztBQUN6QixjQUFJQSxDQUFDLENBQUNsUSxRQUFOLEVBQWdCO0FBQ2RrUSxZQUFBQSxDQUFDLENBQUMreUMsU0FBRixHQUFjL3lDLENBQUMsQ0FBQ2xRLFFBQWhCO0FBQ0FrUSxZQUFBQSxDQUFDLENBQUNsUSxRQUFGLEdBQWFtUyxTQUFiO0FBQ0Q7QUFDRixTQUxEO0FBTUQ7O0FBQ0Q1UixNQUFBQSxNQUFNLENBQUM4akQsRUFBRCxDQUFOO0FBQ0QsS0F0Q2UsQ0FBbEI7QUF3Q0FELElBQUFBLFNBQVMsQ0FDTjlnRCxNQURILENBQ1UsTUFEVixFQUVHMEwsSUFGSCxDQUVRLE9BRlIsRUFFaUIsV0FGakIsRUFHR0EsSUFISCxDQUdRLE1BSFIsRUFHaUJnRyxDQUFELElBQU87QUFDbkIsWUFBTW1OLEdBQUcsR0FBRzJoQyxVQUFVLENBQUM5dUMsQ0FBQyxDQUFDZ2tCLEtBQUgsQ0FBdEI7QUFDQSxhQUFPOHBCLEtBQUEsQ0FBUzNnQyxHQUFULEVBQWVHLFNBQWYsRUFBUDtBQUNELEtBTkgsRUFPR3RULElBUEgsQ0FRSSxHQVJKLEVBU0k4ekMsYUFBQSxHQUVHMTNDLElBRkgsQ0FFUzRKLENBQUQsSUFDSixDQUFDQSxDQUFDLENBQUNoVixRQUFILElBQWVnVixDQUFDLENBQUNpdUMsU0FBakIsR0FBNkJRLGNBQTdCLEdBQThDRCxnQkFIbEQsQ0FUSixFQWVHeDBDLElBZkgsQ0FlUSxXQWZSLEVBZXNCZ0csQ0FBRCxJQUFRLFNBQVErdUMsZUFBZSxDQUFDL3VDLENBQUMsQ0FBQ2drQixLQUFILENBQVUsR0FmOUQ7QUFpQkFvckIsSUFBQUEsU0FBUyxDQUFDOWdELE1BQVYsQ0FBaUIsR0FBakIsRUFBc0IwTCxJQUF0QixDQUEyQixPQUEzQixFQUFvQyxlQUFwQyxFQWhHbUMsQ0FrR25DOztBQUNBbTFDLElBQUFBLFVBQVUsR0FBR0MsU0FBUyxDQUFDNWdELEtBQVYsQ0FBZ0IyZ0QsVUFBaEIsQ0FBYjtBQUVBQSxJQUFBQSxVQUFVLENBQ1A3c0MsVUFESCxHQUVHeEQsSUFGSCxDQUVRZ3ZDLE9BRlIsRUFHR2p2QyxRQUhILENBR1lrdkMsTUFBTSxDQUFDYixpQkFIbkIsRUFJR2x6QyxJQUpILENBSVEsV0FKUixFQUlzQmdHLENBQUQsSUFBUSxhQUFZQSxDQUFDLENBQUNnUSxDQUFFLElBQUdoUSxDQUFDLENBQUNqVyxDQUFFLEdBSnBELEVBS0dpUSxJQUxILENBS1EsY0FMUixFQUt3QixDQUx4QixFQU1HQSxJQU5ILENBTVEsZ0JBTlIsRUFNMEIsQ0FOMUIsRUFyR21DLENBOEduQzs7QUFDQSxVQUFNNHlDLFNBQVMsR0FBR3VDLFVBQVUsQ0FBQ3RtRCxNQUFYLENBQWtCLGdCQUFsQixDQUFsQjs7QUFFQSxVQUFNeW1ELFFBQVEsR0FBSTVsRCxDQUFELElBQWlDO0FBQ2hELFlBQU02bEQsU0FBUyxHQUFHN2xELENBQUMsR0FBRyxDQUF0Qjs7QUFDQSxjQUFRNmxELFNBQVI7QUFDRSxhQUFLLENBQUw7QUFBUTtBQUNOLG1CQUFPLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FBUDtBQUNEOztBQUNELGFBQUssQ0FBTDtBQUFRO0FBQ04sbUJBQU8sQ0FBQyxDQUFELEVBQUksQ0FBQyxDQUFMLENBQVA7QUFDRDs7QUFDRCxhQUFLLENBQUw7QUFBUTtBQUNOLG1CQUFPLENBQUMsQ0FBQyxDQUFGLEVBQUssQ0FBQyxDQUFOLENBQVA7QUFDRDs7QUFDRCxhQUFLLENBQUw7QUFBUTtBQUNOLG1CQUFPLENBQUMsQ0FBQyxDQUFGLEVBQUssQ0FBTCxDQUFQO0FBQ0Q7O0FBQ0Q7QUFBUztBQUNQLGtCQUFNLElBQUk1MEMsS0FBSixDQUFVLGFBQVYsQ0FBTjtBQUNEO0FBZkg7QUFrQkQsS0FwQkQ7O0FBc0JBLFVBQU02MEMsV0FBVyxHQUFJOWxELENBQUQsSUFBZTtBQUNqQyxZQUFNLENBQUNteEIsS0FBRCxFQUFRQyxLQUFSLElBQWlCdzBCLFFBQVEsQ0FBQzVsRCxDQUFELENBQS9CO0FBQ0EsWUFBTStsRCxTQUFTLEdBQUcxZ0QsSUFBSSxDQUFDOGdCLEtBQUwsQ0FBV25tQixDQUFDLEdBQUcsQ0FBZixDQUFsQjtBQUNBLFlBQU1LLENBQUMsR0FBRyxDQUFDLEtBQU0sSUFBSTBsRCxTQUFYLElBQTBCNTBCLEtBQXBDO0FBQ0EsWUFBTTdLLENBQUMsR0FBRyxDQUFDLEtBQU0sS0FBS3kvQixTQUFaLElBQTBCMzBCLEtBQXBDO0FBQ0EsYUFBUSxhQUFZL3dCLENBQUUsSUFBR2ltQixDQUFFLEdBQTNCO0FBQ0QsS0FORDs7QUFVQSxVQUFNMC9CLGlCQUFpQixHQUFHOUMsU0FBUyxDQUFDdmhELFNBQVYsQ0FBb0IsTUFBcEIsRUFDckJzQixJQURxQixDQUNoQnFULENBQUMsSUFBSUEsQ0FBQyxDQUFDclQsSUFBRixDQUFPMitDLEtBQVAsR0FBZXRyQyxDQUFDLENBQUNyVCxJQUFGLENBQU8yK0MsS0FBdEIsR0FBOEIsRUFEbkIsQ0FBMUI7QUFHQW9FLElBQUFBLGlCQUFpQixDQUFDampELEtBQWxCLEdBQ0s2QixNQURMLENBQ1ksTUFEWixFQUVLMkQsS0FGTCxDQUVXLFdBRlgsRUFFd0IrTixDQUFDLElBQUssR0FBRWd2QyxhQUFhLENBQUNodkMsQ0FBQyxDQUFDOHNDLE1BQUgsQ0FBVyxJQUZ4RCxFQUdLOXlDLElBSEwsQ0FHVSxXQUhWLEVBR3VCLENBQUNnRyxDQUFELEVBQUl0VyxDQUFKLEVBQU93VCxDQUFQLEtBQWE7QUFDOUIsYUFBT3N5QyxXQUFXLENBQUM5bEQsQ0FBRCxDQUFsQjtBQUNELEtBTEwsRUFNS3VJLEtBTkwsQ0FNVyxTQU5YLEVBTXNCK04sQ0FBQyxJQUFJaXZDLGFBQWEsQ0FBQ2p2QyxDQUFDLENBQUM4c0MsTUFBSCxDQU54QyxFQU9LNXlDLElBUEwsQ0FPVThGLENBQUMsSUFBSUEsQ0FBQyxDQUFDelAsSUFQakIsRUFRS3lKLElBUkwsQ0FRVSxhQVJWLEVBUXlCLFFBUnpCO0FBV0EsVUFBTThqQyxJQUFJLEdBQUc4USxLQUFLLENBQUN2akQsU0FBTixDQUFnQixNQUFoQixFQUF3QnNCLElBQXhCLENBQ1hnMkIsS0FEVyxFQUVWM2lCLENBQUQsSUFDRTtBQUNBQSxJQUFBQSxDQUFDLENBQUN5YSxNQUFGLENBQVM5dEIsSUFBVCxDQUFjNFIsRUFKTCxDQUFiLENBL0ptQyxDQXNLbkM7O0FBQ0EsVUFBTW94QyxTQUFTLEdBQUc3UixJQUFJLENBQ25CcnhDLEtBRGUsR0FFZjZCLE1BRmUsQ0FFUixNQUZRLEVBR2YwTCxJQUhlLENBR1YsR0FIVSxFQUdKZ0csQ0FBRCxJQUFPO0FBQ2hCO0FBQ0EsWUFBTXZKLENBQUMsR0FBRztBQUFDMU0sUUFBQUEsQ0FBQyxFQUFFZ25CLE1BQU0sQ0FBQzhmLEVBQVg7QUFBZTdnQixRQUFBQSxDQUFDLEVBQUVlLE1BQU0sQ0FBQ21xQjtBQUF6QixPQUFWLENBRmdCLENBR2hCOztBQUNBLGFBQU9nVSxRQUFRLENBQUM7QUFBQ24rQixRQUFBQSxNQUFNLEVBQUV0YSxDQUFUO0FBQVlna0IsUUFBQUEsTUFBTSxFQUFFaGtCO0FBQXBCLE9BQUQsQ0FBZjtBQUNELEtBUmUsQ0FBbEIsQ0F2S21DLENBaUxuQzs7QUFDQXFuQyxJQUFBQSxJQUFJLENBQ0Y7QUFERSxLQUVEdHZDLEtBRkgsQ0FFU21oRCxTQUZULEVBR0dydEMsVUFISCxHQUlHeEQsSUFKSCxDQUlRZ3ZDLE9BSlIsRUFLR2p2QyxRQUxILENBS1lrdkMsTUFBTSxDQUFDYixpQkFMbkIsRUFNRTtBQU5GLEtBT0dsekMsSUFQSCxDQU9RLEdBUFIsRUFPYWsxQyxRQVBiLEVBbExtQyxDQTJMbkM7O0FBQ0FwUixJQUFBQSxJQUFJLENBQ0RweEMsSUFESCxHQUVHNFYsVUFGSCxHQUdHeEQsSUFISCxDQUdRZ3ZDLE9BSFIsRUFJR2p2QyxRQUpILENBSVlrdkMsTUFBTSxDQUFDYixpQkFKbkIsRUFLRzMrQyxNQUxILEdBTUd5TCxJQU5ILENBTVEsR0FOUixFQU1jZ0csQ0FBRCxJQUFPO0FBQ2hCLFlBQU12SixDQUFDLEdBQUc7QUFDUjFNLFFBQUFBLENBQUMsRUFBRWduQixNQUFNLENBQUNobkIsQ0FERjtBQUVSaW1CLFFBQUFBLENBQUMsRUFBRWUsTUFBTSxDQUFDZjtBQUZGLE9BQVYsQ0FEZ0IsQ0FLaEI7O0FBQ0EsYUFBT2svQixRQUFRLENBQUM7QUFBRW4rQixRQUFBQSxNQUFNLEVBQUV0YSxDQUFWO0FBQWFna0IsUUFBQUEsTUFBTSxFQUFFaGtCO0FBQXJCLE9BQUQsQ0FBZjtBQUNELEtBYkg7QUFlQWtELElBQUFBLElBQUksQ0FBQ3lvQixVQUFMLENBQWlCcGlCLENBQUQsSUFBTztBQUNyQjtBQUNBQSxNQUFBQSxDQUFDLENBQUM2d0IsRUFBRixHQUFPN3dCLENBQUMsQ0FBQ2pXLENBQVQsQ0FGcUIsQ0FHckI7O0FBQ0FpVyxNQUFBQSxDQUFDLENBQUNrN0IsRUFBRixHQUFPbDdCLENBQUMsQ0FBQ2dRLENBQVQ7QUFDRCxLQUxEO0FBTUQ7O0FBQ0R6a0IsRUFBQUEsTUFBTSxDQUFDb08sSUFBRCxDQUFOO0FBRUEsU0FBT3pKLEdBQUcsQ0FBQzFHLElBQUosRUFBUDtBQUNELEM7O0FDNVREO0FBQ0E7QUFFQTtBQUNBOztBQUVBLE1BQU1vbUQsWUFBWSxHQUFHLE1BQU96ekMsQ0FBUCxJQUF1QjtBQUNwQyxRQUFNMHpDLFVBQVUsR0FBRzF6QyxDQUFDLENBQUMsQ0FBRCxDQUFwQjtBQUNBLFFBQU0yekMsYUFBYSxHQUFHOTRDLE1BQU0sQ0FBQys0QyxHQUFQLENBQVdDLGVBQVgsQ0FBMkJILFVBQTNCLENBQXRCO0FBQ0EsUUFBTUksT0FBTyxHQUFHLE1BQU1uQyxJQUFBLENBQW1CZ0MsYUFBbkIsQ0FBdEI7O0FBQ0EsTUFBSSxDQUFDRyxPQUFMLEVBQWM7QUFDVixVQUFNLElBQUl0MUMsS0FBSixDQUFVLFNBQVYsQ0FBTjtBQUNIOztBQUNELFFBQU1oTyxJQUFJLEdBQUcrK0MsY0FBYyxDQUFDdUUsT0FBRCxDQUEzQjtBQUNBLFFBQU1DLEtBQUssR0FBR2hDLFFBQVEsQ0FBQ3ZoRCxJQUFELENBQXRCOztBQUNBLE1BQUksQ0FBQ3VqRCxLQUFMLEVBQVk7QUFDUixVQUFNLElBQUl2MUMsS0FBSixDQUFVLG9CQUFWLENBQU47QUFDSDs7QUFDRDVJLEVBQUFBLFFBQVEsQ0FBQ3E1QyxJQUFULENBQWNqL0MsV0FBZCxDQUEwQitqRCxLQUExQjtBQUNQLENBYkQ7O0FBZUEsTUFBTUMsWUFBWSxHQUFHLE1BQU07QUFDdkJDLEVBQUFBLE9BQU8sQ0FBQ2puQixHQUFSLENBQVksa0JBQVo7QUFDQXNoQixFQUFBQSxXQUFXLENBQUNtRixZQUFELEVBQWUsOENBQWYsQ0FBWDtBQUNILENBSEQ7O0FBS0E3OUMsUUFBUSxDQUFDOEUsZ0JBQVQsQ0FBMEIsa0JBQTFCLEVBQThDczVDLFlBQTlDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rvci5qcz82ZmQzIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NlbGVjdC5qcz9iYWYzIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvYXJyYXkuanM/YzIyNiIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdG9yQWxsLmpzPzQyMzAiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2VsZWN0QWxsLmpzP2ZiMGYiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9tYXRjaGVyLmpzPzBhNzgiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2VsZWN0Q2hpbGQuanM/YjFiZiIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zZWxlY3RDaGlsZHJlbi5qcz82YzEyIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2ZpbHRlci5qcz8wY2RmIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NwYXJzZS5qcz82OThkIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2VudGVyLmpzP2Y2ODkiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9jb25zdGFudC5qcz9kMjU5Iiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2RhdGEuanM/MTIwOSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9leGl0LmpzP2YzYjYiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vam9pbi5qcz8zZjc3Iiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL21lcmdlLmpzPzhiN2IiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vb3JkZXIuanM/YTE0OSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zb3J0LmpzP2NhOWYiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vY2FsbC5qcz8wYWRkIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL25vZGVzLmpzPzliMDYiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vbm9kZS5qcz85NmUwIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NpemUuanM/OWFiNCIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9lbXB0eS5qcz9jYTE1Iiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2VhY2guanM/Y2VmZSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL25hbWVzcGFjZXMuanM/ZTMxMSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL25hbWVzcGFjZS5qcz82Y2Q0Iiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2F0dHIuanM/Zjg3MiIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3dpbmRvdy5qcz9hMzE3Iiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3N0eWxlLmpzPzM2NGIiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vcHJvcGVydHkuanM/Y2RjMyIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9jbGFzc2VkLmpzPzUwYjkiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vdGV4dC5qcz82MWIwIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2h0bWwuanM/YjI0MSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9yYWlzZS5qcz8xOTEzIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2xvd2VyLmpzPzE3YzMiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9jcmVhdG9yLmpzPzU3ZjUiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vYXBwZW5kLmpzP2RiN2QiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vaW5zZXJ0LmpzPzVhNjEiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vcmVtb3ZlLmpzPzI1OTEiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vY2xvbmUuanM/ZWExMyIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9kYXR1bS5qcz9jODAxIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL29uLmpzPzAxNjUiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGlzcGF0Y2guanM/NGUyYiIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9pdGVyYXRvci5qcz9hMDBjIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2luZGV4LmpzP2U0OGIiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtZGlzcGF0Y2gvc3JjL2Rpc3BhdGNoLmpzP2M2OGYiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtdGltZXIvc3JjL3RpbWVyLmpzPzc0ZjQiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtdGltZXIvc3JjL3RpbWVvdXQuanM/M2UwNyIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NjaGVkdWxlLmpzP2FlZDYiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvaW50ZXJydXB0LmpzPzc1NmYiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvc2VsZWN0aW9uL2ludGVycnVwdC5qcz9kMzFjIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9udW1iZXIuanM/ZTMxNyIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvdHJhbnNmb3JtL2RlY29tcG9zZS5qcz8zMjU4Iiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy90cmFuc2Zvcm0vcGFyc2UuanM/ZGE3NSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvdHJhbnNmb3JtL2luZGV4LmpzPzRiNzkiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi90d2Vlbi5qcz8zNWU4Iiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9kZWZpbmUuanM/NjNhZCIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvY29sb3IuanM/MTY2YSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvYmFzaXMuanM/Yzg0YSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvYmFzaXNDbG9zZWQuanM/NGJjZCIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvY29uc3RhbnQuanM/YzY5OCIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvY29sb3IuanM/YjA1NSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvcmdiLmpzP2UzNjAiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3N0cmluZy5qcz85MGVmIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vaW50ZXJwb2xhdGUuanM/ZTVhMSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2F0dHIuanM/ZmZlZSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2F0dHJUd2Vlbi5qcz8wYzVmIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vZGVsYXkuanM/ODY1ZiIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2R1cmF0aW9uLmpzP2YyNzYiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9lYXNlLmpzPzU4NTUiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9lYXNlVmFyeWluZy5qcz8yYTkxIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vZmlsdGVyLmpzP2NmMjIiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9tZXJnZS5qcz9hOTFkIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vb24uanM/NjhkOSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3JlbW92ZS5qcz9mY2E4Iiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc2VsZWN0LmpzP2FmOTMiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9zZWxlY3RBbGwuanM/ZWQ1NiIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NlbGVjdGlvbi5qcz83MGE5Iiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc3R5bGUuanM/ZDBkMCIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3N0eWxlVHdlZW4uanM/MGZmMSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3RleHQuanM/ZGY1NiIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3RleHRUd2Vlbi5qcz81ZTVlIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vdHJhbnNpdGlvbi5qcz9lMWIxIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vZW5kLmpzPzk4YWMiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9pbmRleC5qcz9kMTZmIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL2N1YmljLmpzPzg5MjEiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvc2VsZWN0aW9uL3RyYW5zaXRpb24uanM/ZGJmZCIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy9zZWxlY3Rpb24vaW5kZXguanM/NjJiNCIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy9pbmRleC5qcz9iMTA4Iiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWJydXNoL3NyYy9icnVzaC5qcz84NTM2Iiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWJydXNoL3NyYy9pbmRleC5qcz81ZjhmIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9pbmRleC5qcz80ODJmIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL2luZGV4LmpzP2ZiNzciLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtZmV0Y2gvc3JjL2pzb24uanM/OWQ2YSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1mZXRjaC9zcmMvaW5kZXguanM/YjJlOSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2FjY2Vzc29ycy5qcz8yMWU1Iiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2NvdW50LmpzP2RlOTAiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvZWFjaC5qcz9lYjFlIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2VhY2hCZWZvcmUuanM/M2Q4NyIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9lYWNoQWZ0ZXIuanM/OWUzMiIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9maW5kLmpzPzk5ZjAiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvc3VtLmpzPzZjOTAiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvc29ydC5qcz9iYTY2Iiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L3BhdGguanM/Mjc2ZSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9hbmNlc3RvcnMuanM/NGJmYSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9kZXNjZW5kYW50cy5qcz9mOTM4Iiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2xlYXZlcy5qcz9iZmZhIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2xpbmtzLmpzPzRhMGIiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvaXRlcmF0b3IuanM/Yzg0ZSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9pbmRleC5qcz82YmNiIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvc3RyYXRpZnkuanM/MzU0ZSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL3RyZWUuanM/NTA3MCIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2luZGV4LmpzP2M5NDciLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3RpY2tzLmpzP2VlY2IiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2FzY2VuZGluZy5qcz8wMGZiIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9iaXNlY3Rvci5qcz8yYTJkIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9udW1iZXIuanM/MGEyMCIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYmlzZWN0LmpzPzg3YzkiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2FycmF5LmpzPzY3MzAiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2RhdGUuanM/MWI2ZCIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvb2JqZWN0LmpzPzcxYmQiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL251bWJlckFycmF5LmpzPzUxZGUiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3ZhbHVlLmpzP2VhMWQiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3JvdW5kLmpzPzU4NTciLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2NvbnN0YW50LmpzPzRkZjEiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL251bWJlci5qcz9lMjZlIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9jb250aW51b3VzLmpzP2U5ODEiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2luaXQuanM/ZDQ4YyIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFNwZWNpZmllci5qcz8wOWI4Iiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0RGVjaW1hbC5qcz9hYTc0Iiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZXhwb25lbnQuanM/YTdmZCIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL3ByZWNpc2lvblByZWZpeC5qcz9kOTMzIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0R3JvdXAuanM/OTg3MSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdE51bWVyYWxzLmpzPzAxNGEiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRUcmltLmpzPzkxZGIiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRQcmVmaXhBdXRvLmpzP2NkZWQiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRSb3VuZGVkLmpzPzNmNzgiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRUeXBlcy5qcz9iNGVmIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvaWRlbnRpdHkuanM/MTE0OSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2xvY2FsZS5qcz9iMTcwIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZGVmYXVsdExvY2FsZS5qcz8xMjMxIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvcHJlY2lzaW9uUm91bmQuanM/ZDk4OSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL3ByZWNpc2lvbkZpeGVkLmpzP2RhZDEiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3RpY2tGb3JtYXQuanM/YjJjOSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvbGluZWFyLmpzPzU0OGEiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3F1YW50aXplLmpzPzdmODAiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3NlcXVlbnRpYWwuanM/Y2U2YiIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvaW5kZXguanM/Y2UyNCIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvbWF0aC5qcz81MzBhIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9jdWJlaGVsaXguanM/MTVhNyIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvY3ViZWhlbGl4LmpzPzM4NzIiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL3JhaW5ib3cuanM/NWZiYyIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2luZGV4LmpzP2ExZWIiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3QuanM/MDBhNSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2NyZWF0ZS5qcz9hOGI4Iiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvaW5kZXguanM/ZmQzMiIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1wYXRoL3NyYy9wYXRoLmpzP2VhZGMiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2FycmF5LmpzPzgyYWMiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2NvbnN0YW50LmpzP2Q4YWQiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2J1bXAuanM/ZTRkNCIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvcG9pbnQuanM/ZmRhNCIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvbGluay5qcz85ZjUwIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9tYXRoLmpzPzA5ODYiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3N5bWJvbC9hc3Rlcmlzay5qcz8wYmFhIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9zeW1ib2wvY2lyY2xlLmpzPzFhZjAiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3N5bWJvbC9jcm9zcy5qcz9hMGFjIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9zeW1ib2wvZGlhbW9uZC5qcz85YWNlIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9zeW1ib2wvZGlhbW9uZDIuanM/NjYyYyIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvc3ltYm9sL3BsdXMuanM/ZDczYyIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvc3ltYm9sL3NxdWFyZS5qcz9kNWE3Iiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9zeW1ib2wvc3F1YXJlMi5qcz81ODRhIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9zeW1ib2wvc3Rhci5qcz8wODAzIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9zeW1ib2wvdHJpYW5nbGUuanM/YWU0MCIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvc3ltYm9sL3RyaWFuZ2xlMi5qcz8wYTdmIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9zeW1ib2wvd3llLmpzP2M0OTQiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3N5bWJvbC94LmpzP2YyODIiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3N5bWJvbC5qcz85MTUwIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9pbmRleC5qcz9mMWRmIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWRyYWcvc3JjL25vZXZlbnQuanM/NzFkMiIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1kcmFnL3NyYy9ub2RyYWcuanM/YjU0ZiIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvem9vbS5qcz9jZTc1Iiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc291cmNlRXZlbnQuanM/NGZkNCIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3BvaW50ZXIuanM/NWU4MSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy16b29tL3NyYy9jb25zdGFudC5qcz85NDRjIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXpvb20vc3JjL2V2ZW50LmpzPzk2MTciLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtem9vbS9zcmMvdHJhbnNmb3JtLmpzPzg2MzciLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtem9vbS9zcmMvbm9ldmVudC5qcz8zOTJiIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXpvb20vc3JjL3pvb20uanM/ODY0NSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy16b29tL3NyYy9pbmRleC5qcz9kOTM0Iiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzL3NyYy9pbmRleC5qcz84OThiIiwid2VicGFjazovL2QzY2hhcnRzLy4vc3JjL0ZpbGVVcGxvYWQvRmlsZVVwbG9hZC5jc3M/YTE4YyIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL3NyYy9GaWxlVXBsb2FkL0ZpbGVVcGxvYWQudHM/ZjA5ZiIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL3NyYy9kbmRUcmVlL3ByZXByb2Nlc3MvaW5kZXgudHM/ZWFmZiIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL3NyYy9kbmRUcmVlL0RuZENvbmZpZy50cz9iMzQ0Iiwid2VicGFjazovL2QzY2hhcnRzLy4vc3JjL2RuZFRyZWUvaW5kZXguY3NzP2UyNGYiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9zcmMvZG5kVHJlZS9kbmRUcmVlLnRzP2U3YWUiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9zcmMvZG5kVHJlZS9pbmRleC50cz9jNjc1Il0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIG5vbmUoKSB7fVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3Rvcikge1xuICByZXR1cm4gc2VsZWN0b3IgPT0gbnVsbCA/IG5vbmUgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcbiAgfTtcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IHNlbGVjdG9yIGZyb20gXCIuLi9zZWxlY3Rvci5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3QpIHtcbiAgaWYgKHR5cGVvZiBzZWxlY3QgIT09IFwiZnVuY3Rpb25cIikgc2VsZWN0ID0gc2VsZWN0b3Ioc2VsZWN0KTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzdWJncm91cHMgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIHN1Ymdyb3VwID0gc3ViZ3JvdXBzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBzdWJub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIChzdWJub2RlID0gc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKSkge1xuICAgICAgICBpZiAoXCJfX2RhdGFfX1wiIGluIG5vZGUpIHN1Ym5vZGUuX19kYXRhX18gPSBub2RlLl9fZGF0YV9fO1xuICAgICAgICBzdWJncm91cFtpXSA9IHN1Ym5vZGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc3ViZ3JvdXBzLCB0aGlzLl9wYXJlbnRzKTtcbn1cbiIsIi8vIEdpdmVuIHNvbWV0aGluZyBhcnJheSBsaWtlIChvciBudWxsKSwgcmV0dXJucyBzb21ldGhpbmcgdGhhdCBpcyBzdHJpY3RseSBhblxuLy8gYXJyYXkuIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgdGhhdCBhcnJheS1saWtlIG9iamVjdHMgcGFzc2VkIHRvIGQzLnNlbGVjdEFsbFxuLy8gb3Igc2VsZWN0aW9uLnNlbGVjdEFsbCBhcmUgY29udmVydGVkIGludG8gcHJvcGVyIGFycmF5cyB3aGVuIGNyZWF0aW5nIGFcbi8vIHNlbGVjdGlvbjsgd2UgZG9u4oCZdCBldmVyIHdhbnQgdG8gY3JlYXRlIGEgc2VsZWN0aW9uIGJhY2tlZCBieSBhIGxpdmVcbi8vIEhUTUxDb2xsZWN0aW9uIG9yIE5vZGVMaXN0LiBIb3dldmVyLCBub3RlIHRoYXQgc2VsZWN0aW9uLnNlbGVjdEFsbCB3aWxsIHVzZSBhXG4vLyBzdGF0aWMgTm9kZUxpc3QgYXMgYSBncm91cCwgc2luY2UgaXQgc2FmZWx5IGRlcml2ZWQgZnJvbSBxdWVyeVNlbGVjdG9yQWxsLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYXJyYXkoeCkge1xuICByZXR1cm4geCA9PSBudWxsID8gW10gOiBBcnJheS5pc0FycmF5KHgpID8geCA6IEFycmF5LmZyb20oeCk7XG59XG4iLCJmdW5jdGlvbiBlbXB0eSgpIHtcbiAgcmV0dXJuIFtdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3Rvcikge1xuICByZXR1cm4gc2VsZWN0b3IgPT0gbnVsbCA/IGVtcHR5IDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG4gIH07XG59XG4iLCJpbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXguanNcIjtcbmltcG9ydCBhcnJheSBmcm9tIFwiLi4vYXJyYXkuanNcIjtcbmltcG9ydCBzZWxlY3RvckFsbCBmcm9tIFwiLi4vc2VsZWN0b3JBbGwuanNcIjtcblxuZnVuY3Rpb24gYXJyYXlBbGwoc2VsZWN0KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYXJyYXkoc2VsZWN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3QpIHtcbiAgaWYgKHR5cGVvZiBzZWxlY3QgPT09IFwiZnVuY3Rpb25cIikgc2VsZWN0ID0gYXJyYXlBbGwoc2VsZWN0KTtcbiAgZWxzZSBzZWxlY3QgPSBzZWxlY3RvckFsbChzZWxlY3QpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IFtdLCBwYXJlbnRzID0gW10sIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgIHN1Ymdyb3Vwcy5wdXNoKHNlbGVjdC5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSk7XG4gICAgICAgIHBhcmVudHMucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihzdWJncm91cHMsIHBhcmVudHMpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLm1hdGNoZXMoc2VsZWN0b3IpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hpbGRNYXRjaGVyKHNlbGVjdG9yKSB7XG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUubWF0Y2hlcyhzZWxlY3Rvcik7XG4gIH07XG59XG5cbiIsImltcG9ydCB7Y2hpbGRNYXRjaGVyfSBmcm9tIFwiLi4vbWF0Y2hlci5qc1wiO1xuXG52YXIgZmluZCA9IEFycmF5LnByb3RvdHlwZS5maW5kO1xuXG5mdW5jdGlvbiBjaGlsZEZpbmQobWF0Y2gpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBmaW5kLmNhbGwodGhpcy5jaGlsZHJlbiwgbWF0Y2gpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjaGlsZEZpcnN0KCkge1xuICByZXR1cm4gdGhpcy5maXJzdEVsZW1lbnRDaGlsZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obWF0Y2gpIHtcbiAgcmV0dXJuIHRoaXMuc2VsZWN0KG1hdGNoID09IG51bGwgPyBjaGlsZEZpcnN0XG4gICAgICA6IGNoaWxkRmluZCh0eXBlb2YgbWF0Y2ggPT09IFwiZnVuY3Rpb25cIiA/IG1hdGNoIDogY2hpbGRNYXRjaGVyKG1hdGNoKSkpO1xufVxuIiwiaW1wb3J0IHtjaGlsZE1hdGNoZXJ9IGZyb20gXCIuLi9tYXRjaGVyLmpzXCI7XG5cbnZhciBmaWx0ZXIgPSBBcnJheS5wcm90b3R5cGUuZmlsdGVyO1xuXG5mdW5jdGlvbiBjaGlsZHJlbigpIHtcbiAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5jaGlsZHJlbik7XG59XG5cbmZ1bmN0aW9uIGNoaWxkcmVuRmlsdGVyKG1hdGNoKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZmlsdGVyLmNhbGwodGhpcy5jaGlsZHJlbiwgbWF0Y2gpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihtYXRjaCkge1xuICByZXR1cm4gdGhpcy5zZWxlY3RBbGwobWF0Y2ggPT0gbnVsbCA/IGNoaWxkcmVuXG4gICAgICA6IGNoaWxkcmVuRmlsdGVyKHR5cGVvZiBtYXRjaCA9PT0gXCJmdW5jdGlvblwiID8gbWF0Y2ggOiBjaGlsZE1hdGNoZXIobWF0Y2gpKSk7XG59XG4iLCJpbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXguanNcIjtcbmltcG9ydCBtYXRjaGVyIGZyb20gXCIuLi9tYXRjaGVyLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG1hdGNoKSB7XG4gIGlmICh0eXBlb2YgbWF0Y2ggIT09IFwiZnVuY3Rpb25cIikgbWF0Y2ggPSBtYXRjaGVyKG1hdGNoKTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzdWJncm91cHMgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIHN1Ymdyb3VwID0gc3ViZ3JvdXBzW2pdID0gW10sIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgbWF0Y2guY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpIHtcbiAgICAgICAgc3ViZ3JvdXAucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihzdWJncm91cHMsIHRoaXMuX3BhcmVudHMpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odXBkYXRlKSB7XG4gIHJldHVybiBuZXcgQXJyYXkodXBkYXRlLmxlbmd0aCk7XG59XG4iLCJpbXBvcnQgc3BhcnNlIGZyb20gXCIuL3NwYXJzZS5qc1wiO1xuaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFNlbGVjdGlvbih0aGlzLl9lbnRlciB8fCB0aGlzLl9ncm91cHMubWFwKHNwYXJzZSksIHRoaXMuX3BhcmVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRW50ZXJOb2RlKHBhcmVudCwgZGF0dW0pIHtcbiAgdGhpcy5vd25lckRvY3VtZW50ID0gcGFyZW50Lm93bmVyRG9jdW1lbnQ7XG4gIHRoaXMubmFtZXNwYWNlVVJJID0gcGFyZW50Lm5hbWVzcGFjZVVSSTtcbiAgdGhpcy5fbmV4dCA9IG51bGw7XG4gIHRoaXMuX3BhcmVudCA9IHBhcmVudDtcbiAgdGhpcy5fX2RhdGFfXyA9IGRhdHVtO1xufVxuXG5FbnRlck5vZGUucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogRW50ZXJOb2RlLFxuICBhcHBlbmRDaGlsZDogZnVuY3Rpb24oY2hpbGQpIHsgcmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoY2hpbGQsIHRoaXMuX25leHQpOyB9LFxuICBpbnNlcnRCZWZvcmU6IGZ1bmN0aW9uKGNoaWxkLCBuZXh0KSB7IHJldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGNoaWxkLCBuZXh0KTsgfSxcbiAgcXVlcnlTZWxlY3RvcjogZnVuY3Rpb24oc2VsZWN0b3IpIHsgcmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsgfSxcbiAgcXVlcnlTZWxlY3RvckFsbDogZnVuY3Rpb24oc2VsZWN0b3IpIHsgcmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTsgfVxufTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQge0VudGVyTm9kZX0gZnJvbSBcIi4vZW50ZXIuanNcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi4vY29uc3RhbnQuanNcIjtcblxuZnVuY3Rpb24gYmluZEluZGV4KHBhcmVudCwgZ3JvdXAsIGVudGVyLCB1cGRhdGUsIGV4aXQsIGRhdGEpIHtcbiAgdmFyIGkgPSAwLFxuICAgICAgbm9kZSxcbiAgICAgIGdyb3VwTGVuZ3RoID0gZ3JvdXAubGVuZ3RoLFxuICAgICAgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoO1xuXG4gIC8vIFB1dCBhbnkgbm9uLW51bGwgbm9kZXMgdGhhdCBmaXQgaW50byB1cGRhdGUuXG4gIC8vIFB1dCBhbnkgbnVsbCBub2RlcyBpbnRvIGVudGVyLlxuICAvLyBQdXQgYW55IHJlbWFpbmluZyBkYXRhIGludG8gZW50ZXIuXG4gIGZvciAoOyBpIDwgZGF0YUxlbmd0aDsgKytpKSB7XG4gICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgbm9kZS5fX2RhdGFfXyA9IGRhdGFbaV07XG4gICAgICB1cGRhdGVbaV0gPSBub2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbnRlcltpXSA9IG5ldyBFbnRlck5vZGUocGFyZW50LCBkYXRhW2ldKTtcbiAgICB9XG4gIH1cblxuICAvLyBQdXQgYW55IG5vbi1udWxsIG5vZGVzIHRoYXQgZG9u4oCZdCBmaXQgaW50byBleGl0LlxuICBmb3IgKDsgaSA8IGdyb3VwTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICBleGl0W2ldID0gbm9kZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYmluZEtleShwYXJlbnQsIGdyb3VwLCBlbnRlciwgdXBkYXRlLCBleGl0LCBkYXRhLCBrZXkpIHtcbiAgdmFyIGksXG4gICAgICBub2RlLFxuICAgICAgbm9kZUJ5S2V5VmFsdWUgPSBuZXcgTWFwLFxuICAgICAgZ3JvdXBMZW5ndGggPSBncm91cC5sZW5ndGgsXG4gICAgICBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGgsXG4gICAgICBrZXlWYWx1ZXMgPSBuZXcgQXJyYXkoZ3JvdXBMZW5ndGgpLFxuICAgICAga2V5VmFsdWU7XG5cbiAgLy8gQ29tcHV0ZSB0aGUga2V5IGZvciBlYWNoIG5vZGUuXG4gIC8vIElmIG11bHRpcGxlIG5vZGVzIGhhdmUgdGhlIHNhbWUga2V5LCB0aGUgZHVwbGljYXRlcyBhcmUgYWRkZWQgdG8gZXhpdC5cbiAgZm9yIChpID0gMDsgaSA8IGdyb3VwTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICBrZXlWYWx1ZXNbaV0gPSBrZXlWYWx1ZSA9IGtleS5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSArIFwiXCI7XG4gICAgICBpZiAobm9kZUJ5S2V5VmFsdWUuaGFzKGtleVZhbHVlKSkge1xuICAgICAgICBleGl0W2ldID0gbm9kZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGVCeUtleVZhbHVlLnNldChrZXlWYWx1ZSwgbm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQ29tcHV0ZSB0aGUga2V5IGZvciBlYWNoIGRhdHVtLlxuICAvLyBJZiB0aGVyZSBhIG5vZGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMga2V5LCBqb2luIGFuZCBhZGQgaXQgdG8gdXBkYXRlLlxuICAvLyBJZiB0aGVyZSBpcyBub3QgKG9yIHRoZSBrZXkgaXMgYSBkdXBsaWNhdGUpLCBhZGQgaXQgdG8gZW50ZXIuXG4gIGZvciAoaSA9IDA7IGkgPCBkYXRhTGVuZ3RoOyArK2kpIHtcbiAgICBrZXlWYWx1ZSA9IGtleS5jYWxsKHBhcmVudCwgZGF0YVtpXSwgaSwgZGF0YSkgKyBcIlwiO1xuICAgIGlmIChub2RlID0gbm9kZUJ5S2V5VmFsdWUuZ2V0KGtleVZhbHVlKSkge1xuICAgICAgdXBkYXRlW2ldID0gbm9kZTtcbiAgICAgIG5vZGUuX19kYXRhX18gPSBkYXRhW2ldO1xuICAgICAgbm9kZUJ5S2V5VmFsdWUuZGVsZXRlKGtleVZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW50ZXJbaV0gPSBuZXcgRW50ZXJOb2RlKHBhcmVudCwgZGF0YVtpXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIGFueSByZW1haW5pbmcgbm9kZXMgdGhhdCB3ZXJlIG5vdCBib3VuZCB0byBkYXRhIHRvIGV4aXQuXG4gIGZvciAoaSA9IDA7IGkgPCBncm91cExlbmd0aDsgKytpKSB7XG4gICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIChub2RlQnlLZXlWYWx1ZS5nZXQoa2V5VmFsdWVzW2ldKSA9PT0gbm9kZSkpIHtcbiAgICAgIGV4aXRbaV0gPSBub2RlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBkYXR1bShub2RlKSB7XG4gIHJldHVybiBub2RlLl9fZGF0YV9fO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIEFycmF5LmZyb20odGhpcywgZGF0dW0pO1xuXG4gIHZhciBiaW5kID0ga2V5ID8gYmluZEtleSA6IGJpbmRJbmRleCxcbiAgICAgIHBhcmVudHMgPSB0aGlzLl9wYXJlbnRzLFxuICAgICAgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzO1xuXG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdmFsdWUgPSBjb25zdGFudCh2YWx1ZSk7XG5cbiAgZm9yICh2YXIgbSA9IGdyb3Vwcy5sZW5ndGgsIHVwZGF0ZSA9IG5ldyBBcnJheShtKSwgZW50ZXIgPSBuZXcgQXJyYXkobSksIGV4aXQgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgdmFyIHBhcmVudCA9IHBhcmVudHNbal0sXG4gICAgICAgIGdyb3VwID0gZ3JvdXBzW2pdLFxuICAgICAgICBncm91cExlbmd0aCA9IGdyb3VwLmxlbmd0aCxcbiAgICAgICAgZGF0YSA9IGFycmF5bGlrZSh2YWx1ZS5jYWxsKHBhcmVudCwgcGFyZW50ICYmIHBhcmVudC5fX2RhdGFfXywgaiwgcGFyZW50cykpLFxuICAgICAgICBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGgsXG4gICAgICAgIGVudGVyR3JvdXAgPSBlbnRlcltqXSA9IG5ldyBBcnJheShkYXRhTGVuZ3RoKSxcbiAgICAgICAgdXBkYXRlR3JvdXAgPSB1cGRhdGVbal0gPSBuZXcgQXJyYXkoZGF0YUxlbmd0aCksXG4gICAgICAgIGV4aXRHcm91cCA9IGV4aXRbal0gPSBuZXcgQXJyYXkoZ3JvdXBMZW5ndGgpO1xuXG4gICAgYmluZChwYXJlbnQsIGdyb3VwLCBlbnRlckdyb3VwLCB1cGRhdGVHcm91cCwgZXhpdEdyb3VwLCBkYXRhLCBrZXkpO1xuXG4gICAgLy8gTm93IGNvbm5lY3QgdGhlIGVudGVyIG5vZGVzIHRvIHRoZWlyIGZvbGxvd2luZyB1cGRhdGUgbm9kZSwgc3VjaCB0aGF0XG4gICAgLy8gYXBwZW5kQ2hpbGQgY2FuIGluc2VydCB0aGUgbWF0ZXJpYWxpemVkIGVudGVyIG5vZGUgYmVmb3JlIHRoaXMgbm9kZSxcbiAgICAvLyByYXRoZXIgdGhhbiBhdCB0aGUgZW5kIG9mIHRoZSBwYXJlbnQgbm9kZS5cbiAgICBmb3IgKHZhciBpMCA9IDAsIGkxID0gMCwgcHJldmlvdXMsIG5leHQ7IGkwIDwgZGF0YUxlbmd0aDsgKytpMCkge1xuICAgICAgaWYgKHByZXZpb3VzID0gZW50ZXJHcm91cFtpMF0pIHtcbiAgICAgICAgaWYgKGkwID49IGkxKSBpMSA9IGkwICsgMTtcbiAgICAgICAgd2hpbGUgKCEobmV4dCA9IHVwZGF0ZUdyb3VwW2kxXSkgJiYgKytpMSA8IGRhdGFMZW5ndGgpO1xuICAgICAgICBwcmV2aW91cy5fbmV4dCA9IG5leHQgfHwgbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGUgPSBuZXcgU2VsZWN0aW9uKHVwZGF0ZSwgcGFyZW50cyk7XG4gIHVwZGF0ZS5fZW50ZXIgPSBlbnRlcjtcbiAgdXBkYXRlLl9leGl0ID0gZXhpdDtcbiAgcmV0dXJuIHVwZGF0ZTtcbn1cblxuLy8gR2l2ZW4gc29tZSBkYXRhLCB0aGlzIHJldHVybnMgYW4gYXJyYXktbGlrZSB2aWV3IG9mIGl0OiBhbiBvYmplY3QgdGhhdFxuLy8gZXhwb3NlcyBhIGxlbmd0aCBwcm9wZXJ0eSBhbmQgYWxsb3dzIG51bWVyaWMgaW5kZXhpbmcuIE5vdGUgdGhhdCB1bmxpa2Vcbi8vIHNlbGVjdEFsbCwgdGhpcyBpc27igJl0IHdvcnJpZWQgYWJvdXQg4oCcbGl2ZeKAnSBjb2xsZWN0aW9ucyBiZWNhdXNlIHRoZSByZXN1bHRpbmdcbi8vIGFycmF5IHdpbGwgb25seSBiZSB1c2VkIGJyaWVmbHkgd2hpbGUgZGF0YSBpcyBiZWluZyBib3VuZC4gKEl0IGlzIHBvc3NpYmxlIHRvXG4vLyBjYXVzZSB0aGUgZGF0YSB0byBjaGFuZ2Ugd2hpbGUgaXRlcmF0aW5nIGJ5IHVzaW5nIGEga2V5IGZ1bmN0aW9uLCBidXQgcGxlYXNlXG4vLyBkb27igJl0OyB3ZeKAmWQgcmF0aGVyIGF2b2lkIGEgZ3JhdHVpdG91cyBjb3B5LilcbmZ1bmN0aW9uIGFycmF5bGlrZShkYXRhKSB7XG4gIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIiAmJiBcImxlbmd0aFwiIGluIGRhdGFcbiAgICA/IGRhdGEgLy8gQXJyYXksIFR5cGVkQXJyYXksIE5vZGVMaXN0LCBhcnJheS1saWtlXG4gICAgOiBBcnJheS5mcm9tKGRhdGEpOyAvLyBNYXAsIFNldCwgaXRlcmFibGUsIHN0cmluZywgb3IgYW55dGhpbmcgZWxzZVxufVxuIiwiaW1wb3J0IHNwYXJzZSBmcm9tIFwiLi9zcGFyc2UuanNcIjtcbmltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24odGhpcy5fZXhpdCB8fCB0aGlzLl9ncm91cHMubWFwKHNwYXJzZSksIHRoaXMuX3BhcmVudHMpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ob25lbnRlciwgb251cGRhdGUsIG9uZXhpdCkge1xuICB2YXIgZW50ZXIgPSB0aGlzLmVudGVyKCksIHVwZGF0ZSA9IHRoaXMsIGV4aXQgPSB0aGlzLmV4aXQoKTtcbiAgaWYgKHR5cGVvZiBvbmVudGVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBlbnRlciA9IG9uZW50ZXIoZW50ZXIpO1xuICAgIGlmIChlbnRlcikgZW50ZXIgPSBlbnRlci5zZWxlY3Rpb24oKTtcbiAgfSBlbHNlIHtcbiAgICBlbnRlciA9IGVudGVyLmFwcGVuZChvbmVudGVyICsgXCJcIik7XG4gIH1cbiAgaWYgKG9udXBkYXRlICE9IG51bGwpIHtcbiAgICB1cGRhdGUgPSBvbnVwZGF0ZSh1cGRhdGUpO1xuICAgIGlmICh1cGRhdGUpIHVwZGF0ZSA9IHVwZGF0ZS5zZWxlY3Rpb24oKTtcbiAgfVxuICBpZiAob25leGl0ID09IG51bGwpIGV4aXQucmVtb3ZlKCk7IGVsc2Ugb25leGl0KGV4aXQpO1xuICByZXR1cm4gZW50ZXIgJiYgdXBkYXRlID8gZW50ZXIubWVyZ2UodXBkYXRlKS5vcmRlcigpIDogdXBkYXRlO1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgdmFyIHNlbGVjdGlvbiA9IGNvbnRleHQuc2VsZWN0aW9uID8gY29udGV4dC5zZWxlY3Rpb24oKSA6IGNvbnRleHQ7XG5cbiAgZm9yICh2YXIgZ3JvdXBzMCA9IHRoaXMuX2dyb3VwcywgZ3JvdXBzMSA9IHNlbGVjdGlvbi5fZ3JvdXBzLCBtMCA9IGdyb3VwczAubGVuZ3RoLCBtMSA9IGdyb3VwczEubGVuZ3RoLCBtID0gTWF0aC5taW4obTAsIG0xKSwgbWVyZ2VzID0gbmV3IEFycmF5KG0wKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cDAgPSBncm91cHMwW2pdLCBncm91cDEgPSBncm91cHMxW2pdLCBuID0gZ3JvdXAwLmxlbmd0aCwgbWVyZ2UgPSBtZXJnZXNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwMFtpXSB8fCBncm91cDFbaV0pIHtcbiAgICAgICAgbWVyZ2VbaV0gPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBqIDwgbTA7ICsraikge1xuICAgIG1lcmdlc1tqXSA9IGdyb3VwczBbal07XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihtZXJnZXMsIHRoaXMuX3BhcmVudHMpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBqID0gLTEsIG0gPSBncm91cHMubGVuZ3RoOyArK2ogPCBtOykge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBpID0gZ3JvdXAubGVuZ3RoIC0gMSwgbmV4dCA9IGdyb3VwW2ldLCBub2RlOyAtLWkgPj0gMDspIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgaWYgKG5leHQgJiYgbm9kZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihuZXh0KSBeIDQpIG5leHQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobm9kZSwgbmV4dCk7XG4gICAgICAgIG5leHQgPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbXBhcmUpIHtcbiAgaWYgKCFjb21wYXJlKSBjb21wYXJlID0gYXNjZW5kaW5nO1xuXG4gIGZ1bmN0aW9uIGNvbXBhcmVOb2RlKGEsIGIpIHtcbiAgICByZXR1cm4gYSAmJiBiID8gY29tcGFyZShhLl9fZGF0YV9fLCBiLl9fZGF0YV9fKSA6ICFhIC0gIWI7XG4gIH1cblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzb3J0Z3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzb3J0Z3JvdXAgPSBzb3J0Z3JvdXBzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBzb3J0Z3JvdXBbaV0gPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3J0Z3JvdXAuc29ydChjb21wYXJlTm9kZSk7XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihzb3J0Z3JvdXBzLCB0aGlzLl9wYXJlbnRzKS5vcmRlcigpO1xufVxuXG5mdW5jdGlvbiBhc2NlbmRpbmcoYSwgYikge1xuICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IGEgPj0gYiA/IDAgOiBOYU47XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzWzBdO1xuICBhcmd1bWVudHNbMF0gPSB0aGlzO1xuICBjYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICByZXR1cm4gdGhpcztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgaiA9IDAsIG0gPSBncm91cHMubGVuZ3RoOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIGkgPSAwLCBuID0gZ3JvdXAubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICB2YXIgbm9kZSA9IGdyb3VwW2ldO1xuICAgICAgaWYgKG5vZGUpIHJldHVybiBub2RlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIGxldCBzaXplID0gMDtcbiAgZm9yIChjb25zdCBub2RlIG9mIHRoaXMpICsrc2l6ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICByZXR1cm4gc2l6ZTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gIXRoaXMubm9kZSgpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2spIHtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIGogPSAwLCBtID0gZ3JvdXBzLmxlbmd0aDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBpID0gMCwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZTsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkgY2FsbGJhY2suY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG4iLCJleHBvcnQgdmFyIHhodG1sID0gXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgc3ZnOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHhodG1sOiB4aHRtbCxcbiAgeGxpbms6IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxuICB4bWw6IFwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCIsXG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvXCJcbn07XG4iLCJpbXBvcnQgbmFtZXNwYWNlcyBmcm9tIFwiLi9uYW1lc3BhY2VzLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIHByZWZpeCA9IG5hbWUgKz0gXCJcIiwgaSA9IHByZWZpeC5pbmRleE9mKFwiOlwiKTtcbiAgaWYgKGkgPj0gMCAmJiAocHJlZml4ID0gbmFtZS5zbGljZSgwLCBpKSkgIT09IFwieG1sbnNcIikgbmFtZSA9IG5hbWUuc2xpY2UoaSArIDEpO1xuICByZXR1cm4gbmFtZXNwYWNlcy5oYXNPd25Qcm9wZXJ0eShwcmVmaXgpID8ge3NwYWNlOiBuYW1lc3BhY2VzW3ByZWZpeF0sIGxvY2FsOiBuYW1lfSA6IG5hbWU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG59XG4iLCJpbXBvcnQgbmFtZXNwYWNlIGZyb20gXCIuLi9uYW1lc3BhY2UuanNcIjtcblxuZnVuY3Rpb24gYXR0clJlbW92ZShuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0clJlbW92ZU5TKGZ1bGxuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJDb25zdGFudChuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyQ29uc3RhbnROUyhmdWxsbmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsLCB2YWx1ZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJGdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh2ID09IG51bGwpIHRoaXMucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgIGVsc2UgdGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgdik7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJGdW5jdGlvbk5TKGZ1bGxuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh2ID09IG51bGwpIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgICBlbHNlIHRoaXMuc2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsLCB2KTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIGZ1bGxuYW1lID0gbmFtZXNwYWNlKG5hbWUpO1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHZhciBub2RlID0gdGhpcy5ub2RlKCk7XG4gICAgcmV0dXJuIGZ1bGxuYW1lLmxvY2FsXG4gICAgICAgID8gbm9kZS5nZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpXG4gICAgICAgIDogbm9kZS5nZXRBdHRyaWJ1dGUoZnVsbG5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbFxuICAgICAgPyAoZnVsbG5hbWUubG9jYWwgPyBhdHRyUmVtb3ZlTlMgOiBhdHRyUmVtb3ZlKSA6ICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyAoZnVsbG5hbWUubG9jYWwgPyBhdHRyRnVuY3Rpb25OUyA6IGF0dHJGdW5jdGlvbilcbiAgICAgIDogKGZ1bGxuYW1lLmxvY2FsID8gYXR0ckNvbnN0YW50TlMgOiBhdHRyQ29uc3RhbnQpKSkoZnVsbG5hbWUsIHZhbHVlKSk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihub2RlKSB7XG4gIHJldHVybiAobm9kZS5vd25lckRvY3VtZW50ICYmIG5vZGUub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldykgLy8gbm9kZSBpcyBhIE5vZGVcbiAgICAgIHx8IChub2RlLmRvY3VtZW50ICYmIG5vZGUpIC8vIG5vZGUgaXMgYSBXaW5kb3dcbiAgICAgIHx8IG5vZGUuZGVmYXVsdFZpZXc7IC8vIG5vZGUgaXMgYSBEb2N1bWVudFxufVxuIiwiaW1wb3J0IGRlZmF1bHRWaWV3IGZyb20gXCIuLi93aW5kb3cuanNcIjtcblxuZnVuY3Rpb24gc3R5bGVSZW1vdmUobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVDb25zdGFudChuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgdmFsdWUsIHByaW9yaXR5KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVGdW5jdGlvbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodiA9PSBudWxsKSB0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpO1xuICAgIGVsc2UgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuYW1lLCB2LCBwcmlvcml0eSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDFcbiAgICAgID8gdGhpcy5lYWNoKCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgICA/IHN0eWxlUmVtb3ZlIDogdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgID8gc3R5bGVGdW5jdGlvblxuICAgICAgICAgICAgOiBzdHlsZUNvbnN0YW50KShuYW1lLCB2YWx1ZSwgcHJpb3JpdHkgPT0gbnVsbCA/IFwiXCIgOiBwcmlvcml0eSkpXG4gICAgICA6IHN0eWxlVmFsdWUodGhpcy5ub2RlKCksIG5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3R5bGVWYWx1ZShub2RlLCBuYW1lKSB7XG4gIHJldHVybiBub2RlLnN0eWxlLmdldFByb3BlcnR5VmFsdWUobmFtZSlcbiAgICAgIHx8IGRlZmF1bHRWaWV3KG5vZGUpLmdldENvbXB1dGVkU3R5bGUobm9kZSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKTtcbn1cbiIsImZ1bmN0aW9uIHByb3BlcnR5UmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGRlbGV0ZSB0aGlzW25hbWVdO1xuICB9O1xufVxuXG5mdW5jdGlvbiBwcm9wZXJ0eUNvbnN0YW50KG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzW25hbWVdID0gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHByb3BlcnR5RnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodiA9PSBudWxsKSBkZWxldGUgdGhpc1tuYW1lXTtcbiAgICBlbHNlIHRoaXNbbmFtZV0gPSB2O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDFcbiAgICAgID8gdGhpcy5lYWNoKCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgPyBwcm9wZXJ0eVJlbW92ZSA6IHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyBwcm9wZXJ0eUZ1bmN0aW9uXG4gICAgICAgICAgOiBwcm9wZXJ0eUNvbnN0YW50KShuYW1lLCB2YWx1ZSkpXG4gICAgICA6IHRoaXMubm9kZSgpW25hbWVdO1xufVxuIiwiZnVuY3Rpb24gY2xhc3NBcnJheShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy50cmltKCkuc3BsaXQoL158XFxzKy8pO1xufVxuXG5mdW5jdGlvbiBjbGFzc0xpc3Qobm9kZSkge1xuICByZXR1cm4gbm9kZS5jbGFzc0xpc3QgfHwgbmV3IENsYXNzTGlzdChub2RlKTtcbn1cblxuZnVuY3Rpb24gQ2xhc3NMaXN0KG5vZGUpIHtcbiAgdGhpcy5fbm9kZSA9IG5vZGU7XG4gIHRoaXMuX25hbWVzID0gY2xhc3NBcnJheShub2RlLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpIHx8IFwiXCIpO1xufVxuXG5DbGFzc0xpc3QucHJvdG90eXBlID0ge1xuICBhZGQ6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgaSA9IHRoaXMuX25hbWVzLmluZGV4T2YobmFtZSk7XG4gICAgaWYgKGkgPCAwKSB7XG4gICAgICB0aGlzLl9uYW1lcy5wdXNoKG5hbWUpO1xuICAgICAgdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCB0aGlzLl9uYW1lcy5qb2luKFwiIFwiKSk7XG4gICAgfVxuICB9LFxuICByZW1vdmU6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgaSA9IHRoaXMuX25hbWVzLmluZGV4T2YobmFtZSk7XG4gICAgaWYgKGkgPj0gMCkge1xuICAgICAgdGhpcy5fbmFtZXMuc3BsaWNlKGksIDEpO1xuICAgICAgdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCB0aGlzLl9uYW1lcy5qb2luKFwiIFwiKSk7XG4gICAgfVxuICB9LFxuICBjb250YWluczogZnVuY3Rpb24obmFtZSkge1xuICAgIHJldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpID49IDA7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNsYXNzZWRBZGQobm9kZSwgbmFtZXMpIHtcbiAgdmFyIGxpc3QgPSBjbGFzc0xpc3Qobm9kZSksIGkgPSAtMSwgbiA9IG5hbWVzLmxlbmd0aDtcbiAgd2hpbGUgKCsraSA8IG4pIGxpc3QuYWRkKG5hbWVzW2ldKTtcbn1cblxuZnVuY3Rpb24gY2xhc3NlZFJlbW92ZShub2RlLCBuYW1lcykge1xuICB2YXIgbGlzdCA9IGNsYXNzTGlzdChub2RlKSwgaSA9IC0xLCBuID0gbmFtZXMubGVuZ3RoO1xuICB3aGlsZSAoKytpIDwgbikgbGlzdC5yZW1vdmUobmFtZXNbaV0pO1xufVxuXG5mdW5jdGlvbiBjbGFzc2VkVHJ1ZShuYW1lcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgY2xhc3NlZEFkZCh0aGlzLCBuYW1lcyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNsYXNzZWRGYWxzZShuYW1lcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgY2xhc3NlZFJlbW92ZSh0aGlzLCBuYW1lcyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNsYXNzZWRGdW5jdGlvbihuYW1lcywgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICh2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpID8gY2xhc3NlZEFkZCA6IGNsYXNzZWRSZW1vdmUpKHRoaXMsIG5hbWVzKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIG5hbWVzID0gY2xhc3NBcnJheShuYW1lICsgXCJcIik7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdmFyIGxpc3QgPSBjbGFzc0xpc3QodGhpcy5ub2RlKCkpLCBpID0gLTEsIG4gPSBuYW1lcy5sZW5ndGg7XG4gICAgd2hpbGUgKCsraSA8IG4pIGlmICghbGlzdC5jb250YWlucyhuYW1lc1tpXSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmVhY2goKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IGNsYXNzZWRGdW5jdGlvbiA6IHZhbHVlXG4gICAgICA/IGNsYXNzZWRUcnVlXG4gICAgICA6IGNsYXNzZWRGYWxzZSkobmFtZXMsIHZhbHVlKSk7XG59XG4iLCJmdW5jdGlvbiB0ZXh0UmVtb3ZlKCkge1xuICB0aGlzLnRleHRDb250ZW50ID0gXCJcIjtcbn1cblxuZnVuY3Rpb24gdGV4dENvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRleHRGdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB2ID09IG51bGwgPyBcIlwiIDogdjtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgID8gdGhpcy5lYWNoKHZhbHVlID09IG51bGxcbiAgICAgICAgICA/IHRleHRSZW1vdmUgOiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IHRleHRGdW5jdGlvblxuICAgICAgICAgIDogdGV4dENvbnN0YW50KSh2YWx1ZSkpXG4gICAgICA6IHRoaXMubm9kZSgpLnRleHRDb250ZW50O1xufVxuIiwiZnVuY3Rpb24gaHRtbFJlbW92ZSgpIHtcbiAgdGhpcy5pbm5lckhUTUwgPSBcIlwiO1xufVxuXG5mdW5jdGlvbiBodG1sQ29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaW5uZXJIVE1MID0gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGh0bWxGdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHRoaXMuaW5uZXJIVE1MID0gdiA9PSBudWxsID8gXCJcIiA6IHY7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgPyBodG1sUmVtb3ZlIDogKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyBodG1sRnVuY3Rpb25cbiAgICAgICAgICA6IGh0bWxDb25zdGFudCkodmFsdWUpKVxuICAgICAgOiB0aGlzLm5vZGUoKS5pbm5lckhUTUw7XG59XG4iLCJmdW5jdGlvbiByYWlzZSgpIHtcbiAgaWYgKHRoaXMubmV4dFNpYmxpbmcpIHRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmVhY2gocmFpc2UpO1xufVxuIiwiZnVuY3Rpb24gbG93ZXIoKSB7XG4gIGlmICh0aGlzLnByZXZpb3VzU2libGluZykgdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLCB0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5lYWNoKGxvd2VyKTtcbn1cbiIsImltcG9ydCBuYW1lc3BhY2UgZnJvbSBcIi4vbmFtZXNwYWNlLmpzXCI7XG5pbXBvcnQge3hodG1sfSBmcm9tIFwiLi9uYW1lc3BhY2VzLmpzXCI7XG5cbmZ1bmN0aW9uIGNyZWF0b3JJbmhlcml0KG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBkb2N1bWVudCA9IHRoaXMub3duZXJEb2N1bWVudCxcbiAgICAgICAgdXJpID0gdGhpcy5uYW1lc3BhY2VVUkk7XG4gICAgcmV0dXJuIHVyaSA9PT0geGh0bWwgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSSSA9PT0geGh0bWxcbiAgICAgICAgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KG5hbWUpXG4gICAgICAgIDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHVyaSwgbmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0b3JGaXhlZChmdWxsbmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICB2YXIgZnVsbG5hbWUgPSBuYW1lc3BhY2UobmFtZSk7XG4gIHJldHVybiAoZnVsbG5hbWUubG9jYWxcbiAgICAgID8gY3JlYXRvckZpeGVkXG4gICAgICA6IGNyZWF0b3JJbmhlcml0KShmdWxsbmFtZSk7XG59XG4iLCJpbXBvcnQgY3JlYXRvciBmcm9tIFwiLi4vY3JlYXRvci5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBjcmVhdGUgPSB0eXBlb2YgbmFtZSA9PT0gXCJmdW5jdGlvblwiID8gbmFtZSA6IGNyZWF0b3IobmFtZSk7XG4gIHJldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChjcmVhdGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gIH0pO1xufVxuIiwiaW1wb3J0IGNyZWF0b3IgZnJvbSBcIi4uL2NyZWF0b3IuanNcIjtcbmltcG9ydCBzZWxlY3RvciBmcm9tIFwiLi4vc2VsZWN0b3IuanNcIjtcblxuZnVuY3Rpb24gY29uc3RhbnROdWxsKCkge1xuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgYmVmb3JlKSB7XG4gIHZhciBjcmVhdGUgPSB0eXBlb2YgbmFtZSA9PT0gXCJmdW5jdGlvblwiID8gbmFtZSA6IGNyZWF0b3IobmFtZSksXG4gICAgICBzZWxlY3QgPSBiZWZvcmUgPT0gbnVsbCA/IGNvbnN0YW50TnVsbCA6IHR5cGVvZiBiZWZvcmUgPT09IFwiZnVuY3Rpb25cIiA/IGJlZm9yZSA6IHNlbGVjdG9yKGJlZm9yZSk7XG4gIHJldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoY3JlYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHNlbGVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IG51bGwpO1xuICB9KTtcbn1cbiIsImZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcbiAgaWYgKHBhcmVudCkgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaChyZW1vdmUpO1xufVxuIiwiZnVuY3Rpb24gc2VsZWN0aW9uX2Nsb25lU2hhbGxvdygpIHtcbiAgdmFyIGNsb25lID0gdGhpcy5jbG9uZU5vZGUoZmFsc2UpLCBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG4gIHJldHVybiBwYXJlbnQgPyBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNsb25lLCB0aGlzLm5leHRTaWJsaW5nKSA6IGNsb25lO1xufVxuXG5mdW5jdGlvbiBzZWxlY3Rpb25fY2xvbmVEZWVwKCkge1xuICB2YXIgY2xvbmUgPSB0aGlzLmNsb25lTm9kZSh0cnVlKSwgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlO1xuICByZXR1cm4gcGFyZW50ID8gcGFyZW50Lmluc2VydEJlZm9yZShjbG9uZSwgdGhpcy5uZXh0U2libGluZykgOiBjbG9uZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZGVlcCkge1xuICByZXR1cm4gdGhpcy5zZWxlY3QoZGVlcCA/IHNlbGVjdGlvbl9jbG9uZURlZXAgOiBzZWxlY3Rpb25fY2xvbmVTaGFsbG93KTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMucHJvcGVydHkoXCJfX2RhdGFfX1wiLCB2YWx1ZSlcbiAgICAgIDogdGhpcy5ub2RlKCkuX19kYXRhX187XG59XG4iLCJmdW5jdGlvbiBjb250ZXh0TGlzdGVuZXIobGlzdGVuZXIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgbGlzdGVuZXIuY2FsbCh0aGlzLCBldmVudCwgdGhpcy5fX2RhdGFfXyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lcykge1xuICByZXR1cm4gdHlwZW5hbWVzLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykubWFwKGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgbmFtZSA9IFwiXCIsIGkgPSB0LmluZGV4T2YoXCIuXCIpO1xuICAgIGlmIChpID49IDApIG5hbWUgPSB0LnNsaWNlKGkgKyAxKSwgdCA9IHQuc2xpY2UoMCwgaSk7XG4gICAgcmV0dXJuIHt0eXBlOiB0LCBuYW1lOiBuYW1lfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG9uUmVtb3ZlKHR5cGVuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgb24gPSB0aGlzLl9fb247XG4gICAgaWYgKCFvbikgcmV0dXJuO1xuICAgIGZvciAodmFyIGogPSAwLCBpID0gLTEsIG0gPSBvbi5sZW5ndGgsIG87IGogPCBtOyArK2opIHtcbiAgICAgIGlmIChvID0gb25bal0sICghdHlwZW5hbWUudHlwZSB8fCBvLnR5cGUgPT09IHR5cGVuYW1lLnR5cGUpICYmIG8ubmFtZSA9PT0gdHlwZW5hbWUubmFtZSkge1xuICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyLCBvLm9wdGlvbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb25bKytpXSA9IG87XG4gICAgICB9XG4gICAgfVxuICAgIGlmICgrK2kpIG9uLmxlbmd0aCA9IGk7XG4gICAgZWxzZSBkZWxldGUgdGhpcy5fX29uO1xuICB9O1xufVxuXG5mdW5jdGlvbiBvbkFkZCh0eXBlbmFtZSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBvbiA9IHRoaXMuX19vbiwgbywgbGlzdGVuZXIgPSBjb250ZXh0TGlzdGVuZXIodmFsdWUpO1xuICAgIGlmIChvbikgZm9yICh2YXIgaiA9IDAsIG0gPSBvbi5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICAgIGlmICgobyA9IG9uW2pdKS50eXBlID09PSB0eXBlbmFtZS50eXBlICYmIG8ubmFtZSA9PT0gdHlwZW5hbWUubmFtZSkge1xuICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyLCBvLm9wdGlvbnMpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyID0gbGlzdGVuZXIsIG8ub3B0aW9ucyA9IG9wdGlvbnMpO1xuICAgICAgICBvLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKHR5cGVuYW1lLnR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgICBvID0ge3R5cGU6IHR5cGVuYW1lLnR5cGUsIG5hbWU6IHR5cGVuYW1lLm5hbWUsIHZhbHVlOiB2YWx1ZSwgbGlzdGVuZXI6IGxpc3RlbmVyLCBvcHRpb25zOiBvcHRpb25zfTtcbiAgICBpZiAoIW9uKSB0aGlzLl9fb24gPSBbb107XG4gICAgZWxzZSBvbi5wdXNoKG8pO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0eXBlbmFtZSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgdmFyIHR5cGVuYW1lcyA9IHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lICsgXCJcIiksIGksIG4gPSB0eXBlbmFtZXMubGVuZ3RoLCB0O1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHZhciBvbiA9IHRoaXMubm9kZSgpLl9fb247XG4gICAgaWYgKG9uKSBmb3IgKHZhciBqID0gMCwgbSA9IG9uLmxlbmd0aCwgbzsgaiA8IG07ICsraikge1xuICAgICAgZm9yIChpID0gMCwgbyA9IG9uW2pdOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGlmICgodCA9IHR5cGVuYW1lc1tpXSkudHlwZSA9PT0gby50eXBlICYmIHQubmFtZSA9PT0gby5uYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIG8udmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgb24gPSB2YWx1ZSA/IG9uQWRkIDogb25SZW1vdmU7XG4gIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHRoaXMuZWFjaChvbih0eXBlbmFtZXNbaV0sIHZhbHVlLCBvcHRpb25zKSk7XG4gIHJldHVybiB0aGlzO1xufVxuIiwiaW1wb3J0IGRlZmF1bHRWaWV3IGZyb20gXCIuLi93aW5kb3cuanNcIjtcblxuZnVuY3Rpb24gZGlzcGF0Y2hFdmVudChub2RlLCB0eXBlLCBwYXJhbXMpIHtcbiAgdmFyIHdpbmRvdyA9IGRlZmF1bHRWaWV3KG5vZGUpLFxuICAgICAgZXZlbnQgPSB3aW5kb3cuQ3VzdG9tRXZlbnQ7XG5cbiAgaWYgKHR5cGVvZiBldmVudCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZXZlbnQgPSBuZXcgZXZlbnQodHlwZSwgcGFyYW1zKTtcbiAgfSBlbHNlIHtcbiAgICBldmVudCA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFdmVudChcIkV2ZW50XCIpO1xuICAgIGlmIChwYXJhbXMpIGV2ZW50LmluaXRFdmVudCh0eXBlLCBwYXJhbXMuYnViYmxlcywgcGFyYW1zLmNhbmNlbGFibGUpLCBldmVudC5kZXRhaWwgPSBwYXJhbXMuZGV0YWlsO1xuICAgIGVsc2UgZXZlbnQuaW5pdEV2ZW50KHR5cGUsIGZhbHNlLCBmYWxzZSk7XG4gIH1cblxuICBub2RlLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaENvbnN0YW50KHR5cGUsIHBhcmFtcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoRXZlbnQodGhpcywgdHlwZSwgcGFyYW1zKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hGdW5jdGlvbih0eXBlLCBwYXJhbXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkaXNwYXRjaEV2ZW50KHRoaXMsIHR5cGUsIHBhcmFtcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odHlwZSwgcGFyYW1zKSB7XG4gIHJldHVybiB0aGlzLmVhY2goKHR5cGVvZiBwYXJhbXMgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyBkaXNwYXRjaEZ1bmN0aW9uXG4gICAgICA6IGRpc3BhdGNoQ29uc3RhbnQpKHR5cGUsIHBhcmFtcykpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24qKCkge1xuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIGogPSAwLCBtID0gZ3JvdXBzLmxlbmd0aDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBpID0gMCwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZTsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkgeWllbGQgbm9kZTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBzZWxlY3Rpb25fc2VsZWN0IGZyb20gXCIuL3NlbGVjdC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9zZWxlY3RBbGwgZnJvbSBcIi4vc2VsZWN0QWxsLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3NlbGVjdENoaWxkIGZyb20gXCIuL3NlbGVjdENoaWxkLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3NlbGVjdENoaWxkcmVuIGZyb20gXCIuL3NlbGVjdENoaWxkcmVuLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2ZpbHRlciBmcm9tIFwiLi9maWx0ZXIuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZGF0YSBmcm9tIFwiLi9kYXRhLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2VudGVyIGZyb20gXCIuL2VudGVyLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2V4aXQgZnJvbSBcIi4vZXhpdC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9qb2luIGZyb20gXCIuL2pvaW4uanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fbWVyZ2UgZnJvbSBcIi4vbWVyZ2UuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fb3JkZXIgZnJvbSBcIi4vb3JkZXIuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fc29ydCBmcm9tIFwiLi9zb3J0LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2NhbGwgZnJvbSBcIi4vY2FsbC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9ub2RlcyBmcm9tIFwiLi9ub2Rlcy5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9ub2RlIGZyb20gXCIuL25vZGUuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fc2l6ZSBmcm9tIFwiLi9zaXplLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2VtcHR5IGZyb20gXCIuL2VtcHR5LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2VhY2ggZnJvbSBcIi4vZWFjaC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9hdHRyIGZyb20gXCIuL2F0dHIuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fc3R5bGUgZnJvbSBcIi4vc3R5bGUuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fcHJvcGVydHkgZnJvbSBcIi4vcHJvcGVydHkuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fY2xhc3NlZCBmcm9tIFwiLi9jbGFzc2VkLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3RleHQgZnJvbSBcIi4vdGV4dC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9odG1sIGZyb20gXCIuL2h0bWwuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fcmFpc2UgZnJvbSBcIi4vcmFpc2UuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fbG93ZXIgZnJvbSBcIi4vbG93ZXIuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fYXBwZW5kIGZyb20gXCIuL2FwcGVuZC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9pbnNlcnQgZnJvbSBcIi4vaW5zZXJ0LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3JlbW92ZSBmcm9tIFwiLi9yZW1vdmUuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fY2xvbmUgZnJvbSBcIi4vY2xvbmUuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZGF0dW0gZnJvbSBcIi4vZGF0dW0uanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fb24gZnJvbSBcIi4vb24uanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZGlzcGF0Y2ggZnJvbSBcIi4vZGlzcGF0Y2guanNcIjtcbmltcG9ydCBzZWxlY3Rpb25faXRlcmF0b3IgZnJvbSBcIi4vaXRlcmF0b3IuanNcIjtcblxuZXhwb3J0IHZhciByb290ID0gW251bGxdO1xuXG5leHBvcnQgZnVuY3Rpb24gU2VsZWN0aW9uKGdyb3VwcywgcGFyZW50cykge1xuICB0aGlzLl9ncm91cHMgPSBncm91cHM7XG4gIHRoaXMuX3BhcmVudHMgPSBwYXJlbnRzO1xufVxuXG5mdW5jdGlvbiBzZWxlY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sIHJvb3QpO1xufVxuXG5mdW5jdGlvbiBzZWxlY3Rpb25fc2VsZWN0aW9uKCkge1xuICByZXR1cm4gdGhpcztcbn1cblxuU2VsZWN0aW9uLnByb3RvdHlwZSA9IHNlbGVjdGlvbi5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBTZWxlY3Rpb24sXG4gIHNlbGVjdDogc2VsZWN0aW9uX3NlbGVjdCxcbiAgc2VsZWN0QWxsOiBzZWxlY3Rpb25fc2VsZWN0QWxsLFxuICBzZWxlY3RDaGlsZDogc2VsZWN0aW9uX3NlbGVjdENoaWxkLFxuICBzZWxlY3RDaGlsZHJlbjogc2VsZWN0aW9uX3NlbGVjdENoaWxkcmVuLFxuICBmaWx0ZXI6IHNlbGVjdGlvbl9maWx0ZXIsXG4gIGRhdGE6IHNlbGVjdGlvbl9kYXRhLFxuICBlbnRlcjogc2VsZWN0aW9uX2VudGVyLFxuICBleGl0OiBzZWxlY3Rpb25fZXhpdCxcbiAgam9pbjogc2VsZWN0aW9uX2pvaW4sXG4gIG1lcmdlOiBzZWxlY3Rpb25fbWVyZ2UsXG4gIHNlbGVjdGlvbjogc2VsZWN0aW9uX3NlbGVjdGlvbixcbiAgb3JkZXI6IHNlbGVjdGlvbl9vcmRlcixcbiAgc29ydDogc2VsZWN0aW9uX3NvcnQsXG4gIGNhbGw6IHNlbGVjdGlvbl9jYWxsLFxuICBub2Rlczogc2VsZWN0aW9uX25vZGVzLFxuICBub2RlOiBzZWxlY3Rpb25fbm9kZSxcbiAgc2l6ZTogc2VsZWN0aW9uX3NpemUsXG4gIGVtcHR5OiBzZWxlY3Rpb25fZW1wdHksXG4gIGVhY2g6IHNlbGVjdGlvbl9lYWNoLFxuICBhdHRyOiBzZWxlY3Rpb25fYXR0cixcbiAgc3R5bGU6IHNlbGVjdGlvbl9zdHlsZSxcbiAgcHJvcGVydHk6IHNlbGVjdGlvbl9wcm9wZXJ0eSxcbiAgY2xhc3NlZDogc2VsZWN0aW9uX2NsYXNzZWQsXG4gIHRleHQ6IHNlbGVjdGlvbl90ZXh0LFxuICBodG1sOiBzZWxlY3Rpb25faHRtbCxcbiAgcmFpc2U6IHNlbGVjdGlvbl9yYWlzZSxcbiAgbG93ZXI6IHNlbGVjdGlvbl9sb3dlcixcbiAgYXBwZW5kOiBzZWxlY3Rpb25fYXBwZW5kLFxuICBpbnNlcnQ6IHNlbGVjdGlvbl9pbnNlcnQsXG4gIHJlbW92ZTogc2VsZWN0aW9uX3JlbW92ZSxcbiAgY2xvbmU6IHNlbGVjdGlvbl9jbG9uZSxcbiAgZGF0dW06IHNlbGVjdGlvbl9kYXR1bSxcbiAgb246IHNlbGVjdGlvbl9vbixcbiAgZGlzcGF0Y2g6IHNlbGVjdGlvbl9kaXNwYXRjaCxcbiAgW1N5bWJvbC5pdGVyYXRvcl06IHNlbGVjdGlvbl9pdGVyYXRvclxufTtcblxuZXhwb3J0IGRlZmF1bHQgc2VsZWN0aW9uO1xuIiwidmFyIG5vb3AgPSB7dmFsdWU6ICgpID0+IHt9fTtcblxuZnVuY3Rpb24gZGlzcGF0Y2goKSB7XG4gIGZvciAodmFyIGkgPSAwLCBuID0gYXJndW1lbnRzLmxlbmd0aCwgXyA9IHt9LCB0OyBpIDwgbjsgKytpKSB7XG4gICAgaWYgKCEodCA9IGFyZ3VtZW50c1tpXSArIFwiXCIpIHx8ICh0IGluIF8pIHx8IC9bXFxzLl0vLnRlc3QodCkpIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgdHlwZTogXCIgKyB0KTtcbiAgICBfW3RdID0gW107XG4gIH1cbiAgcmV0dXJuIG5ldyBEaXNwYXRjaChfKTtcbn1cblxuZnVuY3Rpb24gRGlzcGF0Y2goXykge1xuICB0aGlzLl8gPSBfO1xufVxuXG5mdW5jdGlvbiBwYXJzZVR5cGVuYW1lcyh0eXBlbmFtZXMsIHR5cGVzKSB7XG4gIHJldHVybiB0eXBlbmFtZXMudHJpbSgpLnNwbGl0KC9efFxccysvKS5tYXAoZnVuY3Rpb24odCkge1xuICAgIHZhciBuYW1lID0gXCJcIiwgaSA9IHQuaW5kZXhPZihcIi5cIik7XG4gICAgaWYgKGkgPj0gMCkgbmFtZSA9IHQuc2xpY2UoaSArIDEpLCB0ID0gdC5zbGljZSgwLCBpKTtcbiAgICBpZiAodCAmJiAhdHlwZXMuaGFzT3duUHJvcGVydHkodCkpIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZTogXCIgKyB0KTtcbiAgICByZXR1cm4ge3R5cGU6IHQsIG5hbWU6IG5hbWV9O1xuICB9KTtcbn1cblxuRGlzcGF0Y2gucHJvdG90eXBlID0gZGlzcGF0Y2gucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogRGlzcGF0Y2gsXG4gIG9uOiBmdW5jdGlvbih0eXBlbmFtZSwgY2FsbGJhY2spIHtcbiAgICB2YXIgXyA9IHRoaXMuXyxcbiAgICAgICAgVCA9IHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lICsgXCJcIiwgXyksXG4gICAgICAgIHQsXG4gICAgICAgIGkgPSAtMSxcbiAgICAgICAgbiA9IFQubGVuZ3RoO1xuXG4gICAgLy8gSWYgbm8gY2FsbGJhY2sgd2FzIHNwZWNpZmllZCwgcmV0dXJuIHRoZSBjYWxsYmFjayBvZiB0aGUgZ2l2ZW4gdHlwZSBhbmQgbmFtZS5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoKHQgPSAodHlwZW5hbWUgPSBUW2ldKS50eXBlKSAmJiAodCA9IGdldChfW3RdLCB0eXBlbmFtZS5uYW1lKSkpIHJldHVybiB0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIGEgdHlwZSB3YXMgc3BlY2lmaWVkLCBzZXQgdGhlIGNhbGxiYWNrIGZvciB0aGUgZ2l2ZW4gdHlwZSBhbmQgbmFtZS5cbiAgICAvLyBPdGhlcndpc2UsIGlmIGEgbnVsbCBjYWxsYmFjayB3YXMgc3BlY2lmaWVkLCByZW1vdmUgY2FsbGJhY2tzIG9mIHRoZSBnaXZlbiBuYW1lLlxuICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGNhbGxiYWNrOiBcIiArIGNhbGxiYWNrKTtcbiAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgaWYgKHQgPSAodHlwZW5hbWUgPSBUW2ldKS50eXBlKSBfW3RdID0gc2V0KF9bdF0sIHR5cGVuYW1lLm5hbWUsIGNhbGxiYWNrKTtcbiAgICAgIGVsc2UgaWYgKGNhbGxiYWNrID09IG51bGwpIGZvciAodCBpbiBfKSBfW3RdID0gc2V0KF9bdF0sIHR5cGVuYW1lLm5hbWUsIG51bGwpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBjb3B5OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgY29weSA9IHt9LCBfID0gdGhpcy5fO1xuICAgIGZvciAodmFyIHQgaW4gXykgY29weVt0XSA9IF9bdF0uc2xpY2UoKTtcbiAgICByZXR1cm4gbmV3IERpc3BhdGNoKGNvcHkpO1xuICB9LFxuICBjYWxsOiBmdW5jdGlvbih0eXBlLCB0aGF0KSB7XG4gICAgaWYgKChuID0gYXJndW1lbnRzLmxlbmd0aCAtIDIpID4gMCkgZm9yICh2YXIgYXJncyA9IG5ldyBBcnJheShuKSwgaSA9IDAsIG4sIHQ7IGkgPCBuOyArK2kpIGFyZ3NbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgIGlmICghdGhpcy5fLmhhc093blByb3BlcnR5KHR5cGUpKSB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiICsgdHlwZSk7XG4gICAgZm9yICh0ID0gdGhpcy5fW3R5cGVdLCBpID0gMCwgbiA9IHQubGVuZ3RoOyBpIDwgbjsgKytpKSB0W2ldLnZhbHVlLmFwcGx5KHRoYXQsIGFyZ3MpO1xuICB9LFxuICBhcHBseTogZnVuY3Rpb24odHlwZSwgdGhhdCwgYXJncykge1xuICAgIGlmICghdGhpcy5fLmhhc093blByb3BlcnR5KHR5cGUpKSB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiICsgdHlwZSk7XG4gICAgZm9yICh2YXIgdCA9IHRoaXMuX1t0eXBlXSwgaSA9IDAsIG4gPSB0Lmxlbmd0aDsgaSA8IG47ICsraSkgdFtpXS52YWx1ZS5hcHBseSh0aGF0LCBhcmdzKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gZ2V0KHR5cGUsIG5hbWUpIHtcbiAgZm9yICh2YXIgaSA9IDAsIG4gPSB0eXBlLmxlbmd0aCwgYzsgaSA8IG47ICsraSkge1xuICAgIGlmICgoYyA9IHR5cGVbaV0pLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgIHJldHVybiBjLnZhbHVlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXQodHlwZSwgbmFtZSwgY2FsbGJhY2spIHtcbiAgZm9yICh2YXIgaSA9IDAsIG4gPSB0eXBlLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgIGlmICh0eXBlW2ldLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgIHR5cGVbaV0gPSBub29wLCB0eXBlID0gdHlwZS5zbGljZSgwLCBpKS5jb25jYXQodHlwZS5zbGljZShpICsgMSkpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChjYWxsYmFjayAhPSBudWxsKSB0eXBlLnB1c2goe25hbWU6IG5hbWUsIHZhbHVlOiBjYWxsYmFja30pO1xuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGlzcGF0Y2g7XG4iLCJ2YXIgZnJhbWUgPSAwLCAvLyBpcyBhbiBhbmltYXRpb24gZnJhbWUgcGVuZGluZz9cbiAgICB0aW1lb3V0ID0gMCwgLy8gaXMgYSB0aW1lb3V0IHBlbmRpbmc/XG4gICAgaW50ZXJ2YWwgPSAwLCAvLyBhcmUgYW55IHRpbWVycyBhY3RpdmU/XG4gICAgcG9rZURlbGF5ID0gMTAwMCwgLy8gaG93IGZyZXF1ZW50bHkgd2UgY2hlY2sgZm9yIGNsb2NrIHNrZXdcbiAgICB0YXNrSGVhZCxcbiAgICB0YXNrVGFpbCxcbiAgICBjbG9ja0xhc3QgPSAwLFxuICAgIGNsb2NrTm93ID0gMCxcbiAgICBjbG9ja1NrZXcgPSAwLFxuICAgIGNsb2NrID0gdHlwZW9mIHBlcmZvcm1hbmNlID09PSBcIm9iamVjdFwiICYmIHBlcmZvcm1hbmNlLm5vdyA/IHBlcmZvcm1hbmNlIDogRGF0ZSxcbiAgICBzZXRGcmFtZSA9IHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIgJiYgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA/IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpIDogZnVuY3Rpb24oZikgeyBzZXRUaW1lb3V0KGYsIDE3KTsgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vdygpIHtcbiAgcmV0dXJuIGNsb2NrTm93IHx8IChzZXRGcmFtZShjbGVhck5vdyksIGNsb2NrTm93ID0gY2xvY2subm93KCkgKyBjbG9ja1NrZXcpO1xufVxuXG5mdW5jdGlvbiBjbGVhck5vdygpIHtcbiAgY2xvY2tOb3cgPSAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gVGltZXIoKSB7XG4gIHRoaXMuX2NhbGwgPVxuICB0aGlzLl90aW1lID1cbiAgdGhpcy5fbmV4dCA9IG51bGw7XG59XG5cblRpbWVyLnByb3RvdHlwZSA9IHRpbWVyLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFRpbWVyLFxuICByZXN0YXJ0OiBmdW5jdGlvbihjYWxsYmFjaywgZGVsYXksIHRpbWUpIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvblwiKTtcbiAgICB0aW1lID0gKHRpbWUgPT0gbnVsbCA/IG5vdygpIDogK3RpbWUpICsgKGRlbGF5ID09IG51bGwgPyAwIDogK2RlbGF5KTtcbiAgICBpZiAoIXRoaXMuX25leHQgJiYgdGFza1RhaWwgIT09IHRoaXMpIHtcbiAgICAgIGlmICh0YXNrVGFpbCkgdGFza1RhaWwuX25leHQgPSB0aGlzO1xuICAgICAgZWxzZSB0YXNrSGVhZCA9IHRoaXM7XG4gICAgICB0YXNrVGFpbCA9IHRoaXM7XG4gICAgfVxuICAgIHRoaXMuX2NhbGwgPSBjYWxsYmFjaztcbiAgICB0aGlzLl90aW1lID0gdGltZTtcbiAgICBzbGVlcCgpO1xuICB9LFxuICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fY2FsbCkge1xuICAgICAgdGhpcy5fY2FsbCA9IG51bGw7XG4gICAgICB0aGlzLl90aW1lID0gSW5maW5pdHk7XG4gICAgICBzbGVlcCgpO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVyKGNhbGxiYWNrLCBkZWxheSwgdGltZSkge1xuICB2YXIgdCA9IG5ldyBUaW1lcjtcbiAgdC5yZXN0YXJ0KGNhbGxiYWNrLCBkZWxheSwgdGltZSk7XG4gIHJldHVybiB0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGltZXJGbHVzaCgpIHtcbiAgbm93KCk7IC8vIEdldCB0aGUgY3VycmVudCB0aW1lLCBpZiBub3QgYWxyZWFkeSBzZXQuXG4gICsrZnJhbWU7IC8vIFByZXRlbmQgd2XigJl2ZSBzZXQgYW4gYWxhcm0sIGlmIHdlIGhhdmVu4oCZdCBhbHJlYWR5LlxuICB2YXIgdCA9IHRhc2tIZWFkLCBlO1xuICB3aGlsZSAodCkge1xuICAgIGlmICgoZSA9IGNsb2NrTm93IC0gdC5fdGltZSkgPj0gMCkgdC5fY2FsbC5jYWxsKHVuZGVmaW5lZCwgZSk7XG4gICAgdCA9IHQuX25leHQ7XG4gIH1cbiAgLS1mcmFtZTtcbn1cblxuZnVuY3Rpb24gd2FrZSgpIHtcbiAgY2xvY2tOb3cgPSAoY2xvY2tMYXN0ID0gY2xvY2subm93KCkpICsgY2xvY2tTa2V3O1xuICBmcmFtZSA9IHRpbWVvdXQgPSAwO1xuICB0cnkge1xuICAgIHRpbWVyRmx1c2goKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBmcmFtZSA9IDA7XG4gICAgbmFwKCk7XG4gICAgY2xvY2tOb3cgPSAwO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBva2UoKSB7XG4gIHZhciBub3cgPSBjbG9jay5ub3coKSwgZGVsYXkgPSBub3cgLSBjbG9ja0xhc3Q7XG4gIGlmIChkZWxheSA+IHBva2VEZWxheSkgY2xvY2tTa2V3IC09IGRlbGF5LCBjbG9ja0xhc3QgPSBub3c7XG59XG5cbmZ1bmN0aW9uIG5hcCgpIHtcbiAgdmFyIHQwLCB0MSA9IHRhc2tIZWFkLCB0MiwgdGltZSA9IEluZmluaXR5O1xuICB3aGlsZSAodDEpIHtcbiAgICBpZiAodDEuX2NhbGwpIHtcbiAgICAgIGlmICh0aW1lID4gdDEuX3RpbWUpIHRpbWUgPSB0MS5fdGltZTtcbiAgICAgIHQwID0gdDEsIHQxID0gdDEuX25leHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHQyID0gdDEuX25leHQsIHQxLl9uZXh0ID0gbnVsbDtcbiAgICAgIHQxID0gdDAgPyB0MC5fbmV4dCA9IHQyIDogdGFza0hlYWQgPSB0MjtcbiAgICB9XG4gIH1cbiAgdGFza1RhaWwgPSB0MDtcbiAgc2xlZXAodGltZSk7XG59XG5cbmZ1bmN0aW9uIHNsZWVwKHRpbWUpIHtcbiAgaWYgKGZyYW1lKSByZXR1cm47IC8vIFNvb25lc3QgYWxhcm0gYWxyZWFkeSBzZXQsIG9yIHdpbGwgYmUuXG4gIGlmICh0aW1lb3V0KSB0aW1lb3V0ID0gY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICB2YXIgZGVsYXkgPSB0aW1lIC0gY2xvY2tOb3c7IC8vIFN0cmljdGx5IGxlc3MgdGhhbiBpZiB3ZSByZWNvbXB1dGVkIGNsb2NrTm93LlxuICBpZiAoZGVsYXkgPiAyNCkge1xuICAgIGlmICh0aW1lIDwgSW5maW5pdHkpIHRpbWVvdXQgPSBzZXRUaW1lb3V0KHdha2UsIHRpbWUgLSBjbG9jay5ub3coKSAtIGNsb2NrU2tldyk7XG4gICAgaWYgKGludGVydmFsKSBpbnRlcnZhbCA9IGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICB9IGVsc2Uge1xuICAgIGlmICghaW50ZXJ2YWwpIGNsb2NrTGFzdCA9IGNsb2NrLm5vdygpLCBpbnRlcnZhbCA9IHNldEludGVydmFsKHBva2UsIHBva2VEZWxheSk7XG4gICAgZnJhbWUgPSAxLCBzZXRGcmFtZSh3YWtlKTtcbiAgfVxufVxuIiwiaW1wb3J0IHtUaW1lcn0gZnJvbSBcIi4vdGltZXIuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2ssIGRlbGF5LCB0aW1lKSB7XG4gIHZhciB0ID0gbmV3IFRpbWVyO1xuICBkZWxheSA9IGRlbGF5ID09IG51bGwgPyAwIDogK2RlbGF5O1xuICB0LnJlc3RhcnQoZWxhcHNlZCA9PiB7XG4gICAgdC5zdG9wKCk7XG4gICAgY2FsbGJhY2soZWxhcHNlZCArIGRlbGF5KTtcbiAgfSwgZGVsYXksIHRpbWUpO1xuICByZXR1cm4gdDtcbn1cbiIsImltcG9ydCB7ZGlzcGF0Y2h9IGZyb20gXCJkMy1kaXNwYXRjaFwiO1xuaW1wb3J0IHt0aW1lciwgdGltZW91dH0gZnJvbSBcImQzLXRpbWVyXCI7XG5cbnZhciBlbXB0eU9uID0gZGlzcGF0Y2goXCJzdGFydFwiLCBcImVuZFwiLCBcImNhbmNlbFwiLCBcImludGVycnVwdFwiKTtcbnZhciBlbXB0eVR3ZWVuID0gW107XG5cbmV4cG9ydCB2YXIgQ1JFQVRFRCA9IDA7XG5leHBvcnQgdmFyIFNDSEVEVUxFRCA9IDE7XG5leHBvcnQgdmFyIFNUQVJUSU5HID0gMjtcbmV4cG9ydCB2YXIgU1RBUlRFRCA9IDM7XG5leHBvcnQgdmFyIFJVTk5JTkcgPSA0O1xuZXhwb3J0IHZhciBFTkRJTkcgPSA1O1xuZXhwb3J0IHZhciBFTkRFRCA9IDY7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUsIG5hbWUsIGlkLCBpbmRleCwgZ3JvdXAsIHRpbWluZykge1xuICB2YXIgc2NoZWR1bGVzID0gbm9kZS5fX3RyYW5zaXRpb247XG4gIGlmICghc2NoZWR1bGVzKSBub2RlLl9fdHJhbnNpdGlvbiA9IHt9O1xuICBlbHNlIGlmIChpZCBpbiBzY2hlZHVsZXMpIHJldHVybjtcbiAgY3JlYXRlKG5vZGUsIGlkLCB7XG4gICAgbmFtZTogbmFtZSxcbiAgICBpbmRleDogaW5kZXgsIC8vIEZvciBjb250ZXh0IGR1cmluZyBjYWxsYmFjay5cbiAgICBncm91cDogZ3JvdXAsIC8vIEZvciBjb250ZXh0IGR1cmluZyBjYWxsYmFjay5cbiAgICBvbjogZW1wdHlPbixcbiAgICB0d2VlbjogZW1wdHlUd2VlbixcbiAgICB0aW1lOiB0aW1pbmcudGltZSxcbiAgICBkZWxheTogdGltaW5nLmRlbGF5LFxuICAgIGR1cmF0aW9uOiB0aW1pbmcuZHVyYXRpb24sXG4gICAgZWFzZTogdGltaW5nLmVhc2UsXG4gICAgdGltZXI6IG51bGwsXG4gICAgc3RhdGU6IENSRUFURURcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0KG5vZGUsIGlkKSB7XG4gIHZhciBzY2hlZHVsZSA9IGdldChub2RlLCBpZCk7XG4gIGlmIChzY2hlZHVsZS5zdGF0ZSA+IENSRUFURUQpIHRocm93IG5ldyBFcnJvcihcInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZFwiKTtcbiAgcmV0dXJuIHNjaGVkdWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0KG5vZGUsIGlkKSB7XG4gIHZhciBzY2hlZHVsZSA9IGdldChub2RlLCBpZCk7XG4gIGlmIChzY2hlZHVsZS5zdGF0ZSA+IFNUQVJURUQpIHRocm93IG5ldyBFcnJvcihcInRvbyBsYXRlOyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gIHJldHVybiBzY2hlZHVsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldChub2RlLCBpZCkge1xuICB2YXIgc2NoZWR1bGUgPSBub2RlLl9fdHJhbnNpdGlvbjtcbiAgaWYgKCFzY2hlZHVsZSB8fCAhKHNjaGVkdWxlID0gc2NoZWR1bGVbaWRdKSkgdGhyb3cgbmV3IEVycm9yKFwidHJhbnNpdGlvbiBub3QgZm91bmRcIik7XG4gIHJldHVybiBzY2hlZHVsZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlKG5vZGUsIGlkLCBzZWxmKSB7XG4gIHZhciBzY2hlZHVsZXMgPSBub2RlLl9fdHJhbnNpdGlvbixcbiAgICAgIHR3ZWVuO1xuXG4gIC8vIEluaXRpYWxpemUgdGhlIHNlbGYgdGltZXIgd2hlbiB0aGUgdHJhbnNpdGlvbiBpcyBjcmVhdGVkLlxuICAvLyBOb3RlIHRoZSBhY3R1YWwgZGVsYXkgaXMgbm90IGtub3duIHVudGlsIHRoZSBmaXJzdCBjYWxsYmFjayFcbiAgc2NoZWR1bGVzW2lkXSA9IHNlbGY7XG4gIHNlbGYudGltZXIgPSB0aW1lcihzY2hlZHVsZSwgMCwgc2VsZi50aW1lKTtcblxuICBmdW5jdGlvbiBzY2hlZHVsZShlbGFwc2VkKSB7XG4gICAgc2VsZi5zdGF0ZSA9IFNDSEVEVUxFRDtcbiAgICBzZWxmLnRpbWVyLnJlc3RhcnQoc3RhcnQsIHNlbGYuZGVsYXksIHNlbGYudGltZSk7XG5cbiAgICAvLyBJZiB0aGUgZWxhcHNlZCBkZWxheSBpcyBsZXNzIHRoYW4gb3VyIGZpcnN0IHNsZWVwLCBzdGFydCBpbW1lZGlhdGVseS5cbiAgICBpZiAoc2VsZi5kZWxheSA8PSBlbGFwc2VkKSBzdGFydChlbGFwc2VkIC0gc2VsZi5kZWxheSk7XG4gIH1cblxuICBmdW5jdGlvbiBzdGFydChlbGFwc2VkKSB7XG4gICAgdmFyIGksIGosIG4sIG87XG5cbiAgICAvLyBJZiB0aGUgc3RhdGUgaXMgbm90IFNDSEVEVUxFRCwgdGhlbiB3ZSBwcmV2aW91c2x5IGVycm9yZWQgb24gc3RhcnQuXG4gICAgaWYgKHNlbGYuc3RhdGUgIT09IFNDSEVEVUxFRCkgcmV0dXJuIHN0b3AoKTtcblxuICAgIGZvciAoaSBpbiBzY2hlZHVsZXMpIHtcbiAgICAgIG8gPSBzY2hlZHVsZXNbaV07XG4gICAgICBpZiAoby5uYW1lICE9PSBzZWxmLm5hbWUpIGNvbnRpbnVlO1xuXG4gICAgICAvLyBXaGlsZSB0aGlzIGVsZW1lbnQgYWxyZWFkeSBoYXMgYSBzdGFydGluZyB0cmFuc2l0aW9uIGR1cmluZyB0aGlzIGZyYW1lLFxuICAgICAgLy8gZGVmZXIgc3RhcnRpbmcgYW4gaW50ZXJydXB0aW5nIHRyYW5zaXRpb24gdW50aWwgdGhhdCB0cmFuc2l0aW9uIGhhcyBhXG4gICAgICAvLyBjaGFuY2UgdG8gdGljayAoYW5kIHBvc3NpYmx5IGVuZCk7IHNlZSBkMy9kMy10cmFuc2l0aW9uIzU0IVxuICAgICAgaWYgKG8uc3RhdGUgPT09IFNUQVJURUQpIHJldHVybiB0aW1lb3V0KHN0YXJ0KTtcblxuICAgICAgLy8gSW50ZXJydXB0IHRoZSBhY3RpdmUgdHJhbnNpdGlvbiwgaWYgYW55LlxuICAgICAgaWYgKG8uc3RhdGUgPT09IFJVTk5JTkcpIHtcbiAgICAgICAgby5zdGF0ZSA9IEVOREVEO1xuICAgICAgICBvLnRpbWVyLnN0b3AoKTtcbiAgICAgICAgby5vbi5jYWxsKFwiaW50ZXJydXB0XCIsIG5vZGUsIG5vZGUuX19kYXRhX18sIG8uaW5kZXgsIG8uZ3JvdXApO1xuICAgICAgICBkZWxldGUgc2NoZWR1bGVzW2ldO1xuICAgICAgfVxuXG4gICAgICAvLyBDYW5jZWwgYW55IHByZS1lbXB0ZWQgdHJhbnNpdGlvbnMuXG4gICAgICBlbHNlIGlmICgraSA8IGlkKSB7XG4gICAgICAgIG8uc3RhdGUgPSBFTkRFRDtcbiAgICAgICAgby50aW1lci5zdG9wKCk7XG4gICAgICAgIG8ub24uY2FsbChcImNhbmNlbFwiLCBub2RlLCBub2RlLl9fZGF0YV9fLCBvLmluZGV4LCBvLmdyb3VwKTtcbiAgICAgICAgZGVsZXRlIHNjaGVkdWxlc1tpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEZWZlciB0aGUgZmlyc3QgdGljayB0byBlbmQgb2YgdGhlIGN1cnJlbnQgZnJhbWU7IHNlZSBkMy9kMyMxNTc2LlxuICAgIC8vIE5vdGUgdGhlIHRyYW5zaXRpb24gbWF5IGJlIGNhbmNlbGVkIGFmdGVyIHN0YXJ0IGFuZCBiZWZvcmUgdGhlIGZpcnN0IHRpY2shXG4gICAgLy8gTm90ZSB0aGlzIG11c3QgYmUgc2NoZWR1bGVkIGJlZm9yZSB0aGUgc3RhcnQgZXZlbnQ7IHNlZSBkMy9kMy10cmFuc2l0aW9uIzE2IVxuICAgIC8vIEFzc3VtaW5nIHRoaXMgaXMgc3VjY2Vzc2Z1bCwgc3Vic2VxdWVudCBjYWxsYmFja3MgZ28gc3RyYWlnaHQgdG8gdGljay5cbiAgICB0aW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHNlbGYuc3RhdGUgPT09IFNUQVJURUQpIHtcbiAgICAgICAgc2VsZi5zdGF0ZSA9IFJVTk5JTkc7XG4gICAgICAgIHNlbGYudGltZXIucmVzdGFydCh0aWNrLCBzZWxmLmRlbGF5LCBzZWxmLnRpbWUpO1xuICAgICAgICB0aWNrKGVsYXBzZWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gRGlzcGF0Y2ggdGhlIHN0YXJ0IGV2ZW50LlxuICAgIC8vIE5vdGUgdGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIHRoZSB0d2VlbiBhcmUgaW5pdGlhbGl6ZWQuXG4gICAgc2VsZi5zdGF0ZSA9IFNUQVJUSU5HO1xuICAgIHNlbGYub24uY2FsbChcInN0YXJ0XCIsIG5vZGUsIG5vZGUuX19kYXRhX18sIHNlbGYuaW5kZXgsIHNlbGYuZ3JvdXApO1xuICAgIGlmIChzZWxmLnN0YXRlICE9PSBTVEFSVElORykgcmV0dXJuOyAvLyBpbnRlcnJ1cHRlZFxuICAgIHNlbGYuc3RhdGUgPSBTVEFSVEVEO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgdHdlZW4sIGRlbGV0aW5nIG51bGwgdHdlZW4uXG4gICAgdHdlZW4gPSBuZXcgQXJyYXkobiA9IHNlbGYudHdlZW4ubGVuZ3RoKTtcbiAgICBmb3IgKGkgPSAwLCBqID0gLTE7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChvID0gc2VsZi50d2VlbltpXS52YWx1ZS5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIHNlbGYuaW5kZXgsIHNlbGYuZ3JvdXApKSB7XG4gICAgICAgIHR3ZWVuWysral0gPSBvO1xuICAgICAgfVxuICAgIH1cbiAgICB0d2Vlbi5sZW5ndGggPSBqICsgMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRpY2soZWxhcHNlZCkge1xuICAgIHZhciB0ID0gZWxhcHNlZCA8IHNlbGYuZHVyYXRpb24gPyBzZWxmLmVhc2UuY2FsbChudWxsLCBlbGFwc2VkIC8gc2VsZi5kdXJhdGlvbikgOiAoc2VsZi50aW1lci5yZXN0YXJ0KHN0b3ApLCBzZWxmLnN0YXRlID0gRU5ESU5HLCAxKSxcbiAgICAgICAgaSA9IC0xLFxuICAgICAgICBuID0gdHdlZW4ubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIHR3ZWVuW2ldLmNhbGwobm9kZSwgdCk7XG4gICAgfVxuXG4gICAgLy8gRGlzcGF0Y2ggdGhlIGVuZCBldmVudC5cbiAgICBpZiAoc2VsZi5zdGF0ZSA9PT0gRU5ESU5HKSB7XG4gICAgICBzZWxmLm9uLmNhbGwoXCJlbmRcIiwgbm9kZSwgbm9kZS5fX2RhdGFfXywgc2VsZi5pbmRleCwgc2VsZi5ncm91cCk7XG4gICAgICBzdG9wKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc3RvcCgpIHtcbiAgICBzZWxmLnN0YXRlID0gRU5ERUQ7XG4gICAgc2VsZi50aW1lci5zdG9wKCk7XG4gICAgZGVsZXRlIHNjaGVkdWxlc1tpZF07XG4gICAgZm9yICh2YXIgaSBpbiBzY2hlZHVsZXMpIHJldHVybjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIGRlbGV0ZSBub2RlLl9fdHJhbnNpdGlvbjtcbiAgfVxufVxuIiwiaW1wb3J0IHtTVEFSVElORywgRU5ESU5HLCBFTkRFRH0gZnJvbSBcIi4vdHJhbnNpdGlvbi9zY2hlZHVsZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihub2RlLCBuYW1lKSB7XG4gIHZhciBzY2hlZHVsZXMgPSBub2RlLl9fdHJhbnNpdGlvbixcbiAgICAgIHNjaGVkdWxlLFxuICAgICAgYWN0aXZlLFxuICAgICAgZW1wdHkgPSB0cnVlLFxuICAgICAgaTtcblxuICBpZiAoIXNjaGVkdWxlcykgcmV0dXJuO1xuXG4gIG5hbWUgPSBuYW1lID09IG51bGwgPyBudWxsIDogbmFtZSArIFwiXCI7XG5cbiAgZm9yIChpIGluIHNjaGVkdWxlcykge1xuICAgIGlmICgoc2NoZWR1bGUgPSBzY2hlZHVsZXNbaV0pLm5hbWUgIT09IG5hbWUpIHsgZW1wdHkgPSBmYWxzZTsgY29udGludWU7IH1cbiAgICBhY3RpdmUgPSBzY2hlZHVsZS5zdGF0ZSA+IFNUQVJUSU5HICYmIHNjaGVkdWxlLnN0YXRlIDwgRU5ESU5HO1xuICAgIHNjaGVkdWxlLnN0YXRlID0gRU5ERUQ7XG4gICAgc2NoZWR1bGUudGltZXIuc3RvcCgpO1xuICAgIHNjaGVkdWxlLm9uLmNhbGwoYWN0aXZlID8gXCJpbnRlcnJ1cHRcIiA6IFwiY2FuY2VsXCIsIG5vZGUsIG5vZGUuX19kYXRhX18sIHNjaGVkdWxlLmluZGV4LCBzY2hlZHVsZS5ncm91cCk7XG4gICAgZGVsZXRlIHNjaGVkdWxlc1tpXTtcbiAgfVxuXG4gIGlmIChlbXB0eSkgZGVsZXRlIG5vZGUuX190cmFuc2l0aW9uO1xufVxuIiwiaW1wb3J0IGludGVycnVwdCBmcm9tIFwiLi4vaW50ZXJydXB0LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcbiAgICBpbnRlcnJ1cHQodGhpcywgbmFtZSk7XG4gIH0pO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICByZXR1cm4gYSA9ICthLCBiID0gK2IsIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gYSAqICgxIC0gdCkgKyBiICogdDtcbiAgfTtcbn1cbiIsInZhciBkZWdyZWVzID0gMTgwIC8gTWF0aC5QSTtcblxuZXhwb3J0IHZhciBpZGVudGl0eSA9IHtcbiAgdHJhbnNsYXRlWDogMCxcbiAgdHJhbnNsYXRlWTogMCxcbiAgcm90YXRlOiAwLFxuICBza2V3WDogMCxcbiAgc2NhbGVYOiAxLFxuICBzY2FsZVk6IDFcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgdmFyIHNjYWxlWCwgc2NhbGVZLCBza2V3WDtcbiAgaWYgKHNjYWxlWCA9IE1hdGguc3FydChhICogYSArIGIgKiBiKSkgYSAvPSBzY2FsZVgsIGIgLz0gc2NhbGVYO1xuICBpZiAoc2tld1ggPSBhICogYyArIGIgKiBkKSBjIC09IGEgKiBza2V3WCwgZCAtPSBiICogc2tld1g7XG4gIGlmIChzY2FsZVkgPSBNYXRoLnNxcnQoYyAqIGMgKyBkICogZCkpIGMgLz0gc2NhbGVZLCBkIC89IHNjYWxlWSwgc2tld1ggLz0gc2NhbGVZO1xuICBpZiAoYSAqIGQgPCBiICogYykgYSA9IC1hLCBiID0gLWIsIHNrZXdYID0gLXNrZXdYLCBzY2FsZVggPSAtc2NhbGVYO1xuICByZXR1cm4ge1xuICAgIHRyYW5zbGF0ZVg6IGUsXG4gICAgdHJhbnNsYXRlWTogZixcbiAgICByb3RhdGU6IE1hdGguYXRhbjIoYiwgYSkgKiBkZWdyZWVzLFxuICAgIHNrZXdYOiBNYXRoLmF0YW4oc2tld1gpICogZGVncmVlcyxcbiAgICBzY2FsZVg6IHNjYWxlWCxcbiAgICBzY2FsZVk6IHNjYWxlWVxuICB9O1xufVxuIiwiaW1wb3J0IGRlY29tcG9zZSwge2lkZW50aXR5fSBmcm9tIFwiLi9kZWNvbXBvc2UuanNcIjtcblxudmFyIHN2Z05vZGU7XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDc3ModmFsdWUpIHtcbiAgY29uc3QgbSA9IG5ldyAodHlwZW9mIERPTU1hdHJpeCA9PT0gXCJmdW5jdGlvblwiID8gRE9NTWF0cml4IDogV2ViS2l0Q1NTTWF0cml4KSh2YWx1ZSArIFwiXCIpO1xuICByZXR1cm4gbS5pc0lkZW50aXR5ID8gaWRlbnRpdHkgOiBkZWNvbXBvc2UobS5hLCBtLmIsIG0uYywgbS5kLCBtLmUsIG0uZik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVN2Zyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIGlkZW50aXR5O1xuICBpZiAoIXN2Z05vZGUpIHN2Z05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcImdcIik7XG4gIHN2Z05vZGUuc2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIsIHZhbHVlKTtcbiAgaWYgKCEodmFsdWUgPSBzdmdOb2RlLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpKSByZXR1cm4gaWRlbnRpdHk7XG4gIHZhbHVlID0gdmFsdWUubWF0cml4O1xuICByZXR1cm4gZGVjb21wb3NlKHZhbHVlLmEsIHZhbHVlLmIsIHZhbHVlLmMsIHZhbHVlLmQsIHZhbHVlLmUsIHZhbHVlLmYpO1xufVxuIiwiaW1wb3J0IG51bWJlciBmcm9tIFwiLi4vbnVtYmVyLmpzXCI7XG5pbXBvcnQge3BhcnNlQ3NzLCBwYXJzZVN2Z30gZnJvbSBcIi4vcGFyc2UuanNcIjtcblxuZnVuY3Rpb24gaW50ZXJwb2xhdGVUcmFuc2Zvcm0ocGFyc2UsIHB4Q29tbWEsIHB4UGFyZW4sIGRlZ1BhcmVuKSB7XG5cbiAgZnVuY3Rpb24gcG9wKHMpIHtcbiAgICByZXR1cm4gcy5sZW5ndGggPyBzLnBvcCgpICsgXCIgXCIgOiBcIlwiO1xuICB9XG5cbiAgZnVuY3Rpb24gdHJhbnNsYXRlKHhhLCB5YSwgeGIsIHliLCBzLCBxKSB7XG4gICAgaWYgKHhhICE9PSB4YiB8fCB5YSAhPT0geWIpIHtcbiAgICAgIHZhciBpID0gcy5wdXNoKFwidHJhbnNsYXRlKFwiLCBudWxsLCBweENvbW1hLCBudWxsLCBweFBhcmVuKTtcbiAgICAgIHEucHVzaCh7aTogaSAtIDQsIHg6IG51bWJlcih4YSwgeGIpfSwge2k6IGkgLSAyLCB4OiBudW1iZXIoeWEsIHliKX0pO1xuICAgIH0gZWxzZSBpZiAoeGIgfHwgeWIpIHtcbiAgICAgIHMucHVzaChcInRyYW5zbGF0ZShcIiArIHhiICsgcHhDb21tYSArIHliICsgcHhQYXJlbik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcm90YXRlKGEsIGIsIHMsIHEpIHtcbiAgICBpZiAoYSAhPT0gYikge1xuICAgICAgaWYgKGEgLSBiID4gMTgwKSBiICs9IDM2MDsgZWxzZSBpZiAoYiAtIGEgPiAxODApIGEgKz0gMzYwOyAvLyBzaG9ydGVzdCBwYXRoXG4gICAgICBxLnB1c2goe2k6IHMucHVzaChwb3AocykgKyBcInJvdGF0ZShcIiwgbnVsbCwgZGVnUGFyZW4pIC0gMiwgeDogbnVtYmVyKGEsIGIpfSk7XG4gICAgfSBlbHNlIGlmIChiKSB7XG4gICAgICBzLnB1c2gocG9wKHMpICsgXCJyb3RhdGUoXCIgKyBiICsgZGVnUGFyZW4pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNrZXdYKGEsIGIsIHMsIHEpIHtcbiAgICBpZiAoYSAhPT0gYikge1xuICAgICAgcS5wdXNoKHtpOiBzLnB1c2gocG9wKHMpICsgXCJza2V3WChcIiwgbnVsbCwgZGVnUGFyZW4pIC0gMiwgeDogbnVtYmVyKGEsIGIpfSk7XG4gICAgfSBlbHNlIGlmIChiKSB7XG4gICAgICBzLnB1c2gocG9wKHMpICsgXCJza2V3WChcIiArIGIgKyBkZWdQYXJlbik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2NhbGUoeGEsIHlhLCB4YiwgeWIsIHMsIHEpIHtcbiAgICBpZiAoeGEgIT09IHhiIHx8IHlhICE9PSB5Yikge1xuICAgICAgdmFyIGkgPSBzLnB1c2gocG9wKHMpICsgXCJzY2FsZShcIiwgbnVsbCwgXCIsXCIsIG51bGwsIFwiKVwiKTtcbiAgICAgIHEucHVzaCh7aTogaSAtIDQsIHg6IG51bWJlcih4YSwgeGIpfSwge2k6IGkgLSAyLCB4OiBudW1iZXIoeWEsIHliKX0pO1xuICAgIH0gZWxzZSBpZiAoeGIgIT09IDEgfHwgeWIgIT09IDEpIHtcbiAgICAgIHMucHVzaChwb3AocykgKyBcInNjYWxlKFwiICsgeGIgKyBcIixcIiArIHliICsgXCIpXCIpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbihhLCBiKSB7XG4gICAgdmFyIHMgPSBbXSwgLy8gc3RyaW5nIGNvbnN0YW50cyBhbmQgcGxhY2Vob2xkZXJzXG4gICAgICAgIHEgPSBbXTsgLy8gbnVtYmVyIGludGVycG9sYXRvcnNcbiAgICBhID0gcGFyc2UoYSksIGIgPSBwYXJzZShiKTtcbiAgICB0cmFuc2xhdGUoYS50cmFuc2xhdGVYLCBhLnRyYW5zbGF0ZVksIGIudHJhbnNsYXRlWCwgYi50cmFuc2xhdGVZLCBzLCBxKTtcbiAgICByb3RhdGUoYS5yb3RhdGUsIGIucm90YXRlLCBzLCBxKTtcbiAgICBza2V3WChhLnNrZXdYLCBiLnNrZXdYLCBzLCBxKTtcbiAgICBzY2FsZShhLnNjYWxlWCwgYS5zY2FsZVksIGIuc2NhbGVYLCBiLnNjYWxlWSwgcywgcSk7XG4gICAgYSA9IGIgPSBudWxsOyAvLyBnY1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICB2YXIgaSA9IC0xLCBuID0gcS5sZW5ndGgsIG87XG4gICAgICB3aGlsZSAoKytpIDwgbikgc1sobyA9IHFbaV0pLmldID0gby54KHQpO1xuICAgICAgcmV0dXJuIHMuam9pbihcIlwiKTtcbiAgICB9O1xuICB9O1xufVxuXG5leHBvcnQgdmFyIGludGVycG9sYXRlVHJhbnNmb3JtQ3NzID0gaW50ZXJwb2xhdGVUcmFuc2Zvcm0ocGFyc2VDc3MsIFwicHgsIFwiLCBcInB4KVwiLCBcImRlZylcIik7XG5leHBvcnQgdmFyIGludGVycG9sYXRlVHJhbnNmb3JtU3ZnID0gaW50ZXJwb2xhdGVUcmFuc2Zvcm0ocGFyc2VTdmcsIFwiLCBcIiwgXCIpXCIsIFwiKVwiKTtcbiIsImltcG9ydCB7Z2V0LCBzZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmZ1bmN0aW9uIHR3ZWVuUmVtb3ZlKGlkLCBuYW1lKSB7XG4gIHZhciB0d2VlbjAsIHR3ZWVuMTtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzY2hlZHVsZSA9IHNldCh0aGlzLCBpZCksXG4gICAgICAgIHR3ZWVuID0gc2NoZWR1bGUudHdlZW47XG5cbiAgICAvLyBJZiB0aGlzIG5vZGUgc2hhcmVkIHR3ZWVuIHdpdGggdGhlIHByZXZpb3VzIG5vZGUsXG4gICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIHR3ZWVuIGFuZCB3ZeKAmXJlIGRvbmUhXG4gICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgIGlmICh0d2VlbiAhPT0gdHdlZW4wKSB7XG4gICAgICB0d2VlbjEgPSB0d2VlbjAgPSB0d2VlbjtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gdHdlZW4xLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgICBpZiAodHdlZW4xW2ldLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICB0d2VlbjEgPSB0d2VlbjEuc2xpY2UoKTtcbiAgICAgICAgICB0d2VlbjEuc3BsaWNlKGksIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2NoZWR1bGUudHdlZW4gPSB0d2VlbjE7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHR3ZWVuRnVuY3Rpb24oaWQsIG5hbWUsIHZhbHVlKSB7XG4gIHZhciB0d2VlbjAsIHR3ZWVuMTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzZXQodGhpcywgaWQpLFxuICAgICAgICB0d2VlbiA9IHNjaGVkdWxlLnR3ZWVuO1xuXG4gICAgLy8gSWYgdGhpcyBub2RlIHNoYXJlZCB0d2VlbiB3aXRoIHRoZSBwcmV2aW91cyBub2RlLFxuICAgIC8vIGp1c3QgYXNzaWduIHRoZSB1cGRhdGVkIHNoYXJlZCB0d2VlbiBhbmQgd2XigJlyZSBkb25lIVxuICAgIC8vIE90aGVyd2lzZSwgY29weS1vbi13cml0ZS5cbiAgICBpZiAodHdlZW4gIT09IHR3ZWVuMCkge1xuICAgICAgdHdlZW4xID0gKHR3ZWVuMCA9IHR3ZWVuKS5zbGljZSgpO1xuICAgICAgZm9yICh2YXIgdCA9IHtuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWV9LCBpID0gMCwgbiA9IHR3ZWVuMS5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgaWYgKHR3ZWVuMVtpXS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgICAgdHdlZW4xW2ldID0gdDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGkgPT09IG4pIHR3ZWVuMS5wdXNoKHQpO1xuICAgIH1cblxuICAgIHNjaGVkdWxlLnR3ZWVuID0gdHdlZW4xO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICBuYW1lICs9IFwiXCI7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdmFyIHR3ZWVuID0gZ2V0KHRoaXMubm9kZSgpLCBpZCkudHdlZW47XG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSB0d2Vlbi5sZW5ndGgsIHQ7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgodCA9IHR3ZWVuW2ldKS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgIHJldHVybiB0LnZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmVhY2goKHZhbHVlID09IG51bGwgPyB0d2VlblJlbW92ZSA6IHR3ZWVuRnVuY3Rpb24pKGlkLCBuYW1lLCB2YWx1ZSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHdlZW5WYWx1ZSh0cmFuc2l0aW9uLCBuYW1lLCB2YWx1ZSkge1xuICB2YXIgaWQgPSB0cmFuc2l0aW9uLl9pZDtcblxuICB0cmFuc2l0aW9uLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNjaGVkdWxlID0gc2V0KHRoaXMsIGlkKTtcbiAgICAoc2NoZWR1bGUudmFsdWUgfHwgKHNjaGVkdWxlLnZhbHVlID0ge30pKVtuYW1lXSA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH0pO1xuXG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgcmV0dXJuIGdldChub2RlLCBpZCkudmFsdWVbbmFtZV07XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb25zdHJ1Y3RvciwgZmFjdG9yeSwgcHJvdG90eXBlKSB7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGZhY3RvcnkucHJvdG90eXBlID0gcHJvdG90eXBlO1xuICBwcm90b3R5cGUuY29uc3RydWN0b3IgPSBjb25zdHJ1Y3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZChwYXJlbnQsIGRlZmluaXRpb24pIHtcbiAgdmFyIHByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUocGFyZW50LnByb3RvdHlwZSk7XG4gIGZvciAodmFyIGtleSBpbiBkZWZpbml0aW9uKSBwcm90b3R5cGVba2V5XSA9IGRlZmluaXRpb25ba2V5XTtcbiAgcmV0dXJuIHByb3RvdHlwZTtcbn1cbiIsImltcG9ydCBkZWZpbmUsIHtleHRlbmR9IGZyb20gXCIuL2RlZmluZS5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gQ29sb3IoKSB7fVxuXG5leHBvcnQgdmFyIGRhcmtlciA9IDAuNztcbmV4cG9ydCB2YXIgYnJpZ2h0ZXIgPSAxIC8gZGFya2VyO1xuXG52YXIgcmVJID0gXCJcXFxccyooWystXT9cXFxcZCspXFxcXHMqXCIsXG4gICAgcmVOID0gXCJcXFxccyooWystXT9cXFxcZCpcXFxcLj9cXFxcZCsoPzpbZUVdWystXT9cXFxcZCspPylcXFxccypcIixcbiAgICByZVAgPSBcIlxcXFxzKihbKy1dP1xcXFxkKlxcXFwuP1xcXFxkKyg/OltlRV1bKy1dP1xcXFxkKyk/KSVcXFxccypcIixcbiAgICByZUhleCA9IC9eIyhbMC05YS1mXXszLDh9KSQvLFxuICAgIHJlUmdiSW50ZWdlciA9IG5ldyBSZWdFeHAoXCJecmdiXFxcXChcIiArIFtyZUksIHJlSSwgcmVJXSArIFwiXFxcXCkkXCIpLFxuICAgIHJlUmdiUGVyY2VudCA9IG5ldyBSZWdFeHAoXCJecmdiXFxcXChcIiArIFtyZVAsIHJlUCwgcmVQXSArIFwiXFxcXCkkXCIpLFxuICAgIHJlUmdiYUludGVnZXIgPSBuZXcgUmVnRXhwKFwiXnJnYmFcXFxcKFwiICsgW3JlSSwgcmVJLCByZUksIHJlTl0gKyBcIlxcXFwpJFwiKSxcbiAgICByZVJnYmFQZXJjZW50ID0gbmV3IFJlZ0V4cChcIl5yZ2JhXFxcXChcIiArIFtyZVAsIHJlUCwgcmVQLCByZU5dICsgXCJcXFxcKSRcIiksXG4gICAgcmVIc2xQZXJjZW50ID0gbmV3IFJlZ0V4cChcIl5oc2xcXFxcKFwiICsgW3JlTiwgcmVQLCByZVBdICsgXCJcXFxcKSRcIiksXG4gICAgcmVIc2xhUGVyY2VudCA9IG5ldyBSZWdFeHAoXCJeaHNsYVxcXFwoXCIgKyBbcmVOLCByZVAsIHJlUCwgcmVOXSArIFwiXFxcXCkkXCIpO1xuXG52YXIgbmFtZWQgPSB7XG4gIGFsaWNlYmx1ZTogMHhmMGY4ZmYsXG4gIGFudGlxdWV3aGl0ZTogMHhmYWViZDcsXG4gIGFxdWE6IDB4MDBmZmZmLFxuICBhcXVhbWFyaW5lOiAweDdmZmZkNCxcbiAgYXp1cmU6IDB4ZjBmZmZmLFxuICBiZWlnZTogMHhmNWY1ZGMsXG4gIGJpc3F1ZTogMHhmZmU0YzQsXG4gIGJsYWNrOiAweDAwMDAwMCxcbiAgYmxhbmNoZWRhbG1vbmQ6IDB4ZmZlYmNkLFxuICBibHVlOiAweDAwMDBmZixcbiAgYmx1ZXZpb2xldDogMHg4YTJiZTIsXG4gIGJyb3duOiAweGE1MmEyYSxcbiAgYnVybHl3b29kOiAweGRlYjg4NyxcbiAgY2FkZXRibHVlOiAweDVmOWVhMCxcbiAgY2hhcnRyZXVzZTogMHg3ZmZmMDAsXG4gIGNob2NvbGF0ZTogMHhkMjY5MWUsXG4gIGNvcmFsOiAweGZmN2Y1MCxcbiAgY29ybmZsb3dlcmJsdWU6IDB4NjQ5NWVkLFxuICBjb3Juc2lsazogMHhmZmY4ZGMsXG4gIGNyaW1zb246IDB4ZGMxNDNjLFxuICBjeWFuOiAweDAwZmZmZixcbiAgZGFya2JsdWU6IDB4MDAwMDhiLFxuICBkYXJrY3lhbjogMHgwMDhiOGIsXG4gIGRhcmtnb2xkZW5yb2Q6IDB4Yjg4NjBiLFxuICBkYXJrZ3JheTogMHhhOWE5YTksXG4gIGRhcmtncmVlbjogMHgwMDY0MDAsXG4gIGRhcmtncmV5OiAweGE5YTlhOSxcbiAgZGFya2toYWtpOiAweGJkYjc2YixcbiAgZGFya21hZ2VudGE6IDB4OGIwMDhiLFxuICBkYXJrb2xpdmVncmVlbjogMHg1NTZiMmYsXG4gIGRhcmtvcmFuZ2U6IDB4ZmY4YzAwLFxuICBkYXJrb3JjaGlkOiAweDk5MzJjYyxcbiAgZGFya3JlZDogMHg4YjAwMDAsXG4gIGRhcmtzYWxtb246IDB4ZTk5NjdhLFxuICBkYXJrc2VhZ3JlZW46IDB4OGZiYzhmLFxuICBkYXJrc2xhdGVibHVlOiAweDQ4M2Q4YixcbiAgZGFya3NsYXRlZ3JheTogMHgyZjRmNGYsXG4gIGRhcmtzbGF0ZWdyZXk6IDB4MmY0ZjRmLFxuICBkYXJrdHVycXVvaXNlOiAweDAwY2VkMSxcbiAgZGFya3Zpb2xldDogMHg5NDAwZDMsXG4gIGRlZXBwaW5rOiAweGZmMTQ5MyxcbiAgZGVlcHNreWJsdWU6IDB4MDBiZmZmLFxuICBkaW1ncmF5OiAweDY5Njk2OSxcbiAgZGltZ3JleTogMHg2OTY5NjksXG4gIGRvZGdlcmJsdWU6IDB4MWU5MGZmLFxuICBmaXJlYnJpY2s6IDB4YjIyMjIyLFxuICBmbG9yYWx3aGl0ZTogMHhmZmZhZjAsXG4gIGZvcmVzdGdyZWVuOiAweDIyOGIyMixcbiAgZnVjaHNpYTogMHhmZjAwZmYsXG4gIGdhaW5zYm9ybzogMHhkY2RjZGMsXG4gIGdob3N0d2hpdGU6IDB4ZjhmOGZmLFxuICBnb2xkOiAweGZmZDcwMCxcbiAgZ29sZGVucm9kOiAweGRhYTUyMCxcbiAgZ3JheTogMHg4MDgwODAsXG4gIGdyZWVuOiAweDAwODAwMCxcbiAgZ3JlZW55ZWxsb3c6IDB4YWRmZjJmLFxuICBncmV5OiAweDgwODA4MCxcbiAgaG9uZXlkZXc6IDB4ZjBmZmYwLFxuICBob3RwaW5rOiAweGZmNjliNCxcbiAgaW5kaWFucmVkOiAweGNkNWM1YyxcbiAgaW5kaWdvOiAweDRiMDA4MixcbiAgaXZvcnk6IDB4ZmZmZmYwLFxuICBraGFraTogMHhmMGU2OGMsXG4gIGxhdmVuZGVyOiAweGU2ZTZmYSxcbiAgbGF2ZW5kZXJibHVzaDogMHhmZmYwZjUsXG4gIGxhd25ncmVlbjogMHg3Y2ZjMDAsXG4gIGxlbW9uY2hpZmZvbjogMHhmZmZhY2QsXG4gIGxpZ2h0Ymx1ZTogMHhhZGQ4ZTYsXG4gIGxpZ2h0Y29yYWw6IDB4ZjA4MDgwLFxuICBsaWdodGN5YW46IDB4ZTBmZmZmLFxuICBsaWdodGdvbGRlbnJvZHllbGxvdzogMHhmYWZhZDIsXG4gIGxpZ2h0Z3JheTogMHhkM2QzZDMsXG4gIGxpZ2h0Z3JlZW46IDB4OTBlZTkwLFxuICBsaWdodGdyZXk6IDB4ZDNkM2QzLFxuICBsaWdodHBpbms6IDB4ZmZiNmMxLFxuICBsaWdodHNhbG1vbjogMHhmZmEwN2EsXG4gIGxpZ2h0c2VhZ3JlZW46IDB4MjBiMmFhLFxuICBsaWdodHNreWJsdWU6IDB4ODdjZWZhLFxuICBsaWdodHNsYXRlZ3JheTogMHg3Nzg4OTksXG4gIGxpZ2h0c2xhdGVncmV5OiAweDc3ODg5OSxcbiAgbGlnaHRzdGVlbGJsdWU6IDB4YjBjNGRlLFxuICBsaWdodHllbGxvdzogMHhmZmZmZTAsXG4gIGxpbWU6IDB4MDBmZjAwLFxuICBsaW1lZ3JlZW46IDB4MzJjZDMyLFxuICBsaW5lbjogMHhmYWYwZTYsXG4gIG1hZ2VudGE6IDB4ZmYwMGZmLFxuICBtYXJvb246IDB4ODAwMDAwLFxuICBtZWRpdW1hcXVhbWFyaW5lOiAweDY2Y2RhYSxcbiAgbWVkaXVtYmx1ZTogMHgwMDAwY2QsXG4gIG1lZGl1bW9yY2hpZDogMHhiYTU1ZDMsXG4gIG1lZGl1bXB1cnBsZTogMHg5MzcwZGIsXG4gIG1lZGl1bXNlYWdyZWVuOiAweDNjYjM3MSxcbiAgbWVkaXVtc2xhdGVibHVlOiAweDdiNjhlZSxcbiAgbWVkaXVtc3ByaW5nZ3JlZW46IDB4MDBmYTlhLFxuICBtZWRpdW10dXJxdW9pc2U6IDB4NDhkMWNjLFxuICBtZWRpdW12aW9sZXRyZWQ6IDB4YzcxNTg1LFxuICBtaWRuaWdodGJsdWU6IDB4MTkxOTcwLFxuICBtaW50Y3JlYW06IDB4ZjVmZmZhLFxuICBtaXN0eXJvc2U6IDB4ZmZlNGUxLFxuICBtb2NjYXNpbjogMHhmZmU0YjUsXG4gIG5hdmFqb3doaXRlOiAweGZmZGVhZCxcbiAgbmF2eTogMHgwMDAwODAsXG4gIG9sZGxhY2U6IDB4ZmRmNWU2LFxuICBvbGl2ZTogMHg4MDgwMDAsXG4gIG9saXZlZHJhYjogMHg2YjhlMjMsXG4gIG9yYW5nZTogMHhmZmE1MDAsXG4gIG9yYW5nZXJlZDogMHhmZjQ1MDAsXG4gIG9yY2hpZDogMHhkYTcwZDYsXG4gIHBhbGVnb2xkZW5yb2Q6IDB4ZWVlOGFhLFxuICBwYWxlZ3JlZW46IDB4OThmYjk4LFxuICBwYWxldHVycXVvaXNlOiAweGFmZWVlZSxcbiAgcGFsZXZpb2xldHJlZDogMHhkYjcwOTMsXG4gIHBhcGF5YXdoaXA6IDB4ZmZlZmQ1LFxuICBwZWFjaHB1ZmY6IDB4ZmZkYWI5LFxuICBwZXJ1OiAweGNkODUzZixcbiAgcGluazogMHhmZmMwY2IsXG4gIHBsdW06IDB4ZGRhMGRkLFxuICBwb3dkZXJibHVlOiAweGIwZTBlNixcbiAgcHVycGxlOiAweDgwMDA4MCxcbiAgcmViZWNjYXB1cnBsZTogMHg2NjMzOTksXG4gIHJlZDogMHhmZjAwMDAsXG4gIHJvc3licm93bjogMHhiYzhmOGYsXG4gIHJveWFsYmx1ZTogMHg0MTY5ZTEsXG4gIHNhZGRsZWJyb3duOiAweDhiNDUxMyxcbiAgc2FsbW9uOiAweGZhODA3MixcbiAgc2FuZHlicm93bjogMHhmNGE0NjAsXG4gIHNlYWdyZWVuOiAweDJlOGI1NyxcbiAgc2Vhc2hlbGw6IDB4ZmZmNWVlLFxuICBzaWVubmE6IDB4YTA1MjJkLFxuICBzaWx2ZXI6IDB4YzBjMGMwLFxuICBza3libHVlOiAweDg3Y2VlYixcbiAgc2xhdGVibHVlOiAweDZhNWFjZCxcbiAgc2xhdGVncmF5OiAweDcwODA5MCxcbiAgc2xhdGVncmV5OiAweDcwODA5MCxcbiAgc25vdzogMHhmZmZhZmEsXG4gIHNwcmluZ2dyZWVuOiAweDAwZmY3ZixcbiAgc3RlZWxibHVlOiAweDQ2ODJiNCxcbiAgdGFuOiAweGQyYjQ4YyxcbiAgdGVhbDogMHgwMDgwODAsXG4gIHRoaXN0bGU6IDB4ZDhiZmQ4LFxuICB0b21hdG86IDB4ZmY2MzQ3LFxuICB0dXJxdW9pc2U6IDB4NDBlMGQwLFxuICB2aW9sZXQ6IDB4ZWU4MmVlLFxuICB3aGVhdDogMHhmNWRlYjMsXG4gIHdoaXRlOiAweGZmZmZmZixcbiAgd2hpdGVzbW9rZTogMHhmNWY1ZjUsXG4gIHllbGxvdzogMHhmZmZmMDAsXG4gIHllbGxvd2dyZWVuOiAweDlhY2QzMlxufTtcblxuZGVmaW5lKENvbG9yLCBjb2xvciwge1xuICBjb3B5OiBmdW5jdGlvbihjaGFubmVscykge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLCB0aGlzLCBjaGFubmVscyk7XG4gIH0sXG4gIGRpc3BsYXlhYmxlOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpO1xuICB9LFxuICBoZXg6IGNvbG9yX2Zvcm1hdEhleCwgLy8gRGVwcmVjYXRlZCEgVXNlIGNvbG9yLmZvcm1hdEhleC5cbiAgZm9ybWF0SGV4OiBjb2xvcl9mb3JtYXRIZXgsXG4gIGZvcm1hdEhzbDogY29sb3JfZm9ybWF0SHNsLFxuICBmb3JtYXRSZ2I6IGNvbG9yX2Zvcm1hdFJnYixcbiAgdG9TdHJpbmc6IGNvbG9yX2Zvcm1hdFJnYlxufSk7XG5cbmZ1bmN0aW9uIGNvbG9yX2Zvcm1hdEhleCgpIHtcbiAgcmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCk7XG59XG5cbmZ1bmN0aW9uIGNvbG9yX2Zvcm1hdEhzbCgpIHtcbiAgcmV0dXJuIGhzbENvbnZlcnQodGhpcykuZm9ybWF0SHNsKCk7XG59XG5cbmZ1bmN0aW9uIGNvbG9yX2Zvcm1hdFJnYigpIHtcbiAgcmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbG9yKGZvcm1hdCkge1xuICB2YXIgbSwgbDtcbiAgZm9ybWF0ID0gKGZvcm1hdCArIFwiXCIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gKG0gPSByZUhleC5leGVjKGZvcm1hdCkpID8gKGwgPSBtWzFdLmxlbmd0aCwgbSA9IHBhcnNlSW50KG1bMV0sIDE2KSwgbCA9PT0gNiA/IHJnYm4obSkgLy8gI2ZmMDAwMFxuICAgICAgOiBsID09PSAzID8gbmV3IFJnYigobSA+PiA4ICYgMHhmKSB8IChtID4+IDQgJiAweGYwKSwgKG0gPj4gNCAmIDB4ZikgfCAobSAmIDB4ZjApLCAoKG0gJiAweGYpIDw8IDQpIHwgKG0gJiAweGYpLCAxKSAvLyAjZjAwXG4gICAgICA6IGwgPT09IDggPyByZ2JhKG0gPj4gMjQgJiAweGZmLCBtID4+IDE2ICYgMHhmZiwgbSA+PiA4ICYgMHhmZiwgKG0gJiAweGZmKSAvIDB4ZmYpIC8vICNmZjAwMDAwMFxuICAgICAgOiBsID09PSA0ID8gcmdiYSgobSA+PiAxMiAmIDB4ZikgfCAobSA+PiA4ICYgMHhmMCksIChtID4+IDggJiAweGYpIHwgKG0gPj4gNCAmIDB4ZjApLCAobSA+PiA0ICYgMHhmKSB8IChtICYgMHhmMCksICgoKG0gJiAweGYpIDw8IDQpIHwgKG0gJiAweGYpKSAvIDB4ZmYpIC8vICNmMDAwXG4gICAgICA6IG51bGwpIC8vIGludmFsaWQgaGV4XG4gICAgICA6IChtID0gcmVSZ2JJbnRlZ2VyLmV4ZWMoZm9ybWF0KSkgPyBuZXcgUmdiKG1bMV0sIG1bMl0sIG1bM10sIDEpIC8vIHJnYigyNTUsIDAsIDApXG4gICAgICA6IChtID0gcmVSZ2JQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyBuZXcgUmdiKG1bMV0gKiAyNTUgLyAxMDAsIG1bMl0gKiAyNTUgLyAxMDAsIG1bM10gKiAyNTUgLyAxMDAsIDEpIC8vIHJnYigxMDAlLCAwJSwgMCUpXG4gICAgICA6IChtID0gcmVSZ2JhSW50ZWdlci5leGVjKGZvcm1hdCkpID8gcmdiYShtWzFdLCBtWzJdLCBtWzNdLCBtWzRdKSAvLyByZ2JhKDI1NSwgMCwgMCwgMSlcbiAgICAgIDogKG0gPSByZVJnYmFQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyByZ2JhKG1bMV0gKiAyNTUgLyAxMDAsIG1bMl0gKiAyNTUgLyAxMDAsIG1bM10gKiAyNTUgLyAxMDAsIG1bNF0pIC8vIHJnYigxMDAlLCAwJSwgMCUsIDEpXG4gICAgICA6IChtID0gcmVIc2xQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyBoc2xhKG1bMV0sIG1bMl0gLyAxMDAsIG1bM10gLyAxMDAsIDEpIC8vIGhzbCgxMjAsIDUwJSwgNTAlKVxuICAgICAgOiAobSA9IHJlSHNsYVBlcmNlbnQuZXhlYyhmb3JtYXQpKSA/IGhzbGEobVsxXSwgbVsyXSAvIDEwMCwgbVszXSAvIDEwMCwgbVs0XSkgLy8gaHNsYSgxMjAsIDUwJSwgNTAlLCAxKVxuICAgICAgOiBuYW1lZC5oYXNPd25Qcm9wZXJ0eShmb3JtYXQpID8gcmdibihuYW1lZFtmb3JtYXRdKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgOiBmb3JtYXQgPT09IFwidHJhbnNwYXJlbnRcIiA/IG5ldyBSZ2IoTmFOLCBOYU4sIE5hTiwgMClcbiAgICAgIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gcmdibihuKSB7XG4gIHJldHVybiBuZXcgUmdiKG4gPj4gMTYgJiAweGZmLCBuID4+IDggJiAweGZmLCBuICYgMHhmZiwgMSk7XG59XG5cbmZ1bmN0aW9uIHJnYmEociwgZywgYiwgYSkge1xuICBpZiAoYSA8PSAwKSByID0gZyA9IGIgPSBOYU47XG4gIHJldHVybiBuZXcgUmdiKHIsIGcsIGIsIGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmdiQ29udmVydChvKSB7XG4gIGlmICghKG8gaW5zdGFuY2VvZiBDb2xvcikpIG8gPSBjb2xvcihvKTtcbiAgaWYgKCFvKSByZXR1cm4gbmV3IFJnYjtcbiAgbyA9IG8ucmdiKCk7XG4gIHJldHVybiBuZXcgUmdiKG8uciwgby5nLCBvLmIsIG8ub3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZ2IociwgZywgYiwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IHJnYkNvbnZlcnQocikgOiBuZXcgUmdiKHIsIGcsIGIsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJnYihyLCBnLCBiLCBvcGFjaXR5KSB7XG4gIHRoaXMuciA9ICtyO1xuICB0aGlzLmcgPSArZztcbiAgdGhpcy5iID0gK2I7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5kZWZpbmUoUmdiLCByZ2IsIGV4dGVuZChDb2xvciwge1xuICBicmlnaHRlcjogZnVuY3Rpb24oaykge1xuICAgIGsgPSBrID09IG51bGwgPyBicmlnaHRlciA6IE1hdGgucG93KGJyaWdodGVyLCBrKTtcbiAgICByZXR1cm4gbmV3IFJnYih0aGlzLnIgKiBrLCB0aGlzLmcgKiBrLCB0aGlzLmIgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gZGFya2VyIDogTWF0aC5wb3coZGFya2VyLCBrKTtcbiAgICByZXR1cm4gbmV3IFJnYih0aGlzLnIgKiBrLCB0aGlzLmcgKiBrLCB0aGlzLmIgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICByZ2I6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBkaXNwbGF5YWJsZTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICgtMC41IDw9IHRoaXMuciAmJiB0aGlzLnIgPCAyNTUuNSlcbiAgICAgICAgJiYgKC0wLjUgPD0gdGhpcy5nICYmIHRoaXMuZyA8IDI1NS41KVxuICAgICAgICAmJiAoLTAuNSA8PSB0aGlzLmIgJiYgdGhpcy5iIDwgMjU1LjUpXG4gICAgICAgICYmICgwIDw9IHRoaXMub3BhY2l0eSAmJiB0aGlzLm9wYWNpdHkgPD0gMSk7XG4gIH0sXG4gIGhleDogcmdiX2Zvcm1hdEhleCwgLy8gRGVwcmVjYXRlZCEgVXNlIGNvbG9yLmZvcm1hdEhleC5cbiAgZm9ybWF0SGV4OiByZ2JfZm9ybWF0SGV4LFxuICBmb3JtYXRSZ2I6IHJnYl9mb3JtYXRSZ2IsXG4gIHRvU3RyaW5nOiByZ2JfZm9ybWF0UmdiXG59KSk7XG5cbmZ1bmN0aW9uIHJnYl9mb3JtYXRIZXgoKSB7XG4gIHJldHVybiBcIiNcIiArIGhleCh0aGlzLnIpICsgaGV4KHRoaXMuZykgKyBoZXgodGhpcy5iKTtcbn1cblxuZnVuY3Rpb24gcmdiX2Zvcm1hdFJnYigpIHtcbiAgdmFyIGEgPSB0aGlzLm9wYWNpdHk7IGEgPSBpc05hTihhKSA/IDEgOiBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBhKSk7XG4gIHJldHVybiAoYSA9PT0gMSA/IFwicmdiKFwiIDogXCJyZ2JhKFwiKVxuICAgICAgKyBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQodGhpcy5yKSB8fCAwKSkgKyBcIiwgXCJcbiAgICAgICsgTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKHRoaXMuZykgfHwgMCkpICsgXCIsIFwiXG4gICAgICArIE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCh0aGlzLmIpIHx8IDApKVxuICAgICAgKyAoYSA9PT0gMSA/IFwiKVwiIDogXCIsIFwiICsgYSArIFwiKVwiKTtcbn1cblxuZnVuY3Rpb24gaGV4KHZhbHVlKSB7XG4gIHZhbHVlID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKHZhbHVlKSB8fCAwKSk7XG4gIHJldHVybiAodmFsdWUgPCAxNiA/IFwiMFwiIDogXCJcIikgKyB2YWx1ZS50b1N0cmluZygxNik7XG59XG5cbmZ1bmN0aW9uIGhzbGEoaCwgcywgbCwgYSkge1xuICBpZiAoYSA8PSAwKSBoID0gcyA9IGwgPSBOYU47XG4gIGVsc2UgaWYgKGwgPD0gMCB8fCBsID49IDEpIGggPSBzID0gTmFOO1xuICBlbHNlIGlmIChzIDw9IDApIGggPSBOYU47XG4gIHJldHVybiBuZXcgSHNsKGgsIHMsIGwsIGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHNsQ29udmVydChvKSB7XG4gIGlmIChvIGluc3RhbmNlb2YgSHNsKSByZXR1cm4gbmV3IEhzbChvLmgsIG8ucywgby5sLCBvLm9wYWNpdHkpO1xuICBpZiAoIShvIGluc3RhbmNlb2YgQ29sb3IpKSBvID0gY29sb3Iobyk7XG4gIGlmICghbykgcmV0dXJuIG5ldyBIc2w7XG4gIGlmIChvIGluc3RhbmNlb2YgSHNsKSByZXR1cm4gbztcbiAgbyA9IG8ucmdiKCk7XG4gIHZhciByID0gby5yIC8gMjU1LFxuICAgICAgZyA9IG8uZyAvIDI1NSxcbiAgICAgIGIgPSBvLmIgLyAyNTUsXG4gICAgICBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKSxcbiAgICAgIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLFxuICAgICAgaCA9IE5hTixcbiAgICAgIHMgPSBtYXggLSBtaW4sXG4gICAgICBsID0gKG1heCArIG1pbikgLyAyO1xuICBpZiAocykge1xuICAgIGlmIChyID09PSBtYXgpIGggPSAoZyAtIGIpIC8gcyArIChnIDwgYikgKiA2O1xuICAgIGVsc2UgaWYgKGcgPT09IG1heCkgaCA9IChiIC0gcikgLyBzICsgMjtcbiAgICBlbHNlIGggPSAociAtIGcpIC8gcyArIDQ7XG4gICAgcyAvPSBsIDwgMC41ID8gbWF4ICsgbWluIDogMiAtIG1heCAtIG1pbjtcbiAgICBoICo9IDYwO1xuICB9IGVsc2Uge1xuICAgIHMgPSBsID4gMCAmJiBsIDwgMSA/IDAgOiBoO1xuICB9XG4gIHJldHVybiBuZXcgSHNsKGgsIHMsIGwsIG8ub3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoc2woaCwgcywgbCwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGhzbENvbnZlcnQoaCkgOiBuZXcgSHNsKGgsIHMsIGwsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZnVuY3Rpb24gSHNsKGgsIHMsIGwsIG9wYWNpdHkpIHtcbiAgdGhpcy5oID0gK2g7XG4gIHRoaXMucyA9ICtzO1xuICB0aGlzLmwgPSArbDtcbiAgdGhpcy5vcGFjaXR5ID0gK29wYWNpdHk7XG59XG5cbmRlZmluZShIc2wsIGhzbCwgZXh0ZW5kKENvbG9yLCB7XG4gIGJyaWdodGVyOiBmdW5jdGlvbihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGJyaWdodGVyIDogTWF0aC5wb3coYnJpZ2h0ZXIsIGspO1xuICAgIHJldHVybiBuZXcgSHNsKHRoaXMuaCwgdGhpcy5zLCB0aGlzLmwgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gZGFya2VyIDogTWF0aC5wb3coZGFya2VyLCBrKTtcbiAgICByZXR1cm4gbmV3IEhzbCh0aGlzLmgsIHRoaXMucywgdGhpcy5sICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgcmdiOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgaCA9IHRoaXMuaCAlIDM2MCArICh0aGlzLmggPCAwKSAqIDM2MCxcbiAgICAgICAgcyA9IGlzTmFOKGgpIHx8IGlzTmFOKHRoaXMucykgPyAwIDogdGhpcy5zLFxuICAgICAgICBsID0gdGhpcy5sLFxuICAgICAgICBtMiA9IGwgKyAobCA8IDAuNSA/IGwgOiAxIC0gbCkgKiBzLFxuICAgICAgICBtMSA9IDIgKiBsIC0gbTI7XG4gICAgcmV0dXJuIG5ldyBSZ2IoXG4gICAgICBoc2wycmdiKGggPj0gMjQwID8gaCAtIDI0MCA6IGggKyAxMjAsIG0xLCBtMiksXG4gICAgICBoc2wycmdiKGgsIG0xLCBtMiksXG4gICAgICBoc2wycmdiKGggPCAxMjAgPyBoICsgMjQwIDogaCAtIDEyMCwgbTEsIG0yKSxcbiAgICAgIHRoaXMub3BhY2l0eVxuICAgICk7XG4gIH0sXG4gIGRpc3BsYXlhYmxlOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gKDAgPD0gdGhpcy5zICYmIHRoaXMucyA8PSAxIHx8IGlzTmFOKHRoaXMucykpXG4gICAgICAgICYmICgwIDw9IHRoaXMubCAmJiB0aGlzLmwgPD0gMSlcbiAgICAgICAgJiYgKDAgPD0gdGhpcy5vcGFjaXR5ICYmIHRoaXMub3BhY2l0eSA8PSAxKTtcbiAgfSxcbiAgZm9ybWF0SHNsOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYSA9IHRoaXMub3BhY2l0eTsgYSA9IGlzTmFOKGEpID8gMSA6IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIGEpKTtcbiAgICByZXR1cm4gKGEgPT09IDEgPyBcImhzbChcIiA6IFwiaHNsYShcIilcbiAgICAgICAgKyAodGhpcy5oIHx8IDApICsgXCIsIFwiXG4gICAgICAgICsgKHRoaXMucyB8fCAwKSAqIDEwMCArIFwiJSwgXCJcbiAgICAgICAgKyAodGhpcy5sIHx8IDApICogMTAwICsgXCIlXCJcbiAgICAgICAgKyAoYSA9PT0gMSA/IFwiKVwiIDogXCIsIFwiICsgYSArIFwiKVwiKTtcbiAgfVxufSkpO1xuXG4vKiBGcm9tIEZ2RCAxMy4zNywgQ1NTIENvbG9yIE1vZHVsZSBMZXZlbCAzICovXG5mdW5jdGlvbiBoc2wycmdiKGgsIG0xLCBtMikge1xuICByZXR1cm4gKGggPCA2MCA/IG0xICsgKG0yIC0gbTEpICogaCAvIDYwXG4gICAgICA6IGggPCAxODAgPyBtMlxuICAgICAgOiBoIDwgMjQwID8gbTEgKyAobTIgLSBtMSkgKiAoMjQwIC0gaCkgLyA2MFxuICAgICAgOiBtMSkgKiAyNTU7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gYmFzaXModDEsIHYwLCB2MSwgdjIsIHYzKSB7XG4gIHZhciB0MiA9IHQxICogdDEsIHQzID0gdDIgKiB0MTtcbiAgcmV0dXJuICgoMSAtIDMgKiB0MSArIDMgKiB0MiAtIHQzKSAqIHYwXG4gICAgICArICg0IC0gNiAqIHQyICsgMyAqIHQzKSAqIHYxXG4gICAgICArICgxICsgMyAqIHQxICsgMyAqIHQyIC0gMyAqIHQzKSAqIHYyXG4gICAgICArIHQzICogdjMpIC8gNjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWVzKSB7XG4gIHZhciBuID0gdmFsdWVzLmxlbmd0aCAtIDE7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdmFyIGkgPSB0IDw9IDAgPyAodCA9IDApIDogdCA+PSAxID8gKHQgPSAxLCBuIC0gMSkgOiBNYXRoLmZsb29yKHQgKiBuKSxcbiAgICAgICAgdjEgPSB2YWx1ZXNbaV0sXG4gICAgICAgIHYyID0gdmFsdWVzW2kgKyAxXSxcbiAgICAgICAgdjAgPSBpID4gMCA/IHZhbHVlc1tpIC0gMV0gOiAyICogdjEgLSB2MixcbiAgICAgICAgdjMgPSBpIDwgbiAtIDEgPyB2YWx1ZXNbaSArIDJdIDogMiAqIHYyIC0gdjE7XG4gICAgcmV0dXJuIGJhc2lzKCh0IC0gaSAvIG4pICogbiwgdjAsIHYxLCB2MiwgdjMpO1xuICB9O1xufVxuIiwiaW1wb3J0IHtiYXNpc30gZnJvbSBcIi4vYmFzaXMuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWVzKSB7XG4gIHZhciBuID0gdmFsdWVzLmxlbmd0aDtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgaSA9IE1hdGguZmxvb3IoKCh0ICU9IDEpIDwgMCA/ICsrdCA6IHQpICogbiksXG4gICAgICAgIHYwID0gdmFsdWVzWyhpICsgbiAtIDEpICUgbl0sXG4gICAgICAgIHYxID0gdmFsdWVzW2kgJSBuXSxcbiAgICAgICAgdjIgPSB2YWx1ZXNbKGkgKyAxKSAlIG5dLFxuICAgICAgICB2MyA9IHZhbHVlc1soaSArIDIpICUgbl07XG4gICAgcmV0dXJuIGJhc2lzKCh0IC0gaSAvIG4pICogbiwgdjAsIHYxLCB2MiwgdjMpO1xuICB9O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgeCA9PiAoKSA9PiB4O1xuIiwiaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50LmpzXCI7XG5cbmZ1bmN0aW9uIGxpbmVhcihhLCBkKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGEgKyB0ICogZDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZXhwb25lbnRpYWwoYSwgYiwgeSkge1xuICByZXR1cm4gYSA9IE1hdGgucG93KGEsIHkpLCBiID0gTWF0aC5wb3coYiwgeSkgLSBhLCB5ID0gMSAvIHksIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gTWF0aC5wb3coYSArIHQgKiBiLCB5KTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh1ZShhLCBiKSB7XG4gIHZhciBkID0gYiAtIGE7XG4gIHJldHVybiBkID8gbGluZWFyKGEsIGQgPiAxODAgfHwgZCA8IC0xODAgPyBkIC0gMzYwICogTWF0aC5yb3VuZChkIC8gMzYwKSA6IGQpIDogY29uc3RhbnQoaXNOYU4oYSkgPyBiIDogYSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnYW1tYSh5KSB7XG4gIHJldHVybiAoeSA9ICt5KSA9PT0gMSA/IG5vZ2FtbWEgOiBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGIgLSBhID8gZXhwb25lbnRpYWwoYSwgYiwgeSkgOiBjb25zdGFudChpc05hTihhKSA/IGIgOiBhKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbm9nYW1tYShhLCBiKSB7XG4gIHZhciBkID0gYiAtIGE7XG4gIHJldHVybiBkID8gbGluZWFyKGEsIGQpIDogY29uc3RhbnQoaXNOYU4oYSkgPyBiIDogYSk7XG59XG4iLCJpbXBvcnQge3JnYiBhcyBjb2xvclJnYn0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQgYmFzaXMgZnJvbSBcIi4vYmFzaXMuanNcIjtcbmltcG9ydCBiYXNpc0Nsb3NlZCBmcm9tIFwiLi9iYXNpc0Nsb3NlZC5qc1wiO1xuaW1wb3J0IG5vZ2FtbWEsIHtnYW1tYX0gZnJvbSBcIi4vY29sb3IuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIHJnYkdhbW1hKHkpIHtcbiAgdmFyIGNvbG9yID0gZ2FtbWEoeSk7XG5cbiAgZnVuY3Rpb24gcmdiKHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgciA9IGNvbG9yKChzdGFydCA9IGNvbG9yUmdiKHN0YXJ0KSkuciwgKGVuZCA9IGNvbG9yUmdiKGVuZCkpLnIpLFxuICAgICAgICBnID0gY29sb3Ioc3RhcnQuZywgZW5kLmcpLFxuICAgICAgICBiID0gY29sb3Ioc3RhcnQuYiwgZW5kLmIpLFxuICAgICAgICBvcGFjaXR5ID0gbm9nYW1tYShzdGFydC5vcGFjaXR5LCBlbmQub3BhY2l0eSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIHN0YXJ0LnIgPSByKHQpO1xuICAgICAgc3RhcnQuZyA9IGcodCk7XG4gICAgICBzdGFydC5iID0gYih0KTtcbiAgICAgIHN0YXJ0Lm9wYWNpdHkgPSBvcGFjaXR5KHQpO1xuICAgICAgcmV0dXJuIHN0YXJ0ICsgXCJcIjtcbiAgICB9O1xuICB9XG5cbiAgcmdiLmdhbW1hID0gcmdiR2FtbWE7XG5cbiAgcmV0dXJuIHJnYjtcbn0pKDEpO1xuXG5mdW5jdGlvbiByZ2JTcGxpbmUoc3BsaW5lKSB7XG4gIHJldHVybiBmdW5jdGlvbihjb2xvcnMpIHtcbiAgICB2YXIgbiA9IGNvbG9ycy5sZW5ndGgsXG4gICAgICAgIHIgPSBuZXcgQXJyYXkobiksXG4gICAgICAgIGcgPSBuZXcgQXJyYXkobiksXG4gICAgICAgIGIgPSBuZXcgQXJyYXkobiksXG4gICAgICAgIGksIGNvbG9yO1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGNvbG9yID0gY29sb3JSZ2IoY29sb3JzW2ldKTtcbiAgICAgIHJbaV0gPSBjb2xvci5yIHx8IDA7XG4gICAgICBnW2ldID0gY29sb3IuZyB8fCAwO1xuICAgICAgYltpXSA9IGNvbG9yLmIgfHwgMDtcbiAgICB9XG4gICAgciA9IHNwbGluZShyKTtcbiAgICBnID0gc3BsaW5lKGcpO1xuICAgIGIgPSBzcGxpbmUoYik7XG4gICAgY29sb3Iub3BhY2l0eSA9IDE7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIGNvbG9yLnIgPSByKHQpO1xuICAgICAgY29sb3IuZyA9IGcodCk7XG4gICAgICBjb2xvci5iID0gYih0KTtcbiAgICAgIHJldHVybiBjb2xvciArIFwiXCI7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IHZhciByZ2JCYXNpcyA9IHJnYlNwbGluZShiYXNpcyk7XG5leHBvcnQgdmFyIHJnYkJhc2lzQ2xvc2VkID0gcmdiU3BsaW5lKGJhc2lzQ2xvc2VkKTtcbiIsImltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyLmpzXCI7XG5cbnZhciByZUEgPSAvWy0rXT8oPzpcXGQrXFwuP1xcZCp8XFwuP1xcZCspKD86W2VFXVstK10/XFxkKyk/L2csXG4gICAgcmVCID0gbmV3IFJlZ0V4cChyZUEuc291cmNlLCBcImdcIik7XG5cbmZ1bmN0aW9uIHplcm8oYikge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGI7XG4gIH07XG59XG5cbmZ1bmN0aW9uIG9uZShiKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGIodCkgKyBcIlwiO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBiaSA9IHJlQS5sYXN0SW5kZXggPSByZUIubGFzdEluZGV4ID0gMCwgLy8gc2NhbiBpbmRleCBmb3IgbmV4dCBudW1iZXIgaW4gYlxuICAgICAgYW0sIC8vIGN1cnJlbnQgbWF0Y2ggaW4gYVxuICAgICAgYm0sIC8vIGN1cnJlbnQgbWF0Y2ggaW4gYlxuICAgICAgYnMsIC8vIHN0cmluZyBwcmVjZWRpbmcgY3VycmVudCBudW1iZXIgaW4gYiwgaWYgYW55XG4gICAgICBpID0gLTEsIC8vIGluZGV4IGluIHNcbiAgICAgIHMgPSBbXSwgLy8gc3RyaW5nIGNvbnN0YW50cyBhbmQgcGxhY2Vob2xkZXJzXG4gICAgICBxID0gW107IC8vIG51bWJlciBpbnRlcnBvbGF0b3JzXG5cbiAgLy8gQ29lcmNlIGlucHV0cyB0byBzdHJpbmdzLlxuICBhID0gYSArIFwiXCIsIGIgPSBiICsgXCJcIjtcblxuICAvLyBJbnRlcnBvbGF0ZSBwYWlycyBvZiBudW1iZXJzIGluIGEgJiBiLlxuICB3aGlsZSAoKGFtID0gcmVBLmV4ZWMoYSkpXG4gICAgICAmJiAoYm0gPSByZUIuZXhlYyhiKSkpIHtcbiAgICBpZiAoKGJzID0gYm0uaW5kZXgpID4gYmkpIHsgLy8gYSBzdHJpbmcgcHJlY2VkZXMgdGhlIG5leHQgbnVtYmVyIGluIGJcbiAgICAgIGJzID0gYi5zbGljZShiaSwgYnMpO1xuICAgICAgaWYgKHNbaV0pIHNbaV0gKz0gYnM7IC8vIGNvYWxlc2NlIHdpdGggcHJldmlvdXMgc3RyaW5nXG4gICAgICBlbHNlIHNbKytpXSA9IGJzO1xuICAgIH1cbiAgICBpZiAoKGFtID0gYW1bMF0pID09PSAoYm0gPSBibVswXSkpIHsgLy8gbnVtYmVycyBpbiBhICYgYiBtYXRjaFxuICAgICAgaWYgKHNbaV0pIHNbaV0gKz0gYm07IC8vIGNvYWxlc2NlIHdpdGggcHJldmlvdXMgc3RyaW5nXG4gICAgICBlbHNlIHNbKytpXSA9IGJtO1xuICAgIH0gZWxzZSB7IC8vIGludGVycG9sYXRlIG5vbi1tYXRjaGluZyBudW1iZXJzXG4gICAgICBzWysraV0gPSBudWxsO1xuICAgICAgcS5wdXNoKHtpOiBpLCB4OiBudW1iZXIoYW0sIGJtKX0pO1xuICAgIH1cbiAgICBiaSA9IHJlQi5sYXN0SW5kZXg7XG4gIH1cblxuICAvLyBBZGQgcmVtYWlucyBvZiBiLlxuICBpZiAoYmkgPCBiLmxlbmd0aCkge1xuICAgIGJzID0gYi5zbGljZShiaSk7XG4gICAgaWYgKHNbaV0pIHNbaV0gKz0gYnM7IC8vIGNvYWxlc2NlIHdpdGggcHJldmlvdXMgc3RyaW5nXG4gICAgZWxzZSBzWysraV0gPSBicztcbiAgfVxuXG4gIC8vIFNwZWNpYWwgb3B0aW1pemF0aW9uIGZvciBvbmx5IGEgc2luZ2xlIG1hdGNoLlxuICAvLyBPdGhlcndpc2UsIGludGVycG9sYXRlIGVhY2ggb2YgdGhlIG51bWJlcnMgYW5kIHJlam9pbiB0aGUgc3RyaW5nLlxuICByZXR1cm4gcy5sZW5ndGggPCAyID8gKHFbMF1cbiAgICAgID8gb25lKHFbMF0ueClcbiAgICAgIDogemVybyhiKSlcbiAgICAgIDogKGIgPSBxLmxlbmd0aCwgZnVuY3Rpb24odCkge1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBvOyBpIDwgYjsgKytpKSBzWyhvID0gcVtpXSkuaV0gPSBvLngodCk7XG4gICAgICAgICAgcmV0dXJuIHMuam9pbihcIlwiKTtcbiAgICAgICAgfSk7XG59XG4iLCJpbXBvcnQge2NvbG9yfSBmcm9tIFwiZDMtY29sb3JcIjtcbmltcG9ydCB7aW50ZXJwb2xhdGVOdW1iZXIsIGludGVycG9sYXRlUmdiLCBpbnRlcnBvbGF0ZVN0cmluZ30gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIGM7XG4gIHJldHVybiAodHlwZW9mIGIgPT09IFwibnVtYmVyXCIgPyBpbnRlcnBvbGF0ZU51bWJlclxuICAgICAgOiBiIGluc3RhbmNlb2YgY29sb3IgPyBpbnRlcnBvbGF0ZVJnYlxuICAgICAgOiAoYyA9IGNvbG9yKGIpKSA/IChiID0gYywgaW50ZXJwb2xhdGVSZ2IpXG4gICAgICA6IGludGVycG9sYXRlU3RyaW5nKShhLCBiKTtcbn1cbiIsImltcG9ydCB7aW50ZXJwb2xhdGVUcmFuc2Zvcm1TdmcgYXMgaW50ZXJwb2xhdGVUcmFuc2Zvcm19IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuaW1wb3J0IHtuYW1lc3BhY2V9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB7dHdlZW5WYWx1ZX0gZnJvbSBcIi4vdHdlZW4uanNcIjtcbmltcG9ydCBpbnRlcnBvbGF0ZSBmcm9tIFwiLi9pbnRlcnBvbGF0ZS5qc1wiO1xuXG5mdW5jdGlvbiBhdHRyUmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyUmVtb3ZlTlMoZnVsbG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckNvbnN0YW50KG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZTEpIHtcbiAgdmFyIHN0cmluZzAwLFxuICAgICAgc3RyaW5nMSA9IHZhbHVlMSArIFwiXCIsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RyaW5nMCA9IHRoaXMuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyQ29uc3RhbnROUyhmdWxsbmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlMSkge1xuICB2YXIgc3RyaW5nMDAsXG4gICAgICBzdHJpbmcxID0gdmFsdWUxICsgXCJcIixcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdHJpbmcwID0gdGhpcy5nZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyRnVuY3Rpb24obmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlKSB7XG4gIHZhciBzdHJpbmcwMCxcbiAgICAgIHN0cmluZzEwLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0cmluZzAsIHZhbHVlMSA9IHZhbHVlKHRoaXMpLCBzdHJpbmcxO1xuICAgIGlmICh2YWx1ZTEgPT0gbnVsbCkgcmV0dXJuIHZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgc3RyaW5nMCA9IHRoaXMuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICAgIHN0cmluZzEgPSB2YWx1ZTEgKyBcIlwiO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwICYmIHN0cmluZzEgPT09IHN0cmluZzEwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogKHN0cmluZzEwID0gc3RyaW5nMSwgaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckZ1bmN0aW9uTlMoZnVsbG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZSkge1xuICB2YXIgc3RyaW5nMDAsXG4gICAgICBzdHJpbmcxMCxcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdHJpbmcwLCB2YWx1ZTEgPSB2YWx1ZSh0aGlzKSwgc3RyaW5nMTtcbiAgICBpZiAodmFsdWUxID09IG51bGwpIHJldHVybiB2b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgICBzdHJpbmcwID0gdGhpcy5nZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICAgIHN0cmluZzEgPSB2YWx1ZTEgKyBcIlwiO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwICYmIHN0cmluZzEgPT09IHN0cmluZzEwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogKHN0cmluZzEwID0gc3RyaW5nMSwgaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIGZ1bGxuYW1lID0gbmFtZXNwYWNlKG5hbWUpLCBpID0gZnVsbG5hbWUgPT09IFwidHJhbnNmb3JtXCIgPyBpbnRlcnBvbGF0ZVRyYW5zZm9ybSA6IGludGVycG9sYXRlO1xuICByZXR1cm4gdGhpcy5hdHRyVHdlZW4obmFtZSwgdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gKGZ1bGxuYW1lLmxvY2FsID8gYXR0ckZ1bmN0aW9uTlMgOiBhdHRyRnVuY3Rpb24pKGZ1bGxuYW1lLCBpLCB0d2VlblZhbHVlKHRoaXMsIFwiYXR0ci5cIiArIG5hbWUsIHZhbHVlKSlcbiAgICAgIDogdmFsdWUgPT0gbnVsbCA/IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJSZW1vdmVOUyA6IGF0dHJSZW1vdmUpKGZ1bGxuYW1lKVxuICAgICAgOiAoZnVsbG5hbWUubG9jYWwgPyBhdHRyQ29uc3RhbnROUyA6IGF0dHJDb25zdGFudCkoZnVsbG5hbWUsIGksIHZhbHVlKSk7XG59XG4iLCJpbXBvcnQge25hbWVzcGFjZX0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuXG5mdW5jdGlvbiBhdHRySW50ZXJwb2xhdGUobmFtZSwgaSkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKG5hbWUsIGkuY2FsbCh0aGlzLCB0KSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJJbnRlcnBvbGF0ZU5TKGZ1bGxuYW1lLCBpKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwsIGkuY2FsbCh0aGlzLCB0KSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJUd2Vlbk5TKGZ1bGxuYW1lLCB2YWx1ZSkge1xuICB2YXIgdDAsIGkwO1xuICBmdW5jdGlvbiB0d2VlbigpIHtcbiAgICB2YXIgaSA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKGkgIT09IGkwKSB0MCA9IChpMCA9IGkpICYmIGF0dHJJbnRlcnBvbGF0ZU5TKGZ1bGxuYW1lLCBpKTtcbiAgICByZXR1cm4gdDA7XG4gIH1cbiAgdHdlZW4uX3ZhbHVlID0gdmFsdWU7XG4gIHJldHVybiB0d2Vlbjtcbn1cblxuZnVuY3Rpb24gYXR0clR3ZWVuKG5hbWUsIHZhbHVlKSB7XG4gIHZhciB0MCwgaTA7XG4gIGZ1bmN0aW9uIHR3ZWVuKCkge1xuICAgIHZhciBpID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAoaSAhPT0gaTApIHQwID0gKGkwID0gaSkgJiYgYXR0ckludGVycG9sYXRlKG5hbWUsIGkpO1xuICAgIHJldHVybiB0MDtcbiAgfVxuICB0d2Vlbi5fdmFsdWUgPSB2YWx1ZTtcbiAgcmV0dXJuIHR3ZWVuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIga2V5ID0gXCJhdHRyLlwiICsgbmFtZTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSByZXR1cm4gKGtleSA9IHRoaXMudHdlZW4oa2V5KSkgJiYga2V5Ll92YWx1ZTtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgbnVsbCk7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICB2YXIgZnVsbG5hbWUgPSBuYW1lc3BhY2UobmFtZSk7XG4gIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgKGZ1bGxuYW1lLmxvY2FsID8gYXR0clR3ZWVuTlMgOiBhdHRyVHdlZW4pKGZ1bGxuYW1lLCB2YWx1ZSkpO1xufVxuIiwiaW1wb3J0IHtnZXQsIGluaXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmZ1bmN0aW9uIGRlbGF5RnVuY3Rpb24oaWQsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBpbml0KHRoaXMsIGlkKS5kZWxheSA9ICt2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkZWxheUNvbnN0YW50KGlkLCB2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPSArdmFsdWUsIGZ1bmN0aW9uKCkge1xuICAgIGluaXQodGhpcywgaWQpLmRlbGF5ID0gdmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCgodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IGRlbGF5RnVuY3Rpb25cbiAgICAgICAgICA6IGRlbGF5Q29uc3RhbnQpKGlkLCB2YWx1ZSkpXG4gICAgICA6IGdldCh0aGlzLm5vZGUoKSwgaWQpLmRlbGF5O1xufVxuIiwiaW1wb3J0IHtnZXQsIHNldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZnVuY3Rpb24gZHVyYXRpb25GdW5jdGlvbihpZCwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHNldCh0aGlzLCBpZCkuZHVyYXRpb24gPSArdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZHVyYXRpb25Db25zdGFudChpZCwgdmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID0gK3ZhbHVlLCBmdW5jdGlvbigpIHtcbiAgICBzZXQodGhpcywgaWQpLmR1cmF0aW9uID0gdmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCgodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IGR1cmF0aW9uRnVuY3Rpb25cbiAgICAgICAgICA6IGR1cmF0aW9uQ29uc3RhbnQpKGlkLCB2YWx1ZSkpXG4gICAgICA6IGdldCh0aGlzLm5vZGUoKSwgaWQpLmR1cmF0aW9uO1xufVxuIiwiaW1wb3J0IHtnZXQsIHNldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZnVuY3Rpb24gZWFzZUNvbnN0YW50KGlkLCB2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcjtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHNldCh0aGlzLCBpZCkuZWFzZSA9IHZhbHVlO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLmVhY2goZWFzZUNvbnN0YW50KGlkLCB2YWx1ZSkpXG4gICAgICA6IGdldCh0aGlzLm5vZGUoKSwgaWQpLmVhc2U7XG59XG4iLCJpbXBvcnQge3NldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZnVuY3Rpb24gZWFzZVZhcnlpbmcoaWQsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHR5cGVvZiB2ICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcjtcbiAgICBzZXQodGhpcywgaWQpLmVhc2UgPSB2O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcjtcbiAgcmV0dXJuIHRoaXMuZWFjaChlYXNlVmFyeWluZyh0aGlzLl9pZCwgdmFsdWUpKTtcbn1cbiIsImltcG9ydCB7bWF0Y2hlcn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtUcmFuc2l0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihtYXRjaCkge1xuICBpZiAodHlwZW9mIG1hdGNoICE9PSBcImZ1bmN0aW9uXCIpIG1hdGNoID0gbWF0Y2hlcihtYXRjaCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IFtdLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIG1hdGNoLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKSB7XG4gICAgICAgIHN1Ymdyb3VwLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uKHN1Ymdyb3VwcywgdGhpcy5fcGFyZW50cywgdGhpcy5fbmFtZSwgdGhpcy5faWQpO1xufVxuIiwiaW1wb3J0IHtUcmFuc2l0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0cmFuc2l0aW9uKSB7XG4gIGlmICh0cmFuc2l0aW9uLl9pZCAhPT0gdGhpcy5faWQpIHRocm93IG5ldyBFcnJvcjtcblxuICBmb3IgKHZhciBncm91cHMwID0gdGhpcy5fZ3JvdXBzLCBncm91cHMxID0gdHJhbnNpdGlvbi5fZ3JvdXBzLCBtMCA9IGdyb3VwczAubGVuZ3RoLCBtMSA9IGdyb3VwczEubGVuZ3RoLCBtID0gTWF0aC5taW4obTAsIG0xKSwgbWVyZ2VzID0gbmV3IEFycmF5KG0wKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cDAgPSBncm91cHMwW2pdLCBncm91cDEgPSBncm91cHMxW2pdLCBuID0gZ3JvdXAwLmxlbmd0aCwgbWVyZ2UgPSBtZXJnZXNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwMFtpXSB8fCBncm91cDFbaV0pIHtcbiAgICAgICAgbWVyZ2VbaV0gPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBqIDwgbTA7ICsraikge1xuICAgIG1lcmdlc1tqXSA9IGdyb3VwczBbal07XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24obWVyZ2VzLCB0aGlzLl9wYXJlbnRzLCB0aGlzLl9uYW1lLCB0aGlzLl9pZCk7XG59XG4iLCJpbXBvcnQge2dldCwgc2V0LCBpbml0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5mdW5jdGlvbiBzdGFydChuYW1lKSB7XG4gIHJldHVybiAobmFtZSArIFwiXCIpLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykuZXZlcnkoZnVuY3Rpb24odCkge1xuICAgIHZhciBpID0gdC5pbmRleE9mKFwiLlwiKTtcbiAgICBpZiAoaSA+PSAwKSB0ID0gdC5zbGljZSgwLCBpKTtcbiAgICByZXR1cm4gIXQgfHwgdCA9PT0gXCJzdGFydFwiO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gb25GdW5jdGlvbihpZCwgbmFtZSwgbGlzdGVuZXIpIHtcbiAgdmFyIG9uMCwgb24xLCBzaXQgPSBzdGFydChuYW1lKSA/IGluaXQgOiBzZXQ7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzaXQodGhpcywgaWQpLFxuICAgICAgICBvbiA9IHNjaGVkdWxlLm9uO1xuXG4gICAgLy8gSWYgdGhpcyBub2RlIHNoYXJlZCBhIGRpc3BhdGNoIHdpdGggdGhlIHByZXZpb3VzIG5vZGUsXG4gICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIGRpc3BhdGNoIGFuZCB3ZeKAmXJlIGRvbmUhXG4gICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgIGlmIChvbiAhPT0gb24wKSAob24xID0gKG9uMCA9IG9uKS5jb3B5KCkpLm9uKG5hbWUsIGxpc3RlbmVyKTtcblxuICAgIHNjaGVkdWxlLm9uID0gb24xO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCBsaXN0ZW5lcikge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDJcbiAgICAgID8gZ2V0KHRoaXMubm9kZSgpLCBpZCkub24ub24obmFtZSlcbiAgICAgIDogdGhpcy5lYWNoKG9uRnVuY3Rpb24oaWQsIG5hbWUsIGxpc3RlbmVyKSk7XG59XG4iLCJmdW5jdGlvbiByZW1vdmVGdW5jdGlvbihpZCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcbiAgICBmb3IgKHZhciBpIGluIHRoaXMuX190cmFuc2l0aW9uKSBpZiAoK2kgIT09IGlkKSByZXR1cm47XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMub24oXCJlbmQucmVtb3ZlXCIsIHJlbW92ZUZ1bmN0aW9uKHRoaXMuX2lkKSk7XG59XG4iLCJpbXBvcnQge3NlbGVjdG9yfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge1RyYW5zaXRpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQgc2NoZWR1bGUsIHtnZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdCkge1xuICB2YXIgbmFtZSA9IHRoaXMuX25hbWUsXG4gICAgICBpZCA9IHRoaXMuX2lkO1xuXG4gIGlmICh0eXBlb2Ygc2VsZWN0ICE9PSBcImZ1bmN0aW9uXCIpIHNlbGVjdCA9IHNlbGVjdG9yKHNlbGVjdCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IG5ldyBBcnJheShuKSwgbm9kZSwgc3Vibm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgobm9kZSA9IGdyb3VwW2ldKSAmJiAoc3Vibm9kZSA9IHNlbGVjdC5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSkpIHtcbiAgICAgICAgaWYgKFwiX19kYXRhX19cIiBpbiBub2RlKSBzdWJub2RlLl9fZGF0YV9fID0gbm9kZS5fX2RhdGFfXztcbiAgICAgICAgc3ViZ3JvdXBbaV0gPSBzdWJub2RlO1xuICAgICAgICBzY2hlZHVsZShzdWJncm91cFtpXSwgbmFtZSwgaWQsIGksIHN1Ymdyb3VwLCBnZXQobm9kZSwgaWQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24oc3ViZ3JvdXBzLCB0aGlzLl9wYXJlbnRzLCBuYW1lLCBpZCk7XG59XG4iLCJpbXBvcnQge3NlbGVjdG9yQWxsfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge1RyYW5zaXRpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQgc2NoZWR1bGUsIHtnZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdCkge1xuICB2YXIgbmFtZSA9IHRoaXMuX25hbWUsXG4gICAgICBpZCA9IHRoaXMuX2lkO1xuXG4gIGlmICh0eXBlb2Ygc2VsZWN0ICE9PSBcImZ1bmN0aW9uXCIpIHNlbGVjdCA9IHNlbGVjdG9yQWxsKHNlbGVjdCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gW10sIHBhcmVudHMgPSBbXSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgZm9yICh2YXIgY2hpbGRyZW4gPSBzZWxlY3QuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCksIGNoaWxkLCBpbmhlcml0ID0gZ2V0KG5vZGUsIGlkKSwgayA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGsgPCBsOyArK2spIHtcbiAgICAgICAgICBpZiAoY2hpbGQgPSBjaGlsZHJlbltrXSkge1xuICAgICAgICAgICAgc2NoZWR1bGUoY2hpbGQsIG5hbWUsIGlkLCBrLCBjaGlsZHJlbiwgaW5oZXJpdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN1Ymdyb3Vwcy5wdXNoKGNoaWxkcmVuKTtcbiAgICAgICAgcGFyZW50cy5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihzdWJncm91cHMsIHBhcmVudHMsIG5hbWUsIGlkKTtcbn1cbiIsImltcG9ydCB7c2VsZWN0aW9ufSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5cbnZhciBTZWxlY3Rpb24gPSBzZWxlY3Rpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24odGhpcy5fZ3JvdXBzLCB0aGlzLl9wYXJlbnRzKTtcbn1cbiIsImltcG9ydCB7aW50ZXJwb2xhdGVUcmFuc2Zvcm1Dc3MgYXMgaW50ZXJwb2xhdGVUcmFuc2Zvcm19IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuaW1wb3J0IHtzdHlsZX0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtzZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5pbXBvcnQge3R3ZWVuVmFsdWV9IGZyb20gXCIuL3R3ZWVuLmpzXCI7XG5pbXBvcnQgaW50ZXJwb2xhdGUgZnJvbSBcIi4vaW50ZXJwb2xhdGUuanNcIjtcblxuZnVuY3Rpb24gc3R5bGVOdWxsKG5hbWUsIGludGVycG9sYXRlKSB7XG4gIHZhciBzdHJpbmcwMCxcbiAgICAgIHN0cmluZzEwLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0cmluZzAgPSBzdHlsZSh0aGlzLCBuYW1lKSxcbiAgICAgICAgc3RyaW5nMSA9ICh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpLCBzdHlsZSh0aGlzLCBuYW1lKSk7XG4gICAgcmV0dXJuIHN0cmluZzAgPT09IHN0cmluZzEgPyBudWxsXG4gICAgICAgIDogc3RyaW5nMCA9PT0gc3RyaW5nMDAgJiYgc3RyaW5nMSA9PT0gc3RyaW5nMTAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZShzdHJpbmcwMCA9IHN0cmluZzAsIHN0cmluZzEwID0gc3RyaW5nMSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlUmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlQ29uc3RhbnQobmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlMSkge1xuICB2YXIgc3RyaW5nMDAsXG4gICAgICBzdHJpbmcxID0gdmFsdWUxICsgXCJcIixcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdHJpbmcwID0gc3R5bGUodGhpcywgbmFtZSk7XG4gICAgcmV0dXJuIHN0cmluZzAgPT09IHN0cmluZzEgPyBudWxsXG4gICAgICAgIDogc3RyaW5nMCA9PT0gc3RyaW5nMDAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZShzdHJpbmcwMCA9IHN0cmluZzAsIHZhbHVlMSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlRnVuY3Rpb24obmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlKSB7XG4gIHZhciBzdHJpbmcwMCxcbiAgICAgIHN0cmluZzEwLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0cmluZzAgPSBzdHlsZSh0aGlzLCBuYW1lKSxcbiAgICAgICAgdmFsdWUxID0gdmFsdWUodGhpcyksXG4gICAgICAgIHN0cmluZzEgPSB2YWx1ZTEgKyBcIlwiO1xuICAgIGlmICh2YWx1ZTEgPT0gbnVsbCkgc3RyaW5nMSA9IHZhbHVlMSA9ICh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpLCBzdHlsZSh0aGlzLCBuYW1lKSk7XG4gICAgcmV0dXJuIHN0cmluZzAgPT09IHN0cmluZzEgPyBudWxsXG4gICAgICAgIDogc3RyaW5nMCA9PT0gc3RyaW5nMDAgJiYgc3RyaW5nMSA9PT0gc3RyaW5nMTAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiAoc3RyaW5nMTAgPSBzdHJpbmcxLCBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZShzdHJpbmcwMCA9IHN0cmluZzAsIHZhbHVlMSkpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZU1heWJlUmVtb3ZlKGlkLCBuYW1lKSB7XG4gIHZhciBvbjAsIG9uMSwgbGlzdGVuZXIwLCBrZXkgPSBcInN0eWxlLlwiICsgbmFtZSwgZXZlbnQgPSBcImVuZC5cIiArIGtleSwgcmVtb3ZlO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNjaGVkdWxlID0gc2V0KHRoaXMsIGlkKSxcbiAgICAgICAgb24gPSBzY2hlZHVsZS5vbixcbiAgICAgICAgbGlzdGVuZXIgPSBzY2hlZHVsZS52YWx1ZVtrZXldID09IG51bGwgPyByZW1vdmUgfHwgKHJlbW92ZSA9IHN0eWxlUmVtb3ZlKG5hbWUpKSA6IHVuZGVmaW5lZDtcblxuICAgIC8vIElmIHRoaXMgbm9kZSBzaGFyZWQgYSBkaXNwYXRjaCB3aXRoIHRoZSBwcmV2aW91cyBub2RlLFxuICAgIC8vIGp1c3QgYXNzaWduIHRoZSB1cGRhdGVkIHNoYXJlZCBkaXNwYXRjaCBhbmQgd2XigJlyZSBkb25lIVxuICAgIC8vIE90aGVyd2lzZSwgY29weS1vbi13cml0ZS5cbiAgICBpZiAob24gIT09IG9uMCB8fCBsaXN0ZW5lcjAgIT09IGxpc3RlbmVyKSAob24xID0gKG9uMCA9IG9uKS5jb3B5KCkpLm9uKGV2ZW50LCBsaXN0ZW5lcjAgPSBsaXN0ZW5lcik7XG5cbiAgICBzY2hlZHVsZS5vbiA9IG9uMTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHZhciBpID0gKG5hbWUgKz0gXCJcIikgPT09IFwidHJhbnNmb3JtXCIgPyBpbnRlcnBvbGF0ZVRyYW5zZm9ybSA6IGludGVycG9sYXRlO1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/IHRoaXNcbiAgICAgIC5zdHlsZVR3ZWVuKG5hbWUsIHN0eWxlTnVsbChuYW1lLCBpKSlcbiAgICAgIC5vbihcImVuZC5zdHlsZS5cIiArIG5hbWUsIHN0eWxlUmVtb3ZlKG5hbWUpKVxuICAgIDogdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIgPyB0aGlzXG4gICAgICAuc3R5bGVUd2VlbihuYW1lLCBzdHlsZUZ1bmN0aW9uKG5hbWUsIGksIHR3ZWVuVmFsdWUodGhpcywgXCJzdHlsZS5cIiArIG5hbWUsIHZhbHVlKSkpXG4gICAgICAuZWFjaChzdHlsZU1heWJlUmVtb3ZlKHRoaXMuX2lkLCBuYW1lKSlcbiAgICA6IHRoaXNcbiAgICAgIC5zdHlsZVR3ZWVuKG5hbWUsIHN0eWxlQ29uc3RhbnQobmFtZSwgaSwgdmFsdWUpLCBwcmlvcml0eSlcbiAgICAgIC5vbihcImVuZC5zdHlsZS5cIiArIG5hbWUsIG51bGwpO1xufVxuIiwiZnVuY3Rpb24gc3R5bGVJbnRlcnBvbGF0ZShuYW1lLCBpLCBwcmlvcml0eSkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgaS5jYWxsKHRoaXMsIHQpLCBwcmlvcml0eSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlVHdlZW4obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHZhciB0LCBpMDtcbiAgZnVuY3Rpb24gdHdlZW4oKSB7XG4gICAgdmFyIGkgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmIChpICE9PSBpMCkgdCA9IChpMCA9IGkpICYmIHN0eWxlSW50ZXJwb2xhdGUobmFtZSwgaSwgcHJpb3JpdHkpO1xuICAgIHJldHVybiB0O1xuICB9XG4gIHR3ZWVuLl92YWx1ZSA9IHZhbHVlO1xuICByZXR1cm4gdHdlZW47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICB2YXIga2V5ID0gXCJzdHlsZS5cIiArIChuYW1lICs9IFwiXCIpO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHJldHVybiAoa2V5ID0gdGhpcy50d2VlbihrZXkpKSAmJiBrZXkuX3ZhbHVlO1xuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHRoaXMudHdlZW4oa2V5LCBudWxsKTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgc3R5bGVUd2VlbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkgPT0gbnVsbCA/IFwiXCIgOiBwcmlvcml0eSkpO1xufVxuIiwiaW1wb3J0IHt0d2VlblZhbHVlfSBmcm9tIFwiLi90d2Vlbi5qc1wiO1xuXG5mdW5jdGlvbiB0ZXh0Q29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB2YWx1ZTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdGV4dEZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdmFsdWUxID0gdmFsdWUodGhpcyk7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IHZhbHVlMSA9PSBudWxsID8gXCJcIiA6IHZhbHVlMTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIHRoaXMudHdlZW4oXCJ0ZXh0XCIsIHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IHRleHRGdW5jdGlvbih0d2VlblZhbHVlKHRoaXMsIFwidGV4dFwiLCB2YWx1ZSkpXG4gICAgICA6IHRleHRDb25zdGFudCh2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlICsgXCJcIikpO1xufVxuIiwiZnVuY3Rpb24gdGV4dEludGVycG9sYXRlKGkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gaS5jYWxsKHRoaXMsIHQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0ZXh0VHdlZW4odmFsdWUpIHtcbiAgdmFyIHQwLCBpMDtcbiAgZnVuY3Rpb24gdHdlZW4oKSB7XG4gICAgdmFyIGkgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmIChpICE9PSBpMCkgdDAgPSAoaTAgPSBpKSAmJiB0ZXh0SW50ZXJwb2xhdGUoaSk7XG4gICAgcmV0dXJuIHQwO1xuICB9XG4gIHR3ZWVuLl92YWx1ZSA9IHZhbHVlO1xuICByZXR1cm4gdHdlZW47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBrZXkgPSBcInRleHRcIjtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSByZXR1cm4gKGtleSA9IHRoaXMudHdlZW4oa2V5KSkgJiYga2V5Ll92YWx1ZTtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgbnVsbCk7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICByZXR1cm4gdGhpcy50d2VlbihrZXksIHRleHRUd2Vlbih2YWx1ZSkpO1xufVxuIiwiaW1wb3J0IHtUcmFuc2l0aW9uLCBuZXdJZH0gZnJvbSBcIi4vaW5kZXguanNcIjtcbmltcG9ydCBzY2hlZHVsZSwge2dldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBuYW1lID0gdGhpcy5fbmFtZSxcbiAgICAgIGlkMCA9IHRoaXMuX2lkLFxuICAgICAgaWQxID0gbmV3SWQoKTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICB2YXIgaW5oZXJpdCA9IGdldChub2RlLCBpZDApO1xuICAgICAgICBzY2hlZHVsZShub2RlLCBuYW1lLCBpZDEsIGksIGdyb3VwLCB7XG4gICAgICAgICAgdGltZTogaW5oZXJpdC50aW1lICsgaW5oZXJpdC5kZWxheSArIGluaGVyaXQuZHVyYXRpb24sXG4gICAgICAgICAgZGVsYXk6IDAsXG4gICAgICAgICAgZHVyYXRpb246IGluaGVyaXQuZHVyYXRpb24sXG4gICAgICAgICAgZWFzZTogaW5oZXJpdC5lYXNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihncm91cHMsIHRoaXMuX3BhcmVudHMsIG5hbWUsIGlkMSk7XG59XG4iLCJpbXBvcnQge3NldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBvbjAsIG9uMSwgdGhhdCA9IHRoaXMsIGlkID0gdGhhdC5faWQsIHNpemUgPSB0aGF0LnNpemUoKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciBjYW5jZWwgPSB7dmFsdWU6IHJlamVjdH0sXG4gICAgICAgIGVuZCA9IHt2YWx1ZTogZnVuY3Rpb24oKSB7IGlmICgtLXNpemUgPT09IDApIHJlc29sdmUoKTsgfX07XG5cbiAgICB0aGF0LmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgc2NoZWR1bGUgPSBzZXQodGhpcywgaWQpLFxuICAgICAgICAgIG9uID0gc2NoZWR1bGUub247XG5cbiAgICAgIC8vIElmIHRoaXMgbm9kZSBzaGFyZWQgYSBkaXNwYXRjaCB3aXRoIHRoZSBwcmV2aW91cyBub2RlLFxuICAgICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIGRpc3BhdGNoIGFuZCB3ZeKAmXJlIGRvbmUhXG4gICAgICAvLyBPdGhlcndpc2UsIGNvcHktb24td3JpdGUuXG4gICAgICBpZiAob24gIT09IG9uMCkge1xuICAgICAgICBvbjEgPSAob24wID0gb24pLmNvcHkoKTtcbiAgICAgICAgb24xLl8uY2FuY2VsLnB1c2goY2FuY2VsKTtcbiAgICAgICAgb24xLl8uaW50ZXJydXB0LnB1c2goY2FuY2VsKTtcbiAgICAgICAgb24xLl8uZW5kLnB1c2goZW5kKTtcbiAgICAgIH1cblxuICAgICAgc2NoZWR1bGUub24gPSBvbjE7XG4gICAgfSk7XG5cbiAgICAvLyBUaGUgc2VsZWN0aW9uIHdhcyBlbXB0eSwgcmVzb2x2ZSBlbmQgaW1tZWRpYXRlbHlcbiAgICBpZiAoc2l6ZSA9PT0gMCkgcmVzb2x2ZSgpO1xuICB9KTtcbn1cbiIsImltcG9ydCB7c2VsZWN0aW9ufSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9hdHRyIGZyb20gXCIuL2F0dHIuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2F0dHJUd2VlbiBmcm9tIFwiLi9hdHRyVHdlZW4uanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2RlbGF5IGZyb20gXCIuL2RlbGF5LmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9kdXJhdGlvbiBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fZWFzZSBmcm9tIFwiLi9lYXNlLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9lYXNlVmFyeWluZyBmcm9tIFwiLi9lYXNlVmFyeWluZy5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fZmlsdGVyIGZyb20gXCIuL2ZpbHRlci5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fbWVyZ2UgZnJvbSBcIi4vbWVyZ2UuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX29uIGZyb20gXCIuL29uLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9yZW1vdmUgZnJvbSBcIi4vcmVtb3ZlLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9zZWxlY3QgZnJvbSBcIi4vc2VsZWN0LmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9zZWxlY3RBbGwgZnJvbSBcIi4vc2VsZWN0QWxsLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9zZWxlY3Rpb24gZnJvbSBcIi4vc2VsZWN0aW9uLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9zdHlsZSBmcm9tIFwiLi9zdHlsZS5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fc3R5bGVUd2VlbiBmcm9tIFwiLi9zdHlsZVR3ZWVuLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl90ZXh0IGZyb20gXCIuL3RleHQuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3RleHRUd2VlbiBmcm9tIFwiLi90ZXh0VHdlZW4uanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3RyYW5zaXRpb24gZnJvbSBcIi4vdHJhbnNpdGlvbi5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fdHdlZW4gZnJvbSBcIi4vdHdlZW4uanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2VuZCBmcm9tIFwiLi9lbmQuanNcIjtcblxudmFyIGlkID0gMDtcblxuZXhwb3J0IGZ1bmN0aW9uIFRyYW5zaXRpb24oZ3JvdXBzLCBwYXJlbnRzLCBuYW1lLCBpZCkge1xuICB0aGlzLl9ncm91cHMgPSBncm91cHM7XG4gIHRoaXMuX3BhcmVudHMgPSBwYXJlbnRzO1xuICB0aGlzLl9uYW1lID0gbmFtZTtcbiAgdGhpcy5faWQgPSBpZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJhbnNpdGlvbihuYW1lKSB7XG4gIHJldHVybiBzZWxlY3Rpb24oKS50cmFuc2l0aW9uKG5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmV3SWQoKSB7XG4gIHJldHVybiArK2lkO1xufVxuXG52YXIgc2VsZWN0aW9uX3Byb3RvdHlwZSA9IHNlbGVjdGlvbi5wcm90b3R5cGU7XG5cblRyYW5zaXRpb24ucHJvdG90eXBlID0gdHJhbnNpdGlvbi5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBUcmFuc2l0aW9uLFxuICBzZWxlY3Q6IHRyYW5zaXRpb25fc2VsZWN0LFxuICBzZWxlY3RBbGw6IHRyYW5zaXRpb25fc2VsZWN0QWxsLFxuICBzZWxlY3RDaGlsZDogc2VsZWN0aW9uX3Byb3RvdHlwZS5zZWxlY3RDaGlsZCxcbiAgc2VsZWN0Q2hpbGRyZW46IHNlbGVjdGlvbl9wcm90b3R5cGUuc2VsZWN0Q2hpbGRyZW4sXG4gIGZpbHRlcjogdHJhbnNpdGlvbl9maWx0ZXIsXG4gIG1lcmdlOiB0cmFuc2l0aW9uX21lcmdlLFxuICBzZWxlY3Rpb246IHRyYW5zaXRpb25fc2VsZWN0aW9uLFxuICB0cmFuc2l0aW9uOiB0cmFuc2l0aW9uX3RyYW5zaXRpb24sXG4gIGNhbGw6IHNlbGVjdGlvbl9wcm90b3R5cGUuY2FsbCxcbiAgbm9kZXM6IHNlbGVjdGlvbl9wcm90b3R5cGUubm9kZXMsXG4gIG5vZGU6IHNlbGVjdGlvbl9wcm90b3R5cGUubm9kZSxcbiAgc2l6ZTogc2VsZWN0aW9uX3Byb3RvdHlwZS5zaXplLFxuICBlbXB0eTogc2VsZWN0aW9uX3Byb3RvdHlwZS5lbXB0eSxcbiAgZWFjaDogc2VsZWN0aW9uX3Byb3RvdHlwZS5lYWNoLFxuICBvbjogdHJhbnNpdGlvbl9vbixcbiAgYXR0cjogdHJhbnNpdGlvbl9hdHRyLFxuICBhdHRyVHdlZW46IHRyYW5zaXRpb25fYXR0clR3ZWVuLFxuICBzdHlsZTogdHJhbnNpdGlvbl9zdHlsZSxcbiAgc3R5bGVUd2VlbjogdHJhbnNpdGlvbl9zdHlsZVR3ZWVuLFxuICB0ZXh0OiB0cmFuc2l0aW9uX3RleHQsXG4gIHRleHRUd2VlbjogdHJhbnNpdGlvbl90ZXh0VHdlZW4sXG4gIHJlbW92ZTogdHJhbnNpdGlvbl9yZW1vdmUsXG4gIHR3ZWVuOiB0cmFuc2l0aW9uX3R3ZWVuLFxuICBkZWxheTogdHJhbnNpdGlvbl9kZWxheSxcbiAgZHVyYXRpb246IHRyYW5zaXRpb25fZHVyYXRpb24sXG4gIGVhc2U6IHRyYW5zaXRpb25fZWFzZSxcbiAgZWFzZVZhcnlpbmc6IHRyYW5zaXRpb25fZWFzZVZhcnlpbmcsXG4gIGVuZDogdHJhbnNpdGlvbl9lbmQsXG4gIFtTeW1ib2wuaXRlcmF0b3JdOiBzZWxlY3Rpb25fcHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl1cbn07XG4iLCJleHBvcnQgZnVuY3Rpb24gY3ViaWNJbih0KSB7XG4gIHJldHVybiB0ICogdCAqIHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjdWJpY091dCh0KSB7XG4gIHJldHVybiAtLXQgKiB0ICogdCArIDE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjdWJpY0luT3V0KHQpIHtcbiAgcmV0dXJuICgodCAqPSAyKSA8PSAxID8gdCAqIHQgKiB0IDogKHQgLT0gMikgKiB0ICogdCArIDIpIC8gMjtcbn1cbiIsImltcG9ydCB7VHJhbnNpdGlvbiwgbmV3SWR9IGZyb20gXCIuLi90cmFuc2l0aW9uL2luZGV4LmpzXCI7XG5pbXBvcnQgc2NoZWR1bGUgZnJvbSBcIi4uL3RyYW5zaXRpb24vc2NoZWR1bGUuanNcIjtcbmltcG9ydCB7ZWFzZUN1YmljSW5PdXR9IGZyb20gXCJkMy1lYXNlXCI7XG5pbXBvcnQge25vd30gZnJvbSBcImQzLXRpbWVyXCI7XG5cbnZhciBkZWZhdWx0VGltaW5nID0ge1xuICB0aW1lOiBudWxsLCAvLyBTZXQgb24gdXNlLlxuICBkZWxheTogMCxcbiAgZHVyYXRpb246IDI1MCxcbiAgZWFzZTogZWFzZUN1YmljSW5PdXRcbn07XG5cbmZ1bmN0aW9uIGluaGVyaXQobm9kZSwgaWQpIHtcbiAgdmFyIHRpbWluZztcbiAgd2hpbGUgKCEodGltaW5nID0gbm9kZS5fX3RyYW5zaXRpb24pIHx8ICEodGltaW5nID0gdGltaW5nW2lkXSkpIHtcbiAgICBpZiAoIShub2RlID0gbm9kZS5wYXJlbnROb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB0cmFuc2l0aW9uICR7aWR9IG5vdCBmb3VuZGApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGltaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBpZCxcbiAgICAgIHRpbWluZztcblxuICBpZiAobmFtZSBpbnN0YW5jZW9mIFRyYW5zaXRpb24pIHtcbiAgICBpZCA9IG5hbWUuX2lkLCBuYW1lID0gbmFtZS5fbmFtZTtcbiAgfSBlbHNlIHtcbiAgICBpZCA9IG5ld0lkKCksICh0aW1pbmcgPSBkZWZhdWx0VGltaW5nKS50aW1lID0gbm93KCksIG5hbWUgPSBuYW1lID09IG51bGwgPyBudWxsIDogbmFtZSArIFwiXCI7XG4gIH1cblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBzY2hlZHVsZShub2RlLCBuYW1lLCBpZCwgaSwgZ3JvdXAsIHRpbWluZyB8fCBpbmhlcml0KG5vZGUsIGlkKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uKGdyb3VwcywgdGhpcy5fcGFyZW50cywgbmFtZSwgaWQpO1xufVxuIiwiaW1wb3J0IHtzZWxlY3Rpb259IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCBzZWxlY3Rpb25faW50ZXJydXB0IGZyb20gXCIuL2ludGVycnVwdC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl90cmFuc2l0aW9uIGZyb20gXCIuL3RyYW5zaXRpb24uanNcIjtcblxuc2VsZWN0aW9uLnByb3RvdHlwZS5pbnRlcnJ1cHQgPSBzZWxlY3Rpb25faW50ZXJydXB0O1xuc2VsZWN0aW9uLnByb3RvdHlwZS50cmFuc2l0aW9uID0gc2VsZWN0aW9uX3RyYW5zaXRpb247XG4iLCJpbXBvcnQgXCIuL3NlbGVjdGlvbi9pbmRleC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRyYW5zaXRpb259IGZyb20gXCIuL3RyYW5zaXRpb24vaW5kZXguanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBhY3RpdmV9IGZyb20gXCIuL2FjdGl2ZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycnVwdH0gZnJvbSBcIi4vaW50ZXJydXB0LmpzXCI7XG4iLCJpbXBvcnQge2Rpc3BhdGNofSBmcm9tIFwiZDMtZGlzcGF0Y2hcIjtcbmltcG9ydCB7ZHJhZ0Rpc2FibGUsIGRyYWdFbmFibGV9IGZyb20gXCJkMy1kcmFnXCI7XG5pbXBvcnQge2ludGVycG9sYXRlfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcbmltcG9ydCB7cG9pbnRlciwgc2VsZWN0fSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge2ludGVycnVwdH0gZnJvbSBcImQzLXRyYW5zaXRpb25cIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuaW1wb3J0IEJydXNoRXZlbnQgZnJvbSBcIi4vZXZlbnQuanNcIjtcbmltcG9ydCBub2V2ZW50LCB7bm9wcm9wYWdhdGlvbn0gZnJvbSBcIi4vbm9ldmVudC5qc1wiO1xuXG52YXIgTU9ERV9EUkFHID0ge25hbWU6IFwiZHJhZ1wifSxcbiAgICBNT0RFX1NQQUNFID0ge25hbWU6IFwic3BhY2VcIn0sXG4gICAgTU9ERV9IQU5ETEUgPSB7bmFtZTogXCJoYW5kbGVcIn0sXG4gICAgTU9ERV9DRU5URVIgPSB7bmFtZTogXCJjZW50ZXJcIn07XG5cbmNvbnN0IHthYnMsIG1heCwgbWlufSA9IE1hdGg7XG5cbmZ1bmN0aW9uIG51bWJlcjEoZSkge1xuICByZXR1cm4gWytlWzBdLCArZVsxXV07XG59XG5cbmZ1bmN0aW9uIG51bWJlcjIoZSkge1xuICByZXR1cm4gW251bWJlcjEoZVswXSksIG51bWJlcjEoZVsxXSldO1xufVxuXG52YXIgWCA9IHtcbiAgbmFtZTogXCJ4XCIsXG4gIGhhbmRsZXM6IFtcIndcIiwgXCJlXCJdLm1hcCh0eXBlKSxcbiAgaW5wdXQ6IGZ1bmN0aW9uKHgsIGUpIHsgcmV0dXJuIHggPT0gbnVsbCA/IG51bGwgOiBbWyt4WzBdLCBlWzBdWzFdXSwgWyt4WzFdLCBlWzFdWzFdXV07IH0sXG4gIG91dHB1dDogZnVuY3Rpb24oeHkpIHsgcmV0dXJuIHh5ICYmIFt4eVswXVswXSwgeHlbMV1bMF1dOyB9XG59O1xuXG52YXIgWSA9IHtcbiAgbmFtZTogXCJ5XCIsXG4gIGhhbmRsZXM6IFtcIm5cIiwgXCJzXCJdLm1hcCh0eXBlKSxcbiAgaW5wdXQ6IGZ1bmN0aW9uKHksIGUpIHsgcmV0dXJuIHkgPT0gbnVsbCA/IG51bGwgOiBbW2VbMF1bMF0sICt5WzBdXSwgW2VbMV1bMF0sICt5WzFdXV07IH0sXG4gIG91dHB1dDogZnVuY3Rpb24oeHkpIHsgcmV0dXJuIHh5ICYmIFt4eVswXVsxXSwgeHlbMV1bMV1dOyB9XG59O1xuXG52YXIgWFkgPSB7XG4gIG5hbWU6IFwieHlcIixcbiAgaGFuZGxlczogW1wiblwiLCBcIndcIiwgXCJlXCIsIFwic1wiLCBcIm53XCIsIFwibmVcIiwgXCJzd1wiLCBcInNlXCJdLm1hcCh0eXBlKSxcbiAgaW5wdXQ6IGZ1bmN0aW9uKHh5KSB7IHJldHVybiB4eSA9PSBudWxsID8gbnVsbCA6IG51bWJlcjIoeHkpOyB9LFxuICBvdXRwdXQ6IGZ1bmN0aW9uKHh5KSB7IHJldHVybiB4eTsgfVxufTtcblxudmFyIGN1cnNvcnMgPSB7XG4gIG92ZXJsYXk6IFwiY3Jvc3NoYWlyXCIsXG4gIHNlbGVjdGlvbjogXCJtb3ZlXCIsXG4gIG46IFwibnMtcmVzaXplXCIsXG4gIGU6IFwiZXctcmVzaXplXCIsXG4gIHM6IFwibnMtcmVzaXplXCIsXG4gIHc6IFwiZXctcmVzaXplXCIsXG4gIG53OiBcIm53c2UtcmVzaXplXCIsXG4gIG5lOiBcIm5lc3ctcmVzaXplXCIsXG4gIHNlOiBcIm53c2UtcmVzaXplXCIsXG4gIHN3OiBcIm5lc3ctcmVzaXplXCJcbn07XG5cbnZhciBmbGlwWCA9IHtcbiAgZTogXCJ3XCIsXG4gIHc6IFwiZVwiLFxuICBudzogXCJuZVwiLFxuICBuZTogXCJud1wiLFxuICBzZTogXCJzd1wiLFxuICBzdzogXCJzZVwiXG59O1xuXG52YXIgZmxpcFkgPSB7XG4gIG46IFwic1wiLFxuICBzOiBcIm5cIixcbiAgbnc6IFwic3dcIixcbiAgbmU6IFwic2VcIixcbiAgc2U6IFwibmVcIixcbiAgc3c6IFwibndcIlxufTtcblxudmFyIHNpZ25zWCA9IHtcbiAgb3ZlcmxheTogKzEsXG4gIHNlbGVjdGlvbjogKzEsXG4gIG46IG51bGwsXG4gIGU6ICsxLFxuICBzOiBudWxsLFxuICB3OiAtMSxcbiAgbnc6IC0xLFxuICBuZTogKzEsXG4gIHNlOiArMSxcbiAgc3c6IC0xXG59O1xuXG52YXIgc2lnbnNZID0ge1xuICBvdmVybGF5OiArMSxcbiAgc2VsZWN0aW9uOiArMSxcbiAgbjogLTEsXG4gIGU6IG51bGwsXG4gIHM6ICsxLFxuICB3OiBudWxsLFxuICBudzogLTEsXG4gIG5lOiAtMSxcbiAgc2U6ICsxLFxuICBzdzogKzFcbn07XG5cbmZ1bmN0aW9uIHR5cGUodCkge1xuICByZXR1cm4ge3R5cGU6IHR9O1xufVxuXG4vLyBJZ25vcmUgcmlnaHQtY2xpY2ssIHNpbmNlIHRoYXQgc2hvdWxkIG9wZW4gdGhlIGNvbnRleHQgbWVudS5cbmZ1bmN0aW9uIGRlZmF1bHRGaWx0ZXIoZXZlbnQpIHtcbiAgcmV0dXJuICFldmVudC5jdHJsS2V5ICYmICFldmVudC5idXR0b247XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRFeHRlbnQoKSB7XG4gIHZhciBzdmcgPSB0aGlzLm93bmVyU1ZHRWxlbWVudCB8fCB0aGlzO1xuICBpZiAoc3ZnLmhhc0F0dHJpYnV0ZShcInZpZXdCb3hcIikpIHtcbiAgICBzdmcgPSBzdmcudmlld0JveC5iYXNlVmFsO1xuICAgIHJldHVybiBbW3N2Zy54LCBzdmcueV0sIFtzdmcueCArIHN2Zy53aWR0aCwgc3ZnLnkgKyBzdmcuaGVpZ2h0XV07XG4gIH1cbiAgcmV0dXJuIFtbMCwgMF0sIFtzdmcud2lkdGguYmFzZVZhbC52YWx1ZSwgc3ZnLmhlaWdodC5iYXNlVmFsLnZhbHVlXV07XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRUb3VjaGFibGUoKSB7XG4gIHJldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgfHwgKFwib250b3VjaHN0YXJ0XCIgaW4gdGhpcyk7XG59XG5cbi8vIExpa2UgZDMubG9jYWwsIGJ1dCB3aXRoIHRoZSBuYW1lIOKAnF9fYnJ1c2jigJ0gcmF0aGVyIHRoYW4gYXV0by1nZW5lcmF0ZWQuXG5mdW5jdGlvbiBsb2NhbChub2RlKSB7XG4gIHdoaWxlICghbm9kZS5fX2JydXNoKSBpZiAoIShub2RlID0gbm9kZS5wYXJlbnROb2RlKSkgcmV0dXJuO1xuICByZXR1cm4gbm9kZS5fX2JydXNoO1xufVxuXG5mdW5jdGlvbiBlbXB0eShleHRlbnQpIHtcbiAgcmV0dXJuIGV4dGVudFswXVswXSA9PT0gZXh0ZW50WzFdWzBdXG4gICAgICB8fCBleHRlbnRbMF1bMV0gPT09IGV4dGVudFsxXVsxXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJydXNoU2VsZWN0aW9uKG5vZGUpIHtcbiAgdmFyIHN0YXRlID0gbm9kZS5fX2JydXNoO1xuICByZXR1cm4gc3RhdGUgPyBzdGF0ZS5kaW0ub3V0cHV0KHN0YXRlLnNlbGVjdGlvbikgOiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJ1c2hYKCkge1xuICByZXR1cm4gYnJ1c2goWCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicnVzaFkoKSB7XG4gIHJldHVybiBicnVzaChZKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBicnVzaChYWSk7XG59XG5cbmZ1bmN0aW9uIGJydXNoKGRpbSkge1xuICB2YXIgZXh0ZW50ID0gZGVmYXVsdEV4dGVudCxcbiAgICAgIGZpbHRlciA9IGRlZmF1bHRGaWx0ZXIsXG4gICAgICB0b3VjaGFibGUgPSBkZWZhdWx0VG91Y2hhYmxlLFxuICAgICAga2V5cyA9IHRydWUsXG4gICAgICBsaXN0ZW5lcnMgPSBkaXNwYXRjaChcInN0YXJ0XCIsIFwiYnJ1c2hcIiwgXCJlbmRcIiksXG4gICAgICBoYW5kbGVTaXplID0gNixcbiAgICAgIHRvdWNoZW5kaW5nO1xuXG4gIGZ1bmN0aW9uIGJydXNoKGdyb3VwKSB7XG4gICAgdmFyIG92ZXJsYXkgPSBncm91cFxuICAgICAgICAucHJvcGVydHkoXCJfX2JydXNoXCIsIGluaXRpYWxpemUpXG4gICAgICAuc2VsZWN0QWxsKFwiLm92ZXJsYXlcIilcbiAgICAgIC5kYXRhKFt0eXBlKFwib3ZlcmxheVwiKV0pO1xuXG4gICAgb3ZlcmxheS5lbnRlcigpLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcIm92ZXJsYXlcIilcbiAgICAgICAgLmF0dHIoXCJwb2ludGVyLWV2ZW50c1wiLCBcImFsbFwiKVxuICAgICAgICAuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzLm92ZXJsYXkpXG4gICAgICAubWVyZ2Uob3ZlcmxheSlcbiAgICAgICAgLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGV4dGVudCA9IGxvY2FsKHRoaXMpLmV4dGVudDtcbiAgICAgICAgICBzZWxlY3QodGhpcylcbiAgICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIGV4dGVudFswXVswXSlcbiAgICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIGV4dGVudFswXVsxXSlcbiAgICAgICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBleHRlbnRbMV1bMF0gLSBleHRlbnRbMF1bMF0pXG4gICAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIGV4dGVudFsxXVsxXSAtIGV4dGVudFswXVsxXSk7XG4gICAgICAgIH0pO1xuXG4gICAgZ3JvdXAuc2VsZWN0QWxsKFwiLnNlbGVjdGlvblwiKVxuICAgICAgLmRhdGEoW3R5cGUoXCJzZWxlY3Rpb25cIildKVxuICAgICAgLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwic2VsZWN0aW9uXCIpXG4gICAgICAgIC5hdHRyKFwiY3Vyc29yXCIsIGN1cnNvcnMuc2VsZWN0aW9uKVxuICAgICAgICAuYXR0cihcImZpbGxcIiwgXCIjNzc3XCIpXG4gICAgICAgIC5hdHRyKFwiZmlsbC1vcGFjaXR5XCIsIDAuMylcbiAgICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCIjZmZmXCIpXG4gICAgICAgIC5hdHRyKFwic2hhcGUtcmVuZGVyaW5nXCIsIFwiY3Jpc3BFZGdlc1wiKTtcblxuICAgIHZhciBoYW5kbGUgPSBncm91cC5zZWxlY3RBbGwoXCIuaGFuZGxlXCIpXG4gICAgICAuZGF0YShkaW0uaGFuZGxlcywgZnVuY3Rpb24oZCkgeyByZXR1cm4gZC50eXBlOyB9KTtcblxuICAgIGhhbmRsZS5leGl0KCkucmVtb3ZlKCk7XG5cbiAgICBoYW5kbGUuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gXCJoYW5kbGUgaGFuZGxlLS1cIiArIGQudHlwZTsgfSlcbiAgICAgICAgLmF0dHIoXCJjdXJzb3JcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gY3Vyc29yc1tkLnR5cGVdOyB9KTtcblxuICAgIGdyb3VwXG4gICAgICAgIC5lYWNoKHJlZHJhdylcbiAgICAgICAgLmF0dHIoXCJmaWxsXCIsIFwibm9uZVwiKVxuICAgICAgICAuYXR0cihcInBvaW50ZXItZXZlbnRzXCIsIFwiYWxsXCIpXG4gICAgICAgIC5vbihcIm1vdXNlZG93bi5icnVzaFwiLCBzdGFydGVkKVxuICAgICAgLmZpbHRlcih0b3VjaGFibGUpXG4gICAgICAgIC5vbihcInRvdWNoc3RhcnQuYnJ1c2hcIiwgc3RhcnRlZClcbiAgICAgICAgLm9uKFwidG91Y2htb3ZlLmJydXNoXCIsIHRvdWNobW92ZWQpXG4gICAgICAgIC5vbihcInRvdWNoZW5kLmJydXNoIHRvdWNoY2FuY2VsLmJydXNoXCIsIHRvdWNoZW5kZWQpXG4gICAgICAgIC5zdHlsZShcInRvdWNoLWFjdGlvblwiLCBcIm5vbmVcIilcbiAgICAgICAgLnN0eWxlKFwiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yXCIsIFwicmdiYSgwLDAsMCwwKVwiKTtcbiAgfVxuXG4gIGJydXNoLm1vdmUgPSBmdW5jdGlvbihncm91cCwgc2VsZWN0aW9uLCBldmVudCkge1xuICAgIGlmIChncm91cC50d2Vlbikge1xuICAgICAgZ3JvdXBcbiAgICAgICAgICAub24oXCJzdGFydC5icnVzaFwiLCBmdW5jdGlvbihldmVudCkgeyBlbWl0dGVyKHRoaXMsIGFyZ3VtZW50cykuYmVmb3Jlc3RhcnQoKS5zdGFydChldmVudCk7IH0pXG4gICAgICAgICAgLm9uKFwiaW50ZXJydXB0LmJydXNoIGVuZC5icnVzaFwiLCBmdW5jdGlvbihldmVudCkgeyBlbWl0dGVyKHRoaXMsIGFyZ3VtZW50cykuZW5kKGV2ZW50KTsgfSlcbiAgICAgICAgICAudHdlZW4oXCJicnVzaFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgICAgICAgICBzdGF0ZSA9IHRoYXQuX19icnVzaCxcbiAgICAgICAgICAgICAgICBlbWl0ID0gZW1pdHRlcih0aGF0LCBhcmd1bWVudHMpLFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbjAgPSBzdGF0ZS5zZWxlY3Rpb24sXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uMSA9IGRpbS5pbnB1dCh0eXBlb2Ygc2VsZWN0aW9uID09PSBcImZ1bmN0aW9uXCIgPyBzZWxlY3Rpb24uYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IHNlbGVjdGlvbiwgc3RhdGUuZXh0ZW50KSxcbiAgICAgICAgICAgICAgICBpID0gaW50ZXJwb2xhdGUoc2VsZWN0aW9uMCwgc2VsZWN0aW9uMSk7XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHR3ZWVuKHQpIHtcbiAgICAgICAgICAgICAgc3RhdGUuc2VsZWN0aW9uID0gdCA9PT0gMSAmJiBzZWxlY3Rpb24xID09PSBudWxsID8gbnVsbCA6IGkodCk7XG4gICAgICAgICAgICAgIHJlZHJhdy5jYWxsKHRoYXQpO1xuICAgICAgICAgICAgICBlbWl0LmJydXNoKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBzZWxlY3Rpb24wICE9PSBudWxsICYmIHNlbGVjdGlvbjEgIT09IG51bGwgPyB0d2VlbiA6IHR3ZWVuKDEpO1xuICAgICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBncm91cFxuICAgICAgICAgIC5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgICAgICAgICAgc3RhdGUgPSB0aGF0Ll9fYnJ1c2gsXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uMSA9IGRpbS5pbnB1dCh0eXBlb2Ygc2VsZWN0aW9uID09PSBcImZ1bmN0aW9uXCIgPyBzZWxlY3Rpb24uYXBwbHkodGhhdCwgYXJncykgOiBzZWxlY3Rpb24sIHN0YXRlLmV4dGVudCksXG4gICAgICAgICAgICAgICAgZW1pdCA9IGVtaXR0ZXIodGhhdCwgYXJncykuYmVmb3Jlc3RhcnQoKTtcblxuICAgICAgICAgICAgaW50ZXJydXB0KHRoYXQpO1xuICAgICAgICAgICAgc3RhdGUuc2VsZWN0aW9uID0gc2VsZWN0aW9uMSA9PT0gbnVsbCA/IG51bGwgOiBzZWxlY3Rpb24xO1xuICAgICAgICAgICAgcmVkcmF3LmNhbGwodGhhdCk7XG4gICAgICAgICAgICBlbWl0LnN0YXJ0KGV2ZW50KS5icnVzaChldmVudCkuZW5kKGV2ZW50KTtcbiAgICAgICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgYnJ1c2guY2xlYXIgPSBmdW5jdGlvbihncm91cCwgZXZlbnQpIHtcbiAgICBicnVzaC5tb3ZlKGdyb3VwLCBudWxsLCBldmVudCk7XG4gIH07XG5cbiAgZnVuY3Rpb24gcmVkcmF3KCkge1xuICAgIHZhciBncm91cCA9IHNlbGVjdCh0aGlzKSxcbiAgICAgICAgc2VsZWN0aW9uID0gbG9jYWwodGhpcykuc2VsZWN0aW9uO1xuXG4gICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgZ3JvdXAuc2VsZWN0QWxsKFwiLnNlbGVjdGlvblwiKVxuICAgICAgICAgIC5zdHlsZShcImRpc3BsYXlcIiwgbnVsbClcbiAgICAgICAgICAuYXR0cihcInhcIiwgc2VsZWN0aW9uWzBdWzBdKVxuICAgICAgICAgIC5hdHRyKFwieVwiLCBzZWxlY3Rpb25bMF1bMV0pXG4gICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBzZWxlY3Rpb25bMV1bMF0gLSBzZWxlY3Rpb25bMF1bMF0pXG4gICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgc2VsZWN0aW9uWzFdWzFdIC0gc2VsZWN0aW9uWzBdWzFdKTtcblxuICAgICAgZ3JvdXAuc2VsZWN0QWxsKFwiLmhhbmRsZVwiKVxuICAgICAgICAgIC5zdHlsZShcImRpc3BsYXlcIiwgbnVsbClcbiAgICAgICAgICAuYXR0cihcInhcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gZC50eXBlW2QudHlwZS5sZW5ndGggLSAxXSA9PT0gXCJlXCIgPyBzZWxlY3Rpb25bMV1bMF0gLSBoYW5kbGVTaXplIC8gMiA6IHNlbGVjdGlvblswXVswXSAtIGhhbmRsZVNpemUgLyAyOyB9KVxuICAgICAgICAgIC5hdHRyKFwieVwiLCBmdW5jdGlvbihkKSB7IHJldHVybiBkLnR5cGVbMF0gPT09IFwic1wiID8gc2VsZWN0aW9uWzFdWzFdIC0gaGFuZGxlU2l6ZSAvIDIgOiBzZWxlY3Rpb25bMF1bMV0gLSBoYW5kbGVTaXplIC8gMjsgfSlcbiAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQudHlwZSA9PT0gXCJuXCIgfHwgZC50eXBlID09PSBcInNcIiA/IHNlbGVjdGlvblsxXVswXSAtIHNlbGVjdGlvblswXVswXSArIGhhbmRsZVNpemUgOiBoYW5kbGVTaXplOyB9KVxuICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQudHlwZSA9PT0gXCJlXCIgfHwgZC50eXBlID09PSBcIndcIiA/IHNlbGVjdGlvblsxXVsxXSAtIHNlbGVjdGlvblswXVsxXSArIGhhbmRsZVNpemUgOiBoYW5kbGVTaXplOyB9KTtcbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgIGdyb3VwLnNlbGVjdEFsbChcIi5zZWxlY3Rpb24sLmhhbmRsZVwiKVxuICAgICAgICAgIC5zdHlsZShcImRpc3BsYXlcIiwgXCJub25lXCIpXG4gICAgICAgICAgLmF0dHIoXCJ4XCIsIG51bGwpXG4gICAgICAgICAgLmF0dHIoXCJ5XCIsIG51bGwpXG4gICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBudWxsKVxuICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGVtaXR0ZXIodGhhdCwgYXJncywgY2xlYW4pIHtcbiAgICB2YXIgZW1pdCA9IHRoYXQuX19icnVzaC5lbWl0dGVyO1xuICAgIHJldHVybiBlbWl0ICYmICghY2xlYW4gfHwgIWVtaXQuY2xlYW4pID8gZW1pdCA6IG5ldyBFbWl0dGVyKHRoYXQsIGFyZ3MsIGNsZWFuKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIEVtaXR0ZXIodGhhdCwgYXJncywgY2xlYW4pIHtcbiAgICB0aGlzLnRoYXQgPSB0aGF0O1xuICAgIHRoaXMuYXJncyA9IGFyZ3M7XG4gICAgdGhpcy5zdGF0ZSA9IHRoYXQuX19icnVzaDtcbiAgICB0aGlzLmFjdGl2ZSA9IDA7XG4gICAgdGhpcy5jbGVhbiA9IGNsZWFuO1xuICB9XG5cbiAgRW1pdHRlci5wcm90b3R5cGUgPSB7XG4gICAgYmVmb3Jlc3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKCsrdGhpcy5hY3RpdmUgPT09IDEpIHRoaXMuc3RhdGUuZW1pdHRlciA9IHRoaXMsIHRoaXMuc3RhcnRpbmcgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBzdGFydDogZnVuY3Rpb24oZXZlbnQsIG1vZGUpIHtcbiAgICAgIGlmICh0aGlzLnN0YXJ0aW5nKSB0aGlzLnN0YXJ0aW5nID0gZmFsc2UsIHRoaXMuZW1pdChcInN0YXJ0XCIsIGV2ZW50LCBtb2RlKTtcbiAgICAgIGVsc2UgdGhpcy5lbWl0KFwiYnJ1c2hcIiwgZXZlbnQpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBicnVzaDogZnVuY3Rpb24oZXZlbnQsIG1vZGUpIHtcbiAgICAgIHRoaXMuZW1pdChcImJydXNoXCIsIGV2ZW50LCBtb2RlKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgZW5kOiBmdW5jdGlvbihldmVudCwgbW9kZSkge1xuICAgICAgaWYgKC0tdGhpcy5hY3RpdmUgPT09IDApIGRlbGV0ZSB0aGlzLnN0YXRlLmVtaXR0ZXIsIHRoaXMuZW1pdChcImVuZFwiLCBldmVudCwgbW9kZSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIGVtaXQ6IGZ1bmN0aW9uKHR5cGUsIGV2ZW50LCBtb2RlKSB7XG4gICAgICB2YXIgZCA9IHNlbGVjdCh0aGlzLnRoYXQpLmRhdHVtKCk7XG4gICAgICBsaXN0ZW5lcnMuY2FsbChcbiAgICAgICAgdHlwZSxcbiAgICAgICAgdGhpcy50aGF0LFxuICAgICAgICBuZXcgQnJ1c2hFdmVudCh0eXBlLCB7XG4gICAgICAgICAgc291cmNlRXZlbnQ6IGV2ZW50LFxuICAgICAgICAgIHRhcmdldDogYnJ1c2gsXG4gICAgICAgICAgc2VsZWN0aW9uOiBkaW0ub3V0cHV0KHRoaXMuc3RhdGUuc2VsZWN0aW9uKSxcbiAgICAgICAgICBtb2RlLFxuICAgICAgICAgIGRpc3BhdGNoOiBsaXN0ZW5lcnNcbiAgICAgICAgfSksXG4gICAgICAgIGRcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIHN0YXJ0ZWQoZXZlbnQpIHtcbiAgICBpZiAodG91Y2hlbmRpbmcgJiYgIWV2ZW50LnRvdWNoZXMpIHJldHVybjtcbiAgICBpZiAoIWZpbHRlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSByZXR1cm47XG5cbiAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIHR5cGUgPSBldmVudC50YXJnZXQuX19kYXRhX18udHlwZSxcbiAgICAgICAgbW9kZSA9IChrZXlzICYmIGV2ZW50Lm1ldGFLZXkgPyB0eXBlID0gXCJvdmVybGF5XCIgOiB0eXBlKSA9PT0gXCJzZWxlY3Rpb25cIiA/IE1PREVfRFJBRyA6IChrZXlzICYmIGV2ZW50LmFsdEtleSA/IE1PREVfQ0VOVEVSIDogTU9ERV9IQU5ETEUpLFxuICAgICAgICBzaWduWCA9IGRpbSA9PT0gWSA/IG51bGwgOiBzaWduc1hbdHlwZV0sXG4gICAgICAgIHNpZ25ZID0gZGltID09PSBYID8gbnVsbCA6IHNpZ25zWVt0eXBlXSxcbiAgICAgICAgc3RhdGUgPSBsb2NhbCh0aGF0KSxcbiAgICAgICAgZXh0ZW50ID0gc3RhdGUuZXh0ZW50LFxuICAgICAgICBzZWxlY3Rpb24gPSBzdGF0ZS5zZWxlY3Rpb24sXG4gICAgICAgIFcgPSBleHRlbnRbMF1bMF0sIHcwLCB3MSxcbiAgICAgICAgTiA9IGV4dGVudFswXVsxXSwgbjAsIG4xLFxuICAgICAgICBFID0gZXh0ZW50WzFdWzBdLCBlMCwgZTEsXG4gICAgICAgIFMgPSBleHRlbnRbMV1bMV0sIHMwLCBzMSxcbiAgICAgICAgZHggPSAwLFxuICAgICAgICBkeSA9IDAsXG4gICAgICAgIG1vdmluZyxcbiAgICAgICAgc2hpZnRpbmcgPSBzaWduWCAmJiBzaWduWSAmJiBrZXlzICYmIGV2ZW50LnNoaWZ0S2V5LFxuICAgICAgICBsb2NrWCxcbiAgICAgICAgbG9ja1ksXG4gICAgICAgIHBvaW50cyA9IEFycmF5LmZyb20oZXZlbnQudG91Y2hlcyB8fCBbZXZlbnRdLCB0ID0+IHtcbiAgICAgICAgICBjb25zdCBpID0gdC5pZGVudGlmaWVyO1xuICAgICAgICAgIHQgPSBwb2ludGVyKHQsIHRoYXQpO1xuICAgICAgICAgIHQucG9pbnQwID0gdC5zbGljZSgpO1xuICAgICAgICAgIHQuaWRlbnRpZmllciA9IGk7XG4gICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgIH0pO1xuXG4gICAgaW50ZXJydXB0KHRoYXQpO1xuICAgIHZhciBlbWl0ID0gZW1pdHRlcih0aGF0LCBhcmd1bWVudHMsIHRydWUpLmJlZm9yZXN0YXJ0KCk7XG5cbiAgICBpZiAodHlwZSA9PT0gXCJvdmVybGF5XCIpIHtcbiAgICAgIGlmIChzZWxlY3Rpb24pIG1vdmluZyA9IHRydWU7XG4gICAgICBjb25zdCBwdHMgPSBbcG9pbnRzWzBdLCBwb2ludHNbMV0gfHwgcG9pbnRzWzBdXTtcbiAgICAgIHN0YXRlLnNlbGVjdGlvbiA9IHNlbGVjdGlvbiA9IFtbXG4gICAgICAgICAgdzAgPSBkaW0gPT09IFkgPyBXIDogbWluKHB0c1swXVswXSwgcHRzWzFdWzBdKSxcbiAgICAgICAgICBuMCA9IGRpbSA9PT0gWCA/IE4gOiBtaW4ocHRzWzBdWzFdLCBwdHNbMV1bMV0pXG4gICAgICAgIF0sIFtcbiAgICAgICAgICBlMCA9IGRpbSA9PT0gWSA/IEUgOiBtYXgocHRzWzBdWzBdLCBwdHNbMV1bMF0pLFxuICAgICAgICAgIHMwID0gZGltID09PSBYID8gUyA6IG1heChwdHNbMF1bMV0sIHB0c1sxXVsxXSlcbiAgICAgICAgXV07XG4gICAgICBpZiAocG9pbnRzLmxlbmd0aCA+IDEpIG1vdmUoZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB3MCA9IHNlbGVjdGlvblswXVswXTtcbiAgICAgIG4wID0gc2VsZWN0aW9uWzBdWzFdO1xuICAgICAgZTAgPSBzZWxlY3Rpb25bMV1bMF07XG4gICAgICBzMCA9IHNlbGVjdGlvblsxXVsxXTtcbiAgICB9XG5cbiAgICB3MSA9IHcwO1xuICAgIG4xID0gbjA7XG4gICAgZTEgPSBlMDtcbiAgICBzMSA9IHMwO1xuXG4gICAgdmFyIGdyb3VwID0gc2VsZWN0KHRoYXQpXG4gICAgICAgIC5hdHRyKFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuXG4gICAgdmFyIG92ZXJsYXkgPSBncm91cC5zZWxlY3RBbGwoXCIub3ZlcmxheVwiKVxuICAgICAgICAuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzW3R5cGVdKTtcblxuICAgIGlmIChldmVudC50b3VjaGVzKSB7XG4gICAgICBlbWl0Lm1vdmVkID0gbW92ZWQ7XG4gICAgICBlbWl0LmVuZGVkID0gZW5kZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB2aWV3ID0gc2VsZWN0KGV2ZW50LnZpZXcpXG4gICAgICAgICAgLm9uKFwibW91c2Vtb3ZlLmJydXNoXCIsIG1vdmVkLCB0cnVlKVxuICAgICAgICAgIC5vbihcIm1vdXNldXAuYnJ1c2hcIiwgZW5kZWQsIHRydWUpO1xuICAgICAgaWYgKGtleXMpIHZpZXdcbiAgICAgICAgICAub24oXCJrZXlkb3duLmJydXNoXCIsIGtleWRvd25lZCwgdHJ1ZSlcbiAgICAgICAgICAub24oXCJrZXl1cC5icnVzaFwiLCBrZXl1cHBlZCwgdHJ1ZSlcblxuICAgICAgZHJhZ0Rpc2FibGUoZXZlbnQudmlldyk7XG4gICAgfVxuXG4gICAgcmVkcmF3LmNhbGwodGhhdCk7XG4gICAgZW1pdC5zdGFydChldmVudCwgbW9kZS5uYW1lKTtcblxuICAgIGZ1bmN0aW9uIG1vdmVkKGV2ZW50KSB7XG4gICAgICBmb3IgKGNvbnN0IHAgb2YgZXZlbnQuY2hhbmdlZFRvdWNoZXMgfHwgW2V2ZW50XSkge1xuICAgICAgICBmb3IgKGNvbnN0IGQgb2YgcG9pbnRzKVxuICAgICAgICAgIGlmIChkLmlkZW50aWZpZXIgPT09IHAuaWRlbnRpZmllcikgZC5jdXIgPSBwb2ludGVyKHAsIHRoYXQpO1xuICAgICAgfVxuICAgICAgaWYgKHNoaWZ0aW5nICYmICFsb2NrWCAmJiAhbG9ja1kgJiYgcG9pbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBjb25zdCBwb2ludCA9IHBvaW50c1swXTtcbiAgICAgICAgaWYgKGFicyhwb2ludC5jdXJbMF0gLSBwb2ludFswXSkgPiBhYnMocG9pbnQuY3VyWzFdIC0gcG9pbnRbMV0pKVxuICAgICAgICAgIGxvY2tZID0gdHJ1ZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGxvY2tYID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgcG9pbnQgb2YgcG9pbnRzKVxuICAgICAgICBpZiAocG9pbnQuY3VyKSBwb2ludFswXSA9IHBvaW50LmN1clswXSwgcG9pbnRbMV0gPSBwb2ludC5jdXJbMV07XG4gICAgICBtb3ZpbmcgPSB0cnVlO1xuICAgICAgbm9ldmVudChldmVudCk7XG4gICAgICBtb3ZlKGV2ZW50KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb3ZlKGV2ZW50KSB7XG4gICAgICBjb25zdCBwb2ludCA9IHBvaW50c1swXSwgcG9pbnQwID0gcG9pbnQucG9pbnQwO1xuICAgICAgdmFyIHQ7XG5cbiAgICAgIGR4ID0gcG9pbnRbMF0gLSBwb2ludDBbMF07XG4gICAgICBkeSA9IHBvaW50WzFdIC0gcG9pbnQwWzFdO1xuXG4gICAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgY2FzZSBNT0RFX1NQQUNFOlxuICAgICAgICBjYXNlIE1PREVfRFJBRzoge1xuICAgICAgICAgIGlmIChzaWduWCkgZHggPSBtYXgoVyAtIHcwLCBtaW4oRSAtIGUwLCBkeCkpLCB3MSA9IHcwICsgZHgsIGUxID0gZTAgKyBkeDtcbiAgICAgICAgICBpZiAoc2lnblkpIGR5ID0gbWF4KE4gLSBuMCwgbWluKFMgLSBzMCwgZHkpKSwgbjEgPSBuMCArIGR5LCBzMSA9IHMwICsgZHk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBNT0RFX0hBTkRMRToge1xuICAgICAgICAgIGlmIChwb2ludHNbMV0pIHtcbiAgICAgICAgICAgIGlmIChzaWduWCkgdzEgPSBtYXgoVywgbWluKEUsIHBvaW50c1swXVswXSkpLCBlMSA9IG1heChXLCBtaW4oRSwgcG9pbnRzWzFdWzBdKSksIHNpZ25YID0gMTtcbiAgICAgICAgICAgIGlmIChzaWduWSkgbjEgPSBtYXgoTiwgbWluKFMsIHBvaW50c1swXVsxXSkpLCBzMSA9IG1heChOLCBtaW4oUywgcG9pbnRzWzFdWzFdKSksIHNpZ25ZID0gMTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHNpZ25YIDwgMCkgZHggPSBtYXgoVyAtIHcwLCBtaW4oRSAtIHcwLCBkeCkpLCB3MSA9IHcwICsgZHgsIGUxID0gZTA7XG4gICAgICAgICAgICBlbHNlIGlmIChzaWduWCA+IDApIGR4ID0gbWF4KFcgLSBlMCwgbWluKEUgLSBlMCwgZHgpKSwgdzEgPSB3MCwgZTEgPSBlMCArIGR4O1xuICAgICAgICAgICAgaWYgKHNpZ25ZIDwgMCkgZHkgPSBtYXgoTiAtIG4wLCBtaW4oUyAtIG4wLCBkeSkpLCBuMSA9IG4wICsgZHksIHMxID0gczA7XG4gICAgICAgICAgICBlbHNlIGlmIChzaWduWSA+IDApIGR5ID0gbWF4KE4gLSBzMCwgbWluKFMgLSBzMCwgZHkpKSwgbjEgPSBuMCwgczEgPSBzMCArIGR5O1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIE1PREVfQ0VOVEVSOiB7XG4gICAgICAgICAgaWYgKHNpZ25YKSB3MSA9IG1heChXLCBtaW4oRSwgdzAgLSBkeCAqIHNpZ25YKSksIGUxID0gbWF4KFcsIG1pbihFLCBlMCArIGR4ICogc2lnblgpKTtcbiAgICAgICAgICBpZiAoc2lnblkpIG4xID0gbWF4KE4sIG1pbihTLCBuMCAtIGR5ICogc2lnblkpKSwgczEgPSBtYXgoTiwgbWluKFMsIHMwICsgZHkgKiBzaWduWSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChlMSA8IHcxKSB7XG4gICAgICAgIHNpZ25YICo9IC0xO1xuICAgICAgICB0ID0gdzAsIHcwID0gZTAsIGUwID0gdDtcbiAgICAgICAgdCA9IHcxLCB3MSA9IGUxLCBlMSA9IHQ7XG4gICAgICAgIGlmICh0eXBlIGluIGZsaXBYKSBvdmVybGF5LmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29yc1t0eXBlID0gZmxpcFhbdHlwZV1dKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHMxIDwgbjEpIHtcbiAgICAgICAgc2lnblkgKj0gLTE7XG4gICAgICAgIHQgPSBuMCwgbjAgPSBzMCwgczAgPSB0O1xuICAgICAgICB0ID0gbjEsIG4xID0gczEsIHMxID0gdDtcbiAgICAgICAgaWYgKHR5cGUgaW4gZmxpcFkpIG92ZXJsYXkuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzW3R5cGUgPSBmbGlwWVt0eXBlXV0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUuc2VsZWN0aW9uKSBzZWxlY3Rpb24gPSBzdGF0ZS5zZWxlY3Rpb247IC8vIE1heSBiZSBzZXQgYnkgYnJ1c2gubW92ZSFcbiAgICAgIGlmIChsb2NrWCkgdzEgPSBzZWxlY3Rpb25bMF1bMF0sIGUxID0gc2VsZWN0aW9uWzFdWzBdO1xuICAgICAgaWYgKGxvY2tZKSBuMSA9IHNlbGVjdGlvblswXVsxXSwgczEgPSBzZWxlY3Rpb25bMV1bMV07XG5cbiAgICAgIGlmIChzZWxlY3Rpb25bMF1bMF0gIT09IHcxXG4gICAgICAgICAgfHwgc2VsZWN0aW9uWzBdWzFdICE9PSBuMVxuICAgICAgICAgIHx8IHNlbGVjdGlvblsxXVswXSAhPT0gZTFcbiAgICAgICAgICB8fCBzZWxlY3Rpb25bMV1bMV0gIT09IHMxKSB7XG4gICAgICAgIHN0YXRlLnNlbGVjdGlvbiA9IFtbdzEsIG4xXSwgW2UxLCBzMV1dO1xuICAgICAgICByZWRyYXcuY2FsbCh0aGF0KTtcbiAgICAgICAgZW1pdC5icnVzaChldmVudCwgbW9kZS5uYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbmRlZChldmVudCkge1xuICAgICAgbm9wcm9wYWdhdGlvbihldmVudCk7XG4gICAgICBpZiAoZXZlbnQudG91Y2hlcykge1xuICAgICAgICBpZiAoZXZlbnQudG91Y2hlcy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgaWYgKHRvdWNoZW5kaW5nKSBjbGVhclRpbWVvdXQodG91Y2hlbmRpbmcpO1xuICAgICAgICB0b3VjaGVuZGluZyA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHRvdWNoZW5kaW5nID0gbnVsbDsgfSwgNTAwKTsgLy8gR2hvc3QgY2xpY2tzIGFyZSBkZWxheWVkIVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZHJhZ0VuYWJsZShldmVudC52aWV3LCBtb3ZpbmcpO1xuICAgICAgICB2aWV3Lm9uKFwia2V5ZG93bi5icnVzaCBrZXl1cC5icnVzaCBtb3VzZW1vdmUuYnJ1c2ggbW91c2V1cC5icnVzaFwiLCBudWxsKTtcbiAgICAgIH1cbiAgICAgIGdyb3VwLmF0dHIoXCJwb2ludGVyLWV2ZW50c1wiLCBcImFsbFwiKTtcbiAgICAgIG92ZXJsYXkuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzLm92ZXJsYXkpO1xuICAgICAgaWYgKHN0YXRlLnNlbGVjdGlvbikgc2VsZWN0aW9uID0gc3RhdGUuc2VsZWN0aW9uOyAvLyBNYXkgYmUgc2V0IGJ5IGJydXNoLm1vdmUgKG9uIHN0YXJ0KSFcbiAgICAgIGlmIChlbXB0eShzZWxlY3Rpb24pKSBzdGF0ZS5zZWxlY3Rpb24gPSBudWxsLCByZWRyYXcuY2FsbCh0aGF0KTtcbiAgICAgIGVtaXQuZW5kKGV2ZW50LCBtb2RlLm5hbWUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGtleWRvd25lZChldmVudCkge1xuICAgICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XG4gICAgICAgIGNhc2UgMTY6IHsgLy8gU0hJRlRcbiAgICAgICAgICBzaGlmdGluZyA9IHNpZ25YICYmIHNpZ25ZO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMTg6IHsgLy8gQUxUXG4gICAgICAgICAgaWYgKG1vZGUgPT09IE1PREVfSEFORExFKSB7XG4gICAgICAgICAgICBpZiAoc2lnblgpIGUwID0gZTEgLSBkeCAqIHNpZ25YLCB3MCA9IHcxICsgZHggKiBzaWduWDtcbiAgICAgICAgICAgIGlmIChzaWduWSkgczAgPSBzMSAtIGR5ICogc2lnblksIG4wID0gbjEgKyBkeSAqIHNpZ25ZO1xuICAgICAgICAgICAgbW9kZSA9IE1PREVfQ0VOVEVSO1xuICAgICAgICAgICAgbW92ZShldmVudCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMzI6IHsgLy8gU1BBQ0U7IHRha2VzIHByaW9yaXR5IG92ZXIgQUxUXG4gICAgICAgICAgaWYgKG1vZGUgPT09IE1PREVfSEFORExFIHx8IG1vZGUgPT09IE1PREVfQ0VOVEVSKSB7XG4gICAgICAgICAgICBpZiAoc2lnblggPCAwKSBlMCA9IGUxIC0gZHg7IGVsc2UgaWYgKHNpZ25YID4gMCkgdzAgPSB3MSAtIGR4O1xuICAgICAgICAgICAgaWYgKHNpZ25ZIDwgMCkgczAgPSBzMSAtIGR5OyBlbHNlIGlmIChzaWduWSA+IDApIG4wID0gbjEgLSBkeTtcbiAgICAgICAgICAgIG1vZGUgPSBNT0RFX1NQQUNFO1xuICAgICAgICAgICAgb3ZlcmxheS5hdHRyKFwiY3Vyc29yXCIsIGN1cnNvcnMuc2VsZWN0aW9uKTtcbiAgICAgICAgICAgIG1vdmUoZXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiByZXR1cm47XG4gICAgICB9XG4gICAgICBub2V2ZW50KGV2ZW50KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBrZXl1cHBlZChldmVudCkge1xuICAgICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XG4gICAgICAgIGNhc2UgMTY6IHsgLy8gU0hJRlRcbiAgICAgICAgICBpZiAoc2hpZnRpbmcpIHtcbiAgICAgICAgICAgIGxvY2tYID0gbG9ja1kgPSBzaGlmdGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgbW92ZShldmVudCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMTg6IHsgLy8gQUxUXG4gICAgICAgICAgaWYgKG1vZGUgPT09IE1PREVfQ0VOVEVSKSB7XG4gICAgICAgICAgICBpZiAoc2lnblggPCAwKSBlMCA9IGUxOyBlbHNlIGlmIChzaWduWCA+IDApIHcwID0gdzE7XG4gICAgICAgICAgICBpZiAoc2lnblkgPCAwKSBzMCA9IHMxOyBlbHNlIGlmIChzaWduWSA+IDApIG4wID0gbjE7XG4gICAgICAgICAgICBtb2RlID0gTU9ERV9IQU5ETEU7XG4gICAgICAgICAgICBtb3ZlKGV2ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAzMjogeyAvLyBTUEFDRVxuICAgICAgICAgIGlmIChtb2RlID09PSBNT0RFX1NQQUNFKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuYWx0S2V5KSB7XG4gICAgICAgICAgICAgIGlmIChzaWduWCkgZTAgPSBlMSAtIGR4ICogc2lnblgsIHcwID0gdzEgKyBkeCAqIHNpZ25YO1xuICAgICAgICAgICAgICBpZiAoc2lnblkpIHMwID0gczEgLSBkeSAqIHNpZ25ZLCBuMCA9IG4xICsgZHkgKiBzaWduWTtcbiAgICAgICAgICAgICAgbW9kZSA9IE1PREVfQ0VOVEVSO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKHNpZ25YIDwgMCkgZTAgPSBlMTsgZWxzZSBpZiAoc2lnblggPiAwKSB3MCA9IHcxO1xuICAgICAgICAgICAgICBpZiAoc2lnblkgPCAwKSBzMCA9IHMxOyBlbHNlIGlmIChzaWduWSA+IDApIG4wID0gbjE7XG4gICAgICAgICAgICAgIG1vZGUgPSBNT0RFX0hBTkRMRTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG92ZXJsYXkuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzW3R5cGVdKTtcbiAgICAgICAgICAgIG1vdmUoZXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiByZXR1cm47XG4gICAgICB9XG4gICAgICBub2V2ZW50KGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0b3VjaG1vdmVkKGV2ZW50KSB7XG4gICAgZW1pdHRlcih0aGlzLCBhcmd1bWVudHMpLm1vdmVkKGV2ZW50KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvdWNoZW5kZWQoZXZlbnQpIHtcbiAgICBlbWl0dGVyKHRoaXMsIGFyZ3VtZW50cykuZW5kZWQoZXZlbnQpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdGlhbGl6ZSgpIHtcbiAgICB2YXIgc3RhdGUgPSB0aGlzLl9fYnJ1c2ggfHwge3NlbGVjdGlvbjogbnVsbH07XG4gICAgc3RhdGUuZXh0ZW50ID0gbnVtYmVyMihleHRlbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gICAgc3RhdGUuZGltID0gZGltO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGJydXNoLmV4dGVudCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChleHRlbnQgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KG51bWJlcjIoXykpLCBicnVzaCkgOiBleHRlbnQ7XG4gIH07XG5cbiAgYnJ1c2guZmlsdGVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGZpbHRlciA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoISFfKSwgYnJ1c2gpIDogZmlsdGVyO1xuICB9O1xuXG4gIGJydXNoLnRvdWNoYWJsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0b3VjaGFibGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCEhXyksIGJydXNoKSA6IHRvdWNoYWJsZTtcbiAgfTtcblxuICBicnVzaC5oYW5kbGVTaXplID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGhhbmRsZVNpemUgPSArXywgYnJ1c2gpIDogaGFuZGxlU2l6ZTtcbiAgfTtcblxuICBicnVzaC5rZXlNb2RpZmllcnMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoa2V5cyA9ICEhXywgYnJ1c2gpIDoga2V5cztcbiAgfTtcblxuICBicnVzaC5vbiA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZSA9IGxpc3RlbmVycy5vbi5hcHBseShsaXN0ZW5lcnMsIGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIHZhbHVlID09PSBsaXN0ZW5lcnMgPyBicnVzaCA6IHZhbHVlO1xuICB9O1xuXG4gIHJldHVybiBicnVzaDtcbn1cbiIsImV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgYnJ1c2gsXG4gIGJydXNoWCxcbiAgYnJ1c2hZLFxuICBicnVzaFNlbGVjdGlvblxufSBmcm9tIFwiLi9icnVzaC5qc1wiO1xuIiwiZXhwb3J0IHtkZWZhdWx0IGFzIGNvbG9yLCByZ2IsIGhzbH0gZnJvbSBcIi4vY29sb3IuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBsYWIsIGhjbCwgbGNoLCBncmF5fSBmcm9tIFwiLi9sYWIuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdWJlaGVsaXh9IGZyb20gXCIuL2N1YmVoZWxpeC5qc1wiO1xuIiwiZXhwb3J0IHtcbiAgbGluZWFyIGFzIGVhc2VMaW5lYXJcbn0gZnJvbSBcIi4vbGluZWFyLmpzXCI7XG5cbmV4cG9ydCB7XG4gIHF1YWRJbk91dCBhcyBlYXNlUXVhZCxcbiAgcXVhZEluIGFzIGVhc2VRdWFkSW4sXG4gIHF1YWRPdXQgYXMgZWFzZVF1YWRPdXQsXG4gIHF1YWRJbk91dCBhcyBlYXNlUXVhZEluT3V0XG59IGZyb20gXCIuL3F1YWQuanNcIjtcblxuZXhwb3J0IHtcbiAgY3ViaWNJbk91dCBhcyBlYXNlQ3ViaWMsXG4gIGN1YmljSW4gYXMgZWFzZUN1YmljSW4sXG4gIGN1YmljT3V0IGFzIGVhc2VDdWJpY091dCxcbiAgY3ViaWNJbk91dCBhcyBlYXNlQ3ViaWNJbk91dFxufSBmcm9tIFwiLi9jdWJpYy5qc1wiO1xuXG5leHBvcnQge1xuICBwb2x5SW5PdXQgYXMgZWFzZVBvbHksXG4gIHBvbHlJbiBhcyBlYXNlUG9seUluLFxuICBwb2x5T3V0IGFzIGVhc2VQb2x5T3V0LFxuICBwb2x5SW5PdXQgYXMgZWFzZVBvbHlJbk91dFxufSBmcm9tIFwiLi9wb2x5LmpzXCI7XG5cbmV4cG9ydCB7XG4gIHNpbkluT3V0IGFzIGVhc2VTaW4sXG4gIHNpbkluIGFzIGVhc2VTaW5JbixcbiAgc2luT3V0IGFzIGVhc2VTaW5PdXQsXG4gIHNpbkluT3V0IGFzIGVhc2VTaW5Jbk91dFxufSBmcm9tIFwiLi9zaW4uanNcIjtcblxuZXhwb3J0IHtcbiAgZXhwSW5PdXQgYXMgZWFzZUV4cCxcbiAgZXhwSW4gYXMgZWFzZUV4cEluLFxuICBleHBPdXQgYXMgZWFzZUV4cE91dCxcbiAgZXhwSW5PdXQgYXMgZWFzZUV4cEluT3V0XG59IGZyb20gXCIuL2V4cC5qc1wiO1xuXG5leHBvcnQge1xuICBjaXJjbGVJbk91dCBhcyBlYXNlQ2lyY2xlLFxuICBjaXJjbGVJbiBhcyBlYXNlQ2lyY2xlSW4sXG4gIGNpcmNsZU91dCBhcyBlYXNlQ2lyY2xlT3V0LFxuICBjaXJjbGVJbk91dCBhcyBlYXNlQ2lyY2xlSW5PdXRcbn0gZnJvbSBcIi4vY2lyY2xlLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGJvdW5jZU91dCBhcyBlYXNlQm91bmNlLFxuICBib3VuY2VJbiBhcyBlYXNlQm91bmNlSW4sXG4gIGJvdW5jZU91dCBhcyBlYXNlQm91bmNlT3V0LFxuICBib3VuY2VJbk91dCBhcyBlYXNlQm91bmNlSW5PdXRcbn0gZnJvbSBcIi4vYm91bmNlLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGJhY2tJbk91dCBhcyBlYXNlQmFjayxcbiAgYmFja0luIGFzIGVhc2VCYWNrSW4sXG4gIGJhY2tPdXQgYXMgZWFzZUJhY2tPdXQsXG4gIGJhY2tJbk91dCBhcyBlYXNlQmFja0luT3V0XG59IGZyb20gXCIuL2JhY2suanNcIjtcblxuZXhwb3J0IHtcbiAgZWxhc3RpY091dCBhcyBlYXNlRWxhc3RpYyxcbiAgZWxhc3RpY0luIGFzIGVhc2VFbGFzdGljSW4sXG4gIGVsYXN0aWNPdXQgYXMgZWFzZUVsYXN0aWNPdXQsXG4gIGVsYXN0aWNJbk91dCBhcyBlYXNlRWxhc3RpY0luT3V0XG59IGZyb20gXCIuL2VsYXN0aWMuanNcIjtcbiIsImZ1bmN0aW9uIHJlc3BvbnNlSnNvbihyZXNwb25zZSkge1xuICBpZiAoIXJlc3BvbnNlLm9rKSB0aHJvdyBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzICsgXCIgXCIgKyByZXNwb25zZS5zdGF0dXNUZXh0KTtcbiAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA0IHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA1KSByZXR1cm47XG4gIHJldHVybiByZXNwb25zZS5qc29uKCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGlucHV0LCBpbml0KSB7XG4gIHJldHVybiBmZXRjaChpbnB1dCwgaW5pdCkudGhlbihyZXNwb25zZUpzb24pO1xufVxuIiwiZXhwb3J0IHtkZWZhdWx0IGFzIGJsb2J9IGZyb20gXCIuL2Jsb2IuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBidWZmZXJ9IGZyb20gXCIuL2J1ZmZlci5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGRzdiwgY3N2LCB0c3Z9IGZyb20gXCIuL2Rzdi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGltYWdlfSBmcm9tIFwiLi9pbWFnZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGpzb259IGZyb20gXCIuL2pzb24uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB0ZXh0fSBmcm9tIFwiLi90ZXh0LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgeG1sLCBodG1sLCBzdmd9IGZyb20gXCIuL3htbC5qc1wiO1xuIiwiZXhwb3J0IGZ1bmN0aW9uIG9wdGlvbmFsKGYpIHtcbiAgcmV0dXJuIGYgPT0gbnVsbCA/IG51bGwgOiByZXF1aXJlZChmKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcXVpcmVkKGYpIHtcbiAgaWYgKHR5cGVvZiBmICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcjtcbiAgcmV0dXJuIGY7XG59XG4iLCJmdW5jdGlvbiBjb3VudChub2RlKSB7XG4gIHZhciBzdW0gPSAwLFxuICAgICAgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuLFxuICAgICAgaSA9IGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aDtcbiAgaWYgKCFpKSBzdW0gPSAxO1xuICBlbHNlIHdoaWxlICgtLWkgPj0gMCkgc3VtICs9IGNoaWxkcmVuW2ldLnZhbHVlO1xuICBub2RlLnZhbHVlID0gc3VtO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaEFmdGVyKGNvdW50KTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNhbGxiYWNrLCB0aGF0KSB7XG4gIGxldCBpbmRleCA9IC0xO1xuICBmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcykge1xuICAgIGNhbGxiYWNrLmNhbGwodGhhdCwgbm9kZSwgKytpbmRleCwgdGhpcyk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjYWxsYmFjaywgdGhhdCkge1xuICB2YXIgbm9kZSA9IHRoaXMsIG5vZGVzID0gW25vZGVdLCBjaGlsZHJlbiwgaSwgaW5kZXggPSAtMTtcbiAgd2hpbGUgKG5vZGUgPSBub2Rlcy5wb3AoKSkge1xuICAgIGNhbGxiYWNrLmNhbGwodGhhdCwgbm9kZSwgKytpbmRleCwgdGhpcyk7XG4gICAgaWYgKGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbikge1xuICAgICAgZm9yIChpID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgbm9kZXMucHVzaChjaGlsZHJlbltpXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB0aGlzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2ssIHRoYXQpIHtcbiAgdmFyIG5vZGUgPSB0aGlzLCBub2RlcyA9IFtub2RlXSwgbmV4dCA9IFtdLCBjaGlsZHJlbiwgaSwgbiwgaW5kZXggPSAtMTtcbiAgd2hpbGUgKG5vZGUgPSBub2Rlcy5wb3AoKSkge1xuICAgIG5leHQucHVzaChub2RlKTtcbiAgICBpZiAoY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuKSB7XG4gICAgICBmb3IgKGkgPSAwLCBuID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIG5vZGVzLnB1c2goY2hpbGRyZW5baV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICB3aGlsZSAobm9kZSA9IG5leHQucG9wKCkpIHtcbiAgICBjYWxsYmFjay5jYWxsKHRoYXQsIG5vZGUsICsraW5kZXgsIHRoaXMpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2ssIHRoYXQpIHtcbiAgbGV0IGluZGV4ID0gLTE7XG4gIGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzKSB7XG4gICAgaWYgKGNhbGxiYWNrLmNhbGwodGhhdCwgbm9kZSwgKytpbmRleCwgdGhpcykpIHtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaEFmdGVyKGZ1bmN0aW9uKG5vZGUpIHtcbiAgICB2YXIgc3VtID0gK3ZhbHVlKG5vZGUuZGF0YSkgfHwgMCxcbiAgICAgICAgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuLFxuICAgICAgICBpID0gY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoO1xuICAgIHdoaWxlICgtLWkgPj0gMCkgc3VtICs9IGNoaWxkcmVuW2ldLnZhbHVlO1xuICAgIG5vZGUudmFsdWUgPSBzdW07XG4gIH0pO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29tcGFyZSkge1xuICByZXR1cm4gdGhpcy5lYWNoQmVmb3JlKGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgbm9kZS5jaGlsZHJlbi5zb3J0KGNvbXBhcmUpO1xuICAgIH1cbiAgfSk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihlbmQpIHtcbiAgdmFyIHN0YXJ0ID0gdGhpcyxcbiAgICAgIGFuY2VzdG9yID0gbGVhc3RDb21tb25BbmNlc3RvcihzdGFydCwgZW5kKSxcbiAgICAgIG5vZGVzID0gW3N0YXJ0XTtcbiAgd2hpbGUgKHN0YXJ0ICE9PSBhbmNlc3Rvcikge1xuICAgIHN0YXJ0ID0gc3RhcnQucGFyZW50O1xuICAgIG5vZGVzLnB1c2goc3RhcnQpO1xuICB9XG4gIHZhciBrID0gbm9kZXMubGVuZ3RoO1xuICB3aGlsZSAoZW5kICE9PSBhbmNlc3Rvcikge1xuICAgIG5vZGVzLnNwbGljZShrLCAwLCBlbmQpO1xuICAgIGVuZCA9IGVuZC5wYXJlbnQ7XG4gIH1cbiAgcmV0dXJuIG5vZGVzO1xufVxuXG5mdW5jdGlvbiBsZWFzdENvbW1vbkFuY2VzdG9yKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHJldHVybiBhO1xuICB2YXIgYU5vZGVzID0gYS5hbmNlc3RvcnMoKSxcbiAgICAgIGJOb2RlcyA9IGIuYW5jZXN0b3JzKCksXG4gICAgICBjID0gbnVsbDtcbiAgYSA9IGFOb2Rlcy5wb3AoKTtcbiAgYiA9IGJOb2Rlcy5wb3AoKTtcbiAgd2hpbGUgKGEgPT09IGIpIHtcbiAgICBjID0gYTtcbiAgICBhID0gYU5vZGVzLnBvcCgpO1xuICAgIGIgPSBiTm9kZXMucG9wKCk7XG4gIH1cbiAgcmV0dXJuIGM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIG5vZGUgPSB0aGlzLCBub2RlcyA9IFtub2RlXTtcbiAgd2hpbGUgKG5vZGUgPSBub2RlLnBhcmVudCkge1xuICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gIH1cbiAgcmV0dXJuIG5vZGVzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBBcnJheS5mcm9tKHRoaXMpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBsZWF2ZXMgPSBbXTtcbiAgdGhpcy5lYWNoQmVmb3JlKGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBpZiAoIW5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIGxlYXZlcy5wdXNoKG5vZGUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBsZWF2ZXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIHJvb3QgPSB0aGlzLCBsaW5rcyA9IFtdO1xuICByb290LmVhY2goZnVuY3Rpb24obm9kZSkge1xuICAgIGlmIChub2RlICE9PSByb290KSB7IC8vIERvbuKAmXQgaW5jbHVkZSB0aGUgcm9vdOKAmXMgcGFyZW50LCBpZiBhbnkuXG4gICAgICBsaW5rcy5wdXNoKHtzb3VyY2U6IG5vZGUucGFyZW50LCB0YXJnZXQ6IG5vZGV9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbGlua3M7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiooKSB7XG4gIHZhciBub2RlID0gdGhpcywgY3VycmVudCwgbmV4dCA9IFtub2RlXSwgY2hpbGRyZW4sIGksIG47XG4gIGRvIHtcbiAgICBjdXJyZW50ID0gbmV4dC5yZXZlcnNlKCksIG5leHQgPSBbXTtcbiAgICB3aGlsZSAobm9kZSA9IGN1cnJlbnQucG9wKCkpIHtcbiAgICAgIHlpZWxkIG5vZGU7XG4gICAgICBpZiAoY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIGZvciAoaSA9IDAsIG4gPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgICBuZXh0LnB1c2goY2hpbGRyZW5baV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IHdoaWxlIChuZXh0Lmxlbmd0aCk7XG59XG4iLCJpbXBvcnQgbm9kZV9jb3VudCBmcm9tIFwiLi9jb3VudC5qc1wiO1xuaW1wb3J0IG5vZGVfZWFjaCBmcm9tIFwiLi9lYWNoLmpzXCI7XG5pbXBvcnQgbm9kZV9lYWNoQmVmb3JlIGZyb20gXCIuL2VhY2hCZWZvcmUuanNcIjtcbmltcG9ydCBub2RlX2VhY2hBZnRlciBmcm9tIFwiLi9lYWNoQWZ0ZXIuanNcIjtcbmltcG9ydCBub2RlX2ZpbmQgZnJvbSBcIi4vZmluZC5qc1wiO1xuaW1wb3J0IG5vZGVfc3VtIGZyb20gXCIuL3N1bS5qc1wiO1xuaW1wb3J0IG5vZGVfc29ydCBmcm9tIFwiLi9zb3J0LmpzXCI7XG5pbXBvcnQgbm9kZV9wYXRoIGZyb20gXCIuL3BhdGguanNcIjtcbmltcG9ydCBub2RlX2FuY2VzdG9ycyBmcm9tIFwiLi9hbmNlc3RvcnMuanNcIjtcbmltcG9ydCBub2RlX2Rlc2NlbmRhbnRzIGZyb20gXCIuL2Rlc2NlbmRhbnRzLmpzXCI7XG5pbXBvcnQgbm9kZV9sZWF2ZXMgZnJvbSBcIi4vbGVhdmVzLmpzXCI7XG5pbXBvcnQgbm9kZV9saW5rcyBmcm9tIFwiLi9saW5rcy5qc1wiO1xuaW1wb3J0IG5vZGVfaXRlcmF0b3IgZnJvbSBcIi4vaXRlcmF0b3IuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaGllcmFyY2h5KGRhdGEsIGNoaWxkcmVuKSB7XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgZGF0YSA9IFt1bmRlZmluZWQsIGRhdGFdO1xuICAgIGlmIChjaGlsZHJlbiA9PT0gdW5kZWZpbmVkKSBjaGlsZHJlbiA9IG1hcENoaWxkcmVuO1xuICB9IGVsc2UgaWYgKGNoaWxkcmVuID09PSB1bmRlZmluZWQpIHtcbiAgICBjaGlsZHJlbiA9IG9iamVjdENoaWxkcmVuO1xuICB9XG5cbiAgdmFyIHJvb3QgPSBuZXcgTm9kZShkYXRhKSxcbiAgICAgIG5vZGUsXG4gICAgICBub2RlcyA9IFtyb290XSxcbiAgICAgIGNoaWxkLFxuICAgICAgY2hpbGRzLFxuICAgICAgaSxcbiAgICAgIG47XG5cbiAgd2hpbGUgKG5vZGUgPSBub2Rlcy5wb3AoKSkge1xuICAgIGlmICgoY2hpbGRzID0gY2hpbGRyZW4obm9kZS5kYXRhKSkgJiYgKG4gPSAoY2hpbGRzID0gQXJyYXkuZnJvbShjaGlsZHMpKS5sZW5ndGgpKSB7XG4gICAgICBub2RlLmNoaWxkcmVuID0gY2hpbGRzO1xuICAgICAgZm9yIChpID0gbiAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIG5vZGVzLnB1c2goY2hpbGQgPSBjaGlsZHNbaV0gPSBuZXcgTm9kZShjaGlsZHNbaV0pKTtcbiAgICAgICAgY2hpbGQucGFyZW50ID0gbm9kZTtcbiAgICAgICAgY2hpbGQuZGVwdGggPSBub2RlLmRlcHRoICsgMTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcm9vdC5lYWNoQmVmb3JlKGNvbXB1dGVIZWlnaHQpO1xufVxuXG5mdW5jdGlvbiBub2RlX2NvcHkoKSB7XG4gIHJldHVybiBoaWVyYXJjaHkodGhpcykuZWFjaEJlZm9yZShjb3B5RGF0YSk7XG59XG5cbmZ1bmN0aW9uIG9iamVjdENoaWxkcmVuKGQpIHtcbiAgcmV0dXJuIGQuY2hpbGRyZW47XG59XG5cbmZ1bmN0aW9uIG1hcENoaWxkcmVuKGQpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZCkgPyBkWzFdIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gY29weURhdGEobm9kZSkge1xuICBpZiAobm9kZS5kYXRhLnZhbHVlICE9PSB1bmRlZmluZWQpIG5vZGUudmFsdWUgPSBub2RlLmRhdGEudmFsdWU7XG4gIG5vZGUuZGF0YSA9IG5vZGUuZGF0YS5kYXRhO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZUhlaWdodChub2RlKSB7XG4gIHZhciBoZWlnaHQgPSAwO1xuICBkbyBub2RlLmhlaWdodCA9IGhlaWdodDtcbiAgd2hpbGUgKChub2RlID0gbm9kZS5wYXJlbnQpICYmIChub2RlLmhlaWdodCA8ICsraGVpZ2h0KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBOb2RlKGRhdGEpIHtcbiAgdGhpcy5kYXRhID0gZGF0YTtcbiAgdGhpcy5kZXB0aCA9XG4gIHRoaXMuaGVpZ2h0ID0gMDtcbiAgdGhpcy5wYXJlbnQgPSBudWxsO1xufVxuXG5Ob2RlLnByb3RvdHlwZSA9IGhpZXJhcmNoeS5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBOb2RlLFxuICBjb3VudDogbm9kZV9jb3VudCxcbiAgZWFjaDogbm9kZV9lYWNoLFxuICBlYWNoQWZ0ZXI6IG5vZGVfZWFjaEFmdGVyLFxuICBlYWNoQmVmb3JlOiBub2RlX2VhY2hCZWZvcmUsXG4gIGZpbmQ6IG5vZGVfZmluZCxcbiAgc3VtOiBub2RlX3N1bSxcbiAgc29ydDogbm9kZV9zb3J0LFxuICBwYXRoOiBub2RlX3BhdGgsXG4gIGFuY2VzdG9yczogbm9kZV9hbmNlc3RvcnMsXG4gIGRlc2NlbmRhbnRzOiBub2RlX2Rlc2NlbmRhbnRzLFxuICBsZWF2ZXM6IG5vZGVfbGVhdmVzLFxuICBsaW5rczogbm9kZV9saW5rcyxcbiAgY29weTogbm9kZV9jb3B5LFxuICBbU3ltYm9sLml0ZXJhdG9yXTogbm9kZV9pdGVyYXRvclxufTtcbiIsImltcG9ydCB7b3B0aW9uYWx9IGZyb20gXCIuL2FjY2Vzc29ycy5qc1wiO1xuaW1wb3J0IHtOb2RlLCBjb21wdXRlSGVpZ2h0fSBmcm9tIFwiLi9oaWVyYXJjaHkvaW5kZXguanNcIjtcblxudmFyIHByZXJvb3QgPSB7ZGVwdGg6IC0xfSxcbiAgICBhbWJpZ3VvdXMgPSB7fSxcbiAgICBpbXB1dGVkID0ge307XG5cbmZ1bmN0aW9uIGRlZmF1bHRJZChkKSB7XG4gIHJldHVybiBkLmlkO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0UGFyZW50SWQoZCkge1xuICByZXR1cm4gZC5wYXJlbnRJZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBpZCA9IGRlZmF1bHRJZCxcbiAgICAgIHBhcmVudElkID0gZGVmYXVsdFBhcmVudElkLFxuICAgICAgcGF0aDtcblxuICBmdW5jdGlvbiBzdHJhdGlmeShkYXRhKSB7XG4gICAgdmFyIG5vZGVzID0gQXJyYXkuZnJvbShkYXRhKSxcbiAgICAgICAgY3VycmVudElkID0gaWQsXG4gICAgICAgIGN1cnJlbnRQYXJlbnRJZCA9IHBhcmVudElkLFxuICAgICAgICBuLFxuICAgICAgICBkLFxuICAgICAgICBpLFxuICAgICAgICByb290LFxuICAgICAgICBwYXJlbnQsXG4gICAgICAgIG5vZGUsXG4gICAgICAgIG5vZGVJZCxcbiAgICAgICAgbm9kZUtleSxcbiAgICAgICAgbm9kZUJ5S2V5ID0gbmV3IE1hcDtcblxuICAgIGlmIChwYXRoICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IEkgPSBub2Rlcy5tYXAoKGQsIGkpID0+IG5vcm1hbGl6ZShwYXRoKGQsIGksIGRhdGEpKSk7XG4gICAgICBjb25zdCBQID0gSS5tYXAocGFyZW50b2YpO1xuICAgICAgY29uc3QgUyA9IG5ldyBTZXQoSSkuYWRkKFwiXCIpO1xuICAgICAgZm9yIChjb25zdCBpIG9mIFApIHtcbiAgICAgICAgaWYgKCFTLmhhcyhpKSkge1xuICAgICAgICAgIFMuYWRkKGkpO1xuICAgICAgICAgIEkucHVzaChpKTtcbiAgICAgICAgICBQLnB1c2gocGFyZW50b2YoaSkpO1xuICAgICAgICAgIG5vZGVzLnB1c2goaW1wdXRlZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGN1cnJlbnRJZCA9IChfLCBpKSA9PiBJW2ldO1xuICAgICAgY3VycmVudFBhcmVudElkID0gKF8sIGkpID0+IFBbaV07XG4gICAgfVxuXG4gICAgZm9yIChpID0gMCwgbiA9IG5vZGVzLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgZCA9IG5vZGVzW2ldLCBub2RlID0gbm9kZXNbaV0gPSBuZXcgTm9kZShkKTtcbiAgICAgIGlmICgobm9kZUlkID0gY3VycmVudElkKGQsIGksIGRhdGEpKSAhPSBudWxsICYmIChub2RlSWQgKz0gXCJcIikpIHtcbiAgICAgICAgbm9kZUtleSA9IG5vZGUuaWQgPSBub2RlSWQ7XG4gICAgICAgIG5vZGVCeUtleS5zZXQobm9kZUtleSwgbm9kZUJ5S2V5Lmhhcyhub2RlS2V5KSA/IGFtYmlndW91cyA6IG5vZGUpO1xuICAgICAgfVxuICAgICAgaWYgKChub2RlSWQgPSBjdXJyZW50UGFyZW50SWQoZCwgaSwgZGF0YSkpICE9IG51bGwgJiYgKG5vZGVJZCArPSBcIlwiKSkge1xuICAgICAgICBub2RlLnBhcmVudCA9IG5vZGVJZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBub2RlID0gbm9kZXNbaV07XG4gICAgICBpZiAobm9kZUlkID0gbm9kZS5wYXJlbnQpIHtcbiAgICAgICAgcGFyZW50ID0gbm9kZUJ5S2V5LmdldChub2RlSWQpO1xuICAgICAgICBpZiAoIXBhcmVudCkgdGhyb3cgbmV3IEVycm9yKFwibWlzc2luZzogXCIgKyBub2RlSWQpO1xuICAgICAgICBpZiAocGFyZW50ID09PSBhbWJpZ3VvdXMpIHRocm93IG5ldyBFcnJvcihcImFtYmlndW91czogXCIgKyBub2RlSWQpO1xuICAgICAgICBpZiAocGFyZW50LmNoaWxkcmVuKSBwYXJlbnQuY2hpbGRyZW4ucHVzaChub2RlKTtcbiAgICAgICAgZWxzZSBwYXJlbnQuY2hpbGRyZW4gPSBbbm9kZV07XG4gICAgICAgIG5vZGUucGFyZW50ID0gcGFyZW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHJvb3QpIHRocm93IG5ldyBFcnJvcihcIm11bHRpcGxlIHJvb3RzXCIpO1xuICAgICAgICByb290ID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXJvb3QpIHRocm93IG5ldyBFcnJvcihcIm5vIHJvb3RcIik7XG5cbiAgICAvLyBXaGVuIGltcHV0aW5nIGludGVybmFsIG5vZGVzLCBvbmx5IGludHJvZHVjZSByb290cyBpZiBuZWVkZWQuXG4gICAgLy8gVGhlbiByZXBsYWNlIHRoZSBpbXB1dGVkIG1hcmtlciBkYXRhIHdpdGggbnVsbC5cbiAgICBpZiAocGF0aCAhPSBudWxsKSB7XG4gICAgICB3aGlsZSAocm9vdC5kYXRhID09PSBpbXB1dGVkICYmIHJvb3QuY2hpbGRyZW4ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJvb3QgPSByb290LmNoaWxkcmVuWzBdLCAtLW47XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gbm9kZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICBpZiAobm9kZS5kYXRhICE9PSBpbXB1dGVkKSBicmVhaztcbiAgICAgICAgbm9kZS5kYXRhID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByb290LnBhcmVudCA9IHByZXJvb3Q7XG4gICAgcm9vdC5lYWNoQmVmb3JlKGZ1bmN0aW9uKG5vZGUpIHsgbm9kZS5kZXB0aCA9IG5vZGUucGFyZW50LmRlcHRoICsgMTsgLS1uOyB9KS5lYWNoQmVmb3JlKGNvbXB1dGVIZWlnaHQpO1xuICAgIHJvb3QucGFyZW50ID0gbnVsbDtcbiAgICBpZiAobiA+IDApIHRocm93IG5ldyBFcnJvcihcImN5Y2xlXCIpO1xuXG4gICAgcmV0dXJuIHJvb3Q7XG4gIH1cblxuICBzdHJhdGlmeS5pZCA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpZCA9IG9wdGlvbmFsKHgpLCBzdHJhdGlmeSkgOiBpZDtcbiAgfTtcblxuICBzdHJhdGlmeS5wYXJlbnRJZCA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwYXJlbnRJZCA9IG9wdGlvbmFsKHgpLCBzdHJhdGlmeSkgOiBwYXJlbnRJZDtcbiAgfTtcblxuICBzdHJhdGlmeS5wYXRoID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHBhdGggPSBvcHRpb25hbCh4KSwgc3RyYXRpZnkpIDogcGF0aDtcbiAgfTtcblxuICByZXR1cm4gc3RyYXRpZnk7XG59XG5cbi8vIFRvIG5vcm1hbGl6ZSBhIHBhdGgsIHdlIGNvZXJjZSB0byBhIHN0cmluZywgc3RyaXAgdGhlIHRyYWlsaW5nIHNsYXNoIGlmIGFueVxuLy8gKGFzIGxvbmcgYXMgdGhlIHRyYWlsaW5nIHNsYXNoIGlzIG5vdCBpbW1lZGlhdGVseSBwcmVjZWRlZCBieSBhbm90aGVyIHNsYXNoKSxcbi8vIGFuZCBhZGQgbGVhZGluZyBzbGFzaCBpZiBtaXNzaW5nLlxuZnVuY3Rpb24gbm9ybWFsaXplKHBhdGgpIHtcbiAgcGF0aCA9IGAke3BhdGh9YDtcbiAgbGV0IGkgPSBwYXRoLmxlbmd0aDtcbiAgaWYgKHNsYXNoKHBhdGgsIGkgLSAxKSAmJiAhc2xhc2gocGF0aCwgaSAtIDIpKSBwYXRoID0gcGF0aC5zbGljZSgwLCAtMSk7XG4gIHJldHVybiBwYXRoWzBdID09PSBcIi9cIiA/IHBhdGggOiBgLyR7cGF0aH1gO1xufVxuXG4vLyBXYWxrIGJhY2t3YXJkcyB0byBmaW5kIHRoZSBmaXJzdCBzbGFzaCB0aGF0IGlzIG5vdCB0aGUgbGVhZGluZyBzbGFzaCwgZS5nLjpcbi8vIFwiL2Zvby9iYXJcIiDih6UgXCIvZm9vXCIsIFwiL2Zvb1wiIOKHpSBcIi9cIiwgXCIvXCIg4oamIFwiXCIuIChUaGUgcm9vdCBpcyBzcGVjaWFsLWNhc2VkXG4vLyBiZWNhdXNlIHRoZSBpZCBvZiB0aGUgcm9vdCBtdXN0IGJlIGEgdHJ1dGh5IHZhbHVlLilcbmZ1bmN0aW9uIHBhcmVudG9mKHBhdGgpIHtcbiAgbGV0IGkgPSBwYXRoLmxlbmd0aDtcbiAgaWYgKGkgPCAyKSByZXR1cm4gXCJcIjtcbiAgd2hpbGUgKC0taSA+IDEpIGlmIChzbGFzaChwYXRoLCBpKSkgYnJlYWs7XG4gIHJldHVybiBwYXRoLnNsaWNlKDAsIGkpO1xufVxuXG4vLyBTbGFzaGVzIGNhbiBiZSBlc2NhcGVkOyB0byBkZXRlcm1pbmUgd2hldGhlciBhIHNsYXNoIGlzIGEgcGF0aCBkZWxpbWl0ZXIsIHdlXG4vLyBjb3VudCB0aGUgbnVtYmVyIG9mIHByZWNlZGluZyBiYWNrc2xhc2hlcyBlc2NhcGluZyB0aGUgZm9yd2FyZCBzbGFzaDogYW4gb2RkXG4vLyBudW1iZXIgaW5kaWNhdGVzIGFuIGVzY2FwZWQgZm9yd2FyZCBzbGFzaC5cbmZ1bmN0aW9uIHNsYXNoKHBhdGgsIGkpIHtcbiAgaWYgKHBhdGhbaV0gPT09IFwiL1wiKSB7XG4gICAgbGV0IGsgPSAwO1xuICAgIHdoaWxlIChpID4gMCAmJiBwYXRoWy0taV0gPT09IFwiXFxcXFwiKSArK2s7XG4gICAgaWYgKChrICYgMSkgPT09IDApIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbiIsImltcG9ydCB7Tm9kZX0gZnJvbSBcIi4vaGllcmFyY2h5L2luZGV4LmpzXCI7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXBhcmF0aW9uKGEsIGIpIHtcbiAgcmV0dXJuIGEucGFyZW50ID09PSBiLnBhcmVudCA/IDEgOiAyO1xufVxuXG4vLyBmdW5jdGlvbiByYWRpYWxTZXBhcmF0aW9uKGEsIGIpIHtcbi8vICAgcmV0dXJuIChhLnBhcmVudCA9PT0gYi5wYXJlbnQgPyAxIDogMikgLyBhLmRlcHRoO1xuLy8gfVxuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gdHJhdmVyc2UgdGhlIGxlZnQgY29udG91ciBvZiBhIHN1YnRyZWUgKG9yXG4vLyBzdWJmb3Jlc3QpLiBJdCByZXR1cm5zIHRoZSBzdWNjZXNzb3Igb2YgdiBvbiB0aGlzIGNvbnRvdXIuIFRoaXMgc3VjY2Vzc29yIGlzXG4vLyBlaXRoZXIgZ2l2ZW4gYnkgdGhlIGxlZnRtb3N0IGNoaWxkIG9mIHYgb3IgYnkgdGhlIHRocmVhZCBvZiB2LiBUaGUgZnVuY3Rpb25cbi8vIHJldHVybnMgbnVsbCBpZiBhbmQgb25seSBpZiB2IGlzIG9uIHRoZSBoaWdoZXN0IGxldmVsIG9mIGl0cyBzdWJ0cmVlLlxuZnVuY3Rpb24gbmV4dExlZnQodikge1xuICB2YXIgY2hpbGRyZW4gPSB2LmNoaWxkcmVuO1xuICByZXR1cm4gY2hpbGRyZW4gPyBjaGlsZHJlblswXSA6IHYudDtcbn1cblxuLy8gVGhpcyBmdW5jdGlvbiB3b3JrcyBhbmFsb2dvdXNseSB0byBuZXh0TGVmdC5cbmZ1bmN0aW9uIG5leHRSaWdodCh2KSB7XG4gIHZhciBjaGlsZHJlbiA9IHYuY2hpbGRyZW47XG4gIHJldHVybiBjaGlsZHJlbiA/IGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdIDogdi50O1xufVxuXG4vLyBTaGlmdHMgdGhlIGN1cnJlbnQgc3VidHJlZSByb290ZWQgYXQgdysuIFRoaXMgaXMgZG9uZSBieSBpbmNyZWFzaW5nXG4vLyBwcmVsaW0odyspIGFuZCBtb2QodyspIGJ5IHNoaWZ0LlxuZnVuY3Rpb24gbW92ZVN1YnRyZWUod20sIHdwLCBzaGlmdCkge1xuICB2YXIgY2hhbmdlID0gc2hpZnQgLyAod3AuaSAtIHdtLmkpO1xuICB3cC5jIC09IGNoYW5nZTtcbiAgd3AucyArPSBzaGlmdDtcbiAgd20uYyArPSBjaGFuZ2U7XG4gIHdwLnogKz0gc2hpZnQ7XG4gIHdwLm0gKz0gc2hpZnQ7XG59XG5cbi8vIEFsbCBvdGhlciBzaGlmdHMsIGFwcGxpZWQgdG8gdGhlIHNtYWxsZXIgc3VidHJlZXMgYmV0d2VlbiB3LSBhbmQgdyssIGFyZVxuLy8gcGVyZm9ybWVkIGJ5IHRoaXMgZnVuY3Rpb24uIFRvIHByZXBhcmUgdGhlIHNoaWZ0cywgd2UgaGF2ZSB0byBhZGp1c3Rcbi8vIGNoYW5nZSh3KyksIHNoaWZ0KHcrKSwgYW5kIGNoYW5nZSh3LSkuXG5mdW5jdGlvbiBleGVjdXRlU2hpZnRzKHYpIHtcbiAgdmFyIHNoaWZ0ID0gMCxcbiAgICAgIGNoYW5nZSA9IDAsXG4gICAgICBjaGlsZHJlbiA9IHYuY2hpbGRyZW4sXG4gICAgICBpID0gY2hpbGRyZW4ubGVuZ3RoLFxuICAgICAgdztcbiAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgdyA9IGNoaWxkcmVuW2ldO1xuICAgIHcueiArPSBzaGlmdDtcbiAgICB3Lm0gKz0gc2hpZnQ7XG4gICAgc2hpZnQgKz0gdy5zICsgKGNoYW5nZSArPSB3LmMpO1xuICB9XG59XG5cbi8vIElmIHZpLeKAmXMgYW5jZXN0b3IgaXMgYSBzaWJsaW5nIG9mIHYsIHJldHVybnMgdmkt4oCZcyBhbmNlc3Rvci4gT3RoZXJ3aXNlLFxuLy8gcmV0dXJucyB0aGUgc3BlY2lmaWVkIChkZWZhdWx0KSBhbmNlc3Rvci5cbmZ1bmN0aW9uIG5leHRBbmNlc3Rvcih2aW0sIHYsIGFuY2VzdG9yKSB7XG4gIHJldHVybiB2aW0uYS5wYXJlbnQgPT09IHYucGFyZW50ID8gdmltLmEgOiBhbmNlc3Rvcjtcbn1cblxuZnVuY3Rpb24gVHJlZU5vZGUobm9kZSwgaSkge1xuICB0aGlzLl8gPSBub2RlO1xuICB0aGlzLnBhcmVudCA9IG51bGw7XG4gIHRoaXMuY2hpbGRyZW4gPSBudWxsO1xuICB0aGlzLkEgPSBudWxsOyAvLyBkZWZhdWx0IGFuY2VzdG9yXG4gIHRoaXMuYSA9IHRoaXM7IC8vIGFuY2VzdG9yXG4gIHRoaXMueiA9IDA7IC8vIHByZWxpbVxuICB0aGlzLm0gPSAwOyAvLyBtb2RcbiAgdGhpcy5jID0gMDsgLy8gY2hhbmdlXG4gIHRoaXMucyA9IDA7IC8vIHNoaWZ0XG4gIHRoaXMudCA9IG51bGw7IC8vIHRocmVhZFxuICB0aGlzLmkgPSBpOyAvLyBudW1iZXJcbn1cblxuVHJlZU5vZGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShOb2RlLnByb3RvdHlwZSk7XG5cbmZ1bmN0aW9uIHRyZWVSb290KHJvb3QpIHtcbiAgdmFyIHRyZWUgPSBuZXcgVHJlZU5vZGUocm9vdCwgMCksXG4gICAgICBub2RlLFxuICAgICAgbm9kZXMgPSBbdHJlZV0sXG4gICAgICBjaGlsZCxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgaSxcbiAgICAgIG47XG5cbiAgd2hpbGUgKG5vZGUgPSBub2Rlcy5wb3AoKSkge1xuICAgIGlmIChjaGlsZHJlbiA9IG5vZGUuXy5jaGlsZHJlbikge1xuICAgICAgbm9kZS5jaGlsZHJlbiA9IG5ldyBBcnJheShuID0gY2hpbGRyZW4ubGVuZ3RoKTtcbiAgICAgIGZvciAoaSA9IG4gLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICBub2Rlcy5wdXNoKGNoaWxkID0gbm9kZS5jaGlsZHJlbltpXSA9IG5ldyBUcmVlTm9kZShjaGlsZHJlbltpXSwgaSkpO1xuICAgICAgICBjaGlsZC5wYXJlbnQgPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICh0cmVlLnBhcmVudCA9IG5ldyBUcmVlTm9kZShudWxsLCAwKSkuY2hpbGRyZW4gPSBbdHJlZV07XG4gIHJldHVybiB0cmVlO1xufVxuXG4vLyBOb2RlLWxpbmsgdHJlZSBkaWFncmFtIHVzaW5nIHRoZSBSZWluZ29sZC1UaWxmb3JkIFwidGlkeVwiIGFsZ29yaXRobVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBzZXBhcmF0aW9uID0gZGVmYXVsdFNlcGFyYXRpb24sXG4gICAgICBkeCA9IDEsXG4gICAgICBkeSA9IDEsXG4gICAgICBub2RlU2l6ZSA9IG51bGw7XG5cbiAgZnVuY3Rpb24gdHJlZShyb290KSB7XG4gICAgdmFyIHQgPSB0cmVlUm9vdChyb290KTtcblxuICAgIC8vIENvbXB1dGUgdGhlIGxheW91dCB1c2luZyBCdWNoaGVpbSBldCBhbC7igJlzIGFsZ29yaXRobS5cbiAgICB0LmVhY2hBZnRlcihmaXJzdFdhbGspLCB0LnBhcmVudC5tID0gLXQuejtcbiAgICB0LmVhY2hCZWZvcmUoc2Vjb25kV2Fsayk7XG5cbiAgICAvLyBJZiBhIGZpeGVkIG5vZGUgc2l6ZSBpcyBzcGVjaWZpZWQsIHNjYWxlIHggYW5kIHkuXG4gICAgaWYgKG5vZGVTaXplKSByb290LmVhY2hCZWZvcmUoc2l6ZU5vZGUpO1xuXG4gICAgLy8gSWYgYSBmaXhlZCB0cmVlIHNpemUgaXMgc3BlY2lmaWVkLCBzY2FsZSB4IGFuZCB5IGJhc2VkIG9uIHRoZSBleHRlbnQuXG4gICAgLy8gQ29tcHV0ZSB0aGUgbGVmdC1tb3N0LCByaWdodC1tb3N0LCBhbmQgZGVwdGgtbW9zdCBub2RlcyBmb3IgZXh0ZW50cy5cbiAgICBlbHNlIHtcbiAgICAgIHZhciBsZWZ0ID0gcm9vdCxcbiAgICAgICAgICByaWdodCA9IHJvb3QsXG4gICAgICAgICAgYm90dG9tID0gcm9vdDtcbiAgICAgIHJvb3QuZWFjaEJlZm9yZShmdW5jdGlvbihub2RlKSB7XG4gICAgICAgIGlmIChub2RlLnggPCBsZWZ0LngpIGxlZnQgPSBub2RlO1xuICAgICAgICBpZiAobm9kZS54ID4gcmlnaHQueCkgcmlnaHQgPSBub2RlO1xuICAgICAgICBpZiAobm9kZS5kZXB0aCA+IGJvdHRvbS5kZXB0aCkgYm90dG9tID0gbm9kZTtcbiAgICAgIH0pO1xuICAgICAgdmFyIHMgPSBsZWZ0ID09PSByaWdodCA/IDEgOiBzZXBhcmF0aW9uKGxlZnQsIHJpZ2h0KSAvIDIsXG4gICAgICAgICAgdHggPSBzIC0gbGVmdC54LFxuICAgICAgICAgIGt4ID0gZHggLyAocmlnaHQueCArIHMgKyB0eCksXG4gICAgICAgICAga3kgPSBkeSAvIChib3R0b20uZGVwdGggfHwgMSk7XG4gICAgICByb290LmVhY2hCZWZvcmUoZnVuY3Rpb24obm9kZSkge1xuICAgICAgICBub2RlLnggPSAobm9kZS54ICsgdHgpICoga3g7XG4gICAgICAgIG5vZGUueSA9IG5vZGUuZGVwdGggKiBreTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByb290O1xuICB9XG5cbiAgLy8gQ29tcHV0ZXMgYSBwcmVsaW1pbmFyeSB4LWNvb3JkaW5hdGUgZm9yIHYuIEJlZm9yZSB0aGF0LCBGSVJTVCBXQUxLIGlzXG4gIC8vIGFwcGxpZWQgcmVjdXJzaXZlbHkgdG8gdGhlIGNoaWxkcmVuIG9mIHYsIGFzIHdlbGwgYXMgdGhlIGZ1bmN0aW9uXG4gIC8vIEFQUE9SVElPTi4gQWZ0ZXIgc3BhY2luZyBvdXQgdGhlIGNoaWxkcmVuIGJ5IGNhbGxpbmcgRVhFQ1VURSBTSElGVFMsIHRoZVxuICAvLyBub2RlIHYgaXMgcGxhY2VkIHRvIHRoZSBtaWRwb2ludCBvZiBpdHMgb3V0ZXJtb3N0IGNoaWxkcmVuLlxuICBmdW5jdGlvbiBmaXJzdFdhbGsodikge1xuICAgIHZhciBjaGlsZHJlbiA9IHYuY2hpbGRyZW4sXG4gICAgICAgIHNpYmxpbmdzID0gdi5wYXJlbnQuY2hpbGRyZW4sXG4gICAgICAgIHcgPSB2LmkgPyBzaWJsaW5nc1t2LmkgLSAxXSA6IG51bGw7XG4gICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICBleGVjdXRlU2hpZnRzKHYpO1xuICAgICAgdmFyIG1pZHBvaW50ID0gKGNoaWxkcmVuWzBdLnogKyBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXS56KSAvIDI7XG4gICAgICBpZiAodykge1xuICAgICAgICB2LnogPSB3LnogKyBzZXBhcmF0aW9uKHYuXywgdy5fKTtcbiAgICAgICAgdi5tID0gdi56IC0gbWlkcG9pbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2LnogPSBtaWRwb2ludDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHcpIHtcbiAgICAgIHYueiA9IHcueiArIHNlcGFyYXRpb24odi5fLCB3Ll8pO1xuICAgIH1cbiAgICB2LnBhcmVudC5BID0gYXBwb3J0aW9uKHYsIHcsIHYucGFyZW50LkEgfHwgc2libGluZ3NbMF0pO1xuICB9XG5cbiAgLy8gQ29tcHV0ZXMgYWxsIHJlYWwgeC1jb29yZGluYXRlcyBieSBzdW1taW5nIHVwIHRoZSBtb2RpZmllcnMgcmVjdXJzaXZlbHkuXG4gIGZ1bmN0aW9uIHNlY29uZFdhbGsodikge1xuICAgIHYuXy54ID0gdi56ICsgdi5wYXJlbnQubTtcbiAgICB2Lm0gKz0gdi5wYXJlbnQubTtcbiAgfVxuXG4gIC8vIFRoZSBjb3JlIG9mIHRoZSBhbGdvcml0aG0uIEhlcmUsIGEgbmV3IHN1YnRyZWUgaXMgY29tYmluZWQgd2l0aCB0aGVcbiAgLy8gcHJldmlvdXMgc3VidHJlZXMuIFRocmVhZHMgYXJlIHVzZWQgdG8gdHJhdmVyc2UgdGhlIGluc2lkZSBhbmQgb3V0c2lkZVxuICAvLyBjb250b3VycyBvZiB0aGUgbGVmdCBhbmQgcmlnaHQgc3VidHJlZSB1cCB0byB0aGUgaGlnaGVzdCBjb21tb24gbGV2ZWwuIFRoZVxuICAvLyB2ZXJ0aWNlcyB1c2VkIGZvciB0aGUgdHJhdmVyc2FscyBhcmUgdmkrLCB2aS0sIHZvLSwgYW5kIHZvKywgd2hlcmUgdGhlXG4gIC8vIHN1cGVyc2NyaXB0IG8gbWVhbnMgb3V0c2lkZSBhbmQgaSBtZWFucyBpbnNpZGUsIHRoZSBzdWJzY3JpcHQgLSBtZWFucyBsZWZ0XG4gIC8vIHN1YnRyZWUgYW5kICsgbWVhbnMgcmlnaHQgc3VidHJlZS4gRm9yIHN1bW1pbmcgdXAgdGhlIG1vZGlmaWVycyBhbG9uZyB0aGVcbiAgLy8gY29udG91ciwgd2UgdXNlIHJlc3BlY3RpdmUgdmFyaWFibGVzIHNpKywgc2ktLCBzby0sIGFuZCBzbysuIFdoZW5ldmVyIHR3b1xuICAvLyBub2RlcyBvZiB0aGUgaW5zaWRlIGNvbnRvdXJzIGNvbmZsaWN0LCB3ZSBjb21wdXRlIHRoZSBsZWZ0IG9uZSBvZiB0aGVcbiAgLy8gZ3JlYXRlc3QgdW5jb21tb24gYW5jZXN0b3JzIHVzaW5nIHRoZSBmdW5jdGlvbiBBTkNFU1RPUiBhbmQgY2FsbCBNT1ZFXG4gIC8vIFNVQlRSRUUgdG8gc2hpZnQgdGhlIHN1YnRyZWUgYW5kIHByZXBhcmUgdGhlIHNoaWZ0cyBvZiBzbWFsbGVyIHN1YnRyZWVzLlxuICAvLyBGaW5hbGx5LCB3ZSBhZGQgYSBuZXcgdGhyZWFkIChpZiBuZWNlc3NhcnkpLlxuICBmdW5jdGlvbiBhcHBvcnRpb24odiwgdywgYW5jZXN0b3IpIHtcbiAgICBpZiAodykge1xuICAgICAgdmFyIHZpcCA9IHYsXG4gICAgICAgICAgdm9wID0gdixcbiAgICAgICAgICB2aW0gPSB3LFxuICAgICAgICAgIHZvbSA9IHZpcC5wYXJlbnQuY2hpbGRyZW5bMF0sXG4gICAgICAgICAgc2lwID0gdmlwLm0sXG4gICAgICAgICAgc29wID0gdm9wLm0sXG4gICAgICAgICAgc2ltID0gdmltLm0sXG4gICAgICAgICAgc29tID0gdm9tLm0sXG4gICAgICAgICAgc2hpZnQ7XG4gICAgICB3aGlsZSAodmltID0gbmV4dFJpZ2h0KHZpbSksIHZpcCA9IG5leHRMZWZ0KHZpcCksIHZpbSAmJiB2aXApIHtcbiAgICAgICAgdm9tID0gbmV4dExlZnQodm9tKTtcbiAgICAgICAgdm9wID0gbmV4dFJpZ2h0KHZvcCk7XG4gICAgICAgIHZvcC5hID0gdjtcbiAgICAgICAgc2hpZnQgPSB2aW0ueiArIHNpbSAtIHZpcC56IC0gc2lwICsgc2VwYXJhdGlvbih2aW0uXywgdmlwLl8pO1xuICAgICAgICBpZiAoc2hpZnQgPiAwKSB7XG4gICAgICAgICAgbW92ZVN1YnRyZWUobmV4dEFuY2VzdG9yKHZpbSwgdiwgYW5jZXN0b3IpLCB2LCBzaGlmdCk7XG4gICAgICAgICAgc2lwICs9IHNoaWZ0O1xuICAgICAgICAgIHNvcCArPSBzaGlmdDtcbiAgICAgICAgfVxuICAgICAgICBzaW0gKz0gdmltLm07XG4gICAgICAgIHNpcCArPSB2aXAubTtcbiAgICAgICAgc29tICs9IHZvbS5tO1xuICAgICAgICBzb3AgKz0gdm9wLm07XG4gICAgICB9XG4gICAgICBpZiAodmltICYmICFuZXh0UmlnaHQodm9wKSkge1xuICAgICAgICB2b3AudCA9IHZpbTtcbiAgICAgICAgdm9wLm0gKz0gc2ltIC0gc29wO1xuICAgICAgfVxuICAgICAgaWYgKHZpcCAmJiAhbmV4dExlZnQodm9tKSkge1xuICAgICAgICB2b20udCA9IHZpcDtcbiAgICAgICAgdm9tLm0gKz0gc2lwIC0gc29tO1xuICAgICAgICBhbmNlc3RvciA9IHY7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhbmNlc3RvcjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNpemVOb2RlKG5vZGUpIHtcbiAgICBub2RlLnggKj0gZHg7XG4gICAgbm9kZS55ID0gbm9kZS5kZXB0aCAqIGR5O1xuICB9XG5cbiAgdHJlZS5zZXBhcmF0aW9uID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHNlcGFyYXRpb24gPSB4LCB0cmVlKSA6IHNlcGFyYXRpb247XG4gIH07XG5cbiAgdHJlZS5zaXplID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKG5vZGVTaXplID0gZmFsc2UsIGR4ID0gK3hbMF0sIGR5ID0gK3hbMV0sIHRyZWUpIDogKG5vZGVTaXplID8gbnVsbCA6IFtkeCwgZHldKTtcbiAgfTtcblxuICB0cmVlLm5vZGVTaXplID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKG5vZGVTaXplID0gdHJ1ZSwgZHggPSAreFswXSwgZHkgPSAreFsxXSwgdHJlZSkgOiAobm9kZVNpemUgPyBbZHgsIGR5XSA6IG51bGwpO1xuICB9O1xuXG4gIHJldHVybiB0cmVlO1xufVxuIiwiZXhwb3J0IHtkZWZhdWx0IGFzIGNsdXN0ZXJ9IGZyb20gXCIuL2NsdXN0ZXIuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBoaWVyYXJjaHksIE5vZGV9IGZyb20gXCIuL2hpZXJhcmNoeS9pbmRleC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHBhY2t9IGZyb20gXCIuL3BhY2svaW5kZXguanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBwYWNrU2libGluZ3N9IGZyb20gXCIuL3BhY2svc2libGluZ3MuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBwYWNrRW5jbG9zZX0gZnJvbSBcIi4vcGFjay9lbmNsb3NlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcGFydGl0aW9ufSBmcm9tIFwiLi9wYXJ0aXRpb24uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdHJhdGlmeX0gZnJvbSBcIi4vc3RyYXRpZnkuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB0cmVlfSBmcm9tIFwiLi90cmVlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdHJlZW1hcH0gZnJvbSBcIi4vdHJlZW1hcC9pbmRleC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRyZWVtYXBCaW5hcnl9IGZyb20gXCIuL3RyZWVtYXAvYmluYXJ5LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdHJlZW1hcERpY2V9IGZyb20gXCIuL3RyZWVtYXAvZGljZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRyZWVtYXBTbGljZX0gZnJvbSBcIi4vdHJlZW1hcC9zbGljZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRyZWVtYXBTbGljZURpY2V9IGZyb20gXCIuL3RyZWVtYXAvc2xpY2VEaWNlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdHJlZW1hcFNxdWFyaWZ5fSBmcm9tIFwiLi90cmVlbWFwL3NxdWFyaWZ5LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdHJlZW1hcFJlc3F1YXJpZnl9IGZyb20gXCIuL3RyZWVtYXAvcmVzcXVhcmlmeS5qc1wiO1xuIiwidmFyIGUxMCA9IE1hdGguc3FydCg1MCksXG4gICAgZTUgPSBNYXRoLnNxcnQoMTApLFxuICAgIGUyID0gTWF0aC5zcXJ0KDIpO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0aWNrcyhzdGFydCwgc3RvcCwgY291bnQpIHtcbiAgdmFyIHJldmVyc2UsXG4gICAgICBpID0gLTEsXG4gICAgICBuLFxuICAgICAgdGlja3MsXG4gICAgICBzdGVwO1xuXG4gIHN0b3AgPSArc3RvcCwgc3RhcnQgPSArc3RhcnQsIGNvdW50ID0gK2NvdW50O1xuICBpZiAoc3RhcnQgPT09IHN0b3AgJiYgY291bnQgPiAwKSByZXR1cm4gW3N0YXJ0XTtcbiAgaWYgKHJldmVyc2UgPSBzdG9wIDwgc3RhcnQpIG4gPSBzdGFydCwgc3RhcnQgPSBzdG9wLCBzdG9wID0gbjtcbiAgaWYgKChzdGVwID0gdGlja0luY3JlbWVudChzdGFydCwgc3RvcCwgY291bnQpKSA9PT0gMCB8fCAhaXNGaW5pdGUoc3RlcCkpIHJldHVybiBbXTtcblxuICBpZiAoc3RlcCA+IDApIHtcbiAgICBsZXQgcjAgPSBNYXRoLnJvdW5kKHN0YXJ0IC8gc3RlcCksIHIxID0gTWF0aC5yb3VuZChzdG9wIC8gc3RlcCk7XG4gICAgaWYgKHIwICogc3RlcCA8IHN0YXJ0KSArK3IwO1xuICAgIGlmIChyMSAqIHN0ZXAgPiBzdG9wKSAtLXIxO1xuICAgIHRpY2tzID0gbmV3IEFycmF5KG4gPSByMSAtIHIwICsgMSk7XG4gICAgd2hpbGUgKCsraSA8IG4pIHRpY2tzW2ldID0gKHIwICsgaSkgKiBzdGVwO1xuICB9IGVsc2Uge1xuICAgIHN0ZXAgPSAtc3RlcDtcbiAgICBsZXQgcjAgPSBNYXRoLnJvdW5kKHN0YXJ0ICogc3RlcCksIHIxID0gTWF0aC5yb3VuZChzdG9wICogc3RlcCk7XG4gICAgaWYgKHIwIC8gc3RlcCA8IHN0YXJ0KSArK3IwO1xuICAgIGlmIChyMSAvIHN0ZXAgPiBzdG9wKSAtLXIxO1xuICAgIHRpY2tzID0gbmV3IEFycmF5KG4gPSByMSAtIHIwICsgMSk7XG4gICAgd2hpbGUgKCsraSA8IG4pIHRpY2tzW2ldID0gKHIwICsgaSkgLyBzdGVwO1xuICB9XG5cbiAgaWYgKHJldmVyc2UpIHRpY2tzLnJldmVyc2UoKTtcblxuICByZXR1cm4gdGlja3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aWNrSW5jcmVtZW50KHN0YXJ0LCBzdG9wLCBjb3VudCkge1xuICB2YXIgc3RlcCA9IChzdG9wIC0gc3RhcnQpIC8gTWF0aC5tYXgoMCwgY291bnQpLFxuICAgICAgcG93ZXIgPSBNYXRoLmZsb29yKE1hdGgubG9nKHN0ZXApIC8gTWF0aC5MTjEwKSxcbiAgICAgIGVycm9yID0gc3RlcCAvIE1hdGgucG93KDEwLCBwb3dlcik7XG4gIHJldHVybiBwb3dlciA+PSAwXG4gICAgICA/IChlcnJvciA+PSBlMTAgPyAxMCA6IGVycm9yID49IGU1ID8gNSA6IGVycm9yID49IGUyID8gMiA6IDEpICogTWF0aC5wb3coMTAsIHBvd2VyKVxuICAgICAgOiAtTWF0aC5wb3coMTAsIC1wb3dlcikgLyAoZXJyb3IgPj0gZTEwID8gMTAgOiBlcnJvciA+PSBlNSA/IDUgOiBlcnJvciA+PSBlMiA/IDIgOiAxKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpY2tTdGVwKHN0YXJ0LCBzdG9wLCBjb3VudCkge1xuICB2YXIgc3RlcDAgPSBNYXRoLmFicyhzdG9wIC0gc3RhcnQpIC8gTWF0aC5tYXgoMCwgY291bnQpLFxuICAgICAgc3RlcDEgPSBNYXRoLnBvdygxMCwgTWF0aC5mbG9vcihNYXRoLmxvZyhzdGVwMCkgLyBNYXRoLkxOMTApKSxcbiAgICAgIGVycm9yID0gc3RlcDAgLyBzdGVwMTtcbiAgaWYgKGVycm9yID49IGUxMCkgc3RlcDEgKj0gMTA7XG4gIGVsc2UgaWYgKGVycm9yID49IGU1KSBzdGVwMSAqPSA1O1xuICBlbHNlIGlmIChlcnJvciA+PSBlMikgc3RlcDEgKj0gMjtcbiAgcmV0dXJuIHN0b3AgPCBzdGFydCA/IC1zdGVwMSA6IHN0ZXAxO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYXNjZW5kaW5nKGEsIGIpIHtcbiAgcmV0dXJuIGEgPT0gbnVsbCB8fCBiID09IG51bGwgPyBOYU4gOiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogYSA+PSBiID8gMCA6IE5hTjtcbn1cbiIsImltcG9ydCBhc2NlbmRpbmcgZnJvbSBcIi4vYXNjZW5kaW5nLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJpc2VjdG9yKGYpIHtcbiAgbGV0IGRlbHRhID0gZjtcbiAgbGV0IGNvbXBhcmUxID0gZjtcbiAgbGV0IGNvbXBhcmUyID0gZjtcblxuICBpZiAoZi5sZW5ndGggIT09IDIpIHtcbiAgICBkZWx0YSA9IChkLCB4KSA9PiBmKGQpIC0geDtcbiAgICBjb21wYXJlMSA9IGFzY2VuZGluZztcbiAgICBjb21wYXJlMiA9IChkLCB4KSA9PiBhc2NlbmRpbmcoZihkKSwgeCk7XG4gIH1cblxuICBmdW5jdGlvbiBsZWZ0KGEsIHgsIGxvID0gMCwgaGkgPSBhLmxlbmd0aCkge1xuICAgIGlmIChsbyA8IGhpKSB7XG4gICAgICBpZiAoY29tcGFyZTEoeCwgeCkgIT09IDApIHJldHVybiBoaTtcbiAgICAgIGRvIHtcbiAgICAgICAgY29uc3QgbWlkID0gKGxvICsgaGkpID4+PiAxO1xuICAgICAgICBpZiAoY29tcGFyZTIoYVttaWRdLCB4KSA8IDApIGxvID0gbWlkICsgMTtcbiAgICAgICAgZWxzZSBoaSA9IG1pZDtcbiAgICAgIH0gd2hpbGUgKGxvIDwgaGkpO1xuICAgIH1cbiAgICByZXR1cm4gbG87XG4gIH1cblxuICBmdW5jdGlvbiByaWdodChhLCB4LCBsbyA9IDAsIGhpID0gYS5sZW5ndGgpIHtcbiAgICBpZiAobG8gPCBoaSkge1xuICAgICAgaWYgKGNvbXBhcmUxKHgsIHgpICE9PSAwKSByZXR1cm4gaGk7XG4gICAgICBkbyB7XG4gICAgICAgIGNvbnN0IG1pZCA9IChsbyArIGhpKSA+Pj4gMTtcbiAgICAgICAgaWYgKGNvbXBhcmUyKGFbbWlkXSwgeCkgPD0gMCkgbG8gPSBtaWQgKyAxO1xuICAgICAgICBlbHNlIGhpID0gbWlkO1xuICAgICAgfSB3aGlsZSAobG8gPCBoaSk7XG4gICAgfVxuICAgIHJldHVybiBsbztcbiAgfVxuXG4gIGZ1bmN0aW9uIGNlbnRlcihhLCB4LCBsbyA9IDAsIGhpID0gYS5sZW5ndGgpIHtcbiAgICBjb25zdCBpID0gbGVmdChhLCB4LCBsbywgaGkgLSAxKTtcbiAgICByZXR1cm4gaSA+IGxvICYmIGRlbHRhKGFbaSAtIDFdLCB4KSA+IC1kZWx0YShhW2ldLCB4KSA/IGkgLSAxIDogaTtcbiAgfVxuXG4gIHJldHVybiB7bGVmdCwgY2VudGVyLCByaWdodH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBudW1iZXIoeCkge1xuICByZXR1cm4geCA9PT0gbnVsbCA/IE5hTiA6ICt4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24qIG51bWJlcnModmFsdWVzLCB2YWx1ZW9mKSB7XG4gIGlmICh2YWx1ZW9mID09PSB1bmRlZmluZWQpIHtcbiAgICBmb3IgKGxldCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmICh2YWx1ZSA9ICt2YWx1ZSkgPj0gdmFsdWUpIHtcbiAgICAgICAgeWllbGQgdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxldCBpbmRleCA9IC0xO1xuICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWUsICsraW5kZXgsIHZhbHVlcykpICE9IG51bGwgJiYgKHZhbHVlID0gK3ZhbHVlKSA+PSB2YWx1ZSkge1xuICAgICAgICB5aWVsZCB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBhc2NlbmRpbmcgZnJvbSBcIi4vYXNjZW5kaW5nLmpzXCI7XG5pbXBvcnQgYmlzZWN0b3IgZnJvbSBcIi4vYmlzZWN0b3IuanNcIjtcbmltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyLmpzXCI7XG5cbmNvbnN0IGFzY2VuZGluZ0Jpc2VjdCA9IGJpc2VjdG9yKGFzY2VuZGluZyk7XG5leHBvcnQgY29uc3QgYmlzZWN0UmlnaHQgPSBhc2NlbmRpbmdCaXNlY3QucmlnaHQ7XG5leHBvcnQgY29uc3QgYmlzZWN0TGVmdCA9IGFzY2VuZGluZ0Jpc2VjdC5sZWZ0O1xuZXhwb3J0IGNvbnN0IGJpc2VjdENlbnRlciA9IGJpc2VjdG9yKG51bWJlcikuY2VudGVyO1xuZXhwb3J0IGRlZmF1bHQgYmlzZWN0UmlnaHQ7XG4iLCJpbXBvcnQgdmFsdWUgZnJvbSBcIi4vdmFsdWUuanNcIjtcbmltcG9ydCBudW1iZXJBcnJheSwge2lzTnVtYmVyQXJyYXl9IGZyb20gXCIuL251bWJlckFycmF5LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgcmV0dXJuIChpc051bWJlckFycmF5KGIpID8gbnVtYmVyQXJyYXkgOiBnZW5lcmljQXJyYXkpKGEsIGIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJpY0FycmF5KGEsIGIpIHtcbiAgdmFyIG5iID0gYiA/IGIubGVuZ3RoIDogMCxcbiAgICAgIG5hID0gYSA/IE1hdGgubWluKG5iLCBhLmxlbmd0aCkgOiAwLFxuICAgICAgeCA9IG5ldyBBcnJheShuYSksXG4gICAgICBjID0gbmV3IEFycmF5KG5iKSxcbiAgICAgIGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IG5hOyArK2kpIHhbaV0gPSB2YWx1ZShhW2ldLCBiW2ldKTtcbiAgZm9yICg7IGkgPCBuYjsgKytpKSBjW2ldID0gYltpXTtcblxuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIGZvciAoaSA9IDA7IGkgPCBuYTsgKytpKSBjW2ldID0geFtpXSh0KTtcbiAgICByZXR1cm4gYztcbiAgfTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIGQgPSBuZXcgRGF0ZTtcbiAgcmV0dXJuIGEgPSArYSwgYiA9ICtiLCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGQuc2V0VGltZShhICogKDEgLSB0KSArIGIgKiB0KSwgZDtcbiAgfTtcbn1cbiIsImltcG9ydCB2YWx1ZSBmcm9tIFwiLi92YWx1ZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBpID0ge30sXG4gICAgICBjID0ge30sXG4gICAgICBrO1xuXG4gIGlmIChhID09PSBudWxsIHx8IHR5cGVvZiBhICE9PSBcIm9iamVjdFwiKSBhID0ge307XG4gIGlmIChiID09PSBudWxsIHx8IHR5cGVvZiBiICE9PSBcIm9iamVjdFwiKSBiID0ge307XG5cbiAgZm9yIChrIGluIGIpIHtcbiAgICBpZiAoayBpbiBhKSB7XG4gICAgICBpW2tdID0gdmFsdWUoYVtrXSwgYltrXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNba10gPSBiW2tdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgZm9yIChrIGluIGkpIGNba10gPSBpW2tdKHQpO1xuICAgIHJldHVybiBjO1xuICB9O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICBpZiAoIWIpIGIgPSBbXTtcbiAgdmFyIG4gPSBhID8gTWF0aC5taW4oYi5sZW5ndGgsIGEubGVuZ3RoKSA6IDAsXG4gICAgICBjID0gYi5zbGljZSgpLFxuICAgICAgaTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSBjW2ldID0gYVtpXSAqICgxIC0gdCkgKyBiW2ldICogdDtcbiAgICByZXR1cm4gYztcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVtYmVyQXJyYXkoeCkge1xuICByZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KHgpICYmICEoeCBpbnN0YW5jZW9mIERhdGFWaWV3KTtcbn1cbiIsImltcG9ydCB7Y29sb3J9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IHJnYiBmcm9tIFwiLi9yZ2IuanNcIjtcbmltcG9ydCB7Z2VuZXJpY0FycmF5fSBmcm9tIFwiLi9hcnJheS5qc1wiO1xuaW1wb3J0IGRhdGUgZnJvbSBcIi4vZGF0ZS5qc1wiO1xuaW1wb3J0IG51bWJlciBmcm9tIFwiLi9udW1iZXIuanNcIjtcbmltcG9ydCBvYmplY3QgZnJvbSBcIi4vb2JqZWN0LmpzXCI7XG5pbXBvcnQgc3RyaW5nIGZyb20gXCIuL3N0cmluZy5qc1wiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50LmpzXCI7XG5pbXBvcnQgbnVtYmVyQXJyYXksIHtpc051bWJlckFycmF5fSBmcm9tIFwiLi9udW1iZXJBcnJheS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciB0ID0gdHlwZW9mIGIsIGM7XG4gIHJldHVybiBiID09IG51bGwgfHwgdCA9PT0gXCJib29sZWFuXCIgPyBjb25zdGFudChiKVxuICAgICAgOiAodCA9PT0gXCJudW1iZXJcIiA/IG51bWJlclxuICAgICAgOiB0ID09PSBcInN0cmluZ1wiID8gKChjID0gY29sb3IoYikpID8gKGIgPSBjLCByZ2IpIDogc3RyaW5nKVxuICAgICAgOiBiIGluc3RhbmNlb2YgY29sb3IgPyByZ2JcbiAgICAgIDogYiBpbnN0YW5jZW9mIERhdGUgPyBkYXRlXG4gICAgICA6IGlzTnVtYmVyQXJyYXkoYikgPyBudW1iZXJBcnJheVxuICAgICAgOiBBcnJheS5pc0FycmF5KGIpID8gZ2VuZXJpY0FycmF5XG4gICAgICA6IHR5cGVvZiBiLnZhbHVlT2YgIT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgYi50b1N0cmluZyAhPT0gXCJmdW5jdGlvblwiIHx8IGlzTmFOKGIpID8gb2JqZWN0XG4gICAgICA6IG51bWJlcikoYSwgYik7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiBhID0gK2EsIGIgPSArYiwgZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKGEgKiAoMSAtIHQpICsgYiAqIHQpO1xuICB9O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29uc3RhbnRzKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgcmV0dXJuICt4O1xufVxuIiwiaW1wb3J0IHtiaXNlY3R9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtpbnRlcnBvbGF0ZSBhcyBpbnRlcnBvbGF0ZVZhbHVlLCBpbnRlcnBvbGF0ZU51bWJlciwgaW50ZXJwb2xhdGVSb3VuZH0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyLmpzXCI7XG5cbnZhciB1bml0ID0gWzAsIDFdO1xuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHkoeCkge1xuICByZXR1cm4geDtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplKGEsIGIpIHtcbiAgcmV0dXJuIChiIC09IChhID0gK2EpKVxuICAgICAgPyBmdW5jdGlvbih4KSB7IHJldHVybiAoeCAtIGEpIC8gYjsgfVxuICAgICAgOiBjb25zdGFudChpc05hTihiKSA/IE5hTiA6IDAuNSk7XG59XG5cbmZ1bmN0aW9uIGNsYW1wZXIoYSwgYikge1xuICB2YXIgdDtcbiAgaWYgKGEgPiBiKSB0ID0gYSwgYSA9IGIsIGIgPSB0O1xuICByZXR1cm4gZnVuY3Rpb24oeCkgeyByZXR1cm4gTWF0aC5tYXgoYSwgTWF0aC5taW4oYiwgeCkpOyB9O1xufVxuXG4vLyBub3JtYWxpemUoYSwgYikoeCkgdGFrZXMgYSBkb21haW4gdmFsdWUgeCBpbiBbYSxiXSBhbmQgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBwYXJhbWV0ZXIgdCBpbiBbMCwxXS5cbi8vIGludGVycG9sYXRlKGEsIGIpKHQpIHRha2VzIGEgcGFyYW1ldGVyIHQgaW4gWzAsMV0gYW5kIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcmFuZ2UgdmFsdWUgeCBpbiBbYSxiXS5cbmZ1bmN0aW9uIGJpbWFwKGRvbWFpbiwgcmFuZ2UsIGludGVycG9sYXRlKSB7XG4gIHZhciBkMCA9IGRvbWFpblswXSwgZDEgPSBkb21haW5bMV0sIHIwID0gcmFuZ2VbMF0sIHIxID0gcmFuZ2VbMV07XG4gIGlmIChkMSA8IGQwKSBkMCA9IG5vcm1hbGl6ZShkMSwgZDApLCByMCA9IGludGVycG9sYXRlKHIxLCByMCk7XG4gIGVsc2UgZDAgPSBub3JtYWxpemUoZDAsIGQxKSwgcjAgPSBpbnRlcnBvbGF0ZShyMCwgcjEpO1xuICByZXR1cm4gZnVuY3Rpb24oeCkgeyByZXR1cm4gcjAoZDAoeCkpOyB9O1xufVxuXG5mdW5jdGlvbiBwb2x5bWFwKGRvbWFpbiwgcmFuZ2UsIGludGVycG9sYXRlKSB7XG4gIHZhciBqID0gTWF0aC5taW4oZG9tYWluLmxlbmd0aCwgcmFuZ2UubGVuZ3RoKSAtIDEsXG4gICAgICBkID0gbmV3IEFycmF5KGopLFxuICAgICAgciA9IG5ldyBBcnJheShqKSxcbiAgICAgIGkgPSAtMTtcblxuICAvLyBSZXZlcnNlIGRlc2NlbmRpbmcgZG9tYWlucy5cbiAgaWYgKGRvbWFpbltqXSA8IGRvbWFpblswXSkge1xuICAgIGRvbWFpbiA9IGRvbWFpbi5zbGljZSgpLnJldmVyc2UoKTtcbiAgICByYW5nZSA9IHJhbmdlLnNsaWNlKCkucmV2ZXJzZSgpO1xuICB9XG5cbiAgd2hpbGUgKCsraSA8IGopIHtcbiAgICBkW2ldID0gbm9ybWFsaXplKGRvbWFpbltpXSwgZG9tYWluW2kgKyAxXSk7XG4gICAgcltpXSA9IGludGVycG9sYXRlKHJhbmdlW2ldLCByYW5nZVtpICsgMV0pO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHgpIHtcbiAgICB2YXIgaSA9IGJpc2VjdChkb21haW4sIHgsIDEsIGopIC0gMTtcbiAgICByZXR1cm4gcltpXShkW2ldKHgpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHkoc291cmNlLCB0YXJnZXQpIHtcbiAgcmV0dXJuIHRhcmdldFxuICAgICAgLmRvbWFpbihzb3VyY2UuZG9tYWluKCkpXG4gICAgICAucmFuZ2Uoc291cmNlLnJhbmdlKCkpXG4gICAgICAuaW50ZXJwb2xhdGUoc291cmNlLmludGVycG9sYXRlKCkpXG4gICAgICAuY2xhbXAoc291cmNlLmNsYW1wKCkpXG4gICAgICAudW5rbm93bihzb3VyY2UudW5rbm93bigpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybWVyKCkge1xuICB2YXIgZG9tYWluID0gdW5pdCxcbiAgICAgIHJhbmdlID0gdW5pdCxcbiAgICAgIGludGVycG9sYXRlID0gaW50ZXJwb2xhdGVWYWx1ZSxcbiAgICAgIHRyYW5zZm9ybSxcbiAgICAgIHVudHJhbnNmb3JtLFxuICAgICAgdW5rbm93bixcbiAgICAgIGNsYW1wID0gaWRlbnRpdHksXG4gICAgICBwaWVjZXdpc2UsXG4gICAgICBvdXRwdXQsXG4gICAgICBpbnB1dDtcblxuICBmdW5jdGlvbiByZXNjYWxlKCkge1xuICAgIHZhciBuID0gTWF0aC5taW4oZG9tYWluLmxlbmd0aCwgcmFuZ2UubGVuZ3RoKTtcbiAgICBpZiAoY2xhbXAgIT09IGlkZW50aXR5KSBjbGFtcCA9IGNsYW1wZXIoZG9tYWluWzBdLCBkb21haW5bbiAtIDFdKTtcbiAgICBwaWVjZXdpc2UgPSBuID4gMiA/IHBvbHltYXAgOiBiaW1hcDtcbiAgICBvdXRwdXQgPSBpbnB1dCA9IG51bGw7XG4gICAgcmV0dXJuIHNjYWxlO1xuICB9XG5cbiAgZnVuY3Rpb24gc2NhbGUoeCkge1xuICAgIHJldHVybiB4ID09IG51bGwgfHwgaXNOYU4oeCA9ICt4KSA/IHVua25vd24gOiAob3V0cHV0IHx8IChvdXRwdXQgPSBwaWVjZXdpc2UoZG9tYWluLm1hcCh0cmFuc2Zvcm0pLCByYW5nZSwgaW50ZXJwb2xhdGUpKSkodHJhbnNmb3JtKGNsYW1wKHgpKSk7XG4gIH1cblxuICBzY2FsZS5pbnZlcnQgPSBmdW5jdGlvbih5KSB7XG4gICAgcmV0dXJuIGNsYW1wKHVudHJhbnNmb3JtKChpbnB1dCB8fCAoaW5wdXQgPSBwaWVjZXdpc2UocmFuZ2UsIGRvbWFpbi5tYXAodHJhbnNmb3JtKSwgaW50ZXJwb2xhdGVOdW1iZXIpKSkoeSkpKTtcbiAgfTtcblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZG9tYWluID0gQXJyYXkuZnJvbShfLCBudW1iZXIpLCByZXNjYWxlKCkpIDogZG9tYWluLnNsaWNlKCk7XG4gIH07XG5cbiAgc2NhbGUucmFuZ2UgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocmFuZ2UgPSBBcnJheS5mcm9tKF8pLCByZXNjYWxlKCkpIDogcmFuZ2Uuc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS5yYW5nZVJvdW5kID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiByYW5nZSA9IEFycmF5LmZyb20oXyksIGludGVycG9sYXRlID0gaW50ZXJwb2xhdGVSb3VuZCwgcmVzY2FsZSgpO1xuICB9O1xuXG4gIHNjYWxlLmNsYW1wID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNsYW1wID0gXyA/IHRydWUgOiBpZGVudGl0eSwgcmVzY2FsZSgpKSA6IGNsYW1wICE9PSBpZGVudGl0eTtcbiAgfTtcblxuICBzY2FsZS5pbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpbnRlcnBvbGF0ZSA9IF8sIHJlc2NhbGUoKSkgOiBpbnRlcnBvbGF0ZTtcbiAgfTtcblxuICBzY2FsZS51bmtub3duID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHVua25vd24gPSBfLCBzY2FsZSkgOiB1bmtub3duO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbih0LCB1KSB7XG4gICAgdHJhbnNmb3JtID0gdCwgdW50cmFuc2Zvcm0gPSB1O1xuICAgIHJldHVybiByZXNjYWxlKCk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbnRpbnVvdXMoKSB7XG4gIHJldHVybiB0cmFuc2Zvcm1lcigpKGlkZW50aXR5LCBpZGVudGl0eSk7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gaW5pdFJhbmdlKGRvbWFpbiwgcmFuZ2UpIHtcbiAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiBicmVhaztcbiAgICBjYXNlIDE6IHRoaXMucmFuZ2UoZG9tYWluKTsgYnJlYWs7XG4gICAgZGVmYXVsdDogdGhpcy5yYW5nZShyYW5nZSkuZG9tYWluKGRvbWFpbik7IGJyZWFrO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdEludGVycG9sYXRvcihkb21haW4sIGludGVycG9sYXRvcikge1xuICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IGJyZWFrO1xuICAgIGNhc2UgMToge1xuICAgICAgaWYgKHR5cGVvZiBkb21haW4gPT09IFwiZnVuY3Rpb25cIikgdGhpcy5pbnRlcnBvbGF0b3IoZG9tYWluKTtcbiAgICAgIGVsc2UgdGhpcy5yYW5nZShkb21haW4pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHRoaXMuZG9tYWluKGRvbWFpbik7XG4gICAgICBpZiAodHlwZW9mIGludGVycG9sYXRvciA9PT0gXCJmdW5jdGlvblwiKSB0aGlzLmludGVycG9sYXRvcihpbnRlcnBvbGF0b3IpO1xuICAgICAgZWxzZSB0aGlzLnJhbmdlKGludGVycG9sYXRvcik7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG4iLCIvLyBbW2ZpbGxdYWxpZ25dW3NpZ25dW3N5bWJvbF1bMF1bd2lkdGhdWyxdWy5wcmVjaXNpb25dW35dW3R5cGVdXG52YXIgcmUgPSAvXig/OiguKT8oWzw+PV5dKSk/KFsrXFwtKCBdKT8oWyQjXSk/KDApPyhcXGQrKT8oLCk/KFxcLlxcZCspPyh+KT8oW2EteiVdKT8kL2k7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpIHtcbiAgaWYgKCEobWF0Y2ggPSByZS5leGVjKHNwZWNpZmllcikpKSB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGZvcm1hdDogXCIgKyBzcGVjaWZpZXIpO1xuICB2YXIgbWF0Y2g7XG4gIHJldHVybiBuZXcgRm9ybWF0U3BlY2lmaWVyKHtcbiAgICBmaWxsOiBtYXRjaFsxXSxcbiAgICBhbGlnbjogbWF0Y2hbMl0sXG4gICAgc2lnbjogbWF0Y2hbM10sXG4gICAgc3ltYm9sOiBtYXRjaFs0XSxcbiAgICB6ZXJvOiBtYXRjaFs1XSxcbiAgICB3aWR0aDogbWF0Y2hbNl0sXG4gICAgY29tbWE6IG1hdGNoWzddLFxuICAgIHByZWNpc2lvbjogbWF0Y2hbOF0gJiYgbWF0Y2hbOF0uc2xpY2UoMSksXG4gICAgdHJpbTogbWF0Y2hbOV0sXG4gICAgdHlwZTogbWF0Y2hbMTBdXG4gIH0pO1xufVxuXG5mb3JtYXRTcGVjaWZpZXIucHJvdG90eXBlID0gRm9ybWF0U3BlY2lmaWVyLnByb3RvdHlwZTsgLy8gaW5zdGFuY2VvZlxuXG5leHBvcnQgZnVuY3Rpb24gRm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllcikge1xuICB0aGlzLmZpbGwgPSBzcGVjaWZpZXIuZmlsbCA9PT0gdW5kZWZpbmVkID8gXCIgXCIgOiBzcGVjaWZpZXIuZmlsbCArIFwiXCI7XG4gIHRoaXMuYWxpZ24gPSBzcGVjaWZpZXIuYWxpZ24gPT09IHVuZGVmaW5lZCA/IFwiPlwiIDogc3BlY2lmaWVyLmFsaWduICsgXCJcIjtcbiAgdGhpcy5zaWduID0gc3BlY2lmaWVyLnNpZ24gPT09IHVuZGVmaW5lZCA/IFwiLVwiIDogc3BlY2lmaWVyLnNpZ24gKyBcIlwiO1xuICB0aGlzLnN5bWJvbCA9IHNwZWNpZmllci5zeW1ib2wgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBzcGVjaWZpZXIuc3ltYm9sICsgXCJcIjtcbiAgdGhpcy56ZXJvID0gISFzcGVjaWZpZXIuemVybztcbiAgdGhpcy53aWR0aCA9IHNwZWNpZmllci53aWR0aCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogK3NwZWNpZmllci53aWR0aDtcbiAgdGhpcy5jb21tYSA9ICEhc3BlY2lmaWVyLmNvbW1hO1xuICB0aGlzLnByZWNpc2lvbiA9IHNwZWNpZmllci5wcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6ICtzcGVjaWZpZXIucHJlY2lzaW9uO1xuICB0aGlzLnRyaW0gPSAhIXNwZWNpZmllci50cmltO1xuICB0aGlzLnR5cGUgPSBzcGVjaWZpZXIudHlwZSA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IHNwZWNpZmllci50eXBlICsgXCJcIjtcbn1cblxuRm9ybWF0U3BlY2lmaWVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5maWxsXG4gICAgICArIHRoaXMuYWxpZ25cbiAgICAgICsgdGhpcy5zaWduXG4gICAgICArIHRoaXMuc3ltYm9sXG4gICAgICArICh0aGlzLnplcm8gPyBcIjBcIiA6IFwiXCIpXG4gICAgICArICh0aGlzLndpZHRoID09PSB1bmRlZmluZWQgPyBcIlwiIDogTWF0aC5tYXgoMSwgdGhpcy53aWR0aCB8IDApKVxuICAgICAgKyAodGhpcy5jb21tYSA/IFwiLFwiIDogXCJcIilcbiAgICAgICsgKHRoaXMucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyBcIlwiIDogXCIuXCIgKyBNYXRoLm1heCgwLCB0aGlzLnByZWNpc2lvbiB8IDApKVxuICAgICAgKyAodGhpcy50cmltID8gXCJ+XCIgOiBcIlwiKVxuICAgICAgKyB0aGlzLnR5cGU7XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gTWF0aC5hYnMoeCA9IE1hdGgucm91bmQoeCkpID49IDFlMjFcbiAgICAgID8geC50b0xvY2FsZVN0cmluZyhcImVuXCIpLnJlcGxhY2UoLywvZywgXCJcIilcbiAgICAgIDogeC50b1N0cmluZygxMCk7XG59XG5cbi8vIENvbXB1dGVzIHRoZSBkZWNpbWFsIGNvZWZmaWNpZW50IGFuZCBleHBvbmVudCBvZiB0aGUgc3BlY2lmaWVkIG51bWJlciB4IHdpdGhcbi8vIHNpZ25pZmljYW50IGRpZ2l0cyBwLCB3aGVyZSB4IGlzIHBvc2l0aXZlIGFuZCBwIGlzIGluIFsxLCAyMV0gb3IgdW5kZWZpbmVkLlxuLy8gRm9yIGV4YW1wbGUsIGZvcm1hdERlY2ltYWxQYXJ0cygxLjIzKSByZXR1cm5zIFtcIjEyM1wiLCAwXS5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXREZWNpbWFsUGFydHMoeCwgcCkge1xuICBpZiAoKGkgPSAoeCA9IHAgPyB4LnRvRXhwb25lbnRpYWwocCAtIDEpIDogeC50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoXCJlXCIpKSA8IDApIHJldHVybiBudWxsOyAvLyBOYU4sIMKxSW5maW5pdHlcbiAgdmFyIGksIGNvZWZmaWNpZW50ID0geC5zbGljZSgwLCBpKTtcblxuICAvLyBUaGUgc3RyaW5nIHJldHVybmVkIGJ5IHRvRXhwb25lbnRpYWwgZWl0aGVyIGhhcyB0aGUgZm9ybSBcXGRcXC5cXGQrZVstK11cXGQrXG4gIC8vIChlLmcuLCAxLjJlKzMpIG9yIHRoZSBmb3JtIFxcZGVbLStdXFxkKyAoZS5nLiwgMWUrMykuXG4gIHJldHVybiBbXG4gICAgY29lZmZpY2llbnQubGVuZ3RoID4gMSA/IGNvZWZmaWNpZW50WzBdICsgY29lZmZpY2llbnQuc2xpY2UoMikgOiBjb2VmZmljaWVudCxcbiAgICAreC5zbGljZShpICsgMSlcbiAgXTtcbn1cbiIsImltcG9ydCB7Zm9ybWF0RGVjaW1hbFBhcnRzfSBmcm9tIFwiLi9mb3JtYXREZWNpbWFsLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHggPSBmb3JtYXREZWNpbWFsUGFydHMoTWF0aC5hYnMoeCkpLCB4ID8geFsxXSA6IE5hTjtcbn1cbiIsImltcG9ydCBleHBvbmVudCBmcm9tIFwiLi9leHBvbmVudC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzdGVwLCB2YWx1ZSkge1xuICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5tYXgoLTgsIE1hdGgubWluKDgsIE1hdGguZmxvb3IoZXhwb25lbnQodmFsdWUpIC8gMykpKSAqIDMgLSBleHBvbmVudChNYXRoLmFicyhzdGVwKSkpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZ3JvdXBpbmcsIHRob3VzYW5kcykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUsIHdpZHRoKSB7XG4gICAgdmFyIGkgPSB2YWx1ZS5sZW5ndGgsXG4gICAgICAgIHQgPSBbXSxcbiAgICAgICAgaiA9IDAsXG4gICAgICAgIGcgPSBncm91cGluZ1swXSxcbiAgICAgICAgbGVuZ3RoID0gMDtcblxuICAgIHdoaWxlIChpID4gMCAmJiBnID4gMCkge1xuICAgICAgaWYgKGxlbmd0aCArIGcgKyAxID4gd2lkdGgpIGcgPSBNYXRoLm1heCgxLCB3aWR0aCAtIGxlbmd0aCk7XG4gICAgICB0LnB1c2godmFsdWUuc3Vic3RyaW5nKGkgLT0gZywgaSArIGcpKTtcbiAgICAgIGlmICgobGVuZ3RoICs9IGcgKyAxKSA+IHdpZHRoKSBicmVhaztcbiAgICAgIGcgPSBncm91cGluZ1tqID0gKGogKyAxKSAlIGdyb3VwaW5nLmxlbmd0aF07XG4gICAgfVxuXG4gICAgcmV0dXJuIHQucmV2ZXJzZSgpLmpvaW4odGhvdXNhbmRzKTtcbiAgfTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG51bWVyYWxzKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9bMC05XS9nLCBmdW5jdGlvbihpKSB7XG4gICAgICByZXR1cm4gbnVtZXJhbHNbK2ldO1xuICAgIH0pO1xuICB9O1xufVxuIiwiLy8gVHJpbXMgaW5zaWduaWZpY2FudCB6ZXJvcywgZS5nLiwgcmVwbGFjZXMgMS4yMDAwayB3aXRoIDEuMmsuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzKSB7XG4gIG91dDogZm9yICh2YXIgbiA9IHMubGVuZ3RoLCBpID0gMSwgaTAgPSAtMSwgaTE7IGkgPCBuOyArK2kpIHtcbiAgICBzd2l0Y2ggKHNbaV0pIHtcbiAgICAgIGNhc2UgXCIuXCI6IGkwID0gaTEgPSBpOyBicmVhaztcbiAgICAgIGNhc2UgXCIwXCI6IGlmIChpMCA9PT0gMCkgaTAgPSBpOyBpMSA9IGk7IGJyZWFrO1xuICAgICAgZGVmYXVsdDogaWYgKCErc1tpXSkgYnJlYWsgb3V0OyBpZiAoaTAgPiAwKSBpMCA9IDA7IGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaTAgPiAwID8gcy5zbGljZSgwLCBpMCkgKyBzLnNsaWNlKGkxICsgMSkgOiBzO1xufVxuIiwiaW1wb3J0IHtmb3JtYXREZWNpbWFsUGFydHN9IGZyb20gXCIuL2Zvcm1hdERlY2ltYWwuanNcIjtcblxuZXhwb3J0IHZhciBwcmVmaXhFeHBvbmVudDtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCwgcCkge1xuICB2YXIgZCA9IGZvcm1hdERlY2ltYWxQYXJ0cyh4LCBwKTtcbiAgaWYgKCFkKSByZXR1cm4geCArIFwiXCI7XG4gIHZhciBjb2VmZmljaWVudCA9IGRbMF0sXG4gICAgICBleHBvbmVudCA9IGRbMV0sXG4gICAgICBpID0gZXhwb25lbnQgLSAocHJlZml4RXhwb25lbnQgPSBNYXRoLm1heCgtOCwgTWF0aC5taW4oOCwgTWF0aC5mbG9vcihleHBvbmVudCAvIDMpKSkgKiAzKSArIDEsXG4gICAgICBuID0gY29lZmZpY2llbnQubGVuZ3RoO1xuICByZXR1cm4gaSA9PT0gbiA/IGNvZWZmaWNpZW50XG4gICAgICA6IGkgPiBuID8gY29lZmZpY2llbnQgKyBuZXcgQXJyYXkoaSAtIG4gKyAxKS5qb2luKFwiMFwiKVxuICAgICAgOiBpID4gMCA/IGNvZWZmaWNpZW50LnNsaWNlKDAsIGkpICsgXCIuXCIgKyBjb2VmZmljaWVudC5zbGljZShpKVxuICAgICAgOiBcIjAuXCIgKyBuZXcgQXJyYXkoMSAtIGkpLmpvaW4oXCIwXCIpICsgZm9ybWF0RGVjaW1hbFBhcnRzKHgsIE1hdGgubWF4KDAsIHAgKyBpIC0gMSkpWzBdOyAvLyBsZXNzIHRoYW4gMXkhXG59XG4iLCJpbXBvcnQge2Zvcm1hdERlY2ltYWxQYXJ0c30gZnJvbSBcIi4vZm9ybWF0RGVjaW1hbC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4LCBwKSB7XG4gIHZhciBkID0gZm9ybWF0RGVjaW1hbFBhcnRzKHgsIHApO1xuICBpZiAoIWQpIHJldHVybiB4ICsgXCJcIjtcbiAgdmFyIGNvZWZmaWNpZW50ID0gZFswXSxcbiAgICAgIGV4cG9uZW50ID0gZFsxXTtcbiAgcmV0dXJuIGV4cG9uZW50IDwgMCA/IFwiMC5cIiArIG5ldyBBcnJheSgtZXhwb25lbnQpLmpvaW4oXCIwXCIpICsgY29lZmZpY2llbnRcbiAgICAgIDogY29lZmZpY2llbnQubGVuZ3RoID4gZXhwb25lbnQgKyAxID8gY29lZmZpY2llbnQuc2xpY2UoMCwgZXhwb25lbnQgKyAxKSArIFwiLlwiICsgY29lZmZpY2llbnQuc2xpY2UoZXhwb25lbnQgKyAxKVxuICAgICAgOiBjb2VmZmljaWVudCArIG5ldyBBcnJheShleHBvbmVudCAtIGNvZWZmaWNpZW50Lmxlbmd0aCArIDIpLmpvaW4oXCIwXCIpO1xufVxuIiwiaW1wb3J0IGZvcm1hdERlY2ltYWwgZnJvbSBcIi4vZm9ybWF0RGVjaW1hbC5qc1wiO1xuaW1wb3J0IGZvcm1hdFByZWZpeEF1dG8gZnJvbSBcIi4vZm9ybWF0UHJlZml4QXV0by5qc1wiO1xuaW1wb3J0IGZvcm1hdFJvdW5kZWQgZnJvbSBcIi4vZm9ybWF0Um91bmRlZC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFwiJVwiOiAoeCwgcCkgPT4gKHggKiAxMDApLnRvRml4ZWQocCksXG4gIFwiYlwiOiAoeCkgPT4gTWF0aC5yb3VuZCh4KS50b1N0cmluZygyKSxcbiAgXCJjXCI6ICh4KSA9PiB4ICsgXCJcIixcbiAgXCJkXCI6IGZvcm1hdERlY2ltYWwsXG4gIFwiZVwiOiAoeCwgcCkgPT4geC50b0V4cG9uZW50aWFsKHApLFxuICBcImZcIjogKHgsIHApID0+IHgudG9GaXhlZChwKSxcbiAgXCJnXCI6ICh4LCBwKSA9PiB4LnRvUHJlY2lzaW9uKHApLFxuICBcIm9cIjogKHgpID0+IE1hdGgucm91bmQoeCkudG9TdHJpbmcoOCksXG4gIFwicFwiOiAoeCwgcCkgPT4gZm9ybWF0Um91bmRlZCh4ICogMTAwLCBwKSxcbiAgXCJyXCI6IGZvcm1hdFJvdW5kZWQsXG4gIFwic1wiOiBmb3JtYXRQcmVmaXhBdXRvLFxuICBcIlhcIjogKHgpID0+IE1hdGgucm91bmQoeCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCksXG4gIFwieFwiOiAoeCkgPT4gTWF0aC5yb3VuZCh4KS50b1N0cmluZygxNilcbn07XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiB4O1xufVxuIiwiaW1wb3J0IGV4cG9uZW50IGZyb20gXCIuL2V4cG9uZW50LmpzXCI7XG5pbXBvcnQgZm9ybWF0R3JvdXAgZnJvbSBcIi4vZm9ybWF0R3JvdXAuanNcIjtcbmltcG9ydCBmb3JtYXROdW1lcmFscyBmcm9tIFwiLi9mb3JtYXROdW1lcmFscy5qc1wiO1xuaW1wb3J0IGZvcm1hdFNwZWNpZmllciBmcm9tIFwiLi9mb3JtYXRTcGVjaWZpZXIuanNcIjtcbmltcG9ydCBmb3JtYXRUcmltIGZyb20gXCIuL2Zvcm1hdFRyaW0uanNcIjtcbmltcG9ydCBmb3JtYXRUeXBlcyBmcm9tIFwiLi9mb3JtYXRUeXBlcy5qc1wiO1xuaW1wb3J0IHtwcmVmaXhFeHBvbmVudH0gZnJvbSBcIi4vZm9ybWF0UHJlZml4QXV0by5qc1wiO1xuaW1wb3J0IGlkZW50aXR5IGZyb20gXCIuL2lkZW50aXR5LmpzXCI7XG5cbnZhciBtYXAgPSBBcnJheS5wcm90b3R5cGUubWFwLFxuICAgIHByZWZpeGVzID0gW1wieVwiLFwielwiLFwiYVwiLFwiZlwiLFwicFwiLFwiblwiLFwiwrVcIixcIm1cIixcIlwiLFwia1wiLFwiTVwiLFwiR1wiLFwiVFwiLFwiUFwiLFwiRVwiLFwiWlwiLFwiWVwiXTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obG9jYWxlKSB7XG4gIHZhciBncm91cCA9IGxvY2FsZS5ncm91cGluZyA9PT0gdW5kZWZpbmVkIHx8IGxvY2FsZS50aG91c2FuZHMgPT09IHVuZGVmaW5lZCA/IGlkZW50aXR5IDogZm9ybWF0R3JvdXAobWFwLmNhbGwobG9jYWxlLmdyb3VwaW5nLCBOdW1iZXIpLCBsb2NhbGUudGhvdXNhbmRzICsgXCJcIiksXG4gICAgICBjdXJyZW5jeVByZWZpeCA9IGxvY2FsZS5jdXJyZW5jeSA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IGxvY2FsZS5jdXJyZW5jeVswXSArIFwiXCIsXG4gICAgICBjdXJyZW5jeVN1ZmZpeCA9IGxvY2FsZS5jdXJyZW5jeSA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IGxvY2FsZS5jdXJyZW5jeVsxXSArIFwiXCIsXG4gICAgICBkZWNpbWFsID0gbG9jYWxlLmRlY2ltYWwgPT09IHVuZGVmaW5lZCA/IFwiLlwiIDogbG9jYWxlLmRlY2ltYWwgKyBcIlwiLFxuICAgICAgbnVtZXJhbHMgPSBsb2NhbGUubnVtZXJhbHMgPT09IHVuZGVmaW5lZCA/IGlkZW50aXR5IDogZm9ybWF0TnVtZXJhbHMobWFwLmNhbGwobG9jYWxlLm51bWVyYWxzLCBTdHJpbmcpKSxcbiAgICAgIHBlcmNlbnQgPSBsb2NhbGUucGVyY2VudCA9PT0gdW5kZWZpbmVkID8gXCIlXCIgOiBsb2NhbGUucGVyY2VudCArIFwiXCIsXG4gICAgICBtaW51cyA9IGxvY2FsZS5taW51cyA9PT0gdW5kZWZpbmVkID8gXCLiiJJcIiA6IGxvY2FsZS5taW51cyArIFwiXCIsXG4gICAgICBuYW4gPSBsb2NhbGUubmFuID09PSB1bmRlZmluZWQgPyBcIk5hTlwiIDogbG9jYWxlLm5hbiArIFwiXCI7XG5cbiAgZnVuY3Rpb24gbmV3Rm9ybWF0KHNwZWNpZmllcikge1xuICAgIHNwZWNpZmllciA9IGZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpO1xuXG4gICAgdmFyIGZpbGwgPSBzcGVjaWZpZXIuZmlsbCxcbiAgICAgICAgYWxpZ24gPSBzcGVjaWZpZXIuYWxpZ24sXG4gICAgICAgIHNpZ24gPSBzcGVjaWZpZXIuc2lnbixcbiAgICAgICAgc3ltYm9sID0gc3BlY2lmaWVyLnN5bWJvbCxcbiAgICAgICAgemVybyA9IHNwZWNpZmllci56ZXJvLFxuICAgICAgICB3aWR0aCA9IHNwZWNpZmllci53aWR0aCxcbiAgICAgICAgY29tbWEgPSBzcGVjaWZpZXIuY29tbWEsXG4gICAgICAgIHByZWNpc2lvbiA9IHNwZWNpZmllci5wcmVjaXNpb24sXG4gICAgICAgIHRyaW0gPSBzcGVjaWZpZXIudHJpbSxcbiAgICAgICAgdHlwZSA9IHNwZWNpZmllci50eXBlO1xuXG4gICAgLy8gVGhlIFwiblwiIHR5cGUgaXMgYW4gYWxpYXMgZm9yIFwiLGdcIi5cbiAgICBpZiAodHlwZSA9PT0gXCJuXCIpIGNvbW1hID0gdHJ1ZSwgdHlwZSA9IFwiZ1wiO1xuXG4gICAgLy8gVGhlIFwiXCIgdHlwZSwgYW5kIGFueSBpbnZhbGlkIHR5cGUsIGlzIGFuIGFsaWFzIGZvciBcIi4xMn5nXCIuXG4gICAgZWxzZSBpZiAoIWZvcm1hdFR5cGVzW3R5cGVdKSBwcmVjaXNpb24gPT09IHVuZGVmaW5lZCAmJiAocHJlY2lzaW9uID0gMTIpLCB0cmltID0gdHJ1ZSwgdHlwZSA9IFwiZ1wiO1xuXG4gICAgLy8gSWYgemVybyBmaWxsIGlzIHNwZWNpZmllZCwgcGFkZGluZyBnb2VzIGFmdGVyIHNpZ24gYW5kIGJlZm9yZSBkaWdpdHMuXG4gICAgaWYgKHplcm8gfHwgKGZpbGwgPT09IFwiMFwiICYmIGFsaWduID09PSBcIj1cIikpIHplcm8gPSB0cnVlLCBmaWxsID0gXCIwXCIsIGFsaWduID0gXCI9XCI7XG5cbiAgICAvLyBDb21wdXRlIHRoZSBwcmVmaXggYW5kIHN1ZmZpeC5cbiAgICAvLyBGb3IgU0ktcHJlZml4LCB0aGUgc3VmZml4IGlzIGxhemlseSBjb21wdXRlZC5cbiAgICB2YXIgcHJlZml4ID0gc3ltYm9sID09PSBcIiRcIiA/IGN1cnJlbmN5UHJlZml4IDogc3ltYm9sID09PSBcIiNcIiAmJiAvW2JveFhdLy50ZXN0KHR5cGUpID8gXCIwXCIgKyB0eXBlLnRvTG93ZXJDYXNlKCkgOiBcIlwiLFxuICAgICAgICBzdWZmaXggPSBzeW1ib2wgPT09IFwiJFwiID8gY3VycmVuY3lTdWZmaXggOiAvWyVwXS8udGVzdCh0eXBlKSA/IHBlcmNlbnQgOiBcIlwiO1xuXG4gICAgLy8gV2hhdCBmb3JtYXQgZnVuY3Rpb24gc2hvdWxkIHdlIHVzZT9cbiAgICAvLyBJcyB0aGlzIGFuIGludGVnZXIgdHlwZT9cbiAgICAvLyBDYW4gdGhpcyB0eXBlIGdlbmVyYXRlIGV4cG9uZW50aWFsIG5vdGF0aW9uP1xuICAgIHZhciBmb3JtYXRUeXBlID0gZm9ybWF0VHlwZXNbdHlwZV0sXG4gICAgICAgIG1heWJlU3VmZml4ID0gL1tkZWZncHJzJV0vLnRlc3QodHlwZSk7XG5cbiAgICAvLyBTZXQgdGhlIGRlZmF1bHQgcHJlY2lzaW9uIGlmIG5vdCBzcGVjaWZpZWQsXG4gICAgLy8gb3IgY2xhbXAgdGhlIHNwZWNpZmllZCBwcmVjaXNpb24gdG8gdGhlIHN1cHBvcnRlZCByYW5nZS5cbiAgICAvLyBGb3Igc2lnbmlmaWNhbnQgcHJlY2lzaW9uLCBpdCBtdXN0IGJlIGluIFsxLCAyMV0uXG4gICAgLy8gRm9yIGZpeGVkIHByZWNpc2lvbiwgaXQgbXVzdCBiZSBpbiBbMCwgMjBdLlxuICAgIHByZWNpc2lvbiA9IHByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gNlxuICAgICAgICA6IC9bZ3Byc10vLnRlc3QodHlwZSkgPyBNYXRoLm1heCgxLCBNYXRoLm1pbigyMSwgcHJlY2lzaW9uKSlcbiAgICAgICAgOiBNYXRoLm1heCgwLCBNYXRoLm1pbigyMCwgcHJlY2lzaW9uKSk7XG5cbiAgICBmdW5jdGlvbiBmb3JtYXQodmFsdWUpIHtcbiAgICAgIHZhciB2YWx1ZVByZWZpeCA9IHByZWZpeCxcbiAgICAgICAgICB2YWx1ZVN1ZmZpeCA9IHN1ZmZpeCxcbiAgICAgICAgICBpLCBuLCBjO1xuXG4gICAgICBpZiAodHlwZSA9PT0gXCJjXCIpIHtcbiAgICAgICAgdmFsdWVTdWZmaXggPSBmb3JtYXRUeXBlKHZhbHVlKSArIHZhbHVlU3VmZml4O1xuICAgICAgICB2YWx1ZSA9IFwiXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9ICt2YWx1ZTtcblxuICAgICAgICAvLyBEZXRlcm1pbmUgdGhlIHNpZ24uIC0wIGlzIG5vdCBsZXNzIHRoYW4gMCwgYnV0IDEgLyAtMCBpcyFcbiAgICAgICAgdmFyIHZhbHVlTmVnYXRpdmUgPSB2YWx1ZSA8IDAgfHwgMSAvIHZhbHVlIDwgMDtcblxuICAgICAgICAvLyBQZXJmb3JtIHRoZSBpbml0aWFsIGZvcm1hdHRpbmcuXG4gICAgICAgIHZhbHVlID0gaXNOYU4odmFsdWUpID8gbmFuIDogZm9ybWF0VHlwZShNYXRoLmFicyh2YWx1ZSksIHByZWNpc2lvbik7XG5cbiAgICAgICAgLy8gVHJpbSBpbnNpZ25pZmljYW50IHplcm9zLlxuICAgICAgICBpZiAodHJpbSkgdmFsdWUgPSBmb3JtYXRUcmltKHZhbHVlKTtcblxuICAgICAgICAvLyBJZiBhIG5lZ2F0aXZlIHZhbHVlIHJvdW5kcyB0byB6ZXJvIGFmdGVyIGZvcm1hdHRpbmcsIGFuZCBubyBleHBsaWNpdCBwb3NpdGl2ZSBzaWduIGlzIHJlcXVlc3RlZCwgaGlkZSB0aGUgc2lnbi5cbiAgICAgICAgaWYgKHZhbHVlTmVnYXRpdmUgJiYgK3ZhbHVlID09PSAwICYmIHNpZ24gIT09IFwiK1wiKSB2YWx1ZU5lZ2F0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgLy8gQ29tcHV0ZSB0aGUgcHJlZml4IGFuZCBzdWZmaXguXG4gICAgICAgIHZhbHVlUHJlZml4ID0gKHZhbHVlTmVnYXRpdmUgPyAoc2lnbiA9PT0gXCIoXCIgPyBzaWduIDogbWludXMpIDogc2lnbiA9PT0gXCItXCIgfHwgc2lnbiA9PT0gXCIoXCIgPyBcIlwiIDogc2lnbikgKyB2YWx1ZVByZWZpeDtcbiAgICAgICAgdmFsdWVTdWZmaXggPSAodHlwZSA9PT0gXCJzXCIgPyBwcmVmaXhlc1s4ICsgcHJlZml4RXhwb25lbnQgLyAzXSA6IFwiXCIpICsgdmFsdWVTdWZmaXggKyAodmFsdWVOZWdhdGl2ZSAmJiBzaWduID09PSBcIihcIiA/IFwiKVwiIDogXCJcIik7XG5cbiAgICAgICAgLy8gQnJlYWsgdGhlIGZvcm1hdHRlZCB2YWx1ZSBpbnRvIHRoZSBpbnRlZ2VyIOKAnHZhbHVl4oCdIHBhcnQgdGhhdCBjYW4gYmVcbiAgICAgICAgLy8gZ3JvdXBlZCwgYW5kIGZyYWN0aW9uYWwgb3IgZXhwb25lbnRpYWwg4oCcc3VmZml44oCdIHBhcnQgdGhhdCBpcyBub3QuXG4gICAgICAgIGlmIChtYXliZVN1ZmZpeCkge1xuICAgICAgICAgIGkgPSAtMSwgbiA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgICAgICAgaWYgKGMgPSB2YWx1ZS5jaGFyQ29kZUF0KGkpLCA0OCA+IGMgfHwgYyA+IDU3KSB7XG4gICAgICAgICAgICAgIHZhbHVlU3VmZml4ID0gKGMgPT09IDQ2ID8gZGVjaW1hbCArIHZhbHVlLnNsaWNlKGkgKyAxKSA6IHZhbHVlLnNsaWNlKGkpKSArIHZhbHVlU3VmZml4O1xuICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhlIGZpbGwgY2hhcmFjdGVyIGlzIG5vdCBcIjBcIiwgZ3JvdXBpbmcgaXMgYXBwbGllZCBiZWZvcmUgcGFkZGluZy5cbiAgICAgIGlmIChjb21tYSAmJiAhemVybykgdmFsdWUgPSBncm91cCh2YWx1ZSwgSW5maW5pdHkpO1xuXG4gICAgICAvLyBDb21wdXRlIHRoZSBwYWRkaW5nLlxuICAgICAgdmFyIGxlbmd0aCA9IHZhbHVlUHJlZml4Lmxlbmd0aCArIHZhbHVlLmxlbmd0aCArIHZhbHVlU3VmZml4Lmxlbmd0aCxcbiAgICAgICAgICBwYWRkaW5nID0gbGVuZ3RoIDwgd2lkdGggPyBuZXcgQXJyYXkod2lkdGggLSBsZW5ndGggKyAxKS5qb2luKGZpbGwpIDogXCJcIjtcblxuICAgICAgLy8gSWYgdGhlIGZpbGwgY2hhcmFjdGVyIGlzIFwiMFwiLCBncm91cGluZyBpcyBhcHBsaWVkIGFmdGVyIHBhZGRpbmcuXG4gICAgICBpZiAoY29tbWEgJiYgemVybykgdmFsdWUgPSBncm91cChwYWRkaW5nICsgdmFsdWUsIHBhZGRpbmcubGVuZ3RoID8gd2lkdGggLSB2YWx1ZVN1ZmZpeC5sZW5ndGggOiBJbmZpbml0eSksIHBhZGRpbmcgPSBcIlwiO1xuXG4gICAgICAvLyBSZWNvbnN0cnVjdCB0aGUgZmluYWwgb3V0cHV0IGJhc2VkIG9uIHRoZSBkZXNpcmVkIGFsaWdubWVudC5cbiAgICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgICAgY2FzZSBcIjxcIjogdmFsdWUgPSB2YWx1ZVByZWZpeCArIHZhbHVlICsgdmFsdWVTdWZmaXggKyBwYWRkaW5nOyBicmVhaztcbiAgICAgICAgY2FzZSBcIj1cIjogdmFsdWUgPSB2YWx1ZVByZWZpeCArIHBhZGRpbmcgKyB2YWx1ZSArIHZhbHVlU3VmZml4OyBicmVhaztcbiAgICAgICAgY2FzZSBcIl5cIjogdmFsdWUgPSBwYWRkaW5nLnNsaWNlKDAsIGxlbmd0aCA9IHBhZGRpbmcubGVuZ3RoID4+IDEpICsgdmFsdWVQcmVmaXggKyB2YWx1ZSArIHZhbHVlU3VmZml4ICsgcGFkZGluZy5zbGljZShsZW5ndGgpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDogdmFsdWUgPSBwYWRkaW5nICsgdmFsdWVQcmVmaXggKyB2YWx1ZSArIHZhbHVlU3VmZml4OyBicmVhaztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bWVyYWxzKHZhbHVlKTtcbiAgICB9XG5cbiAgICBmb3JtYXQudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBzcGVjaWZpZXIgKyBcIlwiO1xuICAgIH07XG5cbiAgICByZXR1cm4gZm9ybWF0O1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0UHJlZml4KHNwZWNpZmllciwgdmFsdWUpIHtcbiAgICB2YXIgZiA9IG5ld0Zvcm1hdCgoc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllciksIHNwZWNpZmllci50eXBlID0gXCJmXCIsIHNwZWNpZmllcikpLFxuICAgICAgICBlID0gTWF0aC5tYXgoLTgsIE1hdGgubWluKDgsIE1hdGguZmxvb3IoZXhwb25lbnQodmFsdWUpIC8gMykpKSAqIDMsXG4gICAgICAgIGsgPSBNYXRoLnBvdygxMCwgLWUpLFxuICAgICAgICBwcmVmaXggPSBwcmVmaXhlc1s4ICsgZSAvIDNdO1xuICAgIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIGYoayAqIHZhbHVlKSArIHByZWZpeDtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBmb3JtYXQ6IG5ld0Zvcm1hdCxcbiAgICBmb3JtYXRQcmVmaXg6IGZvcm1hdFByZWZpeFxuICB9O1xufVxuIiwiaW1wb3J0IGZvcm1hdExvY2FsZSBmcm9tIFwiLi9sb2NhbGUuanNcIjtcblxudmFyIGxvY2FsZTtcbmV4cG9ydCB2YXIgZm9ybWF0O1xuZXhwb3J0IHZhciBmb3JtYXRQcmVmaXg7XG5cbmRlZmF1bHRMb2NhbGUoe1xuICB0aG91c2FuZHM6IFwiLFwiLFxuICBncm91cGluZzogWzNdLFxuICBjdXJyZW5jeTogW1wiJFwiLCBcIlwiXVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlZmF1bHRMb2NhbGUoZGVmaW5pdGlvbikge1xuICBsb2NhbGUgPSBmb3JtYXRMb2NhbGUoZGVmaW5pdGlvbik7XG4gIGZvcm1hdCA9IGxvY2FsZS5mb3JtYXQ7XG4gIGZvcm1hdFByZWZpeCA9IGxvY2FsZS5mb3JtYXRQcmVmaXg7XG4gIHJldHVybiBsb2NhbGU7XG59XG4iLCJpbXBvcnQgZXhwb25lbnQgZnJvbSBcIi4vZXhwb25lbnQuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc3RlcCwgbWF4KSB7XG4gIHN0ZXAgPSBNYXRoLmFicyhzdGVwKSwgbWF4ID0gTWF0aC5hYnMobWF4KSAtIHN0ZXA7XG4gIHJldHVybiBNYXRoLm1heCgwLCBleHBvbmVudChtYXgpIC0gZXhwb25lbnQoc3RlcCkpICsgMTtcbn1cbiIsImltcG9ydCBleHBvbmVudCBmcm9tIFwiLi9leHBvbmVudC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzdGVwKSB7XG4gIHJldHVybiBNYXRoLm1heCgwLCAtZXhwb25lbnQoTWF0aC5hYnMoc3RlcCkpKTtcbn1cbiIsImltcG9ydCB7dGlja1N0ZXB9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtmb3JtYXQsIGZvcm1hdFByZWZpeCwgZm9ybWF0U3BlY2lmaWVyLCBwcmVjaXNpb25GaXhlZCwgcHJlY2lzaW9uUHJlZml4LCBwcmVjaXNpb25Sb3VuZH0gZnJvbSBcImQzLWZvcm1hdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0aWNrRm9ybWF0KHN0YXJ0LCBzdG9wLCBjb3VudCwgc3BlY2lmaWVyKSB7XG4gIHZhciBzdGVwID0gdGlja1N0ZXAoc3RhcnQsIHN0b3AsIGNvdW50KSxcbiAgICAgIHByZWNpc2lvbjtcbiAgc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllciA9PSBudWxsID8gXCIsZlwiIDogc3BlY2lmaWVyKTtcbiAgc3dpdGNoIChzcGVjaWZpZXIudHlwZSkge1xuICAgIGNhc2UgXCJzXCI6IHtcbiAgICAgIHZhciB2YWx1ZSA9IE1hdGgubWF4KE1hdGguYWJzKHN0YXJ0KSwgTWF0aC5hYnMoc3RvcCkpO1xuICAgICAgaWYgKHNwZWNpZmllci5wcmVjaXNpb24gPT0gbnVsbCAmJiAhaXNOYU4ocHJlY2lzaW9uID0gcHJlY2lzaW9uUHJlZml4KHN0ZXAsIHZhbHVlKSkpIHNwZWNpZmllci5wcmVjaXNpb24gPSBwcmVjaXNpb247XG4gICAgICByZXR1cm4gZm9ybWF0UHJlZml4KHNwZWNpZmllciwgdmFsdWUpO1xuICAgIH1cbiAgICBjYXNlIFwiXCI6XG4gICAgY2FzZSBcImVcIjpcbiAgICBjYXNlIFwiZ1wiOlxuICAgIGNhc2UgXCJwXCI6XG4gICAgY2FzZSBcInJcIjoge1xuICAgICAgaWYgKHNwZWNpZmllci5wcmVjaXNpb24gPT0gbnVsbCAmJiAhaXNOYU4ocHJlY2lzaW9uID0gcHJlY2lzaW9uUm91bmQoc3RlcCwgTWF0aC5tYXgoTWF0aC5hYnMoc3RhcnQpLCBNYXRoLmFicyhzdG9wKSkpKSkgc3BlY2lmaWVyLnByZWNpc2lvbiA9IHByZWNpc2lvbiAtIChzcGVjaWZpZXIudHlwZSA9PT0gXCJlXCIpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgXCJmXCI6XG4gICAgY2FzZSBcIiVcIjoge1xuICAgICAgaWYgKHNwZWNpZmllci5wcmVjaXNpb24gPT0gbnVsbCAmJiAhaXNOYU4ocHJlY2lzaW9uID0gcHJlY2lzaW9uRml4ZWQoc3RlcCkpKSBzcGVjaWZpZXIucHJlY2lzaW9uID0gcHJlY2lzaW9uIC0gKHNwZWNpZmllci50eXBlID09PSBcIiVcIikgKiAyO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBmb3JtYXQoc3BlY2lmaWVyKTtcbn1cbiIsImltcG9ydCB7dGlja3MsIHRpY2tJbmNyZW1lbnR9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IGNvbnRpbnVvdXMsIHtjb3B5fSBmcm9tIFwiLi9jb250aW51b3VzLmpzXCI7XG5pbXBvcnQge2luaXRSYW5nZX0gZnJvbSBcIi4vaW5pdC5qc1wiO1xuaW1wb3J0IHRpY2tGb3JtYXQgZnJvbSBcIi4vdGlja0Zvcm1hdC5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gbGluZWFyaXNoKHNjYWxlKSB7XG4gIHZhciBkb21haW4gPSBzY2FsZS5kb21haW47XG5cbiAgc2NhbGUudGlja3MgPSBmdW5jdGlvbihjb3VudCkge1xuICAgIHZhciBkID0gZG9tYWluKCk7XG4gICAgcmV0dXJuIHRpY2tzKGRbMF0sIGRbZC5sZW5ndGggLSAxXSwgY291bnQgPT0gbnVsbCA/IDEwIDogY291bnQpO1xuICB9O1xuXG4gIHNjYWxlLnRpY2tGb3JtYXQgPSBmdW5jdGlvbihjb3VudCwgc3BlY2lmaWVyKSB7XG4gICAgdmFyIGQgPSBkb21haW4oKTtcbiAgICByZXR1cm4gdGlja0Zvcm1hdChkWzBdLCBkW2QubGVuZ3RoIC0gMV0sIGNvdW50ID09IG51bGwgPyAxMCA6IGNvdW50LCBzcGVjaWZpZXIpO1xuICB9O1xuXG4gIHNjYWxlLm5pY2UgPSBmdW5jdGlvbihjb3VudCkge1xuICAgIGlmIChjb3VudCA9PSBudWxsKSBjb3VudCA9IDEwO1xuXG4gICAgdmFyIGQgPSBkb21haW4oKTtcbiAgICB2YXIgaTAgPSAwO1xuICAgIHZhciBpMSA9IGQubGVuZ3RoIC0gMTtcbiAgICB2YXIgc3RhcnQgPSBkW2kwXTtcbiAgICB2YXIgc3RvcCA9IGRbaTFdO1xuICAgIHZhciBwcmVzdGVwO1xuICAgIHZhciBzdGVwO1xuICAgIHZhciBtYXhJdGVyID0gMTA7XG5cbiAgICBpZiAoc3RvcCA8IHN0YXJ0KSB7XG4gICAgICBzdGVwID0gc3RhcnQsIHN0YXJ0ID0gc3RvcCwgc3RvcCA9IHN0ZXA7XG4gICAgICBzdGVwID0gaTAsIGkwID0gaTEsIGkxID0gc3RlcDtcbiAgICB9XG4gICAgXG4gICAgd2hpbGUgKG1heEl0ZXItLSA+IDApIHtcbiAgICAgIHN0ZXAgPSB0aWNrSW5jcmVtZW50KHN0YXJ0LCBzdG9wLCBjb3VudCk7XG4gICAgICBpZiAoc3RlcCA9PT0gcHJlc3RlcCkge1xuICAgICAgICBkW2kwXSA9IHN0YXJ0XG4gICAgICAgIGRbaTFdID0gc3RvcFxuICAgICAgICByZXR1cm4gZG9tYWluKGQpO1xuICAgICAgfSBlbHNlIGlmIChzdGVwID4gMCkge1xuICAgICAgICBzdGFydCA9IE1hdGguZmxvb3Ioc3RhcnQgLyBzdGVwKSAqIHN0ZXA7XG4gICAgICAgIHN0b3AgPSBNYXRoLmNlaWwoc3RvcCAvIHN0ZXApICogc3RlcDtcbiAgICAgIH0gZWxzZSBpZiAoc3RlcCA8IDApIHtcbiAgICAgICAgc3RhcnQgPSBNYXRoLmNlaWwoc3RhcnQgKiBzdGVwKSAvIHN0ZXA7XG4gICAgICAgIHN0b3AgPSBNYXRoLmZsb29yKHN0b3AgKiBzdGVwKSAvIHN0ZXA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHByZXN0ZXAgPSBzdGVwO1xuICAgIH1cblxuICAgIHJldHVybiBzY2FsZTtcbiAgfTtcblxuICByZXR1cm4gc2NhbGU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxpbmVhcigpIHtcbiAgdmFyIHNjYWxlID0gY29udGludW91cygpO1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY29weShzY2FsZSwgbGluZWFyKCkpO1xuICB9O1xuXG4gIGluaXRSYW5nZS5hcHBseShzY2FsZSwgYXJndW1lbnRzKTtcblxuICByZXR1cm4gbGluZWFyaXNoKHNjYWxlKTtcbn1cbiIsImltcG9ydCB7YmlzZWN0fSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7bGluZWFyaXNofSBmcm9tIFwiLi9saW5lYXIuanNcIjtcbmltcG9ydCB7aW5pdFJhbmdlfSBmcm9tIFwiLi9pbml0LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHF1YW50aXplKCkge1xuICB2YXIgeDAgPSAwLFxuICAgICAgeDEgPSAxLFxuICAgICAgbiA9IDEsXG4gICAgICBkb21haW4gPSBbMC41XSxcbiAgICAgIHJhbmdlID0gWzAsIDFdLFxuICAgICAgdW5rbm93bjtcblxuICBmdW5jdGlvbiBzY2FsZSh4KSB7XG4gICAgcmV0dXJuIHggIT0gbnVsbCAmJiB4IDw9IHggPyByYW5nZVtiaXNlY3QoZG9tYWluLCB4LCAwLCBuKV0gOiB1bmtub3duO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzY2FsZSgpIHtcbiAgICB2YXIgaSA9IC0xO1xuICAgIGRvbWFpbiA9IG5ldyBBcnJheShuKTtcbiAgICB3aGlsZSAoKytpIDwgbikgZG9tYWluW2ldID0gKChpICsgMSkgKiB4MSAtIChpIC0gbikgKiB4MCkgLyAobiArIDEpO1xuICAgIHJldHVybiBzY2FsZTtcbiAgfVxuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChbeDAsIHgxXSA9IF8sIHgwID0gK3gwLCB4MSA9ICt4MSwgcmVzY2FsZSgpKSA6IFt4MCwgeDFdO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKG4gPSAocmFuZ2UgPSBBcnJheS5mcm9tKF8pKS5sZW5ndGggLSAxLCByZXNjYWxlKCkpIDogcmFuZ2Uuc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS5pbnZlcnRFeHRlbnQgPSBmdW5jdGlvbih5KSB7XG4gICAgdmFyIGkgPSByYW5nZS5pbmRleE9mKHkpO1xuICAgIHJldHVybiBpIDwgMCA/IFtOYU4sIE5hTl1cbiAgICAgICAgOiBpIDwgMSA/IFt4MCwgZG9tYWluWzBdXVxuICAgICAgICA6IGkgPj0gbiA/IFtkb21haW5bbiAtIDFdLCB4MV1cbiAgICAgICAgOiBbZG9tYWluW2kgLSAxXSwgZG9tYWluW2ldXTtcbiAgfTtcblxuICBzY2FsZS51bmtub3duID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHVua25vd24gPSBfLCBzY2FsZSkgOiBzY2FsZTtcbiAgfTtcblxuICBzY2FsZS50aHJlc2hvbGRzID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRvbWFpbi5zbGljZSgpO1xuICB9O1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gcXVhbnRpemUoKVxuICAgICAgICAuZG9tYWluKFt4MCwgeDFdKVxuICAgICAgICAucmFuZ2UocmFuZ2UpXG4gICAgICAgIC51bmtub3duKHVua25vd24pO1xuICB9O1xuXG4gIHJldHVybiBpbml0UmFuZ2UuYXBwbHkobGluZWFyaXNoKHNjYWxlKSwgYXJndW1lbnRzKTtcbn1cbiIsImltcG9ydCB7aW50ZXJwb2xhdGUsIGludGVycG9sYXRlUm91bmR9IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuaW1wb3J0IHtpZGVudGl0eX0gZnJvbSBcIi4vY29udGludW91cy5qc1wiO1xuaW1wb3J0IHtpbml0SW50ZXJwb2xhdG9yfSBmcm9tIFwiLi9pbml0LmpzXCI7XG5pbXBvcnQge2xpbmVhcmlzaH0gZnJvbSBcIi4vbGluZWFyLmpzXCI7XG5pbXBvcnQge2xvZ2dpc2h9IGZyb20gXCIuL2xvZy5qc1wiO1xuaW1wb3J0IHtzeW1sb2dpc2h9IGZyb20gXCIuL3N5bWxvZy5qc1wiO1xuaW1wb3J0IHtwb3dpc2h9IGZyb20gXCIuL3Bvdy5qc1wiO1xuXG5mdW5jdGlvbiB0cmFuc2Zvcm1lcigpIHtcbiAgdmFyIHgwID0gMCxcbiAgICAgIHgxID0gMSxcbiAgICAgIHQwLFxuICAgICAgdDEsXG4gICAgICBrMTAsXG4gICAgICB0cmFuc2Zvcm0sXG4gICAgICBpbnRlcnBvbGF0b3IgPSBpZGVudGl0eSxcbiAgICAgIGNsYW1wID0gZmFsc2UsXG4gICAgICB1bmtub3duO1xuXG4gIGZ1bmN0aW9uIHNjYWxlKHgpIHtcbiAgICByZXR1cm4geCA9PSBudWxsIHx8IGlzTmFOKHggPSAreCkgPyB1bmtub3duIDogaW50ZXJwb2xhdG9yKGsxMCA9PT0gMCA/IDAuNSA6ICh4ID0gKHRyYW5zZm9ybSh4KSAtIHQwKSAqIGsxMCwgY2xhbXAgPyBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCB4KSkgOiB4KSk7XG4gIH1cblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoW3gwLCB4MV0gPSBfLCB0MCA9IHRyYW5zZm9ybSh4MCA9ICt4MCksIHQxID0gdHJhbnNmb3JtKHgxID0gK3gxKSwgazEwID0gdDAgPT09IHQxID8gMCA6IDEgLyAodDEgLSB0MCksIHNjYWxlKSA6IFt4MCwgeDFdO1xuICB9O1xuXG4gIHNjYWxlLmNsYW1wID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNsYW1wID0gISFfLCBzY2FsZSkgOiBjbGFtcDtcbiAgfTtcblxuICBzY2FsZS5pbnRlcnBvbGF0b3IgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoaW50ZXJwb2xhdG9yID0gXywgc2NhbGUpIDogaW50ZXJwb2xhdG9yO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHJhbmdlKGludGVycG9sYXRlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKF8pIHtcbiAgICAgIHZhciByMCwgcjE7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChbcjAsIHIxXSA9IF8sIGludGVycG9sYXRvciA9IGludGVycG9sYXRlKHIwLCByMSksIHNjYWxlKSA6IFtpbnRlcnBvbGF0b3IoMCksIGludGVycG9sYXRvcigxKV07XG4gICAgfTtcbiAgfVxuXG4gIHNjYWxlLnJhbmdlID0gcmFuZ2UoaW50ZXJwb2xhdGUpO1xuXG4gIHNjYWxlLnJhbmdlUm91bmQgPSByYW5nZShpbnRlcnBvbGF0ZVJvdW5kKTtcblxuICBzY2FsZS51bmtub3duID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHVua25vd24gPSBfLCBzY2FsZSkgOiB1bmtub3duO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdHJhbnNmb3JtID0gdCwgdDAgPSB0KHgwKSwgdDEgPSB0KHgxKSwgazEwID0gdDAgPT09IHQxID8gMCA6IDEgLyAodDEgLSB0MCk7XG4gICAgcmV0dXJuIHNjYWxlO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29weShzb3VyY2UsIHRhcmdldCkge1xuICByZXR1cm4gdGFyZ2V0XG4gICAgICAuZG9tYWluKHNvdXJjZS5kb21haW4oKSlcbiAgICAgIC5pbnRlcnBvbGF0b3Ioc291cmNlLmludGVycG9sYXRvcigpKVxuICAgICAgLmNsYW1wKHNvdXJjZS5jbGFtcCgpKVxuICAgICAgLnVua25vd24oc291cmNlLnVua25vd24oKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNlcXVlbnRpYWwoKSB7XG4gIHZhciBzY2FsZSA9IGxpbmVhcmlzaCh0cmFuc2Zvcm1lcigpKGlkZW50aXR5KSk7XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjb3B5KHNjYWxlLCBzZXF1ZW50aWFsKCkpO1xuICB9O1xuXG4gIHJldHVybiBpbml0SW50ZXJwb2xhdG9yLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VxdWVudGlhbExvZygpIHtcbiAgdmFyIHNjYWxlID0gbG9nZ2lzaCh0cmFuc2Zvcm1lcigpKS5kb21haW4oWzEsIDEwXSk7XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjb3B5KHNjYWxlLCBzZXF1ZW50aWFsTG9nKCkpLmJhc2Uoc2NhbGUuYmFzZSgpKTtcbiAgfTtcblxuICByZXR1cm4gaW5pdEludGVycG9sYXRvci5hcHBseShzY2FsZSwgYXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlcXVlbnRpYWxTeW1sb2coKSB7XG4gIHZhciBzY2FsZSA9IHN5bWxvZ2lzaCh0cmFuc2Zvcm1lcigpKTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNvcHkoc2NhbGUsIHNlcXVlbnRpYWxTeW1sb2coKSkuY29uc3RhbnQoc2NhbGUuY29uc3RhbnQoKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluaXRJbnRlcnBvbGF0b3IuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXF1ZW50aWFsUG93KCkge1xuICB2YXIgc2NhbGUgPSBwb3dpc2godHJhbnNmb3JtZXIoKSk7XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjb3B5KHNjYWxlLCBzZXF1ZW50aWFsUG93KCkpLmV4cG9uZW50KHNjYWxlLmV4cG9uZW50KCkpO1xuICB9O1xuXG4gIHJldHVybiBpbml0SW50ZXJwb2xhdG9yLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VxdWVudGlhbFNxcnQoKSB7XG4gIHJldHVybiBzZXF1ZW50aWFsUG93LmFwcGx5KG51bGwsIGFyZ3VtZW50cykuZXhwb25lbnQoMC41KTtcbn1cbiIsImV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVCYW5kLFxuICBwb2ludCBhcyBzY2FsZVBvaW50XG59IGZyb20gXCIuL2JhbmQuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZUlkZW50aXR5XG59IGZyb20gXCIuL2lkZW50aXR5LmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVMaW5lYXJcbn0gZnJvbSBcIi4vbGluZWFyLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVMb2dcbn0gZnJvbSBcIi4vbG9nLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVTeW1sb2dcbn0gZnJvbSBcIi4vc3ltbG9nLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVPcmRpbmFsLFxuICBpbXBsaWNpdCBhcyBzY2FsZUltcGxpY2l0XG59IGZyb20gXCIuL29yZGluYWwuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZVBvdyxcbiAgc3FydCBhcyBzY2FsZVNxcnRcbn0gZnJvbSBcIi4vcG93LmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVSYWRpYWxcbn0gZnJvbSBcIi4vcmFkaWFsLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVRdWFudGlsZVxufSBmcm9tIFwiLi9xdWFudGlsZS5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlUXVhbnRpemVcbn0gZnJvbSBcIi4vcXVhbnRpemUuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZVRocmVzaG9sZFxufSBmcm9tIFwiLi90aHJlc2hvbGQuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZVRpbWVcbn0gZnJvbSBcIi4vdGltZS5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlVXRjXG59IGZyb20gXCIuL3V0Y1RpbWUuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZVNlcXVlbnRpYWwsXG4gIHNlcXVlbnRpYWxMb2cgYXMgc2NhbGVTZXF1ZW50aWFsTG9nLFxuICBzZXF1ZW50aWFsUG93IGFzIHNjYWxlU2VxdWVudGlhbFBvdyxcbiAgc2VxdWVudGlhbFNxcnQgYXMgc2NhbGVTZXF1ZW50aWFsU3FydCxcbiAgc2VxdWVudGlhbFN5bWxvZyBhcyBzY2FsZVNlcXVlbnRpYWxTeW1sb2dcbn0gZnJvbSBcIi4vc2VxdWVudGlhbC5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlU2VxdWVudGlhbFF1YW50aWxlXG59IGZyb20gXCIuL3NlcXVlbnRpYWxRdWFudGlsZS5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlRGl2ZXJnaW5nLFxuICBkaXZlcmdpbmdMb2cgYXMgc2NhbGVEaXZlcmdpbmdMb2csXG4gIGRpdmVyZ2luZ1BvdyBhcyBzY2FsZURpdmVyZ2luZ1BvdyxcbiAgZGl2ZXJnaW5nU3FydCBhcyBzY2FsZURpdmVyZ2luZ1NxcnQsXG4gIGRpdmVyZ2luZ1N5bWxvZyBhcyBzY2FsZURpdmVyZ2luZ1N5bWxvZ1xufSBmcm9tIFwiLi9kaXZlcmdpbmcuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyB0aWNrRm9ybWF0XG59IGZyb20gXCIuL3RpY2tGb3JtYXQuanNcIjtcbiIsImV4cG9ydCBjb25zdCByYWRpYW5zID0gTWF0aC5QSSAvIDE4MDtcbmV4cG9ydCBjb25zdCBkZWdyZWVzID0gMTgwIC8gTWF0aC5QSTtcbiIsImltcG9ydCBkZWZpbmUsIHtleHRlbmR9IGZyb20gXCIuL2RlZmluZS5qc1wiO1xuaW1wb3J0IHtDb2xvciwgcmdiQ29udmVydCwgUmdiLCBkYXJrZXIsIGJyaWdodGVyfSBmcm9tIFwiLi9jb2xvci5qc1wiO1xuaW1wb3J0IHtkZWdyZWVzLCByYWRpYW5zfSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5cbnZhciBBID0gLTAuMTQ4NjEsXG4gICAgQiA9ICsxLjc4Mjc3LFxuICAgIEMgPSAtMC4yOTIyNyxcbiAgICBEID0gLTAuOTA2NDksXG4gICAgRSA9ICsxLjk3Mjk0LFxuICAgIEVEID0gRSAqIEQsXG4gICAgRUIgPSBFICogQixcbiAgICBCQ19EQSA9IEIgKiBDIC0gRCAqIEE7XG5cbmZ1bmN0aW9uIGN1YmVoZWxpeENvbnZlcnQobykge1xuICBpZiAobyBpbnN0YW5jZW9mIEN1YmVoZWxpeCkgcmV0dXJuIG5ldyBDdWJlaGVsaXgoby5oLCBvLnMsIG8ubCwgby5vcGFjaXR5KTtcbiAgaWYgKCEobyBpbnN0YW5jZW9mIFJnYikpIG8gPSByZ2JDb252ZXJ0KG8pO1xuICB2YXIgciA9IG8uciAvIDI1NSxcbiAgICAgIGcgPSBvLmcgLyAyNTUsXG4gICAgICBiID0gby5iIC8gMjU1LFxuICAgICAgbCA9IChCQ19EQSAqIGIgKyBFRCAqIHIgLSBFQiAqIGcpIC8gKEJDX0RBICsgRUQgLSBFQiksXG4gICAgICBibCA9IGIgLSBsLFxuICAgICAgayA9IChFICogKGcgLSBsKSAtIEMgKiBibCkgLyBELFxuICAgICAgcyA9IE1hdGguc3FydChrICogayArIGJsICogYmwpIC8gKEUgKiBsICogKDEgLSBsKSksIC8vIE5hTiBpZiBsPTAgb3IgbD0xXG4gICAgICBoID0gcyA/IE1hdGguYXRhbjIoaywgYmwpICogZGVncmVlcyAtIDEyMCA6IE5hTjtcbiAgcmV0dXJuIG5ldyBDdWJlaGVsaXgoaCA8IDAgPyBoICsgMzYwIDogaCwgcywgbCwgby5vcGFjaXR5KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3ViZWhlbGl4KGgsIHMsIGwsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBjdWJlaGVsaXhDb252ZXJ0KGgpIDogbmV3IEN1YmVoZWxpeChoLCBzLCBsLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDdWJlaGVsaXgoaCwgcywgbCwgb3BhY2l0eSkge1xuICB0aGlzLmggPSAraDtcbiAgdGhpcy5zID0gK3M7XG4gIHRoaXMubCA9ICtsO1xuICB0aGlzLm9wYWNpdHkgPSArb3BhY2l0eTtcbn1cblxuZGVmaW5lKEN1YmVoZWxpeCwgY3ViZWhlbGl4LCBleHRlbmQoQ29sb3IsIHtcbiAgYnJpZ2h0ZXI6IGZ1bmN0aW9uKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gYnJpZ2h0ZXIgOiBNYXRoLnBvdyhicmlnaHRlciwgayk7XG4gICAgcmV0dXJuIG5ldyBDdWJlaGVsaXgodGhpcy5oLCB0aGlzLnMsIHRoaXMubCAqIGssIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIGRhcmtlcjogZnVuY3Rpb24oaykge1xuICAgIGsgPSBrID09IG51bGwgPyBkYXJrZXIgOiBNYXRoLnBvdyhkYXJrZXIsIGspO1xuICAgIHJldHVybiBuZXcgQ3ViZWhlbGl4KHRoaXMuaCwgdGhpcy5zLCB0aGlzLmwgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICByZ2I6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBoID0gaXNOYU4odGhpcy5oKSA/IDAgOiAodGhpcy5oICsgMTIwKSAqIHJhZGlhbnMsXG4gICAgICAgIGwgPSArdGhpcy5sLFxuICAgICAgICBhID0gaXNOYU4odGhpcy5zKSA/IDAgOiB0aGlzLnMgKiBsICogKDEgLSBsKSxcbiAgICAgICAgY29zaCA9IE1hdGguY29zKGgpLFxuICAgICAgICBzaW5oID0gTWF0aC5zaW4oaCk7XG4gICAgcmV0dXJuIG5ldyBSZ2IoXG4gICAgICAyNTUgKiAobCArIGEgKiAoQSAqIGNvc2ggKyBCICogc2luaCkpLFxuICAgICAgMjU1ICogKGwgKyBhICogKEMgKiBjb3NoICsgRCAqIHNpbmgpKSxcbiAgICAgIDI1NSAqIChsICsgYSAqIChFICogY29zaCkpLFxuICAgICAgdGhpcy5vcGFjaXR5XG4gICAgKTtcbiAgfVxufSkpO1xuIiwiaW1wb3J0IHtjdWJlaGVsaXggYXMgY29sb3JDdWJlaGVsaXh9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IGNvbG9yLCB7aHVlfSBmcm9tIFwiLi9jb2xvci5qc1wiO1xuXG5mdW5jdGlvbiBjdWJlaGVsaXgoaHVlKSB7XG4gIHJldHVybiAoZnVuY3Rpb24gY3ViZWhlbGl4R2FtbWEoeSkge1xuICAgIHkgPSAreTtcblxuICAgIGZ1bmN0aW9uIGN1YmVoZWxpeChzdGFydCwgZW5kKSB7XG4gICAgICB2YXIgaCA9IGh1ZSgoc3RhcnQgPSBjb2xvckN1YmVoZWxpeChzdGFydCkpLmgsIChlbmQgPSBjb2xvckN1YmVoZWxpeChlbmQpKS5oKSxcbiAgICAgICAgICBzID0gY29sb3Ioc3RhcnQucywgZW5kLnMpLFxuICAgICAgICAgIGwgPSBjb2xvcihzdGFydC5sLCBlbmQubCksXG4gICAgICAgICAgb3BhY2l0eSA9IGNvbG9yKHN0YXJ0Lm9wYWNpdHksIGVuZC5vcGFjaXR5KTtcbiAgICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICAgIHN0YXJ0LmggPSBoKHQpO1xuICAgICAgICBzdGFydC5zID0gcyh0KTtcbiAgICAgICAgc3RhcnQubCA9IGwoTWF0aC5wb3codCwgeSkpO1xuICAgICAgICBzdGFydC5vcGFjaXR5ID0gb3BhY2l0eSh0KTtcbiAgICAgICAgcmV0dXJuIHN0YXJ0ICsgXCJcIjtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY3ViZWhlbGl4LmdhbW1hID0gY3ViZWhlbGl4R2FtbWE7XG5cbiAgICByZXR1cm4gY3ViZWhlbGl4O1xuICB9KSgxKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3ViZWhlbGl4KGh1ZSk7XG5leHBvcnQgdmFyIGN1YmVoZWxpeExvbmcgPSBjdWJlaGVsaXgoY29sb3IpO1xuIiwiaW1wb3J0IHtjdWJlaGVsaXh9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IHtpbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmd9IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuXG5leHBvcnQgdmFyIHdhcm0gPSBpbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmcoY3ViZWhlbGl4KC0xMDAsIDAuNzUsIDAuMzUpLCBjdWJlaGVsaXgoODAsIDEuNTAsIDAuOCkpO1xuXG5leHBvcnQgdmFyIGNvb2wgPSBpbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmcoY3ViZWhlbGl4KDI2MCwgMC43NSwgMC4zNSksIGN1YmVoZWxpeCg4MCwgMS41MCwgMC44KSk7XG5cbnZhciBjID0gY3ViZWhlbGl4KCk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHQpIHtcbiAgaWYgKHQgPCAwIHx8IHQgPiAxKSB0IC09IE1hdGguZmxvb3IodCk7XG4gIHZhciB0cyA9IE1hdGguYWJzKHQgLSAwLjUpO1xuICBjLmggPSAzNjAgKiB0IC0gMTAwO1xuICBjLnMgPSAxLjUgLSAxLjUgKiB0cztcbiAgYy5sID0gMC44IC0gMC45ICogdHM7XG4gIHJldHVybiBjICsgXCJcIjtcbn1cbiIsImV4cG9ydCB7ZGVmYXVsdCBhcyBzY2hlbWVDYXRlZ29yeTEwfSBmcm9tIFwiLi9jYXRlZ29yaWNhbC9jYXRlZ29yeTEwLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2NoZW1lQWNjZW50fSBmcm9tIFwiLi9jYXRlZ29yaWNhbC9BY2NlbnQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzY2hlbWVEYXJrMn0gZnJvbSBcIi4vY2F0ZWdvcmljYWwvRGFyazIuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzY2hlbWVQYWlyZWR9IGZyb20gXCIuL2NhdGVnb3JpY2FsL1BhaXJlZC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNjaGVtZVBhc3RlbDF9IGZyb20gXCIuL2NhdGVnb3JpY2FsL1Bhc3RlbDEuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzY2hlbWVQYXN0ZWwyfSBmcm9tIFwiLi9jYXRlZ29yaWNhbC9QYXN0ZWwyLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2NoZW1lU2V0MX0gZnJvbSBcIi4vY2F0ZWdvcmljYWwvU2V0MS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNjaGVtZVNldDJ9IGZyb20gXCIuL2NhdGVnb3JpY2FsL1NldDIuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzY2hlbWVTZXQzfSBmcm9tIFwiLi9jYXRlZ29yaWNhbC9TZXQzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2NoZW1lVGFibGVhdTEwfSBmcm9tIFwiLi9jYXRlZ29yaWNhbC9UYWJsZWF1MTAuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZUJyQkcsIHNjaGVtZSBhcyBzY2hlbWVCckJHfSBmcm9tIFwiLi9kaXZlcmdpbmcvQnJCRy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlUFJHbiwgc2NoZW1lIGFzIHNjaGVtZVBSR259IGZyb20gXCIuL2RpdmVyZ2luZy9QUkduLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVQaVlHLCBzY2hlbWUgYXMgc2NoZW1lUGlZR30gZnJvbSBcIi4vZGl2ZXJnaW5nL1BpWUcuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVB1T3IsIHNjaGVtZSBhcyBzY2hlbWVQdU9yfSBmcm9tIFwiLi9kaXZlcmdpbmcvUHVPci5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlUmRCdSwgc2NoZW1lIGFzIHNjaGVtZVJkQnV9IGZyb20gXCIuL2RpdmVyZ2luZy9SZEJ1LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVSZEd5LCBzY2hlbWUgYXMgc2NoZW1lUmRHeX0gZnJvbSBcIi4vZGl2ZXJnaW5nL1JkR3kuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVJkWWxCdSwgc2NoZW1lIGFzIHNjaGVtZVJkWWxCdX0gZnJvbSBcIi4vZGl2ZXJnaW5nL1JkWWxCdS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlUmRZbEduLCBzY2hlbWUgYXMgc2NoZW1lUmRZbEdufSBmcm9tIFwiLi9kaXZlcmdpbmcvUmRZbEduLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVTcGVjdHJhbCwgc2NoZW1lIGFzIHNjaGVtZVNwZWN0cmFsfSBmcm9tIFwiLi9kaXZlcmdpbmcvU3BlY3RyYWwuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZUJ1R24sIHNjaGVtZSBhcyBzY2hlbWVCdUdufSBmcm9tIFwiLi9zZXF1ZW50aWFsLW11bHRpL0J1R24uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZUJ1UHUsIHNjaGVtZSBhcyBzY2hlbWVCdVB1fSBmcm9tIFwiLi9zZXF1ZW50aWFsLW11bHRpL0J1UHUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZUduQnUsIHNjaGVtZSBhcyBzY2hlbWVHbkJ1fSBmcm9tIFwiLi9zZXF1ZW50aWFsLW11bHRpL0duQnUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZU9yUmQsIHNjaGVtZSBhcyBzY2hlbWVPclJkfSBmcm9tIFwiLi9zZXF1ZW50aWFsLW11bHRpL09yUmQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVB1QnVHbiwgc2NoZW1lIGFzIHNjaGVtZVB1QnVHbn0gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9QdUJ1R24uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVB1QnUsIHNjaGVtZSBhcyBzY2hlbWVQdUJ1fSBmcm9tIFwiLi9zZXF1ZW50aWFsLW11bHRpL1B1QnUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVB1UmQsIHNjaGVtZSBhcyBzY2hlbWVQdVJkfSBmcm9tIFwiLi9zZXF1ZW50aWFsLW11bHRpL1B1UmQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVJkUHUsIHNjaGVtZSBhcyBzY2hlbWVSZFB1fSBmcm9tIFwiLi9zZXF1ZW50aWFsLW11bHRpL1JkUHUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVlsR25CdSwgc2NoZW1lIGFzIHNjaGVtZVlsR25CdX0gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9ZbEduQnUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVlsR24sIHNjaGVtZSBhcyBzY2hlbWVZbEdufSBmcm9tIFwiLi9zZXF1ZW50aWFsLW11bHRpL1lsR24uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVlsT3JCciwgc2NoZW1lIGFzIHNjaGVtZVlsT3JCcn0gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9ZbE9yQnIuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVlsT3JSZCwgc2NoZW1lIGFzIHNjaGVtZVlsT3JSZH0gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9ZbE9yUmQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZUJsdWVzLCBzY2hlbWUgYXMgc2NoZW1lQmx1ZXN9IGZyb20gXCIuL3NlcXVlbnRpYWwtc2luZ2xlL0JsdWVzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVHcmVlbnMsIHNjaGVtZSBhcyBzY2hlbWVHcmVlbnN9IGZyb20gXCIuL3NlcXVlbnRpYWwtc2luZ2xlL0dyZWVucy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlR3JleXMsIHNjaGVtZSBhcyBzY2hlbWVHcmV5c30gZnJvbSBcIi4vc2VxdWVudGlhbC1zaW5nbGUvR3JleXMuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVB1cnBsZXMsIHNjaGVtZSBhcyBzY2hlbWVQdXJwbGVzfSBmcm9tIFwiLi9zZXF1ZW50aWFsLXNpbmdsZS9QdXJwbGVzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVSZWRzLCBzY2hlbWUgYXMgc2NoZW1lUmVkc30gZnJvbSBcIi4vc2VxdWVudGlhbC1zaW5nbGUvUmVkcy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlT3Jhbmdlcywgc2NoZW1lIGFzIHNjaGVtZU9yYW5nZXN9IGZyb20gXCIuL3NlcXVlbnRpYWwtc2luZ2xlL09yYW5nZXMuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZUNpdmlkaXN9IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvY2l2aWRpcy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlQ3ViZWhlbGl4RGVmYXVsdH0gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9jdWJlaGVsaXguanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVJhaW5ib3csIHdhcm0gYXMgaW50ZXJwb2xhdGVXYXJtLCBjb29sIGFzIGludGVycG9sYXRlQ29vbH0gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9yYWluYm93LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVTaW5lYm93fSBmcm9tIFwiLi9zZXF1ZW50aWFsLW11bHRpL3NpbmVib3cuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVR1cmJvfSBmcm9tIFwiLi9zZXF1ZW50aWFsLW11bHRpL3R1cmJvLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVWaXJpZGlzLCBtYWdtYSBhcyBpbnRlcnBvbGF0ZU1hZ21hLCBpbmZlcm5vIGFzIGludGVycG9sYXRlSW5mZXJubywgcGxhc21hIGFzIGludGVycG9sYXRlUGxhc21hfSBmcm9tIFwiLi9zZXF1ZW50aWFsLW11bHRpL3ZpcmlkaXMuanNcIjtcbiIsImltcG9ydCB7U2VsZWN0aW9uLCByb290fSBmcm9tIFwiLi9zZWxlY3Rpb24vaW5kZXguanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgcmV0dXJuIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBuZXcgU2VsZWN0aW9uKFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RvcildXSwgW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pXG4gICAgICA6IG5ldyBTZWxlY3Rpb24oW1tzZWxlY3Rvcl1dLCByb290KTtcbn1cbiIsImltcG9ydCBjcmVhdG9yIGZyb20gXCIuL2NyZWF0b3IuanNcIjtcbmltcG9ydCBzZWxlY3QgZnJvbSBcIi4vc2VsZWN0LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHNlbGVjdChjcmVhdG9yKG5hbWUpLmNhbGwoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSk7XG59XG4iLCJleHBvcnQge2RlZmF1bHQgYXMgY3JlYXRlfSBmcm9tIFwiLi9jcmVhdGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjcmVhdG9yfSBmcm9tIFwiLi9jcmVhdG9yLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbG9jYWx9IGZyb20gXCIuL2xvY2FsLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbWF0Y2hlcn0gZnJvbSBcIi4vbWF0Y2hlci5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIG5hbWVzcGFjZX0gZnJvbSBcIi4vbmFtZXNwYWNlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbmFtZXNwYWNlc30gZnJvbSBcIi4vbmFtZXNwYWNlcy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHBvaW50ZXJ9IGZyb20gXCIuL3BvaW50ZXIuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBwb2ludGVyc30gZnJvbSBcIi4vcG9pbnRlcnMuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzZWxlY3R9IGZyb20gXCIuL3NlbGVjdC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNlbGVjdEFsbH0gZnJvbSBcIi4vc2VsZWN0QWxsLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2VsZWN0aW9ufSBmcm9tIFwiLi9zZWxlY3Rpb24vaW5kZXguanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzZWxlY3Rvcn0gZnJvbSBcIi4vc2VsZWN0b3IuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzZWxlY3RvckFsbH0gZnJvbSBcIi4vc2VsZWN0b3JBbGwuanNcIjtcbmV4cG9ydCB7c3R5bGVWYWx1ZSBhcyBzdHlsZX0gZnJvbSBcIi4vc2VsZWN0aW9uL3N0eWxlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgd2luZG93fSBmcm9tIFwiLi93aW5kb3cuanNcIjtcbiIsImNvbnN0IHBpID0gTWF0aC5QSSxcbiAgICB0YXUgPSAyICogcGksXG4gICAgZXBzaWxvbiA9IDFlLTYsXG4gICAgdGF1RXBzaWxvbiA9IHRhdSAtIGVwc2lsb247XG5cbmZ1bmN0aW9uIFBhdGgoKSB7XG4gIHRoaXMuX3gwID0gdGhpcy5feTAgPSAvLyBzdGFydCBvZiBjdXJyZW50IHN1YnBhdGhcbiAgdGhpcy5feDEgPSB0aGlzLl95MSA9IG51bGw7IC8vIGVuZCBvZiBjdXJyZW50IHN1YnBhdGhcbiAgdGhpcy5fID0gXCJcIjtcbn1cblxuZnVuY3Rpb24gcGF0aCgpIHtcbiAgcmV0dXJuIG5ldyBQYXRoO1xufVxuXG5QYXRoLnByb3RvdHlwZSA9IHBhdGgucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogUGF0aCxcbiAgbW92ZVRvOiBmdW5jdGlvbih4LCB5KSB7XG4gICAgdGhpcy5fICs9IFwiTVwiICsgKHRoaXMuX3gwID0gdGhpcy5feDEgPSAreCkgKyBcIixcIiArICh0aGlzLl95MCA9IHRoaXMuX3kxID0gK3kpO1xuICB9LFxuICBjbG9zZVBhdGg6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl94MSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5feDEgPSB0aGlzLl94MCwgdGhpcy5feTEgPSB0aGlzLl95MDtcbiAgICAgIHRoaXMuXyArPSBcIlpcIjtcbiAgICB9XG4gIH0sXG4gIGxpbmVUbzogZnVuY3Rpb24oeCwgeSkge1xuICAgIHRoaXMuXyArPSBcIkxcIiArICh0aGlzLl94MSA9ICt4KSArIFwiLFwiICsgKHRoaXMuX3kxID0gK3kpO1xuICB9LFxuICBxdWFkcmF0aWNDdXJ2ZVRvOiBmdW5jdGlvbih4MSwgeTEsIHgsIHkpIHtcbiAgICB0aGlzLl8gKz0gXCJRXCIgKyAoK3gxKSArIFwiLFwiICsgKCt5MSkgKyBcIixcIiArICh0aGlzLl94MSA9ICt4KSArIFwiLFwiICsgKHRoaXMuX3kxID0gK3kpO1xuICB9LFxuICBiZXppZXJDdXJ2ZVRvOiBmdW5jdGlvbih4MSwgeTEsIHgyLCB5MiwgeCwgeSkge1xuICAgIHRoaXMuXyArPSBcIkNcIiArICgreDEpICsgXCIsXCIgKyAoK3kxKSArIFwiLFwiICsgKCt4MikgKyBcIixcIiArICgreTIpICsgXCIsXCIgKyAodGhpcy5feDEgPSAreCkgKyBcIixcIiArICh0aGlzLl95MSA9ICt5KTtcbiAgfSxcbiAgYXJjVG86IGZ1bmN0aW9uKHgxLCB5MSwgeDIsIHkyLCByKSB7XG4gICAgeDEgPSAreDEsIHkxID0gK3kxLCB4MiA9ICt4MiwgeTIgPSAreTIsIHIgPSArcjtcbiAgICB2YXIgeDAgPSB0aGlzLl94MSxcbiAgICAgICAgeTAgPSB0aGlzLl95MSxcbiAgICAgICAgeDIxID0geDIgLSB4MSxcbiAgICAgICAgeTIxID0geTIgLSB5MSxcbiAgICAgICAgeDAxID0geDAgLSB4MSxcbiAgICAgICAgeTAxID0geTAgLSB5MSxcbiAgICAgICAgbDAxXzIgPSB4MDEgKiB4MDEgKyB5MDEgKiB5MDE7XG5cbiAgICAvLyBJcyB0aGUgcmFkaXVzIG5lZ2F0aXZlPyBFcnJvci5cbiAgICBpZiAociA8IDApIHRocm93IG5ldyBFcnJvcihcIm5lZ2F0aXZlIHJhZGl1czogXCIgKyByKTtcblxuICAgIC8vIElzIHRoaXMgcGF0aCBlbXB0eT8gTW92ZSB0byAoeDEseTEpLlxuICAgIGlmICh0aGlzLl94MSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fICs9IFwiTVwiICsgKHRoaXMuX3gxID0geDEpICsgXCIsXCIgKyAodGhpcy5feTEgPSB5MSk7XG4gICAgfVxuXG4gICAgLy8gT3IsIGlzICh4MSx5MSkgY29pbmNpZGVudCB3aXRoICh4MCx5MCk/IERvIG5vdGhpbmcuXG4gICAgZWxzZSBpZiAoIShsMDFfMiA+IGVwc2lsb24pKTtcblxuICAgIC8vIE9yLCBhcmUgKHgwLHkwKSwgKHgxLHkxKSBhbmQgKHgyLHkyKSBjb2xsaW5lYXI/XG4gICAgLy8gRXF1aXZhbGVudGx5LCBpcyAoeDEseTEpIGNvaW5jaWRlbnQgd2l0aCAoeDIseTIpP1xuICAgIC8vIE9yLCBpcyB0aGUgcmFkaXVzIHplcm8/IExpbmUgdG8gKHgxLHkxKS5cbiAgICBlbHNlIGlmICghKE1hdGguYWJzKHkwMSAqIHgyMSAtIHkyMSAqIHgwMSkgPiBlcHNpbG9uKSB8fCAhcikge1xuICAgICAgdGhpcy5fICs9IFwiTFwiICsgKHRoaXMuX3gxID0geDEpICsgXCIsXCIgKyAodGhpcy5feTEgPSB5MSk7XG4gICAgfVxuXG4gICAgLy8gT3RoZXJ3aXNlLCBkcmF3IGFuIGFyYyFcbiAgICBlbHNlIHtcbiAgICAgIHZhciB4MjAgPSB4MiAtIHgwLFxuICAgICAgICAgIHkyMCA9IHkyIC0geTAsXG4gICAgICAgICAgbDIxXzIgPSB4MjEgKiB4MjEgKyB5MjEgKiB5MjEsXG4gICAgICAgICAgbDIwXzIgPSB4MjAgKiB4MjAgKyB5MjAgKiB5MjAsXG4gICAgICAgICAgbDIxID0gTWF0aC5zcXJ0KGwyMV8yKSxcbiAgICAgICAgICBsMDEgPSBNYXRoLnNxcnQobDAxXzIpLFxuICAgICAgICAgIGwgPSByICogTWF0aC50YW4oKHBpIC0gTWF0aC5hY29zKChsMjFfMiArIGwwMV8yIC0gbDIwXzIpIC8gKDIgKiBsMjEgKiBsMDEpKSkgLyAyKSxcbiAgICAgICAgICB0MDEgPSBsIC8gbDAxLFxuICAgICAgICAgIHQyMSA9IGwgLyBsMjE7XG5cbiAgICAgIC8vIElmIHRoZSBzdGFydCB0YW5nZW50IGlzIG5vdCBjb2luY2lkZW50IHdpdGggKHgwLHkwKSwgbGluZSB0by5cbiAgICAgIGlmIChNYXRoLmFicyh0MDEgLSAxKSA+IGVwc2lsb24pIHtcbiAgICAgICAgdGhpcy5fICs9IFwiTFwiICsgKHgxICsgdDAxICogeDAxKSArIFwiLFwiICsgKHkxICsgdDAxICogeTAxKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fICs9IFwiQVwiICsgciArIFwiLFwiICsgciArIFwiLDAsMCxcIiArICgrKHkwMSAqIHgyMCA+IHgwMSAqIHkyMCkpICsgXCIsXCIgKyAodGhpcy5feDEgPSB4MSArIHQyMSAqIHgyMSkgKyBcIixcIiArICh0aGlzLl95MSA9IHkxICsgdDIxICogeTIxKTtcbiAgICB9XG4gIH0sXG4gIGFyYzogZnVuY3Rpb24oeCwgeSwgciwgYTAsIGExLCBjY3cpIHtcbiAgICB4ID0gK3gsIHkgPSAreSwgciA9ICtyLCBjY3cgPSAhIWNjdztcbiAgICB2YXIgZHggPSByICogTWF0aC5jb3MoYTApLFxuICAgICAgICBkeSA9IHIgKiBNYXRoLnNpbihhMCksXG4gICAgICAgIHgwID0geCArIGR4LFxuICAgICAgICB5MCA9IHkgKyBkeSxcbiAgICAgICAgY3cgPSAxIF4gY2N3LFxuICAgICAgICBkYSA9IGNjdyA/IGEwIC0gYTEgOiBhMSAtIGEwO1xuXG4gICAgLy8gSXMgdGhlIHJhZGl1cyBuZWdhdGl2ZT8gRXJyb3IuXG4gICAgaWYgKHIgPCAwKSB0aHJvdyBuZXcgRXJyb3IoXCJuZWdhdGl2ZSByYWRpdXM6IFwiICsgcik7XG5cbiAgICAvLyBJcyB0aGlzIHBhdGggZW1wdHk/IE1vdmUgdG8gKHgwLHkwKS5cbiAgICBpZiAodGhpcy5feDEgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuXyArPSBcIk1cIiArIHgwICsgXCIsXCIgKyB5MDtcbiAgICB9XG5cbiAgICAvLyBPciwgaXMgKHgwLHkwKSBub3QgY29pbmNpZGVudCB3aXRoIHRoZSBwcmV2aW91cyBwb2ludD8gTGluZSB0byAoeDAseTApLlxuICAgIGVsc2UgaWYgKE1hdGguYWJzKHRoaXMuX3gxIC0geDApID4gZXBzaWxvbiB8fCBNYXRoLmFicyh0aGlzLl95MSAtIHkwKSA+IGVwc2lsb24pIHtcbiAgICAgIHRoaXMuXyArPSBcIkxcIiArIHgwICsgXCIsXCIgKyB5MDtcbiAgICB9XG5cbiAgICAvLyBJcyB0aGlzIGFyYyBlbXB0eT8gV2XigJlyZSBkb25lLlxuICAgIGlmICghcikgcmV0dXJuO1xuXG4gICAgLy8gRG9lcyB0aGUgYW5nbGUgZ28gdGhlIHdyb25nIHdheT8gRmxpcCB0aGUgZGlyZWN0aW9uLlxuICAgIGlmIChkYSA8IDApIGRhID0gZGEgJSB0YXUgKyB0YXU7XG5cbiAgICAvLyBJcyB0aGlzIGEgY29tcGxldGUgY2lyY2xlPyBEcmF3IHR3byBhcmNzIHRvIGNvbXBsZXRlIHRoZSBjaXJjbGUuXG4gICAgaWYgKGRhID4gdGF1RXBzaWxvbikge1xuICAgICAgdGhpcy5fICs9IFwiQVwiICsgciArIFwiLFwiICsgciArIFwiLDAsMSxcIiArIGN3ICsgXCIsXCIgKyAoeCAtIGR4KSArIFwiLFwiICsgKHkgLSBkeSkgKyBcIkFcIiArIHIgKyBcIixcIiArIHIgKyBcIiwwLDEsXCIgKyBjdyArIFwiLFwiICsgKHRoaXMuX3gxID0geDApICsgXCIsXCIgKyAodGhpcy5feTEgPSB5MCk7XG4gICAgfVxuXG4gICAgLy8gSXMgdGhpcyBhcmMgbm9uLWVtcHR5PyBEcmF3IGFuIGFyYyFcbiAgICBlbHNlIGlmIChkYSA+IGVwc2lsb24pIHtcbiAgICAgIHRoaXMuXyArPSBcIkFcIiArIHIgKyBcIixcIiArIHIgKyBcIiwwLFwiICsgKCsoZGEgPj0gcGkpKSArIFwiLFwiICsgY3cgKyBcIixcIiArICh0aGlzLl94MSA9IHggKyByICogTWF0aC5jb3MoYTEpKSArIFwiLFwiICsgKHRoaXMuX3kxID0geSArIHIgKiBNYXRoLnNpbihhMSkpO1xuICAgIH1cbiAgfSxcbiAgcmVjdDogZnVuY3Rpb24oeCwgeSwgdywgaCkge1xuICAgIHRoaXMuXyArPSBcIk1cIiArICh0aGlzLl94MCA9IHRoaXMuX3gxID0gK3gpICsgXCIsXCIgKyAodGhpcy5feTAgPSB0aGlzLl95MSA9ICt5KSArIFwiaFwiICsgKCt3KSArIFwidlwiICsgKCtoKSArIFwiaFwiICsgKC13KSArIFwiWlwiO1xuICB9LFxuICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuXztcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgcGF0aDtcbiIsImV4cG9ydCB2YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSBcIm9iamVjdFwiICYmIFwibGVuZ3RoXCIgaW4geFxuICAgID8geCAvLyBBcnJheSwgVHlwZWRBcnJheSwgTm9kZUxpc3QsIGFycmF5LWxpa2VcbiAgICA6IEFycmF5LmZyb20oeCk7IC8vIE1hcCwgU2V0LCBpdGVyYWJsZSwgc3RyaW5nLCBvciBhbnl0aGluZyBlbHNlXG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiBmdW5jdGlvbiBjb25zdGFudCgpIHtcbiAgICByZXR1cm4geDtcbiAgfTtcbn1cbiIsImltcG9ydCBwb2ludFJhZGlhbCBmcm9tIFwiLi4vcG9pbnRSYWRpYWwuanNcIjtcblxuY2xhc3MgQnVtcCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHgpIHtcbiAgICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbiAgICB0aGlzLl94ID0geDtcbiAgfVxuICBhcmVhU3RhcnQoKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH1cbiAgYXJlYUVuZCgpIHtcbiAgICB0aGlzLl9saW5lID0gTmFOO1xuICB9XG4gIGxpbmVTdGFydCgpIHtcbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH1cbiAgbGluZUVuZCgpIHtcbiAgICBpZiAodGhpcy5fbGluZSB8fCAodGhpcy5fbGluZSAhPT0gMCAmJiB0aGlzLl9wb2ludCA9PT0gMSkpIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgdGhpcy5fbGluZSA9IDEgLSB0aGlzLl9saW5lO1xuICB9XG4gIHBvaW50KHgsIHkpIHtcbiAgICB4ID0gK3gsIHkgPSAreTtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDA6IHtcbiAgICAgICAgdGhpcy5fcG9pbnQgPSAxO1xuICAgICAgICBpZiAodGhpcy5fbGluZSkgdGhpcy5fY29udGV4dC5saW5lVG8oeCwgeSk7XG4gICAgICAgIGVsc2UgdGhpcy5fY29udGV4dC5tb3ZlVG8oeCwgeSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAxOiB0aGlzLl9wb2ludCA9IDI7IC8vIGZhbGxzIHRocm91Z2hcbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgaWYgKHRoaXMuX3gpIHRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0aGlzLl94MCA9ICh0aGlzLl94MCArIHgpIC8gMiwgdGhpcy5feTAsIHRoaXMuX3gwLCB5LCB4LCB5KTtcbiAgICAgICAgZWxzZSB0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8odGhpcy5feDAsIHRoaXMuX3kwID0gKHRoaXMuX3kwICsgeSkgLyAyLCB4LCB0aGlzLl95MCwgeCwgeSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl94MCA9IHgsIHRoaXMuX3kwID0geTtcbiAgfVxufVxuXG5jbGFzcyBCdW1wUmFkaWFsIHtcbiAgY29uc3RydWN0b3IoY29udGV4dCkge1xuICAgIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xuICB9XG4gIGxpbmVTdGFydCgpIHtcbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH1cbiAgbGluZUVuZCgpIHt9XG4gIHBvaW50KHgsIHkpIHtcbiAgICB4ID0gK3gsIHkgPSAreTtcbiAgICBpZiAodGhpcy5fcG9pbnQrKyA9PT0gMCkge1xuICAgICAgdGhpcy5feDAgPSB4LCB0aGlzLl95MCA9IHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHAwID0gcG9pbnRSYWRpYWwodGhpcy5feDAsIHRoaXMuX3kwKTtcbiAgICAgIGNvbnN0IHAxID0gcG9pbnRSYWRpYWwodGhpcy5feDAsIHRoaXMuX3kwID0gKHRoaXMuX3kwICsgeSkgLyAyKTtcbiAgICAgIGNvbnN0IHAyID0gcG9pbnRSYWRpYWwoeCwgdGhpcy5feTApO1xuICAgICAgY29uc3QgcDMgPSBwb2ludFJhZGlhbCh4LCB5KTtcbiAgICAgIHRoaXMuX2NvbnRleHQubW92ZVRvKC4uLnAwKTtcbiAgICAgIHRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyguLi5wMSwgLi4ucDIsIC4uLnAzKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1bXBYKGNvbnRleHQpIHtcbiAgcmV0dXJuIG5ldyBCdW1wKGNvbnRleHQsIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVtcFkoY29udGV4dCkge1xuICByZXR1cm4gbmV3IEJ1bXAoY29udGV4dCwgZmFsc2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVtcFJhZGlhbChjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgQnVtcFJhZGlhbChjb250ZXh0KTtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiB4KHApIHtcbiAgcmV0dXJuIHBbMF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB5KHApIHtcbiAgcmV0dXJuIHBbMV07XG59XG4iLCJpbXBvcnQge3BhdGh9IGZyb20gXCJkMy1wYXRoXCI7XG5pbXBvcnQge3NsaWNlfSBmcm9tIFwiLi9hcnJheS5qc1wiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50LmpzXCI7XG5pbXBvcnQge2J1bXBYLCBidW1wWSwgYnVtcFJhZGlhbH0gZnJvbSBcIi4vY3VydmUvYnVtcC5qc1wiO1xuaW1wb3J0IHt4IGFzIHBvaW50WCwgeSBhcyBwb2ludFl9IGZyb20gXCIuL3BvaW50LmpzXCI7XG5cbmZ1bmN0aW9uIGxpbmtTb3VyY2UoZCkge1xuICByZXR1cm4gZC5zb3VyY2U7XG59XG5cbmZ1bmN0aW9uIGxpbmtUYXJnZXQoZCkge1xuICByZXR1cm4gZC50YXJnZXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5rKGN1cnZlKSB7XG4gIGxldCBzb3VyY2UgPSBsaW5rU291cmNlO1xuICBsZXQgdGFyZ2V0ID0gbGlua1RhcmdldDtcbiAgbGV0IHggPSBwb2ludFg7XG4gIGxldCB5ID0gcG9pbnRZO1xuICBsZXQgY29udGV4dCA9IG51bGw7XG4gIGxldCBvdXRwdXQgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIGxpbmsoKSB7XG4gICAgbGV0IGJ1ZmZlcjtcbiAgICBjb25zdCBhcmd2ID0gc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgIGNvbnN0IHMgPSBzb3VyY2UuYXBwbHkodGhpcywgYXJndik7XG4gICAgY29uc3QgdCA9IHRhcmdldC5hcHBseSh0aGlzLCBhcmd2KTtcbiAgICBpZiAoY29udGV4dCA9PSBudWxsKSBvdXRwdXQgPSBjdXJ2ZShidWZmZXIgPSBwYXRoKCkpO1xuICAgIG91dHB1dC5saW5lU3RhcnQoKTtcbiAgICBhcmd2WzBdID0gcywgb3V0cHV0LnBvaW50KCt4LmFwcGx5KHRoaXMsIGFyZ3YpLCAreS5hcHBseSh0aGlzLCBhcmd2KSk7XG4gICAgYXJndlswXSA9IHQsIG91dHB1dC5wb2ludCgreC5hcHBseSh0aGlzLCBhcmd2KSwgK3kuYXBwbHkodGhpcywgYXJndikpO1xuICAgIG91dHB1dC5saW5lRW5kKCk7XG4gICAgaWYgKGJ1ZmZlcikgcmV0dXJuIG91dHB1dCA9IG51bGwsIGJ1ZmZlciArIFwiXCIgfHwgbnVsbDtcbiAgfVxuXG4gIGxpbmsuc291cmNlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHNvdXJjZSA9IF8sIGxpbmspIDogc291cmNlO1xuICB9O1xuXG4gIGxpbmsudGFyZ2V0ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRhcmdldCA9IF8sIGxpbmspIDogdGFyZ2V0O1xuICB9O1xuXG4gIGxpbmsueCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh4ID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGxpbmspIDogeDtcbiAgfTtcblxuICBsaW5rLnkgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBsaW5rKSA6IHk7XG4gIH07XG5cbiAgbGluay5jb250ZXh0ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKF8gPT0gbnVsbCA/IGNvbnRleHQgPSBvdXRwdXQgPSBudWxsIDogb3V0cHV0ID0gY3VydmUoY29udGV4dCA9IF8pLCBsaW5rKSA6IGNvbnRleHQ7XG4gIH07XG5cbiAgcmV0dXJuIGxpbms7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5rSG9yaXpvbnRhbCgpIHtcbiAgcmV0dXJuIGxpbmsoYnVtcFgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlua1ZlcnRpY2FsKCkge1xuICByZXR1cm4gbGluayhidW1wWSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5rUmFkaWFsKCkge1xuICBjb25zdCBsID0gbGluayhidW1wUmFkaWFsKTtcbiAgbC5hbmdsZSA9IGwueCwgZGVsZXRlIGwueDtcbiAgbC5yYWRpdXMgPSBsLnksIGRlbGV0ZSBsLnk7XG4gIHJldHVybiBsO1xufVxuIiwiZXhwb3J0IGNvbnN0IGFicyA9IE1hdGguYWJzO1xuZXhwb3J0IGNvbnN0IGF0YW4yID0gTWF0aC5hdGFuMjtcbmV4cG9ydCBjb25zdCBjb3MgPSBNYXRoLmNvcztcbmV4cG9ydCBjb25zdCBtYXggPSBNYXRoLm1heDtcbmV4cG9ydCBjb25zdCBtaW4gPSBNYXRoLm1pbjtcbmV4cG9ydCBjb25zdCBzaW4gPSBNYXRoLnNpbjtcbmV4cG9ydCBjb25zdCBzcXJ0ID0gTWF0aC5zcXJ0O1xuXG5leHBvcnQgY29uc3QgZXBzaWxvbiA9IDFlLTEyO1xuZXhwb3J0IGNvbnN0IHBpID0gTWF0aC5QSTtcbmV4cG9ydCBjb25zdCBoYWxmUGkgPSBwaSAvIDI7XG5leHBvcnQgY29uc3QgdGF1ID0gMiAqIHBpO1xuXG5leHBvcnQgZnVuY3Rpb24gYWNvcyh4KSB7XG4gIHJldHVybiB4ID4gMSA/IDAgOiB4IDwgLTEgPyBwaSA6IE1hdGguYWNvcyh4KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzaW4oeCkge1xuICByZXR1cm4geCA+PSAxID8gaGFsZlBpIDogeCA8PSAtMSA/IC1oYWxmUGkgOiBNYXRoLmFzaW4oeCk7XG59XG4iLCJpbXBvcnQge21pbiwgc3FydH0gZnJvbSBcIi4uL21hdGguanNcIjtcblxuY29uc3Qgc3FydDMgPSBzcXJ0KDMpO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGRyYXcoY29udGV4dCwgc2l6ZSkge1xuICAgIGNvbnN0IHIgPSBzcXJ0KHNpemUgKyBtaW4oc2l6ZSAvIDI4LCAwLjc1KSkgKiAwLjU5NDM2O1xuICAgIGNvbnN0IHQgPSByIC8gMjtcbiAgICBjb25zdCB1ID0gdCAqIHNxcnQzO1xuICAgIGNvbnRleHQubW92ZVRvKDAsIHIpO1xuICAgIGNvbnRleHQubGluZVRvKDAsIC1yKTtcbiAgICBjb250ZXh0Lm1vdmVUbygtdSwgLXQpO1xuICAgIGNvbnRleHQubGluZVRvKHUsIHQpO1xuICAgIGNvbnRleHQubW92ZVRvKC11LCB0KTtcbiAgICBjb250ZXh0LmxpbmVUbyh1LCAtdCk7XG4gIH1cbn07XG4iLCJpbXBvcnQge3BpLCBzcXJ0LCB0YXV9IGZyb20gXCIuLi9tYXRoLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZHJhdyhjb250ZXh0LCBzaXplKSB7XG4gICAgY29uc3QgciA9IHNxcnQoc2l6ZSAvIHBpKTtcbiAgICBjb250ZXh0Lm1vdmVUbyhyLCAwKTtcbiAgICBjb250ZXh0LmFyYygwLCAwLCByLCAwLCB0YXUpO1xuICB9XG59O1xuIiwiaW1wb3J0IHtzcXJ0fSBmcm9tIFwiLi4vbWF0aC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGRyYXcoY29udGV4dCwgc2l6ZSkge1xuICAgIGNvbnN0IHIgPSBzcXJ0KHNpemUgLyA1KSAvIDI7XG4gICAgY29udGV4dC5tb3ZlVG8oLTMgKiByLCAtcik7XG4gICAgY29udGV4dC5saW5lVG8oLXIsIC1yKTtcbiAgICBjb250ZXh0LmxpbmVUbygtciwgLTMgKiByKTtcbiAgICBjb250ZXh0LmxpbmVUbyhyLCAtMyAqIHIpO1xuICAgIGNvbnRleHQubGluZVRvKHIsIC1yKTtcbiAgICBjb250ZXh0LmxpbmVUbygzICogciwgLXIpO1xuICAgIGNvbnRleHQubGluZVRvKDMgKiByLCByKTtcbiAgICBjb250ZXh0LmxpbmVUbyhyLCByKTtcbiAgICBjb250ZXh0LmxpbmVUbyhyLCAzICogcik7XG4gICAgY29udGV4dC5saW5lVG8oLXIsIDMgKiByKTtcbiAgICBjb250ZXh0LmxpbmVUbygtciwgcik7XG4gICAgY29udGV4dC5saW5lVG8oLTMgKiByLCByKTtcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICB9XG59O1xuIiwiaW1wb3J0IHtzcXJ0fSBmcm9tIFwiLi4vbWF0aC5qc1wiO1xuXG5jb25zdCB0YW4zMCA9IHNxcnQoMSAvIDMpO1xuY29uc3QgdGFuMzBfMiA9IHRhbjMwICogMjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBkcmF3KGNvbnRleHQsIHNpemUpIHtcbiAgICBjb25zdCB5ID0gc3FydChzaXplIC8gdGFuMzBfMik7XG4gICAgY29uc3QgeCA9IHkgKiB0YW4zMDtcbiAgICBjb250ZXh0Lm1vdmVUbygwLCAteSk7XG4gICAgY29udGV4dC5saW5lVG8oeCwgMCk7XG4gICAgY29udGV4dC5saW5lVG8oMCwgeSk7XG4gICAgY29udGV4dC5saW5lVG8oLXgsIDApO1xuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gIH1cbn07XG4iLCJpbXBvcnQge3NxcnR9IGZyb20gXCIuLi9tYXRoLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZHJhdyhjb250ZXh0LCBzaXplKSB7XG4gICAgY29uc3QgciA9IHNxcnQoc2l6ZSkgKiAwLjYyNjI1O1xuICAgIGNvbnRleHQubW92ZVRvKDAsIC1yKTtcbiAgICBjb250ZXh0LmxpbmVUbyhyLCAwKTtcbiAgICBjb250ZXh0LmxpbmVUbygwLCByKTtcbiAgICBjb250ZXh0LmxpbmVUbygtciwgMCk7XG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgfVxufTtcbiIsImltcG9ydCB7bWluLCBzcXJ0fSBmcm9tIFwiLi4vbWF0aC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGRyYXcoY29udGV4dCwgc2l6ZSkge1xuICAgIGNvbnN0IHIgPSBzcXJ0KHNpemUgLSBtaW4oc2l6ZSAvIDcsIDIpKSAqIDAuODc1NTk7XG4gICAgY29udGV4dC5tb3ZlVG8oLXIsIDApO1xuICAgIGNvbnRleHQubGluZVRvKHIsIDApO1xuICAgIGNvbnRleHQubW92ZVRvKDAsIHIpO1xuICAgIGNvbnRleHQubGluZVRvKDAsIC1yKTtcbiAgfVxufTtcbiIsImltcG9ydCB7c3FydH0gZnJvbSBcIi4uL21hdGguanNcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBkcmF3KGNvbnRleHQsIHNpemUpIHtcbiAgICBjb25zdCB3ID0gc3FydChzaXplKTtcbiAgICBjb25zdCB4ID0gLXcgLyAyO1xuICAgIGNvbnRleHQucmVjdCh4LCB4LCB3LCB3KTtcbiAgfVxufTtcbiIsImltcG9ydCB7c3FydH0gZnJvbSBcIi4uL21hdGguanNcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBkcmF3KGNvbnRleHQsIHNpemUpIHtcbiAgICBjb25zdCByID0gc3FydChzaXplKSAqIDAuNDQzMTtcbiAgICBjb250ZXh0Lm1vdmVUbyhyLCByKTtcbiAgICBjb250ZXh0LmxpbmVUbyhyLCAtcik7XG4gICAgY29udGV4dC5saW5lVG8oLXIsIC1yKTtcbiAgICBjb250ZXh0LmxpbmVUbygtciwgcik7XG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgfVxufTtcbiIsImltcG9ydCB7c2luLCBjb3MsIHNxcnQsIHBpLCB0YXV9IGZyb20gXCIuLi9tYXRoLmpzXCI7XG5cbmNvbnN0IGthID0gMC44OTA4MTMwOTE1MjkyODUyMjgxMDtcbmNvbnN0IGtyID0gc2luKHBpIC8gMTApIC8gc2luKDcgKiBwaSAvIDEwKTtcbmNvbnN0IGt4ID0gc2luKHRhdSAvIDEwKSAqIGtyO1xuY29uc3Qga3kgPSAtY29zKHRhdSAvIDEwKSAqIGtyO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGRyYXcoY29udGV4dCwgc2l6ZSkge1xuICAgIGNvbnN0IHIgPSBzcXJ0KHNpemUgKiBrYSk7XG4gICAgY29uc3QgeCA9IGt4ICogcjtcbiAgICBjb25zdCB5ID0ga3kgKiByO1xuICAgIGNvbnRleHQubW92ZVRvKDAsIC1yKTtcbiAgICBjb250ZXh0LmxpbmVUbyh4LCB5KTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IDU7ICsraSkge1xuICAgICAgY29uc3QgYSA9IHRhdSAqIGkgLyA1O1xuICAgICAgY29uc3QgYyA9IGNvcyhhKTtcbiAgICAgIGNvbnN0IHMgPSBzaW4oYSk7XG4gICAgICBjb250ZXh0LmxpbmVUbyhzICogciwgLWMgKiByKTtcbiAgICAgIGNvbnRleHQubGluZVRvKGMgKiB4IC0gcyAqIHksIHMgKiB4ICsgYyAqIHkpO1xuICAgIH1cbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICB9XG59O1xuIiwiaW1wb3J0IHtzcXJ0fSBmcm9tIFwiLi4vbWF0aC5qc1wiO1xuXG5jb25zdCBzcXJ0MyA9IHNxcnQoMyk7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZHJhdyhjb250ZXh0LCBzaXplKSB7XG4gICAgY29uc3QgeSA9IC1zcXJ0KHNpemUgLyAoc3FydDMgKiAzKSk7XG4gICAgY29udGV4dC5tb3ZlVG8oMCwgeSAqIDIpO1xuICAgIGNvbnRleHQubGluZVRvKC1zcXJ0MyAqIHksIC15KTtcbiAgICBjb250ZXh0LmxpbmVUbyhzcXJ0MyAqIHksIC15KTtcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICB9XG59O1xuIiwiaW1wb3J0IHtzcXJ0fSBmcm9tIFwiLi4vbWF0aC5qc1wiO1xuXG5jb25zdCBzcXJ0MyA9IHNxcnQoMyk7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZHJhdyhjb250ZXh0LCBzaXplKSB7XG4gICAgY29uc3QgcyA9IHNxcnQoc2l6ZSkgKiAwLjY4MjQ7XG4gICAgY29uc3QgdCA9IHMgIC8gMjtcbiAgICBjb25zdCB1ID0gKHMgKiBzcXJ0MykgLyAyOyAvLyBjb3MoTWF0aC5QSSAvIDYpXG4gICAgY29udGV4dC5tb3ZlVG8oMCwgLXMpO1xuICAgIGNvbnRleHQubGluZVRvKHUsIHQpO1xuICAgIGNvbnRleHQubGluZVRvKC11LCB0KTtcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICB9XG59O1xuIiwiaW1wb3J0IHtzcXJ0fSBmcm9tIFwiLi4vbWF0aC5qc1wiO1xuXG5jb25zdCBjID0gLTAuNTtcbmNvbnN0IHMgPSBzcXJ0KDMpIC8gMjtcbmNvbnN0IGsgPSAxIC8gc3FydCgxMik7XG5jb25zdCBhID0gKGsgLyAyICsgMSkgKiAzO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGRyYXcoY29udGV4dCwgc2l6ZSkge1xuICAgIGNvbnN0IHIgPSBzcXJ0KHNpemUgLyBhKTtcbiAgICBjb25zdCB4MCA9IHIgLyAyLCB5MCA9IHIgKiBrO1xuICAgIGNvbnN0IHgxID0geDAsIHkxID0gciAqIGsgKyByO1xuICAgIGNvbnN0IHgyID0gLXgxLCB5MiA9IHkxO1xuICAgIGNvbnRleHQubW92ZVRvKHgwLCB5MCk7XG4gICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICBjb250ZXh0LmxpbmVUbyh4MiwgeTIpO1xuICAgIGNvbnRleHQubGluZVRvKGMgKiB4MCAtIHMgKiB5MCwgcyAqIHgwICsgYyAqIHkwKTtcbiAgICBjb250ZXh0LmxpbmVUbyhjICogeDEgLSBzICogeTEsIHMgKiB4MSArIGMgKiB5MSk7XG4gICAgY29udGV4dC5saW5lVG8oYyAqIHgyIC0gcyAqIHkyLCBzICogeDIgKyBjICogeTIpO1xuICAgIGNvbnRleHQubGluZVRvKGMgKiB4MCArIHMgKiB5MCwgYyAqIHkwIC0gcyAqIHgwKTtcbiAgICBjb250ZXh0LmxpbmVUbyhjICogeDEgKyBzICogeTEsIGMgKiB5MSAtIHMgKiB4MSk7XG4gICAgY29udGV4dC5saW5lVG8oYyAqIHgyICsgcyAqIHkyLCBjICogeTIgLSBzICogeDIpO1xuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gIH1cbn07XG4iLCJpbXBvcnQge21pbiwgc3FydH0gZnJvbSBcIi4uL21hdGguanNcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBkcmF3KGNvbnRleHQsIHNpemUpIHtcbiAgICBjb25zdCByID0gc3FydChzaXplIC0gbWluKHNpemUgLyA2LCAxLjcpKSAqIDAuNjE4OTtcbiAgICBjb250ZXh0Lm1vdmVUbygtciwgLXIpO1xuICAgIGNvbnRleHQubGluZVRvKHIsIHIpO1xuICAgIGNvbnRleHQubW92ZVRvKC1yLCByKTtcbiAgICBjb250ZXh0LmxpbmVUbyhyLCAtcik7XG4gIH1cbn07XG4iLCJpbXBvcnQge3BhdGh9IGZyb20gXCJkMy1wYXRoXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBhc3RlcmlzayBmcm9tIFwiLi9zeW1ib2wvYXN0ZXJpc2suanNcIjtcbmltcG9ydCBjaXJjbGUgZnJvbSBcIi4vc3ltYm9sL2NpcmNsZS5qc1wiO1xuaW1wb3J0IGNyb3NzIGZyb20gXCIuL3N5bWJvbC9jcm9zcy5qc1wiO1xuaW1wb3J0IGRpYW1vbmQgZnJvbSBcIi4vc3ltYm9sL2RpYW1vbmQuanNcIjtcbmltcG9ydCBkaWFtb25kMiBmcm9tIFwiLi9zeW1ib2wvZGlhbW9uZDIuanNcIjtcbmltcG9ydCBwbHVzIGZyb20gXCIuL3N5bWJvbC9wbHVzLmpzXCI7XG5pbXBvcnQgc3F1YXJlIGZyb20gXCIuL3N5bWJvbC9zcXVhcmUuanNcIjtcbmltcG9ydCBzcXVhcmUyIGZyb20gXCIuL3N5bWJvbC9zcXVhcmUyLmpzXCI7XG5pbXBvcnQgc3RhciBmcm9tIFwiLi9zeW1ib2wvc3Rhci5qc1wiO1xuaW1wb3J0IHRyaWFuZ2xlIGZyb20gXCIuL3N5bWJvbC90cmlhbmdsZS5qc1wiO1xuaW1wb3J0IHRyaWFuZ2xlMiBmcm9tIFwiLi9zeW1ib2wvdHJpYW5nbGUyLmpzXCI7XG5pbXBvcnQgd3llIGZyb20gXCIuL3N5bWJvbC93eWUuanNcIjtcbmltcG9ydCB4IGZyb20gXCIuL3N5bWJvbC94LmpzXCI7XG5cbi8vIFRoZXNlIHN5bWJvbHMgYXJlIGRlc2lnbmVkIHRvIGJlIGZpbGxlZC5cbmV4cG9ydCBjb25zdCBzeW1ib2xzRmlsbCA9IFtcbiAgY2lyY2xlLFxuICBjcm9zcyxcbiAgZGlhbW9uZCxcbiAgc3F1YXJlLFxuICBzdGFyLFxuICB0cmlhbmdsZSxcbiAgd3llXG5dO1xuXG4vLyBUaGVzZSBzeW1ib2xzIGFyZSBkZXNpZ25lZCB0byBiZSBzdHJva2VkICh3aXRoIGEgd2lkdGggb2YgMS41cHggYW5kIHJvdW5kIGNhcHMpLlxuZXhwb3J0IGNvbnN0IHN5bWJvbHNTdHJva2UgPSBbXG4gIGNpcmNsZSxcbiAgcGx1cyxcbiAgeCxcbiAgdHJpYW5nbGUyLFxuICBhc3RlcmlzayxcbiAgc3F1YXJlMixcbiAgZGlhbW9uZDJcbl07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFN5bWJvbCh0eXBlLCBzaXplKSB7XG4gIGxldCBjb250ZXh0ID0gbnVsbDtcblxuICB0eXBlID0gdHlwZW9mIHR5cGUgPT09IFwiZnVuY3Rpb25cIiA/IHR5cGUgOiBjb25zdGFudCh0eXBlIHx8IGNpcmNsZSk7XG4gIHNpemUgPSB0eXBlb2Ygc2l6ZSA9PT0gXCJmdW5jdGlvblwiID8gc2l6ZSA6IGNvbnN0YW50KHNpemUgPT09IHVuZGVmaW5lZCA/IDY0IDogK3NpemUpO1xuXG4gIGZ1bmN0aW9uIHN5bWJvbCgpIHtcbiAgICBsZXQgYnVmZmVyO1xuICAgIGlmICghY29udGV4dCkgY29udGV4dCA9IGJ1ZmZlciA9IHBhdGgoKTtcbiAgICB0eXBlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykuZHJhdyhjb250ZXh0LCArc2l6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgICBpZiAoYnVmZmVyKSByZXR1cm4gY29udGV4dCA9IG51bGwsIGJ1ZmZlciArIFwiXCIgfHwgbnVsbDtcbiAgfVxuXG4gIHN5bWJvbC50eXBlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHR5cGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KF8pLCBzeW1ib2wpIDogdHlwZTtcbiAgfTtcblxuICBzeW1ib2wuc2l6ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzaXplID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIHN5bWJvbCkgOiBzaXplO1xuICB9O1xuXG4gIHN5bWJvbC5jb250ZXh0ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNvbnRleHQgPSBfID09IG51bGwgPyBudWxsIDogXywgc3ltYm9sKSA6IGNvbnRleHQ7XG4gIH07XG5cbiAgcmV0dXJuIHN5bWJvbDtcbn1cbiIsImV4cG9ydCB7ZGVmYXVsdCBhcyBhcmN9IGZyb20gXCIuL2FyYy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGFyZWF9IGZyb20gXCIuL2FyZWEuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBsaW5lfSBmcm9tIFwiLi9saW5lLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcGllfSBmcm9tIFwiLi9waWUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBhcmVhUmFkaWFsLCBkZWZhdWx0IGFzIHJhZGlhbEFyZWF9IGZyb20gXCIuL2FyZWFSYWRpYWwuanNcIjsgLy8gTm90ZTogcmFkaWFsQXJlYSBpcyBkZXByZWNhdGVkIVxuZXhwb3J0IHtkZWZhdWx0IGFzIGxpbmVSYWRpYWwsIGRlZmF1bHQgYXMgcmFkaWFsTGluZX0gZnJvbSBcIi4vbGluZVJhZGlhbC5qc1wiOyAvLyBOb3RlOiByYWRpYWxMaW5lIGlzIGRlcHJlY2F0ZWQhXG5leHBvcnQge2RlZmF1bHQgYXMgcG9pbnRSYWRpYWx9IGZyb20gXCIuL3BvaW50UmFkaWFsLmpzXCI7XG5leHBvcnQge2xpbmssIGxpbmtIb3Jpem9udGFsLCBsaW5rVmVydGljYWwsIGxpbmtSYWRpYWx9IGZyb20gXCIuL2xpbmsuanNcIjtcblxuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbCwgc3ltYm9sc1N0cm9rZSwgc3ltYm9sc0ZpbGwsIHN5bWJvbHNGaWxsIGFzIHN5bWJvbHN9IGZyb20gXCIuL3N5bWJvbC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbEFzdGVyaXNrfSBmcm9tIFwiLi9zeW1ib2wvYXN0ZXJpc2suanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzeW1ib2xDaXJjbGV9IGZyb20gXCIuL3N5bWJvbC9jaXJjbGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzeW1ib2xDcm9zc30gZnJvbSBcIi4vc3ltYm9sL2Nyb3NzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3ltYm9sRGlhbW9uZH0gZnJvbSBcIi4vc3ltYm9sL2RpYW1vbmQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzeW1ib2xEaWFtb25kMn0gZnJvbSBcIi4vc3ltYm9sL2RpYW1vbmQyLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3ltYm9sUGx1c30gZnJvbSBcIi4vc3ltYm9sL3BsdXMuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzeW1ib2xTcXVhcmV9IGZyb20gXCIuL3N5bWJvbC9zcXVhcmUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzeW1ib2xTcXVhcmUyfSBmcm9tIFwiLi9zeW1ib2wvc3F1YXJlMi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbFN0YXJ9IGZyb20gXCIuL3N5bWJvbC9zdGFyLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3ltYm9sVHJpYW5nbGV9IGZyb20gXCIuL3N5bWJvbC90cmlhbmdsZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbFRyaWFuZ2xlMn0gZnJvbSBcIi4vc3ltYm9sL3RyaWFuZ2xlMi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbFd5ZX0gZnJvbSBcIi4vc3ltYm9sL3d5ZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbFh9IGZyb20gXCIuL3N5bWJvbC94LmpzXCI7XG5cbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUJhc2lzQ2xvc2VkfSBmcm9tIFwiLi9jdXJ2ZS9iYXNpc0Nsb3NlZC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGN1cnZlQmFzaXNPcGVufSBmcm9tIFwiLi9jdXJ2ZS9iYXNpc09wZW4uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUJhc2lzfSBmcm9tIFwiLi9jdXJ2ZS9iYXNpcy5qc1wiO1xuZXhwb3J0IHtidW1wWCBhcyBjdXJ2ZUJ1bXBYLCBidW1wWSBhcyBjdXJ2ZUJ1bXBZfSBmcm9tIFwiLi9jdXJ2ZS9idW1wLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVCdW5kbGV9IGZyb20gXCIuL2N1cnZlL2J1bmRsZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGN1cnZlQ2FyZGluYWxDbG9zZWR9IGZyb20gXCIuL2N1cnZlL2NhcmRpbmFsQ2xvc2VkLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVDYXJkaW5hbE9wZW59IGZyb20gXCIuL2N1cnZlL2NhcmRpbmFsT3Blbi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGN1cnZlQ2FyZGluYWx9IGZyb20gXCIuL2N1cnZlL2NhcmRpbmFsLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVDYXRtdWxsUm9tQ2xvc2VkfSBmcm9tIFwiLi9jdXJ2ZS9jYXRtdWxsUm9tQ2xvc2VkLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVDYXRtdWxsUm9tT3Blbn0gZnJvbSBcIi4vY3VydmUvY2F0bXVsbFJvbU9wZW4uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUNhdG11bGxSb219IGZyb20gXCIuL2N1cnZlL2NhdG11bGxSb20uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUxpbmVhckNsb3NlZH0gZnJvbSBcIi4vY3VydmUvbGluZWFyQ2xvc2VkLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVMaW5lYXJ9IGZyb20gXCIuL2N1cnZlL2xpbmVhci5qc1wiO1xuZXhwb3J0IHttb25vdG9uZVggYXMgY3VydmVNb25vdG9uZVgsIG1vbm90b25lWSBhcyBjdXJ2ZU1vbm90b25lWX0gZnJvbSBcIi4vY3VydmUvbW9ub3RvbmUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZU5hdHVyYWx9IGZyb20gXCIuL2N1cnZlL25hdHVyYWwuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZVN0ZXAsIHN0ZXBBZnRlciBhcyBjdXJ2ZVN0ZXBBZnRlciwgc3RlcEJlZm9yZSBhcyBjdXJ2ZVN0ZXBCZWZvcmV9IGZyb20gXCIuL2N1cnZlL3N0ZXAuanNcIjtcblxuZXhwb3J0IHtkZWZhdWx0IGFzIHN0YWNrfSBmcm9tIFwiLi9zdGFjay5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN0YWNrT2Zmc2V0RXhwYW5kfSBmcm9tIFwiLi9vZmZzZXQvZXhwYW5kLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2tPZmZzZXREaXZlcmdpbmd9IGZyb20gXCIuL29mZnNldC9kaXZlcmdpbmcuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdGFja09mZnNldE5vbmV9IGZyb20gXCIuL29mZnNldC9ub25lLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2tPZmZzZXRTaWxob3VldHRlfSBmcm9tIFwiLi9vZmZzZXQvc2lsaG91ZXR0ZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN0YWNrT2Zmc2V0V2lnZ2xlfSBmcm9tIFwiLi9vZmZzZXQvd2lnZ2xlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2tPcmRlckFwcGVhcmFuY2V9IGZyb20gXCIuL29yZGVyL2FwcGVhcmFuY2UuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdGFja09yZGVyQXNjZW5kaW5nfSBmcm9tIFwiLi9vcmRlci9hc2NlbmRpbmcuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdGFja09yZGVyRGVzY2VuZGluZ30gZnJvbSBcIi4vb3JkZXIvZGVzY2VuZGluZy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN0YWNrT3JkZXJJbnNpZGVPdXR9IGZyb20gXCIuL29yZGVyL2luc2lkZU91dC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN0YWNrT3JkZXJOb25lfSBmcm9tIFwiLi9vcmRlci9ub25lLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2tPcmRlclJldmVyc2V9IGZyb20gXCIuL29yZGVyL3JldmVyc2UuanNcIjtcbiIsIi8vIFRoZXNlIGFyZSB0eXBpY2FsbHkgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIG5vZXZlbnQgdG8gZW5zdXJlIHRoYXQgd2UgY2FuXG4vLyBwcmV2ZW50RGVmYXVsdCBvbiB0aGUgZXZlbnQuXG5leHBvcnQgY29uc3Qgbm9ucGFzc2l2ZSA9IHtwYXNzaXZlOiBmYWxzZX07XG5leHBvcnQgY29uc3Qgbm9ucGFzc2l2ZWNhcHR1cmUgPSB7Y2FwdHVyZTogdHJ1ZSwgcGFzc2l2ZTogZmFsc2V9O1xuXG5leHBvcnQgZnVuY3Rpb24gbm9wcm9wYWdhdGlvbihldmVudCkge1xuICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZXZlbnQpIHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG59XG4iLCJpbXBvcnQge3NlbGVjdH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IG5vZXZlbnQsIHtub25wYXNzaXZlY2FwdHVyZX0gZnJvbSBcIi4vbm9ldmVudC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2aWV3KSB7XG4gIHZhciByb290ID0gdmlldy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG4gICAgICBzZWxlY3Rpb24gPSBzZWxlY3Qodmlldykub24oXCJkcmFnc3RhcnQuZHJhZ1wiLCBub2V2ZW50LCBub25wYXNzaXZlY2FwdHVyZSk7XG4gIGlmIChcIm9uc2VsZWN0c3RhcnRcIiBpbiByb290KSB7XG4gICAgc2VsZWN0aW9uLm9uKFwic2VsZWN0c3RhcnQuZHJhZ1wiLCBub2V2ZW50LCBub25wYXNzaXZlY2FwdHVyZSk7XG4gIH0gZWxzZSB7XG4gICAgcm9vdC5fX25vc2VsZWN0ID0gcm9vdC5zdHlsZS5Nb3pVc2VyU2VsZWN0O1xuICAgIHJvb3Quc3R5bGUuTW96VXNlclNlbGVjdCA9IFwibm9uZVwiO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB5ZXNkcmFnKHZpZXcsIG5vY2xpY2spIHtcbiAgdmFyIHJvb3QgPSB2aWV3LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcbiAgICAgIHNlbGVjdGlvbiA9IHNlbGVjdCh2aWV3KS5vbihcImRyYWdzdGFydC5kcmFnXCIsIG51bGwpO1xuICBpZiAobm9jbGljaykge1xuICAgIHNlbGVjdGlvbi5vbihcImNsaWNrLmRyYWdcIiwgbm9ldmVudCwgbm9ucGFzc2l2ZWNhcHR1cmUpO1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHNlbGVjdGlvbi5vbihcImNsaWNrLmRyYWdcIiwgbnVsbCk7IH0sIDApO1xuICB9XG4gIGlmIChcIm9uc2VsZWN0c3RhcnRcIiBpbiByb290KSB7XG4gICAgc2VsZWN0aW9uLm9uKFwic2VsZWN0c3RhcnQuZHJhZ1wiLCBudWxsKTtcbiAgfSBlbHNlIHtcbiAgICByb290LnN0eWxlLk1velVzZXJTZWxlY3QgPSByb290Ll9fbm9zZWxlY3Q7XG4gICAgZGVsZXRlIHJvb3QuX19ub3NlbGVjdDtcbiAgfVxufVxuIiwidmFyIGVwc2lsb24yID0gMWUtMTI7XG5cbmZ1bmN0aW9uIGNvc2goeCkge1xuICByZXR1cm4gKCh4ID0gTWF0aC5leHAoeCkpICsgMSAvIHgpIC8gMjtcbn1cblxuZnVuY3Rpb24gc2luaCh4KSB7XG4gIHJldHVybiAoKHggPSBNYXRoLmV4cCh4KSkgLSAxIC8geCkgLyAyO1xufVxuXG5mdW5jdGlvbiB0YW5oKHgpIHtcbiAgcmV0dXJuICgoeCA9IE1hdGguZXhwKDIgKiB4KSkgLSAxKSAvICh4ICsgMSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiB6b29tUmhvKHJobywgcmhvMiwgcmhvNCkge1xuXG4gIC8vIHAwID0gW3V4MCwgdXkwLCB3MF1cbiAgLy8gcDEgPSBbdXgxLCB1eTEsIHcxXVxuICBmdW5jdGlvbiB6b29tKHAwLCBwMSkge1xuICAgIHZhciB1eDAgPSBwMFswXSwgdXkwID0gcDBbMV0sIHcwID0gcDBbMl0sXG4gICAgICAgIHV4MSA9IHAxWzBdLCB1eTEgPSBwMVsxXSwgdzEgPSBwMVsyXSxcbiAgICAgICAgZHggPSB1eDEgLSB1eDAsXG4gICAgICAgIGR5ID0gdXkxIC0gdXkwLFxuICAgICAgICBkMiA9IGR4ICogZHggKyBkeSAqIGR5LFxuICAgICAgICBpLFxuICAgICAgICBTO1xuXG4gICAgLy8gU3BlY2lhbCBjYXNlIGZvciB1MCDiiYUgdTEuXG4gICAgaWYgKGQyIDwgZXBzaWxvbjIpIHtcbiAgICAgIFMgPSBNYXRoLmxvZyh3MSAvIHcwKSAvIHJobztcbiAgICAgIGkgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgdXgwICsgdCAqIGR4LFxuICAgICAgICAgIHV5MCArIHQgKiBkeSxcbiAgICAgICAgICB3MCAqIE1hdGguZXhwKHJobyAqIHQgKiBTKVxuICAgICAgICBdO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEdlbmVyYWwgY2FzZS5cbiAgICBlbHNlIHtcbiAgICAgIHZhciBkMSA9IE1hdGguc3FydChkMiksXG4gICAgICAgICAgYjAgPSAodzEgKiB3MSAtIHcwICogdzAgKyByaG80ICogZDIpIC8gKDIgKiB3MCAqIHJobzIgKiBkMSksXG4gICAgICAgICAgYjEgPSAodzEgKiB3MSAtIHcwICogdzAgLSByaG80ICogZDIpIC8gKDIgKiB3MSAqIHJobzIgKiBkMSksXG4gICAgICAgICAgcjAgPSBNYXRoLmxvZyhNYXRoLnNxcnQoYjAgKiBiMCArIDEpIC0gYjApLFxuICAgICAgICAgIHIxID0gTWF0aC5sb2coTWF0aC5zcXJ0KGIxICogYjEgKyAxKSAtIGIxKTtcbiAgICAgIFMgPSAocjEgLSByMCkgLyByaG87XG4gICAgICBpID0gZnVuY3Rpb24odCkge1xuICAgICAgICB2YXIgcyA9IHQgKiBTLFxuICAgICAgICAgICAgY29zaHIwID0gY29zaChyMCksXG4gICAgICAgICAgICB1ID0gdzAgLyAocmhvMiAqIGQxKSAqIChjb3NocjAgKiB0YW5oKHJobyAqIHMgKyByMCkgLSBzaW5oKHIwKSk7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgdXgwICsgdSAqIGR4LFxuICAgICAgICAgIHV5MCArIHUgKiBkeSxcbiAgICAgICAgICB3MCAqIGNvc2hyMCAvIGNvc2gocmhvICogcyArIHIwKVxuICAgICAgICBdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGkuZHVyYXRpb24gPSBTICogMTAwMCAqIHJobyAvIE1hdGguU1FSVDI7XG5cbiAgICByZXR1cm4gaTtcbiAgfVxuXG4gIHpvb20ucmhvID0gZnVuY3Rpb24oXykge1xuICAgIHZhciBfMSA9IE1hdGgubWF4KDFlLTMsICtfKSwgXzIgPSBfMSAqIF8xLCBfNCA9IF8yICogXzI7XG4gICAgcmV0dXJuIHpvb21SaG8oXzEsIF8yLCBfNCk7XG4gIH07XG5cbiAgcmV0dXJuIHpvb207XG59KShNYXRoLlNRUlQyLCAyLCA0KTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGV2ZW50KSB7XG4gIGxldCBzb3VyY2VFdmVudDtcbiAgd2hpbGUgKHNvdXJjZUV2ZW50ID0gZXZlbnQuc291cmNlRXZlbnQpIGV2ZW50ID0gc291cmNlRXZlbnQ7XG4gIHJldHVybiBldmVudDtcbn1cbiIsImltcG9ydCBzb3VyY2VFdmVudCBmcm9tIFwiLi9zb3VyY2VFdmVudC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihldmVudCwgbm9kZSkge1xuICBldmVudCA9IHNvdXJjZUV2ZW50KGV2ZW50KTtcbiAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkgbm9kZSA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gIGlmIChub2RlKSB7XG4gICAgdmFyIHN2ZyA9IG5vZGUub3duZXJTVkdFbGVtZW50IHx8IG5vZGU7XG4gICAgaWYgKHN2Zy5jcmVhdGVTVkdQb2ludCkge1xuICAgICAgdmFyIHBvaW50ID0gc3ZnLmNyZWF0ZVNWR1BvaW50KCk7XG4gICAgICBwb2ludC54ID0gZXZlbnQuY2xpZW50WCwgcG9pbnQueSA9IGV2ZW50LmNsaWVudFk7XG4gICAgICBwb2ludCA9IHBvaW50Lm1hdHJpeFRyYW5zZm9ybShub2RlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSk7XG4gICAgICByZXR1cm4gW3BvaW50LngsIHBvaW50LnldO1xuICAgIH1cbiAgICBpZiAobm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QpIHtcbiAgICAgIHZhciByZWN0ID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIHJldHVybiBbZXZlbnQuY2xpZW50WCAtIHJlY3QubGVmdCAtIG5vZGUuY2xpZW50TGVmdCwgZXZlbnQuY2xpZW50WSAtIHJlY3QudG9wIC0gbm9kZS5jbGllbnRUb3BdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gW2V2ZW50LnBhZ2VYLCBldmVudC5wYWdlWV07XG59XG4iLCJleHBvcnQgZGVmYXVsdCB4ID0+ICgpID0+IHg7XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBab29tRXZlbnQodHlwZSwge1xuICBzb3VyY2VFdmVudCxcbiAgdGFyZ2V0LFxuICB0cmFuc2Zvcm0sXG4gIGRpc3BhdGNoXG59KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMsIHtcbiAgICB0eXBlOiB7dmFsdWU6IHR5cGUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZX0sXG4gICAgc291cmNlRXZlbnQ6IHt2YWx1ZTogc291cmNlRXZlbnQsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZX0sXG4gICAgdGFyZ2V0OiB7dmFsdWU6IHRhcmdldCwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlfSxcbiAgICB0cmFuc2Zvcm06IHt2YWx1ZTogdHJhbnNmb3JtLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWV9LFxuICAgIF86IHt2YWx1ZTogZGlzcGF0Y2h9XG4gIH0pO1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIFRyYW5zZm9ybShrLCB4LCB5KSB7XG4gIHRoaXMuayA9IGs7XG4gIHRoaXMueCA9IHg7XG4gIHRoaXMueSA9IHk7XG59XG5cblRyYW5zZm9ybS5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBUcmFuc2Zvcm0sXG4gIHNjYWxlOiBmdW5jdGlvbihrKSB7XG4gICAgcmV0dXJuIGsgPT09IDEgPyB0aGlzIDogbmV3IFRyYW5zZm9ybSh0aGlzLmsgKiBrLCB0aGlzLngsIHRoaXMueSk7XG4gIH0sXG4gIHRyYW5zbGF0ZTogZnVuY3Rpb24oeCwgeSkge1xuICAgIHJldHVybiB4ID09PSAwICYgeSA9PT0gMCA/IHRoaXMgOiBuZXcgVHJhbnNmb3JtKHRoaXMuaywgdGhpcy54ICsgdGhpcy5rICogeCwgdGhpcy55ICsgdGhpcy5rICogeSk7XG4gIH0sXG4gIGFwcGx5OiBmdW5jdGlvbihwb2ludCkge1xuICAgIHJldHVybiBbcG9pbnRbMF0gKiB0aGlzLmsgKyB0aGlzLngsIHBvaW50WzFdICogdGhpcy5rICsgdGhpcy55XTtcbiAgfSxcbiAgYXBwbHlYOiBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIHggKiB0aGlzLmsgKyB0aGlzLng7XG4gIH0sXG4gIGFwcGx5WTogZnVuY3Rpb24oeSkge1xuICAgIHJldHVybiB5ICogdGhpcy5rICsgdGhpcy55O1xuICB9LFxuICBpbnZlcnQ6IGZ1bmN0aW9uKGxvY2F0aW9uKSB7XG4gICAgcmV0dXJuIFsobG9jYXRpb25bMF0gLSB0aGlzLngpIC8gdGhpcy5rLCAobG9jYXRpb25bMV0gLSB0aGlzLnkpIC8gdGhpcy5rXTtcbiAgfSxcbiAgaW52ZXJ0WDogZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiAoeCAtIHRoaXMueCkgLyB0aGlzLms7XG4gIH0sXG4gIGludmVydFk6IGZ1bmN0aW9uKHkpIHtcbiAgICByZXR1cm4gKHkgLSB0aGlzLnkpIC8gdGhpcy5rO1xuICB9LFxuICByZXNjYWxlWDogZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiB4LmNvcHkoKS5kb21haW4oeC5yYW5nZSgpLm1hcCh0aGlzLmludmVydFgsIHRoaXMpLm1hcCh4LmludmVydCwgeCkpO1xuICB9LFxuICByZXNjYWxlWTogZnVuY3Rpb24oeSkge1xuICAgIHJldHVybiB5LmNvcHkoKS5kb21haW4oeS5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksIHRoaXMpLm1hcCh5LmludmVydCwgeSkpO1xuICB9LFxuICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwidHJhbnNsYXRlKFwiICsgdGhpcy54ICsgXCIsXCIgKyB0aGlzLnkgKyBcIikgc2NhbGUoXCIgKyB0aGlzLmsgKyBcIilcIjtcbiAgfVxufTtcblxuZXhwb3J0IHZhciBpZGVudGl0eSA9IG5ldyBUcmFuc2Zvcm0oMSwgMCwgMCk7XG5cbnRyYW5zZm9ybS5wcm90b3R5cGUgPSBUcmFuc2Zvcm0ucHJvdG90eXBlO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cmFuc2Zvcm0obm9kZSkge1xuICB3aGlsZSAoIW5vZGUuX196b29tKSBpZiAoIShub2RlID0gbm9kZS5wYXJlbnROb2RlKSkgcmV0dXJuIGlkZW50aXR5O1xuICByZXR1cm4gbm9kZS5fX3pvb207XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gbm9wcm9wYWdhdGlvbihldmVudCkge1xuICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZXZlbnQpIHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG59XG4iLCJpbXBvcnQge2Rpc3BhdGNofSBmcm9tIFwiZDMtZGlzcGF0Y2hcIjtcbmltcG9ydCB7ZHJhZ0Rpc2FibGUsIGRyYWdFbmFibGV9IGZyb20gXCJkMy1kcmFnXCI7XG5pbXBvcnQge2ludGVycG9sYXRlWm9vbX0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQge3NlbGVjdCwgcG9pbnRlcn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtpbnRlcnJ1cHR9IGZyb20gXCJkMy10cmFuc2l0aW9uXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBab29tRXZlbnQgZnJvbSBcIi4vZXZlbnQuanNcIjtcbmltcG9ydCB7VHJhbnNmb3JtLCBpZGVudGl0eX0gZnJvbSBcIi4vdHJhbnNmb3JtLmpzXCI7XG5pbXBvcnQgbm9ldmVudCwge25vcHJvcGFnYXRpb259IGZyb20gXCIuL25vZXZlbnQuanNcIjtcblxuLy8gSWdub3JlIHJpZ2h0LWNsaWNrLCBzaW5jZSB0aGF0IHNob3VsZCBvcGVuIHRoZSBjb250ZXh0IG1lbnUuXG4vLyBleGNlcHQgZm9yIHBpbmNoLXRvLXpvb20sIHdoaWNoIGlzIHNlbnQgYXMgYSB3aGVlbCtjdHJsS2V5IGV2ZW50XG5mdW5jdGlvbiBkZWZhdWx0RmlsdGVyKGV2ZW50KSB7XG4gIHJldHVybiAoIWV2ZW50LmN0cmxLZXkgfHwgZXZlbnQudHlwZSA9PT0gJ3doZWVsJykgJiYgIWV2ZW50LmJ1dHRvbjtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdEV4dGVudCgpIHtcbiAgdmFyIGUgPSB0aGlzO1xuICBpZiAoZSBpbnN0YW5jZW9mIFNWR0VsZW1lbnQpIHtcbiAgICBlID0gZS5vd25lclNWR0VsZW1lbnQgfHwgZTtcbiAgICBpZiAoZS5oYXNBdHRyaWJ1dGUoXCJ2aWV3Qm94XCIpKSB7XG4gICAgICBlID0gZS52aWV3Qm94LmJhc2VWYWw7XG4gICAgICByZXR1cm4gW1tlLngsIGUueV0sIFtlLnggKyBlLndpZHRoLCBlLnkgKyBlLmhlaWdodF1dO1xuICAgIH1cbiAgICByZXR1cm4gW1swLCAwXSwgW2Uud2lkdGguYmFzZVZhbC52YWx1ZSwgZS5oZWlnaHQuYmFzZVZhbC52YWx1ZV1dO1xuICB9XG4gIHJldHVybiBbWzAsIDBdLCBbZS5jbGllbnRXaWR0aCwgZS5jbGllbnRIZWlnaHRdXTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdFRyYW5zZm9ybSgpIHtcbiAgcmV0dXJuIHRoaXMuX196b29tIHx8IGlkZW50aXR5O1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0V2hlZWxEZWx0YShldmVudCkge1xuICByZXR1cm4gLWV2ZW50LmRlbHRhWSAqIChldmVudC5kZWx0YU1vZGUgPT09IDEgPyAwLjA1IDogZXZlbnQuZGVsdGFNb2RlID8gMSA6IDAuMDAyKSAqIChldmVudC5jdHJsS2V5ID8gMTAgOiAxKTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdFRvdWNoYWJsZSgpIHtcbiAgcmV0dXJuIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyB8fCAoXCJvbnRvdWNoc3RhcnRcIiBpbiB0aGlzKTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdENvbnN0cmFpbih0cmFuc2Zvcm0sIGV4dGVudCwgdHJhbnNsYXRlRXh0ZW50KSB7XG4gIHZhciBkeDAgPSB0cmFuc2Zvcm0uaW52ZXJ0WChleHRlbnRbMF1bMF0pIC0gdHJhbnNsYXRlRXh0ZW50WzBdWzBdLFxuICAgICAgZHgxID0gdHJhbnNmb3JtLmludmVydFgoZXh0ZW50WzFdWzBdKSAtIHRyYW5zbGF0ZUV4dGVudFsxXVswXSxcbiAgICAgIGR5MCA9IHRyYW5zZm9ybS5pbnZlcnRZKGV4dGVudFswXVsxXSkgLSB0cmFuc2xhdGVFeHRlbnRbMF1bMV0sXG4gICAgICBkeTEgPSB0cmFuc2Zvcm0uaW52ZXJ0WShleHRlbnRbMV1bMV0pIC0gdHJhbnNsYXRlRXh0ZW50WzFdWzFdO1xuICByZXR1cm4gdHJhbnNmb3JtLnRyYW5zbGF0ZShcbiAgICBkeDEgPiBkeDAgPyAoZHgwICsgZHgxKSAvIDIgOiBNYXRoLm1pbigwLCBkeDApIHx8IE1hdGgubWF4KDAsIGR4MSksXG4gICAgZHkxID4gZHkwID8gKGR5MCArIGR5MSkgLyAyIDogTWF0aC5taW4oMCwgZHkwKSB8fCBNYXRoLm1heCgwLCBkeTEpXG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgZmlsdGVyID0gZGVmYXVsdEZpbHRlcixcbiAgICAgIGV4dGVudCA9IGRlZmF1bHRFeHRlbnQsXG4gICAgICBjb25zdHJhaW4gPSBkZWZhdWx0Q29uc3RyYWluLFxuICAgICAgd2hlZWxEZWx0YSA9IGRlZmF1bHRXaGVlbERlbHRhLFxuICAgICAgdG91Y2hhYmxlID0gZGVmYXVsdFRvdWNoYWJsZSxcbiAgICAgIHNjYWxlRXh0ZW50ID0gWzAsIEluZmluaXR5XSxcbiAgICAgIHRyYW5zbGF0ZUV4dGVudCA9IFtbLUluZmluaXR5LCAtSW5maW5pdHldLCBbSW5maW5pdHksIEluZmluaXR5XV0sXG4gICAgICBkdXJhdGlvbiA9IDI1MCxcbiAgICAgIGludGVycG9sYXRlID0gaW50ZXJwb2xhdGVab29tLFxuICAgICAgbGlzdGVuZXJzID0gZGlzcGF0Y2goXCJzdGFydFwiLCBcInpvb21cIiwgXCJlbmRcIiksXG4gICAgICB0b3VjaHN0YXJ0aW5nLFxuICAgICAgdG91Y2hmaXJzdCxcbiAgICAgIHRvdWNoZW5kaW5nLFxuICAgICAgdG91Y2hEZWxheSA9IDUwMCxcbiAgICAgIHdoZWVsRGVsYXkgPSAxNTAsXG4gICAgICBjbGlja0Rpc3RhbmNlMiA9IDAsXG4gICAgICB0YXBEaXN0YW5jZSA9IDEwO1xuXG4gIGZ1bmN0aW9uIHpvb20oc2VsZWN0aW9uKSB7XG4gICAgc2VsZWN0aW9uXG4gICAgICAgIC5wcm9wZXJ0eShcIl9fem9vbVwiLCBkZWZhdWx0VHJhbnNmb3JtKVxuICAgICAgICAub24oXCJ3aGVlbC56b29tXCIsIHdoZWVsZWQsIHtwYXNzaXZlOiBmYWxzZX0pXG4gICAgICAgIC5vbihcIm1vdXNlZG93bi56b29tXCIsIG1vdXNlZG93bmVkKVxuICAgICAgICAub24oXCJkYmxjbGljay56b29tXCIsIGRibGNsaWNrZWQpXG4gICAgICAuZmlsdGVyKHRvdWNoYWJsZSlcbiAgICAgICAgLm9uKFwidG91Y2hzdGFydC56b29tXCIsIHRvdWNoc3RhcnRlZClcbiAgICAgICAgLm9uKFwidG91Y2htb3ZlLnpvb21cIiwgdG91Y2htb3ZlZClcbiAgICAgICAgLm9uKFwidG91Y2hlbmQuem9vbSB0b3VjaGNhbmNlbC56b29tXCIsIHRvdWNoZW5kZWQpXG4gICAgICAgIC5zdHlsZShcIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvclwiLCBcInJnYmEoMCwwLDAsMClcIik7XG4gIH1cblxuICB6b29tLnRyYW5zZm9ybSA9IGZ1bmN0aW9uKGNvbGxlY3Rpb24sIHRyYW5zZm9ybSwgcG9pbnQsIGV2ZW50KSB7XG4gICAgdmFyIHNlbGVjdGlvbiA9IGNvbGxlY3Rpb24uc2VsZWN0aW9uID8gY29sbGVjdGlvbi5zZWxlY3Rpb24oKSA6IGNvbGxlY3Rpb247XG4gICAgc2VsZWN0aW9uLnByb3BlcnR5KFwiX196b29tXCIsIGRlZmF1bHRUcmFuc2Zvcm0pO1xuICAgIGlmIChjb2xsZWN0aW9uICE9PSBzZWxlY3Rpb24pIHtcbiAgICAgIHNjaGVkdWxlKGNvbGxlY3Rpb24sIHRyYW5zZm9ybSwgcG9pbnQsIGV2ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZWN0aW9uLmludGVycnVwdCgpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgIGdlc3R1cmUodGhpcywgYXJndW1lbnRzKVxuICAgICAgICAgIC5ldmVudChldmVudClcbiAgICAgICAgICAuc3RhcnQoKVxuICAgICAgICAgIC56b29tKG51bGwsIHR5cGVvZiB0cmFuc2Zvcm0gPT09IFwiZnVuY3Rpb25cIiA/IHRyYW5zZm9ybS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogdHJhbnNmb3JtKVxuICAgICAgICAgIC5lbmQoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICB6b29tLnNjYWxlQnkgPSBmdW5jdGlvbihzZWxlY3Rpb24sIGssIHAsIGV2ZW50KSB7XG4gICAgem9vbS5zY2FsZVRvKHNlbGVjdGlvbiwgZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgazAgPSB0aGlzLl9fem9vbS5rLFxuICAgICAgICAgIGsxID0gdHlwZW9mIGsgPT09IFwiZnVuY3Rpb25cIiA/IGsuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IGs7XG4gICAgICByZXR1cm4gazAgKiBrMTtcbiAgICB9LCBwLCBldmVudCk7XG4gIH07XG5cbiAgem9vbS5zY2FsZVRvID0gZnVuY3Rpb24oc2VsZWN0aW9uLCBrLCBwLCBldmVudCkge1xuICAgIHpvb20udHJhbnNmb3JtKHNlbGVjdGlvbiwgZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgZSA9IGV4dGVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpLFxuICAgICAgICAgIHQwID0gdGhpcy5fX3pvb20sXG4gICAgICAgICAgcDAgPSBwID09IG51bGwgPyBjZW50cm9pZChlKSA6IHR5cGVvZiBwID09PSBcImZ1bmN0aW9uXCIgPyBwLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiBwLFxuICAgICAgICAgIHAxID0gdDAuaW52ZXJ0KHAwKSxcbiAgICAgICAgICBrMSA9IHR5cGVvZiBrID09PSBcImZ1bmN0aW9uXCIgPyBrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiBrO1xuICAgICAgcmV0dXJuIGNvbnN0cmFpbih0cmFuc2xhdGUoc2NhbGUodDAsIGsxKSwgcDAsIHAxKSwgZSwgdHJhbnNsYXRlRXh0ZW50KTtcbiAgICB9LCBwLCBldmVudCk7XG4gIH07XG5cbiAgem9vbS50cmFuc2xhdGVCeSA9IGZ1bmN0aW9uKHNlbGVjdGlvbiwgeCwgeSwgZXZlbnQpIHtcbiAgICB6b29tLnRyYW5zZm9ybShzZWxlY3Rpb24sIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGNvbnN0cmFpbih0aGlzLl9fem9vbS50cmFuc2xhdGUoXG4gICAgICAgIHR5cGVvZiB4ID09PSBcImZ1bmN0aW9uXCIgPyB4LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiB4LFxuICAgICAgICB0eXBlb2YgeSA9PT0gXCJmdW5jdGlvblwiID8geS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogeVxuICAgICAgKSwgZXh0ZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHRyYW5zbGF0ZUV4dGVudCk7XG4gICAgfSwgbnVsbCwgZXZlbnQpO1xuICB9O1xuXG4gIHpvb20udHJhbnNsYXRlVG8gPSBmdW5jdGlvbihzZWxlY3Rpb24sIHgsIHksIHAsIGV2ZW50KSB7XG4gICAgem9vbS50cmFuc2Zvcm0oc2VsZWN0aW9uLCBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBlID0gZXh0ZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgICAgdCA9IHRoaXMuX196b29tLFxuICAgICAgICAgIHAwID0gcCA9PSBudWxsID8gY2VudHJvaWQoZSkgOiB0eXBlb2YgcCA9PT0gXCJmdW5jdGlvblwiID8gcC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogcDtcbiAgICAgIHJldHVybiBjb25zdHJhaW4oaWRlbnRpdHkudHJhbnNsYXRlKHAwWzBdLCBwMFsxXSkuc2NhbGUodC5rKS50cmFuc2xhdGUoXG4gICAgICAgIHR5cGVvZiB4ID09PSBcImZ1bmN0aW9uXCIgPyAteC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogLXgsXG4gICAgICAgIHR5cGVvZiB5ID09PSBcImZ1bmN0aW9uXCIgPyAteS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogLXlcbiAgICAgICksIGUsIHRyYW5zbGF0ZUV4dGVudCk7XG4gICAgfSwgcCwgZXZlbnQpO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHNjYWxlKHRyYW5zZm9ybSwgaykge1xuICAgIGsgPSBNYXRoLm1heChzY2FsZUV4dGVudFswXSwgTWF0aC5taW4oc2NhbGVFeHRlbnRbMV0sIGspKTtcbiAgICByZXR1cm4gayA9PT0gdHJhbnNmb3JtLmsgPyB0cmFuc2Zvcm0gOiBuZXcgVHJhbnNmb3JtKGssIHRyYW5zZm9ybS54LCB0cmFuc2Zvcm0ueSk7XG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2xhdGUodHJhbnNmb3JtLCBwMCwgcDEpIHtcbiAgICB2YXIgeCA9IHAwWzBdIC0gcDFbMF0gKiB0cmFuc2Zvcm0uaywgeSA9IHAwWzFdIC0gcDFbMV0gKiB0cmFuc2Zvcm0uaztcbiAgICByZXR1cm4geCA9PT0gdHJhbnNmb3JtLnggJiYgeSA9PT0gdHJhbnNmb3JtLnkgPyB0cmFuc2Zvcm0gOiBuZXcgVHJhbnNmb3JtKHRyYW5zZm9ybS5rLCB4LCB5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNlbnRyb2lkKGV4dGVudCkge1xuICAgIHJldHVybiBbKCtleHRlbnRbMF1bMF0gKyArZXh0ZW50WzFdWzBdKSAvIDIsICgrZXh0ZW50WzBdWzFdICsgK2V4dGVudFsxXVsxXSkgLyAyXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNjaGVkdWxlKHRyYW5zaXRpb24sIHRyYW5zZm9ybSwgcG9pbnQsIGV2ZW50KSB7XG4gICAgdHJhbnNpdGlvblxuICAgICAgICAub24oXCJzdGFydC56b29tXCIsIGZ1bmN0aW9uKCkgeyBnZXN0dXJlKHRoaXMsIGFyZ3VtZW50cykuZXZlbnQoZXZlbnQpLnN0YXJ0KCk7IH0pXG4gICAgICAgIC5vbihcImludGVycnVwdC56b29tIGVuZC56b29tXCIsIGZ1bmN0aW9uKCkgeyBnZXN0dXJlKHRoaXMsIGFyZ3VtZW50cykuZXZlbnQoZXZlbnQpLmVuZCgpOyB9KVxuICAgICAgICAudHdlZW4oXCJ6b29tXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgICAgICAgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgICAgICAgZyA9IGdlc3R1cmUodGhhdCwgYXJncykuZXZlbnQoZXZlbnQpLFxuICAgICAgICAgICAgICBlID0gZXh0ZW50LmFwcGx5KHRoYXQsIGFyZ3MpLFxuICAgICAgICAgICAgICBwID0gcG9pbnQgPT0gbnVsbCA/IGNlbnRyb2lkKGUpIDogdHlwZW9mIHBvaW50ID09PSBcImZ1bmN0aW9uXCIgPyBwb2ludC5hcHBseSh0aGF0LCBhcmdzKSA6IHBvaW50LFxuICAgICAgICAgICAgICB3ID0gTWF0aC5tYXgoZVsxXVswXSAtIGVbMF1bMF0sIGVbMV1bMV0gLSBlWzBdWzFdKSxcbiAgICAgICAgICAgICAgYSA9IHRoYXQuX196b29tLFxuICAgICAgICAgICAgICBiID0gdHlwZW9mIHRyYW5zZm9ybSA9PT0gXCJmdW5jdGlvblwiID8gdHJhbnNmb3JtLmFwcGx5KHRoYXQsIGFyZ3MpIDogdHJhbnNmb3JtLFxuICAgICAgICAgICAgICBpID0gaW50ZXJwb2xhdGUoYS5pbnZlcnQocCkuY29uY2F0KHcgLyBhLmspLCBiLmludmVydChwKS5jb25jYXQodyAvIGIuaykpO1xuICAgICAgICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICBpZiAodCA9PT0gMSkgdCA9IGI7IC8vIEF2b2lkIHJvdW5kaW5nIGVycm9yIG9uIGVuZC5cbiAgICAgICAgICAgIGVsc2UgeyB2YXIgbCA9IGkodCksIGsgPSB3IC8gbFsyXTsgdCA9IG5ldyBUcmFuc2Zvcm0oaywgcFswXSAtIGxbMF0gKiBrLCBwWzFdIC0gbFsxXSAqIGspOyB9XG4gICAgICAgICAgICBnLnpvb20obnVsbCwgdCk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXN0dXJlKHRoYXQsIGFyZ3MsIGNsZWFuKSB7XG4gICAgcmV0dXJuICghY2xlYW4gJiYgdGhhdC5fX3pvb21pbmcpIHx8IG5ldyBHZXN0dXJlKHRoYXQsIGFyZ3MpO1xuICB9XG5cbiAgZnVuY3Rpb24gR2VzdHVyZSh0aGF0LCBhcmdzKSB7XG4gICAgdGhpcy50aGF0ID0gdGhhdDtcbiAgICB0aGlzLmFyZ3MgPSBhcmdzO1xuICAgIHRoaXMuYWN0aXZlID0gMDtcbiAgICB0aGlzLnNvdXJjZUV2ZW50ID0gbnVsbDtcbiAgICB0aGlzLmV4dGVudCA9IGV4dGVudC5hcHBseSh0aGF0LCBhcmdzKTtcbiAgICB0aGlzLnRhcHMgPSAwO1xuICB9XG5cbiAgR2VzdHVyZS5wcm90b3R5cGUgPSB7XG4gICAgZXZlbnQ6IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICBpZiAoZXZlbnQpIHRoaXMuc291cmNlRXZlbnQgPSBldmVudDtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgc3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKCsrdGhpcy5hY3RpdmUgPT09IDEpIHtcbiAgICAgICAgdGhpcy50aGF0Ll9fem9vbWluZyA9IHRoaXM7XG4gICAgICAgIHRoaXMuZW1pdChcInN0YXJ0XCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICB6b29tOiBmdW5jdGlvbihrZXksIHRyYW5zZm9ybSkge1xuICAgICAgaWYgKHRoaXMubW91c2UgJiYga2V5ICE9PSBcIm1vdXNlXCIpIHRoaXMubW91c2VbMV0gPSB0cmFuc2Zvcm0uaW52ZXJ0KHRoaXMubW91c2VbMF0pO1xuICAgICAgaWYgKHRoaXMudG91Y2gwICYmIGtleSAhPT0gXCJ0b3VjaFwiKSB0aGlzLnRvdWNoMFsxXSA9IHRyYW5zZm9ybS5pbnZlcnQodGhpcy50b3VjaDBbMF0pO1xuICAgICAgaWYgKHRoaXMudG91Y2gxICYmIGtleSAhPT0gXCJ0b3VjaFwiKSB0aGlzLnRvdWNoMVsxXSA9IHRyYW5zZm9ybS5pbnZlcnQodGhpcy50b3VjaDFbMF0pO1xuICAgICAgdGhpcy50aGF0Ll9fem9vbSA9IHRyYW5zZm9ybTtcbiAgICAgIHRoaXMuZW1pdChcInpvb21cIik7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIGVuZDogZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoLS10aGlzLmFjdGl2ZSA9PT0gMCkge1xuICAgICAgICBkZWxldGUgdGhpcy50aGF0Ll9fem9vbWluZztcbiAgICAgICAgdGhpcy5lbWl0KFwiZW5kXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBlbWl0OiBmdW5jdGlvbih0eXBlKSB7XG4gICAgICB2YXIgZCA9IHNlbGVjdCh0aGlzLnRoYXQpLmRhdHVtKCk7XG4gICAgICBsaXN0ZW5lcnMuY2FsbChcbiAgICAgICAgdHlwZSxcbiAgICAgICAgdGhpcy50aGF0LFxuICAgICAgICBuZXcgWm9vbUV2ZW50KHR5cGUsIHtcbiAgICAgICAgICBzb3VyY2VFdmVudDogdGhpcy5zb3VyY2VFdmVudCxcbiAgICAgICAgICB0YXJnZXQ6IHpvb20sXG4gICAgICAgICAgdHlwZSxcbiAgICAgICAgICB0cmFuc2Zvcm06IHRoaXMudGhhdC5fX3pvb20sXG4gICAgICAgICAgZGlzcGF0Y2g6IGxpc3RlbmVyc1xuICAgICAgICB9KSxcbiAgICAgICAgZFxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gd2hlZWxlZChldmVudCwgLi4uYXJncykge1xuICAgIGlmICghZmlsdGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpIHJldHVybjtcbiAgICB2YXIgZyA9IGdlc3R1cmUodGhpcywgYXJncykuZXZlbnQoZXZlbnQpLFxuICAgICAgICB0ID0gdGhpcy5fX3pvb20sXG4gICAgICAgIGsgPSBNYXRoLm1heChzY2FsZUV4dGVudFswXSwgTWF0aC5taW4oc2NhbGVFeHRlbnRbMV0sIHQuayAqIE1hdGgucG93KDIsIHdoZWVsRGVsdGEuYXBwbHkodGhpcywgYXJndW1lbnRzKSkpKSxcbiAgICAgICAgcCA9IHBvaW50ZXIoZXZlbnQpO1xuXG4gICAgLy8gSWYgdGhlIG1vdXNlIGlzIGluIHRoZSBzYW1lIGxvY2F0aW9uIGFzIGJlZm9yZSwgcmV1c2UgaXQuXG4gICAgLy8gSWYgdGhlcmUgd2VyZSByZWNlbnQgd2hlZWwgZXZlbnRzLCByZXNldCB0aGUgd2hlZWwgaWRsZSB0aW1lb3V0LlxuICAgIGlmIChnLndoZWVsKSB7XG4gICAgICBpZiAoZy5tb3VzZVswXVswXSAhPT0gcFswXSB8fCBnLm1vdXNlWzBdWzFdICE9PSBwWzFdKSB7XG4gICAgICAgIGcubW91c2VbMV0gPSB0LmludmVydChnLm1vdXNlWzBdID0gcCk7XG4gICAgICB9XG4gICAgICBjbGVhclRpbWVvdXQoZy53aGVlbCk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhpcyB3aGVlbCBldmVudCB3b27igJl0IHRyaWdnZXIgYSB0cmFuc2Zvcm0gY2hhbmdlLCBpZ25vcmUgaXQuXG4gICAgZWxzZSBpZiAodC5rID09PSBrKSByZXR1cm47XG5cbiAgICAvLyBPdGhlcndpc2UsIGNhcHR1cmUgdGhlIG1vdXNlIHBvaW50IGFuZCBsb2NhdGlvbiBhdCB0aGUgc3RhcnQuXG4gICAgZWxzZSB7XG4gICAgICBnLm1vdXNlID0gW3AsIHQuaW52ZXJ0KHApXTtcbiAgICAgIGludGVycnVwdCh0aGlzKTtcbiAgICAgIGcuc3RhcnQoKTtcbiAgICB9XG5cbiAgICBub2V2ZW50KGV2ZW50KTtcbiAgICBnLndoZWVsID0gc2V0VGltZW91dCh3aGVlbGlkbGVkLCB3aGVlbERlbGF5KTtcbiAgICBnLnpvb20oXCJtb3VzZVwiLCBjb25zdHJhaW4odHJhbnNsYXRlKHNjYWxlKHQsIGspLCBnLm1vdXNlWzBdLCBnLm1vdXNlWzFdKSwgZy5leHRlbnQsIHRyYW5zbGF0ZUV4dGVudCkpO1xuXG4gICAgZnVuY3Rpb24gd2hlZWxpZGxlZCgpIHtcbiAgICAgIGcud2hlZWwgPSBudWxsO1xuICAgICAgZy5lbmQoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBtb3VzZWRvd25lZChldmVudCwgLi4uYXJncykge1xuICAgIGlmICh0b3VjaGVuZGluZyB8fCAhZmlsdGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpIHJldHVybjtcbiAgICB2YXIgY3VycmVudFRhcmdldCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQsXG4gICAgICAgIGcgPSBnZXN0dXJlKHRoaXMsIGFyZ3MsIHRydWUpLmV2ZW50KGV2ZW50KSxcbiAgICAgICAgdiA9IHNlbGVjdChldmVudC52aWV3KS5vbihcIm1vdXNlbW92ZS56b29tXCIsIG1vdXNlbW92ZWQsIHRydWUpLm9uKFwibW91c2V1cC56b29tXCIsIG1vdXNldXBwZWQsIHRydWUpLFxuICAgICAgICBwID0gcG9pbnRlcihldmVudCwgY3VycmVudFRhcmdldCksXG4gICAgICAgIHgwID0gZXZlbnQuY2xpZW50WCxcbiAgICAgICAgeTAgPSBldmVudC5jbGllbnRZO1xuXG4gICAgZHJhZ0Rpc2FibGUoZXZlbnQudmlldyk7XG4gICAgbm9wcm9wYWdhdGlvbihldmVudCk7XG4gICAgZy5tb3VzZSA9IFtwLCB0aGlzLl9fem9vbS5pbnZlcnQocCldO1xuICAgIGludGVycnVwdCh0aGlzKTtcbiAgICBnLnN0YXJ0KCk7XG5cbiAgICBmdW5jdGlvbiBtb3VzZW1vdmVkKGV2ZW50KSB7XG4gICAgICBub2V2ZW50KGV2ZW50KTtcbiAgICAgIGlmICghZy5tb3ZlZCkge1xuICAgICAgICB2YXIgZHggPSBldmVudC5jbGllbnRYIC0geDAsIGR5ID0gZXZlbnQuY2xpZW50WSAtIHkwO1xuICAgICAgICBnLm1vdmVkID0gZHggKiBkeCArIGR5ICogZHkgPiBjbGlja0Rpc3RhbmNlMjtcbiAgICAgIH1cbiAgICAgIGcuZXZlbnQoZXZlbnQpXG4gICAgICAgLnpvb20oXCJtb3VzZVwiLCBjb25zdHJhaW4odHJhbnNsYXRlKGcudGhhdC5fX3pvb20sIGcubW91c2VbMF0gPSBwb2ludGVyKGV2ZW50LCBjdXJyZW50VGFyZ2V0KSwgZy5tb3VzZVsxXSksIGcuZXh0ZW50LCB0cmFuc2xhdGVFeHRlbnQpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb3VzZXVwcGVkKGV2ZW50KSB7XG4gICAgICB2Lm9uKFwibW91c2Vtb3ZlLnpvb20gbW91c2V1cC56b29tXCIsIG51bGwpO1xuICAgICAgZHJhZ0VuYWJsZShldmVudC52aWV3LCBnLm1vdmVkKTtcbiAgICAgIG5vZXZlbnQoZXZlbnQpO1xuICAgICAgZy5ldmVudChldmVudCkuZW5kKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZGJsY2xpY2tlZChldmVudCwgLi4uYXJncykge1xuICAgIGlmICghZmlsdGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpIHJldHVybjtcbiAgICB2YXIgdDAgPSB0aGlzLl9fem9vbSxcbiAgICAgICAgcDAgPSBwb2ludGVyKGV2ZW50LmNoYW5nZWRUb3VjaGVzID8gZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0gOiBldmVudCwgdGhpcyksXG4gICAgICAgIHAxID0gdDAuaW52ZXJ0KHAwKSxcbiAgICAgICAgazEgPSB0MC5rICogKGV2ZW50LnNoaWZ0S2V5ID8gMC41IDogMiksXG4gICAgICAgIHQxID0gY29uc3RyYWluKHRyYW5zbGF0ZShzY2FsZSh0MCwgazEpLCBwMCwgcDEpLCBleHRlbnQuYXBwbHkodGhpcywgYXJncyksIHRyYW5zbGF0ZUV4dGVudCk7XG5cbiAgICBub2V2ZW50KGV2ZW50KTtcbiAgICBpZiAoZHVyYXRpb24gPiAwKSBzZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKGR1cmF0aW9uKS5jYWxsKHNjaGVkdWxlLCB0MSwgcDAsIGV2ZW50KTtcbiAgICBlbHNlIHNlbGVjdCh0aGlzKS5jYWxsKHpvb20udHJhbnNmb3JtLCB0MSwgcDAsIGV2ZW50KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvdWNoc3RhcnRlZChldmVudCwgLi4uYXJncykge1xuICAgIGlmICghZmlsdGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpIHJldHVybjtcbiAgICB2YXIgdG91Y2hlcyA9IGV2ZW50LnRvdWNoZXMsXG4gICAgICAgIG4gPSB0b3VjaGVzLmxlbmd0aCxcbiAgICAgICAgZyA9IGdlc3R1cmUodGhpcywgYXJncywgZXZlbnQuY2hhbmdlZFRvdWNoZXMubGVuZ3RoID09PSBuKS5ldmVudChldmVudCksXG4gICAgICAgIHN0YXJ0ZWQsIGksIHQsIHA7XG5cbiAgICBub3Byb3BhZ2F0aW9uKGV2ZW50KTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICB0ID0gdG91Y2hlc1tpXSwgcCA9IHBvaW50ZXIodCwgdGhpcyk7XG4gICAgICBwID0gW3AsIHRoaXMuX196b29tLmludmVydChwKSwgdC5pZGVudGlmaWVyXTtcbiAgICAgIGlmICghZy50b3VjaDApIGcudG91Y2gwID0gcCwgc3RhcnRlZCA9IHRydWUsIGcudGFwcyA9IDEgKyAhIXRvdWNoc3RhcnRpbmc7XG4gICAgICBlbHNlIGlmICghZy50b3VjaDEgJiYgZy50b3VjaDBbMl0gIT09IHBbMl0pIGcudG91Y2gxID0gcCwgZy50YXBzID0gMDtcbiAgICB9XG5cbiAgICBpZiAodG91Y2hzdGFydGluZykgdG91Y2hzdGFydGluZyA9IGNsZWFyVGltZW91dCh0b3VjaHN0YXJ0aW5nKTtcblxuICAgIGlmIChzdGFydGVkKSB7XG4gICAgICBpZiAoZy50YXBzIDwgMikgdG91Y2hmaXJzdCA9IHBbMF0sIHRvdWNoc3RhcnRpbmcgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyB0b3VjaHN0YXJ0aW5nID0gbnVsbDsgfSwgdG91Y2hEZWxheSk7XG4gICAgICBpbnRlcnJ1cHQodGhpcyk7XG4gICAgICBnLnN0YXJ0KCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdG91Y2htb3ZlZChldmVudCwgLi4uYXJncykge1xuICAgIGlmICghdGhpcy5fX3pvb21pbmcpIHJldHVybjtcbiAgICB2YXIgZyA9IGdlc3R1cmUodGhpcywgYXJncykuZXZlbnQoZXZlbnQpLFxuICAgICAgICB0b3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXMsXG4gICAgICAgIG4gPSB0b3VjaGVzLmxlbmd0aCwgaSwgdCwgcCwgbDtcblxuICAgIG5vZXZlbnQoZXZlbnQpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIHQgPSB0b3VjaGVzW2ldLCBwID0gcG9pbnRlcih0LCB0aGlzKTtcbiAgICAgIGlmIChnLnRvdWNoMCAmJiBnLnRvdWNoMFsyXSA9PT0gdC5pZGVudGlmaWVyKSBnLnRvdWNoMFswXSA9IHA7XG4gICAgICBlbHNlIGlmIChnLnRvdWNoMSAmJiBnLnRvdWNoMVsyXSA9PT0gdC5pZGVudGlmaWVyKSBnLnRvdWNoMVswXSA9IHA7XG4gICAgfVxuICAgIHQgPSBnLnRoYXQuX196b29tO1xuICAgIGlmIChnLnRvdWNoMSkge1xuICAgICAgdmFyIHAwID0gZy50b3VjaDBbMF0sIGwwID0gZy50b3VjaDBbMV0sXG4gICAgICAgICAgcDEgPSBnLnRvdWNoMVswXSwgbDEgPSBnLnRvdWNoMVsxXSxcbiAgICAgICAgICBkcCA9IChkcCA9IHAxWzBdIC0gcDBbMF0pICogZHAgKyAoZHAgPSBwMVsxXSAtIHAwWzFdKSAqIGRwLFxuICAgICAgICAgIGRsID0gKGRsID0gbDFbMF0gLSBsMFswXSkgKiBkbCArIChkbCA9IGwxWzFdIC0gbDBbMV0pICogZGw7XG4gICAgICB0ID0gc2NhbGUodCwgTWF0aC5zcXJ0KGRwIC8gZGwpKTtcbiAgICAgIHAgPSBbKHAwWzBdICsgcDFbMF0pIC8gMiwgKHAwWzFdICsgcDFbMV0pIC8gMl07XG4gICAgICBsID0gWyhsMFswXSArIGwxWzBdKSAvIDIsIChsMFsxXSArIGwxWzFdKSAvIDJdO1xuICAgIH1cbiAgICBlbHNlIGlmIChnLnRvdWNoMCkgcCA9IGcudG91Y2gwWzBdLCBsID0gZy50b3VjaDBbMV07XG4gICAgZWxzZSByZXR1cm47XG5cbiAgICBnLnpvb20oXCJ0b3VjaFwiLCBjb25zdHJhaW4odHJhbnNsYXRlKHQsIHAsIGwpLCBnLmV4dGVudCwgdHJhbnNsYXRlRXh0ZW50KSk7XG4gIH1cblxuICBmdW5jdGlvbiB0b3VjaGVuZGVkKGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgaWYgKCF0aGlzLl9fem9vbWluZykgcmV0dXJuO1xuICAgIHZhciBnID0gZ2VzdHVyZSh0aGlzLCBhcmdzKS5ldmVudChldmVudCksXG4gICAgICAgIHRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcyxcbiAgICAgICAgbiA9IHRvdWNoZXMubGVuZ3RoLCBpLCB0O1xuXG4gICAgbm9wcm9wYWdhdGlvbihldmVudCk7XG4gICAgaWYgKHRvdWNoZW5kaW5nKSBjbGVhclRpbWVvdXQodG91Y2hlbmRpbmcpO1xuICAgIHRvdWNoZW5kaW5nID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsgdG91Y2hlbmRpbmcgPSBudWxsOyB9LCB0b3VjaERlbGF5KTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICB0ID0gdG91Y2hlc1tpXTtcbiAgICAgIGlmIChnLnRvdWNoMCAmJiBnLnRvdWNoMFsyXSA9PT0gdC5pZGVudGlmaWVyKSBkZWxldGUgZy50b3VjaDA7XG4gICAgICBlbHNlIGlmIChnLnRvdWNoMSAmJiBnLnRvdWNoMVsyXSA9PT0gdC5pZGVudGlmaWVyKSBkZWxldGUgZy50b3VjaDE7XG4gICAgfVxuICAgIGlmIChnLnRvdWNoMSAmJiAhZy50b3VjaDApIGcudG91Y2gwID0gZy50b3VjaDEsIGRlbGV0ZSBnLnRvdWNoMTtcbiAgICBpZiAoZy50b3VjaDApIGcudG91Y2gwWzFdID0gdGhpcy5fX3pvb20uaW52ZXJ0KGcudG91Y2gwWzBdKTtcbiAgICBlbHNlIHtcbiAgICAgIGcuZW5kKCk7XG4gICAgICAvLyBJZiB0aGlzIHdhcyBhIGRibHRhcCwgcmVyb3V0ZSB0byB0aGUgKG9wdGlvbmFsKSBkYmxjbGljay56b29tIGhhbmRsZXIuXG4gICAgICBpZiAoZy50YXBzID09PSAyKSB7XG4gICAgICAgIHQgPSBwb2ludGVyKHQsIHRoaXMpO1xuICAgICAgICBpZiAoTWF0aC5oeXBvdCh0b3VjaGZpcnN0WzBdIC0gdFswXSwgdG91Y2hmaXJzdFsxXSAtIHRbMV0pIDwgdGFwRGlzdGFuY2UpIHtcbiAgICAgICAgICB2YXIgcCA9IHNlbGVjdCh0aGlzKS5vbihcImRibGNsaWNrLnpvb21cIik7XG4gICAgICAgICAgaWYgKHApIHAuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHpvb20ud2hlZWxEZWx0YSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh3aGVlbERlbHRhID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIHpvb20pIDogd2hlZWxEZWx0YTtcbiAgfTtcblxuICB6b29tLmZpbHRlciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChmaWx0ZXIgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCEhXyksIHpvb20pIDogZmlsdGVyO1xuICB9O1xuXG4gIHpvb20udG91Y2hhYmxlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRvdWNoYWJsZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoISFfKSwgem9vbSkgOiB0b3VjaGFibGU7XG4gIH07XG5cbiAgem9vbS5leHRlbnQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZXh0ZW50ID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudChbWytfWzBdWzBdLCArX1swXVsxXV0sIFsrX1sxXVswXSwgK19bMV1bMV1dXSksIHpvb20pIDogZXh0ZW50O1xuICB9O1xuXG4gIHpvb20uc2NhbGVFeHRlbnQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc2NhbGVFeHRlbnRbMF0gPSArX1swXSwgc2NhbGVFeHRlbnRbMV0gPSArX1sxXSwgem9vbSkgOiBbc2NhbGVFeHRlbnRbMF0sIHNjYWxlRXh0ZW50WzFdXTtcbiAgfTtcblxuICB6b29tLnRyYW5zbGF0ZUV4dGVudCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0cmFuc2xhdGVFeHRlbnRbMF1bMF0gPSArX1swXVswXSwgdHJhbnNsYXRlRXh0ZW50WzFdWzBdID0gK19bMV1bMF0sIHRyYW5zbGF0ZUV4dGVudFswXVsxXSA9ICtfWzBdWzFdLCB0cmFuc2xhdGVFeHRlbnRbMV1bMV0gPSArX1sxXVsxXSwgem9vbSkgOiBbW3RyYW5zbGF0ZUV4dGVudFswXVswXSwgdHJhbnNsYXRlRXh0ZW50WzBdWzFdXSwgW3RyYW5zbGF0ZUV4dGVudFsxXVswXSwgdHJhbnNsYXRlRXh0ZW50WzFdWzFdXV07XG4gIH07XG5cbiAgem9vbS5jb25zdHJhaW4gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY29uc3RyYWluID0gXywgem9vbSkgOiBjb25zdHJhaW47XG4gIH07XG5cbiAgem9vbS5kdXJhdGlvbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkdXJhdGlvbiA9ICtfLCB6b29tKSA6IGR1cmF0aW9uO1xuICB9O1xuXG4gIHpvb20uaW50ZXJwb2xhdGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoaW50ZXJwb2xhdGUgPSBfLCB6b29tKSA6IGludGVycG9sYXRlO1xuICB9O1xuXG4gIHpvb20ub24gPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdmFsdWUgPSBsaXN0ZW5lcnMub24uYXBwbHkobGlzdGVuZXJzLCBhcmd1bWVudHMpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbGlzdGVuZXJzID8gem9vbSA6IHZhbHVlO1xuICB9O1xuXG4gIHpvb20uY2xpY2tEaXN0YW5jZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChjbGlja0Rpc3RhbmNlMiA9IChfID0gK18pICogXywgem9vbSkgOiBNYXRoLnNxcnQoY2xpY2tEaXN0YW5jZTIpO1xuICB9O1xuXG4gIHpvb20udGFwRGlzdGFuY2UgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGFwRGlzdGFuY2UgPSArXywgem9vbSkgOiB0YXBEaXN0YW5jZTtcbiAgfTtcblxuICByZXR1cm4gem9vbTtcbn1cbiIsImV4cG9ydCB7ZGVmYXVsdCBhcyB6b29tfSBmcm9tIFwiLi96b29tLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgem9vbVRyYW5zZm9ybSwgaWRlbnRpdHkgYXMgem9vbUlkZW50aXR5LCBUcmFuc2Zvcm0gYXMgWm9vbVRyYW5zZm9ybX0gZnJvbSBcIi4vdHJhbnNmb3JtLmpzXCI7XG4iLCJleHBvcnQgKiBmcm9tIFwiZDMtYXJyYXlcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1heGlzXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtYnJ1c2hcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1jaG9yZFwiO1xuZXhwb3J0ICogZnJvbSBcImQzLWNvbG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtY29udG91clwiO1xuZXhwb3J0ICogZnJvbSBcImQzLWRlbGF1bmF5XCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtZGlzcGF0Y2hcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1kcmFnXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtZHN2XCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtZWFzZVwiO1xuZXhwb3J0ICogZnJvbSBcImQzLWZldGNoXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtZm9yY2VcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1mb3JtYXRcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1nZW9cIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1oaWVyYXJjaHlcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuZXhwb3J0ICogZnJvbSBcImQzLXBhdGhcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1wb2x5Z29uXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtcXVhZHRyZWVcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1yYW5kb21cIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1zY2FsZVwiO1xuZXhwb3J0ICogZnJvbSBcImQzLXNjYWxlLWNocm9tYXRpY1wiO1xuZXhwb3J0ICogZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcImQzLXNoYXBlXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtdGltZVwiO1xuZXhwb3J0ICogZnJvbSBcImQzLXRpbWUtZm9ybWF0XCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtdGltZXJcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy10cmFuc2l0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtem9vbVwiO1xuIiwiXG4gICAgICBpbXBvcnQgQVBJIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICBpbXBvcnQgZG9tQVBJIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRGbiBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydEJ5U2VsZWN0b3IuanNcIjtcbiAgICAgIGltcG9ydCBzZXRBdHRyaWJ1dGVzIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0U3R5bGVFbGVtZW50IGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzXCI7XG4gICAgICBpbXBvcnQgc3R5bGVUYWdUcmFuc2Zvcm1GbiBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlVGFnVHJhbnNmb3JtLmpzXCI7XG4gICAgICBpbXBvcnQgY29udGVudCwgKiBhcyBuYW1lZEV4cG9ydCBmcm9tIFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/cnVsZVNldFsxXS5ydWxlc1syXS51c2VbMV0hLi9GaWxlVXBsb2FkLmNzc1wiO1xuICAgICAgXG4gICAgICBcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybSA9IHN0eWxlVGFnVHJhbnNmb3JtRm47XG5vcHRpb25zLnNldEF0dHJpYnV0ZXMgPSBzZXRBdHRyaWJ1dGVzO1xuXG4gICAgICBvcHRpb25zLmluc2VydCA9IGluc2VydEZuLmJpbmQobnVsbCwgXCJoZWFkXCIpO1xuICAgIFxub3B0aW9ucy5kb21BUEkgPSBkb21BUEk7XG5vcHRpb25zLmluc2VydFN0eWxlRWxlbWVudCA9IGluc2VydFN0eWxlRWxlbWVudDtcblxudmFyIHVwZGF0ZSA9IEFQSShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCAqIGZyb20gXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9ydWxlU2V0WzFdLnJ1bGVzWzJdLnVzZVsxXSEuL0ZpbGVVcGxvYWQuY3NzXCI7XG4gICAgICAgZXhwb3J0IGRlZmF1bHQgY29udGVudCAmJiBjb250ZW50LmxvY2FscyA/IGNvbnRlbnQubG9jYWxzIDogdW5kZWZpbmVkO1xuIiwiaW1wb3J0ICcuL0ZpbGVVcGxvYWQuY3NzJ1xyXG5cclxuY29uc3QgbWFrZUhlYWRlciA9IChtZXNzYWdlOiBzdHJpbmcpID0+IHtcclxuICAgIGNvbnN0IGhlYWRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2gxJyk7XHJcbiAgICBjb25zdCBoZWFkZXJDb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobWVzc2FnZSk7XHJcbiAgICBoZWFkZXIuYXBwZW5kQ2hpbGQoaGVhZGVyQ29udGVudCk7XHJcbiAgICByZXR1cm4gaGVhZGVyXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBtYWtlRHJvcGJveCA9IChoYW5kbGVVcGxvYWQ6IChmOiBhbnkpID0+IHZvaWQsIG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQgPT4ge1xyXG4gICAgY29uc3QgaGVhZGVyID0gbWFrZUhlYWRlcihtZXNzYWdlKTtcclxuICAgIGNvbnN0IGRyb3Bib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuXHJcbiAgICBjb25zdCBkcmFnZW50ZXIgPSAoZTogeyBzdG9wUHJvcGFnYXRpb246ICgpID0+IHZvaWQ7IHByZXZlbnREZWZhdWx0OiAoKSA9PiB2b2lkOyB9KSA9PiB7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZHJhZ292ZXIgPSAoZTogeyBzdG9wUHJvcGFnYXRpb246ICgpID0+IHZvaWQ7IHByZXZlbnREZWZhdWx0OiAoKSA9PiB2b2lkOyB9KSA9PiB7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZHJvcCA9IGFzeW5jIChlOiB7IHN0b3BQcm9wYWdhdGlvbjogKCkgPT4gdm9pZDsgcHJldmVudERlZmF1bHQ6ICgpID0+IHZvaWQ7IGRhdGFUcmFuc2ZlcjogYW55OyB9KSA9PiB7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGR0ID0gZS5kYXRhVHJhbnNmZXI7XHJcbiAgICAgICAgY29uc3QgZmlsZXMgPSBkdC5maWxlcztcclxuICAgICAgICBhd2FpdCBoYW5kbGVVcGxvYWQoZmlsZXMpXHJcbiAgICAgICAgcmVtb3ZlRHJvcGJveCgpXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVtb3ZlRHJvcGJveCA9ICgpID0+IHtcclxuICAgICAgICBkcm9wYm94LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2RyYWdlbnRlcicsIGRyYWdlbnRlcilcclxuICAgICAgICBkcm9wYm94LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgZHJhZ292ZXIpXHJcbiAgICAgICAgZHJvcGJveC5yZW1vdmVFdmVudExpc3RlbmVyKCdkcm9wJywgZHJvcClcclxuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRyb3Bib3gpO1xyXG4gICAgfVxyXG5cclxuICAgIGRyb3Bib3guc2V0QXR0cmlidXRlKCdpZCcsICdmaWxlVXBsb2FkJylcclxuICAgIGRyb3Bib3guYXBwZW5kQ2hpbGQoaGVhZGVyKVxyXG5cclxuICAgIGRyb3Bib3guYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VudGVyJywgZHJhZ2VudGVyLCBmYWxzZSk7XHJcbiAgICBkcm9wYm94LmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgZHJhZ292ZXIsIGZhbHNlKTtcclxuICAgIGRyb3Bib3guYWRkRXZlbnRMaXN0ZW5lcignZHJvcCcsIGRyb3AsIGZhbHNlKTtcclxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZHJvcGJveClcclxuXHJcblxyXG5cclxufVxyXG4iLCJpbXBvcnQge1xuICBJVXNlckRhdGEsXG4gIFREYXRhTm9kZSxcbiAgVERhdGFSYXdEYXRhTm9kZSxcbiAgVERhdGFSYXdXb3JkLFxuICBURGF0YVJvb3ROb2RlLFxuICBUTGluayxcbiAgVFJhd0RhdGEsXG4gIFRXZWlnaHRlZExpbmssXG59IGZyb20gJy4uL0NvbW1vblR5cGVzJztcblxuaW50ZXJmYWNlIElMZXZlbE5vZGUge1xuICBpZDogVERhdGFOb2RlWydpZCddO1xuICB0eXBlOiBURGF0YU5vZGVbJ3R5cGUnXTtcbiAgcGFyZW50SWQ6IFREYXRhTm9kZVsnaWQnXSB8IFREYXRhUm9vdE5vZGVbJ2lkJ10gfCB1bmRlZmluZWQ7XG4gIHdvcmRzPzogVE5vZGVXb3JkO1xufVxuXG50eXBlIFROb2RlV29yZCA9IHtcbiAgaW5kZXg6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICB3ZWlnaHQ6IG51bWJlcjtcbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG4gIHZ4OiBudW1iZXI7XG4gIHZ5OiBudW1iZXI7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElMZXZlbGVkTm9kZSB7XG4gIGlkOiBJTGV2ZWxOb2RlWydpZCddO1xuICB0eXBlOiBJTGV2ZWxOb2RlWyd0eXBlJ107XG4gIHBhcmVudElkPzogVERhdGFOb2RlWydpZCddO1xuICB3b3Jkcz86IFROb2RlV29yZFtdO1xufVxuXG5jb25zdCBjcmVhdGVOb2RlID0gKG5vZGU6IFREYXRhUmF3RGF0YU5vZGUpOiBJTGV2ZWxlZE5vZGUgPT4ge1xuICBpZiAobm9kZS5pZCA9PT0gJ1Jvb3QnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiAnUm9vdCcsXG4gICAgICB0eXBlOiAnbm9kZScsXG4gICAgICBwYXJlbnRJZDogdW5kZWZpbmVkLFxuICAgICAgd29yZHM6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogbm9kZS5pZCxcbiAgICAgIHR5cGU6ICdub2RlJyxcbiAgICAgIHBhcmVudElkOiB1bmRlZmluZWQsXG4gICAgICB3b3JkczogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cbn07XG5cbmNvbnN0IGxldmVsTGlua05vZGVzID0gKGRhdGE6IHtcbiAgbm9kZXM6IElMZXZlbGVkTm9kZVtdO1xuICBsaW5rczogVExpbmtbXTtcbn0pOiBJTGV2ZWxlZE5vZGVbXSA9PiB7XG4gIGNvbnN0IHsgbm9kZXMsIGxpbmtzIH0gPSBkYXRhO1xuXG4gIGxpbmtzLmZvckVhY2goKGUpID0+IHtcbiAgICBjb25zdCB7IHNvdXJjZSwgdGFyZ2V0IH0gPSBlO1xuICAgIGNvbnN0IHRhcmdldE5vZGUgPSBub2Rlcy5maW5kKChwKSA9PiBwLmlkID09PSB0YXJnZXQpO1xuICAgIGlmICghdGFyZ2V0Tm9kZSB8fCB0YXJnZXROb2RlLmlkLnRvTG93ZXJDYXNlKCkgPT09ICdyb290Jykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgfVxuICAgIHRhcmdldE5vZGUucGFyZW50SWQgPSBzb3VyY2U7XG4gIH0pO1xuXG4gIHJldHVybiBub2Rlcztcbn07XG5cbmV4cG9ydCBjb25zdCBwcmVwcm9jZXNzRGF0YSA9IChkYXRhOiBJVXNlckRhdGEpOiBJTGV2ZWxlZE5vZGVbXSA9PiB7XG4gIGNvbnN0IG5vZGVJc1RvcGljID0gKGQ6IFRSYXdEYXRhKTogZCBpcyBURGF0YVJhd0RhdGFOb2RlID0+IHtcbiAgICByZXR1cm4gIWQuaXNfd29yZDtcbiAgfTtcbiAgY29uc3Qgbm9kZUlzV29yZCA9IChkOiBUUmF3RGF0YSk6IGQgaXMgVERhdGFSYXdXb3JkID0+IHtcbiAgICByZXR1cm4gZC5pc193b3JkO1xuICB9O1xuICBjb25zdCB0b3BpY05vZGVzID0gZGF0YS5ub2Rlcy5maWx0ZXIobm9kZUlzVG9waWMpO1xuICBjb25zdCBzY2FmZm9sZE5vZGVzID0gdG9waWNOb2Rlcy5tYXAoY3JlYXRlTm9kZSk7XG4gIGNvbnN0IHdvcmROb2RlcyA9IGRhdGEubm9kZXMuZmlsdGVyKG5vZGVJc1dvcmQpO1xuXG4gIGNvbnN0IGlkVG9Ob2RlVHlwZSA9IG5ldyBNYXA8c3RyaW5nLCBib29sZWFuPihcbiAgICAgIGRhdGEubm9kZXMubWFwKGQgPT4gW2QuaWQsICFkLmlzX3dvcmRdKVxuICApO1xuXG4gIGNvbnN0IHdvcmRJZFRvTmFtZSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KFxuICAgICAgd29yZE5vZGVzLm1hcCgoZCkgPT4gW2QuaWQsIGQubmFtZV0pXG4gICk7XG5cblxuXG4gIGNvbnN0IGxpbmtJc1RvcGljYWwgPSAoZDogVExpbmsgfCBUV2VpZ2h0ZWRMaW5rKTogZCBpcyBUTGluayA9PiB7XG4gICAgY29uc3Qgc291cmNlSXNUb3BpYyA9IEJvb2xlYW4oaWRUb05vZGVUeXBlLmdldChkLnNvdXJjZSkpO1xuICAgIGNvbnN0IHRhcmdldElzVG9waWMgPSBCb29sZWFuKGlkVG9Ob2RlVHlwZS5nZXQoZC50YXJnZXQpKTtcbiAgICByZXR1cm4gc291cmNlSXNUb3BpYyAmJiB0YXJnZXRJc1RvcGljO1xuICB9O1xuXG4gIGNvbnN0IGxpbmtJc1RvcGljYWxXb3JkID0gKGQ6IFRMaW5rIHwgVFdlaWdodGVkTGluayk6IGQgaXMgVFdlaWdodGVkTGluayA9PiB7XG5cbiAgICBpZiAoISgnd2VpZ2h0JyBpbiBkKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBzb3VyY2VJc1RvcGljID0gQm9vbGVhbihpZFRvTm9kZVR5cGUuZ2V0KGQuc291cmNlKSk7XG4gICAgY29uc3QgdGFyZ2V0SXNUb3BpYyA9IEJvb2xlYW4oaWRUb05vZGVUeXBlLmdldChkLnRhcmdldCkpO1xuICAgIHJldHVybiBzb3VyY2VJc1RvcGljICYmICF0YXJnZXRJc1RvcGljO1xuICB9O1xuXG4gIGNvbnN0IHRvcGljTGlua3MgPSBkYXRhLmxpbmtzLmZpbHRlcihsaW5rSXNUb3BpY2FsKTtcbiAgY29uc3Qgbm9kZVdvcmRMaW5rcyA9IGRhdGEubGlua3MuZmlsdGVyKGxpbmtJc1RvcGljYWxXb3JkKTtcblxuICBjb25zdCBoVG9waWNOb2RlcyA9IGxldmVsTGlua05vZGVzKHtcbiAgICBub2Rlczogc2NhZmZvbGROb2RlcyxcbiAgICBsaW5rczogdG9waWNMaW5rcyxcbiAgfSk7XG5cbiAgY29uc3Qgbm9kZVdvcmRzTWFwID0gbmV3IE1hcDxzdHJpbmcsIFROb2RlV29yZFtdPihcbiAgICAgIG5vZGVXb3JkTGlua3MubWFwKChkKSA9PiBbZC5zb3VyY2UsIFtdXSlcbiAgKTtcblxuICBub2RlV29yZExpbmtzLmZvckVhY2goKGQpID0+IHtcbiAgICBsZXQgbm9kZVdvcmRzID0gbm9kZVdvcmRzTWFwLmdldChkLnNvdXJjZSk7XG4gICAgbm9kZVdvcmRzID0gbm9kZVdvcmRzID8gbm9kZVdvcmRzIDogW107XG4gICAgY29uc3Qgd29yZE5hbWUgPSB3b3JkSWRUb05hbWUuZ2V0KGQudGFyZ2V0KTtcbiAgICBpZiAoIXdvcmROYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICB9XG4gICAgbm9kZVdvcmRzLnB1c2goeyBpbmRleDogbm9kZVdvcmRzLmxlbmd0aCArIDEsIG5hbWU6IHdvcmROYW1lLCB3ZWlnaHQ6IGQud2VpZ2h0LCB4OiAwLCB5OiAwLCB2eDogMCwgdnk6IDAgfSk7XG4gICAgbm9kZVdvcmRzTWFwLnNldChkLnNvdXJjZSwgbm9kZVdvcmRzKTtcbiAgfSk7XG5cbiAgLy8gQXNzaWduICh3b3JkLCB3ZWlnaHQpIHRvIG5vZGVzXG4gIGhUb3BpY05vZGVzLmZvckVhY2goKGUpID0+IHtcbiAgICBlLndvcmRzID0gbm9kZVdvcmRzTWFwLmdldChlLmlkKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGhUb3BpY05vZGVzO1xufTtcbiIsIlxyXG5leHBvcnQgdHlwZSBUQ2xvdWRPcHRpb25zID0ge1xyXG4gICAgZm9udFNpemU6IFtudW1iZXIsIG51bWJlcl1cclxuICAgIGZvbnRTdHlsZTogc3RyaW5nXHJcbiAgICByb3RhdGVBbmdsZXM6IFtudW1iZXIsIG51bWJlcl1cclxuICAgIHJvdGF0ZVdlaWdodHM6IFtudW1iZXIsIG51bWJlcl1cclxuICAgIG9wYWNpdHk6IFswLjIsIDAuOF1cclxuICAgIGxheW91dFNpemU6IFtudW1iZXIsIG51bWJlcl1cclxuICAgIHBhZGRpbmc6IG51bWJlclxyXG59XHJcblxyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSURuZENvbmZpZyB7XHJcbiAgICBhbmltYXRpb25EdXJhdGlvbjogbnVtYmVyO1xyXG4gICAgaW5pdGlhbERlcHRoOiBudW1iZXI7XHJcbiAgICBzaXplOiB7XHJcbiAgICAgICAgaGVpZ2h0OiBudW1iZXI7XHJcbiAgICAgICAgd2lkdGg6IG51bWJlcjtcclxuICAgIH1cclxuICAgIG1hcmdpbjoge1xyXG4gICAgICAgIHRvcDogbnVtYmVyO1xyXG4gICAgICAgIHJpZ2h0OiBudW1iZXI7XHJcbiAgICAgICAgYm90dG9tOiBudW1iZXI7XHJcbiAgICAgICAgbGVmdDogbnVtYmVyO1xyXG4gICAgfVxyXG4gICAgZFNjYWxlOiB7XHJcbiAgICAgICAgZHg6IG51bWJlcjtcclxuICAgICAgICBkeTogbnVtYmVyO1xyXG4gICAgfVxyXG4gICAgY2xvdWRPcHRpb25zOiBUQ2xvdWRPcHRpb25zXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBEZWZhdWx0RG5kQ29uZmlnOiBJRG5kQ29uZmlnID0ge1xyXG4gICAgYW5pbWF0aW9uRHVyYXRpb246IDc1MCxcclxuICAgIGluaXRpYWxEZXB0aDogMjAsXHJcbiAgICBzaXplOiB7XHJcbiAgICAgICAgaGVpZ2h0OiB3aW5kb3cuaW5uZXJIZWlnaHQsXHJcbiAgICAgICAgd2lkdGg6IHdpbmRvdy5pbm5lcldpZHRoLFxyXG4gICAgfSxcclxuICAgIG1hcmdpbjoge1xyXG4gICAgICAgIHRvcDogMzAsXHJcbiAgICAgICAgcmlnaHQ6IDEyMCxcclxuICAgICAgICBib3R0b206IDMwLFxyXG4gICAgICAgIGxlZnQ6IDYwXHJcbiAgICB9LFxyXG4gICAgZFNjYWxlOiB7XHJcbiAgICAgICAgZHg6IDIwLFxyXG4gICAgICAgIGR5OiB3aW5kb3cuaW5uZXJXaWR0aCAvIDZcclxuICAgIH0sXHJcbiAgICBjbG91ZE9wdGlvbnM6IHtcclxuICAgIGZvbnRTaXplOiBbOCwgMTVdLFxyXG4gICAgZm9udFN0eWxlOiAnSW1wYWN0JyxcclxuICAgIHJvdGF0ZUFuZ2xlczogWzAsIDkwXSxcclxuICAgIHJvdGF0ZVdlaWdodHM6IFswLjgsIDAuMl0sXHJcbiAgICBvcGFjaXR5OiBbMC4yLCAwLjhdLFxyXG4gICAgbGF5b3V0U2l6ZTogWzEwMCwgMTAwXSxcclxuICAgIHBhZGRpbmc6IDEsXHJcbiAgfVxyXG59XHJcbiIsIlxuICAgICAgaW1wb3J0IEFQSSBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgaW1wb3J0IGRvbUFQSSBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0Rm4gZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzXCI7XG4gICAgICBpbXBvcnQgc2V0QXR0cmlidXRlcyBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydFN0eWxlRWxlbWVudCBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qc1wiO1xuICAgICAgaW1wb3J0IHN0eWxlVGFnVHJhbnNmb3JtRm4gZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qc1wiO1xuICAgICAgaW1wb3J0IGNvbnRlbnQsICogYXMgbmFtZWRFeHBvcnQgZnJvbSBcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P3J1bGVTZXRbMV0ucnVsZXNbMl0udXNlWzFdIS4vaW5kZXguY3NzXCI7XG4gICAgICBcbiAgICAgIFxuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLnN0eWxlVGFnVHJhbnNmb3JtID0gc3R5bGVUYWdUcmFuc2Zvcm1Gbjtcbm9wdGlvbnMuc2V0QXR0cmlidXRlcyA9IHNldEF0dHJpYnV0ZXM7XG5cbiAgICAgIG9wdGlvbnMuaW5zZXJ0ID0gaW5zZXJ0Rm4uYmluZChudWxsLCBcImhlYWRcIik7XG4gICAgXG5vcHRpb25zLmRvbUFQSSA9IGRvbUFQSTtcbm9wdGlvbnMuaW5zZXJ0U3R5bGVFbGVtZW50ID0gaW5zZXJ0U3R5bGVFbGVtZW50O1xuXG52YXIgdXBkYXRlID0gQVBJKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0ICogZnJvbSBcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P3J1bGVTZXRbMV0ucnVsZXNbMl0udXNlWzFdIS4vaW5kZXguY3NzXCI7XG4gICAgICAgZXhwb3J0IGRlZmF1bHQgY29udGVudCAmJiBjb250ZW50LmxvY2FscyA/IGNvbnRlbnQubG9jYWxzIDogdW5kZWZpbmVkO1xuIiwiaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xyXG5pbXBvcnQge0hpZXJhcmNoeU5vZGUsIEhpZXJhcmNoeVBvaW50Tm9kZX0gZnJvbSAnZDMnO1xyXG5pbXBvcnQge0RlZmF1bHREbmRDb25maWd9IGZyb20gJy4vRG5kQ29uZmlnJztcclxuaW1wb3J0IHtJTGV2ZWxlZE5vZGV9IGZyb20gJy4vcHJlcHJvY2Vzcyc7XHJcbmltcG9ydCAnLi9pbmRleC5jc3MnXHJcblxyXG5jb25zdCBDb25maWcgPSBEZWZhdWx0RG5kQ29uZmlnO1xyXG5cclxuaW50ZXJmYWNlIElTaGltTm9kZSBleHRlbmRzIElMZXZlbGVkTm9kZSB7XHJcbiAgX2NoaWxkcmVuPzogYW55XHJcbiAgeDA6IG51bWJlcjtcclxuICB5MDogbnVtYmVyO1xyXG59XHJcblxyXG5jb25zdCBzaGltTm9kZSA9IChub2RlOiBJTGV2ZWxlZE5vZGUpOiBJU2hpbU5vZGUgPT4ge1xyXG4gIHJldHVybiB7XHJcbiAgICAuLi5ub2RlLFxyXG4gICAgX2NoaWxkcmVuOiB1bmRlZmluZWQsXHJcbiAgICB4MDogMCxcclxuICAgIHkwOiAwXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWFrZVRyZWUobjogSUxldmVsZWROb2RlW10pIHtcclxuICBjb25zdCBub2RlU2hpbXMgPSBuLm1hcChzaGltTm9kZSlcclxuICAvLyBAdHMtZXhwZWN0LWVycm9yXHJcbiAgY29uc3Qgcm9vdE5vZGU6IElTaGltTm9kZSAmIEhpZXJhcmNoeU5vZGU8SVNoaW1Ob2RlPiA9IGQzLnN0cmF0aWZ5PElTaGltTm9kZSAmIEhpZXJhcmNoeU5vZGU8SVNoaW1Ob2RlPj4oKShub2RlU2hpbXMpXHJcblxyXG4gIGNvbnN0IHRyZWVTaXplOiBbbnVtYmVyLCBudW1iZXJdID0gW1xyXG4gICAgQ29uZmlnLnNpemUuaGVpZ2h0IC0gQ29uZmlnLm1hcmdpbi50b3AgLSBDb25maWcubWFyZ2luLmJvdHRvbSxcclxuICAgIENvbmZpZy5zaXplLndpZHRoIC0gQ29uZmlnLm1hcmdpbi5sZWZ0IC0gQ29uZmlnLm1hcmdpbi5yaWdodCxcclxuICBdO1xyXG5cclxuICBjb25zdCB0cmVlID0gZDMudHJlZTxJU2hpbU5vZGUgJiBIaWVyYXJjaHlOb2RlPElTaGltTm9kZT4+KCkuc2l6ZSh0cmVlU2l6ZSkuc2VwYXJhdGlvbigoZCkgPT4gZC5kZXB0aCoxLjIpO1xyXG4gIHJvb3ROb2RlLngwID0gQ29uZmlnLmRTY2FsZS5keSAvIDI7XHJcbiAgcm9vdE5vZGUueTAgPSAwO1xyXG4gIGNvbnN0IG1heERlcHRoID0gcm9vdE5vZGUuZGVzY2VuZGFudHMoKS5tYXAoZCA9PiBkLmRlcHRoKS5yZWR1Y2UoKGEsIGIpID0+IE1hdGgubWF4KGEsIGIpKVxyXG4gIC8vIEluaXRpYWwgc2V0dXAgZm9yIGNvbGxhcHNpbmdcclxuICByb290Tm9kZS5kZXNjZW5kYW50cygpLmZvckVhY2goKGQpID0+IHtcclxuXHJcbiAgICBpZiAoZC5kZXB0aCAmJiBkLmRlcHRoID4gQ29uZmlnLmluaXRpYWxEZXB0aCkge1xyXG4gICAgICBpZiAoZC5jaGlsZHJlbikge1xyXG4gICAgICAgIGQuX2NoaWxkcmVuID0gZC5jaGlsZHJlbjtcclxuICAgICAgICBkLmNoaWxkcmVuID0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IHZpZXdCb3ggPSBbLUNvbmZpZy5tYXJnaW4ubGVmdCwgLUNvbmZpZy5tYXJnaW4udG9wLCBDb25maWcuc2l6ZS53aWR0aCwgQ29uZmlnLnNpemUuaGVpZ2h0XTtcclxuICAvLyBAdHMtZXhwZWN0LWVycm9yXHJcbiAgY29uc3Qgcm9vdDogSGllcmFyY2h5UG9pbnROb2RlPElTaGltTm9kZT4gPSB0cmVlKHJvb3ROb2RlKVxyXG5cclxuICBjb25zdCBub2RlU3ltYm9sQ2lyY2xlID0gZDMuc3ltYm9sc1swXTtcclxuICBjb25zdCBub2RlU3ltYm9sUGx1cyA9IGQzLnN5bWJvbHNbMV07XHJcblxyXG4gIGNvbnN0IHN2ZyA9IGQzXHJcbiAgICAuY3JlYXRlKCdzdmcnKS5hdHRyKCd2aWV3Qm94Jywgdmlld0JveCkuYXR0cignY3Vyc29yJywgJ2dyYWInKVxyXG5cclxuXHJcbiAgY29uc3Qgc3ZnR3JvdXAgPSBzdmcuYXBwZW5kKCdnJylcclxuXHJcbiAgY29uc3Qgem9vbUxpc3RlbmVyID0gZDMuem9vbTxTVkdTVkdFbGVtZW50LCB1bmRlZmluZWQ+KClcclxuICAgICAgLnNjYWxlRXh0ZW50KFswLjEsIDUwXSkub24oJ3pvb20nLCBldmVudCA9PiBzdmdHcm91cC5hdHRyKCd0cmFuc2Zvcm0nLCBldmVudC50cmFuc2Zvcm0pKVxyXG5cclxuICBzdmcuY2FsbCh6b29tTGlzdGVuZXIpXHJcblxyXG4gIC8vIEFsbCBsaW5rc1xyXG4gIGNvbnN0IGdMaW5rID0gc3ZnR3JvdXBcclxuICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgLmF0dHIoJ2ZpbGwnLCAnbm9uZScpXHJcbiAgICAuYXR0cignc3Ryb2tlJywgJyM1NTU1NTUnKVxyXG4gICAgLmF0dHIoJ3N0cm9rZS1vcGFjaXR5JywgMC40KVxyXG4gICAgLmF0dHIoJ3N0cm9rZS13aWR0aCcsIDEuNSk7XHJcblxyXG4gIGNvbnN0IGdOb2RlID0gc3ZnR3JvdXBcclxuICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgLmF0dHIoJ2N1cnNvcicsICdwb2ludGVyJylcclxuICAgIC5hdHRyKCdwb2ludGVyLWV2ZW50cycsICdhbGwnKTtcclxuXHJcblxyXG5cclxuICBjb25zdCBjb2xvclNjYWxlID0gZDNcclxuICAgIC5zY2FsZVNlcXVlbnRpYWwoZDMuaW50ZXJwb2xhdGVSYWluYm93KVxyXG4gICAgLmRvbWFpbihbMCwgbWF4RGVwdGhdKVxyXG5cclxuICBjb25zdCBzaXplU2NhbGVUb3BpY3MgPSBkMy5zY2FsZUxpbmVhcigpXHJcbiAgICAgIC5yYW5nZShbMywgMV0pXHJcbiAgICAgIC5kb21haW4oWzAsIG1heERlcHRoXSk7XHJcblxyXG4gIGNvbnN0IGZvbnRTaXplU2NhbGUgPSBkMy5zY2FsZUxpbmVhcigpXHJcbiAgICAgIC5yYW5nZShbOCwgMTRdKVxyXG4gICAgICAuZG9tYWluKFswLCAxXSlcclxuXHJcblxyXG4gIGNvbnN0IG9wYWNpdHlTY2FsZXIgPSBkMy5zY2FsZVF1YW50aXplKClcclxuICAgICAgLmRvbWFpbihbMCwgMV0pXHJcbiAgICAgIC5yYW5nZShbMC4yNSwgMV0pXHJcblxyXG5cclxuICBjb25zdCBkaWFnb25hbCA9IGQzXHJcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcclxuICAgIC5saW5rSG9yaXpvbnRhbCgpLngoKGQpID0+IGQueSkueSgoZCkgPT4gZC54KTtcclxuXHJcbiAgZnVuY3Rpb24gdXBkYXRlKHNvdXJjZTogdHlwZW9mIHJvb3QpIHtcclxuICAgIGNvbnN0IG5vZGVzID0gcm9vdC5kZXNjZW5kYW50cygpLnJldmVyc2UoKTtcclxuICAgIGNvbnN0IGxpbmtzID0gcm9vdC5saW5rcygpO1xyXG5cclxuICAgIC8vIFJlcnVuIHRyZWUgbGF5b3V0XHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXHJcbiAgICB0cmVlKHJvb3QpO1xyXG4gICAgbGV0IG5vZGVQYXJlbnQgPSBnTm9kZVxyXG4gICAgICAuc2VsZWN0QWxsKCdnLm5vZGVQYXJlbnQnKVxyXG4gICAgICAgIC8vQHRzLWV4cGVjdC1lcnJvclxyXG4gICAgICAuZGF0YShub2RlcywgZCA9PiBkLmlkKTtcclxuXHJcblxyXG4gICAgbm9kZVBhcmVudFxyXG4gICAgICAuZXhpdCgpXHJcbiAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgLmVhc2UoZDMuZWFzZUN1YmljSW4pXHJcbiAgICAgIC5kdXJhdGlvbihDb25maWcuYW5pbWF0aW9uRHVyYXRpb24pXHJcbiAgICAgIC5yZW1vdmUoKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgKGQpID0+IGB0cmFuc2xhdGUoJHtzb3VyY2UueX0sJHtzb3VyY2UueH0pYClcclxuICAgICAgLmF0dHIoJ2ZpbGwtb3BhY2l0eScsIDApXHJcbiAgICAgIC5hdHRyKCdzdHJva2Utb3BhY2l0eScsIDApO1xyXG5cclxuICAgIG5vZGVQYXJlbnRcclxuICAgICAgLnNlbGVjdCgncGF0aCcpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdub2RlU2hhcGUnKVxyXG4gICAgICAuYXR0cihcclxuICAgICAgICAnZCcsXHJcbiAgICAgICAgZDNcclxuICAgICAgICAgIC5zeW1ib2woKVxyXG4gICAgICAgICAgLnR5cGUoKGQpID0+XHJcbiAgICAgICAgICAgICFkLmNoaWxkcmVuICYmIGQuX2NoaWxkcmVuID8gbm9kZVN5bWJvbFBsdXMgOiBub2RlU3ltYm9sQ2lyY2xlXHJcbiAgICAgICAgICApXHJcbiAgICAgIClcclxuICAgICAgLmF0dHIoJ2ZpbGwnLCAoZCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJnYiA9IGNvbG9yU2NhbGUoZC5kZXB0aCk7XHJcbiAgICAgICAgcmV0dXJuIGQzLmNvbG9yKHJnYikhLmZvcm1hdEhleCgpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICBjb25zdCBub2RlRW50ZXIgPSBub2RlUGFyZW50XHJcbiAgICAgIC5lbnRlcigpXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbm9kZVBhcmVudCcpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAoZCkgPT4gYHRyYW5zbGF0ZSgke3NvdXJjZS55MH0sJHtzb3VyY2UueDB9KWApXHJcbiAgICAgIC5hdHRyKCdmaWxsLW9wYWNpdHknLCAwKVxyXG4gICAgICAuYXR0cignc3Ryb2tlLW9wYWNpdHknLCAwKVxyXG4gICAgICAvLyAuYXR0cihcInRyYW5zZm9ybVwiLCBkID0+IGB0cmFuc2xhdGUoJHtzb3VyY2UueTB9LCAke3NvdXJjZS54MH0pYClcclxuICAgICAgLm9uKCdjbGljaycsIChldmVudCwgZCkgPT4ge1xyXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcclxuICAgICAgICBjb25zdCBzRDogSGllcmFyY2h5UG9pbnROb2RlPElTaGltTm9kZT4gJiBJU2hpbU5vZGUgPSBkO1xyXG4gICAgICAgIGlmIChzRC5jaGlsZHJlbikge1xyXG5cclxuICAgICAgICAgIHNELmRlc2NlbmRhbnRzKClcclxuICAgICAgICAgICAgLnJldmVyc2UoKVxyXG4gICAgICAgICAgICAuZm9yRWFjaCgocykgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChzLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgICBzLl9jaGlsZHJlbiA9IHMuY2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICBzLmNoaWxkcmVuID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzLmNoaWxkcmVuID0gcy5fY2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICBzLl9jaGlsZHJlbiA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzRC5jaGlsZHJlbiA9IHNELl9jaGlsZHJlbjtcclxuICAgICAgICAgIHNELl9jaGlsZHJlbiA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIGlmICghc0QuY2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBzRC5jaGlsZHJlbi5mb3JFYWNoKChjKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgYy5fY2hpbGRyZW4gPSBjLmNoaWxkcmVuO1xyXG4gICAgICAgICAgICAgIGMuY2hpbGRyZW4gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB1cGRhdGUoc0QpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICBub2RlRW50ZXJcclxuICAgICAgLmFwcGVuZCgncGF0aCcpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdub2RlU2hhcGUnKVxyXG4gICAgICAuYXR0cignZmlsbCcsIChkKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcmdiID0gY29sb3JTY2FsZShkLmRlcHRoKTtcclxuICAgICAgICByZXR1cm4gZDMuY29sb3IocmdiKSEuZm9ybWF0SGV4KCk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5hdHRyKFxyXG4gICAgICAgICdkJyxcclxuICAgICAgICBkM1xyXG4gICAgICAgICAgLnN5bWJvbCgpXHJcbiAgICAgICAgICAudHlwZSgoZCkgPT5cclxuICAgICAgICAgICAgIWQuY2hpbGRyZW4gJiYgZC5fY2hpbGRyZW4gPyBub2RlU3ltYm9sUGx1cyA6IG5vZGVTeW1ib2xDaXJjbGVcclxuICAgICAgICAgIClcclxuICAgICAgKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgKGQpID0+IGBzY2FsZSgke3NpemVTY2FsZVRvcGljcyhkLmRlcHRoKX0pYCk7XHJcblxyXG4gICAgbm9kZUVudGVyLmFwcGVuZCgnZycpLmF0dHIoJ2NsYXNzJywgJ3dvcmRDb250YWluZXInKTtcclxuXHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXHJcbiAgICBub2RlUGFyZW50ID0gbm9kZUVudGVyLm1lcmdlKG5vZGVQYXJlbnQpO1xyXG5cclxuICAgIG5vZGVQYXJlbnRcclxuICAgICAgLnRyYW5zaXRpb24oKVxyXG4gICAgICAuZWFzZShkMy5lYXNlQ3ViaWNJbilcclxuICAgICAgLmR1cmF0aW9uKENvbmZpZy5hbmltYXRpb25EdXJhdGlvbilcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIChkKSA9PiBgdHJhbnNsYXRlKCR7ZC55fSwke2QueH0pYClcclxuICAgICAgLmF0dHIoJ2ZpbGwtb3BhY2l0eScsIDEpXHJcbiAgICAgIC5hdHRyKCdzdHJva2Utb3BhY2l0eScsIDEpO1xyXG5cclxuXHJcbiAgICAvLyBXb3Jkc1xyXG4gICAgY29uc3Qgbm9kZVdvcmRzID0gbm9kZVBhcmVudC5zZWxlY3QoJy53b3JkQ29udGFpbmVyJylcclxuXHJcbiAgICBjb25zdCBxdWFkcmFudCA9IChpOiBudW1iZXIpOiBbbnVtYmVyLCBudW1iZXJdID0+IHtcclxuICAgICAgY29uc3QgcmVtYWluZGVyID0gaSAlIDQ7XHJcbiAgICAgIHN3aXRjaCAocmVtYWluZGVyKSB7XHJcbiAgICAgICAgY2FzZSAwOiB7XHJcbiAgICAgICAgICByZXR1cm4gWzEsIDFdXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhc2UgMToge1xyXG4gICAgICAgICAgcmV0dXJuIFsxLCAtMV1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSAyOiB7XHJcbiAgICAgICAgICByZXR1cm4gWy0xLCAtMV1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSAzOiB7XHJcbiAgICAgICAgICByZXR1cm4gWy0xLCAxXVxyXG4gICAgICAgIH1cclxuICAgICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvZ2ljIEVycm9yJylcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc3BpcmFsV29yZHMgPSAoaTogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGNvbnN0IFtzaWduWCwgc2lnblldID0gcXVhZHJhbnQoaSk7XHJcbiAgICAgIGNvbnN0IG1hZ25pdHVkZSA9IE1hdGguZmxvb3IoaSAvIDQpO1xyXG4gICAgICBjb25zdCB4ID0gKDUwICsgKDIgKiBtYWduaXR1ZGUpKSAgKiBzaWduWDtcclxuICAgICAgY29uc3QgeSA9ICgyMCArICgxMCAqIG1hZ25pdHVkZSkpICogc2lnblk7XHJcbiAgICAgIHJldHVybiBgdHJhbnNsYXRlKCR7eH0sJHt5fSlgXHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICBjb25zdCBub2RlV29yZHNDaGlsZHJlbiA9IG5vZGVXb3Jkcy5zZWxlY3RBbGwoJ3RleHQnKVxyXG4gICAgICAgIC5kYXRhKGQgPT4gZC5kYXRhLndvcmRzID8gZC5kYXRhLndvcmRzIDogW10pXHJcblxyXG4gICAgbm9kZVdvcmRzQ2hpbGRyZW4uZW50ZXIoKVxyXG4gICAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAgIC5zdHlsZSgnZm9udC1zaXplJywgZCA9PiBgJHtmb250U2l6ZVNjYWxlKGQud2VpZ2h0KX1weGApXHJcbiAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIChkLCBpLCBlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gc3BpcmFsV29yZHMoaSlcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5zdHlsZSgnb3BhY2l0eScsIGQgPT4gb3BhY2l0eVNjYWxlcihkLndlaWdodCkpXHJcbiAgICAgICAgLnRleHQoZCA9PiBkLm5hbWUpXHJcbiAgICAgICAgLmF0dHIoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpXHJcblxyXG5cclxuICAgIGNvbnN0IGxpbmsgPSBnTGluay5zZWxlY3RBbGwoJ3BhdGgnKS5kYXRhKFxyXG4gICAgICBsaW5rcyxcclxuICAgICAgKGQpID0+XHJcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxyXG4gICAgICAgIGQudGFyZ2V0LmRhdGEuaWRcclxuICAgICk7XHJcblxyXG4gICAgLy8gRW50ZXIgYW55IG5ldyBsaW5rcyBhdCB0aGUgcGFyZW50J3MgcHJldmlvdXMgcG9zaXRpb24uXHJcbiAgICBjb25zdCBsaW5rRW50ZXIgPSBsaW5rXHJcbiAgICAgIC5lbnRlcigpXHJcbiAgICAgIC5hcHBlbmQoJ3BhdGgnKVxyXG4gICAgICAuYXR0cignZCcsIChkKSA9PiB7XHJcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxyXG4gICAgICAgIGNvbnN0IG8gPSB7eDogc291cmNlLngwLCB5OiBzb3VyY2UueTB9O1xyXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcclxuICAgICAgICByZXR1cm4gZGlhZ29uYWwoe3NvdXJjZTogbywgdGFyZ2V0OiBvLH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAvLyBUcmFuc2l0aW9uIGxpbmtzIHRvIHRoZWlyIG5ldyBwb3NpdGlvbi5cclxuICAgIGxpbmtcclxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxyXG4gICAgICAubWVyZ2UobGlua0VudGVyKVxyXG4gICAgICAudHJhbnNpdGlvbigpXHJcbiAgICAgIC5lYXNlKGQzLmVhc2VDdWJpY0luKVxyXG4gICAgICAuZHVyYXRpb24oQ29uZmlnLmFuaW1hdGlvbkR1cmF0aW9uKVxyXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXHJcbiAgICAgIC5hdHRyKCdkJywgZGlhZ29uYWwpO1xyXG5cclxuICAgIC8vIFRyYW5zaXRpb24gZXhpdGluZyBub2RlcyB0byB0aGUgcGFyZW50J3MgbmV3IHBvc2l0aW9uLlxyXG4gICAgbGlua1xyXG4gICAgICAuZXhpdCgpXHJcbiAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgLmVhc2UoZDMuZWFzZUN1YmljSW4pXHJcbiAgICAgIC5kdXJhdGlvbihDb25maWcuYW5pbWF0aW9uRHVyYXRpb24pXHJcbiAgICAgIC5yZW1vdmUoKVxyXG4gICAgICAuYXR0cignZCcsIChkKSA9PiB7XHJcbiAgICAgICAgY29uc3QgbyA9IHtcclxuICAgICAgICAgIHg6IHNvdXJjZS54LFxyXG4gICAgICAgICAgeTogc291cmNlLnksXHJcbiAgICAgICAgfTtcclxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXHJcbiAgICAgICAgcmV0dXJuIGRpYWdvbmFsKHsgc291cmNlOiBvLCB0YXJnZXQ6IG8gfSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHJvb3QuZWFjaEJlZm9yZSgoZCkgPT4ge1xyXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXHJcbiAgICAgIGQueDAgPSBkLng7XHJcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcclxuICAgICAgZC55MCA9IGQueTtcclxuICAgIH0pO1xyXG4gIH1cclxuICB1cGRhdGUocm9vdCk7XHJcblxyXG4gIHJldHVybiBzdmcubm9kZSgpO1xyXG59XHJcbiIsImltcG9ydCAqIGFzIGQzIGZyb20gJ2QzJztcclxuaW1wb3J0IHttYWtlRHJvcGJveH0gZnJvbSAnLi4vRmlsZVVwbG9hZC9GaWxlVXBsb2FkJztcclxuaW1wb3J0IHtJVXNlckRhdGF9IGZyb20gJy4vQ29tbW9uVHlwZXMnO1xyXG5pbXBvcnQge3ByZXByb2Nlc3NEYXRhfSBmcm9tICcuL3ByZXByb2Nlc3MnO1xyXG5pbXBvcnQge21ha2VUcmVlfSBmcm9tICcuL2RuZFRyZWUnO1xyXG5cclxuY29uc3QgZmlsZVVwbG9hZGVkID0gYXN5bmMgKGY6IEZpbGVMaXN0KSA9PiB7XHJcbiAgICAgICAgY29uc3QgdXBsb2FkRmlsZSA9IGZbMF07XHJcbiAgICAgICAgY29uc3QgdXBsb2FkRmlsZVVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKHVwbG9hZEZpbGUpO1xyXG4gICAgICAgIGNvbnN0IHJhd0RhdGEgPSBhd2FpdCBkMy5qc29uPElVc2VyRGF0YT4odXBsb2FkRmlsZVVybCk7XHJcbiAgICAgICAgaWYgKCFyYXdEYXRhKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gRGF0YScpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGRhdGEgPSBwcmVwcm9jZXNzRGF0YShyYXdEYXRhKTtcclxuICAgICAgICBjb25zdCBjaGFydCA9IG1ha2VUcmVlKGRhdGEpO1xyXG4gICAgICAgIGlmICghY2hhcnQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciBtYWtpbmcgY2hhcnQnKVxyXG4gICAgICAgIH1cclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNoYXJ0KVxyXG59XHJcblxyXG5jb25zdCBzZXR1cERyb3Bib3ggPSAoKSA9PiB7XHJcbiAgICBjb25zb2xlLmxvZygnQ3JlYXRpbmcgRHJvcGJveCcpO1xyXG4gICAgbWFrZURyb3Bib3goZmlsZVVwbG9hZGVkLCAnRHJhZyBhbmQgRHJvcCBhIC5qc29uIEZpbGUgdG8gQ3JlYXRlIERuZFRyZWUnKTtcclxufVxyXG5cclxuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIHNldHVwRHJvcGJveClcclxuIl0sIm5hbWVzIjpbIm5vbmUiLCJzZWxlY3RvciIsInF1ZXJ5U2VsZWN0b3IiLCJTZWxlY3Rpb24iLCJzZWxlY3QiLCJncm91cHMiLCJfZ3JvdXBzIiwibSIsImxlbmd0aCIsInN1Ymdyb3VwcyIsIkFycmF5IiwiaiIsImdyb3VwIiwibiIsInN1Ymdyb3VwIiwibm9kZSIsInN1Ym5vZGUiLCJpIiwiY2FsbCIsIl9fZGF0YV9fIiwiX3BhcmVudHMiLCJhcnJheSIsIngiLCJpc0FycmF5IiwiZnJvbSIsImVtcHR5IiwicXVlcnlTZWxlY3RvckFsbCIsInNlbGVjdG9yQWxsIiwiYXJyYXlBbGwiLCJhcHBseSIsImFyZ3VtZW50cyIsInBhcmVudHMiLCJwdXNoIiwibWF0Y2hlcyIsImNoaWxkTWF0Y2hlciIsImZpbmQiLCJwcm90b3R5cGUiLCJjaGlsZEZpbmQiLCJtYXRjaCIsImNoaWxkcmVuIiwiY2hpbGRGaXJzdCIsImZpcnN0RWxlbWVudENoaWxkIiwiZmlsdGVyIiwiY2hpbGRyZW5GaWx0ZXIiLCJzZWxlY3RBbGwiLCJtYXRjaGVyIiwidXBkYXRlIiwic3BhcnNlIiwiX2VudGVyIiwibWFwIiwiRW50ZXJOb2RlIiwicGFyZW50IiwiZGF0dW0iLCJvd25lckRvY3VtZW50IiwibmFtZXNwYWNlVVJJIiwiX25leHQiLCJfcGFyZW50IiwiY29uc3RydWN0b3IiLCJhcHBlbmRDaGlsZCIsImNoaWxkIiwiaW5zZXJ0QmVmb3JlIiwibmV4dCIsImNvbnN0YW50IiwiYmluZEluZGV4IiwiZW50ZXIiLCJleGl0IiwiZGF0YSIsImdyb3VwTGVuZ3RoIiwiZGF0YUxlbmd0aCIsImJpbmRLZXkiLCJrZXkiLCJub2RlQnlLZXlWYWx1ZSIsIk1hcCIsImtleVZhbHVlcyIsImtleVZhbHVlIiwiaGFzIiwic2V0IiwiZ2V0IiwiZGVsZXRlIiwidmFsdWUiLCJiaW5kIiwiYXJyYXlsaWtlIiwiZW50ZXJHcm91cCIsInVwZGF0ZUdyb3VwIiwiZXhpdEdyb3VwIiwiaTAiLCJpMSIsInByZXZpb3VzIiwiX2V4aXQiLCJvbmVudGVyIiwib251cGRhdGUiLCJvbmV4aXQiLCJzZWxlY3Rpb24iLCJhcHBlbmQiLCJyZW1vdmUiLCJtZXJnZSIsIm9yZGVyIiwiY29udGV4dCIsImdyb3VwczAiLCJncm91cHMxIiwibTAiLCJtMSIsIk1hdGgiLCJtaW4iLCJtZXJnZXMiLCJncm91cDAiLCJncm91cDEiLCJjb21wYXJlRG9jdW1lbnRQb3NpdGlvbiIsInBhcmVudE5vZGUiLCJjb21wYXJlIiwiYXNjZW5kaW5nIiwiY29tcGFyZU5vZGUiLCJhIiwiYiIsInNvcnRncm91cHMiLCJzb3J0Z3JvdXAiLCJzb3J0IiwiTmFOIiwiY2FsbGJhY2siLCJzaXplIiwieGh0bWwiLCJzdmciLCJ4bGluayIsInhtbCIsInhtbG5zIiwibmFtZXNwYWNlcyIsIm5hbWUiLCJwcmVmaXgiLCJpbmRleE9mIiwic2xpY2UiLCJoYXNPd25Qcm9wZXJ0eSIsInNwYWNlIiwibG9jYWwiLCJuYW1lc3BhY2UiLCJhdHRyUmVtb3ZlIiwicmVtb3ZlQXR0cmlidXRlIiwiYXR0clJlbW92ZU5TIiwiZnVsbG5hbWUiLCJyZW1vdmVBdHRyaWJ1dGVOUyIsImF0dHJDb25zdGFudCIsInNldEF0dHJpYnV0ZSIsImF0dHJDb25zdGFudE5TIiwic2V0QXR0cmlidXRlTlMiLCJhdHRyRnVuY3Rpb24iLCJ2IiwiYXR0ckZ1bmN0aW9uTlMiLCJnZXRBdHRyaWJ1dGVOUyIsImdldEF0dHJpYnV0ZSIsImVhY2giLCJkZWZhdWx0VmlldyIsImRvY3VtZW50Iiwic3R5bGVSZW1vdmUiLCJzdHlsZSIsInJlbW92ZVByb3BlcnR5Iiwic3R5bGVDb25zdGFudCIsInByaW9yaXR5Iiwic2V0UHJvcGVydHkiLCJzdHlsZUZ1bmN0aW9uIiwic3R5bGVWYWx1ZSIsImdldFByb3BlcnR5VmFsdWUiLCJnZXRDb21wdXRlZFN0eWxlIiwicHJvcGVydHlSZW1vdmUiLCJwcm9wZXJ0eUNvbnN0YW50IiwicHJvcGVydHlGdW5jdGlvbiIsImNsYXNzQXJyYXkiLCJzdHJpbmciLCJ0cmltIiwic3BsaXQiLCJjbGFzc0xpc3QiLCJDbGFzc0xpc3QiLCJfbm9kZSIsIl9uYW1lcyIsImFkZCIsImpvaW4iLCJzcGxpY2UiLCJjb250YWlucyIsImNsYXNzZWRBZGQiLCJuYW1lcyIsImxpc3QiLCJjbGFzc2VkUmVtb3ZlIiwiY2xhc3NlZFRydWUiLCJjbGFzc2VkRmFsc2UiLCJjbGFzc2VkRnVuY3Rpb24iLCJ0ZXh0UmVtb3ZlIiwidGV4dENvbnRlbnQiLCJ0ZXh0Q29uc3RhbnQiLCJ0ZXh0RnVuY3Rpb24iLCJodG1sUmVtb3ZlIiwiaW5uZXJIVE1MIiwiaHRtbENvbnN0YW50IiwiaHRtbEZ1bmN0aW9uIiwicmFpc2UiLCJuZXh0U2libGluZyIsImxvd2VyIiwicHJldmlvdXNTaWJsaW5nIiwiZmlyc3RDaGlsZCIsImNyZWF0b3JJbmhlcml0IiwidXJpIiwiZG9jdW1lbnRFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsImNyZWF0ZUVsZW1lbnROUyIsImNyZWF0b3JGaXhlZCIsImNyZWF0b3IiLCJjcmVhdGUiLCJjb25zdGFudE51bGwiLCJiZWZvcmUiLCJyZW1vdmVDaGlsZCIsInNlbGVjdGlvbl9jbG9uZVNoYWxsb3ciLCJjbG9uZSIsImNsb25lTm9kZSIsInNlbGVjdGlvbl9jbG9uZURlZXAiLCJkZWVwIiwicHJvcGVydHkiLCJjb250ZXh0TGlzdGVuZXIiLCJsaXN0ZW5lciIsImV2ZW50IiwicGFyc2VUeXBlbmFtZXMiLCJ0eXBlbmFtZXMiLCJ0IiwidHlwZSIsIm9uUmVtb3ZlIiwidHlwZW5hbWUiLCJvbiIsIl9fb24iLCJvIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIm9wdGlvbnMiLCJvbkFkZCIsImFkZEV2ZW50TGlzdGVuZXIiLCJkaXNwYXRjaEV2ZW50IiwicGFyYW1zIiwid2luZG93IiwiQ3VzdG9tRXZlbnQiLCJjcmVhdGVFdmVudCIsImluaXRFdmVudCIsImJ1YmJsZXMiLCJjYW5jZWxhYmxlIiwiZGV0YWlsIiwiZGlzcGF0Y2hDb25zdGFudCIsImRpc3BhdGNoRnVuY3Rpb24iLCJzZWxlY3Rpb25fc2VsZWN0Iiwic2VsZWN0aW9uX3NlbGVjdEFsbCIsInNlbGVjdGlvbl9zZWxlY3RDaGlsZCIsInNlbGVjdGlvbl9zZWxlY3RDaGlsZHJlbiIsInNlbGVjdGlvbl9maWx0ZXIiLCJzZWxlY3Rpb25fZGF0YSIsInNlbGVjdGlvbl9lbnRlciIsInNlbGVjdGlvbl9leGl0Iiwic2VsZWN0aW9uX2pvaW4iLCJzZWxlY3Rpb25fbWVyZ2UiLCJzZWxlY3Rpb25fb3JkZXIiLCJzZWxlY3Rpb25fc29ydCIsInNlbGVjdGlvbl9jYWxsIiwic2VsZWN0aW9uX25vZGVzIiwic2VsZWN0aW9uX25vZGUiLCJzZWxlY3Rpb25fc2l6ZSIsInNlbGVjdGlvbl9lbXB0eSIsInNlbGVjdGlvbl9lYWNoIiwic2VsZWN0aW9uX2F0dHIiLCJzZWxlY3Rpb25fc3R5bGUiLCJzZWxlY3Rpb25fcHJvcGVydHkiLCJzZWxlY3Rpb25fY2xhc3NlZCIsInNlbGVjdGlvbl90ZXh0Iiwic2VsZWN0aW9uX2h0bWwiLCJzZWxlY3Rpb25fcmFpc2UiLCJzZWxlY3Rpb25fbG93ZXIiLCJzZWxlY3Rpb25fYXBwZW5kIiwic2VsZWN0aW9uX2luc2VydCIsInNlbGVjdGlvbl9yZW1vdmUiLCJzZWxlY3Rpb25fY2xvbmUiLCJzZWxlY3Rpb25fZGF0dW0iLCJzZWxlY3Rpb25fb24iLCJzZWxlY3Rpb25fZGlzcGF0Y2giLCJzZWxlY3Rpb25faXRlcmF0b3IiLCJyb290Iiwic2VsZWN0aW9uX3NlbGVjdGlvbiIsInNlbGVjdENoaWxkIiwic2VsZWN0Q2hpbGRyZW4iLCJub2RlcyIsImF0dHIiLCJjbGFzc2VkIiwidGV4dCIsImh0bWwiLCJpbnNlcnQiLCJkaXNwYXRjaCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwibm9vcCIsIl8iLCJ0ZXN0IiwiRXJyb3IiLCJEaXNwYXRjaCIsInR5cGVzIiwiVCIsImNvcHkiLCJ0aGF0IiwiYXJncyIsImMiLCJjb25jYXQiLCJmcmFtZSIsInRpbWVvdXQiLCJpbnRlcnZhbCIsInBva2VEZWxheSIsInRhc2tIZWFkIiwidGFza1RhaWwiLCJjbG9ja0xhc3QiLCJjbG9ja05vdyIsImNsb2NrU2tldyIsImNsb2NrIiwicGVyZm9ybWFuY2UiLCJub3ciLCJEYXRlIiwic2V0RnJhbWUiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJmIiwic2V0VGltZW91dCIsImNsZWFyTm93IiwiVGltZXIiLCJfY2FsbCIsIl90aW1lIiwidGltZXIiLCJyZXN0YXJ0IiwiZGVsYXkiLCJ0aW1lIiwiVHlwZUVycm9yIiwic2xlZXAiLCJzdG9wIiwiSW5maW5pdHkiLCJ0aW1lckZsdXNoIiwiZSIsInVuZGVmaW5lZCIsIndha2UiLCJuYXAiLCJwb2tlIiwidDAiLCJ0MSIsInQyIiwiY2xlYXJUaW1lb3V0IiwiY2xlYXJJbnRlcnZhbCIsInNldEludGVydmFsIiwiZWxhcHNlZCIsImVtcHR5T24iLCJlbXB0eVR3ZWVuIiwiQ1JFQVRFRCIsIlNDSEVEVUxFRCIsIlNUQVJUSU5HIiwiU1RBUlRFRCIsIlJVTk5JTkciLCJFTkRJTkciLCJFTkRFRCIsImlkIiwiaW5kZXgiLCJ0aW1pbmciLCJzY2hlZHVsZXMiLCJfX3RyYW5zaXRpb24iLCJ0d2VlbiIsImR1cmF0aW9uIiwiZWFzZSIsInN0YXRlIiwiaW5pdCIsInNjaGVkdWxlIiwic2VsZiIsInN0YXJ0IiwidGljayIsImFjdGl2ZSIsImludGVycnVwdCIsImRlZ3JlZXMiLCJQSSIsImlkZW50aXR5IiwidHJhbnNsYXRlWCIsInRyYW5zbGF0ZVkiLCJyb3RhdGUiLCJza2V3WCIsInNjYWxlWCIsInNjYWxlWSIsImQiLCJzcXJ0IiwiYXRhbjIiLCJhdGFuIiwiZGVjb21wb3NlIiwic3ZnTm9kZSIsInBhcnNlQ3NzIiwiRE9NTWF0cml4IiwiV2ViS2l0Q1NTTWF0cml4IiwiaXNJZGVudGl0eSIsInBhcnNlU3ZnIiwidHJhbnNmb3JtIiwiYmFzZVZhbCIsImNvbnNvbGlkYXRlIiwibWF0cml4IiwibnVtYmVyIiwiaW50ZXJwb2xhdGVUcmFuc2Zvcm0iLCJwYXJzZSIsInB4Q29tbWEiLCJweFBhcmVuIiwiZGVnUGFyZW4iLCJwb3AiLCJzIiwidHJhbnNsYXRlIiwieGEiLCJ5YSIsInhiIiwieWIiLCJxIiwic2NhbGUiLCJpbnRlcnBvbGF0ZVRyYW5zZm9ybUNzcyIsImludGVycG9sYXRlVHJhbnNmb3JtU3ZnIiwidHdlZW5SZW1vdmUiLCJ0d2VlbjAiLCJ0d2VlbjEiLCJ0d2VlbkZ1bmN0aW9uIiwiX2lkIiwidHdlZW5WYWx1ZSIsInRyYW5zaXRpb24iLCJmYWN0b3J5IiwiZXh0ZW5kIiwiZGVmaW5pdGlvbiIsIk9iamVjdCIsImRlZmluZSIsIkNvbG9yIiwiZGFya2VyIiwiYnJpZ2h0ZXIiLCJyZUkiLCJyZU4iLCJyZVAiLCJyZUhleCIsInJlUmdiSW50ZWdlciIsIlJlZ0V4cCIsInJlUmdiUGVyY2VudCIsInJlUmdiYUludGVnZXIiLCJyZVJnYmFQZXJjZW50IiwicmVIc2xQZXJjZW50IiwicmVIc2xhUGVyY2VudCIsIm5hbWVkIiw
View raw

(Sorry about that, but we can’t show files that are this big right now.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment