From 078da1de95c21064df0fc1df1df68e38f7180171 Mon Sep 17 00:00:00 2001 From: Younghoon Kim Date: Mon, 28 Sep 2020 12:24:26 -0700 Subject: [PATCH] update d3.nest(...).rollup(...) to d3.rollups (#2) --- gemini.js | 89 +++++----- gemini.web.js | 85 +++++---- gemini.web.js.map | 2 +- package.json | 2 +- src/actuator/staggering.js | 65 ++++--- src/util/vgDataHelper.js | 13 +- src/util/vl2vg4gemini.js | 12 +- yarn.lock | 348 ++++++++++++++++++++++--------------- 8 files changed, 357 insertions(+), 259 deletions(-) diff --git a/gemini.js b/gemini.js index 0b7da77..a531f11 100644 --- a/gemini.js +++ b/gemini.js @@ -1,6 +1,6 @@ import { SVGRenderer, sceneFromJSON, sceneToJSON, View, parse as parse$2, textMetrics, pathRectangle, pathSymbols, pathTrail, timeFormat, timeUnitSpecifier } from 'vega'; import * as d3 from 'd3'; -import { interpolate, nest, interpolateString, extent, select, path, line, area, easeLinear, ascending, descending, local, selectAll } from 'd3'; +import { interpolate, groups, interpolateString, extent, select, path, line, area, easeLinear, ascending, descending, local, selectAll, rollups } from 'd3'; import { compile as compile$2 } from 'vega-lite'; class Animation { @@ -11536,20 +11536,20 @@ function facetData(data, facetDef) { if (typeof groupby === "string") { groupby = [groupby]; } - return nest() - .key(d => groupby.map(f => d.datum[f]).join("@@_@@")) - .entries(data) + return groups(data, d => groupby.map(f => d.datum[f]).join("@@_@@")) .map(group => { + const values = group[1]; let datum = groupby.reduce((datum, f) => { - datum[f] = group.values[0].datum[f]; + datum[f] = values[0].datum[f]; return datum; - }, { count: group.values.length }); + }, { count: values.length }); return { datum: datum, mark: {role: "group", marktype: "group"}, - items: [{items: group.values }] + items: [{items: values }] }; }); + } function unpackData(data) { if (data[0].mark.marktype !== "group") { @@ -16155,32 +16155,43 @@ function staggeredTiming(staggering, data, duration) { return (acc = acc && (val !== undefined ? !isNaN(Number(val)) : true)); }, true); if (!staggering.by) { - grouped = nest() - .key(d => { - const val = d.__staggering_id__; - return val === undefined ? "__empty__" : val; - }) - .sortKeys(getOrderFn(true, staggering.order)) - .entries(dataWithTiming); + + + const orderFn = getOrderFn(true, staggering.order); + grouped = groups(dataWithTiming, d => { + const val = d.__staggering_id__; + return val === undefined ? "__empty__" : val; + }); + if (typeof(orderFn) === "function") { + grouped.sort((a,b) => orderFn(a,b)); + } } else if (typeof staggering.by === "string") { - grouped = nest() - .key(d => { - const val = (d.initial || d.final)[staggering.by]; - return val === undefined ? "__empty__" : val; - }) - .sortKeys(getOrderFn(isNumber, staggering.order)) - .entries(dataWithTiming); + + + grouped = groups(dataWithTiming, d => { + const val = (d.initial || d.final)[staggering.by]; + return val === undefined ? "__empty__" : val; + }); + + const orderFn = getOrderFn(isNumber, staggering.order); + if (typeof(orderFn) === "function") { + grouped.sort((a,b) => orderFn(a,b)); + } } else if (staggering.by.initial || staggering.by.final) { const which = staggering.by.initial ? "initial" : "final"; - grouped = nest() - .key(d => { - const val = (which === "initial" - ? d.initial || d.final - : d.final || d.initial)[staggering.by[which]]; - return val === undefined ? "__empty__" : val; - }) - .sortKeys(getOrderFn(isNumber, staggering.order)) - .entries(dataWithTiming); + + + grouped = groups(dataWithTiming, d => { + const val = (which === "initial" + ? d.initial || d.final + : d.final || d.initial)[staggering.by[which]]; + return val === undefined ? "__empty__" : val; + }); + + const orderFn = getOrderFn(isNumber, staggering.order); + if (typeof(orderFn) === "function") { + grouped.sort((a,b) => orderFn(a,b)); + } } N = grouped.length; @@ -16210,13 +16221,13 @@ function staggeredTiming(staggering, data, duration) { }); timings.groups = grouped.map((g, i) => { - return staggeredTiming(subStaggering, g.values, durations[i]); + return staggeredTiming(subStaggering, g[1], durations[i]); }); return getFlattenTimings(timings); } grouped.forEach((group, i) => { - group.values.forEach(datum => { + group[1].forEach(datum => { datum.delay = delays[i]; datum.duration = durations[i]; }); @@ -22976,9 +22987,8 @@ function mergeDuplicatedAxes(vegaAxes) { } let axesScales = vegaAxes.filter(a => a.grid).map(a => a.scale); - return nest() - .key(axis => axis.scale) - .rollup(axes => { + return rollups(vegaAxes, + axes => { let axisWithGrid = axes.find(a => a.grid); let axisWithoutGrid = { ...axes.find(a => !a.grid) }; @@ -22990,12 +23000,13 @@ function mergeDuplicatedAxes(vegaAxes) { axisWithoutGrid.zindex = 0; } return axisWithoutGrid; - }).entries(vegaAxes) - .map(d => d.value) - .sort((a,b) => (axesScales.indexOf(a.scale) - axesScales.indexOf(b.scale))); + }, + axis => axis.scale + ).map(d => d[1]) + .sort((a,b) => (axesScales.indexOf(a.scale) - axesScales.indexOf(b.scale))); } const { animate } = Gemini; export { animate, compareCost, index$1 as recommend, vl2vg4gemini }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VtaW5pLmpzIiwic291cmNlcyI6WyJzcmMvYW5pbWF0aW9uLmpzIiwic3JjL3V0aWwvdXRpbC5qcyIsInNyYy9wYXJzZXIvcmVzb2x2ZUNvbGxlY3Rvci5qcyIsInNyYy9zY2hlZHVsZS5qcyIsInNyYy9wYXJzZXIvY29uZmxpY3RDaGVja2VyLmpzIiwibm9kZV9tb2R1bGVzL3VyaS1qcy9zcmMvdXRpbC50cyIsIm5vZGVfbW9kdWxlcy91cmktanMvc3JjL3JlZ2V4cHMtdXJpLnRzIiwibm9kZV9tb2R1bGVzL3VyaS1qcy9zcmMvcmVnZXhwcy1pcmkudHMiLCJub2RlX21vZHVsZXMvdXJpLWpzL25vZGVfbW9kdWxlcy9wdW55Y29kZS9wdW55Y29kZS5lczYuanMiLCJub2RlX21vZHVsZXMvdXJpLWpzL3NyYy91cmkudHMiLCJub2RlX21vZHVsZXMvdXJpLWpzL3NyYy9zY2hlbWVzL2h0dHAudHMiLCJub2RlX21vZHVsZXMvdXJpLWpzL3NyYy9zY2hlbWVzL2h0dHBzLnRzIiwibm9kZV9tb2R1bGVzL3VyaS1qcy9zcmMvc2NoZW1lcy9tYWlsdG8udHMiLCJub2RlX21vZHVsZXMvdXJpLWpzL3NyYy9zY2hlbWVzL3Vybi50cyIsIm5vZGVfbW9kdWxlcy91cmktanMvc3JjL3NjaGVtZXMvdXJuLXV1aWQudHMiLCJub2RlX21vZHVsZXMvdXJpLWpzL3NyYy9pbmRleC50cyIsIm5vZGVfbW9kdWxlcy9mYXN0LWRlZXAtZXF1YWwvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9jb21waWxlL3VjczJsZW5ndGguanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9jb21waWxlL3V0aWwuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9jb21waWxlL3NjaGVtYV9vYmouanMiLCJub2RlX21vZHVsZXMvanNvbi1zY2hlbWEtdHJhdmVyc2UvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9jb21waWxlL3Jlc29sdmUuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9jb21waWxlL2Vycm9yX2NsYXNzZXMuanMiLCJub2RlX21vZHVsZXMvZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy92YWxpZGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbGliL2NvbXBpbGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9jYWNoZS5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbGliL2NvbXBpbGUvZm9ybWF0cy5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL3JlZi5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL2FsbE9mLmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvYW55T2YuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9jb21tZW50LmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvY29uc3QuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9jb250YWlucy5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL2RlcGVuZGVuY2llcy5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL2VudW0uanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9mb3JtYXQuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9pZi5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL2l0ZW1zLmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvX2xpbWl0LmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvX2xpbWl0SXRlbXMuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9fbGltaXRMZW5ndGguanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9fbGltaXRQcm9wZXJ0aWVzLmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvbXVsdGlwbGVPZi5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL25vdC5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL29uZU9mLmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvcGF0dGVybi5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL3Byb3BlcnRpZXMuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9wcm9wZXJ0eU5hbWVzLmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvcmVxdWlyZWQuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy91bmlxdWVJdGVtcy5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvY29tcGlsZS9ydWxlcy5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbGliL2RhdGEuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9jb21waWxlL2FzeW5jLmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvY3VzdG9tLmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvZGVmaW5pdGlvbl9zY2hlbWEuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9rZXl3b3JkLmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvYWp2LmpzIiwic3JjL3BhcnNlci9zcGVjQ2hlY2tlci5qcyIsIm5vZGVfbW9kdWxlcy92ZWdhLWV4cHJlc3Npb24vc3JjL2FzdC5qcyIsIm5vZGVfbW9kdWxlcy92ZWdhLWV4cHJlc3Npb24vc3JjL3BhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy92ZWdhLWV4cHJlc3Npb24vc3JjL2NvbnN0YW50cy5qcyIsIm5vZGVfbW9kdWxlcy92ZWdhLXV0aWwvc3JjL2FjY2Vzc29yLmpzIiwibm9kZV9tb2R1bGVzL3ZlZ2EtdXRpbC9zcmMvZXJyb3IuanMiLCJub2RlX21vZHVsZXMvdmVnYS11dGlsL3NyYy9zcGxpdEFjY2Vzc1BhdGguanMiLCJub2RlX21vZHVsZXMvdmVnYS11dGlsL3NyYy9pc0FycmF5LmpzIiwibm9kZV9tb2R1bGVzL3ZlZ2EtdXRpbC9zcmMvaXNPYmplY3QuanMiLCJub2RlX21vZHVsZXMvdmVnYS11dGlsL3NyYy9pc1N0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy92ZWdhLXV0aWwvc3JjL3N0cmluZ1ZhbHVlLmpzIiwibm9kZV9tb2R1bGVzL3ZlZ2EtdXRpbC9zcmMvZmllbGQuanMiLCJub2RlX21vZHVsZXMvdmVnYS11dGlsL3NyYy9hY2Nlc3NvcnMuanMiLCJub2RlX21vZHVsZXMvdmVnYS11dGlsL3NyYy9pc0Z1bmN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3ZlZ2EtdXRpbC9zcmMvaGFzT3duUHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvdmVnYS11dGlsL3NyYy90b1NldC5qcyIsIm5vZGVfbW9kdWxlcy92ZWdhLWV4cHJlc3Npb24vc3JjL2Z1bmN0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy92ZWdhLWV4cHJlc3Npb24vc3JjL2NvZGVnZW4uanMiLCJzcmMvZGVmYXVsdC9icm93c2VyLmpzIiwic3JjL2RlZmF1bHQvZWFzZS5qcyIsInNyYy9kZWZhdWx0L3ZlZ2FDb25maWcuanMiLCJzcmMvZGVmYXVsdC91dGlsLmpzIiwic3JjL2RlZmF1bHQvc3R5bGUuanMiLCJzcmMvZGVmYXVsdC9lbmNvZGUvdmVnYURlZmF1bHQuanMiLCJzcmMvZGVmYXVsdC9lbmNvZGUvbGVnZW5kLmpzIiwic3JjL2RlZmF1bHQvZW5jb2RlL21hcmsuanMiLCJzcmMvZGVmYXVsdC9lbmNvZGUvYXhpcy5qcyIsInNyYy9kZWZhdWx0L2VuY29kZS9pbmRleC5qcyIsInNyYy9hY3R1YXRvci91dGlsLmpzIiwic3JjL2NoYW5nZUZldGNoZXIvc3RhdGUvdXRpbC5qcyIsInNyYy9lbnVtZXJhdG9yLmpzIiwic3JjL3BhcnNlci9zdGVwRW51bWVyYXRvci5qcyIsInNyYy9wYXJzZXIvaW5kZXguanMiLCJzcmMvdXRpbC92Z0RhdGFIZWxwZXIuanMiLCJzcmMvY2hhbmdlRmV0Y2hlci9zdGF0ZS9kYXRhSm9pbi5qcyIsInNyYy9jaGFuZ2VGZXRjaGVyL3N0YXRlL2NvbXB1dGUvdXRpbC5qcyIsInNyYy9jaGFuZ2VGZXRjaGVyL3N0YXRlL2NvbXB1dGUvbWFyay5qcyIsInNyYy9jaGFuZ2VGZXRjaGVyL3N0YXRlL2NvbXB1dGUvYXhpcy5qcyIsInNyYy9jaGFuZ2VGZXRjaGVyL3N0YXRlL2NvbXB1dGUvbGVnZW5kLmpzIiwic3JjL2NoYW5nZUZldGNoZXIvc3RhdGUvY29tcHV0ZS92aWV3LmpzIiwic3JjL3V0aWwvdmdTcGVjSGVscGVyLmpzIiwic3JjL2NoYW5nZUZldGNoZXIvY2hhbmdlLmpzIiwic3JjL2NoYW5nZUZldGNoZXIvc3RhdGUvaW5kZXguanMiLCJzcmMvYWN0dWF0b3IvdmVnYS1yZW5kZXItdXRpbC5qcyIsInNyYy9hY3R1YXRvci9tYXJrL2ludGVycG9sYXRlUGF0aFlILmpzIiwic3JjL2FjdHVhdG9yL21hcmsvaW50ZXJwb2xhdGVIZWxwZXIuanMiLCJzcmMvYWN0dWF0b3IvYXR0cmlidXRlRmV0Y2hlci5qcyIsInNyYy9hY3R1YXRvci9zdGFnZ2VyaW5nLmpzIiwic3JjL2FjdHVhdG9yL3RpbWluZ3MuanMiLCJzcmMvYWN0dWF0b3IvbWFyay9tYXJrLmpzIiwic3JjL2FjdHVhdG9yL21hcmsvYXJlYUxpbmUuanMiLCJzcmMvYWN0dWF0b3IvYXhpcy5qcyIsInNyYy9hY3R1YXRvci9sZWdlbmQuanMiLCJzcmMvYWN0dWF0b3Ivdmlldy5qcyIsInNyYy9hY3R1YXRvci9pbmRleC5qcyIsInNyYy9yZXNvbHZlci5qcyIsInNyYy9nZW1pbmkuanMiLCJzcmMvcmVjb21tZW5kZXIvdXRpbC5qcyIsInNyYy9yZWNvbW1lbmRlci9kaWZmRGV0ZWN0b3IuanMiLCJzcmMvcmVjb21tZW5kZXIvZGlmZkFwcGxpZXIuanMiLCJzcmMvcmVjb21tZW5kZXIvbWFya0NvbXBDaGVja2VyLmpzIiwic3JjL3JlY29tbWVuZGVyL3BzZXVkb1RpbWVsaW5lVmFsaWRhdG9yLmpzIiwic3JjL3JlY29tbWVuZGVyL3BzZXVkb1RpbWVsaW5lRW51bWVyYXRvci5qcyIsInNyYy9yZWNvbW1lbmRlci9kZXNpZ25HdWlkZWxpbmVzLmpzIiwic3JjL3JlY29tbWVuZGVyL3BzZXVkb1RpbWVsaW5lRXZhbHVhdG9yLmpzIiwic3JjL3JlY29tbWVuZGVyL3RpbWVsaW5lR2VuZXJhdG9yLmpzIiwic3JjL3JlY29tbWVuZGVyL2luZGV4LmpzIiwic3JjL3V0aWwvdmwydmc0Z2VtaW5pLmpzIiwic3JjL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNsYXNzIEFuaW1hdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHNjaGVkdWxlLCByYXdJbmZvLCBzcGVjKSB7XG4gICAgdGhpcy5zY2hlZHVsZSA9IHNjaGVkdWxlO1xuICAgIHRoaXMubW9tZW50cyA9IHRoaXMuc2NoZWR1bGUubW9tZW50cztcbiAgICB0aGlzLnN0YXR1cyA9IFwicmVhZHlcIjtcbiAgICB0aGlzLnNwZWMgPSBzcGVjO1xuICAgIHRoaXMubG9ncyA9IFtdO1xuICAgIHRoaXMuX3F1ZXVlID0gW107XG4gICAgdGhpcy5yYXdJbmZvID0gcmF3SW5mbztcbiAgfVxuXG4gIGxvZyh0aW1lc3RhbXAsIG1lc3NhZ2UsIGluZm8pIHtcbiAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIHRpbWVzdGFtcCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgdGhpcy5sb2dzLnB1c2goe1xuICAgICAgICB0aW1lc3RhbXAsXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIGluZm9cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5sb2dzO1xuICB9XG5cbiAgYXN5bmMgcGxheSh0YXJnZXRFbG0pIHtcbiAgICB0aGlzLnN0YXR1cyA9IFwicGxheWluZ1wiO1xuICAgIC8vIGdldCBtb21lbnRzIGFuZCBzb3J0IGJ5IHNUaW1lXG4gICAgY29uc3QgeyBtb21lbnRzIH0gPSB0aGlzO1xuXG4gICAgY29uc3QgZ2xvYmFsU1RpbWUgPSBuZXcgRGF0ZSgpO1xuICAgIHRoaXMuX3N0YXJ0KG1vbWVudHNbMF0uc3RhcnRpbmcsIHRhcmdldEVsbSk7XG4gICAgdGhpcy5sb2cobmV3IERhdGUoKSAtIGdsb2JhbFNUaW1lLCBcIjAtdGggbW9tZW50XCIpO1xuXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBtb21lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBtb21lbnQgPSBtb21lbnRzW2ldO1xuXG4gICAgICBhd2FpdCB0aGlzLl9lbmQobW9tZW50KS50aGVuKCgpID0+IHtcbiAgICAgICAgY29uc3QgZGVsYXkgPSBNYXRoLm1heChtb21lbnQudGltZSAtIChuZXcgRGF0ZSgpIC0gZ2xvYmFsU1RpbWUpLCAwKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dCgoKSA9PiByZXNvbHZlKCksIGRlbGF5KSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX3N0YXJ0KG1vbWVudC5zdGFydGluZywgdGFyZ2V0RWxtKTtcbiAgICAgIHRoaXMubG9nKG5ldyBEYXRlKCkgLSBnbG9iYWxTVGltZSwgYCR7aX0tdGggbW9tZW50YCk7XG5cbiAgICAgIGlmIChpID09PSBtb21lbnRzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBcInJlYWR5XCI7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfc3RhcnQoc3RlcHMsIHRhcmdldEVsbSkge1xuICAgIHN0ZXBzLmZvckVhY2goc3RlcCA9PiB7XG4gICAgICB0aGlzLl9xdWV1ZS5wdXNoKHtcbiAgICAgICAgc1RpbWU6IHN0ZXAuc1RpbWUsXG4gICAgICAgIGVUaW1lOiBzdGVwLmVUaW1lLFxuICAgICAgICBzdGVwLFxuICAgICAgICByZXN1bHQ6IHN0ZXAudGVtcGxhdGUodGhpcy5yYXdJbmZvLCBzdGVwLCB0YXJnZXRFbG0pIC8vIGNvbnRhaW5zIHRoZSBwcm9taXNlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIF9lbmQobW9tZW50KSB7XG4gICAgY29uc3QgeyB0aW1lIH0gPSBtb21lbnQ7XG5cbiAgICBjb25zdCB3b3JraW5nU3RlcHMgPSB0aGlzLl9xdWV1ZS5maWx0ZXIoaXRlbSA9PiBpdGVtLmVUaW1lID09PSB0aW1lKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHdvcmtpbmdTdGVwcy5sZW5ndGg7IGkrKykge1xuICAgICAgYXdhaXQgd29ya2luZ1N0ZXBzW2ldLnJlc3VsdDtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHsgQW5pbWF0aW9uIH07XG4iLCJBcnJheS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbih2LCBhY2Nlc3Nvcikge1xuICBhY2Nlc3NvciA9XG4gICAgYWNjZXNzb3IgfHxcbiAgICAoZCA9PiB7XG4gICAgICByZXR1cm4gZDtcbiAgICB9KTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGFjY2Vzc29yKHRoaXNbaV0pID09PSBhY2Nlc3Nvcih2KSkgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcbkFycmF5LnByb3RvdHlwZS5jb250YWluQWxsID0gZnVuY3Rpb24oYXJyLCBhY2Nlc3Nvcikge1xuICBhY2Nlc3NvciA9XG4gICAgYWNjZXNzb3IgfHxcbiAgICAoZCA9PiB7XG4gICAgICByZXR1cm4gZDtcbiAgICB9KTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIXRoaXMuY29udGFpbnMoYXJyW2ldLCBhY2Nlc3NvcikpIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbkFycmF5LnByb3RvdHlwZS51bmlxdWUgPSBmdW5jdGlvbihhY2Nlc3Nvcikge1xuICBjb25zdCBhcnIgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKCFhcnIuY29udGFpbnModGhpc1tpXSwgYWNjZXNzb3IpKSB7XG4gICAgICBhcnIucHVzaCh0aGlzW2ldKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFycjtcbn07XG5cbkFycmF5LnByb3RvdHlwZS5zYW1wbGUgPSBmdW5jdGlvbihOKSB7XG4gIGNvbnN0IHRlbXBUaGlzID0gdGhpcy5zbGljZSgpO1xuICBjb25zdCBzYW1wbGVkID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgTjsgaSsrKSB7XG4gICAgc2FtcGxlZC5wdXNoKFxuICAgICAgdGVtcFRoaXMuc3BsaWNlKFtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiB0ZW1wVGhpcy5sZW5ndGgpXSwgMSlbMF1cbiAgICApO1xuICB9XG4gIHJldHVybiBzYW1wbGVkO1xufTtcblxuQXJyYXkucHJvdG90eXBlLnNodWZmbGUgPSBmdW5jdGlvbigpIHtcbiAgZm9yIChsZXQgaSA9IHRoaXMubGVuZ3RoOyBpOyBpLS0pIHtcbiAgICBjb25zdCBqID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogaSk7XG4gICAgW3RoaXNbaSAtIDFdLCB0aGlzW2pdXSA9IFt0aGlzW2pdLCB0aGlzW2kgLSAxXV07XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xuQXJyYXkucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMpKTtcbn07XG5mdW5jdGlvbiBzdHJpbmdpZnlEYXR1bVZhbHVlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBcIl9fbnVsbF9fXCI7XG4gIH1cbiAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG59XG5mdW5jdGlvbiBkZWVwRXF1YWwob2JqMSwgb2JqMikge1xuICBpZiAob2JqMSA9PT0gb2JqMikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChpc0RhdGUob2JqMSkgJiYgaXNEYXRlKG9iajIpKSB7XG4gICAgcmV0dXJuIE51bWJlcihvYmoxKSA9PT0gTnVtYmVyKG9iajIpO1xuICB9XG4gIGlmIChcbiAgICB0eXBlb2Ygb2JqMSA9PT0gXCJvYmplY3RcIiAmJlxuICAgIG9iajEgIT09IHVuZGVmaW5lZCAmJlxuICAgIHR5cGVvZiBvYmoyID09PSBcIm9iamVjdFwiICYmXG4gICAgb2JqMiAhPT0gdW5kZWZpbmVkXG4gICkge1xuICAgIGNvbnN0IHByb3BzMSA9IE9iamVjdC5rZXlzKG9iajEpO1xuICAgIGNvbnN0IHByb3BzMiA9IE9iamVjdC5rZXlzKG9iajIpO1xuICAgIGlmIChwcm9wczEubGVuZ3RoICE9PSBwcm9wczIubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wczEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHByb3AgPSBwcm9wczFbaV07XG5cbiAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iajIsIHByb3ApIHx8ICFkZWVwRXF1YWwob2JqMVtwcm9wXSwgb2JqMltwcm9wXSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGNvcHkob2JqKSB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqKSk7XG59XG4vLyBjcmVhdGUgYSBuZXcgb2JqIHRoYXQgaGFzIHRoZSBzYW1lIGtleXMgcG9pbnRpbmcgdGhlIHNhbWUgdmFsdWVzL2Z1bmN0aW9ucztcbmZ1bmN0aW9uIGNvcHkyKG9iaikge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5yZWR1Y2UoKGFjYywgY3VycikgPT4ge1xuICAgIGFjY1tjdXJyXSA9IG9ialtjdXJyXTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG59XG5mdW5jdGlvbiBmbGF0dGVuKGFycmF5cykge1xuICByZXR1cm4gYXJyYXlzLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiB7XG4gICAgYWNjID0gYWNjLmNvbmNhdChjdXJyKTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG59XG5cbmZ1bmN0aW9uIHBlcm11dGF0ZShhcnIpIHtcbiAgaWYgKGFyci5sZW5ndGggPT09IDIpIHtcbiAgICByZXR1cm4gW2FyciwgW2FyclsxXSwgYXJyWzBdXV07XG4gIH1cbiAgcmV0dXJuIGFyci5yZWR1Y2UoKGFjYywgYW5jaG9yLCBpKSA9PiB7XG4gICAgY29uc3Qgd29ya2luZ0FyciA9IGNvcHkoYXJyKTtcbiAgICB3b3JraW5nQXJyLnNwbGljZShpLCAxKTtcblxuICAgIGFjYyA9IGFjYy5jb25jYXQoXG4gICAgICBwZXJtdXRhdGUod29ya2luZ0FycikubWFwKG5ld0FyciA9PiB7XG4gICAgICAgIHJldHVybiBbYW5jaG9yXS5jb25jYXQobmV3QXJyKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG59XG5mdW5jdGlvbiBpc0RhdGUobykge1xuICByZXR1cm4gbyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvLmdldE1vbnRoID09PSBcImZ1bmN0aW9uXCI7XG59XG5cbmZ1bmN0aW9uIGVudW1BcnIoYXJyLCBpdGVtKSB7XG4gIGNvbnN0IG5ld0FycnMgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBuZXdBcnIgPSBjb3B5KGFycik7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmV3QXJyW2ldKSkge1xuICAgICAgbmV3QXJyW2ldLnB1c2goaXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0FycltpXSA9IFtuZXdBcnJbaV0sIGl0ZW1dO1xuICAgIH1cbiAgICBuZXdBcnJzLnB1c2gobmV3QXJyKTtcbiAgfVxuICByZXR1cm4gbmV3QXJycztcbn1cblxuZnVuY3Rpb24gZW51bUFycmF5c0J5SXRlbXMoYXJycywgaXRlbXMsIGVudW1BcnJGbiA9IGVudW1BcnIpIHtcbiAgbGV0IG5ld0FycnMgPSBjb3B5KGFycnMpO1xuICBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgIG5ld0FycnMgPSBuZXdBcnJzLnJlZHVjZSgoYWxsQXJycywgYXJyKSA9PiB7XG4gICAgICByZXR1cm4gKGFsbEFycnMgPSBhbGxBcnJzLmNvbmNhdChlbnVtQXJyRm4oYXJyLCBpdGVtKSkpO1xuICAgIH0sIFtdKTtcbiAgfSk7XG4gIHJldHVybiBuZXdBcnJzO1xufVxuXG5mdW5jdGlvbiBnZXQobywgLi4ucHJvcHMpIHtcbiAgcmV0dXJuIHByb3BzLnJlZHVjZSgob2JqLCBwcm9wKSA9PiB7XG4gICAgcmV0dXJuICFpc051bGxPclVuZGVmaW5lZChvYmopICYmICFpc051bGxPclVuZGVmaW5lZChvYmpbcHJvcF0pXG4gICAgICA/IG9ialtwcm9wXVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIH0sIG8pO1xufVxuXG5mdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZChvYmopIHtcbiAgcmV0dXJuIG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGlzTnVtYmVyKHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSBcIm51bWJlclwiICYmICFpc05hTih4KTtcbn1cbmZ1bmN0aW9uIHJvdW5kVXAobnVtLCBkID0gNSkge1xuICByZXR1cm4gTWF0aC5yb3VuZChNYXRoLnBvdygxMCwgZCkgKiBudW0pIC8gTWF0aC5wb3coMTAsIGQpO1xufVxuQXJyYXkucHJvdG90eXBlLmV4Y2x1ZGUgPSBmdW5jdGlvbihpdGVtcywgYWNjZXNzb3IgPSB4ID0+IHgpIHtcbiAgY29uc3QgbmV3QXJyID0gdGhpcy5zbGljZSgpO1xuICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICBjb25zdCBpID0gbmV3QXJyLmZpbmRJbmRleCh4ID0+IGFjY2Vzc29yKHgpID09PSBhY2Nlc3NvcihpdGVtKSk7XG4gICAgaWYgKGkgPj0gMCkge1xuICAgICAgbmV3QXJyLnNwbGljZShpLCAxKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ld0Fycjtcbn07XG5mdW5jdGlvbiB2YXJpYW5jZShudW1zKSB7XG4gIGNvbnN0IG11ID0gbWVhbihudW1zKTtcbiAgcmV0dXJuIChcbiAgICBudW1zLnJlZHVjZSgoYWNjLCBudW0pID0+IChhY2MgKz0gTWF0aC5wb3cobnVtIC0gbXUsIDIpKSwgMCkgLyBudW1zLmxlbmd0aFxuICApO1xufVxuZnVuY3Rpb24gbWVhbihudW1zKSB7XG4gIHJldHVybiBudW1zLnJlZHVjZSgoc3VtLCBudW0pID0+IHN1bSArIG51bSwgMCkgLyBudW1zLmxlbmd0aDtcbn1cblxuZnVuY3Rpb24gaXNFbXB0eShvKSB7XG4gIHJldHVybiB0eXBlb2YgbyA9PT0gXCJvYmplY3RcIiAmJiBPYmplY3Qua2V5cyhvKS5sZW5ndGggPT09IDA7XG59XG5cbmV4cG9ydCB7XG4gIGRlZXBFcXVhbCxcbiAgY29weSxcbiAgY29weTIsXG4gIGZsYXR0ZW4sXG4gIHBlcm11dGF0ZSxcbiAgaXNOdW1iZXIsXG4gIGVudW1BcnJheXNCeUl0ZW1zLFxuICBnZXQsXG4gIHJvdW5kVXAsXG4gIHZhcmlhbmNlLFxuICBtZWFuLFxuICBpc0VtcHR5LFxuICBzdHJpbmdpZnlEYXR1bVZhbHVlXG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocGFyc2VkQmxvY2ssIHBhcnNlZFN0ZXBzKSB7XG4gIGxldCByZXNvbHZlcyA9IGNvbGxlY3QocGFyc2VkQmxvY2spO1xuICAvLyAxLTIuIGNvbGxlY3QgdGhlIGFsdGVybmF0aXZlIHRpbWVsaW5lcy4gKGFsdGVySWRzKVxuICByZXNvbHZlcy5mb3JFYWNoKHIgPT4ge1xuICAgIHIuYWx0ZXJJZHMgPSBwYXJzZWRTdGVwc1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgc3RlcCA9PiBzdGVwLmFsdGVySWQgJiZcbiAgICAgICAgICAoc3RlcC5hbHRlcklkLnNwbGl0KFwiOlwiKVswXSA9PT0gci5hbHRlck5hbWUpXG4gICAgICApXG4gICAgICAubWFwKHN0ZXAgPT4gc3RlcC5hbHRlcklkKVxuICAgICAgLnVuaXF1ZSgpO1xuXG4gICAgLy8gUGxhY2UgXCI6bWFpblwiIGF0IGZpcnN0XG4gICAgY29uc3QgaSA9IHIuYWx0ZXJJZHMuZmluZEluZGV4KGQgPT4gZC5pbmRleE9mKFwiOm1haW5cIikgPj0gMCk7XG4gICAgY29uc3QgaGVhZCA9IHIuYWx0ZXJJZHMuc3BsaWNlKGksIDEpO1xuICAgIHIuYWx0ZXJJZHMgPSBoZWFkLmNvbmNhdChyLmFsdGVySWRzKTtcbiAgfSk7XG4gIHJldHVybiByZXNvbHZlcztcbn1cblxuZnVuY3Rpb24gY29sbGVjdChibG9jaykge1xuICBsZXQgcmVzb2x2ZXMgPSBbXTtcblxuICBpZiAoYmxvY2suc3luYykge1xuICAgIGJsb2NrLnN5bmMuZm9yRWFjaChibGsgPT4ge1xuICAgICAgcmVzb2x2ZXMgPSByZXNvbHZlcy5jb25jYXQoY29sbGVjdChibGspKTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChibG9jay5jb25jYXQpIHtcbiAgICBibG9jay5jb25jYXQuZm9yRWFjaChibGsgPT4ge1xuICAgICAgcmVzb2x2ZXMgPSByZXNvbHZlcy5jb25jYXQoY29sbGVjdChibGspKTtcbiAgICB9KTtcbiAgfVxuICBpZiAoYmxvY2sucmVzb2x2ZSkge1xuICAgIHJlc29sdmVzLnB1c2goYmxvY2sucmVzb2x2ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc29sdmVzO1xufSIsImNsYXNzIFNjaGVkdWxlIHtcbiAgY29uc3RydWN0b3IocGFyc2VkU3RlcHMpIHtcbiAgICAvLyBBc3NnaW4gdGhlIHNUaW1lIGFuZCBlVGltZVxuXG4gICAgbGV0IG5ld1BhcnNlZFN0ZXBzID0gcGFyc2VkU3RlcHMubWFwKChzdHAsIGkpID0+IHtcbiAgICAgIHJldHVybiB7IC4uLnN0cCwgc3RlcElkOiBpIH07XG4gICAgfSk7XG5cbiAgICB0aGlzLnRyYWNrcyA9IG5ld1BhcnNlZFN0ZXBzXG4gICAgICAubWFwKGQgPT4ge1xuICAgICAgICBjb25zdCB0cmFja05hbWUgPSAoZC50cmFja05hbWUgPSBkLmNvbXBOYW1lXG4gICAgICAgICAgPyBgJHtkLmNvbXBUeXBlfS4ke2QuY29tcE5hbWV9YFxuICAgICAgICAgIDogZC5jb21wVHlwZSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiB0cmFja05hbWUsXG4gICAgICAgICAgY29tcFR5cGU6IGQuY29tcFR5cGUsXG4gICAgICAgICAgY29tcE5hbWU6IGQuY29tcE5hbWVcbiAgICAgICAgfTtcbiAgICAgIH0pXG4gICAgICAudW5pcXVlKGQgPT4gZC5uYW1lKVxuICAgICAgLm1hcCh0cmFjayA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4udHJhY2ssXG4gICAgICAgICAgc3RlcHM6IG5ld1BhcnNlZFN0ZXBzLmZpbHRlcihkID0+IGQudHJhY2tOYW1lID09PSB0cmFjay5uYW1lKVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gIH1cblxuXG4gIGdldFRpbWVsaW5lKGFsdGVySWQpIHtcbiAgICByZXR1cm4gdGhpcy50cmFja3MubWFwKHRyYWNrID0+IHtcbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0cmFjaywge1xuICAgICAgICBzdGVwczogdHJhY2suc3RlcHMuZmlsdGVyKFxuICAgICAgICAgIHN0ZXAgPT4gc3RlcC5hbHRlcklkID09PSB1bmRlZmluZWQgfHwgc3RlcC5hbHRlcklkLmluZGV4T2YoYWx0ZXJJZCkgPj0gMFxuICAgICAgICApXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFRpbWVsaW5lQWx0ZXJuYXRvcihzY2FsZU9yZGVyUmVzb3ZsZXMpIHtcbiAgICBsZXQgY291bnRlciA9IDA7XG4gICAgbGV0IGRpdmlkZXJzID0gc2NhbGVPcmRlclJlc292bGVzLnJlZHVjZShcbiAgICAgIChhY2MsIHIsIGkpID0+IHtcbiAgICAgICAgYWNjLnB1c2goci5hbHRlcklkcy5sZW5ndGggKiBhY2NbaV0pO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSxcbiAgICAgIFsxXVxuICAgICk7XG4gICAgY29uc3QgdG90YWxDb3VudCA9IGRpdmlkZXJzW2RpdmlkZXJzLmxlbmd0aCAtIDFdO1xuICAgIGRpdmlkZXJzID0gZGl2aWRlcnMuc2xpY2UoMCwgZGl2aWRlcnMubGVuZ3RoIC0gMSkuc29ydCgoYSwgYikgPT4gYiAtIGEpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjb3VudGVyICs9IDE7XG4gICAgICBjb3VudGVyICU9IHRvdGFsQ291bnQ7XG4gICAgICBpZiAoY291bnRlciA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJHZW1pbmkgY2Fubm90IGZpbmQgdGhlIG9yZGVyIHRvIHJlc29sdmUuXCIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGl2aWRlcnMucmVkdWNlKFxuICAgICAgICAoYWNjLCBkaXZpZGVyLCBpKSA9PiB7XG4gICAgICAgICAgY29uc3QgcSA9IE1hdGguZmxvb3IoYWNjLnJlbWFpbmRlciAvIGRpdmlkZXIpO1xuICAgICAgICAgIGFjYy5yZW1haW5kZXIgLT0gcSAqIGRpdmlkZXI7XG4gICAgICAgICAgY29uc3QgcmVzb2x2ZSA9IHNjYWxlT3JkZXJSZXNvdmxlc1tpXTtcblxuICAgICAgICAgIGNvbnN0IGFsdGVySWQgPSByZXNvbHZlLmFsdGVySWRzW3FdO1xuXG4gICAgICAgICAgYWNjLnRyYWNrcyA9IGFjYy50cmFja3MubWFwKHRyYWNrID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1N0ZXBzID0gdHJhY2suc3RlcHMuZmlsdGVyKHN0ZXAgPT4ge1xuICAgICAgICAgICAgICBpZiAoc3RlcC5hbHRlcklkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc3RlcC5hbHRlcklkLnNwbGl0KFwiOlwiKVswXSA9PT0gYWx0ZXJJZC5zcGxpdChcIjpcIilbMF0gJiZcbiAgICAgICAgICAgICAgICBzdGVwLmFsdGVySWQuc3BsaXQoXCI6XCIpWzFdICE9PSBhbHRlcklkLnNwbGl0KFwiOlwiKVsxXVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHRyYWNrLCB7IHN0ZXBzOiBuZXdTdGVwcyB9KTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sXG4gICAgICAgIHsgdHJhY2tzOiB0aGlzLnRyYWNrcywgcmVtYWluZGVyOiBjb3VudGVyIH1cbiAgICAgICkudHJhY2tzO1xuICAgIH07XG4gIH1cblxuXG59XG5cblxuXG5cblxuZXhwb3J0IHtTY2hlZHVsZX07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2hlY2soc2NoZWR1bGUsIHJlc29sdmVzKSB7XG4gIC8vIDMuIGNoZWNrIGlmIHRoZXJlIGlzIGFueSBjb21wb25lbnQgd2hvc2Ugc3RlcHMgYXJlIG92ZXJsYXBwZWQgYnkgdGhlbXNlbHZlcy5cbiAgbGV0IHRyYWNrc1BlckFsdGVySWQgPSBbeyBhbHRlcklkOiBcIjptYWluXCIsIHRyYWNrczogc2NoZWR1bGUudHJhY2tzIH1dO1xuICBpZiAocmVzb2x2ZXMubGVuZ3RoID4gMCkge1xuICAgIHRyYWNrc1BlckFsdGVySWQgPSByZXNvbHZlc1xuICAgICAgLnJlZHVjZSgoYWxsQWx0ZXJJZHMsIHJlc29sdmUpID0+IHtcbiAgICAgICAgcmV0dXJuIGFsbEFsdGVySWRzLmNvbmNhdChyZXNvbHZlLmFsdGVySWRzKTtcbiAgICAgIH0sIFtdKVxuICAgICAgLm1hcChhbHRlcklkID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0cmFja3M6IHNjaGVkdWxlLnRyYWNrcy5tYXAodHJhY2sgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4udHJhY2ssXG4gICAgICAgICAgICAgIHN0ZXBzOiB0cmFjay5zdGVwcy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgc3RwID0+ICFzdHAuYWx0ZXJJZCB8fCBhbHRlcklkID09PSBzdHAuYWx0ZXJJZFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGFsdGVySWRcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICB9XG4gIGNvbnN0IGNvbmZsaWN0c1BlckFsdGVySWQgPSB0cmFja3NQZXJBbHRlcklkLm1hcChmaW5kQ29uZmxpY3RzKTtcbiAgY29uc3QgY29uZmxpY3RlZEFsdGVySWRzID0gY29uZmxpY3RzUGVyQWx0ZXJJZFxuICAgIC5maWx0ZXIoY29uZmxpY3RzID0+IGNvbmZsaWN0cy5sZW5ndGggPiAwKVxuICAgIC5tYXAoY29uZmxpY3RzID0+IGNvbmZsaWN0cy5hbHRlcklkKTtcblxuICBpZiAoY29uZmxpY3RlZEFsdGVySWRzLmxlbmd0aCA9PT0gdHJhY2tzUGVyQWx0ZXJJZC5sZW5ndGgpIHtcbiAgICBpZiAoY29uZmxpY3RzUGVyQWx0ZXJJZC5sZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQWxsIHBvc3NpYmxlIHRpbWVsaW5lcyBoYXZlIDErIHNjaGVkdWxlIGNvbmZsaWN0LlwiLFxuICAgICAgICBjb25mbGljdHNQZXJBbHRlcklkXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiVGhlIHRpbWVsaW5lIGhhcyAxKyBzY2hlZHVsZSBjb25mbGljdC5cIixcbiAgICAgICAgY29uZmxpY3RzUGVyQWx0ZXJJZFxuICAgICAgKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY29uZmxpY3RlZEFsdGVySWRzLmxlbmd0aCA+IDApIHtcbiAgICBpZiAoXG4gICAgICBjb25mbGljdHNQZXJBbHRlcklkLmZpbmQoY29uZmxpY3RzID0+XG4gICAgICAgIGNvbmZsaWN0cy5maW5kKGNvbmYgPT4gY29uZi5hbHRlcklkLmluZGV4T2YoXCI6bWFpblwiKSA+PSAwKVxuICAgICAgKVxuICAgICkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBcIlRoZSBtYWluIHRpbWVsaW5lIChzcGVjaWZpZWQgdGltZWxpbmUpIGhhcyAxKyBzY2hlZHVsZSBjb25mbGljdC5cIixcbiAgICAgICAgY29uZmxpY3RzUGVyQWx0ZXJJZFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBcIlNvbWUgcG9zc2libGUgdGltZWxpbmVzIGhhdmUgMSsgc2NoZWR1bGUgY29uZmxpY3QuXCIsXG4gICAgICAgIGNvbmZsaWN0c1BlckFsdGVySWRcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHNjaGVkdWxlLnRyYWNrcyA9IHNjaGVkdWxlLnRyYWNrcy5tYXAodHJhY2sgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi50cmFjayxcbiAgICAgIHN0ZXBzOiB0cmFjay5zdGVwcy5maWx0ZXIoXG4gICAgICAgIHN0cCA9PiBjb25mbGljdGVkQWx0ZXJJZHMuaW5kZXhPZihzdHAuYWx0ZXJJZCkgPCAwXG4gICAgICApXG4gICAgfTtcbiAgfSk7XG4gIHJlc29sdmVzID0gcmVzb2x2ZXMubWFwKHJlc29sdmUgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5yZXNvbHZlLFxuICAgICAgYWx0ZXJJZHM6IHJlc29sdmUuYWx0ZXJJZHMuZmlsdGVyKFxuICAgICAgICBpZCA9PiBjb25mbGljdGVkQWx0ZXJJZHMuaW5kZXhPZihpZCkgPCAwXG4gICAgICApXG4gICAgfTtcbiAgfSk7XG5cbiAgcmV0dXJuIHtjb25mbGljdHNQZXJBbHRlcklkfTtcbn1cblxuXG5mdW5jdGlvbiBmaW5kQ29uZmxpY3RzKHRyYWNrc1dpdGhBbHRlcklkKSB7XG4gIGNvbnN0IGNvbmZsaWN0cyA9IFtdO1xuICBjb25zdCB7IHRyYWNrcyB9ID0gdHJhY2tzV2l0aEFsdGVySWQ7XG4gIGNvbnN0IHsgYWx0ZXJJZCB9ID0gdHJhY2tzV2l0aEFsdGVySWQ7XG5cbiAgZm9yIChjb25zdCB0cmFjayBvZiB0cmFja3MpIHtcbiAgICBjb25zdCBzb3J0ZWRTdGVwcyA9IHRyYWNrLnN0ZXBzLnNvcnQoXG4gICAgICAoc3RwMSwgc3RwMikgPT4gc3RwMS5zVGltZSAtIHN0cDIuc1RpbWVcbiAgICApO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc29ydGVkU3RlcHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBpZiAoc29ydGVkU3RlcHNbaV0uZVRpbWUgPiBzb3J0ZWRTdGVwc1tpICsgMV0uc1RpbWUpIHtcbiAgICAgICAgY29uZmxpY3RzLnB1c2goe1xuICAgICAgICAgIGFsdGVySWQsXG4gICAgICAgICAgY29uZmxpY3RlZFN0ZXBzOiBbc29ydGVkU3RlcHNbaV0sIHNvcnRlZFN0ZXBzW2kgKyAxXV0sXG4gICAgICAgICAgY29tcE5hbWU6IHRyYWNrLmNvbXBOYW1lLFxuICAgICAgICAgIGNvbXBUeXBlOiB0cmFjay5jb21wVHlwZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29uZmxpY3RzO1xufSIsImV4cG9ydCBmdW5jdGlvbiBtZXJnZSguLi5zZXRzOkFycmF5PHN0cmluZz4pOnN0cmluZyB7XG5cdGlmIChzZXRzLmxlbmd0aCA+IDEpIHtcblx0XHRzZXRzWzBdID0gc2V0c1swXS5zbGljZSgwLCAtMSk7XG5cdFx0Y29uc3QgeGwgPSBzZXRzLmxlbmd0aCAtIDE7XG5cdFx0Zm9yIChsZXQgeCA9IDE7IHggPCB4bDsgKyt4KSB7XG5cdFx0XHRzZXRzW3hdID0gc2V0c1t4XS5zbGljZSgxLCAtMSk7XG5cdFx0fVxuXHRcdHNldHNbeGxdID0gc2V0c1t4bF0uc2xpY2UoMSk7XG5cdFx0cmV0dXJuIHNldHMuam9pbignJyk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHNldHNbMF07XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YmV4cChzdHI6c3RyaW5nKTpzdHJpbmcge1xuXHRyZXR1cm4gXCIoPzpcIiArIHN0ciArIFwiKVwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZU9mKG86YW55KTpzdHJpbmcge1xuXHRyZXR1cm4gbyA9PT0gdW5kZWZpbmVkID8gXCJ1bmRlZmluZWRcIiA6IChvID09PSBudWxsID8gXCJudWxsXCIgOiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc3BsaXQoXCIgXCIpLnBvcCgpLnNwbGl0KFwiXVwiKS5zaGlmdCgpLnRvTG93ZXJDYXNlKCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9VcHBlckNhc2Uoc3RyOnN0cmluZyk6c3RyaW5nIHtcblx0cmV0dXJuIHN0ci50b1VwcGVyQ2FzZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9BcnJheShvYmo6YW55KTpBcnJheTxhbnk+IHtcblx0cmV0dXJuIG9iaiAhPT0gdW5kZWZpbmVkICYmIG9iaiAhPT0gbnVsbCA/IChvYmogaW5zdGFuY2VvZiBBcnJheSA/IG9iaiA6ICh0eXBlb2Ygb2JqLmxlbmd0aCAhPT0gXCJudW1iZXJcIiB8fCBvYmouc3BsaXQgfHwgb2JqLnNldEludGVydmFsIHx8IG9iai5jYWxsID8gW29ial0gOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChvYmopKSkgOiBbXTtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gYXNzaWduKHRhcmdldDogb2JqZWN0LCBzb3VyY2U6IGFueSk6IGFueSB7XG5cdGNvbnN0IG9iaiA9IHRhcmdldCBhcyBhbnk7XG5cdGlmIChzb3VyY2UpIHtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBzb3VyY2UpIHtcblx0XHRcdG9ialtrZXldID0gc291cmNlW2tleV07XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvYmo7XG59IiwiaW1wb3J0IHsgVVJJUmVnRXhwcyB9IGZyb20gXCIuL3VyaVwiO1xuaW1wb3J0IHsgbWVyZ2UsIHN1YmV4cCB9IGZyb20gXCIuL3V0aWxcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkRXhwcyhpc0lSSTpib29sZWFuKTpVUklSZWdFeHBzIHtcblx0Y29uc3Rcblx0XHRBTFBIQSQkID0gXCJbQS1aYS16XVwiLFxuXHRcdENSJCA9IFwiW1xcXFx4MERdXCIsXG5cdFx0RElHSVQkJCA9IFwiWzAtOV1cIixcblx0XHREUVVPVEUkJCA9IFwiW1xcXFx4MjJdXCIsXG5cdFx0SEVYRElHJCQgPSBtZXJnZShESUdJVCQkLCBcIltBLUZhLWZdXCIpLCAgLy9jYXNlLWluc2Vuc2l0aXZlXG5cdFx0TEYkJCA9IFwiW1xcXFx4MEFdXCIsXG5cdFx0U1AkJCA9IFwiW1xcXFx4MjBdXCIsXG5cdFx0UENUX0VOQ09ERUQkID0gc3ViZXhwKHN1YmV4cChcIiVbRUZlZl1cIiArIEhFWERJRyQkICsgXCIlXCIgKyBIRVhESUckJCArIEhFWERJRyQkICsgXCIlXCIgKyBIRVhESUckJCArIEhFWERJRyQkKSArIFwifFwiICsgc3ViZXhwKFwiJVs4OUEtRmEtZl1cIiArIEhFWERJRyQkICsgXCIlXCIgKyBIRVhESUckJCArIEhFWERJRyQkKSArIFwifFwiICsgc3ViZXhwKFwiJVwiICsgSEVYRElHJCQgKyBIRVhESUckJCkpLCAgLy9leHBhbmRlZFxuXHRcdEdFTl9ERUxJTVMkJCA9IFwiW1xcXFw6XFxcXC9cXFxcP1xcXFwjXFxcXFtcXFxcXVxcXFxAXVwiLFxuXHRcdFNVQl9ERUxJTVMkJCA9IFwiW1xcXFwhXFxcXCRcXFxcJlxcXFwnXFxcXChcXFxcKVxcXFwqXFxcXCtcXFxcLFxcXFw7XFxcXD1dXCIsXG5cdFx0UkVTRVJWRUQkJCA9IG1lcmdlKEdFTl9ERUxJTVMkJCwgU1VCX0RFTElNUyQkKSxcblx0XHRVQ1NDSEFSJCQgPSBpc0lSSSA/IFwiW1xcXFx4QTAtXFxcXHUyMDBEXFxcXHUyMDEwLVxcXFx1MjAyOVxcXFx1MjAyRi1cXFxcdUQ3RkZcXFxcdUY5MDAtXFxcXHVGRENGXFxcXHVGREYwLVxcXFx1RkZFRl1cIiA6IFwiW11cIiwgIC8vc3Vic2V0LCBleGNsdWRlcyBiaWRpIGNvbnRyb2wgY2hhcmFjdGVyc1xuXHRcdElQUklWQVRFJCQgPSBpc0lSSSA/IFwiW1xcXFx1RTAwMC1cXFxcdUY4RkZdXCIgOiBcIltdXCIsICAvL3N1YnNldFxuXHRcdFVOUkVTRVJWRUQkJCA9IG1lcmdlKEFMUEhBJCQsIERJR0lUJCQsIFwiW1xcXFwtXFxcXC5cXFxcX1xcXFx+XVwiLCBVQ1NDSEFSJCQpLFxuXHRcdFNDSEVNRSQgPSBzdWJleHAoQUxQSEEkJCArIG1lcmdlKEFMUEhBJCQsIERJR0lUJCQsIFwiW1xcXFwrXFxcXC1cXFxcLl1cIikgKyBcIipcIiksXG5cdFx0VVNFUklORk8kID0gc3ViZXhwKHN1YmV4cChQQ1RfRU5DT0RFRCQgKyBcInxcIiArIG1lcmdlKFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkLCBcIltcXFxcOl1cIikpICsgXCIqXCIpLFxuXHRcdERFQ19PQ1RFVCQgPSBzdWJleHAoc3ViZXhwKFwiMjVbMC01XVwiKSArIFwifFwiICsgc3ViZXhwKFwiMlswLTRdXCIgKyBESUdJVCQkKSArIFwifFwiICsgc3ViZXhwKFwiMVwiICsgRElHSVQkJCArIERJR0lUJCQpICsgXCJ8XCIgKyBzdWJleHAoXCJbMS05XVwiICsgRElHSVQkJCkgKyBcInxcIiArIERJR0lUJCQpLFxuXHRcdERFQ19PQ1RFVF9SRUxBWEVEJCA9IHN1YmV4cChzdWJleHAoXCIyNVswLTVdXCIpICsgXCJ8XCIgKyBzdWJleHAoXCIyWzAtNF1cIiArIERJR0lUJCQpICsgXCJ8XCIgKyBzdWJleHAoXCIxXCIgKyBESUdJVCQkICsgRElHSVQkJCkgKyBcInxcIiArIHN1YmV4cChcIjA/WzEtOV1cIiArIERJR0lUJCQpICsgXCJ8MD8wP1wiICsgRElHSVQkJCksICAvL3JlbGF4ZWQgcGFyc2luZyBydWxlc1xuXHRcdElQVjRBRERSRVNTJCA9IHN1YmV4cChERUNfT0NURVRfUkVMQVhFRCQgKyBcIlxcXFwuXCIgKyBERUNfT0NURVRfUkVMQVhFRCQgKyBcIlxcXFwuXCIgKyBERUNfT0NURVRfUkVMQVhFRCQgKyBcIlxcXFwuXCIgKyBERUNfT0NURVRfUkVMQVhFRCQpLFxuXHRcdEgxNiQgPSBzdWJleHAoSEVYRElHJCQgKyBcInsxLDR9XCIpLFxuXHRcdExTMzIkID0gc3ViZXhwKHN1YmV4cChIMTYkICsgXCJcXFxcOlwiICsgSDE2JCkgKyBcInxcIiArIElQVjRBRERSRVNTJCksXG5cdFx0SVBWNkFERFJFU1MxJCA9IHN1YmV4cCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJleHAoSDE2JCArIFwiXFxcXDpcIikgKyBcIns2fVwiICsgTFMzMiQpLCAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIDYoIGgxNiBcIjpcIiApIGxzMzJcblx0XHRJUFY2QUREUkVTUzIkID0gc3ViZXhwKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcXFw6XFxcXDpcIiArIHN1YmV4cChIMTYkICsgXCJcXFxcOlwiKSArIFwiezV9XCIgKyBMUzMyJCksIC8vICAgICAgICAgICAgICAgICAgICAgIFwiOjpcIiA1KCBoMTYgXCI6XCIgKSBsczMyXG5cdFx0SVBWNkFERFJFU1MzJCA9IHN1YmV4cChzdWJleHAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSDE2JCkgKyBcIj9cXFxcOlxcXFw6XCIgKyBzdWJleHAoSDE2JCArIFwiXFxcXDpcIikgKyBcIns0fVwiICsgTFMzMiQpLCAvL1sgICAgICAgICAgICAgICBoMTYgXSBcIjo6XCIgNCggaDE2IFwiOlwiICkgbHMzMlxuXHRcdElQVjZBRERSRVNTNCQgPSBzdWJleHAoc3ViZXhwKHN1YmV4cChIMTYkICsgXCJcXFxcOlwiKSArIFwiezAsMX1cIiArIEgxNiQpICsgXCI/XFxcXDpcXFxcOlwiICsgc3ViZXhwKEgxNiQgKyBcIlxcXFw6XCIpICsgXCJ7M31cIiArIExTMzIkKSwgLy9bICoxKCBoMTYgXCI6XCIgKSBoMTYgXSBcIjo6XCIgMyggaDE2IFwiOlwiICkgbHMzMlxuXHRcdElQVjZBRERSRVNTNSQgPSBzdWJleHAoc3ViZXhwKHN1YmV4cChIMTYkICsgXCJcXFxcOlwiKSArIFwiezAsMn1cIiArIEgxNiQpICsgXCI/XFxcXDpcXFxcOlwiICsgc3ViZXhwKEgxNiQgKyBcIlxcXFw6XCIpICsgXCJ7Mn1cIiArIExTMzIkKSwgLy9bICoyKCBoMTYgXCI6XCIgKSBoMTYgXSBcIjo6XCIgMiggaDE2IFwiOlwiICkgbHMzMlxuXHRcdElQVjZBRERSRVNTNiQgPSBzdWJleHAoc3ViZXhwKHN1YmV4cChIMTYkICsgXCJcXFxcOlwiKSArIFwiezAsM31cIiArIEgxNiQpICsgXCI/XFxcXDpcXFxcOlwiICsgICAgICAgIEgxNiQgKyBcIlxcXFw6XCIgICAgICAgICAgKyBMUzMyJCksIC8vWyAqMyggaDE2IFwiOlwiICkgaDE2IF0gXCI6OlwiICAgIGgxNiBcIjpcIiAgIGxzMzJcblx0XHRJUFY2QUREUkVTUzckID0gc3ViZXhwKHN1YmV4cChzdWJleHAoSDE2JCArIFwiXFxcXDpcIikgKyBcInswLDR9XCIgKyBIMTYkKSArIFwiP1xcXFw6XFxcXDpcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBMUzMyJCksIC8vWyAqNCggaDE2IFwiOlwiICkgaDE2IF0gXCI6OlwiICAgICAgICAgICAgICBsczMyXG5cdFx0SVBWNkFERFJFU1M4JCA9IHN1YmV4cChzdWJleHAoc3ViZXhwKEgxNiQgKyBcIlxcXFw6XCIpICsgXCJ7MCw1fVwiICsgSDE2JCkgKyBcIj9cXFxcOlxcXFw6XCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgSDE2JCApLCAvL1sgKjUoIGgxNiBcIjpcIiApIGgxNiBdIFwiOjpcIiAgICAgICAgICAgICAgaDE2XG5cdFx0SVBWNkFERFJFU1M5JCA9IHN1YmV4cChzdWJleHAoc3ViZXhwKEgxNiQgKyBcIlxcXFw6XCIpICsgXCJ7MCw2fVwiICsgSDE2JCkgKyBcIj9cXFxcOlxcXFw6XCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLCAvL1sgKjYoIGgxNiBcIjpcIiApIGgxNiBdIFwiOjpcIlxuXHRcdElQVjZBRERSRVNTJCA9IHN1YmV4cChbSVBWNkFERFJFU1MxJCwgSVBWNkFERFJFU1MyJCwgSVBWNkFERFJFU1MzJCwgSVBWNkFERFJFU1M0JCwgSVBWNkFERFJFU1M1JCwgSVBWNkFERFJFU1M2JCwgSVBWNkFERFJFU1M3JCwgSVBWNkFERFJFU1M4JCwgSVBWNkFERFJFU1M5JF0uam9pbihcInxcIikpLFxuXHRcdFpPTkVJRCQgPSBzdWJleHAoc3ViZXhwKFVOUkVTRVJWRUQkJCArIFwifFwiICsgUENUX0VOQ09ERUQkKSArIFwiK1wiKSwgIC8vUkZDIDY4NzRcblx0XHRJUFY2QUREUlokID0gc3ViZXhwKElQVjZBRERSRVNTJCArIFwiXFxcXCUyNVwiICsgWk9ORUlEJCksICAvL1JGQyA2ODc0XG5cdFx0SVBWNkFERFJaX1JFTEFYRUQkID0gc3ViZXhwKElQVjZBRERSRVNTJCArIHN1YmV4cChcIlxcXFwlMjV8XFxcXCUoPyFcIiArIEhFWERJRyQkICsgXCJ7Mn0pXCIpICsgWk9ORUlEJCksICAvL1JGQyA2ODc0LCB3aXRoIHJlbGF4ZWQgcGFyc2luZyBydWxlc1xuXHRcdElQVkZVVFVSRSQgPSBzdWJleHAoXCJbdlZdXCIgKyBIRVhESUckJCArIFwiK1xcXFwuXCIgKyBtZXJnZShVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCwgXCJbXFxcXDpdXCIpICsgXCIrXCIpLFxuXHRcdElQX0xJVEVSQUwkID0gc3ViZXhwKFwiXFxcXFtcIiArIHN1YmV4cChJUFY2QUREUlpfUkVMQVhFRCQgKyBcInxcIiArIElQVjZBRERSRVNTJCArIFwifFwiICsgSVBWRlVUVVJFJCkgKyBcIlxcXFxdXCIpLCAgLy9SRkMgNjg3NFxuXHRcdFJFR19OQU1FJCA9IHN1YmV4cChzdWJleHAoUENUX0VOQ09ERUQkICsgXCJ8XCIgKyBtZXJnZShVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCkpICsgXCIqXCIpLFxuXHRcdEhPU1QkID0gc3ViZXhwKElQX0xJVEVSQUwkICsgXCJ8XCIgKyBJUFY0QUREUkVTUyQgKyBcIig/IVwiICsgUkVHX05BTUUkICsgXCIpXCIgKyBcInxcIiArIFJFR19OQU1FJCksXG5cdFx0UE9SVCQgPSBzdWJleHAoRElHSVQkJCArIFwiKlwiKSxcblx0XHRBVVRIT1JJVFkkID0gc3ViZXhwKHN1YmV4cChVU0VSSU5GTyQgKyBcIkBcIikgKyBcIj9cIiArIEhPU1QkICsgc3ViZXhwKFwiXFxcXDpcIiArIFBPUlQkKSArIFwiP1wiKSxcblx0XHRQQ0hBUiQgPSBzdWJleHAoUENUX0VOQ09ERUQkICsgXCJ8XCIgKyBtZXJnZShVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCwgXCJbXFxcXDpcXFxcQF1cIikpLFxuXHRcdFNFR01FTlQkID0gc3ViZXhwKFBDSEFSJCArIFwiKlwiKSxcblx0XHRTRUdNRU5UX05aJCA9IHN1YmV4cChQQ0hBUiQgKyBcIitcIiksXG5cdFx0U0VHTUVOVF9OWl9OQyQgPSBzdWJleHAoc3ViZXhwKFBDVF9FTkNPREVEJCArIFwifFwiICsgbWVyZ2UoVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQsIFwiW1xcXFxAXVwiKSkgKyBcIitcIiksXG5cdFx0UEFUSF9BQkVNUFRZJCA9IHN1YmV4cChzdWJleHAoXCJcXFxcL1wiICsgU0VHTUVOVCQpICsgXCIqXCIpLFxuXHRcdFBBVEhfQUJTT0xVVEUkID0gc3ViZXhwKFwiXFxcXC9cIiArIHN1YmV4cChTRUdNRU5UX05aJCArIFBBVEhfQUJFTVBUWSQpICsgXCI/XCIpLCAgLy9zaW1wbGlmaWVkXG5cdFx0UEFUSF9OT1NDSEVNRSQgPSBzdWJleHAoU0VHTUVOVF9OWl9OQyQgKyBQQVRIX0FCRU1QVFkkKSwgIC8vc2ltcGxpZmllZFxuXHRcdFBBVEhfUk9PVExFU1MkID0gc3ViZXhwKFNFR01FTlRfTlokICsgUEFUSF9BQkVNUFRZJCksICAvL3NpbXBsaWZpZWRcblx0XHRQQVRIX0VNUFRZJCA9IFwiKD8hXCIgKyBQQ0hBUiQgKyBcIilcIixcblx0XHRQQVRIJCA9IHN1YmV4cChQQVRIX0FCRU1QVFkkICsgXCJ8XCIgKyBQQVRIX0FCU09MVVRFJCArIFwifFwiICsgUEFUSF9OT1NDSEVNRSQgKyBcInxcIiArIFBBVEhfUk9PVExFU1MkICsgXCJ8XCIgKyBQQVRIX0VNUFRZJCksXG5cdFx0UVVFUlkkID0gc3ViZXhwKHN1YmV4cChQQ0hBUiQgKyBcInxcIiArIG1lcmdlKFwiW1xcXFwvXFxcXD9dXCIsIElQUklWQVRFJCQpKSArIFwiKlwiKSxcblx0XHRGUkFHTUVOVCQgPSBzdWJleHAoc3ViZXhwKFBDSEFSJCArIFwifFtcXFxcL1xcXFw/XVwiKSArIFwiKlwiKSxcblx0XHRISUVSX1BBUlQkID0gc3ViZXhwKHN1YmV4cChcIlxcXFwvXFxcXC9cIiArIEFVVEhPUklUWSQgKyBQQVRIX0FCRU1QVFkkKSArIFwifFwiICsgUEFUSF9BQlNPTFVURSQgKyBcInxcIiArIFBBVEhfUk9PVExFU1MkICsgXCJ8XCIgKyBQQVRIX0VNUFRZJCksXG5cdFx0VVJJJCA9IHN1YmV4cChTQ0hFTUUkICsgXCJcXFxcOlwiICsgSElFUl9QQVJUJCArIHN1YmV4cChcIlxcXFw/XCIgKyBRVUVSWSQpICsgXCI/XCIgKyBzdWJleHAoXCJcXFxcI1wiICsgRlJBR01FTlQkKSArIFwiP1wiKSxcblx0XHRSRUxBVElWRV9QQVJUJCA9IHN1YmV4cChzdWJleHAoXCJcXFxcL1xcXFwvXCIgKyBBVVRIT1JJVFkkICsgUEFUSF9BQkVNUFRZJCkgKyBcInxcIiArIFBBVEhfQUJTT0xVVEUkICsgXCJ8XCIgKyBQQVRIX05PU0NIRU1FJCArIFwifFwiICsgUEFUSF9FTVBUWSQpLFxuXHRcdFJFTEFUSVZFJCA9IHN1YmV4cChSRUxBVElWRV9QQVJUJCArIHN1YmV4cChcIlxcXFw/XCIgKyBRVUVSWSQpICsgXCI/XCIgKyBzdWJleHAoXCJcXFxcI1wiICsgRlJBR01FTlQkKSArIFwiP1wiKSxcblx0XHRVUklfUkVGRVJFTkNFJCA9IHN1YmV4cChVUkkkICsgXCJ8XCIgKyBSRUxBVElWRSQpLFxuXHRcdEFCU09MVVRFX1VSSSQgPSBzdWJleHAoU0NIRU1FJCArIFwiXFxcXDpcIiArIEhJRVJfUEFSVCQgKyBzdWJleHAoXCJcXFxcP1wiICsgUVVFUlkkKSArIFwiP1wiKSxcblxuXHRcdEdFTkVSSUNfUkVGJCA9IFwiXihcIiArIFNDSEVNRSQgKyBcIilcXFxcOlwiICsgc3ViZXhwKHN1YmV4cChcIlxcXFwvXFxcXC8oXCIgKyBzdWJleHAoXCIoXCIgKyBVU0VSSU5GTyQgKyBcIilAXCIpICsgXCI/KFwiICsgSE9TVCQgKyBcIilcIiArIHN1YmV4cChcIlxcXFw6KFwiICsgUE9SVCQgKyBcIilcIikgKyBcIj8pXCIpICsgXCI/KFwiICsgUEFUSF9BQkVNUFRZJCArIFwifFwiICsgUEFUSF9BQlNPTFVURSQgKyBcInxcIiArIFBBVEhfUk9PVExFU1MkICsgXCJ8XCIgKyBQQVRIX0VNUFRZJCArIFwiKVwiKSArIHN1YmV4cChcIlxcXFw/KFwiICsgUVVFUlkkICsgXCIpXCIpICsgXCI/XCIgKyBzdWJleHAoXCJcXFxcIyhcIiArIEZSQUdNRU5UJCArIFwiKVwiKSArIFwiPyRcIixcblx0XHRSRUxBVElWRV9SRUYkID0gXCJeKCl7MH1cIiArIHN1YmV4cChzdWJleHAoXCJcXFxcL1xcXFwvKFwiICsgc3ViZXhwKFwiKFwiICsgVVNFUklORk8kICsgXCIpQFwiKSArIFwiPyhcIiArIEhPU1QkICsgXCIpXCIgKyBzdWJleHAoXCJcXFxcOihcIiArIFBPUlQkICsgXCIpXCIpICsgXCI/KVwiKSArIFwiPyhcIiArIFBBVEhfQUJFTVBUWSQgKyBcInxcIiArIFBBVEhfQUJTT0xVVEUkICsgXCJ8XCIgKyBQQVRIX05PU0NIRU1FJCArIFwifFwiICsgUEFUSF9FTVBUWSQgKyBcIilcIikgKyBzdWJleHAoXCJcXFxcPyhcIiArIFFVRVJZJCArIFwiKVwiKSArIFwiP1wiICsgc3ViZXhwKFwiXFxcXCMoXCIgKyBGUkFHTUVOVCQgKyBcIilcIikgKyBcIj8kXCIsXG5cdFx0QUJTT0xVVEVfUkVGJCA9IFwiXihcIiArIFNDSEVNRSQgKyBcIilcXFxcOlwiICsgc3ViZXhwKHN1YmV4cChcIlxcXFwvXFxcXC8oXCIgKyBzdWJleHAoXCIoXCIgKyBVU0VSSU5GTyQgKyBcIilAXCIpICsgXCI/KFwiICsgSE9TVCQgKyBcIilcIiArIHN1YmV4cChcIlxcXFw6KFwiICsgUE9SVCQgKyBcIilcIikgKyBcIj8pXCIpICsgXCI/KFwiICsgUEFUSF9BQkVNUFRZJCArIFwifFwiICsgUEFUSF9BQlNPTFVURSQgKyBcInxcIiArIFBBVEhfUk9PVExFU1MkICsgXCJ8XCIgKyBQQVRIX0VNUFRZJCArIFwiKVwiKSArIHN1YmV4cChcIlxcXFw/KFwiICsgUVVFUlkkICsgXCIpXCIpICsgXCI/JFwiLFxuXHRcdFNBTUVET0NfUkVGJCA9IFwiXlwiICsgc3ViZXhwKFwiXFxcXCMoXCIgKyBGUkFHTUVOVCQgKyBcIilcIikgKyBcIj8kXCIsXG5cdFx0QVVUSE9SSVRZX1JFRiQgPSBcIl5cIiArIHN1YmV4cChcIihcIiArIFVTRVJJTkZPJCArIFwiKUBcIikgKyBcIj8oXCIgKyBIT1NUJCArIFwiKVwiICsgc3ViZXhwKFwiXFxcXDooXCIgKyBQT1JUJCArIFwiKVwiKSArIFwiPyRcIlxuXHQ7XG5cblx0cmV0dXJuIHtcblx0XHROT1RfU0NIRU1FIDogbmV3IFJlZ0V4cChtZXJnZShcIlteXVwiLCBBTFBIQSQkLCBESUdJVCQkLCBcIltcXFxcK1xcXFwtXFxcXC5dXCIpLCBcImdcIiksXG5cdFx0Tk9UX1VTRVJJTkZPIDogbmV3IFJlZ0V4cChtZXJnZShcIlteXFxcXCVcXFxcOl1cIiwgVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQpLCBcImdcIiksXG5cdFx0Tk9UX0hPU1QgOiBuZXcgUmVnRXhwKG1lcmdlKFwiW15cXFxcJVxcXFxbXFxcXF1cXFxcOl1cIiwgVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQpLCBcImdcIiksXG5cdFx0Tk9UX1BBVEggOiBuZXcgUmVnRXhwKG1lcmdlKFwiW15cXFxcJVxcXFwvXFxcXDpcXFxcQF1cIiwgVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQpLCBcImdcIiksXG5cdFx0Tk9UX1BBVEhfTk9TQ0hFTUUgOiBuZXcgUmVnRXhwKG1lcmdlKFwiW15cXFxcJVxcXFwvXFxcXEBdXCIsIFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkKSwgXCJnXCIpLFxuXHRcdE5PVF9RVUVSWSA6IG5ldyBSZWdFeHAobWVyZ2UoXCJbXlxcXFwlXVwiLCBVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCwgXCJbXFxcXDpcXFxcQFxcXFwvXFxcXD9dXCIsIElQUklWQVRFJCQpLCBcImdcIiksXG5cdFx0Tk9UX0ZSQUdNRU5UIDogbmV3IFJlZ0V4cChtZXJnZShcIlteXFxcXCVdXCIsIFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkLCBcIltcXFxcOlxcXFxAXFxcXC9cXFxcP11cIiksIFwiZ1wiKSxcblx0XHRFU0NBUEUgOiBuZXcgUmVnRXhwKG1lcmdlKFwiW15dXCIsIFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkKSwgXCJnXCIpLFxuXHRcdFVOUkVTRVJWRUQgOiBuZXcgUmVnRXhwKFVOUkVTRVJWRUQkJCwgXCJnXCIpLFxuXHRcdE9USEVSX0NIQVJTIDogbmV3IFJlZ0V4cChtZXJnZShcIlteXFxcXCVdXCIsIFVOUkVTRVJWRUQkJCwgUkVTRVJWRUQkJCksIFwiZ1wiKSxcblx0XHRQQ1RfRU5DT0RFRCA6IG5ldyBSZWdFeHAoUENUX0VOQ09ERUQkLCBcImdcIiksXG5cdFx0SVBWNEFERFJFU1MgOiBuZXcgUmVnRXhwKFwiXihcIiArIElQVjRBRERSRVNTJCArIFwiKSRcIiksXG5cdFx0SVBWNkFERFJFU1MgOiBuZXcgUmVnRXhwKFwiXlxcXFxbPyhcIiArIElQVjZBRERSRVNTJCArIFwiKVwiICsgc3ViZXhwKHN1YmV4cChcIlxcXFwlMjV8XFxcXCUoPyFcIiArIEhFWERJRyQkICsgXCJ7Mn0pXCIpICsgXCIoXCIgKyBaT05FSUQkICsgXCIpXCIpICsgXCI/XFxcXF0/JFwiKSAgLy9SRkMgNjg3NCwgd2l0aCByZWxheGVkIHBhcnNpbmcgcnVsZXNcblx0fTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYnVpbGRFeHBzKGZhbHNlKTtcbiIsImltcG9ydCB7IFVSSVJlZ0V4cHMgfSBmcm9tIFwiLi91cmlcIjtcbmltcG9ydCB7IGJ1aWxkRXhwcyB9IGZyb20gXCIuL3JlZ2V4cHMtdXJpXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGJ1aWxkRXhwcyh0cnVlKTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqIEhpZ2hlc3QgcG9zaXRpdmUgc2lnbmVkIDMyLWJpdCBmbG9hdCB2YWx1ZSAqL1xuY29uc3QgbWF4SW50ID0gMjE0NzQ4MzY0NzsgLy8gYWthLiAweDdGRkZGRkZGIG9yIDJeMzEtMVxuXG4vKiogQm9vdHN0cmluZyBwYXJhbWV0ZXJzICovXG5jb25zdCBiYXNlID0gMzY7XG5jb25zdCB0TWluID0gMTtcbmNvbnN0IHRNYXggPSAyNjtcbmNvbnN0IHNrZXcgPSAzODtcbmNvbnN0IGRhbXAgPSA3MDA7XG5jb25zdCBpbml0aWFsQmlhcyA9IDcyO1xuY29uc3QgaW5pdGlhbE4gPSAxMjg7IC8vIDB4ODBcbmNvbnN0IGRlbGltaXRlciA9ICctJzsgLy8gJ1xceDJEJ1xuXG4vKiogUmVndWxhciBleHByZXNzaW9ucyAqL1xuY29uc3QgcmVnZXhQdW55Y29kZSA9IC9eeG4tLS87XG5jb25zdCByZWdleE5vbkFTQ0lJID0gL1teXFwwLVxceDdFXS87IC8vIG5vbi1BU0NJSSBjaGFyc1xuY29uc3QgcmVnZXhTZXBhcmF0b3JzID0gL1tcXHgyRVxcdTMwMDJcXHVGRjBFXFx1RkY2MV0vZzsgLy8gUkZDIDM0OTAgc2VwYXJhdG9yc1xuXG4vKiogRXJyb3IgbWVzc2FnZXMgKi9cbmNvbnN0IGVycm9ycyA9IHtcblx0J292ZXJmbG93JzogJ092ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzJyxcblx0J25vdC1iYXNpYyc6ICdJbGxlZ2FsIGlucHV0ID49IDB4ODAgKG5vdCBhIGJhc2ljIGNvZGUgcG9pbnQpJyxcblx0J2ludmFsaWQtaW5wdXQnOiAnSW52YWxpZCBpbnB1dCdcbn07XG5cbi8qKiBDb252ZW5pZW5jZSBzaG9ydGN1dHMgKi9cbmNvbnN0IGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbjtcbmNvbnN0IGZsb29yID0gTWF0aC5mbG9vcjtcbmNvbnN0IHN0cmluZ0Zyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKipcbiAqIEEgZ2VuZXJpYyBlcnJvciB1dGlsaXR5IGZ1bmN0aW9uLlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSBlcnJvciB0eXBlLlxuICogQHJldHVybnMge0Vycm9yfSBUaHJvd3MgYSBgUmFuZ2VFcnJvcmAgd2l0aCB0aGUgYXBwbGljYWJsZSBlcnJvciBtZXNzYWdlLlxuICovXG5mdW5jdGlvbiBlcnJvcih0eXBlKSB7XG5cdHRocm93IG5ldyBSYW5nZUVycm9yKGVycm9yc1t0eXBlXSk7XG59XG5cbi8qKlxuICogQSBnZW5lcmljIGBBcnJheSNtYXBgIHV0aWxpdHkgZnVuY3Rpb24uXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIGZvciBldmVyeSBhcnJheVxuICogaXRlbS5cbiAqIEByZXR1cm5zIHtBcnJheX0gQSBuZXcgYXJyYXkgb2YgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gbWFwKGFycmF5LCBmbikge1xuXHRjb25zdCByZXN1bHQgPSBbXTtcblx0bGV0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblx0d2hpbGUgKGxlbmd0aC0tKSB7XG5cdFx0cmVzdWx0W2xlbmd0aF0gPSBmbihhcnJheVtsZW5ndGhdKTtcblx0fVxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEEgc2ltcGxlIGBBcnJheSNtYXBgLWxpa2Ugd3JhcHBlciB0byB3b3JrIHdpdGggZG9tYWluIG5hbWUgc3RyaW5ncyBvciBlbWFpbFxuICogYWRkcmVzc2VzLlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBkb21haW4gVGhlIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnlcbiAqIGNoYXJhY3Rlci5cbiAqIEByZXR1cm5zIHtBcnJheX0gQSBuZXcgc3RyaW5nIG9mIGNoYXJhY3RlcnMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrXG4gKiBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gbWFwRG9tYWluKHN0cmluZywgZm4pIHtcblx0Y29uc3QgcGFydHMgPSBzdHJpbmcuc3BsaXQoJ0AnKTtcblx0bGV0IHJlc3VsdCA9ICcnO1xuXHRpZiAocGFydHMubGVuZ3RoID4gMSkge1xuXHRcdC8vIEluIGVtYWlsIGFkZHJlc3Nlcywgb25seSB0aGUgZG9tYWluIG5hbWUgc2hvdWxkIGJlIHB1bnljb2RlZC4gTGVhdmVcblx0XHQvLyB0aGUgbG9jYWwgcGFydCAoaS5lLiBldmVyeXRoaW5nIHVwIHRvIGBAYCkgaW50YWN0LlxuXHRcdHJlc3VsdCA9IHBhcnRzWzBdICsgJ0AnO1xuXHRcdHN0cmluZyA9IHBhcnRzWzFdO1xuXHR9XG5cdC8vIEF2b2lkIGBzcGxpdChyZWdleClgIGZvciBJRTggY29tcGF0aWJpbGl0eS4gU2VlICMxNy5cblx0c3RyaW5nID0gc3RyaW5nLnJlcGxhY2UocmVnZXhTZXBhcmF0b3JzLCAnXFx4MkUnKTtcblx0Y29uc3QgbGFiZWxzID0gc3RyaW5nLnNwbGl0KCcuJyk7XG5cdGNvbnN0IGVuY29kZWQgPSBtYXAobGFiZWxzLCBmbikuam9pbignLicpO1xuXHRyZXR1cm4gcmVzdWx0ICsgZW5jb2RlZDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG4gKiBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4gV2hpbGUgSmF2YVNjcmlwdCB1c2VzIFVDUy0yIGludGVybmFsbHksXG4gKiB0aGlzIGZ1bmN0aW9uIHdpbGwgY29udmVydCBhIHBhaXIgb2Ygc3Vycm9nYXRlIGhhbHZlcyAoZWFjaCBvZiB3aGljaFxuICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG4gKiBtYXRjaGluZyBVVEYtMTYuXG4gKiBAc2VlIGBwdW55Y29kZS51Y3MyLmVuY29kZWBcbiAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuICogQG1lbWJlck9mIHB1bnljb2RlLnVjczJcbiAqIEBuYW1lIGRlY29kZVxuICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cbiAqIEByZXR1cm5zIHtBcnJheX0gVGhlIG5ldyBhcnJheSBvZiBjb2RlIHBvaW50cy5cbiAqL1xuZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcblx0Y29uc3Qgb3V0cHV0ID0gW107XG5cdGxldCBjb3VudGVyID0gMDtcblx0Y29uc3QgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcblx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRjb25zdCB2YWx1ZSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0aWYgKHZhbHVlID49IDB4RDgwMCAmJiB2YWx1ZSA8PSAweERCRkYgJiYgY291bnRlciA8IGxlbmd0aCkge1xuXHRcdFx0Ly8gSXQncyBhIGhpZ2ggc3Vycm9nYXRlLCBhbmQgdGhlcmUgaXMgYSBuZXh0IGNoYXJhY3Rlci5cblx0XHRcdGNvbnN0IGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICgoZXh0cmEgJiAweEZDMDApID09IDB4REMwMCkgeyAvLyBMb3cgc3Vycm9nYXRlLlxuXHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gSXQncyBhbiB1bm1hdGNoZWQgc3Vycm9nYXRlOyBvbmx5IGFwcGVuZCB0aGlzIGNvZGUgdW5pdCwgaW4gY2FzZSB0aGVcblx0XHRcdFx0Ly8gbmV4dCBjb2RlIHVuaXQgaXMgdGhlIGhpZ2ggc3Vycm9nYXRlIG9mIGEgc3Vycm9nYXRlIHBhaXIuXG5cdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdFx0Y291bnRlci0tO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRvdXRwdXQucHVzaCh2YWx1ZSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvdXRwdXQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0cmluZyBiYXNlZCBvbiBhbiBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG4gKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuICogQG5hbWUgZW5jb2RlXG4gKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuICogQHJldHVybnMge1N0cmluZ30gVGhlIG5ldyBVbmljb2RlIHN0cmluZyAoVUNTLTIpLlxuICovXG5jb25zdCB1Y3MyZW5jb2RlID0gYXJyYXkgPT4gU3RyaW5nLmZyb21Db2RlUG9pbnQoLi4uYXJyYXkpO1xuXG4vKipcbiAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cbiAqIEBzZWUgYGRpZ2l0VG9CYXNpYygpYFxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cbiAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludCAoZm9yIHVzZSBpblxuICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpbiB0aGUgcmFuZ2UgYDBgIHRvIGBiYXNlIC0gMWAsIG9yIGBiYXNlYCBpZlxuICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXG4gKi9cbmNvbnN0IGJhc2ljVG9EaWdpdCA9IGZ1bmN0aW9uKGNvZGVQb2ludCkge1xuXHRpZiAoY29kZVBvaW50IC0gMHgzMCA8IDB4MEEpIHtcblx0XHRyZXR1cm4gY29kZVBvaW50IC0gMHgxNjtcblx0fVxuXHRpZiAoY29kZVBvaW50IC0gMHg0MSA8IDB4MUEpIHtcblx0XHRyZXR1cm4gY29kZVBvaW50IC0gMHg0MTtcblx0fVxuXHRpZiAoY29kZVBvaW50IC0gMHg2MSA8IDB4MUEpIHtcblx0XHRyZXR1cm4gY29kZVBvaW50IC0gMHg2MTtcblx0fVxuXHRyZXR1cm4gYmFzZTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuICogQHNlZSBgYmFzaWNUb0RpZ2l0KClgXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtOdW1iZXJ9IGRpZ2l0IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludC5cbiAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBiYXNpYyBjb2RlIHBvaW50IHdob3NlIHZhbHVlICh3aGVuIHVzZWQgZm9yXG4gKiByZXByZXNlbnRpbmcgaW50ZWdlcnMpIGlzIGBkaWdpdGAsIHdoaWNoIG5lZWRzIHRvIGJlIGluIHRoZSByYW5nZVxuICogYDBgIHRvIGBiYXNlIC0gMWAuIElmIGBmbGFnYCBpcyBub24temVybywgdGhlIHVwcGVyY2FzZSBmb3JtIGlzXG4gKiB1c2VkOyBlbHNlLCB0aGUgbG93ZXJjYXNlIGZvcm0gaXMgdXNlZC4gVGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZFxuICogaWYgYGZsYWdgIGlzIG5vbi16ZXJvIGFuZCBgZGlnaXRgIGhhcyBubyB1cHBlcmNhc2UgZm9ybS5cbiAqL1xuY29uc3QgZGlnaXRUb0Jhc2ljID0gZnVuY3Rpb24oZGlnaXQsIGZsYWcpIHtcblx0Ly8gIDAuLjI1IG1hcCB0byBBU0NJSSBhLi56IG9yIEEuLlpcblx0Ly8gMjYuLjM1IG1hcCB0byBBU0NJSSAwLi45XG5cdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG59O1xuXG4vKipcbiAqIEJpYXMgYWRhcHRhdGlvbiBmdW5jdGlvbiBhcyBwZXIgc2VjdGlvbiAzLjQgb2YgUkZDIDM0OTIuXG4gKiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzQ5MiNzZWN0aW9uLTMuNFxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgYWRhcHQgPSBmdW5jdGlvbihkZWx0YSwgbnVtUG9pbnRzLCBmaXJzdFRpbWUpIHtcblx0bGV0IGsgPSAwO1xuXHRkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xuXHRkZWx0YSArPSBmbG9vcihkZWx0YSAvIG51bVBvaW50cyk7XG5cdGZvciAoLyogbm8gaW5pdGlhbGl6YXRpb24gKi87IGRlbHRhID4gYmFzZU1pbnVzVE1pbiAqIHRNYXggPj4gMTsgayArPSBiYXNlKSB7XG5cdFx0ZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xuXHR9XG5cdHJldHVybiBmbG9vcihrICsgKGJhc2VNaW51c1RNaW4gKyAxKSAqIGRlbHRhIC8gKGRlbHRhICsgc2tldykpO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMgdG8gYSBzdHJpbmcgb2YgVW5pY29kZVxuICogc3ltYm9scy5cbiAqIEBtZW1iZXJPZiBwdW55Y29kZVxuICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzLlxuICovXG5jb25zdCBkZWNvZGUgPSBmdW5jdGlvbihpbnB1dCkge1xuXHQvLyBEb24ndCB1c2UgVUNTLTIuXG5cdGNvbnN0IG91dHB1dCA9IFtdO1xuXHRjb25zdCBpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aDtcblx0bGV0IGkgPSAwO1xuXHRsZXQgbiA9IGluaXRpYWxOO1xuXHRsZXQgYmlhcyA9IGluaXRpYWxCaWFzO1xuXG5cdC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHM6IGxldCBgYmFzaWNgIGJlIHRoZSBudW1iZXIgb2YgaW5wdXQgY29kZVxuXHQvLyBwb2ludHMgYmVmb3JlIHRoZSBsYXN0IGRlbGltaXRlciwgb3IgYDBgIGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gY29weVxuXHQvLyB0aGUgZmlyc3QgYmFzaWMgY29kZSBwb2ludHMgdG8gdGhlIG91dHB1dC5cblxuXHRsZXQgYmFzaWMgPSBpbnB1dC5sYXN0SW5kZXhPZihkZWxpbWl0ZXIpO1xuXHRpZiAoYmFzaWMgPCAwKSB7XG5cdFx0YmFzaWMgPSAwO1xuXHR9XG5cblx0Zm9yIChsZXQgaiA9IDA7IGogPCBiYXNpYzsgKytqKSB7XG5cdFx0Ly8gaWYgaXQncyBub3QgYSBiYXNpYyBjb2RlIHBvaW50XG5cdFx0aWYgKGlucHV0LmNoYXJDb2RlQXQoaikgPj0gMHg4MCkge1xuXHRcdFx0ZXJyb3IoJ25vdC1iYXNpYycpO1xuXHRcdH1cblx0XHRvdXRwdXQucHVzaChpbnB1dC5jaGFyQ29kZUF0KGopKTtcblx0fVxuXG5cdC8vIE1haW4gZGVjb2RpbmcgbG9vcDogc3RhcnQganVzdCBhZnRlciB0aGUgbGFzdCBkZWxpbWl0ZXIgaWYgYW55IGJhc2ljIGNvZGVcblx0Ly8gcG9pbnRzIHdlcmUgY29waWVkOyBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG90aGVyd2lzZS5cblxuXHRmb3IgKGxldCBpbmRleCA9IGJhc2ljID4gMCA/IGJhc2ljICsgMSA6IDA7IGluZGV4IDwgaW5wdXRMZW5ndGg7IC8qIG5vIGZpbmFsIGV4cHJlc3Npb24gKi8pIHtcblxuXHRcdC8vIGBpbmRleGAgaXMgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSBjb25zdW1lZC5cblx0XHQvLyBEZWNvZGUgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlciBpbnRvIGBkZWx0YWAsXG5cdFx0Ly8gd2hpY2ggZ2V0cyBhZGRlZCB0byBgaWAuIFRoZSBvdmVyZmxvdyBjaGVja2luZyBpcyBlYXNpZXJcblx0XHQvLyBpZiB3ZSBpbmNyZWFzZSBgaWAgYXMgd2UgZ28sIHRoZW4gc3VidHJhY3Qgb2ZmIGl0cyBzdGFydGluZ1xuXHRcdC8vIHZhbHVlIGF0IHRoZSBlbmQgdG8gb2J0YWluIGBkZWx0YWAuXG5cdFx0bGV0IG9sZGkgPSBpO1xuXHRcdGZvciAobGV0IHcgPSAxLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblxuXHRcdFx0aWYgKGluZGV4ID49IGlucHV0TGVuZ3RoKSB7XG5cdFx0XHRcdGVycm9yKCdpbnZhbGlkLWlucHV0Jyk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGRpZ2l0ID0gYmFzaWNUb0RpZ2l0KGlucHV0LmNoYXJDb2RlQXQoaW5kZXgrKykpO1xuXG5cdFx0XHRpZiAoZGlnaXQgPj0gYmFzZSB8fCBkaWdpdCA+IGZsb29yKChtYXhJbnQgLSBpKSAvIHcpKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRpICs9IGRpZ2l0ICogdztcblx0XHRcdGNvbnN0IHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXG5cdFx0XHRpZiAoZGlnaXQgPCB0KSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRpZiAodyA+IGZsb29yKG1heEludCAvIGJhc2VNaW51c1QpKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHR3ICo9IGJhc2VNaW51c1Q7XG5cblx0XHR9XG5cblx0XHRjb25zdCBvdXQgPSBvdXRwdXQubGVuZ3RoICsgMTtcblx0XHRiaWFzID0gYWRhcHQoaSAtIG9sZGksIG91dCwgb2xkaSA9PSAwKTtcblxuXHRcdC8vIGBpYCB3YXMgc3VwcG9zZWQgdG8gd3JhcCBhcm91bmQgZnJvbSBgb3V0YCB0byBgMGAsXG5cdFx0Ly8gaW5jcmVtZW50aW5nIGBuYCBlYWNoIHRpbWUsIHNvIHdlJ2xsIGZpeCB0aGF0IG5vdzpcblx0XHRpZiAoZmxvb3IoaSAvIG91dCkgPiBtYXhJbnQgLSBuKSB7XG5cdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHR9XG5cblx0XHRuICs9IGZsb29yKGkgLyBvdXQpO1xuXHRcdGkgJT0gb3V0O1xuXG5cdFx0Ly8gSW5zZXJ0IGBuYCBhdCBwb3NpdGlvbiBgaWAgb2YgdGhlIG91dHB1dC5cblx0XHRvdXRwdXQuc3BsaWNlKGkrKywgMCwgbik7XG5cblx0fVxuXG5cdHJldHVybiBTdHJpbmcuZnJvbUNvZGVQb2ludCguLi5vdXRwdXQpO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMgKGUuZy4gYSBkb21haW4gbmFtZSBsYWJlbCkgdG8gYVxuICogUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cbiAqIEBtZW1iZXJPZiBwdW55Y29kZVxuICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzLlxuICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuICovXG5jb25zdCBlbmNvZGUgPSBmdW5jdGlvbihpbnB1dCkge1xuXHRjb25zdCBvdXRwdXQgPSBbXTtcblxuXHQvLyBDb252ZXJ0IHRoZSBpbnB1dCBpbiBVQ1MtMiB0byBhbiBhcnJheSBvZiBVbmljb2RlIGNvZGUgcG9pbnRzLlxuXHRpbnB1dCA9IHVjczJkZWNvZGUoaW5wdXQpO1xuXG5cdC8vIENhY2hlIHRoZSBsZW5ndGguXG5cdGxldCBpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aDtcblxuXHQvLyBJbml0aWFsaXplIHRoZSBzdGF0ZS5cblx0bGV0IG4gPSBpbml0aWFsTjtcblx0bGV0IGRlbHRhID0gMDtcblx0bGV0IGJpYXMgPSBpbml0aWFsQmlhcztcblxuXHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzLlxuXHRmb3IgKGNvbnN0IGN1cnJlbnRWYWx1ZSBvZiBpbnB1dCkge1xuXHRcdGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XG5cdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoY3VycmVudFZhbHVlKSk7XG5cdFx0fVxuXHR9XG5cblx0bGV0IGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcblx0bGV0IGhhbmRsZWRDUENvdW50ID0gYmFzaWNMZW5ndGg7XG5cblx0Ly8gYGhhbmRsZWRDUENvdW50YCBpcyB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIHRoYXQgaGF2ZSBiZWVuIGhhbmRsZWQ7XG5cdC8vIGBiYXNpY0xlbmd0aGAgaXMgdGhlIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cblxuXHQvLyBGaW5pc2ggdGhlIGJhc2ljIHN0cmluZyB3aXRoIGEgZGVsaW1pdGVyIHVubGVzcyBpdCdzIGVtcHR5LlxuXHRpZiAoYmFzaWNMZW5ndGgpIHtcblx0XHRvdXRwdXQucHVzaChkZWxpbWl0ZXIpO1xuXHR9XG5cblx0Ly8gTWFpbiBlbmNvZGluZyBsb29wOlxuXHR3aGlsZSAoaGFuZGxlZENQQ291bnQgPCBpbnB1dExlbmd0aCkge1xuXG5cdFx0Ly8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dFxuXHRcdC8vIGxhcmdlciBvbmU6XG5cdFx0bGV0IG0gPSBtYXhJbnQ7XG5cdFx0Zm9yIChjb25zdCBjdXJyZW50VmFsdWUgb2YgaW5wdXQpIHtcblx0XHRcdGlmIChjdXJyZW50VmFsdWUgPj0gbiAmJiBjdXJyZW50VmFsdWUgPCBtKSB7XG5cdFx0XHRcdG0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LFxuXHRcdC8vIGJ1dCBndWFyZCBhZ2FpbnN0IG92ZXJmbG93LlxuXHRcdGNvbnN0IGhhbmRsZWRDUENvdW50UGx1c09uZSA9IGhhbmRsZWRDUENvdW50ICsgMTtcblx0XHRpZiAobSAtIG4gPiBmbG9vcigobWF4SW50IC0gZGVsdGEpIC8gaGFuZGxlZENQQ291bnRQbHVzT25lKSkge1xuXHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0fVxuXG5cdFx0ZGVsdGEgKz0gKG0gLSBuKSAqIGhhbmRsZWRDUENvdW50UGx1c09uZTtcblx0XHRuID0gbTtcblxuXHRcdGZvciAoY29uc3QgY3VycmVudFZhbHVlIG9mIGlucHV0KSB7XG5cdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgbiAmJiArK2RlbHRhID4gbWF4SW50KSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA9PSBuKSB7XG5cdFx0XHRcdC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyLlxuXHRcdFx0XHRsZXQgcSA9IGRlbHRhO1xuXHRcdFx0XHRmb3IgKGxldCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblx0XHRcdFx0XHRjb25zdCB0ID0gayA8PSBiaWFzID8gdE1pbiA6IChrID49IGJpYXMgKyB0TWF4ID8gdE1heCA6IGsgLSBiaWFzKTtcblx0XHRcdFx0XHRpZiAocSA8IHQpIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBxTWludXNUID0gcSAtIHQ7XG5cdFx0XHRcdFx0Y29uc3QgYmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRcdG91dHB1dC5wdXNoKFxuXHRcdFx0XHRcdFx0c3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QsIDApKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0cSA9IGZsb29yKHFNaW51c1QgLyBiYXNlTWludXNUKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWMocSwgMCkpKTtcblx0XHRcdFx0YmlhcyA9IGFkYXB0KGRlbHRhLCBoYW5kbGVkQ1BDb3VudFBsdXNPbmUsIGhhbmRsZWRDUENvdW50ID09IGJhc2ljTGVuZ3RoKTtcblx0XHRcdFx0ZGVsdGEgPSAwO1xuXHRcdFx0XHQrK2hhbmRsZWRDUENvdW50O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdCsrZGVsdGE7XG5cdFx0KytuO1xuXG5cdH1cblx0cmV0dXJuIG91dHB1dC5qb2luKCcnKTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBQdW55Y29kZSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZG9tYWluIG5hbWUgb3IgYW4gZW1haWwgYWRkcmVzc1xuICogdG8gVW5pY29kZS4gT25seSB0aGUgUHVueWNvZGVkIHBhcnRzIG9mIHRoZSBpbnB1dCB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLlxuICogaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgb24gYSBzdHJpbmcgdGhhdCBoYXMgYWxyZWFkeSBiZWVuXG4gKiBjb252ZXJ0ZWQgdG8gVW5pY29kZS5cbiAqIEBtZW1iZXJPZiBwdW55Y29kZVxuICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZWQgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0b1xuICogY29udmVydCB0byBVbmljb2RlLlxuICogQHJldHVybnMge1N0cmluZ30gVGhlIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFB1bnljb2RlXG4gKiBzdHJpbmcuXG4gKi9cbmNvbnN0IHRvVW5pY29kZSA9IGZ1bmN0aW9uKGlucHV0KSB7XG5cdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdHJldHVybiByZWdleFB1bnljb2RlLnRlc3Qoc3RyaW5nKVxuXHRcdFx0PyBkZWNvZGUoc3RyaW5nLnNsaWNlKDQpLnRvTG93ZXJDYXNlKCkpXG5cdFx0XHQ6IHN0cmluZztcblx0fSk7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgVW5pY29kZSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZG9tYWluIG5hbWUgb3IgYW4gZW1haWwgYWRkcmVzcyB0b1xuICogUHVueWNvZGUuIE9ubHkgdGhlIG5vbi1BU0NJSSBwYXJ0cyBvZiB0aGUgZG9tYWluIG5hbWUgd2lsbCBiZSBjb252ZXJ0ZWQsXG4gKiBpLmUuIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCdzIGFscmVhZHkgaW5cbiAqIEFTQ0lJLlxuICogQG1lbWJlck9mIHB1bnljb2RlXG4gKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MgdG8gY29udmVydCwgYXMgYVxuICogVW5pY29kZSBzdHJpbmcuXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgUHVueWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRvbWFpbiBuYW1lIG9yXG4gKiBlbWFpbCBhZGRyZXNzLlxuICovXG5jb25zdCB0b0FTQ0lJID0gZnVuY3Rpb24oaW5wdXQpIHtcblx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHJlZ2V4Tm9uQVNDSUkudGVzdChzdHJpbmcpXG5cdFx0XHQ/ICd4bi0tJyArIGVuY29kZShzdHJpbmcpXG5cdFx0XHQ6IHN0cmluZztcblx0fSk7XG59O1xuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLyoqIERlZmluZSB0aGUgcHVibGljIEFQSSAqL1xuY29uc3QgcHVueWNvZGUgPSB7XG5cdC8qKlxuXHQgKiBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgUHVueWNvZGUuanMgdmVyc2lvbiBudW1iZXIuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAdHlwZSBTdHJpbmdcblx0ICovXG5cdCd2ZXJzaW9uJzogJzIuMS4wJyxcblx0LyoqXG5cdCAqIEFuIG9iamVjdCBvZiBtZXRob2RzIHRvIGNvbnZlcnQgZnJvbSBKYXZhU2NyaXB0J3MgaW50ZXJuYWwgY2hhcmFjdGVyXG5cdCAqIHJlcHJlc2VudGF0aW9uIChVQ1MtMikgdG8gVW5pY29kZSBjb2RlIHBvaW50cywgYW5kIGJhY2suXG5cdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHR5cGUgT2JqZWN0XG5cdCAqL1xuXHQndWNzMic6IHtcblx0XHQnZGVjb2RlJzogdWNzMmRlY29kZSxcblx0XHQnZW5jb2RlJzogdWNzMmVuY29kZVxuXHR9LFxuXHQnZGVjb2RlJzogZGVjb2RlLFxuXHQnZW5jb2RlJzogZW5jb2RlLFxuXHQndG9BU0NJSSc6IHRvQVNDSUksXG5cdCd0b1VuaWNvZGUnOiB0b1VuaWNvZGVcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHB1bnljb2RlO1xuIiwiLyoqXG4gKiBVUkkuanNcbiAqXG4gKiBAZmlsZW92ZXJ2aWV3IEFuIFJGQyAzOTg2IGNvbXBsaWFudCwgc2NoZW1lIGV4dGVuZGFibGUgVVJJIHBhcnNpbmcvdmFsaWRhdGluZy9yZXNvbHZpbmcgbGlicmFyeSBmb3IgSmF2YVNjcmlwdC5cbiAqIEBhdXRob3IgPGEgaHJlZj1cIm1haWx0bzpnYXJ5LmNvdXJ0QGdtYWlsLmNvbVwiPkdhcnkgQ291cnQ8L2E+XG4gKiBAc2VlIGh0dHA6Ly9naXRodWIuY29tL2dhcnljb3VydC91cmktanNcbiAqL1xuXG4vKipcbiAqIENvcHlyaWdodCAyMDExIEdhcnkgQ291cnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlXG4gKiBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZlxuICogICAgICAgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICpcbiAqICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0XG4gKiAgICAgICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFsc1xuICogICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR0FSWSBDT1VSVCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRURcbiAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkRcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBHQVJZIENPVVJUIE9SXG4gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUlxuICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUlxuICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElOR1xuICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGXG4gKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqXG4gKiBUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24gYXJlIHRob3NlIG9mIHRoZVxuICogYXV0aG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcgb2ZmaWNpYWwgcG9saWNpZXMsIGVpdGhlciBleHByZXNzZWRcbiAqIG9yIGltcGxpZWQsIG9mIEdhcnkgQ291cnQuXG4gKi9cblxuaW1wb3J0IFVSSV9QUk9UT0NPTCBmcm9tIFwiLi9yZWdleHBzLXVyaVwiO1xuaW1wb3J0IElSSV9QUk9UT0NPTCBmcm9tIFwiLi9yZWdleHBzLWlyaVwiO1xuaW1wb3J0IHB1bnljb2RlIGZyb20gXCJwdW55Y29kZVwiO1xuaW1wb3J0IHsgdG9VcHBlckNhc2UsIHR5cGVPZiwgYXNzaWduIH0gZnJvbSBcIi4vdXRpbFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFVSSUNvbXBvbmVudHMge1xuXHRzY2hlbWU/OnN0cmluZztcblx0dXNlcmluZm8/OnN0cmluZztcblx0aG9zdD86c3RyaW5nO1xuXHRwb3J0PzpudW1iZXJ8c3RyaW5nO1xuXHRwYXRoPzpzdHJpbmc7XG5cdHF1ZXJ5PzpzdHJpbmc7XG5cdGZyYWdtZW50PzpzdHJpbmc7XG5cdHJlZmVyZW5jZT86c3RyaW5nO1xuXHRlcnJvcj86c3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVSSU9wdGlvbnMge1xuXHRzY2hlbWU/OnN0cmluZztcblx0cmVmZXJlbmNlPzpzdHJpbmc7XG5cdHRvbGVyYW50Pzpib29sZWFuO1xuXHRhYnNvbHV0ZVBhdGg/OmJvb2xlYW47XG5cdGlyaT86Ym9vbGVhbjtcblx0dW5pY29kZVN1cHBvcnQ/OmJvb2xlYW47XG5cdGRvbWFpbkhvc3Q/OmJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVVJJU2NoZW1lSGFuZGxlcjxDb21wb25lbnRzIGV4dGVuZHMgVVJJQ29tcG9uZW50cyA9IFVSSUNvbXBvbmVudHMsIE9wdGlvbnMgZXh0ZW5kcyBVUklPcHRpb25zID0gVVJJT3B0aW9ucywgUGFyZW50Q29tcG9uZW50cyBleHRlbmRzIFVSSUNvbXBvbmVudHMgPSBVUklDb21wb25lbnRzPiB7XG5cdHNjaGVtZTpzdHJpbmc7XG5cdHBhcnNlKGNvbXBvbmVudHM6UGFyZW50Q29tcG9uZW50cywgb3B0aW9uczpPcHRpb25zKTpDb21wb25lbnRzO1xuXHRzZXJpYWxpemUoY29tcG9uZW50czpDb21wb25lbnRzLCBvcHRpb25zOk9wdGlvbnMpOlBhcmVudENvbXBvbmVudHM7XG5cdHVuaWNvZGVTdXBwb3J0Pzpib29sZWFuO1xuXHRkb21haW5Ib3N0Pzpib29sZWFuO1xuXHRhYnNvbHV0ZVBhdGg/OmJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVVJJUmVnRXhwcyB7XG5cdE5PVF9TQ0hFTUUgOiBSZWdFeHAsXG5cdE5PVF9VU0VSSU5GTyA6IFJlZ0V4cCxcblx0Tk9UX0hPU1QgOiBSZWdFeHAsXG5cdE5PVF9QQVRIIDogUmVnRXhwLFxuXHROT1RfUEFUSF9OT1NDSEVNRSA6IFJlZ0V4cCxcblx0Tk9UX1FVRVJZIDogUmVnRXhwLFxuXHROT1RfRlJBR01FTlQgOiBSZWdFeHAsXG5cdEVTQ0FQRSA6IFJlZ0V4cCxcblx0VU5SRVNFUlZFRCA6IFJlZ0V4cCxcblx0T1RIRVJfQ0hBUlMgOiBSZWdFeHAsXG5cdFBDVF9FTkNPREVEIDogUmVnRXhwLFxuXHRJUFY0QUREUkVTUyA6IFJlZ0V4cCxcblx0SVBWNkFERFJFU1MgOiBSZWdFeHAsXG59XG5cbmV4cG9ydCBjb25zdCBTQ0hFTUVTOntbc2NoZW1lOnN0cmluZ106VVJJU2NoZW1lSGFuZGxlcn0gPSB7fTtcblxuZXhwb3J0IGZ1bmN0aW9uIHBjdEVuY0NoYXIoY2hyOnN0cmluZyk6c3RyaW5nIHtcblx0Y29uc3QgYyA9IGNoci5jaGFyQ29kZUF0KDApO1xuXHRsZXQgZTpzdHJpbmc7XG5cblx0aWYgKGMgPCAxNikgZSA9IFwiJTBcIiArIGMudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG5cdGVsc2UgaWYgKGMgPCAxMjgpIGUgPSBcIiVcIiArIGMudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG5cdGVsc2UgaWYgKGMgPCAyMDQ4KSBlID0gXCIlXCIgKyAoKGMgPj4gNikgfCAxOTIpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpICsgXCIlXCIgKyAoKGMgJiA2MykgfCAxMjgpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuXHRlbHNlIGUgPSBcIiVcIiArICgoYyA+PiAxMikgfCAyMjQpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpICsgXCIlXCIgKyAoKChjID4+IDYpICYgNjMpIHwgMTI4KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSArIFwiJVwiICsgKChjICYgNjMpIHwgMTI4KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcblxuXHRyZXR1cm4gZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBjdERlY0NoYXJzKHN0cjpzdHJpbmcpOnN0cmluZyB7XG5cdGxldCBuZXdTdHIgPSBcIlwiO1xuXHRsZXQgaSA9IDA7XG5cdGNvbnN0IGlsID0gc3RyLmxlbmd0aDtcblxuXHR3aGlsZSAoaSA8IGlsKSB7XG5cdFx0Y29uc3QgYyA9IHBhcnNlSW50KHN0ci5zdWJzdHIoaSArIDEsIDIpLCAxNik7XG5cblx0XHRpZiAoYyA8IDEyOCkge1xuXHRcdFx0bmV3U3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYyk7XG5cdFx0XHRpICs9IDM7XG5cdFx0fVxuXHRcdGVsc2UgaWYgKGMgPj0gMTk0ICYmIGMgPCAyMjQpIHtcblx0XHRcdGlmICgoaWwgLSBpKSA+PSA2KSB7XG5cdFx0XHRcdGNvbnN0IGMyID0gcGFyc2VJbnQoc3RyLnN1YnN0cihpICsgNCwgMiksIDE2KTtcblx0XHRcdFx0bmV3U3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKChjICYgMzEpIDw8IDYpIHwgKGMyICYgNjMpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG5ld1N0ciArPSBzdHIuc3Vic3RyKGksIDYpO1xuXHRcdFx0fVxuXHRcdFx0aSArPSA2O1xuXHRcdH1cblx0XHRlbHNlIGlmIChjID49IDIyNCkge1xuXHRcdFx0aWYgKChpbCAtIGkpID49IDkpIHtcblx0XHRcdFx0Y29uc3QgYzIgPSBwYXJzZUludChzdHIuc3Vic3RyKGkgKyA0LCAyKSwgMTYpO1xuXHRcdFx0XHRjb25zdCBjMyA9IHBhcnNlSW50KHN0ci5zdWJzdHIoaSArIDcsIDIpLCAxNik7XG5cdFx0XHRcdG5ld1N0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCgoYyAmIDE1KSA8PCAxMikgfCAoKGMyICYgNjMpIDw8IDYpIHwgKGMzICYgNjMpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG5ld1N0ciArPSBzdHIuc3Vic3RyKGksIDkpO1xuXHRcdFx0fVxuXHRcdFx0aSArPSA5O1xuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdG5ld1N0ciArPSBzdHIuc3Vic3RyKGksIDMpO1xuXHRcdFx0aSArPSAzO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBuZXdTdHI7XG59XG5cbmZ1bmN0aW9uIF9ub3JtYWxpemVDb21wb25lbnRFbmNvZGluZyhjb21wb25lbnRzOlVSSUNvbXBvbmVudHMsIHByb3RvY29sOlVSSVJlZ0V4cHMpIHtcblx0ZnVuY3Rpb24gZGVjb2RlVW5yZXNlcnZlZChzdHI6c3RyaW5nKTpzdHJpbmcge1xuXHRcdGNvbnN0IGRlY1N0ciA9IHBjdERlY0NoYXJzKHN0cik7XG5cdFx0cmV0dXJuICghZGVjU3RyLm1hdGNoKHByb3RvY29sLlVOUkVTRVJWRUQpID8gc3RyIDogZGVjU3RyKTtcblx0fVxuXG5cdGlmIChjb21wb25lbnRzLnNjaGVtZSkgY29tcG9uZW50cy5zY2hlbWUgPSBTdHJpbmcoY29tcG9uZW50cy5zY2hlbWUpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIGRlY29kZVVucmVzZXJ2ZWQpLnRvTG93ZXJDYXNlKCkucmVwbGFjZShwcm90b2NvbC5OT1RfU0NIRU1FLCBcIlwiKTtcblx0aWYgKGNvbXBvbmVudHMudXNlcmluZm8gIT09IHVuZGVmaW5lZCkgY29tcG9uZW50cy51c2VyaW5mbyA9IFN0cmluZyhjb21wb25lbnRzLnVzZXJpbmZvKS5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCBkZWNvZGVVbnJlc2VydmVkKS5yZXBsYWNlKHByb3RvY29sLk5PVF9VU0VSSU5GTywgcGN0RW5jQ2hhcikucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgdG9VcHBlckNhc2UpO1xuXHRpZiAoY29tcG9uZW50cy5ob3N0ICE9PSB1bmRlZmluZWQpIGNvbXBvbmVudHMuaG9zdCA9IFN0cmluZyhjb21wb25lbnRzLmhvc3QpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIGRlY29kZVVucmVzZXJ2ZWQpLnRvTG93ZXJDYXNlKCkucmVwbGFjZShwcm90b2NvbC5OT1RfSE9TVCwgcGN0RW5jQ2hhcikucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgdG9VcHBlckNhc2UpO1xuXHRpZiAoY29tcG9uZW50cy5wYXRoICE9PSB1bmRlZmluZWQpIGNvbXBvbmVudHMucGF0aCA9IFN0cmluZyhjb21wb25lbnRzLnBhdGgpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIGRlY29kZVVucmVzZXJ2ZWQpLnJlcGxhY2UoKGNvbXBvbmVudHMuc2NoZW1lID8gcHJvdG9jb2wuTk9UX1BBVEggOiBwcm90b2NvbC5OT1RfUEFUSF9OT1NDSEVNRSksIHBjdEVuY0NoYXIpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIHRvVXBwZXJDYXNlKTtcblx0aWYgKGNvbXBvbmVudHMucXVlcnkgIT09IHVuZGVmaW5lZCkgY29tcG9uZW50cy5xdWVyeSA9IFN0cmluZyhjb21wb25lbnRzLnF1ZXJ5KS5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCBkZWNvZGVVbnJlc2VydmVkKS5yZXBsYWNlKHByb3RvY29sLk5PVF9RVUVSWSwgcGN0RW5jQ2hhcikucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgdG9VcHBlckNhc2UpO1xuXHRpZiAoY29tcG9uZW50cy5mcmFnbWVudCAhPT0gdW5kZWZpbmVkKSBjb21wb25lbnRzLmZyYWdtZW50ID0gU3RyaW5nKGNvbXBvbmVudHMuZnJhZ21lbnQpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIGRlY29kZVVucmVzZXJ2ZWQpLnJlcGxhY2UocHJvdG9jb2wuTk9UX0ZSQUdNRU5ULCBwY3RFbmNDaGFyKS5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCB0b1VwcGVyQ2FzZSk7XG5cblx0cmV0dXJuIGNvbXBvbmVudHM7XG59O1xuXG5mdW5jdGlvbiBfc3RyaXBMZWFkaW5nWmVyb3Moc3RyOnN0cmluZyk6c3RyaW5nIHtcblx0cmV0dXJuIHN0ci5yZXBsYWNlKC9eMCooLiopLywgXCIkMVwiKSB8fCBcIjBcIjtcbn1cblxuZnVuY3Rpb24gX25vcm1hbGl6ZUlQdjQoaG9zdDpzdHJpbmcsIHByb3RvY29sOlVSSVJlZ0V4cHMpOnN0cmluZyB7XG5cdGNvbnN0IG1hdGNoZXMgPSBob3N0Lm1hdGNoKHByb3RvY29sLklQVjRBRERSRVNTKSB8fCBbXTtcblx0Y29uc3QgWywgYWRkcmVzc10gPSBtYXRjaGVzO1xuXHRcblx0aWYgKGFkZHJlc3MpIHtcblx0XHRyZXR1cm4gYWRkcmVzcy5zcGxpdChcIi5cIikubWFwKF9zdHJpcExlYWRpbmdaZXJvcykuam9pbihcIi5cIik7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGhvc3Q7XG5cdH1cbn1cblxuZnVuY3Rpb24gX25vcm1hbGl6ZUlQdjYoaG9zdDpzdHJpbmcsIHByb3RvY29sOlVSSVJlZ0V4cHMpOnN0cmluZyB7XG5cdGNvbnN0IG1hdGNoZXMgPSBob3N0Lm1hdGNoKHByb3RvY29sLklQVjZBRERSRVNTKSB8fCBbXTtcblx0Y29uc3QgWywgYWRkcmVzcywgem9uZV0gPSBtYXRjaGVzO1xuXG5cdGlmIChhZGRyZXNzKSB7XG5cdFx0Y29uc3QgW2xhc3QsIGZpcnN0XSA9IGFkZHJlc3MudG9Mb3dlckNhc2UoKS5zcGxpdCgnOjonKS5yZXZlcnNlKCk7XG5cdFx0Y29uc3QgZmlyc3RGaWVsZHMgPSBmaXJzdCA/IGZpcnN0LnNwbGl0KFwiOlwiKS5tYXAoX3N0cmlwTGVhZGluZ1plcm9zKSA6IFtdO1xuXHRcdGNvbnN0IGxhc3RGaWVsZHMgPSBsYXN0LnNwbGl0KFwiOlwiKS5tYXAoX3N0cmlwTGVhZGluZ1plcm9zKTtcblx0XHRjb25zdCBpc0xhc3RGaWVsZElQdjRBZGRyZXNzID0gcHJvdG9jb2wuSVBWNEFERFJFU1MudGVzdChsYXN0RmllbGRzW2xhc3RGaWVsZHMubGVuZ3RoIC0gMV0pO1xuXHRcdGNvbnN0IGZpZWxkQ291bnQgPSBpc0xhc3RGaWVsZElQdjRBZGRyZXNzID8gNyA6IDg7XG5cdFx0Y29uc3QgbGFzdEZpZWxkc1N0YXJ0ID0gbGFzdEZpZWxkcy5sZW5ndGggLSBmaWVsZENvdW50O1xuXHRcdGNvbnN0IGZpZWxkcyA9IEFycmF5PHN0cmluZz4oZmllbGRDb3VudCk7XG5cblx0XHRmb3IgKGxldCB4ID0gMDsgeCA8IGZpZWxkQ291bnQ7ICsreCkge1xuXHRcdFx0ZmllbGRzW3hdID0gZmlyc3RGaWVsZHNbeF0gfHwgbGFzdEZpZWxkc1tsYXN0RmllbGRzU3RhcnQgKyB4XSB8fCAnJztcblx0XHR9XG5cblx0XHRpZiAoaXNMYXN0RmllbGRJUHY0QWRkcmVzcykge1xuXHRcdFx0ZmllbGRzW2ZpZWxkQ291bnQgLSAxXSA9IF9ub3JtYWxpemVJUHY0KGZpZWxkc1tmaWVsZENvdW50IC0gMV0sIHByb3RvY29sKTtcblx0XHR9XG5cblx0XHRjb25zdCBhbGxaZXJvRmllbGRzID0gZmllbGRzLnJlZHVjZTxBcnJheTx7aW5kZXg6bnVtYmVyLGxlbmd0aDpudW1iZXJ9Pj4oKGFjYywgZmllbGQsIGluZGV4KSA9PiB7XG5cdFx0XHRpZiAoIWZpZWxkIHx8IGZpZWxkID09PSBcIjBcIikge1xuXHRcdFx0XHRjb25zdCBsYXN0TG9uZ2VzdCA9IGFjY1thY2MubGVuZ3RoIC0gMV07XG5cdFx0XHRcdGlmIChsYXN0TG9uZ2VzdCAmJiBsYXN0TG9uZ2VzdC5pbmRleCArIGxhc3RMb25nZXN0Lmxlbmd0aCA9PT0gaW5kZXgpIHtcblx0XHRcdFx0XHRsYXN0TG9uZ2VzdC5sZW5ndGgrKztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhY2MucHVzaCh7IGluZGV4LCBsZW5ndGggOiAxIH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gYWNjO1xuXHRcdH0sIFtdKTtcblxuXHRcdGNvbnN0IGxvbmdlc3RaZXJvRmllbGRzID0gYWxsWmVyb0ZpZWxkcy5zb3J0KChhLCBiKSA9PiBiLmxlbmd0aCAtIGEubGVuZ3RoKVswXTtcblxuXHRcdGxldCBuZXdIb3N0OnN0cmluZztcblx0XHRpZiAobG9uZ2VzdFplcm9GaWVsZHMgJiYgbG9uZ2VzdFplcm9GaWVsZHMubGVuZ3RoID4gMSkge1xuXHRcdFx0Y29uc3QgbmV3Rmlyc3QgPSBmaWVsZHMuc2xpY2UoMCwgbG9uZ2VzdFplcm9GaWVsZHMuaW5kZXgpIDtcblx0XHRcdGNvbnN0IG5ld0xhc3QgPSBmaWVsZHMuc2xpY2UobG9uZ2VzdFplcm9GaWVsZHMuaW5kZXggKyBsb25nZXN0WmVyb0ZpZWxkcy5sZW5ndGgpO1xuXHRcdFx0bmV3SG9zdCA9IG5ld0ZpcnN0LmpvaW4oXCI6XCIpICsgXCI6OlwiICsgbmV3TGFzdC5qb2luKFwiOlwiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bmV3SG9zdCA9IGZpZWxkcy5qb2luKFwiOlwiKTtcblx0XHR9XG5cblx0XHRpZiAoem9uZSkge1xuXHRcdFx0bmV3SG9zdCArPSBcIiVcIiArIHpvbmU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ld0hvc3Q7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGhvc3Q7XG5cdH1cbn1cblxuY29uc3QgVVJJX1BBUlNFID0gL14oPzooW146XFwvPyNdKyk6KT8oPzpcXC9cXC8oKD86KFteXFwvPyNAXSopQCk/KFxcW1teXFwvPyNcXF1dK1xcXXxbXlxcLz8jOl0qKSg/OlxcOihcXGQqKSk/KSk/KFtePyNdKikoPzpcXD8oW14jXSopKT8oPzojKCg/Oi58XFxufFxccikqKSk/L2k7XG5jb25zdCBOT19NQVRDSF9JU19VTkRFRklORUQgPSAoPFJlZ0V4cE1hdGNoQXJyYXk+KFwiXCIpLm1hdGNoKC8oKXswfS8pKVsxXSA9PT0gdW5kZWZpbmVkO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodXJpU3RyaW5nOnN0cmluZywgb3B0aW9uczpVUklPcHRpb25zID0ge30pOlVSSUNvbXBvbmVudHMge1xuXHRjb25zdCBjb21wb25lbnRzOlVSSUNvbXBvbmVudHMgPSB7fTtcblx0Y29uc3QgcHJvdG9jb2wgPSAob3B0aW9ucy5pcmkgIT09IGZhbHNlID8gSVJJX1BST1RPQ09MIDogVVJJX1BST1RPQ09MKTtcblxuXHRpZiAob3B0aW9ucy5yZWZlcmVuY2UgPT09IFwic3VmZml4XCIpIHVyaVN0cmluZyA9IChvcHRpb25zLnNjaGVtZSA/IG9wdGlvbnMuc2NoZW1lICsgXCI6XCIgOiBcIlwiKSArIFwiLy9cIiArIHVyaVN0cmluZztcblxuXHRjb25zdCBtYXRjaGVzID0gdXJpU3RyaW5nLm1hdGNoKFVSSV9QQVJTRSk7XG5cblx0aWYgKG1hdGNoZXMpIHtcblx0XHRpZiAoTk9fTUFUQ0hfSVNfVU5ERUZJTkVEKSB7XG5cdFx0XHQvL3N0b3JlIGVhY2ggY29tcG9uZW50XG5cdFx0XHRjb21wb25lbnRzLnNjaGVtZSA9IG1hdGNoZXNbMV07XG5cdFx0XHRjb21wb25lbnRzLnVzZXJpbmZvID0gbWF0Y2hlc1szXTtcblx0XHRcdGNvbXBvbmVudHMuaG9zdCA9IG1hdGNoZXNbNF07XG5cdFx0XHRjb21wb25lbnRzLnBvcnQgPSBwYXJzZUludChtYXRjaGVzWzVdLCAxMCk7XG5cdFx0XHRjb21wb25lbnRzLnBhdGggPSBtYXRjaGVzWzZdIHx8IFwiXCI7XG5cdFx0XHRjb21wb25lbnRzLnF1ZXJ5ID0gbWF0Y2hlc1s3XTtcblx0XHRcdGNvbXBvbmVudHMuZnJhZ21lbnQgPSBtYXRjaGVzWzhdO1xuXG5cdFx0XHQvL2ZpeCBwb3J0IG51bWJlclxuXHRcdFx0aWYgKGlzTmFOKGNvbXBvbmVudHMucG9ydCkpIHtcblx0XHRcdFx0Y29tcG9uZW50cy5wb3J0ID0gbWF0Y2hlc1s1XTtcblx0XHRcdH1cblx0XHR9IGVsc2UgeyAgLy9JRSBGSVggZm9yIGltcHJvcGVyIFJlZ0V4cCBtYXRjaGluZ1xuXHRcdFx0Ly9zdG9yZSBlYWNoIGNvbXBvbmVudFxuXHRcdFx0Y29tcG9uZW50cy5zY2hlbWUgPSBtYXRjaGVzWzFdIHx8IHVuZGVmaW5lZDtcblx0XHRcdGNvbXBvbmVudHMudXNlcmluZm8gPSAodXJpU3RyaW5nLmluZGV4T2YoXCJAXCIpICE9PSAtMSA/IG1hdGNoZXNbM10gOiB1bmRlZmluZWQpO1xuXHRcdFx0Y29tcG9uZW50cy5ob3N0ID0gKHVyaVN0cmluZy5pbmRleE9mKFwiLy9cIikgIT09IC0xID8gbWF0Y2hlc1s0XSA6IHVuZGVmaW5lZCk7XG5cdFx0XHRjb21wb25lbnRzLnBvcnQgPSBwYXJzZUludChtYXRjaGVzWzVdLCAxMCk7XG5cdFx0XHRjb21wb25lbnRzLnBhdGggPSBtYXRjaGVzWzZdIHx8IFwiXCI7XG5cdFx0XHRjb21wb25lbnRzLnF1ZXJ5ID0gKHVyaVN0cmluZy5pbmRleE9mKFwiP1wiKSAhPT0gLTEgPyBtYXRjaGVzWzddIDogdW5kZWZpbmVkKTtcblx0XHRcdGNvbXBvbmVudHMuZnJhZ21lbnQgPSAodXJpU3RyaW5nLmluZGV4T2YoXCIjXCIpICE9PSAtMSA/IG1hdGNoZXNbOF0gOiB1bmRlZmluZWQpO1xuXG5cdFx0XHQvL2ZpeCBwb3J0IG51bWJlclxuXHRcdFx0aWYgKGlzTmFOKGNvbXBvbmVudHMucG9ydCkpIHtcblx0XHRcdFx0Y29tcG9uZW50cy5wb3J0ID0gKHVyaVN0cmluZy5tYXRjaCgvXFwvXFwvKD86LnxcXG4pKlxcOig/OlxcL3xcXD98XFwjfCQpLykgPyBtYXRjaGVzWzRdIDogdW5kZWZpbmVkKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoY29tcG9uZW50cy5ob3N0KSB7XG5cdFx0XHQvL25vcm1hbGl6ZSBJUCBob3N0c1xuXHRcdFx0Y29tcG9uZW50cy5ob3N0ID0gX25vcm1hbGl6ZUlQdjYoX25vcm1hbGl6ZUlQdjQoY29tcG9uZW50cy5ob3N0LCBwcm90b2NvbCksIHByb3RvY29sKTtcblx0XHR9XG5cblx0XHQvL2RldGVybWluZSByZWZlcmVuY2UgdHlwZVxuXHRcdGlmIChjb21wb25lbnRzLnNjaGVtZSA9PT0gdW5kZWZpbmVkICYmIGNvbXBvbmVudHMudXNlcmluZm8gPT09IHVuZGVmaW5lZCAmJiBjb21wb25lbnRzLmhvc3QgPT09IHVuZGVmaW5lZCAmJiBjb21wb25lbnRzLnBvcnQgPT09IHVuZGVmaW5lZCAmJiAhY29tcG9uZW50cy5wYXRoICYmIGNvbXBvbmVudHMucXVlcnkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29tcG9uZW50cy5yZWZlcmVuY2UgPSBcInNhbWUtZG9jdW1lbnRcIjtcblx0XHR9IGVsc2UgaWYgKGNvbXBvbmVudHMuc2NoZW1lID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbXBvbmVudHMucmVmZXJlbmNlID0gXCJyZWxhdGl2ZVwiO1xuXHRcdH0gZWxzZSBpZiAoY29tcG9uZW50cy5mcmFnbWVudCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb21wb25lbnRzLnJlZmVyZW5jZSA9IFwiYWJzb2x1dGVcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29tcG9uZW50cy5yZWZlcmVuY2UgPSBcInVyaVwiO1xuXHRcdH1cblxuXHRcdC8vY2hlY2sgZm9yIHJlZmVyZW5jZSBlcnJvcnNcblx0XHRpZiAob3B0aW9ucy5yZWZlcmVuY2UgJiYgb3B0aW9ucy5yZWZlcmVuY2UgIT09IFwic3VmZml4XCIgJiYgb3B0aW9ucy5yZWZlcmVuY2UgIT09IGNvbXBvbmVudHMucmVmZXJlbmNlKSB7XG5cdFx0XHRjb21wb25lbnRzLmVycm9yID0gY29tcG9uZW50cy5lcnJvciB8fCBcIlVSSSBpcyBub3QgYSBcIiArIG9wdGlvbnMucmVmZXJlbmNlICsgXCIgcmVmZXJlbmNlLlwiO1xuXHRcdH1cblxuXHRcdC8vZmluZCBzY2hlbWUgaGFuZGxlclxuXHRcdGNvbnN0IHNjaGVtZUhhbmRsZXIgPSBTQ0hFTUVTWyhvcHRpb25zLnNjaGVtZSB8fCBjb21wb25lbnRzLnNjaGVtZSB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpXTtcblxuXHRcdC8vY2hlY2sgaWYgc2NoZW1lIGNhbid0IGhhbmRsZSBJUklzXG5cdFx0aWYgKCFvcHRpb25zLnVuaWNvZGVTdXBwb3J0ICYmICghc2NoZW1lSGFuZGxlciB8fCAhc2NoZW1lSGFuZGxlci51bmljb2RlU3VwcG9ydCkpIHtcblx0XHRcdC8vaWYgaG9zdCBjb21wb25lbnQgaXMgYSBkb21haW4gbmFtZVxuXHRcdFx0aWYgKGNvbXBvbmVudHMuaG9zdCAmJiAob3B0aW9ucy5kb21haW5Ib3N0IHx8IChzY2hlbWVIYW5kbGVyICYmIHNjaGVtZUhhbmRsZXIuZG9tYWluSG9zdCkpKSB7XG5cdFx0XHRcdC8vY29udmVydCBVbmljb2RlIElETiAtPiBBU0NJSSBJRE5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRjb21wb25lbnRzLmhvc3QgPSBwdW55Y29kZS50b0FTQ0lJKGNvbXBvbmVudHMuaG9zdC5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCBwY3REZWNDaGFycykudG9Mb3dlckNhc2UoKSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRjb21wb25lbnRzLmVycm9yID0gY29tcG9uZW50cy5lcnJvciB8fCBcIkhvc3QncyBkb21haW4gbmFtZSBjYW4gbm90IGJlIGNvbnZlcnRlZCB0byBBU0NJSSB2aWEgcHVueWNvZGU6IFwiICsgZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly9jb252ZXJ0IElSSSAtPiBVUklcblx0XHRcdF9ub3JtYWxpemVDb21wb25lbnRFbmNvZGluZyhjb21wb25lbnRzLCBVUklfUFJPVE9DT0wpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvL25vcm1hbGl6ZSBlbmNvZGluZ3Ncblx0XHRcdF9ub3JtYWxpemVDb21wb25lbnRFbmNvZGluZyhjb21wb25lbnRzLCBwcm90b2NvbCk7XG5cdFx0fVxuXG5cdFx0Ly9wZXJmb3JtIHNjaGVtZSBzcGVjaWZpYyBwYXJzaW5nXG5cdFx0aWYgKHNjaGVtZUhhbmRsZXIgJiYgc2NoZW1lSGFuZGxlci5wYXJzZSkge1xuXHRcdFx0c2NoZW1lSGFuZGxlci5wYXJzZShjb21wb25lbnRzLCBvcHRpb25zKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Y29tcG9uZW50cy5lcnJvciA9IGNvbXBvbmVudHMuZXJyb3IgfHwgXCJVUkkgY2FuIG5vdCBiZSBwYXJzZWQuXCI7XG5cdH1cblxuXHRyZXR1cm4gY29tcG9uZW50cztcbn07XG5cbmZ1bmN0aW9uIF9yZWNvbXBvc2VBdXRob3JpdHkoY29tcG9uZW50czpVUklDb21wb25lbnRzLCBvcHRpb25zOlVSSU9wdGlvbnMpOnN0cmluZ3x1bmRlZmluZWQge1xuXHRjb25zdCBwcm90b2NvbCA9IChvcHRpb25zLmlyaSAhPT0gZmFsc2UgPyBJUklfUFJPVE9DT0wgOiBVUklfUFJPVE9DT0wpO1xuXHRjb25zdCB1cmlUb2tlbnM6QXJyYXk8c3RyaW5nPiA9IFtdO1xuXG5cdGlmIChjb21wb25lbnRzLnVzZXJpbmZvICE9PSB1bmRlZmluZWQpIHtcblx0XHR1cmlUb2tlbnMucHVzaChjb21wb25lbnRzLnVzZXJpbmZvKTtcblx0XHR1cmlUb2tlbnMucHVzaChcIkBcIik7XG5cdH1cblxuXHRpZiAoY29tcG9uZW50cy5ob3N0ICE9PSB1bmRlZmluZWQpIHtcblx0XHQvL25vcm1hbGl6ZSBJUCBob3N0cywgYWRkIGJyYWNrZXRzIGFuZCBlc2NhcGUgem9uZSBzZXBhcmF0b3IgZm9yIElQdjZcblx0XHR1cmlUb2tlbnMucHVzaChfbm9ybWFsaXplSVB2Nihfbm9ybWFsaXplSVB2NChTdHJpbmcoY29tcG9uZW50cy5ob3N0KSwgcHJvdG9jb2wpLCBwcm90b2NvbCkucmVwbGFjZShwcm90b2NvbC5JUFY2QUREUkVTUywgKF8sICQxLCAkMikgPT4gXCJbXCIgKyAkMSArICgkMiA/IFwiJTI1XCIgKyAkMiA6IFwiXCIpICsgXCJdXCIpKTtcblx0fVxuXG5cdGlmICh0eXBlb2YgY29tcG9uZW50cy5wb3J0ID09PSBcIm51bWJlclwiKSB7XG5cdFx0dXJpVG9rZW5zLnB1c2goXCI6XCIpO1xuXHRcdHVyaVRva2Vucy5wdXNoKGNvbXBvbmVudHMucG9ydC50b1N0cmluZygxMCkpO1xuXHR9XG5cblx0cmV0dXJuIHVyaVRva2Vucy5sZW5ndGggPyB1cmlUb2tlbnMuam9pbihcIlwiKSA6IHVuZGVmaW5lZDtcbn07XG5cbmNvbnN0IFJEUzEgPSAvXlxcLlxcLj9cXC8vO1xuY29uc3QgUkRTMiA9IC9eXFwvXFwuKFxcL3wkKS87XG5jb25zdCBSRFMzID0gL15cXC9cXC5cXC4oXFwvfCQpLztcbmNvbnN0IFJEUzQgPSAvXlxcLlxcLj8kLztcbmNvbnN0IFJEUzUgPSAvXlxcLz8oPzoufFxcbikqPyg/PVxcL3wkKS87XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVEb3RTZWdtZW50cyhpbnB1dDpzdHJpbmcpOnN0cmluZyB7XG5cdGNvbnN0IG91dHB1dDpBcnJheTxzdHJpbmc+ID0gW107XG5cblx0d2hpbGUgKGlucHV0Lmxlbmd0aCkge1xuXHRcdGlmIChpbnB1dC5tYXRjaChSRFMxKSkge1xuXHRcdFx0aW5wdXQgPSBpbnB1dC5yZXBsYWNlKFJEUzEsIFwiXCIpO1xuXHRcdH0gZWxzZSBpZiAoaW5wdXQubWF0Y2goUkRTMikpIHtcblx0XHRcdGlucHV0ID0gaW5wdXQucmVwbGFjZShSRFMyLCBcIi9cIik7XG5cdFx0fSBlbHNlIGlmIChpbnB1dC5tYXRjaChSRFMzKSkge1xuXHRcdFx0aW5wdXQgPSBpbnB1dC5yZXBsYWNlKFJEUzMsIFwiL1wiKTtcblx0XHRcdG91dHB1dC5wb3AoKTtcblx0XHR9IGVsc2UgaWYgKGlucHV0ID09PSBcIi5cIiB8fCBpbnB1dCA9PT0gXCIuLlwiKSB7XG5cdFx0XHRpbnB1dCA9IFwiXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGltID0gaW5wdXQubWF0Y2goUkRTNSk7XG5cdFx0XHRpZiAoaW0pIHtcblx0XHRcdFx0Y29uc3QgcyA9IGltWzBdO1xuXHRcdFx0XHRpbnB1dCA9IGlucHV0LnNsaWNlKHMubGVuZ3RoKTtcblx0XHRcdFx0b3V0cHV0LnB1c2gocyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGRvdCBzZWdtZW50IGNvbmRpdGlvblwiKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gb3V0cHV0LmpvaW4oXCJcIik7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplKGNvbXBvbmVudHM6VVJJQ29tcG9uZW50cywgb3B0aW9uczpVUklPcHRpb25zID0ge30pOnN0cmluZyB7XG5cdGNvbnN0IHByb3RvY29sID0gKG9wdGlvbnMuaXJpID8gSVJJX1BST1RPQ09MIDogVVJJX1BST1RPQ09MKTtcblx0Y29uc3QgdXJpVG9rZW5zOkFycmF5PHN0cmluZz4gPSBbXTtcblxuXHQvL2ZpbmQgc2NoZW1lIGhhbmRsZXJcblx0Y29uc3Qgc2NoZW1lSGFuZGxlciA9IFNDSEVNRVNbKG9wdGlvbnMuc2NoZW1lIHx8IGNvbXBvbmVudHMuc2NoZW1lIHx8IFwiXCIpLnRvTG93ZXJDYXNlKCldO1xuXG5cdC8vcGVyZm9ybSBzY2hlbWUgc3BlY2lmaWMgc2VyaWFsaXphdGlvblxuXHRpZiAoc2NoZW1lSGFuZGxlciAmJiBzY2hlbWVIYW5kbGVyLnNlcmlhbGl6ZSkgc2NoZW1lSGFuZGxlci5zZXJpYWxpemUoY29tcG9uZW50cywgb3B0aW9ucyk7XG5cblx0aWYgKGNvbXBvbmVudHMuaG9zdCkge1xuXHRcdC8vaWYgaG9zdCBjb21wb25lbnQgaXMgYW4gSVB2NiBhZGRyZXNzXG5cdFx0aWYgKHByb3RvY29sLklQVjZBRERSRVNTLnRlc3QoY29tcG9uZW50cy5ob3N0KSkge1xuXHRcdFx0Ly9UT0RPOiBub3JtYWxpemUgSVB2NiBhZGRyZXNzIGFzIHBlciBSRkMgNTk1MlxuXHRcdH1cblxuXHRcdC8vaWYgaG9zdCBjb21wb25lbnQgaXMgYSBkb21haW4gbmFtZVxuXHRcdGVsc2UgaWYgKG9wdGlvbnMuZG9tYWluSG9zdCB8fCAoc2NoZW1lSGFuZGxlciAmJiBzY2hlbWVIYW5kbGVyLmRvbWFpbkhvc3QpKSB7XG5cdFx0XHQvL2NvbnZlcnQgSUROIHZpYSBwdW55Y29kZVxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29tcG9uZW50cy5ob3N0ID0gKCFvcHRpb25zLmlyaSA/IHB1bnljb2RlLnRvQVNDSUkoY29tcG9uZW50cy5ob3N0LnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIHBjdERlY0NoYXJzKS50b0xvd2VyQ2FzZSgpKSA6IHB1bnljb2RlLnRvVW5pY29kZShjb21wb25lbnRzLmhvc3QpKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0Y29tcG9uZW50cy5lcnJvciA9IGNvbXBvbmVudHMuZXJyb3IgfHwgXCJIb3N0J3MgZG9tYWluIG5hbWUgY2FuIG5vdCBiZSBjb252ZXJ0ZWQgdG8gXCIgKyAoIW9wdGlvbnMuaXJpID8gXCJBU0NJSVwiIDogXCJVbmljb2RlXCIpICsgXCIgdmlhIHB1bnljb2RlOiBcIiArIGU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly9ub3JtYWxpemUgZW5jb2Rpbmdcblx0X25vcm1hbGl6ZUNvbXBvbmVudEVuY29kaW5nKGNvbXBvbmVudHMsIHByb3RvY29sKTtcblxuXHRpZiAob3B0aW9ucy5yZWZlcmVuY2UgIT09IFwic3VmZml4XCIgJiYgY29tcG9uZW50cy5zY2hlbWUpIHtcblx0XHR1cmlUb2tlbnMucHVzaChjb21wb25lbnRzLnNjaGVtZSk7XG5cdFx0dXJpVG9rZW5zLnB1c2goXCI6XCIpO1xuXHR9XG5cblx0Y29uc3QgYXV0aG9yaXR5ID0gX3JlY29tcG9zZUF1dGhvcml0eShjb21wb25lbnRzLCBvcHRpb25zKTtcblx0aWYgKGF1dGhvcml0eSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0aWYgKG9wdGlvbnMucmVmZXJlbmNlICE9PSBcInN1ZmZpeFwiKSB7XG5cdFx0XHR1cmlUb2tlbnMucHVzaChcIi8vXCIpO1xuXHRcdH1cblxuXHRcdHVyaVRva2Vucy5wdXNoKGF1dGhvcml0eSk7XG5cblx0XHRpZiAoY29tcG9uZW50cy5wYXRoICYmIGNvbXBvbmVudHMucGF0aC5jaGFyQXQoMCkgIT09IFwiL1wiKSB7XG5cdFx0XHR1cmlUb2tlbnMucHVzaChcIi9cIik7XG5cdFx0fVxuXHR9XG5cblx0aWYgKGNvbXBvbmVudHMucGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0bGV0IHMgPSBjb21wb25lbnRzLnBhdGg7XG5cblx0XHRpZiAoIW9wdGlvbnMuYWJzb2x1dGVQYXRoICYmICghc2NoZW1lSGFuZGxlciB8fCAhc2NoZW1lSGFuZGxlci5hYnNvbHV0ZVBhdGgpKSB7XG5cdFx0XHRzID0gcmVtb3ZlRG90U2VnbWVudHMocyk7XG5cdFx0fVxuXG5cdFx0aWYgKGF1dGhvcml0eSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRzID0gcy5yZXBsYWNlKC9eXFwvXFwvLywgXCIvJTJGXCIpOyAgLy9kb24ndCBhbGxvdyB0aGUgcGF0aCB0byBzdGFydCB3aXRoIFwiLy9cIlxuXHRcdH1cblxuXHRcdHVyaVRva2Vucy5wdXNoKHMpO1xuXHR9XG5cblx0aWYgKGNvbXBvbmVudHMucXVlcnkgIT09IHVuZGVmaW5lZCkge1xuXHRcdHVyaVRva2Vucy5wdXNoKFwiP1wiKTtcblx0XHR1cmlUb2tlbnMucHVzaChjb21wb25lbnRzLnF1ZXJ5KTtcblx0fVxuXG5cdGlmIChjb21wb25lbnRzLmZyYWdtZW50ICE9PSB1bmRlZmluZWQpIHtcblx0XHR1cmlUb2tlbnMucHVzaChcIiNcIik7XG5cdFx0dXJpVG9rZW5zLnB1c2goY29tcG9uZW50cy5mcmFnbWVudCk7XG5cdH1cblxuXHRyZXR1cm4gdXJpVG9rZW5zLmpvaW4oXCJcIik7ICAvL21lcmdlIHRva2VucyBpbnRvIGEgc3RyaW5nXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUNvbXBvbmVudHMoYmFzZTpVUklDb21wb25lbnRzLCByZWxhdGl2ZTpVUklDb21wb25lbnRzLCBvcHRpb25zOlVSSU9wdGlvbnMgPSB7fSwgc2tpcE5vcm1hbGl6YXRpb24/OmJvb2xlYW4pOlVSSUNvbXBvbmVudHMge1xuXHRjb25zdCB0YXJnZXQ6VVJJQ29tcG9uZW50cyA9IHt9O1xuXG5cdGlmICghc2tpcE5vcm1hbGl6YXRpb24pIHtcblx0XHRiYXNlID0gcGFyc2Uoc2VyaWFsaXplKGJhc2UsIG9wdGlvbnMpLCBvcHRpb25zKTsgIC8vbm9ybWFsaXplIGJhc2UgY29tcG9uZW50c1xuXHRcdHJlbGF0aXZlID0gcGFyc2Uoc2VyaWFsaXplKHJlbGF0aXZlLCBvcHRpb25zKSwgb3B0aW9ucyk7ICAvL25vcm1hbGl6ZSByZWxhdGl2ZSBjb21wb25lbnRzXG5cdH1cblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0aWYgKCFvcHRpb25zLnRvbGVyYW50ICYmIHJlbGF0aXZlLnNjaGVtZSkge1xuXHRcdHRhcmdldC5zY2hlbWUgPSByZWxhdGl2ZS5zY2hlbWU7XG5cdFx0Ly90YXJnZXQuYXV0aG9yaXR5ID0gcmVsYXRpdmUuYXV0aG9yaXR5O1xuXHRcdHRhcmdldC51c2VyaW5mbyA9IHJlbGF0aXZlLnVzZXJpbmZvO1xuXHRcdHRhcmdldC5ob3N0ID0gcmVsYXRpdmUuaG9zdDtcblx0XHR0YXJnZXQucG9ydCA9IHJlbGF0aXZlLnBvcnQ7XG5cdFx0dGFyZ2V0LnBhdGggPSByZW1vdmVEb3RTZWdtZW50cyhyZWxhdGl2ZS5wYXRoIHx8IFwiXCIpO1xuXHRcdHRhcmdldC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuXHR9IGVsc2Uge1xuXHRcdGlmIChyZWxhdGl2ZS51c2VyaW5mbyAhPT0gdW5kZWZpbmVkIHx8IHJlbGF0aXZlLmhvc3QgIT09IHVuZGVmaW5lZCB8fCByZWxhdGl2ZS5wb3J0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vdGFyZ2V0LmF1dGhvcml0eSA9IHJlbGF0aXZlLmF1dGhvcml0eTtcblx0XHRcdHRhcmdldC51c2VyaW5mbyA9IHJlbGF0aXZlLnVzZXJpbmZvO1xuXHRcdFx0dGFyZ2V0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0O1xuXHRcdFx0dGFyZ2V0LnBvcnQgPSByZWxhdGl2ZS5wb3J0O1xuXHRcdFx0dGFyZ2V0LnBhdGggPSByZW1vdmVEb3RTZWdtZW50cyhyZWxhdGl2ZS5wYXRoIHx8IFwiXCIpO1xuXHRcdFx0dGFyZ2V0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICghcmVsYXRpdmUucGF0aCkge1xuXHRcdFx0XHR0YXJnZXQucGF0aCA9IGJhc2UucGF0aDtcblx0XHRcdFx0aWYgKHJlbGF0aXZlLnF1ZXJ5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHR0YXJnZXQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0YXJnZXQucXVlcnkgPSBiYXNlLnF1ZXJ5O1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAocmVsYXRpdmUucGF0aC5jaGFyQXQoMCkgPT09IFwiL1wiKSB7XG5cdFx0XHRcdFx0dGFyZ2V0LnBhdGggPSByZW1vdmVEb3RTZWdtZW50cyhyZWxhdGl2ZS5wYXRoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZiAoKGJhc2UudXNlcmluZm8gIT09IHVuZGVmaW5lZCB8fCBiYXNlLmhvc3QgIT09IHVuZGVmaW5lZCB8fCBiYXNlLnBvcnQgIT09IHVuZGVmaW5lZCkgJiYgIWJhc2UucGF0aCkge1xuXHRcdFx0XHRcdFx0dGFyZ2V0LnBhdGggPSBcIi9cIiArIHJlbGF0aXZlLnBhdGg7XG5cdFx0XHRcdFx0fSBlbHNlIGlmICghYmFzZS5wYXRoKSB7XG5cdFx0XHRcdFx0XHR0YXJnZXQucGF0aCA9IHJlbGF0aXZlLnBhdGg7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRhcmdldC5wYXRoID0gYmFzZS5wYXRoLnNsaWNlKDAsIGJhc2UucGF0aC5sYXN0SW5kZXhPZihcIi9cIikgKyAxKSArIHJlbGF0aXZlLnBhdGg7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRhcmdldC5wYXRoID0gcmVtb3ZlRG90U2VnbWVudHModGFyZ2V0LnBhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRhcmdldC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuXHRcdFx0fVxuXHRcdFx0Ly90YXJnZXQuYXV0aG9yaXR5ID0gYmFzZS5hdXRob3JpdHk7XG5cdFx0XHR0YXJnZXQudXNlcmluZm8gPSBiYXNlLnVzZXJpbmZvO1xuXHRcdFx0dGFyZ2V0Lmhvc3QgPSBiYXNlLmhvc3Q7XG5cdFx0XHR0YXJnZXQucG9ydCA9IGJhc2UucG9ydDtcblx0XHR9XG5cdFx0dGFyZ2V0LnNjaGVtZSA9IGJhc2Uuc2NoZW1lO1xuXHR9XG5cblx0dGFyZ2V0LmZyYWdtZW50ID0gcmVsYXRpdmUuZnJhZ21lbnQ7XG5cblx0cmV0dXJuIHRhcmdldDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlKGJhc2VVUkk6c3RyaW5nLCByZWxhdGl2ZVVSSTpzdHJpbmcsIG9wdGlvbnM/OlVSSU9wdGlvbnMpOnN0cmluZyB7XG5cdGNvbnN0IHNjaGVtZWxlc3NPcHRpb25zID0gYXNzaWduKHsgc2NoZW1lIDogJ251bGwnIH0sIG9wdGlvbnMpO1xuXHRyZXR1cm4gc2VyaWFsaXplKHJlc29sdmVDb21wb25lbnRzKHBhcnNlKGJhc2VVUkksIHNjaGVtZWxlc3NPcHRpb25zKSwgcGFyc2UocmVsYXRpdmVVUkksIHNjaGVtZWxlc3NPcHRpb25zKSwgc2NoZW1lbGVzc09wdGlvbnMsIHRydWUpLCBzY2hlbWVsZXNzT3B0aW9ucyk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplKHVyaTpzdHJpbmcsIG9wdGlvbnM/OlVSSU9wdGlvbnMpOnN0cmluZztcbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemUodXJpOlVSSUNvbXBvbmVudHMsIG9wdGlvbnM/OlVSSU9wdGlvbnMpOlVSSUNvbXBvbmVudHM7XG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplKHVyaTphbnksIG9wdGlvbnM/OlVSSU9wdGlvbnMpOmFueSB7XG5cdGlmICh0eXBlb2YgdXJpID09PSBcInN0cmluZ1wiKSB7XG5cdFx0dXJpID0gc2VyaWFsaXplKHBhcnNlKHVyaSwgb3B0aW9ucyksIG9wdGlvbnMpO1xuXHR9IGVsc2UgaWYgKHR5cGVPZih1cmkpID09PSBcIm9iamVjdFwiKSB7XG5cdFx0dXJpID0gcGFyc2Uoc2VyaWFsaXplKDxVUklDb21wb25lbnRzPnVyaSwgb3B0aW9ucyksIG9wdGlvbnMpO1xuXHR9XG5cblx0cmV0dXJuIHVyaTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbCh1cmlBOnN0cmluZywgdXJpQjpzdHJpbmcsIG9wdGlvbnM/OiBVUklPcHRpb25zKTpib29sZWFuO1xuZXhwb3J0IGZ1bmN0aW9uIGVxdWFsKHVyaUE6VVJJQ29tcG9uZW50cywgdXJpQjpVUklDb21wb25lbnRzLCBvcHRpb25zPzpVUklPcHRpb25zKTpib29sZWFuO1xuZXhwb3J0IGZ1bmN0aW9uIGVxdWFsKHVyaUE6YW55LCB1cmlCOmFueSwgb3B0aW9ucz86VVJJT3B0aW9ucyk6Ym9vbGVhbiB7XG5cdGlmICh0eXBlb2YgdXJpQSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHVyaUEgPSBzZXJpYWxpemUocGFyc2UodXJpQSwgb3B0aW9ucyksIG9wdGlvbnMpO1xuXHR9IGVsc2UgaWYgKHR5cGVPZih1cmlBKSA9PT0gXCJvYmplY3RcIikge1xuXHRcdHVyaUEgPSBzZXJpYWxpemUoPFVSSUNvbXBvbmVudHM+dXJpQSwgb3B0aW9ucyk7XG5cdH1cblxuXHRpZiAodHlwZW9mIHVyaUIgPT09IFwic3RyaW5nXCIpIHtcblx0XHR1cmlCID0gc2VyaWFsaXplKHBhcnNlKHVyaUIsIG9wdGlvbnMpLCBvcHRpb25zKTtcblx0fSBlbHNlIGlmICh0eXBlT2YodXJpQikgPT09IFwib2JqZWN0XCIpIHtcblx0XHR1cmlCID0gc2VyaWFsaXplKDxVUklDb21wb25lbnRzPnVyaUIsIG9wdGlvbnMpO1xuXHR9XG5cblx0cmV0dXJuIHVyaUEgPT09IHVyaUI7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlQ29tcG9uZW50KHN0cjpzdHJpbmcsIG9wdGlvbnM/OlVSSU9wdGlvbnMpOnN0cmluZyB7XG5cdHJldHVybiBzdHIgJiYgc3RyLnRvU3RyaW5nKCkucmVwbGFjZSgoIW9wdGlvbnMgfHwgIW9wdGlvbnMuaXJpID8gVVJJX1BST1RPQ09MLkVTQ0FQRSA6IElSSV9QUk9UT0NPTC5FU0NBUEUpLCBwY3RFbmNDaGFyKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiB1bmVzY2FwZUNvbXBvbmVudChzdHI6c3RyaW5nLCBvcHRpb25zPzpVUklPcHRpb25zKTpzdHJpbmcge1xuXHRyZXR1cm4gc3RyICYmIHN0ci50b1N0cmluZygpLnJlcGxhY2UoKCFvcHRpb25zIHx8ICFvcHRpb25zLmlyaSA/IFVSSV9QUk9UT0NPTC5QQ1RfRU5DT0RFRCA6IElSSV9QUk9UT0NPTC5QQ1RfRU5DT0RFRCksIHBjdERlY0NoYXJzKTtcbn07XG4iLCJpbXBvcnQgeyBVUklTY2hlbWVIYW5kbGVyLCBVUklDb21wb25lbnRzLCBVUklPcHRpb25zIH0gZnJvbSBcIi4uL3VyaVwiO1xuXG5jb25zdCBoYW5kbGVyOlVSSVNjaGVtZUhhbmRsZXIgPSB7XG5cdHNjaGVtZSA6IFwiaHR0cFwiLFxuXG5cdGRvbWFpbkhvc3QgOiB0cnVlLFxuXG5cdHBhcnNlIDogZnVuY3Rpb24gKGNvbXBvbmVudHM6VVJJQ29tcG9uZW50cywgb3B0aW9uczpVUklPcHRpb25zKTpVUklDb21wb25lbnRzIHtcblx0XHQvL3JlcG9ydCBtaXNzaW5nIGhvc3Rcblx0XHRpZiAoIWNvbXBvbmVudHMuaG9zdCkge1xuXHRcdFx0Y29tcG9uZW50cy5lcnJvciA9IGNvbXBvbmVudHMuZXJyb3IgfHwgXCJIVFRQIFVSSXMgbXVzdCBoYXZlIGEgaG9zdC5cIjtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29tcG9uZW50cztcblx0fSxcblxuXHRzZXJpYWxpemUgOiBmdW5jdGlvbiAoY29tcG9uZW50czpVUklDb21wb25lbnRzLCBvcHRpb25zOlVSSU9wdGlvbnMpOlVSSUNvbXBvbmVudHMge1xuXHRcdC8vbm9ybWFsaXplIHRoZSBkZWZhdWx0IHBvcnRcblx0XHRpZiAoY29tcG9uZW50cy5wb3J0ID09PSAoU3RyaW5nKGNvbXBvbmVudHMuc2NoZW1lKS50b0xvd2VyQ2FzZSgpICE9PSBcImh0dHBzXCIgPyA4MCA6IDQ0MykgfHwgY29tcG9uZW50cy5wb3J0ID09PSBcIlwiKSB7XG5cdFx0XHRjb21wb25lbnRzLnBvcnQgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdFxuXHRcdC8vbm9ybWFsaXplIHRoZSBlbXB0eSBwYXRoXG5cdFx0aWYgKCFjb21wb25lbnRzLnBhdGgpIHtcblx0XHRcdGNvbXBvbmVudHMucGF0aCA9IFwiL1wiO1xuXHRcdH1cblxuXHRcdC8vTk9URTogV2UgZG8gbm90IHBhcnNlIHF1ZXJ5IHN0cmluZ3MgZm9yIEhUVFAgVVJJc1xuXHRcdC8vYXMgV1dXIEZvcm0gVXJsIEVuY29kZWQgcXVlcnkgc3RyaW5ncyBhcmUgcGFydCBvZiB0aGUgSFRNTDQrIHNwZWMsXG5cdFx0Ly9hbmQgbm90IHRoZSBIVFRQIHNwZWMuXG5cblx0XHRyZXR1cm4gY29tcG9uZW50cztcblx0fVxufTtcblxuZXhwb3J0IGRlZmF1bHQgaGFuZGxlcjsiLCJpbXBvcnQgeyBVUklTY2hlbWVIYW5kbGVyLCBVUklDb21wb25lbnRzLCBVUklPcHRpb25zIH0gZnJvbSBcIi4uL3VyaVwiO1xuaW1wb3J0IGh0dHAgZnJvbSBcIi4vaHR0cFwiO1xuXG5jb25zdCBoYW5kbGVyOlVSSVNjaGVtZUhhbmRsZXIgPSB7XG5cdHNjaGVtZSA6IFwiaHR0cHNcIixcblx0ZG9tYWluSG9zdCA6IGh0dHAuZG9tYWluSG9zdCxcblx0cGFyc2UgOiBodHRwLnBhcnNlLFxuXHRzZXJpYWxpemUgOiBodHRwLnNlcmlhbGl6ZVxufVxuXG5leHBvcnQgZGVmYXVsdCBoYW5kbGVyOyIsImltcG9ydCB7IFVSSVNjaGVtZUhhbmRsZXIsIFVSSUNvbXBvbmVudHMsIFVSSU9wdGlvbnMgfSBmcm9tIFwiLi4vdXJpXCI7XG5pbXBvcnQgeyBwY3RFbmNDaGFyLCBwY3REZWNDaGFycywgdW5lc2NhcGVDb21wb25lbnQgfSBmcm9tIFwiLi4vdXJpXCI7XG5pbXBvcnQgcHVueWNvZGUgZnJvbSBcInB1bnljb2RlXCI7XG5pbXBvcnQgeyBtZXJnZSwgc3ViZXhwLCB0b1VwcGVyQ2FzZSwgdG9BcnJheSB9IGZyb20gXCIuLi91dGlsXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFpbHRvSGVhZGVycyB7XG5cdFtoZm5hbWU6c3RyaW5nXTpzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNYWlsdG9Db21wb25lbnRzIGV4dGVuZHMgVVJJQ29tcG9uZW50cyB7XG5cdHRvOkFycmF5PHN0cmluZz4sXG5cdGhlYWRlcnM/Ok1haWx0b0hlYWRlcnMsXG5cdHN1YmplY3Q/OnN0cmluZyxcblx0Ym9keT86c3RyaW5nXG59XG5cbmNvbnN0IE86TWFpbHRvSGVhZGVycyA9IHt9O1xuY29uc3QgaXNJUkkgPSB0cnVlO1xuXG4vL1JGQyAzOTg2XG5jb25zdCBVTlJFU0VSVkVEJCQgPSBcIltBLVphLXowLTlcXFxcLVxcXFwuXFxcXF9cXFxcflwiICsgKGlzSVJJID8gXCJcXFxceEEwLVxcXFx1MjAwRFxcXFx1MjAxMC1cXFxcdTIwMjlcXFxcdTIwMkYtXFxcXHVEN0ZGXFxcXHVGOTAwLVxcXFx1RkRDRlxcXFx1RkRGMC1cXFxcdUZGRUZcIiA6IFwiXCIpICsgXCJdXCI7XG5jb25zdCBIRVhESUckJCA9IFwiWzAtOUEtRmEtZl1cIjsgIC8vY2FzZS1pbnNlbnNpdGl2ZVxuY29uc3QgUENUX0VOQ09ERUQkID0gc3ViZXhwKHN1YmV4cChcIiVbRUZlZl1cIiArIEhFWERJRyQkICsgXCIlXCIgKyBIRVhESUckJCArIEhFWERJRyQkICsgXCIlXCIgKyBIRVhESUckJCArIEhFWERJRyQkKSArIFwifFwiICsgc3ViZXhwKFwiJVs4OUEtRmEtZl1cIiArIEhFWERJRyQkICsgXCIlXCIgKyBIRVhESUckJCArIEhFWERJRyQkKSArIFwifFwiICsgc3ViZXhwKFwiJVwiICsgSEVYRElHJCQgKyBIRVhESUckJCkpOyAgLy9leHBhbmRlZFxuXG4vL1JGQyA1MzIyLCBleGNlcHQgdGhlc2Ugc3ltYm9scyBhcyBwZXIgUkZDIDYwNjg6IEAgOiAvID8gIyBbIF0gJiA7ID1cbi8vY29uc3QgQVRFWFQkJCA9IFwiW0EtWmEtejAtOVxcXFwhXFxcXCNcXFxcJFxcXFwlXFxcXCZcXFxcJ1xcXFwqXFxcXCtcXFxcLVxcXFwvXFxcXD1cXFxcP1xcXFxeXFxcXF9cXFxcYFxcXFx7XFxcXHxcXFxcfVxcXFx+XVwiO1xuLy9jb25zdCBXU1AkJCA9IFwiW1xcXFx4MjBcXFxceDA5XVwiO1xuLy9jb25zdCBPQlNfUVRFWFQkJCA9IFwiW1xcXFx4MDEtXFxcXHgwOFxcXFx4MEJcXFxceDBDXFxcXHgwRS1cXFxceDFGXFxcXHg3Rl1cIjsgIC8vKCVkMS04IC8gJWQxMS0xMiAvICVkMTQtMzEgLyAlZDEyNylcbi8vY29uc3QgUVRFWFQkJCA9IG1lcmdlKFwiW1xcXFx4MjFcXFxceDIzLVxcXFx4NUJcXFxceDVELVxcXFx4N0VdXCIsIE9CU19RVEVYVCQkKTsgIC8vJWQzMyAvICVkMzUtOTEgLyAlZDkzLTEyNiAvIG9icy1xdGV4dFxuLy9jb25zdCBWQ0hBUiQkID0gXCJbXFxcXHgyMS1cXFxceDdFXVwiO1xuLy9jb25zdCBXU1AkJCA9IFwiW1xcXFx4MjBcXFxceDA5XVwiO1xuLy9jb25zdCBPQlNfUVAkID0gc3ViZXhwKFwiXFxcXFxcXFxcIiArIG1lcmdlKFwiW1xcXFx4MDBcXFxceDBEXFxcXHgwQV1cIiwgT0JTX1FURVhUJCQpKTsgIC8vJWQwIC8gQ1IgLyBMRiAvIG9icy1xdGV4dFxuLy9jb25zdCBGV1MkID0gc3ViZXhwKHN1YmV4cChXU1AkJCArIFwiKlwiICsgXCJcXFxceDBEXFxcXHgwQVwiKSArIFwiP1wiICsgV1NQJCQgKyBcIitcIik7XG4vL2NvbnN0IFFVT1RFRF9QQUlSJCA9IHN1YmV4cChzdWJleHAoXCJcXFxcXFxcXFwiICsgc3ViZXhwKFZDSEFSJCQgKyBcInxcIiArIFdTUCQkKSkgKyBcInxcIiArIE9CU19RUCQpO1xuLy9jb25zdCBRVU9URURfU1RSSU5HJCA9IHN1YmV4cCgnXFxcXFwiJyArIHN1YmV4cChGV1MkICsgXCI/XCIgKyBRQ09OVEVOVCQpICsgXCIqXCIgKyBGV1MkICsgXCI/XCIgKyAnXFxcXFwiJyk7XG5jb25zdCBBVEVYVCQkID0gXCJbQS1aYS16MC05XFxcXCFcXFxcJFxcXFwlXFxcXCdcXFxcKlxcXFwrXFxcXC1cXFxcXlxcXFxfXFxcXGBcXFxce1xcXFx8XFxcXH1cXFxcfl1cIjtcbmNvbnN0IFFURVhUJCQgPSBcIltcXFxcIVxcXFwkXFxcXCVcXFxcJ1xcXFwoXFxcXClcXFxcKlxcXFwrXFxcXCxcXFxcLVxcXFwuMC05XFxcXDxcXFxcPkEtWlxcXFx4NUUtXFxcXHg3RV1cIjtcbmNvbnN0IFZDSEFSJCQgPSBtZXJnZShRVEVYVCQkLCBcIltcXFxcXFxcIlxcXFxcXFxcXVwiKTtcbmNvbnN0IERPVF9BVE9NX1RFWFQkID0gc3ViZXhwKEFURVhUJCQgKyBcIitcIiArIHN1YmV4cChcIlxcXFwuXCIgKyBBVEVYVCQkICsgXCIrXCIpICsgXCIqXCIpO1xuY29uc3QgUVVPVEVEX1BBSVIkID0gc3ViZXhwKFwiXFxcXFxcXFxcIiArIFZDSEFSJCQpO1xuY29uc3QgUUNPTlRFTlQkID0gc3ViZXhwKFFURVhUJCQgKyBcInxcIiArIFFVT1RFRF9QQUlSJCk7XG5jb25zdCBRVU9URURfU1RSSU5HJCA9IHN1YmV4cCgnXFxcXFwiJyArIFFDT05URU5UJCArIFwiKlwiICsgJ1xcXFxcIicpO1xuXG4vL1JGQyA2MDY4XG5jb25zdCBEVEVYVF9OT19PQlMkJCA9IFwiW1xcXFx4MjEtXFxcXHg1QVxcXFx4NUUtXFxcXHg3RV1cIjsgIC8vJWQzMy05MCAvICVkOTQtMTI2XG5jb25zdCBTT01FX0RFTElNUyQkID0gXCJbXFxcXCFcXFxcJFxcXFwnXFxcXChcXFxcKVxcXFwqXFxcXCtcXFxcLFxcXFw7XFxcXDpcXFxcQF1cIjtcbmNvbnN0IFFDSEFSJCA9IHN1YmV4cChVTlJFU0VSVkVEJCQgKyBcInxcIiArIFBDVF9FTkNPREVEJCArIFwifFwiICsgU09NRV9ERUxJTVMkJCk7XG5jb25zdCBET01BSU4kID0gc3ViZXhwKERPVF9BVE9NX1RFWFQkICsgXCJ8XCIgKyBcIlxcXFxbXCIgKyBEVEVYVF9OT19PQlMkJCArIFwiKlwiICsgXCJcXFxcXVwiKTtcbmNvbnN0IExPQ0FMX1BBUlQkID0gc3ViZXhwKERPVF9BVE9NX1RFWFQkICsgXCJ8XCIgKyBRVU9URURfU1RSSU5HJCk7XG5jb25zdCBBRERSX1NQRUMkID0gc3ViZXhwKExPQ0FMX1BBUlQkICsgXCJcXFxcQFwiICsgRE9NQUlOJCk7XG5jb25zdCBUTyQgPSBzdWJleHAoQUREUl9TUEVDJCArIHN1YmV4cChcIlxcXFwsXCIgKyBBRERSX1NQRUMkKSArIFwiKlwiKTtcbmNvbnN0IEhGTkFNRSQgPSBzdWJleHAoUUNIQVIkICsgXCIqXCIpO1xuY29uc3QgSEZWQUxVRSQgPSBIRk5BTUUkO1xuY29uc3QgSEZJRUxEJCA9IHN1YmV4cChIRk5BTUUkICsgXCJcXFxcPVwiICsgSEZWQUxVRSQpO1xuY29uc3QgSEZJRUxEUzIkID0gc3ViZXhwKEhGSUVMRCQgKyBzdWJleHAoXCJcXFxcJlwiICsgSEZJRUxEJCkgKyBcIipcIik7XG5jb25zdCBIRklFTERTJCA9IHN1YmV4cChcIlxcXFw/XCIgKyBIRklFTERTMiQpO1xuY29uc3QgTUFJTFRPX1VSSSA9IG5ldyBSZWdFeHAoXCJebWFpbHRvXFxcXDpcIiArIFRPJCArIFwiP1wiICsgSEZJRUxEUyQgKyBcIj8kXCIpO1xuXG5jb25zdCBVTlJFU0VSVkVEID0gbmV3IFJlZ0V4cChVTlJFU0VSVkVEJCQsIFwiZ1wiKTtcbmNvbnN0IFBDVF9FTkNPREVEID0gbmV3IFJlZ0V4cChQQ1RfRU5DT0RFRCQsIFwiZ1wiKTtcbmNvbnN0IE5PVF9MT0NBTF9QQVJUID0gbmV3IFJlZ0V4cChtZXJnZShcIlteXVwiLCBBVEVYVCQkLCBcIltcXFxcLl1cIiwgJ1tcXFxcXCJdJywgVkNIQVIkJCksIFwiZ1wiKTtcbmNvbnN0IE5PVF9ET01BSU4gPSBuZXcgUmVnRXhwKG1lcmdlKFwiW15dXCIsIEFURVhUJCQsIFwiW1xcXFwuXVwiLCBcIltcXFxcW11cIiwgRFRFWFRfTk9fT0JTJCQsIFwiW1xcXFxdXVwiKSwgXCJnXCIpO1xuY29uc3QgTk9UX0hGTkFNRSA9IG5ldyBSZWdFeHAobWVyZ2UoXCJbXl1cIiwgVU5SRVNFUlZFRCQkLCBTT01FX0RFTElNUyQkKSwgXCJnXCIpO1xuY29uc3QgTk9UX0hGVkFMVUUgPSBOT1RfSEZOQU1FO1xuY29uc3QgVE8gPSBuZXcgUmVnRXhwKFwiXlwiICsgVE8kICsgXCIkXCIpO1xuY29uc3QgSEZJRUxEUyA9IG5ldyBSZWdFeHAoXCJeXCIgKyBIRklFTERTMiQgKyBcIiRcIik7XG5cbmZ1bmN0aW9uIGRlY29kZVVucmVzZXJ2ZWQoc3RyOnN0cmluZyk6c3RyaW5nIHtcblx0Y29uc3QgZGVjU3RyID0gcGN0RGVjQ2hhcnMoc3RyKTtcblx0cmV0dXJuICghZGVjU3RyLm1hdGNoKFVOUkVTRVJWRUQpID8gc3RyIDogZGVjU3RyKTtcbn1cblxuY29uc3QgaGFuZGxlcjpVUklTY2hlbWVIYW5kbGVyPE1haWx0b0NvbXBvbmVudHM+ID0gIHtcblx0c2NoZW1lIDogXCJtYWlsdG9cIixcblxuXHRwYXJzZSA6IGZ1bmN0aW9uIChjb21wb25lbnRzOlVSSUNvbXBvbmVudHMsIG9wdGlvbnM6VVJJT3B0aW9ucyk6TWFpbHRvQ29tcG9uZW50cyB7XG5cdFx0Y29uc3QgbWFpbHRvQ29tcG9uZW50cyA9IGNvbXBvbmVudHMgYXMgTWFpbHRvQ29tcG9uZW50cztcblx0XHRjb25zdCB0byA9IG1haWx0b0NvbXBvbmVudHMudG8gPSAobWFpbHRvQ29tcG9uZW50cy5wYXRoID8gbWFpbHRvQ29tcG9uZW50cy5wYXRoLnNwbGl0KFwiLFwiKSA6IFtdKTtcblx0XHRtYWlsdG9Db21wb25lbnRzLnBhdGggPSB1bmRlZmluZWQ7XG5cblx0XHRpZiAobWFpbHRvQ29tcG9uZW50cy5xdWVyeSkge1xuXHRcdFx0bGV0IHVua25vd25IZWFkZXJzID0gZmFsc2Vcblx0XHRcdGNvbnN0IGhlYWRlcnM6TWFpbHRvSGVhZGVycyA9IHt9O1xuXHRcdFx0Y29uc3QgaGZpZWxkcyA9IG1haWx0b0NvbXBvbmVudHMucXVlcnkuc3BsaXQoXCImXCIpO1xuXG5cdFx0XHRmb3IgKGxldCB4ID0gMCwgeGwgPSBoZmllbGRzLmxlbmd0aDsgeCA8IHhsOyArK3gpIHtcblx0XHRcdFx0Y29uc3QgaGZpZWxkID0gaGZpZWxkc1t4XS5zcGxpdChcIj1cIik7XG5cblx0XHRcdFx0c3dpdGNoIChoZmllbGRbMF0pIHtcblx0XHRcdFx0XHRjYXNlIFwidG9cIjpcblx0XHRcdFx0XHRcdGNvbnN0IHRvQWRkcnMgPSBoZmllbGRbMV0uc3BsaXQoXCIsXCIpO1xuXHRcdFx0XHRcdFx0Zm9yIChsZXQgeCA9IDAsIHhsID0gdG9BZGRycy5sZW5ndGg7IHggPCB4bDsgKyt4KSB7XG5cdFx0XHRcdFx0XHRcdHRvLnB1c2godG9BZGRyc1t4XSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwic3ViamVjdFwiOlxuXHRcdFx0XHRcdFx0bWFpbHRvQ29tcG9uZW50cy5zdWJqZWN0ID0gdW5lc2NhcGVDb21wb25lbnQoaGZpZWxkWzFdLCBvcHRpb25zKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJib2R5XCI6XG5cdFx0XHRcdFx0XHRtYWlsdG9Db21wb25lbnRzLmJvZHkgPSB1bmVzY2FwZUNvbXBvbmVudChoZmllbGRbMV0sIG9wdGlvbnMpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdHVua25vd25IZWFkZXJzID0gdHJ1ZTtcblx0XHRcdFx0XHRcdGhlYWRlcnNbdW5lc2NhcGVDb21wb25lbnQoaGZpZWxkWzBdLCBvcHRpb25zKV0gPSB1bmVzY2FwZUNvbXBvbmVudChoZmllbGRbMV0sIG9wdGlvbnMpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKHVua25vd25IZWFkZXJzKSBtYWlsdG9Db21wb25lbnRzLmhlYWRlcnMgPSBoZWFkZXJzO1xuXHRcdH1cblxuXHRcdG1haWx0b0NvbXBvbmVudHMucXVlcnkgPSB1bmRlZmluZWQ7XG5cblx0XHRmb3IgKGxldCB4ID0gMCwgeGwgPSB0by5sZW5ndGg7IHggPCB4bDsgKyt4KSB7XG5cdFx0XHRjb25zdCBhZGRyID0gdG9beF0uc3BsaXQoXCJAXCIpO1xuXG5cdFx0XHRhZGRyWzBdID0gdW5lc2NhcGVDb21wb25lbnQoYWRkclswXSk7XG5cblx0XHRcdGlmICghb3B0aW9ucy51bmljb2RlU3VwcG9ydCkge1xuXHRcdFx0XHQvL2NvbnZlcnQgVW5pY29kZSBJRE4gLT4gQVNDSUkgSUROXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0YWRkclsxXSA9IHB1bnljb2RlLnRvQVNDSUkodW5lc2NhcGVDb21wb25lbnQoYWRkclsxXSwgb3B0aW9ucykudG9Mb3dlckNhc2UoKSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRtYWlsdG9Db21wb25lbnRzLmVycm9yID0gbWFpbHRvQ29tcG9uZW50cy5lcnJvciB8fCBcIkVtYWlsIGFkZHJlc3MncyBkb21haW4gbmFtZSBjYW4gbm90IGJlIGNvbnZlcnRlZCB0byBBU0NJSSB2aWEgcHVueWNvZGU6IFwiICsgZTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YWRkclsxXSA9IHVuZXNjYXBlQ29tcG9uZW50KGFkZHJbMV0sIG9wdGlvbnMpLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHR9XG5cblx0XHRcdHRvW3hdID0gYWRkci5qb2luKFwiQFwiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbWFpbHRvQ29tcG9uZW50cztcblx0fSxcblxuXHRzZXJpYWxpemUgOiBmdW5jdGlvbiAobWFpbHRvQ29tcG9uZW50czpNYWlsdG9Db21wb25lbnRzLCBvcHRpb25zOlVSSU9wdGlvbnMpOlVSSUNvbXBvbmVudHMge1xuXHRcdGNvbnN0IGNvbXBvbmVudHMgPSBtYWlsdG9Db21wb25lbnRzIGFzIFVSSUNvbXBvbmVudHM7XG5cdFx0Y29uc3QgdG8gPSB0b0FycmF5KG1haWx0b0NvbXBvbmVudHMudG8pO1xuXHRcdGlmICh0bykge1xuXHRcdFx0Zm9yIChsZXQgeCA9IDAsIHhsID0gdG8ubGVuZ3RoOyB4IDwgeGw7ICsreCkge1xuXHRcdFx0XHRjb25zdCB0b0FkZHIgPSBTdHJpbmcodG9beF0pO1xuXHRcdFx0XHRjb25zdCBhdElkeCA9IHRvQWRkci5sYXN0SW5kZXhPZihcIkBcIik7XG5cdFx0XHRcdGNvbnN0IGxvY2FsUGFydCA9ICh0b0FkZHIuc2xpY2UoMCwgYXRJZHgpKS5yZXBsYWNlKFBDVF9FTkNPREVELCBkZWNvZGVVbnJlc2VydmVkKS5yZXBsYWNlKFBDVF9FTkNPREVELCB0b1VwcGVyQ2FzZSkucmVwbGFjZShOT1RfTE9DQUxfUEFSVCwgcGN0RW5jQ2hhcik7XG5cdFx0XHRcdGxldCBkb21haW4gPSB0b0FkZHIuc2xpY2UoYXRJZHggKyAxKTtcblxuXHRcdFx0XHQvL2NvbnZlcnQgSUROIHZpYSBwdW55Y29kZVxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGRvbWFpbiA9ICghb3B0aW9ucy5pcmkgPyBwdW55Y29kZS50b0FTQ0lJKHVuZXNjYXBlQ29tcG9uZW50KGRvbWFpbiwgb3B0aW9ucykudG9Mb3dlckNhc2UoKSkgOiBwdW55Y29kZS50b1VuaWNvZGUoZG9tYWluKSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRjb21wb25lbnRzLmVycm9yID0gY29tcG9uZW50cy5lcnJvciB8fCBcIkVtYWlsIGFkZHJlc3MncyBkb21haW4gbmFtZSBjYW4gbm90IGJlIGNvbnZlcnRlZCB0byBcIiArICghb3B0aW9ucy5pcmkgPyBcIkFTQ0lJXCIgOiBcIlVuaWNvZGVcIikgKyBcIiB2aWEgcHVueWNvZGU6IFwiICsgZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRvW3hdID0gbG9jYWxQYXJ0ICsgXCJAXCIgKyBkb21haW47XG5cdFx0XHR9XG5cblx0XHRcdGNvbXBvbmVudHMucGF0aCA9IHRvLmpvaW4oXCIsXCIpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGhlYWRlcnMgPSBtYWlsdG9Db21wb25lbnRzLmhlYWRlcnMgPSBtYWlsdG9Db21wb25lbnRzLmhlYWRlcnMgfHwge307XG5cblx0XHRpZiAobWFpbHRvQ29tcG9uZW50cy5zdWJqZWN0KSBoZWFkZXJzW1wic3ViamVjdFwiXSA9IG1haWx0b0NvbXBvbmVudHMuc3ViamVjdDtcblx0XHRpZiAobWFpbHRvQ29tcG9uZW50cy5ib2R5KSBoZWFkZXJzW1wiYm9keVwiXSA9IG1haWx0b0NvbXBvbmVudHMuYm9keTtcblxuXHRcdGNvbnN0IGZpZWxkcyA9IFtdO1xuXHRcdGZvciAoY29uc3QgbmFtZSBpbiBoZWFkZXJzKSB7XG5cdFx0XHRpZiAoaGVhZGVyc1tuYW1lXSAhPT0gT1tuYW1lXSkge1xuXHRcdFx0XHRmaWVsZHMucHVzaChcblx0XHRcdFx0XHRuYW1lLnJlcGxhY2UoUENUX0VOQ09ERUQsIGRlY29kZVVucmVzZXJ2ZWQpLnJlcGxhY2UoUENUX0VOQ09ERUQsIHRvVXBwZXJDYXNlKS5yZXBsYWNlKE5PVF9IRk5BTUUsIHBjdEVuY0NoYXIpICtcblx0XHRcdFx0XHRcIj1cIiArXG5cdFx0XHRcdFx0aGVhZGVyc1tuYW1lXS5yZXBsYWNlKFBDVF9FTkNPREVELCBkZWNvZGVVbnJlc2VydmVkKS5yZXBsYWNlKFBDVF9FTkNPREVELCB0b1VwcGVyQ2FzZSkucmVwbGFjZShOT1RfSEZWQUxVRSwgcGN0RW5jQ2hhcilcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGZpZWxkcy5sZW5ndGgpIHtcblx0XHRcdGNvbXBvbmVudHMucXVlcnkgPSBmaWVsZHMuam9pbihcIiZcIik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbXBvbmVudHM7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgaGFuZGxlcjsiLCJpbXBvcnQgeyBVUklTY2hlbWVIYW5kbGVyLCBVUklDb21wb25lbnRzLCBVUklPcHRpb25zIH0gZnJvbSBcIi4uL3VyaVwiO1xuaW1wb3J0IHsgcGN0RW5jQ2hhciwgU0NIRU1FUyB9IGZyb20gXCIuLi91cmlcIjtcblxuZXhwb3J0IGludGVyZmFjZSBVUk5Db21wb25lbnRzIGV4dGVuZHMgVVJJQ29tcG9uZW50cyB7XG5cdG5pZD86c3RyaW5nO1xuXHRuc3M/OnN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVUk5PcHRpb25zIGV4dGVuZHMgVVJJT3B0aW9ucyB7XG5cdG5pZD86c3RyaW5nO1xufVxuXG5jb25zdCBOSUQkID0gXCIoPzpbMC05QS1aYS16XVswLTlBLVphLXpcXFxcLV17MSwzMX0pXCI7XG5jb25zdCBQQ1RfRU5DT0RFRCQgPSBcIig/OlxcXFwlWzAtOUEtRmEtZl17Mn0pXCI7XG5jb25zdCBUUkFOUyQkID0gXCJbMC05QS1aYS16XFxcXChcXFxcKVxcXFwrXFxcXCxcXFxcLVxcXFwuXFxcXDpcXFxcPVxcXFxAXFxcXDtcXFxcJFxcXFxfXFxcXCFcXFxcKlxcXFwnXFxcXC9cXFxcP1xcXFwjXVwiO1xuY29uc3QgTlNTJCA9IFwiKD86KD86XCIgKyBQQ1RfRU5DT0RFRCQgKyBcInxcIiArIFRSQU5TJCQgKyBcIikrKVwiO1xuY29uc3QgVVJOX1NDSEVNRSA9IG5ldyBSZWdFeHAoXCJedXJuXFxcXDooXCIgKyBOSUQkICsgXCIpJFwiKTtcbmNvbnN0IFVSTl9QQVRIID0gbmV3IFJlZ0V4cChcIl4oXCIgKyBOSUQkICsgXCIpXFxcXDooXCIgKyBOU1MkICsgXCIpJFwiKTtcbmNvbnN0IFVSTl9QQVJTRSA9IC9eKFteXFw6XSspXFw6KC4qKS87XG5jb25zdCBVUk5fRVhDTFVERUQgPSAvW1xceDAwLVxceDIwXFxcXFxcXCJcXCZcXDxcXD5cXFtcXF1cXF5cXGBcXHtcXHxcXH1cXH5cXHg3Ri1cXHhGRl0vZztcblxuLy9SRkMgMjE0MVxuY29uc3QgaGFuZGxlcjpVUklTY2hlbWVIYW5kbGVyPFVSTkNvbXBvbmVudHMsVVJOT3B0aW9ucz4gPSB7XG5cdHNjaGVtZSA6IFwidXJuXCIsXG5cblx0cGFyc2UgOiBmdW5jdGlvbiAoY29tcG9uZW50czpVUklDb21wb25lbnRzLCBvcHRpb25zOlVSTk9wdGlvbnMpOlVSTkNvbXBvbmVudHMge1xuXHRcdGNvbnN0IG1hdGNoZXMgPSBjb21wb25lbnRzLnBhdGggJiYgY29tcG9uZW50cy5wYXRoLm1hdGNoKFVSTl9QQVJTRSk7XG5cdFx0bGV0IHVybkNvbXBvbmVudHMgPSBjb21wb25lbnRzIGFzIFVSTkNvbXBvbmVudHM7XG5cblx0XHRpZiAobWF0Y2hlcykge1xuXHRcdFx0Y29uc3Qgc2NoZW1lID0gb3B0aW9ucy5zY2hlbWUgfHwgdXJuQ29tcG9uZW50cy5zY2hlbWUgfHwgXCJ1cm5cIjtcblx0XHRcdGNvbnN0IG5pZCA9IG1hdGNoZXNbMV0udG9Mb3dlckNhc2UoKTtcblx0XHRcdGNvbnN0IG5zcyA9IG1hdGNoZXNbMl07XG5cdFx0XHRjb25zdCB1cm5TY2hlbWUgPSBgJHtzY2hlbWV9OiR7b3B0aW9ucy5uaWQgfHwgbmlkfWA7XG5cdFx0XHRjb25zdCBzY2hlbWVIYW5kbGVyID0gU0NIRU1FU1t1cm5TY2hlbWVdO1xuXG5cdFx0XHR1cm5Db21wb25lbnRzLm5pZCA9IG5pZDtcblx0XHRcdHVybkNvbXBvbmVudHMubnNzID0gbnNzO1xuXHRcdFx0dXJuQ29tcG9uZW50cy5wYXRoID0gdW5kZWZpbmVkO1xuXG5cdFx0XHRpZiAoc2NoZW1lSGFuZGxlcikge1xuXHRcdFx0XHR1cm5Db21wb25lbnRzID0gc2NoZW1lSGFuZGxlci5wYXJzZSh1cm5Db21wb25lbnRzLCBvcHRpb25zKSBhcyBVUk5Db21wb25lbnRzO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR1cm5Db21wb25lbnRzLmVycm9yID0gdXJuQ29tcG9uZW50cy5lcnJvciB8fCBcIlVSTiBjYW4gbm90IGJlIHBhcnNlZC5cIjtcblx0XHR9XG5cblx0XHRyZXR1cm4gdXJuQ29tcG9uZW50cztcblx0fSxcblxuXHRzZXJpYWxpemUgOiBmdW5jdGlvbiAodXJuQ29tcG9uZW50czpVUk5Db21wb25lbnRzLCBvcHRpb25zOlVSTk9wdGlvbnMpOlVSSUNvbXBvbmVudHMge1xuXHRcdGNvbnN0IHNjaGVtZSA9IG9wdGlvbnMuc2NoZW1lIHx8IHVybkNvbXBvbmVudHMuc2NoZW1lIHx8IFwidXJuXCI7XG5cdFx0Y29uc3QgbmlkID0gdXJuQ29tcG9uZW50cy5uaWQ7XG5cdFx0Y29uc3QgdXJuU2NoZW1lID0gYCR7c2NoZW1lfToke29wdGlvbnMubmlkIHx8IG5pZH1gO1xuXHRcdGNvbnN0IHNjaGVtZUhhbmRsZXIgPSBTQ0hFTUVTW3VyblNjaGVtZV07XG5cblx0XHRpZiAoc2NoZW1lSGFuZGxlcikge1xuXHRcdFx0dXJuQ29tcG9uZW50cyA9IHNjaGVtZUhhbmRsZXIuc2VyaWFsaXplKHVybkNvbXBvbmVudHMsIG9wdGlvbnMpIGFzIFVSTkNvbXBvbmVudHM7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdXJpQ29tcG9uZW50cyA9IHVybkNvbXBvbmVudHMgYXMgVVJJQ29tcG9uZW50cztcblx0XHRjb25zdCBuc3MgPSB1cm5Db21wb25lbnRzLm5zcztcblx0XHR1cmlDb21wb25lbnRzLnBhdGggPSBgJHtuaWQgfHwgb3B0aW9ucy5uaWR9OiR7bnNzfWA7XG5cblx0XHRyZXR1cm4gdXJpQ29tcG9uZW50cztcblx0fSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGhhbmRsZXI7IiwiaW1wb3J0IHsgVVJJU2NoZW1lSGFuZGxlciwgVVJJQ29tcG9uZW50cywgVVJJT3B0aW9ucyB9IGZyb20gXCIuLi91cmlcIjtcbmltcG9ydCB7IFVSTkNvbXBvbmVudHMgfSBmcm9tIFwiLi91cm5cIjtcbmltcG9ydCB7IFNDSEVNRVMgfSBmcm9tIFwiLi4vdXJpXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVVVJRENvbXBvbmVudHMgZXh0ZW5kcyBVUk5Db21wb25lbnRzIHtcblx0dXVpZD86IHN0cmluZztcbn1cblxuY29uc3QgVVVJRCA9IC9eWzAtOUEtRmEtZl17OH0oPzpcXC1bMC05QS1GYS1mXXs0fSl7M31cXC1bMC05QS1GYS1mXXsxMn0kLztcbmNvbnN0IFVVSURfUEFSU0UgPSAvXlswLTlBLUZhLWZcXC1dezM2fS87XG5cbi8vUkZDIDQxMjJcbmNvbnN0IGhhbmRsZXI6VVJJU2NoZW1lSGFuZGxlcjxVVUlEQ29tcG9uZW50cywgVVJJT3B0aW9ucywgVVJOQ29tcG9uZW50cz4gPSB7XG5cdHNjaGVtZSA6IFwidXJuOnV1aWRcIixcblxuXHRwYXJzZSA6IGZ1bmN0aW9uICh1cm5Db21wb25lbnRzOlVSTkNvbXBvbmVudHMsIG9wdGlvbnM6VVJJT3B0aW9ucyk6VVVJRENvbXBvbmVudHMge1xuXHRcdGNvbnN0IHV1aWRDb21wb25lbnRzID0gdXJuQ29tcG9uZW50cyBhcyBVVUlEQ29tcG9uZW50cztcblx0XHR1dWlkQ29tcG9uZW50cy51dWlkID0gdXVpZENvbXBvbmVudHMubnNzO1xuXHRcdHV1aWRDb21wb25lbnRzLm5zcyA9IHVuZGVmaW5lZDtcblxuXHRcdGlmICghb3B0aW9ucy50b2xlcmFudCAmJiAoIXV1aWRDb21wb25lbnRzLnV1aWQgfHwgIXV1aWRDb21wb25lbnRzLnV1aWQubWF0Y2goVVVJRCkpKSB7XG5cdFx0XHR1dWlkQ29tcG9uZW50cy5lcnJvciA9IHV1aWRDb21wb25lbnRzLmVycm9yIHx8IFwiVVVJRCBpcyBub3QgdmFsaWQuXCI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHV1aWRDb21wb25lbnRzO1xuXHR9LFxuXG5cdHNlcmlhbGl6ZSA6IGZ1bmN0aW9uICh1dWlkQ29tcG9uZW50czpVVUlEQ29tcG9uZW50cywgb3B0aW9uczpVUklPcHRpb25zKTpVUk5Db21wb25lbnRzIHtcblx0XHRjb25zdCB1cm5Db21wb25lbnRzID0gdXVpZENvbXBvbmVudHMgYXMgVVJOQ29tcG9uZW50cztcblx0XHQvL25vcm1hbGl6ZSBVVUlEXG5cdFx0dXJuQ29tcG9uZW50cy5uc3MgPSAodXVpZENvbXBvbmVudHMudXVpZCB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpO1xuXHRcdHJldHVybiB1cm5Db21wb25lbnRzO1xuXHR9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgaGFuZGxlcjsiLCJpbXBvcnQgeyBTQ0hFTUVTIH0gZnJvbSBcIi4vdXJpXCI7XG5cbmltcG9ydCBodHRwIGZyb20gXCIuL3NjaGVtZXMvaHR0cFwiO1xuU0NIRU1FU1todHRwLnNjaGVtZV0gPSBodHRwO1xuXG5pbXBvcnQgaHR0cHMgZnJvbSBcIi4vc2NoZW1lcy9odHRwc1wiO1xuU0NIRU1FU1todHRwcy5zY2hlbWVdID0gaHR0cHM7XG5cbmltcG9ydCBtYWlsdG8gZnJvbSBcIi4vc2NoZW1lcy9tYWlsdG9cIjtcblNDSEVNRVNbbWFpbHRvLnNjaGVtZV0gPSBtYWlsdG87XG5cbmltcG9ydCB1cm4gZnJvbSBcIi4vc2NoZW1lcy91cm5cIjtcblNDSEVNRVNbdXJuLnNjaGVtZV0gPSB1cm47XG5cbmltcG9ydCB1dWlkIGZyb20gXCIuL3NjaGVtZXMvdXJuLXV1aWRcIjtcblNDSEVNRVNbdXVpZC5zY2hlbWVdID0gdXVpZDtcblxuZXhwb3J0ICogZnJvbSBcIi4vdXJpXCI7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vIGRvIG5vdCBlZGl0IC5qcyBmaWxlcyBkaXJlY3RseSAtIGVkaXQgc3JjL2luZGV4LmpzdFxuXG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBlcXVhbChhLCBiKSB7XG4gIGlmIChhID09PSBiKSByZXR1cm4gdHJ1ZTtcblxuICBpZiAoYSAmJiBiICYmIHR5cGVvZiBhID09ICdvYmplY3QnICYmIHR5cGVvZiBiID09ICdvYmplY3QnKSB7XG4gICAgaWYgKGEuY29uc3RydWN0b3IgIT09IGIuY29uc3RydWN0b3IpIHJldHVybiBmYWxzZTtcblxuICAgIHZhciBsZW5ndGgsIGksIGtleXM7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHtcbiAgICAgIGxlbmd0aCA9IGEubGVuZ3RoO1xuICAgICAgaWYgKGxlbmd0aCAhPSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgZm9yIChpID0gbGVuZ3RoOyBpLS0gIT09IDA7KVxuICAgICAgICBpZiAoIWVxdWFsKGFbaV0sIGJbaV0pKSByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cblxuXG4gICAgaWYgKGEuY29uc3RydWN0b3IgPT09IFJlZ0V4cCkgcmV0dXJuIGEuc291cmNlID09PSBiLnNvdXJjZSAmJiBhLmZsYWdzID09PSBiLmZsYWdzO1xuICAgIGlmIChhLnZhbHVlT2YgIT09IE9iamVjdC5wcm90b3R5cGUudmFsdWVPZikgcmV0dXJuIGEudmFsdWVPZigpID09PSBiLnZhbHVlT2YoKTtcbiAgICBpZiAoYS50b1N0cmluZyAhPT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZykgcmV0dXJuIGEudG9TdHJpbmcoKSA9PT0gYi50b1N0cmluZygpO1xuXG4gICAga2V5cyA9IE9iamVjdC5rZXlzKGEpO1xuICAgIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIGlmIChsZW5ndGggIT09IE9iamVjdC5rZXlzKGIpLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgZm9yIChpID0gbGVuZ3RoOyBpLS0gIT09IDA7KVxuICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwga2V5c1tpXSkpIHJldHVybiBmYWxzZTtcblxuICAgIGZvciAoaSA9IGxlbmd0aDsgaS0tICE9PSAwOykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG5cbiAgICAgIGlmICghZXF1YWwoYVtrZXldLCBiW2tleV0pKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyB0cnVlIGlmIGJvdGggTmFOLCBmYWxzZSBvdGhlcndpc2VcbiAgcmV0dXJuIGEhPT1hICYmIGIhPT1iO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmdcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iZXN0aWVqcy9wdW55Y29kZS5qcyAtIHB1bnljb2RlLnVjczIuZGVjb2RlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHVjczJsZW5ndGgoc3RyKSB7XG4gIHZhciBsZW5ndGggPSAwXG4gICAgLCBsZW4gPSBzdHIubGVuZ3RoXG4gICAgLCBwb3MgPSAwXG4gICAgLCB2YWx1ZTtcbiAgd2hpbGUgKHBvcyA8IGxlbikge1xuICAgIGxlbmd0aCsrO1xuICAgIHZhbHVlID0gc3RyLmNoYXJDb2RlQXQocG9zKyspO1xuICAgIGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIHBvcyA8IGxlbikge1xuICAgICAgLy8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG4gICAgICB2YWx1ZSA9IHN0ci5jaGFyQ29kZUF0KHBvcyk7XG4gICAgICBpZiAoKHZhbHVlICYgMHhGQzAwKSA9PSAweERDMDApIHBvcysrOyAvLyBsb3cgc3Vycm9nYXRlXG4gICAgfVxuICB9XG4gIHJldHVybiBsZW5ndGg7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjb3B5OiBjb3B5LFxuICBjaGVja0RhdGFUeXBlOiBjaGVja0RhdGFUeXBlLFxuICBjaGVja0RhdGFUeXBlczogY2hlY2tEYXRhVHlwZXMsXG4gIGNvZXJjZVRvVHlwZXM6IGNvZXJjZVRvVHlwZXMsXG4gIHRvSGFzaDogdG9IYXNoLFxuICBnZXRQcm9wZXJ0eTogZ2V0UHJvcGVydHksXG4gIGVzY2FwZVF1b3RlczogZXNjYXBlUXVvdGVzLFxuICBlcXVhbDogcmVxdWlyZSgnZmFzdC1kZWVwLWVxdWFsJyksXG4gIHVjczJsZW5ndGg6IHJlcXVpcmUoJy4vdWNzMmxlbmd0aCcpLFxuICB2YXJPY2N1cmVuY2VzOiB2YXJPY2N1cmVuY2VzLFxuICB2YXJSZXBsYWNlOiB2YXJSZXBsYWNlLFxuICBjbGVhblVwQ29kZTogY2xlYW5VcENvZGUsXG4gIGZpbmFsQ2xlYW5VcENvZGU6IGZpbmFsQ2xlYW5VcENvZGUsXG4gIHNjaGVtYUhhc1J1bGVzOiBzY2hlbWFIYXNSdWxlcyxcbiAgc2NoZW1hSGFzUnVsZXNFeGNlcHQ6IHNjaGVtYUhhc1J1bGVzRXhjZXB0LFxuICBzY2hlbWFVbmtub3duUnVsZXM6IHNjaGVtYVVua25vd25SdWxlcyxcbiAgdG9RdW90ZWRTdHJpbmc6IHRvUXVvdGVkU3RyaW5nLFxuICBnZXRQYXRoRXhwcjogZ2V0UGF0aEV4cHIsXG4gIGdldFBhdGg6IGdldFBhdGgsXG4gIGdldERhdGE6IGdldERhdGEsXG4gIHVuZXNjYXBlRnJhZ21lbnQ6IHVuZXNjYXBlRnJhZ21lbnQsXG4gIHVuZXNjYXBlSnNvblBvaW50ZXI6IHVuZXNjYXBlSnNvblBvaW50ZXIsXG4gIGVzY2FwZUZyYWdtZW50OiBlc2NhcGVGcmFnbWVudCxcbiAgZXNjYXBlSnNvblBvaW50ZXI6IGVzY2FwZUpzb25Qb2ludGVyXG59O1xuXG5cbmZ1bmN0aW9uIGNvcHkobywgdG8pIHtcbiAgdG8gPSB0byB8fCB7fTtcbiAgZm9yICh2YXIga2V5IGluIG8pIHRvW2tleV0gPSBvW2tleV07XG4gIHJldHVybiB0bztcbn1cblxuXG5mdW5jdGlvbiBjaGVja0RhdGFUeXBlKGRhdGFUeXBlLCBkYXRhLCBuZWdhdGUpIHtcbiAgdmFyIEVRVUFMID0gbmVnYXRlID8gJyAhPT0gJyA6ICcgPT09ICdcbiAgICAsIEFORCA9IG5lZ2F0ZSA/ICcgfHwgJyA6ICcgJiYgJ1xuICAgICwgT0sgPSBuZWdhdGUgPyAnIScgOiAnJ1xuICAgICwgTk9UID0gbmVnYXRlID8gJycgOiAnISc7XG4gIHN3aXRjaCAoZGF0YVR5cGUpIHtcbiAgICBjYXNlICdudWxsJzogcmV0dXJuIGRhdGEgKyBFUVVBTCArICdudWxsJztcbiAgICBjYXNlICdhcnJheSc6IHJldHVybiBPSyArICdBcnJheS5pc0FycmF5KCcgKyBkYXRhICsgJyknO1xuICAgIGNhc2UgJ29iamVjdCc6IHJldHVybiAnKCcgKyBPSyArIGRhdGEgKyBBTkQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAndHlwZW9mICcgKyBkYXRhICsgRVFVQUwgKyAnXCJvYmplY3RcIicgKyBBTkQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBOT1QgKyAnQXJyYXkuaXNBcnJheSgnICsgZGF0YSArICcpKSc7XG4gICAgY2FzZSAnaW50ZWdlcic6IHJldHVybiAnKHR5cGVvZiAnICsgZGF0YSArIEVRVUFMICsgJ1wibnVtYmVyXCInICsgQU5EICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PVCArICcoJyArIGRhdGEgKyAnICUgMSknICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIEFORCArIGRhdGEgKyBFUVVBTCArIGRhdGEgKyAnKSc7XG4gICAgZGVmYXVsdDogcmV0dXJuICd0eXBlb2YgJyArIGRhdGEgKyBFUVVBTCArICdcIicgKyBkYXRhVHlwZSArICdcIic7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBjaGVja0RhdGFUeXBlcyhkYXRhVHlwZXMsIGRhdGEpIHtcbiAgc3dpdGNoIChkYXRhVHlwZXMubGVuZ3RoKSB7XG4gICAgY2FzZSAxOiByZXR1cm4gY2hlY2tEYXRhVHlwZShkYXRhVHlwZXNbMF0sIGRhdGEsIHRydWUpO1xuICAgIGRlZmF1bHQ6XG4gICAgICB2YXIgY29kZSA9ICcnO1xuICAgICAgdmFyIHR5cGVzID0gdG9IYXNoKGRhdGFUeXBlcyk7XG4gICAgICBpZiAodHlwZXMuYXJyYXkgJiYgdHlwZXMub2JqZWN0KSB7XG4gICAgICAgIGNvZGUgPSB0eXBlcy5udWxsID8gJygnOiAnKCEnICsgZGF0YSArICcgfHwgJztcbiAgICAgICAgY29kZSArPSAndHlwZW9mICcgKyBkYXRhICsgJyAhPT0gXCJvYmplY3RcIiknO1xuICAgICAgICBkZWxldGUgdHlwZXMubnVsbDtcbiAgICAgICAgZGVsZXRlIHR5cGVzLmFycmF5O1xuICAgICAgICBkZWxldGUgdHlwZXMub2JqZWN0O1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVzLm51bWJlcikgZGVsZXRlIHR5cGVzLmludGVnZXI7XG4gICAgICBmb3IgKHZhciB0IGluIHR5cGVzKVxuICAgICAgICBjb2RlICs9IChjb2RlID8gJyAmJiAnIDogJycgKSArIGNoZWNrRGF0YVR5cGUodCwgZGF0YSwgdHJ1ZSk7XG5cbiAgICAgIHJldHVybiBjb2RlO1xuICB9XG59XG5cblxudmFyIENPRVJDRV9UT19UWVBFUyA9IHRvSGFzaChbICdzdHJpbmcnLCAnbnVtYmVyJywgJ2ludGVnZXInLCAnYm9vbGVhbicsICdudWxsJyBdKTtcbmZ1bmN0aW9uIGNvZXJjZVRvVHlwZXMob3B0aW9uQ29lcmNlVHlwZXMsIGRhdGFUeXBlcykge1xuICBpZiAoQXJyYXkuaXNBcnJheShkYXRhVHlwZXMpKSB7XG4gICAgdmFyIHR5cGVzID0gW107XG4gICAgZm9yICh2YXIgaT0wOyBpPGRhdGFUeXBlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHQgPSBkYXRhVHlwZXNbaV07XG4gICAgICBpZiAoQ09FUkNFX1RPX1RZUEVTW3RdKSB0eXBlc1t0eXBlcy5sZW5ndGhdID0gdDtcbiAgICAgIGVsc2UgaWYgKG9wdGlvbkNvZXJjZVR5cGVzID09PSAnYXJyYXknICYmIHQgPT09ICdhcnJheScpIHR5cGVzW3R5cGVzLmxlbmd0aF0gPSB0O1xuICAgIH1cbiAgICBpZiAodHlwZXMubGVuZ3RoKSByZXR1cm4gdHlwZXM7XG4gIH0gZWxzZSBpZiAoQ09FUkNFX1RPX1RZUEVTW2RhdGFUeXBlc10pIHtcbiAgICByZXR1cm4gW2RhdGFUeXBlc107XG4gIH0gZWxzZSBpZiAob3B0aW9uQ29lcmNlVHlwZXMgPT09ICdhcnJheScgJiYgZGF0YVR5cGVzID09PSAnYXJyYXknKSB7XG4gICAgcmV0dXJuIFsnYXJyYXknXTtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIHRvSGFzaChhcnIpIHtcbiAgdmFyIGhhc2ggPSB7fTtcbiAgZm9yICh2YXIgaT0wOyBpPGFyci5sZW5ndGg7IGkrKykgaGFzaFthcnJbaV1dID0gdHJ1ZTtcbiAgcmV0dXJuIGhhc2g7XG59XG5cblxudmFyIElERU5USUZJRVIgPSAvXlthLXokX11bYS16JF8wLTldKiQvaTtcbnZhciBTSU5HTEVfUVVPVEUgPSAvJ3xcXFxcL2c7XG5mdW5jdGlvbiBnZXRQcm9wZXJ0eShrZXkpIHtcbiAgcmV0dXJuIHR5cGVvZiBrZXkgPT0gJ251bWJlcidcbiAgICAgICAgICA/ICdbJyArIGtleSArICddJ1xuICAgICAgICAgIDogSURFTlRJRklFUi50ZXN0KGtleSlcbiAgICAgICAgICAgID8gJy4nICsga2V5XG4gICAgICAgICAgICA6IFwiWydcIiArIGVzY2FwZVF1b3RlcyhrZXkpICsgXCInXVwiO1xufVxuXG5cbmZ1bmN0aW9uIGVzY2FwZVF1b3RlcyhzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKFNJTkdMRV9RVU9URSwgJ1xcXFwkJicpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxuL2csICdcXFxcbicpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxyL2csICdcXFxccicpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxmL2csICdcXFxcZicpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFx0L2csICdcXFxcdCcpO1xufVxuXG5cbmZ1bmN0aW9uIHZhck9jY3VyZW5jZXMoc3RyLCBkYXRhVmFyKSB7XG4gIGRhdGFWYXIgKz0gJ1teMC05XSc7XG4gIHZhciBtYXRjaGVzID0gc3RyLm1hdGNoKG5ldyBSZWdFeHAoZGF0YVZhciwgJ2cnKSk7XG4gIHJldHVybiBtYXRjaGVzID8gbWF0Y2hlcy5sZW5ndGggOiAwO1xufVxuXG5cbmZ1bmN0aW9uIHZhclJlcGxhY2Uoc3RyLCBkYXRhVmFyLCBleHByKSB7XG4gIGRhdGFWYXIgKz0gJyhbXjAtOV0pJztcbiAgZXhwciA9IGV4cHIucmVwbGFjZSgvXFwkL2csICckJCQkJyk7XG4gIHJldHVybiBzdHIucmVwbGFjZShuZXcgUmVnRXhwKGRhdGFWYXIsICdnJyksIGV4cHIgKyAnJDEnKTtcbn1cblxuXG52YXIgRU1QVFlfRUxTRSA9IC9lbHNlXFxzKntcXHMqfS9nXG4gICwgRU1QVFlfSUZfTk9fRUxTRSA9IC9pZlxccypcXChbXildK1xcKVxccypcXHtcXHMqXFx9KD8hXFxzKmVsc2UpL2dcbiAgLCBFTVBUWV9JRl9XSVRIX0VMU0UgPSAvaWZcXHMqXFwoKFteKV0rKVxcKVxccypcXHtcXHMqXFx9XFxzKmVsc2UoPyFcXHMqaWYpL2c7XG5mdW5jdGlvbiBjbGVhblVwQ29kZShvdXQpIHtcbiAgcmV0dXJuIG91dC5yZXBsYWNlKEVNUFRZX0VMU0UsICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoRU1QVFlfSUZfTk9fRUxTRSwgJycpXG4gICAgICAgICAgICAucmVwbGFjZShFTVBUWV9JRl9XSVRIX0VMU0UsICdpZiAoISgkMSkpJyk7XG59XG5cblxudmFyIEVSUk9SU19SRUdFWFAgPSAvW152Ll1lcnJvcnMvZ1xuICAsIFJFTU9WRV9FUlJPUlMgPSAvdmFyIGVycm9ycyA9IDA7fHZhciB2RXJyb3JzID0gbnVsbDt8dmFsaWRhdGUuZXJyb3JzID0gdkVycm9yczsvZ1xuICAsIFJFTU9WRV9FUlJPUlNfQVNZTkMgPSAvdmFyIGVycm9ycyA9IDA7fHZhciB2RXJyb3JzID0gbnVsbDsvZ1xuICAsIFJFVFVSTl9WQUxJRCA9ICdyZXR1cm4gZXJyb3JzID09PSAwOydcbiAgLCBSRVRVUk5fVFJVRSA9ICd2YWxpZGF0ZS5lcnJvcnMgPSBudWxsOyByZXR1cm4gdHJ1ZTsnXG4gICwgUkVUVVJOX0FTWU5DID0gL2lmIFxcKGVycm9ycyA9PT0gMFxcKSByZXR1cm4gZGF0YTtcXHMqZWxzZSB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yXFwodkVycm9yc1xcKTsvXG4gICwgUkVUVVJOX0RBVEFfQVNZTkMgPSAncmV0dXJuIGRhdGE7J1xuICAsIFJPT1REQVRBX1JFR0VYUCA9IC9bXkEtWmEtel8kXXJvb3REYXRhW15BLVphLXowLTlfJF0vZ1xuICAsIFJFTU9WRV9ST09UREFUQSA9IC9pZiBcXChyb290RGF0YSA9PT0gdW5kZWZpbmVkXFwpIHJvb3REYXRhID0gZGF0YTsvO1xuXG5mdW5jdGlvbiBmaW5hbENsZWFuVXBDb2RlKG91dCwgYXN5bmMpIHtcbiAgdmFyIG1hdGNoZXMgPSBvdXQubWF0Y2goRVJST1JTX1JFR0VYUCk7XG4gIGlmIChtYXRjaGVzICYmIG1hdGNoZXMubGVuZ3RoID09IDIpIHtcbiAgICBvdXQgPSBhc3luY1xuICAgICAgICAgID8gb3V0LnJlcGxhY2UoUkVNT1ZFX0VSUk9SU19BU1lOQywgJycpXG4gICAgICAgICAgICAgICAucmVwbGFjZShSRVRVUk5fQVNZTkMsIFJFVFVSTl9EQVRBX0FTWU5DKVxuICAgICAgICAgIDogb3V0LnJlcGxhY2UoUkVNT1ZFX0VSUk9SUywgJycpXG4gICAgICAgICAgICAgICAucmVwbGFjZShSRVRVUk5fVkFMSUQsIFJFVFVSTl9UUlVFKTtcbiAgfVxuXG4gIG1hdGNoZXMgPSBvdXQubWF0Y2goUk9PVERBVEFfUkVHRVhQKTtcbiAgaWYgKCFtYXRjaGVzIHx8IG1hdGNoZXMubGVuZ3RoICE9PSAzKSByZXR1cm4gb3V0O1xuICByZXR1cm4gb3V0LnJlcGxhY2UoUkVNT1ZFX1JPT1REQVRBLCAnJyk7XG59XG5cblxuZnVuY3Rpb24gc2NoZW1hSGFzUnVsZXMoc2NoZW1hLCBydWxlcykge1xuICBpZiAodHlwZW9mIHNjaGVtYSA9PSAnYm9vbGVhbicpIHJldHVybiAhc2NoZW1hO1xuICBmb3IgKHZhciBrZXkgaW4gc2NoZW1hKSBpZiAocnVsZXNba2V5XSkgcmV0dXJuIHRydWU7XG59XG5cblxuZnVuY3Rpb24gc2NoZW1hSGFzUnVsZXNFeGNlcHQoc2NoZW1hLCBydWxlcywgZXhjZXB0S2V5d29yZCkge1xuICBpZiAodHlwZW9mIHNjaGVtYSA9PSAnYm9vbGVhbicpIHJldHVybiAhc2NoZW1hICYmIGV4Y2VwdEtleXdvcmQgIT0gJ25vdCc7XG4gIGZvciAodmFyIGtleSBpbiBzY2hlbWEpIGlmIChrZXkgIT0gZXhjZXB0S2V5d29yZCAmJiBydWxlc1trZXldKSByZXR1cm4gdHJ1ZTtcbn1cblxuXG5mdW5jdGlvbiBzY2hlbWFVbmtub3duUnVsZXMoc2NoZW1hLCBydWxlcykge1xuICBpZiAodHlwZW9mIHNjaGVtYSA9PSAnYm9vbGVhbicpIHJldHVybjtcbiAgZm9yICh2YXIga2V5IGluIHNjaGVtYSkgaWYgKCFydWxlc1trZXldKSByZXR1cm4ga2V5O1xufVxuXG5cbmZ1bmN0aW9uIHRvUXVvdGVkU3RyaW5nKHN0cikge1xuICByZXR1cm4gJ1xcJycgKyBlc2NhcGVRdW90ZXMoc3RyKSArICdcXCcnO1xufVxuXG5cbmZ1bmN0aW9uIGdldFBhdGhFeHByKGN1cnJlbnRQYXRoLCBleHByLCBqc29uUG9pbnRlcnMsIGlzTnVtYmVyKSB7XG4gIHZhciBwYXRoID0ganNvblBvaW50ZXJzIC8vIGZhbHNlIGJ5IGRlZmF1bHRcbiAgICAgICAgICAgICAgPyAnXFwnL1xcJyArICcgKyBleHByICsgKGlzTnVtYmVyID8gJycgOiAnLnJlcGxhY2UoL34vZywgXFwnfjBcXCcpLnJlcGxhY2UoL1xcXFwvL2csIFxcJ34xXFwnKScpXG4gICAgICAgICAgICAgIDogKGlzTnVtYmVyID8gJ1xcJ1tcXCcgKyAnICsgZXhwciArICcgKyBcXCddXFwnJyA6ICdcXCdbXFxcXFxcJ1xcJyArICcgKyBleHByICsgJyArIFxcJ1xcXFxcXCddXFwnJyk7XG4gIHJldHVybiBqb2luUGF0aHMoY3VycmVudFBhdGgsIHBhdGgpO1xufVxuXG5cbmZ1bmN0aW9uIGdldFBhdGgoY3VycmVudFBhdGgsIHByb3AsIGpzb25Qb2ludGVycykge1xuICB2YXIgcGF0aCA9IGpzb25Qb2ludGVycyAvLyBmYWxzZSBieSBkZWZhdWx0XG4gICAgICAgICAgICAgID8gdG9RdW90ZWRTdHJpbmcoJy8nICsgZXNjYXBlSnNvblBvaW50ZXIocHJvcCkpXG4gICAgICAgICAgICAgIDogdG9RdW90ZWRTdHJpbmcoZ2V0UHJvcGVydHkocHJvcCkpO1xuICByZXR1cm4gam9pblBhdGhzKGN1cnJlbnRQYXRoLCBwYXRoKTtcbn1cblxuXG52YXIgSlNPTl9QT0lOVEVSID0gL15cXC8oPzpbXn5dfH4wfH4xKSokLztcbnZhciBSRUxBVElWRV9KU09OX1BPSU5URVIgPSAvXihbMC05XSspKCN8XFwvKD86W15+XXx+MHx+MSkqKT8kLztcbmZ1bmN0aW9uIGdldERhdGEoJGRhdGEsIGx2bCwgcGF0aHMpIHtcbiAgdmFyIHVwLCBqc29uUG9pbnRlciwgZGF0YSwgbWF0Y2hlcztcbiAgaWYgKCRkYXRhID09PSAnJykgcmV0dXJuICdyb290RGF0YSc7XG4gIGlmICgkZGF0YVswXSA9PSAnLycpIHtcbiAgICBpZiAoIUpTT05fUE9JTlRFUi50ZXN0KCRkYXRhKSkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEpTT04tcG9pbnRlcjogJyArICRkYXRhKTtcbiAgICBqc29uUG9pbnRlciA9ICRkYXRhO1xuICAgIGRhdGEgPSAncm9vdERhdGEnO1xuICB9IGVsc2Uge1xuICAgIG1hdGNoZXMgPSAkZGF0YS5tYXRjaChSRUxBVElWRV9KU09OX1BPSU5URVIpO1xuICAgIGlmICghbWF0Y2hlcykgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEpTT04tcG9pbnRlcjogJyArICRkYXRhKTtcbiAgICB1cCA9ICttYXRjaGVzWzFdO1xuICAgIGpzb25Qb2ludGVyID0gbWF0Y2hlc1syXTtcbiAgICBpZiAoanNvblBvaW50ZXIgPT0gJyMnKSB7XG4gICAgICBpZiAodXAgPj0gbHZsKSB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBhY2Nlc3MgcHJvcGVydHkvaW5kZXggJyArIHVwICsgJyBsZXZlbHMgdXAsIGN1cnJlbnQgbGV2ZWwgaXMgJyArIGx2bCk7XG4gICAgICByZXR1cm4gcGF0aHNbbHZsIC0gdXBdO1xuICAgIH1cblxuICAgIGlmICh1cCA+IGx2bCkgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYWNjZXNzIGRhdGEgJyArIHVwICsgJyBsZXZlbHMgdXAsIGN1cnJlbnQgbGV2ZWwgaXMgJyArIGx2bCk7XG4gICAgZGF0YSA9ICdkYXRhJyArICgobHZsIC0gdXApIHx8ICcnKTtcbiAgICBpZiAoIWpzb25Qb2ludGVyKSByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHZhciBleHByID0gZGF0YTtcbiAgdmFyIHNlZ21lbnRzID0ganNvblBvaW50ZXIuc3BsaXQoJy8nKTtcbiAgZm9yICh2YXIgaT0wOyBpPHNlZ21lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNlZ21lbnQgPSBzZWdtZW50c1tpXTtcbiAgICBpZiAoc2VnbWVudCkge1xuICAgICAgZGF0YSArPSBnZXRQcm9wZXJ0eSh1bmVzY2FwZUpzb25Qb2ludGVyKHNlZ21lbnQpKTtcbiAgICAgIGV4cHIgKz0gJyAmJiAnICsgZGF0YTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGV4cHI7XG59XG5cblxuZnVuY3Rpb24gam9pblBhdGhzIChhLCBiKSB7XG4gIGlmIChhID09ICdcIlwiJykgcmV0dXJuIGI7XG4gIHJldHVybiAoYSArICcgKyAnICsgYikucmVwbGFjZSgvJyBcXCsgJy9nLCAnJyk7XG59XG5cblxuZnVuY3Rpb24gdW5lc2NhcGVGcmFnbWVudChzdHIpIHtcbiAgcmV0dXJuIHVuZXNjYXBlSnNvblBvaW50ZXIoZGVjb2RlVVJJQ29tcG9uZW50KHN0cikpO1xufVxuXG5cbmZ1bmN0aW9uIGVzY2FwZUZyYWdtZW50KHN0cikge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGVzY2FwZUpzb25Qb2ludGVyKHN0cikpO1xufVxuXG5cbmZ1bmN0aW9uIGVzY2FwZUpzb25Qb2ludGVyKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL34vZywgJ34wJykucmVwbGFjZSgvXFwvL2csICd+MScpO1xufVxuXG5cbmZ1bmN0aW9uIHVuZXNjYXBlSnNvblBvaW50ZXIoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvfjEvZywgJy8nKS5yZXBsYWNlKC9+MC9nLCAnficpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNjaGVtYU9iamVjdDtcblxuZnVuY3Rpb24gU2NoZW1hT2JqZWN0KG9iaikge1xuICB1dGlsLmNvcHkob2JqLCB0aGlzKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHRyYXZlcnNlID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc2NoZW1hLCBvcHRzLCBjYikge1xuICAvLyBMZWdhY3kgc3VwcG9ydCBmb3IgdjAuMy4xIGFuZCBlYXJsaWVyLlxuICBpZiAodHlwZW9mIG9wdHMgPT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gb3B0cztcbiAgICBvcHRzID0ge307XG4gIH1cblxuICBjYiA9IG9wdHMuY2IgfHwgY2I7XG4gIHZhciBwcmUgPSAodHlwZW9mIGNiID09ICdmdW5jdGlvbicpID8gY2IgOiBjYi5wcmUgfHwgZnVuY3Rpb24oKSB7fTtcbiAgdmFyIHBvc3QgPSBjYi5wb3N0IHx8IGZ1bmN0aW9uKCkge307XG5cbiAgX3RyYXZlcnNlKG9wdHMsIHByZSwgcG9zdCwgc2NoZW1hLCAnJywgc2NoZW1hKTtcbn07XG5cblxudHJhdmVyc2Uua2V5d29yZHMgPSB7XG4gIGFkZGl0aW9uYWxJdGVtczogdHJ1ZSxcbiAgaXRlbXM6IHRydWUsXG4gIGNvbnRhaW5zOiB0cnVlLFxuICBhZGRpdGlvbmFsUHJvcGVydGllczogdHJ1ZSxcbiAgcHJvcGVydHlOYW1lczogdHJ1ZSxcbiAgbm90OiB0cnVlXG59O1xuXG50cmF2ZXJzZS5hcnJheUtleXdvcmRzID0ge1xuICBpdGVtczogdHJ1ZSxcbiAgYWxsT2Y6IHRydWUsXG4gIGFueU9mOiB0cnVlLFxuICBvbmVPZjogdHJ1ZVxufTtcblxudHJhdmVyc2UucHJvcHNLZXl3b3JkcyA9IHtcbiAgZGVmaW5pdGlvbnM6IHRydWUsXG4gIHByb3BlcnRpZXM6IHRydWUsXG4gIHBhdHRlcm5Qcm9wZXJ0aWVzOiB0cnVlLFxuICBkZXBlbmRlbmNpZXM6IHRydWVcbn07XG5cbnRyYXZlcnNlLnNraXBLZXl3b3JkcyA9IHtcbiAgZGVmYXVsdDogdHJ1ZSxcbiAgZW51bTogdHJ1ZSxcbiAgY29uc3Q6IHRydWUsXG4gIHJlcXVpcmVkOiB0cnVlLFxuICBtYXhpbXVtOiB0cnVlLFxuICBtaW5pbXVtOiB0cnVlLFxuICBleGNsdXNpdmVNYXhpbXVtOiB0cnVlLFxuICBleGNsdXNpdmVNaW5pbXVtOiB0cnVlLFxuICBtdWx0aXBsZU9mOiB0cnVlLFxuICBtYXhMZW5ndGg6IHRydWUsXG4gIG1pbkxlbmd0aDogdHJ1ZSxcbiAgcGF0dGVybjogdHJ1ZSxcbiAgZm9ybWF0OiB0cnVlLFxuICBtYXhJdGVtczogdHJ1ZSxcbiAgbWluSXRlbXM6IHRydWUsXG4gIHVuaXF1ZUl0ZW1zOiB0cnVlLFxuICBtYXhQcm9wZXJ0aWVzOiB0cnVlLFxuICBtaW5Qcm9wZXJ0aWVzOiB0cnVlXG59O1xuXG5cbmZ1bmN0aW9uIF90cmF2ZXJzZShvcHRzLCBwcmUsIHBvc3QsIHNjaGVtYSwganNvblB0ciwgcm9vdFNjaGVtYSwgcGFyZW50SnNvblB0ciwgcGFyZW50S2V5d29yZCwgcGFyZW50U2NoZW1hLCBrZXlJbmRleCkge1xuICBpZiAoc2NoZW1hICYmIHR5cGVvZiBzY2hlbWEgPT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoc2NoZW1hKSkge1xuICAgIHByZShzY2hlbWEsIGpzb25QdHIsIHJvb3RTY2hlbWEsIHBhcmVudEpzb25QdHIsIHBhcmVudEtleXdvcmQsIHBhcmVudFNjaGVtYSwga2V5SW5kZXgpO1xuICAgIGZvciAodmFyIGtleSBpbiBzY2hlbWEpIHtcbiAgICAgIHZhciBzY2ggPSBzY2hlbWFba2V5XTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHNjaCkpIHtcbiAgICAgICAgaWYgKGtleSBpbiB0cmF2ZXJzZS5hcnJheUtleXdvcmRzKSB7XG4gICAgICAgICAgZm9yICh2YXIgaT0wOyBpPHNjaC5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIF90cmF2ZXJzZShvcHRzLCBwcmUsIHBvc3QsIHNjaFtpXSwganNvblB0ciArICcvJyArIGtleSArICcvJyArIGksIHJvb3RTY2hlbWEsIGpzb25QdHIsIGtleSwgc2NoZW1hLCBpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChrZXkgaW4gdHJhdmVyc2UucHJvcHNLZXl3b3Jkcykge1xuICAgICAgICBpZiAoc2NoICYmIHR5cGVvZiBzY2ggPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIHNjaClcbiAgICAgICAgICAgIF90cmF2ZXJzZShvcHRzLCBwcmUsIHBvc3QsIHNjaFtwcm9wXSwganNvblB0ciArICcvJyArIGtleSArICcvJyArIGVzY2FwZUpzb25QdHIocHJvcCksIHJvb3RTY2hlbWEsIGpzb25QdHIsIGtleSwgc2NoZW1hLCBwcm9wKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChrZXkgaW4gdHJhdmVyc2Uua2V5d29yZHMgfHwgKG9wdHMuYWxsS2V5cyAmJiAhKGtleSBpbiB0cmF2ZXJzZS5za2lwS2V5d29yZHMpKSkge1xuICAgICAgICBfdHJhdmVyc2Uob3B0cywgcHJlLCBwb3N0LCBzY2gsIGpzb25QdHIgKyAnLycgKyBrZXksIHJvb3RTY2hlbWEsIGpzb25QdHIsIGtleSwgc2NoZW1hKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcG9zdChzY2hlbWEsIGpzb25QdHIsIHJvb3RTY2hlbWEsIHBhcmVudEpzb25QdHIsIHBhcmVudEtleXdvcmQsIHBhcmVudFNjaGVtYSwga2V5SW5kZXgpO1xuICB9XG59XG5cblxuZnVuY3Rpb24gZXNjYXBlSnNvblB0cihzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9+L2csICd+MCcpLnJlcGxhY2UoL1xcLy9nLCAnfjEnKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFVSSSA9IHJlcXVpcmUoJ3VyaS1qcycpXG4gICwgZXF1YWwgPSByZXF1aXJlKCdmYXN0LWRlZXAtZXF1YWwnKVxuICAsIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKVxuICAsIFNjaGVtYU9iamVjdCA9IHJlcXVpcmUoJy4vc2NoZW1hX29iaicpXG4gICwgdHJhdmVyc2UgPSByZXF1aXJlKCdqc29uLXNjaGVtYS10cmF2ZXJzZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlc29sdmU7XG5cbnJlc29sdmUubm9ybWFsaXplSWQgPSBub3JtYWxpemVJZDtcbnJlc29sdmUuZnVsbFBhdGggPSBnZXRGdWxsUGF0aDtcbnJlc29sdmUudXJsID0gcmVzb2x2ZVVybDtcbnJlc29sdmUuaWRzID0gcmVzb2x2ZUlkcztcbnJlc29sdmUuaW5saW5lUmVmID0gaW5saW5lUmVmO1xucmVzb2x2ZS5zY2hlbWEgPSByZXNvbHZlU2NoZW1hO1xuXG4vKipcbiAqIFtyZXNvbHZlIGFuZCBjb21waWxlIHRoZSByZWZlcmVuY2VzICgkcmVmKV1cbiAqIEB0aGlzICAgQWp2XG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gY29tcGlsZSByZWZlcmVuY2UgdG8gc2NoZW1hIGNvbXBpbGF0aW9uIGZ1bmNpdG9uIChsb2NhbENvbXBpbGUpXG4gKiBAcGFyYW0gIHtPYmplY3R9IHJvb3Qgb2JqZWN0IHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJvb3Qgc2NoZW1hIGZvciB0aGUgY3VycmVudCBzY2hlbWFcbiAqIEBwYXJhbSAge1N0cmluZ30gcmVmIHJlZmVyZW5jZSB0byByZXNvbHZlXG4gKiBAcmV0dXJuIHtPYmplY3R8RnVuY3Rpb259IHNjaGVtYSBvYmplY3QgKGlmIHRoZSBzY2hlbWEgY2FuIGJlIGlubGluZWQpIG9yIHZhbGlkYXRpb24gZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZShjb21waWxlLCByb290LCByZWYpIHtcbiAgLyoganNoaW50IHZhbGlkdGhpczogdHJ1ZSAqL1xuICB2YXIgcmVmVmFsID0gdGhpcy5fcmVmc1tyZWZdO1xuICBpZiAodHlwZW9mIHJlZlZhbCA9PSAnc3RyaW5nJykge1xuICAgIGlmICh0aGlzLl9yZWZzW3JlZlZhbF0pIHJlZlZhbCA9IHRoaXMuX3JlZnNbcmVmVmFsXTtcbiAgICBlbHNlIHJldHVybiByZXNvbHZlLmNhbGwodGhpcywgY29tcGlsZSwgcm9vdCwgcmVmVmFsKTtcbiAgfVxuXG4gIHJlZlZhbCA9IHJlZlZhbCB8fCB0aGlzLl9zY2hlbWFzW3JlZl07XG4gIGlmIChyZWZWYWwgaW5zdGFuY2VvZiBTY2hlbWFPYmplY3QpIHtcbiAgICByZXR1cm4gaW5saW5lUmVmKHJlZlZhbC5zY2hlbWEsIHRoaXMuX29wdHMuaW5saW5lUmVmcylcbiAgICAgICAgICAgID8gcmVmVmFsLnNjaGVtYVxuICAgICAgICAgICAgOiByZWZWYWwudmFsaWRhdGUgfHwgdGhpcy5fY29tcGlsZShyZWZWYWwpO1xuICB9XG5cbiAgdmFyIHJlcyA9IHJlc29sdmVTY2hlbWEuY2FsbCh0aGlzLCByb290LCByZWYpO1xuICB2YXIgc2NoZW1hLCB2LCBiYXNlSWQ7XG4gIGlmIChyZXMpIHtcbiAgICBzY2hlbWEgPSByZXMuc2NoZW1hO1xuICAgIHJvb3QgPSByZXMucm9vdDtcbiAgICBiYXNlSWQgPSByZXMuYmFzZUlkO1xuICB9XG5cbiAgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIFNjaGVtYU9iamVjdCkge1xuICAgIHYgPSBzY2hlbWEudmFsaWRhdGUgfHwgY29tcGlsZS5jYWxsKHRoaXMsIHNjaGVtYS5zY2hlbWEsIHJvb3QsIHVuZGVmaW5lZCwgYmFzZUlkKTtcbiAgfSBlbHNlIGlmIChzY2hlbWEgIT09IHVuZGVmaW5lZCkge1xuICAgIHYgPSBpbmxpbmVSZWYoc2NoZW1hLCB0aGlzLl9vcHRzLmlubGluZVJlZnMpXG4gICAgICAgID8gc2NoZW1hXG4gICAgICAgIDogY29tcGlsZS5jYWxsKHRoaXMsIHNjaGVtYSwgcm9vdCwgdW5kZWZpbmVkLCBiYXNlSWQpO1xuICB9XG5cbiAgcmV0dXJuIHY7XG59XG5cblxuLyoqXG4gKiBSZXNvbHZlIHNjaGVtYSwgaXRzIHJvb3QgYW5kIGJhc2VJZFxuICogQHRoaXMgQWp2XG4gKiBAcGFyYW0gIHtPYmplY3R9IHJvb3Qgcm9vdCBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIHNjaGVtYSwgcmVmVmFsLCByZWZzXG4gKiBAcGFyYW0gIHtTdHJpbmd9IHJlZiAgcmVmZXJlbmNlIHRvIHJlc29sdmVcbiAqIEByZXR1cm4ge09iamVjdH0gb2JqZWN0IHdpdGggcHJvcGVydGllcyBzY2hlbWEsIHJvb3QsIGJhc2VJZFxuICovXG5mdW5jdGlvbiByZXNvbHZlU2NoZW1hKHJvb3QsIHJlZikge1xuICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlICovXG4gIHZhciBwID0gVVJJLnBhcnNlKHJlZilcbiAgICAsIHJlZlBhdGggPSBfZ2V0RnVsbFBhdGgocClcbiAgICAsIGJhc2VJZCA9IGdldEZ1bGxQYXRoKHRoaXMuX2dldElkKHJvb3Quc2NoZW1hKSk7XG4gIGlmIChPYmplY3Qua2V5cyhyb290LnNjaGVtYSkubGVuZ3RoID09PSAwIHx8IHJlZlBhdGggIT09IGJhc2VJZCkge1xuICAgIHZhciBpZCA9IG5vcm1hbGl6ZUlkKHJlZlBhdGgpO1xuICAgIHZhciByZWZWYWwgPSB0aGlzLl9yZWZzW2lkXTtcbiAgICBpZiAodHlwZW9mIHJlZlZhbCA9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHJlc29sdmVSZWN1cnNpdmUuY2FsbCh0aGlzLCByb290LCByZWZWYWwsIHApO1xuICAgIH0gZWxzZSBpZiAocmVmVmFsIGluc3RhbmNlb2YgU2NoZW1hT2JqZWN0KSB7XG4gICAgICBpZiAoIXJlZlZhbC52YWxpZGF0ZSkgdGhpcy5fY29tcGlsZShyZWZWYWwpO1xuICAgICAgcm9vdCA9IHJlZlZhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVmVmFsID0gdGhpcy5fc2NoZW1hc1tpZF07XG4gICAgICBpZiAocmVmVmFsIGluc3RhbmNlb2YgU2NoZW1hT2JqZWN0KSB7XG4gICAgICAgIGlmICghcmVmVmFsLnZhbGlkYXRlKSB0aGlzLl9jb21waWxlKHJlZlZhbCk7XG4gICAgICAgIGlmIChpZCA9PSBub3JtYWxpemVJZChyZWYpKVxuICAgICAgICAgIHJldHVybiB7IHNjaGVtYTogcmVmVmFsLCByb290OiByb290LCBiYXNlSWQ6IGJhc2VJZCB9O1xuICAgICAgICByb290ID0gcmVmVmFsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXJvb3Quc2NoZW1hKSByZXR1cm47XG4gICAgYmFzZUlkID0gZ2V0RnVsbFBhdGgodGhpcy5fZ2V0SWQocm9vdC5zY2hlbWEpKTtcbiAgfVxuICByZXR1cm4gZ2V0SnNvblBvaW50ZXIuY2FsbCh0aGlzLCBwLCBiYXNlSWQsIHJvb3Quc2NoZW1hLCByb290KTtcbn1cblxuXG4vKiBAdGhpcyBBanYgKi9cbmZ1bmN0aW9uIHJlc29sdmVSZWN1cnNpdmUocm9vdCwgcmVmLCBwYXJzZWRSZWYpIHtcbiAgLyoganNoaW50IHZhbGlkdGhpczogdHJ1ZSAqL1xuICB2YXIgcmVzID0gcmVzb2x2ZVNjaGVtYS5jYWxsKHRoaXMsIHJvb3QsIHJlZik7XG4gIGlmIChyZXMpIHtcbiAgICB2YXIgc2NoZW1hID0gcmVzLnNjaGVtYTtcbiAgICB2YXIgYmFzZUlkID0gcmVzLmJhc2VJZDtcbiAgICByb290ID0gcmVzLnJvb3Q7XG4gICAgdmFyIGlkID0gdGhpcy5fZ2V0SWQoc2NoZW1hKTtcbiAgICBpZiAoaWQpIGJhc2VJZCA9IHJlc29sdmVVcmwoYmFzZUlkLCBpZCk7XG4gICAgcmV0dXJuIGdldEpzb25Qb2ludGVyLmNhbGwodGhpcywgcGFyc2VkUmVmLCBiYXNlSWQsIHNjaGVtYSwgcm9vdCk7XG4gIH1cbn1cblxuXG52YXIgUFJFVkVOVF9TQ09QRV9DSEFOR0UgPSB1dGlsLnRvSGFzaChbJ3Byb3BlcnRpZXMnLCAncGF0dGVyblByb3BlcnRpZXMnLCAnZW51bScsICdkZXBlbmRlbmNpZXMnLCAnZGVmaW5pdGlvbnMnXSk7XG4vKiBAdGhpcyBBanYgKi9cbmZ1bmN0aW9uIGdldEpzb25Qb2ludGVyKHBhcnNlZFJlZiwgYmFzZUlkLCBzY2hlbWEsIHJvb3QpIHtcbiAgLyoganNoaW50IHZhbGlkdGhpczogdHJ1ZSAqL1xuICBwYXJzZWRSZWYuZnJhZ21lbnQgPSBwYXJzZWRSZWYuZnJhZ21lbnQgfHwgJyc7XG4gIGlmIChwYXJzZWRSZWYuZnJhZ21lbnQuc2xpY2UoMCwxKSAhPSAnLycpIHJldHVybjtcbiAgdmFyIHBhcnRzID0gcGFyc2VkUmVmLmZyYWdtZW50LnNwbGl0KCcvJyk7XG5cbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwYXJ0ID0gcGFydHNbaV07XG4gICAgaWYgKHBhcnQpIHtcbiAgICAgIHBhcnQgPSB1dGlsLnVuZXNjYXBlRnJhZ21lbnQocGFydCk7XG4gICAgICBzY2hlbWEgPSBzY2hlbWFbcGFydF07XG4gICAgICBpZiAoc2NoZW1hID09PSB1bmRlZmluZWQpIGJyZWFrO1xuICAgICAgdmFyIGlkO1xuICAgICAgaWYgKCFQUkVWRU5UX1NDT1BFX0NIQU5HRVtwYXJ0XSkge1xuICAgICAgICBpZCA9IHRoaXMuX2dldElkKHNjaGVtYSk7XG4gICAgICAgIGlmIChpZCkgYmFzZUlkID0gcmVzb2x2ZVVybChiYXNlSWQsIGlkKTtcbiAgICAgICAgaWYgKHNjaGVtYS4kcmVmKSB7XG4gICAgICAgICAgdmFyICRyZWYgPSByZXNvbHZlVXJsKGJhc2VJZCwgc2NoZW1hLiRyZWYpO1xuICAgICAgICAgIHZhciByZXMgPSByZXNvbHZlU2NoZW1hLmNhbGwodGhpcywgcm9vdCwgJHJlZik7XG4gICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgc2NoZW1hID0gcmVzLnNjaGVtYTtcbiAgICAgICAgICAgIHJvb3QgPSByZXMucm9vdDtcbiAgICAgICAgICAgIGJhc2VJZCA9IHJlcy5iYXNlSWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChzY2hlbWEgIT09IHVuZGVmaW5lZCAmJiBzY2hlbWEgIT09IHJvb3Quc2NoZW1hKVxuICAgIHJldHVybiB7IHNjaGVtYTogc2NoZW1hLCByb290OiByb290LCBiYXNlSWQ6IGJhc2VJZCB9O1xufVxuXG5cbnZhciBTSU1QTEVfSU5MSU5FRCA9IHV0aWwudG9IYXNoKFtcbiAgJ3R5cGUnLCAnZm9ybWF0JywgJ3BhdHRlcm4nLFxuICAnbWF4TGVuZ3RoJywgJ21pbkxlbmd0aCcsXG4gICdtYXhQcm9wZXJ0aWVzJywgJ21pblByb3BlcnRpZXMnLFxuICAnbWF4SXRlbXMnLCAnbWluSXRlbXMnLFxuICAnbWF4aW11bScsICdtaW5pbXVtJyxcbiAgJ3VuaXF1ZUl0ZW1zJywgJ211bHRpcGxlT2YnLFxuICAncmVxdWlyZWQnLCAnZW51bSdcbl0pO1xuZnVuY3Rpb24gaW5saW5lUmVmKHNjaGVtYSwgbGltaXQpIHtcbiAgaWYgKGxpbWl0ID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICBpZiAobGltaXQgPT09IHVuZGVmaW5lZCB8fCBsaW1pdCA9PT0gdHJ1ZSkgcmV0dXJuIGNoZWNrTm9SZWYoc2NoZW1hKTtcbiAgZWxzZSBpZiAobGltaXQpIHJldHVybiBjb3VudEtleXMoc2NoZW1hKSA8PSBsaW1pdDtcbn1cblxuXG5mdW5jdGlvbiBjaGVja05vUmVmKHNjaGVtYSkge1xuICB2YXIgaXRlbTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hKSkge1xuICAgIGZvciAodmFyIGk9MDsgaTxzY2hlbWEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGl0ZW0gPSBzY2hlbWFbaV07XG4gICAgICBpZiAodHlwZW9mIGl0ZW0gPT0gJ29iamVjdCcgJiYgIWNoZWNrTm9SZWYoaXRlbSkpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIga2V5IGluIHNjaGVtYSkge1xuICAgICAgaWYgKGtleSA9PSAnJHJlZicpIHJldHVybiBmYWxzZTtcbiAgICAgIGl0ZW0gPSBzY2hlbWFba2V5XTtcbiAgICAgIGlmICh0eXBlb2YgaXRlbSA9PSAnb2JqZWN0JyAmJiAhY2hlY2tOb1JlZihpdGVtKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuXG5mdW5jdGlvbiBjb3VudEtleXMoc2NoZW1hKSB7XG4gIHZhciBjb3VudCA9IDAsIGl0ZW07XG4gIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYSkpIHtcbiAgICBmb3IgKHZhciBpPTA7IGk8c2NoZW1hLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpdGVtID0gc2NoZW1hW2ldO1xuICAgICAgaWYgKHR5cGVvZiBpdGVtID09ICdvYmplY3QnKSBjb3VudCArPSBjb3VudEtleXMoaXRlbSk7XG4gICAgICBpZiAoY291bnQgPT0gSW5maW5pdHkpIHJldHVybiBJbmZpbml0eTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIga2V5IGluIHNjaGVtYSkge1xuICAgICAgaWYgKGtleSA9PSAnJHJlZicpIHJldHVybiBJbmZpbml0eTtcbiAgICAgIGlmIChTSU1QTEVfSU5MSU5FRFtrZXldKSB7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpdGVtID0gc2NoZW1hW2tleV07XG4gICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PSAnb2JqZWN0JykgY291bnQgKz0gY291bnRLZXlzKGl0ZW0pICsgMTtcbiAgICAgICAgaWYgKGNvdW50ID09IEluZmluaXR5KSByZXR1cm4gSW5maW5pdHk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBjb3VudDtcbn1cblxuXG5mdW5jdGlvbiBnZXRGdWxsUGF0aChpZCwgbm9ybWFsaXplKSB7XG4gIGlmIChub3JtYWxpemUgIT09IGZhbHNlKSBpZCA9IG5vcm1hbGl6ZUlkKGlkKTtcbiAgdmFyIHAgPSBVUkkucGFyc2UoaWQpO1xuICByZXR1cm4gX2dldEZ1bGxQYXRoKHApO1xufVxuXG5cbmZ1bmN0aW9uIF9nZXRGdWxsUGF0aChwKSB7XG4gIHJldHVybiBVUkkuc2VyaWFsaXplKHApLnNwbGl0KCcjJylbMF0gKyAnIyc7XG59XG5cblxudmFyIFRSQUlMSU5HX1NMQVNIX0hBU0ggPSAvI1xcLz8kLztcbmZ1bmN0aW9uIG5vcm1hbGl6ZUlkKGlkKSB7XG4gIHJldHVybiBpZCA/IGlkLnJlcGxhY2UoVFJBSUxJTkdfU0xBU0hfSEFTSCwgJycpIDogJyc7XG59XG5cblxuZnVuY3Rpb24gcmVzb2x2ZVVybChiYXNlSWQsIGlkKSB7XG4gIGlkID0gbm9ybWFsaXplSWQoaWQpO1xuICByZXR1cm4gVVJJLnJlc29sdmUoYmFzZUlkLCBpZCk7XG59XG5cblxuLyogQHRoaXMgQWp2ICovXG5mdW5jdGlvbiByZXNvbHZlSWRzKHNjaGVtYSkge1xuICB2YXIgc2NoZW1hSWQgPSBub3JtYWxpemVJZCh0aGlzLl9nZXRJZChzY2hlbWEpKTtcbiAgdmFyIGJhc2VJZHMgPSB7Jyc6IHNjaGVtYUlkfTtcbiAgdmFyIGZ1bGxQYXRocyA9IHsnJzogZ2V0RnVsbFBhdGgoc2NoZW1hSWQsIGZhbHNlKX07XG4gIHZhciBsb2NhbFJlZnMgPSB7fTtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHRyYXZlcnNlKHNjaGVtYSwge2FsbEtleXM6IHRydWV9LCBmdW5jdGlvbihzY2gsIGpzb25QdHIsIHJvb3RTY2hlbWEsIHBhcmVudEpzb25QdHIsIHBhcmVudEtleXdvcmQsIHBhcmVudFNjaGVtYSwga2V5SW5kZXgpIHtcbiAgICBpZiAoanNvblB0ciA9PT0gJycpIHJldHVybjtcbiAgICB2YXIgaWQgPSBzZWxmLl9nZXRJZChzY2gpO1xuICAgIHZhciBiYXNlSWQgPSBiYXNlSWRzW3BhcmVudEpzb25QdHJdO1xuICAgIHZhciBmdWxsUGF0aCA9IGZ1bGxQYXRoc1twYXJlbnRKc29uUHRyXSArICcvJyArIHBhcmVudEtleXdvcmQ7XG4gICAgaWYgKGtleUluZGV4ICE9PSB1bmRlZmluZWQpXG4gICAgICBmdWxsUGF0aCArPSAnLycgKyAodHlwZW9mIGtleUluZGV4ID09ICdudW1iZXInID8ga2V5SW5kZXggOiB1dGlsLmVzY2FwZUZyYWdtZW50KGtleUluZGV4KSk7XG5cbiAgICBpZiAodHlwZW9mIGlkID09ICdzdHJpbmcnKSB7XG4gICAgICBpZCA9IGJhc2VJZCA9IG5vcm1hbGl6ZUlkKGJhc2VJZCA/IFVSSS5yZXNvbHZlKGJhc2VJZCwgaWQpIDogaWQpO1xuXG4gICAgICB2YXIgcmVmVmFsID0gc2VsZi5fcmVmc1tpZF07XG4gICAgICBpZiAodHlwZW9mIHJlZlZhbCA9PSAnc3RyaW5nJykgcmVmVmFsID0gc2VsZi5fcmVmc1tyZWZWYWxdO1xuICAgICAgaWYgKHJlZlZhbCAmJiByZWZWYWwuc2NoZW1hKSB7XG4gICAgICAgIGlmICghZXF1YWwoc2NoLCByZWZWYWwuc2NoZW1hKSlcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2lkIFwiJyArIGlkICsgJ1wiIHJlc29sdmVzIHRvIG1vcmUgdGhhbiBvbmUgc2NoZW1hJyk7XG4gICAgICB9IGVsc2UgaWYgKGlkICE9IG5vcm1hbGl6ZUlkKGZ1bGxQYXRoKSkge1xuICAgICAgICBpZiAoaWRbMF0gPT0gJyMnKSB7XG4gICAgICAgICAgaWYgKGxvY2FsUmVmc1tpZF0gJiYgIWVxdWFsKHNjaCwgbG9jYWxSZWZzW2lkXSkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2lkIFwiJyArIGlkICsgJ1wiIHJlc29sdmVzIHRvIG1vcmUgdGhhbiBvbmUgc2NoZW1hJyk7XG4gICAgICAgICAgbG9jYWxSZWZzW2lkXSA9IHNjaDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWxmLl9yZWZzW2lkXSA9IGZ1bGxQYXRoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGJhc2VJZHNbanNvblB0cl0gPSBiYXNlSWQ7XG4gICAgZnVsbFBhdGhzW2pzb25QdHJdID0gZnVsbFBhdGg7XG4gIH0pO1xuXG4gIHJldHVybiBsb2NhbFJlZnM7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciByZXNvbHZlID0gcmVxdWlyZSgnLi9yZXNvbHZlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBWYWxpZGF0aW9uOiBlcnJvclN1YmNsYXNzKFZhbGlkYXRpb25FcnJvciksXG4gIE1pc3NpbmdSZWY6IGVycm9yU3ViY2xhc3MoTWlzc2luZ1JlZkVycm9yKVxufTtcblxuXG5mdW5jdGlvbiBWYWxpZGF0aW9uRXJyb3IoZXJyb3JzKSB7XG4gIHRoaXMubWVzc2FnZSA9ICd2YWxpZGF0aW9uIGZhaWxlZCc7XG4gIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICB0aGlzLmFqdiA9IHRoaXMudmFsaWRhdGlvbiA9IHRydWU7XG59XG5cblxuTWlzc2luZ1JlZkVycm9yLm1lc3NhZ2UgPSBmdW5jdGlvbiAoYmFzZUlkLCByZWYpIHtcbiAgcmV0dXJuICdjYW5cXCd0IHJlc29sdmUgcmVmZXJlbmNlICcgKyByZWYgKyAnIGZyb20gaWQgJyArIGJhc2VJZDtcbn07XG5cblxuZnVuY3Rpb24gTWlzc2luZ1JlZkVycm9yKGJhc2VJZCwgcmVmLCBtZXNzYWdlKSB7XG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgTWlzc2luZ1JlZkVycm9yLm1lc3NhZ2UoYmFzZUlkLCByZWYpO1xuICB0aGlzLm1pc3NpbmdSZWYgPSByZXNvbHZlLnVybChiYXNlSWQsIHJlZik7XG4gIHRoaXMubWlzc2luZ1NjaGVtYSA9IHJlc29sdmUubm9ybWFsaXplSWQocmVzb2x2ZS5mdWxsUGF0aCh0aGlzLm1pc3NpbmdSZWYpKTtcbn1cblxuXG5mdW5jdGlvbiBlcnJvclN1YmNsYXNzKFN1YmNsYXNzKSB7XG4gIFN1YmNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcbiAgU3ViY2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3ViY2xhc3M7XG4gIHJldHVybiBTdWJjbGFzcztcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZGF0YSwgb3B0cykge1xuICAgIGlmICghb3B0cykgb3B0cyA9IHt9O1xuICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykgb3B0cyA9IHsgY21wOiBvcHRzIH07XG4gICAgdmFyIGN5Y2xlcyA9ICh0eXBlb2Ygb3B0cy5jeWNsZXMgPT09ICdib29sZWFuJykgPyBvcHRzLmN5Y2xlcyA6IGZhbHNlO1xuXG4gICAgdmFyIGNtcCA9IG9wdHMuY21wICYmIChmdW5jdGlvbiAoZikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHZhciBhb2JqID0geyBrZXk6IGEsIHZhbHVlOiBub2RlW2FdIH07XG4gICAgICAgICAgICAgICAgdmFyIGJvYmogPSB7IGtleTogYiwgdmFsdWU6IG5vZGVbYl0gfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZihhb2JqLCBib2JqKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfSkob3B0cy5jbXApO1xuXG4gICAgdmFyIHNlZW4gPSBbXTtcbiAgICByZXR1cm4gKGZ1bmN0aW9uIHN0cmluZ2lmeSAobm9kZSkge1xuICAgICAgICBpZiAobm9kZSAmJiBub2RlLnRvSlNPTiAmJiB0eXBlb2Ygbm9kZS50b0pTT04gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG5vZGUgPSBub2RlLnRvSlNPTigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgICAgICBpZiAodHlwZW9mIG5vZGUgPT0gJ251bWJlcicpIHJldHVybiBpc0Zpbml0ZShub2RlKSA/ICcnICsgbm9kZSA6ICdudWxsJztcbiAgICAgICAgaWYgKHR5cGVvZiBub2RlICE9PSAnb2JqZWN0JykgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG5vZGUpO1xuXG4gICAgICAgIHZhciBpLCBvdXQ7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSB7XG4gICAgICAgICAgICBvdXQgPSAnWyc7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbm9kZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChpKSBvdXQgKz0gJywnO1xuICAgICAgICAgICAgICAgIG91dCArPSBzdHJpbmdpZnkobm9kZVtpXSkgfHwgJ251bGwnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG91dCArICddJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChub2RlID09PSBudWxsKSByZXR1cm4gJ251bGwnO1xuXG4gICAgICAgIGlmIChzZWVuLmluZGV4T2Yobm9kZSkgIT09IC0xKSB7XG4gICAgICAgICAgICBpZiAoY3ljbGVzKSByZXR1cm4gSlNPTi5zdHJpbmdpZnkoJ19fY3ljbGVfXycpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ29udmVydGluZyBjaXJjdWxhciBzdHJ1Y3R1cmUgdG8gSlNPTicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNlZW5JbmRleCA9IHNlZW4ucHVzaChub2RlKSAtIDE7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMobm9kZSkuc29ydChjbXAgJiYgY21wKG5vZGUpKTtcbiAgICAgICAgb3V0ID0gJyc7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IHN0cmluZ2lmeShub2RlW2tleV0pO1xuXG4gICAgICAgICAgICBpZiAoIXZhbHVlKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmIChvdXQpIG91dCArPSAnLCc7XG4gICAgICAgICAgICBvdXQgKz0gSlNPTi5zdHJpbmdpZnkoa2V5KSArICc6JyArIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHNlZW4uc3BsaWNlKHNlZW5JbmRleCwgMSk7XG4gICAgICAgIHJldHVybiAneycgKyBvdXQgKyAnfSc7XG4gICAgfSkoZGF0YSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV92YWxpZGF0ZShpdCwgJGtleXdvcmQsICRydWxlVHlwZSkge1xuICB2YXIgb3V0ID0gJyc7XG4gIHZhciAkYXN5bmMgPSBpdC5zY2hlbWEuJGFzeW5jID09PSB0cnVlLFxuICAgICRyZWZLZXl3b3JkcyA9IGl0LnV0aWwuc2NoZW1hSGFzUnVsZXNFeGNlcHQoaXQuc2NoZW1hLCBpdC5SVUxFUy5hbGwsICckcmVmJyksXG4gICAgJGlkID0gaXQuc2VsZi5fZ2V0SWQoaXQuc2NoZW1hKTtcbiAgaWYgKGl0Lm9wdHMuc3RyaWN0S2V5d29yZHMpIHtcbiAgICB2YXIgJHVua25vd25Ld2QgPSBpdC51dGlsLnNjaGVtYVVua25vd25SdWxlcyhpdC5zY2hlbWEsIGl0LlJVTEVTLmtleXdvcmRzKTtcbiAgICBpZiAoJHVua25vd25Ld2QpIHtcbiAgICAgIHZhciAka2V5d29yZHNNc2cgPSAndW5rbm93biBrZXl3b3JkOiAnICsgJHVua25vd25Ld2Q7XG4gICAgICBpZiAoaXQub3B0cy5zdHJpY3RLZXl3b3JkcyA9PT0gJ2xvZycpIGl0LmxvZ2dlci53YXJuKCRrZXl3b3Jkc01zZyk7XG4gICAgICBlbHNlIHRocm93IG5ldyBFcnJvcigka2V5d29yZHNNc2cpO1xuICAgIH1cbiAgfVxuICBpZiAoaXQuaXNUb3ApIHtcbiAgICBvdXQgKz0gJyB2YXIgdmFsaWRhdGUgPSAnO1xuICAgIGlmICgkYXN5bmMpIHtcbiAgICAgIGl0LmFzeW5jID0gdHJ1ZTtcbiAgICAgIG91dCArPSAnYXN5bmMgJztcbiAgICB9XG4gICAgb3V0ICs9ICdmdW5jdGlvbihkYXRhLCBkYXRhUGF0aCwgcGFyZW50RGF0YSwgcGFyZW50RGF0YVByb3BlcnR5LCByb290RGF0YSkgeyBcXCd1c2Ugc3RyaWN0XFwnOyAnO1xuICAgIGlmICgkaWQgJiYgKGl0Lm9wdHMuc291cmNlQ29kZSB8fCBpdC5vcHRzLnByb2Nlc3NDb2RlKSkge1xuICAgICAgb3V0ICs9ICcgJyArICgnL1xcKiMgc291cmNlVVJMPScgKyAkaWQgKyAnICovJykgKyAnICc7XG4gICAgfVxuICB9XG4gIGlmICh0eXBlb2YgaXQuc2NoZW1hID09ICdib29sZWFuJyB8fCAhKCRyZWZLZXl3b3JkcyB8fCBpdC5zY2hlbWEuJHJlZikpIHtcbiAgICB2YXIgJGtleXdvcmQgPSAnZmFsc2Ugc2NoZW1hJztcbiAgICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICAgIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gICAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICAgIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgICB2YXIgJGVycm9yS2V5d29yZDtcbiAgICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICAgIHZhciAkdmFsaWQgPSAndmFsaWQnICsgJGx2bDtcbiAgICBpZiAoaXQuc2NoZW1hID09PSBmYWxzZSkge1xuICAgICAgaWYgKGl0LmlzVG9wKSB7XG4gICAgICAgICRicmVha09uRXJyb3IgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZTsgJztcbiAgICAgIH1cbiAgICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAgICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICAgICAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJGVycm9yS2V5d29yZCB8fCAnZmFsc2Ugc2NoZW1hJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczoge30gJztcbiAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdib29sZWFuIHNjaGVtYSBpcyBmYWxzZVxcJyAnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogZmFsc2UgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgIH1cbiAgICAgIHZhciBfX2VyciA9IG91dDtcbiAgICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaXQuaXNUb3ApIHtcbiAgICAgICAgaWYgKCRhc3luYykge1xuICAgICAgICAgIG91dCArPSAnIHJldHVybiBkYXRhOyAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IG51bGw7IHJldHVybiB0cnVlOyAnO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJyB2YXIgJyArICgkdmFsaWQpICsgJyA9IHRydWU7ICc7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpdC5pc1RvcCkge1xuICAgICAgb3V0ICs9ICcgfTsgcmV0dXJuIHZhbGlkYXRlOyAnO1xuICAgIH1cbiAgICByZXR1cm4gb3V0O1xuICB9XG4gIGlmIChpdC5pc1RvcCkge1xuICAgIHZhciAkdG9wID0gaXQuaXNUb3AsXG4gICAgICAkbHZsID0gaXQubGV2ZWwgPSAwLFxuICAgICAgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWwgPSAwLFxuICAgICAgJGRhdGEgPSAnZGF0YSc7XG4gICAgaXQucm9vdElkID0gaXQucmVzb2x2ZS5mdWxsUGF0aChpdC5zZWxmLl9nZXRJZChpdC5yb290LnNjaGVtYSkpO1xuICAgIGl0LmJhc2VJZCA9IGl0LmJhc2VJZCB8fCBpdC5yb290SWQ7XG4gICAgZGVsZXRlIGl0LmlzVG9wO1xuICAgIGl0LmRhdGFQYXRoQXJyID0gW3VuZGVmaW5lZF07XG4gICAgaWYgKGl0LnNjaGVtYS5kZWZhdWx0ICE9PSB1bmRlZmluZWQgJiYgaXQub3B0cy51c2VEZWZhdWx0cyAmJiBpdC5vcHRzLnN0cmljdERlZmF1bHRzKSB7XG4gICAgICB2YXIgJGRlZmF1bHRNc2cgPSAnZGVmYXVsdCBpcyBpZ25vcmVkIGluIHRoZSBzY2hlbWEgcm9vdCc7XG4gICAgICBpZiAoaXQub3B0cy5zdHJpY3REZWZhdWx0cyA9PT0gJ2xvZycpIGl0LmxvZ2dlci53YXJuKCRkZWZhdWx0TXNnKTtcbiAgICAgIGVsc2UgdGhyb3cgbmV3IEVycm9yKCRkZWZhdWx0TXNnKTtcbiAgICB9XG4gICAgb3V0ICs9ICcgdmFyIHZFcnJvcnMgPSBudWxsOyAnO1xuICAgIG91dCArPSAnIHZhciBlcnJvcnMgPSAwOyAgICAgJztcbiAgICBvdXQgKz0gJyBpZiAocm9vdERhdGEgPT09IHVuZGVmaW5lZCkgcm9vdERhdGEgPSBkYXRhOyAnO1xuICB9IGVsc2Uge1xuICAgIHZhciAkbHZsID0gaXQubGV2ZWwsXG4gICAgICAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbCxcbiAgICAgICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgICBpZiAoJGlkKSBpdC5iYXNlSWQgPSBpdC5yZXNvbHZlLnVybChpdC5iYXNlSWQsICRpZCk7XG4gICAgaWYgKCRhc3luYyAmJiAhaXQuYXN5bmMpIHRocm93IG5ldyBFcnJvcignYXN5bmMgc2NoZW1hIGluIHN5bmMgc2NoZW1hJyk7XG4gICAgb3V0ICs9ICcgdmFyIGVycnNfJyArICgkbHZsKSArICcgPSBlcnJvcnM7JztcbiAgfVxuICB2YXIgJHZhbGlkID0gJ3ZhbGlkJyArICRsdmwsXG4gICAgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycyxcbiAgICAkY2xvc2luZ0JyYWNlczEgPSAnJyxcbiAgICAkY2xvc2luZ0JyYWNlczIgPSAnJztcbiAgdmFyICRlcnJvcktleXdvcmQ7XG4gIHZhciAkdHlwZVNjaGVtYSA9IGl0LnNjaGVtYS50eXBlLFxuICAgICR0eXBlSXNBcnJheSA9IEFycmF5LmlzQXJyYXkoJHR5cGVTY2hlbWEpO1xuICBpZiAoJHR5cGVTY2hlbWEgJiYgaXQub3B0cy5udWxsYWJsZSAmJiBpdC5zY2hlbWEubnVsbGFibGUgPT09IHRydWUpIHtcbiAgICBpZiAoJHR5cGVJc0FycmF5KSB7XG4gICAgICBpZiAoJHR5cGVTY2hlbWEuaW5kZXhPZignbnVsbCcpID09IC0xKSAkdHlwZVNjaGVtYSA9ICR0eXBlU2NoZW1hLmNvbmNhdCgnbnVsbCcpO1xuICAgIH0gZWxzZSBpZiAoJHR5cGVTY2hlbWEgIT0gJ251bGwnKSB7XG4gICAgICAkdHlwZVNjaGVtYSA9IFskdHlwZVNjaGVtYSwgJ251bGwnXTtcbiAgICAgICR0eXBlSXNBcnJheSA9IHRydWU7XG4gICAgfVxuICB9XG4gIGlmICgkdHlwZUlzQXJyYXkgJiYgJHR5cGVTY2hlbWEubGVuZ3RoID09IDEpIHtcbiAgICAkdHlwZVNjaGVtYSA9ICR0eXBlU2NoZW1hWzBdO1xuICAgICR0eXBlSXNBcnJheSA9IGZhbHNlO1xuICB9XG4gIGlmIChpdC5zY2hlbWEuJHJlZiAmJiAkcmVmS2V5d29yZHMpIHtcbiAgICBpZiAoaXQub3B0cy5leHRlbmRSZWZzID09ICdmYWlsJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCckcmVmOiB2YWxpZGF0aW9uIGtleXdvcmRzIHVzZWQgaW4gc2NoZW1hIGF0IHBhdGggXCInICsgaXQuZXJyU2NoZW1hUGF0aCArICdcIiAoc2VlIG9wdGlvbiBleHRlbmRSZWZzKScpO1xuICAgIH0gZWxzZSBpZiAoaXQub3B0cy5leHRlbmRSZWZzICE9PSB0cnVlKSB7XG4gICAgICAkcmVmS2V5d29yZHMgPSBmYWxzZTtcbiAgICAgIGl0LmxvZ2dlci53YXJuKCckcmVmOiBrZXl3b3JkcyBpZ25vcmVkIGluIHNjaGVtYSBhdCBwYXRoIFwiJyArIGl0LmVyclNjaGVtYVBhdGggKyAnXCInKTtcbiAgICB9XG4gIH1cbiAgaWYgKGl0LnNjaGVtYS4kY29tbWVudCAmJiBpdC5vcHRzLiRjb21tZW50KSB7XG4gICAgb3V0ICs9ICcgJyArIChpdC5SVUxFUy5hbGwuJGNvbW1lbnQuY29kZShpdCwgJyRjb21tZW50JykpO1xuICB9XG4gIGlmICgkdHlwZVNjaGVtYSkge1xuICAgIGlmIChpdC5vcHRzLmNvZXJjZVR5cGVzKSB7XG4gICAgICB2YXIgJGNvZXJjZVRvVHlwZXMgPSBpdC51dGlsLmNvZXJjZVRvVHlwZXMoaXQub3B0cy5jb2VyY2VUeXBlcywgJHR5cGVTY2hlbWEpO1xuICAgIH1cbiAgICB2YXIgJHJ1bGVzR3JvdXAgPSBpdC5SVUxFUy50eXBlc1skdHlwZVNjaGVtYV07XG4gICAgaWYgKCRjb2VyY2VUb1R5cGVzIHx8ICR0eXBlSXNBcnJheSB8fCAkcnVsZXNHcm91cCA9PT0gdHJ1ZSB8fCAoJHJ1bGVzR3JvdXAgJiYgISRzaG91bGRVc2VHcm91cCgkcnVsZXNHcm91cCkpKSB7XG4gICAgICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgJy50eXBlJyxcbiAgICAgICAgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy90eXBlJztcbiAgICAgIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyAnLnR5cGUnLFxuICAgICAgICAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnL3R5cGUnLFxuICAgICAgICAkbWV0aG9kID0gJHR5cGVJc0FycmF5ID8gJ2NoZWNrRGF0YVR5cGVzJyA6ICdjaGVja0RhdGFUeXBlJztcbiAgICAgIG91dCArPSAnIGlmICgnICsgKGl0LnV0aWxbJG1ldGhvZF0oJHR5cGVTY2hlbWEsICRkYXRhLCB0cnVlKSkgKyAnKSB7ICc7XG4gICAgICBpZiAoJGNvZXJjZVRvVHlwZXMpIHtcbiAgICAgICAgdmFyICRkYXRhVHlwZSA9ICdkYXRhVHlwZScgKyAkbHZsLFxuICAgICAgICAgICRjb2VyY2VkID0gJ2NvZXJjZWQnICsgJGx2bDtcbiAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJGRhdGFUeXBlKSArICcgPSB0eXBlb2YgJyArICgkZGF0YSkgKyAnOyAnO1xuICAgICAgICBpZiAoaXQub3B0cy5jb2VyY2VUeXBlcyA9PSAnYXJyYXknKSB7XG4gICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJGRhdGFUeXBlKSArICcgPT0gXFwnb2JqZWN0XFwnICYmIEFycmF5LmlzQXJyYXkoJyArICgkZGF0YSkgKyAnKSkgJyArICgkZGF0YVR5cGUpICsgJyA9IFxcJ2FycmF5XFwnOyAnO1xuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnIHZhciAnICsgKCRjb2VyY2VkKSArICcgPSB1bmRlZmluZWQ7ICc7XG4gICAgICAgIHZhciAkYnJhY2VzQ29lcmNpb24gPSAnJztcbiAgICAgICAgdmFyIGFycjEgPSAkY29lcmNlVG9UeXBlcztcbiAgICAgICAgaWYgKGFycjEpIHtcbiAgICAgICAgICB2YXIgJHR5cGUsICRpID0gLTEsXG4gICAgICAgICAgICBsMSA9IGFycjEubGVuZ3RoIC0gMTtcbiAgICAgICAgICB3aGlsZSAoJGkgPCBsMSkge1xuICAgICAgICAgICAgJHR5cGUgPSBhcnIxWyRpICs9IDFdO1xuICAgICAgICAgICAgaWYgKCRpKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIGlmICgnICsgKCRjb2VyY2VkKSArICcgPT09IHVuZGVmaW5lZCkgeyAnO1xuICAgICAgICAgICAgICAkYnJhY2VzQ29lcmNpb24gKz0gJ30nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0Lm9wdHMuY29lcmNlVHlwZXMgPT0gJ2FycmF5JyAmJiAkdHlwZSAhPSAnYXJyYXknKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIGlmICgnICsgKCRkYXRhVHlwZSkgKyAnID09IFxcJ2FycmF5XFwnICYmICcgKyAoJGRhdGEpICsgJy5sZW5ndGggPT0gMSkgeyAnICsgKCRjb2VyY2VkKSArICcgPSAnICsgKCRkYXRhKSArICcgPSAnICsgKCRkYXRhKSArICdbMF07ICcgKyAoJGRhdGFUeXBlKSArICcgPSB0eXBlb2YgJyArICgkZGF0YSkgKyAnOyAgfSAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCR0eXBlID09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIGlmICgnICsgKCRkYXRhVHlwZSkgKyAnID09IFxcJ251bWJlclxcJyB8fCAnICsgKCRkYXRhVHlwZSkgKyAnID09IFxcJ2Jvb2xlYW5cXCcpICcgKyAoJGNvZXJjZWQpICsgJyA9IFxcJ1xcJyArICcgKyAoJGRhdGEpICsgJzsgZWxzZSBpZiAoJyArICgkZGF0YSkgKyAnID09PSBudWxsKSAnICsgKCRjb2VyY2VkKSArICcgPSBcXCdcXCc7ICc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCR0eXBlID09ICdudW1iZXInIHx8ICR0eXBlID09ICdpbnRlZ2VyJykge1xuICAgICAgICAgICAgICBvdXQgKz0gJyBpZiAoJyArICgkZGF0YVR5cGUpICsgJyA9PSBcXCdib29sZWFuXFwnIHx8ICcgKyAoJGRhdGEpICsgJyA9PT0gbnVsbCB8fCAoJyArICgkZGF0YVR5cGUpICsgJyA9PSBcXCdzdHJpbmdcXCcgJiYgJyArICgkZGF0YSkgKyAnICYmICcgKyAoJGRhdGEpICsgJyA9PSArJyArICgkZGF0YSkgKyAnICc7XG4gICAgICAgICAgICAgIGlmICgkdHlwZSA9PSAnaW50ZWdlcicpIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyAmJiAhKCcgKyAoJGRhdGEpICsgJyAlIDEpJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBvdXQgKz0gJykpICcgKyAoJGNvZXJjZWQpICsgJyA9ICsnICsgKCRkYXRhKSArICc7ICc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCR0eXBlID09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICBvdXQgKz0gJyBpZiAoJyArICgkZGF0YSkgKyAnID09PSBcXCdmYWxzZVxcJyB8fCAnICsgKCRkYXRhKSArICcgPT09IDAgfHwgJyArICgkZGF0YSkgKyAnID09PSBudWxsKSAnICsgKCRjb2VyY2VkKSArICcgPSBmYWxzZTsgZWxzZSBpZiAoJyArICgkZGF0YSkgKyAnID09PSBcXCd0cnVlXFwnIHx8ICcgKyAoJGRhdGEpICsgJyA9PT0gMSkgJyArICgkY29lcmNlZCkgKyAnID0gdHJ1ZTsgJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJHR5cGUgPT0gJ251bGwnKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIGlmICgnICsgKCRkYXRhKSArICcgPT09IFxcJ1xcJyB8fCAnICsgKCRkYXRhKSArICcgPT09IDAgfHwgJyArICgkZGF0YSkgKyAnID09PSBmYWxzZSkgJyArICgkY29lcmNlZCkgKyAnID0gbnVsbDsgJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXQub3B0cy5jb2VyY2VUeXBlcyA9PSAnYXJyYXknICYmICR0eXBlID09ICdhcnJheScpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJGRhdGFUeXBlKSArICcgPT0gXFwnc3RyaW5nXFwnIHx8ICcgKyAoJGRhdGFUeXBlKSArICcgPT0gXFwnbnVtYmVyXFwnIHx8ICcgKyAoJGRhdGFUeXBlKSArICcgPT0gXFwnYm9vbGVhblxcJyB8fCAnICsgKCRkYXRhKSArICcgPT0gbnVsbCkgJyArICgkY29lcmNlZCkgKyAnID0gWycgKyAoJGRhdGEpICsgJ107ICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnICcgKyAoJGJyYWNlc0NvZXJjaW9uKSArICcgaWYgKCcgKyAoJGNvZXJjZWQpICsgJyA9PT0gdW5kZWZpbmVkKSB7ICAgJztcbiAgICAgICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICAgICAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCRlcnJvcktleXdvcmQgfHwgJ3R5cGUnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IHR5cGU6IFxcJyc7XG4gICAgICAgICAgaWYgKCR0eXBlSXNBcnJheSkge1xuICAgICAgICAgICAgb3V0ICs9ICcnICsgKCR0eXBlU2NoZW1hLmpvaW4oXCIsXCIpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ICs9ICcnICsgKCR0eXBlU2NoZW1hKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICdcXCcgfSAnO1xuICAgICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgYmUgJztcbiAgICAgICAgICAgIGlmICgkdHlwZUlzQXJyYXkpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcnICsgKCR0eXBlU2NoZW1hLmpvaW4oXCIsXCIpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG91dCArPSAnJyArICgkdHlwZVNjaGVtYSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXQgKz0gJ1xcJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnIH0gZWxzZSB7ICAnO1xuICAgICAgICB2YXIgJHBhcmVudERhdGEgPSAkZGF0YUx2bCA/ICdkYXRhJyArICgoJGRhdGFMdmwgLSAxKSB8fCAnJykgOiAncGFyZW50RGF0YScsXG4gICAgICAgICAgJHBhcmVudERhdGFQcm9wZXJ0eSA9ICRkYXRhTHZsID8gaXQuZGF0YVBhdGhBcnJbJGRhdGFMdmxdIDogJ3BhcmVudERhdGFQcm9wZXJ0eSc7XG4gICAgICAgIG91dCArPSAnICcgKyAoJGRhdGEpICsgJyA9ICcgKyAoJGNvZXJjZWQpICsgJzsgJztcbiAgICAgICAgaWYgKCEkZGF0YUx2bCkge1xuICAgICAgICAgIG91dCArPSAnaWYgKCcgKyAoJHBhcmVudERhdGEpICsgJyAhPT0gdW5kZWZpbmVkKSc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgJyArICgkcGFyZW50RGF0YSkgKyAnWycgKyAoJHBhcmVudERhdGFQcm9wZXJ0eSkgKyAnXSA9ICcgKyAoJGNvZXJjZWQpICsgJzsgfSAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICAgICAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCRlcnJvcktleXdvcmQgfHwgJ3R5cGUnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IHR5cGU6IFxcJyc7XG4gICAgICAgICAgaWYgKCR0eXBlSXNBcnJheSkge1xuICAgICAgICAgICAgb3V0ICs9ICcnICsgKCR0eXBlU2NoZW1hLmpvaW4oXCIsXCIpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ICs9ICcnICsgKCR0eXBlU2NoZW1hKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICdcXCcgfSAnO1xuICAgICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgYmUgJztcbiAgICAgICAgICAgIGlmICgkdHlwZUlzQXJyYXkpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcnICsgKCR0eXBlU2NoZW1hLmpvaW4oXCIsXCIpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG91dCArPSAnJyArICgkdHlwZVNjaGVtYSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXQgKz0gJ1xcJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyB9ICc7XG4gICAgfVxuICB9XG4gIGlmIChpdC5zY2hlbWEuJHJlZiAmJiAhJHJlZktleXdvcmRzKSB7XG4gICAgb3V0ICs9ICcgJyArIChpdC5SVUxFUy5hbGwuJHJlZi5jb2RlKGl0LCAnJHJlZicpKSArICcgJztcbiAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgb3V0ICs9ICcgfSBpZiAoZXJyb3JzID09PSAnO1xuICAgICAgaWYgKCR0b3ApIHtcbiAgICAgICAgb3V0ICs9ICcwJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnZXJyc18nICsgKCRsdmwpO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcpIHsgJztcbiAgICAgICRjbG9zaW5nQnJhY2VzMiArPSAnfSc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBhcnIyID0gaXQuUlVMRVM7XG4gICAgaWYgKGFycjIpIHtcbiAgICAgIHZhciAkcnVsZXNHcm91cCwgaTIgPSAtMSxcbiAgICAgICAgbDIgPSBhcnIyLmxlbmd0aCAtIDE7XG4gICAgICB3aGlsZSAoaTIgPCBsMikge1xuICAgICAgICAkcnVsZXNHcm91cCA9IGFycjJbaTIgKz0gMV07XG4gICAgICAgIGlmICgkc2hvdWxkVXNlR3JvdXAoJHJ1bGVzR3JvdXApKSB7XG4gICAgICAgICAgaWYgKCRydWxlc0dyb3VwLnR5cGUpIHtcbiAgICAgICAgICAgIG91dCArPSAnIGlmICgnICsgKGl0LnV0aWwuY2hlY2tEYXRhVHlwZSgkcnVsZXNHcm91cC50eXBlLCAkZGF0YSkpICsgJykgeyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXQub3B0cy51c2VEZWZhdWx0cykge1xuICAgICAgICAgICAgaWYgKCRydWxlc0dyb3VwLnR5cGUgPT0gJ29iamVjdCcgJiYgaXQuc2NoZW1hLnByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWEucHJvcGVydGllcyxcbiAgICAgICAgICAgICAgICAkc2NoZW1hS2V5cyA9IE9iamVjdC5rZXlzKCRzY2hlbWEpO1xuICAgICAgICAgICAgICB2YXIgYXJyMyA9ICRzY2hlbWFLZXlzO1xuICAgICAgICAgICAgICBpZiAoYXJyMykge1xuICAgICAgICAgICAgICAgIHZhciAkcHJvcGVydHlLZXksIGkzID0gLTEsXG4gICAgICAgICAgICAgICAgICBsMyA9IGFycjMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICB3aGlsZSAoaTMgPCBsMykge1xuICAgICAgICAgICAgICAgICAgJHByb3BlcnR5S2V5ID0gYXJyM1tpMyArPSAxXTtcbiAgICAgICAgICAgICAgICAgIHZhciAkc2NoID0gJHNjaGVtYVskcHJvcGVydHlLZXldO1xuICAgICAgICAgICAgICAgICAgaWYgKCRzY2guZGVmYXVsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciAkcGFzc0RhdGEgPSAkZGF0YSArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJHByb3BlcnR5S2V5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0LmNvbXBvc2l0ZVJ1bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoaXQub3B0cy5zdHJpY3REZWZhdWx0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyICRkZWZhdWx0TXNnID0gJ2RlZmF1bHQgaXMgaWdub3JlZCBmb3I6ICcgKyAkcGFzc0RhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXQub3B0cy5zdHJpY3REZWZhdWx0cyA9PT0gJ2xvZycpIGl0LmxvZ2dlci53YXJuKCRkZWZhdWx0TXNnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgdGhyb3cgbmV3IEVycm9yKCRkZWZhdWx0TXNnKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJHBhc3NEYXRhKSArICcgPT09IHVuZGVmaW5lZCAnO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChpdC5vcHRzLnVzZURlZmF1bHRzID09ICdlbXB0eScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dCArPSAnIHx8ICcgKyAoJHBhc3NEYXRhKSArICcgPT09IG51bGwgfHwgJyArICgkcGFzc0RhdGEpICsgJyA9PT0gXFwnXFwnICc7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIG91dCArPSAnICkgJyArICgkcGFzc0RhdGEpICsgJyA9ICc7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMudXNlRGVmYXVsdHMgPT0gJ3NoYXJlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dCArPSAnICcgKyAoaXQudXNlRGVmYXVsdCgkc2NoLmRlZmF1bHQpKSArICcgJztcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgJyArIChKU09OLnN0cmluZ2lmeSgkc2NoLmRlZmF1bHQpKSArICcgJztcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICc7ICc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJHJ1bGVzR3JvdXAudHlwZSA9PSAnYXJyYXknICYmIEFycmF5LmlzQXJyYXkoaXQuc2NoZW1hLml0ZW1zKSkge1xuICAgICAgICAgICAgICB2YXIgYXJyNCA9IGl0LnNjaGVtYS5pdGVtcztcbiAgICAgICAgICAgICAgaWYgKGFycjQpIHtcbiAgICAgICAgICAgICAgICB2YXIgJHNjaCwgJGkgPSAtMSxcbiAgICAgICAgICAgICAgICAgIGw0ID0gYXJyNC5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgIHdoaWxlICgkaSA8IGw0KSB7XG4gICAgICAgICAgICAgICAgICAkc2NoID0gYXJyNFskaSArPSAxXTtcbiAgICAgICAgICAgICAgICAgIGlmICgkc2NoLmRlZmF1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgJHBhc3NEYXRhID0gJGRhdGEgKyAnWycgKyAkaSArICddJztcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0LmNvbXBvc2l0ZVJ1bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoaXQub3B0cy5zdHJpY3REZWZhdWx0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyICRkZWZhdWx0TXNnID0gJ2RlZmF1bHQgaXMgaWdub3JlZCBmb3I6ICcgKyAkcGFzc0RhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXQub3B0cy5zdHJpY3REZWZhdWx0cyA9PT0gJ2xvZycpIGl0LmxvZ2dlci53YXJuKCRkZWZhdWx0TXNnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgdGhyb3cgbmV3IEVycm9yKCRkZWZhdWx0TXNnKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJHBhc3NEYXRhKSArICcgPT09IHVuZGVmaW5lZCAnO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChpdC5vcHRzLnVzZURlZmF1bHRzID09ICdlbXB0eScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dCArPSAnIHx8ICcgKyAoJHBhc3NEYXRhKSArICcgPT09IG51bGwgfHwgJyArICgkcGFzc0RhdGEpICsgJyA9PT0gXFwnXFwnICc7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIG91dCArPSAnICkgJyArICgkcGFzc0RhdGEpICsgJyA9ICc7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMudXNlRGVmYXVsdHMgPT0gJ3NoYXJlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dCArPSAnICcgKyAoaXQudXNlRGVmYXVsdCgkc2NoLmRlZmF1bHQpKSArICcgJztcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgJyArIChKU09OLnN0cmluZ2lmeSgkc2NoLmRlZmF1bHQpKSArICcgJztcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICc7ICc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIGFycjUgPSAkcnVsZXNHcm91cC5ydWxlcztcbiAgICAgICAgICBpZiAoYXJyNSkge1xuICAgICAgICAgICAgdmFyICRydWxlLCBpNSA9IC0xLFxuICAgICAgICAgICAgICBsNSA9IGFycjUubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHdoaWxlIChpNSA8IGw1KSB7XG4gICAgICAgICAgICAgICRydWxlID0gYXJyNVtpNSArPSAxXTtcbiAgICAgICAgICAgICAgaWYgKCRzaG91bGRVc2VSdWxlKCRydWxlKSkge1xuICAgICAgICAgICAgICAgIHZhciAkY29kZSA9ICRydWxlLmNvZGUoaXQsICRydWxlLmtleXdvcmQsICRydWxlc0dyb3VwLnR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICgkY29kZSkge1xuICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgJyArICgkY29kZSkgKyAnICc7XG4gICAgICAgICAgICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAkY2xvc2luZ0JyYWNlczEgKz0gJ30nO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgICAgb3V0ICs9ICcgJyArICgkY2xvc2luZ0JyYWNlczEpICsgJyAnO1xuICAgICAgICAgICAgJGNsb3NpbmdCcmFjZXMxID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgkcnVsZXNHcm91cC50eXBlKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgICAgICBpZiAoJHR5cGVTY2hlbWEgJiYgJHR5cGVTY2hlbWEgPT09ICRydWxlc0dyb3VwLnR5cGUgJiYgISRjb2VyY2VUb1R5cGVzKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICAgICAgICAgICAgICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgJy50eXBlJyxcbiAgICAgICAgICAgICAgICAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnL3R5cGUnO1xuICAgICAgICAgICAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgICAgICAgICAgICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICAgICAgICAgICAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJGVycm9yS2V5d29yZCB8fCAndHlwZScpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgdHlwZTogXFwnJztcbiAgICAgICAgICAgICAgICBpZiAoJHR5cGVJc0FycmF5KSB7XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJycgKyAoJHR5cGVTY2hlbWEuam9pbihcIixcIikpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJycgKyAoJHR5cGVTY2hlbWEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvdXQgKz0gJ1xcJyB9ICc7XG4gICAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBiZSAnO1xuICAgICAgICAgICAgICAgICAgaWYgKCR0eXBlSXNBcnJheSkge1xuICAgICAgICAgICAgICAgICAgICBvdXQgKz0gJycgKyAoJHR5cGVTY2hlbWEuam9pbihcIixcIikpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICcnICsgKCR0eXBlU2NoZW1hKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIG91dCArPSAnXFwnICc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyB7fSAnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHZhciBfX2VyciA9IG91dDtcbiAgICAgICAgICAgICAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgICAgICAgICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgICAgb3V0ICs9ICcgaWYgKGVycm9ycyA9PT0gJztcbiAgICAgICAgICAgIGlmICgkdG9wKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnMCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvdXQgKz0gJ2VycnNfJyArICgkbHZsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dCArPSAnKSB7ICc7XG4gICAgICAgICAgICAkY2xvc2luZ0JyYWNlczIgKz0gJ30nO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgIG91dCArPSAnICcgKyAoJGNsb3NpbmdCcmFjZXMyKSArICcgJztcbiAgfVxuICBpZiAoJHRvcCkge1xuICAgIGlmICgkYXN5bmMpIHtcbiAgICAgIG91dCArPSAnIGlmIChlcnJvcnMgPT09IDApIHJldHVybiBkYXRhOyAgICAgICAgICAgJztcbiAgICAgIG91dCArPSAnIGVsc2UgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcih2RXJyb3JzKTsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gdkVycm9yczsgJztcbiAgICAgIG91dCArPSAnIHJldHVybiBlcnJvcnMgPT09IDA7ICAgICAgICc7XG4gICAgfVxuICAgIG91dCArPSAnIH07IHJldHVybiB2YWxpZGF0ZTsnO1xuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIHZhciAnICsgKCR2YWxpZCkgKyAnID0gZXJyb3JzID09PSBlcnJzXycgKyAoJGx2bCkgKyAnOyc7XG4gIH1cbiAgb3V0ID0gaXQudXRpbC5jbGVhblVwQ29kZShvdXQpO1xuICBpZiAoJHRvcCkge1xuICAgIG91dCA9IGl0LnV0aWwuZmluYWxDbGVhblVwQ29kZShvdXQsICRhc3luYyk7XG4gIH1cblxuICBmdW5jdGlvbiAkc2hvdWxkVXNlR3JvdXAoJHJ1bGVzR3JvdXApIHtcbiAgICB2YXIgcnVsZXMgPSAkcnVsZXNHcm91cC5ydWxlcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKVxuICAgICAgaWYgKCRzaG91bGRVc2VSdWxlKHJ1bGVzW2ldKSkgcmV0dXJuIHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiAkc2hvdWxkVXNlUnVsZSgkcnVsZSkge1xuICAgIHJldHVybiBpdC5zY2hlbWFbJHJ1bGUua2V5d29yZF0gIT09IHVuZGVmaW5lZCB8fCAoJHJ1bGUuaW1wbGVtZW50cyAmJiAkcnVsZUltcGxlbWVudHNTb21lS2V5d29yZCgkcnVsZSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gJHJ1bGVJbXBsZW1lbnRzU29tZUtleXdvcmQoJHJ1bGUpIHtcbiAgICB2YXIgaW1wbCA9ICRydWxlLmltcGxlbWVudHM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbXBsLmxlbmd0aDsgaSsrKVxuICAgICAgaWYgKGl0LnNjaGVtYVtpbXBsW2ldXSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVzb2x2ZSA9IHJlcXVpcmUoJy4vcmVzb2x2ZScpXG4gICwgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpXG4gICwgZXJyb3JDbGFzc2VzID0gcmVxdWlyZSgnLi9lcnJvcl9jbGFzc2VzJylcbiAgLCBzdGFibGVTdHJpbmdpZnkgPSByZXF1aXJlKCdmYXN0LWpzb24tc3RhYmxlLXN0cmluZ2lmeScpO1xuXG52YXIgdmFsaWRhdGVHZW5lcmF0b3IgPSByZXF1aXJlKCcuLi9kb3Rqcy92YWxpZGF0ZScpO1xuXG4vKipcbiAqIEZ1bmN0aW9ucyBiZWxvdyBhcmUgdXNlZCBpbnNpZGUgY29tcGlsZWQgdmFsaWRhdGlvbnMgZnVuY3Rpb25cbiAqL1xuXG52YXIgdWNzMmxlbmd0aCA9IHV0aWwudWNzMmxlbmd0aDtcbnZhciBlcXVhbCA9IHJlcXVpcmUoJ2Zhc3QtZGVlcC1lcXVhbCcpO1xuXG4vLyB0aGlzIGVycm9yIGlzIHRocm93biBieSBhc3luYyBzY2hlbWFzIHRvIHJldHVybiB2YWxpZGF0aW9uIGVycm9ycyB2aWEgZXhjZXB0aW9uXG52YXIgVmFsaWRhdGlvbkVycm9yID0gZXJyb3JDbGFzc2VzLlZhbGlkYXRpb247XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcGlsZTtcblxuXG4vKipcbiAqIENvbXBpbGVzIHNjaGVtYSB0byB2YWxpZGF0aW9uIGZ1bmN0aW9uXG4gKiBAdGhpcyAgIEFqdlxuICogQHBhcmFtICB7T2JqZWN0fSBzY2hlbWEgc2NoZW1hIG9iamVjdFxuICogQHBhcmFtICB7T2JqZWN0fSByb290IG9iamVjdCB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSByb290IHNjaGVtYSBmb3IgdGhpcyBzY2hlbWFcbiAqIEBwYXJhbSAge09iamVjdH0gbG9jYWxSZWZzIHRoZSBoYXNoIG9mIGxvY2FsIHJlZmVyZW5jZXMgaW5zaWRlIHRoZSBzY2hlbWEgKGNyZWF0ZWQgYnkgcmVzb2x2ZS5pZCksIHVzZWQgZm9yIGlubGluZSByZXNvbHV0aW9uXG4gKiBAcGFyYW0gIHtTdHJpbmd9IGJhc2VJZCBiYXNlIElEIGZvciBJRHMgaW4gdGhlIHNjaGVtYVxuICogQHJldHVybiB7RnVuY3Rpb259IHZhbGlkYXRpb24gZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gY29tcGlsZShzY2hlbWEsIHJvb3QsIGxvY2FsUmVmcywgYmFzZUlkKSB7XG4gIC8qIGpzaGludCB2YWxpZHRoaXM6IHRydWUsIGV2aWw6IHRydWUgKi9cbiAgLyogZXNsaW50IG5vLXNoYWRvdzogMCAqL1xuICB2YXIgc2VsZiA9IHRoaXNcbiAgICAsIG9wdHMgPSB0aGlzLl9vcHRzXG4gICAgLCByZWZWYWwgPSBbIHVuZGVmaW5lZCBdXG4gICAgLCByZWZzID0ge31cbiAgICAsIHBhdHRlcm5zID0gW11cbiAgICAsIHBhdHRlcm5zSGFzaCA9IHt9XG4gICAgLCBkZWZhdWx0cyA9IFtdXG4gICAgLCBkZWZhdWx0c0hhc2ggPSB7fVxuICAgICwgY3VzdG9tUnVsZXMgPSBbXTtcblxuICByb290ID0gcm9vdCB8fCB7IHNjaGVtYTogc2NoZW1hLCByZWZWYWw6IHJlZlZhbCwgcmVmczogcmVmcyB9O1xuXG4gIHZhciBjID0gY2hlY2tDb21waWxpbmcuY2FsbCh0aGlzLCBzY2hlbWEsIHJvb3QsIGJhc2VJZCk7XG4gIHZhciBjb21waWxhdGlvbiA9IHRoaXMuX2NvbXBpbGF0aW9uc1tjLmluZGV4XTtcbiAgaWYgKGMuY29tcGlsaW5nKSByZXR1cm4gKGNvbXBpbGF0aW9uLmNhbGxWYWxpZGF0ZSA9IGNhbGxWYWxpZGF0ZSk7XG5cbiAgdmFyIGZvcm1hdHMgPSB0aGlzLl9mb3JtYXRzO1xuICB2YXIgUlVMRVMgPSB0aGlzLlJVTEVTO1xuXG4gIHRyeSB7XG4gICAgdmFyIHYgPSBsb2NhbENvbXBpbGUoc2NoZW1hLCByb290LCBsb2NhbFJlZnMsIGJhc2VJZCk7XG4gICAgY29tcGlsYXRpb24udmFsaWRhdGUgPSB2O1xuICAgIHZhciBjdiA9IGNvbXBpbGF0aW9uLmNhbGxWYWxpZGF0ZTtcbiAgICBpZiAoY3YpIHtcbiAgICAgIGN2LnNjaGVtYSA9IHYuc2NoZW1hO1xuICAgICAgY3YuZXJyb3JzID0gbnVsbDtcbiAgICAgIGN2LnJlZnMgPSB2LnJlZnM7XG4gICAgICBjdi5yZWZWYWwgPSB2LnJlZlZhbDtcbiAgICAgIGN2LnJvb3QgPSB2LnJvb3Q7XG4gICAgICBjdi4kYXN5bmMgPSB2LiRhc3luYztcbiAgICAgIGlmIChvcHRzLnNvdXJjZUNvZGUpIGN2LnNvdXJjZSA9IHYuc291cmNlO1xuICAgIH1cbiAgICByZXR1cm4gdjtcbiAgfSBmaW5hbGx5IHtcbiAgICBlbmRDb21waWxpbmcuY2FsbCh0aGlzLCBzY2hlbWEsIHJvb3QsIGJhc2VJZCk7XG4gIH1cblxuICAvKiBAdGhpcyAgIHsqfSAtIGN1c3RvbSBjb250ZXh0LCBzZWUgcGFzc0NvbnRleHQgb3B0aW9uICovXG4gIGZ1bmN0aW9uIGNhbGxWYWxpZGF0ZSgpIHtcbiAgICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlICovXG4gICAgdmFyIHZhbGlkYXRlID0gY29tcGlsYXRpb24udmFsaWRhdGU7XG4gICAgdmFyIHJlc3VsdCA9IHZhbGlkYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgY2FsbFZhbGlkYXRlLmVycm9ycyA9IHZhbGlkYXRlLmVycm9ycztcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gbG9jYWxDb21waWxlKF9zY2hlbWEsIF9yb290LCBsb2NhbFJlZnMsIGJhc2VJZCkge1xuICAgIHZhciBpc1Jvb3QgPSAhX3Jvb3QgfHwgKF9yb290ICYmIF9yb290LnNjaGVtYSA9PSBfc2NoZW1hKTtcbiAgICBpZiAoX3Jvb3Quc2NoZW1hICE9IHJvb3Quc2NoZW1hKVxuICAgICAgcmV0dXJuIGNvbXBpbGUuY2FsbChzZWxmLCBfc2NoZW1hLCBfcm9vdCwgbG9jYWxSZWZzLCBiYXNlSWQpO1xuXG4gICAgdmFyICRhc3luYyA9IF9zY2hlbWEuJGFzeW5jID09PSB0cnVlO1xuXG4gICAgdmFyIHNvdXJjZUNvZGUgPSB2YWxpZGF0ZUdlbmVyYXRvcih7XG4gICAgICBpc1RvcDogdHJ1ZSxcbiAgICAgIHNjaGVtYTogX3NjaGVtYSxcbiAgICAgIGlzUm9vdDogaXNSb290LFxuICAgICAgYmFzZUlkOiBiYXNlSWQsXG4gICAgICByb290OiBfcm9vdCxcbiAgICAgIHNjaGVtYVBhdGg6ICcnLFxuICAgICAgZXJyU2NoZW1hUGF0aDogJyMnLFxuICAgICAgZXJyb3JQYXRoOiAnXCJcIicsXG4gICAgICBNaXNzaW5nUmVmRXJyb3I6IGVycm9yQ2xhc3Nlcy5NaXNzaW5nUmVmLFxuICAgICAgUlVMRVM6IFJVTEVTLFxuICAgICAgdmFsaWRhdGU6IHZhbGlkYXRlR2VuZXJhdG9yLFxuICAgICAgdXRpbDogdXRpbCxcbiAgICAgIHJlc29sdmU6IHJlc29sdmUsXG4gICAgICByZXNvbHZlUmVmOiByZXNvbHZlUmVmLFxuICAgICAgdXNlUGF0dGVybjogdXNlUGF0dGVybixcbiAgICAgIHVzZURlZmF1bHQ6IHVzZURlZmF1bHQsXG4gICAgICB1c2VDdXN0b21SdWxlOiB1c2VDdXN0b21SdWxlLFxuICAgICAgb3B0czogb3B0cyxcbiAgICAgIGZvcm1hdHM6IGZvcm1hdHMsXG4gICAgICBsb2dnZXI6IHNlbGYubG9nZ2VyLFxuICAgICAgc2VsZjogc2VsZlxuICAgIH0pO1xuXG4gICAgc291cmNlQ29kZSA9IHZhcnMocmVmVmFsLCByZWZWYWxDb2RlKSArIHZhcnMocGF0dGVybnMsIHBhdHRlcm5Db2RlKVxuICAgICAgICAgICAgICAgICAgICsgdmFycyhkZWZhdWx0cywgZGVmYXVsdENvZGUpICsgdmFycyhjdXN0b21SdWxlcywgY3VzdG9tUnVsZUNvZGUpXG4gICAgICAgICAgICAgICAgICAgKyBzb3VyY2VDb2RlO1xuXG4gICAgaWYgKG9wdHMucHJvY2Vzc0NvZGUpIHNvdXJjZUNvZGUgPSBvcHRzLnByb2Nlc3NDb2RlKHNvdXJjZUNvZGUpO1xuICAgIC8vIGNvbnNvbGUubG9nKCdcXG5cXG5cXG4gKioqIFxcbicsIEpTT04uc3RyaW5naWZ5KHNvdXJjZUNvZGUpKTtcbiAgICB2YXIgdmFsaWRhdGU7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBtYWtlVmFsaWRhdGUgPSBuZXcgRnVuY3Rpb24oXG4gICAgICAgICdzZWxmJyxcbiAgICAgICAgJ1JVTEVTJyxcbiAgICAgICAgJ2Zvcm1hdHMnLFxuICAgICAgICAncm9vdCcsXG4gICAgICAgICdyZWZWYWwnLFxuICAgICAgICAnZGVmYXVsdHMnLFxuICAgICAgICAnY3VzdG9tUnVsZXMnLFxuICAgICAgICAnZXF1YWwnLFxuICAgICAgICAndWNzMmxlbmd0aCcsXG4gICAgICAgICdWYWxpZGF0aW9uRXJyb3InLFxuICAgICAgICBzb3VyY2VDb2RlXG4gICAgICApO1xuXG4gICAgICB2YWxpZGF0ZSA9IG1ha2VWYWxpZGF0ZShcbiAgICAgICAgc2VsZixcbiAgICAgICAgUlVMRVMsXG4gICAgICAgIGZvcm1hdHMsXG4gICAgICAgIHJvb3QsXG4gICAgICAgIHJlZlZhbCxcbiAgICAgICAgZGVmYXVsdHMsXG4gICAgICAgIGN1c3RvbVJ1bGVzLFxuICAgICAgICBlcXVhbCxcbiAgICAgICAgdWNzMmxlbmd0aCxcbiAgICAgICAgVmFsaWRhdGlvbkVycm9yXG4gICAgICApO1xuXG4gICAgICByZWZWYWxbMF0gPSB2YWxpZGF0ZTtcbiAgICB9IGNhdGNoKGUpIHtcbiAgICAgIHNlbGYubG9nZ2VyLmVycm9yKCdFcnJvciBjb21waWxpbmcgc2NoZW1hLCBmdW5jdGlvbiBjb2RlOicsIHNvdXJjZUNvZGUpO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZS5zY2hlbWEgPSBfc2NoZW1hO1xuICAgIHZhbGlkYXRlLmVycm9ycyA9IG51bGw7XG4gICAgdmFsaWRhdGUucmVmcyA9IHJlZnM7XG4gICAgdmFsaWRhdGUucmVmVmFsID0gcmVmVmFsO1xuICAgIHZhbGlkYXRlLnJvb3QgPSBpc1Jvb3QgPyB2YWxpZGF0ZSA6IF9yb290O1xuICAgIGlmICgkYXN5bmMpIHZhbGlkYXRlLiRhc3luYyA9IHRydWU7XG4gICAgaWYgKG9wdHMuc291cmNlQ29kZSA9PT0gdHJ1ZSkge1xuICAgICAgdmFsaWRhdGUuc291cmNlID0ge1xuICAgICAgICBjb2RlOiBzb3VyY2VDb2RlLFxuICAgICAgICBwYXR0ZXJuczogcGF0dGVybnMsXG4gICAgICAgIGRlZmF1bHRzOiBkZWZhdWx0c1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGU7XG4gIH1cblxuICBmdW5jdGlvbiByZXNvbHZlUmVmKGJhc2VJZCwgcmVmLCBpc1Jvb3QpIHtcbiAgICByZWYgPSByZXNvbHZlLnVybChiYXNlSWQsIHJlZik7XG4gICAgdmFyIHJlZkluZGV4ID0gcmVmc1tyZWZdO1xuICAgIHZhciBfcmVmVmFsLCByZWZDb2RlO1xuICAgIGlmIChyZWZJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBfcmVmVmFsID0gcmVmVmFsW3JlZkluZGV4XTtcbiAgICAgIHJlZkNvZGUgPSAncmVmVmFsWycgKyByZWZJbmRleCArICddJztcbiAgICAgIHJldHVybiByZXNvbHZlZFJlZihfcmVmVmFsLCByZWZDb2RlKTtcbiAgICB9XG4gICAgaWYgKCFpc1Jvb3QgJiYgcm9vdC5yZWZzKSB7XG4gICAgICB2YXIgcm9vdFJlZklkID0gcm9vdC5yZWZzW3JlZl07XG4gICAgICBpZiAocm9vdFJlZklkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgX3JlZlZhbCA9IHJvb3QucmVmVmFsW3Jvb3RSZWZJZF07XG4gICAgICAgIHJlZkNvZGUgPSBhZGRMb2NhbFJlZihyZWYsIF9yZWZWYWwpO1xuICAgICAgICByZXR1cm4gcmVzb2x2ZWRSZWYoX3JlZlZhbCwgcmVmQ29kZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVmQ29kZSA9IGFkZExvY2FsUmVmKHJlZik7XG4gICAgdmFyIHYgPSByZXNvbHZlLmNhbGwoc2VsZiwgbG9jYWxDb21waWxlLCByb290LCByZWYpO1xuICAgIGlmICh2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciBsb2NhbFNjaGVtYSA9IGxvY2FsUmVmcyAmJiBsb2NhbFJlZnNbcmVmXTtcbiAgICAgIGlmIChsb2NhbFNjaGVtYSkge1xuICAgICAgICB2ID0gcmVzb2x2ZS5pbmxpbmVSZWYobG9jYWxTY2hlbWEsIG9wdHMuaW5saW5lUmVmcylcbiAgICAgICAgICAgID8gbG9jYWxTY2hlbWFcbiAgICAgICAgICAgIDogY29tcGlsZS5jYWxsKHNlbGYsIGxvY2FsU2NoZW1hLCByb290LCBsb2NhbFJlZnMsIGJhc2VJZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVtb3ZlTG9jYWxSZWYocmVmKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVwbGFjZUxvY2FsUmVmKHJlZiwgdik7XG4gICAgICByZXR1cm4gcmVzb2x2ZWRSZWYodiwgcmVmQ29kZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYWRkTG9jYWxSZWYocmVmLCB2KSB7XG4gICAgdmFyIHJlZklkID0gcmVmVmFsLmxlbmd0aDtcbiAgICByZWZWYWxbcmVmSWRdID0gdjtcbiAgICByZWZzW3JlZl0gPSByZWZJZDtcbiAgICByZXR1cm4gJ3JlZlZhbCcgKyByZWZJZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZUxvY2FsUmVmKHJlZikge1xuICAgIGRlbGV0ZSByZWZzW3JlZl07XG4gIH1cblxuICBmdW5jdGlvbiByZXBsYWNlTG9jYWxSZWYocmVmLCB2KSB7XG4gICAgdmFyIHJlZklkID0gcmVmc1tyZWZdO1xuICAgIHJlZlZhbFtyZWZJZF0gPSB2O1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzb2x2ZWRSZWYocmVmVmFsLCBjb2RlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiByZWZWYWwgPT0gJ29iamVjdCcgfHwgdHlwZW9mIHJlZlZhbCA9PSAnYm9vbGVhbidcbiAgICAgICAgICAgID8geyBjb2RlOiBjb2RlLCBzY2hlbWE6IHJlZlZhbCwgaW5saW5lOiB0cnVlIH1cbiAgICAgICAgICAgIDogeyBjb2RlOiBjb2RlLCAkYXN5bmM6IHJlZlZhbCAmJiAhIXJlZlZhbC4kYXN5bmMgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVzZVBhdHRlcm4ocmVnZXhTdHIpIHtcbiAgICB2YXIgaW5kZXggPSBwYXR0ZXJuc0hhc2hbcmVnZXhTdHJdO1xuICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpbmRleCA9IHBhdHRlcm5zSGFzaFtyZWdleFN0cl0gPSBwYXR0ZXJucy5sZW5ndGg7XG4gICAgICBwYXR0ZXJuc1tpbmRleF0gPSByZWdleFN0cjtcbiAgICB9XG4gICAgcmV0dXJuICdwYXR0ZXJuJyArIGluZGV4O1xuICB9XG5cbiAgZnVuY3Rpb24gdXNlRGVmYXVsdCh2YWx1ZSkge1xuICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgIHJldHVybiAnJyArIHZhbHVlO1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgcmV0dXJuIHV0aWwudG9RdW90ZWRTdHJpbmcodmFsdWUpO1xuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gJ251bGwnO1xuICAgICAgICB2YXIgdmFsdWVTdHIgPSBzdGFibGVTdHJpbmdpZnkodmFsdWUpO1xuICAgICAgICB2YXIgaW5kZXggPSBkZWZhdWx0c0hhc2hbdmFsdWVTdHJdO1xuICAgICAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGluZGV4ID0gZGVmYXVsdHNIYXNoW3ZhbHVlU3RyXSA9IGRlZmF1bHRzLmxlbmd0aDtcbiAgICAgICAgICBkZWZhdWx0c1tpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ2RlZmF1bHQnICsgaW5kZXg7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXNlQ3VzdG9tUnVsZShydWxlLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgaXQpIHtcbiAgICBpZiAoc2VsZi5fb3B0cy52YWxpZGF0ZVNjaGVtYSAhPT0gZmFsc2UpIHtcbiAgICAgIHZhciBkZXBzID0gcnVsZS5kZWZpbml0aW9uLmRlcGVuZGVuY2llcztcbiAgICAgIGlmIChkZXBzICYmICFkZXBzLmV2ZXJ5KGZ1bmN0aW9uKGtleXdvcmQpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJlbnRTY2hlbWEsIGtleXdvcmQpO1xuICAgICAgfSkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncGFyZW50IHNjaGVtYSBtdXN0IGhhdmUgYWxsIHJlcXVpcmVkIGtleXdvcmRzOiAnICsgZGVwcy5qb2luKCcsJykpO1xuXG4gICAgICB2YXIgdmFsaWRhdGVTY2hlbWEgPSBydWxlLmRlZmluaXRpb24udmFsaWRhdGVTY2hlbWE7XG4gICAgICBpZiAodmFsaWRhdGVTY2hlbWEpIHtcbiAgICAgICAgdmFyIHZhbGlkID0gdmFsaWRhdGVTY2hlbWEoc2NoZW1hKTtcbiAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgIHZhciBtZXNzYWdlID0gJ2tleXdvcmQgc2NoZW1hIGlzIGludmFsaWQ6ICcgKyBzZWxmLmVycm9yc1RleHQodmFsaWRhdGVTY2hlbWEuZXJyb3JzKTtcbiAgICAgICAgICBpZiAoc2VsZi5fb3B0cy52YWxpZGF0ZVNjaGVtYSA9PSAnbG9nJykgc2VsZi5sb2dnZXIuZXJyb3IobWVzc2FnZSk7XG4gICAgICAgICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgY29tcGlsZSA9IHJ1bGUuZGVmaW5pdGlvbi5jb21waWxlXG4gICAgICAsIGlubGluZSA9IHJ1bGUuZGVmaW5pdGlvbi5pbmxpbmVcbiAgICAgICwgbWFjcm8gPSBydWxlLmRlZmluaXRpb24ubWFjcm87XG5cbiAgICB2YXIgdmFsaWRhdGU7XG4gICAgaWYgKGNvbXBpbGUpIHtcbiAgICAgIHZhbGlkYXRlID0gY29tcGlsZS5jYWxsKHNlbGYsIHNjaGVtYSwgcGFyZW50U2NoZW1hLCBpdCk7XG4gICAgfSBlbHNlIGlmIChtYWNybykge1xuICAgICAgdmFsaWRhdGUgPSBtYWNyby5jYWxsKHNlbGYsIHNjaGVtYSwgcGFyZW50U2NoZW1hLCBpdCk7XG4gICAgICBpZiAob3B0cy52YWxpZGF0ZVNjaGVtYSAhPT0gZmFsc2UpIHNlbGYudmFsaWRhdGVTY2hlbWEodmFsaWRhdGUsIHRydWUpO1xuICAgIH0gZWxzZSBpZiAoaW5saW5lKSB7XG4gICAgICB2YWxpZGF0ZSA9IGlubGluZS5jYWxsKHNlbGYsIGl0LCBydWxlLmtleXdvcmQsIHNjaGVtYSwgcGFyZW50U2NoZW1hKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsaWRhdGUgPSBydWxlLmRlZmluaXRpb24udmFsaWRhdGU7XG4gICAgICBpZiAoIXZhbGlkYXRlKSByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlID09PSB1bmRlZmluZWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2N1c3RvbSBrZXl3b3JkIFwiJyArIHJ1bGUua2V5d29yZCArICdcImZhaWxlZCB0byBjb21waWxlJyk7XG5cbiAgICB2YXIgaW5kZXggPSBjdXN0b21SdWxlcy5sZW5ndGg7XG4gICAgY3VzdG9tUnVsZXNbaW5kZXhdID0gdmFsaWRhdGU7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29kZTogJ2N1c3RvbVJ1bGUnICsgaW5kZXgsXG4gICAgICB2YWxpZGF0ZTogdmFsaWRhdGVcbiAgICB9O1xuICB9XG59XG5cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIHNjaGVtYSBpcyBjdXJyZW50bHkgY29tcGlsZWRcbiAqIEB0aGlzICAgQWp2XG4gKiBAcGFyYW0gIHtPYmplY3R9IHNjaGVtYSBzY2hlbWEgdG8gY29tcGlsZVxuICogQHBhcmFtICB7T2JqZWN0fSByb290IHJvb3Qgb2JqZWN0XG4gKiBAcGFyYW0gIHtTdHJpbmd9IGJhc2VJZCBiYXNlIHNjaGVtYSBJRFxuICogQHJldHVybiB7T2JqZWN0fSBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIFwiaW5kZXhcIiAoY29tcGlsYXRpb24gaW5kZXgpIGFuZCBcImNvbXBpbGluZ1wiIChib29sZWFuKVxuICovXG5mdW5jdGlvbiBjaGVja0NvbXBpbGluZyhzY2hlbWEsIHJvb3QsIGJhc2VJZCkge1xuICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlICovXG4gIHZhciBpbmRleCA9IGNvbXBJbmRleC5jYWxsKHRoaXMsIHNjaGVtYSwgcm9vdCwgYmFzZUlkKTtcbiAgaWYgKGluZGV4ID49IDApIHJldHVybiB7IGluZGV4OiBpbmRleCwgY29tcGlsaW5nOiB0cnVlIH07XG4gIGluZGV4ID0gdGhpcy5fY29tcGlsYXRpb25zLmxlbmd0aDtcbiAgdGhpcy5fY29tcGlsYXRpb25zW2luZGV4XSA9IHtcbiAgICBzY2hlbWE6IHNjaGVtYSxcbiAgICByb290OiByb290LFxuICAgIGJhc2VJZDogYmFzZUlkXG4gIH07XG4gIHJldHVybiB7IGluZGV4OiBpbmRleCwgY29tcGlsaW5nOiBmYWxzZSB9O1xufVxuXG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgc2NoZW1hIGZyb20gdGhlIGN1cnJlbnRseSBjb21waWxlZCBsaXN0XG4gKiBAdGhpcyAgIEFqdlxuICogQHBhcmFtICB7T2JqZWN0fSBzY2hlbWEgc2NoZW1hIHRvIGNvbXBpbGVcbiAqIEBwYXJhbSAge09iamVjdH0gcm9vdCByb290IG9iamVjdFxuICogQHBhcmFtICB7U3RyaW5nfSBiYXNlSWQgYmFzZSBzY2hlbWEgSURcbiAqL1xuZnVuY3Rpb24gZW5kQ29tcGlsaW5nKHNjaGVtYSwgcm9vdCwgYmFzZUlkKSB7XG4gIC8qIGpzaGludCB2YWxpZHRoaXM6IHRydWUgKi9cbiAgdmFyIGkgPSBjb21wSW5kZXguY2FsbCh0aGlzLCBzY2hlbWEsIHJvb3QsIGJhc2VJZCk7XG4gIGlmIChpID49IDApIHRoaXMuX2NvbXBpbGF0aW9ucy5zcGxpY2UoaSwgMSk7XG59XG5cblxuLyoqXG4gKiBJbmRleCBvZiBzY2hlbWEgY29tcGlsYXRpb24gaW4gdGhlIGN1cnJlbnRseSBjb21waWxlZCBsaXN0XG4gKiBAdGhpcyAgIEFqdlxuICogQHBhcmFtICB7T2JqZWN0fSBzY2hlbWEgc2NoZW1hIHRvIGNvbXBpbGVcbiAqIEBwYXJhbSAge09iamVjdH0gcm9vdCByb290IG9iamVjdFxuICogQHBhcmFtICB7U3RyaW5nfSBiYXNlSWQgYmFzZSBzY2hlbWEgSURcbiAqIEByZXR1cm4ge0ludGVnZXJ9IGNvbXBpbGF0aW9uIGluZGV4XG4gKi9cbmZ1bmN0aW9uIGNvbXBJbmRleChzY2hlbWEsIHJvb3QsIGJhc2VJZCkge1xuICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlICovXG4gIGZvciAodmFyIGk9MDsgaTx0aGlzLl9jb21waWxhdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgYyA9IHRoaXMuX2NvbXBpbGF0aW9uc1tpXTtcbiAgICBpZiAoYy5zY2hlbWEgPT0gc2NoZW1hICYmIGMucm9vdCA9PSByb290ICYmIGMuYmFzZUlkID09IGJhc2VJZCkgcmV0dXJuIGk7XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5cbmZ1bmN0aW9uIHBhdHRlcm5Db2RlKGksIHBhdHRlcm5zKSB7XG4gIHJldHVybiAndmFyIHBhdHRlcm4nICsgaSArICcgPSBuZXcgUmVnRXhwKCcgKyB1dGlsLnRvUXVvdGVkU3RyaW5nKHBhdHRlcm5zW2ldKSArICcpOyc7XG59XG5cblxuZnVuY3Rpb24gZGVmYXVsdENvZGUoaSkge1xuICByZXR1cm4gJ3ZhciBkZWZhdWx0JyArIGkgKyAnID0gZGVmYXVsdHNbJyArIGkgKyAnXTsnO1xufVxuXG5cbmZ1bmN0aW9uIHJlZlZhbENvZGUoaSwgcmVmVmFsKSB7XG4gIHJldHVybiByZWZWYWxbaV0gPT09IHVuZGVmaW5lZCA/ICcnIDogJ3ZhciByZWZWYWwnICsgaSArICcgPSByZWZWYWxbJyArIGkgKyAnXTsnO1xufVxuXG5cbmZ1bmN0aW9uIGN1c3RvbVJ1bGVDb2RlKGkpIHtcbiAgcmV0dXJuICd2YXIgY3VzdG9tUnVsZScgKyBpICsgJyA9IGN1c3RvbVJ1bGVzWycgKyBpICsgJ107Jztcbn1cblxuXG5mdW5jdGlvbiB2YXJzKGFyciwgc3RhdGVtZW50KSB7XG4gIGlmICghYXJyLmxlbmd0aCkgcmV0dXJuICcnO1xuICB2YXIgY29kZSA9ICcnO1xuICBmb3IgKHZhciBpPTA7IGk8YXJyLmxlbmd0aDsgaSsrKVxuICAgIGNvZGUgKz0gc3RhdGVtZW50KGksIGFycik7XG4gIHJldHVybiBjb2RlO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5cbnZhciBDYWNoZSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQ2FjaGUoKSB7XG4gIHRoaXMuX2NhY2hlID0ge307XG59O1xuXG5cbkNhY2hlLnByb3RvdHlwZS5wdXQgPSBmdW5jdGlvbiBDYWNoZV9wdXQoa2V5LCB2YWx1ZSkge1xuICB0aGlzLl9jYWNoZVtrZXldID0gdmFsdWU7XG59O1xuXG5cbkNhY2hlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiBDYWNoZV9nZXQoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9jYWNoZVtrZXldO1xufTtcblxuXG5DYWNoZS5wcm90b3R5cGUuZGVsID0gZnVuY3Rpb24gQ2FjaGVfZGVsKGtleSkge1xuICBkZWxldGUgdGhpcy5fY2FjaGVba2V5XTtcbn07XG5cblxuQ2FjaGUucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gQ2FjaGVfY2xlYXIoKSB7XG4gIHRoaXMuX2NhY2hlID0ge307XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuXG52YXIgREFURSA9IC9eKFxcZFxcZFxcZFxcZCktKFxcZFxcZCktKFxcZFxcZCkkLztcbnZhciBEQVlTID0gWzAsMzEsMjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdO1xudmFyIFRJTUUgPSAvXihcXGRcXGQpOihcXGRcXGQpOihcXGRcXGQpKFxcLlxcZCspPyh6fFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/KT8kL2k7XG52YXIgSE9TVE5BTUUgPSAvXig/PS57MSwyNTN9XFwuPyQpW2EtejAtOV0oPzpbYS16MC05LV17MCw2MX1bYS16MC05XSk/KD86XFwuW2EtejAtOV0oPzpbLTAtOWEtel17MCw2MX1bMC05YS16XSk/KSpcXC4/JC9pO1xudmFyIFVSSSA9IC9eKD86W2Etel1bYS16MC05K1xcLS5dKjopKD86XFwvP1xcLyg/Oig/OlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpdfCVbMC05YS1mXXsyfSkqQCk/KD86XFxbKD86KD86KD86KD86WzAtOWEtZl17MSw0fTopezZ9fDo6KD86WzAtOWEtZl17MSw0fTopezV9fCg/OlswLTlhLWZdezEsNH0pPzo6KD86WzAtOWEtZl17MSw0fTopezR9fCg/Oig/OlswLTlhLWZdezEsNH06KXswLDF9WzAtOWEtZl17MSw0fSk/OjooPzpbMC05YS1mXXsxLDR9Oil7M318KD86KD86WzAtOWEtZl17MSw0fTopezAsMn1bMC05YS1mXXsxLDR9KT86Oig/OlswLTlhLWZdezEsNH06KXsyfXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCwzfVswLTlhLWZdezEsNH0pPzo6WzAtOWEtZl17MSw0fTp8KD86KD86WzAtOWEtZl17MSw0fTopezAsNH1bMC05YS1mXXsxLDR9KT86OikoPzpbMC05YS1mXXsxLDR9OlswLTlhLWZdezEsNH18KD86KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KVxcLil7M30oPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCw1fVswLTlhLWZdezEsNH0pPzo6WzAtOWEtZl17MSw0fXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCw2fVswLTlhLWZdezEsNH0pPzo6KXxbVnZdWzAtOWEtZl0rXFwuW2EtejAtOVxcLS5ffiEkJicoKSorLDs9Ol0rKVxcXXwoPzooPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pXFwuKXszfSg/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPyl8KD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9XXwlWzAtOWEtZl17Mn0pKikoPzo6XFxkKik/KD86XFwvKD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkqKSp8XFwvKD86KD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkrKD86XFwvKD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkqKSopP3woPzpbYS16MC05XFwtLl9+ISQmJygpKissOz06QF18JVswLTlhLWZdezJ9KSsoPzpcXC8oPzpbYS16MC05XFwtLl9+ISQmJygpKissOz06QF18JVswLTlhLWZdezJ9KSopKikoPzpcXD8oPzpbYS16MC05XFwtLl9+ISQmJygpKissOz06QC8/XXwlWzAtOWEtZl17Mn0pKik/KD86Iyg/OlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpALz9dfCVbMC05YS1mXXsyfSkqKT8kL2k7XG52YXIgVVJJUkVGID0gL14oPzpbYS16XVthLXowLTkrXFwtLl0qOik/KD86XFwvP1xcLyg/Oig/OlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpdfCVbMC05YS1mXXsyfSkqQCk/KD86XFxbKD86KD86KD86KD86WzAtOWEtZl17MSw0fTopezZ9fDo6KD86WzAtOWEtZl17MSw0fTopezV9fCg/OlswLTlhLWZdezEsNH0pPzo6KD86WzAtOWEtZl17MSw0fTopezR9fCg/Oig/OlswLTlhLWZdezEsNH06KXswLDF9WzAtOWEtZl17MSw0fSk/OjooPzpbMC05YS1mXXsxLDR9Oil7M318KD86KD86WzAtOWEtZl17MSw0fTopezAsMn1bMC05YS1mXXsxLDR9KT86Oig/OlswLTlhLWZdezEsNH06KXsyfXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCwzfVswLTlhLWZdezEsNH0pPzo6WzAtOWEtZl17MSw0fTp8KD86KD86WzAtOWEtZl17MSw0fTopezAsNH1bMC05YS1mXXsxLDR9KT86OikoPzpbMC05YS1mXXsxLDR9OlswLTlhLWZdezEsNH18KD86KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KVxcLil7M30oPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCw1fVswLTlhLWZdezEsNH0pPzo6WzAtOWEtZl17MSw0fXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCw2fVswLTlhLWZdezEsNH0pPzo6KXxbVnZdWzAtOWEtZl0rXFwuW2EtejAtOVxcLS5ffiEkJicoKSorLDs9Ol0rKVxcXXwoPzooPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pXFwuKXszfSg/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPyl8KD86W2EtejAtOVxcLS5ffiEkJidcIigpKissOz1dfCVbMC05YS1mXXsyfSkqKSg/OjpcXGQqKT8oPzpcXC8oPzpbYS16MC05XFwtLl9+ISQmJ1wiKCkqKyw7PTpAXXwlWzAtOWEtZl17Mn0pKikqfFxcLyg/Oig/OlthLXowLTlcXC0uX34hJCYnXCIoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkrKD86XFwvKD86W2EtejAtOVxcLS5ffiEkJidcIigpKissOz06QF18JVswLTlhLWZdezJ9KSopKik/fCg/OlthLXowLTlcXC0uX34hJCYnXCIoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkrKD86XFwvKD86W2EtejAtOVxcLS5ffiEkJidcIigpKissOz06QF18JVswLTlhLWZdezJ9KSopKik/KD86XFw/KD86W2EtejAtOVxcLS5ffiEkJidcIigpKissOz06QC8/XXwlWzAtOWEtZl17Mn0pKik/KD86Iyg/OlthLXowLTlcXC0uX34hJCYnXCIoKSorLDs9OkAvP118JVswLTlhLWZdezJ9KSopPyQvaTtcbi8vIHVyaS10ZW1wbGF0ZTogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY1NzBcbnZhciBVUklURU1QTEFURSA9IC9eKD86KD86W15cXHgwMC1cXHgyMFwiJzw+JVxcXFxeYHt8fV18JVswLTlhLWZdezJ9KXxcXHtbKyMuLzs/Jj0sIUB8XT8oPzpbYS16MC05X118JVswLTlhLWZdezJ9KSsoPzo6WzEtOV1bMC05XXswLDN9fFxcKik/KD86LCg/OlthLXowLTlfXXwlWzAtOWEtZl17Mn0pKyg/OjpbMS05XVswLTldezAsM318XFwqKT8pKlxcfSkqJC9pO1xuLy8gRm9yIHRoZSBzb3VyY2U6IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2RwZXJpbmkvNzI5Mjk0XG4vLyBGb3IgdGVzdCBjYXNlczogaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL2RlbW8vdXJsLXJlZ2V4XG4vLyBAdG9kbyBEZWxldGUgY3VycmVudCBVUkwgaW4gZmF2b3VyIG9mIHRoZSBjb21tZW50ZWQgb3V0IFVSTCBydWxlIHdoZW4gdGhpcyBpc3N1ZSBpcyBmaXhlZCBodHRwczovL2dpdGh1Yi5jb20vZXNsaW50L2VzbGludC9pc3N1ZXMvNzk4My5cbi8vIHZhciBVUkwgPSAvXig/Oig/Omh0dHBzP3xmdHApOlxcL1xcLykoPzpcXFMrKD86OlxcUyopP0ApPyg/Oig/ITEwKD86XFwuXFxkezEsM30pezN9KSg/ITEyNyg/OlxcLlxcZHsxLDN9KXszfSkoPyExNjlcXC4yNTQoPzpcXC5cXGR7MSwzfSl7Mn0pKD8hMTkyXFwuMTY4KD86XFwuXFxkezEsM30pezJ9KSg/ITE3MlxcLig/OjFbNi05XXwyXFxkfDNbMC0xXSkoPzpcXC5cXGR7MSwzfSl7Mn0pKD86WzEtOV1cXGQ/fDFcXGRcXGR8MlswMV1cXGR8MjJbMC0zXSkoPzpcXC4oPzoxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSl7Mn0oPzpcXC4oPzpbMS05XVxcZD98MVxcZFxcZHwyWzAtNF1cXGR8MjVbMC00XSkpfCg/Oig/OlthLXpcXHV7MDBhMX0tXFx1e2ZmZmZ9MC05XSstPykqW2EtelxcdXswMGExfS1cXHV7ZmZmZn0wLTldKykoPzpcXC4oPzpbYS16XFx1ezAwYTF9LVxcdXtmZmZmfTAtOV0rLT8pKlthLXpcXHV7MDBhMX0tXFx1e2ZmZmZ9MC05XSspKig/OlxcLig/OlthLXpcXHV7MDBhMX0tXFx1e2ZmZmZ9XXsyLH0pKSkoPzo6XFxkezIsNX0pPyg/OlxcL1teXFxzXSopPyQvaXU7XG52YXIgVVJMID0gL14oPzooPzpodHRwW3NcXHUwMTdGXT98ZnRwKTpcXC9cXC8pKD86KD86W1xcMC1cXHgwOFxceDBFLVxceDFGIS1cXHg5RlxceEExLVxcdTE2N0ZcXHUxNjgxLVxcdTFGRkZcXHUyMDBCLVxcdTIwMjdcXHUyMDJBLVxcdTIwMkVcXHUyMDMwLVxcdTIwNUVcXHUyMDYwLVxcdTJGRkZcXHUzMDAxLVxcdUQ3RkZcXHVFMDAwLVxcdUZFRkVcXHVGRjAwLVxcdUZGRkZdfFtcXHVEODAwLVxcdURCRkZdW1xcdURDMDAtXFx1REZGRl18W1xcdUQ4MDAtXFx1REJGRl0oPyFbXFx1REMwMC1cXHVERkZGXSl8KD86W15cXHVEODAwLVxcdURCRkZdfF4pW1xcdURDMDAtXFx1REZGRl0pKyg/OjooPzpbXFwwLVxceDA4XFx4MEUtXFx4MUYhLVxceDlGXFx4QTEtXFx1MTY3RlxcdTE2ODEtXFx1MUZGRlxcdTIwMEItXFx1MjAyN1xcdTIwMkEtXFx1MjAyRVxcdTIwMzAtXFx1MjA1RVxcdTIwNjAtXFx1MkZGRlxcdTMwMDEtXFx1RDdGRlxcdUUwMDAtXFx1RkVGRVxcdUZGMDAtXFx1RkZGRl18W1xcdUQ4MDAtXFx1REJGRl1bXFx1REMwMC1cXHVERkZGXXxbXFx1RDgwMC1cXHVEQkZGXSg/IVtcXHVEQzAwLVxcdURGRkZdKXwoPzpbXlxcdUQ4MDAtXFx1REJGRl18XilbXFx1REMwMC1cXHVERkZGXSkqKT9AKT8oPzooPyExMCg/OlxcLlswLTldezEsM30pezN9KSg/ITEyNyg/OlxcLlswLTldezEsM30pezN9KSg/ITE2OVxcLjI1NCg/OlxcLlswLTldezEsM30pezJ9KSg/ITE5MlxcLjE2OCg/OlxcLlswLTldezEsM30pezJ9KSg/ITE3MlxcLig/OjFbNi05XXwyWzAtOV18M1swMV0pKD86XFwuWzAtOV17MSwzfSl7Mn0pKD86WzEtOV1bMC05XT98MVswLTldWzAtOV18MlswMV1bMC05XXwyMlswLTNdKSg/OlxcLig/OjE/WzAtOV17MSwyfXwyWzAtNF1bMC05XXwyNVswLTVdKSl7Mn0oPzpcXC4oPzpbMS05XVswLTldP3wxWzAtOV1bMC05XXwyWzAtNF1bMC05XXwyNVswLTRdKSl8KD86KD86KD86WzAtOUtTYS16XFx4QTEtXFx1RDdGRlxcdUUwMDAtXFx1RkZGRl18W1xcdUQ4MDAtXFx1REJGRl0oPyFbXFx1REMwMC1cXHVERkZGXSl8KD86W15cXHVEODAwLVxcdURCRkZdfF4pW1xcdURDMDAtXFx1REZGRl0pKy0/KSooPzpbMC05S1NhLXpcXHhBMS1cXHVEN0ZGXFx1RTAwMC1cXHVGRkZGXXxbXFx1RDgwMC1cXHVEQkZGXSg/IVtcXHVEQzAwLVxcdURGRkZdKXwoPzpbXlxcdUQ4MDAtXFx1REJGRl18XilbXFx1REMwMC1cXHVERkZGXSkrKSg/OlxcLig/Oig/OlswLTlLU2EtelxceEExLVxcdUQ3RkZcXHVFMDAwLVxcdUZGRkZdfFtcXHVEODAwLVxcdURCRkZdKD8hW1xcdURDMDAtXFx1REZGRl0pfCg/OlteXFx1RDgwMC1cXHVEQkZGXXxeKVtcXHVEQzAwLVxcdURGRkZdKSstPykqKD86WzAtOUtTYS16XFx4QTEtXFx1RDdGRlxcdUUwMDAtXFx1RkZGRl18W1xcdUQ4MDAtXFx1REJGRl0oPyFbXFx1REMwMC1cXHVERkZGXSl8KD86W15cXHVEODAwLVxcdURCRkZdfF4pW1xcdURDMDAtXFx1REZGRl0pKykqKD86XFwuKD86KD86W0tTYS16XFx4QTEtXFx1RDdGRlxcdUUwMDAtXFx1RkZGRl18W1xcdUQ4MDAtXFx1REJGRl0oPyFbXFx1REMwMC1cXHVERkZGXSl8KD86W15cXHVEODAwLVxcdURCRkZdfF4pW1xcdURDMDAtXFx1REZGRl0pezIsfSkpKSg/OjpbMC05XXsyLDV9KT8oPzpcXC8oPzpbXFwwLVxceDA4XFx4MEUtXFx4MUYhLVxceDlGXFx4QTEtXFx1MTY3RlxcdTE2ODEtXFx1MUZGRlxcdTIwMEItXFx1MjAyN1xcdTIwMkEtXFx1MjAyRVxcdTIwMzAtXFx1MjA1RVxcdTIwNjAtXFx1MkZGRlxcdTMwMDEtXFx1RDdGRlxcdUUwMDAtXFx1RkVGRVxcdUZGMDAtXFx1RkZGRl18W1xcdUQ4MDAtXFx1REJGRl1bXFx1REMwMC1cXHVERkZGXXxbXFx1RDgwMC1cXHVEQkZGXSg/IVtcXHVEQzAwLVxcdURGRkZdKXwoPzpbXlxcdUQ4MDAtXFx1REJGRl18XilbXFx1REMwMC1cXHVERkZGXSkqKT8kL2k7XG52YXIgVVVJRCA9IC9eKD86dXJuOnV1aWQ6KT9bMC05YS1mXXs4fS0oPzpbMC05YS1mXXs0fS0pezN9WzAtOWEtZl17MTJ9JC9pO1xudmFyIEpTT05fUE9JTlRFUiA9IC9eKD86XFwvKD86W15+L118fjB8fjEpKikqJC87XG52YXIgSlNPTl9QT0lOVEVSX1VSSV9GUkFHTUVOVCA9IC9eIyg/OlxcLyg/OlthLXowLTlfXFwtLiEkJicoKSorLDs6PUBdfCVbMC05YS1mXXsyfXx+MHx+MSkqKSokL2k7XG52YXIgUkVMQVRJVkVfSlNPTl9QT0lOVEVSID0gL14oPzowfFsxLTldWzAtOV0qKSg/OiN8KD86XFwvKD86W15+L118fjB8fjEpKikqKSQvO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gZm9ybWF0cztcblxuZnVuY3Rpb24gZm9ybWF0cyhtb2RlKSB7XG4gIG1vZGUgPSBtb2RlID09ICdmdWxsJyA/ICdmdWxsJyA6ICdmYXN0JztcbiAgcmV0dXJuIHV0aWwuY29weShmb3JtYXRzW21vZGVdKTtcbn1cblxuXG5mb3JtYXRzLmZhc3QgPSB7XG4gIC8vIGRhdGU6IGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzMzMzkjc2VjdGlvbi01LjZcbiAgZGF0ZTogL15cXGRcXGRcXGRcXGQtWzAtMV1cXGQtWzAtM11cXGQkLyxcbiAgLy8gZGF0ZS10aW1lOiBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzMzM5I3NlY3Rpb24tNS42XG4gIHRpbWU6IC9eKD86WzAtMl1cXGQ6WzAtNV1cXGQ6WzAtNV1cXGR8MjM6NTk6NjApKD86XFwuXFxkKyk/KD86enxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPyk/JC9pLFxuICAnZGF0ZS10aW1lJzogL15cXGRcXGRcXGRcXGQtWzAtMV1cXGQtWzAtM11cXGRbdFxcc10oPzpbMC0yXVxcZDpbMC01XVxcZDpbMC01XVxcZHwyMzo1OTo2MCkoPzpcXC5cXGQrKT8oPzp6fFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/KSQvaSxcbiAgLy8gdXJpOiBodHRwczovL2dpdGh1Yi5jb20vbWFmaW50b3NoL2lzLW15LWpzb24tdmFsaWQvYmxvYi9tYXN0ZXIvZm9ybWF0cy5qc1xuICB1cmk6IC9eKD86W2Etel1bYS16MC05Ky0uXSo6KSg/OlxcLz9cXC8pP1teXFxzXSokL2ksXG4gICd1cmktcmVmZXJlbmNlJzogL14oPzooPzpbYS16XVthLXowLTkrLS5dKjopP1xcLz9cXC8pPyg/OlteXFxcXFxccyNdW15cXHMjXSopPyg/OiNbXlxcXFxcXHNdKik/JC9pLFxuICAndXJpLXRlbXBsYXRlJzogVVJJVEVNUExBVEUsXG4gIHVybDogVVJMLFxuICAvLyBlbWFpbCAoc291cmNlcyBmcm9tIGpzZW4gdmFsaWRhdG9yKTpcbiAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMDEzMjMvdXNpbmctYS1yZWd1bGFyLWV4cHJlc3Npb24tdG8tdmFsaWRhdGUtYW4tZW1haWwtYWRkcmVzcyNhbnN3ZXItODgyOTM2M1xuICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNS9mb3Jtcy5odG1sI3ZhbGlkLWUtbWFpbC1hZGRyZXNzIChzZWFyY2ggZm9yICd3aWxsZnVsIHZpb2xhdGlvbicpXG4gIGVtYWlsOiAvXlthLXowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rQFthLXowLTldKD86W2EtejAtOS1dezAsNjF9W2EtejAtOV0pPyg/OlxcLlthLXowLTldKD86W2EtejAtOS1dezAsNjF9W2EtejAtOV0pPykqJC9pLFxuICBob3N0bmFtZTogSE9TVE5BTUUsXG4gIC8vIG9wdGltaXplZCBodHRwczovL3d3dy5zYWZhcmlib29rc29ubGluZS5jb20vbGlicmFyeS92aWV3L3JlZ3VsYXItZXhwcmVzc2lvbnMtY29va2Jvb2svOTc4MDU5NjgwMjgzNy9jaDA3czE2Lmh0bWxcbiAgaXB2NDogL14oPzooPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pXFwuKXszfSg/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPykkLyxcbiAgLy8gb3B0aW1pemVkIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTM0OTcvcmVndWxhci1leHByZXNzaW9uLXRoYXQtbWF0Y2hlcy12YWxpZC1pcHY2LWFkZHJlc3Nlc1xuICBpcHY2OiAvXlxccyooPzooPzooPzpbMC05YS1mXXsxLDR9Oil7N30oPzpbMC05YS1mXXsxLDR9fDopKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7Nn0oPzo6WzAtOWEtZl17MSw0fXwoPzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KXw6KSl8KD86KD86WzAtOWEtZl17MSw0fTopezV9KD86KD86KD86OlswLTlhLWZdezEsNH0pezEsMn0pfDooPzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KXw6KSl8KD86KD86WzAtOWEtZl17MSw0fTopezR9KD86KD86KD86OlswLTlhLWZdezEsNH0pezEsM30pfCg/Oig/OjpbMC05YS1mXXsxLDR9KT86KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7M30oPzooPzooPzo6WzAtOWEtZl17MSw0fSl7MSw0fSl8KD86KD86OlswLTlhLWZdezEsNH0pezAsMn06KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7Mn0oPzooPzooPzo6WzAtOWEtZl17MSw0fSl7MSw1fSl8KD86KD86OlswLTlhLWZdezEsNH0pezAsM306KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MX0oPzooPzooPzo6WzAtOWEtZl17MSw0fSl7MSw2fSl8KD86KD86OlswLTlhLWZdezEsNH0pezAsNH06KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoPzo6KD86KD86KD86OlswLTlhLWZdezEsNH0pezEsN30pfCg/Oig/OjpbMC05YS1mXXsxLDR9KXswLDV9Oig/Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pKXw6KSkpKD86JS4rKT9cXHMqJC9pLFxuICByZWdleDogcmVnZXgsXG4gIC8vIHV1aWQ6IGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQxMjJcbiAgdXVpZDogVVVJRCxcbiAgLy8gSlNPTi1wb2ludGVyOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjkwMVxuICAvLyB1cmkgZnJhZ21lbnQ6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I2FwcGVuZGl4LUFcbiAgJ2pzb24tcG9pbnRlcic6IEpTT05fUE9JTlRFUixcbiAgJ2pzb24tcG9pbnRlci11cmktZnJhZ21lbnQnOiBKU09OX1BPSU5URVJfVVJJX0ZSQUdNRU5ULFxuICAvLyByZWxhdGl2ZSBKU09OLXBvaW50ZXI6IGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWx1ZmYtcmVsYXRpdmUtanNvbi1wb2ludGVyLTAwXG4gICdyZWxhdGl2ZS1qc29uLXBvaW50ZXInOiBSRUxBVElWRV9KU09OX1BPSU5URVJcbn07XG5cblxuZm9ybWF0cy5mdWxsID0ge1xuICBkYXRlOiBkYXRlLFxuICB0aW1lOiB0aW1lLFxuICAnZGF0ZS10aW1lJzogZGF0ZV90aW1lLFxuICB1cmk6IHVyaSxcbiAgJ3VyaS1yZWZlcmVuY2UnOiBVUklSRUYsXG4gICd1cmktdGVtcGxhdGUnOiBVUklURU1QTEFURSxcbiAgdXJsOiBVUkwsXG4gIGVtYWlsOiAvXlthLXowLTkhIyQlJicqKy89P15fYHt8fX4tXSsoPzpcXC5bYS16MC05ISMkJSYnKisvPT9eX2B7fH1+LV0rKSpAKD86W2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pP1xcLikrW2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pPyQvaSxcbiAgaG9zdG5hbWU6IEhPU1ROQU1FLFxuICBpcHY0OiAvXig/Oig/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPylcXC4pezN9KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KSQvLFxuICBpcHY2OiAvXlxccyooPzooPzooPzpbMC05YS1mXXsxLDR9Oil7N30oPzpbMC05YS1mXXsxLDR9fDopKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7Nn0oPzo6WzAtOWEtZl17MSw0fXwoPzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KXw6KSl8KD86KD86WzAtOWEtZl17MSw0fTopezV9KD86KD86KD86OlswLTlhLWZdezEsNH0pezEsMn0pfDooPzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KXw6KSl8KD86KD86WzAtOWEtZl17MSw0fTopezR9KD86KD86KD86OlswLTlhLWZdezEsNH0pezEsM30pfCg/Oig/OjpbMC05YS1mXXsxLDR9KT86KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7M30oPzooPzooPzo6WzAtOWEtZl17MSw0fSl7MSw0fSl8KD86KD86OlswLTlhLWZdezEsNH0pezAsMn06KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7Mn0oPzooPzooPzo6WzAtOWEtZl17MSw0fSl7MSw1fSl8KD86KD86OlswLTlhLWZdezEsNH0pezAsM306KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MX0oPzooPzooPzo6WzAtOWEtZl17MSw0fSl7MSw2fSl8KD86KD86OlswLTlhLWZdezEsNH0pezAsNH06KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoPzo6KD86KD86KD86OlswLTlhLWZdezEsNH0pezEsN30pfCg/Oig/OjpbMC05YS1mXXsxLDR9KXswLDV9Oig/Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pKXw6KSkpKD86JS4rKT9cXHMqJC9pLFxuICByZWdleDogcmVnZXgsXG4gIHV1aWQ6IFVVSUQsXG4gICdqc29uLXBvaW50ZXInOiBKU09OX1BPSU5URVIsXG4gICdqc29uLXBvaW50ZXItdXJpLWZyYWdtZW50JzogSlNPTl9QT0lOVEVSX1VSSV9GUkFHTUVOVCxcbiAgJ3JlbGF0aXZlLWpzb24tcG9pbnRlcic6IFJFTEFUSVZFX0pTT05fUE9JTlRFUlxufTtcblxuXG5mdW5jdGlvbiBpc0xlYXBZZWFyKHllYXIpIHtcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzMzMzkjYXBwZW5kaXgtQ1xuICByZXR1cm4geWVhciAlIDQgPT09IDAgJiYgKHllYXIgJSAxMDAgIT09IDAgfHwgeWVhciAlIDQwMCA9PT0gMCk7XG59XG5cblxuZnVuY3Rpb24gZGF0ZShzdHIpIHtcbiAgLy8gZnVsbC1kYXRlIGZyb20gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzMzOSNzZWN0aW9uLTUuNlxuICB2YXIgbWF0Y2hlcyA9IHN0ci5tYXRjaChEQVRFKTtcbiAgaWYgKCFtYXRjaGVzKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIHllYXIgPSArbWF0Y2hlc1sxXTtcbiAgdmFyIG1vbnRoID0gK21hdGNoZXNbMl07XG4gIHZhciBkYXkgPSArbWF0Y2hlc1szXTtcblxuICByZXR1cm4gbW9udGggPj0gMSAmJiBtb250aCA8PSAxMiAmJiBkYXkgPj0gMSAmJlxuICAgICAgICAgIGRheSA8PSAobW9udGggPT0gMiAmJiBpc0xlYXBZZWFyKHllYXIpID8gMjkgOiBEQVlTW21vbnRoXSk7XG59XG5cblxuZnVuY3Rpb24gdGltZShzdHIsIGZ1bGwpIHtcbiAgdmFyIG1hdGNoZXMgPSBzdHIubWF0Y2goVElNRSk7XG4gIGlmICghbWF0Y2hlcykgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBob3VyID0gbWF0Y2hlc1sxXTtcbiAgdmFyIG1pbnV0ZSA9IG1hdGNoZXNbMl07XG4gIHZhciBzZWNvbmQgPSBtYXRjaGVzWzNdO1xuICB2YXIgdGltZVpvbmUgPSBtYXRjaGVzWzVdO1xuICByZXR1cm4gKChob3VyIDw9IDIzICYmIG1pbnV0ZSA8PSA1OSAmJiBzZWNvbmQgPD0gNTkpIHx8XG4gICAgICAgICAgKGhvdXIgPT0gMjMgJiYgbWludXRlID09IDU5ICYmIHNlY29uZCA9PSA2MCkpICYmXG4gICAgICAgICAoIWZ1bGwgfHwgdGltZVpvbmUpO1xufVxuXG5cbnZhciBEQVRFX1RJTUVfU0VQQVJBVE9SID0gL3R8XFxzL2k7XG5mdW5jdGlvbiBkYXRlX3RpbWUoc3RyKSB7XG4gIC8vIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzMzMzkjc2VjdGlvbi01LjZcbiAgdmFyIGRhdGVUaW1lID0gc3RyLnNwbGl0KERBVEVfVElNRV9TRVBBUkFUT1IpO1xuICByZXR1cm4gZGF0ZVRpbWUubGVuZ3RoID09IDIgJiYgZGF0ZShkYXRlVGltZVswXSkgJiYgdGltZShkYXRlVGltZVsxXSwgdHJ1ZSk7XG59XG5cblxudmFyIE5PVF9VUklfRlJBR01FTlQgPSAvXFwvfDovO1xuZnVuY3Rpb24gdXJpKHN0cikge1xuICAvLyBodHRwOi8vam1yd2FyZS5jb20vYXJ0aWNsZXMvMjAwOS91cmlfcmVnZXhwL1VSSV9yZWdleC5odG1sICsgb3B0aW9uYWwgcHJvdG9jb2wgKyByZXF1aXJlZCBcIi5cIlxuICByZXR1cm4gTk9UX1VSSV9GUkFHTUVOVC50ZXN0KHN0cikgJiYgVVJJLnRlc3Qoc3RyKTtcbn1cblxuXG52YXIgWl9BTkNIT1IgPSAvW15cXFxcXVxcXFxaLztcbmZ1bmN0aW9uIHJlZ2V4KHN0cikge1xuICBpZiAoWl9BTkNIT1IudGVzdChzdHIpKSByZXR1cm4gZmFsc2U7XG4gIHRyeSB7XG4gICAgbmV3IFJlZ0V4cChzdHIpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfcmVmKGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJHZhbGlkID0gJ3ZhbGlkJyArICRsdmw7XG4gIHZhciAkYXN5bmMsICRyZWZDb2RlO1xuICBpZiAoJHNjaGVtYSA9PSAnIycgfHwgJHNjaGVtYSA9PSAnIy8nKSB7XG4gICAgaWYgKGl0LmlzUm9vdCkge1xuICAgICAgJGFzeW5jID0gaXQuYXN5bmM7XG4gICAgICAkcmVmQ29kZSA9ICd2YWxpZGF0ZSc7XG4gICAgfSBlbHNlIHtcbiAgICAgICRhc3luYyA9IGl0LnJvb3Quc2NoZW1hLiRhc3luYyA9PT0gdHJ1ZTtcbiAgICAgICRyZWZDb2RlID0gJ3Jvb3QucmVmVmFsWzBdJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyICRyZWZWYWwgPSBpdC5yZXNvbHZlUmVmKGl0LmJhc2VJZCwgJHNjaGVtYSwgaXQuaXNSb290KTtcbiAgICBpZiAoJHJlZlZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgJG1lc3NhZ2UgPSBpdC5NaXNzaW5nUmVmRXJyb3IubWVzc2FnZShpdC5iYXNlSWQsICRzY2hlbWEpO1xuICAgICAgaWYgKGl0Lm9wdHMubWlzc2luZ1JlZnMgPT0gJ2ZhaWwnKSB7XG4gICAgICAgIGl0LmxvZ2dlci5lcnJvcigkbWVzc2FnZSk7XG4gICAgICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAgICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgICAgIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgnJHJlZicpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgcmVmOiBcXCcnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRzY2hlbWEpKSArICdcXCcgfSAnO1xuICAgICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdjYW5cXFxcXFwndCByZXNvbHZlIHJlZmVyZW5jZSAnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRzY2hlbWEpKSArICdcXCcgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkc2NoZW1hKSkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgb3V0ICs9ICcgaWYgKGZhbHNlKSB7ICc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXQub3B0cy5taXNzaW5nUmVmcyA9PSAnaWdub3JlJykge1xuICAgICAgICBpdC5sb2dnZXIud2FybigkbWVzc2FnZSk7XG4gICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgb3V0ICs9ICcgaWYgKHRydWUpIHsgJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IGl0Lk1pc3NpbmdSZWZFcnJvcihpdC5iYXNlSWQsICRzY2hlbWEsICRtZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCRyZWZWYWwuaW5saW5lKSB7XG4gICAgICB2YXIgJGl0ID0gaXQudXRpbC5jb3B5KGl0KTtcbiAgICAgICRpdC5sZXZlbCsrO1xuICAgICAgdmFyICRuZXh0VmFsaWQgPSAndmFsaWQnICsgJGl0LmxldmVsO1xuICAgICAgJGl0LnNjaGVtYSA9ICRyZWZWYWwuc2NoZW1hO1xuICAgICAgJGl0LnNjaGVtYVBhdGggPSAnJztcbiAgICAgICRpdC5lcnJTY2hlbWFQYXRoID0gJHNjaGVtYTtcbiAgICAgIHZhciAkY29kZSA9IGl0LnZhbGlkYXRlKCRpdCkucmVwbGFjZSgvdmFsaWRhdGVcXC5zY2hlbWEvZywgJHJlZlZhbC5jb2RlKTtcbiAgICAgIG91dCArPSAnICcgKyAoJGNvZGUpICsgJyAnO1xuICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJG5leHRWYWxpZCkgKyAnKSB7ICc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICRhc3luYyA9ICRyZWZWYWwuJGFzeW5jID09PSB0cnVlIHx8IChpdC5hc3luYyAmJiAkcmVmVmFsLiRhc3luYyAhPT0gZmFsc2UpO1xuICAgICAgJHJlZkNvZGUgPSAkcmVmVmFsLmNvZGU7XG4gICAgfVxuICB9XG4gIGlmICgkcmVmQ29kZSkge1xuICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICBvdXQgPSAnJztcbiAgICBpZiAoaXQub3B0cy5wYXNzQ29udGV4dCkge1xuICAgICAgb3V0ICs9ICcgJyArICgkcmVmQ29kZSkgKyAnLmNhbGwodGhpcywgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgJyArICgkcmVmQ29kZSkgKyAnKCAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyAnICsgKCRkYXRhKSArICcsIChkYXRhUGF0aCB8fCBcXCdcXCcpJztcbiAgICBpZiAoaXQuZXJyb3JQYXRoICE9ICdcIlwiJykge1xuICAgICAgb3V0ICs9ICcgKyAnICsgKGl0LmVycm9yUGF0aCk7XG4gICAgfVxuICAgIHZhciAkcGFyZW50RGF0YSA9ICRkYXRhTHZsID8gJ2RhdGEnICsgKCgkZGF0YUx2bCAtIDEpIHx8ICcnKSA6ICdwYXJlbnREYXRhJyxcbiAgICAgICRwYXJlbnREYXRhUHJvcGVydHkgPSAkZGF0YUx2bCA/IGl0LmRhdGFQYXRoQXJyWyRkYXRhTHZsXSA6ICdwYXJlbnREYXRhUHJvcGVydHknO1xuICAgIG91dCArPSAnICwgJyArICgkcGFyZW50RGF0YSkgKyAnICwgJyArICgkcGFyZW50RGF0YVByb3BlcnR5KSArICcsIHJvb3REYXRhKSAgJztcbiAgICB2YXIgX19jYWxsVmFsaWRhdGUgPSBvdXQ7XG4gICAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgICBpZiAoJGFzeW5jKSB7XG4gICAgICBpZiAoIWl0LmFzeW5jKSB0aHJvdyBuZXcgRXJyb3IoJ2FzeW5jIHNjaGVtYSByZWZlcmVuY2VkIGJ5IHN5bmMgc2NoZW1hJyk7XG4gICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICBvdXQgKz0gJyB2YXIgJyArICgkdmFsaWQpICsgJzsgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIHRyeSB7IGF3YWl0ICcgKyAoX19jYWxsVmFsaWRhdGUpICsgJzsgJztcbiAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgIG91dCArPSAnICcgKyAoJHZhbGlkKSArICcgPSB0cnVlOyAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgfSBjYXRjaCAoZSkgeyBpZiAoIShlIGluc3RhbmNlb2YgVmFsaWRhdGlvbkVycm9yKSkgdGhyb3cgZTsgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBlLmVycm9yczsgZWxzZSB2RXJyb3JzID0gdkVycm9ycy5jb25jYXQoZS5lcnJvcnMpOyBlcnJvcnMgPSB2RXJyb3JzLmxlbmd0aDsgJztcbiAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgIG91dCArPSAnICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZTsgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIH0gJztcbiAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgIG91dCArPSAnIGlmICgnICsgKCR2YWxpZCkgKyAnKSB7ICc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIGlmICghJyArIChfX2NhbGxWYWxpZGF0ZSkgKyAnKSB7IGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gJyArICgkcmVmQ29kZSkgKyAnLmVycm9yczsgZWxzZSB2RXJyb3JzID0gdkVycm9ycy5jb25jYXQoJyArICgkcmVmQ29kZSkgKyAnLmVycm9ycyk7IGVycm9ycyA9IHZFcnJvcnMubGVuZ3RoOyB9ICc7XG4gICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICBvdXQgKz0gJyBlbHNlIHsgJztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfYWxsT2YoaXQsICRrZXl3b3JkLCAkcnVsZVR5cGUpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkaXQgPSBpdC51dGlsLmNvcHkoaXQpO1xuICB2YXIgJGNsb3NpbmdCcmFjZXMgPSAnJztcbiAgJGl0LmxldmVsKys7XG4gIHZhciAkbmV4dFZhbGlkID0gJ3ZhbGlkJyArICRpdC5sZXZlbDtcbiAgdmFyICRjdXJyZW50QmFzZUlkID0gJGl0LmJhc2VJZCxcbiAgICAkYWxsU2NoZW1hc0VtcHR5ID0gdHJ1ZTtcbiAgdmFyIGFycjEgPSAkc2NoZW1hO1xuICBpZiAoYXJyMSkge1xuICAgIHZhciAkc2NoLCAkaSA9IC0xLFxuICAgICAgbDEgPSBhcnIxLmxlbmd0aCAtIDE7XG4gICAgd2hpbGUgKCRpIDwgbDEpIHtcbiAgICAgICRzY2ggPSBhcnIxWyRpICs9IDFdO1xuICAgICAgaWYgKChpdC5vcHRzLnN0cmljdEtleXdvcmRzID8gdHlwZW9mICRzY2ggPT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMoJHNjaCkubGVuZ3RoID4gMCA6IGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJHNjaCwgaXQuUlVMRVMuYWxsKSkpIHtcbiAgICAgICAgJGFsbFNjaGVtYXNFbXB0eSA9IGZhbHNlO1xuICAgICAgICAkaXQuc2NoZW1hID0gJHNjaDtcbiAgICAgICAgJGl0LnNjaGVtYVBhdGggPSAkc2NoZW1hUGF0aCArICdbJyArICRpICsgJ10nO1xuICAgICAgICAkaXQuZXJyU2NoZW1hUGF0aCA9ICRlcnJTY2hlbWFQYXRoICsgJy8nICsgJGk7XG4gICAgICAgIG91dCArPSAnICAnICsgKGl0LnZhbGlkYXRlKCRpdCkpICsgJyAnO1xuICAgICAgICAkaXQuYmFzZUlkID0gJGN1cnJlbnRCYXNlSWQ7XG4gICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJG5leHRWYWxpZCkgKyAnKSB7ICc7XG4gICAgICAgICAgJGNsb3NpbmdCcmFjZXMgKz0gJ30nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgaWYgKCRhbGxTY2hlbWFzRW1wdHkpIHtcbiAgICAgIG91dCArPSAnIGlmICh0cnVlKSB7ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnICcgKyAoJGNsb3NpbmdCcmFjZXMuc2xpY2UoMCwgLTEpKSArICcgJztcbiAgICB9XG4gIH1cbiAgb3V0ID0gaXQudXRpbC5jbGVhblVwQ29kZShvdXQpO1xuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9hbnlPZihpdCwgJGtleXdvcmQsICRydWxlVHlwZSkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJHZhbGlkID0gJ3ZhbGlkJyArICRsdmw7XG4gIHZhciAkZXJycyA9ICdlcnJzX18nICsgJGx2bDtcbiAgdmFyICRpdCA9IGl0LnV0aWwuY29weShpdCk7XG4gIHZhciAkY2xvc2luZ0JyYWNlcyA9ICcnO1xuICAkaXQubGV2ZWwrKztcbiAgdmFyICRuZXh0VmFsaWQgPSAndmFsaWQnICsgJGl0LmxldmVsO1xuICB2YXIgJG5vRW1wdHlTY2hlbWEgPSAkc2NoZW1hLmV2ZXJ5KGZ1bmN0aW9uKCRzY2gpIHtcbiAgICByZXR1cm4gKGl0Lm9wdHMuc3RyaWN0S2V5d29yZHMgPyB0eXBlb2YgJHNjaCA9PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cygkc2NoKS5sZW5ndGggPiAwIDogaXQudXRpbC5zY2hlbWFIYXNSdWxlcygkc2NoLCBpdC5SVUxFUy5hbGwpKTtcbiAgfSk7XG4gIGlmICgkbm9FbXB0eVNjaGVtYSkge1xuICAgIHZhciAkY3VycmVudEJhc2VJZCA9ICRpdC5iYXNlSWQ7XG4gICAgb3V0ICs9ICcgdmFyICcgKyAoJGVycnMpICsgJyA9IGVycm9yczsgdmFyICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZTsgICc7XG4gICAgdmFyICR3YXNDb21wb3NpdGUgPSBpdC5jb21wb3NpdGVSdWxlO1xuICAgIGl0LmNvbXBvc2l0ZVJ1bGUgPSAkaXQuY29tcG9zaXRlUnVsZSA9IHRydWU7XG4gICAgdmFyIGFycjEgPSAkc2NoZW1hO1xuICAgIGlmIChhcnIxKSB7XG4gICAgICB2YXIgJHNjaCwgJGkgPSAtMSxcbiAgICAgICAgbDEgPSBhcnIxLmxlbmd0aCAtIDE7XG4gICAgICB3aGlsZSAoJGkgPCBsMSkge1xuICAgICAgICAkc2NoID0gYXJyMVskaSArPSAxXTtcbiAgICAgICAgJGl0LnNjaGVtYSA9ICRzY2g7XG4gICAgICAgICRpdC5zY2hlbWFQYXRoID0gJHNjaGVtYVBhdGggKyAnWycgKyAkaSArICddJztcbiAgICAgICAgJGl0LmVyclNjaGVtYVBhdGggPSAkZXJyU2NoZW1hUGF0aCArICcvJyArICRpO1xuICAgICAgICBvdXQgKz0gJyAgJyArIChpdC52YWxpZGF0ZSgkaXQpKSArICcgJztcbiAgICAgICAgJGl0LmJhc2VJZCA9ICRjdXJyZW50QmFzZUlkO1xuICAgICAgICBvdXQgKz0gJyAnICsgKCR2YWxpZCkgKyAnID0gJyArICgkdmFsaWQpICsgJyB8fCAnICsgKCRuZXh0VmFsaWQpICsgJzsgaWYgKCEnICsgKCR2YWxpZCkgKyAnKSB7ICc7XG4gICAgICAgICRjbG9zaW5nQnJhY2VzICs9ICd9JztcbiAgICAgIH1cbiAgICB9XG4gICAgaXQuY29tcG9zaXRlUnVsZSA9ICRpdC5jb21wb3NpdGVSdWxlID0gJHdhc0NvbXBvc2l0ZTtcbiAgICBvdXQgKz0gJyAnICsgKCRjbG9zaW5nQnJhY2VzKSArICcgaWYgKCEnICsgKCR2YWxpZCkgKyAnKSB7ICAgdmFyIGVyciA9ICAgJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdhbnlPZicpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHt9ICc7XG4gICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgbWF0Y2ggc29tZSBzY2hlbWEgaW4gYW55T2ZcXCcgJztcbiAgICAgIH1cbiAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIH0gJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcge30gJztcbiAgICB9XG4gICAgb3V0ICs9ICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcih2RXJyb3JzKTsgJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IHZFcnJvcnM7IHJldHVybiBmYWxzZTsgJztcbiAgICAgIH1cbiAgICB9XG4gICAgb3V0ICs9ICcgfSBlbHNlIHsgIGVycm9ycyA9ICcgKyAoJGVycnMpICsgJzsgaWYgKHZFcnJvcnMgIT09IG51bGwpIHsgaWYgKCcgKyAoJGVycnMpICsgJykgdkVycm9ycy5sZW5ndGggPSAnICsgKCRlcnJzKSArICc7IGVsc2UgdkVycm9ycyA9IG51bGw7IH0gJztcbiAgICBpZiAoaXQub3B0cy5hbGxFcnJvcnMpIHtcbiAgICAgIG91dCArPSAnIH0gJztcbiAgICB9XG4gICAgb3V0ID0gaXQudXRpbC5jbGVhblVwQ29kZShvdXQpO1xuICB9IGVsc2Uge1xuICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICBvdXQgKz0gJyBpZiAodHJ1ZSkgeyAnO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9jb21tZW50KGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRjb21tZW50ID0gaXQudXRpbC50b1F1b3RlZFN0cmluZygkc2NoZW1hKTtcbiAgaWYgKGl0Lm9wdHMuJGNvbW1lbnQgPT09IHRydWUpIHtcbiAgICBvdXQgKz0gJyBjb25zb2xlLmxvZygnICsgKCRjb21tZW50KSArICcpOyc7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGl0Lm9wdHMuJGNvbW1lbnQgPT0gJ2Z1bmN0aW9uJykge1xuICAgIG91dCArPSAnIHNlbGYuX29wdHMuJGNvbW1lbnQoJyArICgkY29tbWVudCkgKyAnLCAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcsIHZhbGlkYXRlLnJvb3Quc2NoZW1hKTsnO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX2NvbnN0KGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkdmFsaWQgPSAndmFsaWQnICsgJGx2bDtcbiAgdmFyICRpc0RhdGEgPSBpdC5vcHRzLiRkYXRhICYmICRzY2hlbWEgJiYgJHNjaGVtYS4kZGF0YSxcbiAgICAkc2NoZW1hVmFsdWU7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgdmFyIHNjaGVtYScgKyAoJGx2bCkgKyAnID0gJyArIChpdC51dGlsLmdldERhdGEoJHNjaGVtYS4kZGF0YSwgJGRhdGFMdmwsIGl0LmRhdGFQYXRoQXJyKSkgKyAnOyAnO1xuICAgICRzY2hlbWFWYWx1ZSA9ICdzY2hlbWEnICsgJGx2bDtcbiAgfSBlbHNlIHtcbiAgICAkc2NoZW1hVmFsdWUgPSAkc2NoZW1hO1xuICB9XG4gIGlmICghJGlzRGF0YSkge1xuICAgIG91dCArPSAnIHZhciBzY2hlbWEnICsgKCRsdmwpICsgJyA9IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJzsnO1xuICB9XG4gIG91dCArPSAndmFyICcgKyAoJHZhbGlkKSArICcgPSBlcXVhbCgnICsgKCRkYXRhKSArICcsIHNjaGVtYScgKyAoJGx2bCkgKyAnKTsgaWYgKCEnICsgKCR2YWxpZCkgKyAnKSB7ICAgJztcbiAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdjb25zdCcpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgYWxsb3dlZFZhbHVlOiBzY2hlbWEnICsgKCRsdmwpICsgJyB9ICc7XG4gICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBiZSBlcXVhbCB0byBjb25zdGFudFxcJyAnO1xuICAgIH1cbiAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9ICc7XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcge30gJztcbiAgfVxuICB2YXIgX19lcnIgPSBvdXQ7XG4gIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICB9XG4gIG91dCArPSAnIH0nO1xuICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX2NvbnRhaW5zKGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkdmFsaWQgPSAndmFsaWQnICsgJGx2bDtcbiAgdmFyICRlcnJzID0gJ2VycnNfXycgKyAkbHZsO1xuICB2YXIgJGl0ID0gaXQudXRpbC5jb3B5KGl0KTtcbiAgdmFyICRjbG9zaW5nQnJhY2VzID0gJyc7XG4gICRpdC5sZXZlbCsrO1xuICB2YXIgJG5leHRWYWxpZCA9ICd2YWxpZCcgKyAkaXQubGV2ZWw7XG4gIHZhciAkaWR4ID0gJ2knICsgJGx2bCxcbiAgICAkZGF0YU54dCA9ICRpdC5kYXRhTGV2ZWwgPSBpdC5kYXRhTGV2ZWwgKyAxLFxuICAgICRuZXh0RGF0YSA9ICdkYXRhJyArICRkYXRhTnh0LFxuICAgICRjdXJyZW50QmFzZUlkID0gaXQuYmFzZUlkLFxuICAgICRub25FbXB0eVNjaGVtYSA9IChpdC5vcHRzLnN0cmljdEtleXdvcmRzID8gdHlwZW9mICRzY2hlbWEgPT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMoJHNjaGVtYSkubGVuZ3RoID4gMCA6IGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJHNjaGVtYSwgaXQuUlVMRVMuYWxsKSk7XG4gIG91dCArPSAndmFyICcgKyAoJGVycnMpICsgJyA9IGVycm9yczt2YXIgJyArICgkdmFsaWQpICsgJzsnO1xuICBpZiAoJG5vbkVtcHR5U2NoZW1hKSB7XG4gICAgdmFyICR3YXNDb21wb3NpdGUgPSBpdC5jb21wb3NpdGVSdWxlO1xuICAgIGl0LmNvbXBvc2l0ZVJ1bGUgPSAkaXQuY29tcG9zaXRlUnVsZSA9IHRydWU7XG4gICAgJGl0LnNjaGVtYSA9ICRzY2hlbWE7XG4gICAgJGl0LnNjaGVtYVBhdGggPSAkc2NoZW1hUGF0aDtcbiAgICAkaXQuZXJyU2NoZW1hUGF0aCA9ICRlcnJTY2hlbWFQYXRoO1xuICAgIG91dCArPSAnIHZhciAnICsgKCRuZXh0VmFsaWQpICsgJyA9IGZhbHNlOyBmb3IgKHZhciAnICsgKCRpZHgpICsgJyA9IDA7ICcgKyAoJGlkeCkgKyAnIDwgJyArICgkZGF0YSkgKyAnLmxlbmd0aDsgJyArICgkaWR4KSArICcrKykgeyAnO1xuICAgICRpdC5lcnJvclBhdGggPSBpdC51dGlsLmdldFBhdGhFeHByKGl0LmVycm9yUGF0aCwgJGlkeCwgaXQub3B0cy5qc29uUG9pbnRlcnMsIHRydWUpO1xuICAgIHZhciAkcGFzc0RhdGEgPSAkZGF0YSArICdbJyArICRpZHggKyAnXSc7XG4gICAgJGl0LmRhdGFQYXRoQXJyWyRkYXRhTnh0XSA9ICRpZHg7XG4gICAgdmFyICRjb2RlID0gaXQudmFsaWRhdGUoJGl0KTtcbiAgICAkaXQuYmFzZUlkID0gJGN1cnJlbnRCYXNlSWQ7XG4gICAgaWYgKGl0LnV0aWwudmFyT2NjdXJlbmNlcygkY29kZSwgJG5leHREYXRhKSA8IDIpIHtcbiAgICAgIG91dCArPSAnICcgKyAoaXQudXRpbC52YXJSZXBsYWNlKCRjb2RlLCAkbmV4dERhdGEsICRwYXNzRGF0YSkpICsgJyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YXIgJyArICgkbmV4dERhdGEpICsgJyA9ICcgKyAoJHBhc3NEYXRhKSArICc7ICcgKyAoJGNvZGUpICsgJyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyBpZiAoJyArICgkbmV4dFZhbGlkKSArICcpIGJyZWFrOyB9ICAnO1xuICAgIGl0LmNvbXBvc2l0ZVJ1bGUgPSAkaXQuY29tcG9zaXRlUnVsZSA9ICR3YXNDb21wb3NpdGU7XG4gICAgb3V0ICs9ICcgJyArICgkY2xvc2luZ0JyYWNlcykgKyAnIGlmICghJyArICgkbmV4dFZhbGlkKSArICcpIHsnO1xuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIGlmICgnICsgKCRkYXRhKSArICcubGVuZ3RoID09IDApIHsnO1xuICB9XG4gIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgnY29udGFpbnMnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7fSAnO1xuICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgY29udGFpbiBhIHZhbGlkIGl0ZW1cXCcgJztcbiAgICB9XG4gICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgfSAnO1xuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIHt9ICc7XG4gIH1cbiAgdmFyIF9fZXJyID0gb3V0O1xuICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChpdC5hc3luYykge1xuICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgfVxuICBvdXQgKz0gJyB9IGVsc2UgeyAnO1xuICBpZiAoJG5vbkVtcHR5U2NoZW1hKSB7XG4gICAgb3V0ICs9ICcgIGVycm9ycyA9ICcgKyAoJGVycnMpICsgJzsgaWYgKHZFcnJvcnMgIT09IG51bGwpIHsgaWYgKCcgKyAoJGVycnMpICsgJykgdkVycm9ycy5sZW5ndGggPSAnICsgKCRlcnJzKSArICc7IGVsc2UgdkVycm9ycyA9IG51bGw7IH0gJztcbiAgfVxuICBpZiAoaXQub3B0cy5hbGxFcnJvcnMpIHtcbiAgICBvdXQgKz0gJyB9ICc7XG4gIH1cbiAgb3V0ID0gaXQudXRpbC5jbGVhblVwQ29kZShvdXQpO1xuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9kZXBlbmRlbmNpZXMoaXQsICRrZXl3b3JkLCAkcnVsZVR5cGUpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICRlcnJzID0gJ2VycnNfXycgKyAkbHZsO1xuICB2YXIgJGl0ID0gaXQudXRpbC5jb3B5KGl0KTtcbiAgdmFyICRjbG9zaW5nQnJhY2VzID0gJyc7XG4gICRpdC5sZXZlbCsrO1xuICB2YXIgJG5leHRWYWxpZCA9ICd2YWxpZCcgKyAkaXQubGV2ZWw7XG4gIHZhciAkc2NoZW1hRGVwcyA9IHt9LFxuICAgICRwcm9wZXJ0eURlcHMgPSB7fSxcbiAgICAkb3duUHJvcGVydGllcyA9IGl0Lm9wdHMub3duUHJvcGVydGllcztcbiAgZm9yICgkcHJvcGVydHkgaW4gJHNjaGVtYSkge1xuICAgIHZhciAkc2NoID0gJHNjaGVtYVskcHJvcGVydHldO1xuICAgIHZhciAkZGVwcyA9IEFycmF5LmlzQXJyYXkoJHNjaCkgPyAkcHJvcGVydHlEZXBzIDogJHNjaGVtYURlcHM7XG4gICAgJGRlcHNbJHByb3BlcnR5XSA9ICRzY2g7XG4gIH1cbiAgb3V0ICs9ICd2YXIgJyArICgkZXJycykgKyAnID0gZXJyb3JzOyc7XG4gIHZhciAkY3VycmVudEVycm9yUGF0aCA9IGl0LmVycm9yUGF0aDtcbiAgb3V0ICs9ICd2YXIgbWlzc2luZycgKyAoJGx2bCkgKyAnOyc7XG4gIGZvciAodmFyICRwcm9wZXJ0eSBpbiAkcHJvcGVydHlEZXBzKSB7XG4gICAgJGRlcHMgPSAkcHJvcGVydHlEZXBzWyRwcm9wZXJ0eV07XG4gICAgaWYgKCRkZXBzLmxlbmd0aCkge1xuICAgICAgb3V0ICs9ICcgaWYgKCAnICsgKCRkYXRhKSArIChpdC51dGlsLmdldFByb3BlcnR5KCRwcm9wZXJ0eSkpICsgJyAhPT0gdW5kZWZpbmVkICc7XG4gICAgICBpZiAoJG93blByb3BlcnRpZXMpIHtcbiAgICAgICAgb3V0ICs9ICcgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCcgKyAoJGRhdGEpICsgJywgXFwnJyArIChpdC51dGlsLmVzY2FwZVF1b3RlcygkcHJvcGVydHkpKSArICdcXCcpICc7XG4gICAgICB9XG4gICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICBvdXQgKz0gJyAmJiAoICc7XG4gICAgICAgIHZhciBhcnIxID0gJGRlcHM7XG4gICAgICAgIGlmIChhcnIxKSB7XG4gICAgICAgICAgdmFyICRwcm9wZXJ0eUtleSwgJGkgPSAtMSxcbiAgICAgICAgICAgIGwxID0gYXJyMS5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlICgkaSA8IGwxKSB7XG4gICAgICAgICAgICAkcHJvcGVydHlLZXkgPSBhcnIxWyRpICs9IDFdO1xuICAgICAgICAgICAgaWYgKCRpKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHx8ICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgJHByb3AgPSBpdC51dGlsLmdldFByb3BlcnR5KCRwcm9wZXJ0eUtleSksXG4gICAgICAgICAgICAgICR1c2VEYXRhID0gJGRhdGEgKyAkcHJvcDtcbiAgICAgICAgICAgIG91dCArPSAnICggKCAnICsgKCR1c2VEYXRhKSArICcgPT09IHVuZGVmaW5lZCAnO1xuICAgICAgICAgICAgaWYgKCRvd25Qcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHx8ICEgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCcgKyAoJGRhdGEpICsgJywgXFwnJyArIChpdC51dGlsLmVzY2FwZVF1b3RlcygkcHJvcGVydHlLZXkpKSArICdcXCcpICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXQgKz0gJykgJiYgKG1pc3NpbmcnICsgKCRsdmwpICsgJyA9ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZyhpdC5vcHRzLmpzb25Qb2ludGVycyA/ICRwcm9wZXJ0eUtleSA6ICRwcm9wKSkgKyAnKSApICc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnKSkgeyAgJztcbiAgICAgICAgdmFyICRwcm9wZXJ0eVBhdGggPSAnbWlzc2luZycgKyAkbHZsLFxuICAgICAgICAgICRtaXNzaW5nUHJvcGVydHkgPSAnXFwnICsgJyArICRwcm9wZXJ0eVBhdGggKyAnICsgXFwnJztcbiAgICAgICAgaWYgKGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSkge1xuICAgICAgICAgIGl0LmVycm9yUGF0aCA9IGl0Lm9wdHMuanNvblBvaW50ZXJzID8gaXQudXRpbC5nZXRQYXRoRXhwcigkY3VycmVudEVycm9yUGF0aCwgJHByb3BlcnR5UGF0aCwgdHJ1ZSkgOiAkY3VycmVudEVycm9yUGF0aCArICcgKyAnICsgJHByb3BlcnR5UGF0aDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgICAgICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICAgICAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ2RlcGVuZGVuY2llcycpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgcHJvcGVydHk6IFxcJycgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJHByb3BlcnR5KSkgKyAnXFwnLCBtaXNzaW5nUHJvcGVydHk6IFxcJycgKyAoJG1pc3NpbmdQcm9wZXJ0eSkgKyAnXFwnLCBkZXBzQ291bnQ6ICcgKyAoJGRlcHMubGVuZ3RoKSArICcsIGRlcHM6IFxcJycgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJGRlcHMubGVuZ3RoID09IDEgPyAkZGVwc1swXSA6ICRkZXBzLmpvaW4oXCIsIFwiKSkpICsgJ1xcJyB9ICc7XG4gICAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBoYXZlICc7XG4gICAgICAgICAgICBpZiAoJGRlcHMubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICdwcm9wZXJ0eSAnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRkZXBzWzBdKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvdXQgKz0gJ3Byb3BlcnRpZXMgJyArIChpdC51dGlsLmVzY2FwZVF1b3RlcygkZGVwcy5qb2luKFwiLCBcIikpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dCArPSAnIHdoZW4gcHJvcGVydHkgJyArIChpdC51dGlsLmVzY2FwZVF1b3RlcygkcHJvcGVydHkpKSArICcgaXMgcHJlc2VudFxcJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJyApIHsgJztcbiAgICAgICAgdmFyIGFycjIgPSAkZGVwcztcbiAgICAgICAgaWYgKGFycjIpIHtcbiAgICAgICAgICB2YXIgJHByb3BlcnR5S2V5LCBpMiA9IC0xLFxuICAgICAgICAgICAgbDIgPSBhcnIyLmxlbmd0aCAtIDE7XG4gICAgICAgICAgd2hpbGUgKGkyIDwgbDIpIHtcbiAgICAgICAgICAgICRwcm9wZXJ0eUtleSA9IGFycjJbaTIgKz0gMV07XG4gICAgICAgICAgICB2YXIgJHByb3AgPSBpdC51dGlsLmdldFByb3BlcnR5KCRwcm9wZXJ0eUtleSksXG4gICAgICAgICAgICAgICRtaXNzaW5nUHJvcGVydHkgPSBpdC51dGlsLmVzY2FwZVF1b3RlcygkcHJvcGVydHlLZXkpLFxuICAgICAgICAgICAgICAkdXNlRGF0YSA9ICRkYXRhICsgJHByb3A7XG4gICAgICAgICAgICBpZiAoaXQub3B0cy5fZXJyb3JEYXRhUGF0aFByb3BlcnR5KSB7XG4gICAgICAgICAgICAgIGl0LmVycm9yUGF0aCA9IGl0LnV0aWwuZ2V0UGF0aCgkY3VycmVudEVycm9yUGF0aCwgJHByb3BlcnR5S2V5LCBpdC5vcHRzLmpzb25Qb2ludGVycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXQgKz0gJyBpZiAoICcgKyAoJHVzZURhdGEpICsgJyA9PT0gdW5kZWZpbmVkICc7XG4gICAgICAgICAgICBpZiAoJG93blByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcgfHwgISBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoJyArICgkZGF0YSkgKyAnLCBcXCcnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRwcm9wZXJ0eUtleSkpICsgJ1xcJykgJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dCArPSAnKSB7ICB2YXIgZXJyID0gICAnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdkZXBlbmRlbmNpZXMnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IHByb3BlcnR5OiBcXCcnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRwcm9wZXJ0eSkpICsgJ1xcJywgbWlzc2luZ1Byb3BlcnR5OiBcXCcnICsgKCRtaXNzaW5nUHJvcGVydHkpICsgJ1xcJywgZGVwc0NvdW50OiAnICsgKCRkZXBzLmxlbmd0aCkgKyAnLCBkZXBzOiBcXCcnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRkZXBzLmxlbmd0aCA9PSAxID8gJGRlcHNbMF0gOiAkZGVwcy5qb2luKFwiLCBcIikpKSArICdcXCcgfSAnO1xuICAgICAgICAgICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBoYXZlICc7XG4gICAgICAgICAgICAgICAgaWYgKCRkZXBzLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJ3Byb3BlcnR5ICcgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJGRlcHNbMF0pKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgb3V0ICs9ICdwcm9wZXJ0aWVzICcgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJGRlcHMuam9pbihcIiwgXCIpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG91dCArPSAnIHdoZW4gcHJvcGVydHkgJyArIChpdC51dGlsLmVzY2FwZVF1b3RlcygkcHJvcGVydHkpKSArICcgaXMgcHJlc2VudFxcJyAnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXQgKz0gJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyB9ICc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyB9ICAgJztcbiAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICRjbG9zaW5nQnJhY2VzICs9ICd9JztcbiAgICAgICAgb3V0ICs9ICcgZWxzZSB7ICc7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGl0LmVycm9yUGF0aCA9ICRjdXJyZW50RXJyb3JQYXRoO1xuICB2YXIgJGN1cnJlbnRCYXNlSWQgPSAkaXQuYmFzZUlkO1xuICBmb3IgKHZhciAkcHJvcGVydHkgaW4gJHNjaGVtYURlcHMpIHtcbiAgICB2YXIgJHNjaCA9ICRzY2hlbWFEZXBzWyRwcm9wZXJ0eV07XG4gICAgaWYgKChpdC5vcHRzLnN0cmljdEtleXdvcmRzID8gdHlwZW9mICRzY2ggPT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMoJHNjaCkubGVuZ3RoID4gMCA6IGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJHNjaCwgaXQuUlVMRVMuYWxsKSkpIHtcbiAgICAgIG91dCArPSAnICcgKyAoJG5leHRWYWxpZCkgKyAnID0gdHJ1ZTsgaWYgKCAnICsgKCRkYXRhKSArIChpdC51dGlsLmdldFByb3BlcnR5KCRwcm9wZXJ0eSkpICsgJyAhPT0gdW5kZWZpbmVkICc7XG4gICAgICBpZiAoJG93blByb3BlcnRpZXMpIHtcbiAgICAgICAgb3V0ICs9ICcgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCcgKyAoJGRhdGEpICsgJywgXFwnJyArIChpdC51dGlsLmVzY2FwZVF1b3RlcygkcHJvcGVydHkpKSArICdcXCcpICc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJykgeyAnO1xuICAgICAgJGl0LnNjaGVtYSA9ICRzY2g7XG4gICAgICAkaXQuc2NoZW1hUGF0aCA9ICRzY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgkcHJvcGVydHkpO1xuICAgICAgJGl0LmVyclNjaGVtYVBhdGggPSAkZXJyU2NoZW1hUGF0aCArICcvJyArIGl0LnV0aWwuZXNjYXBlRnJhZ21lbnQoJHByb3BlcnR5KTtcbiAgICAgIG91dCArPSAnICAnICsgKGl0LnZhbGlkYXRlKCRpdCkpICsgJyAnO1xuICAgICAgJGl0LmJhc2VJZCA9ICRjdXJyZW50QmFzZUlkO1xuICAgICAgb3V0ICs9ICcgfSAgJztcbiAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgIG91dCArPSAnIGlmICgnICsgKCRuZXh0VmFsaWQpICsgJykgeyAnO1xuICAgICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgb3V0ICs9ICcgICAnICsgKCRjbG9zaW5nQnJhY2VzKSArICcgaWYgKCcgKyAoJGVycnMpICsgJyA9PSBlcnJvcnMpIHsnO1xuICB9XG4gIG91dCA9IGl0LnV0aWwuY2xlYW5VcENvZGUob3V0KTtcbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfZW51bShpdCwgJGtleXdvcmQsICRydWxlVHlwZSkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJHZhbGlkID0gJ3ZhbGlkJyArICRsdmw7XG4gIHZhciAkaXNEYXRhID0gaXQub3B0cy4kZGF0YSAmJiAkc2NoZW1hICYmICRzY2hlbWEuJGRhdGEsXG4gICAgJHNjaGVtYVZhbHVlO1xuICBpZiAoJGlzRGF0YSkge1xuICAgIG91dCArPSAnIHZhciBzY2hlbWEnICsgKCRsdmwpICsgJyA9ICcgKyAoaXQudXRpbC5nZXREYXRhKCRzY2hlbWEuJGRhdGEsICRkYXRhTHZsLCBpdC5kYXRhUGF0aEFycikpICsgJzsgJztcbiAgICAkc2NoZW1hVmFsdWUgPSAnc2NoZW1hJyArICRsdmw7XG4gIH0gZWxzZSB7XG4gICAgJHNjaGVtYVZhbHVlID0gJHNjaGVtYTtcbiAgfVxuICB2YXIgJGkgPSAnaScgKyAkbHZsLFxuICAgICR2U2NoZW1hID0gJ3NjaGVtYScgKyAkbHZsO1xuICBpZiAoISRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyB2YXIgJyArICgkdlNjaGVtYSkgKyAnID0gdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnOyc7XG4gIH1cbiAgb3V0ICs9ICd2YXIgJyArICgkdmFsaWQpICsgJzsnO1xuICBpZiAoJGlzRGF0YSkge1xuICAgIG91dCArPSAnIGlmIChzY2hlbWEnICsgKCRsdmwpICsgJyA9PT0gdW5kZWZpbmVkKSAnICsgKCR2YWxpZCkgKyAnID0gdHJ1ZTsgZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkoc2NoZW1hJyArICgkbHZsKSArICcpKSAnICsgKCR2YWxpZCkgKyAnID0gZmFsc2U7IGVsc2Ugeyc7XG4gIH1cbiAgb3V0ICs9ICcnICsgKCR2YWxpZCkgKyAnID0gZmFsc2U7Zm9yICh2YXIgJyArICgkaSkgKyAnPTA7ICcgKyAoJGkpICsgJzwnICsgKCR2U2NoZW1hKSArICcubGVuZ3RoOyAnICsgKCRpKSArICcrKykgaWYgKGVxdWFsKCcgKyAoJGRhdGEpICsgJywgJyArICgkdlNjaGVtYSkgKyAnWycgKyAoJGkpICsgJ10pKSB7ICcgKyAoJHZhbGlkKSArICcgPSB0cnVlOyBicmVhazsgfSc7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgIH0gICc7XG4gIH1cbiAgb3V0ICs9ICcgaWYgKCEnICsgKCR2YWxpZCkgKyAnKSB7ICAgJztcbiAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdlbnVtJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBhbGxvd2VkVmFsdWVzOiBzY2hlbWEnICsgKCRsdmwpICsgJyB9ICc7XG4gICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBiZSBlcXVhbCB0byBvbmUgb2YgdGhlIGFsbG93ZWQgdmFsdWVzXFwnICc7XG4gICAgfVxuICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gJztcbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB7fSAnO1xuICB9XG4gIHZhciBfX2VyciA9IG91dDtcbiAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gIH1cbiAgb3V0ICs9ICcgfSc7XG4gIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgb3V0ICs9ICcgZWxzZSB7ICc7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfZm9ybWF0KGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIGlmIChpdC5vcHRzLmZvcm1hdCA9PT0gZmFsc2UpIHtcbiAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgb3V0ICs9ICcgaWYgKHRydWUpIHsgJztcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuICB2YXIgJGlzRGF0YSA9IGl0Lm9wdHMuJGRhdGEgJiYgJHNjaGVtYSAmJiAkc2NoZW1hLiRkYXRhLFxuICAgICRzY2hlbWFWYWx1ZTtcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyB2YXIgc2NoZW1hJyArICgkbHZsKSArICcgPSAnICsgKGl0LnV0aWwuZ2V0RGF0YSgkc2NoZW1hLiRkYXRhLCAkZGF0YUx2bCwgaXQuZGF0YVBhdGhBcnIpKSArICc7ICc7XG4gICAgJHNjaGVtYVZhbHVlID0gJ3NjaGVtYScgKyAkbHZsO1xuICB9IGVsc2Uge1xuICAgICRzY2hlbWFWYWx1ZSA9ICRzY2hlbWE7XG4gIH1cbiAgdmFyICR1bmtub3duRm9ybWF0cyA9IGl0Lm9wdHMudW5rbm93bkZvcm1hdHMsXG4gICAgJGFsbG93VW5rbm93biA9IEFycmF5LmlzQXJyYXkoJHVua25vd25Gb3JtYXRzKTtcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICB2YXIgJGZvcm1hdCA9ICdmb3JtYXQnICsgJGx2bCxcbiAgICAgICRpc09iamVjdCA9ICdpc09iamVjdCcgKyAkbHZsLFxuICAgICAgJGZvcm1hdFR5cGUgPSAnZm9ybWF0VHlwZScgKyAkbHZsO1xuICAgIG91dCArPSAnIHZhciAnICsgKCRmb3JtYXQpICsgJyA9IGZvcm1hdHNbJyArICgkc2NoZW1hVmFsdWUpICsgJ107IHZhciAnICsgKCRpc09iamVjdCkgKyAnID0gdHlwZW9mICcgKyAoJGZvcm1hdCkgKyAnID09IFxcJ29iamVjdFxcJyAmJiAhKCcgKyAoJGZvcm1hdCkgKyAnIGluc3RhbmNlb2YgUmVnRXhwKSAmJiAnICsgKCRmb3JtYXQpICsgJy52YWxpZGF0ZTsgdmFyICcgKyAoJGZvcm1hdFR5cGUpICsgJyA9ICcgKyAoJGlzT2JqZWN0KSArICcgJiYgJyArICgkZm9ybWF0KSArICcudHlwZSB8fCBcXCdzdHJpbmdcXCc7IGlmICgnICsgKCRpc09iamVjdCkgKyAnKSB7ICc7XG4gICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyB2YXIgYXN5bmMnICsgKCRsdmwpICsgJyA9ICcgKyAoJGZvcm1hdCkgKyAnLmFzeW5jOyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyAnICsgKCRmb3JtYXQpICsgJyA9ICcgKyAoJGZvcm1hdCkgKyAnLnZhbGlkYXRlOyB9IGlmICggICc7XG4gICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgIG91dCArPSAnICgnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mICcgKyAoJHNjaGVtYVZhbHVlKSArICcgIT0gXFwnc3RyaW5nXFwnKSB8fCAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyAoJztcbiAgICBpZiAoJHVua25vd25Gb3JtYXRzICE9ICdpZ25vcmUnKSB7XG4gICAgICBvdXQgKz0gJyAoJyArICgkc2NoZW1hVmFsdWUpICsgJyAmJiAhJyArICgkZm9ybWF0KSArICcgJztcbiAgICAgIGlmICgkYWxsb3dVbmtub3duKSB7XG4gICAgICAgIG91dCArPSAnICYmIHNlbGYuX29wdHMudW5rbm93bkZvcm1hdHMuaW5kZXhPZignICsgKCRzY2hlbWFWYWx1ZSkgKyAnKSA9PSAtMSAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcpIHx8ICc7XG4gICAgfVxuICAgIG91dCArPSAnICgnICsgKCRmb3JtYXQpICsgJyAmJiAnICsgKCRmb3JtYXRUeXBlKSArICcgPT0gXFwnJyArICgkcnVsZVR5cGUpICsgJ1xcJyAmJiAhKHR5cGVvZiAnICsgKCRmb3JtYXQpICsgJyA9PSBcXCdmdW5jdGlvblxcJyA/ICc7XG4gICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyAoYXN5bmMnICsgKCRsdmwpICsgJyA/IGF3YWl0ICcgKyAoJGZvcm1hdCkgKyAnKCcgKyAoJGRhdGEpICsgJykgOiAnICsgKCRmb3JtYXQpICsgJygnICsgKCRkYXRhKSArICcpKSAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyAnICsgKCRmb3JtYXQpICsgJygnICsgKCRkYXRhKSArICcpICc7XG4gICAgfVxuICAgIG91dCArPSAnIDogJyArICgkZm9ybWF0KSArICcudGVzdCgnICsgKCRkYXRhKSArICcpKSkpKSB7JztcbiAgfSBlbHNlIHtcbiAgICB2YXIgJGZvcm1hdCA9IGl0LmZvcm1hdHNbJHNjaGVtYV07XG4gICAgaWYgKCEkZm9ybWF0KSB7XG4gICAgICBpZiAoJHVua25vd25Gb3JtYXRzID09ICdpZ25vcmUnKSB7XG4gICAgICAgIGl0LmxvZ2dlci53YXJuKCd1bmtub3duIGZvcm1hdCBcIicgKyAkc2NoZW1hICsgJ1wiIGlnbm9yZWQgaW4gc2NoZW1hIGF0IHBhdGggXCInICsgaXQuZXJyU2NoZW1hUGF0aCArICdcIicpO1xuICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgIG91dCArPSAnIGlmICh0cnVlKSB7ICc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgIH0gZWxzZSBpZiAoJGFsbG93VW5rbm93biAmJiAkdW5rbm93bkZvcm1hdHMuaW5kZXhPZigkc2NoZW1hKSA+PSAwKSB7XG4gICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgb3V0ICs9ICcgaWYgKHRydWUpIHsgJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIGZvcm1hdCBcIicgKyAkc2NoZW1hICsgJ1wiIGlzIHVzZWQgaW4gc2NoZW1hIGF0IHBhdGggXCInICsgaXQuZXJyU2NoZW1hUGF0aCArICdcIicpO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgJGlzT2JqZWN0ID0gdHlwZW9mICRmb3JtYXQgPT0gJ29iamVjdCcgJiYgISgkZm9ybWF0IGluc3RhbmNlb2YgUmVnRXhwKSAmJiAkZm9ybWF0LnZhbGlkYXRlO1xuICAgIHZhciAkZm9ybWF0VHlwZSA9ICRpc09iamVjdCAmJiAkZm9ybWF0LnR5cGUgfHwgJ3N0cmluZyc7XG4gICAgaWYgKCRpc09iamVjdCkge1xuICAgICAgdmFyICRhc3luYyA9ICRmb3JtYXQuYXN5bmMgPT09IHRydWU7XG4gICAgICAkZm9ybWF0ID0gJGZvcm1hdC52YWxpZGF0ZTtcbiAgICB9XG4gICAgaWYgKCRmb3JtYXRUeXBlICE9ICRydWxlVHlwZSkge1xuICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgb3V0ICs9ICcgaWYgKHRydWUpIHsgJztcbiAgICAgIH1cbiAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuICAgIGlmICgkYXN5bmMpIHtcbiAgICAgIGlmICghaXQuYXN5bmMpIHRocm93IG5ldyBFcnJvcignYXN5bmMgZm9ybWF0IGluIHN5bmMgc2NoZW1hJyk7XG4gICAgICB2YXIgJGZvcm1hdFJlZiA9ICdmb3JtYXRzJyArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJHNjaGVtYSkgKyAnLnZhbGlkYXRlJztcbiAgICAgIG91dCArPSAnIGlmICghKGF3YWl0ICcgKyAoJGZvcm1hdFJlZikgKyAnKCcgKyAoJGRhdGEpICsgJykpKSB7ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIGlmICghICc7XG4gICAgICB2YXIgJGZvcm1hdFJlZiA9ICdmb3JtYXRzJyArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJHNjaGVtYSk7XG4gICAgICBpZiAoJGlzT2JqZWN0KSAkZm9ybWF0UmVmICs9ICcudmFsaWRhdGUnO1xuICAgICAgaWYgKHR5cGVvZiAkZm9ybWF0ID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb3V0ICs9ICcgJyArICgkZm9ybWF0UmVmKSArICcoJyArICgkZGF0YSkgKyAnKSAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgJyArICgkZm9ybWF0UmVmKSArICcudGVzdCgnICsgKCRkYXRhKSArICcpICc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJykgeyAnO1xuICAgIH1cbiAgfVxuICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ2Zvcm1hdCcpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgZm9ybWF0OiAgJztcbiAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgb3V0ICs9ICcnICsgKCRzY2hlbWFWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRzY2hlbWEpKTtcbiAgICB9XG4gICAgb3V0ICs9ICcgIH0gJztcbiAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIG1hdGNoIGZvcm1hdCBcIic7XG4gICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICBvdXQgKz0gJ1xcJyArICcgKyAoJHNjaGVtYVZhbHVlKSArICcgKyBcXCcnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRzY2hlbWEpKTtcbiAgICAgIH1cbiAgICAgIG91dCArPSAnXCJcXCcgJztcbiAgICB9XG4gICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6ICAnO1xuICAgICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgICAgb3V0ICs9ICd2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRzY2hlbWEpKTtcbiAgICAgIH1cbiAgICAgIG91dCArPSAnICAgICAgICAgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gJztcbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB7fSAnO1xuICB9XG4gIHZhciBfX2VyciA9IG91dDtcbiAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gIH1cbiAgb3V0ICs9ICcgfSAnO1xuICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX2lmKGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkdmFsaWQgPSAndmFsaWQnICsgJGx2bDtcbiAgdmFyICRlcnJzID0gJ2VycnNfXycgKyAkbHZsO1xuICB2YXIgJGl0ID0gaXQudXRpbC5jb3B5KGl0KTtcbiAgJGl0LmxldmVsKys7XG4gIHZhciAkbmV4dFZhbGlkID0gJ3ZhbGlkJyArICRpdC5sZXZlbDtcbiAgdmFyICR0aGVuU2NoID0gaXQuc2NoZW1hWyd0aGVuJ10sXG4gICAgJGVsc2VTY2ggPSBpdC5zY2hlbWFbJ2Vsc2UnXSxcbiAgICAkdGhlblByZXNlbnQgPSAkdGhlblNjaCAhPT0gdW5kZWZpbmVkICYmIChpdC5vcHRzLnN0cmljdEtleXdvcmRzID8gdHlwZW9mICR0aGVuU2NoID09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKCR0aGVuU2NoKS5sZW5ndGggPiAwIDogaXQudXRpbC5zY2hlbWFIYXNSdWxlcygkdGhlblNjaCwgaXQuUlVMRVMuYWxsKSksXG4gICAgJGVsc2VQcmVzZW50ID0gJGVsc2VTY2ggIT09IHVuZGVmaW5lZCAmJiAoaXQub3B0cy5zdHJpY3RLZXl3b3JkcyA/IHR5cGVvZiAkZWxzZVNjaCA9PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cygkZWxzZVNjaCkubGVuZ3RoID4gMCA6IGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJGVsc2VTY2gsIGl0LlJVTEVTLmFsbCkpLFxuICAgICRjdXJyZW50QmFzZUlkID0gJGl0LmJhc2VJZDtcbiAgaWYgKCR0aGVuUHJlc2VudCB8fCAkZWxzZVByZXNlbnQpIHtcbiAgICB2YXIgJGlmQ2xhdXNlO1xuICAgICRpdC5jcmVhdGVFcnJvcnMgPSBmYWxzZTtcbiAgICAkaXQuc2NoZW1hID0gJHNjaGVtYTtcbiAgICAkaXQuc2NoZW1hUGF0aCA9ICRzY2hlbWFQYXRoO1xuICAgICRpdC5lcnJTY2hlbWFQYXRoID0gJGVyclNjaGVtYVBhdGg7XG4gICAgb3V0ICs9ICcgdmFyICcgKyAoJGVycnMpICsgJyA9IGVycm9yczsgdmFyICcgKyAoJHZhbGlkKSArICcgPSB0cnVlOyAgJztcbiAgICB2YXIgJHdhc0NvbXBvc2l0ZSA9IGl0LmNvbXBvc2l0ZVJ1bGU7XG4gICAgaXQuY29tcG9zaXRlUnVsZSA9ICRpdC5jb21wb3NpdGVSdWxlID0gdHJ1ZTtcbiAgICBvdXQgKz0gJyAgJyArIChpdC52YWxpZGF0ZSgkaXQpKSArICcgJztcbiAgICAkaXQuYmFzZUlkID0gJGN1cnJlbnRCYXNlSWQ7XG4gICAgJGl0LmNyZWF0ZUVycm9ycyA9IHRydWU7XG4gICAgb3V0ICs9ICcgIGVycm9ycyA9ICcgKyAoJGVycnMpICsgJzsgaWYgKHZFcnJvcnMgIT09IG51bGwpIHsgaWYgKCcgKyAoJGVycnMpICsgJykgdkVycm9ycy5sZW5ndGggPSAnICsgKCRlcnJzKSArICc7IGVsc2UgdkVycm9ycyA9IG51bGw7IH0gICc7XG4gICAgaXQuY29tcG9zaXRlUnVsZSA9ICRpdC5jb21wb3NpdGVSdWxlID0gJHdhc0NvbXBvc2l0ZTtcbiAgICBpZiAoJHRoZW5QcmVzZW50KSB7XG4gICAgICBvdXQgKz0gJyBpZiAoJyArICgkbmV4dFZhbGlkKSArICcpIHsgICc7XG4gICAgICAkaXQuc2NoZW1hID0gaXQuc2NoZW1hWyd0aGVuJ107XG4gICAgICAkaXQuc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyAnLnRoZW4nO1xuICAgICAgJGl0LmVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy90aGVuJztcbiAgICAgIG91dCArPSAnICAnICsgKGl0LnZhbGlkYXRlKCRpdCkpICsgJyAnO1xuICAgICAgJGl0LmJhc2VJZCA9ICRjdXJyZW50QmFzZUlkO1xuICAgICAgb3V0ICs9ICcgJyArICgkdmFsaWQpICsgJyA9ICcgKyAoJG5leHRWYWxpZCkgKyAnOyAnO1xuICAgICAgaWYgKCR0aGVuUHJlc2VudCAmJiAkZWxzZVByZXNlbnQpIHtcbiAgICAgICAgJGlmQ2xhdXNlID0gJ2lmQ2xhdXNlJyArICRsdmw7XG4gICAgICAgIG91dCArPSAnIHZhciAnICsgKCRpZkNsYXVzZSkgKyAnID0gXFwndGhlblxcJzsgJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICRpZkNsYXVzZSA9ICdcXCd0aGVuXFwnJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIH0gJztcbiAgICAgIGlmICgkZWxzZVByZXNlbnQpIHtcbiAgICAgICAgb3V0ICs9ICcgZWxzZSB7ICc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIGlmICghJyArICgkbmV4dFZhbGlkKSArICcpIHsgJztcbiAgICB9XG4gICAgaWYgKCRlbHNlUHJlc2VudCkge1xuICAgICAgJGl0LnNjaGVtYSA9IGl0LnNjaGVtYVsnZWxzZSddO1xuICAgICAgJGl0LnNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgJy5lbHNlJztcbiAgICAgICRpdC5lcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvZWxzZSc7XG4gICAgICBvdXQgKz0gJyAgJyArIChpdC52YWxpZGF0ZSgkaXQpKSArICcgJztcbiAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgIG91dCArPSAnICcgKyAoJHZhbGlkKSArICcgPSAnICsgKCRuZXh0VmFsaWQpICsgJzsgJztcbiAgICAgIGlmICgkdGhlblByZXNlbnQgJiYgJGVsc2VQcmVzZW50KSB7XG4gICAgICAgICRpZkNsYXVzZSA9ICdpZkNsYXVzZScgKyAkbHZsO1xuICAgICAgICBvdXQgKz0gJyB2YXIgJyArICgkaWZDbGF1c2UpICsgJyA9IFxcJ2Vsc2VcXCc7ICc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkaWZDbGF1c2UgPSAnXFwnZWxzZVxcJyc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyB9ICc7XG4gICAgfVxuICAgIG91dCArPSAnIGlmICghJyArICgkdmFsaWQpICsgJykgeyAgIHZhciBlcnIgPSAgICc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgnaWYnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IGZhaWxpbmdLZXl3b3JkOiAnICsgKCRpZkNsYXVzZSkgKyAnIH0gJztcbiAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBtYXRjaCBcIlxcJyArICcgKyAoJGlmQ2xhdXNlKSArICcgKyBcXCdcIiBzY2hlbWFcXCcgJztcbiAgICAgIH1cbiAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIH0gJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcge30gJztcbiAgICB9XG4gICAgb3V0ICs9ICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcih2RXJyb3JzKTsgJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IHZFcnJvcnM7IHJldHVybiBmYWxzZTsgJztcbiAgICAgIH1cbiAgICB9XG4gICAgb3V0ICs9ICcgfSAgICc7XG4gICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICAgIH1cbiAgICBvdXQgPSBpdC51dGlsLmNsZWFuVXBDb2RlKG91dCk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgIG91dCArPSAnIGlmICh0cnVlKSB7ICc7XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX2l0ZW1zKGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkdmFsaWQgPSAndmFsaWQnICsgJGx2bDtcbiAgdmFyICRlcnJzID0gJ2VycnNfXycgKyAkbHZsO1xuICB2YXIgJGl0ID0gaXQudXRpbC5jb3B5KGl0KTtcbiAgdmFyICRjbG9zaW5nQnJhY2VzID0gJyc7XG4gICRpdC5sZXZlbCsrO1xuICB2YXIgJG5leHRWYWxpZCA9ICd2YWxpZCcgKyAkaXQubGV2ZWw7XG4gIHZhciAkaWR4ID0gJ2knICsgJGx2bCxcbiAgICAkZGF0YU54dCA9ICRpdC5kYXRhTGV2ZWwgPSBpdC5kYXRhTGV2ZWwgKyAxLFxuICAgICRuZXh0RGF0YSA9ICdkYXRhJyArICRkYXRhTnh0LFxuICAgICRjdXJyZW50QmFzZUlkID0gaXQuYmFzZUlkO1xuICBvdXQgKz0gJ3ZhciAnICsgKCRlcnJzKSArICcgPSBlcnJvcnM7dmFyICcgKyAoJHZhbGlkKSArICc7JztcbiAgaWYgKEFycmF5LmlzQXJyYXkoJHNjaGVtYSkpIHtcbiAgICB2YXIgJGFkZGl0aW9uYWxJdGVtcyA9IGl0LnNjaGVtYS5hZGRpdGlvbmFsSXRlbXM7XG4gICAgaWYgKCRhZGRpdGlvbmFsSXRlbXMgPT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAnICsgKCR2YWxpZCkgKyAnID0gJyArICgkZGF0YSkgKyAnLmxlbmd0aCA8PSAnICsgKCRzY2hlbWEubGVuZ3RoKSArICc7ICc7XG4gICAgICB2YXIgJGN1cnJFcnJTY2hlbWFQYXRoID0gJGVyclNjaGVtYVBhdGg7XG4gICAgICAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnL2FkZGl0aW9uYWxJdGVtcyc7XG4gICAgICBvdXQgKz0gJyAgaWYgKCEnICsgKCR2YWxpZCkgKyAnKSB7ICAgJztcbiAgICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAgICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICAgICAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ2FkZGl0aW9uYWxJdGVtcycpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgbGltaXQ6ICcgKyAoJHNjaGVtYS5sZW5ndGgpICsgJyB9ICc7XG4gICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIE5PVCBoYXZlIG1vcmUgdGhhbiAnICsgKCRzY2hlbWEubGVuZ3RoKSArICcgaXRlbXNcXCcgJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IGZhbHNlICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICB9XG4gICAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIH0gJztcbiAgICAgICRlcnJTY2hlbWFQYXRoID0gJGN1cnJFcnJTY2hlbWFQYXRoO1xuICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgJGNsb3NpbmdCcmFjZXMgKz0gJ30nO1xuICAgICAgICBvdXQgKz0gJyBlbHNlIHsgJztcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIGFycjEgPSAkc2NoZW1hO1xuICAgIGlmIChhcnIxKSB7XG4gICAgICB2YXIgJHNjaCwgJGkgPSAtMSxcbiAgICAgICAgbDEgPSBhcnIxLmxlbmd0aCAtIDE7XG4gICAgICB3aGlsZSAoJGkgPCBsMSkge1xuICAgICAgICAkc2NoID0gYXJyMVskaSArPSAxXTtcbiAgICAgICAgaWYgKChpdC5vcHRzLnN0cmljdEtleXdvcmRzID8gdHlwZW9mICRzY2ggPT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMoJHNjaCkubGVuZ3RoID4gMCA6IGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJHNjaCwgaXQuUlVMRVMuYWxsKSkpIHtcbiAgICAgICAgICBvdXQgKz0gJyAnICsgKCRuZXh0VmFsaWQpICsgJyA9IHRydWU7IGlmICgnICsgKCRkYXRhKSArICcubGVuZ3RoID4gJyArICgkaSkgKyAnKSB7ICc7XG4gICAgICAgICAgdmFyICRwYXNzRGF0YSA9ICRkYXRhICsgJ1snICsgJGkgKyAnXSc7XG4gICAgICAgICAgJGl0LnNjaGVtYSA9ICRzY2g7XG4gICAgICAgICAgJGl0LnNjaGVtYVBhdGggPSAkc2NoZW1hUGF0aCArICdbJyArICRpICsgJ10nO1xuICAgICAgICAgICRpdC5lcnJTY2hlbWFQYXRoID0gJGVyclNjaGVtYVBhdGggKyAnLycgKyAkaTtcbiAgICAgICAgICAkaXQuZXJyb3JQYXRoID0gaXQudXRpbC5nZXRQYXRoRXhwcihpdC5lcnJvclBhdGgsICRpLCBpdC5vcHRzLmpzb25Qb2ludGVycywgdHJ1ZSk7XG4gICAgICAgICAgJGl0LmRhdGFQYXRoQXJyWyRkYXRhTnh0XSA9ICRpO1xuICAgICAgICAgIHZhciAkY29kZSA9IGl0LnZhbGlkYXRlKCRpdCk7XG4gICAgICAgICAgJGl0LmJhc2VJZCA9ICRjdXJyZW50QmFzZUlkO1xuICAgICAgICAgIGlmIChpdC51dGlsLnZhck9jY3VyZW5jZXMoJGNvZGUsICRuZXh0RGF0YSkgPCAyKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAnICsgKGl0LnV0aWwudmFyUmVwbGFjZSgkY29kZSwgJG5leHREYXRhLCAkcGFzc0RhdGEpKSArICcgJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJG5leHREYXRhKSArICcgPSAnICsgKCRwYXNzRGF0YSkgKyAnOyAnICsgKCRjb2RlKSArICcgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgfSAgJztcbiAgICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJG5leHRWYWxpZCkgKyAnKSB7ICc7XG4gICAgICAgICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgJGFkZGl0aW9uYWxJdGVtcyA9PSAnb2JqZWN0JyAmJiAoaXQub3B0cy5zdHJpY3RLZXl3b3JkcyA/IHR5cGVvZiAkYWRkaXRpb25hbEl0ZW1zID09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKCRhZGRpdGlvbmFsSXRlbXMpLmxlbmd0aCA+IDAgOiBpdC51dGlsLnNjaGVtYUhhc1J1bGVzKCRhZGRpdGlvbmFsSXRlbXMsIGl0LlJVTEVTLmFsbCkpKSB7XG4gICAgICAkaXQuc2NoZW1hID0gJGFkZGl0aW9uYWxJdGVtcztcbiAgICAgICRpdC5zY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArICcuYWRkaXRpb25hbEl0ZW1zJztcbiAgICAgICRpdC5lcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvYWRkaXRpb25hbEl0ZW1zJztcbiAgICAgIG91dCArPSAnICcgKyAoJG5leHRWYWxpZCkgKyAnID0gdHJ1ZTsgaWYgKCcgKyAoJGRhdGEpICsgJy5sZW5ndGggPiAnICsgKCRzY2hlbWEubGVuZ3RoKSArICcpIHsgIGZvciAodmFyICcgKyAoJGlkeCkgKyAnID0gJyArICgkc2NoZW1hLmxlbmd0aCkgKyAnOyAnICsgKCRpZHgpICsgJyA8ICcgKyAoJGRhdGEpICsgJy5sZW5ndGg7ICcgKyAoJGlkeCkgKyAnKyspIHsgJztcbiAgICAgICRpdC5lcnJvclBhdGggPSBpdC51dGlsLmdldFBhdGhFeHByKGl0LmVycm9yUGF0aCwgJGlkeCwgaXQub3B0cy5qc29uUG9pbnRlcnMsIHRydWUpO1xuICAgICAgdmFyICRwYXNzRGF0YSA9ICRkYXRhICsgJ1snICsgJGlkeCArICddJztcbiAgICAgICRpdC5kYXRhUGF0aEFyclskZGF0YU54dF0gPSAkaWR4O1xuICAgICAgdmFyICRjb2RlID0gaXQudmFsaWRhdGUoJGl0KTtcbiAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgIGlmIChpdC51dGlsLnZhck9jY3VyZW5jZXMoJGNvZGUsICRuZXh0RGF0YSkgPCAyKSB7XG4gICAgICAgIG91dCArPSAnICcgKyAoaXQudXRpbC52YXJSZXBsYWNlKCRjb2RlLCAkbmV4dERhdGEsICRwYXNzRGF0YSkpICsgJyAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJG5leHREYXRhKSArICcgPSAnICsgKCRwYXNzRGF0YSkgKyAnOyAnICsgKCRjb2RlKSArICcgJztcbiAgICAgIH1cbiAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgIG91dCArPSAnIGlmICghJyArICgkbmV4dFZhbGlkKSArICcpIGJyZWFrOyAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgfSB9ICAnO1xuICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJG5leHRWYWxpZCkgKyAnKSB7ICc7XG4gICAgICAgICRjbG9zaW5nQnJhY2VzICs9ICd9JztcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoKGl0Lm9wdHMuc3RyaWN0S2V5d29yZHMgPyB0eXBlb2YgJHNjaGVtYSA9PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cygkc2NoZW1hKS5sZW5ndGggPiAwIDogaXQudXRpbC5zY2hlbWFIYXNSdWxlcygkc2NoZW1hLCBpdC5SVUxFUy5hbGwpKSkge1xuICAgICRpdC5zY2hlbWEgPSAkc2NoZW1hO1xuICAgICRpdC5zY2hlbWFQYXRoID0gJHNjaGVtYVBhdGg7XG4gICAgJGl0LmVyclNjaGVtYVBhdGggPSAkZXJyU2NoZW1hUGF0aDtcbiAgICBvdXQgKz0gJyAgZm9yICh2YXIgJyArICgkaWR4KSArICcgPSAnICsgKDApICsgJzsgJyArICgkaWR4KSArICcgPCAnICsgKCRkYXRhKSArICcubGVuZ3RoOyAnICsgKCRpZHgpICsgJysrKSB7ICc7XG4gICAgJGl0LmVycm9yUGF0aCA9IGl0LnV0aWwuZ2V0UGF0aEV4cHIoaXQuZXJyb3JQYXRoLCAkaWR4LCBpdC5vcHRzLmpzb25Qb2ludGVycywgdHJ1ZSk7XG4gICAgdmFyICRwYXNzRGF0YSA9ICRkYXRhICsgJ1snICsgJGlkeCArICddJztcbiAgICAkaXQuZGF0YVBhdGhBcnJbJGRhdGFOeHRdID0gJGlkeDtcbiAgICB2YXIgJGNvZGUgPSBpdC52YWxpZGF0ZSgkaXQpO1xuICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICBpZiAoaXQudXRpbC52YXJPY2N1cmVuY2VzKCRjb2RlLCAkbmV4dERhdGEpIDwgMikge1xuICAgICAgb3V0ICs9ICcgJyArIChpdC51dGlsLnZhclJlcGxhY2UoJGNvZGUsICRuZXh0RGF0YSwgJHBhc3NEYXRhKSkgKyAnICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHZhciAnICsgKCRuZXh0RGF0YSkgKyAnID0gJyArICgkcGFzc0RhdGEpICsgJzsgJyArICgkY29kZSkgKyAnICc7XG4gICAgfVxuICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICBvdXQgKz0gJyBpZiAoIScgKyAoJG5leHRWYWxpZCkgKyAnKSBicmVhazsgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgfSc7XG4gIH1cbiAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICBvdXQgKz0gJyAnICsgKCRjbG9zaW5nQnJhY2VzKSArICcgaWYgKCcgKyAoJGVycnMpICsgJyA9PSBlcnJvcnMpIHsnO1xuICB9XG4gIG91dCA9IGl0LnV0aWwuY2xlYW5VcENvZGUob3V0KTtcbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfX2xpbWl0KGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZXJyb3JLZXl3b3JkO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJGlzRGF0YSA9IGl0Lm9wdHMuJGRhdGEgJiYgJHNjaGVtYSAmJiAkc2NoZW1hLiRkYXRhLFxuICAgICRzY2hlbWFWYWx1ZTtcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyB2YXIgc2NoZW1hJyArICgkbHZsKSArICcgPSAnICsgKGl0LnV0aWwuZ2V0RGF0YSgkc2NoZW1hLiRkYXRhLCAkZGF0YUx2bCwgaXQuZGF0YVBhdGhBcnIpKSArICc7ICc7XG4gICAgJHNjaGVtYVZhbHVlID0gJ3NjaGVtYScgKyAkbHZsO1xuICB9IGVsc2Uge1xuICAgICRzY2hlbWFWYWx1ZSA9ICRzY2hlbWE7XG4gIH1cbiAgdmFyICRpc01heCA9ICRrZXl3b3JkID09ICdtYXhpbXVtJyxcbiAgICAkZXhjbHVzaXZlS2V5d29yZCA9ICRpc01heCA/ICdleGNsdXNpdmVNYXhpbXVtJyA6ICdleGNsdXNpdmVNaW5pbXVtJyxcbiAgICAkc2NoZW1hRXhjbCA9IGl0LnNjaGVtYVskZXhjbHVzaXZlS2V5d29yZF0sXG4gICAgJGlzRGF0YUV4Y2wgPSBpdC5vcHRzLiRkYXRhICYmICRzY2hlbWFFeGNsICYmICRzY2hlbWFFeGNsLiRkYXRhLFxuICAgICRvcCA9ICRpc01heCA/ICc8JyA6ICc+JyxcbiAgICAkbm90T3AgPSAkaXNNYXggPyAnPicgOiAnPCcsXG4gICAgJGVycm9yS2V5d29yZCA9IHVuZGVmaW5lZDtcbiAgaWYgKCRpc0RhdGFFeGNsKSB7XG4gICAgdmFyICRzY2hlbWFWYWx1ZUV4Y2wgPSBpdC51dGlsLmdldERhdGEoJHNjaGVtYUV4Y2wuJGRhdGEsICRkYXRhTHZsLCBpdC5kYXRhUGF0aEFyciksXG4gICAgICAkZXhjbHVzaXZlID0gJ2V4Y2x1c2l2ZScgKyAkbHZsLFxuICAgICAgJGV4Y2xUeXBlID0gJ2V4Y2xUeXBlJyArICRsdmwsXG4gICAgICAkZXhjbElzTnVtYmVyID0gJ2V4Y2xJc051bWJlcicgKyAkbHZsLFxuICAgICAgJG9wRXhwciA9ICdvcCcgKyAkbHZsLFxuICAgICAgJG9wU3RyID0gJ1xcJyArICcgKyAkb3BFeHByICsgJyArIFxcJyc7XG4gICAgb3V0ICs9ICcgdmFyIHNjaGVtYUV4Y2wnICsgKCRsdmwpICsgJyA9ICcgKyAoJHNjaGVtYVZhbHVlRXhjbCkgKyAnOyAnO1xuICAgICRzY2hlbWFWYWx1ZUV4Y2wgPSAnc2NoZW1hRXhjbCcgKyAkbHZsO1xuICAgIG91dCArPSAnIHZhciAnICsgKCRleGNsdXNpdmUpICsgJzsgdmFyICcgKyAoJGV4Y2xUeXBlKSArICcgPSB0eXBlb2YgJyArICgkc2NoZW1hVmFsdWVFeGNsKSArICc7IGlmICgnICsgKCRleGNsVHlwZSkgKyAnICE9IFxcJ2Jvb2xlYW5cXCcgJiYgJyArICgkZXhjbFR5cGUpICsgJyAhPSBcXCd1bmRlZmluZWRcXCcgJiYgJyArICgkZXhjbFR5cGUpICsgJyAhPSBcXCdudW1iZXJcXCcpIHsgJztcbiAgICB2YXIgJGVycm9yS2V5d29yZCA9ICRleGNsdXNpdmVLZXl3b3JkO1xuICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCRlcnJvcktleXdvcmQgfHwgJ19leGNsdXNpdmVMaW1pdCcpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHt9ICc7XG4gICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCcnICsgKCRleGNsdXNpdmVLZXl3b3JkKSArICcgc2hvdWxkIGJlIGJvb2xlYW5cXCcgJztcbiAgICAgIH1cbiAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIH0gJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcge30gJztcbiAgICB9XG4gICAgdmFyIF9fZXJyID0gb3V0O1xuICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9IGVsc2UgaWYgKCAnO1xuICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICBvdXQgKz0gJyAoJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9IFxcJ251bWJlclxcJykgfHwgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgJyArICgkZXhjbFR5cGUpICsgJyA9PSBcXCdudW1iZXJcXCcgPyAoICgnICsgKCRleGNsdXNpdmUpICsgJyA9ICcgKyAoJHNjaGVtYVZhbHVlKSArICcgPT09IHVuZGVmaW5lZCB8fCAnICsgKCRzY2hlbWFWYWx1ZUV4Y2wpICsgJyAnICsgKCRvcCkgKyAnPSAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnKSA/ICcgKyAoJGRhdGEpICsgJyAnICsgKCRub3RPcCkgKyAnPSAnICsgKCRzY2hlbWFWYWx1ZUV4Y2wpICsgJyA6ICcgKyAoJGRhdGEpICsgJyAnICsgKCRub3RPcCkgKyAnICcgKyAoJHNjaGVtYVZhbHVlKSArICcgKSA6ICggKCcgKyAoJGV4Y2x1c2l2ZSkgKyAnID0gJyArICgkc2NoZW1hVmFsdWVFeGNsKSArICcgPT09IHRydWUpID8gJyArICgkZGF0YSkgKyAnICcgKyAoJG5vdE9wKSArICc9ICcgKyAoJHNjaGVtYVZhbHVlKSArICcgOiAnICsgKCRkYXRhKSArICcgJyArICgkbm90T3ApICsgJyAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICkgfHwgJyArICgkZGF0YSkgKyAnICE9PSAnICsgKCRkYXRhKSArICcpIHsgdmFyIG9wJyArICgkbHZsKSArICcgPSAnICsgKCRleGNsdXNpdmUpICsgJyA/IFxcJycgKyAoJG9wKSArICdcXCcgOiBcXCcnICsgKCRvcCkgKyAnPVxcJzsgJztcbiAgICBpZiAoJHNjaGVtYSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAkZXJyb3JLZXl3b3JkID0gJGV4Y2x1c2l2ZUtleXdvcmQ7XG4gICAgICAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAkZXhjbHVzaXZlS2V5d29yZDtcbiAgICAgICRzY2hlbWFWYWx1ZSA9ICRzY2hlbWFWYWx1ZUV4Y2w7XG4gICAgICAkaXNEYXRhID0gJGlzRGF0YUV4Y2w7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciAkZXhjbElzTnVtYmVyID0gdHlwZW9mICRzY2hlbWFFeGNsID09ICdudW1iZXInLFxuICAgICAgJG9wU3RyID0gJG9wO1xuICAgIGlmICgkZXhjbElzTnVtYmVyICYmICRpc0RhdGEpIHtcbiAgICAgIHZhciAkb3BFeHByID0gJ1xcJycgKyAkb3BTdHIgKyAnXFwnJztcbiAgICAgIG91dCArPSAnIGlmICggJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAnICgnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mICcgKyAoJHNjaGVtYVZhbHVlKSArICcgIT0gXFwnbnVtYmVyXFwnKSB8fCAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgKCAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnID09PSB1bmRlZmluZWQgfHwgJyArICgkc2NoZW1hRXhjbCkgKyAnICcgKyAoJG9wKSArICc9ICcgKyAoJHNjaGVtYVZhbHVlKSArICcgPyAnICsgKCRkYXRhKSArICcgJyArICgkbm90T3ApICsgJz0gJyArICgkc2NoZW1hRXhjbCkgKyAnIDogJyArICgkZGF0YSkgKyAnICcgKyAoJG5vdE9wKSArICcgJyArICgkc2NoZW1hVmFsdWUpICsgJyApIHx8ICcgKyAoJGRhdGEpICsgJyAhPT0gJyArICgkZGF0YSkgKyAnKSB7ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICgkZXhjbElzTnVtYmVyICYmICRzY2hlbWEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAkZXhjbHVzaXZlID0gdHJ1ZTtcbiAgICAgICAgJGVycm9yS2V5d29yZCA9ICRleGNsdXNpdmVLZXl3b3JkO1xuICAgICAgICAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAkZXhjbHVzaXZlS2V5d29yZDtcbiAgICAgICAgJHNjaGVtYVZhbHVlID0gJHNjaGVtYUV4Y2w7XG4gICAgICAgICRub3RPcCArPSAnPSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoJGV4Y2xJc051bWJlcikgJHNjaGVtYVZhbHVlID0gTWF0aFskaXNNYXggPyAnbWluJyA6ICdtYXgnXSgkc2NoZW1hRXhjbCwgJHNjaGVtYSk7XG4gICAgICAgIGlmICgkc2NoZW1hRXhjbCA9PT0gKCRleGNsSXNOdW1iZXIgPyAkc2NoZW1hVmFsdWUgOiB0cnVlKSkge1xuICAgICAgICAgICRleGNsdXNpdmUgPSB0cnVlO1xuICAgICAgICAgICRlcnJvcktleXdvcmQgPSAkZXhjbHVzaXZlS2V5d29yZDtcbiAgICAgICAgICAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAkZXhjbHVzaXZlS2V5d29yZDtcbiAgICAgICAgICAkbm90T3AgKz0gJz0nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICRleGNsdXNpdmUgPSBmYWxzZTtcbiAgICAgICAgICAkb3BTdHIgKz0gJz0nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgJG9wRXhwciA9ICdcXCcnICsgJG9wU3RyICsgJ1xcJyc7XG4gICAgICBvdXQgKz0gJyBpZiAoICc7XG4gICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICBvdXQgKz0gJyAoJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9IFxcJ251bWJlclxcJykgfHwgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnICcgKyAoJGRhdGEpICsgJyAnICsgKCRub3RPcCkgKyAnICcgKyAoJHNjaGVtYVZhbHVlKSArICcgfHwgJyArICgkZGF0YSkgKyAnICE9PSAnICsgKCRkYXRhKSArICcpIHsgJztcbiAgICB9XG4gIH1cbiAgJGVycm9yS2V5d29yZCA9ICRlcnJvcktleXdvcmQgfHwgJGtleXdvcmQ7XG4gIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgkZXJyb3JLZXl3b3JkIHx8ICdfbGltaXQnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IGNvbXBhcmlzb246ICcgKyAoJG9wRXhwcikgKyAnLCBsaW1pdDogJyArICgkc2NoZW1hVmFsdWUpICsgJywgZXhjbHVzaXZlOiAnICsgKCRleGNsdXNpdmUpICsgJyB9ICc7XG4gICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBiZSAnICsgKCRvcFN0cikgKyAnICc7XG4gICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICBvdXQgKz0gJ1xcJyArICcgKyAoJHNjaGVtYVZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnJyArICgkc2NoZW1hVmFsdWUpICsgJ1xcJyc7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgIG91dCArPSAnICwgc2NoZW1hOiAgJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAndmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoJHNjaGVtYSk7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyAgICAgICAgICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9ICc7XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcge30gJztcbiAgfVxuICB2YXIgX19lcnIgPSBvdXQ7XG4gIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICB9XG4gIG91dCArPSAnIH0gJztcbiAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICBvdXQgKz0gJyBlbHNlIHsgJztcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9fbGltaXRJdGVtcyhpdCwgJGtleXdvcmQsICRydWxlVHlwZSkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGVycm9yS2V5d29yZDtcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICRpc0RhdGEgPSBpdC5vcHRzLiRkYXRhICYmICRzY2hlbWEgJiYgJHNjaGVtYS4kZGF0YSxcbiAgICAkc2NoZW1hVmFsdWU7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgdmFyIHNjaGVtYScgKyAoJGx2bCkgKyAnID0gJyArIChpdC51dGlsLmdldERhdGEoJHNjaGVtYS4kZGF0YSwgJGRhdGFMdmwsIGl0LmRhdGFQYXRoQXJyKSkgKyAnOyAnO1xuICAgICRzY2hlbWFWYWx1ZSA9ICdzY2hlbWEnICsgJGx2bDtcbiAgfSBlbHNlIHtcbiAgICAkc2NoZW1hVmFsdWUgPSAkc2NoZW1hO1xuICB9XG4gIHZhciAkb3AgPSAka2V5d29yZCA9PSAnbWF4SXRlbXMnID8gJz4nIDogJzwnO1xuICBvdXQgKz0gJ2lmICggJztcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyAoJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9IFxcJ251bWJlclxcJykgfHwgJztcbiAgfVxuICBvdXQgKz0gJyAnICsgKCRkYXRhKSArICcubGVuZ3RoICcgKyAoJG9wKSArICcgJyArICgkc2NoZW1hVmFsdWUpICsgJykgeyAnO1xuICB2YXIgJGVycm9yS2V5d29yZCA9ICRrZXl3b3JkO1xuICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJGVycm9yS2V5d29yZCB8fCAnX2xpbWl0SXRlbXMnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IGxpbWl0OiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnIH0gJztcbiAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIE5PVCBoYXZlICc7XG4gICAgICBpZiAoJGtleXdvcmQgPT0gJ21heEl0ZW1zJykge1xuICAgICAgICBvdXQgKz0gJ21vcmUnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICdmZXdlcic7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyB0aGFuICc7XG4gICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICBvdXQgKz0gJ1xcJyArICcgKyAoJHNjaGVtYVZhbHVlKSArICcgKyBcXCcnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcnICsgKCRzY2hlbWEpO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgaXRlbXNcXCcgJztcbiAgICB9XG4gICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6ICAnO1xuICAgICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgICAgb3V0ICs9ICd2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnJyArICgkc2NoZW1hKTtcbiAgICAgIH1cbiAgICAgIG91dCArPSAnICAgICAgICAgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gJztcbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB7fSAnO1xuICB9XG4gIHZhciBfX2VyciA9IG91dDtcbiAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gIH1cbiAgb3V0ICs9ICd9ICc7XG4gIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgb3V0ICs9ICcgZWxzZSB7ICc7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfX2xpbWl0TGVuZ3RoKGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZXJyb3JLZXl3b3JkO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJGlzRGF0YSA9IGl0Lm9wdHMuJGRhdGEgJiYgJHNjaGVtYSAmJiAkc2NoZW1hLiRkYXRhLFxuICAgICRzY2hlbWFWYWx1ZTtcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyB2YXIgc2NoZW1hJyArICgkbHZsKSArICcgPSAnICsgKGl0LnV0aWwuZ2V0RGF0YSgkc2NoZW1hLiRkYXRhLCAkZGF0YUx2bCwgaXQuZGF0YVBhdGhBcnIpKSArICc7ICc7XG4gICAgJHNjaGVtYVZhbHVlID0gJ3NjaGVtYScgKyAkbHZsO1xuICB9IGVsc2Uge1xuICAgICRzY2hlbWFWYWx1ZSA9ICRzY2hlbWE7XG4gIH1cbiAgdmFyICRvcCA9ICRrZXl3b3JkID09ICdtYXhMZW5ndGgnID8gJz4nIDogJzwnO1xuICBvdXQgKz0gJ2lmICggJztcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyAoJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9IFxcJ251bWJlclxcJykgfHwgJztcbiAgfVxuICBpZiAoaXQub3B0cy51bmljb2RlID09PSBmYWxzZSkge1xuICAgIG91dCArPSAnICcgKyAoJGRhdGEpICsgJy5sZW5ndGggJztcbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB1Y3MybGVuZ3RoKCcgKyAoJGRhdGEpICsgJykgJztcbiAgfVxuICBvdXQgKz0gJyAnICsgKCRvcCkgKyAnICcgKyAoJHNjaGVtYVZhbHVlKSArICcpIHsgJztcbiAgdmFyICRlcnJvcktleXdvcmQgPSAka2V5d29yZDtcbiAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCRlcnJvcktleXdvcmQgfHwgJ19saW1pdExlbmd0aCcpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgbGltaXQ6ICcgKyAoJHNjaGVtYVZhbHVlKSArICcgfSAnO1xuICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgTk9UIGJlICc7XG4gICAgICBpZiAoJGtleXdvcmQgPT0gJ21heExlbmd0aCcpIHtcbiAgICAgICAgb3V0ICs9ICdsb25nZXInO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICdzaG9ydGVyJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIHRoYW4gJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAnXFwnICsgJyArICgkc2NoZW1hVmFsdWUpICsgJyArIFxcJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoJHNjaGVtYSk7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyBjaGFyYWN0ZXJzXFwnICc7XG4gICAgfVxuICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgIG91dCArPSAnICwgc2NoZW1hOiAgJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAndmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoJHNjaGVtYSk7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyAgICAgICAgICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9ICc7XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcge30gJztcbiAgfVxuICB2YXIgX19lcnIgPSBvdXQ7XG4gIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICB9XG4gIG91dCArPSAnfSAnO1xuICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX19saW1pdFByb3BlcnRpZXMoaXQsICRrZXl3b3JkLCAkcnVsZVR5cGUpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRlcnJvcktleXdvcmQ7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkaXNEYXRhID0gaXQub3B0cy4kZGF0YSAmJiAkc2NoZW1hICYmICRzY2hlbWEuJGRhdGEsXG4gICAgJHNjaGVtYVZhbHVlO1xuICBpZiAoJGlzRGF0YSkge1xuICAgIG91dCArPSAnIHZhciBzY2hlbWEnICsgKCRsdmwpICsgJyA9ICcgKyAoaXQudXRpbC5nZXREYXRhKCRzY2hlbWEuJGRhdGEsICRkYXRhTHZsLCBpdC5kYXRhUGF0aEFycikpICsgJzsgJztcbiAgICAkc2NoZW1hVmFsdWUgPSAnc2NoZW1hJyArICRsdmw7XG4gIH0gZWxzZSB7XG4gICAgJHNjaGVtYVZhbHVlID0gJHNjaGVtYTtcbiAgfVxuICB2YXIgJG9wID0gJGtleXdvcmQgPT0gJ21heFByb3BlcnRpZXMnID8gJz4nIDogJzwnO1xuICBvdXQgKz0gJ2lmICggJztcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyAoJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9IFxcJ251bWJlclxcJykgfHwgJztcbiAgfVxuICBvdXQgKz0gJyBPYmplY3Qua2V5cygnICsgKCRkYXRhKSArICcpLmxlbmd0aCAnICsgKCRvcCkgKyAnICcgKyAoJHNjaGVtYVZhbHVlKSArICcpIHsgJztcbiAgdmFyICRlcnJvcktleXdvcmQgPSAka2V5d29yZDtcbiAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCRlcnJvcktleXdvcmQgfHwgJ19saW1pdFByb3BlcnRpZXMnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IGxpbWl0OiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnIH0gJztcbiAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIE5PVCBoYXZlICc7XG4gICAgICBpZiAoJGtleXdvcmQgPT0gJ21heFByb3BlcnRpZXMnKSB7XG4gICAgICAgIG91dCArPSAnbW9yZSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJ2Zld2VyJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIHRoYW4gJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAnXFwnICsgJyArICgkc2NoZW1hVmFsdWUpICsgJyArIFxcJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoJHNjaGVtYSk7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyBwcm9wZXJ0aWVzXFwnICc7XG4gICAgfVxuICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgIG91dCArPSAnICwgc2NoZW1hOiAgJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAndmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoJHNjaGVtYSk7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyAgICAgICAgICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9ICc7XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcge30gJztcbiAgfVxuICB2YXIgX19lcnIgPSBvdXQ7XG4gIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICB9XG4gIG91dCArPSAnfSAnO1xuICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX211bHRpcGxlT2YoaXQsICRrZXl3b3JkLCAkcnVsZVR5cGUpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICRpc0RhdGEgPSBpdC5vcHRzLiRkYXRhICYmICRzY2hlbWEgJiYgJHNjaGVtYS4kZGF0YSxcbiAgICAkc2NoZW1hVmFsdWU7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgdmFyIHNjaGVtYScgKyAoJGx2bCkgKyAnID0gJyArIChpdC51dGlsLmdldERhdGEoJHNjaGVtYS4kZGF0YSwgJGRhdGFMdmwsIGl0LmRhdGFQYXRoQXJyKSkgKyAnOyAnO1xuICAgICRzY2hlbWFWYWx1ZSA9ICdzY2hlbWEnICsgJGx2bDtcbiAgfSBlbHNlIHtcbiAgICAkc2NoZW1hVmFsdWUgPSAkc2NoZW1hO1xuICB9XG4gIG91dCArPSAndmFyIGRpdmlzaW9uJyArICgkbHZsKSArICc7aWYgKCc7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPT0gdW5kZWZpbmVkICYmICggdHlwZW9mICcgKyAoJHNjaGVtYVZhbHVlKSArICcgIT0gXFwnbnVtYmVyXFwnIHx8ICc7XG4gIH1cbiAgb3V0ICs9ICcgKGRpdmlzaW9uJyArICgkbHZsKSArICcgPSAnICsgKCRkYXRhKSArICcgLyAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnLCAnO1xuICBpZiAoaXQub3B0cy5tdWx0aXBsZU9mUHJlY2lzaW9uKSB7XG4gICAgb3V0ICs9ICcgTWF0aC5hYnMoTWF0aC5yb3VuZChkaXZpc2lvbicgKyAoJGx2bCkgKyAnKSAtIGRpdmlzaW9uJyArICgkbHZsKSArICcpID4gMWUtJyArIChpdC5vcHRzLm11bHRpcGxlT2ZQcmVjaXNpb24pICsgJyAnO1xuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIGRpdmlzaW9uJyArICgkbHZsKSArICcgIT09IHBhcnNlSW50KGRpdmlzaW9uJyArICgkbHZsKSArICcpICc7XG4gIH1cbiAgb3V0ICs9ICcgKSAnO1xuICBpZiAoJGlzRGF0YSkge1xuICAgIG91dCArPSAnICApICAnO1xuICB9XG4gIG91dCArPSAnICkgeyAgICc7XG4gIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgnbXVsdGlwbGVPZicpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgbXVsdGlwbGVPZjogJyArICgkc2NoZW1hVmFsdWUpICsgJyB9ICc7XG4gICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBiZSBtdWx0aXBsZSBvZiAnO1xuICAgICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgICAgb3V0ICs9ICdcXCcgKyAnICsgKCRzY2hlbWFWYWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoJHNjaGVtYVZhbHVlKSArICdcXCcnO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICBvdXQgKz0gJyAsIHNjaGVtYTogICc7XG4gICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICBvdXQgKz0gJ3ZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcnICsgKCRzY2hlbWEpO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgICAgICAgICAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgfSAnO1xuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIHt9ICc7XG4gIH1cbiAgdmFyIF9fZXJyID0gb3V0O1xuICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChpdC5hc3luYykge1xuICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgfVxuICBvdXQgKz0gJ30gJztcbiAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICBvdXQgKz0gJyBlbHNlIHsgJztcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9ub3QoaXQsICRrZXl3b3JkLCAkcnVsZVR5cGUpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICRlcnJzID0gJ2VycnNfXycgKyAkbHZsO1xuICB2YXIgJGl0ID0gaXQudXRpbC5jb3B5KGl0KTtcbiAgJGl0LmxldmVsKys7XG4gIHZhciAkbmV4dFZhbGlkID0gJ3ZhbGlkJyArICRpdC5sZXZlbDtcbiAgaWYgKChpdC5vcHRzLnN0cmljdEtleXdvcmRzID8gdHlwZW9mICRzY2hlbWEgPT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMoJHNjaGVtYSkubGVuZ3RoID4gMCA6IGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJHNjaGVtYSwgaXQuUlVMRVMuYWxsKSkpIHtcbiAgICAkaXQuc2NoZW1hID0gJHNjaGVtYTtcbiAgICAkaXQuc2NoZW1hUGF0aCA9ICRzY2hlbWFQYXRoO1xuICAgICRpdC5lcnJTY2hlbWFQYXRoID0gJGVyclNjaGVtYVBhdGg7XG4gICAgb3V0ICs9ICcgdmFyICcgKyAoJGVycnMpICsgJyA9IGVycm9yczsgICc7XG4gICAgdmFyICR3YXNDb21wb3NpdGUgPSBpdC5jb21wb3NpdGVSdWxlO1xuICAgIGl0LmNvbXBvc2l0ZVJ1bGUgPSAkaXQuY29tcG9zaXRlUnVsZSA9IHRydWU7XG4gICAgJGl0LmNyZWF0ZUVycm9ycyA9IGZhbHNlO1xuICAgIHZhciAkYWxsRXJyb3JzT3B0aW9uO1xuICAgIGlmICgkaXQub3B0cy5hbGxFcnJvcnMpIHtcbiAgICAgICRhbGxFcnJvcnNPcHRpb24gPSAkaXQub3B0cy5hbGxFcnJvcnM7XG4gICAgICAkaXQub3B0cy5hbGxFcnJvcnMgPSBmYWxzZTtcbiAgICB9XG4gICAgb3V0ICs9ICcgJyArIChpdC52YWxpZGF0ZSgkaXQpKSArICcgJztcbiAgICAkaXQuY3JlYXRlRXJyb3JzID0gdHJ1ZTtcbiAgICBpZiAoJGFsbEVycm9yc09wdGlvbikgJGl0Lm9wdHMuYWxsRXJyb3JzID0gJGFsbEVycm9yc09wdGlvbjtcbiAgICBpdC5jb21wb3NpdGVSdWxlID0gJGl0LmNvbXBvc2l0ZVJ1bGUgPSAkd2FzQ29tcG9zaXRlO1xuICAgIG91dCArPSAnIGlmICgnICsgKCRuZXh0VmFsaWQpICsgJykgeyAgICc7XG4gICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICAgIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ25vdCcpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHt9ICc7XG4gICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgTk9UIGJlIHZhbGlkXFwnICc7XG4gICAgICB9XG4gICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyB9ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgfVxuICAgIHZhciBfX2VyciA9IG91dDtcbiAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgfSBlbHNlIHsgIGVycm9ycyA9ICcgKyAoJGVycnMpICsgJzsgaWYgKHZFcnJvcnMgIT09IG51bGwpIHsgaWYgKCcgKyAoJGVycnMpICsgJykgdkVycm9ycy5sZW5ndGggPSAnICsgKCRlcnJzKSArICc7IGVsc2UgdkVycm9ycyA9IG51bGw7IH0gJztcbiAgICBpZiAoaXQub3B0cy5hbGxFcnJvcnMpIHtcbiAgICAgIG91dCArPSAnIH0gJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgIHZhciBlcnIgPSAgICc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgnbm90JykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczoge30gJztcbiAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBOT1QgYmUgdmFsaWRcXCcgJztcbiAgICAgIH1cbiAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIH0gJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcge30gJztcbiAgICB9XG4gICAgb3V0ICs9ICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgb3V0ICs9ICcgaWYgKGZhbHNlKSB7ICc7XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX29uZU9mKGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkdmFsaWQgPSAndmFsaWQnICsgJGx2bDtcbiAgdmFyICRlcnJzID0gJ2VycnNfXycgKyAkbHZsO1xuICB2YXIgJGl0ID0gaXQudXRpbC5jb3B5KGl0KTtcbiAgdmFyICRjbG9zaW5nQnJhY2VzID0gJyc7XG4gICRpdC5sZXZlbCsrO1xuICB2YXIgJG5leHRWYWxpZCA9ICd2YWxpZCcgKyAkaXQubGV2ZWw7XG4gIHZhciAkY3VycmVudEJhc2VJZCA9ICRpdC5iYXNlSWQsXG4gICAgJHByZXZWYWxpZCA9ICdwcmV2VmFsaWQnICsgJGx2bCxcbiAgICAkcGFzc2luZ1NjaGVtYXMgPSAncGFzc2luZ1NjaGVtYXMnICsgJGx2bDtcbiAgb3V0ICs9ICd2YXIgJyArICgkZXJycykgKyAnID0gZXJyb3JzICwgJyArICgkcHJldlZhbGlkKSArICcgPSBmYWxzZSAsICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZSAsICcgKyAoJHBhc3NpbmdTY2hlbWFzKSArICcgPSBudWxsOyAnO1xuICB2YXIgJHdhc0NvbXBvc2l0ZSA9IGl0LmNvbXBvc2l0ZVJ1bGU7XG4gIGl0LmNvbXBvc2l0ZVJ1bGUgPSAkaXQuY29tcG9zaXRlUnVsZSA9IHRydWU7XG4gIHZhciBhcnIxID0gJHNjaGVtYTtcbiAgaWYgKGFycjEpIHtcbiAgICB2YXIgJHNjaCwgJGkgPSAtMSxcbiAgICAgIGwxID0gYXJyMS5sZW5ndGggLSAxO1xuICAgIHdoaWxlICgkaSA8IGwxKSB7XG4gICAgICAkc2NoID0gYXJyMVskaSArPSAxXTtcbiAgICAgIGlmICgoaXQub3B0cy5zdHJpY3RLZXl3b3JkcyA/IHR5cGVvZiAkc2NoID09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKCRzY2gpLmxlbmd0aCA+IDAgOiBpdC51dGlsLnNjaGVtYUhhc1J1bGVzKCRzY2gsIGl0LlJVTEVTLmFsbCkpKSB7XG4gICAgICAgICRpdC5zY2hlbWEgPSAkc2NoO1xuICAgICAgICAkaXQuc2NoZW1hUGF0aCA9ICRzY2hlbWFQYXRoICsgJ1snICsgJGkgKyAnXSc7XG4gICAgICAgICRpdC5lcnJTY2hlbWFQYXRoID0gJGVyclNjaGVtYVBhdGggKyAnLycgKyAkaTtcbiAgICAgICAgb3V0ICs9ICcgICcgKyAoaXQudmFsaWRhdGUoJGl0KSkgKyAnICc7XG4gICAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnIHZhciAnICsgKCRuZXh0VmFsaWQpICsgJyA9IHRydWU7ICc7XG4gICAgICB9XG4gICAgICBpZiAoJGkpIHtcbiAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJG5leHRWYWxpZCkgKyAnICYmICcgKyAoJHByZXZWYWxpZCkgKyAnKSB7ICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZTsgJyArICgkcGFzc2luZ1NjaGVtYXMpICsgJyA9IFsnICsgKCRwYXNzaW5nU2NoZW1hcykgKyAnLCAnICsgKCRpKSArICddOyB9IGVsc2UgeyAnO1xuICAgICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyBpZiAoJyArICgkbmV4dFZhbGlkKSArICcpIHsgJyArICgkdmFsaWQpICsgJyA9ICcgKyAoJHByZXZWYWxpZCkgKyAnID0gdHJ1ZTsgJyArICgkcGFzc2luZ1NjaGVtYXMpICsgJyA9ICcgKyAoJGkpICsgJzsgfSc7XG4gICAgfVxuICB9XG4gIGl0LmNvbXBvc2l0ZVJ1bGUgPSAkaXQuY29tcG9zaXRlUnVsZSA9ICR3YXNDb21wb3NpdGU7XG4gIG91dCArPSAnJyArICgkY2xvc2luZ0JyYWNlcykgKyAnaWYgKCEnICsgKCR2YWxpZCkgKyAnKSB7ICAgdmFyIGVyciA9ICAgJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ29uZU9mJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBwYXNzaW5nU2NoZW1hczogJyArICgkcGFzc2luZ1NjaGVtYXMpICsgJyB9ICc7XG4gICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBtYXRjaCBleGFjdGx5IG9uZSBzY2hlbWEgaW4gb25lT2ZcXCcgJztcbiAgICB9XG4gICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgfSAnO1xuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIHt9ICc7XG4gIH1cbiAgb3V0ICs9ICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IodkVycm9ycyk7ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IHZFcnJvcnM7IHJldHVybiBmYWxzZTsgJztcbiAgICB9XG4gIH1cbiAgb3V0ICs9ICd9IGVsc2UgeyAgZXJyb3JzID0gJyArICgkZXJycykgKyAnOyBpZiAodkVycm9ycyAhPT0gbnVsbCkgeyBpZiAoJyArICgkZXJycykgKyAnKSB2RXJyb3JzLmxlbmd0aCA9ICcgKyAoJGVycnMpICsgJzsgZWxzZSB2RXJyb3JzID0gbnVsbDsgfSc7XG4gIGlmIChpdC5vcHRzLmFsbEVycm9ycykge1xuICAgIG91dCArPSAnIH0gJztcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9wYXR0ZXJuKGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkaXNEYXRhID0gaXQub3B0cy4kZGF0YSAmJiAkc2NoZW1hICYmICRzY2hlbWEuJGRhdGEsXG4gICAgJHNjaGVtYVZhbHVlO1xuICBpZiAoJGlzRGF0YSkge1xuICAgIG91dCArPSAnIHZhciBzY2hlbWEnICsgKCRsdmwpICsgJyA9ICcgKyAoaXQudXRpbC5nZXREYXRhKCRzY2hlbWEuJGRhdGEsICRkYXRhTHZsLCBpdC5kYXRhUGF0aEFycikpICsgJzsgJztcbiAgICAkc2NoZW1hVmFsdWUgPSAnc2NoZW1hJyArICRsdmw7XG4gIH0gZWxzZSB7XG4gICAgJHNjaGVtYVZhbHVlID0gJHNjaGVtYTtcbiAgfVxuICB2YXIgJHJlZ2V4cCA9ICRpc0RhdGEgPyAnKG5ldyBSZWdFeHAoJyArICRzY2hlbWFWYWx1ZSArICcpKScgOiBpdC51c2VQYXR0ZXJuKCRzY2hlbWEpO1xuICBvdXQgKz0gJ2lmICggJztcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyAoJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9IFxcJ3N0cmluZ1xcJykgfHwgJztcbiAgfVxuICBvdXQgKz0gJyAhJyArICgkcmVnZXhwKSArICcudGVzdCgnICsgKCRkYXRhKSArICcpICkgeyAgICc7XG4gIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgncGF0dGVybicpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgcGF0dGVybjogICc7XG4gICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgIG91dCArPSAnJyArICgkc2NoZW1hVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJycgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkc2NoZW1hKSk7XG4gICAgfVxuICAgIG91dCArPSAnICB9ICc7XG4gICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBtYXRjaCBwYXR0ZXJuIFwiJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAnXFwnICsgJyArICgkc2NoZW1hVmFsdWUpICsgJyArIFxcJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJHNjaGVtYSkpO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICdcIlxcJyAnO1xuICAgIH1cbiAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICBvdXQgKz0gJyAsIHNjaGVtYTogICc7XG4gICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICBvdXQgKz0gJ3ZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJHNjaGVtYSkpO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgICAgICAgICAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgfSAnO1xuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIHt9ICc7XG4gIH1cbiAgdmFyIF9fZXJyID0gb3V0O1xuICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChpdC5hc3luYykge1xuICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgfVxuICBvdXQgKz0gJ30gJztcbiAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICBvdXQgKz0gJyBlbHNlIHsgJztcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9wcm9wZXJ0aWVzKGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkZXJycyA9ICdlcnJzX18nICsgJGx2bDtcbiAgdmFyICRpdCA9IGl0LnV0aWwuY29weShpdCk7XG4gIHZhciAkY2xvc2luZ0JyYWNlcyA9ICcnO1xuICAkaXQubGV2ZWwrKztcbiAgdmFyICRuZXh0VmFsaWQgPSAndmFsaWQnICsgJGl0LmxldmVsO1xuICB2YXIgJGtleSA9ICdrZXknICsgJGx2bCxcbiAgICAkaWR4ID0gJ2lkeCcgKyAkbHZsLFxuICAgICRkYXRhTnh0ID0gJGl0LmRhdGFMZXZlbCA9IGl0LmRhdGFMZXZlbCArIDEsXG4gICAgJG5leHREYXRhID0gJ2RhdGEnICsgJGRhdGFOeHQsXG4gICAgJGRhdGFQcm9wZXJ0aWVzID0gJ2RhdGFQcm9wZXJ0aWVzJyArICRsdmw7XG4gIHZhciAkc2NoZW1hS2V5cyA9IE9iamVjdC5rZXlzKCRzY2hlbWEgfHwge30pLFxuICAgICRwUHJvcGVydGllcyA9IGl0LnNjaGVtYS5wYXR0ZXJuUHJvcGVydGllcyB8fCB7fSxcbiAgICAkcFByb3BlcnR5S2V5cyA9IE9iamVjdC5rZXlzKCRwUHJvcGVydGllcyksXG4gICAgJGFQcm9wZXJ0aWVzID0gaXQuc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLFxuICAgICRzb21lUHJvcGVydGllcyA9ICRzY2hlbWFLZXlzLmxlbmd0aCB8fCAkcFByb3BlcnR5S2V5cy5sZW5ndGgsXG4gICAgJG5vQWRkaXRpb25hbCA9ICRhUHJvcGVydGllcyA9PT0gZmFsc2UsXG4gICAgJGFkZGl0aW9uYWxJc1NjaGVtYSA9IHR5cGVvZiAkYVByb3BlcnRpZXMgPT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMoJGFQcm9wZXJ0aWVzKS5sZW5ndGgsXG4gICAgJHJlbW92ZUFkZGl0aW9uYWwgPSBpdC5vcHRzLnJlbW92ZUFkZGl0aW9uYWwsXG4gICAgJGNoZWNrQWRkaXRpb25hbCA9ICRub0FkZGl0aW9uYWwgfHwgJGFkZGl0aW9uYWxJc1NjaGVtYSB8fCAkcmVtb3ZlQWRkaXRpb25hbCxcbiAgICAkb3duUHJvcGVydGllcyA9IGl0Lm9wdHMub3duUHJvcGVydGllcyxcbiAgICAkY3VycmVudEJhc2VJZCA9IGl0LmJhc2VJZDtcbiAgdmFyICRyZXF1aXJlZCA9IGl0LnNjaGVtYS5yZXF1aXJlZDtcbiAgaWYgKCRyZXF1aXJlZCAmJiAhKGl0Lm9wdHMuJGRhdGEgJiYgJHJlcXVpcmVkLiRkYXRhKSAmJiAkcmVxdWlyZWQubGVuZ3RoIDwgaXQub3B0cy5sb29wUmVxdWlyZWQpIHZhciAkcmVxdWlyZWRIYXNoID0gaXQudXRpbC50b0hhc2goJHJlcXVpcmVkKTtcbiAgb3V0ICs9ICd2YXIgJyArICgkZXJycykgKyAnID0gZXJyb3JzO3ZhciAnICsgKCRuZXh0VmFsaWQpICsgJyA9IHRydWU7JztcbiAgaWYgKCRvd25Qcm9wZXJ0aWVzKSB7XG4gICAgb3V0ICs9ICcgdmFyICcgKyAoJGRhdGFQcm9wZXJ0aWVzKSArICcgPSB1bmRlZmluZWQ7JztcbiAgfVxuICBpZiAoJGNoZWNrQWRkaXRpb25hbCkge1xuICAgIGlmICgkb3duUHJvcGVydGllcykge1xuICAgICAgb3V0ICs9ICcgJyArICgkZGF0YVByb3BlcnRpZXMpICsgJyA9ICcgKyAoJGRhdGFQcm9wZXJ0aWVzKSArICcgfHwgT2JqZWN0LmtleXMoJyArICgkZGF0YSkgKyAnKTsgZm9yICh2YXIgJyArICgkaWR4KSArICc9MDsgJyArICgkaWR4KSArICc8JyArICgkZGF0YVByb3BlcnRpZXMpICsgJy5sZW5ndGg7ICcgKyAoJGlkeCkgKyAnKyspIHsgdmFyICcgKyAoJGtleSkgKyAnID0gJyArICgkZGF0YVByb3BlcnRpZXMpICsgJ1snICsgKCRpZHgpICsgJ107ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIGZvciAodmFyICcgKyAoJGtleSkgKyAnIGluICcgKyAoJGRhdGEpICsgJykgeyAnO1xuICAgIH1cbiAgICBpZiAoJHNvbWVQcm9wZXJ0aWVzKSB7XG4gICAgICBvdXQgKz0gJyB2YXIgaXNBZGRpdGlvbmFsJyArICgkbHZsKSArICcgPSAhKGZhbHNlICc7XG4gICAgICBpZiAoJHNjaGVtYUtleXMubGVuZ3RoKSB7XG4gICAgICAgIGlmICgkc2NoZW1hS2V5cy5sZW5ndGggPiA4KSB7XG4gICAgICAgICAgb3V0ICs9ICcgfHwgdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnLmhhc093blByb3BlcnR5KCcgKyAoJGtleSkgKyAnKSAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBhcnIxID0gJHNjaGVtYUtleXM7XG4gICAgICAgICAgaWYgKGFycjEpIHtcbiAgICAgICAgICAgIHZhciAkcHJvcGVydHlLZXksIGkxID0gLTEsXG4gICAgICAgICAgICAgIGwxID0gYXJyMS5sZW5ndGggLSAxO1xuICAgICAgICAgICAgd2hpbGUgKGkxIDwgbDEpIHtcbiAgICAgICAgICAgICAgJHByb3BlcnR5S2V5ID0gYXJyMVtpMSArPSAxXTtcbiAgICAgICAgICAgICAgb3V0ICs9ICcgfHwgJyArICgka2V5KSArICcgPT0gJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRwcm9wZXJ0eUtleSkpICsgJyAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCRwUHJvcGVydHlLZXlzLmxlbmd0aCkge1xuICAgICAgICB2YXIgYXJyMiA9ICRwUHJvcGVydHlLZXlzO1xuICAgICAgICBpZiAoYXJyMikge1xuICAgICAgICAgIHZhciAkcFByb3BlcnR5LCAkaSA9IC0xLFxuICAgICAgICAgICAgbDIgPSBhcnIyLmxlbmd0aCAtIDE7XG4gICAgICAgICAgd2hpbGUgKCRpIDwgbDIpIHtcbiAgICAgICAgICAgICRwUHJvcGVydHkgPSBhcnIyWyRpICs9IDFdO1xuICAgICAgICAgICAgb3V0ICs9ICcgfHwgJyArIChpdC51c2VQYXR0ZXJuKCRwUHJvcGVydHkpKSArICcudGVzdCgnICsgKCRrZXkpICsgJykgJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG91dCArPSAnICk7IGlmIChpc0FkZGl0aW9uYWwnICsgKCRsdmwpICsgJykgeyAnO1xuICAgIH1cbiAgICBpZiAoJHJlbW92ZUFkZGl0aW9uYWwgPT0gJ2FsbCcpIHtcbiAgICAgIG91dCArPSAnIGRlbGV0ZSAnICsgKCRkYXRhKSArICdbJyArICgka2V5KSArICddOyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgJGN1cnJlbnRFcnJvclBhdGggPSBpdC5lcnJvclBhdGg7XG4gICAgICB2YXIgJGFkZGl0aW9uYWxQcm9wZXJ0eSA9ICdcXCcgKyAnICsgJGtleSArICcgKyBcXCcnO1xuICAgICAgaWYgKGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSkge1xuICAgICAgICBpdC5lcnJvclBhdGggPSBpdC51dGlsLmdldFBhdGhFeHByKGl0LmVycm9yUGF0aCwgJGtleSwgaXQub3B0cy5qc29uUG9pbnRlcnMpO1xuICAgICAgfVxuICAgICAgaWYgKCRub0FkZGl0aW9uYWwpIHtcbiAgICAgICAgaWYgKCRyZW1vdmVBZGRpdGlvbmFsKSB7XG4gICAgICAgICAgb3V0ICs9ICcgZGVsZXRlICcgKyAoJGRhdGEpICsgJ1snICsgKCRrZXkpICsgJ107ICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcgJyArICgkbmV4dFZhbGlkKSArICcgPSBmYWxzZTsgJztcbiAgICAgICAgICB2YXIgJGN1cnJFcnJTY2hlbWFQYXRoID0gJGVyclNjaGVtYVBhdGg7XG4gICAgICAgICAgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy9hZGRpdGlvbmFsUHJvcGVydGllcyc7XG4gICAgICAgICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICAgICAgICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICAgICAgICAgIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ2FkZGl0aW9uYWxQcm9wZXJ0aWVzJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBhZGRpdGlvbmFsUHJvcGVydHk6IFxcJycgKyAoJGFkZGl0aW9uYWxQcm9wZXJ0eSkgKyAnXFwnIH0gJztcbiAgICAgICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJyc7XG4gICAgICAgICAgICAgIGlmIChpdC5vcHRzLl9lcnJvckRhdGFQYXRoUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJ2lzIGFuIGludmFsaWQgYWRkaXRpb25hbCBwcm9wZXJ0eSc7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICdzaG91bGQgTk9UIGhhdmUgYWRkaXRpb25hbCBwcm9wZXJ0aWVzJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBvdXQgKz0gJ1xcJyAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogZmFsc2UgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBfX2VyciA9IG91dDtcbiAgICAgICAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgICAgICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICAgICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgJGVyclNjaGVtYVBhdGggPSAkY3VyckVyclNjaGVtYVBhdGg7XG4gICAgICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgICAgIG91dCArPSAnIGJyZWFrOyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICgkYWRkaXRpb25hbElzU2NoZW1hKSB7XG4gICAgICAgIGlmICgkcmVtb3ZlQWRkaXRpb25hbCA9PSAnZmFpbGluZycpIHtcbiAgICAgICAgICBvdXQgKz0gJyB2YXIgJyArICgkZXJycykgKyAnID0gZXJyb3JzOyAgJztcbiAgICAgICAgICB2YXIgJHdhc0NvbXBvc2l0ZSA9IGl0LmNvbXBvc2l0ZVJ1bGU7XG4gICAgICAgICAgaXQuY29tcG9zaXRlUnVsZSA9ICRpdC5jb21wb3NpdGVSdWxlID0gdHJ1ZTtcbiAgICAgICAgICAkaXQuc2NoZW1hID0gJGFQcm9wZXJ0aWVzO1xuICAgICAgICAgICRpdC5zY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArICcuYWRkaXRpb25hbFByb3BlcnRpZXMnO1xuICAgICAgICAgICRpdC5lcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvYWRkaXRpb25hbFByb3BlcnRpZXMnO1xuICAgICAgICAgICRpdC5lcnJvclBhdGggPSBpdC5vcHRzLl9lcnJvckRhdGFQYXRoUHJvcGVydHkgPyBpdC5lcnJvclBhdGggOiBpdC51dGlsLmdldFBhdGhFeHByKGl0LmVycm9yUGF0aCwgJGtleSwgaXQub3B0cy5qc29uUG9pbnRlcnMpO1xuICAgICAgICAgIHZhciAkcGFzc0RhdGEgPSAkZGF0YSArICdbJyArICRrZXkgKyAnXSc7XG4gICAgICAgICAgJGl0LmRhdGFQYXRoQXJyWyRkYXRhTnh0XSA9ICRrZXk7XG4gICAgICAgICAgdmFyICRjb2RlID0gaXQudmFsaWRhdGUoJGl0KTtcbiAgICAgICAgICAkaXQuYmFzZUlkID0gJGN1cnJlbnRCYXNlSWQ7XG4gICAgICAgICAgaWYgKGl0LnV0aWwudmFyT2NjdXJlbmNlcygkY29kZSwgJG5leHREYXRhKSA8IDIpIHtcbiAgICAgICAgICAgIG91dCArPSAnICcgKyAoaXQudXRpbC52YXJSZXBsYWNlKCRjb2RlLCAkbmV4dERhdGEsICRwYXNzRGF0YSkpICsgJyAnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvdXQgKz0gJyB2YXIgJyArICgkbmV4dERhdGEpICsgJyA9ICcgKyAoJHBhc3NEYXRhKSArICc7ICcgKyAoJGNvZGUpICsgJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdXQgKz0gJyBpZiAoIScgKyAoJG5leHRWYWxpZCkgKyAnKSB7IGVycm9ycyA9ICcgKyAoJGVycnMpICsgJzsgaWYgKHZhbGlkYXRlLmVycm9ycyAhPT0gbnVsbCkgeyBpZiAoZXJyb3JzKSB2YWxpZGF0ZS5lcnJvcnMubGVuZ3RoID0gZXJyb3JzOyBlbHNlIHZhbGlkYXRlLmVycm9ycyA9IG51bGw7IH0gZGVsZXRlICcgKyAoJGRhdGEpICsgJ1snICsgKCRrZXkpICsgJ107IH0gICc7XG4gICAgICAgICAgaXQuY29tcG9zaXRlUnVsZSA9ICRpdC5jb21wb3NpdGVSdWxlID0gJHdhc0NvbXBvc2l0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAkaXQuc2NoZW1hID0gJGFQcm9wZXJ0aWVzO1xuICAgICAgICAgICRpdC5zY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArICcuYWRkaXRpb25hbFByb3BlcnRpZXMnO1xuICAgICAgICAgICRpdC5lcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvYWRkaXRpb25hbFByb3BlcnRpZXMnO1xuICAgICAgICAgICRpdC5lcnJvclBhdGggPSBpdC5vcHRzLl9lcnJvckRhdGFQYXRoUHJvcGVydHkgPyBpdC5lcnJvclBhdGggOiBpdC51dGlsLmdldFBhdGhFeHByKGl0LmVycm9yUGF0aCwgJGtleSwgaXQub3B0cy5qc29uUG9pbnRlcnMpO1xuICAgICAgICAgIHZhciAkcGFzc0RhdGEgPSAkZGF0YSArICdbJyArICRrZXkgKyAnXSc7XG4gICAgICAgICAgJGl0LmRhdGFQYXRoQXJyWyRkYXRhTnh0XSA9ICRrZXk7XG4gICAgICAgICAgdmFyICRjb2RlID0gaXQudmFsaWRhdGUoJGl0KTtcbiAgICAgICAgICAkaXQuYmFzZUlkID0gJGN1cnJlbnRCYXNlSWQ7XG4gICAgICAgICAgaWYgKGl0LnV0aWwudmFyT2NjdXJlbmNlcygkY29kZSwgJG5leHREYXRhKSA8IDIpIHtcbiAgICAgICAgICAgIG91dCArPSAnICcgKyAoaXQudXRpbC52YXJSZXBsYWNlKCRjb2RlLCAkbmV4dERhdGEsICRwYXNzRGF0YSkpICsgJyAnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvdXQgKz0gJyB2YXIgJyArICgkbmV4dERhdGEpICsgJyA9ICcgKyAoJHBhc3NEYXRhKSArICc7ICcgKyAoJGNvZGUpICsgJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgICAgb3V0ICs9ICcgaWYgKCEnICsgKCRuZXh0VmFsaWQpICsgJykgYnJlYWs7ICc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpdC5lcnJvclBhdGggPSAkY3VycmVudEVycm9yUGF0aDtcbiAgICB9XG4gICAgaWYgKCRzb21lUHJvcGVydGllcykge1xuICAgICAgb3V0ICs9ICcgfSAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9ICAnO1xuICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICBvdXQgKz0gJyBpZiAoJyArICgkbmV4dFZhbGlkKSArICcpIHsgJztcbiAgICAgICRjbG9zaW5nQnJhY2VzICs9ICd9JztcbiAgICB9XG4gIH1cbiAgdmFyICR1c2VEZWZhdWx0cyA9IGl0Lm9wdHMudXNlRGVmYXVsdHMgJiYgIWl0LmNvbXBvc2l0ZVJ1bGU7XG4gIGlmICgkc2NoZW1hS2V5cy5sZW5ndGgpIHtcbiAgICB2YXIgYXJyMyA9ICRzY2hlbWFLZXlzO1xuICAgIGlmIChhcnIzKSB7XG4gICAgICB2YXIgJHByb3BlcnR5S2V5LCBpMyA9IC0xLFxuICAgICAgICBsMyA9IGFycjMubGVuZ3RoIC0gMTtcbiAgICAgIHdoaWxlIChpMyA8IGwzKSB7XG4gICAgICAgICRwcm9wZXJ0eUtleSA9IGFycjNbaTMgKz0gMV07XG4gICAgICAgIHZhciAkc2NoID0gJHNjaGVtYVskcHJvcGVydHlLZXldO1xuICAgICAgICBpZiAoKGl0Lm9wdHMuc3RyaWN0S2V5d29yZHMgPyB0eXBlb2YgJHNjaCA9PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cygkc2NoKS5sZW5ndGggPiAwIDogaXQudXRpbC5zY2hlbWFIYXNSdWxlcygkc2NoLCBpdC5SVUxFUy5hbGwpKSkge1xuICAgICAgICAgIHZhciAkcHJvcCA9IGl0LnV0aWwuZ2V0UHJvcGVydHkoJHByb3BlcnR5S2V5KSxcbiAgICAgICAgICAgICRwYXNzRGF0YSA9ICRkYXRhICsgJHByb3AsXG4gICAgICAgICAgICAkaGFzRGVmYXVsdCA9ICR1c2VEZWZhdWx0cyAmJiAkc2NoLmRlZmF1bHQgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAkaXQuc2NoZW1hID0gJHNjaDtcbiAgICAgICAgICAkaXQuc2NoZW1hUGF0aCA9ICRzY2hlbWFQYXRoICsgJHByb3A7XG4gICAgICAgICAgJGl0LmVyclNjaGVtYVBhdGggPSAkZXJyU2NoZW1hUGF0aCArICcvJyArIGl0LnV0aWwuZXNjYXBlRnJhZ21lbnQoJHByb3BlcnR5S2V5KTtcbiAgICAgICAgICAkaXQuZXJyb3JQYXRoID0gaXQudXRpbC5nZXRQYXRoKGl0LmVycm9yUGF0aCwgJHByb3BlcnR5S2V5LCBpdC5vcHRzLmpzb25Qb2ludGVycyk7XG4gICAgICAgICAgJGl0LmRhdGFQYXRoQXJyWyRkYXRhTnh0XSA9IGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJHByb3BlcnR5S2V5KTtcbiAgICAgICAgICB2YXIgJGNvZGUgPSBpdC52YWxpZGF0ZSgkaXQpO1xuICAgICAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgICAgICBpZiAoaXQudXRpbC52YXJPY2N1cmVuY2VzKCRjb2RlLCAkbmV4dERhdGEpIDwgMikge1xuICAgICAgICAgICAgJGNvZGUgPSBpdC51dGlsLnZhclJlcGxhY2UoJGNvZGUsICRuZXh0RGF0YSwgJHBhc3NEYXRhKTtcbiAgICAgICAgICAgIHZhciAkdXNlRGF0YSA9ICRwYXNzRGF0YTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyICR1c2VEYXRhID0gJG5leHREYXRhO1xuICAgICAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJG5leHREYXRhKSArICcgPSAnICsgKCRwYXNzRGF0YSkgKyAnOyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoJGhhc0RlZmF1bHQpIHtcbiAgICAgICAgICAgIG91dCArPSAnICcgKyAoJGNvZGUpICsgJyAnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoJHJlcXVpcmVkSGFzaCAmJiAkcmVxdWlyZWRIYXNoWyRwcm9wZXJ0eUtleV0pIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcgaWYgKCAnICsgKCR1c2VEYXRhKSArICcgPT09IHVuZGVmaW5lZCAnO1xuICAgICAgICAgICAgICBpZiAoJG93blByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyB8fCAhIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCgnICsgKCRkYXRhKSArICcsIFxcJycgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJHByb3BlcnR5S2V5KSkgKyAnXFwnKSAnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG91dCArPSAnKSB7ICcgKyAoJG5leHRWYWxpZCkgKyAnID0gZmFsc2U7ICc7XG4gICAgICAgICAgICAgIHZhciAkY3VycmVudEVycm9yUGF0aCA9IGl0LmVycm9yUGF0aCxcbiAgICAgICAgICAgICAgICAkY3VyckVyclNjaGVtYVBhdGggPSAkZXJyU2NoZW1hUGF0aCxcbiAgICAgICAgICAgICAgICAkbWlzc2luZ1Byb3BlcnR5ID0gaXQudXRpbC5lc2NhcGVRdW90ZXMoJHByb3BlcnR5S2V5KTtcbiAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIGl0LmVycm9yUGF0aCA9IGl0LnV0aWwuZ2V0UGF0aCgkY3VycmVudEVycm9yUGF0aCwgJHByb3BlcnR5S2V5LCBpdC5vcHRzLmpzb25Qb2ludGVycyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy9yZXF1aXJlZCc7XG4gICAgICAgICAgICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAgICAgICAgICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgICAgICAgICAgIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgncmVxdWlyZWQnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IG1pc3NpbmdQcm9wZXJ0eTogXFwnJyArICgkbWlzc2luZ1Byb3BlcnR5KSArICdcXCcgfSAnO1xuICAgICAgICAgICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCcnO1xuICAgICAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgICAgICBvdXQgKz0gJ2lzIGEgcmVxdWlyZWQgcHJvcGVydHknO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICdzaG91bGQgaGF2ZSByZXF1aXJlZCBwcm9wZXJ0eSBcXFxcXFwnJyArICgkbWlzc2luZ1Byb3BlcnR5KSArICdcXFxcXFwnJztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIG91dCArPSAnXFwnICc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyB7fSAnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHZhciBfX2VyciA9IG91dDtcbiAgICAgICAgICAgICAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgICAgICAgICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgJGVyclNjaGVtYVBhdGggPSAkY3VyckVyclNjaGVtYVBhdGg7XG4gICAgICAgICAgICAgIGl0LmVycm9yUGF0aCA9ICRjdXJyZW50RXJyb3JQYXRoO1xuICAgICAgICAgICAgICBvdXQgKz0gJyB9IGVsc2UgeyAnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyBpZiAoICcgKyAoJHVzZURhdGEpICsgJyA9PT0gdW5kZWZpbmVkICc7XG4gICAgICAgICAgICAgICAgaWYgKCRvd25Qcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJyB8fCAhIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCgnICsgKCRkYXRhKSArICcsIFxcJycgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJHByb3BlcnR5S2V5KSkgKyAnXFwnKSAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvdXQgKz0gJykgeyAnICsgKCRuZXh0VmFsaWQpICsgJyA9IHRydWU7IH0gZWxzZSB7ICc7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJHVzZURhdGEpICsgJyAhPT0gdW5kZWZpbmVkICc7XG4gICAgICAgICAgICAgICAgaWYgKCRvd25Qcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJyAmJiAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCgnICsgKCRkYXRhKSArICcsIFxcJycgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJHByb3BlcnR5S2V5KSkgKyAnXFwnKSAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvdXQgKz0gJyApIHsgJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0ICs9ICcgJyArICgkY29kZSkgKyAnIH0gJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgICBvdXQgKz0gJyBpZiAoJyArICgkbmV4dFZhbGlkKSArICcpIHsgJztcbiAgICAgICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKCRwUHJvcGVydHlLZXlzLmxlbmd0aCkge1xuICAgIHZhciBhcnI0ID0gJHBQcm9wZXJ0eUtleXM7XG4gICAgaWYgKGFycjQpIHtcbiAgICAgIHZhciAkcFByb3BlcnR5LCBpNCA9IC0xLFxuICAgICAgICBsNCA9IGFycjQubGVuZ3RoIC0gMTtcbiAgICAgIHdoaWxlIChpNCA8IGw0KSB7XG4gICAgICAgICRwUHJvcGVydHkgPSBhcnI0W2k0ICs9IDFdO1xuICAgICAgICB2YXIgJHNjaCA9ICRwUHJvcGVydGllc1skcFByb3BlcnR5XTtcbiAgICAgICAgaWYgKChpdC5vcHRzLnN0cmljdEtleXdvcmRzID8gdHlwZW9mICRzY2ggPT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMoJHNjaCkubGVuZ3RoID4gMCA6IGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJHNjaCwgaXQuUlVMRVMuYWxsKSkpIHtcbiAgICAgICAgICAkaXQuc2NoZW1hID0gJHNjaDtcbiAgICAgICAgICAkaXQuc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyAnLnBhdHRlcm5Qcm9wZXJ0aWVzJyArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJHBQcm9wZXJ0eSk7XG4gICAgICAgICAgJGl0LmVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy9wYXR0ZXJuUHJvcGVydGllcy8nICsgaXQudXRpbC5lc2NhcGVGcmFnbWVudCgkcFByb3BlcnR5KTtcbiAgICAgICAgICBpZiAoJG93blByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIG91dCArPSAnICcgKyAoJGRhdGFQcm9wZXJ0aWVzKSArICcgPSAnICsgKCRkYXRhUHJvcGVydGllcykgKyAnIHx8IE9iamVjdC5rZXlzKCcgKyAoJGRhdGEpICsgJyk7IGZvciAodmFyICcgKyAoJGlkeCkgKyAnPTA7ICcgKyAoJGlkeCkgKyAnPCcgKyAoJGRhdGFQcm9wZXJ0aWVzKSArICcubGVuZ3RoOyAnICsgKCRpZHgpICsgJysrKSB7IHZhciAnICsgKCRrZXkpICsgJyA9ICcgKyAoJGRhdGFQcm9wZXJ0aWVzKSArICdbJyArICgkaWR4KSArICddOyAnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvdXQgKz0gJyBmb3IgKHZhciAnICsgKCRrZXkpICsgJyBpbiAnICsgKCRkYXRhKSArICcpIHsgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoaXQudXNlUGF0dGVybigkcFByb3BlcnR5KSkgKyAnLnRlc3QoJyArICgka2V5KSArICcpKSB7ICc7XG4gICAgICAgICAgJGl0LmVycm9yUGF0aCA9IGl0LnV0aWwuZ2V0UGF0aEV4cHIoaXQuZXJyb3JQYXRoLCAka2V5LCBpdC5vcHRzLmpzb25Qb2ludGVycyk7XG4gICAgICAgICAgdmFyICRwYXNzRGF0YSA9ICRkYXRhICsgJ1snICsgJGtleSArICddJztcbiAgICAgICAgICAkaXQuZGF0YVBhdGhBcnJbJGRhdGFOeHRdID0gJGtleTtcbiAgICAgICAgICB2YXIgJGNvZGUgPSBpdC52YWxpZGF0ZSgkaXQpO1xuICAgICAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgICAgICBpZiAoaXQudXRpbC52YXJPY2N1cmVuY2VzKCRjb2RlLCAkbmV4dERhdGEpIDwgMikge1xuICAgICAgICAgICAgb3V0ICs9ICcgJyArIChpdC51dGlsLnZhclJlcGxhY2UoJGNvZGUsICRuZXh0RGF0YSwgJHBhc3NEYXRhKSkgKyAnICc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnIHZhciAnICsgKCRuZXh0RGF0YSkgKyAnID0gJyArICgkcGFzc0RhdGEpICsgJzsgJyArICgkY29kZSkgKyAnICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyBpZiAoIScgKyAoJG5leHRWYWxpZCkgKyAnKSBicmVhazsgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyBlbHNlICcgKyAoJG5leHRWYWxpZCkgKyAnID0gdHJ1ZTsgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgfSAgJztcbiAgICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJG5leHRWYWxpZCkgKyAnKSB7ICc7XG4gICAgICAgICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgb3V0ICs9ICcgJyArICgkY2xvc2luZ0JyYWNlcykgKyAnIGlmICgnICsgKCRlcnJzKSArICcgPT0gZXJyb3JzKSB7JztcbiAgfVxuICBvdXQgPSBpdC51dGlsLmNsZWFuVXBDb2RlKG91dCk7XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX3Byb3BlcnR5TmFtZXMoaXQsICRrZXl3b3JkLCAkcnVsZVR5cGUpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICRlcnJzID0gJ2VycnNfXycgKyAkbHZsO1xuICB2YXIgJGl0ID0gaXQudXRpbC5jb3B5KGl0KTtcbiAgdmFyICRjbG9zaW5nQnJhY2VzID0gJyc7XG4gICRpdC5sZXZlbCsrO1xuICB2YXIgJG5leHRWYWxpZCA9ICd2YWxpZCcgKyAkaXQubGV2ZWw7XG4gIG91dCArPSAndmFyICcgKyAoJGVycnMpICsgJyA9IGVycm9yczsnO1xuICBpZiAoKGl0Lm9wdHMuc3RyaWN0S2V5d29yZHMgPyB0eXBlb2YgJHNjaGVtYSA9PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cygkc2NoZW1hKS5sZW5ndGggPiAwIDogaXQudXRpbC5zY2hlbWFIYXNSdWxlcygkc2NoZW1hLCBpdC5SVUxFUy5hbGwpKSkge1xuICAgICRpdC5zY2hlbWEgPSAkc2NoZW1hO1xuICAgICRpdC5zY2hlbWFQYXRoID0gJHNjaGVtYVBhdGg7XG4gICAgJGl0LmVyclNjaGVtYVBhdGggPSAkZXJyU2NoZW1hUGF0aDtcbiAgICB2YXIgJGtleSA9ICdrZXknICsgJGx2bCxcbiAgICAgICRpZHggPSAnaWR4JyArICRsdmwsXG4gICAgICAkaSA9ICdpJyArICRsdmwsXG4gICAgICAkaW52YWxpZE5hbWUgPSAnXFwnICsgJyArICRrZXkgKyAnICsgXFwnJyxcbiAgICAgICRkYXRhTnh0ID0gJGl0LmRhdGFMZXZlbCA9IGl0LmRhdGFMZXZlbCArIDEsXG4gICAgICAkbmV4dERhdGEgPSAnZGF0YScgKyAkZGF0YU54dCxcbiAgICAgICRkYXRhUHJvcGVydGllcyA9ICdkYXRhUHJvcGVydGllcycgKyAkbHZsLFxuICAgICAgJG93blByb3BlcnRpZXMgPSBpdC5vcHRzLm93blByb3BlcnRpZXMsXG4gICAgICAkY3VycmVudEJhc2VJZCA9IGl0LmJhc2VJZDtcbiAgICBpZiAoJG93blByb3BlcnRpZXMpIHtcbiAgICAgIG91dCArPSAnIHZhciAnICsgKCRkYXRhUHJvcGVydGllcykgKyAnID0gdW5kZWZpbmVkOyAnO1xuICAgIH1cbiAgICBpZiAoJG93blByb3BlcnRpZXMpIHtcbiAgICAgIG91dCArPSAnICcgKyAoJGRhdGFQcm9wZXJ0aWVzKSArICcgPSAnICsgKCRkYXRhUHJvcGVydGllcykgKyAnIHx8IE9iamVjdC5rZXlzKCcgKyAoJGRhdGEpICsgJyk7IGZvciAodmFyICcgKyAoJGlkeCkgKyAnPTA7ICcgKyAoJGlkeCkgKyAnPCcgKyAoJGRhdGFQcm9wZXJ0aWVzKSArICcubGVuZ3RoOyAnICsgKCRpZHgpICsgJysrKSB7IHZhciAnICsgKCRrZXkpICsgJyA9ICcgKyAoJGRhdGFQcm9wZXJ0aWVzKSArICdbJyArICgkaWR4KSArICddOyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyBmb3IgKHZhciAnICsgKCRrZXkpICsgJyBpbiAnICsgKCRkYXRhKSArICcpIHsgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgdmFyIHN0YXJ0RXJycycgKyAoJGx2bCkgKyAnID0gZXJyb3JzOyAnO1xuICAgIHZhciAkcGFzc0RhdGEgPSAka2V5O1xuICAgIHZhciAkd2FzQ29tcG9zaXRlID0gaXQuY29tcG9zaXRlUnVsZTtcbiAgICBpdC5jb21wb3NpdGVSdWxlID0gJGl0LmNvbXBvc2l0ZVJ1bGUgPSB0cnVlO1xuICAgIHZhciAkY29kZSA9IGl0LnZhbGlkYXRlKCRpdCk7XG4gICAgJGl0LmJhc2VJZCA9ICRjdXJyZW50QmFzZUlkO1xuICAgIGlmIChpdC51dGlsLnZhck9jY3VyZW5jZXMoJGNvZGUsICRuZXh0RGF0YSkgPCAyKSB7XG4gICAgICBvdXQgKz0gJyAnICsgKGl0LnV0aWwudmFyUmVwbGFjZSgkY29kZSwgJG5leHREYXRhLCAkcGFzc0RhdGEpKSArICcgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJG5leHREYXRhKSArICcgPSAnICsgKCRwYXNzRGF0YSkgKyAnOyAnICsgKCRjb2RlKSArICcgJztcbiAgICB9XG4gICAgaXQuY29tcG9zaXRlUnVsZSA9ICRpdC5jb21wb3NpdGVSdWxlID0gJHdhc0NvbXBvc2l0ZTtcbiAgICBvdXQgKz0gJyBpZiAoIScgKyAoJG5leHRWYWxpZCkgKyAnKSB7IGZvciAodmFyICcgKyAoJGkpICsgJz1zdGFydEVycnMnICsgKCRsdmwpICsgJzsgJyArICgkaSkgKyAnPGVycm9yczsgJyArICgkaSkgKyAnKyspIHsgdkVycm9yc1snICsgKCRpKSArICddLnByb3BlcnR5TmFtZSA9ICcgKyAoJGtleSkgKyAnOyB9ICAgdmFyIGVyciA9ICAgJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdwcm9wZXJ0eU5hbWVzJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBwcm9wZXJ0eU5hbWU6IFxcJycgKyAoJGludmFsaWROYW1lKSArICdcXCcgfSAnO1xuICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwncHJvcGVydHkgbmFtZSBcXFxcXFwnJyArICgkaW52YWxpZE5hbWUpICsgJ1xcXFxcXCcgaXMgaW52YWxpZFxcJyAnO1xuICAgICAgfVxuICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgfSAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB7fSAnO1xuICAgIH1cbiAgICBvdXQgKz0gJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKHZFcnJvcnMpOyAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gdkVycm9yczsgcmV0dXJuIGZhbHNlOyAnO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgb3V0ICs9ICcgYnJlYWs7ICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gfSc7XG4gIH1cbiAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICBvdXQgKz0gJyAnICsgKCRjbG9zaW5nQnJhY2VzKSArICcgaWYgKCcgKyAoJGVycnMpICsgJyA9PSBlcnJvcnMpIHsnO1xuICB9XG4gIG91dCA9IGl0LnV0aWwuY2xlYW5VcENvZGUob3V0KTtcbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfcmVxdWlyZWQoaXQsICRrZXl3b3JkLCAkcnVsZVR5cGUpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICR2YWxpZCA9ICd2YWxpZCcgKyAkbHZsO1xuICB2YXIgJGlzRGF0YSA9IGl0Lm9wdHMuJGRhdGEgJiYgJHNjaGVtYSAmJiAkc2NoZW1hLiRkYXRhLFxuICAgICRzY2hlbWFWYWx1ZTtcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyB2YXIgc2NoZW1hJyArICgkbHZsKSArICcgPSAnICsgKGl0LnV0aWwuZ2V0RGF0YSgkc2NoZW1hLiRkYXRhLCAkZGF0YUx2bCwgaXQuZGF0YVBhdGhBcnIpKSArICc7ICc7XG4gICAgJHNjaGVtYVZhbHVlID0gJ3NjaGVtYScgKyAkbHZsO1xuICB9IGVsc2Uge1xuICAgICRzY2hlbWFWYWx1ZSA9ICRzY2hlbWE7XG4gIH1cbiAgdmFyICR2U2NoZW1hID0gJ3NjaGVtYScgKyAkbHZsO1xuICBpZiAoISRpc0RhdGEpIHtcbiAgICBpZiAoJHNjaGVtYS5sZW5ndGggPCBpdC5vcHRzLmxvb3BSZXF1aXJlZCAmJiBpdC5zY2hlbWEucHJvcGVydGllcyAmJiBPYmplY3Qua2V5cyhpdC5zY2hlbWEucHJvcGVydGllcykubGVuZ3RoKSB7XG4gICAgICB2YXIgJHJlcXVpcmVkID0gW107XG4gICAgICB2YXIgYXJyMSA9ICRzY2hlbWE7XG4gICAgICBpZiAoYXJyMSkge1xuICAgICAgICB2YXIgJHByb3BlcnR5LCBpMSA9IC0xLFxuICAgICAgICAgIGwxID0gYXJyMS5sZW5ndGggLSAxO1xuICAgICAgICB3aGlsZSAoaTEgPCBsMSkge1xuICAgICAgICAgICRwcm9wZXJ0eSA9IGFycjFbaTEgKz0gMV07XG4gICAgICAgICAgdmFyICRwcm9wZXJ0eVNjaCA9IGl0LnNjaGVtYS5wcm9wZXJ0aWVzWyRwcm9wZXJ0eV07XG4gICAgICAgICAgaWYgKCEoJHByb3BlcnR5U2NoICYmIChpdC5vcHRzLnN0cmljdEtleXdvcmRzID8gdHlwZW9mICRwcm9wZXJ0eVNjaCA9PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cygkcHJvcGVydHlTY2gpLmxlbmd0aCA+IDAgOiBpdC51dGlsLnNjaGVtYUhhc1J1bGVzKCRwcm9wZXJ0eVNjaCwgaXQuUlVMRVMuYWxsKSkpKSB7XG4gICAgICAgICAgICAkcmVxdWlyZWRbJHJlcXVpcmVkLmxlbmd0aF0gPSAkcHJvcGVydHk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciAkcmVxdWlyZWQgPSAkc2NoZW1hO1xuICAgIH1cbiAgfVxuICBpZiAoJGlzRGF0YSB8fCAkcmVxdWlyZWQubGVuZ3RoKSB7XG4gICAgdmFyICRjdXJyZW50RXJyb3JQYXRoID0gaXQuZXJyb3JQYXRoLFxuICAgICAgJGxvb3BSZXF1aXJlZCA9ICRpc0RhdGEgfHwgJHJlcXVpcmVkLmxlbmd0aCA+PSBpdC5vcHRzLmxvb3BSZXF1aXJlZCxcbiAgICAgICRvd25Qcm9wZXJ0aWVzID0gaXQub3B0cy5vd25Qcm9wZXJ0aWVzO1xuICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICBvdXQgKz0gJyB2YXIgbWlzc2luZycgKyAoJGx2bCkgKyAnOyAnO1xuICAgICAgaWYgKCRsb29wUmVxdWlyZWQpIHtcbiAgICAgICAgaWYgKCEkaXNEYXRhKSB7XG4gICAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJHZTY2hlbWEpICsgJyA9IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJzsgJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgJGkgPSAnaScgKyAkbHZsLFxuICAgICAgICAgICRwcm9wZXJ0eVBhdGggPSAnc2NoZW1hJyArICRsdmwgKyAnWycgKyAkaSArICddJyxcbiAgICAgICAgICAkbWlzc2luZ1Byb3BlcnR5ID0gJ1xcJyArICcgKyAkcHJvcGVydHlQYXRoICsgJyArIFxcJyc7XG4gICAgICAgIGlmIChpdC5vcHRzLl9lcnJvckRhdGFQYXRoUHJvcGVydHkpIHtcbiAgICAgICAgICBpdC5lcnJvclBhdGggPSBpdC51dGlsLmdldFBhdGhFeHByKCRjdXJyZW50RXJyb3JQYXRoLCAkcHJvcGVydHlQYXRoLCBpdC5vcHRzLmpzb25Qb2ludGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJHZhbGlkKSArICcgPSB0cnVlOyAnO1xuICAgICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICAgIG91dCArPSAnIGlmIChzY2hlbWEnICsgKCRsdmwpICsgJyA9PT0gdW5kZWZpbmVkKSAnICsgKCR2YWxpZCkgKyAnID0gdHJ1ZTsgZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkoc2NoZW1hJyArICgkbHZsKSArICcpKSAnICsgKCR2YWxpZCkgKyAnID0gZmFsc2U7IGVsc2Ugeyc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgZm9yICh2YXIgJyArICgkaSkgKyAnID0gMDsgJyArICgkaSkgKyAnIDwgJyArICgkdlNjaGVtYSkgKyAnLmxlbmd0aDsgJyArICgkaSkgKyAnKyspIHsgJyArICgkdmFsaWQpICsgJyA9ICcgKyAoJGRhdGEpICsgJ1snICsgKCR2U2NoZW1hKSArICdbJyArICgkaSkgKyAnXV0gIT09IHVuZGVmaW5lZCAnO1xuICAgICAgICBpZiAoJG93blByb3BlcnRpZXMpIHtcbiAgICAgICAgICBvdXQgKz0gJyAmJiAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCgnICsgKCRkYXRhKSArICcsICcgKyAoJHZTY2hlbWEpICsgJ1snICsgKCRpKSArICddKSAnO1xuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnOyBpZiAoIScgKyAoJHZhbGlkKSArICcpIGJyZWFrOyB9ICc7XG4gICAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgICAgb3V0ICs9ICcgIH0gICc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgIGlmICghJyArICgkdmFsaWQpICsgJykgeyAgICc7XG4gICAgICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAgICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgICAgIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgncmVxdWlyZWQnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IG1pc3NpbmdQcm9wZXJ0eTogXFwnJyArICgkbWlzc2luZ1Byb3BlcnR5KSArICdcXCcgfSAnO1xuICAgICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCcnO1xuICAgICAgICAgICAgaWYgKGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICBvdXQgKz0gJ2lzIGEgcmVxdWlyZWQgcHJvcGVydHknO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICdzaG91bGQgaGF2ZSByZXF1aXJlZCBwcm9wZXJ0eSBcXFxcXFwnJyArICgkbWlzc2luZ1Byb3BlcnR5KSArICdcXFxcXFwnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dCArPSAnXFwnICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXQgKz0gJyB7fSAnO1xuICAgICAgICB9XG4gICAgICAgIHZhciBfX2VyciA9IG91dDtcbiAgICAgICAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgICAgICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgfSBlbHNlIHsgJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnIGlmICggJztcbiAgICAgICAgdmFyIGFycjIgPSAkcmVxdWlyZWQ7XG4gICAgICAgIGlmIChhcnIyKSB7XG4gICAgICAgICAgdmFyICRwcm9wZXJ0eUtleSwgJGkgPSAtMSxcbiAgICAgICAgICAgIGwyID0gYXJyMi5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlICgkaSA8IGwyKSB7XG4gICAgICAgICAgICAkcHJvcGVydHlLZXkgPSBhcnIyWyRpICs9IDFdO1xuICAgICAgICAgICAgaWYgKCRpKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHx8ICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgJHByb3AgPSBpdC51dGlsLmdldFByb3BlcnR5KCRwcm9wZXJ0eUtleSksXG4gICAgICAgICAgICAgICR1c2VEYXRhID0gJGRhdGEgKyAkcHJvcDtcbiAgICAgICAgICAgIG91dCArPSAnICggKCAnICsgKCR1c2VEYXRhKSArICcgPT09IHVuZGVmaW5lZCAnO1xuICAgICAgICAgICAgaWYgKCRvd25Qcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHx8ICEgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCcgKyAoJGRhdGEpICsgJywgXFwnJyArIChpdC51dGlsLmVzY2FwZVF1b3RlcygkcHJvcGVydHlLZXkpKSArICdcXCcpICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXQgKz0gJykgJiYgKG1pc3NpbmcnICsgKCRsdmwpICsgJyA9ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZyhpdC5vcHRzLmpzb25Qb2ludGVycyA/ICRwcm9wZXJ0eUtleSA6ICRwcm9wKSkgKyAnKSApICc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnKSB7ICAnO1xuICAgICAgICB2YXIgJHByb3BlcnR5UGF0aCA9ICdtaXNzaW5nJyArICRsdmwsXG4gICAgICAgICAgJG1pc3NpbmdQcm9wZXJ0eSA9ICdcXCcgKyAnICsgJHByb3BlcnR5UGF0aCArICcgKyBcXCcnO1xuICAgICAgICBpZiAoaXQub3B0cy5fZXJyb3JEYXRhUGF0aFByb3BlcnR5KSB7XG4gICAgICAgICAgaXQuZXJyb3JQYXRoID0gaXQub3B0cy5qc29uUG9pbnRlcnMgPyBpdC51dGlsLmdldFBhdGhFeHByKCRjdXJyZW50RXJyb3JQYXRoLCAkcHJvcGVydHlQYXRoLCB0cnVlKSA6ICRjdXJyZW50RXJyb3JQYXRoICsgJyArICcgKyAkcHJvcGVydHlQYXRoO1xuICAgICAgICB9XG4gICAgICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAgICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgICAgIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgncmVxdWlyZWQnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IG1pc3NpbmdQcm9wZXJ0eTogXFwnJyArICgkbWlzc2luZ1Byb3BlcnR5KSArICdcXCcgfSAnO1xuICAgICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCcnO1xuICAgICAgICAgICAgaWYgKGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICBvdXQgKz0gJ2lzIGEgcmVxdWlyZWQgcHJvcGVydHknO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICdzaG91bGQgaGF2ZSByZXF1aXJlZCBwcm9wZXJ0eSBcXFxcXFwnJyArICgkbWlzc2luZ1Byb3BlcnR5KSArICdcXFxcXFwnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dCArPSAnXFwnICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXQgKz0gJyB7fSAnO1xuICAgICAgICB9XG4gICAgICAgIHZhciBfX2VyciA9IG91dDtcbiAgICAgICAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgICAgICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgfSBlbHNlIHsgJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCRsb29wUmVxdWlyZWQpIHtcbiAgICAgICAgaWYgKCEkaXNEYXRhKSB7XG4gICAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJHZTY2hlbWEpICsgJyA9IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJzsgJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgJGkgPSAnaScgKyAkbHZsLFxuICAgICAgICAgICRwcm9wZXJ0eVBhdGggPSAnc2NoZW1hJyArICRsdmwgKyAnWycgKyAkaSArICddJyxcbiAgICAgICAgICAkbWlzc2luZ1Byb3BlcnR5ID0gJ1xcJyArICcgKyAkcHJvcGVydHlQYXRoICsgJyArIFxcJyc7XG4gICAgICAgIGlmIChpdC5vcHRzLl9lcnJvckRhdGFQYXRoUHJvcGVydHkpIHtcbiAgICAgICAgICBpdC5lcnJvclBhdGggPSBpdC51dGlsLmdldFBhdGhFeHByKCRjdXJyZW50RXJyb3JQYXRoLCAkcHJvcGVydHlQYXRoLCBpdC5vcHRzLmpzb25Qb2ludGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgICAgICBvdXQgKz0gJyBpZiAoJyArICgkdlNjaGVtYSkgKyAnICYmICFBcnJheS5pc0FycmF5KCcgKyAoJHZTY2hlbWEpICsgJykpIHsgIHZhciBlcnIgPSAgICc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgncmVxdWlyZWQnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IG1pc3NpbmdQcm9wZXJ0eTogXFwnJyArICgkbWlzc2luZ1Byb3BlcnR5KSArICdcXCcgfSAnO1xuICAgICAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnJztcbiAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIG91dCArPSAnaXMgYSByZXF1aXJlZCBwcm9wZXJ0eSc7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICdzaG91bGQgaGF2ZSByZXF1aXJlZCBwcm9wZXJ0eSBcXFxcXFwnJyArICgkbWlzc2luZ1Byb3BlcnR5KSArICdcXFxcXFwnJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBvdXQgKz0gJ1xcJyAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvdXQgKz0gJyB7fSAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdXQgKz0gJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyB9IGVsc2UgaWYgKCcgKyAoJHZTY2hlbWEpICsgJyAhPT0gdW5kZWZpbmVkKSB7ICc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgZm9yICh2YXIgJyArICgkaSkgKyAnID0gMDsgJyArICgkaSkgKyAnIDwgJyArICgkdlNjaGVtYSkgKyAnLmxlbmd0aDsgJyArICgkaSkgKyAnKyspIHsgaWYgKCcgKyAoJGRhdGEpICsgJ1snICsgKCR2U2NoZW1hKSArICdbJyArICgkaSkgKyAnXV0gPT09IHVuZGVmaW5lZCAnO1xuICAgICAgICBpZiAoJG93blByb3BlcnRpZXMpIHtcbiAgICAgICAgICBvdXQgKz0gJyB8fCAhIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCgnICsgKCRkYXRhKSArICcsICcgKyAoJHZTY2hlbWEpICsgJ1snICsgKCRpKSArICddKSAnO1xuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnKSB7ICB2YXIgZXJyID0gICAnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgncmVxdWlyZWQnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IG1pc3NpbmdQcm9wZXJ0eTogXFwnJyArICgkbWlzc2luZ1Byb3BlcnR5KSArICdcXCcgfSAnO1xuICAgICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCcnO1xuICAgICAgICAgICAgaWYgKGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICBvdXQgKz0gJ2lzIGEgcmVxdWlyZWQgcHJvcGVydHknO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICdzaG91bGQgaGF2ZSByZXF1aXJlZCBwcm9wZXJ0eSBcXFxcXFwnJyArICgkbWlzc2luZ1Byb3BlcnR5KSArICdcXFxcXFwnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dCArPSAnXFwnICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXQgKz0gJyB7fSAnO1xuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7IH0gfSAnO1xuICAgICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICAgIG91dCArPSAnICB9ICAnO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgYXJyMyA9ICRyZXF1aXJlZDtcbiAgICAgICAgaWYgKGFycjMpIHtcbiAgICAgICAgICB2YXIgJHByb3BlcnR5S2V5LCBpMyA9IC0xLFxuICAgICAgICAgICAgbDMgPSBhcnIzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgd2hpbGUgKGkzIDwgbDMpIHtcbiAgICAgICAgICAgICRwcm9wZXJ0eUtleSA9IGFycjNbaTMgKz0gMV07XG4gICAgICAgICAgICB2YXIgJHByb3AgPSBpdC51dGlsLmdldFByb3BlcnR5KCRwcm9wZXJ0eUtleSksXG4gICAgICAgICAgICAgICRtaXNzaW5nUHJvcGVydHkgPSBpdC51dGlsLmVzY2FwZVF1b3RlcygkcHJvcGVydHlLZXkpLFxuICAgICAgICAgICAgICAkdXNlRGF0YSA9ICRkYXRhICsgJHByb3A7XG4gICAgICAgICAgICBpZiAoaXQub3B0cy5fZXJyb3JEYXRhUGF0aFByb3BlcnR5KSB7XG4gICAgICAgICAgICAgIGl0LmVycm9yUGF0aCA9IGl0LnV0aWwuZ2V0UGF0aCgkY3VycmVudEVycm9yUGF0aCwgJHByb3BlcnR5S2V5LCBpdC5vcHRzLmpzb25Qb2ludGVycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXQgKz0gJyBpZiAoICcgKyAoJHVzZURhdGEpICsgJyA9PT0gdW5kZWZpbmVkICc7XG4gICAgICAgICAgICBpZiAoJG93blByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcgfHwgISBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoJyArICgkZGF0YSkgKyAnLCBcXCcnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRwcm9wZXJ0eUtleSkpICsgJ1xcJykgJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dCArPSAnKSB7ICB2YXIgZXJyID0gICAnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdyZXF1aXJlZCcpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgbWlzc2luZ1Byb3BlcnR5OiBcXCcnICsgKCRtaXNzaW5nUHJvcGVydHkpICsgJ1xcJyB9ICc7XG4gICAgICAgICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnJztcbiAgICAgICAgICAgICAgICBpZiAoaXQub3B0cy5fZXJyb3JEYXRhUGF0aFByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJ2lzIGEgcmVxdWlyZWQgcHJvcGVydHknO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJ3Nob3VsZCBoYXZlIHJlcXVpcmVkIHByb3BlcnR5IFxcXFxcXCcnICsgKCRtaXNzaW5nUHJvcGVydHkpICsgJ1xcXFxcXCcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvdXQgKz0gJ1xcJyAnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXQgKz0gJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyB9ICc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGl0LmVycm9yUGF0aCA9ICRjdXJyZW50RXJyb3JQYXRoO1xuICB9IGVsc2UgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICBvdXQgKz0gJyBpZiAodHJ1ZSkgeyc7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfdW5pcXVlSXRlbXMoaXQsICRrZXl3b3JkLCAkcnVsZVR5cGUpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICR2YWxpZCA9ICd2YWxpZCcgKyAkbHZsO1xuICB2YXIgJGlzRGF0YSA9IGl0Lm9wdHMuJGRhdGEgJiYgJHNjaGVtYSAmJiAkc2NoZW1hLiRkYXRhLFxuICAgICRzY2hlbWFWYWx1ZTtcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyB2YXIgc2NoZW1hJyArICgkbHZsKSArICcgPSAnICsgKGl0LnV0aWwuZ2V0RGF0YSgkc2NoZW1hLiRkYXRhLCAkZGF0YUx2bCwgaXQuZGF0YVBhdGhBcnIpKSArICc7ICc7XG4gICAgJHNjaGVtYVZhbHVlID0gJ3NjaGVtYScgKyAkbHZsO1xuICB9IGVsc2Uge1xuICAgICRzY2hlbWFWYWx1ZSA9ICRzY2hlbWE7XG4gIH1cbiAgaWYgKCgkc2NoZW1hIHx8ICRpc0RhdGEpICYmIGl0Lm9wdHMudW5pcXVlSXRlbXMgIT09IGZhbHNlKSB7XG4gICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgIG91dCArPSAnIHZhciAnICsgKCR2YWxpZCkgKyAnOyBpZiAoJyArICgkc2NoZW1hVmFsdWUpICsgJyA9PT0gZmFsc2UgfHwgJyArICgkc2NoZW1hVmFsdWUpICsgJyA9PT0gdW5kZWZpbmVkKSAnICsgKCR2YWxpZCkgKyAnID0gdHJ1ZTsgZWxzZSBpZiAodHlwZW9mICcgKyAoJHNjaGVtYVZhbHVlKSArICcgIT0gXFwnYm9vbGVhblxcJykgJyArICgkdmFsaWQpICsgJyA9IGZhbHNlOyBlbHNlIHsgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgdmFyIGkgPSAnICsgKCRkYXRhKSArICcubGVuZ3RoICwgJyArICgkdmFsaWQpICsgJyA9IHRydWUgLCBqOyBpZiAoaSA+IDEpIHsgJztcbiAgICB2YXIgJGl0ZW1UeXBlID0gaXQuc2NoZW1hLml0ZW1zICYmIGl0LnNjaGVtYS5pdGVtcy50eXBlLFxuICAgICAgJHR5cGVJc0FycmF5ID0gQXJyYXkuaXNBcnJheSgkaXRlbVR5cGUpO1xuICAgIGlmICghJGl0ZW1UeXBlIHx8ICRpdGVtVHlwZSA9PSAnb2JqZWN0JyB8fCAkaXRlbVR5cGUgPT0gJ2FycmF5JyB8fCAoJHR5cGVJc0FycmF5ICYmICgkaXRlbVR5cGUuaW5kZXhPZignb2JqZWN0JykgPj0gMCB8fCAkaXRlbVR5cGUuaW5kZXhPZignYXJyYXknKSA+PSAwKSkpIHtcbiAgICAgIG91dCArPSAnIG91dGVyOiBmb3IgKDtpLS07KSB7IGZvciAoaiA9IGk7IGotLTspIHsgaWYgKGVxdWFsKCcgKyAoJGRhdGEpICsgJ1tpXSwgJyArICgkZGF0YSkgKyAnW2pdKSkgeyAnICsgKCR2YWxpZCkgKyAnID0gZmFsc2U7IGJyZWFrIG91dGVyOyB9IH0gfSAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YXIgaXRlbUluZGljZXMgPSB7fSwgaXRlbTsgZm9yICg7aS0tOykgeyB2YXIgaXRlbSA9ICcgKyAoJGRhdGEpICsgJ1tpXTsgJztcbiAgICAgIHZhciAkbWV0aG9kID0gJ2NoZWNrRGF0YVR5cGUnICsgKCR0eXBlSXNBcnJheSA/ICdzJyA6ICcnKTtcbiAgICAgIG91dCArPSAnIGlmICgnICsgKGl0LnV0aWxbJG1ldGhvZF0oJGl0ZW1UeXBlLCAnaXRlbScsIHRydWUpKSArICcpIGNvbnRpbnVlOyAnO1xuICAgICAgaWYgKCR0eXBlSXNBcnJheSkge1xuICAgICAgICBvdXQgKz0gJyBpZiAodHlwZW9mIGl0ZW0gPT0gXFwnc3RyaW5nXFwnKSBpdGVtID0gXFwnXCJcXCcgKyBpdGVtOyAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgaWYgKHR5cGVvZiBpdGVtSW5kaWNlc1tpdGVtXSA9PSBcXCdudW1iZXJcXCcpIHsgJyArICgkdmFsaWQpICsgJyA9IGZhbHNlOyBqID0gaXRlbUluZGljZXNbaXRlbV07IGJyZWFrOyB9IGl0ZW1JbmRpY2VzW2l0ZW1dID0gaTsgfSAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9ICc7XG4gICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgIG91dCArPSAnICB9ICAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyBpZiAoIScgKyAoJHZhbGlkKSArICcpIHsgICAnO1xuICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCd1bmlxdWVJdGVtcycpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgaTogaSwgajogaiB9ICc7XG4gICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgTk9UIGhhdmUgZHVwbGljYXRlIGl0ZW1zIChpdGVtcyAjIyBcXCcgKyBqICsgXFwnIGFuZCBcXCcgKyBpICsgXFwnIGFyZSBpZGVudGljYWwpXFwnICc7XG4gICAgICB9XG4gICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgIG91dCArPSAnICwgc2NoZW1hOiAgJztcbiAgICAgICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgICAgICBvdXQgKz0gJ3ZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnJyArICgkc2NoZW1hKTtcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJyAgICAgICAgICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgfSAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB7fSAnO1xuICAgIH1cbiAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gJztcbiAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgb3V0ICs9ICcgZWxzZSB7ICc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICBvdXQgKz0gJyBpZiAodHJ1ZSkgeyAnO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vL2FsbCByZXF1aXJlcyBtdXN0IGJlIGV4cGxpY2l0IGJlY2F1c2UgYnJvd3NlcmlmeSB3b24ndCB3b3JrIHdpdGggZHluYW1pYyByZXF1aXJlc1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICckcmVmJzogcmVxdWlyZSgnLi9yZWYnKSxcbiAgYWxsT2Y6IHJlcXVpcmUoJy4vYWxsT2YnKSxcbiAgYW55T2Y6IHJlcXVpcmUoJy4vYW55T2YnKSxcbiAgJyRjb21tZW50JzogcmVxdWlyZSgnLi9jb21tZW50JyksXG4gIGNvbnN0OiByZXF1aXJlKCcuL2NvbnN0JyksXG4gIGNvbnRhaW5zOiByZXF1aXJlKCcuL2NvbnRhaW5zJyksXG4gIGRlcGVuZGVuY2llczogcmVxdWlyZSgnLi9kZXBlbmRlbmNpZXMnKSxcbiAgJ2VudW0nOiByZXF1aXJlKCcuL2VudW0nKSxcbiAgZm9ybWF0OiByZXF1aXJlKCcuL2Zvcm1hdCcpLFxuICAnaWYnOiByZXF1aXJlKCcuL2lmJyksXG4gIGl0ZW1zOiByZXF1aXJlKCcuL2l0ZW1zJyksXG4gIG1heGltdW06IHJlcXVpcmUoJy4vX2xpbWl0JyksXG4gIG1pbmltdW06IHJlcXVpcmUoJy4vX2xpbWl0JyksXG4gIG1heEl0ZW1zOiByZXF1aXJlKCcuL19saW1pdEl0ZW1zJyksXG4gIG1pbkl0ZW1zOiByZXF1aXJlKCcuL19saW1pdEl0ZW1zJyksXG4gIG1heExlbmd0aDogcmVxdWlyZSgnLi9fbGltaXRMZW5ndGgnKSxcbiAgbWluTGVuZ3RoOiByZXF1aXJlKCcuL19saW1pdExlbmd0aCcpLFxuICBtYXhQcm9wZXJ0aWVzOiByZXF1aXJlKCcuL19saW1pdFByb3BlcnRpZXMnKSxcbiAgbWluUHJvcGVydGllczogcmVxdWlyZSgnLi9fbGltaXRQcm9wZXJ0aWVzJyksXG4gIG11bHRpcGxlT2Y6IHJlcXVpcmUoJy4vbXVsdGlwbGVPZicpLFxuICBub3Q6IHJlcXVpcmUoJy4vbm90JyksXG4gIG9uZU9mOiByZXF1aXJlKCcuL29uZU9mJyksXG4gIHBhdHRlcm46IHJlcXVpcmUoJy4vcGF0dGVybicpLFxuICBwcm9wZXJ0aWVzOiByZXF1aXJlKCcuL3Byb3BlcnRpZXMnKSxcbiAgcHJvcGVydHlOYW1lczogcmVxdWlyZSgnLi9wcm9wZXJ0eU5hbWVzJyksXG4gIHJlcXVpcmVkOiByZXF1aXJlKCcuL3JlcXVpcmVkJyksXG4gIHVuaXF1ZUl0ZW1zOiByZXF1aXJlKCcuL3VuaXF1ZUl0ZW1zJyksXG4gIHZhbGlkYXRlOiByZXF1aXJlKCcuL3ZhbGlkYXRlJylcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBydWxlTW9kdWxlcyA9IHJlcXVpcmUoJy4uL2RvdGpzJylcbiAgLCB0b0hhc2ggPSByZXF1aXJlKCcuL3V0aWwnKS50b0hhc2g7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcnVsZXMoKSB7XG4gIHZhciBSVUxFUyA9IFtcbiAgICB7IHR5cGU6ICdudW1iZXInLFxuICAgICAgcnVsZXM6IFsgeyAnbWF4aW11bSc6IFsnZXhjbHVzaXZlTWF4aW11bSddIH0sXG4gICAgICAgICAgICAgICB7ICdtaW5pbXVtJzogWydleGNsdXNpdmVNaW5pbXVtJ10gfSwgJ211bHRpcGxlT2YnLCAnZm9ybWF0J10gfSxcbiAgICB7IHR5cGU6ICdzdHJpbmcnLFxuICAgICAgcnVsZXM6IFsgJ21heExlbmd0aCcsICdtaW5MZW5ndGgnLCAncGF0dGVybicsICdmb3JtYXQnIF0gfSxcbiAgICB7IHR5cGU6ICdhcnJheScsXG4gICAgICBydWxlczogWyAnbWF4SXRlbXMnLCAnbWluSXRlbXMnLCAnaXRlbXMnLCAnY29udGFpbnMnLCAndW5pcXVlSXRlbXMnIF0gfSxcbiAgICB7IHR5cGU6ICdvYmplY3QnLFxuICAgICAgcnVsZXM6IFsgJ21heFByb3BlcnRpZXMnLCAnbWluUHJvcGVydGllcycsICdyZXF1aXJlZCcsICdkZXBlbmRlbmNpZXMnLCAncHJvcGVydHlOYW1lcycsXG4gICAgICAgICAgICAgICB7ICdwcm9wZXJ0aWVzJzogWydhZGRpdGlvbmFsUHJvcGVydGllcycsICdwYXR0ZXJuUHJvcGVydGllcyddIH0gXSB9LFxuICAgIHsgcnVsZXM6IFsgJyRyZWYnLCAnY29uc3QnLCAnZW51bScsICdub3QnLCAnYW55T2YnLCAnb25lT2YnLCAnYWxsT2YnLCAnaWYnIF0gfVxuICBdO1xuXG4gIHZhciBBTEwgPSBbICd0eXBlJywgJyRjb21tZW50JyBdO1xuICB2YXIgS0VZV09SRFMgPSBbXG4gICAgJyRzY2hlbWEnLCAnJGlkJywgJ2lkJywgJyRkYXRhJywgJyRhc3luYycsICd0aXRsZScsXG4gICAgJ2Rlc2NyaXB0aW9uJywgJ2RlZmF1bHQnLCAnZGVmaW5pdGlvbnMnLFxuICAgICdleGFtcGxlcycsICdyZWFkT25seScsICd3cml0ZU9ubHknLFxuICAgICdjb250ZW50TWVkaWFUeXBlJywgJ2NvbnRlbnRFbmNvZGluZycsXG4gICAgJ2FkZGl0aW9uYWxJdGVtcycsICd0aGVuJywgJ2Vsc2UnXG4gIF07XG4gIHZhciBUWVBFUyA9IFsgJ251bWJlcicsICdpbnRlZ2VyJywgJ3N0cmluZycsICdhcnJheScsICdvYmplY3QnLCAnYm9vbGVhbicsICdudWxsJyBdO1xuICBSVUxFUy5hbGwgPSB0b0hhc2goQUxMKTtcbiAgUlVMRVMudHlwZXMgPSB0b0hhc2goVFlQRVMpO1xuXG4gIFJVTEVTLmZvckVhY2goZnVuY3Rpb24gKGdyb3VwKSB7XG4gICAgZ3JvdXAucnVsZXMgPSBncm91cC5ydWxlcy5tYXAoZnVuY3Rpb24gKGtleXdvcmQpIHtcbiAgICAgIHZhciBpbXBsS2V5d29yZHM7XG4gICAgICBpZiAodHlwZW9mIGtleXdvcmQgPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdmFyIGtleSA9IE9iamVjdC5rZXlzKGtleXdvcmQpWzBdO1xuICAgICAgICBpbXBsS2V5d29yZHMgPSBrZXl3b3JkW2tleV07XG4gICAgICAgIGtleXdvcmQgPSBrZXk7XG4gICAgICAgIGltcGxLZXl3b3Jkcy5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgQUxMLnB1c2goayk7XG4gICAgICAgICAgUlVMRVMuYWxsW2tdID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBBTEwucHVzaChrZXl3b3JkKTtcbiAgICAgIHZhciBydWxlID0gUlVMRVMuYWxsW2tleXdvcmRdID0ge1xuICAgICAgICBrZXl3b3JkOiBrZXl3b3JkLFxuICAgICAgICBjb2RlOiBydWxlTW9kdWxlc1trZXl3b3JkXSxcbiAgICAgICAgaW1wbGVtZW50czogaW1wbEtleXdvcmRzXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHJ1bGU7XG4gICAgfSk7XG5cbiAgICBSVUxFUy5hbGwuJGNvbW1lbnQgPSB7XG4gICAgICBrZXl3b3JkOiAnJGNvbW1lbnQnLFxuICAgICAgY29kZTogcnVsZU1vZHVsZXMuJGNvbW1lbnRcbiAgICB9O1xuXG4gICAgaWYgKGdyb3VwLnR5cGUpIFJVTEVTLnR5cGVzW2dyb3VwLnR5cGVdID0gZ3JvdXA7XG4gIH0pO1xuXG4gIFJVTEVTLmtleXdvcmRzID0gdG9IYXNoKEFMTC5jb25jYXQoS0VZV09SRFMpKTtcbiAgUlVMRVMuY3VzdG9tID0ge307XG5cbiAgcmV0dXJuIFJVTEVTO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEtFWVdPUkRTID0gW1xuICAnbXVsdGlwbGVPZicsXG4gICdtYXhpbXVtJyxcbiAgJ2V4Y2x1c2l2ZU1heGltdW0nLFxuICAnbWluaW11bScsXG4gICdleGNsdXNpdmVNaW5pbXVtJyxcbiAgJ21heExlbmd0aCcsXG4gICdtaW5MZW5ndGgnLFxuICAncGF0dGVybicsXG4gICdhZGRpdGlvbmFsSXRlbXMnLFxuICAnbWF4SXRlbXMnLFxuICAnbWluSXRlbXMnLFxuICAndW5pcXVlSXRlbXMnLFxuICAnbWF4UHJvcGVydGllcycsXG4gICdtaW5Qcm9wZXJ0aWVzJyxcbiAgJ3JlcXVpcmVkJyxcbiAgJ2FkZGl0aW9uYWxQcm9wZXJ0aWVzJyxcbiAgJ2VudW0nLFxuICAnZm9ybWF0JyxcbiAgJ2NvbnN0J1xuXTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobWV0YVNjaGVtYSwga2V5d29yZHNKc29uUG9pbnRlcnMpIHtcbiAgZm9yICh2YXIgaT0wOyBpPGtleXdvcmRzSnNvblBvaW50ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgbWV0YVNjaGVtYSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobWV0YVNjaGVtYSkpO1xuICAgIHZhciBzZWdtZW50cyA9IGtleXdvcmRzSnNvblBvaW50ZXJzW2ldLnNwbGl0KCcvJyk7XG4gICAgdmFyIGtleXdvcmRzID0gbWV0YVNjaGVtYTtcbiAgICB2YXIgajtcbiAgICBmb3IgKGo9MTsgajxzZWdtZW50cy5sZW5ndGg7IGorKylcbiAgICAgIGtleXdvcmRzID0ga2V5d29yZHNbc2VnbWVudHNbal1dO1xuXG4gICAgZm9yIChqPTA7IGo8S0VZV09SRFMubGVuZ3RoOyBqKyspIHtcbiAgICAgIHZhciBrZXkgPSBLRVlXT1JEU1tqXTtcbiAgICAgIHZhciBzY2hlbWEgPSBrZXl3b3Jkc1trZXldO1xuICAgICAgaWYgKHNjaGVtYSkge1xuICAgICAgICBrZXl3b3Jkc1trZXldID0ge1xuICAgICAgICAgIGFueU9mOiBbXG4gICAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgICB7ICRyZWY6ICdodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZXBvYmVyZXpraW4vYWp2L21hc3Rlci9saWIvcmVmcy9kYXRhLmpzb24jJyB9XG4gICAgICAgICAgXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXRhU2NoZW1hO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIE1pc3NpbmdSZWZFcnJvciA9IHJlcXVpcmUoJy4vZXJyb3JfY2xhc3NlcycpLk1pc3NpbmdSZWY7XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcGlsZUFzeW5jO1xuXG5cbi8qKlxuICogQ3JlYXRlcyB2YWxpZGF0aW5nIGZ1bmN0aW9uIGZvciBwYXNzZWQgc2NoZW1hIHdpdGggYXN5bmNocm9ub3VzIGxvYWRpbmcgb2YgbWlzc2luZyBzY2hlbWFzLlxuICogYGxvYWRTY2hlbWFgIG9wdGlvbiBzaG91bGQgYmUgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgc2NoZW1hIHVyaSBhbmQgcmV0dXJucyBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgc2NoZW1hLlxuICogQHRoaXMgIEFqdlxuICogQHBhcmFtIHtPYmplY3R9ICAgc2NoZW1hIHNjaGVtYSBvYmplY3RcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gIG1ldGEgb3B0aW9uYWwgdHJ1ZSB0byBjb21waWxlIG1ldGEtc2NoZW1hOyB0aGlzIHBhcmFtZXRlciBjYW4gYmUgc2tpcHBlZFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgYW4gb3B0aW9uYWwgbm9kZS1zdHlsZSBjYWxsYmFjaywgaXQgaXMgY2FsbGVkIHdpdGggMiBwYXJhbWV0ZXJzOiBlcnJvciAob3IgbnVsbCkgYW5kIHZhbGlkYXRpbmcgZnVuY3Rpb24uXG4gKiBAcmV0dXJuIHtQcm9taXNlfSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhIHZhbGlkYXRpbmcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGVBc3luYyhzY2hlbWEsIG1ldGEsIGNhbGxiYWNrKSB7XG4gIC8qIGVzbGludCBuby1zaGFkb3c6IDAgKi9cbiAgLyogZ2xvYmFsIFByb21pc2UgKi9cbiAgLyoganNoaW50IHZhbGlkdGhpczogdHJ1ZSAqL1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIGlmICh0eXBlb2YgdGhpcy5fb3B0cy5sb2FkU2NoZW1hICE9ICdmdW5jdGlvbicpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdvcHRpb25zLmxvYWRTY2hlbWEgc2hvdWxkIGJlIGEgZnVuY3Rpb24nKTtcblxuICBpZiAodHlwZW9mIG1ldGEgPT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gbWV0YTtcbiAgICBtZXRhID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgdmFyIHAgPSBsb2FkTWV0YVNjaGVtYU9mKHNjaGVtYSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNjaGVtYU9iaiA9IHNlbGYuX2FkZFNjaGVtYShzY2hlbWEsIHVuZGVmaW5lZCwgbWV0YSk7XG4gICAgcmV0dXJuIHNjaGVtYU9iai52YWxpZGF0ZSB8fCBfY29tcGlsZUFzeW5jKHNjaGVtYU9iaik7XG4gIH0pO1xuXG4gIGlmIChjYWxsYmFjaykge1xuICAgIHAudGhlbihcbiAgICAgIGZ1bmN0aW9uKHYpIHsgY2FsbGJhY2sobnVsbCwgdik7IH0sXG4gICAgICBjYWxsYmFja1xuICAgICk7XG4gIH1cblxuICByZXR1cm4gcDtcblxuXG4gIGZ1bmN0aW9uIGxvYWRNZXRhU2NoZW1hT2Yoc2NoKSB7XG4gICAgdmFyICRzY2hlbWEgPSBzY2guJHNjaGVtYTtcbiAgICByZXR1cm4gJHNjaGVtYSAmJiAhc2VsZi5nZXRTY2hlbWEoJHNjaGVtYSlcbiAgICAgICAgICAgID8gY29tcGlsZUFzeW5jLmNhbGwoc2VsZiwgeyAkcmVmOiAkc2NoZW1hIH0sIHRydWUpXG4gICAgICAgICAgICA6IFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cblxuICBmdW5jdGlvbiBfY29tcGlsZUFzeW5jKHNjaGVtYU9iaikge1xuICAgIHRyeSB7IHJldHVybiBzZWxmLl9jb21waWxlKHNjaGVtYU9iaik7IH1cbiAgICBjYXRjaChlKSB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIE1pc3NpbmdSZWZFcnJvcikgcmV0dXJuIGxvYWRNaXNzaW5nU2NoZW1hKGUpO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGxvYWRNaXNzaW5nU2NoZW1hKGUpIHtcbiAgICAgIHZhciByZWYgPSBlLm1pc3NpbmdTY2hlbWE7XG4gICAgICBpZiAoYWRkZWQocmVmKSkgdGhyb3cgbmV3IEVycm9yKCdTY2hlbWEgJyArIHJlZiArICcgaXMgbG9hZGVkIGJ1dCAnICsgZS5taXNzaW5nUmVmICsgJyBjYW5ub3QgYmUgcmVzb2x2ZWQnKTtcblxuICAgICAgdmFyIHNjaGVtYVByb21pc2UgPSBzZWxmLl9sb2FkaW5nU2NoZW1hc1tyZWZdO1xuICAgICAgaWYgKCFzY2hlbWFQcm9taXNlKSB7XG4gICAgICAgIHNjaGVtYVByb21pc2UgPSBzZWxmLl9sb2FkaW5nU2NoZW1hc1tyZWZdID0gc2VsZi5fb3B0cy5sb2FkU2NoZW1hKHJlZik7XG4gICAgICAgIHNjaGVtYVByb21pc2UudGhlbihyZW1vdmVQcm9taXNlLCByZW1vdmVQcm9taXNlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNjaGVtYVByb21pc2UudGhlbihmdW5jdGlvbiAoc2NoKSB7XG4gICAgICAgIGlmICghYWRkZWQocmVmKSkge1xuICAgICAgICAgIHJldHVybiBsb2FkTWV0YVNjaGVtYU9mKHNjaCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIWFkZGVkKHJlZikpIHNlbGYuYWRkU2NoZW1hKHNjaCwgcmVmLCB1bmRlZmluZWQsIG1ldGEpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX2NvbXBpbGVBc3luYyhzY2hlbWFPYmopO1xuICAgICAgfSk7XG5cbiAgICAgIGZ1bmN0aW9uIHJlbW92ZVByb21pc2UoKSB7XG4gICAgICAgIGRlbGV0ZSBzZWxmLl9sb2FkaW5nU2NoZW1hc1tyZWZdO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBhZGRlZChyZWYpIHtcbiAgICAgICAgcmV0dXJuIHNlbGYuX3JlZnNbcmVmXSB8fCBzZWxmLl9zY2hlbWFzW3JlZl07XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX2N1c3RvbShpdCwgJGtleXdvcmQsICRydWxlVHlwZSkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGVycm9yS2V5d29yZDtcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICR2YWxpZCA9ICd2YWxpZCcgKyAkbHZsO1xuICB2YXIgJGVycnMgPSAnZXJyc19fJyArICRsdmw7XG4gIHZhciAkaXNEYXRhID0gaXQub3B0cy4kZGF0YSAmJiAkc2NoZW1hICYmICRzY2hlbWEuJGRhdGEsXG4gICAgJHNjaGVtYVZhbHVlO1xuICBpZiAoJGlzRGF0YSkge1xuICAgIG91dCArPSAnIHZhciBzY2hlbWEnICsgKCRsdmwpICsgJyA9ICcgKyAoaXQudXRpbC5nZXREYXRhKCRzY2hlbWEuJGRhdGEsICRkYXRhTHZsLCBpdC5kYXRhUGF0aEFycikpICsgJzsgJztcbiAgICAkc2NoZW1hVmFsdWUgPSAnc2NoZW1hJyArICRsdmw7XG4gIH0gZWxzZSB7XG4gICAgJHNjaGVtYVZhbHVlID0gJHNjaGVtYTtcbiAgfVxuICB2YXIgJHJ1bGUgPSB0aGlzLFxuICAgICRkZWZpbml0aW9uID0gJ2RlZmluaXRpb24nICsgJGx2bCxcbiAgICAkckRlZiA9ICRydWxlLmRlZmluaXRpb24sXG4gICAgJGNsb3NpbmdCcmFjZXMgPSAnJztcbiAgdmFyICRjb21waWxlLCAkaW5saW5lLCAkbWFjcm8sICRydWxlVmFsaWRhdGUsICR2YWxpZGF0ZUNvZGU7XG4gIGlmICgkaXNEYXRhICYmICRyRGVmLiRkYXRhKSB7XG4gICAgJHZhbGlkYXRlQ29kZSA9ICdrZXl3b3JkVmFsaWRhdGUnICsgJGx2bDtcbiAgICB2YXIgJHZhbGlkYXRlU2NoZW1hID0gJHJEZWYudmFsaWRhdGVTY2hlbWE7XG4gICAgb3V0ICs9ICcgdmFyICcgKyAoJGRlZmluaXRpb24pICsgJyA9IFJVTEVTLmN1c3RvbVtcXCcnICsgKCRrZXl3b3JkKSArICdcXCddLmRlZmluaXRpb247IHZhciAnICsgKCR2YWxpZGF0ZUNvZGUpICsgJyA9ICcgKyAoJGRlZmluaXRpb24pICsgJy52YWxpZGF0ZTsnO1xuICB9IGVsc2Uge1xuICAgICRydWxlVmFsaWRhdGUgPSBpdC51c2VDdXN0b21SdWxlKCRydWxlLCAkc2NoZW1hLCBpdC5zY2hlbWEsIGl0KTtcbiAgICBpZiAoISRydWxlVmFsaWRhdGUpIHJldHVybjtcbiAgICAkc2NoZW1hVmFsdWUgPSAndmFsaWRhdGUuc2NoZW1hJyArICRzY2hlbWFQYXRoO1xuICAgICR2YWxpZGF0ZUNvZGUgPSAkcnVsZVZhbGlkYXRlLmNvZGU7XG4gICAgJGNvbXBpbGUgPSAkckRlZi5jb21waWxlO1xuICAgICRpbmxpbmUgPSAkckRlZi5pbmxpbmU7XG4gICAgJG1hY3JvID0gJHJEZWYubWFjcm87XG4gIH1cbiAgdmFyICRydWxlRXJycyA9ICR2YWxpZGF0ZUNvZGUgKyAnLmVycm9ycycsXG4gICAgJGkgPSAnaScgKyAkbHZsLFxuICAgICRydWxlRXJyID0gJ3J1bGVFcnInICsgJGx2bCxcbiAgICAkYXN5bmNLZXl3b3JkID0gJHJEZWYuYXN5bmM7XG4gIGlmICgkYXN5bmNLZXl3b3JkICYmICFpdC5hc3luYykgdGhyb3cgbmV3IEVycm9yKCdhc3luYyBrZXl3b3JkIGluIHN5bmMgc2NoZW1hJyk7XG4gIGlmICghKCRpbmxpbmUgfHwgJG1hY3JvKSkge1xuICAgIG91dCArPSAnJyArICgkcnVsZUVycnMpICsgJyA9IG51bGw7JztcbiAgfVxuICBvdXQgKz0gJ3ZhciAnICsgKCRlcnJzKSArICcgPSBlcnJvcnM7dmFyICcgKyAoJHZhbGlkKSArICc7JztcbiAgaWYgKCRpc0RhdGEgJiYgJHJEZWYuJGRhdGEpIHtcbiAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgb3V0ICs9ICcgaWYgKCcgKyAoJHNjaGVtYVZhbHVlKSArICcgPT09IHVuZGVmaW5lZCkgeyAnICsgKCR2YWxpZCkgKyAnID0gdHJ1ZTsgfSBlbHNlIHsgJztcbiAgICBpZiAoJHZhbGlkYXRlU2NoZW1hKSB7XG4gICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgICBvdXQgKz0gJyAnICsgKCR2YWxpZCkgKyAnID0gJyArICgkZGVmaW5pdGlvbikgKyAnLnZhbGlkYXRlU2NoZW1hKCcgKyAoJHNjaGVtYVZhbHVlKSArICcpOyBpZiAoJyArICgkdmFsaWQpICsgJykgeyAnO1xuICAgIH1cbiAgfVxuICBpZiAoJGlubGluZSkge1xuICAgIGlmICgkckRlZi5zdGF0ZW1lbnRzKSB7XG4gICAgICBvdXQgKz0gJyAnICsgKCRydWxlVmFsaWRhdGUudmFsaWRhdGUpICsgJyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyAnICsgKCR2YWxpZCkgKyAnID0gJyArICgkcnVsZVZhbGlkYXRlLnZhbGlkYXRlKSArICc7ICc7XG4gICAgfVxuICB9IGVsc2UgaWYgKCRtYWNybykge1xuICAgIHZhciAkaXQgPSBpdC51dGlsLmNvcHkoaXQpO1xuICAgIHZhciAkY2xvc2luZ0JyYWNlcyA9ICcnO1xuICAgICRpdC5sZXZlbCsrO1xuICAgIHZhciAkbmV4dFZhbGlkID0gJ3ZhbGlkJyArICRpdC5sZXZlbDtcbiAgICAkaXQuc2NoZW1hID0gJHJ1bGVWYWxpZGF0ZS52YWxpZGF0ZTtcbiAgICAkaXQuc2NoZW1hUGF0aCA9ICcnO1xuICAgIHZhciAkd2FzQ29tcG9zaXRlID0gaXQuY29tcG9zaXRlUnVsZTtcbiAgICBpdC5jb21wb3NpdGVSdWxlID0gJGl0LmNvbXBvc2l0ZVJ1bGUgPSB0cnVlO1xuICAgIHZhciAkY29kZSA9IGl0LnZhbGlkYXRlKCRpdCkucmVwbGFjZSgvdmFsaWRhdGVcXC5zY2hlbWEvZywgJHZhbGlkYXRlQ29kZSk7XG4gICAgaXQuY29tcG9zaXRlUnVsZSA9ICRpdC5jb21wb3NpdGVSdWxlID0gJHdhc0NvbXBvc2l0ZTtcbiAgICBvdXQgKz0gJyAnICsgKCRjb2RlKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgb3V0ID0gJyc7XG4gICAgb3V0ICs9ICcgICcgKyAoJHZhbGlkYXRlQ29kZSkgKyAnLmNhbGwoICc7XG4gICAgaWYgKGl0Lm9wdHMucGFzc0NvbnRleHQpIHtcbiAgICAgIG91dCArPSAndGhpcyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnc2VsZic7XG4gICAgfVxuICAgIGlmICgkY29tcGlsZSB8fCAkckRlZi5zY2hlbWEgPT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAsICcgKyAoJGRhdGEpICsgJyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyAsICcgKyAoJHNjaGVtYVZhbHVlKSArICcgLCAnICsgKCRkYXRhKSArICcgLCB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyAsIChkYXRhUGF0aCB8fCBcXCdcXCcpJztcbiAgICBpZiAoaXQuZXJyb3JQYXRoICE9ICdcIlwiJykge1xuICAgICAgb3V0ICs9ICcgKyAnICsgKGl0LmVycm9yUGF0aCk7XG4gICAgfVxuICAgIHZhciAkcGFyZW50RGF0YSA9ICRkYXRhTHZsID8gJ2RhdGEnICsgKCgkZGF0YUx2bCAtIDEpIHx8ICcnKSA6ICdwYXJlbnREYXRhJyxcbiAgICAgICRwYXJlbnREYXRhUHJvcGVydHkgPSAkZGF0YUx2bCA/IGl0LmRhdGFQYXRoQXJyWyRkYXRhTHZsXSA6ICdwYXJlbnREYXRhUHJvcGVydHknO1xuICAgIG91dCArPSAnICwgJyArICgkcGFyZW50RGF0YSkgKyAnICwgJyArICgkcGFyZW50RGF0YVByb3BlcnR5KSArICcgLCByb290RGF0YSApICAnO1xuICAgIHZhciBkZWZfY2FsbFJ1bGVWYWxpZGF0ZSA9IG91dDtcbiAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgIGlmICgkckRlZi5lcnJvcnMgPT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAnICsgKCR2YWxpZCkgKyAnID0gJztcbiAgICAgIGlmICgkYXN5bmNLZXl3b3JkKSB7XG4gICAgICAgIG91dCArPSAnYXdhaXQgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnJyArIChkZWZfY2FsbFJ1bGVWYWxpZGF0ZSkgKyAnOyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoJGFzeW5jS2V5d29yZCkge1xuICAgICAgICAkcnVsZUVycnMgPSAnY3VzdG9tRXJyb3JzJyArICRsdmw7XG4gICAgICAgIG91dCArPSAnIHZhciAnICsgKCRydWxlRXJycykgKyAnID0gbnVsbDsgdHJ5IHsgJyArICgkdmFsaWQpICsgJyA9IGF3YWl0ICcgKyAoZGVmX2NhbGxSdWxlVmFsaWRhdGUpICsgJzsgfSBjYXRjaCAoZSkgeyAnICsgKCR2YWxpZCkgKyAnID0gZmFsc2U7IGlmIChlIGluc3RhbmNlb2YgVmFsaWRhdGlvbkVycm9yKSAnICsgKCRydWxlRXJycykgKyAnID0gZS5lcnJvcnM7IGVsc2UgdGhyb3cgZTsgfSAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgJyArICgkcnVsZUVycnMpICsgJyA9IG51bGw7ICcgKyAoJHZhbGlkKSArICcgPSAnICsgKGRlZl9jYWxsUnVsZVZhbGlkYXRlKSArICc7ICc7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICgkckRlZi5tb2RpZnlpbmcpIHtcbiAgICBvdXQgKz0gJyBpZiAoJyArICgkcGFyZW50RGF0YSkgKyAnKSAnICsgKCRkYXRhKSArICcgPSAnICsgKCRwYXJlbnREYXRhKSArICdbJyArICgkcGFyZW50RGF0YVByb3BlcnR5KSArICddOyc7XG4gIH1cbiAgb3V0ICs9ICcnICsgKCRjbG9zaW5nQnJhY2VzKTtcbiAgaWYgKCRyRGVmLnZhbGlkKSB7XG4gICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgIG91dCArPSAnIGlmICh0cnVlKSB7ICc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIGlmICggJztcbiAgICBpZiAoJHJEZWYudmFsaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgb3V0ICs9ICcgISc7XG4gICAgICBpZiAoJG1hY3JvKSB7XG4gICAgICAgIG91dCArPSAnJyArICgkbmV4dFZhbGlkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnJyArICgkdmFsaWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyAnICsgKCEkckRlZi52YWxpZCkgKyAnICc7XG4gICAgfVxuICAgIG91dCArPSAnKSB7ICc7XG4gICAgJGVycm9yS2V5d29yZCA9ICRydWxlLmtleXdvcmQ7XG4gICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICAgIG91dCA9ICcnO1xuICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCRlcnJvcktleXdvcmQgfHwgJ2N1c3RvbScpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsga2V5d29yZDogXFwnJyArICgkcnVsZS5rZXl3b3JkKSArICdcXCcgfSAnO1xuICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIHBhc3MgXCInICsgKCRydWxlLmtleXdvcmQpICsgJ1wiIGtleXdvcmQgdmFsaWRhdGlvblxcJyAnO1xuICAgICAgfVxuICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgfSAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB7fSAnO1xuICAgIH1cbiAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgfVxuICAgIHZhciBkZWZfY3VzdG9tRXJyb3IgPSBvdXQ7XG4gICAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgICBpZiAoJGlubGluZSkge1xuICAgICAgaWYgKCRyRGVmLmVycm9ycykge1xuICAgICAgICBpZiAoJHJEZWYuZXJyb3JzICE9ICdmdWxsJykge1xuICAgICAgICAgIG91dCArPSAnICBmb3IgKHZhciAnICsgKCRpKSArICc9JyArICgkZXJycykgKyAnOyAnICsgKCRpKSArICc8ZXJyb3JzOyAnICsgKCRpKSArICcrKykgeyB2YXIgJyArICgkcnVsZUVycikgKyAnID0gdkVycm9yc1snICsgKCRpKSArICddOyBpZiAoJyArICgkcnVsZUVycikgKyAnLmRhdGFQYXRoID09PSB1bmRlZmluZWQpICcgKyAoJHJ1bGVFcnIpICsgJy5kYXRhUGF0aCA9IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJzsgaWYgKCcgKyAoJHJ1bGVFcnIpICsgJy5zY2hlbWFQYXRoID09PSB1bmRlZmluZWQpIHsgJyArICgkcnVsZUVycikgKyAnLnNjaGVtYVBhdGggPSBcIicgKyAoJGVyclNjaGVtYVBhdGgpICsgJ1wiOyB9ICc7XG4gICAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgJyArICgkcnVsZUVycikgKyAnLnNjaGVtYSA9ICcgKyAoJHNjaGVtYVZhbHVlKSArICc7ICcgKyAoJHJ1bGVFcnIpICsgJy5kYXRhID0gJyArICgkZGF0YSkgKyAnOyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICgkckRlZi5lcnJvcnMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgJyArIChkZWZfY3VzdG9tRXJyb3IpICsgJyAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIGlmICgnICsgKCRlcnJzKSArICcgPT0gZXJyb3JzKSB7ICcgKyAoZGVmX2N1c3RvbUVycm9yKSArICcgfSBlbHNlIHsgIGZvciAodmFyICcgKyAoJGkpICsgJz0nICsgKCRlcnJzKSArICc7ICcgKyAoJGkpICsgJzxlcnJvcnM7ICcgKyAoJGkpICsgJysrKSB7IHZhciAnICsgKCRydWxlRXJyKSArICcgPSB2RXJyb3JzWycgKyAoJGkpICsgJ107IGlmICgnICsgKCRydWxlRXJyKSArICcuZGF0YVBhdGggPT09IHVuZGVmaW5lZCkgJyArICgkcnVsZUVycikgKyAnLmRhdGFQYXRoID0gKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnOyBpZiAoJyArICgkcnVsZUVycikgKyAnLnNjaGVtYVBhdGggPT09IHVuZGVmaW5lZCkgeyAnICsgKCRydWxlRXJyKSArICcuc2NoZW1hUGF0aCA9IFwiJyArICgkZXJyU2NoZW1hUGF0aCkgKyAnXCI7IH0gJztcbiAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAnICsgKCRydWxlRXJyKSArICcuc2NoZW1hID0gJyArICgkc2NoZW1hVmFsdWUpICsgJzsgJyArICgkcnVsZUVycikgKyAnLmRhdGEgPSAnICsgKCRkYXRhKSArICc7ICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dCArPSAnIH0gfSAnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgkbWFjcm8pIHtcbiAgICAgIG91dCArPSAnICAgdmFyIGVyciA9ICAgJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgkZXJyb3JLZXl3b3JkIHx8ICdjdXN0b20nKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IGtleXdvcmQ6IFxcJycgKyAoJHJ1bGUua2V5d29yZCkgKyAnXFwnIH0gJztcbiAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgcGFzcyBcIicgKyAoJHJ1bGUua2V5d29yZCkgKyAnXCIga2V5d29yZCB2YWxpZGF0aW9uXFwnICc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcih2RXJyb3JzKTsgJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSB2RXJyb3JzOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCRyRGVmLmVycm9ycyA9PT0gZmFsc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgJyArIChkZWZfY3VzdG9tRXJyb3IpICsgJyAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgaWYgKEFycmF5LmlzQXJyYXkoJyArICgkcnVsZUVycnMpICsgJykpIHsgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSAnICsgKCRydWxlRXJycykgKyAnOyBlbHNlIHZFcnJvcnMgPSB2RXJyb3JzLmNvbmNhdCgnICsgKCRydWxlRXJycykgKyAnKTsgZXJyb3JzID0gdkVycm9ycy5sZW5ndGg7ICBmb3IgKHZhciAnICsgKCRpKSArICc9JyArICgkZXJycykgKyAnOyAnICsgKCRpKSArICc8ZXJyb3JzOyAnICsgKCRpKSArICcrKykgeyB2YXIgJyArICgkcnVsZUVycikgKyAnID0gdkVycm9yc1snICsgKCRpKSArICddOyBpZiAoJyArICgkcnVsZUVycikgKyAnLmRhdGFQYXRoID09PSB1bmRlZmluZWQpICcgKyAoJHJ1bGVFcnIpICsgJy5kYXRhUGF0aCA9IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJzsgICcgKyAoJHJ1bGVFcnIpICsgJy5zY2hlbWFQYXRoID0gXCInICsgKCRlcnJTY2hlbWFQYXRoKSArICdcIjsgICc7XG4gICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICBvdXQgKz0gJyAnICsgKCRydWxlRXJyKSArICcuc2NoZW1hID0gJyArICgkc2NoZW1hVmFsdWUpICsgJzsgJyArICgkcnVsZUVycikgKyAnLmRhdGEgPSAnICsgKCRkYXRhKSArICc7ICc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgfSB9IGVsc2UgeyAnICsgKGRlZl9jdXN0b21FcnJvcikgKyAnIH0gJztcbiAgICAgIH1cbiAgICB9XG4gICAgb3V0ICs9ICcgfSAnO1xuICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICBvdXQgKz0gJyBlbHNlIHsgJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIG1ldGFTY2hlbWEgPSByZXF1aXJlKCcuL3JlZnMvanNvbi1zY2hlbWEtZHJhZnQtMDcuanNvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgJGlkOiAnaHR0cHM6Ly9naXRodWIuY29tL2Vwb2JlcmV6a2luL2Fqdi9ibG9iL21hc3Rlci9saWIvZGVmaW5pdGlvbl9zY2hlbWEuanMnLFxuICBkZWZpbml0aW9uczoge1xuICAgIHNpbXBsZVR5cGVzOiBtZXRhU2NoZW1hLmRlZmluaXRpb25zLnNpbXBsZVR5cGVzXG4gIH0sXG4gIHR5cGU6ICdvYmplY3QnLFxuICBkZXBlbmRlbmNpZXM6IHtcbiAgICBzY2hlbWE6IFsndmFsaWRhdGUnXSxcbiAgICAkZGF0YTogWyd2YWxpZGF0ZSddLFxuICAgIHN0YXRlbWVudHM6IFsnaW5saW5lJ10sXG4gICAgdmFsaWQ6IHtub3Q6IHtyZXF1aXJlZDogWydtYWNybyddfX1cbiAgfSxcbiAgcHJvcGVydGllczoge1xuICAgIHR5cGU6IG1ldGFTY2hlbWEucHJvcGVydGllcy50eXBlLFxuICAgIHNjaGVtYToge3R5cGU6ICdib29sZWFuJ30sXG4gICAgc3RhdGVtZW50czoge3R5cGU6ICdib29sZWFuJ30sXG4gICAgZGVwZW5kZW5jaWVzOiB7XG4gICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgaXRlbXM6IHt0eXBlOiAnc3RyaW5nJ31cbiAgICB9LFxuICAgIG1ldGFTY2hlbWE6IHt0eXBlOiAnb2JqZWN0J30sXG4gICAgbW9kaWZ5aW5nOiB7dHlwZTogJ2Jvb2xlYW4nfSxcbiAgICB2YWxpZDoge3R5cGU6ICdib29sZWFuJ30sXG4gICAgJGRhdGE6IHt0eXBlOiAnYm9vbGVhbid9LFxuICAgIGFzeW5jOiB7dHlwZTogJ2Jvb2xlYW4nfSxcbiAgICBlcnJvcnM6IHtcbiAgICAgIGFueU9mOiBbXG4gICAgICAgIHt0eXBlOiAnYm9vbGVhbid9LFxuICAgICAgICB7Y29uc3Q6ICdmdWxsJ31cbiAgICAgIF1cbiAgICB9XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBJREVOVElGSUVSID0gL15bYS16XyRdW2EtejAtOV8kLV0qJC9pO1xudmFyIGN1c3RvbVJ1bGVDb2RlID0gcmVxdWlyZSgnLi9kb3Rqcy9jdXN0b20nKTtcbnZhciBkZWZpbml0aW9uU2NoZW1hID0gcmVxdWlyZSgnLi9kZWZpbml0aW9uX3NjaGVtYScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYWRkOiBhZGRLZXl3b3JkLFxuICBnZXQ6IGdldEtleXdvcmQsXG4gIHJlbW92ZTogcmVtb3ZlS2V5d29yZCxcbiAgdmFsaWRhdGU6IHZhbGlkYXRlS2V5d29yZFxufTtcblxuXG4vKipcbiAqIERlZmluZSBjdXN0b20ga2V5d29yZFxuICogQHRoaXMgIEFqdlxuICogQHBhcmFtIHtTdHJpbmd9IGtleXdvcmQgY3VzdG9tIGtleXdvcmQsIHNob3VsZCBiZSB1bmlxdWUgKGluY2x1ZGluZyBkaWZmZXJlbnQgZnJvbSBhbGwgc3RhbmRhcmQsIGN1c3RvbSBhbmQgbWFjcm8ga2V5d29yZHMpLlxuICogQHBhcmFtIHtPYmplY3R9IGRlZmluaXRpb24ga2V5d29yZCBkZWZpbml0aW9uIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgYHR5cGVgICh0eXBlKHMpIHdoaWNoIHRoZSBrZXl3b3JkIGFwcGxpZXMgdG8pLCBgdmFsaWRhdGVgIG9yIGBjb21waWxlYC5cbiAqIEByZXR1cm4ge0Fqdn0gdGhpcyBmb3IgbWV0aG9kIGNoYWluaW5nXG4gKi9cbmZ1bmN0aW9uIGFkZEtleXdvcmQoa2V5d29yZCwgZGVmaW5pdGlvbikge1xuICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlICovXG4gIC8qIGVzbGludCBuby1zaGFkb3c6IDAgKi9cbiAgdmFyIFJVTEVTID0gdGhpcy5SVUxFUztcbiAgaWYgKFJVTEVTLmtleXdvcmRzW2tleXdvcmRdKVxuICAgIHRocm93IG5ldyBFcnJvcignS2V5d29yZCAnICsga2V5d29yZCArICcgaXMgYWxyZWFkeSBkZWZpbmVkJyk7XG5cbiAgaWYgKCFJREVOVElGSUVSLnRlc3Qoa2V5d29yZCkpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdLZXl3b3JkICcgKyBrZXl3b3JkICsgJyBpcyBub3QgYSB2YWxpZCBpZGVudGlmaWVyJyk7XG5cbiAgaWYgKGRlZmluaXRpb24pIHtcbiAgICB0aGlzLnZhbGlkYXRlS2V5d29yZChkZWZpbml0aW9uLCB0cnVlKTtcblxuICAgIHZhciBkYXRhVHlwZSA9IGRlZmluaXRpb24udHlwZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhVHlwZSkpIHtcbiAgICAgIGZvciAodmFyIGk9MDsgaTxkYXRhVHlwZS5sZW5ndGg7IGkrKylcbiAgICAgICAgX2FkZFJ1bGUoa2V5d29yZCwgZGF0YVR5cGVbaV0sIGRlZmluaXRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBfYWRkUnVsZShrZXl3b3JkLCBkYXRhVHlwZSwgZGVmaW5pdGlvbik7XG4gICAgfVxuXG4gICAgdmFyIG1ldGFTY2hlbWEgPSBkZWZpbml0aW9uLm1ldGFTY2hlbWE7XG4gICAgaWYgKG1ldGFTY2hlbWEpIHtcbiAgICAgIGlmIChkZWZpbml0aW9uLiRkYXRhICYmIHRoaXMuX29wdHMuJGRhdGEpIHtcbiAgICAgICAgbWV0YVNjaGVtYSA9IHtcbiAgICAgICAgICBhbnlPZjogW1xuICAgICAgICAgICAgbWV0YVNjaGVtYSxcbiAgICAgICAgICAgIHsgJyRyZWYnOiAnaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Vwb2JlcmV6a2luL2Fqdi9tYXN0ZXIvbGliL3JlZnMvZGF0YS5qc29uIycgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGRlZmluaXRpb24udmFsaWRhdGVTY2hlbWEgPSB0aGlzLmNvbXBpbGUobWV0YVNjaGVtYSwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgUlVMRVMua2V5d29yZHNba2V5d29yZF0gPSBSVUxFUy5hbGxba2V5d29yZF0gPSB0cnVlO1xuXG5cbiAgZnVuY3Rpb24gX2FkZFJ1bGUoa2V5d29yZCwgZGF0YVR5cGUsIGRlZmluaXRpb24pIHtcbiAgICB2YXIgcnVsZUdyb3VwO1xuICAgIGZvciAodmFyIGk9MDsgaTxSVUxFUy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJnID0gUlVMRVNbaV07XG4gICAgICBpZiAocmcudHlwZSA9PSBkYXRhVHlwZSkge1xuICAgICAgICBydWxlR3JvdXAgPSByZztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFydWxlR3JvdXApIHtcbiAgICAgIHJ1bGVHcm91cCA9IHsgdHlwZTogZGF0YVR5cGUsIHJ1bGVzOiBbXSB9O1xuICAgICAgUlVMRVMucHVzaChydWxlR3JvdXApO1xuICAgIH1cblxuICAgIHZhciBydWxlID0ge1xuICAgICAga2V5d29yZDoga2V5d29yZCxcbiAgICAgIGRlZmluaXRpb246IGRlZmluaXRpb24sXG4gICAgICBjdXN0b206IHRydWUsXG4gICAgICBjb2RlOiBjdXN0b21SdWxlQ29kZSxcbiAgICAgIGltcGxlbWVudHM6IGRlZmluaXRpb24uaW1wbGVtZW50c1xuICAgIH07XG4gICAgcnVsZUdyb3VwLnJ1bGVzLnB1c2gocnVsZSk7XG4gICAgUlVMRVMuY3VzdG9tW2tleXdvcmRdID0gcnVsZTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuXG5cbi8qKlxuICogR2V0IGtleXdvcmRcbiAqIEB0aGlzICBBanZcbiAqIEBwYXJhbSB7U3RyaW5nfSBrZXl3b3JkIHByZS1kZWZpbmVkIG9yIGN1c3RvbSBrZXl3b3JkLlxuICogQHJldHVybiB7T2JqZWN0fEJvb2xlYW59IGN1c3RvbSBrZXl3b3JkIGRlZmluaXRpb24sIGB0cnVlYCBpZiBpdCBpcyBhIHByZWRlZmluZWQga2V5d29yZCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmZ1bmN0aW9uIGdldEtleXdvcmQoa2V5d29yZCkge1xuICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlICovXG4gIHZhciBydWxlID0gdGhpcy5SVUxFUy5jdXN0b21ba2V5d29yZF07XG4gIHJldHVybiBydWxlID8gcnVsZS5kZWZpbml0aW9uIDogdGhpcy5SVUxFUy5rZXl3b3Jkc1trZXl3b3JkXSB8fCBmYWxzZTtcbn1cblxuXG4vKipcbiAqIFJlbW92ZSBrZXl3b3JkXG4gKiBAdGhpcyAgQWp2XG4gKiBAcGFyYW0ge1N0cmluZ30ga2V5d29yZCBwcmUtZGVmaW5lZCBvciBjdXN0b20ga2V5d29yZC5cbiAqIEByZXR1cm4ge0Fqdn0gdGhpcyBmb3IgbWV0aG9kIGNoYWluaW5nXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUtleXdvcmQoa2V5d29yZCkge1xuICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlICovXG4gIHZhciBSVUxFUyA9IHRoaXMuUlVMRVM7XG4gIGRlbGV0ZSBSVUxFUy5rZXl3b3Jkc1trZXl3b3JkXTtcbiAgZGVsZXRlIFJVTEVTLmFsbFtrZXl3b3JkXTtcbiAgZGVsZXRlIFJVTEVTLmN1c3RvbVtrZXl3b3JkXTtcbiAgZm9yICh2YXIgaT0wOyBpPFJVTEVTLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHJ1bGVzID0gUlVMRVNbaV0ucnVsZXM7XG4gICAgZm9yICh2YXIgaj0wOyBqPHJ1bGVzLmxlbmd0aDsgaisrKSB7XG4gICAgICBpZiAocnVsZXNbal0ua2V5d29yZCA9PSBrZXl3b3JkKSB7XG4gICAgICAgIHJ1bGVzLnNwbGljZShqLCAxKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5cbi8qKlxuICogVmFsaWRhdGUga2V5d29yZCBkZWZpbml0aW9uXG4gKiBAdGhpcyAgQWp2XG4gKiBAcGFyYW0ge09iamVjdH0gZGVmaW5pdGlvbiBrZXl3b3JkIGRlZmluaXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHtCb29sZWFufSB0aHJvd0Vycm9yIHRydWUgdG8gdGhyb3cgZXhjZXB0aW9uIGlmIGRlZmluaXRpb24gaXMgaW52YWxpZFxuICogQHJldHVybiB7Ym9vbGVhbn0gdmFsaWRhdGlvbiByZXN1bHRcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVLZXl3b3JkKGRlZmluaXRpb24sIHRocm93RXJyb3IpIHtcbiAgdmFsaWRhdGVLZXl3b3JkLmVycm9ycyA9IG51bGw7XG4gIHZhciB2ID0gdGhpcy5fdmFsaWRhdGVLZXl3b3JkID0gdGhpcy5fdmFsaWRhdGVLZXl3b3JkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgdGhpcy5jb21waWxlKGRlZmluaXRpb25TY2hlbWEsIHRydWUpO1xuXG4gIGlmICh2KGRlZmluaXRpb24pKSByZXR1cm4gdHJ1ZTtcbiAgdmFsaWRhdGVLZXl3b3JkLmVycm9ycyA9IHYuZXJyb3JzO1xuICBpZiAodGhyb3dFcnJvcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2N1c3RvbSBrZXl3b3JkIGRlZmluaXRpb24gaXMgaW52YWxpZDogJyAgKyB0aGlzLmVycm9yc1RleHQodi5lcnJvcnMpKTtcbiAgZWxzZVxuICAgIHJldHVybiBmYWxzZTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGNvbXBpbGVTY2hlbWEgPSByZXF1aXJlKCcuL2NvbXBpbGUnKVxuICAsIHJlc29sdmUgPSByZXF1aXJlKCcuL2NvbXBpbGUvcmVzb2x2ZScpXG4gICwgQ2FjaGUgPSByZXF1aXJlKCcuL2NhY2hlJylcbiAgLCBTY2hlbWFPYmplY3QgPSByZXF1aXJlKCcuL2NvbXBpbGUvc2NoZW1hX29iaicpXG4gICwgc3RhYmxlU3RyaW5naWZ5ID0gcmVxdWlyZSgnZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnknKVxuICAsIGZvcm1hdHMgPSByZXF1aXJlKCcuL2NvbXBpbGUvZm9ybWF0cycpXG4gICwgcnVsZXMgPSByZXF1aXJlKCcuL2NvbXBpbGUvcnVsZXMnKVxuICAsICRkYXRhTWV0YVNjaGVtYSA9IHJlcXVpcmUoJy4vZGF0YScpXG4gICwgdXRpbCA9IHJlcXVpcmUoJy4vY29tcGlsZS91dGlsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gQWp2O1xuXG5BanYucHJvdG90eXBlLnZhbGlkYXRlID0gdmFsaWRhdGU7XG5BanYucHJvdG90eXBlLmNvbXBpbGUgPSBjb21waWxlO1xuQWp2LnByb3RvdHlwZS5hZGRTY2hlbWEgPSBhZGRTY2hlbWE7XG5BanYucHJvdG90eXBlLmFkZE1ldGFTY2hlbWEgPSBhZGRNZXRhU2NoZW1hO1xuQWp2LnByb3RvdHlwZS52YWxpZGF0ZVNjaGVtYSA9IHZhbGlkYXRlU2NoZW1hO1xuQWp2LnByb3RvdHlwZS5nZXRTY2hlbWEgPSBnZXRTY2hlbWE7XG5BanYucHJvdG90eXBlLnJlbW92ZVNjaGVtYSA9IHJlbW92ZVNjaGVtYTtcbkFqdi5wcm90b3R5cGUuYWRkRm9ybWF0ID0gYWRkRm9ybWF0O1xuQWp2LnByb3RvdHlwZS5lcnJvcnNUZXh0ID0gZXJyb3JzVGV4dDtcblxuQWp2LnByb3RvdHlwZS5fYWRkU2NoZW1hID0gX2FkZFNjaGVtYTtcbkFqdi5wcm90b3R5cGUuX2NvbXBpbGUgPSBfY29tcGlsZTtcblxuQWp2LnByb3RvdHlwZS5jb21waWxlQXN5bmMgPSByZXF1aXJlKCcuL2NvbXBpbGUvYXN5bmMnKTtcbnZhciBjdXN0b21LZXl3b3JkID0gcmVxdWlyZSgnLi9rZXl3b3JkJyk7XG5BanYucHJvdG90eXBlLmFkZEtleXdvcmQgPSBjdXN0b21LZXl3b3JkLmFkZDtcbkFqdi5wcm90b3R5cGUuZ2V0S2V5d29yZCA9IGN1c3RvbUtleXdvcmQuZ2V0O1xuQWp2LnByb3RvdHlwZS5yZW1vdmVLZXl3b3JkID0gY3VzdG9tS2V5d29yZC5yZW1vdmU7XG5BanYucHJvdG90eXBlLnZhbGlkYXRlS2V5d29yZCA9IGN1c3RvbUtleXdvcmQudmFsaWRhdGU7XG5cbnZhciBlcnJvckNsYXNzZXMgPSByZXF1aXJlKCcuL2NvbXBpbGUvZXJyb3JfY2xhc3NlcycpO1xuQWp2LlZhbGlkYXRpb25FcnJvciA9IGVycm9yQ2xhc3Nlcy5WYWxpZGF0aW9uO1xuQWp2Lk1pc3NpbmdSZWZFcnJvciA9IGVycm9yQ2xhc3Nlcy5NaXNzaW5nUmVmO1xuQWp2LiRkYXRhTWV0YVNjaGVtYSA9ICRkYXRhTWV0YVNjaGVtYTtcblxudmFyIE1FVEFfU0NIRU1BX0lEID0gJ2h0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hJztcblxudmFyIE1FVEFfSUdOT1JFX09QVElPTlMgPSBbICdyZW1vdmVBZGRpdGlvbmFsJywgJ3VzZURlZmF1bHRzJywgJ2NvZXJjZVR5cGVzJywgJ3N0cmljdERlZmF1bHRzJyBdO1xudmFyIE1FVEFfU1VQUE9SVF9EQVRBID0gWycvcHJvcGVydGllcyddO1xuXG4vKipcbiAqIENyZWF0ZXMgdmFsaWRhdG9yIGluc3RhbmNlLlxuICogVXNhZ2U6IGBBanYob3B0cylgXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBvcHRpb25hbCBvcHRpb25zXG4gKiBAcmV0dXJuIHtPYmplY3R9IGFqdiBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBBanYob3B0cykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQWp2KSkgcmV0dXJuIG5ldyBBanYob3B0cyk7XG4gIG9wdHMgPSB0aGlzLl9vcHRzID0gdXRpbC5jb3B5KG9wdHMpIHx8IHt9O1xuICBzZXRMb2dnZXIodGhpcyk7XG4gIHRoaXMuX3NjaGVtYXMgPSB7fTtcbiAgdGhpcy5fcmVmcyA9IHt9O1xuICB0aGlzLl9mcmFnbWVudHMgPSB7fTtcbiAgdGhpcy5fZm9ybWF0cyA9IGZvcm1hdHMob3B0cy5mb3JtYXQpO1xuXG4gIHRoaXMuX2NhY2hlID0gb3B0cy5jYWNoZSB8fCBuZXcgQ2FjaGU7XG4gIHRoaXMuX2xvYWRpbmdTY2hlbWFzID0ge307XG4gIHRoaXMuX2NvbXBpbGF0aW9ucyA9IFtdO1xuICB0aGlzLlJVTEVTID0gcnVsZXMoKTtcbiAgdGhpcy5fZ2V0SWQgPSBjaG9vc2VHZXRJZChvcHRzKTtcblxuICBvcHRzLmxvb3BSZXF1aXJlZCA9IG9wdHMubG9vcFJlcXVpcmVkIHx8IEluZmluaXR5O1xuICBpZiAob3B0cy5lcnJvckRhdGFQYXRoID09ICdwcm9wZXJ0eScpIG9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSA9IHRydWU7XG4gIGlmIChvcHRzLnNlcmlhbGl6ZSA9PT0gdW5kZWZpbmVkKSBvcHRzLnNlcmlhbGl6ZSA9IHN0YWJsZVN0cmluZ2lmeTtcbiAgdGhpcy5fbWV0YU9wdHMgPSBnZXRNZXRhU2NoZW1hT3B0aW9ucyh0aGlzKTtcblxuICBpZiAob3B0cy5mb3JtYXRzKSBhZGRJbml0aWFsRm9ybWF0cyh0aGlzKTtcbiAgaWYgKG9wdHMua2V5d29yZHMpIGFkZEluaXRpYWxLZXl3b3Jkcyh0aGlzKTtcbiAgYWRkRGVmYXVsdE1ldGFTY2hlbWEodGhpcyk7XG4gIGlmICh0eXBlb2Ygb3B0cy5tZXRhID09ICdvYmplY3QnKSB0aGlzLmFkZE1ldGFTY2hlbWEob3B0cy5tZXRhKTtcbiAgaWYgKG9wdHMubnVsbGFibGUpIHRoaXMuYWRkS2V5d29yZCgnbnVsbGFibGUnLCB7bWV0YVNjaGVtYToge3R5cGU6ICdib29sZWFuJ319KTtcbiAgYWRkSW5pdGlhbFNjaGVtYXModGhpcyk7XG59XG5cblxuXG4vKipcbiAqIFZhbGlkYXRlIGRhdGEgdXNpbmcgc2NoZW1hXG4gKiBTY2hlbWEgd2lsbCBiZSBjb21waWxlZCBhbmQgY2FjaGVkICh1c2luZyBzZXJpYWxpemVkIEpTT04gYXMga2V5LiBbZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnldKGh0dHBzOi8vZ2l0aHViLmNvbS9lcG9iZXJlemtpbi9mYXN0LWpzb24tc3RhYmxlLXN0cmluZ2lmeSkgaXMgdXNlZCB0byBzZXJpYWxpemUuXG4gKiBAdGhpcyAgIEFqdlxuICogQHBhcmFtICB7U3RyaW5nfE9iamVjdH0gc2NoZW1hS2V5UmVmIGtleSwgcmVmIG9yIHNjaGVtYSBvYmplY3RcbiAqIEBwYXJhbSAge0FueX0gZGF0YSB0byBiZSB2YWxpZGF0ZWRcbiAqIEByZXR1cm4ge0Jvb2xlYW59IHZhbGlkYXRpb24gcmVzdWx0LiBFcnJvcnMgZnJvbSB0aGUgbGFzdCB2YWxpZGF0aW9uIHdpbGwgYmUgYXZhaWxhYmxlIGluIGBhanYuZXJyb3JzYCAoYW5kIGFsc28gaW4gY29tcGlsZWQgc2NoZW1hOiBgc2NoZW1hLmVycm9yc2ApLlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZShzY2hlbWFLZXlSZWYsIGRhdGEpIHtcbiAgdmFyIHY7XG4gIGlmICh0eXBlb2Ygc2NoZW1hS2V5UmVmID09ICdzdHJpbmcnKSB7XG4gICAgdiA9IHRoaXMuZ2V0U2NoZW1hKHNjaGVtYUtleVJlZik7XG4gICAgaWYgKCF2KSB0aHJvdyBuZXcgRXJyb3IoJ25vIHNjaGVtYSB3aXRoIGtleSBvciByZWYgXCInICsgc2NoZW1hS2V5UmVmICsgJ1wiJyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHNjaGVtYU9iaiA9IHRoaXMuX2FkZFNjaGVtYShzY2hlbWFLZXlSZWYpO1xuICAgIHYgPSBzY2hlbWFPYmoudmFsaWRhdGUgfHwgdGhpcy5fY29tcGlsZShzY2hlbWFPYmopO1xuICB9XG5cbiAgdmFyIHZhbGlkID0gdihkYXRhKTtcbiAgaWYgKHYuJGFzeW5jICE9PSB0cnVlKSB0aGlzLmVycm9ycyA9IHYuZXJyb3JzO1xuICByZXR1cm4gdmFsaWQ7XG59XG5cblxuLyoqXG4gKiBDcmVhdGUgdmFsaWRhdGluZyBmdW5jdGlvbiBmb3IgcGFzc2VkIHNjaGVtYS5cbiAqIEB0aGlzICAgQWp2XG4gKiBAcGFyYW0gIHtPYmplY3R9IHNjaGVtYSBzY2hlbWEgb2JqZWN0XG4gKiBAcGFyYW0gIHtCb29sZWFufSBfbWV0YSB0cnVlIGlmIHNjaGVtYSBpcyBhIG1ldGEtc2NoZW1hLiBVc2VkIGludGVybmFsbHkgdG8gY29tcGlsZSBtZXRhIHNjaGVtYXMgb2YgY3VzdG9tIGtleXdvcmRzLlxuICogQHJldHVybiB7RnVuY3Rpb259IHZhbGlkYXRpbmcgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gY29tcGlsZShzY2hlbWEsIF9tZXRhKSB7XG4gIHZhciBzY2hlbWFPYmogPSB0aGlzLl9hZGRTY2hlbWEoc2NoZW1hLCB1bmRlZmluZWQsIF9tZXRhKTtcbiAgcmV0dXJuIHNjaGVtYU9iai52YWxpZGF0ZSB8fCB0aGlzLl9jb21waWxlKHNjaGVtYU9iaik7XG59XG5cblxuLyoqXG4gKiBBZGRzIHNjaGVtYSB0byB0aGUgaW5zdGFuY2UuXG4gKiBAdGhpcyAgIEFqdlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IHNjaGVtYSBzY2hlbWEgb3IgYXJyYXkgb2Ygc2NoZW1hcy4gSWYgYXJyYXkgaXMgcGFzc2VkLCBga2V5YCBhbmQgb3RoZXIgcGFyYW1ldGVycyB3aWxsIGJlIGlnbm9yZWQuXG4gKiBAcGFyYW0ge1N0cmluZ30ga2V5IE9wdGlvbmFsIHNjaGVtYSBrZXkuIENhbiBiZSBwYXNzZWQgdG8gYHZhbGlkYXRlYCBtZXRob2QgaW5zdGVhZCBvZiBzY2hlbWEgb2JqZWN0IG9yIGlkL3JlZi4gT25lIHNjaGVtYSBwZXIgaW5zdGFuY2UgY2FuIGhhdmUgZW1wdHkgYGlkYCBhbmQgYGtleWAuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IF9za2lwVmFsaWRhdGlvbiB0cnVlIHRvIHNraXAgc2NoZW1hIHZhbGlkYXRpb24uIFVzZWQgaW50ZXJuYWxseSwgb3B0aW9uIHZhbGlkYXRlU2NoZW1hIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IF9tZXRhIHRydWUgaWYgc2NoZW1hIGlzIGEgbWV0YS1zY2hlbWEuIFVzZWQgaW50ZXJuYWxseSwgYWRkTWV0YVNjaGVtYSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLlxuICogQHJldHVybiB7QWp2fSB0aGlzIGZvciBtZXRob2QgY2hhaW5pbmdcbiAqL1xuZnVuY3Rpb24gYWRkU2NoZW1hKHNjaGVtYSwga2V5LCBfc2tpcFZhbGlkYXRpb24sIF9tZXRhKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYSkpe1xuICAgIGZvciAodmFyIGk9MDsgaTxzY2hlbWEubGVuZ3RoOyBpKyspIHRoaXMuYWRkU2NoZW1hKHNjaGVtYVtpXSwgdW5kZWZpbmVkLCBfc2tpcFZhbGlkYXRpb24sIF9tZXRhKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICB2YXIgaWQgPSB0aGlzLl9nZXRJZChzY2hlbWEpO1xuICBpZiAoaWQgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgaWQgIT0gJ3N0cmluZycpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdzY2hlbWEgaWQgbXVzdCBiZSBzdHJpbmcnKTtcbiAga2V5ID0gcmVzb2x2ZS5ub3JtYWxpemVJZChrZXkgfHwgaWQpO1xuICBjaGVja1VuaXF1ZSh0aGlzLCBrZXkpO1xuICB0aGlzLl9zY2hlbWFzW2tleV0gPSB0aGlzLl9hZGRTY2hlbWEoc2NoZW1hLCBfc2tpcFZhbGlkYXRpb24sIF9tZXRhLCB0cnVlKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cblxuLyoqXG4gKiBBZGQgc2NoZW1hIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHZhbGlkYXRlIG90aGVyIHNjaGVtYXNcbiAqIG9wdGlvbnMgaW4gTUVUQV9JR05PUkVfT1BUSU9OUyBhcmUgYWx3YXkgc2V0IHRvIGZhbHNlXG4gKiBAdGhpcyAgIEFqdlxuICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYSBzY2hlbWEgb2JqZWN0XG4gKiBAcGFyYW0ge1N0cmluZ30ga2V5IG9wdGlvbmFsIHNjaGVtYSBrZXlcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gc2tpcFZhbGlkYXRpb24gdHJ1ZSB0byBza2lwIHNjaGVtYSB2YWxpZGF0aW9uLCBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSB2YWxpZGF0ZVNjaGVtYSBvcHRpb24gZm9yIG1ldGEtc2NoZW1hXG4gKiBAcmV0dXJuIHtBanZ9IHRoaXMgZm9yIG1ldGhvZCBjaGFpbmluZ1xuICovXG5mdW5jdGlvbiBhZGRNZXRhU2NoZW1hKHNjaGVtYSwga2V5LCBza2lwVmFsaWRhdGlvbikge1xuICB0aGlzLmFkZFNjaGVtYShzY2hlbWEsIGtleSwgc2tpcFZhbGlkYXRpb24sIHRydWUpO1xuICByZXR1cm4gdGhpcztcbn1cblxuXG4vKipcbiAqIFZhbGlkYXRlIHNjaGVtYVxuICogQHRoaXMgICBBanZcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWEgc2NoZW1hIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHRocm93T3JMb2dFcnJvciBwYXNzIHRydWUgdG8gdGhyb3cgKG9yIGxvZykgYW4gZXJyb3IgaWYgaW52YWxpZFxuICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSBpZiBzY2hlbWEgaXMgdmFsaWRcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVTY2hlbWEoc2NoZW1hLCB0aHJvd09yTG9nRXJyb3IpIHtcbiAgdmFyICRzY2hlbWEgPSBzY2hlbWEuJHNjaGVtYTtcbiAgaWYgKCRzY2hlbWEgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgJHNjaGVtYSAhPSAnc3RyaW5nJylcbiAgICB0aHJvdyBuZXcgRXJyb3IoJyRzY2hlbWEgbXVzdCBiZSBhIHN0cmluZycpO1xuICAkc2NoZW1hID0gJHNjaGVtYSB8fCB0aGlzLl9vcHRzLmRlZmF1bHRNZXRhIHx8IGRlZmF1bHRNZXRhKHRoaXMpO1xuICBpZiAoISRzY2hlbWEpIHtcbiAgICB0aGlzLmxvZ2dlci53YXJuKCdtZXRhLXNjaGVtYSBub3QgYXZhaWxhYmxlJyk7XG4gICAgdGhpcy5lcnJvcnMgPSBudWxsO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHZhciB2YWxpZCA9IHRoaXMudmFsaWRhdGUoJHNjaGVtYSwgc2NoZW1hKTtcbiAgaWYgKCF2YWxpZCAmJiB0aHJvd09yTG9nRXJyb3IpIHtcbiAgICB2YXIgbWVzc2FnZSA9ICdzY2hlbWEgaXMgaW52YWxpZDogJyArIHRoaXMuZXJyb3JzVGV4dCgpO1xuICAgIGlmICh0aGlzLl9vcHRzLnZhbGlkYXRlU2NoZW1hID09ICdsb2cnKSB0aGlzLmxvZ2dlci5lcnJvcihtZXNzYWdlKTtcbiAgICBlbHNlIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgfVxuICByZXR1cm4gdmFsaWQ7XG59XG5cblxuZnVuY3Rpb24gZGVmYXVsdE1ldGEoc2VsZikge1xuICB2YXIgbWV0YSA9IHNlbGYuX29wdHMubWV0YTtcbiAgc2VsZi5fb3B0cy5kZWZhdWx0TWV0YSA9IHR5cGVvZiBtZXRhID09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLl9nZXRJZChtZXRhKSB8fCBtZXRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmdldFNjaGVtYShNRVRBX1NDSEVNQV9JRClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTUVUQV9TQ0hFTUFfSURcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICByZXR1cm4gc2VsZi5fb3B0cy5kZWZhdWx0TWV0YTtcbn1cblxuXG4vKipcbiAqIEdldCBjb21waWxlZCBzY2hlbWEgZnJvbSB0aGUgaW5zdGFuY2UgYnkgYGtleWAgb3IgYHJlZmAuXG4gKiBAdGhpcyAgIEFqdlxuICogQHBhcmFtICB7U3RyaW5nfSBrZXlSZWYgYGtleWAgdGhhdCB3YXMgcGFzc2VkIHRvIGBhZGRTY2hlbWFgIG9yIGZ1bGwgc2NoZW1hIHJlZmVyZW5jZSAoYHNjaGVtYS5pZGAgb3IgcmVzb2x2ZWQgaWQpLlxuICogQHJldHVybiB7RnVuY3Rpb259IHNjaGVtYSB2YWxpZGF0aW5nIGZ1bmN0aW9uICh3aXRoIHByb3BlcnR5IGBzY2hlbWFgKS5cbiAqL1xuZnVuY3Rpb24gZ2V0U2NoZW1hKGtleVJlZikge1xuICB2YXIgc2NoZW1hT2JqID0gX2dldFNjaGVtYU9iaih0aGlzLCBrZXlSZWYpO1xuICBzd2l0Y2ggKHR5cGVvZiBzY2hlbWFPYmopIHtcbiAgICBjYXNlICdvYmplY3QnOiByZXR1cm4gc2NoZW1hT2JqLnZhbGlkYXRlIHx8IHRoaXMuX2NvbXBpbGUoc2NoZW1hT2JqKTtcbiAgICBjYXNlICdzdHJpbmcnOiByZXR1cm4gdGhpcy5nZXRTY2hlbWEoc2NoZW1hT2JqKTtcbiAgICBjYXNlICd1bmRlZmluZWQnOiByZXR1cm4gX2dldFNjaGVtYUZyYWdtZW50KHRoaXMsIGtleVJlZik7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBfZ2V0U2NoZW1hRnJhZ21lbnQoc2VsZiwgcmVmKSB7XG4gIHZhciByZXMgPSByZXNvbHZlLnNjaGVtYS5jYWxsKHNlbGYsIHsgc2NoZW1hOiB7fSB9LCByZWYpO1xuICBpZiAocmVzKSB7XG4gICAgdmFyIHNjaGVtYSA9IHJlcy5zY2hlbWFcbiAgICAgICwgcm9vdCA9IHJlcy5yb290XG4gICAgICAsIGJhc2VJZCA9IHJlcy5iYXNlSWQ7XG4gICAgdmFyIHYgPSBjb21waWxlU2NoZW1hLmNhbGwoc2VsZiwgc2NoZW1hLCByb290LCB1bmRlZmluZWQsIGJhc2VJZCk7XG4gICAgc2VsZi5fZnJhZ21lbnRzW3JlZl0gPSBuZXcgU2NoZW1hT2JqZWN0KHtcbiAgICAgIHJlZjogcmVmLFxuICAgICAgZnJhZ21lbnQ6IHRydWUsXG4gICAgICBzY2hlbWE6IHNjaGVtYSxcbiAgICAgIHJvb3Q6IHJvb3QsXG4gICAgICBiYXNlSWQ6IGJhc2VJZCxcbiAgICAgIHZhbGlkYXRlOiB2XG4gICAgfSk7XG4gICAgcmV0dXJuIHY7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBfZ2V0U2NoZW1hT2JqKHNlbGYsIGtleVJlZikge1xuICBrZXlSZWYgPSByZXNvbHZlLm5vcm1hbGl6ZUlkKGtleVJlZik7XG4gIHJldHVybiBzZWxmLl9zY2hlbWFzW2tleVJlZl0gfHwgc2VsZi5fcmVmc1trZXlSZWZdIHx8IHNlbGYuX2ZyYWdtZW50c1trZXlSZWZdO1xufVxuXG5cbi8qKlxuICogUmVtb3ZlIGNhY2hlZCBzY2hlbWEocykuXG4gKiBJZiBubyBwYXJhbWV0ZXIgaXMgcGFzc2VkIGFsbCBzY2hlbWFzIGJ1dCBtZXRhLXNjaGVtYXMgYXJlIHJlbW92ZWQuXG4gKiBJZiBSZWdFeHAgaXMgcGFzc2VkIGFsbCBzY2hlbWFzIHdpdGgga2V5L2lkIG1hdGNoaW5nIHBhdHRlcm4gYnV0IG1ldGEtc2NoZW1hcyBhcmUgcmVtb3ZlZC5cbiAqIEV2ZW4gaWYgc2NoZW1hIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgc2NoZW1hcyBpdCBzdGlsbCBjYW4gYmUgcmVtb3ZlZCBhcyBvdGhlciBzY2hlbWFzIGhhdmUgbG9jYWwgcmVmZXJlbmNlcy5cbiAqIEB0aGlzICAgQWp2XG4gKiBAcGFyYW0gIHtTdHJpbmd8T2JqZWN0fFJlZ0V4cH0gc2NoZW1hS2V5UmVmIGtleSwgcmVmLCBwYXR0ZXJuIHRvIG1hdGNoIGtleS9yZWYgb3Igc2NoZW1hIG9iamVjdFxuICogQHJldHVybiB7QWp2fSB0aGlzIGZvciBtZXRob2QgY2hhaW5pbmdcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlU2NoZW1hKHNjaGVtYUtleVJlZikge1xuICBpZiAoc2NoZW1hS2V5UmVmIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgX3JlbW92ZUFsbFNjaGVtYXModGhpcywgdGhpcy5fc2NoZW1hcywgc2NoZW1hS2V5UmVmKTtcbiAgICBfcmVtb3ZlQWxsU2NoZW1hcyh0aGlzLCB0aGlzLl9yZWZzLCBzY2hlbWFLZXlSZWYpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIHN3aXRjaCAodHlwZW9mIHNjaGVtYUtleVJlZikge1xuICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICBfcmVtb3ZlQWxsU2NoZW1hcyh0aGlzLCB0aGlzLl9zY2hlbWFzKTtcbiAgICAgIF9yZW1vdmVBbGxTY2hlbWFzKHRoaXMsIHRoaXMuX3JlZnMpO1xuICAgICAgdGhpcy5fY2FjaGUuY2xlYXIoKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICB2YXIgc2NoZW1hT2JqID0gX2dldFNjaGVtYU9iaih0aGlzLCBzY2hlbWFLZXlSZWYpO1xuICAgICAgaWYgKHNjaGVtYU9iaikgdGhpcy5fY2FjaGUuZGVsKHNjaGVtYU9iai5jYWNoZUtleSk7XG4gICAgICBkZWxldGUgdGhpcy5fc2NoZW1hc1tzY2hlbWFLZXlSZWZdO1xuICAgICAgZGVsZXRlIHRoaXMuX3JlZnNbc2NoZW1hS2V5UmVmXTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICB2YXIgc2VyaWFsaXplID0gdGhpcy5fb3B0cy5zZXJpYWxpemU7XG4gICAgICB2YXIgY2FjaGVLZXkgPSBzZXJpYWxpemUgPyBzZXJpYWxpemUoc2NoZW1hS2V5UmVmKSA6IHNjaGVtYUtleVJlZjtcbiAgICAgIHRoaXMuX2NhY2hlLmRlbChjYWNoZUtleSk7XG4gICAgICB2YXIgaWQgPSB0aGlzLl9nZXRJZChzY2hlbWFLZXlSZWYpO1xuICAgICAgaWYgKGlkKSB7XG4gICAgICAgIGlkID0gcmVzb2x2ZS5ub3JtYWxpemVJZChpZCk7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9zY2hlbWFzW2lkXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3JlZnNbaWRdO1xuICAgICAgfVxuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5cbmZ1bmN0aW9uIF9yZW1vdmVBbGxTY2hlbWFzKHNlbGYsIHNjaGVtYXMsIHJlZ2V4KSB7XG4gIGZvciAodmFyIGtleVJlZiBpbiBzY2hlbWFzKSB7XG4gICAgdmFyIHNjaGVtYU9iaiA9IHNjaGVtYXNba2V5UmVmXTtcbiAgICBpZiAoIXNjaGVtYU9iai5tZXRhICYmICghcmVnZXggfHwgcmVnZXgudGVzdChrZXlSZWYpKSkge1xuICAgICAgc2VsZi5fY2FjaGUuZGVsKHNjaGVtYU9iai5jYWNoZUtleSk7XG4gICAgICBkZWxldGUgc2NoZW1hc1trZXlSZWZdO1xuICAgIH1cbiAgfVxufVxuXG5cbi8qIEB0aGlzICAgQWp2ICovXG5mdW5jdGlvbiBfYWRkU2NoZW1hKHNjaGVtYSwgc2tpcFZhbGlkYXRpb24sIG1ldGEsIHNob3VsZEFkZFNjaGVtYSkge1xuICBpZiAodHlwZW9mIHNjaGVtYSAhPSAnb2JqZWN0JyAmJiB0eXBlb2Ygc2NoZW1hICE9ICdib29sZWFuJylcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NjaGVtYSBzaG91bGQgYmUgb2JqZWN0IG9yIGJvb2xlYW4nKTtcbiAgdmFyIHNlcmlhbGl6ZSA9IHRoaXMuX29wdHMuc2VyaWFsaXplO1xuICB2YXIgY2FjaGVLZXkgPSBzZXJpYWxpemUgPyBzZXJpYWxpemUoc2NoZW1hKSA6IHNjaGVtYTtcbiAgdmFyIGNhY2hlZCA9IHRoaXMuX2NhY2hlLmdldChjYWNoZUtleSk7XG4gIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQ7XG5cbiAgc2hvdWxkQWRkU2NoZW1hID0gc2hvdWxkQWRkU2NoZW1hIHx8IHRoaXMuX29wdHMuYWRkVXNlZFNjaGVtYSAhPT0gZmFsc2U7XG5cbiAgdmFyIGlkID0gcmVzb2x2ZS5ub3JtYWxpemVJZCh0aGlzLl9nZXRJZChzY2hlbWEpKTtcbiAgaWYgKGlkICYmIHNob3VsZEFkZFNjaGVtYSkgY2hlY2tVbmlxdWUodGhpcywgaWQpO1xuXG4gIHZhciB3aWxsVmFsaWRhdGUgPSB0aGlzLl9vcHRzLnZhbGlkYXRlU2NoZW1hICE9PSBmYWxzZSAmJiAhc2tpcFZhbGlkYXRpb247XG4gIHZhciByZWN1cnNpdmVNZXRhO1xuICBpZiAod2lsbFZhbGlkYXRlICYmICEocmVjdXJzaXZlTWV0YSA9IGlkICYmIGlkID09IHJlc29sdmUubm9ybWFsaXplSWQoc2NoZW1hLiRzY2hlbWEpKSlcbiAgICB0aGlzLnZhbGlkYXRlU2NoZW1hKHNjaGVtYSwgdHJ1ZSk7XG5cbiAgdmFyIGxvY2FsUmVmcyA9IHJlc29sdmUuaWRzLmNhbGwodGhpcywgc2NoZW1hKTtcblxuICB2YXIgc2NoZW1hT2JqID0gbmV3IFNjaGVtYU9iamVjdCh7XG4gICAgaWQ6IGlkLFxuICAgIHNjaGVtYTogc2NoZW1hLFxuICAgIGxvY2FsUmVmczogbG9jYWxSZWZzLFxuICAgIGNhY2hlS2V5OiBjYWNoZUtleSxcbiAgICBtZXRhOiBtZXRhXG4gIH0pO1xuXG4gIGlmIChpZFswXSAhPSAnIycgJiYgc2hvdWxkQWRkU2NoZW1hKSB0aGlzLl9yZWZzW2lkXSA9IHNjaGVtYU9iajtcbiAgdGhpcy5fY2FjaGUucHV0KGNhY2hlS2V5LCBzY2hlbWFPYmopO1xuXG4gIGlmICh3aWxsVmFsaWRhdGUgJiYgcmVjdXJzaXZlTWV0YSkgdGhpcy52YWxpZGF0ZVNjaGVtYShzY2hlbWEsIHRydWUpO1xuXG4gIHJldHVybiBzY2hlbWFPYmo7XG59XG5cblxuLyogQHRoaXMgICBBanYgKi9cbmZ1bmN0aW9uIF9jb21waWxlKHNjaGVtYU9iaiwgcm9vdCkge1xuICBpZiAoc2NoZW1hT2JqLmNvbXBpbGluZykge1xuICAgIHNjaGVtYU9iai52YWxpZGF0ZSA9IGNhbGxWYWxpZGF0ZTtcbiAgICBjYWxsVmFsaWRhdGUuc2NoZW1hID0gc2NoZW1hT2JqLnNjaGVtYTtcbiAgICBjYWxsVmFsaWRhdGUuZXJyb3JzID0gbnVsbDtcbiAgICBjYWxsVmFsaWRhdGUucm9vdCA9IHJvb3QgPyByb290IDogY2FsbFZhbGlkYXRlO1xuICAgIGlmIChzY2hlbWFPYmouc2NoZW1hLiRhc3luYyA9PT0gdHJ1ZSlcbiAgICAgIGNhbGxWYWxpZGF0ZS4kYXN5bmMgPSB0cnVlO1xuICAgIHJldHVybiBjYWxsVmFsaWRhdGU7XG4gIH1cbiAgc2NoZW1hT2JqLmNvbXBpbGluZyA9IHRydWU7XG5cbiAgdmFyIGN1cnJlbnRPcHRzO1xuICBpZiAoc2NoZW1hT2JqLm1ldGEpIHtcbiAgICBjdXJyZW50T3B0cyA9IHRoaXMuX29wdHM7XG4gICAgdGhpcy5fb3B0cyA9IHRoaXMuX21ldGFPcHRzO1xuICB9XG5cbiAgdmFyIHY7XG4gIHRyeSB7IHYgPSBjb21waWxlU2NoZW1hLmNhbGwodGhpcywgc2NoZW1hT2JqLnNjaGVtYSwgcm9vdCwgc2NoZW1hT2JqLmxvY2FsUmVmcyk7IH1cbiAgY2F0Y2goZSkge1xuICAgIGRlbGV0ZSBzY2hlbWFPYmoudmFsaWRhdGU7XG4gICAgdGhyb3cgZTtcbiAgfVxuICBmaW5hbGx5IHtcbiAgICBzY2hlbWFPYmouY29tcGlsaW5nID0gZmFsc2U7XG4gICAgaWYgKHNjaGVtYU9iai5tZXRhKSB0aGlzLl9vcHRzID0gY3VycmVudE9wdHM7XG4gIH1cblxuICBzY2hlbWFPYmoudmFsaWRhdGUgPSB2O1xuICBzY2hlbWFPYmoucmVmcyA9IHYucmVmcztcbiAgc2NoZW1hT2JqLnJlZlZhbCA9IHYucmVmVmFsO1xuICBzY2hlbWFPYmoucm9vdCA9IHYucm9vdDtcbiAgcmV0dXJuIHY7XG5cblxuICAvKiBAdGhpcyAgIHsqfSAtIGN1c3RvbSBjb250ZXh0LCBzZWUgcGFzc0NvbnRleHQgb3B0aW9uICovXG4gIGZ1bmN0aW9uIGNhbGxWYWxpZGF0ZSgpIHtcbiAgICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlICovXG4gICAgdmFyIF92YWxpZGF0ZSA9IHNjaGVtYU9iai52YWxpZGF0ZTtcbiAgICB2YXIgcmVzdWx0ID0gX3ZhbGlkYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgY2FsbFZhbGlkYXRlLmVycm9ycyA9IF92YWxpZGF0ZS5lcnJvcnM7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIGNob29zZUdldElkKG9wdHMpIHtcbiAgc3dpdGNoIChvcHRzLnNjaGVtYUlkKSB7XG4gICAgY2FzZSAnYXV0byc6IHJldHVybiBfZ2V0JElkT3JJZDtcbiAgICBjYXNlICdpZCc6IHJldHVybiBfZ2V0SWQ7XG4gICAgZGVmYXVsdDogcmV0dXJuIF9nZXQkSWQ7XG4gIH1cbn1cblxuLyogQHRoaXMgICBBanYgKi9cbmZ1bmN0aW9uIF9nZXRJZChzY2hlbWEpIHtcbiAgaWYgKHNjaGVtYS4kaWQpIHRoaXMubG9nZ2VyLndhcm4oJ3NjaGVtYSAkaWQgaWdub3JlZCcsIHNjaGVtYS4kaWQpO1xuICByZXR1cm4gc2NoZW1hLmlkO1xufVxuXG4vKiBAdGhpcyAgIEFqdiAqL1xuZnVuY3Rpb24gX2dldCRJZChzY2hlbWEpIHtcbiAgaWYgKHNjaGVtYS5pZCkgdGhpcy5sb2dnZXIud2Fybignc2NoZW1hIGlkIGlnbm9yZWQnLCBzY2hlbWEuaWQpO1xuICByZXR1cm4gc2NoZW1hLiRpZDtcbn1cblxuXG5mdW5jdGlvbiBfZ2V0JElkT3JJZChzY2hlbWEpIHtcbiAgaWYgKHNjaGVtYS4kaWQgJiYgc2NoZW1hLmlkICYmIHNjaGVtYS4kaWQgIT0gc2NoZW1hLmlkKVxuICAgIHRocm93IG5ldyBFcnJvcignc2NoZW1hICRpZCBpcyBkaWZmZXJlbnQgZnJvbSBpZCcpO1xuICByZXR1cm4gc2NoZW1hLiRpZCB8fCBzY2hlbWEuaWQ7XG59XG5cblxuLyoqXG4gKiBDb252ZXJ0IGFycmF5IG9mIGVycm9yIG1lc3NhZ2Ugb2JqZWN0cyB0byBzdHJpbmdcbiAqIEB0aGlzICAgQWp2XG4gKiBAcGFyYW0gIHtBcnJheTxPYmplY3Q+fSBlcnJvcnMgb3B0aW9uYWwgYXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvcnMsIGlmIG5vdCBwYXNzZWQgZXJyb3JzIGZyb20gdGhlIGluc3RhbmNlIGFyZSB1c2VkLlxuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zIG9wdGlvbmFsIG9wdGlvbnMgd2l0aCBwcm9wZXJ0aWVzIGBzZXBhcmF0b3JgIGFuZCBgZGF0YVZhcmAuXG4gKiBAcmV0dXJuIHtTdHJpbmd9IGh1bWFuIHJlYWRhYmxlIHN0cmluZyB3aXRoIGFsbCBlcnJvcnMgZGVzY3JpcHRpb25zXG4gKi9cbmZ1bmN0aW9uIGVycm9yc1RleHQoZXJyb3JzLCBvcHRpb25zKSB7XG4gIGVycm9ycyA9IGVycm9ycyB8fCB0aGlzLmVycm9ycztcbiAgaWYgKCFlcnJvcnMpIHJldHVybiAnTm8gZXJyb3JzJztcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIHZhciBzZXBhcmF0b3IgPSBvcHRpb25zLnNlcGFyYXRvciA9PT0gdW5kZWZpbmVkID8gJywgJyA6IG9wdGlvbnMuc2VwYXJhdG9yO1xuICB2YXIgZGF0YVZhciA9IG9wdGlvbnMuZGF0YVZhciA9PT0gdW5kZWZpbmVkID8gJ2RhdGEnIDogb3B0aW9ucy5kYXRhVmFyO1xuXG4gIHZhciB0ZXh0ID0gJyc7XG4gIGZvciAodmFyIGk9MDsgaTxlcnJvcnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZSA9IGVycm9yc1tpXTtcbiAgICBpZiAoZSkgdGV4dCArPSBkYXRhVmFyICsgZS5kYXRhUGF0aCArICcgJyArIGUubWVzc2FnZSArIHNlcGFyYXRvcjtcbiAgfVxuICByZXR1cm4gdGV4dC5zbGljZSgwLCAtc2VwYXJhdG9yLmxlbmd0aCk7XG59XG5cblxuLyoqXG4gKiBBZGQgY3VzdG9tIGZvcm1hdFxuICogQHRoaXMgICBBanZcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIGZvcm1hdCBuYW1lXG4gKiBAcGFyYW0ge1N0cmluZ3xSZWdFeHB8RnVuY3Rpb259IGZvcm1hdCBzdHJpbmcgaXMgY29udmVydGVkIHRvIFJlZ0V4cDsgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBib29sZWFuICh0cnVlIHdoZW4gdmFsaWQpXG4gKiBAcmV0dXJuIHtBanZ9IHRoaXMgZm9yIG1ldGhvZCBjaGFpbmluZ1xuICovXG5mdW5jdGlvbiBhZGRGb3JtYXQobmFtZSwgZm9ybWF0KSB7XG4gIGlmICh0eXBlb2YgZm9ybWF0ID09ICdzdHJpbmcnKSBmb3JtYXQgPSBuZXcgUmVnRXhwKGZvcm1hdCk7XG4gIHRoaXMuX2Zvcm1hdHNbbmFtZV0gPSBmb3JtYXQ7XG4gIHJldHVybiB0aGlzO1xufVxuXG5cbmZ1bmN0aW9uIGFkZERlZmF1bHRNZXRhU2NoZW1hKHNlbGYpIHtcbiAgdmFyICRkYXRhU2NoZW1hO1xuICBpZiAoc2VsZi5fb3B0cy4kZGF0YSkge1xuICAgICRkYXRhU2NoZW1hID0gcmVxdWlyZSgnLi9yZWZzL2RhdGEuanNvbicpO1xuICAgIHNlbGYuYWRkTWV0YVNjaGVtYSgkZGF0YVNjaGVtYSwgJGRhdGFTY2hlbWEuJGlkLCB0cnVlKTtcbiAgfVxuICBpZiAoc2VsZi5fb3B0cy5tZXRhID09PSBmYWxzZSkgcmV0dXJuO1xuICB2YXIgbWV0YVNjaGVtYSA9IHJlcXVpcmUoJy4vcmVmcy9qc29uLXNjaGVtYS1kcmFmdC0wNy5qc29uJyk7XG4gIGlmIChzZWxmLl9vcHRzLiRkYXRhKSBtZXRhU2NoZW1hID0gJGRhdGFNZXRhU2NoZW1hKG1ldGFTY2hlbWEsIE1FVEFfU1VQUE9SVF9EQVRBKTtcbiAgc2VsZi5hZGRNZXRhU2NoZW1hKG1ldGFTY2hlbWEsIE1FVEFfU0NIRU1BX0lELCB0cnVlKTtcbiAgc2VsZi5fcmVmc1snaHR0cDovL2pzb24tc2NoZW1hLm9yZy9zY2hlbWEnXSA9IE1FVEFfU0NIRU1BX0lEO1xufVxuXG5cbmZ1bmN0aW9uIGFkZEluaXRpYWxTY2hlbWFzKHNlbGYpIHtcbiAgdmFyIG9wdHNTY2hlbWFzID0gc2VsZi5fb3B0cy5zY2hlbWFzO1xuICBpZiAoIW9wdHNTY2hlbWFzKSByZXR1cm47XG4gIGlmIChBcnJheS5pc0FycmF5KG9wdHNTY2hlbWFzKSkgc2VsZi5hZGRTY2hlbWEob3B0c1NjaGVtYXMpO1xuICBlbHNlIGZvciAodmFyIGtleSBpbiBvcHRzU2NoZW1hcykgc2VsZi5hZGRTY2hlbWEob3B0c1NjaGVtYXNba2V5XSwga2V5KTtcbn1cblxuXG5mdW5jdGlvbiBhZGRJbml0aWFsRm9ybWF0cyhzZWxmKSB7XG4gIGZvciAodmFyIG5hbWUgaW4gc2VsZi5fb3B0cy5mb3JtYXRzKSB7XG4gICAgdmFyIGZvcm1hdCA9IHNlbGYuX29wdHMuZm9ybWF0c1tuYW1lXTtcbiAgICBzZWxmLmFkZEZvcm1hdChuYW1lLCBmb3JtYXQpO1xuICB9XG59XG5cblxuZnVuY3Rpb24gYWRkSW5pdGlhbEtleXdvcmRzKHNlbGYpIHtcbiAgZm9yICh2YXIgbmFtZSBpbiBzZWxmLl9vcHRzLmtleXdvcmRzKSB7XG4gICAgdmFyIGtleXdvcmQgPSBzZWxmLl9vcHRzLmtleXdvcmRzW25hbWVdO1xuICAgIHNlbGYuYWRkS2V5d29yZChuYW1lLCBrZXl3b3JkKTtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIGNoZWNrVW5pcXVlKHNlbGYsIGlkKSB7XG4gIGlmIChzZWxmLl9zY2hlbWFzW2lkXSB8fCBzZWxmLl9yZWZzW2lkXSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NjaGVtYSB3aXRoIGtleSBvciBpZCBcIicgKyBpZCArICdcIiBhbHJlYWR5IGV4aXN0cycpO1xufVxuXG5cbmZ1bmN0aW9uIGdldE1ldGFTY2hlbWFPcHRpb25zKHNlbGYpIHtcbiAgdmFyIG1ldGFPcHRzID0gdXRpbC5jb3B5KHNlbGYuX29wdHMpO1xuICBmb3IgKHZhciBpPTA7IGk8TUVUQV9JR05PUkVfT1BUSU9OUy5sZW5ndGg7IGkrKylcbiAgICBkZWxldGUgbWV0YU9wdHNbTUVUQV9JR05PUkVfT1BUSU9OU1tpXV07XG4gIHJldHVybiBtZXRhT3B0cztcbn1cblxuXG5mdW5jdGlvbiBzZXRMb2dnZXIoc2VsZikge1xuICB2YXIgbG9nZ2VyID0gc2VsZi5fb3B0cy5sb2dnZXI7XG4gIGlmIChsb2dnZXIgPT09IGZhbHNlKSB7XG4gICAgc2VsZi5sb2dnZXIgPSB7bG9nOiBub29wLCB3YXJuOiBub29wLCBlcnJvcjogbm9vcH07XG4gIH0gZWxzZSB7XG4gICAgaWYgKGxvZ2dlciA9PT0gdW5kZWZpbmVkKSBsb2dnZXIgPSBjb25zb2xlO1xuICAgIGlmICghKHR5cGVvZiBsb2dnZXIgPT0gJ29iamVjdCcgJiYgbG9nZ2VyLmxvZyAmJiBsb2dnZXIud2FybiAmJiBsb2dnZXIuZXJyb3IpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdsb2dnZXIgbXVzdCBpbXBsZW1lbnQgbG9nLCB3YXJuIGFuZCBlcnJvciBtZXRob2RzJyk7XG4gICAgc2VsZi5sb2dnZXIgPSBsb2dnZXI7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBub29wKCkge31cbiIsImltcG9ydCBBanYgZnJvbSBcImFqdlwiO1xuLyogZ2xvYmFsIGdsb2JhbFRoaXMgKi9cbi8qIGVzbGludCBuby1yZXN0cmljdGVkLWdsb2JhbHM6IDEgKi9cbmZ1bmN0aW9uIHNjaGVtYSgpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIHRpbWVsaW5lOiB7ICRyZWY6IFwiIy9kZWZzL2Jsb2NrXCIgfSxcbiAgICAgIHRvdGFsRHVyYXRpb246IHsgdHlwZTogXCJudW1iZXJcIiwgbWluaW11bTogMCB9LFxuICAgICAgc3RhZ2dlcmluZ3M6IHsgdHlwZTogXCJhcnJheVwiLCBpdGVtczogeyAkcmVmOiBcIiMvZGVmcy9zdGFnZ2VyaW5nXCIgfSB9LFxuICAgICAgZW51bWVyYXRvcnM6IHsgdHlwZTogXCJhcnJheVwiLCBpdGVtczogeyAkcmVmOiBcIiMvZGVmcy9lbnVtZXJhdG9yXCIgfSB9LFxuICAgICAgbWV0YTogeyB0eXBlOiBcIm9iamVjdFwiIH1cbiAgICB9LFxuICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICBkZWZzOiB7XG4gICAgICBlbnVtZXJhdG9yOiB7XG4gICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBuYW1lOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICBmaWx0ZXI6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgIHN0ZXBTaXplOiB7IHR5cGU6IFwibnVtYmVyXCIgfSxcbiAgICAgICAgICB2YWx1ZXM6IHsgdHlwZTogXCJhcnJheVwiIH1cbiAgICAgICAgfSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICBvbmVPZjogW1xuICAgICAgICAgIHsgcmVxdWlyZWQ6IFtcIm5hbWVcIiwgXCJmaWx0ZXJcIiwgXCJzdGVwU2l6ZVwiXSB9LFxuICAgICAgICAgIHsgcmVxdWlyZWQ6IFtcIm5hbWVcIiwgXCJmaWx0ZXJcIiwgXCJ2YWx1ZXNcIl0gfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgc3RhZ2dlcmluZzoge1xuICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgbmFtZTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgYnk6IHtcbiAgICAgICAgICAgIG9uZU9mOiBbXG4gICAgICAgICAgICAgIHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICBpbml0aWFsOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgICAgICAgIGZpbmFsOiB7IHR5cGU6IFwic3RyaW5nXCIgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIG92ZXJsYXA6IHsgdHlwZTogXCJudW1iZXJcIiB9LFxuICAgICAgICAgIG9yZGVyOiB7IHR5cGU6IFwic3RyaW5nXCIsIGVudW06IFtcImFzY2VuZGluZ1wiLCBcImRlc2NlbmRpbmdcIl0gfSxcbiAgICAgICAgICBzdGFnZ2VyaW5nOiB7ICRyZWY6IFwiIy9kZWZzL3N1YlN0YWdnZXJpbmdcIiB9XG4gICAgICAgIH0sXG4gICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgb25lT2Y6IFt7IHJlcXVpcmVkOiBbXCJuYW1lXCIsIFwib3ZlcmxhcFwiLCBcImJ5XCJdIH1dXG4gICAgICB9LFxuICAgICAgc3ViU3RhZ2dlcmluZzoge1xuICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgbmFtZTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgYnk6IHsgb25lT2Y6IFt7IHR5cGU6IFwic3RyaW5nXCIgfSwgeyB0eXBlOiBcIm9iamVjdFwiIH1dIH0sXG4gICAgICAgICAgb3ZlcmxhcDogeyB0eXBlOiBcIm51bWJlclwiIH0sXG4gICAgICAgICAgb3JkZXI6IHsgdHlwZTogXCJzdHJpbmdcIiwgZW51bTogW1wiYXNjZW5kaW5nXCIsIFwiZGVzY2VuZGluZ1wiXSB9LFxuICAgICAgICAgIHN0YWdnZXJpbmc6IHsgJHJlZjogXCIjL2RlZnMvc3ViU3RhZ2dlcmluZ1wiIH1cbiAgICAgICAgfSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICBvbmVPZjogW3sgcmVxdWlyZWQ6IFtcIm92ZXJsYXBcIiwgXCJieVwiXSB9XVxuICAgICAgfSxcbiAgICAgIGJsb2NrOiB7XG4gICAgICAgIGFueU9mOiBbXG4gICAgICAgICAgeyAkcmVmOiBcIiMvZGVmcy9zeW5jXCIgfSxcbiAgICAgICAgICB7ICRyZWY6IFwiIy9kZWZzL2NvbmNhdFwiIH0sXG4gICAgICAgICAgeyAkcmVmOiBcIiMvZGVmcy9tYXJrU3RlcFwiIH0sXG4gICAgICAgICAgeyAkcmVmOiBcIiMvZGVmcy9heGlzU3RlcFwiIH0sXG4gICAgICAgICAgeyAkcmVmOiBcIiMvZGVmcy9sZWdlbmRTdGVwXCIgfSxcbiAgICAgICAgICB7ICRyZWY6IFwiIy9kZWZzL3BhdXNlU3RlcFwiIH0sXG4gICAgICAgICAgeyAkcmVmOiBcIiMvZGVmcy92aWV3U3RlcFwiIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIGNvbmNhdDoge1xuICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgY29uY2F0OiB7IHR5cGU6IFwiYXJyYXlcIiwgaXRlbXM6IHsgJHJlZjogXCIjL2RlZnMvYmxvY2tcIiB9IH0sXG4gICAgICAgICAgYXV0b1NjYWxlT3JkZXI6IHsgdHlwZTogXCJhcnJheVwiLCBpdGVtczogeyB0eXBlOiBcInN0cmluZ1wiIH0gfSxcbiAgICAgICAgICBlbnVtZXJhdG9yOiB7IHR5cGU6IFwic3RyaW5nXCIgfVxuICAgICAgICB9LFxuICAgICAgICByZXF1aXJlZDogW1wiY29uY2F0XCJdLFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcbiAgICAgIH0sXG4gICAgICBzeW5jOiB7XG4gICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBzeW5jOiB7IHR5cGU6IFwiYXJyYXlcIiwgaXRlbXM6IHsgJHJlZjogXCIjL2RlZnMvYmxvY2tcIiB9IH0sXG4gICAgICAgICAgYW5jaG9yOiB7IHR5cGU6IFwic3RyaW5nXCIsIGVudW06IFtcInN0YXJ0XCIsIFwiZW5kXCJdIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWlyZWQ6IFtcInN5bmNcIl0sXG4gICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIG1hcmtTdGVwOiB7XG4gICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBjb21wb25lbnQ6IHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7IG1hcms6IHsgdHlwZTogXCJzdHJpbmdcIiB9IH0sXG4gICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICByZXF1aXJlZDogW1wibWFya1wiXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgY2hhbmdlOiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgb25lT2Y6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgICAgICAgIGtleXM6IHsgdHlwZTogXCJhcnJheVwiLCBpdGVtczogeyB0eXBlOiBcInN0cmluZ1wiIH0gfSxcbiAgICAgICAgICAgICAgICAgICAgICBlbnRlcjogeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgICAgICAgICAgIGV4aXQ6IHsgdHlwZTogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICB1cGRhdGU6IHsgdHlwZTogXCJib29sZWFuXCIgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB7IHR5cGU6IFwiYXJyYXlcIiwgaXRlbXM6IHsgdHlwZTogXCJzdHJpbmdcIiB9IH0sXG4gICAgICAgICAgICAgICAgICB7IHR5cGU6IFwiYm9vbGVhblwiIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHNjYWxlOiB7XG4gICAgICAgICAgICAgICAgb25lT2Y6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHsgZGF0YTogeyB0eXBlOiBcImJvb2xlYW5cIiB9IH0sXG4gICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB7IHR5cGU6IFwiYm9vbGVhblwiIH0sXG4gICAgICAgICAgICAgICAgICB7IHR5cGU6IFwiYXJyYXlcIiwgaXRlbXM6IHsgdHlwZTogXCJzdHJpbmdcIiB9IH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHNpZ25hbDoge1xuICAgICAgICAgICAgICAgIG9uZU9mOiBbXG4gICAgICAgICAgICAgICAgICB7IHR5cGU6IFwiYXJyYXlcIiwgaXRlbXM6IHsgdHlwZTogXCJzdHJpbmdcIiB9IH0sXG4gICAgICAgICAgICAgICAgICB7IHR5cGU6IFwiYm9vbGVhblwiIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG1hcmt0eXBlOiB7IHR5cGU6IFwiYm9vbGVhblwiIH0sXG4gICAgICAgICAgICAgIGVuY29kZTogeyAkcmVmOiBcIiMvZGVmcy9lbmNvZGVcIiB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aW1pbmc6IHsgJHJlZjogXCIjL2RlZnMvdGltaW5nXCIgfSxcbiAgICAgICAgICBlbnVtZXJhdG9yOiB7IHR5cGU6IFwic3RyaW5nXCIgfVxuICAgICAgICB9LFxuICAgICAgICByZXF1aXJlZDogW1widGltaW5nXCIsIFwiY29tcG9uZW50XCJdLFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcbiAgICAgIH0sXG4gICAgICBheGlzU3RlcDoge1xuICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgY29tcG9uZW50OiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgcHJvcGVydGllczogeyBheGlzOiB7IHR5cGU6IFwic3RyaW5nXCIgfSB9LFxuICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IFtcImF4aXNcIl1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGNoYW5nZToge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgc2NhbGU6IHtcbiAgICAgICAgICAgICAgICBvbmVPZjogW1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgZG9tYWluRGltZW5zaW9uOiB7IHR5cGU6IFwic3RyaW5nXCIsIGVudW06IFtcInNhbWVcIiwgXCJkaWZmXCJdIH0sXG4gICAgICAgICAgICAgICAgICAgICAgZGF0YTogeyB0eXBlOiBcImJvb2xlYW5cIiB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHsgdHlwZTogXCJib29sZWFuXCIgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgc2lnbmFsOiB7XG4gICAgICAgICAgICAgICAgb25lT2Y6IFtcbiAgICAgICAgICAgICAgICAgIHsgdHlwZTogXCJhcnJheVwiLCBpdGVtczogeyB0eXBlOiBcInN0cmluZ1wiIH0gfSxcbiAgICAgICAgICAgICAgICAgIHsgdHlwZTogXCJib29sZWFuXCIgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbWFya3R5cGU6IHsgdHlwZTogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgICAgZW5jb2RlOiB7XG4gICAgICAgICAgICAgICAgb25lT2Y6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgICAgICAgIGF4aXM6IHsgJHJlZjogXCIjL2RlZnMvZW5jb2RlXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogeyAkcmVmOiBcIiMvZGVmcy9lbmNvZGVcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgIHRpY2tzOiB7ICRyZWY6IFwiIy9kZWZzL2VuY29kZVwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgbGFiZWxzOiB7ICRyZWY6IFwiIy9kZWZzL2VuY29kZVwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgZ3JpZDogeyAkcmVmOiBcIiMvZGVmcy9lbmNvZGVcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbjogeyAkcmVmOiBcIiMvZGVmcy9lbmNvZGVcIiB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHsgdHlwZTogXCJib29sZWFuXCIgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGltaW5nOiB7ICRyZWY6IFwiIy9kZWZzL3RpbWluZ1wiIH0sXG4gICAgICAgICAgZW51bWVyYXRvcjogeyB0eXBlOiBcInN0cmluZ1wiIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWlyZWQ6IFtcInRpbWluZ1wiLCBcImNvbXBvbmVudFwiXSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXG4gICAgICB9LFxuICAgICAgbGVnZW5kU3RlcDoge1xuICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgY29tcG9uZW50OiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgcHJvcGVydGllczogeyBsZWdlbmQ6IHsgdHlwZTogXCJzdHJpbmdcIiB9IH0sXG4gICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICByZXF1aXJlZDogW1wibGVnZW5kXCJdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjaGFuZ2U6IHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIHNjYWxlOiB7XG4gICAgICAgICAgICAgICAgb25lT2Y6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbkRpbWVuc2lvbjogeyB0eXBlOiBcInN0cmluZ1wiLCBlbnVtOiBbXCJzYW1lXCIsIFwiZGlmZlwiXSB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7IGRhdGE6IHsgdHlwZTogXCJib29sZWFuXCIgfSB9LFxuICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgICAgICAgeyB0eXBlOiBcImFycmF5XCIsIGl0ZW1zOiB7IHR5cGU6IFwic3RyaW5nXCIgfSB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBzaWduYWw6IHtcbiAgICAgICAgICAgICAgICBvbmVPZjogW1xuICAgICAgICAgICAgICAgICAgeyB0eXBlOiBcImFycmF5XCIsIGl0ZW1zOiB7IHR5cGU6IFwic3RyaW5nXCIgfSB9LFxuICAgICAgICAgICAgICAgICAgeyB0eXBlOiBcImJvb2xlYW5cIiB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBlbmNvZGU6IHtcbiAgICAgICAgICAgICAgICBvbmVPZjogW1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgc3ltYm9sczogeyAkcmVmOiBcIiMvZGVmcy9lbmNvZGVcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB7ICRyZWY6IFwiIy9kZWZzL2VuY29kZVwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgbGFiZWxzOiB7ICRyZWY6IFwiIy9kZWZzL2VuY29kZVwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgZW50cmllczogeyAkcmVmOiBcIiMvZGVmcy9lbmNvZGVcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgIGdyYWRpZW50OiB7ICRyZWY6IFwiIy9kZWZzL2VuY29kZVwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgbGVnZW5kOiB7ICRyZWY6IFwiIy9kZWZzL2VuY29kZVwiIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgeyB0eXBlOiBcImJvb2xlYW5cIiB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aW1pbmc6IHsgJHJlZjogXCIjL2RlZnMvdGltaW5nXCIgfSxcbiAgICAgICAgICBlbnVtZXJhdG9yOiB7IHR5cGU6IFwic3RyaW5nXCIgfVxuICAgICAgICB9LFxuICAgICAgICByZXF1aXJlZDogW1widGltaW5nXCIsIFwiY29tcG9uZW50XCJdLFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcbiAgICAgIH0sXG4gICAgICBwYXVzZVN0ZXA6IHtcbiAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGNvbXBvbmVudDogeyBjb25zdDogXCJwYXVzZVwiIH0sXG4gICAgICAgICAgdGltaW5nOiB7ICRyZWY6IFwiIy9kZWZzL3RpbWluZ1wiIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWlyZWQ6IFtcInRpbWluZ1wiLCBcImNvbXBvbmVudFwiXSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXG4gICAgICB9LFxuICAgICAgdmlld1N0ZXA6IHtcbiAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGNvbXBvbmVudDogeyBjb25zdDogXCJ2aWV3XCIgfSxcbiAgICAgICAgICBjaGFuZ2U6IHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIHNpZ25hbDoge1xuICAgICAgICAgICAgICAgIG9uZU9mOiBbXG4gICAgICAgICAgICAgICAgICB7IHR5cGU6IFwiYXJyYXlcIiwgaXRlbXM6IHsgdHlwZTogXCJzdHJpbmdcIiB9IH0sXG4gICAgICAgICAgICAgICAgICB7IHR5cGU6IFwiYm9vbGVhblwiIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGltaW5nOiB7ICRyZWY6IFwiIy9kZWZzL3RpbWluZ1wiIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWlyZWQ6IFtcInRpbWluZ1wiLCBcImNvbXBvbmVudFwiXSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXG4gICAgICB9LFxuICAgICAgdGltaW5nOiB7XG4gICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBkdXJhdGlvbjoge1xuICAgICAgICAgICAgb25lT2Y6IFtcbiAgICAgICAgICAgICAgeyB0eXBlOiBcIm51bWJlclwiLCBtaW5pbXVtOiAwIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHsgcmF0aW86IHsgdHlwZTogXCJudW1iZXJcIiwgbWluaW11bTogMCB9IH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZGVsYXk6IHtcbiAgICAgICAgICAgIG9uZU9mOiBbXG4gICAgICAgICAgICAgIHsgdHlwZTogXCJudW1iZXJcIiB9LFxuICAgICAgICAgICAgICB7IHR5cGU6IFwib2JqZWN0XCIsIHByb3BlcnRpZXM6IHsgcmF0aW86IHsgdHlwZTogXCJudW1iZXJcIiB9IH0gfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgc3RhZ2dlcmluZzogeyB0eXBlOiBcInN0cmluZ1wiIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGVuY29kZToge1xuICAgICAgICBvbmVPZjogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIHVwZGF0ZTogeyBvbmVPZjogW3sgdHlwZTogXCJvYmplY3RcIiB9LCB7IHR5cGU6IFwiYm9vbGVhblwiIH1dIH0sXG4gICAgICAgICAgICAgIGVudGVyOiB7IG9uZU9mOiBbeyB0eXBlOiBcIm9iamVjdFwiIH0sIHsgdHlwZTogXCJib29sZWFuXCIgfV0gfSxcbiAgICAgICAgICAgICAgZXhpdDogeyBvbmVPZjogW3sgdHlwZTogXCJvYmplY3RcIiB9LCB7IHR5cGU6IFwiYm9vbGVhblwiIH1dIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgdHlwZTogXCJib29sZWFuXCIgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBzcGVjQ2hlY2tlcihzcGVjKSB7XG4gIGNvbnN0IGFqdiA9IG5ldyBBanYoKTtcbiAgY29uc3QgdmFsaWRhdGUgPSBhanYuY29tcGlsZShzY2hlbWEoKSk7XG5cbiAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZShzcGVjKTtcbiAgaWYgKCF2YWxpZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgU3BlY1wiLCB2YWxpZGF0ZS5lcnJvcnMpO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQge1xuICAvLyBzY2hlbWEsXG4gIHNwZWNDaGVja2VyXG59OyIsImV4cG9ydCB2YXIgUmF3Q29kZSA9ICdSYXdDb2RlJztcbmV4cG9ydCB2YXIgTGl0ZXJhbCA9ICdMaXRlcmFsJztcbmV4cG9ydCB2YXIgUHJvcGVydHkgPSAnUHJvcGVydHknO1xuZXhwb3J0IHZhciBJZGVudGlmaWVyID0gJ0lkZW50aWZpZXInO1xuXG5leHBvcnQgdmFyIEFycmF5RXhwcmVzc2lvbiA9ICdBcnJheUV4cHJlc3Npb24nO1xuZXhwb3J0IHZhciBCaW5hcnlFeHByZXNzaW9uID0gJ0JpbmFyeUV4cHJlc3Npb24nO1xuZXhwb3J0IHZhciBDYWxsRXhwcmVzc2lvbiA9ICdDYWxsRXhwcmVzc2lvbic7XG5leHBvcnQgdmFyIENvbmRpdGlvbmFsRXhwcmVzc2lvbiA9ICdDb25kaXRpb25hbEV4cHJlc3Npb24nO1xuZXhwb3J0IHZhciBMb2dpY2FsRXhwcmVzc2lvbiA9ICdMb2dpY2FsRXhwcmVzc2lvbic7XG5leHBvcnQgdmFyIE1lbWJlckV4cHJlc3Npb24gPSAnTWVtYmVyRXhwcmVzc2lvbic7XG5leHBvcnQgdmFyIE9iamVjdEV4cHJlc3Npb24gPSAnT2JqZWN0RXhwcmVzc2lvbic7XG5leHBvcnQgdmFyIFVuYXJ5RXhwcmVzc2lvbiA9ICdVbmFyeUV4cHJlc3Npb24nO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBBU1ROb2RlKHR5cGUpIHtcbiAgdGhpcy50eXBlID0gdHlwZTtcbn1cblxuQVNUTm9kZS5wcm90b3R5cGUudmlzaXQgPSBmdW5jdGlvbih2aXNpdG9yKSB7XG4gIHZhciBub2RlID0gdGhpcywgYywgaSwgbjtcblxuICBpZiAodmlzaXRvcihub2RlKSkgcmV0dXJuIDE7XG5cbiAgZm9yIChjPWNoaWxkcmVuKG5vZGUpLCBpPTAsIG49Yy5sZW5ndGg7IGk8bjsgKytpKSB7XG4gICAgaWYgKGNbaV0udmlzaXQodmlzaXRvcikpIHJldHVybiAxO1xuICB9XG59O1xuXG5mdW5jdGlvbiBjaGlsZHJlbihub2RlKSB7XG4gIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgY2FzZSBBcnJheUV4cHJlc3Npb246XG4gICAgICByZXR1cm4gbm9kZS5lbGVtZW50cztcbiAgICBjYXNlIEJpbmFyeUV4cHJlc3Npb246XG4gICAgY2FzZSBMb2dpY2FsRXhwcmVzc2lvbjpcbiAgICAgIHJldHVybiBbbm9kZS5sZWZ0LCBub2RlLnJpZ2h0XTtcbiAgICBjYXNlIENhbGxFeHByZXNzaW9uOlxuICAgICAgdmFyIGFyZ3MgPSBub2RlLmFyZ3VtZW50cy5zbGljZSgpO1xuICAgICAgYXJncy51bnNoaWZ0KG5vZGUuY2FsbGVlKTtcbiAgICAgIHJldHVybiBhcmdzO1xuICAgIGNhc2UgQ29uZGl0aW9uYWxFeHByZXNzaW9uOlxuICAgICAgcmV0dXJuIFtub2RlLnRlc3QsIG5vZGUuY29uc2VxdWVudCwgbm9kZS5hbHRlcm5hdGVdO1xuICAgIGNhc2UgTWVtYmVyRXhwcmVzc2lvbjpcbiAgICAgIHJldHVybiBbbm9kZS5vYmplY3QsIG5vZGUucHJvcGVydHldO1xuICAgIGNhc2UgT2JqZWN0RXhwcmVzc2lvbjpcbiAgICAgIHJldHVybiBub2RlLnByb3BlcnRpZXM7XG4gICAgY2FzZSBQcm9wZXJ0eTpcbiAgICAgIHJldHVybiBbbm9kZS5rZXksIG5vZGUudmFsdWVdO1xuICAgIGNhc2UgVW5hcnlFeHByZXNzaW9uOlxuICAgICAgcmV0dXJuIFtub2RlLmFyZ3VtZW50XTtcbiAgICBjYXNlIElkZW50aWZpZXI6XG4gICAgY2FzZSBMaXRlcmFsOlxuICAgIGNhc2UgUmF3Q29kZTpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFtdO1xuICB9XG59XG4iLCIvKlxuICBUaGUgZm9sbG93aW5nIGV4cHJlc3Npb24gcGFyc2VyIGlzIGJhc2VkIG9uIEVzcHJpbWEgKGh0dHA6Ly9lc3ByaW1hLm9yZy8pLlxuICBPcmlnaW5hbCBoZWFkZXIgY29tbWVudCBhbmQgbGljZW5zZSBmb3IgRXNwcmltYSBpcyBpbmNsdWRlZCBoZXJlOlxuXG4gIENvcHlyaWdodCAoQykgMjAxMyBBcml5YSBIaWRheWF0IDxhcml5YS5oaWRheWF0QGdtYWlsLmNvbT5cbiAgQ29weXJpZ2h0IChDKSAyMDEzIFRoYWRkZWUgVHlsIDx0aGFkZGVlLnR5bEBnbWFpbC5jb20+XG4gIENvcHlyaWdodCAoQykgMjAxMyBNYXRoaWFzIEJ5bmVucyA8bWF0aGlhc0BxaXdpLmJlPlxuICBDb3B5cmlnaHQgKEMpIDIwMTIgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+XG4gIENvcHlyaWdodCAoQykgMjAxMiBNYXRoaWFzIEJ5bmVucyA8bWF0aGlhc0BxaXdpLmJlPlxuICBDb3B5cmlnaHQgKEMpIDIwMTIgSm9vc3QtV2ltIEJvZWtlc3RlaWpuIDxqb29zdC13aW1AYm9la2VzdGVpam4ubmw+XG4gIENvcHlyaWdodCAoQykgMjAxMiBLcmlzIEtvd2FsIDxrcmlzLmtvd2FsQGNpeGFyLmNvbT5cbiAgQ29weXJpZ2h0IChDKSAyMDEyIFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT5cbiAgQ29weXJpZ2h0IChDKSAyMDEyIEFycGFkIEJvcnNvcyA8YXJwYWQuYm9yc29zQGdvb2dsZW1haWwuY29tPlxuICBDb3B5cmlnaHQgKEMpIDIwMTEgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+XG5cbiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4gIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4gIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cbmltcG9ydCBBU1ROb2RlIGZyb20gJy4vYXN0JztcblxudmFyIFRva2VuTmFtZSxcbiAgICBzb3VyY2UsXG4gICAgaW5kZXgsXG4gICAgbGVuZ3RoLFxuICAgIGxvb2thaGVhZDtcblxudmFyIFRva2VuQm9vbGVhbkxpdGVyYWwgPSAxLFxuICAgIFRva2VuRU9GID0gMixcbiAgICBUb2tlbklkZW50aWZpZXIgPSAzLFxuICAgIFRva2VuS2V5d29yZCA9IDQsXG4gICAgVG9rZW5OdWxsTGl0ZXJhbCA9IDUsXG4gICAgVG9rZW5OdW1lcmljTGl0ZXJhbCA9IDYsXG4gICAgVG9rZW5QdW5jdHVhdG9yID0gNyxcbiAgICBUb2tlblN0cmluZ0xpdGVyYWwgPSA4LFxuICAgIFRva2VuUmVndWxhckV4cHJlc3Npb24gPSA5O1xuXG5Ub2tlbk5hbWUgPSB7fTtcblRva2VuTmFtZVtUb2tlbkJvb2xlYW5MaXRlcmFsXSA9ICdCb29sZWFuJztcblRva2VuTmFtZVtUb2tlbkVPRl0gPSAnPGVuZD4nO1xuVG9rZW5OYW1lW1Rva2VuSWRlbnRpZmllcl0gPSAnSWRlbnRpZmllcic7XG5Ub2tlbk5hbWVbVG9rZW5LZXl3b3JkXSA9ICdLZXl3b3JkJztcblRva2VuTmFtZVtUb2tlbk51bGxMaXRlcmFsXSA9ICdOdWxsJztcblRva2VuTmFtZVtUb2tlbk51bWVyaWNMaXRlcmFsXSA9ICdOdW1lcmljJztcblRva2VuTmFtZVtUb2tlblB1bmN0dWF0b3JdID0gJ1B1bmN0dWF0b3InO1xuVG9rZW5OYW1lW1Rva2VuU3RyaW5nTGl0ZXJhbF0gPSAnU3RyaW5nJztcblRva2VuTmFtZVtUb2tlblJlZ3VsYXJFeHByZXNzaW9uXSA9ICdSZWd1bGFyRXhwcmVzc2lvbic7XG5cbnZhciBTeW50YXhBcnJheUV4cHJlc3Npb24gPSAnQXJyYXlFeHByZXNzaW9uJyxcbiAgICBTeW50YXhCaW5hcnlFeHByZXNzaW9uID0gJ0JpbmFyeUV4cHJlc3Npb24nLFxuICAgIFN5bnRheENhbGxFeHByZXNzaW9uID0gJ0NhbGxFeHByZXNzaW9uJyxcbiAgICBTeW50YXhDb25kaXRpb25hbEV4cHJlc3Npb24gPSAnQ29uZGl0aW9uYWxFeHByZXNzaW9uJyxcbiAgICBTeW50YXhJZGVudGlmaWVyID0gJ0lkZW50aWZpZXInLFxuICAgIFN5bnRheExpdGVyYWwgPSAnTGl0ZXJhbCcsXG4gICAgU3ludGF4TG9naWNhbEV4cHJlc3Npb24gPSAnTG9naWNhbEV4cHJlc3Npb24nLFxuICAgIFN5bnRheE1lbWJlckV4cHJlc3Npb24gPSAnTWVtYmVyRXhwcmVzc2lvbicsXG4gICAgU3ludGF4T2JqZWN0RXhwcmVzc2lvbiA9ICdPYmplY3RFeHByZXNzaW9uJyxcbiAgICBTeW50YXhQcm9wZXJ0eSA9ICdQcm9wZXJ0eScsXG4gICAgU3ludGF4VW5hcnlFeHByZXNzaW9uID0gJ1VuYXJ5RXhwcmVzc2lvbic7XG5cbi8vIEVycm9yIG1lc3NhZ2VzIHNob3VsZCBiZSBpZGVudGljYWwgdG8gVjguXG52YXIgTWVzc2FnZVVuZXhwZWN0ZWRUb2tlbiA9ICdVbmV4cGVjdGVkIHRva2VuICUwJyxcbiAgICBNZXNzYWdlVW5leHBlY3RlZE51bWJlciA9ICdVbmV4cGVjdGVkIG51bWJlcicsXG4gICAgTWVzc2FnZVVuZXhwZWN0ZWRTdHJpbmcgPSAnVW5leHBlY3RlZCBzdHJpbmcnLFxuICAgIE1lc3NhZ2VVbmV4cGVjdGVkSWRlbnRpZmllciA9ICdVbmV4cGVjdGVkIGlkZW50aWZpZXInLFxuICAgIE1lc3NhZ2VVbmV4cGVjdGVkUmVzZXJ2ZWQgPSAnVW5leHBlY3RlZCByZXNlcnZlZCB3b3JkJyxcbiAgICBNZXNzYWdlVW5leHBlY3RlZEVPUyA9ICdVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dCcsXG4gICAgTWVzc2FnZUludmFsaWRSZWdFeHAgPSAnSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24nLFxuICAgIE1lc3NhZ2VVbnRlcm1pbmF0ZWRSZWdFeHAgPSAnSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb246IG1pc3NpbmcgLycsXG4gICAgTWVzc2FnZVN0cmljdE9jdGFsTGl0ZXJhbCA9ICdPY3RhbCBsaXRlcmFscyBhcmUgbm90IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGUuJyxcbiAgICBNZXNzYWdlU3RyaWN0RHVwbGljYXRlUHJvcGVydHkgPSAnRHVwbGljYXRlIGRhdGEgcHJvcGVydHkgaW4gb2JqZWN0IGxpdGVyYWwgbm90IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGUnO1xuXG52YXIgSUxMRUdBTCA9ICdJTExFR0FMJyxcbiAgICBESVNBQkxFRCA9ICdEaXNhYmxlZC4nO1xuXG4vLyBTZWUgYWxzbyB0b29scy9nZW5lcmF0ZS11bmljb2RlLXJlZ2V4LnB5LlxudmFyIFJlZ2V4Tm9uQXNjaWlJZGVudGlmaWVyU3RhcnQgPSBuZXcgUmVnRXhwKFwiW1xcXFx4QUFcXFxceEI1XFxcXHhCQVxcXFx4QzAtXFxcXHhENlxcXFx4RDgtXFxcXHhGNlxcXFx4RjgtXFxcXHUwMkMxXFxcXHUwMkM2LVxcXFx1MDJEMVxcXFx1MDJFMC1cXFxcdTAyRTRcXFxcdTAyRUNcXFxcdTAyRUVcXFxcdTAzNzAtXFxcXHUwMzc0XFxcXHUwMzc2XFxcXHUwMzc3XFxcXHUwMzdBLVxcXFx1MDM3RFxcXFx1MDM3RlxcXFx1MDM4NlxcXFx1MDM4OC1cXFxcdTAzOEFcXFxcdTAzOENcXFxcdTAzOEUtXFxcXHUwM0ExXFxcXHUwM0EzLVxcXFx1MDNGNVxcXFx1MDNGNy1cXFxcdTA0ODFcXFxcdTA0OEEtXFxcXHUwNTJGXFxcXHUwNTMxLVxcXFx1MDU1NlxcXFx1MDU1OVxcXFx1MDU2MS1cXFxcdTA1ODdcXFxcdTA1RDAtXFxcXHUwNUVBXFxcXHUwNUYwLVxcXFx1MDVGMlxcXFx1MDYyMC1cXFxcdTA2NEFcXFxcdTA2NkVcXFxcdTA2NkZcXFxcdTA2NzEtXFxcXHUwNkQzXFxcXHUwNkQ1XFxcXHUwNkU1XFxcXHUwNkU2XFxcXHUwNkVFXFxcXHUwNkVGXFxcXHUwNkZBLVxcXFx1MDZGQ1xcXFx1MDZGRlxcXFx1MDcxMFxcXFx1MDcxMi1cXFxcdTA3MkZcXFxcdTA3NEQtXFxcXHUwN0E1XFxcXHUwN0IxXFxcXHUwN0NBLVxcXFx1MDdFQVxcXFx1MDdGNFxcXFx1MDdGNVxcXFx1MDdGQVxcXFx1MDgwMC1cXFxcdTA4MTVcXFxcdTA4MUFcXFxcdTA4MjRcXFxcdTA4MjhcXFxcdTA4NDAtXFxcXHUwODU4XFxcXHUwOEEwLVxcXFx1MDhCMlxcXFx1MDkwNC1cXFxcdTA5MzlcXFxcdTA5M0RcXFxcdTA5NTBcXFxcdTA5NTgtXFxcXHUwOTYxXFxcXHUwOTcxLVxcXFx1MDk4MFxcXFx1MDk4NS1cXFxcdTA5OENcXFxcdTA5OEZcXFxcdTA5OTBcXFxcdTA5OTMtXFxcXHUwOUE4XFxcXHUwOUFBLVxcXFx1MDlCMFxcXFx1MDlCMlxcXFx1MDlCNi1cXFxcdTA5QjlcXFxcdTA5QkRcXFxcdTA5Q0VcXFxcdTA5RENcXFxcdTA5RERcXFxcdTA5REYtXFxcXHUwOUUxXFxcXHUwOUYwXFxcXHUwOUYxXFxcXHUwQTA1LVxcXFx1MEEwQVxcXFx1MEEwRlxcXFx1MEExMFxcXFx1MEExMy1cXFxcdTBBMjhcXFxcdTBBMkEtXFxcXHUwQTMwXFxcXHUwQTMyXFxcXHUwQTMzXFxcXHUwQTM1XFxcXHUwQTM2XFxcXHUwQTM4XFxcXHUwQTM5XFxcXHUwQTU5LVxcXFx1MEE1Q1xcXFx1MEE1RVxcXFx1MEE3Mi1cXFxcdTBBNzRcXFxcdTBBODUtXFxcXHUwQThEXFxcXHUwQThGLVxcXFx1MEE5MVxcXFx1MEE5My1cXFxcdTBBQThcXFxcdTBBQUEtXFxcXHUwQUIwXFxcXHUwQUIyXFxcXHUwQUIzXFxcXHUwQUI1LVxcXFx1MEFCOVxcXFx1MEFCRFxcXFx1MEFEMFxcXFx1MEFFMFxcXFx1MEFFMVxcXFx1MEIwNS1cXFxcdTBCMENcXFxcdTBCMEZcXFxcdTBCMTBcXFxcdTBCMTMtXFxcXHUwQjI4XFxcXHUwQjJBLVxcXFx1MEIzMFxcXFx1MEIzMlxcXFx1MEIzM1xcXFx1MEIzNS1cXFxcdTBCMzlcXFxcdTBCM0RcXFxcdTBCNUNcXFxcdTBCNURcXFxcdTBCNUYtXFxcXHUwQjYxXFxcXHUwQjcxXFxcXHUwQjgzXFxcXHUwQjg1LVxcXFx1MEI4QVxcXFx1MEI4RS1cXFxcdTBCOTBcXFxcdTBCOTItXFxcXHUwQjk1XFxcXHUwQjk5XFxcXHUwQjlBXFxcXHUwQjlDXFxcXHUwQjlFXFxcXHUwQjlGXFxcXHUwQkEzXFxcXHUwQkE0XFxcXHUwQkE4LVxcXFx1MEJBQVxcXFx1MEJBRS1cXFxcdTBCQjlcXFxcdTBCRDBcXFxcdTBDMDUtXFxcXHUwQzBDXFxcXHUwQzBFLVxcXFx1MEMxMFxcXFx1MEMxMi1cXFxcdTBDMjhcXFxcdTBDMkEtXFxcXHUwQzM5XFxcXHUwQzNEXFxcXHUwQzU4XFxcXHUwQzU5XFxcXHUwQzYwXFxcXHUwQzYxXFxcXHUwQzg1LVxcXFx1MEM4Q1xcXFx1MEM4RS1cXFxcdTBDOTBcXFxcdTBDOTItXFxcXHUwQ0E4XFxcXHUwQ0FBLVxcXFx1MENCM1xcXFx1MENCNS1cXFxcdTBDQjlcXFxcdTBDQkRcXFxcdTBDREVcXFxcdTBDRTBcXFxcdTBDRTFcXFxcdTBDRjFcXFxcdTBDRjJcXFxcdTBEMDUtXFxcXHUwRDBDXFxcXHUwRDBFLVxcXFx1MEQxMFxcXFx1MEQxMi1cXFxcdTBEM0FcXFxcdTBEM0RcXFxcdTBENEVcXFxcdTBENjBcXFxcdTBENjFcXFxcdTBEN0EtXFxcXHUwRDdGXFxcXHUwRDg1LVxcXFx1MEQ5NlxcXFx1MEQ5QS1cXFxcdTBEQjFcXFxcdTBEQjMtXFxcXHUwREJCXFxcXHUwREJEXFxcXHUwREMwLVxcXFx1MERDNlxcXFx1MEUwMS1cXFxcdTBFMzBcXFxcdTBFMzJcXFxcdTBFMzNcXFxcdTBFNDAtXFxcXHUwRTQ2XFxcXHUwRTgxXFxcXHUwRTgyXFxcXHUwRTg0XFxcXHUwRTg3XFxcXHUwRTg4XFxcXHUwRThBXFxcXHUwRThEXFxcXHUwRTk0LVxcXFx1MEU5N1xcXFx1MEU5OS1cXFxcdTBFOUZcXFxcdTBFQTEtXFxcXHUwRUEzXFxcXHUwRUE1XFxcXHUwRUE3XFxcXHUwRUFBXFxcXHUwRUFCXFxcXHUwRUFELVxcXFx1MEVCMFxcXFx1MEVCMlxcXFx1MEVCM1xcXFx1MEVCRFxcXFx1MEVDMC1cXFxcdTBFQzRcXFxcdTBFQzZcXFxcdTBFREMtXFxcXHUwRURGXFxcXHUwRjAwXFxcXHUwRjQwLVxcXFx1MEY0N1xcXFx1MEY0OS1cXFxcdTBGNkNcXFxcdTBGODgtXFxcXHUwRjhDXFxcXHUxMDAwLVxcXFx1MTAyQVxcXFx1MTAzRlxcXFx1MTA1MC1cXFxcdTEwNTVcXFxcdTEwNUEtXFxcXHUxMDVEXFxcXHUxMDYxXFxcXHUxMDY1XFxcXHUxMDY2XFxcXHUxMDZFLVxcXFx1MTA3MFxcXFx1MTA3NS1cXFxcdTEwODFcXFxcdTEwOEVcXFxcdTEwQTAtXFxcXHUxMEM1XFxcXHUxMEM3XFxcXHUxMENEXFxcXHUxMEQwLVxcXFx1MTBGQVxcXFx1MTBGQy1cXFxcdTEyNDhcXFxcdTEyNEEtXFxcXHUxMjREXFxcXHUxMjUwLVxcXFx1MTI1NlxcXFx1MTI1OFxcXFx1MTI1QS1cXFxcdTEyNURcXFxcdTEyNjAtXFxcXHUxMjg4XFxcXHUxMjhBLVxcXFx1MTI4RFxcXFx1MTI5MC1cXFxcdTEyQjBcXFxcdTEyQjItXFxcXHUxMkI1XFxcXHUxMkI4LVxcXFx1MTJCRVxcXFx1MTJDMFxcXFx1MTJDMi1cXFxcdTEyQzVcXFxcdTEyQzgtXFxcXHUxMkQ2XFxcXHUxMkQ4LVxcXFx1MTMxMFxcXFx1MTMxMi1cXFxcdTEzMTVcXFxcdTEzMTgtXFxcXHUxMzVBXFxcXHUxMzgwLVxcXFx1MTM4RlxcXFx1MTNBMC1cXFxcdTEzRjRcXFxcdTE0MDEtXFxcXHUxNjZDXFxcXHUxNjZGLVxcXFx1MTY3RlxcXFx1MTY4MS1cXFxcdTE2OUFcXFxcdTE2QTAtXFxcXHUxNkVBXFxcXHUxNkVFLVxcXFx1MTZGOFxcXFx1MTcwMC1cXFxcdTE3MENcXFxcdTE3MEUtXFxcXHUxNzExXFxcXHUxNzIwLVxcXFx1MTczMVxcXFx1MTc0MC1cXFxcdTE3NTFcXFxcdTE3NjAtXFxcXHUxNzZDXFxcXHUxNzZFLVxcXFx1MTc3MFxcXFx1MTc4MC1cXFxcdTE3QjNcXFxcdTE3RDdcXFxcdTE3RENcXFxcdTE4MjAtXFxcXHUxODc3XFxcXHUxODgwLVxcXFx1MThBOFxcXFx1MThBQVxcXFx1MThCMC1cXFxcdTE4RjVcXFxcdTE5MDAtXFxcXHUxOTFFXFxcXHUxOTUwLVxcXFx1MTk2RFxcXFx1MTk3MC1cXFxcdTE5NzRcXFxcdTE5ODAtXFxcXHUxOUFCXFxcXHUxOUMxLVxcXFx1MTlDN1xcXFx1MUEwMC1cXFxcdTFBMTZcXFxcdTFBMjAtXFxcXHUxQTU0XFxcXHUxQUE3XFxcXHUxQjA1LVxcXFx1MUIzM1xcXFx1MUI0NS1cXFxcdTFCNEJcXFxcdTFCODMtXFxcXHUxQkEwXFxcXHUxQkFFXFxcXHUxQkFGXFxcXHUxQkJBLVxcXFx1MUJFNVxcXFx1MUMwMC1cXFxcdTFDMjNcXFxcdTFDNEQtXFxcXHUxQzRGXFxcXHUxQzVBLVxcXFx1MUM3RFxcXFx1MUNFOS1cXFxcdTFDRUNcXFxcdTFDRUUtXFxcXHUxQ0YxXFxcXHUxQ0Y1XFxcXHUxQ0Y2XFxcXHUxRDAwLVxcXFx1MURCRlxcXFx1MUUwMC1cXFxcdTFGMTVcXFxcdTFGMTgtXFxcXHUxRjFEXFxcXHUxRjIwLVxcXFx1MUY0NVxcXFx1MUY0OC1cXFxcdTFGNERcXFxcdTFGNTAtXFxcXHUxRjU3XFxcXHUxRjU5XFxcXHUxRjVCXFxcXHUxRjVEXFxcXHUxRjVGLVxcXFx1MUY3RFxcXFx1MUY4MC1cXFxcdTFGQjRcXFxcdTFGQjYtXFxcXHUxRkJDXFxcXHUxRkJFXFxcXHUxRkMyLVxcXFx1MUZDNFxcXFx1MUZDNi1cXFxcdTFGQ0NcXFxcdTFGRDAtXFxcXHUxRkQzXFxcXHUxRkQ2LVxcXFx1MUZEQlxcXFx1MUZFMC1cXFxcdTFGRUNcXFxcdTFGRjItXFxcXHUxRkY0XFxcXHUxRkY2LVxcXFx1MUZGQ1xcXFx1MjA3MVxcXFx1MjA3RlxcXFx1MjA5MC1cXFxcdTIwOUNcXFxcdTIxMDJcXFxcdTIxMDdcXFxcdTIxMEEtXFxcXHUyMTEzXFxcXHUyMTE1XFxcXHUyMTE5LVxcXFx1MjExRFxcXFx1MjEyNFxcXFx1MjEyNlxcXFx1MjEyOFxcXFx1MjEyQS1cXFxcdTIxMkRcXFxcdTIxMkYtXFxcXHUyMTM5XFxcXHUyMTNDLVxcXFx1MjEzRlxcXFx1MjE0NS1cXFxcdTIxNDlcXFxcdTIxNEVcXFxcdTIxNjAtXFxcXHUyMTg4XFxcXHUyQzAwLVxcXFx1MkMyRVxcXFx1MkMzMC1cXFxcdTJDNUVcXFxcdTJDNjAtXFxcXHUyQ0U0XFxcXHUyQ0VCLVxcXFx1MkNFRVxcXFx1MkNGMlxcXFx1MkNGM1xcXFx1MkQwMC1cXFxcdTJEMjVcXFxcdTJEMjdcXFxcdTJEMkRcXFxcdTJEMzAtXFxcXHUyRDY3XFxcXHUyRDZGXFxcXHUyRDgwLVxcXFx1MkQ5NlxcXFx1MkRBMC1cXFxcdTJEQTZcXFxcdTJEQTgtXFxcXHUyREFFXFxcXHUyREIwLVxcXFx1MkRCNlxcXFx1MkRCOC1cXFxcdTJEQkVcXFxcdTJEQzAtXFxcXHUyREM2XFxcXHUyREM4LVxcXFx1MkRDRVxcXFx1MkREMC1cXFxcdTJERDZcXFxcdTJERDgtXFxcXHUyRERFXFxcXHUyRTJGXFxcXHUzMDA1LVxcXFx1MzAwN1xcXFx1MzAyMS1cXFxcdTMwMjlcXFxcdTMwMzEtXFxcXHUzMDM1XFxcXHUzMDM4LVxcXFx1MzAzQ1xcXFx1MzA0MS1cXFxcdTMwOTZcXFxcdTMwOUQtXFxcXHUzMDlGXFxcXHUzMEExLVxcXFx1MzBGQVxcXFx1MzBGQy1cXFxcdTMwRkZcXFxcdTMxMDUtXFxcXHUzMTJEXFxcXHUzMTMxLVxcXFx1MzE4RVxcXFx1MzFBMC1cXFxcdTMxQkFcXFxcdTMxRjAtXFxcXHUzMUZGXFxcXHUzNDAwLVxcXFx1NERCNVxcXFx1NEUwMC1cXFxcdTlGQ0NcXFxcdUEwMDAtXFxcXHVBNDhDXFxcXHVBNEQwLVxcXFx1QTRGRFxcXFx1QTUwMC1cXFxcdUE2MENcXFxcdUE2MTAtXFxcXHVBNjFGXFxcXHVBNjJBXFxcXHVBNjJCXFxcXHVBNjQwLVxcXFx1QTY2RVxcXFx1QTY3Ri1cXFxcdUE2OURcXFxcdUE2QTAtXFxcXHVBNkVGXFxcXHVBNzE3LVxcXFx1QTcxRlxcXFx1QTcyMi1cXFxcdUE3ODhcXFxcdUE3OEItXFxcXHVBNzhFXFxcXHVBNzkwLVxcXFx1QTdBRFxcXFx1QTdCMFxcXFx1QTdCMVxcXFx1QTdGNy1cXFxcdUE4MDFcXFxcdUE4MDMtXFxcXHVBODA1XFxcXHVBODA3LVxcXFx1QTgwQVxcXFx1QTgwQy1cXFxcdUE4MjJcXFxcdUE4NDAtXFxcXHVBODczXFxcXHVBODgyLVxcXFx1QThCM1xcXFx1QThGMi1cXFxcdUE4RjdcXFxcdUE4RkJcXFxcdUE5MEEtXFxcXHVBOTI1XFxcXHVBOTMwLVxcXFx1QTk0NlxcXFx1QTk2MC1cXFxcdUE5N0NcXFxcdUE5ODQtXFxcXHVBOUIyXFxcXHVBOUNGXFxcXHVBOUUwLVxcXFx1QTlFNFxcXFx1QTlFNi1cXFxcdUE5RUZcXFxcdUE5RkEtXFxcXHVBOUZFXFxcXHVBQTAwLVxcXFx1QUEyOFxcXFx1QUE0MC1cXFxcdUFBNDJcXFxcdUFBNDQtXFxcXHVBQTRCXFxcXHVBQTYwLVxcXFx1QUE3NlxcXFx1QUE3QVxcXFx1QUE3RS1cXFxcdUFBQUZcXFxcdUFBQjFcXFxcdUFBQjVcXFxcdUFBQjZcXFxcdUFBQjktXFxcXHVBQUJEXFxcXHVBQUMwXFxcXHVBQUMyXFxcXHVBQURCLVxcXFx1QUFERFxcXFx1QUFFMC1cXFxcdUFBRUFcXFxcdUFBRjItXFxcXHVBQUY0XFxcXHVBQjAxLVxcXFx1QUIwNlxcXFx1QUIwOS1cXFxcdUFCMEVcXFxcdUFCMTEtXFxcXHVBQjE2XFxcXHVBQjIwLVxcXFx1QUIyNlxcXFx1QUIyOC1cXFxcdUFCMkVcXFxcdUFCMzAtXFxcXHVBQjVBXFxcXHVBQjVDLVxcXFx1QUI1RlxcXFx1QUI2NFxcXFx1QUI2NVxcXFx1QUJDMC1cXFxcdUFCRTJcXFxcdUFDMDAtXFxcXHVEN0EzXFxcXHVEN0IwLVxcXFx1RDdDNlxcXFx1RDdDQi1cXFxcdUQ3RkJcXFxcdUY5MDAtXFxcXHVGQTZEXFxcXHVGQTcwLVxcXFx1RkFEOVxcXFx1RkIwMC1cXFxcdUZCMDZcXFxcdUZCMTMtXFxcXHVGQjE3XFxcXHVGQjFEXFxcXHVGQjFGLVxcXFx1RkIyOFxcXFx1RkIyQS1cXFxcdUZCMzZcXFxcdUZCMzgtXFxcXHVGQjNDXFxcXHVGQjNFXFxcXHVGQjQwXFxcXHVGQjQxXFxcXHVGQjQzXFxcXHVGQjQ0XFxcXHVGQjQ2LVxcXFx1RkJCMVxcXFx1RkJEMy1cXFxcdUZEM0RcXFxcdUZENTAtXFxcXHVGRDhGXFxcXHVGRDkyLVxcXFx1RkRDN1xcXFx1RkRGMC1cXFxcdUZERkJcXFxcdUZFNzAtXFxcXHVGRTc0XFxcXHVGRTc2LVxcXFx1RkVGQ1xcXFx1RkYyMS1cXFxcdUZGM0FcXFxcdUZGNDEtXFxcXHVGRjVBXFxcXHVGRjY2LVxcXFx1RkZCRVxcXFx1RkZDMi1cXFxcdUZGQzdcXFxcdUZGQ0EtXFxcXHVGRkNGXFxcXHVGRkQyLVxcXFx1RkZEN1xcXFx1RkZEQS1cXFxcdUZGRENdXCIpLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1taXNsZWFkaW5nLWNoYXJhY3Rlci1jbGFzc1xuICAgIFJlZ2V4Tm9uQXNjaWlJZGVudGlmaWVyUGFydCA9IG5ldyBSZWdFeHAoXCJbXFxcXHhBQVxcXFx4QjVcXFxceEJBXFxcXHhDMC1cXFxceEQ2XFxcXHhEOC1cXFxceEY2XFxcXHhGOC1cXFxcdTAyQzFcXFxcdTAyQzYtXFxcXHUwMkQxXFxcXHUwMkUwLVxcXFx1MDJFNFxcXFx1MDJFQ1xcXFx1MDJFRVxcXFx1MDMwMC1cXFxcdTAzNzRcXFxcdTAzNzZcXFxcdTAzNzdcXFxcdTAzN0EtXFxcXHUwMzdEXFxcXHUwMzdGXFxcXHUwMzg2XFxcXHUwMzg4LVxcXFx1MDM4QVxcXFx1MDM4Q1xcXFx1MDM4RS1cXFxcdTAzQTFcXFxcdTAzQTMtXFxcXHUwM0Y1XFxcXHUwM0Y3LVxcXFx1MDQ4MVxcXFx1MDQ4My1cXFxcdTA0ODdcXFxcdTA0OEEtXFxcXHUwNTJGXFxcXHUwNTMxLVxcXFx1MDU1NlxcXFx1MDU1OVxcXFx1MDU2MS1cXFxcdTA1ODdcXFxcdTA1OTEtXFxcXHUwNUJEXFxcXHUwNUJGXFxcXHUwNUMxXFxcXHUwNUMyXFxcXHUwNUM0XFxcXHUwNUM1XFxcXHUwNUM3XFxcXHUwNUQwLVxcXFx1MDVFQVxcXFx1MDVGMC1cXFxcdTA1RjJcXFxcdTA2MTAtXFxcXHUwNjFBXFxcXHUwNjIwLVxcXFx1MDY2OVxcXFx1MDY2RS1cXFxcdTA2RDNcXFxcdTA2RDUtXFxcXHUwNkRDXFxcXHUwNkRGLVxcXFx1MDZFOFxcXFx1MDZFQS1cXFxcdTA2RkNcXFxcdTA2RkZcXFxcdTA3MTAtXFxcXHUwNzRBXFxcXHUwNzRELVxcXFx1MDdCMVxcXFx1MDdDMC1cXFxcdTA3RjVcXFxcdTA3RkFcXFxcdTA4MDAtXFxcXHUwODJEXFxcXHUwODQwLVxcXFx1MDg1QlxcXFx1MDhBMC1cXFxcdTA4QjJcXFxcdTA4RTQtXFxcXHUwOTYzXFxcXHUwOTY2LVxcXFx1MDk2RlxcXFx1MDk3MS1cXFxcdTA5ODNcXFxcdTA5ODUtXFxcXHUwOThDXFxcXHUwOThGXFxcXHUwOTkwXFxcXHUwOTkzLVxcXFx1MDlBOFxcXFx1MDlBQS1cXFxcdTA5QjBcXFxcdTA5QjJcXFxcdTA5QjYtXFxcXHUwOUI5XFxcXHUwOUJDLVxcXFx1MDlDNFxcXFx1MDlDN1xcXFx1MDlDOFxcXFx1MDlDQi1cXFxcdTA5Q0VcXFxcdTA5RDdcXFxcdTA5RENcXFxcdTA5RERcXFxcdTA5REYtXFxcXHUwOUUzXFxcXHUwOUU2LVxcXFx1MDlGMVxcXFx1MEEwMS1cXFxcdTBBMDNcXFxcdTBBMDUtXFxcXHUwQTBBXFxcXHUwQTBGXFxcXHUwQTEwXFxcXHUwQTEzLVxcXFx1MEEyOFxcXFx1MEEyQS1cXFxcdTBBMzBcXFxcdTBBMzJcXFxcdTBBMzNcXFxcdTBBMzVcXFxcdTBBMzZcXFxcdTBBMzhcXFxcdTBBMzlcXFxcdTBBM0NcXFxcdTBBM0UtXFxcXHUwQTQyXFxcXHUwQTQ3XFxcXHUwQTQ4XFxcXHUwQTRCLVxcXFx1MEE0RFxcXFx1MEE1MVxcXFx1MEE1OS1cXFxcdTBBNUNcXFxcdTBBNUVcXFxcdTBBNjYtXFxcXHUwQTc1XFxcXHUwQTgxLVxcXFx1MEE4M1xcXFx1MEE4NS1cXFxcdTBBOERcXFxcdTBBOEYtXFxcXHUwQTkxXFxcXHUwQTkzLVxcXFx1MEFBOFxcXFx1MEFBQS1cXFxcdTBBQjBcXFxcdTBBQjJcXFxcdTBBQjNcXFxcdTBBQjUtXFxcXHUwQUI5XFxcXHUwQUJDLVxcXFx1MEFDNVxcXFx1MEFDNy1cXFxcdTBBQzlcXFxcdTBBQ0ItXFxcXHUwQUNEXFxcXHUwQUQwXFxcXHUwQUUwLVxcXFx1MEFFM1xcXFx1MEFFNi1cXFxcdTBBRUZcXFxcdTBCMDEtXFxcXHUwQjAzXFxcXHUwQjA1LVxcXFx1MEIwQ1xcXFx1MEIwRlxcXFx1MEIxMFxcXFx1MEIxMy1cXFxcdTBCMjhcXFxcdTBCMkEtXFxcXHUwQjMwXFxcXHUwQjMyXFxcXHUwQjMzXFxcXHUwQjM1LVxcXFx1MEIzOVxcXFx1MEIzQy1cXFxcdTBCNDRcXFxcdTBCNDdcXFxcdTBCNDhcXFxcdTBCNEItXFxcXHUwQjREXFxcXHUwQjU2XFxcXHUwQjU3XFxcXHUwQjVDXFxcXHUwQjVEXFxcXHUwQjVGLVxcXFx1MEI2M1xcXFx1MEI2Ni1cXFxcdTBCNkZcXFxcdTBCNzFcXFxcdTBCODJcXFxcdTBCODNcXFxcdTBCODUtXFxcXHUwQjhBXFxcXHUwQjhFLVxcXFx1MEI5MFxcXFx1MEI5Mi1cXFxcdTBCOTVcXFxcdTBCOTlcXFxcdTBCOUFcXFxcdTBCOUNcXFxcdTBCOUVcXFxcdTBCOUZcXFxcdTBCQTNcXFxcdTBCQTRcXFxcdTBCQTgtXFxcXHUwQkFBXFxcXHUwQkFFLVxcXFx1MEJCOVxcXFx1MEJCRS1cXFxcdTBCQzJcXFxcdTBCQzYtXFxcXHUwQkM4XFxcXHUwQkNBLVxcXFx1MEJDRFxcXFx1MEJEMFxcXFx1MEJEN1xcXFx1MEJFNi1cXFxcdTBCRUZcXFxcdTBDMDAtXFxcXHUwQzAzXFxcXHUwQzA1LVxcXFx1MEMwQ1xcXFx1MEMwRS1cXFxcdTBDMTBcXFxcdTBDMTItXFxcXHUwQzI4XFxcXHUwQzJBLVxcXFx1MEMzOVxcXFx1MEMzRC1cXFxcdTBDNDRcXFxcdTBDNDYtXFxcXHUwQzQ4XFxcXHUwQzRBLVxcXFx1MEM0RFxcXFx1MEM1NVxcXFx1MEM1NlxcXFx1MEM1OFxcXFx1MEM1OVxcXFx1MEM2MC1cXFxcdTBDNjNcXFxcdTBDNjYtXFxcXHUwQzZGXFxcXHUwQzgxLVxcXFx1MEM4M1xcXFx1MEM4NS1cXFxcdTBDOENcXFxcdTBDOEUtXFxcXHUwQzkwXFxcXHUwQzkyLVxcXFx1MENBOFxcXFx1MENBQS1cXFxcdTBDQjNcXFxcdTBDQjUtXFxcXHUwQ0I5XFxcXHUwQ0JDLVxcXFx1MENDNFxcXFx1MENDNi1cXFxcdTBDQzhcXFxcdTBDQ0EtXFxcXHUwQ0NEXFxcXHUwQ0Q1XFxcXHUwQ0Q2XFxcXHUwQ0RFXFxcXHUwQ0UwLVxcXFx1MENFM1xcXFx1MENFNi1cXFxcdTBDRUZcXFxcdTBDRjFcXFxcdTBDRjJcXFxcdTBEMDEtXFxcXHUwRDAzXFxcXHUwRDA1LVxcXFx1MEQwQ1xcXFx1MEQwRS1cXFxcdTBEMTBcXFxcdTBEMTItXFxcXHUwRDNBXFxcXHUwRDNELVxcXFx1MEQ0NFxcXFx1MEQ0Ni1cXFxcdTBENDhcXFxcdTBENEEtXFxcXHUwRDRFXFxcXHUwRDU3XFxcXHUwRDYwLVxcXFx1MEQ2M1xcXFx1MEQ2Ni1cXFxcdTBENkZcXFxcdTBEN0EtXFxcXHUwRDdGXFxcXHUwRDgyXFxcXHUwRDgzXFxcXHUwRDg1LVxcXFx1MEQ5NlxcXFx1MEQ5QS1cXFxcdTBEQjFcXFxcdTBEQjMtXFxcXHUwREJCXFxcXHUwREJEXFxcXHUwREMwLVxcXFx1MERDNlxcXFx1MERDQVxcXFx1MERDRi1cXFxcdTBERDRcXFxcdTBERDZcXFxcdTBERDgtXFxcXHUwRERGXFxcXHUwREU2LVxcXFx1MERFRlxcXFx1MERGMlxcXFx1MERGM1xcXFx1MEUwMS1cXFxcdTBFM0FcXFxcdTBFNDAtXFxcXHUwRTRFXFxcXHUwRTUwLVxcXFx1MEU1OVxcXFx1MEU4MVxcXFx1MEU4MlxcXFx1MEU4NFxcXFx1MEU4N1xcXFx1MEU4OFxcXFx1MEU4QVxcXFx1MEU4RFxcXFx1MEU5NC1cXFxcdTBFOTdcXFxcdTBFOTktXFxcXHUwRTlGXFxcXHUwRUExLVxcXFx1MEVBM1xcXFx1MEVBNVxcXFx1MEVBN1xcXFx1MEVBQVxcXFx1MEVBQlxcXFx1MEVBRC1cXFxcdTBFQjlcXFxcdTBFQkItXFxcXHUwRUJEXFxcXHUwRUMwLVxcXFx1MEVDNFxcXFx1MEVDNlxcXFx1MEVDOC1cXFxcdTBFQ0RcXFxcdTBFRDAtXFxcXHUwRUQ5XFxcXHUwRURDLVxcXFx1MEVERlxcXFx1MEYwMFxcXFx1MEYxOFxcXFx1MEYxOVxcXFx1MEYyMC1cXFxcdTBGMjlcXFxcdTBGMzVcXFxcdTBGMzdcXFxcdTBGMzlcXFxcdTBGM0UtXFxcXHUwRjQ3XFxcXHUwRjQ5LVxcXFx1MEY2Q1xcXFx1MEY3MS1cXFxcdTBGODRcXFxcdTBGODYtXFxcXHUwRjk3XFxcXHUwRjk5LVxcXFx1MEZCQ1xcXFx1MEZDNlxcXFx1MTAwMC1cXFxcdTEwNDlcXFxcdTEwNTAtXFxcXHUxMDlEXFxcXHUxMEEwLVxcXFx1MTBDNVxcXFx1MTBDN1xcXFx1MTBDRFxcXFx1MTBEMC1cXFxcdTEwRkFcXFxcdTEwRkMtXFxcXHUxMjQ4XFxcXHUxMjRBLVxcXFx1MTI0RFxcXFx1MTI1MC1cXFxcdTEyNTZcXFxcdTEyNThcXFxcdTEyNUEtXFxcXHUxMjVEXFxcXHUxMjYwLVxcXFx1MTI4OFxcXFx1MTI4QS1cXFxcdTEyOERcXFxcdTEyOTAtXFxcXHUxMkIwXFxcXHUxMkIyLVxcXFx1MTJCNVxcXFx1MTJCOC1cXFxcdTEyQkVcXFxcdTEyQzBcXFxcdTEyQzItXFxcXHUxMkM1XFxcXHUxMkM4LVxcXFx1MTJENlxcXFx1MTJEOC1cXFxcdTEzMTBcXFxcdTEzMTItXFxcXHUxMzE1XFxcXHUxMzE4LVxcXFx1MTM1QVxcXFx1MTM1RC1cXFxcdTEzNUZcXFxcdTEzODAtXFxcXHUxMzhGXFxcXHUxM0EwLVxcXFx1MTNGNFxcXFx1MTQwMS1cXFxcdTE2NkNcXFxcdTE2NkYtXFxcXHUxNjdGXFxcXHUxNjgxLVxcXFx1MTY5QVxcXFx1MTZBMC1cXFxcdTE2RUFcXFxcdTE2RUUtXFxcXHUxNkY4XFxcXHUxNzAwLVxcXFx1MTcwQ1xcXFx1MTcwRS1cXFxcdTE3MTRcXFxcdTE3MjAtXFxcXHUxNzM0XFxcXHUxNzQwLVxcXFx1MTc1M1xcXFx1MTc2MC1cXFxcdTE3NkNcXFxcdTE3NkUtXFxcXHUxNzcwXFxcXHUxNzcyXFxcXHUxNzczXFxcXHUxNzgwLVxcXFx1MTdEM1xcXFx1MTdEN1xcXFx1MTdEQ1xcXFx1MTdERFxcXFx1MTdFMC1cXFxcdTE3RTlcXFxcdTE4MEItXFxcXHUxODBEXFxcXHUxODEwLVxcXFx1MTgxOVxcXFx1MTgyMC1cXFxcdTE4NzdcXFxcdTE4ODAtXFxcXHUxOEFBXFxcXHUxOEIwLVxcXFx1MThGNVxcXFx1MTkwMC1cXFxcdTE5MUVcXFxcdTE5MjAtXFxcXHUxOTJCXFxcXHUxOTMwLVxcXFx1MTkzQlxcXFx1MTk0Ni1cXFxcdTE5NkRcXFxcdTE5NzAtXFxcXHUxOTc0XFxcXHUxOTgwLVxcXFx1MTlBQlxcXFx1MTlCMC1cXFxcdTE5QzlcXFxcdTE5RDAtXFxcXHUxOUQ5XFxcXHUxQTAwLVxcXFx1MUExQlxcXFx1MUEyMC1cXFxcdTFBNUVcXFxcdTFBNjAtXFxcXHUxQTdDXFxcXHUxQTdGLVxcXFx1MUE4OVxcXFx1MUE5MC1cXFxcdTFBOTlcXFxcdTFBQTdcXFxcdTFBQjAtXFxcXHUxQUJEXFxcXHUxQjAwLVxcXFx1MUI0QlxcXFx1MUI1MC1cXFxcdTFCNTlcXFxcdTFCNkItXFxcXHUxQjczXFxcXHUxQjgwLVxcXFx1MUJGM1xcXFx1MUMwMC1cXFxcdTFDMzdcXFxcdTFDNDAtXFxcXHUxQzQ5XFxcXHUxQzRELVxcXFx1MUM3RFxcXFx1MUNEMC1cXFxcdTFDRDJcXFxcdTFDRDQtXFxcXHUxQ0Y2XFxcXHUxQ0Y4XFxcXHUxQ0Y5XFxcXHUxRDAwLVxcXFx1MURGNVxcXFx1MURGQy1cXFxcdTFGMTVcXFxcdTFGMTgtXFxcXHUxRjFEXFxcXHUxRjIwLVxcXFx1MUY0NVxcXFx1MUY0OC1cXFxcdTFGNERcXFxcdTFGNTAtXFxcXHUxRjU3XFxcXHUxRjU5XFxcXHUxRjVCXFxcXHUxRjVEXFxcXHUxRjVGLVxcXFx1MUY3RFxcXFx1MUY4MC1cXFxcdTFGQjRcXFxcdTFGQjYtXFxcXHUxRkJDXFxcXHUxRkJFXFxcXHUxRkMyLVxcXFx1MUZDNFxcXFx1MUZDNi1cXFxcdTFGQ0NcXFxcdTFGRDAtXFxcXHUxRkQzXFxcXHUxRkQ2LVxcXFx1MUZEQlxcXFx1MUZFMC1cXFxcdTFGRUNcXFxcdTFGRjItXFxcXHUxRkY0XFxcXHUxRkY2LVxcXFx1MUZGQ1xcXFx1MjAwQ1xcXFx1MjAwRFxcXFx1MjAzRlxcXFx1MjA0MFxcXFx1MjA1NFxcXFx1MjA3MVxcXFx1MjA3RlxcXFx1MjA5MC1cXFxcdTIwOUNcXFxcdTIwRDAtXFxcXHUyMERDXFxcXHUyMEUxXFxcXHUyMEU1LVxcXFx1MjBGMFxcXFx1MjEwMlxcXFx1MjEwN1xcXFx1MjEwQS1cXFxcdTIxMTNcXFxcdTIxMTVcXFxcdTIxMTktXFxcXHUyMTFEXFxcXHUyMTI0XFxcXHUyMTI2XFxcXHUyMTI4XFxcXHUyMTJBLVxcXFx1MjEyRFxcXFx1MjEyRi1cXFxcdTIxMzlcXFxcdTIxM0MtXFxcXHUyMTNGXFxcXHUyMTQ1LVxcXFx1MjE0OVxcXFx1MjE0RVxcXFx1MjE2MC1cXFxcdTIxODhcXFxcdTJDMDAtXFxcXHUyQzJFXFxcXHUyQzMwLVxcXFx1MkM1RVxcXFx1MkM2MC1cXFxcdTJDRTRcXFxcdTJDRUItXFxcXHUyQ0YzXFxcXHUyRDAwLVxcXFx1MkQyNVxcXFx1MkQyN1xcXFx1MkQyRFxcXFx1MkQzMC1cXFxcdTJENjdcXFxcdTJENkZcXFxcdTJEN0YtXFxcXHUyRDk2XFxcXHUyREEwLVxcXFx1MkRBNlxcXFx1MkRBOC1cXFxcdTJEQUVcXFxcdTJEQjAtXFxcXHUyREI2XFxcXHUyREI4LVxcXFx1MkRCRVxcXFx1MkRDMC1cXFxcdTJEQzZcXFxcdTJEQzgtXFxcXHUyRENFXFxcXHUyREQwLVxcXFx1MkRENlxcXFx1MkREOC1cXFxcdTJEREVcXFxcdTJERTAtXFxcXHUyREZGXFxcXHUyRTJGXFxcXHUzMDA1LVxcXFx1MzAwN1xcXFx1MzAyMS1cXFxcdTMwMkZcXFxcdTMwMzEtXFxcXHUzMDM1XFxcXHUzMDM4LVxcXFx1MzAzQ1xcXFx1MzA0MS1cXFxcdTMwOTZcXFxcdTMwOTlcXFxcdTMwOUFcXFxcdTMwOUQtXFxcXHUzMDlGXFxcXHUzMEExLVxcXFx1MzBGQVxcXFx1MzBGQy1cXFxcdTMwRkZcXFxcdTMxMDUtXFxcXHUzMTJEXFxcXHUzMTMxLVxcXFx1MzE4RVxcXFx1MzFBMC1cXFxcdTMxQkFcXFxcdTMxRjAtXFxcXHUzMUZGXFxcXHUzNDAwLVxcXFx1NERCNVxcXFx1NEUwMC1cXFxcdTlGQ0NcXFxcdUEwMDAtXFxcXHVBNDhDXFxcXHVBNEQwLVxcXFx1QTRGRFxcXFx1QTUwMC1cXFxcdUE2MENcXFxcdUE2MTAtXFxcXHVBNjJCXFxcXHVBNjQwLVxcXFx1QTY2RlxcXFx1QTY3NC1cXFxcdUE2N0RcXFxcdUE2N0YtXFxcXHVBNjlEXFxcXHVBNjlGLVxcXFx1QTZGMVxcXFx1QTcxNy1cXFxcdUE3MUZcXFxcdUE3MjItXFxcXHVBNzg4XFxcXHVBNzhCLVxcXFx1QTc4RVxcXFx1QTc5MC1cXFxcdUE3QURcXFxcdUE3QjBcXFxcdUE3QjFcXFxcdUE3RjctXFxcXHVBODI3XFxcXHVBODQwLVxcXFx1QTg3M1xcXFx1QTg4MC1cXFxcdUE4QzRcXFxcdUE4RDAtXFxcXHVBOEQ5XFxcXHVBOEUwLVxcXFx1QThGN1xcXFx1QThGQlxcXFx1QTkwMC1cXFxcdUE5MkRcXFxcdUE5MzAtXFxcXHVBOTUzXFxcXHVBOTYwLVxcXFx1QTk3Q1xcXFx1QTk4MC1cXFxcdUE5QzBcXFxcdUE5Q0YtXFxcXHVBOUQ5XFxcXHVBOUUwLVxcXFx1QTlGRVxcXFx1QUEwMC1cXFxcdUFBMzZcXFxcdUFBNDAtXFxcXHVBQTREXFxcXHVBQTUwLVxcXFx1QUE1OVxcXFx1QUE2MC1cXFxcdUFBNzZcXFxcdUFBN0EtXFxcXHVBQUMyXFxcXHVBQURCLVxcXFx1QUFERFxcXFx1QUFFMC1cXFxcdUFBRUZcXFxcdUFBRjItXFxcXHVBQUY2XFxcXHVBQjAxLVxcXFx1QUIwNlxcXFx1QUIwOS1cXFxcdUFCMEVcXFxcdUFCMTEtXFxcXHVBQjE2XFxcXHVBQjIwLVxcXFx1QUIyNlxcXFx1QUIyOC1cXFxcdUFCMkVcXFxcdUFCMzAtXFxcXHVBQjVBXFxcXHVBQjVDLVxcXFx1QUI1RlxcXFx1QUI2NFxcXFx1QUI2NVxcXFx1QUJDMC1cXFxcdUFCRUFcXFxcdUFCRUNcXFxcdUFCRURcXFxcdUFCRjAtXFxcXHVBQkY5XFxcXHVBQzAwLVxcXFx1RDdBM1xcXFx1RDdCMC1cXFxcdUQ3QzZcXFxcdUQ3Q0ItXFxcXHVEN0ZCXFxcXHVGOTAwLVxcXFx1RkE2RFxcXFx1RkE3MC1cXFxcdUZBRDlcXFxcdUZCMDAtXFxcXHVGQjA2XFxcXHVGQjEzLVxcXFx1RkIxN1xcXFx1RkIxRC1cXFxcdUZCMjhcXFxcdUZCMkEtXFxcXHVGQjM2XFxcXHVGQjM4LVxcXFx1RkIzQ1xcXFx1RkIzRVxcXFx1RkI0MFxcXFx1RkI0MVxcXFx1RkI0M1xcXFx1RkI0NFxcXFx1RkI0Ni1cXFxcdUZCQjFcXFxcdUZCRDMtXFxcXHVGRDNEXFxcXHVGRDUwLVxcXFx1RkQ4RlxcXFx1RkQ5Mi1cXFxcdUZEQzdcXFxcdUZERjAtXFxcXHVGREZCXFxcXHVGRTAwLVxcXFx1RkUwRlxcXFx1RkUyMC1cXFxcdUZFMkRcXFxcdUZFMzNcXFxcdUZFMzRcXFxcdUZFNEQtXFxcXHVGRTRGXFxcXHVGRTcwLVxcXFx1RkU3NFxcXFx1RkU3Ni1cXFxcdUZFRkNcXFxcdUZGMTAtXFxcXHVGRjE5XFxcXHVGRjIxLVxcXFx1RkYzQVxcXFx1RkYzRlxcXFx1RkY0MS1cXFxcdUZGNUFcXFxcdUZGNjYtXFxcXHVGRkJFXFxcXHVGRkMyLVxcXFx1RkZDN1xcXFx1RkZDQS1cXFxcdUZGQ0ZcXFxcdUZGRDItXFxcXHVGRkQ3XFxcXHVGRkRBLVxcXFx1RkZEQ11cIik7XG5cbi8vIEVuc3VyZSB0aGUgY29uZGl0aW9uIGlzIHRydWUsIG90aGVyd2lzZSB0aHJvdyBhbiBlcnJvci5cbi8vIFRoaXMgaXMgb25seSB0byBoYXZlIGEgYmV0dGVyIGNvbnRyYWN0IHNlbWFudGljLCBpLmUuIGFub3RoZXIgc2FmZXR5IG5ldFxuLy8gdG8gY2F0Y2ggYSBsb2dpYyBlcnJvci4gVGhlIGNvbmRpdGlvbiBzaGFsbCBiZSBmdWxmaWxsZWQgaW4gbm9ybWFsIGNhc2UuXG4vLyBEbyBOT1QgdXNlIHRoaXMgdG8gZW5mb3JjZSBhIGNlcnRhaW4gY29uZGl0aW9uIG9uIGFueSB1c2VyIGlucHV0LlxuXG5mdW5jdGlvbiBhc3NlcnQoY29uZGl0aW9uLCBtZXNzYWdlKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGlmICghY29uZGl0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdBU1NFUlQ6ICcgKyBtZXNzYWdlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0RlY2ltYWxEaWdpdChjaCkge1xuICByZXR1cm4gKGNoID49IDB4MzAgJiYgY2ggPD0gMHgzOSk7IC8vIDAuLjlcbn1cblxuZnVuY3Rpb24gaXNIZXhEaWdpdChjaCkge1xuICByZXR1cm4gJzAxMjM0NTY3ODlhYmNkZWZBQkNERUYnLmluZGV4T2YoY2gpID49IDA7XG59XG5cbmZ1bmN0aW9uIGlzT2N0YWxEaWdpdChjaCkge1xuICByZXR1cm4gJzAxMjM0NTY3Jy5pbmRleE9mKGNoKSA+PSAwO1xufVxuXG4vLyA3LjIgV2hpdGUgU3BhY2VcblxuZnVuY3Rpb24gaXNXaGl0ZVNwYWNlKGNoKSB7XG4gIHJldHVybiAoY2ggPT09IDB4MjApIHx8IChjaCA9PT0gMHgwOSkgfHwgKGNoID09PSAweDBCKSB8fCAoY2ggPT09IDB4MEMpIHx8IChjaCA9PT0gMHhBMCkgfHxcbiAgICAoY2ggPj0gMHgxNjgwICYmIFsweDE2ODAsIDB4MTgwRSwgMHgyMDAwLCAweDIwMDEsIDB4MjAwMiwgMHgyMDAzLCAweDIwMDQsIDB4MjAwNSwgMHgyMDA2LCAweDIwMDcsIDB4MjAwOCwgMHgyMDA5LCAweDIwMEEsIDB4MjAyRiwgMHgyMDVGLCAweDMwMDAsIDB4RkVGRl0uaW5kZXhPZihjaCkgPj0gMCk7XG59XG5cbi8vIDcuMyBMaW5lIFRlcm1pbmF0b3JzXG5cbmZ1bmN0aW9uIGlzTGluZVRlcm1pbmF0b3IoY2gpIHtcbiAgcmV0dXJuIChjaCA9PT0gMHgwQSkgfHwgKGNoID09PSAweDBEKSB8fCAoY2ggPT09IDB4MjAyOCkgfHwgKGNoID09PSAweDIwMjkpO1xufVxuXG4vLyA3LjYgSWRlbnRpZmllciBOYW1lcyBhbmQgSWRlbnRpZmllcnNcblxuZnVuY3Rpb24gaXNJZGVudGlmaWVyU3RhcnQoY2gpIHtcbiAgcmV0dXJuIChjaCA9PT0gMHgyNCkgfHwgKGNoID09PSAweDVGKSB8fCAvLyAkIChkb2xsYXIpIGFuZCBfICh1bmRlcnNjb3JlKVxuICAgIChjaCA+PSAweDQxICYmIGNoIDw9IDB4NUEpIHx8IC8vIEEuLlpcbiAgICAoY2ggPj0gMHg2MSAmJiBjaCA8PSAweDdBKSB8fCAvLyBhLi56XG4gICAgKGNoID09PSAweDVDKSB8fCAvLyBcXCAoYmFja3NsYXNoKVxuICAgICgoY2ggPj0gMHg4MCkgJiYgUmVnZXhOb25Bc2NpaUlkZW50aWZpZXJTdGFydC50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpKSk7XG59XG5cbmZ1bmN0aW9uIGlzSWRlbnRpZmllclBhcnQoY2gpIHtcbiAgcmV0dXJuIChjaCA9PT0gMHgyNCkgfHwgKGNoID09PSAweDVGKSB8fCAvLyAkIChkb2xsYXIpIGFuZCBfICh1bmRlcnNjb3JlKVxuICAgIChjaCA+PSAweDQxICYmIGNoIDw9IDB4NUEpIHx8IC8vIEEuLlpcbiAgICAoY2ggPj0gMHg2MSAmJiBjaCA8PSAweDdBKSB8fCAvLyBhLi56XG4gICAgKGNoID49IDB4MzAgJiYgY2ggPD0gMHgzOSkgfHwgLy8gMC4uOVxuICAgIChjaCA9PT0gMHg1QykgfHwgLy8gXFwgKGJhY2tzbGFzaClcbiAgICAoKGNoID49IDB4ODApICYmIFJlZ2V4Tm9uQXNjaWlJZGVudGlmaWVyUGFydC50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpKSk7XG59XG5cbi8vIDcuNi4xLjEgS2V5d29yZHNcblxudmFyIGtleXdvcmRzID0ge1xuICAnaWYnOjEsICdpbic6MSwgJ2RvJzoxLFxuICAndmFyJzoxLCAnZm9yJzoxLCAnbmV3JzoxLCAndHJ5JzoxLCAnbGV0JzoxLFxuICAndGhpcyc6MSwgJ2Vsc2UnOjEsICdjYXNlJzoxLCAndm9pZCc6MSwgJ3dpdGgnOjEsICdlbnVtJzoxLFxuICAnd2hpbGUnOjEsICdicmVhayc6MSwgJ2NhdGNoJzoxLCAndGhyb3cnOjEsICdjb25zdCc6MSwgJ3lpZWxkJzoxLCAnY2xhc3MnOjEsICdzdXBlcic6MSxcbiAgJ3JldHVybic6MSwgJ3R5cGVvZic6MSwgJ2RlbGV0ZSc6MSwgJ3N3aXRjaCc6MSwgJ2V4cG9ydCc6MSwgJ2ltcG9ydCc6MSwgJ3B1YmxpYyc6MSwgJ3N0YXRpYyc6MSxcbiAgJ2RlZmF1bHQnOjEsICdmaW5hbGx5JzoxLCAnZXh0ZW5kcyc6MSwgJ3BhY2thZ2UnOjEsICdwcml2YXRlJzoxLFxuICAnZnVuY3Rpb24nOjEsICdjb250aW51ZSc6MSwgJ2RlYnVnZ2VyJzoxLFxuICAnaW50ZXJmYWNlJzoxLCAncHJvdGVjdGVkJzoxLFxuICAnaW5zdGFuY2VvZic6MSwgJ2ltcGxlbWVudHMnOjFcbn07XG5cbmZ1bmN0aW9uIHNraXBDb21tZW50KCkge1xuICB2YXIgY2g7XG5cbiAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG5cbiAgICBpZiAoaXNXaGl0ZVNwYWNlKGNoKSB8fCBpc0xpbmVUZXJtaW5hdG9yKGNoKSkge1xuICAgICAgKytpbmRleDtcbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNjYW5IZXhFc2NhcGUocHJlZml4KSB7XG4gIHZhciBpLCBsZW4sIGNoLCBjb2RlID0gMDtcblxuICBsZW4gPSAocHJlZml4ID09PSAndScpID8gNCA6IDI7XG4gIGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIGlmIChpbmRleCA8IGxlbmd0aCAmJiBpc0hleERpZ2l0KHNvdXJjZVtpbmRleF0pKSB7XG4gICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTtcbiAgICAgIGNvZGUgPSBjb2RlICogMTYgKyAnMDEyMzQ1Njc4OWFiY2RlZicuaW5kZXhPZihjaC50b0xvd2VyQ2FzZSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZVVuZXhwZWN0ZWRUb2tlbiwgSUxMRUdBTCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xufVxuXG5mdW5jdGlvbiBzY2FuVW5pY29kZUNvZGVQb2ludEVzY2FwZSgpIHtcbiAgdmFyIGNoLCBjb2RlLCBjdTEsIGN1MjtcblxuICBjaCA9IHNvdXJjZVtpbmRleF07XG4gIGNvZGUgPSAwO1xuXG4gIC8vIEF0IGxlYXN0LCBvbmUgaGV4IGRpZ2l0IGlzIHJlcXVpcmVkLlxuICBpZiAoY2ggPT09ICd9Jykge1xuICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VVbmV4cGVjdGVkVG9rZW4sIElMTEVHQUwpO1xuICB9XG5cbiAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgY2ggPSBzb3VyY2VbaW5kZXgrK107XG4gICAgaWYgKCFpc0hleERpZ2l0KGNoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvZGUgPSBjb2RlICogMTYgKyAnMDEyMzQ1Njc4OWFiY2RlZicuaW5kZXhPZihjaC50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuXG4gIGlmIChjb2RlID4gMHgxMEZGRkYgfHwgY2ggIT09ICd9Jykge1xuICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VVbmV4cGVjdGVkVG9rZW4sIElMTEVHQUwpO1xuICB9XG5cbiAgLy8gVVRGLTE2IEVuY29kaW5nXG4gIGlmIChjb2RlIDw9IDB4RkZGRikge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xuICB9XG4gIGN1MSA9ICgoY29kZSAtIDB4MTAwMDApID4+IDEwKSArIDB4RDgwMDtcbiAgY3UyID0gKChjb2RlIC0gMHgxMDAwMCkgJiAxMDIzKSArIDB4REMwMDtcbiAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY3UxLCBjdTIpO1xufVxuXG5mdW5jdGlvbiBnZXRFc2NhcGVkSWRlbnRpZmllcigpIHtcbiAgdmFyIGNoLCBpZDtcblxuICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KyspO1xuICBpZCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpO1xuXG4gIC8vICdcXHUnIChVKzAwNUMsIFUrMDA3NSkgZGVub3RlcyBhbiBlc2NhcGVkIGNoYXJhY3Rlci5cbiAgaWYgKGNoID09PSAweDVDKSB7XG4gICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSAhPT0gMHg3NSkge1xuICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZVVuZXhwZWN0ZWRUb2tlbiwgSUxMRUdBTCk7XG4gICAgfVxuICAgICsraW5kZXg7XG4gICAgY2ggPSBzY2FuSGV4RXNjYXBlKCd1Jyk7XG4gICAgaWYgKCFjaCB8fCBjaCA9PT0gJ1xcXFwnIHx8ICFpc0lkZW50aWZpZXJTdGFydChjaC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZVVuZXhwZWN0ZWRUb2tlbiwgSUxMRUdBTCk7XG4gICAgfVxuICAgIGlkID0gY2g7XG4gIH1cblxuICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICBpZiAoIWlzSWRlbnRpZmllclBhcnQoY2gpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgKytpbmRleDtcbiAgICBpZCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTtcblxuICAgIC8vICdcXHUnIChVKzAwNUMsIFUrMDA3NSkgZGVub3RlcyBhbiBlc2NhcGVkIGNoYXJhY3Rlci5cbiAgICBpZiAoY2ggPT09IDB4NUMpIHtcbiAgICAgIGlkID0gaWQuc3Vic3RyKDAsIGlkLmxlbmd0aCAtIDEpO1xuICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSAhPT0gMHg3NSkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlVW5leHBlY3RlZFRva2VuLCBJTExFR0FMKTtcbiAgICAgIH1cbiAgICAgICsraW5kZXg7XG4gICAgICBjaCA9IHNjYW5IZXhFc2NhcGUoJ3UnKTtcbiAgICAgIGlmICghY2ggfHwgY2ggPT09ICdcXFxcJyB8fCAhaXNJZGVudGlmaWVyUGFydChjaC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlVW5leHBlY3RlZFRva2VuLCBJTExFR0FMKTtcbiAgICAgIH1cbiAgICAgIGlkICs9IGNoO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpZDtcbn1cblxuZnVuY3Rpb24gZ2V0SWRlbnRpZmllcigpIHtcbiAgdmFyIHN0YXJ0LCBjaDtcblxuICBzdGFydCA9IGluZGV4Kys7XG4gIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgIGlmIChjaCA9PT0gMHg1Qykge1xuICAgICAgLy8gQmxhY2tzbGFzaCAoVSswMDVDKSBtYXJrcyBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZS5cbiAgICAgIGluZGV4ID0gc3RhcnQ7XG4gICAgICByZXR1cm4gZ2V0RXNjYXBlZElkZW50aWZpZXIoKTtcbiAgICB9XG4gICAgaWYgKGlzSWRlbnRpZmllclBhcnQoY2gpKSB7XG4gICAgICArK2luZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc291cmNlLnNsaWNlKHN0YXJ0LCBpbmRleCk7XG59XG5cbmZ1bmN0aW9uIHNjYW5JZGVudGlmaWVyKCkge1xuICB2YXIgc3RhcnQsIGlkLCB0eXBlO1xuXG4gIHN0YXJ0ID0gaW5kZXg7XG5cbiAgLy8gQmFja3NsYXNoIChVKzAwNUMpIHN0YXJ0cyBhbiBlc2NhcGVkIGNoYXJhY3Rlci5cbiAgaWQgPSAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDVDKSA/IGdldEVzY2FwZWRJZGVudGlmaWVyKCkgOiBnZXRJZGVudGlmaWVyKCk7XG5cbiAgLy8gVGhlcmUgaXMgbm8ga2V5d29yZCBvciBsaXRlcmFsIHdpdGggb25seSBvbmUgY2hhcmFjdGVyLlxuICAvLyBUaHVzLCBpdCBtdXN0IGJlIGFuIGlkZW50aWZpZXIuXG4gIGlmIChpZC5sZW5ndGggPT09IDEpIHtcbiAgICB0eXBlID0gVG9rZW5JZGVudGlmaWVyO1xuICB9IGVsc2UgaWYgKGtleXdvcmRzLmhhc093blByb3BlcnR5KGlkKSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgIHR5cGUgPSBUb2tlbktleXdvcmQ7XG4gIH0gZWxzZSBpZiAoaWQgPT09ICdudWxsJykge1xuICAgIHR5cGUgPSBUb2tlbk51bGxMaXRlcmFsO1xuICB9IGVsc2UgaWYgKGlkID09PSAndHJ1ZScgfHwgaWQgPT09ICdmYWxzZScpIHtcbiAgICB0eXBlID0gVG9rZW5Cb29sZWFuTGl0ZXJhbDtcbiAgfSBlbHNlIHtcbiAgICB0eXBlID0gVG9rZW5JZGVudGlmaWVyO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiB0eXBlLFxuICAgIHZhbHVlOiBpZCxcbiAgICBzdGFydDogc3RhcnQsXG4gICAgZW5kOiBpbmRleFxuICB9O1xufVxuXG4vLyA3LjcgUHVuY3R1YXRvcnNcblxuZnVuY3Rpb24gc2NhblB1bmN0dWF0b3IoKSB7XG4gIHZhciBzdGFydCA9IGluZGV4LFxuICAgIGNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCksXG4gICAgY29kZTIsXG4gICAgY2gxID0gc291cmNlW2luZGV4XSxcbiAgICBjaDIsXG4gICAgY2gzLFxuICAgIGNoNDtcblxuICBzd2l0Y2ggKGNvZGUpIHtcblxuICAgIC8vIENoZWNrIGZvciBtb3N0IGNvbW1vbiBzaW5nbGUtY2hhcmFjdGVyIHB1bmN0dWF0b3JzLlxuICAgIGNhc2UgMHgyRTogLy8gLiBkb3RcbiAgICBjYXNlIDB4Mjg6IC8vICggb3BlbiBicmFja2V0XG4gICAgY2FzZSAweDI5OiAvLyApIGNsb3NlIGJyYWNrZXRcbiAgICBjYXNlIDB4M0I6IC8vIDsgc2VtaWNvbG9uXG4gICAgY2FzZSAweDJDOiAvLyAsIGNvbW1hXG4gICAgY2FzZSAweDdCOiAvLyB7IG9wZW4gY3VybHkgYnJhY2VcbiAgICBjYXNlIDB4N0Q6IC8vIH0gY2xvc2UgY3VybHkgYnJhY2VcbiAgICBjYXNlIDB4NUI6IC8vIFtcbiAgICBjYXNlIDB4NUQ6IC8vIF1cbiAgICBjYXNlIDB4M0E6IC8vIDpcbiAgICBjYXNlIDB4M0Y6IC8vID9cbiAgICBjYXNlIDB4N0U6IC8vIH5cbiAgICAgICsraW5kZXg7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBUb2tlblB1bmN0dWF0b3IsXG4gICAgICAgIHZhbHVlOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpLFxuICAgICAgICBzdGFydDogc3RhcnQsXG4gICAgICAgIGVuZDogaW5kZXhcbiAgICAgIH07XG5cbiAgICBkZWZhdWx0OlxuICAgICAgY29kZTIgPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDEpO1xuXG4gICAgICAvLyAnPScgKFUrMDAzRCkgbWFya3MgYW4gYXNzaWdubWVudCBvciBjb21wYXJpc29uIG9wZXJhdG9yLlxuICAgICAgaWYgKGNvZGUyID09PSAweDNEKSB7XG4gICAgICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgICAgIGNhc2UgMHgyQjogLy8gK1xuICAgICAgICAgIGNhc2UgMHgyRDogLy8gLVxuICAgICAgICAgIGNhc2UgMHgyRjogLy8gL1xuICAgICAgICAgIGNhc2UgMHgzQzogLy8gPFxuICAgICAgICAgIGNhc2UgMHgzRTogLy8gPlxuICAgICAgICAgIGNhc2UgMHg1RTogLy8gXlxuICAgICAgICAgIGNhc2UgMHg3QzogLy8gfFxuICAgICAgICAgIGNhc2UgMHgyNTogLy8gJVxuICAgICAgICAgIGNhc2UgMHgyNjogLy8gJlxuICAgICAgICAgIGNhc2UgMHgyQTogLy8gKlxuICAgICAgICAgICAgaW5kZXggKz0gMjtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHR5cGU6IFRva2VuUHVuY3R1YXRvcixcbiAgICAgICAgICAgICAgdmFsdWU6IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSkgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUyKSxcbiAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LFxuICAgICAgICAgICAgICBlbmQ6IGluZGV4XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgY2FzZSAweDIxOiAvLyAhXG4gICAgICAgICAgY2FzZSAweDNEOiAvLyA9XG4gICAgICAgICAgICBpbmRleCArPSAyO1xuXG4gICAgICAgICAgICAvLyAhPT0gYW5kID09PVxuICAgICAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMHgzRCkge1xuICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdHlwZTogVG9rZW5QdW5jdHVhdG9yLFxuICAgICAgICAgICAgICB2YWx1ZTogc291cmNlLnNsaWNlKHN0YXJ0LCBpbmRleCksXG4gICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgICAgICAgZW5kOiBpbmRleFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICB9XG5cbiAgLy8gNC1jaGFyYWN0ZXIgcHVuY3R1YXRvcjogPj4+PVxuXG4gIGNoNCA9IHNvdXJjZS5zdWJzdHIoaW5kZXgsIDQpO1xuXG4gIGlmIChjaDQgPT09ICc+Pj49Jykge1xuICAgIGluZGV4ICs9IDQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFRva2VuUHVuY3R1YXRvcixcbiAgICAgIHZhbHVlOiBjaDQsXG4gICAgICBzdGFydDogc3RhcnQsXG4gICAgICBlbmQ6IGluZGV4XG4gICAgfTtcbiAgfVxuXG4gIC8vIDMtY2hhcmFjdGVyIHB1bmN0dWF0b3JzOiA9PT0gIT09ID4+PiA8PD0gPj49XG5cbiAgY2gzID0gY2g0LnN1YnN0cigwLCAzKTtcblxuICBpZiAoY2gzID09PSAnPj4+JyB8fCBjaDMgPT09ICc8PD0nIHx8IGNoMyA9PT0gJz4+PScpIHtcbiAgICBpbmRleCArPSAzO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBUb2tlblB1bmN0dWF0b3IsXG4gICAgICB2YWx1ZTogY2gzLFxuICAgICAgc3RhcnQ6IHN0YXJ0LFxuICAgICAgZW5kOiBpbmRleFxuICAgIH07XG4gIH1cblxuICAvLyBPdGhlciAyLWNoYXJhY3RlciBwdW5jdHVhdG9yczogKysgLS0gPDwgPj4gJiYgfHxcbiAgY2gyID0gY2gzLnN1YnN0cigwLCAyKTtcblxuICBpZiAoKGNoMSA9PT0gY2gyWzFdICYmICgnKy08PiZ8Jy5pbmRleE9mKGNoMSkgPj0gMCkpIHx8IGNoMiA9PT0gJz0+Jykge1xuICAgIGluZGV4ICs9IDI7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFRva2VuUHVuY3R1YXRvcixcbiAgICAgIHZhbHVlOiBjaDIsXG4gICAgICBzdGFydDogc3RhcnQsXG4gICAgICBlbmQ6IGluZGV4XG4gICAgfTtcbiAgfVxuXG4gIC8vIDEtY2hhcmFjdGVyIHB1bmN0dWF0b3JzOiA8ID4gPSAhICsgLSAqICUgJiB8IF4gL1xuXG4gIGlmICgnPD49ISstKiUmfF4vJy5pbmRleE9mKGNoMSkgPj0gMCkge1xuICAgICsraW5kZXg7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFRva2VuUHVuY3R1YXRvcixcbiAgICAgIHZhbHVlOiBjaDEsXG4gICAgICBzdGFydDogc3RhcnQsXG4gICAgICBlbmQ6IGluZGV4XG4gICAgfTtcbiAgfVxuXG4gIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VVbmV4cGVjdGVkVG9rZW4sIElMTEVHQUwpO1xufVxuXG4vLyA3LjguMyBOdW1lcmljIExpdGVyYWxzXG5cbmZ1bmN0aW9uIHNjYW5IZXhMaXRlcmFsKHN0YXJ0KSB7XG4gIHZhciBudW1iZXIgPSAnJztcblxuICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAoIWlzSGV4RGlnaXQoc291cmNlW2luZGV4XSkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdO1xuICB9XG5cbiAgaWYgKG51bWJlci5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlVW5leHBlY3RlZFRva2VuLCBJTExFR0FMKTtcbiAgfVxuXG4gIGlmIChpc0lkZW50aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZVVuZXhwZWN0ZWRUb2tlbiwgSUxMRUdBTCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHR5cGU6IFRva2VuTnVtZXJpY0xpdGVyYWwsXG4gICAgdmFsdWU6IHBhcnNlSW50KCcweCcgKyBudW1iZXIsIDE2KSxcbiAgICBzdGFydDogc3RhcnQsXG4gICAgZW5kOiBpbmRleFxuICB9O1xufVxuXG5mdW5jdGlvbiBzY2FuT2N0YWxMaXRlcmFsKHN0YXJ0KSB7XG4gIHZhciBudW1iZXIgPSAnMCcgKyBzb3VyY2VbaW5kZXgrK107XG4gIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmICghaXNPY3RhbERpZ2l0KHNvdXJjZVtpbmRleF0pKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTtcbiAgfVxuXG4gIGlmIChpc0lkZW50aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpIHx8IGlzRGVjaW1hbERpZ2l0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHtcbiAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlVW5leHBlY3RlZFRva2VuLCBJTExFR0FMKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogVG9rZW5OdW1lcmljTGl0ZXJhbCxcbiAgICB2YWx1ZTogcGFyc2VJbnQobnVtYmVyLCA4KSxcbiAgICBvY3RhbDogdHJ1ZSxcbiAgICBzdGFydDogc3RhcnQsXG4gICAgZW5kOiBpbmRleFxuICB9O1xufVxuXG5mdW5jdGlvbiBzY2FuTnVtZXJpY0xpdGVyYWwoKSB7XG4gIHZhciBudW1iZXIsIHN0YXJ0LCBjaDtcblxuICBjaCA9IHNvdXJjZVtpbmRleF07XG4gIGFzc2VydChpc0RlY2ltYWxEaWdpdChjaC5jaGFyQ29kZUF0KDApKSB8fCAoY2ggPT09ICcuJyksXG4gICAgJ051bWVyaWMgbGl0ZXJhbCBtdXN0IHN0YXJ0IHdpdGggYSBkZWNpbWFsIGRpZ2l0IG9yIGEgZGVjaW1hbCBwb2ludCcpO1xuXG4gIHN0YXJ0ID0gaW5kZXg7XG4gIG51bWJlciA9ICcnO1xuICBpZiAoY2ggIT09ICcuJykge1xuICAgIG51bWJlciA9IHNvdXJjZVtpbmRleCsrXTtcbiAgICBjaCA9IHNvdXJjZVtpbmRleF07XG5cbiAgICAvLyBIZXggbnVtYmVyIHN0YXJ0cyB3aXRoICcweCcuXG4gICAgLy8gT2N0YWwgbnVtYmVyIHN0YXJ0cyB3aXRoICcwJy5cbiAgICBpZiAobnVtYmVyID09PSAnMCcpIHtcbiAgICAgIGlmIChjaCA9PT0gJ3gnIHx8IGNoID09PSAnWCcpIHtcbiAgICAgICAgKytpbmRleDtcbiAgICAgICAgcmV0dXJuIHNjYW5IZXhMaXRlcmFsKHN0YXJ0KTtcbiAgICAgIH1cbiAgICAgIGlmIChpc09jdGFsRGlnaXQoY2gpKSB7XG4gICAgICAgIHJldHVybiBzY2FuT2N0YWxMaXRlcmFsKHN0YXJ0KTtcbiAgICAgIH1cblxuICAgICAgLy8gZGVjaW1hbCBudW1iZXIgc3RhcnRzIHdpdGggJzAnIHN1Y2ggYXMgJzA5JyBpcyBpbGxlZ2FsLlxuICAgICAgaWYgKGNoICYmIGlzRGVjaW1hbERpZ2l0KGNoLmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VVbmV4cGVjdGVkVG9rZW4sIElMTEVHQUwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHdoaWxlIChpc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdO1xuICAgIH1cbiAgICBjaCA9IHNvdXJjZVtpbmRleF07XG4gIH1cblxuICBpZiAoY2ggPT09ICcuJykge1xuICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107XG4gICAgd2hpbGUgKGlzRGVjaW1hbERpZ2l0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHtcbiAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107XG4gICAgfVxuICAgIGNoID0gc291cmNlW2luZGV4XTtcbiAgfVxuXG4gIGlmIChjaCA9PT0gJ2UnIHx8IGNoID09PSAnRScpIHtcbiAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdO1xuXG4gICAgY2ggPSBzb3VyY2VbaW5kZXhdO1xuICAgIGlmIChjaCA9PT0gJysnIHx8IGNoID09PSAnLScpIHtcbiAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107XG4gICAgfVxuICAgIGlmIChpc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICB3aGlsZSAoaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkge1xuICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlVW5leHBlY3RlZFRva2VuLCBJTExFR0FMKTtcbiAgICB9XG4gIH1cblxuICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkge1xuICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VVbmV4cGVjdGVkVG9rZW4sIElMTEVHQUwpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBUb2tlbk51bWVyaWNMaXRlcmFsLFxuICAgIHZhbHVlOiBwYXJzZUZsb2F0KG51bWJlciksXG4gICAgc3RhcnQ6IHN0YXJ0LFxuICAgIGVuZDogaW5kZXhcbiAgfTtcbn1cblxuLy8gNy44LjQgU3RyaW5nIExpdGVyYWxzXG5cbmZ1bmN0aW9uIHNjYW5TdHJpbmdMaXRlcmFsKCkge1xuICB2YXIgc3RyID0gJycsXG4gICAgcXVvdGUsIHN0YXJ0LCBjaCwgY29kZSwgb2N0YWwgPSBmYWxzZTtcblxuICBxdW90ZSA9IHNvdXJjZVtpbmRleF07XG4gIGFzc2VydCgocXVvdGUgPT09ICdcXCcnIHx8IHF1b3RlID09PSAnXCInKSxcbiAgICAnU3RyaW5nIGxpdGVyYWwgbXVzdCBzdGFydHMgd2l0aCBhIHF1b3RlJyk7XG5cbiAgc3RhcnQgPSBpbmRleDtcbiAgKytpbmRleDtcblxuICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTtcblxuICAgIGlmIChjaCA9PT0gcXVvdGUpIHtcbiAgICAgIHF1b3RlID0gJyc7XG4gICAgICBicmVhaztcbiAgICB9IGVsc2UgaWYgKGNoID09PSAnXFxcXCcpIHtcbiAgICAgIGNoID0gc291cmNlW2luZGV4KytdO1xuICAgICAgaWYgKCFjaCB8fCAhaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgICBzd2l0Y2ggKGNoKSB7XG4gICAgICAgICAgY2FzZSAndSc6XG4gICAgICAgICAgY2FzZSAneCc6XG4gICAgICAgICAgICBpZiAoc291cmNlW2luZGV4XSA9PT0gJ3snKSB7XG4gICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgIHN0ciArPSBzY2FuVW5pY29kZUNvZGVQb2ludEVzY2FwZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3RyICs9IHNjYW5IZXhFc2NhcGUoY2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnbic6XG4gICAgICAgICAgICBzdHIgKz0gJ1xcbic7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdyJzpcbiAgICAgICAgICAgIHN0ciArPSAnXFxyJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3QnOlxuICAgICAgICAgICAgc3RyICs9ICdcXHQnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnYic6XG4gICAgICAgICAgICBzdHIgKz0gJ1xcYic7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdmJzpcbiAgICAgICAgICAgIHN0ciArPSAnXFxmJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3YnOlxuICAgICAgICAgICAgc3RyICs9ICdcXHgwQic7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAoaXNPY3RhbERpZ2l0KGNoKSkge1xuICAgICAgICAgICAgICBjb2RlID0gJzAxMjM0NTY3Jy5pbmRleE9mKGNoKTtcblxuICAgICAgICAgICAgICAvLyBcXDAgaXMgbm90IG9jdGFsIGVzY2FwZSBzZXF1ZW5jZVxuICAgICAgICAgICAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgICAgICAgICAgIG9jdGFsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCAmJiBpc09jdGFsRGlnaXQoc291cmNlW2luZGV4XSkpIHtcbiAgICAgICAgICAgICAgICBvY3RhbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29kZSA9IGNvZGUgKiA4ICsgJzAxMjM0NTY3Jy5pbmRleE9mKHNvdXJjZVtpbmRleCsrXSk7XG5cbiAgICAgICAgICAgICAgICAvLyAzIGRpZ2l0cyBhcmUgb25seSBhbGxvd2VkIHdoZW4gc3RyaW5nIHN0YXJ0c1xuICAgICAgICAgICAgICAgIC8vIHdpdGggMCwgMSwgMiwgM1xuICAgICAgICAgICAgICAgIGlmICgnMDEyMycuaW5kZXhPZihjaCkgPj0gMCAmJlxuICAgICAgICAgICAgICAgICAgaW5kZXggPCBsZW5ndGggJiZcbiAgICAgICAgICAgICAgICAgIGlzT2N0YWxEaWdpdChzb3VyY2VbaW5kZXhdKSkge1xuICAgICAgICAgICAgICAgICAgY29kZSA9IGNvZGUgKiA4ICsgJzAxMjM0NTY3Jy5pbmRleE9mKHNvdXJjZVtpbmRleCsrXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3RyICs9IGNoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChjaCA9PT0gJ1xccicgJiYgc291cmNlW2luZGV4XSA9PT0gJ1xcbicpIHtcbiAgICAgICAgICArK2luZGV4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICBicmVhaztcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyICs9IGNoO1xuICAgIH1cbiAgfVxuXG4gIGlmIChxdW90ZSAhPT0gJycpIHtcbiAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlVW5leHBlY3RlZFRva2VuLCBJTExFR0FMKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogVG9rZW5TdHJpbmdMaXRlcmFsLFxuICAgIHZhbHVlOiBzdHIsXG4gICAgb2N0YWw6IG9jdGFsLFxuICAgIHN0YXJ0OiBzdGFydCxcbiAgICBlbmQ6IGluZGV4XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRlc3RSZWdFeHAocGF0dGVybiwgZmxhZ3MpIHtcbiAgdmFyIHRtcCA9IHBhdHRlcm47XG5cbiAgaWYgKGZsYWdzLmluZGV4T2YoJ3UnKSA+PSAwKSB7XG4gICAgLy8gUmVwbGFjZSBlYWNoIGFzdHJhbCBzeW1ib2wgYW5kIGV2ZXJ5IFVuaWNvZGUgY29kZSBwb2ludFxuICAgIC8vIGVzY2FwZSBzZXF1ZW5jZSB3aXRoIGEgc2luZ2xlIEFTQ0lJIHN5bWJvbCB0byBhdm9pZCB0aHJvd2luZyBvblxuICAgIC8vIHJlZ3VsYXIgZXhwcmVzc2lvbnMgdGhhdCBhcmUgb25seSB2YWxpZCBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZVxuICAgIC8vIGAvdWAgZmxhZy5cbiAgICAvLyBOb3RlOiByZXBsYWNpbmcgd2l0aCB0aGUgQVNDSUkgc3ltYm9sIGB4YCBtaWdodCBjYXVzZSBmYWxzZVxuICAgIC8vIG5lZ2F0aXZlcyBpbiB1bmxpa2VseSBzY2VuYXJpb3MuIEZvciBleGFtcGxlLCBgW1xcdXs2MX0tYl1gIGlzIGFcbiAgICAvLyBwZXJmZWN0bHkgdmFsaWQgcGF0dGVybiB0aGF0IGlzIGVxdWl2YWxlbnQgdG8gYFthLWJdYCwgYnV0IGl0XG4gICAgLy8gd291bGQgYmUgcmVwbGFjZWQgYnkgYFt4LWJdYCB3aGljaCB0aHJvd3MgYW4gZXJyb3IuXG4gICAgdG1wID0gdG1wXG4gICAgICAucmVwbGFjZSgvXFxcXHVcXHsoWzAtOWEtZkEtRl0rKVxcfS9nLCBmdW5jdGlvbigkMCwgJDEpIHtcbiAgICAgICAgaWYgKHBhcnNlSW50KCQxLCAxNikgPD0gMHgxMEZGRkYpIHtcbiAgICAgICAgICByZXR1cm4gJ3gnO1xuICAgICAgICB9XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VJbnZhbGlkUmVnRXhwKTtcbiAgICAgIH0pXG4gICAgICAucmVwbGFjZSgvW1xcdUQ4MDAtXFx1REJGRl1bXFx1REMwMC1cXHVERkZGXS9nLCAneCcpO1xuICB9XG5cbiAgLy8gRmlyc3QsIGRldGVjdCBpbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbnMuXG4gIHRyeSB7XG4gICAgbmV3IFJlZ0V4cCh0bXApO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZUludmFsaWRSZWdFeHApO1xuICB9XG5cbiAgLy8gUmV0dXJuIGEgcmVndWxhciBleHByZXNzaW9uIG9iamVjdCBmb3IgdGhpcyBwYXR0ZXJuLWZsYWcgcGFpciwgb3JcbiAgLy8gYG51bGxgIGluIGNhc2UgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgZG9lc24ndCBzdXBwb3J0IHRoZSBmbGFncyBpdFxuICAvLyB1c2VzLlxuICB0cnkge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKHBhdHRlcm4sIGZsYWdzKTtcbiAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2NhblJlZ0V4cEJvZHkoKSB7XG4gIHZhciBjaCwgc3RyLCBjbGFzc01hcmtlciwgdGVybWluYXRlZCwgYm9keTtcblxuICBjaCA9IHNvdXJjZVtpbmRleF07XG4gIGFzc2VydChjaCA9PT0gJy8nLCAnUmVndWxhciBleHByZXNzaW9uIGxpdGVyYWwgbXVzdCBzdGFydCB3aXRoIGEgc2xhc2gnKTtcbiAgc3RyID0gc291cmNlW2luZGV4KytdO1xuXG4gIGNsYXNzTWFya2VyID0gZmFsc2U7XG4gIHRlcm1pbmF0ZWQgPSBmYWxzZTtcbiAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgY2ggPSBzb3VyY2VbaW5kZXgrK107XG4gICAgc3RyICs9IGNoO1xuICAgIGlmIChjaCA9PT0gJ1xcXFwnKSB7XG4gICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTtcbiAgICAgIC8vIEVDTUEtMjYyIDcuOC41XG4gICAgICBpZiAoaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlVW50ZXJtaW5hdGVkUmVnRXhwKTtcbiAgICAgIH1cbiAgICAgIHN0ciArPSBjaDtcbiAgICB9IGVsc2UgaWYgKGlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHtcbiAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VVbnRlcm1pbmF0ZWRSZWdFeHApO1xuICAgIH0gZWxzZSBpZiAoY2xhc3NNYXJrZXIpIHtcbiAgICAgIGlmIChjaCA9PT0gJ10nKSB7XG4gICAgICAgIGNsYXNzTWFya2VyID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjaCA9PT0gJy8nKSB7XG4gICAgICAgIHRlcm1pbmF0ZWQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSBpZiAoY2ggPT09ICdbJykge1xuICAgICAgICBjbGFzc01hcmtlciA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKCF0ZXJtaW5hdGVkKSB7XG4gICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZVVudGVybWluYXRlZFJlZ0V4cCk7XG4gIH1cblxuICAvLyBFeGNsdWRlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoLlxuICBib2R5ID0gc3RyLnN1YnN0cigxLCBzdHIubGVuZ3RoIC0gMik7XG4gIHJldHVybiB7XG4gICAgdmFsdWU6IGJvZHksXG4gICAgbGl0ZXJhbDogc3RyXG4gIH07XG59XG5cbmZ1bmN0aW9uIHNjYW5SZWdFeHBGbGFncygpIHtcbiAgdmFyIGNoLCBzdHIsIGZsYWdzO1xuXG4gIHN0ciA9ICcnO1xuICBmbGFncyA9ICcnO1xuICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICBjaCA9IHNvdXJjZVtpbmRleF07XG4gICAgaWYgKCFpc0lkZW50aWZpZXJQYXJ0KGNoLmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICArK2luZGV4O1xuICAgIGlmIChjaCA9PT0gJ1xcXFwnICYmIGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlVW5leHBlY3RlZFRva2VuLCBJTExFR0FMKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmxhZ3MgKz0gY2g7XG4gICAgICBzdHIgKz0gY2g7XG4gICAgfVxuICB9XG5cbiAgaWYgKGZsYWdzLnNlYXJjaCgvW15naW11eV0vZykgPj0gMCkge1xuICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VJbnZhbGlkUmVnRXhwLCBmbGFncyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHZhbHVlOiBmbGFncyxcbiAgICBsaXRlcmFsOiBzdHJcbiAgfTtcbn1cblxuZnVuY3Rpb24gc2NhblJlZ0V4cCgpIHtcbiAgdmFyIHN0YXJ0LCBib2R5LCBmbGFncywgdmFsdWU7XG5cbiAgbG9va2FoZWFkID0gbnVsbDtcbiAgc2tpcENvbW1lbnQoKTtcbiAgc3RhcnQgPSBpbmRleDtcblxuICBib2R5ID0gc2NhblJlZ0V4cEJvZHkoKTtcbiAgZmxhZ3MgPSBzY2FuUmVnRXhwRmxhZ3MoKTtcbiAgdmFsdWUgPSB0ZXN0UmVnRXhwKGJvZHkudmFsdWUsIGZsYWdzLnZhbHVlKTtcblxuICByZXR1cm4ge1xuICAgIGxpdGVyYWw6IGJvZHkubGl0ZXJhbCArIGZsYWdzLmxpdGVyYWwsXG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIHJlZ2V4OiB7XG4gICAgICBwYXR0ZXJuOiBib2R5LnZhbHVlLFxuICAgICAgZmxhZ3M6IGZsYWdzLnZhbHVlXG4gICAgfSxcbiAgICBzdGFydDogc3RhcnQsXG4gICAgZW5kOiBpbmRleFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc0lkZW50aWZpZXJOYW1lKHRva2VuKSB7XG4gIHJldHVybiB0b2tlbi50eXBlID09PSBUb2tlbklkZW50aWZpZXIgfHxcbiAgICB0b2tlbi50eXBlID09PSBUb2tlbktleXdvcmQgfHxcbiAgICB0b2tlbi50eXBlID09PSBUb2tlbkJvb2xlYW5MaXRlcmFsIHx8XG4gICAgdG9rZW4udHlwZSA9PT0gVG9rZW5OdWxsTGl0ZXJhbDtcbn1cblxuZnVuY3Rpb24gYWR2YW5jZSgpIHtcbiAgdmFyIGNoO1xuXG4gIHNraXBDb21tZW50KCk7XG5cbiAgaWYgKGluZGV4ID49IGxlbmd0aCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBUb2tlbkVPRixcbiAgICAgIHN0YXJ0OiBpbmRleCxcbiAgICAgIGVuZDogaW5kZXhcbiAgICB9O1xuICB9XG5cbiAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG5cbiAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KGNoKSkge1xuICAgIHJldHVybiBzY2FuSWRlbnRpZmllcigpO1xuICB9XG5cbiAgLy8gVmVyeSBjb21tb246ICggYW5kICkgYW5kIDtcbiAgaWYgKGNoID09PSAweDI4IHx8IGNoID09PSAweDI5IHx8IGNoID09PSAweDNCKSB7XG4gICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7XG4gIH1cblxuICAvLyBTdHJpbmcgbGl0ZXJhbCBzdGFydHMgd2l0aCBzaW5nbGUgcXVvdGUgKFUrMDAyNykgb3IgZG91YmxlIHF1b3RlIChVKzAwMjIpLlxuICBpZiAoY2ggPT09IDB4MjcgfHwgY2ggPT09IDB4MjIpIHtcbiAgICByZXR1cm4gc2NhblN0cmluZ0xpdGVyYWwoKTtcbiAgfVxuXG5cbiAgLy8gRG90ICguKSBVKzAwMkUgY2FuIGFsc28gc3RhcnQgYSBmbG9hdGluZy1wb2ludCBudW1iZXIsIGhlbmNlIHRoZSBuZWVkXG4gIC8vIHRvIGNoZWNrIHRoZSBuZXh0IGNoYXJhY3Rlci5cbiAgaWYgKGNoID09PSAweDJFKSB7XG4gICAgaWYgKGlzRGVjaW1hbERpZ2l0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSkpKSB7XG4gICAgICByZXR1cm4gc2Nhbk51bWVyaWNMaXRlcmFsKCk7XG4gICAgfVxuICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpO1xuICB9XG5cbiAgaWYgKGlzRGVjaW1hbERpZ2l0KGNoKSkge1xuICAgIHJldHVybiBzY2FuTnVtZXJpY0xpdGVyYWwoKTtcbiAgfVxuXG4gIHJldHVybiBzY2FuUHVuY3R1YXRvcigpO1xufVxuXG5mdW5jdGlvbiBsZXgoKSB7XG4gIHZhciB0b2tlbjtcblxuICB0b2tlbiA9IGxvb2thaGVhZDtcbiAgaW5kZXggPSB0b2tlbi5lbmQ7XG5cbiAgbG9va2FoZWFkID0gYWR2YW5jZSgpO1xuXG4gIGluZGV4ID0gdG9rZW4uZW5kO1xuXG4gIHJldHVybiB0b2tlbjtcbn1cblxuZnVuY3Rpb24gcGVlaygpIHtcbiAgdmFyIHBvcztcblxuICBwb3MgPSBpbmRleDtcblxuICBsb29rYWhlYWQgPSBhZHZhbmNlKCk7XG4gIGluZGV4ID0gcG9zO1xufVxuXG5mdW5jdGlvbiBmaW5pc2hBcnJheUV4cHJlc3Npb24oZWxlbWVudHMpIHtcbiAgdmFyIG5vZGUgPSBuZXcgQVNUTm9kZShTeW50YXhBcnJheUV4cHJlc3Npb24pO1xuICBub2RlLmVsZW1lbnRzID0gZWxlbWVudHM7XG4gIHJldHVybiBub2RlO1xufVxuXG5mdW5jdGlvbiBmaW5pc2hCaW5hcnlFeHByZXNzaW9uKG9wZXJhdG9yLCBsZWZ0LCByaWdodCkge1xuICB2YXIgbm9kZSA9IG5ldyBBU1ROb2RlKChvcGVyYXRvciA9PT0gJ3x8JyB8fCBvcGVyYXRvciA9PT0gJyYmJykgPyBTeW50YXhMb2dpY2FsRXhwcmVzc2lvbiA6IFN5bnRheEJpbmFyeUV4cHJlc3Npb24pO1xuICBub2RlLm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gIG5vZGUubGVmdCA9IGxlZnQ7XG4gIG5vZGUucmlnaHQgPSByaWdodDtcbiAgcmV0dXJuIG5vZGU7XG59XG5cbmZ1bmN0aW9uIGZpbmlzaENhbGxFeHByZXNzaW9uKGNhbGxlZSwgYXJncykge1xuICB2YXIgbm9kZSA9IG5ldyBBU1ROb2RlKFN5bnRheENhbGxFeHByZXNzaW9uKTtcbiAgbm9kZS5jYWxsZWUgPSBjYWxsZWU7XG4gIG5vZGUuYXJndW1lbnRzID0gYXJncztcbiAgcmV0dXJuIG5vZGU7XG59XG5cbmZ1bmN0aW9uIGZpbmlzaENvbmRpdGlvbmFsRXhwcmVzc2lvbih0ZXN0LCBjb25zZXF1ZW50LCBhbHRlcm5hdGUpIHtcbiAgdmFyIG5vZGUgPSBuZXcgQVNUTm9kZShTeW50YXhDb25kaXRpb25hbEV4cHJlc3Npb24pO1xuICBub2RlLnRlc3QgPSB0ZXN0O1xuICBub2RlLmNvbnNlcXVlbnQgPSBjb25zZXF1ZW50O1xuICBub2RlLmFsdGVybmF0ZSA9IGFsdGVybmF0ZTtcbiAgcmV0dXJuIG5vZGU7XG59XG5cbmZ1bmN0aW9uIGZpbmlzaElkZW50aWZpZXIobmFtZSkge1xuICB2YXIgbm9kZSA9IG5ldyBBU1ROb2RlKFN5bnRheElkZW50aWZpZXIpO1xuICBub2RlLm5hbWUgPSBuYW1lO1xuICByZXR1cm4gbm9kZTtcbn1cblxuZnVuY3Rpb24gZmluaXNoTGl0ZXJhbCh0b2tlbikge1xuICB2YXIgbm9kZSA9IG5ldyBBU1ROb2RlKFN5bnRheExpdGVyYWwpO1xuICBub2RlLnZhbHVlID0gdG9rZW4udmFsdWU7XG4gIG5vZGUucmF3ID0gc291cmNlLnNsaWNlKHRva2VuLnN0YXJ0LCB0b2tlbi5lbmQpO1xuICBpZiAodG9rZW4ucmVnZXgpIHtcbiAgICBpZiAobm9kZS5yYXcgPT09ICcvLycpIHtcbiAgICAgIG5vZGUucmF3ID0gJy8oPzopLyc7XG4gICAgfVxuICAgIG5vZGUucmVnZXggPSB0b2tlbi5yZWdleDtcbiAgfVxuICByZXR1cm4gbm9kZTtcbn1cblxuZnVuY3Rpb24gZmluaXNoTWVtYmVyRXhwcmVzc2lvbihhY2Nlc3Nvciwgb2JqZWN0LCBwcm9wZXJ0eSkge1xuICB2YXIgbm9kZSA9IG5ldyBBU1ROb2RlKFN5bnRheE1lbWJlckV4cHJlc3Npb24pO1xuICBub2RlLmNvbXB1dGVkID0gYWNjZXNzb3IgPT09ICdbJztcbiAgbm9kZS5vYmplY3QgPSBvYmplY3Q7XG4gIG5vZGUucHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgaWYgKCFub2RlLmNvbXB1dGVkKSBwcm9wZXJ0eS5tZW1iZXIgPSB0cnVlO1xuICByZXR1cm4gbm9kZTtcbn1cblxuZnVuY3Rpb24gZmluaXNoT2JqZWN0RXhwcmVzc2lvbihwcm9wZXJ0aWVzKSB7XG4gIHZhciBub2RlID0gbmV3IEFTVE5vZGUoU3ludGF4T2JqZWN0RXhwcmVzc2lvbik7XG4gIG5vZGUucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gIHJldHVybiBub2RlO1xufVxuXG5mdW5jdGlvbiBmaW5pc2hQcm9wZXJ0eShraW5kLCBrZXksIHZhbHVlKSB7XG4gIHZhciBub2RlID0gbmV3IEFTVE5vZGUoU3ludGF4UHJvcGVydHkpO1xuICBub2RlLmtleSA9IGtleTtcbiAgbm9kZS52YWx1ZSA9IHZhbHVlO1xuICBub2RlLmtpbmQgPSBraW5kO1xuICByZXR1cm4gbm9kZTtcbn1cblxuZnVuY3Rpb24gZmluaXNoVW5hcnlFeHByZXNzaW9uKG9wZXJhdG9yLCBhcmd1bWVudCkge1xuICB2YXIgbm9kZSA9IG5ldyBBU1ROb2RlKFN5bnRheFVuYXJ5RXhwcmVzc2lvbik7XG4gIG5vZGUub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgbm9kZS5hcmd1bWVudCA9IGFyZ3VtZW50O1xuICBub2RlLnByZWZpeCA9IHRydWU7XG4gIHJldHVybiBub2RlO1xufVxuXG4vLyBUaHJvdyBhbiBleGNlcHRpb25cblxuZnVuY3Rpb24gdGhyb3dFcnJvcih0b2tlbiwgbWVzc2FnZUZvcm1hdCkge1xuICB2YXIgZXJyb3IsXG4gICAgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMiksXG4gICAgbXNnID0gbWVzc2FnZUZvcm1hdC5yZXBsYWNlKFxuICAgICAgLyUoXFxkKS9nLFxuICAgICAgZnVuY3Rpb24od2hvbGUsIGluZGV4KSB7XG4gICAgICAgIGFzc2VydChpbmRleCA8IGFyZ3MubGVuZ3RoLCAnTWVzc2FnZSByZWZlcmVuY2UgbXVzdCBiZSBpbiByYW5nZScpO1xuICAgICAgICByZXR1cm4gYXJnc1tpbmRleF07XG4gICAgICB9XG4gICAgKTtcblxuXG4gIGVycm9yID0gbmV3IEVycm9yKG1zZyk7XG4gIGVycm9yLmluZGV4ID0gaW5kZXg7XG4gIGVycm9yLmRlc2NyaXB0aW9uID0gbXNnO1xuICB0aHJvdyBlcnJvcjtcbn1cblxuLy8gVGhyb3cgYW4gZXhjZXB0aW9uIGJlY2F1c2Ugb2YgdGhlIHRva2VuLlxuXG5mdW5jdGlvbiB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pIHtcbiAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuRU9GKSB7XG4gICAgdGhyb3dFcnJvcih0b2tlbiwgTWVzc2FnZVVuZXhwZWN0ZWRFT1MpO1xuICB9XG5cbiAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuTnVtZXJpY0xpdGVyYWwpIHtcbiAgICB0aHJvd0Vycm9yKHRva2VuLCBNZXNzYWdlVW5leHBlY3RlZE51bWJlcik7XG4gIH1cblxuICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5TdHJpbmdMaXRlcmFsKSB7XG4gICAgdGhyb3dFcnJvcih0b2tlbiwgTWVzc2FnZVVuZXhwZWN0ZWRTdHJpbmcpO1xuICB9XG5cbiAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuSWRlbnRpZmllcikge1xuICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VVbmV4cGVjdGVkSWRlbnRpZmllcik7XG4gIH1cblxuICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5LZXl3b3JkKSB7XG4gICAgdGhyb3dFcnJvcih0b2tlbiwgTWVzc2FnZVVuZXhwZWN0ZWRSZXNlcnZlZCk7XG4gIH1cblxuICAvLyBCb29sZWFuTGl0ZXJhbCwgTnVsbExpdGVyYWwsIG9yIFB1bmN0dWF0b3IuXG4gIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VVbmV4cGVjdGVkVG9rZW4sIHRva2VuLnZhbHVlKTtcbn1cblxuLy8gRXhwZWN0IHRoZSBuZXh0IHRva2VuIHRvIG1hdGNoIHRoZSBzcGVjaWZpZWQgcHVuY3R1YXRvci5cbi8vIElmIG5vdCwgYW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duLlxuXG5mdW5jdGlvbiBleHBlY3QodmFsdWUpIHtcbiAgdmFyIHRva2VuID0gbGV4KCk7XG4gIGlmICh0b2tlbi50eXBlICE9PSBUb2tlblB1bmN0dWF0b3IgfHwgdG9rZW4udmFsdWUgIT09IHZhbHVlKSB7XG4gICAgdGhyb3dVbmV4cGVjdGVkKHRva2VuKTtcbiAgfVxufVxuXG4vLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgbmV4dCB0b2tlbiBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgcHVuY3R1YXRvci5cblxuZnVuY3Rpb24gbWF0Y2godmFsdWUpIHtcbiAgcmV0dXJuIGxvb2thaGVhZC50eXBlID09PSBUb2tlblB1bmN0dWF0b3IgJiYgbG9va2FoZWFkLnZhbHVlID09PSB2YWx1ZTtcbn1cblxuLy8gUmV0dXJuIHRydWUgaWYgdGhlIG5leHQgdG9rZW4gbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIGtleXdvcmRcblxuZnVuY3Rpb24gbWF0Y2hLZXl3b3JkKGtleXdvcmQpIHtcbiAgcmV0dXJuIGxvb2thaGVhZC50eXBlID09PSBUb2tlbktleXdvcmQgJiYgbG9va2FoZWFkLnZhbHVlID09PSBrZXl3b3JkO1xufVxuXG4vLyAxMS4xLjQgQXJyYXkgSW5pdGlhbGlzZXJcblxuZnVuY3Rpb24gcGFyc2VBcnJheUluaXRpYWxpc2VyKCkge1xuICB2YXIgZWxlbWVudHMgPSBbXTtcblxuICBpbmRleCA9IGxvb2thaGVhZC5zdGFydDtcbiAgZXhwZWN0KCdbJyk7XG5cbiAgd2hpbGUgKCFtYXRjaCgnXScpKSB7XG4gICAgaWYgKG1hdGNoKCcsJykpIHtcbiAgICAgIGxleCgpO1xuICAgICAgZWxlbWVudHMucHVzaChudWxsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbWVudHMucHVzaChwYXJzZUNvbmRpdGlvbmFsRXhwcmVzc2lvbigpKTtcblxuICAgICAgaWYgKCFtYXRjaCgnXScpKSB7XG4gICAgICAgIGV4cGVjdCgnLCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxleCgpO1xuXG4gIHJldHVybiBmaW5pc2hBcnJheUV4cHJlc3Npb24oZWxlbWVudHMpO1xufVxuXG4vLyAxMS4xLjUgT2JqZWN0IEluaXRpYWxpc2VyXG5cbmZ1bmN0aW9uIHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKSB7XG4gIHZhciB0b2tlbjtcblxuICBpbmRleCA9IGxvb2thaGVhZC5zdGFydDtcbiAgdG9rZW4gPSBsZXgoKTtcblxuICAvLyBOb3RlOiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5IGZyb20gcGFyc2VPYmplY3RQcm9wZXJ0eSgpLCB3aGVyZVxuICAvLyBFT0YgYW5kIFB1bmN0dWF0b3IgdG9rZW5zIGFyZSBhbHJlYWR5IGZpbHRlcmVkIG91dC5cblxuICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5TdHJpbmdMaXRlcmFsIHx8IHRva2VuLnR5cGUgPT09IFRva2VuTnVtZXJpY0xpdGVyYWwpIHtcbiAgICBpZiAodG9rZW4ub2N0YWwpIHtcbiAgICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VTdHJpY3RPY3RhbExpdGVyYWwpO1xuICAgIH1cbiAgICByZXR1cm4gZmluaXNoTGl0ZXJhbCh0b2tlbik7XG4gIH1cblxuICByZXR1cm4gZmluaXNoSWRlbnRpZmllcih0b2tlbi52YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlT2JqZWN0UHJvcGVydHkoKSB7XG4gIHZhciB0b2tlbiwga2V5LCBpZCwgdmFsdWU7XG5cbiAgaW5kZXggPSBsb29rYWhlYWQuc3RhcnQ7XG4gIHRva2VuID0gbG9va2FoZWFkO1xuXG4gIGlmICh0b2tlbi50eXBlID09PSBUb2tlbklkZW50aWZpZXIpIHtcbiAgICBpZCA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTtcbiAgICBleHBlY3QoJzonKTtcbiAgICB2YWx1ZSA9IHBhcnNlQ29uZGl0aW9uYWxFeHByZXNzaW9uKCk7XG4gICAgcmV0dXJuIGZpbmlzaFByb3BlcnR5KCdpbml0JywgaWQsIHZhbHVlKTtcbiAgfVxuICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5FT0YgfHwgdG9rZW4udHlwZSA9PT0gVG9rZW5QdW5jdHVhdG9yKSB7XG4gICAgdGhyb3dVbmV4cGVjdGVkKHRva2VuKTtcbiAgfSBlbHNlIHtcbiAgICBrZXkgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7XG4gICAgZXhwZWN0KCc6Jyk7XG4gICAgdmFsdWUgPSBwYXJzZUNvbmRpdGlvbmFsRXhwcmVzc2lvbigpO1xuICAgIHJldHVybiBmaW5pc2hQcm9wZXJ0eSgnaW5pdCcsIGtleSwgdmFsdWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlT2JqZWN0SW5pdGlhbGlzZXIoKSB7XG4gIHZhciBwcm9wZXJ0aWVzID0gW10sXG4gICAgcHJvcGVydHksIG5hbWUsIGtleSwgbWFwID0ge30sXG4gICAgdG9TdHJpbmcgPSBTdHJpbmc7XG5cbiAgaW5kZXggPSBsb29rYWhlYWQuc3RhcnQ7XG4gIGV4cGVjdCgneycpO1xuXG4gIHdoaWxlICghbWF0Y2goJ30nKSkge1xuICAgIHByb3BlcnR5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eSgpO1xuXG4gICAgaWYgKHByb3BlcnR5LmtleS50eXBlID09PSBTeW50YXhJZGVudGlmaWVyKSB7XG4gICAgICBuYW1lID0gcHJvcGVydHkua2V5Lm5hbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5hbWUgPSB0b1N0cmluZyhwcm9wZXJ0eS5rZXkudmFsdWUpO1xuICAgIH1cblxuICAgIGtleSA9ICckJyArIG5hbWU7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtYXAsIGtleSkpIHtcbiAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VTdHJpY3REdXBsaWNhdGVQcm9wZXJ0eSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1hcFtrZXldID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xuXG4gICAgaWYgKCFtYXRjaCgnfScpKSB7XG4gICAgICBleHBlY3QoJywnKTtcbiAgICB9XG4gIH1cblxuICBleHBlY3QoJ30nKTtcblxuICByZXR1cm4gZmluaXNoT2JqZWN0RXhwcmVzc2lvbihwcm9wZXJ0aWVzKTtcbn1cblxuLy8gMTEuMS42IFRoZSBHcm91cGluZyBPcGVyYXRvclxuXG5mdW5jdGlvbiBwYXJzZUdyb3VwRXhwcmVzc2lvbigpIHtcbiAgdmFyIGV4cHI7XG5cbiAgZXhwZWN0KCcoJyk7XG5cbiAgZXhwciA9IHBhcnNlRXhwcmVzc2lvbigpO1xuXG4gIGV4cGVjdCgnKScpO1xuXG4gIHJldHVybiBleHByO1xufVxuXG5cbi8vIDExLjEgUHJpbWFyeSBFeHByZXNzaW9uc1xuXG52YXIgbGVnYWxLZXl3b3JkcyA9IHtcbiAgXCJpZlwiOiAxLFxuICBcInRoaXNcIjogMVxufTtcblxuZnVuY3Rpb24gcGFyc2VQcmltYXJ5RXhwcmVzc2lvbigpIHtcbiAgdmFyIHR5cGUsIHRva2VuLCBleHByO1xuXG4gIGlmIChtYXRjaCgnKCcpKSB7XG4gICAgcmV0dXJuIHBhcnNlR3JvdXBFeHByZXNzaW9uKCk7XG4gIH1cblxuICBpZiAobWF0Y2goJ1snKSkge1xuICAgIHJldHVybiBwYXJzZUFycmF5SW5pdGlhbGlzZXIoKTtcbiAgfVxuXG4gIGlmIChtYXRjaCgneycpKSB7XG4gICAgcmV0dXJuIHBhcnNlT2JqZWN0SW5pdGlhbGlzZXIoKTtcbiAgfVxuXG4gIHR5cGUgPSBsb29rYWhlYWQudHlwZTtcbiAgaW5kZXggPSBsb29rYWhlYWQuc3RhcnQ7XG5cblxuICBpZiAodHlwZSA9PT0gVG9rZW5JZGVudGlmaWVyIHx8IGxlZ2FsS2V5d29yZHNbbG9va2FoZWFkLnZhbHVlXSkge1xuICAgIGV4cHIgPSBmaW5pc2hJZGVudGlmaWVyKGxleCgpLnZhbHVlKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSBUb2tlblN0cmluZ0xpdGVyYWwgfHwgdHlwZSA9PT0gVG9rZW5OdW1lcmljTGl0ZXJhbCkge1xuICAgIGlmIChsb29rYWhlYWQub2N0YWwpIHtcbiAgICAgIHRocm93RXJyb3IobG9va2FoZWFkLCBNZXNzYWdlU3RyaWN0T2N0YWxMaXRlcmFsKTtcbiAgICB9XG4gICAgZXhwciA9IGZpbmlzaExpdGVyYWwobGV4KCkpO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IFRva2VuS2V5d29yZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihESVNBQkxFRCk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9rZW5Cb29sZWFuTGl0ZXJhbCkge1xuICAgIHRva2VuID0gbGV4KCk7XG4gICAgdG9rZW4udmFsdWUgPSAodG9rZW4udmFsdWUgPT09ICd0cnVlJyk7XG4gICAgZXhwciA9IGZpbmlzaExpdGVyYWwodG9rZW4pO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IFRva2VuTnVsbExpdGVyYWwpIHtcbiAgICB0b2tlbiA9IGxleCgpO1xuICAgIHRva2VuLnZhbHVlID0gbnVsbDtcbiAgICBleHByID0gZmluaXNoTGl0ZXJhbCh0b2tlbik7XG4gIH0gZWxzZSBpZiAobWF0Y2goJy8nKSB8fCBtYXRjaCgnLz0nKSkge1xuICAgIGV4cHIgPSBmaW5pc2hMaXRlcmFsKHNjYW5SZWdFeHAoKSk7XG4gICAgcGVlaygpO1xuICB9IGVsc2Uge1xuICAgIHRocm93VW5leHBlY3RlZChsZXgoKSk7XG4gIH1cblxuICByZXR1cm4gZXhwcjtcbn1cblxuLy8gMTEuMiBMZWZ0LUhhbmQtU2lkZSBFeHByZXNzaW9uc1xuXG5mdW5jdGlvbiBwYXJzZUFyZ3VtZW50cygpIHtcbiAgdmFyIGFyZ3MgPSBbXTtcblxuICBleHBlY3QoJygnKTtcblxuICBpZiAoIW1hdGNoKCcpJykpIHtcbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGFyZ3MucHVzaChwYXJzZUNvbmRpdGlvbmFsRXhwcmVzc2lvbigpKTtcbiAgICAgIGlmIChtYXRjaCgnKScpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZXhwZWN0KCcsJyk7XG4gICAgfVxuICB9XG5cbiAgZXhwZWN0KCcpJyk7XG5cbiAgcmV0dXJuIGFyZ3M7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTm9uQ29tcHV0ZWRQcm9wZXJ0eSgpIHtcbiAgdmFyIHRva2VuO1xuICBpbmRleCA9IGxvb2thaGVhZC5zdGFydDtcbiAgdG9rZW4gPSBsZXgoKTtcblxuICBpZiAoIWlzSWRlbnRpZmllck5hbWUodG9rZW4pKSB7XG4gICAgdGhyb3dVbmV4cGVjdGVkKHRva2VuKTtcbiAgfVxuXG4gIHJldHVybiBmaW5pc2hJZGVudGlmaWVyKHRva2VuLnZhbHVlKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VOb25Db21wdXRlZE1lbWJlcigpIHtcbiAgZXhwZWN0KCcuJyk7XG5cbiAgcmV0dXJuIHBhcnNlTm9uQ29tcHV0ZWRQcm9wZXJ0eSgpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUNvbXB1dGVkTWVtYmVyKCkge1xuICB2YXIgZXhwcjtcblxuICBleHBlY3QoJ1snKTtcblxuICBleHByID0gcGFyc2VFeHByZXNzaW9uKCk7XG5cbiAgZXhwZWN0KCddJyk7XG5cbiAgcmV0dXJuIGV4cHI7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbkFsbG93Q2FsbCgpIHtcbiAgdmFyIGV4cHIsIGFyZ3MsIHByb3BlcnR5O1xuXG4gIGV4cHIgPSBwYXJzZVByaW1hcnlFeHByZXNzaW9uKCk7XG5cbiAgZm9yICg7Oykge1xuICAgIGlmIChtYXRjaCgnLicpKSB7XG4gICAgICBwcm9wZXJ0eSA9IHBhcnNlTm9uQ29tcHV0ZWRNZW1iZXIoKTtcbiAgICAgIGV4cHIgPSBmaW5pc2hNZW1iZXJFeHByZXNzaW9uKCcuJywgZXhwciwgcHJvcGVydHkpO1xuICAgIH0gZWxzZSBpZiAobWF0Y2goJygnKSkge1xuICAgICAgYXJncyA9IHBhcnNlQXJndW1lbnRzKCk7XG4gICAgICBleHByID0gZmluaXNoQ2FsbEV4cHJlc3Npb24oZXhwciwgYXJncyk7XG4gICAgfSBlbHNlIGlmIChtYXRjaCgnWycpKSB7XG4gICAgICBwcm9wZXJ0eSA9IHBhcnNlQ29tcHV0ZWRNZW1iZXIoKTtcbiAgICAgIGV4cHIgPSBmaW5pc2hNZW1iZXJFeHByZXNzaW9uKCdbJywgZXhwciwgcHJvcGVydHkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXhwcjtcbn1cblxuLy8gMTEuMyBQb3N0Zml4IEV4cHJlc3Npb25zXG5cbmZ1bmN0aW9uIHBhcnNlUG9zdGZpeEV4cHJlc3Npb24oKSB7XG4gIHZhciBleHByID0gcGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uQWxsb3dDYWxsKCk7XG5cbiAgaWYgKGxvb2thaGVhZC50eXBlID09PSBUb2tlblB1bmN0dWF0b3IpIHtcbiAgICBpZiAoKG1hdGNoKCcrKycpIHx8IG1hdGNoKCctLScpKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKERJU0FCTEVEKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXhwcjtcbn1cblxuLy8gMTEuNCBVbmFyeSBPcGVyYXRvcnNcblxuZnVuY3Rpb24gcGFyc2VVbmFyeUV4cHJlc3Npb24oKSB7XG4gIHZhciB0b2tlbiwgZXhwcjtcblxuICBpZiAobG9va2FoZWFkLnR5cGUgIT09IFRva2VuUHVuY3R1YXRvciAmJiBsb29rYWhlYWQudHlwZSAhPT0gVG9rZW5LZXl3b3JkKSB7XG4gICAgZXhwciA9IHBhcnNlUG9zdGZpeEV4cHJlc3Npb24oKTtcbiAgfSBlbHNlIGlmIChtYXRjaCgnKysnKSB8fCBtYXRjaCgnLS0nKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihESVNBQkxFRCk7XG4gIH0gZWxzZSBpZiAobWF0Y2goJysnKSB8fCBtYXRjaCgnLScpIHx8IG1hdGNoKCd+JykgfHwgbWF0Y2goJyEnKSkge1xuICAgIHRva2VuID0gbGV4KCk7XG4gICAgZXhwciA9IHBhcnNlVW5hcnlFeHByZXNzaW9uKCk7XG4gICAgZXhwciA9IGZpbmlzaFVuYXJ5RXhwcmVzc2lvbih0b2tlbi52YWx1ZSwgZXhwcik7XG4gIH0gZWxzZSBpZiAobWF0Y2hLZXl3b3JkKCdkZWxldGUnKSB8fCBtYXRjaEtleXdvcmQoJ3ZvaWQnKSB8fCBtYXRjaEtleXdvcmQoJ3R5cGVvZicpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKERJU0FCTEVEKTtcbiAgfSBlbHNlIHtcbiAgICBleHByID0gcGFyc2VQb3N0Zml4RXhwcmVzc2lvbigpO1xuICB9XG5cbiAgcmV0dXJuIGV4cHI7XG59XG5cbmZ1bmN0aW9uIGJpbmFyeVByZWNlZGVuY2UodG9rZW4pIHtcbiAgdmFyIHByZWMgPSAwO1xuXG4gIGlmICh0b2tlbi50eXBlICE9PSBUb2tlblB1bmN0dWF0b3IgJiYgdG9rZW4udHlwZSAhPT0gVG9rZW5LZXl3b3JkKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBzd2l0Y2ggKHRva2VuLnZhbHVlKSB7XG4gICAgY2FzZSAnfHwnOlxuICAgICAgcHJlYyA9IDE7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJyYmJzpcbiAgICAgIHByZWMgPSAyO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd8JzpcbiAgICAgIHByZWMgPSAzO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdeJzpcbiAgICAgIHByZWMgPSA0O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICcmJzpcbiAgICAgIHByZWMgPSA1O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICc9PSc6XG4gICAgY2FzZSAnIT0nOlxuICAgIGNhc2UgJz09PSc6XG4gICAgY2FzZSAnIT09JzpcbiAgICAgIHByZWMgPSA2O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICc8JzpcbiAgICBjYXNlICc+JzpcbiAgICBjYXNlICc8PSc6XG4gICAgY2FzZSAnPj0nOlxuICAgIGNhc2UgJ2luc3RhbmNlb2YnOlxuICAgIGNhc2UgJ2luJzpcbiAgICAgIHByZWMgPSA3O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICc8PCc6XG4gICAgY2FzZSAnPj4nOlxuICAgIGNhc2UgJz4+Pic6XG4gICAgICBwcmVjID0gODtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnKyc6XG4gICAgY2FzZSAnLSc6XG4gICAgICBwcmVjID0gOTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnKic6XG4gICAgY2FzZSAnLyc6XG4gICAgY2FzZSAnJSc6XG4gICAgICBwcmVjID0gMTE7XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBwcmVjO1xufVxuXG4vLyAxMS41IE11bHRpcGxpY2F0aXZlIE9wZXJhdG9yc1xuLy8gMTEuNiBBZGRpdGl2ZSBPcGVyYXRvcnNcbi8vIDExLjcgQml0d2lzZSBTaGlmdCBPcGVyYXRvcnNcbi8vIDExLjggUmVsYXRpb25hbCBPcGVyYXRvcnNcbi8vIDExLjkgRXF1YWxpdHkgT3BlcmF0b3JzXG4vLyAxMS4xMCBCaW5hcnkgQml0d2lzZSBPcGVyYXRvcnNcbi8vIDExLjExIEJpbmFyeSBMb2dpY2FsIE9wZXJhdG9yc1xuXG5mdW5jdGlvbiBwYXJzZUJpbmFyeUV4cHJlc3Npb24oKSB7XG4gIHZhciBtYXJrZXIsIG1hcmtlcnMsIGV4cHIsIHRva2VuLCBwcmVjLCBzdGFjaywgcmlnaHQsIG9wZXJhdG9yLCBsZWZ0LCBpO1xuXG4gIG1hcmtlciA9IGxvb2thaGVhZDtcbiAgbGVmdCA9IHBhcnNlVW5hcnlFeHByZXNzaW9uKCk7XG5cbiAgdG9rZW4gPSBsb29rYWhlYWQ7XG4gIHByZWMgPSBiaW5hcnlQcmVjZWRlbmNlKHRva2VuKTtcbiAgaWYgKHByZWMgPT09IDApIHtcbiAgICByZXR1cm4gbGVmdDtcbiAgfVxuICB0b2tlbi5wcmVjID0gcHJlYztcbiAgbGV4KCk7XG5cbiAgbWFya2VycyA9IFttYXJrZXIsIGxvb2thaGVhZF07XG4gIHJpZ2h0ID0gcGFyc2VVbmFyeUV4cHJlc3Npb24oKTtcblxuICBzdGFjayA9IFtsZWZ0LCB0b2tlbiwgcmlnaHRdO1xuXG4gIHdoaWxlICgocHJlYyA9IGJpbmFyeVByZWNlZGVuY2UobG9va2FoZWFkKSkgPiAwKSB7XG5cbiAgICAvLyBSZWR1Y2U6IG1ha2UgYSBiaW5hcnkgZXhwcmVzc2lvbiBmcm9tIHRoZSB0aHJlZSB0b3Btb3N0IGVudHJpZXMuXG4gICAgd2hpbGUgKChzdGFjay5sZW5ndGggPiAyKSAmJiAocHJlYyA8PSBzdGFja1tzdGFjay5sZW5ndGggLSAyXS5wcmVjKSkge1xuICAgICAgcmlnaHQgPSBzdGFjay5wb3AoKTtcbiAgICAgIG9wZXJhdG9yID0gc3RhY2sucG9wKCkudmFsdWU7XG4gICAgICBsZWZ0ID0gc3RhY2sucG9wKCk7XG4gICAgICBtYXJrZXJzLnBvcCgpO1xuICAgICAgZXhwciA9IGZpbmlzaEJpbmFyeUV4cHJlc3Npb24ob3BlcmF0b3IsIGxlZnQsIHJpZ2h0KTtcbiAgICAgIHN0YWNrLnB1c2goZXhwcik7XG4gICAgfVxuXG4gICAgLy8gU2hpZnQuXG4gICAgdG9rZW4gPSBsZXgoKTtcbiAgICB0b2tlbi5wcmVjID0gcHJlYztcbiAgICBzdGFjay5wdXNoKHRva2VuKTtcbiAgICBtYXJrZXJzLnB1c2gobG9va2FoZWFkKTtcbiAgICBleHByID0gcGFyc2VVbmFyeUV4cHJlc3Npb24oKTtcbiAgICBzdGFjay5wdXNoKGV4cHIpO1xuICB9XG5cbiAgLy8gRmluYWwgcmVkdWNlIHRvIGNsZWFuLXVwIHRoZSBzdGFjay5cbiAgaSA9IHN0YWNrLmxlbmd0aCAtIDE7XG4gIGV4cHIgPSBzdGFja1tpXTtcbiAgbWFya2Vycy5wb3AoKTtcbiAgd2hpbGUgKGkgPiAxKSB7XG4gICAgbWFya2Vycy5wb3AoKVxuICAgIGV4cHIgPSBmaW5pc2hCaW5hcnlFeHByZXNzaW9uKHN0YWNrW2kgLSAxXS52YWx1ZSwgc3RhY2tbaSAtIDJdLCBleHByKTtcbiAgICBpIC09IDI7XG4gIH1cblxuICByZXR1cm4gZXhwcjtcbn1cblxuLy8gMTEuMTIgQ29uZGl0aW9uYWwgT3BlcmF0b3JcblxuZnVuY3Rpb24gcGFyc2VDb25kaXRpb25hbEV4cHJlc3Npb24oKSB7XG4gIHZhciBleHByLCBjb25zZXF1ZW50LCBhbHRlcm5hdGU7XG5cbiAgZXhwciA9IHBhcnNlQmluYXJ5RXhwcmVzc2lvbigpO1xuXG4gIGlmIChtYXRjaCgnPycpKSB7XG4gICAgbGV4KCk7XG4gICAgY29uc2VxdWVudCA9IHBhcnNlQ29uZGl0aW9uYWxFeHByZXNzaW9uKCk7XG4gICAgZXhwZWN0KCc6Jyk7XG4gICAgYWx0ZXJuYXRlID0gcGFyc2VDb25kaXRpb25hbEV4cHJlc3Npb24oKTtcblxuICAgIGV4cHIgPSBmaW5pc2hDb25kaXRpb25hbEV4cHJlc3Npb24oZXhwciwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKTtcbiAgfVxuXG4gIHJldHVybiBleHByO1xufVxuXG4vLyAxMS4xNCBDb21tYSBPcGVyYXRvclxuXG5mdW5jdGlvbiBwYXJzZUV4cHJlc3Npb24oKSB7XG4gIHZhciBleHByID0gcGFyc2VDb25kaXRpb25hbEV4cHJlc3Npb24oKTtcblxuICBpZiAobWF0Y2goJywnKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihESVNBQkxFRCk7IC8vIG5vIHNlcXVlbmNlIGV4cHJlc3Npb25zXG4gIH1cblxuICByZXR1cm4gZXhwcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29kZSkge1xuICBzb3VyY2UgPSBjb2RlO1xuICBpbmRleCA9IDA7XG4gIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG4gIGxvb2thaGVhZCA9IG51bGw7XG5cbiAgcGVlaygpO1xuXG4gIHZhciBleHByID0gcGFyc2VFeHByZXNzaW9uKCk7XG5cbiAgaWYgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbkVPRikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0IHRva2VuIGFmdGVyIGV4cHJlc3Npb24uXCIpO1xuICB9XG4gIHJldHVybiBleHByO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQge1xuICBOYU46ICAgICAgICdOYU4nLFxuICBFOiAgICAgICAgICdNYXRoLkUnLFxuICBMTjI6ICAgICAgICdNYXRoLkxOMicsXG4gIExOMTA6ICAgICAgJ01hdGguTE4xMCcsXG4gIExPRzJFOiAgICAgJ01hdGguTE9HMkUnLFxuICBMT0cxMEU6ICAgICdNYXRoLkxPRzEwRScsXG4gIFBJOiAgICAgICAgJ01hdGguUEknLFxuICBTUVJUMV8yOiAgICdNYXRoLlNRUlQxXzInLFxuICBTUVJUMjogICAgICdNYXRoLlNRUlQyJyxcbiAgTUlOX1ZBTFVFOiAnTnVtYmVyLk1JTl9WQUxVRScsXG4gIE1BWF9WQUxVRTogJ051bWJlci5NQVhfVkFMVUUnXG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZm4sIGZpZWxkcywgbmFtZSkge1xuICBmbi5maWVsZHMgPSBmaWVsZHMgfHwgW107XG4gIGZuLmZuYW1lID0gbmFtZTtcbiAgcmV0dXJuIGZuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWNjZXNzb3JOYW1lKGZuKSB7XG4gIHJldHVybiBmbiA9PSBudWxsID8gbnVsbCA6IGZuLmZuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWNjZXNzb3JGaWVsZHMoZm4pIHtcbiAgcmV0dXJuIGZuID09IG51bGwgPyBudWxsIDogZm4uZmllbGRzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obWVzc2FnZSkge1xuICB0aHJvdyBFcnJvcihtZXNzYWdlKTtcbn1cbiIsImltcG9ydCBlcnJvciBmcm9tICcuL2Vycm9yJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocCkge1xuICB2YXIgcGF0aCA9IFtdLFxuICAgICAgcSA9IG51bGwsXG4gICAgICBiID0gMCxcbiAgICAgIG4gPSBwLmxlbmd0aCxcbiAgICAgIHMgPSAnJyxcbiAgICAgIGksIGosIGM7XG5cbiAgcCA9IHAgKyAnJztcblxuICBmdW5jdGlvbiBwdXNoKCkge1xuICAgIHBhdGgucHVzaChzICsgcC5zdWJzdHJpbmcoaSwgaikpO1xuICAgIHMgPSAnJztcbiAgICBpID0gaiArIDE7XG4gIH1cblxuICBmb3IgKGk9aj0wOyBqPG47ICsraikge1xuICAgIGMgPSBwW2pdO1xuICAgIGlmIChjID09PSAnXFxcXCcpIHtcbiAgICAgIHMgKz0gcC5zdWJzdHJpbmcoaSwgaik7XG4gICAgICBzICs9IHAuc3Vic3RyaW5nKCsraiwgKytqKTtcbiAgICAgIGkgPSBqO1xuICAgIH0gZWxzZSBpZiAoYyA9PT0gcSkge1xuICAgICAgcHVzaCgpO1xuICAgICAgcSA9IG51bGw7XG4gICAgICBiID0gLTE7XG4gICAgfSBlbHNlIGlmIChxKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9IGVsc2UgaWYgKGkgPT09IGIgJiYgYyA9PT0gJ1wiJykge1xuICAgICAgaSA9IGogKyAxO1xuICAgICAgcSA9IGM7XG4gICAgfSBlbHNlIGlmIChpID09PSBiICYmIGMgPT09IFwiJ1wiKSB7XG4gICAgICBpID0gaiArIDE7XG4gICAgICBxID0gYztcbiAgICB9IGVsc2UgaWYgKGMgPT09ICcuJyAmJiAhYikge1xuICAgICAgaWYgKGogPiBpKSB7XG4gICAgICAgIHB1c2goKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGkgPSBqICsgMTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGMgPT09ICdbJykge1xuICAgICAgaWYgKGogPiBpKSBwdXNoKCk7XG4gICAgICBiID0gaSA9IGogKyAxO1xuICAgIH0gZWxzZSBpZiAoYyA9PT0gJ10nKSB7XG4gICAgICBpZiAoIWIpIGVycm9yKCdBY2Nlc3MgcGF0aCBtaXNzaW5nIG9wZW4gYnJhY2tldDogJyArIHApO1xuICAgICAgaWYgKGIgPiAwKSBwdXNoKCk7XG4gICAgICBiID0gMDtcbiAgICAgIGkgPSBqICsgMTtcbiAgICB9XG4gIH1cblxuICBpZiAoYikgZXJyb3IoJ0FjY2VzcyBwYXRoIG1pc3NpbmcgY2xvc2luZyBicmFja2V0OiAnICsgcCk7XG4gIGlmIChxKSBlcnJvcignQWNjZXNzIHBhdGggbWlzc2luZyBjbG9zaW5nIHF1b3RlOiAnICsgcCk7XG5cbiAgaWYgKGogPiBpKSB7XG4gICAgaisrO1xuICAgIHB1c2goKTtcbiAgfVxuXG4gIHJldHVybiBwYXRoO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgQXJyYXkuaXNBcnJheTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKF8pIHtcbiAgcmV0dXJuIF8gPT09IE9iamVjdChfKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKF8pIHtcbiAgcmV0dXJuIHR5cGVvZiBfID09PSAnc3RyaW5nJztcbn1cbiIsImltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheSc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdCc7XG5pbXBvcnQgaXNTdHJpbmcgZnJvbSAnLi9pc1N0cmluZyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICQoeCkge1xuICByZXR1cm4gaXNBcnJheSh4KSA/ICdbJyArIHgubWFwKCQpICsgJ10nXG4gICAgOiBpc09iamVjdCh4KSB8fCBpc1N0cmluZyh4KSA/XG4gICAgICAvLyBPdXRwdXQgdmFsaWQgSlNPTiBhbmQgSlMgc291cmNlIHN0cmluZ3MuXG4gICAgICAvLyBTZWUgaHR0cDovL3RpbWVsZXNzcmVwby5jb20vanNvbi1pc250LWEtamF2YXNjcmlwdC1zdWJzZXRcbiAgICAgIEpTT04uc3RyaW5naWZ5KHgpLnJlcGxhY2UoJ1xcdTIwMjgnLCdcXFxcdTIwMjgnKS5yZXBsYWNlKCdcXHUyMDI5JywgJ1xcXFx1MjAyOScpXG4gICAgOiB4O1xufVxuIiwiaW1wb3J0IGFjY2Vzc29yIGZyb20gJy4vYWNjZXNzb3InO1xuaW1wb3J0IHNwbGl0QWNjZXNzUGF0aCBmcm9tICcuL3NwbGl0QWNjZXNzUGF0aCc7XG5pbXBvcnQgc3RyaW5nVmFsdWUgZnJvbSAnLi9zdHJpbmdWYWx1ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGZpZWxkLCBuYW1lKSB7XG4gIHZhciBwYXRoID0gc3BsaXRBY2Nlc3NQYXRoKGZpZWxkKSxcbiAgICAgIGNvZGUgPSAncmV0dXJuIF9bJyArIHBhdGgubWFwKHN0cmluZ1ZhbHVlKS5qb2luKCddWycpICsgJ107JztcblxuICByZXR1cm4gYWNjZXNzb3IoXG4gICAgRnVuY3Rpb24oJ18nLCBjb2RlKSxcbiAgICBbKGZpZWxkID0gcGF0aC5sZW5ndGg9PT0xID8gcGF0aFswXSA6IGZpZWxkKV0sXG4gICAgbmFtZSB8fCBmaWVsZFxuICApO1xufVxuIiwiaW1wb3J0IGFjY2Vzc29yIGZyb20gJy4vYWNjZXNzb3InO1xuaW1wb3J0IGZpZWxkIGZyb20gJy4vZmllbGQnO1xuXG52YXIgZW1wdHkgPSBbXTtcblxuZXhwb3J0IHZhciBpZCA9IGZpZWxkKCdpZCcpO1xuXG5leHBvcnQgdmFyIGlkZW50aXR5ID0gYWNjZXNzb3IoZnVuY3Rpb24oXykgeyByZXR1cm4gXzsgfSwgZW1wdHksICdpZGVudGl0eScpO1xuXG5leHBvcnQgdmFyIHplcm8gPSBhY2Nlc3NvcihmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH0sIGVtcHR5LCAnemVybycpO1xuXG5leHBvcnQgdmFyIG9uZSA9IGFjY2Vzc29yKGZ1bmN0aW9uKCkgeyByZXR1cm4gMTsgfSwgZW1wdHksICdvbmUnKTtcblxuZXhwb3J0IHZhciB0cnV0aHkgPSBhY2Nlc3NvcihmdW5jdGlvbigpIHsgcmV0dXJuIHRydWU7IH0sIGVtcHR5LCAndHJ1ZScpO1xuXG5leHBvcnQgdmFyIGZhbHN5ID0gYWNjZXNzb3IoZnVuY3Rpb24oKSB7IHJldHVybiBmYWxzZTsgfSwgZW1wdHksICdmYWxzZScpO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oXykge1xuICByZXR1cm4gdHlwZW9mIF8gPT09ICdmdW5jdGlvbic7XG59XG4iLCJjb25zdCBob3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7XG4gIHJldHVybiBob3AuY2FsbChvYmplY3QsIHByb3BlcnR5KTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKF8pIHtcbiAgZm9yICh2YXIgcz17fSwgaT0wLCBuPV8ubGVuZ3RoOyBpPG47ICsraSkgc1tfW2ldXSA9IHRydWU7XG4gIHJldHVybiBzO1xufVxuIiwiaW1wb3J0IHtlcnJvcn0gZnJvbSAndmVnYS11dGlsJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29kZWdlbikge1xuXG4gIGZ1bmN0aW9uIGZuY2FsbChuYW1lLCBhcmdzLCBjYXN0LCB0eXBlKSB7XG4gICAgdmFyIG9iaiA9IGNvZGVnZW4oYXJnc1swXSk7XG4gICAgaWYgKGNhc3QpIHtcbiAgICAgIG9iaiA9IGNhc3QgKyAnKCcgKyBvYmogKyAnKSc7XG4gICAgICBpZiAoY2FzdC5sYXN0SW5kZXhPZignbmV3ICcsIDApID09PSAwKSBvYmogPSAnKCcgKyBvYmogKyAnKSc7XG4gICAgfVxuICAgIHJldHVybiBvYmogKyAnLicgKyBuYW1lICsgKHR5cGUgPCAwID8gJycgOiB0eXBlID09PSAwID9cbiAgICAgICcoKScgOlxuICAgICAgJygnICsgYXJncy5zbGljZSgxKS5tYXAoY29kZWdlbikuam9pbignLCcpICsgJyknKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZuKG5hbWUsIGNhc3QsIHR5cGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oYXJncykge1xuICAgICAgcmV0dXJuIGZuY2FsbChuYW1lLCBhcmdzLCBjYXN0LCB0eXBlKTtcbiAgICB9O1xuICB9XG5cbiAgdmFyIERBVEUgPSAnbmV3IERhdGUnLFxuICAgICAgU1RSSU5HID0gJ1N0cmluZycsXG4gICAgICBSRUdFWFAgPSAnUmVnRXhwJztcblxuICByZXR1cm4ge1xuICAgIC8vIE1BVEggZnVuY3Rpb25zXG4gICAgaXNOYU46ICAgICdOdW1iZXIuaXNOYU4nLFxuICAgIGlzRmluaXRlOiAnTnVtYmVyLmlzRmluaXRlJyxcbiAgICBhYnM6ICAgICAgJ01hdGguYWJzJyxcbiAgICBhY29zOiAgICAgJ01hdGguYWNvcycsXG4gICAgYXNpbjogICAgICdNYXRoLmFzaW4nLFxuICAgIGF0YW46ICAgICAnTWF0aC5hdGFuJyxcbiAgICBhdGFuMjogICAgJ01hdGguYXRhbjInLFxuICAgIGNlaWw6ICAgICAnTWF0aC5jZWlsJyxcbiAgICBjb3M6ICAgICAgJ01hdGguY29zJyxcbiAgICBleHA6ICAgICAgJ01hdGguZXhwJyxcbiAgICBmbG9vcjogICAgJ01hdGguZmxvb3InLFxuICAgIGxvZzogICAgICAnTWF0aC5sb2cnLFxuICAgIG1heDogICAgICAnTWF0aC5tYXgnLFxuICAgIG1pbjogICAgICAnTWF0aC5taW4nLFxuICAgIHBvdzogICAgICAnTWF0aC5wb3cnLFxuICAgIHJhbmRvbTogICAnTWF0aC5yYW5kb20nLFxuICAgIHJvdW5kOiAgICAnTWF0aC5yb3VuZCcsXG4gICAgc2luOiAgICAgICdNYXRoLnNpbicsXG4gICAgc3FydDogICAgICdNYXRoLnNxcnQnLFxuICAgIHRhbjogICAgICAnTWF0aC50YW4nLFxuXG4gICAgY2xhbXA6IGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDMpIGVycm9yKCdNaXNzaW5nIGFyZ3VtZW50cyB0byBjbGFtcCBmdW5jdGlvbi4nKTtcbiAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDMpIGVycm9yKCdUb28gbWFueSBhcmd1bWVudHMgdG8gY2xhbXAgZnVuY3Rpb24uJyk7XG4gICAgICB2YXIgYSA9IGFyZ3MubWFwKGNvZGVnZW4pO1xuICAgICAgcmV0dXJuICdNYXRoLm1heCgnK2FbMV0rJywgTWF0aC5taW4oJythWzJdKycsJythWzBdKycpKSc7XG4gICAgfSxcblxuICAgIC8vIERBVEUgZnVuY3Rpb25zXG4gICAgbm93OiAgICAgICAgICAgICAnRGF0ZS5ub3cnLFxuICAgIHV0YzogICAgICAgICAgICAgJ0RhdGUuVVRDJyxcbiAgICBkYXRldGltZTogICAgICAgIERBVEUsXG4gICAgZGF0ZTogICAgICAgICAgICBmbignZ2V0RGF0ZScsIERBVEUsIDApLFxuICAgIGRheTogICAgICAgICAgICAgZm4oJ2dldERheScsIERBVEUsIDApLFxuICAgIHllYXI6ICAgICAgICAgICAgZm4oJ2dldEZ1bGxZZWFyJywgREFURSwgMCksXG4gICAgbW9udGg6ICAgICAgICAgICBmbignZ2V0TW9udGgnLCBEQVRFLCAwKSxcbiAgICBob3VyczogICAgICAgICAgIGZuKCdnZXRIb3VycycsIERBVEUsIDApLFxuICAgIG1pbnV0ZXM6ICAgICAgICAgZm4oJ2dldE1pbnV0ZXMnLCBEQVRFLCAwKSxcbiAgICBzZWNvbmRzOiAgICAgICAgIGZuKCdnZXRTZWNvbmRzJywgREFURSwgMCksXG4gICAgbWlsbGlzZWNvbmRzOiAgICBmbignZ2V0TWlsbGlzZWNvbmRzJywgREFURSwgMCksXG4gICAgdGltZTogICAgICAgICAgICBmbignZ2V0VGltZScsIERBVEUsIDApLFxuICAgIHRpbWV6b25lb2Zmc2V0OiAgZm4oJ2dldFRpbWV6b25lT2Zmc2V0JywgREFURSwgMCksXG4gICAgdXRjZGF0ZTogICAgICAgICBmbignZ2V0VVRDRGF0ZScsIERBVEUsIDApLFxuICAgIHV0Y2RheTogICAgICAgICAgZm4oJ2dldFVUQ0RheScsIERBVEUsIDApLFxuICAgIHV0Y3llYXI6ICAgICAgICAgZm4oJ2dldFVUQ0Z1bGxZZWFyJywgREFURSwgMCksXG4gICAgdXRjbW9udGg6ICAgICAgICBmbignZ2V0VVRDTW9udGgnLCBEQVRFLCAwKSxcbiAgICB1dGNob3VyczogICAgICAgIGZuKCdnZXRVVENIb3VycycsIERBVEUsIDApLFxuICAgIHV0Y21pbnV0ZXM6ICAgICAgZm4oJ2dldFVUQ01pbnV0ZXMnLCBEQVRFLCAwKSxcbiAgICB1dGNzZWNvbmRzOiAgICAgIGZuKCdnZXRVVENTZWNvbmRzJywgREFURSwgMCksXG4gICAgdXRjbWlsbGlzZWNvbmRzOiBmbignZ2V0VVRDTWlsbGlzZWNvbmRzJywgREFURSwgMCksXG5cbiAgICAvLyBzZXF1ZW5jZSBmdW5jdGlvbnNcbiAgICBsZW5ndGg6ICAgICAgZm4oJ2xlbmd0aCcsIG51bGwsIC0xKSxcbiAgICBqb2luOiAgICAgICAgZm4oJ2pvaW4nLCBudWxsKSxcbiAgICBpbmRleG9mOiAgICAgZm4oJ2luZGV4T2YnLCBudWxsKSxcbiAgICBsYXN0aW5kZXhvZjogZm4oJ2xhc3RJbmRleE9mJywgbnVsbCksXG4gICAgc2xpY2U6ICAgICAgIGZuKCdzbGljZScsIG51bGwpLFxuXG4gICAgcmV2ZXJzZTogZnVuY3Rpb24oYXJncykge1xuICAgICAgcmV0dXJuICcoJytjb2RlZ2VuKGFyZ3NbMF0pKycpLnNsaWNlKCkucmV2ZXJzZSgpJztcbiAgICB9LFxuXG4gICAgLy8gU1RSSU5HIGZ1bmN0aW9uc1xuICAgIHBhcnNlRmxvYXQ6ICAncGFyc2VGbG9hdCcsXG4gICAgcGFyc2VJbnQ6ICAgICdwYXJzZUludCcsXG4gICAgdXBwZXI6ICAgICAgIGZuKCd0b1VwcGVyQ2FzZScsIFNUUklORywgMCksXG4gICAgbG93ZXI6ICAgICAgIGZuKCd0b0xvd2VyQ2FzZScsIFNUUklORywgMCksXG4gICAgc3Vic3RyaW5nOiAgIGZuKCdzdWJzdHJpbmcnLCBTVFJJTkcpLFxuICAgIHNwbGl0OiAgICAgICBmbignc3BsaXQnLCBTVFJJTkcpLFxuICAgIHJlcGxhY2U6ICAgICBmbigncmVwbGFjZScsIFNUUklORyksXG4gICAgdHJpbTogICAgICAgIGZuKCd0cmltJywgU1RSSU5HLCAwKSxcblxuICAgIC8vIFJFR0VYUCBmdW5jdGlvbnNcbiAgICByZWdleHA6ICBSRUdFWFAsXG4gICAgdGVzdDogICAgZm4oJ3Rlc3QnLCBSRUdFWFApLFxuXG4gICAgLy8gQ29udHJvbCBGbG93IGZ1bmN0aW9uc1xuICAgIGlmOiBmdW5jdGlvbihhcmdzKSB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDMpIGVycm9yKCdNaXNzaW5nIGFyZ3VtZW50cyB0byBpZiBmdW5jdGlvbi4nKTtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMykgZXJyb3IoJ1RvbyBtYW55IGFyZ3VtZW50cyB0byBpZiBmdW5jdGlvbi4nKTtcbiAgICAgICAgdmFyIGEgPSBhcmdzLm1hcChjb2RlZ2VuKTtcbiAgICAgICAgcmV0dXJuICcoJythWzBdKyc/JythWzFdKyc6JythWzJdKycpJztcbiAgICAgIH1cbiAgfTtcbn1cbiIsImltcG9ydCBDb25zdGFudHMgZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IEZ1bmN0aW9ucyBmcm9tICcuL2Z1bmN0aW9ucyc7XG5pbXBvcnQge2Vycm9yLCBoYXNPd25Qcm9wZXJ0eSwgaXNGdW5jdGlvbiwgaXNTdHJpbmcsIHRvU2V0fSBmcm9tICd2ZWdhLXV0aWwnO1xuXG5mdW5jdGlvbiBzdHJpcFF1b3RlcyhzKSB7XG4gIHZhciBuID0gcyAmJiBzLmxlbmd0aCAtIDE7XG4gIHJldHVybiBuICYmIChcbiAgICAgIChzWzBdPT09J1wiJyAmJiBzW25dPT09J1wiJykgfHxcbiAgICAgIChzWzBdPT09J1xcJycgJiYgc1tuXT09PSdcXCcnKVxuICAgICkgPyBzLnNsaWNlKDEsIC0xKSA6IHM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG9wdCkge1xuICBvcHQgPSBvcHQgfHwge307XG5cbiAgdmFyIHdoaXRlbGlzdCA9IG9wdC53aGl0ZWxpc3QgPyB0b1NldChvcHQud2hpdGVsaXN0KSA6IHt9LFxuICAgICAgYmxhY2tsaXN0ID0gb3B0LmJsYWNrbGlzdCA/IHRvU2V0KG9wdC5ibGFja2xpc3QpIDoge30sXG4gICAgICBjb25zdGFudHMgPSBvcHQuY29uc3RhbnRzIHx8IENvbnN0YW50cyxcbiAgICAgIGZ1bmN0aW9ucyA9IChvcHQuZnVuY3Rpb25zIHx8IEZ1bmN0aW9ucykodmlzaXQpLFxuICAgICAgZ2xvYmFsdmFyID0gb3B0Lmdsb2JhbHZhcixcbiAgICAgIGZpZWxkdmFyID0gb3B0LmZpZWxkdmFyLFxuICAgICAgZ2xvYmFscyA9IHt9LFxuICAgICAgZmllbGRzID0ge30sXG4gICAgICBtZW1iZXJEZXB0aCA9IDA7XG5cbiAgdmFyIG91dHB1dEdsb2JhbCA9IGlzRnVuY3Rpb24oZ2xvYmFsdmFyKVxuICAgID8gZ2xvYmFsdmFyXG4gICAgOiBmdW5jdGlvbiAoaWQpIHsgcmV0dXJuIGdsb2JhbHZhciArICdbXCInICsgaWQgKyAnXCJdJzsgfTtcblxuICBmdW5jdGlvbiB2aXNpdChhc3QpIHtcbiAgICBpZiAoaXNTdHJpbmcoYXN0KSkgcmV0dXJuIGFzdDtcbiAgICB2YXIgZ2VuZXJhdG9yID0gR2VuZXJhdG9yc1thc3QudHlwZV07XG4gICAgaWYgKGdlbmVyYXRvciA9PSBudWxsKSBlcnJvcignVW5zdXBwb3J0ZWQgdHlwZTogJyArIGFzdC50eXBlKTtcbiAgICByZXR1cm4gZ2VuZXJhdG9yKGFzdCk7XG4gIH1cblxuICB2YXIgR2VuZXJhdG9ycyA9IHtcbiAgICBMaXRlcmFsOiBmdW5jdGlvbihuKSB7XG4gICAgICAgIHJldHVybiBuLnJhdztcbiAgICAgIH0sXG5cbiAgICBJZGVudGlmaWVyOiBmdW5jdGlvbihuKSB7XG4gICAgICB2YXIgaWQgPSBuLm5hbWU7XG4gICAgICBpZiAobWVtYmVyRGVwdGggPiAwKSB7XG4gICAgICAgIHJldHVybiBpZDtcbiAgICAgIH0gZWxzZSBpZiAoaGFzT3duUHJvcGVydHkoYmxhY2tsaXN0LCBpZCkpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yKCdJbGxlZ2FsIGlkZW50aWZpZXI6ICcgKyBpZCk7XG4gICAgICB9IGVsc2UgaWYgKGhhc093blByb3BlcnR5KGNvbnN0YW50cywgaWQpKSB7XG4gICAgICAgIHJldHVybiBjb25zdGFudHNbaWRdO1xuICAgICAgfSBlbHNlIGlmIChoYXNPd25Qcm9wZXJ0eSh3aGl0ZWxpc3QsIGlkKSkge1xuICAgICAgICByZXR1cm4gaWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnbG9iYWxzW2lkXSA9IDE7XG4gICAgICAgIHJldHVybiBvdXRwdXRHbG9iYWwoaWQpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBNZW1iZXJFeHByZXNzaW9uOiBmdW5jdGlvbihuKSB7XG4gICAgICAgIHZhciBkID0gIW4uY29tcHV0ZWQ7XG4gICAgICAgIHZhciBvID0gdmlzaXQobi5vYmplY3QpO1xuICAgICAgICBpZiAoZCkgbWVtYmVyRGVwdGggKz0gMTtcbiAgICAgICAgdmFyIHAgPSB2aXNpdChuLnByb3BlcnR5KTtcbiAgICAgICAgaWYgKG8gPT09IGZpZWxkdmFyKSB7XG4gICAgICAgICAgLy8gc3RyaXAgcXVvdGVzIHRvIHNhbml0aXplIGZpZWxkIG5hbWUgKCMxNjUzKVxuICAgICAgICAgIGZpZWxkc1tzdHJpcFF1b3RlcyhwKV0gPSAxO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkKSBtZW1iZXJEZXB0aCAtPSAxO1xuICAgICAgICByZXR1cm4gbyArIChkID8gJy4nK3AgOiAnWycrcCsnXScpO1xuICAgICAgfSxcblxuICAgIENhbGxFeHByZXNzaW9uOiBmdW5jdGlvbihuKSB7XG4gICAgICAgIGlmIChuLmNhbGxlZS50eXBlICE9PSAnSWRlbnRpZmllcicpIHtcbiAgICAgICAgICBlcnJvcignSWxsZWdhbCBjYWxsZWUgdHlwZTogJyArIG4uY2FsbGVlLnR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjYWxsZWUgPSBuLmNhbGxlZS5uYW1lO1xuICAgICAgICB2YXIgYXJncyA9IG4uYXJndW1lbnRzO1xuICAgICAgICB2YXIgZm4gPSBoYXNPd25Qcm9wZXJ0eShmdW5jdGlvbnMsIGNhbGxlZSkgJiYgZnVuY3Rpb25zW2NhbGxlZV07XG4gICAgICAgIGlmICghZm4pIGVycm9yKCdVbnJlY29nbml6ZWQgZnVuY3Rpb246ICcgKyBjYWxsZWUpO1xuICAgICAgICByZXR1cm4gaXNGdW5jdGlvbihmbilcbiAgICAgICAgICA/IGZuKGFyZ3MpXG4gICAgICAgICAgOiBmbiArICcoJyArIGFyZ3MubWFwKHZpc2l0KS5qb2luKCcsJykgKyAnKSc7XG4gICAgICB9LFxuXG4gICAgQXJyYXlFeHByZXNzaW9uOiBmdW5jdGlvbihuKSB7XG4gICAgICAgIHJldHVybiAnWycgKyBuLmVsZW1lbnRzLm1hcCh2aXNpdCkuam9pbignLCcpICsgJ10nO1xuICAgICAgfSxcblxuICAgIEJpbmFyeUV4cHJlc3Npb246IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgcmV0dXJuICcoJyArIHZpc2l0KG4ubGVmdCkgKyBuLm9wZXJhdG9yICsgdmlzaXQobi5yaWdodCkgKyAnKSc7XG4gICAgICB9LFxuXG4gICAgVW5hcnlFeHByZXNzaW9uOiBmdW5jdGlvbihuKSB7XG4gICAgICAgIHJldHVybiAnKCcgKyBuLm9wZXJhdG9yICsgdmlzaXQobi5hcmd1bWVudCkgKyAnKSc7XG4gICAgICB9LFxuXG4gICAgQ29uZGl0aW9uYWxFeHByZXNzaW9uOiBmdW5jdGlvbihuKSB7XG4gICAgICAgIHJldHVybiAnKCcgKyB2aXNpdChuLnRlc3QpICtcbiAgICAgICAgICAnPycgKyB2aXNpdChuLmNvbnNlcXVlbnQpICtcbiAgICAgICAgICAnOicgKyB2aXNpdChuLmFsdGVybmF0ZSkgK1xuICAgICAgICAgICcpJztcbiAgICAgIH0sXG5cbiAgICBMb2dpY2FsRXhwcmVzc2lvbjogZnVuY3Rpb24obikge1xuICAgICAgICByZXR1cm4gJygnICsgdmlzaXQobi5sZWZ0KSArIG4ub3BlcmF0b3IgKyB2aXNpdChuLnJpZ2h0KSArICcpJztcbiAgICAgIH0sXG5cbiAgICBPYmplY3RFeHByZXNzaW9uOiBmdW5jdGlvbihuKSB7XG4gICAgICAgIHJldHVybiAneycgKyBuLnByb3BlcnRpZXMubWFwKHZpc2l0KS5qb2luKCcsJykgKyAnfSc7XG4gICAgICB9LFxuXG4gICAgUHJvcGVydHk6IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgbWVtYmVyRGVwdGggKz0gMTtcbiAgICAgICAgdmFyIGsgPSB2aXNpdChuLmtleSk7XG4gICAgICAgIG1lbWJlckRlcHRoIC09IDE7XG4gICAgICAgIHJldHVybiBrICsgJzonICsgdmlzaXQobi52YWx1ZSk7XG4gICAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gY29kZWdlbihhc3QpIHtcbiAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgY29kZTogICAgdmlzaXQoYXN0KSxcbiAgICAgIGdsb2JhbHM6IE9iamVjdC5rZXlzKGdsb2JhbHMpLFxuICAgICAgZmllbGRzOiAgT2JqZWN0LmtleXMoZmllbGRzKVxuICAgIH07XG4gICAgZ2xvYmFscyA9IHt9O1xuICAgIGZpZWxkcyA9IHt9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBjb2RlZ2VuLmZ1bmN0aW9ucyA9IGZ1bmN0aW9ucztcbiAgY29kZWdlbi5jb25zdGFudHMgPSBjb25zdGFudHM7XG5cbiAgcmV0dXJuIGNvZGVnZW47XG59XG4iLCJjb25zdCB0ZXh0RGVmYXVsdCA9IHtcbiAgZmlsbDogXCIjMDAwXCIsXG4gIGZvbnQ6IFwic2Fucy1zZXJpZlwiLFxuICBmb250U2l6ZTogMTEsXG4gIG9wYWNpdHk6IDEsXG4gIGJhc2VsaW5lOiBcImFscGhhYmV0aWNcIlxufTtcbi8vIHRoZSBicm93c2VycycgZGVmYXVsdFxuZXhwb3J0IGNvbnN0IEJSX1BST1BfREVGQVVMVCA9IHtcbiAgbm9uZToge30sXG4gIHJlY3Q6IHsgb3BhY2l0eTogMSB9LFxuICBncmFkaWVudDogeyBvcGFjaXR5OiAxIH0sXG4gIGdyb3VwOiB7IG9wYWNpdHk6IDEgfSxcbiAgdGljazogeyBvcGFjaXR5OiAxIH0sXG4gIGdyaWQ6IHsgb3BhY2l0eTogMSB9LFxuICBkb21haW46IHsgb3BhY2l0eTogMSB9LFxuICBzeW1ib2w6IHsgb3BhY2l0eTogMSwgc3Ryb2tlOiBcInRyYW5zcGFyZW50XCIgfSxcbiAgbGluZTogeyBvcGFjaXR5OiAxLCBmaWxsOiBcIm5vbmVcIiB9LFxuICAvLyBhcmVhOiB7IG9wYWNpdHk6IDEsIHN0cm9rZVdpZHRoOiBcIjFweFwiLCBzdHJva2U6IFwibm9uZVwiIH0sXG4gIGFyZWE6IHsgb3BhY2l0eTogMSwgc3Ryb2tlV2lkdGg6IFwiMHB4XCIgfSxcbiAgdHJhaWw6IHsgb3BhY2l0eTogMSwgc3Ryb2tlV2lkdGg6IFwiMHB4XCIgfSxcbiAgcnVsZTogeyBvcGFjaXR5OiAxIH0sXG4gIHRleHQ6IHRleHREZWZhdWx0LFxuICB0aXRsZTogdGV4dERlZmF1bHRcbn07XG4iLCJleHBvcnQgY29uc3QgREVGQVVMVF9FQVNFID0ge1xuICBtYXJrOiBcImN1YmljXCIsXG4gIGxpbmU6IFwiY3ViaWNcIixcbiAgYXhpczogXCJjdWJpY1wiLFxuICBsZWdlbmQ6IFwiY3ViaWNcIixcbiAgdmlldzogXCJjdWJpY1wiXG59OyIsIi8vIEZyb20gaHR0cHM6Ly9naXRodWIuY29tL3ZlZ2EvdmVnYS9ibG9iL21hc3Rlci9wYWNrYWdlcy92ZWdhLXBhcnNlci9zcmMvY29uZmlnLmpzXG4vKipcbiAqIFN0YW5kYXJkIGNvbmZpZ3VyYXRpb24gZGVmYXVsdHMgZm9yIFZlZ2Egc3BlY2lmaWNhdGlvbiBwYXJzaW5nLlxuICogVXNlcnMgY2FuIHByb3ZpZGUgdGhlaXIgb3duIChzdWItKXNldCBvZiB0aGVzZSBkZWZhdWx0IHZhbHVlc1xuICogYnkgcGFzc2luZyBpbiBhIGNvbmZpZyBvYmplY3QgdG8gdGhlIHRvcC1sZXZlbCBwYXJzZSBtZXRob2QuXG4gKi9cbmNvbnN0IGRlZmF1bHRGb250ID0gXCJzYW5zLXNlcmlmXCIsXG4gIGRlZmF1bHRTeW1ib2xTaXplID0gMzAsXG4gIGRlZmF1bHRTdHJva2VXaWR0aCA9IDIsXG4gIGRlZmF1bHRDb2xvciA9IFwiIzRjNzhhOFwiLFxuICBibGFjayA9IFwiIzAwMFwiLFxuICBncmF5ID0gXCIjODg4XCIsXG4gIGxpZ2h0R3JheSA9IFwiI2RkZFwiO1xuZXhwb3J0IGNvbnN0IHZlZ2FDb25maWcgPSB7XG4gIC8vIGRlZmF1bHQgdmlzdWFsaXphdGlvbiBkZXNjcmlwdGlvblxuICBkZXNjcmlwdGlvbjogXCJWZWdhIHZpc3VhbGl6YXRpb25cIixcblxuICAvLyBkZWZhdWx0IHBhZGRpbmcgYXJvdW5kIHZpc3VhbGl6YXRpb25cbiAgcGFkZGluZzogMCxcblxuICAvLyBkZWZhdWx0IGZvciBhdXRvbWF0aWMgc2l6aW5nOyBvcHRpb25zOiAnbm9uZScsICdwYWQnLCAnZml0J1xuICAvLyBvciBwcm92aWRlIGFuIG9iamVjdCAoZS5nLiwgeyd0eXBlJzogJ3BhZCcsICdyZXNpemUnOiB0cnVlfSlcbiAgYXV0b3NpemU6IFwicGFkXCIsXG5cbiAgLy8gZGVmYXVsdCB2aWV3IGJhY2tncm91bmQgY29sb3JcbiAgLy8gY292ZXJzIHRoZSBlbnRpcmUgdmlldyBjb21wb25lbnRcbiAgYmFja2dyb3VuZDogbnVsbCxcblxuICAvLyBkZWZhdWx0IGV2ZW50IGhhbmRsaW5nIGNvbmZpZ3VyYXRpb25cbiAgLy8gcHJldmVudERlZmF1bHQgZm9yIHZpZXctc291cmNlZCBldmVudCB0eXBlcyBleGNlcHQgJ3doZWVsJ1xuICBldmVudHM6IHtcbiAgICBkZWZhdWx0czoge2FsbG93OiBbXCJ3aGVlbFwiXX1cbiAgfSxcblxuICAvLyBkZWZhdWx0cyBmb3IgdG9wLWxldmVsIGdyb3VwIG1hcmtzXG4gIC8vIGFjY2VwdHMgbWFyayBwcm9wZXJ0aWVzIChmaWxsLCBzdHJva2UsIGV0YylcbiAgLy8gY292ZXJzIHRoZSBkYXRhIHJlY3RhbmdsZSB3aXRoaW4gZ3JvdXAgd2lkdGgvaGVpZ2h0XG4gIGdyb3VwOiBudWxsLFxuXG4gIC8vIGRlZmF1bHRzIGZvciBiYXNpYyBtYXJrIHR5cGVzXG4gIC8vIGVhY2ggc3Vic2V0IGFjY2VwdHMgbWFyayBwcm9wZXJ0aWVzIChmaWxsLCBzdHJva2UsIGV0YylcbiAgbWFyazogbnVsbCxcbiAgYXJjOiB7IGZpbGw6IGRlZmF1bHRDb2xvciB9LFxuICBhcmVhOiB7IGZpbGw6IGRlZmF1bHRDb2xvciB9LFxuICBpbWFnZTogbnVsbCxcbiAgbGluZToge1xuICAgIHN0cm9rZTogZGVmYXVsdENvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBkZWZhdWx0U3Ryb2tlV2lkdGhcbiAgfSxcbiAgcGF0aDogeyBzdHJva2U6IGRlZmF1bHRDb2xvciB9LFxuICByZWN0OiB7IGZpbGw6IGRlZmF1bHRDb2xvciB9LFxuICBydWxlOiB7IHN0cm9rZTogYmxhY2sgfSxcbiAgc2hhcGU6IHsgc3Ryb2tlOiBkZWZhdWx0Q29sb3IgfSxcbiAgc3ltYm9sOiB7XG4gICAgZmlsbDogZGVmYXVsdENvbG9yLFxuICAgIHNpemU6IDY0XG4gIH0sXG4gIHRleHQ6IHtcbiAgICBmaWxsOiBibGFjayxcbiAgICBmb250OiBkZWZhdWx0Rm9udCxcbiAgICBmb250U2l6ZTogMTFcbiAgfSxcbiAgdHJhaWw6IHtcbiAgICBmaWxsOiBkZWZhdWx0Q29sb3IsXG4gICAgc2l6ZTogZGVmYXVsdFN0cm9rZVdpZHRoXG4gIH0sXG5cbiAgLy8gc3R5bGUgZGVmaW5pdGlvbnNcbiAgc3R5bGU6IHtcbiAgICAvLyBheGlzICYgbGVnZW5kIGxhYmVsc1xuICAgIFwiZ3VpZGUtbGFiZWxcIjoge1xuICAgICAgZmlsbDogYmxhY2ssXG4gICAgICBmb250OiBkZWZhdWx0Rm9udCxcbiAgICAgIGZvbnRTaXplOiAxMFxuICAgIH0sXG4gICAgLy8gYXhpcyAmIGxlZ2VuZCB0aXRsZXNcbiAgICBcImd1aWRlLXRpdGxlXCI6IHtcbiAgICAgIGZpbGw6IGJsYWNrLFxuICAgICAgZm9udDogZGVmYXVsdEZvbnQsXG4gICAgICBmb250U2l6ZTogMTEsXG4gICAgICBmb250V2VpZ2h0OiBcImJvbGRcIlxuICAgIH0sXG4gICAgLy8gaGVhZGVycywgaW5jbHVkaW5nIGNoYXJ0IHRpdGxlXG4gICAgXCJncm91cC10aXRsZVwiOiB7XG4gICAgICBmaWxsOiBibGFjayxcbiAgICAgIGZvbnQ6IGRlZmF1bHRGb250LFxuICAgICAgZm9udFNpemU6IDEzLFxuICAgICAgZm9udFdlaWdodDogXCJib2xkXCJcbiAgICB9LFxuICAgIC8vIGNoYXJ0IHN1YnRpdGxlXG4gICAgXCJncm91cC1zdWJ0aXRsZVwiOiB7XG4gICAgICBmaWxsOiBibGFjayxcbiAgICAgIGZvbnQ6IGRlZmF1bHRGb250LFxuICAgICAgZm9udFNpemU6IDEyXG4gICAgfSxcbiAgICAvLyBkZWZhdWx0cyBmb3Igc3R5bGVkIHBvaW50IG1hcmtzIGluIFZlZ2EtTGl0ZVxuICAgIHBvaW50OiB7XG4gICAgICBzaXplOiBkZWZhdWx0U3ltYm9sU2l6ZSxcbiAgICAgIHN0cm9rZVdpZHRoOiBkZWZhdWx0U3Ryb2tlV2lkdGgsXG4gICAgICBzaGFwZTogXCJjaXJjbGVcIlxuICAgIH0sXG4gICAgY2lyY2xlOiB7XG4gICAgICBzaXplOiBkZWZhdWx0U3ltYm9sU2l6ZSxcbiAgICAgIHN0cm9rZVdpZHRoOiBkZWZhdWx0U3Ryb2tlV2lkdGhcbiAgICB9LFxuICAgIHNxdWFyZToge1xuICAgICAgc2l6ZTogZGVmYXVsdFN5bWJvbFNpemUsXG4gICAgICBzdHJva2VXaWR0aDogZGVmYXVsdFN0cm9rZVdpZHRoLFxuICAgICAgc2hhcGU6IFwic3F1YXJlXCJcbiAgICB9LFxuICAgIC8vIGRlZmF1bHRzIGZvciBzdHlsZWQgZ3JvdXAgbWFya3MgaW4gVmVnYS1MaXRlXG4gICAgY2VsbDoge1xuICAgICAgZmlsbDogXCJ0cmFuc3BhcmVudFwiLFxuICAgICAgc3Ryb2tlOiBsaWdodEdyYXlcbiAgICB9XG4gIH0sXG5cbiAgLy8gZGVmYXVsdHMgZm9yIHRpdGxlXG4gIHRpdGxlOiB7XG4gICAgb3JpZW50OiBcInRvcFwiLFxuICAgIGFuY2hvcjogXCJtaWRkbGVcIixcbiAgICBvZmZzZXQ6IDQsXG4gICAgc3VidGl0bGVQYWRkaW5nOiAzXG4gIH0sXG5cbiAgLy8gZGVmYXVsdHMgZm9yIGF4ZXNcbiAgYXhpczoge1xuICAgIG1pbkV4dGVudDogMCxcbiAgICBtYXhFeHRlbnQ6IDIwMCxcbiAgICBiYW5kUG9zaXRpb246IDAuNSxcbiAgICBkb21haW46IHRydWUsXG4gICAgZG9tYWluV2lkdGg6IDEsXG4gICAgZG9tYWluQ29sb3I6IGdyYXksXG4gICAgZ3JpZDogZmFsc2UsXG4gICAgZ3JpZFdpZHRoOiAxLFxuICAgIGdyaWRDb2xvcjogbGlnaHRHcmF5LFxuICAgIGxhYmVsczogdHJ1ZSxcbiAgICBsYWJlbEFuZ2xlOiAwLFxuICAgIGxhYmVsTGltaXQ6IDE4MCxcbiAgICBsYWJlbE9mZnNldDogMCxcbiAgICBsYWJlbFBhZGRpbmc6IDIsXG4gICAgdGlja3M6IHRydWUsXG4gICAgdGlja0NvbG9yOiBncmF5LFxuICAgIHRpY2tPZmZzZXQ6IDAsXG4gICAgdGlja1JvdW5kOiB0cnVlLFxuICAgIHRpY2tTaXplOiA1LFxuICAgIHRpY2tXaWR0aDogMSxcbiAgICB0aXRsZVBhZGRpbmc6IDRcbiAgfSxcblxuICAvLyBjb3JyZWN0aW9uIGZvciBjZW50ZXJpbmcgYmlhc1xuICBheGlzQmFuZDoge1xuICAgIHRpY2tPZmZzZXQ6IC0wLjVcbiAgfSxcblxuICAvLyBkZWZhdWx0cyBmb3IgY2FydG9ncmFwaGljIHByb2plY3Rpb25cbiAgcHJvamVjdGlvbjoge1xuICAgIHR5cGU6IFwibWVyY2F0b3JcIlxuICB9LFxuXG4gIC8vIGRlZmF1bHRzIGZvciBsZWdlbmRzXG4gIGxlZ2VuZDoge1xuICAgIG9yaWVudDogXCJyaWdodFwiLFxuICAgIHBhZGRpbmc6IDAsXG4gICAgZ3JpZEFsaWduOiBcImVhY2hcIixcbiAgICBjb2x1bW5QYWRkaW5nOiAxMCxcbiAgICByb3dQYWRkaW5nOiAyLFxuICAgIHN5bWJvbERpcmVjdGlvbjogXCJ2ZXJ0aWNhbFwiLFxuICAgIGdyYWRpZW50RGlyZWN0aW9uOiBcInZlcnRpY2FsXCIsXG4gICAgZ3JhZGllbnRMZW5ndGg6IDIwMCxcbiAgICBncmFkaWVudFRoaWNrbmVzczogMTYsXG4gICAgZ3JhZGllbnRTdHJva2VDb2xvcjogbGlnaHRHcmF5LFxuICAgIGdyYWRpZW50U3Ryb2tlV2lkdGg6IDAsXG4gICAgZ3JhZGllbnRMYWJlbE9mZnNldDogMixcbiAgICBsYWJlbEFsaWduOiBcImxlZnRcIixcbiAgICBsYWJlbEJhc2VsaW5lOiBcIm1pZGRsZVwiLFxuICAgIGxhYmVsTGltaXQ6IDE2MCxcbiAgICBsYWJlbE9mZnNldDogNCxcbiAgICBsYWJlbE92ZXJsYXA6IHRydWUsXG4gICAgc3ltYm9sTGltaXQ6IDMwLFxuICAgIHN5bWJvbFR5cGU6IFwiY2lyY2xlXCIsXG4gICAgc3ltYm9sU2l6ZTogMTAwLFxuICAgIHN5bWJvbE9mZnNldDogMCxcbiAgICBzeW1ib2xTdHJva2VXaWR0aDogMS41LFxuICAgIHN5bWJvbEJhc2VGaWxsQ29sb3I6IFwidHJhbnNwYXJlbnRcIixcbiAgICBzeW1ib2xCYXNlU3Ryb2tlQ29sb3I6IGdyYXksXG4gICAgdGl0bGVMaW1pdDogMTgwLFxuICAgIHRpdGxlT3JpZW50OiBcInRvcFwiLFxuICAgIHRpdGxlUGFkZGluZzogNSxcbiAgICBsYXlvdXQ6IHtcbiAgICAgIG9mZnNldDogMTgsXG4gICAgICBkaXJlY3Rpb246IFwiaG9yaXpvbnRhbFwiLFxuICAgICAgbGVmdDogICB7IGRpcmVjdGlvbjogXCJ2ZXJ0aWNhbFwiIH0sXG4gICAgICByaWdodDogIHsgZGlyZWN0aW9uOiBcInZlcnRpY2FsXCIgfVxuICAgIH1cbiAgfSxcblxuICAvLyBkZWZhdWx0cyBmb3Igc2NhbGUgcmFuZ2VzXG4gIHJhbmdlOiB7XG4gICAgY2F0ZWdvcnk6IHtcbiAgICAgIHNjaGVtZTogXCJ0YWJsZWF1MTBcIlxuICAgIH0sXG4gICAgb3JkaW5hbDoge1xuICAgICAgc2NoZW1lOiBcImJsdWVzXCJcbiAgICB9LFxuICAgIGhlYXRtYXA6IHtcbiAgICAgIHNjaGVtZTogXCJ5ZWxsb3dncmVlbmJsdWVcIlxuICAgIH0sXG4gICAgcmFtcDoge1xuICAgICAgc2NoZW1lOiBcImJsdWVzXCJcbiAgICB9LFxuICAgIGRpdmVyZ2luZzoge1xuICAgICAgc2NoZW1lOiBcImJsdWVvcmFuZ2VcIixcbiAgICAgIGV4dGVudDogWzEsIDBdXG4gICAgfSxcbiAgICBzeW1ib2w6IFtcbiAgICAgIFwiY2lyY2xlXCIsXG4gICAgICBcInNxdWFyZVwiLFxuICAgICAgXCJ0cmlhbmdsZS11cFwiLFxuICAgICAgXCJjcm9zc1wiLFxuICAgICAgXCJkaWFtb25kXCIsXG4gICAgICBcInRyaWFuZ2xlLXJpZ2h0XCIsXG4gICAgICBcInRyaWFuZ2xlLWRvd25cIixcbiAgICAgIFwidHJpYW5nbGUtbGVmdFwiXG4gICAgXVxuICB9XG59O1xuXG4iLCJleHBvcnQgZnVuY3Rpb24gZW5jb2RpZnkob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLnJlZHVjZSgoZW5jb2RlLCBrZXkpID0+IHtcbiAgICBlbmNvZGVba2V5XSA9IHsgdmFsdWU6IG9ialtrZXldIH07XG4gICAgcmV0dXJuIGVuY29kZTtcbiAgfSwge30pO1xufVxuIiwiaW1wb3J0IHsgdmVnYUNvbmZpZyB9IGZyb20gXCIuL3ZlZ2FDb25maWdcIjtcbmltcG9ydCB7IGVuY29kaWZ5IH0gZnJvbSBcIi4vdXRpbFwiO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfU1RZTEUgPSBPYmplY3Qua2V5cyh2ZWdhQ29uZmlnLnN0eWxlKS5yZWR1Y2UoXG4gIChzdHlsZXMsIGtleSkgPT4ge1xuICAgIHN0eWxlc1trZXldID0gZW5jb2RpZnkodmVnYUNvbmZpZy5zdHlsZVtrZXldKTtcbiAgICByZXR1cm4gc3R5bGVzO1xuICB9LFxuICB7fVxuKTtcbiIsImltcG9ydCB7IHZlZ2FDb25maWcgYXMgdmdDb25maWcgfSBmcm9tIFwiLi4vdmVnYUNvbmZpZ1wiO1xuXG5jb25zdCBFTVBUWV9FTkNPREUgPSB7XG4gIGVudGVyOiB7IG9wYWNpdHk6IHsgdmFsdWU6IDAgfSB9LFxuICBleGl0OiB7IG9wYWNpdHk6IHsgdmFsdWU6IDAgfSB9LFxuICB1cGRhdGU6IHsgfVxufTtcblxuXG5mdW5jdGlvbiBheGlzQ29tcFBvcyhzcGVjKSB7XG4gIGlmICghc3BlYykge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICBjb25zdCBzY05hbWUgPSBzcGVjLnNjYWxlO1xuICBpZiAoc3BlYy5vcmllbnQgPT09IFwibGVmdFwiIHx8IHNwZWMub3JpZW50ID09PSBcInJpZ2h0XCIpIHtcbiAgICByZXR1cm4geyB5OiB7IHNjYWxlOiBzY05hbWUsIGZpZWxkOiBcInZhbHVlXCIsIGJhbmQ6IDAuNSB9IH07XG4gIH1cbiAgcmV0dXJuIHsgeDogeyBzY2FsZTogc2NOYW1lLCBmaWVsZDogXCJ2YWx1ZVwiLCBiYW5kOiAwLjUgfSB9O1xufVxuZnVuY3Rpb24gbGVnZW5kQmFuZFBvcyhzcGVjKSB7XG4gIGxldCBnckxlbmd0aCA9IHNwZWMgPyBzcGVjLmdyYWRpZW50TGVuZ3RoIDogdW5kZWZpbmVkO1xuICBsZXQgZ3JUaGlja25lc3MgPSBzcGVjID8gc3BlYy5ncmFkaWVudFRoaWNrbmVzcyA6IHVuZGVmaW5lZDtcbiAgZ3JMZW5ndGggPSBnckxlbmd0aCB8fCB2Z0NvbmZpZy5sZWdlbmQuZ3JhZGllbnRMZW5ndGg7XG4gIGdyVGhpY2tuZXNzID0gZ3JUaGlja25lc3MgfHwgdmdDb25maWcubGVnZW5kLmdyYWRpZW50VGhpY2tuZXNzO1xuXG4gIGlmIChzcGVjICYmIHNwZWMuZGlyZWN0aW9uID09PSBcImhvcml6b250YWxcIikge1xuICAgIHJldHVybiB7XG4gICAgICB4OiB7IHNpZ25hbDogXCIoMS1kYXR1bS5wZXJjKVwiLCBtdWx0OiBnckxlbmd0aCB9LFxuICAgICAgeDI6IHsgc2lnbmFsOiBcIigxLWRhdHVtLnBlcmMyKVwiLCBtdWx0OiBnckxlbmd0aCB9LFxuICAgICAgeTogeyB2YWx1ZTogMCB9LFxuICAgICAgaGVpZ2h0OiB7IHZhbHVlOiBnclRoaWNrbmVzcyB9XG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHk6IHsgc2lnbmFsOiBcIigxLWRhdHVtLnBlcmMpXCIsIG11bHQ6IGdyTGVuZ3RoIH0sXG4gICAgeTI6IHsgc2lnbmFsOiBcIigxLWRhdHVtLnBlcmMyKVwiLCBtdWx0OiBnckxlbmd0aCB9LFxuICAgIHg6IHsgdmFsdWU6IDAgfSxcbiAgICB3aWR0aDogeyB2YWx1ZTogZ3JUaGlja25lc3MgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBsZWdlbmRMYWJsZVBvcyhzcGVjKSB7XG4gIGxldCBnckxlbmd0aCA9IHNwZWMgPyBzcGVjLmdyYWRpZW50TGVuZ3RoIDogdW5kZWZpbmVkO1xuICBnckxlbmd0aCA9IGlzTmFOKGdyTGVuZ3RoKSA/IHZnQ29uZmlnLmxlZ2VuZC5ncmFkaWVudExlbmd0aCA6IGdyTGVuZ3RoO1xuICBsZXQgZ3JUaGlja25lc3MgPSBzcGVjID8gc3BlYy5ncmFkaWVudFRoaWNrbmVzcyA6IHVuZGVmaW5lZDtcbiAgZ3JUaGlja25lc3MgPSBpc05hTihnclRoaWNrbmVzcykgPyB2Z0NvbmZpZy5sZWdlbmQuZ3JhZGllbnRUaGlja25lc3MgOiBnclRoaWNrbmVzcztcbiAgbGV0IGdyTGFiZWxPZmZzZXQgPSBzcGVjID8gc3BlYy5ncmFkaWVudExhYmVsT2Zmc2V0IDogdW5kZWZpbmVkO1xuICBnckxhYmVsT2Zmc2V0ID0gaXNOYU4oZ3JMYWJlbE9mZnNldCkgPyB2Z0NvbmZpZy5sZWdlbmQuZ3JhZGllbnRMYWJlbE9mZnNldCA6IGdyTGFiZWxPZmZzZXQ7XG5cbiAgaWYgKHNwZWMudHlwZSA9PT0gXCJzeW1ib2xcIikge1xuICAgIHJldHVybiB7XG4gICAgICB4OiB7IHZhbHVlOiAwIH0sXG4gICAgICB5OiB7IHZhbHVlOiAwIH0sXG4gICAgICBkeDogeyB2YWx1ZTogMTYgfSxcbiAgICAgIGR5OiB7IHZhbHVlOiA2IH1cbiAgICB9O1xuICB9XG4gIGlmIChzcGVjLmRpcmVjdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHsgdmFsdWU6IDAsIH0sXG4gICAgICB5OiB7IHNpZ25hbDogYCgxLWRhdHVtLnBlcmMpICogY2xhbXAoaGVpZ2h0LCA2NCwgJHtnckxlbmd0aH0pYCB9LFxuICAgICAgZHg6IHsgdmFsdWU6IGdyVGhpY2tuZXNzICsgZ3JMYWJlbE9mZnNldCB9XG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHg6IHsgc2lnbmFsOiBgKGRhdHVtLnBlcmMpICogY2xhbXAod2lkdGgsIDY0LCAke2dyTGVuZ3RofSlgIH0sXG4gICAgeTogeyB2YWx1ZTogMCwgfSxcbiAgICBkeTogeyB2YWx1ZTogZ3JUaGlja25lc3MgKyBnckxhYmVsT2Zmc2V0IH1cbiAgfTtcbn1cblxuXG5mdW5jdGlvbiB0aXRsZVBvcyhvcmllbnQpIHtcbiAgaWYgKG9yaWVudCA9PT0gXCJ0b3BcIikge1xuICAgIHJldHVybiB7eDogeyBzaWduYWw6IFwid2lkdGhcIiwgbXVsdDogMC41fSwgeToge3ZhbHVlOiAtMjJ9fTtcbiAgfSBpZiAob3JpZW50ID09PSBcImJvdHRvbVwiKSB7XG4gICAgcmV0dXJuIHt4OiB7IHNpZ25hbDogXCJ3aWR0aFwiLCBtdWx0OiAwLjV9LCB5OiB7dmFsdWU6IDIyfX07XG4gIH0gaWYgKG9yaWVudCA9PT0gXCJyaWdodFwiKSB7XG4gICAgcmV0dXJuIHt5OiB7IHNpZ25hbDogXCJoZWlnaHRcIiwgbXVsdDogMC41fSwgeDoge3ZhbHVlOiAyMn19O1xuICB9XG4gIHJldHVybiB7eTogeyBzaWduYWw6IFwiaGVpZ2h0XCIsIG11bHQ6IDAuNX0sIHg6IHt2YWx1ZTogLTIyfX07XG5cbn1cbmZ1bmN0aW9uIHRpdGxlQW5nbGUob3JpZW50KSB7XG4gIGlmIChvcmllbnQgPT09IFwibGVmdFwiKSB7XG4gICAgcmV0dXJuIDI3MDtcbiAgfVxuICBpZiAob3JpZW50ID09PSBcInJpZ2h0XCIpIHtcbiAgICByZXR1cm4gOTA7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5mdW5jdGlvbiBiYXNlbGluZShvcmllbnQpIHtcbiAgaWYgKG9yaWVudCA9PT0gXCJ0b3BcIikge1xuICAgIHJldHVybiBcImJvdHRvbVwiO1xuICB9XG4gIGlmIChvcmllbnQgPT09IFwiYm90dG9tXCIpIHtcbiAgICByZXR1cm4gXCJ0b3BcIjtcbiAgfVxuICByZXR1cm4gXCJtaWRkbGVcIjtcbn1cbmZ1bmN0aW9uIHRpY2tMZW5ndGgoYXR0ciwgb3JpZW50KSB7XG4gIGlmIChhdHRyID09PSBcIngyXCIpIHtcbiAgICBpZiAob3JpZW50ID09PSBcInJpZ2h0XCIpIHtcbiAgICAgIHJldHVybiB2Z0NvbmZpZy5heGlzLnRpY2tTaXplO1xuICAgIH1cbiAgICBpZiAob3JpZW50ID09PSBcImxlZnRcIikge1xuICAgICAgcmV0dXJuIC12Z0NvbmZpZy5heGlzLnRpY2tTaXplO1xuICAgIH1cbiAgfSBlbHNlIGlmIChhdHRyID09PSBcInkyXCIpIHtcbiAgICBpZiAob3JpZW50ID09PSBcImJvdHRvbVwiKSB7XG4gICAgICByZXR1cm4gdmdDb25maWcuYXhpcy50aWNrU2l6ZTtcbiAgICB9XG4gICAgaWYgKG9yaWVudCA9PT0gXCJ0b3BcIikge1xuICAgICAgcmV0dXJuIC12Z0NvbmZpZy5heGlzLnRpY2tTaXplO1xuICAgIH1cbiAgfVxuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gYXhpc0xhYmVsQWxpZ24oc3BlYykge1xuICBpZiAoc3BlYyAmJiBzcGVjLmxhYmVsQWxpZ24pIHtcbiAgICByZXR1cm4gc3BlYy5sYWJlbEFsaWduO1xuICB9XG5cbiAgaWYgKHNwZWMgJiYgc3BlYy5vcmllbnQgPT09IFwicmlnaHRcIikge1xuICAgIHJldHVybiBcImxlZnRcIjtcbiAgfVxuICBpZiAoc3BlYyAmJiBzcGVjLm9yaWVudCA9PT0gXCJsZWZ0XCIpIHtcbiAgICByZXR1cm4gXCJyaWdodFwiO1xuICB9XG4gIHJldHVybiBcImNlbnRlclwiO1xufVxuXG5mdW5jdGlvbiBsZWdlbmRMYWJlbEFsaWduKHNwZWMpIHtcbiAgaWYgKHNwZWMgJiYgc3BlYy5sYWJlbEFsaWduKSB7XG4gICAgcmV0dXJuIHNwZWMubGFiZWxBbGlnbjtcbiAgfVxuXG4gIGlmIChzcGVjICYmIHNwZWMub3JpZW50ID09PSBcInJpZ2h0XCIpIHtcbiAgICByZXR1cm4gXCJsZWZ0XCI7XG4gIH1cbiAgaWYgKHNwZWMgJiYgc3BlYy5vcmllbnQgPT09IFwibGVmdFwiKSB7XG4gICAgcmV0dXJuIFwicmlnaHRcIjtcbiAgfVxuICByZXR1cm4gXCJjZW50ZXJcIjtcbn1cblxuZnVuY3Rpb24gbGFibGVBbmdsZShvcmllbnQsIHNjYWxlVHlwZSkge1xuICBpZiAob3JpZW50ID09PSBcInRvcFwiIHx8IG9yaWVudCA9PT0gXCJib3R0b21cIikge1xuICAgIGlmIChbXCJiYW5kXCIsIFwicG9pbnRcIl0uaW5kZXhPZihzY2FsZVR5cGUpID49IDApIHtcbiAgICAgIHJldHVybiAyNzA7XG4gICAgfVxuICB9XG4gIHJldHVybiAwO1xufVxuZnVuY3Rpb24gYXhpc1RleHREcG9zKGF0dHIsIHNwZWMpIHtcbiAgY29uc3Qgb3JpZW50ID0gc3BlYyA/IHNwZWMub3JpZW50IDogdW5kZWZpbmVkO1xuXG4gIGlmIChzcGVjLnRpY2tzID09PSBmYWxzZSkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIGlmIChhdHRyID09PSBcImR4XCIpIHtcbiAgICBpZiAob3JpZW50ID09PSBcInJpZ2h0XCIpIHtcbiAgICAgIHJldHVybiA3O1xuICAgIH1cbiAgICBpZiAob3JpZW50ID09PSBcImxlZnRcIikge1xuICAgICAgcmV0dXJuIC03O1xuICAgIH1cbiAgfSBlbHNlIGlmIChhdHRyID09PSBcImR5XCIpIHtcbiAgICBpZiAob3JpZW50ID09PSBcImJvdHRvbVwiKSB7XG4gICAgICByZXR1cm4gNztcbiAgICB9XG4gICAgaWYgKG9yaWVudCA9PT0gXCJ0b3BcIikge1xuICAgICAgcmV0dXJuIC03O1xuICAgIH1cbiAgfVxuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gZ3JpZExlbmd0aChvcmllbnQsIGdyaWRTY2FsZSl7XG4gIGlmIChvcmllbnQgPT09IFwiYm90dG9tXCIgfHwgb3JpZW50ID09PSBcInRvcFwiKSB7XG4gICAgaWYgKCFncmlkU2NhbGUpe1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeTI6IHtzaWduYWw6IFwiaGVpZ2h0XCIsIG11bHQ6IC0xfSxcbiAgICAgICAgeToge3ZhbHVlOiAwfSxcbiAgICAgICAgeDI6IHt2YWx1ZTogMH1cbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAvLyB5Mjoge3NpZ25hbDogXCJoZWlnaHRcIn0sXG4gICAgICAvLyB5OiB7c2lnbmFsOiBcImhlaWdodFwiLCBtdWx0OiAtMX0sXG4gICAgICB5Mjoge3NpZ25hbDogXCJoZWlnaHRcIiwgbXVsdDogLTF9LFxuICAgICAgeToge3ZhbHVlOiAwfSxcbiAgICAgIHgyOiB7dmFsdWU6IDB9XG4gICAgfTtcblxuICB9XG5cbiAgaWYgKG9yaWVudCA9PT0gXCJyaWdodFwiIHx8IG9yaWVudCA9PT0gXCJsZWZ0XCIpIHtcbiAgICBpZiAoIWdyaWRTY2FsZSl7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4Mjoge3NpZ25hbDogXCJ3aWR0aFwifSxcbiAgICAgICAgeDoge3ZhbHVlOiAwfSxcbiAgICAgICAgeTI6IHt2YWx1ZTogMH1cbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB4Mjoge3NpZ25hbDogXCJ3aWR0aFwifSxcbiAgICAgIHg6IHt2YWx1ZTogMH0sXG4gICAgICB5Mjoge3ZhbHVlOiAwfVxuICAgIH07XG5cbiAgfVxuXG59XG5cbmZ1bmN0aW9uIGRvbWFpbkxlbmd0aChvcmllbnQpIHtcbiAgaWYgKG9yaWVudCA9PT0gXCJib3R0b21cIiB8fCBvcmllbnQgPT09IFwidG9wXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgeTI6IHsgdmFsdWU6IDAgfSxcbiAgICAgIHgyOiB7IHNpZ25hbDogXCJ3aWR0aFwiIH0sXG4gICAgICB5OiB7IHZhbHVlOiAwIH0sXG4gICAgICB4OiB7IHZhbHVlOiAwIH1cbiAgICB9O1xuICB9XG4gIGlmIChvcmllbnQgPT09IFwicmlnaHRcIiB8fCBvcmllbnQgPT09IFwibGVmdFwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHkyOiB7IHNpZ25hbDogXCJoZWlnaHRcIiwgbXVsdDogMSB9LFxuICAgICAgeDI6IHsgdmFsdWU6IDAgfSxcbiAgICAgIHk6IHsgdmFsdWU6IDAgfSxcbiAgICAgIHg6IHsgdmFsdWU6IDAgfVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB5MjogeyB2YWx1ZTogMCB9LFxuICAgIHgyOiB7IHZhbHVlOiAwIH1cbiAgfTtcbn1cblxuZXhwb3J0IHtcblxuICBsZWdlbmRCYW5kUG9zLFxuICBsZWdlbmRMYWJsZVBvcyxcbiAgbGVnZW5kTGFiZWxBbGlnbixcblxuICB0aXRsZVBvcyxcbiAgdGl0bGVBbmdsZSxcbiAgYmFzZWxpbmUsXG5cbiAgYXhpc0NvbXBQb3MsXG4gIGxhYmxlQW5nbGUsXG4gIHRpY2tMZW5ndGgsXG4gIGF4aXNMYWJlbEFsaWduLFxuICBheGlzVGV4dERwb3MsXG4gIGdyaWRMZW5ndGgsXG4gIGRvbWFpbkxlbmd0aCxcblxuICBFTVBUWV9FTkNPREVcbn07IiwiaW1wb3J0IHsgdmVnYUNvbmZpZyBhcyB2Z0NvbmZpZyB9IGZyb20gXCIuLi92ZWdhQ29uZmlnXCI7XG5pbXBvcnQgKiBhcyB2ZyBmcm9tIFwiLi92ZWdhRGVmYXVsdFwiO1xuaW1wb3J0IHsgY29weSB9IGZyb20gXCIuLi8uLi91dGlsL3V0aWxcIjtcbmNvbnN0IExFR0VORF9TWU1CT0xfQ0hBTk5FTCA9IFtcbiAgXCJmaWxsXCIsXG4gIFwib3BhY2l0eVwiLFxuICBcInNoYXBlXCIsXG4gIFwic2l6ZVwiLFxuICBcInN0cm9rZVwiLFxuICBcInN0cm9rZURhc2hcIixcbiAgXCJzdHJva2VXaWR0aFwiXG5dO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9FTkNPREVfTEVHRU5EID0ge1xuXG4gIHRpdGxlOiAoKSA9PiB7XG4gICAgY29uc3QgZGVmYXVsdFRpdGxlRW5jb2RlID0ge1xuICAgICAgZm9udFNpemU6IHsgdmFsdWU6IHZnQ29uZmlnLnN0eWxlW1wiZ3VpZGUtdGl0bGVcIl0uZm9udFNpemUgfSxcbiAgICAgIGZvbnRXZWlnaHQ6IHsgdmFsdWU6IFwiYm9sZFwiIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHVwZGF0ZTogZGVmYXVsdFRpdGxlRW5jb2RlLFxuICAgICAgZW50ZXI6IHsuLi5kZWZhdWx0VGl0bGVFbmNvZGUsIG9wYWNpdHk6IHt2YWx1ZTogMH19LFxuICAgICAgZXhpdDogey4uLmRlZmF1bHRUaXRsZUVuY29kZSwgb3BhY2l0eToge3ZhbHVlOiAwfX0sXG4gICAgfTtcbiAgfSxcbiAgbGFiZWxzOiBzcGVjID0+IHtcbiAgICBpZiAoIXNwZWMpIHtcbiAgICAgIHJldHVybiBjb3B5KHZnLkVNUFRZX0VOQ09ERSk7XG4gICAgfVxuXG4gICAgbGV0IGRlZmF1bHRFbmNvZGUgPSB7XG4gICAgICAuLi52Zy5sZWdlbmRMYWJsZVBvcyhzcGVjKSxcbiAgICAgIHRleHQ6IHsgZmllbGQ6IFwibGFiZWxcIiB9LFxuICAgICAgZm9udFNpemU6IHsgdmFsdWU6IHZnQ29uZmlnLnN0eWxlW1wiZ3VpZGUtbGFiZWxcIl0uZm9udFNpemUgfSxcbiAgICAgIGFsaWduOiB7IHZhbHVlOiB2Zy5sZWdlbmRMYWJlbEFsaWduKHNwZWMpIH0sXG4gICAgICBiYXNlbGluZToge1xuICAgICAgICB2YWx1ZTogc3BlYy5iYXNlbGluZSB8fCB2Zy5iYXNlbGluZShzcGVjLm9yaWVudClcbiAgICAgIH0sXG4gICAgICBhbmdsZToge1xuICAgICAgICB2YWx1ZTogc3BlYy5sYWJlbEFuZ2xlIHx8IHZnLmxhYmxlQW5nbGUoc3BlYy5vcmllbnQsIHNwZWMuc2NhbGVUeXBlKVxuICAgICAgfVxuICAgIH07XG5cblxuICAgIHJldHVybiB7XG4gICAgICBlbnRlcjogey4uLmRlZmF1bHRFbmNvZGUsIG9wYWNpdHk6IHsgdmFsdWU6IDAgfSB9LFxuICAgICAgZXhpdDogey4uLmRlZmF1bHRFbmNvZGUsIG9wYWNpdHk6IHsgdmFsdWU6IDAgfSB9LFxuICAgICAgdXBkYXRlOiBkZWZhdWx0RW5jb2RlXG4gICAgfTtcbiAgfSxcbiAgc3ltYm9sczogc3BlYyA9PiB7XG4gICAgY29uc3QgZGVmYXVsdEVuY29kZSA9IHtcbiAgICAgIHk6IHsgdmFsdWU6IDYgfSxcbiAgICAgIHg6IHsgdmFsdWU6IDYgfSxcbiAgICAgIHNoYXBlOiB7IHZhbHVlOiB2Z0NvbmZpZy5sZWdlbmQuc3ltYm9sVHlwZSB9LFxuICAgICAgc2l6ZTogeyB2YWx1ZTogdmdDb25maWcubGVnZW5kLnN5bWJvbFNpemUgfSxcbiAgICAgIHN0cm9rZVdpZHRoOiB7IHZhbHVlOiB2Z0NvbmZpZy5sZWdlbmQuc3ltYm9sU3Ryb2tlV2lkdGggfVxuICAgIH07XG5cbiAgICBpZiAoc3BlYykge1xuICAgICAgaWYgKCFzcGVjLmZpbGwpIHtcbiAgICAgICAgZGVmYXVsdEVuY29kZS5zdHJva2UgPSB7XG4gICAgICAgICAgdmFsdWU6IHZnQ29uZmlnLmxlZ2VuZC5zeW1ib2xCYXNlU3Ryb2tlQ29sb3JcbiAgICAgICAgfTtcbiAgICAgICAgZGVmYXVsdEVuY29kZS5maWxsID0ge1xuICAgICAgICAgIHZhbHVlOiB2Z0NvbmZpZy5sZWdlbmQuc3ltYm9sQmFzZUZpbGxDb2xvclxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBMRUdFTkRfU1lNQk9MX0NIQU5ORUwuZm9yRWFjaChjaGFubmVsID0+IHtcbiAgICAgICAgaWYgKGNoYW5uZWwgPT09IFwic2hhcGVcIikge1xuICAgICAgICAgIGRlZmF1bHRFbmNvZGVbY2hhbm5lbF0gPSB7IHZhbHVlOiBzcGVjLnN5bWJvbFR5cGUgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3BlY1tjaGFubmVsXSkge1xuICAgICAgICAgIGRlZmF1bHRFbmNvZGVbY2hhbm5lbF0gPSB7IHNjYWxlOiBzcGVjW2NoYW5uZWxdLCBmaWVsZDogXCJ2YWx1ZVwiIH07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB1cGRhdGU6IGRlZmF1bHRFbmNvZGUsXG4gICAgICBlbnRlcjogT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdEVuY29kZSwgeyBvcGFjaXR5OiB7IHZhbHVlOiAwIH0gfSksXG4gICAgICBleGl0OiBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0RW5jb2RlLCB7IG9wYWNpdHk6IHsgdmFsdWU6IDAgfSB9KVxuICAgIH07XG4gIH0sXG4gIGdyYWRpZW50OiBzcGVjID0+IHtcbiAgICBpZiAoIXNwZWMpIHtcbiAgICAgIHJldHVybiBjb3B5KHZnLkVNUFRZX0VOQ09ERSk7XG4gICAgfVxuXG4gICAgbGV0IGdyTGVuZ3RoID0gc3BlYy5ncmFkaWVudExlbmd0aCB8fFxuICAgICAge1xuICAgICAgICBzaWduYWw6IGBjbGFtcCgke3NwZWMuZGlyZWN0aW9uID09PSBcInZlcnRpY2FsXCIgPyBcImhlaWdodFwiIDogXCJ3aWR0aFwifSwgNjQsICR7dmdDb25maWcubGVnZW5kLmdyYWRpZW50TGVuZ3RofSlgXG4gICAgICB9LFxuICAgICAgZ3JUaGlja25lc3MgPSBzcGVjLmdyYWRpZW50VGhpY2tuZXNzIHx8IHZnQ29uZmlnLmxlZ2VuZC5ncmFkaWVudFRoaWNrbmVzcztcbiAgICBpZiAodHlwZW9mIGdyTGVuZ3RoID09PSBcIm51bWJlclwiKSB7XG4gICAgICBnckxlbmd0aD0ge1xuICAgICAgICBzaWduYWw6IGBjbGFtcCgke3NwZWMuZGlyZWN0aW9uID09PSBcInZlcnRpY2FsXCIgPyBcImhlaWdodFwiIDogXCJ3aWR0aFwifSwgNjQsICR7Z3JMZW5ndGh9KWBcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGRlZmF1bHRFbmNvZGUgPSB7XG4gICAgICB4OiB7IHZhbHVlOiAwIH0sXG4gICAgICB5OiB7IHZhbHVlOiAwIH0sXG4gICAgICB3aWR0aDpcbiAgICAgICAgc3BlYy5kaXJlY3Rpb24gPT09IFwidmVydGljYWxcIlxuICAgICAgICAgID8geyB2YWx1ZTogZ3JUaGlja25lc3MgfVxuICAgICAgICAgIDogZ3JMZW5ndGgsXG4gICAgICBoZWlnaHQ6XG4gICAgICAgIHNwZWMuZGlyZWN0aW9uID09PSBcInZlcnRpY2FsXCJcbiAgICAgICAgICA/IGdyTGVuZ3RoXG4gICAgICAgICAgOiB7IHZhbHVlOiBnclRoaWNrbmVzcyB9XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICB1cGRhdGU6IGRlZmF1bHRFbmNvZGUsXG4gICAgICBlbnRlcjogT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdEVuY29kZSwgeyBvcGFjaXR5OiB7IHZhbHVlOiAwIH0gfSksXG4gICAgICBleGl0OiBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0RW5jb2RlLCB7IG9wYWNpdHk6IHsgdmFsdWU6IDAgfSB9KVxuICAgIH07XG4gIH0sXG4gIGVudHJpZXM6ICgpID0+IHtcbiAgICByZXR1cm4gY29weSh2Zy5FTVBUWV9FTkNPREUpO1xuICB9LFxuICBsZWdlbmQ6ICgpID0+IHtcbiAgICByZXR1cm4gY29weSh2Zy5FTVBUWV9FTkNPREUpO1xuICB9LFxuICBwYWlyczogc3BlYyA9PiB7XG4gICAgbGV0IGRlZmF1bHRFbmNvZGUgPSB7IHk6IHsgc2lnbmFsOiBcImRhdHVtLmluZGV4ICogMTNcIiB9IH07XG4gICAgaWYgKHNwZWMgJiYgc3BlYy5kaXJlY3Rpb24gPT09IFwiaG9yaXpvbnRhbFwiKSB7XG4gICAgICBkZWZhdWx0RW5jb2RlID0geyB4OiB7IHNpZ25hbDogXCJkYXR1bS5pbmRleCAqIDUwXCIgfSB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB1cGRhdGU6IGRlZmF1bHRFbmNvZGUsXG4gICAgICBlbnRlcjogT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdEVuY29kZSwgeyBvcGFjaXR5OiB7IHZhbHVlOiAwIH0gfSksXG4gICAgICBleGl0OiBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0RW5jb2RlLCB7IG9wYWNpdHk6IHsgdmFsdWU6IDAgfSB9KVxuICAgIH07XG4gIH0sXG4gIGJhbmRzOiBzcGVjID0+IHtcbiAgICBsZXQgZGVmYXVsdEVuY29kZSA9IHtcbiAgICAgIC4uLnZnLmxlZ2VuZEJhbmRQb3Moc3BlYyksXG4gICAgICBmaWxsOiB7XG4gICAgICAgIHZhbHVlOiB2Z0NvbmZpZy5sZWdlbmQuc3ltYm9sQmFzZUZpbGxDb2xvclxuICAgICAgfVxuICAgIH07XG4gICAgaWYgKHNwZWMgJiYgKHNwZWMuZmlsbCB8fCBzcGVjLnN0cm9rZSkpIHtcbiAgICAgIGRlZmF1bHRFbmNvZGUuZmlsbCA9IHsgc2NhbGU6IHNwZWMuZmlsbCB8fCBzcGVjLnN0cm9rZSwgZmllbGQ6IFwidmFsdWVcIiB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB1cGRhdGU6IGRlZmF1bHRFbmNvZGUsXG4gICAgICBlbnRlcjoge1xuICAgICAgICAuLi5kZWZhdWx0RW5jb2RlLFxuICAgICAgICBvcGFjaXR5OiB7IHZhbHVlOiAwIH1cbiAgICAgIH0sXG4gICAgICBleGl0OiB7XG4gICAgICAgIC4uLmRlZmF1bHRFbmNvZGUsXG4gICAgICAgIG9wYWNpdHk6IHsgdmFsdWU6IDAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cbn07IiwiaW1wb3J0IHsgZW5jb2RpZnkgfSBmcm9tIFwiLi4vdXRpbFwiO1xuaW1wb3J0IHsgdmVnYUNvbmZpZyBhcyB2Z0NvbmZpZyB9IGZyb20gXCIuLi92ZWdhQ29uZmlnXCI7XG5leHBvcnQgY29uc3QgREVGQVVMVF9FTkNPREVfTUFSSyA9IHtcbiAgZW50ZXI6IHsgb3BhY2l0eTogeyB2YWx1ZTogMCB9IH0sXG4gIGV4aXQ6IHsgb3BhY2l0eTogeyB2YWx1ZTogMCB9IH0sXG4gIGxpbmU6IHtcbiAgICB1cGRhdGU6IHtcbiAgICAgIC4uLmVuY29kaWZ5KHZnQ29uZmlnLmxpbmUpLFxuICAgICAgZmlsbDogeyB2YWx1ZTogXCJub25lXCIgfVxuICAgIH1cbiAgfSxcbiAgYXJlYToge3VwZGF0ZTogZW5jb2RpZnkodmdDb25maWcuYXJlYSl9LFxuICB0cmFpbDoge3VwZGF0ZTogZW5jb2RpZnkodmdDb25maWcudHJhaWwpfSxcbiAgc3ltYm9sOiB7IHVwZGF0ZTogZW5jb2RpZnkodmdDb25maWcuc3ltYm9sKSAgfSxcbiAgcmVjdDogeyAgICB1cGRhdGU6IGVuY29kaWZ5KHZnQ29uZmlnLnJlY3QpIH0sXG4gIHJ1bGU6IHsgICAgdXBkYXRlOiBlbmNvZGlmeSh2Z0NvbmZpZy5ydWxlKSAgfSxcbiAgdGV4dDogeyAgICB1cGRhdGU6IGVuY29kaWZ5KHZnQ29uZmlnLnRleHQpICB9XG59OyIsImltcG9ydCB7IHZlZ2FDb25maWcgYXMgdmdDb25maWcgfSBmcm9tIFwiLi4vdmVnYUNvbmZpZ1wiO1xuaW1wb3J0ICogYXMgdmcgZnJvbSBcIi4vdmVnYURlZmF1bHRcIjtcbmltcG9ydCB7IGlzTnVtYmVyLCBjb3B5IH0gZnJvbSBcIi4uLy4uL3V0aWwvdXRpbFwiO1xuXG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VOQ09ERV9BWElTID0ge1xuICBheGlzOiAoKSA9PiB7XG4gICAgcmV0dXJuIGNvcHkodmcuRU1QVFlfRU5DT0RFKTtcbiAgfSxcbiAgbGFiZWxzOiBzcGVjID0+IHtcbiAgICBpZiAoIXNwZWMpIHtcbiAgICAgIHJldHVybiBjb3B5KHZnLkVNUFRZX0VOQ09ERSk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZW50ID0gc3BlYyA/IHNwZWMub3JpZW50IDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHNjYWxlVHlwZSA9IHNwZWMgPyBzcGVjLnNjYWxlVHlwZSA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGRlZmF1bHRFbmNvZGUgPSB7XG4gICAgICAuLi52Zy5heGlzQ29tcFBvcyhzcGVjKSxcbiAgICAgIHRleHQ6IHsgZmllbGQ6IFwibGFiZWxcIiB9LFxuICAgICAgZm9udFNpemU6IHtcbiAgICAgICAgdmFsdWU6IHNwZWMgJiYgc3BlYy5sYWJlbEZvbnRTaXplID8gc3BlYy5sYWJlbEZvbnRTaXplIDogdmdDb25maWcuc3R5bGVbXCJndWlkZS1sYWJlbFwiXS5mb250U2l6ZVxuICAgICAgfSxcbiAgICAgIGR4OiB7IHZhbHVlOiB2Zy5heGlzVGV4dERwb3MoXCJkeFwiLCBzcGVjKSB9LFxuICAgICAgZHk6IHsgdmFsdWU6IHZnLmF4aXNUZXh0RHBvcyhcImR5XCIsIHNwZWMpIH0sXG4gICAgICBhbGlnbjogeyB2YWx1ZTogdmcuYXhpc0xhYmVsQWxpZ24oc3BlYykgfSxcbiAgICAgIGJhc2VsaW5lOiB7XG4gICAgICAgIHZhbHVlOiBzcGVjICYmIHNwZWMuYmFzZWxpbmUgPyBzcGVjLmJhc2VsaW5lIDogdmcuYmFzZWxpbmUob3JpZW50KVxuICAgICAgfSxcbiAgICAgIGFuZ2xlOiB7XG4gICAgICAgIHZhbHVlOlxuICAgICAgICAgIHNwZWMgJiYgaXNOdW1iZXIoc3BlYy5sYWJlbEFuZ2xlKVxuICAgICAgICAgICAgPyBzcGVjLmxhYmVsQW5nbGVcbiAgICAgICAgICAgIDogdmcubGFibGVBbmdsZShvcmllbnQsIHNjYWxlVHlwZSlcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGVudGVyOiB7IC4uLmRlZmF1bHRFbmNvZGUsIG9wYWNpdHk6IHsgdmFsdWU6IDAgfSB9LFxuICAgICAgZXhpdDogeyAuLi5kZWZhdWx0RW5jb2RlLCBvcGFjaXR5OiB7IHZhbHVlOiAwIH0gfSxcbiAgICAgIHVwZGF0ZTogZGVmYXVsdEVuY29kZVxuICAgIH07XG4gIH0sXG4gIHRpY2tzOiBzcGVjID0+IHtcbiAgICBpZiAoIXNwZWMpIHtcbiAgICAgIHJldHVybiBjb3B5KHZnLkVNUFRZX0VOQ09ERSk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZW50ID0gc3BlYyA/IHNwZWMub3JpZW50IDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGRlZmF1bHRFbmNvZGUgPSBPYmplY3QuYXNzaWduKHt9LCB2Zy5heGlzQ29tcFBvcyhzcGVjKSwge1xuICAgICAgeDI6IHsgdmFsdWU6IHZnLnRpY2tMZW5ndGgoXCJ4MlwiLCBvcmllbnQpIH0sXG4gICAgICB5MjogeyB2YWx1ZTogdmcudGlja0xlbmd0aChcInkyXCIsIG9yaWVudCkgfSxcbiAgICAgIHN0cm9rZVdpZHRoOiB7IHZhbHVlOiB2Z0NvbmZpZy5heGlzLnRpY2tXaWR0aCB9LFxuICAgICAgc3Ryb2tlOiB7IHZhbHVlOiB2Z0NvbmZpZy5heGlzLnRpY2tDb2xvciB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudGVyOiB7IC4uLmRlZmF1bHRFbmNvZGUsIG9wYWNpdHk6IHsgdmFsdWU6IDAgfSB9LFxuICAgICAgZXhpdDogeyAuLi5kZWZhdWx0RW5jb2RlLCBvcGFjaXR5OiB7IHZhbHVlOiAwIH0gfSxcbiAgICAgIHVwZGF0ZTogZGVmYXVsdEVuY29kZVxuICAgIH07XG4gIH0sXG4gIGdyaWQ6IHNwZWMgPT4ge1xuXG4gICAgY29uc3Qgb3JpZW50ID0gc3BlYyA/IHNwZWMub3JpZW50IDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGdyaWRTY2FsZSA9IHNwZWMgPyBzcGVjLmdyaWRTY2FsZSA6IHVuZGVmaW5lZDtcbiAgICBsZXQgZGVmYXVsdEVuY29kZSA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIHZnLmF4aXNDb21wUG9zKHNwZWMpLFxuICAgICAgdmcuZ3JpZExlbmd0aChvcmllbnQsIGdyaWRTY2FsZSksXG4gICAgICB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiB7IHZhbHVlOiB2Z0NvbmZpZy5heGlzLmdyaWRXaWR0aCB9LFxuICAgICAgICBzdHJva2U6IHsgdmFsdWU6IHZnQ29uZmlnLmF4aXMuZ3JpZENvbG9yIH1cbiAgICAgIH1cbiAgICApO1xuICAgIGlmIChzcGVjICYmIHNwZWMuZ3JpZERhc2gpIHtcbiAgICAgIGRlZmF1bHRFbmNvZGUuc3Ryb2tlRGFzaGFycmF5ID0ge1widmFsdWVcIjogc3BlYy5ncmlkRGFzaC5qb2luKFwiLFwiKX07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGVudGVyOiB7IC4uLmRlZmF1bHRFbmNvZGUsIG9wYWNpdHk6IHsgdmFsdWU6IDAgfSB9LFxuICAgICAgZXhpdDogeyAuLi5kZWZhdWx0RW5jb2RlLCBvcGFjaXR5OiB7IHZhbHVlOiAwIH0gfSxcbiAgICAgIHVwZGF0ZTogZGVmYXVsdEVuY29kZVxuICAgIH07XG4gIH0sXG4gIHRpdGxlOiBzcGVjID0+IHtcblxuXG4gICAgY29uc3Qgb3JpZW50ID0gc3BlYyA/IHNwZWMub3JpZW50IDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGRlZmF1bHRFbmNvZGUgPSBPYmplY3QuYXNzaWduKFxuICAgICAge1xuICAgICAgICBiYXNlbGluZTogeyB2YWx1ZTogdmcuYmFzZWxpbmUob3JpZW50KSB9LFxuICAgICAgICBhbGlnbjogeyB2YWx1ZTogXCJjZW50ZXJcIiB9LFxuICAgICAgICBhbmdsZTogeyB2YWx1ZTogdmcudGl0bGVBbmdsZShvcmllbnQpIH0sXG4gICAgICAgIGZvbnRTaXplOiB7IHZhbHVlOiB2Z0NvbmZpZy5zdHlsZVtcImd1aWRlLXRpdGxlXCJdLmZvbnRTaXplIH0sXG4gICAgICAgIGZvbnRXZWlnaHQ6IHsgdmFsdWU6IFwiYm9sZFwiIH1cbiAgICAgIH0sXG4gICAgICB2Zy50aXRsZVBvcyhvcmllbnQpXG4gICAgKTtcbiAgICByZXR1cm4ge1xuICAgICAgZW50ZXI6IHsgLi4uZGVmYXVsdEVuY29kZSwgb3BhY2l0eTogeyB2YWx1ZTogMCB9IH0sXG4gICAgICBleGl0OiB7IC4uLmRlZmF1bHRFbmNvZGUsIG9wYWNpdHk6IHsgdmFsdWU6IDAgfSB9LFxuICAgICAgdXBkYXRlOiBkZWZhdWx0RW5jb2RlXG4gICAgfTtcbiAgfSxcbiAgZG9tYWluOiBzcGVjID0+IHtcblxuICAgIGNvbnN0IGRlZmF1bHRFbmNvZGUgPSB7XG4gICAgICAuLi4oc3BlYyA/IHZnLmRvbWFpbkxlbmd0aChzcGVjLm9yaWVudCkgOiB7fSksXG4gICAgICBzdHJva2VXaWR0aDogeyB2YWx1ZTogdmdDb25maWcuYXhpcy5kb21haW5XaWR0aCB9LFxuICAgICAgc3Ryb2tlOiB7IHZhbHVlOiB2Z0NvbmZpZy5heGlzLmRvbWFpbkNvbG9yIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGVudGVyOiB7IC4uLmRlZmF1bHRFbmNvZGUsIG9wYWNpdHk6IHsgdmFsdWU6IDAgfSB9LFxuICAgICAgZXhpdDogeyAuLi5kZWZhdWx0RW5jb2RlLCBvcGFjaXR5OiB7IHZhbHVlOiAwIH0gfSxcbiAgICAgIHVwZGF0ZTogZGVmYXVsdEVuY29kZVxuICAgIH07XG4gIH1cbn07XG4iLCJpbXBvcnQgeyBERUZBVUxUX0VOQ09ERV9MRUdFTkQgfSBmcm9tIFwiLi9sZWdlbmRcIjtcbmltcG9ydCB7IERFRkFVTFRfRU5DT0RFX01BUksgfSBmcm9tIFwiLi9tYXJrXCI7XG5pbXBvcnQgeyBERUZBVUxUX0VOQ09ERV9BWElTIH0gZnJvbSBcIi4vYXhpc1wiO1xuXG4vLyBERUZBVUxUIGVudGVyIG1lYW5zIGluaXRpYWxzIG9mIHRoZSBlbnRlclxuZXhwb3J0IGNvbnN0IERFRkFVTFRfRU5DT0RFID0ge1xuICBtYXJrOiBERUZBVUxUX0VOQ09ERV9NQVJLLFxuICBheGlzOiBERUZBVUxUX0VOQ09ERV9BWElTLFxuICBsZWdlbmQ6IERFRkFVTFRfRU5DT0RFX0xFR0VORFxufTtcbiIsIi8qIGVzbGludC1kaXNhYmxlIHByZWZlci1kZXN0cnVjdHVyaW5nICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVzZS1iZWZvcmUtZGVmaW5lICovXG4vKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbmltcG9ydCAqIGFzIHZlZ2EgZnJvbSBcInZlZ2FcIjtcbmltcG9ydCAqIGFzIGQzIGZyb20gXCJkM1wiO1xuaW1wb3J0IHsgREVGQVVMVF9FQVNFIH0gZnJvbSBcIi4uL2RlZmF1bHRcIjtcblxuZnVuY3Rpb24gZ2V0RWFzZUZuKGVhc2VGbk5hbWUpIHtcbiAgY29uc3QgbmFtZSA9IGVhc2VGbk5hbWUgfHwgREVGQVVMVF9FQVNFLm1hcms7XG4gIHJldHVybiBkM1tgZWFzZSR7bmFtZS5zbGljZSgwLCAxKS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zbGljZSgxKX1gXTtcbn1cblxuXG5mdW5jdGlvbiBmaW5kQWZ0ZXJTaWJsaW5nKHNjZW5lLCBuYW1lKSB7XG4gIGxldCByZXN1bHQ7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2NlbmUuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBzID0gc2NlbmUuaXRlbXNbaV07XG4gICAgaWYgKHMubmFtZSA9PT0gbmFtZSkge1xuICAgICAgcmV0dXJuIHNjZW5lLml0ZW1zW2kgKyAxXTtcbiAgICB9XG4gICAgaWYgKHMuaXRlbXMpIHtcbiAgICAgIHJlc3VsdCA9IGZpbmRBZnRlclNpYmxpbmcocywgbmFtZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGdldEpvaW5JbmZvKGQsIGksIHN0ZXAsIHByb3ApIHtcbiAgcmV0dXJuIGQuX19nZW1pbmlfX1tzdGVwLnN0ZXBJZF1cbiAgICA/IGQuX19nZW1pbmlfX1tzdGVwLnN0ZXBJZF1bcHJvcF1cbiAgICA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZmluZENvbXAoc2NlbmUsIG5hbWUsIHJvbGUpIHtcbiAgbGV0IHJlc3VsdCA9IFtdO1xuICBzY2VuZS5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgIGlmIChpdGVtLml0ZW1zKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KGZpbmRDb21wKGl0ZW0sIG5hbWUsIHJvbGUpKTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbS5yb2xlID09PSByb2xlICYmIGl0ZW0ubmFtZSA9PT0gbmFtZSkge1xuICAgICAgcmVzdWx0LnB1c2goaXRlbSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDsgLy8gcmV0dXJuIHRoZSBmaXJzdCBpdGVtLlxufVxuZnVuY3Rpb24gc3ZnUmVuZGVyKHZlZ2FTY2VuZSkge1xuICBjb25zdCBzdmcgPSBuZXcgdmVnYS5TVkdSZW5kZXJlcigpXG4gICAgLmluaXRpYWxpemUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSwgMSwgMSlcbiAgICAucmVuZGVyKHZlZ2FTY2VuZSlcbiAgICAuc3ZnKCk7XG4gIGNvbnN0IHAgPSBuZXcgRE9NUGFyc2VyKCk7XG4gIGNvbnN0IGRvbSA9IHAucGFyc2VGcm9tU3RyaW5nKHN2ZywgXCJpbWFnZS9zdmcreG1sXCIpO1xuICByZXR1cm4gZG9tLmRvY3VtZW50RWxlbWVudDtcbn1cblxuZnVuY3Rpb24gZ3JhZGllbnRSZW5kZXIoZDNSb290U2VsZWN0aW9uLCBkKSB7XG4gIGNvbnN0IHMgPSB2ZWdhLnNjZW5lRnJvbUpTT04odmVnYS5zY2VuZVRvSlNPTihkLm1hcmspKTtcbiAgcy5pdGVtc1swXS5maWxsID0gZC5maWxsO1xuICBjb25zdCBkb20gPSBzdmdSZW5kZXIocyk7XG4gIGNvbnN0IGdyYWRpZW50RG9tID0gZG9tLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiZGVmc1wiKVswXS5maXJzdEVsZW1lbnRDaGlsZDtcbiAgbGV0IGQzRGVmc1NlbGVjdGlvbiA9IGQzUm9vdFNlbGVjdGlvbi5zZWxlY3QoXCJkZWZzXCIpO1xuICBpZiAoZDNEZWZzU2VsZWN0aW9uLmVtcHR5KCkpIHtcbiAgICBkM0RlZnNTZWxlY3Rpb24gPSBkM1Jvb3RTZWxlY3Rpb24uYXBwZW5kKFwiZGVmc1wiKTtcbiAgfVxuICBkM0RlZnNTZWxlY3Rpb24ubm9kZSgpLmFwcGVuZENoaWxkKGdyYWRpZW50RG9tKTtcbiAgcmV0dXJuIGAke3dpbmRvdy5sb2NhdGlvbi5vcmlnaW4gKyB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWV9IyR7XG4gICAgZ3JhZGllbnREb20uaWRcbiAgfWA7XG59XG5cblxuZnVuY3Rpb24gcHJvcE1hcChwcm9wKSB7XG4gIGxldCBwcm9wTmFtZSA9IHByb3A7XG4gIGxldCB0d2Vha3M7XG4gIGlmICh0eXBlb2YgcHJvcCA9PT0gXCJvYmplY3RcIikge1xuICAgIHByb3BOYW1lID0gcHJvcC5uYW1lO1xuICAgIHR3ZWFrcyA9IHByb3AudHdlYWtzO1xuICB9XG4gIGxldCByZXN1bHQgPSBbXTtcbiAgc3dpdGNoIChwcm9wTmFtZSkge1xuICBjYXNlIFwidGV4dFwiOlxuICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoW1xuICAgICAgeyB0eXBlOiBcInRleHRcIiwgdmFsOiBcInRleHRcIiB9LFxuICAgICAgeyB0eXBlOiBcImF0dHJcIiwgdmFsOiBcInRyYW5zZm9ybVwiIH0sXG4gICAgICB7IHR5cGU6IFwic3R5bGVcIiwgdmFsOiBcIm9wYWNpdHlcIiB9LFxuICAgICAgeyB0eXBlOiBcInN0eWxlXCIsIHZhbDogXCJmb250XCIgfSxcbiAgICAgIHsgdHlwZTogXCJzdHlsZVwiLCB2YWw6IFwiZm9udFNpemVcIiB9LFxuICAgICAgeyB0eXBlOiBcInN0eWxlXCIsIHZhbDogXCJmb250V2VpZ2h0XCIgfSxcbiAgICAgIHsgdHlwZTogXCJzdHlsZVwiLCB2YWw6IFwiZmlsbFwiIH1cbiAgICBdKTtcbiAgICBicmVhaztcbiAgY2FzZSBcInRpdGxlXCI6XG4gICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChbXG4gICAgICB7IHR5cGU6IFwidGV4dFwiLCB2YWw6IFwidGV4dFwiIH0sXG4gICAgICB7IHR5cGU6IFwiYXR0clwiLCB2YWw6IFwidHJhbnNmb3JtXCIgfSxcbiAgICAgIHsgdHlwZTogXCJzdHlsZVwiLCB2YWw6IFwib3BhY2l0eVwiIH0sXG4gICAgICB7IHR5cGU6IFwic3R5bGVcIiwgdmFsOiBcImZvbnRcIiB9LFxuICAgICAgeyB0eXBlOiBcInN0eWxlXCIsIHZhbDogXCJmb250U2l6ZVwiIH0sXG4gICAgICB7IHR5cGU6IFwic3R5bGVcIiwgdmFsOiBcImZvbnRXZWlnaHRcIiB9LFxuICAgICAgeyB0eXBlOiBcInN0eWxlXCIsIHZhbDogXCJmaWxsXCIgfVxuICAgIF0pO1xuICAgIGJyZWFrO1xuICBjYXNlIFwidGlja1wiOlxuICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoW1xuICAgICAgeyB0eXBlOiBcImF0dHJcIiwgdmFsOiBcInRyYW5zZm9ybVwiIH0sXG4gICAgICB7IHR5cGU6IFwiYXR0clwiLCB2YWw6IFwieDJcIiB9LFxuICAgICAgeyB0eXBlOiBcImF0dHJcIiwgdmFsOiBcInkyXCIgfSxcbiAgICAgIHsgdHlwZTogXCJzdHlsZVwiLCB2YWw6IFwic3Ryb2tlV2lkdGhcIiB9LFxuICAgICAgeyB0eXBlOiBcInN0eWxlXCIsIHZhbDogXCJzdHJva2VcIiB9LFxuICAgICAgeyB0eXBlOiBcInN0eWxlXCIsIHZhbDogXCJvcGFjaXR5XCIgfVxuICAgIF0pO1xuICAgIGJyZWFrO1xuICBjYXNlIFwiZ3JpZFwiOlxuICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoW1xuICAgICAgeyB0eXBlOiBcImF0dHJcIiwgdmFsOiBcInRyYW5zZm9ybVwiIH0sXG4gICAgICB7IHR5cGU6IFwiYXR0clwiLCB2YWw6IFwieDJcIiB9LFxuICAgICAgeyB0eXBlOiBcImF0dHJcIiwgdmFsOiBcInkyXCIgfSxcbiAgICAgIHsgdHlwZTogXCJzdHlsZVwiLCB2YWw6IFwic3Ryb2tlV2lkdGhcIiB9LFxuICAgICAgeyB0eXBlOiBcInN0eWxlXCIsIHZhbDogXCJzdHJva2VcIiB9LFxuICAgICAgeyB0eXBlOiBcInN0eWxlXCIsIHZhbDogXCJzdHJva2VEYXNoYXJyYXlcIiB9LFxuICAgICAgeyB0eXBlOiBcInN0eWxlXCIsIHZhbDogXCJvcGFjaXR5XCIgfVxuICAgIF0pO1xuICAgIGJyZWFrO1xuICBjYXNlIFwiZG9tYWluXCI6XG4gICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChbXG4gICAgICB7IHR5cGU6IFwiYXR0clwiLCB2YWw6IFwidHJhbnNmb3JtXCIgfSxcbiAgICAgIHsgdHlwZTogXCJhdHRyXCIsIHZhbDogXCJ4MlwiIH0sXG4gICAgICB7IHR5cGU6IFwiYXR0clwiLCB2YWw6IFwieTJcIiB9LFxuICAgICAgeyB0eXBlOiBcInN0eWxlXCIsIHZhbDogXCJzdHJva2VXaWR0aFwiIH0sXG4gICAgICB7IHR5cGU6IFwic3R5bGVcIiwgdmFsOiBcInN0cm9rZVwiIH0sXG4gICAgICB7IHR5cGU6IFwic3R5bGVcIiwgdmFsOiBcIm9wYWNpdHlcIiB9XG4gICAgXSk7XG4gICAgYnJlYWs7XG4gIGNhc2UgXCJyZWN0XCI6XG4gICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChbXG4gICAgICB7IHR5cGU6IFwiYXR0clR3ZWVuXCIsIHZhbDogXCJkXCIgfSxcbiAgICAgIHsgdHlwZTogXCJhdHRyXCIsIHZhbDogXCJ0cmFuc2Zvcm1cIiB9LFxuICAgICAgeyB0eXBlOiBcInN0eWxlXCIsIHZhbDogXCJvcGFjaXR5XCIgfSxcbiAgICAgIHsgdHlwZTogXCJzdHlsZVwiLCB2YWw6IFwiZmlsbFwiIH0sXG4gICAgICB7IHR5cGU6IFwic3R5bGVcIiwgdmFsOiBcInN0cm9rZVdpZHRoXCIgfSxcbiAgICAgIHsgdHlwZTogXCJzdHlsZVwiLCB2YWw6IFwic3Ryb2tlXCIgfVxuICAgIF0pO1xuICAgIGJyZWFrO1xuICBjYXNlIFwiZ3JhZGllbnRcIjpcbiAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KFtcbiAgICAgIHsgdHlwZTogXCJhdHRyXCIsIHZhbDogXCJkXCIgfSxcbiAgICAgIHsgdHlwZTogXCJzdHlsZVwiLCB2YWw6IFwib3BhY2l0eVwiIH0sXG4gICAgICB7IHR5cGU6IFwic3R5bGVcIiwgdmFsOiBcImZpbGxcIiwgZGVmczogZ3JhZGllbnRSZW5kZXIgfSxcbiAgICAgIHsgdHlwZTogXCJzdHlsZVwiLCB2YWw6IFwic3Ryb2tlV2lkdGhcIiB9LFxuICAgICAgeyB0eXBlOiBcInN0eWxlXCIsIHZhbDogXCJzdHJva2VcIiB9XG4gICAgXSk7XG4gICAgYnJlYWs7XG4gIGNhc2UgXCJydWxlXCI6XG4gICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChbXG4gICAgICB7IHR5cGU6IFwiYXR0clwiLCB2YWw6IFwidHJhbnNmb3JtXCIgfSxcbiAgICAgIHsgdHlwZTogXCJhdHRyXCIsIHZhbDogXCJ4MlwiIH0sXG4gICAgICB7IHR5cGU6IFwiYXR0clwiLCB2YWw6IFwieTJcIiB9LFxuICAgICAgeyB0eXBlOiBcInN0eWxlXCIsIHZhbDogXCJzdHJva2VXaWR0aFwiIH0sXG4gICAgICB7IHR5cGU6IFwic3R5bGVcIiwgdmFsOiBcInN0cm9rZVwiIH0sXG4gICAgICB7IHR5cGU6IFwic3R5bGVcIiwgdmFsOiBcIm9wYWNpdHlcIiB9XG4gICAgXSk7XG4gICAgYnJlYWs7XG4gIGNhc2UgXCJzeW1ib2xcIjpcbiAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KFtcbiAgICAgIHsgdHlwZTogXCJhdHRyVHdlZW5cIiwgdmFsOiBcImRcIiB9LFxuICAgICAgeyB0eXBlOiBcImF0dHJcIiwgdmFsOiBcInNpemVcIiB9LFxuICAgICAgeyB0eXBlOiBcImF0dHJcIiwgdmFsOiBcInRyYW5zZm9ybVwiIH0sXG4gICAgICB7IHR5cGU6IFwic3R5bGVcIiwgdmFsOiBcInN0cm9rZVdpZHRoXCIgfSxcbiAgICAgIHsgdHlwZTogXCJzdHlsZVwiLCB2YWw6IFwic3Ryb2tlXCIgfSxcbiAgICAgIHsgdHlwZTogXCJzdHlsZVwiLCB2YWw6IFwib3BhY2l0eVwiIH0sXG4gICAgICB7IHR5cGU6IFwic3R5bGVcIiwgdmFsOiBcImZpbGxcIiB9XG4gICAgXSk7XG4gICAgYnJlYWs7XG4gIGNhc2UgXCJncm91cFwiOlxuICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoW1xuICAgICAgeyB0eXBlOiBcImF0dHJcIiwgdmFsOiBcInRyYW5zZm9ybVwiIH0sXG4gICAgICB7IHR5cGU6IFwic3R5bGVcIiwgdmFsOiBcIm9wYWNpdHlcIiB9XG4gICAgXSk7XG4gICAgYnJlYWs7XG4gIGNhc2UgXCJiYWNrZ3JvdW5kXCI6XG4gICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChbeyB0eXBlOiBcImF0dHJcIiwgdmFsOiBcImRcIiB9XSk7XG4gICAgYnJlYWs7XG4gIGNhc2UgXCJsaW5lXCI6XG4gICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChbXG4gICAgICB7IHR5cGU6IFwiYXR0clR3ZWVuXCIsIHZhbDogXCJkXCIgfSxcbiAgICAgIHsgdHlwZTogXCJzdHlsZVwiLCB2YWw6IFwic3Ryb2tlV2lkdGhcIiB9LFxuICAgICAgeyB0eXBlOiBcInN0eWxlXCIsIHZhbDogXCJzdHJva2VcIiB9LFxuICAgICAgeyB0eXBlOiBcInN0eWxlXCIsIHZhbDogXCJvcGFjaXR5XCIgfSxcbiAgICAgIHsgdHlwZTogXCJzdHlsZVwiLCB2YWw6IFwiZmlsbFwiIH1cbiAgICBdKTtcbiAgICBicmVhaztcbiAgY2FzZSBcInRyYWlsXCI6XG4gIGNhc2UgXCJhcmVhXCI6XG4gICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChbXG4gICAgICB7IHR5cGU6IFwiYXR0clR3ZWVuXCIsIHZhbDogXCJkXCIgfSxcbiAgICAgIHsgdHlwZTogXCJzdHlsZVwiLCB2YWw6IFwic3Ryb2tlV2lkdGhcIiB9LFxuICAgICAgeyB0eXBlOiBcInN0eWxlXCIsIHZhbDogXCJzdHJva2VcIiB9LFxuICAgICAgeyB0eXBlOiBcInN0eWxlXCIsIHZhbDogXCJvcGFjaXR5XCIgfSxcbiAgICAgIHsgdHlwZTogXCJzdHlsZVwiLCB2YWw6IFwiZmlsbFwiIH1cbiAgICBdKTtcbiAgICBicmVhaztcbiAgY2FzZSBcImxlZ2VuZC1wYWlyXCI6XG4gICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChbeyB0eXBlOiBcImF0dHJcIiwgdmFsOiBcInRyYW5zZm9ybVwiIH1dKTtcbiAgICBicmVhaztcbiAgZGVmYXVsdDpcbiAgICBicmVhaztcbiAgfVxuICBpZiAocHJvcC5leGNsdWRlcykge1xuICAgIHByb3AuZXhjbHVkZXMuZm9yRWFjaChleGNsdWRlID0+IHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5maWx0ZXIoXG4gICAgICAgIHIgPT4gIShyLnR5cGUgPT09IGV4Y2x1ZGUudHlwZSAmJiByLnZhbCA9PT0gZXhjbHVkZS52YWwpXG4gICAgICApO1xuICAgIH0pO1xuICB9XG4gIGlmIChyZXN1bHQubGVuZ3RoID4gMCkge1xuICAgIHJlc3VsdC5mb3JFYWNoKHAgPT4ge1xuICAgICAgcC5lbG1UeXBlID0gcHJvcE5hbWU7XG4gICAgICBpZiAodHdlYWtzKSB7XG4gICAgICAgIHR3ZWFrc1xuICAgICAgICAgIC5maWx0ZXIodHdrID0+IHR3ay50eXBlID09PSBwLnR5cGUgJiYgdHdrLnZhbCA9PT0gcC52YWwpXG4gICAgICAgICAgLmZvckVhY2godHdrID0+IHtcbiAgICAgICAgICAgIHAgPSBPYmplY3QuYXNzaWduKHAsIHR3ayk7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAocHJvcE5hbWUgPT09IFwiYWxpZ25cIikge1xuICAgIHJldHVybiBbeyB0eXBlOiBcImF0dHJcIiwgdmFsOiBcInRleHQtYW5jaG9yXCIsIGVsbVR5cGU6IFwibm9uZVwiIH1dO1xuICB9XG4gIHJldHVybiBbeyB0eXBlOiBcInN0eWxlXCIsIHZhbDogcHJvcE5hbWUsIGVsbVR5cGU6IFwibm9uZVwiIH1dO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlU2NhbGUoc2NhbGVzLCBzY05hbWVzLCBnZXRTY2FsZXMpIHtcbiAgY29uc3QgY29tcHV0ZWQgPSBPYmplY3QuYXNzaWduKHt9LCBzY2FsZXMpO1xuXG4gIHNjTmFtZXMuZm9yRWFjaChzY05hbWUgPT4ge1xuICAgIGNvbXB1dGVkLmluaXRpYWxbc2NOYW1lXSA9IGdldFNjYWxlcy5pbml0aWFsKHNjTmFtZSk7XG4gICAgY29tcHV0ZWQuZmluYWxbc2NOYW1lXSA9IGdldFNjYWxlcy5maW5hbChzY05hbWUpO1xuICB9KTtcbiAgcmV0dXJuIGNvbXB1dGVkO1xufVxuXG5mdW5jdGlvbiBpc0xpbmVhck1hcmt0eXBlKG10eXBlKSB7XG4gIHJldHVybiBbXCJhcmVhXCIsIFwibGluZVwiLCBcInRyYWlsXCJdLmluZGV4T2YobXR5cGUpID49IDA7XG59XG5cbmV4cG9ydCB7XG4gIHByb3BNYXAsXG4gIGdldEVhc2VGbixcbiAgZmluZEFmdGVyU2libGluZyxcbiAgZ2V0Sm9pbkluZm8sXG4gIGZpbmRDb21wLFxuICBzdmdSZW5kZXIsXG4gIGNvbXB1dGVTY2FsZSxcbiAgaXNMaW5lYXJNYXJrdHlwZVxufTtcbiIsImZ1bmN0aW9uIGNvbXB1dGVIYXNGYWNldChjb21wU3BlYykge1xuICBpZiAoXG4gICAgY29tcFNwZWMgJiZcbiAgICBjb21wU3BlYy5wYXJlbnQgJiZcbiAgICBjb21wU3BlYy5wYXJlbnQuZnJvbSAmJlxuICAgIGNvbXBTcGVjLnBhcmVudC5mcm9tLmZhY2V0ICYmXG4gICAgY29tcFNwZWMucGFyZW50LmZyb20uZmFjZXQuZGF0YSAmJlxuICAgIGNvbXBTcGVjLnBhcmVudC5mcm9tLmZhY2V0Lm5hbWUgPT09IGNvbXBTcGVjLmZyb20uZGF0YVxuICApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldEZhY2V0KGNvbXBTcGVjKSB7XG4gIHJldHVybiBjb21wdXRlSGFzRmFjZXQoY29tcFNwZWMpID8gY29tcFNwZWMucGFyZW50LmZyb20uZmFjZXQgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGlzR3JvdXBpbmdNYXJrdHlwZShtYXJrdHlwZSkge1xuICByZXR1cm4gbWFya3R5cGUgPT09IFwibGluZVwiIHx8IG1hcmt0eXBlID09PSBcImFyZWFcIiB8fCBtYXJrdHlwZSA9PT0gXCJ0cmFpbFwiO1xufVxuXG5mdW5jdGlvbiBmaW5kTWFyayhtYXJrcywgbWFya05hbWUpIHtcbiAgbGV0IHJlc3VsdDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXJrcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IG0gPSBtYXJrc1tpXTtcbiAgICBpZiAobS5uYW1lID09PSBtYXJrTmFtZSkge1xuICAgICAgcmV0dXJuIG07XG4gICAgfVxuICAgIGlmIChtLm1hcmtzKSB7XG4gICAgICByZXN1bHQgPSBmaW5kTWFyayhtLm1hcmtzLCBtYXJrTmFtZSk7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBmaW5kRGF0YShzcGVjLCBkYXRhTmFtZSkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNwZWMuZGF0YS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChzcGVjLmRhdGFbaV0ubmFtZSA9PT0gZGF0YU5hbWUpIHtcbiAgICAgIHJldHVybiBzcGVjLmRhdGFbaV07XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBmaW5kRmlsdGVyKHNwZWMsIG5hbWUpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcGVjLmRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBkID0gc3BlYy5kYXRhW2ldO1xuICAgIGlmIChkLnRyYW5zZm9ybSkge1xuICAgICAgY29uc3QgZmlsdGVyID0gZC50cmFuc2Zvcm0uZmluZChmaWx0ZXIgPT4gZmlsdGVyLm5hbWUgPT09IG5hbWUpO1xuICAgICAgaWYgKGZpbHRlcikge1xuICAgICAgICByZXR1cm4gZmlsdGVyO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQge1xuICBjb21wdXRlSGFzRmFjZXQsXG4gIGdldEZhY2V0LFxuICBpc0dyb3VwaW5nTWFya3R5cGUsXG4gIGZpbmRNYXJrLFxuICBmaW5kRGF0YSxcbiAgZmluZEZpbHRlclxufTtcbiIsImltcG9ydCB7IHBhcnNlLCBjb2RlZ2VuIGFzIHZnQ29kZWdlbiB9IGZyb20gXCJ2ZWdhLWV4cHJlc3Npb25cIjtcbmltcG9ydCAqIGFzIGQzIGZyb20gXCJkM1wiO1xuaW1wb3J0ICogYXMgdmVnYSBmcm9tIFwidmVnYVwiO1xuaW1wb3J0IHtjb3B5LCBmbGF0dGVufSBmcm9tIFwiLi91dGlsL3V0aWwuanNcIjtcbmltcG9ydCB7IGdldEVhc2VGbiB9IGZyb20gXCIuL2FjdHVhdG9yL3V0aWxcIjtcbmltcG9ydCB7IGZpbmRGaWx0ZXIgfSBmcm9tIFwiLi9jaGFuZ2VGZXRjaGVyL3N0YXRlL3V0aWxcIjtcblxuXG5jbGFzcyBFbnVtZXJhdG9yIHtcbiAgY29uc3RydWN0b3IoZW51bURlZiwgc3BlYywgcmF3SW5mbykge1xuICAgIHRoaXMudmlld3MgPSBnZXRTdG9wcyhlbnVtRGVmLCBzcGVjLCByYXdJbmZvKTtcbiAgICB0aGlzLnN0b3BOID0gdGhpcy52aWV3cy5sZW5ndGg7XG4gICAgdGhpcy5lbnVtRGVmID0gZW51bURlZjtcbiAgICB0aGlzLmN1cnJTcGVjID0gc3BlYztcbiAgICB0aGlzLmVhc2VGbiA9IGdldEVhc2VGbihlbnVtRGVmLmVhc2UpO1xuICAgIHRoaXMuZGVsYXkgPSBlbnVtRGVmLmRlbGF5IHx8IDA7XG4gICAgdGhpcy5zdGFnZ2VyaW5nID0gZW51bURlZi5zdGFnZ2VyaW5nO1xuICAgIHRoaXMucmF3SW5mbyA9IHJhd0luZm87XG4gIH1cblxuICBfZ2V0U2NhbGVzKHN0b3Bfbikge1xuICAgIHJldHVybiBzY05hbWUgPT4ge1xuICAgICAgY29uc3QgdmlldyA9IHRoaXMudmlld3Nbc3RvcF9uXTtcbiAgICAgIHJldHVybiB2aWV3Ll9ydW50aW1lLnNjYWxlc1tzY05hbWVdXG4gICAgICAgID8gdmlldy5fcnVudGltZS5zY2FsZXNbc2NOYW1lXS52YWx1ZVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9O1xuICB9XG5cbiAgZ2V0RGF0YShzdG9wX24pIHtcbiAgICBpZiAodGhpcy5leHRyYWN0RGF0YSAmJiB0aGlzLmdldElkKSB7XG4gICAgICByZXR1cm4gdGhpcy5leHRyYWN0RGF0YSh0aGlzLnZpZXdzW3N0b3Bfbl0pO1xuICAgIH1cbiAgICB0aHJvdyBFcnJvcihcIkNhbm5vdCByZXR1cm4gZGF0YSB3aXRob3V0IGpvaW5pbmcgZGF0YS5cIik7XG4gIH1cblxuICBnZXREYXR1bShpZCwgc3RvcF9uKSB7XG4gICAgaWYgKHRoaXMuZXh0cmFjdERhdGEgJiYgdGhpcy5nZXRJZCkge1xuICAgICAgY29uc3QgZm91bmQgPSB0aGlzLmV4dHJhY3REYXRhKHRoaXMudmlld3Nbc3RvcF9uXSkuZmluZChcbiAgICAgICAgKGQsIGkpID0+IHRoaXMuZ2V0SWQoZCwgaSkgPT09IGlkXG4gICAgICApO1xuICAgICAgcmV0dXJuIGZvdW5kICYmIGZvdW5kLmRhdHVtID8gZm91bmQuZGF0dW0gOiBmb3VuZDtcbiAgICB9XG4gICAgdGhyb3cgRXJyb3IoXCJDYW5ub3QgcmV0dXJuIGRhdGEgd2l0aG91dCBqb2luaW5nIGRhdGEuXCIpO1xuICB9XG5cbiAgam9pbkRhdGEoZXh0cmFjdERhdGEsIGlkZW50aWZ5RGF0YSkge1xuICAgIHRoaXMuZXh0cmFjdERhdGEgPSBleHRyYWN0RGF0YTtcbiAgICB0aGlzLmdldElkID0gaWRlbnRpZnlEYXRhO1xuICAgIGxldCBjdXJyRGF0YUtleXMgPSB0aGlzLmV4dHJhY3REYXRhKHRoaXMudmlld3NbMF0pLm1hcCh0aGlzLmdldElkKTtcblxuICAgIHRoaXMuam9pbkRhdGFJbmZvID0gdGhpcy52aWV3cy5zbGljZSgxKS5tYXAodmlldyA9PiB7XG4gICAgICBjb25zdCBqb2luID0ge1xuICAgICAgICB1cGRhdGU6IFtdLFxuICAgICAgICBlbnRlcjogW10sXG4gICAgICAgIGV4aXQ6IFtdXG4gICAgICB9O1xuICAgICAgY29uc3QgbmV3RGF0YUtleXMgPSBleHRyYWN0RGF0YSh2aWV3KS5tYXAodGhpcy5nZXRJZCk7XG4gICAgICBjdXJyRGF0YUtleXMuZm9yRWFjaChjS2V5ID0+IHtcbiAgICAgICAgY29uc3QgZm91bmRJbmRleCA9IG5ld0RhdGFLZXlzLmluZGV4T2YoY0tleSk7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ID49IDApIHtcbiAgICAgICAgICBqb2luLnVwZGF0ZS5wdXNoKGNLZXkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGpvaW4uZXhpdC5wdXNoKGNLZXkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGpvaW4uZW50ZXIgPSBuZXdEYXRhS2V5cy5maWx0ZXIobktleSA9PiBjdXJyRGF0YUtleXMuaW5kZXhPZihuS2V5KSA8IDApO1xuXG4gICAgICBjdXJyRGF0YUtleXMgPSBuZXdEYXRhS2V5cztcblxuICAgICAgcmV0dXJuIFtcInVwZGF0ZVwiLCBcImVudGVyXCIsIFwiZXhpdFwiXS5yZWR1Y2UoKGFjY01hcCwgc2V0KSA9PiB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKFxuICAgICAgICAgIGFjY01hcCxcbiAgICAgICAgICBqb2luW3NldF0ucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgICAgICAgYWNjW2tleV0gPSBzZXQ7XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgIH0sIHt9KVxuICAgICAgICApO1xuICAgICAgfSwge30pO1xuICAgIH0pO1xuICAgIHRoaXMuYWxsS2V5cyA9IGZsYXR0ZW4odGhpcy5qb2luRGF0YUluZm8ubWFwKE9iamVjdC5rZXlzKSkudW5pcXVlKCk7XG4gICAgdGhpcy5zZXQgPSAoaWQsIHN0b3BfbikgPT4gdGhpcy5qb2luRGF0YUluZm9bc3RvcF9uXVtpZF07XG4gIH1cblxuICBnZXRQcm9wVmFsKHByb3AsIGVuY29kZXMsIHN0b3BfbiwgaWQpIHtcbiAgICBjb25zdCBkID0gdGhpcy5leHRyYWN0RGF0YSh0aGlzLnZpZXdzW3N0b3Bfbl0pLmZpbmQoXG4gICAgICAoeCwgaSkgPT4gdGhpcy5nZXRJZCh4LCBpKSA9PT0gaWRcbiAgICApO1xuICAgIGNvbnN0IGRTZXQgPSB0aGlzLnNldChpZCwgc3RvcF9uKTtcbiAgICBpZiAoIWRTZXQpIHtcbiAgICAgIHJldHVybiBbXCJ4MlwiLCBcInkyXCJdLmluZGV4T2YocHJvcC52YWwpID49IDAgPyAwIDogXCJcIjtcbiAgICB9XG4gICAgY29uc3QgZ2V0U2NhbGVzID0ge1xuICAgICAgaW5pdGlhbDogdGhpcy5fZ2V0U2NhbGVzKHN0b3BfbiksXG4gICAgICBmaW5hbDogdGhpcy5fZ2V0U2NhbGVzKHN0b3BfbiArIDEpXG4gICAgfTtcbiAgICByZXR1cm4gZW5jb2Rlc1tkU2V0XS5pbml0aWFsKHByb3AsIGdldFNjYWxlcywgZCk7XG4gIH1cblxuICBpbnRlcnBvbGF0ZUFsb25nRW51bU1ha2VyKHByb3AsIGVuY29kZXMsIGVsZW0pIHtcbiAgICByZXR1cm4gaWQgPT4ge1xuICAgICAgcmV0dXJuIHQgPT4ge1xuICAgICAgICBjb25zdCBzdG9wX24gPSBNYXRoLm1pbihNYXRoLmZsb29yKHQgKiAodGhpcy5zdG9wTiAtIDEpKSwgdGhpcy5zdG9wTiAtIDIpO1xuICAgICAgICBsZXQgZF9pID0gdGhpcy5leHRyYWN0RGF0YSh0aGlzLnZpZXdzW3N0b3Bfbl0pLmZpbmQoXG4gICAgICAgICAgKHgsIGkpID0+IHRoaXMuZ2V0SWQoeCwgaSkgPT09IGlkXG4gICAgICAgICk7XG4gICAgICAgIGxldCBkX2YgPSB0aGlzLmV4dHJhY3REYXRhKHRoaXMudmlld3Nbc3RvcF9uICsgMV0pLmZpbmQoXG4gICAgICAgICAgKHgsIGkpID0+IHRoaXMuZ2V0SWQoeCwgaSkgPT09IGlkXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgZFNldCA9IHRoaXMuc2V0KGlkLCBzdG9wX24pO1xuICAgICAgICBzd2l0Y2ggKGRTZXQpIHtcbiAgICAgICAgY2FzZSBcImVudGVyXCI6XG4gICAgICAgICAgZF9pID0gZF9mO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiZXhpdFwiOlxuICAgICAgICAgIGRfZiA9IGRfaTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInVwZGF0ZVwiOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBbXCJ4MlwiLCBcInkyXCJdLmluZGV4T2YocHJvcC52YWwpID49IDAgPyAwIDogXCJcIjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBnZXRTY2FsZXMgPSB7XG4gICAgICAgICAgaW5pdGlhbDogdGhpcy5fZ2V0U2NhbGVzKHN0b3BfbiksXG4gICAgICAgICAgZmluYWw6IHRoaXMuX2dldFNjYWxlcyhzdG9wX24gKyAxKVxuICAgICAgICB9O1xuICAgICAgICBpZiAocHJvcC50eXBlID09PSBcImF0dHJUd2VlblwiKSB7XG4gICAgICAgICAgcmV0dXJuIGVuY29kZXNbZFNldF0uY3VzdG9tLmJpbmQoZWxlbSkocHJvcCwgZ2V0U2NhbGVzLCBkX2ksIGRfZikoXG4gICAgICAgICAgICB0ICogKHRoaXMuc3RvcE4gLSAxKSAtIHN0b3BfblxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsSSA9IGVuY29kZXNbZFNldF0uaW5pdGlhbC5iaW5kKGVsZW0pKHByb3AsIGdldFNjYWxlcywgZF9pKTtcbiAgICAgICAgY29uc3QgdmFsRiA9IGVuY29kZXNbZFNldF0uZmluYWwuYmluZChlbGVtKShwcm9wLCBnZXRTY2FsZXMsIGRfZik7XG5cbiAgICAgICAgcmV0dXJuIGQzLmludGVycG9sYXRlKHZhbEksIHZhbEYpKHQgKiAodGhpcy5zdG9wTiAtIDEpIC0gc3RvcF9uKTtcbiAgICAgICAgLy8gYXBwbHkgb25lIG9mIGNvcnJlc3BvbmRpbmcgaW50ZXJwb2xhdGlvblxuICAgICAgfTtcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVGaWx0ZXJpbmdWYWx1ZXMoZW51bURlZiwgcmF3SW5mbykge1xuICBjb25zdCBmaWx0ZXJpbmdWYWx1ZXMgPSBlbnVtRGVmLnZhbHVlcyB8fCBbXTtcbiAgaWYgKGZpbHRlcmluZ1ZhbHVlcy5sZW5ndGggPT09IDAgJiYgZW51bURlZi5zdGVwU2l6ZSkge1xuICAgIC8vIGZpbmQgaW5pdGlhbCB2YWx1ZVxuICAgIGNvbnN0IGlGaWx0ZXIgPSBmaW5kRmlsdGVyKHJhd0luZm8uc1Zpcy5zcGVjLCBlbnVtRGVmLmZpbHRlcik7XG4gICAgY29uc3QgaVZhbCA9IHBhcnNlKGlGaWx0ZXIuZXhwcikucmlnaHQudmFsdWU7XG5cbiAgICAvLyBmaW5kIGVuZCB2YWx1ZVxuICAgIGNvbnN0IGZGaWx0ZXIgPSBmaW5kRmlsdGVyKHJhd0luZm8uZVZpcy5zcGVjLCBlbnVtRGVmLmZpbHRlcik7XG4gICAgY29uc3QgZlZhbCA9IHBhcnNlKGZGaWx0ZXIuZXhwcikucmlnaHQudmFsdWU7XG5cbiAgICBmb3IgKGxldCB2ID0gaVZhbDsgdiA8IGZWYWw7IHYgKz0gZW51bURlZi5zdGVwU2l6ZSkge1xuICAgICAgZmlsdGVyaW5nVmFsdWVzLnB1c2godik7XG4gICAgfVxuXG4gICAgZmlsdGVyaW5nVmFsdWVzLnB1c2goZlZhbCk7XG4gIH1cbiAgcmV0dXJuIGZpbHRlcmluZ1ZhbHVlcztcbn1cblxuXG5mdW5jdGlvbiBjb21wdXRlTmV3U3BlYyh3b3JraW5nU3BlYywgZmlsdGVyLCBmVmFsKSB7XG4gIGNvbnN0IGNvZGVnZW4gPSB2Z0NvZGVnZW4oe1xuICAgIHdoaXRlbGlzdDogW1wiZGF0dW1cIiwgXCJldmVudFwiLCBcInNpZ25hbHNcIl0sXG4gICAgZ2xvYmFsdmFyOiBcImdsb2JhbFwiXG4gIH0pO1xuXG4gIGNvbnN0IHBhcnNlZEFTVE5vZGUgPSBwYXJzZShmaWx0ZXIuZXhwcik7XG5cbiAgcGFyc2VkQVNUTm9kZS5yaWdodC52YWx1ZSA9IGZWYWw7XG4gIHBhcnNlZEFTVE5vZGUucmlnaHQucmF3ID0gZlZhbC50b1N0cmluZygpO1xuICBjb25zdCBuZXdGaWx0ZXJFeHByID0gY29kZWdlbihwYXJzZWRBU1ROb2RlKS5jb2RlO1xuICBmaWx0ZXIuZXhwciA9IG5ld0ZpbHRlckV4cHI7XG5cbiAgcmV0dXJuIGNvcHkod29ya2luZ1NwZWMpO1xufVxuZnVuY3Rpb24gZ2V0U3RvcHMoZW51bURlZiwgc3BlYywgcmF3SW5mbykge1xuICBjb25zdCB3b3JraW5nU3BlYyA9IGNvcHkoc3BlYyk7XG5cbiAgY29uc3QgZW51bVZhbHMgPSBjb21wdXRlRmlsdGVyaW5nVmFsdWVzKGVudW1EZWYsIHJhd0luZm8pO1xuICBjb25zdCBmaWx0ZXIgPSBmaW5kRmlsdGVyKHdvcmtpbmdTcGVjLCBlbnVtRGVmLmZpbHRlcik7XG5cbiAgY29uc3Qgdmlld3MgPSBlbnVtVmFscy5tYXAodiA9PiB7XG4gICAgcmV0dXJuIG5ldyB2ZWdhLlZpZXcodmVnYS5wYXJzZShjb21wdXRlTmV3U3BlYyh3b3JraW5nU3BlYywgZmlsdGVyLCB2KSksIHtcbiAgICAgIHJlbmRlcmVyOiBcIm5vbmVcIlxuICAgIH0pLnJ1bigpO1xuICB9KTtcblxuICByZXR1cm4gdmlld3M7XG59XG5cblxuZXhwb3J0IHsgRW51bWVyYXRvciwgY29tcHV0ZUZpbHRlcmluZ1ZhbHVlcywgY29tcHV0ZU5ld1NwZWMgfTtcbiIsImltcG9ydCB7IGNvcHkgfSBmcm9tIFwiLi4vdXRpbC91dGlsXCI7XG5pbXBvcnQge2NvbXB1dGVGaWx0ZXJpbmdWYWx1ZXN9IGZyb20gXCIuLi9lbnVtZXJhdG9yXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBlbnVtZXJhdGVTdGVwcyhibG9jaywgcmF3SW5mbywgZW51bURlZnMpIHtcbiAgaWYgKGJsb2NrLnN5bmMpIHtcbiAgICBibG9jay5zeW5jID0gYmxvY2suc3luYy5tYXAoYmxrID0+IGVudW1lcmF0ZVN0ZXBzKGJsaywgcmF3SW5mbywgZW51bURlZnMpKTtcbiAgfSBlbHNlIGlmIChibG9jay5jb25jYXQpIHtcbiAgICBibG9jay5jb25jYXQgPSBibG9jay5jb25jYXQubWFwKGJsayA9PlxuICAgICAgZW51bWVyYXRlU3RlcHMoYmxrLCByYXdJbmZvLCBlbnVtRGVmcylcbiAgICApO1xuXG4gICAgaWYgKGJsb2NrLmVudW1lcmF0b3IpIHtcbiAgICAgIGNvbnN0IGZvdW5kRW51bURlZiA9IGVudW1EZWZzLmZpbmQoXG4gICAgICAgIGVudW1EZWYgPT4gZW51bURlZi5uYW1lID09PSBibG9jay5lbnVtZXJhdG9yXG4gICAgICApO1xuXG4gICAgICBpZiAoZm91bmRFbnVtRGVmKSB7XG4gICAgICAgIGNvbnN0IGZpbHRlcmluZ1ZhbHVlcyA9IGNvbXB1dGVGaWx0ZXJpbmdWYWx1ZXMoZm91bmRFbnVtRGVmLCByYXdJbmZvKTtcbiAgICAgICAgcmV0dXJuIGZpbHRlcmluZ1ZhbHVlcy5zbGljZSgxKS5yZWR1Y2UoXG4gICAgICAgICAgKGFjYywgZlZhbCwgaSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZW51bWVkQ29uY2F0QmxvY2sgPSBjb3B5KGJsb2NrKTtcbiAgICAgICAgICAgIGVudW1lZENvbmNhdEJsb2NrLmNvbmNhdC5mb3JFYWNoKGJsayA9PiB7XG4gICAgICAgICAgICAgIGZldGNoRW51bVZhbChibGssIGZvdW5kRW51bURlZiwgZlZhbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGVudW1lZENvbmNhdEJsb2NrLmVudW1lcmF0ZWQgPSBjb3B5KGZvdW5kRW51bURlZik7XG4gICAgICAgICAgICBlbnVtZWRDb25jYXRCbG9jay5lbnVtZXJhdGVkLnZhbCA9IGZWYWw7XG4gICAgICAgICAgICBlbnVtZWRDb25jYXRCbG9jay5lbnVtZXJhdGVkLk4gPSBmaWx0ZXJpbmdWYWx1ZXMubGVuZ3RoO1xuICAgICAgICAgICAgZW51bWVkQ29uY2F0QmxvY2suZW51bWVyYXRlZC5sYXN0ID1cbiAgICAgICAgICAgICAgaSA9PT0gZmlsdGVyaW5nVmFsdWVzLmxlbmd0aCAtIDI7XG5cbiAgICAgICAgICAgIGFjYy5jb25jYXQucHVzaChlbnVtZWRDb25jYXRCbG9jayk7XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgeyBjb25jYXQ6IFtdIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGJsb2NrO1xufVxuXG5mdW5jdGlvbiBmZXRjaEVudW1WYWwoYmxvY2ssIGVudW1EZWYsIHZhbCkge1xuICBpZiAoYmxvY2suc3luYyB8fCBibG9jay5jb25jYXQpIHtcbiAgICAoYmxvY2suc3luYyB8fCBibG9jay5jb25jYXQpLmZvckVhY2goYmxrID0+IHtcbiAgICAgIGZldGNoRW51bVZhbChibGssIGVudW1EZWYsIHZhbCk7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShibG9jay5lbnVtVmFscykpIHtcbiAgICBibG9jay5lbnVtZXJhdGVkLnB1c2goe2RlZjogZW51bURlZiwgdmFsOiB2YWx9KTtcbiAgfSBlbHNlIHtcbiAgICBibG9jay5lbnVtZXJhdGVkID0gW3tkZWY6IGVudW1EZWYsIHZhbDogdmFsfV07XG4gIH1cbn0iLCJpbXBvcnQgeyBpc051bWJlciwgY29weSwgcGVybXV0YXRlfSBmcm9tIFwiLi4vdXRpbC91dGlsXCI7XG5pbXBvcnQge2RlZmF1bHQgYXMgY29sbGVjdFJlc29sdmVzfSBmcm9tIFwiLi9yZXNvbHZlQ29sbGVjdG9yXCI7XG5pbXBvcnQge1NjaGVkdWxlfSBmcm9tIFwiLi4vc2NoZWR1bGVcIjtcbmltcG9ydCB7ZGVmYXVsdCBhcyBjaGVja0NvbmZsaWN0fSBmcm9tIFwiLi9jb25mbGljdENoZWNrZXJcIjtcbmltcG9ydCB7c3BlY0NoZWNrZXJ9IGZyb20gXCIuL3NwZWNDaGVja2VyXCI7XG5pbXBvcnQge2RlZmF1bHQgYXMgZW51bWVyYXRlU3RlcHN9IGZyb20gXCIuL3N0ZXBFbnVtZXJhdG9yXCI7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2Uoc3BlYywgcmF3SW5mbyl7XG4gIC8vIGNvbnN0IHNwZWNrQ2hlY2tSZXN1bHQgPSB0cnVlOyAvL3NwZWNDaGVja2VyKHNwZWMpOyBUT0RPOiB3aGVuIHNwZWNDaGVja2VyIGlzIGluY2x1ZGVkLCBpdCBibG9ja2VkIGxvYWRpbmcgdGhlIHNvdXJjZSBtYXAuXG4gIGNvbnN0IHNwZWNrQ2hlY2tSZXN1bHQgPSBzcGVjQ2hlY2tlcihzcGVjKTtcbiAgaWYgKCFzcGVja0NoZWNrUmVzdWx0KSB7XG4gICAgLy8gVG9kbzogZ2l2ZSBtb3JlIHNwZWNpZmljIHJlYXNvbnMgdGhyb3VnaCBzcGVja0NoZWNrUmVzdWx0LlxuICAgIHJldHVybiBjb25zb2xlLmVycm9yKFwiVGhlIHNwZWMgaXMgaW52YWxpZC5cIik7XG4gIH1cblxuICAvLyBFbnVtZXJhdG9yIGFyZ3VtZW50IHRoZSBjb25jYXRCbG9jayB3aXRoIGVudW1lcmF0b3JcbiAgbGV0IG5ld1NwZWMgPSBjb3B5KHNwZWMpO1xuICBuZXdTcGVjLnRpbWVsaW5lID0gZW51bWVyYXRlU3RlcHMobmV3U3BlYy50aW1lbGluZSwgcmF3SW5mbywgbmV3U3BlYy5lbnVtZXJhdG9ycyk7XG5cblxuICAvLyAxLiByZWZvcm0gdGhlIHRpbWxpbmUgc3VjaCB0aGF0IGFsbCBibG9ja3MgaGF2ZSBkdXJhdGlvbi5cbiAgbGV0IHBhcnNlZFRpbWVsaW5lQmxvY2sgPSByZWFkQmxvY2sobmV3U3BlYy50aW1lbGluZSwgbmV3U3BlYy50b3RhbER1cmF0aW9uKTtcbiAgbGV0IHBhcnNlZFN0ZXBzID0gYXNzaWduVGltaW5nKHBhcnNlZFRpbWVsaW5lQmxvY2ssIHsgc1RpbWU6IDAgfSwgdHJ1ZSk7XG5cbiAgLy8gMi4gYXR0YWNoIHN0YWdnZXJpbmcgZGVmaW5pdGlvbnNcbiAgcGFyc2VkU3RlcHMuZm9yRWFjaChzdGVwID0+IHtcbiAgICBpZiAoW1wiYXhpc1wiLCBcIm1hcmtcIiwgXCJsZWdlbmRcIl0uaW5kZXhPZihzdGVwLmNvbXBUeXBlKSA+PSAwKSB7XG4gICAgICBzdGVwLnRpbWluZyA9IGF0dGFjaFN0YWdnZXJpbmcoc3RlcC50aW1pbmcsIG5ld1NwZWMuc3RhZ2dlcmluZ3MpO1xuICAgIH1cbiAgfSk7XG4gIC8vIDMuIGVudW1lcmF0b3IgZGVmaW5pdGlvbnNcbiAgaWYgKG5ld1NwZWMuZW51bWVyYXRvcnMpIHtcbiAgICBuZXdTcGVjLmVudW1lcmF0b3JzID0gbmV3U3BlYy5lbnVtZXJhdG9ycy5tYXAoZW51bWVyYXRvciA9PiB7XG4gICAgICByZXR1cm4gYXR0YWNoU3RhZ2dlcmluZyhlbnVtZXJhdG9yLCBuZXdTcGVjLnN0YWdnZXJpbmdzKTtcbiAgICB9KTtcblxuICAgIHBhcnNlZFN0ZXBzLmZvckVhY2goKHN0ZXAsIGkpID0+IHtcbiAgICAgIGlmIChbXCJheGlzXCIsIFwibWFya1wiLCBcImxlZ2VuZFwiXS5pbmRleE9mKHN0ZXAuY29tcFR5cGUpID49IDApIHtcbiAgICAgICAgc3RlcCA9IGF0dGFjaEVudW1lcmF0b3JzKHN0ZXAsIG5ld1NwZWMuZW51bWVyYXRvcnMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cblxuICBjb25zdCBzY2hlZHVsZSA9IG5ldyBTY2hlZHVsZShwYXJzZWRTdGVwcyk7XG4gIGNvbnN0IHJlc29sdmVzID0gY29sbGVjdFJlc29sdmVzKHBhcnNlZFRpbWVsaW5lQmxvY2ssIHBhcnNlZFN0ZXBzKTtcblxuICBjb25zdCB7IGNvbmZsaWN0c1BlckFsdGVySWQgfSA9IGNoZWNrQ29uZmxpY3Qoc2NoZWR1bGUsIHJlc29sdmVzKTtcblxuXG4gIHJldHVybiB7IHNjaGVkdWxlLCByZXNvbHZlcywgY29uZmxpY3RzUGVyQWx0ZXJJZCB9O1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkQmxvY2soYmxvY2ssIHRvdGFsRHVyYXRpb24sIG11bHRpcGxpZXIgPSAxKSB7XG4gIGlmIChibG9jay5zeW5jKSB7XG4gICAgcmV0dXJuIHJlYWRTeW5jQmxvY2soYmxvY2ssIHRvdGFsRHVyYXRpb24sIG11bHRpcGxpZXIpO1xuICB9XG4gIGlmIChibG9jay5jb25jYXQpIHtcbiAgICByZXR1cm4gcmVhZENvbmNhdEJsb2NrKGJsb2NrLCB0b3RhbER1cmF0aW9uLCBtdWx0aXBsaWVyKTtcbiAgfVxuICBjb25zdCBkZWxheSA9XG4gICAgKGJsb2NrLmRlbGF5XG4gICAgICA/IGlzTnVtYmVyKGJsb2NrLnRpbWluZy5kZWxheS5yYXRpbylcbiAgICAgICAgPyBibG9jay50aW1pbmcuZGVsYXkucmF0aW8gKiB0b3RhbER1cmF0aW9uXG4gICAgICAgIDogYmxvY2sudGltaW5nLmRlbGF5XG4gICAgICA6IDApICogbXVsdGlwbGllcjtcblxuICBjb25zdCBkdXJhdGlvbiA9XG4gICAgKGlzTnVtYmVyKGJsb2NrLnRpbWluZy5kdXJhdGlvbi5yYXRpbylcbiAgICAgID8gYmxvY2sudGltaW5nLmR1cmF0aW9uLnJhdGlvICogdG90YWxEdXJhdGlvblxuICAgICAgOiBibG9jay50aW1pbmcuZHVyYXRpb24pICogbXVsdGlwbGllcjtcbiAgY29uc3QgY29tcFR5cGUgPVxuICAgIHR5cGVvZiBibG9jay5jb21wb25lbnQgPT09IFwib2JqZWN0XCJcbiAgICAgID8gT2JqZWN0LmtleXMoYmxvY2suY29tcG9uZW50KVswXVxuICAgICAgOiBibG9jay5jb21wb25lbnQ7XG4gIGNvbnN0IGNvbXBOYW1lID1cbiAgICB0eXBlb2YgYmxvY2suY29tcG9uZW50ID09PSBcIm9iamVjdFwiID8gYmxvY2suY29tcG9uZW50W2NvbXBUeXBlXSA6IHVuZGVmaW5lZDtcblxuICByZXR1cm4ge1xuICAgIGR1cmF0aW9uLFxuICAgIGRlbGF5LFxuICAgIHRpbWluZzogT2JqZWN0LmFzc2lnbih7fSwgYmxvY2sudGltaW5nLCB7IGR1cmF0aW9uLCBkZWxheSB9KSxcbiAgICBjaGFuZ2U6IGJsb2NrLmNoYW5nZSxcbiAgICBlbnVtZXJhdGVkOiBibG9jay5lbnVtZXJhdGVkLFxuICAgIGVudW1lcmF0b3I6IGJsb2NrLmVudW1lcmF0b3IsIC8vIHN0ZXAgZW51bWVyYXRvclxuICAgIGNvbXBUeXBlLFxuICAgIGNvbXBOYW1lXG4gIH07XG59XG5leHBvcnQgZnVuY3Rpb24gcmVhZENvbmNhdEJsb2NrKGNvbmNhdEJsb2NrLCB0b3RhbER1cmF0aW9uLCBtdWx0aXBsaWVyID0gMSkge1xuICBjb25zdCBjb25jYXRlbmF0ZWQgPSBjb25jYXRCbG9jay5jb25jYXQ7XG4gIGxldCBkdXJhdGlvbiA9IDA7XG4gIGxldCBhbHRlcm5hdGVDb25jYXRzID0ge307XG5cbiAgY29uc3QgbmV3TXVsdCA9IGNvbmNhdEJsb2NrLmVudW1lcmF0ZWQgPyAxIC8gY29uY2F0QmxvY2suZW51bWVyYXRlZC5OIDogMTtcblxuICBjb25zdCByZWZvcm1lZEJsb2NrcyA9IGNvbmNhdGVuYXRlZC5tYXAoYmxvY2sgPT4ge1xuICAgIGNvbnN0IG5ld0Jsb2NrID0gcmVhZEJsb2NrKGJsb2NrLCB0b3RhbER1cmF0aW9uLCBtdWx0aXBsaWVyICogbmV3TXVsdCk7XG4gICAgZHVyYXRpb24gPSBkdXJhdGlvbiArIG5ld0Jsb2NrLnRpbWluZy5kdXJhdGlvbiArIG5ld0Jsb2NrLnRpbWluZy5kZWxheTtcbiAgICByZXR1cm4gbmV3QmxvY2s7XG4gIH0pO1xuXG4gIGlmIChjb25jYXRCbG9jay5hdXRvU2NhbGVPcmRlcikge1xuICAgIC8vIHBlcm11dGF0ZSB0aGUgY29uY2F0J3Mgb3JkZXJcbiAgICBjb25jYXRCbG9jay5yZXNvbHZlID0ge1xuICAgICAgYXV0b1NjYWxlT3JkZXI6IGNvbmNhdEJsb2NrLmF1dG9TY2FsZU9yZGVyLFxuICAgICAgYWx0ZXJOYW1lOlxuICAgICAgICBjb25jYXRCbG9jay5hdXRvU2NhbGVPcmRlci5qb2luKFwiLVwiKSArXG4gICAgICAgIChjb25jYXRCbG9jay5lbnVtZXJhdGVkID8gYF8ke2NvbmNhdEJsb2NrLmVudW1lcmF0ZWQudmFsfWAgOiBcIlwiKVxuICAgIH07XG4gICAgbGV0IGFsdGVybmF0ZXMgPSBwZXJtdXRhdGVPbmx5Q29udGFpbk5hbWVzKFxuICAgICAgY29uY2F0ZW5hdGVkLFxuICAgICAgY29uY2F0QmxvY2sucmVzb2x2ZS5hdXRvU2NhbGVPcmRlclxuICAgICk7XG5cbiAgICBhbHRlcm5hdGVzLnNwbGljZSgwLCAxKTtcbiAgICBhbHRlcm5hdGVzID0gYWx0ZXJuYXRlcy5tYXAoY29uY2F0ZW5hdGVkX2kgPT4ge1xuICAgICAgcmV0dXJuIGNvbmNhdGVuYXRlZF9pLm1hcChibG9jayA9PiByZWFkQmxvY2soYmxvY2ssIHRvdGFsRHVyYXRpb24sIG11bHRpcGxpZXIgKiBuZXdNdWx0KSk7XG4gICAgfSk7XG4gICAgYWx0ZXJuYXRlQ29uY2F0cyA9IHtcbiAgICAgIGFsdGVyTmFtZTogY29uY2F0QmxvY2sucmVzb2x2ZS5hbHRlck5hbWUsXG4gICAgICBhbHRlcm5hdGVzXG4gICAgfTtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmFzc2lnbihcbiAgICB7XG4gICAgICBkZWxheTogMCxcbiAgICAgIGR1cmF0aW9uLFxuICAgICAgdGltaW5nOiB7IGRlbGF5OiAwLCBkdXJhdGlvbiB9LFxuICAgICAgY29uY2F0OiByZWZvcm1lZEJsb2NrcyxcbiAgICAgIHJlc29sdmU6IGNvbmNhdEJsb2NrLnJlc29sdmUsXG4gICAgICBlbnVtZXJhdGVkOiBjb25jYXRCbG9jay5lbnVtZXJhdGVkXG4gICAgfSxcbiAgICBhbHRlcm5hdGVDb25jYXRzXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwZXJtdXRhdGVPbmx5Q29udGFpbk5hbWVzKGJsb2NrcywgbmFtZXMpIHtcbiAgY29uc3QgZmlsdGVyZWQgPSBbXTtcbiAgY29uc3QgaW5kaWNlcyA9IFtdO1xuICBibG9ja3MuZm9yRWFjaCgoYmxrLCBpKSA9PiB7XG4gICAgaWYgKGNvbnRhaW5OYW1lcyhibGspKSB7XG4gICAgICBmaWx0ZXJlZC5wdXNoKGJsayk7XG4gICAgICBpbmRpY2VzLnB1c2goaSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcGVybXV0YXRlKGZpbHRlcmVkKS5tYXAocGVybXV0YXRlZE9uZSA9PiB7XG4gICAgcmV0dXJuIGluZGljZXMucmVkdWNlKChhY2MsIGluZGV4LCBpKSA9PiB7XG4gICAgICBhY2Muc3BsaWNlKGluZGV4LCAxLCBwZXJtdXRhdGVkT25lW2ldKTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgY29weShibG9ja3MpKTtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gY29udGFpbk5hbWVzKGJsb2NrKSB7XG4gICAgaWYgKGJsb2NrLnN5bmMgfHwgYmxvY2suY29uY2F0KSB7XG4gICAgICByZXR1cm4gKGJsb2NrLnN5bmMgfHwgYmxvY2suY29uY2F0KS5yZWR1Y2UoKGFjYywgYmxrKSA9PiB7XG4gICAgICAgIGFjYyA9IGFjYyB8fCBjb250YWluTmFtZXMoYmxrLCBuYW1lcyk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCBmYWxzZSk7XG4gICAgfVxuICAgIGNvbnN0IGNvbXBUeXBlID0gT2JqZWN0LmtleXMoYmxvY2suY29tcG9uZW50KVswXTtcbiAgICByZXR1cm4gbmFtZXMuaW5kZXhPZihibG9jay5jb21wb25lbnRbY29tcFR5cGVdKSA+PSAwO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkU3luY0Jsb2NrKHN5bmNCbG9jaywgdG90YWxEdXJhdGlvbiwgbXVsdGlwbGllciA9IDEpIHtcbiAgY29uc3QgYW5jaG9yID0gc3luY0Jsb2NrLmFuY2hvciB8fCBcInN0YXJ0XCI7XG4gIGxldCBkdXJhdGlvbiA9IDA7XG4gIGNvbnN0IG5ld0Jsb2NrcyA9IHN5bmNCbG9jay5zeW5jLm1hcChibG9jayA9PiB7XG4gICAgY29uc3QgbmV3QmxvY2sgPSByZWFkQmxvY2soYmxvY2ssIHRvdGFsRHVyYXRpb24sIG11bHRpcGxpZXIpO1xuICAgIGR1cmF0aW9uID1cbiAgICAgIGR1cmF0aW9uID4gbmV3QmxvY2sudGltaW5nLmR1cmF0aW9uICsgbmV3QmxvY2sudGltaW5nLmRlbGF5XG4gICAgICAgID8gZHVyYXRpb25cbiAgICAgICAgOiBuZXdCbG9jay50aW1pbmcuZHVyYXRpb24gKyBuZXdCbG9jay50aW1pbmcuZGVsYXk7XG4gICAgcmV0dXJuIG5ld0Jsb2NrO1xuICB9KTtcblxuICByZXR1cm4ge1xuICAgIGRlbGF5OiAwLFxuICAgIGR1cmF0aW9uLFxuICAgIHRpbWluZzogeyBkZWxheTogMCwgZHVyYXRpb24gfSxcbiAgICBhbmNob3IsXG4gICAgc3luYzogbmV3QmxvY2tzXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2hTdGFnZ2VyaW5nKGl0ZW0sIHN0YWdnZXJpbmdzKSB7XG4gIGlmICghc3RhZ2dlcmluZ3MgfHwgc3RhZ2dlcmluZ3MubGVuZ3RoIDw9IDAgfHwgIWl0ZW0pIHtcbiAgICByZXR1cm4gaXRlbTtcbiAgfVxuXG4gIGNvbnN0IGZvdW5kID0gc3RhZ2dlcmluZ3MuZmluZChzdGdEZWYgPT4gaXRlbS5zdGFnZ2VyaW5nID09PSBzdGdEZWYubmFtZSk7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKGl0ZW0sIHsgc3RhZ2dlcmluZzogZm91bmQgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2hFbnVtZXJhdG9ycyhpdGVtLCBlbnVtZXJhdG9ycykge1xuICBpZiAoIWVudW1lcmF0b3JzIHx8IGVudW1lcmF0b3JzLmxlbmd0aCA8PSAwIHx8ICFpdGVtKSB7XG4gICAgcmV0dXJuIGl0ZW07XG4gIH1cblxuICBjb25zdCBmb3VuZCA9IGVudW1lcmF0b3JzLmZpbmQoXG4gICAgZW51bWVyYXRvckRlZiA9PiBpdGVtLmVudW1lcmF0b3IgPT09IGVudW1lcmF0b3JEZWYubmFtZVxuICApO1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihpdGVtLCB7IGVudW1lcmF0b3I6IGZvdW5kIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzaWduVGltaW5nKGJsb2NrLCB0aW1lUG9pbnRlcikge1xuICBsZXQgc3RlcHMgPSBbXTtcbiAgY29uc3QgYW5jaG9yID0gaXNOdW1iZXIodGltZVBvaW50ZXIuc1RpbWUpID8gXCJzXCIgOiBcImVcIjtcbiAgbGV0IHRpbWVzdGFtcCA9IGFuY2hvciA9PT0gXCJzXCIgPyB0aW1lUG9pbnRlci5zVGltZSA6IHRpbWVQb2ludGVyLmVUaW1lO1xuICBpZiAoYmxvY2suc3luYyAmJiBibG9jay5hbmNob3IgPT09IFwic3RhcnRcIikge1xuICAgIGJsb2NrLnN5bmMuZm9yRWFjaChibGsgPT4ge1xuICAgICAgc3RlcHMgPSBzdGVwcy5jb25jYXQoXG4gICAgICAgIGFzc2lnblRpbWluZyhibGssIHtcbiAgICAgICAgICBzVGltZTogYW5jaG9yID09PSBcInNcIiA/IHRpbWVzdGFtcCA6IHRpbWVzdGFtcCAtIGJsb2NrLmR1cmF0aW9uXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKGJsb2NrLnN5bmMgJiYgYmxvY2suYW5jaG9yID09PSBcImVuZFwiKSB7XG4gICAgYmxvY2suc3luYy5mb3JFYWNoKGJsayA9PiB7XG4gICAgICBzdGVwcyA9IHN0ZXBzLmNvbmNhdChcbiAgICAgICAgYXNzaWduVGltaW5nKGJsaywge1xuICAgICAgICAgIGVUaW1lOiBhbmNob3IgPT09IFwiZVwiID8gdGltZXN0YW1wIDogdGltZXN0YW1wICsgYmxvY2suZHVyYXRpb25cbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoYmxvY2suY29uY2F0KSB7XG4gICAgaWYgKGFuY2hvciA9PT0gXCJlXCIpIHtcbiAgICAgIHRpbWVzdGFtcCAtPSBibG9jay5kdXJhdGlvbjtcbiAgICB9XG5cbiAgICBpZiAoYmxvY2suYWx0ZXJuYXRlcykge1xuICAgICAgYmxvY2suYWx0ZXJuYXRlcy5mb3JFYWNoKChhbHRlcm5hdGUsIGkpID0+IHtcbiAgICAgICAgbGV0IGFsdGVyVGltZVN0YW1wID0gdGltZXN0YW1wO1xuICAgICAgICBhbHRlcm5hdGUuZm9yRWFjaChibGsgPT4ge1xuICAgICAgICAgIGNvbnN0IGFsdGVyID0gYXNzaWduVGltaW5nKGNvcHkoYmxrKSwge1xuICAgICAgICAgICAgc1RpbWU6IGFsdGVyVGltZVN0YW1wXG4gICAgICAgICAgfSkubWFwKHN0ZXAgPT4ge1xuICAgICAgICAgICAgc3RlcC5hbHRlcklkID0gYCR7c3RlcC5hbHRlcklkIHx8IFwiXCJ9JHtibG9jay5hbHRlck5hbWV9OiR7aX1gO1xuICAgICAgICAgICAgcmV0dXJuIHN0ZXA7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBzdGVwcyA9IHN0ZXBzLmNvbmNhdChhbHRlcik7XG4gICAgICAgICAgYWx0ZXJUaW1lU3RhbXAgKz0gYmxrLmR1cmF0aW9uICsgYmxrLmRlbGF5O1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGJsb2NrLmNvbmNhdC5mb3JFYWNoKGJsayA9PiB7XG4gICAgICBjb25zdCBtYWluU3RlcHMgPSBhc3NpZ25UaW1pbmcoYmxrLCB7IHNUaW1lOiB0aW1lc3RhbXAgfSkubWFwKHN0ZXAgPT4ge1xuICAgICAgICBzdGVwLmFsdGVySWQgPSBzdGVwLmFsdGVySWQgfHwgYCR7YmxvY2suYWx0ZXJOYW1lIHx8IFwiXCJ9Om1haW5gO1xuICAgICAgICByZXR1cm4gY29weShzdGVwKTtcbiAgICAgIH0pO1xuICAgICAgc3RlcHMgPSBzdGVwcy5jb25jYXQobWFpblN0ZXBzKTtcbiAgICAgIHRpbWVzdGFtcCArPSBibGsuZHVyYXRpb24gKyBibGsuZGVsYXk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGFuY2hvciA9PT0gXCJzXCIpIHtcbiAgICAgIGJsb2NrLnNUaW1lID0gdGltZXN0YW1wO1xuICAgICAgYmxvY2suZVRpbWUgPSB0aW1lc3RhbXAgKyBibG9jay5kdXJhdGlvbiArIGJsb2NrLmRlbGF5O1xuICAgIH0gZWxzZSB7XG4gICAgICBibG9jay5lVGltZSA9IHRpbWVzdGFtcDtcbiAgICAgIGJsb2NrLnNUaW1lID0gdGltZXN0YW1wIC0gYmxvY2suZHVyYXRpb24gLSBibG9jay5kZWxheTtcbiAgICB9XG4gICAgc3RlcHMgPSBzdGVwcy5jb25jYXQoW2Jsb2NrXSk7XG4gIH1cbiAgcmV0dXJuIHN0ZXBzO1xufSIsImltcG9ydCAqIGFzIGQzIGZyb20gXCJkM1wiO1xuaW1wb3J0IHsgY29tcHV0ZUhhc0ZhY2V0LCBpc0dyb3VwaW5nTWFya3R5cGUgfSBmcm9tIFwiLi4vY2hhbmdlRmV0Y2hlci9zdGF0ZS91dGlsXCI7XG4vLyBKb2luIGFuZCByZXR1cm4gbmV4dERhdGFcbmZ1bmN0aW9uIGZhY2V0RGF0YShkYXRhLCBmYWNldERlZikge1xuICBpZiAoIWZhY2V0RGVmKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgZGF0dW06IHt9LFxuICAgICAgICBtYXJrOiB7IHJvbGU6IFwiZ3JvdXBcIiwgbWFya3R5cGU6IFwiZ3JvdXBcIiB9LFxuICAgICAgICBpdGVtczogW3sgaXRlbXM6IGRhdGEgfV1cbiAgICAgIH1cbiAgICBdO1xuICB9XG5cbiAgbGV0IHtncm91cGJ5fSA9IGZhY2V0RGVmO1xuICBpZiAodHlwZW9mIGdyb3VwYnkgPT09IFwic3RyaW5nXCIpIHtcbiAgICBncm91cGJ5ID0gW2dyb3VwYnldO1xuICB9XG4gIHJldHVybiBkM1xuICAgIC5uZXN0KClcbiAgICAua2V5KGQgPT4gZ3JvdXBieS5tYXAoZiA9PiBkLmRhdHVtW2ZdKS5qb2luKFwiQEBfQEBcIikpXG4gICAgLmVudHJpZXMoZGF0YSlcbiAgICAubWFwKGdyb3VwID0+IHtcbiAgICAgIGxldCBkYXR1bSA9IGdyb3VwYnkucmVkdWNlKChkYXR1bSwgZikgPT4ge1xuICAgICAgICBkYXR1bVtmXSA9IGdyb3VwLnZhbHVlc1swXS5kYXR1bVtmXTtcbiAgICAgICAgcmV0dXJuIGRhdHVtO1xuICAgICAgfSwgeyBjb3VudDogZ3JvdXAudmFsdWVzLmxlbmd0aCB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdHVtOiBkYXR1bSxcbiAgICAgICAgbWFyazoge3JvbGU6IFwiZ3JvdXBcIiwgbWFya3R5cGU6IFwiZ3JvdXBcIn0sXG4gICAgICAgIGl0ZW1zOiBbe2l0ZW1zOiBncm91cC52YWx1ZXMgfV1cbiAgICAgIH07XG4gICAgfSk7XG59XG5mdW5jdGlvbiB1bnBhY2tEYXRhKGRhdGEpIHtcbiAgaWYgKGRhdGFbMF0ubWFyay5tYXJrdHlwZSAhPT0gXCJncm91cFwiKSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICByZXR1cm4gZGF0YS5yZWR1Y2UoKHVucGFja2VkLCBncm91cCkgPT4ge1xuICAgIHJldHVybiB1bnBhY2tlZC5jb25jYXQoZ3JvdXAuaXRlbXNbMF0uaXRlbXMpO1xuICB9LCBbXSk7XG59XG5cbmZ1bmN0aW9uIGdldE1hcmtEYXRhKHZpZXcsIGNvbXBTcGVjLCBjb21wTmFtZSwgbWFya3R5cGUsIGZhY2V0KSB7XG4gIGxldCBkYXRhTmFtZSA9IGNvbXB1dGVIYXNGYWNldChjb21wU3BlYykgPyBjb21wU3BlYy5wYXJlbnQubmFtZSA6IGNvbXBOYW1lO1xuICBsZXQgZGF0YSA9IHZpZXcuX3J1bnRpbWUuZGF0YVtkYXRhTmFtZV0gPyAodmlldy5fcnVudGltZS5kYXRhW2RhdGFOYW1lXS52YWx1ZXMudmFsdWUpIHx8IFtdIDogW107XG4gIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGxldCBpc0dyb3VwaW5nTXR5cGUgPSBpc0dyb3VwaW5nTWFya3R5cGUobWFya3R5cGUgfHwgY29tcFNwZWMudHlwZSksXG4gICAgaGFzRmFjZXQgPSBjb21wdXRlSGFzRmFjZXQoY29tcFNwZWMpO1xuXG4gIGlmICggaXNHcm91cGluZ010eXBlICYmICFoYXNGYWNldCApIHtcbiAgICByZXR1cm4gZmFjZXREYXRhKGRhdGEsIGZhY2V0IHx8IChjb21wU3BlYy5wYXJlbnQuZnJvbSA/IGNvbXBTcGVjLnBhcmVudC5mcm9tLmZhY2V0IDogdW5kZWZpbmVkKSk7XG4gIH0gaWYgKCFpc0dyb3VwaW5nTXR5cGUgJiYgaGFzRmFjZXQpIHtcbiAgICBkYXRhID0gdW5wYWNrRGF0YShkYXRhKTtcbiAgfVxuICByZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gZ2V0RW1wdHlMZWdlbmREYXRhKGNvbXBTcGVjKSB7XG4gIGlmIChjb21wU3BlYy50eXBlID09PSBcInN5bWJvbFwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsczogW10sXG4gICAgICBzeW1ib2xzOiBbXSxcbiAgICAgIHBhaXJzOiBbXSxcbiAgICAgIHRpdGxlOiBbXVxuICAgIH07XG4gIH0gaWYgKGNvbXBTcGVjLnR5cGUgPT09IFwiZ3JhZGllbnRcIikge1xuICAgIHJldHVybiB7XG4gICAgICBsYWJlbHM6IFtdLFxuICAgICAgZ3JhZGllbnQ6IFtdLFxuICAgICAgYmFuZHM6IFtdLFxuICAgICAgdGl0bGU6IFtdXG4gICAgfTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0TGVnZW5kRGF0YSh2aWV3LCBjb21wTmFtZSwgY29tcFNwZWMpIHtcbiAgY29uc3QgdGl0bGVEYXR1bSA9IHZpZXcuX3J1bnRpbWUuZGF0YVtjb21wTmFtZV0udmFsdWVzLnZhbHVlWzBdLml0ZW1zLmZpbmQoXG4gICAgaXRlbSA9PiBpdGVtLnJvbGUgPT09IFwibGVnZW5kLXRpdGxlXCJcbiAgKS5pdGVtc1swXTtcbiAgbGV0IHJldHVybkRhdGEgPSB7IHRpdGxlOiBbdGl0bGVEYXR1bV0gfTtcbiAgaWYgKGNvbXBTcGVjLnR5cGUgPT09IFwic3ltYm9sXCIpIHtcbiAgICByZXR1cm5EYXRhID0gT2JqZWN0LmFzc2lnbihyZXR1cm5EYXRhLCB7XG4gICAgICBsYWJlbHM6IFtdLFxuICAgICAgc3ltYm9sczogW10sXG4gICAgICBwYWlyczogW11cbiAgICB9KTtcbiAgICBjb25zdCBmUGFpcnMgPSB2aWV3Ll9ydW50aW1lLmRhdGFbY29tcE5hbWVdLnZhbHVlcy52YWx1ZVswXS5pdGVtcy5maW5kKFxuICAgICAgaXRlbSA9PiBpdGVtLnJvbGUgPT09IFwibGVnZW5kLWVudHJ5XCJcbiAgICApLml0ZW1zWzBdLml0ZW1zWzBdLml0ZW1zO1xuICAgIGZQYWlycy5mb3JFYWNoKHBhaXIgPT4ge1xuICAgICAgcmV0dXJuRGF0YS5wYWlycy5wdXNoKHBhaXIpO1xuICAgICAgcmV0dXJuRGF0YS5sYWJlbHMucHVzaChcbiAgICAgICAgcGFpci5pdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS5yb2xlID09PSBcImxlZ2VuZC1sYWJlbFwiKS5pdGVtc1swXVxuICAgICAgKTtcbiAgICAgIHJldHVybkRhdGEuc3ltYm9scy5wdXNoKFxuICAgICAgICBwYWlyLml0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnJvbGUgPT09IFwibGVnZW5kLXN5bWJvbFwiKS5pdGVtc1swXVxuICAgICAgKTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChjb21wU3BlYy50eXBlID09PSBcImdyYWRpZW50XCIpIHtcbiAgICByZXR1cm5EYXRhID0gT2JqZWN0LmFzc2lnbihyZXR1cm5EYXRhLCB7XG4gICAgICBsYWJlbHM6IFtdLFxuICAgICAgZ3JhZGllbnQ6IFtdLFxuICAgICAgYmFuZHM6IFtdXG4gICAgfSk7XG4gICAgY29uc3QgZW50cnlHID0gdmlldy5fcnVudGltZS5kYXRhW2NvbXBOYW1lXS52YWx1ZXMudmFsdWVbMF0uaXRlbXMuZmluZChcbiAgICAgIGl0ZW0gPT4gaXRlbS5yb2xlID09PSBcImxlZ2VuZC1lbnRyeVwiXG4gICAgKS5pdGVtc1swXTtcbiAgICBsZXQgbGFiZWxHOyBsZXQgYmFuZEc7IGxldCBncmFkaWVudEc7XG4gICAgaWYgKChsYWJlbEcgPSBlbnRyeUcuaXRlbXMuZmluZChpdGVtID0+IGl0ZW0ucm9sZSA9PT0gXCJsZWdlbmQtbGFiZWxcIikpKSB7XG4gICAgICByZXR1cm5EYXRhLmxhYmVscyA9IHJldHVybkRhdGEubGFiZWxzLmNvbmNhdChsYWJlbEcuaXRlbXMpO1xuICAgIH1cbiAgICBpZiAoKGJhbmRHID0gZW50cnlHLml0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnJvbGUgPT09IFwibGVnZW5kLWJhbmRcIikpKSB7XG4gICAgICByZXR1cm5EYXRhLmJhbmRzID0gcmV0dXJuRGF0YS5iYW5kcy5jb25jYXQoYmFuZEcuaXRlbXMpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAoZ3JhZGllbnRHID0gZW50cnlHLml0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnJvbGUgPT09IFwibGVnZW5kLWdyYWRpZW50XCIpKVxuICAgICkge1xuICAgICAgcmV0dXJuRGF0YS5ncmFkaWVudC5wdXNoKGdyYWRpZW50Ry5pdGVtc1swXSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXR1cm5EYXRhO1xufVxuXG5mdW5jdGlvbiBnZXRFbXB0eUF4aXNEYXRhKCkge1xuICByZXR1cm4ge1xuICAgIHRpY2s6IFtdLFxuICAgIGxhYmVsOiBbXSxcbiAgICBncmlkOiBbXVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0QXhpc0RhdGEodmlldywgY29tcE5hbWUpIHtcbiAgcmV0dXJuIFtcInRpY2tcIiwgXCJsYWJlbFwiLCBcImdyaWRcIl0ucmVkdWNlKChhY2MsIHN1YkNvbXApID0+IHtcbiAgICBsZXQgZGF0YSA9IHZpZXcuX3J1bnRpbWUuZGF0YVtjb21wTmFtZV0udmFsdWVzLnZhbHVlWzBdLml0ZW1zXG4gICAgICAuZmluZChpdGVtID0+IGl0ZW0ucm9sZSA9PT0gYGF4aXMtJHtzdWJDb21wfWApO1xuXG4gICAgZGF0YSA9IGRhdGEgJiYgZGF0YS5pdGVtcyA/IGRhdGEuaXRlbXMgOiBbXTtcbiAgICBhY2Nbc3ViQ29tcF0gPSBkYXRhO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn1cblxuZXhwb3J0IHtcbiAgZmFjZXREYXRhLFxuICB1bnBhY2tEYXRhLFxuICBnZXRNYXJrRGF0YSxcbiAgZ2V0RW1wdHlMZWdlbmREYXRhLFxuICBnZXRMZWdlbmREYXRhLFxuICBnZXRFbXB0eUF4aXNEYXRhLFxuICBnZXRBeGlzRGF0YVxufTtcbiIsImltcG9ydCB7IGNvbXB1dGVIYXNGYWNldCwgaXNHcm91cGluZ01hcmt0eXBlLCBnZXRGYWNldCB9IGZyb20gXCIuL3V0aWxcIjtcbmltcG9ydCB7IHN0cmluZ2lmeURhdHVtVmFsdWUgfSBmcm9tIFwiLi4vLi4vdXRpbC91dGlsXCI7XG5pbXBvcnQge1xuICBmYWNldERhdGEsXG4gIHVucGFja0RhdGEsXG4gIGdldEF4aXNEYXRhLFxuICBnZXRFbXB0eUF4aXNEYXRhLFxuICBnZXRFbXB0eUxlZ2VuZERhdGEsXG4gIGdldExlZ2VuZERhdGEsXG4gIGdldE1hcmtEYXRhXG59IGZyb20gXCIuLi8uLi91dGlsL3ZnRGF0YUhlbHBlclwiO1xuXG5mdW5jdGlvbiBjb21wdXRlSWRNYWtlcihrZXkpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoa2V5KSkge1xuICAgIHJldHVybiAoZCkgPT4ge1xuICAgICAgcmV0dXJuIGtleVxuICAgICAgICAubWFwKGZpZWxkID0+IHtcbiAgICAgICAgICByZXR1cm4gZC5kYXR1bVtmaWVsZF07XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKFwiLVwiKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiAoZCwgaSkgPT4gc3RyaW5naWZ5RGF0dW1WYWx1ZShpKTtcbn1cblxuZnVuY3Rpb24gaW5pdGlhbERhdGEoc3RlcCwgcmF3SW5mbykge1xuICBjb25zdCBzVmlldyA9IHJhd0luZm8uc1Zpcy52aWV3O1xuICBjb25zdCB7IGNoYW5nZSB9ID0gc3RlcDtcbiAgY29uc3QgaXNBZGQgPSAhY2hhbmdlLmluaXRpYWwgJiYgISFjaGFuZ2UuZmluYWw7XG4gIGlmIChjaGFuZ2UuY29tcFR5cGUgPT09IFwiYXhpc1wiKSB7XG4gICAgaWYgKGlzQWRkKSB7XG4gICAgICByZXR1cm4gZ2V0RW1wdHlBeGlzRGF0YSgpO1xuICAgIH1cbiAgICByZXR1cm4gZ2V0QXhpc0RhdGEoc1ZpZXcsIGNoYW5nZS5jb21wTmFtZSk7XG4gIH1cbiAgaWYgKGNoYW5nZS5jb21wVHlwZSA9PT0gXCJsZWdlbmRcIikge1xuICAgIGlmIChpc0FkZCkge1xuICAgICAgcmV0dXJuIGdldEVtcHR5TGVnZW5kRGF0YShjaGFuZ2UuZmluYWwpO1xuICAgIH1cbiAgICByZXR1cm4gZ2V0TGVnZW5kRGF0YShzVmlldywgY2hhbmdlLmNvbXBOYW1lLCBjaGFuZ2UuaW5pdGlhbCk7XG4gIH1cbiAgaWYgKGNoYW5nZS5jb21wVHlwZSA9PT0gXCJtYXJrXCIpIHtcbiAgICBpZiAoaXNBZGQpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3QgbXR5cGUgPSBzdGVwLm1hcmt0eXBlcyA/IHN0ZXAubWFya3R5cGVzLmluaXRpYWwgOiBjaGFuZ2UuaW5pdGlhbC50eXBlO1xuICAgIHJldHVybiBnZXRNYXJrRGF0YShzVmlldywgY2hhbmdlLmluaXRpYWwsIGNoYW5nZS5jb21wTmFtZSwgbXR5cGUpO1xuICB9XG4gIGlmIChjaGFuZ2UuY29tcFR5cGUgPT09IFwidmlld1wiKSB7XG4gICAgcmV0dXJuIHNWaWV3Ll9ydW50aW1lLmRhdGEucm9vdC52YWx1ZXMudmFsdWVbMF07XG4gIH1cbn1cblxuZnVuY3Rpb24gam9pbkRhdGEoc3RlcCwgcmF3SW5mbywgaW5pdGlhbERhdGEpIHtcbiAgY29uc3QgaURhdGEgPSBpbml0aWFsRGF0YTtcbiAgY29uc3QgZVZpZXcgPSByYXdJbmZvLmVWaXMudmlldztcbiAgY29uc3Qge2NoYW5nZX0gPSBzdGVwO1xuICBjb25zdCBpc0FkZCA9ICFjaGFuZ2UuaW5pdGlhbCAmJiAhIWNoYW5nZS5maW5hbDtcbiAgY29uc3QgaXNSZW1vdmUgPSAhIWNoYW5nZS5pbml0aWFsICYmICFjaGFuZ2UuZmluYWw7XG4gIGNvbnN0IHtoYXNGYWNldH0gPSBzdGVwO1xuICBsZXQgcHJlRmV0Y2hDdXJyRGF0YSA9IGZhbHNlO1xuICBsZXQgY29tcHV0ZUlkID0ge307XG5cbiAgaWYgKGNoYW5nZS5jb21wVHlwZSA9PT0gXCJheGlzXCIpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBuZXh0RGF0YToge30sXG4gICAgICBjdXJyRGF0YToge30sXG4gICAgICBjb21wdXRlRGF0dW1JZDoge31cbiAgICB9O1xuXG4gICAgcmVzdWx0Lm5leHREYXRhLmF4aXMgPSBpc1JlbW92ZVxuICAgICAgPyBpRGF0YS5heGlzXG4gICAgICA6IFtlVmlldy5fcnVudGltZS5kYXRhW2NoYW5nZS5jb21wTmFtZV0udmFsdWVzLnZhbHVlWzBdLmRhdHVtXTtcbiAgICByZXN1bHQuY3VyckRhdGEuYXhpcyA9IGlEYXRhLmF4aXM7XG4gICAgcmVzdWx0LmNvbXB1dGVEYXR1bUlkLmF4aXMgPSAoZCwgaSkgPT4gaTtcblxuICAgIGlmIChcbiAgICAgIGNoYW5nZS5zY2FsZSA9PT0gZmFsc2UgfHxcbiAgICAgIChjaGFuZ2Uuc2NhbGUgJiYgY2hhbmdlLnNjYWxlLmRhdGEgPT09IGZhbHNlKVxuICAgICkge1xuICAgICAgY29uc3QgY29tcHV0ZUlkID0gZCA9PiBzdHJpbmdpZnlEYXR1bVZhbHVlKGQuZGF0dW0udmFsdWUpO1xuICAgICAgcmV0dXJuIFtcInRpY2tcIiwgXCJsYWJlbFwiLCBcImdyaWRcIl0ucmVkdWNlKChhY2MsIHN1YkNvbXApID0+IHtcbiAgICAgICAgY29uc3QgbmV4dERhdGEgPSBpRGF0YVtzdWJDb21wXS5tYXAoKGQsIGkpID0+IHtcbiAgICAgICAgICBzZXRKb2luSW5mbyhkLCBzdGVwLCB7IGFuaW1TZXQ6IFwidXBkYXRlXCIsIGpvaW5LZXk6IGNvbXB1dGVJZChkLCBpKSB9KTtcbiAgICAgICAgICByZXR1cm4gZDtcbiAgICAgICAgfSk7XG4gICAgICAgIGFjYy5uZXh0RGF0YVtzdWJDb21wXSA9IG5leHREYXRhO1xuICAgICAgICBhY2MuY3VyckRhdGFbc3ViQ29tcF0gPSBuZXh0RGF0YTtcbiAgICAgICAgYWNjLmNvbXB1dGVEYXR1bUlkW3N1YkNvbXBdID0gY29tcHV0ZUlkO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwgcmVzdWx0KTtcbiAgICB9XG5cbiAgICBsZXQgZkRhdGEgPSBnZXRFbXB0eUF4aXNEYXRhKCk7XG4gICAgaWYgKCFpc1JlbW92ZSkge1xuICAgICAgZkRhdGEgPSBnZXRBeGlzRGF0YShlVmlldywgY2hhbmdlLmNvbXBOYW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gW1widGlja1wiLCBcImxhYmVsXCIsIFwiZ3JpZFwiXS5yZWR1Y2UoKGFjYywgc3ViQ29tcCkgPT4ge1xuICAgICAgbGV0IHN1YkNvbXBFbmNOYW1lID0gc3ViQ29tcCA9PT0gXCJ0aWNrXCIgPyBcInRpY2tzXCIgOiBzdWJDb21wO1xuICAgICAgc3ViQ29tcEVuY05hbWUgPSBzdWJDb21wRW5jTmFtZSA9PT0gXCJsYWJlbFwiID8gXCJsYWJlbHNcIiA6IHN1YkNvbXBFbmNOYW1lO1xuICAgICAgbGV0IGNvbXB1dGVJZCA9IGQgPT4gc3RyaW5naWZ5RGF0dW1WYWx1ZShkLmRhdHVtLnZhbHVlKTtcblxuICAgICAgaWYgKGNoYW5nZS5lbmNvZGUgJiYgY2hhbmdlLmVuY29kZVtzdWJDb21wRW5jTmFtZV0gPT09IGZhbHNlKSB7XG4gICAgICAgIGFjYy5uZXh0RGF0YVtzdWJDb21wXSA9IGlEYXRhW3N1YkNvbXBdO1xuICAgICAgICBhY2MuY3VyckRhdGFbc3ViQ29tcF0gPSBpRGF0YVtzdWJDb21wXTtcbiAgICAgICAgYWNjLmNvbXB1dGVEYXR1bUlkW3N1YkNvbXBdID0gY29tcHV0ZUlkO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpRGF0YVN1YkNvbXAgPSBpRGF0YVtzdWJDb21wXSB8fCBbXTtcbiAgICAgIGxldCBmRGF0YVN1YkNvbXAgPSBmRGF0YVtzdWJDb21wXSB8fCBbXTtcbiAgICAgIGlmICghc3RlcC5zYW1lRG9tYWluRGltZW5zaW9uKSB7XG4gICAgICAgIGNvbnN0IGNpID0gYXBwZW5kUG9zdGZpeChjb21wdXRlSWQsIFwiX2V4aXRcIik7XG4gICAgICAgIGxldCBjZiA9IGFwcGVuZFBvc3RmaXgoY29tcHV0ZUlkLCBcIl9lbnRlclwiKTtcbiAgICAgICAgY29tcHV0ZUlkID0geyBpbml0aWFsOiBjaSwgZmluYWw6IGNmIH07XG5cbiAgICAgICAgaURhdGFTdWJDb21wLmZvckVhY2goKGlEYXR1bSwgaSkgPT4ge1xuICAgICAgICAgIHNldEpvaW5JbmZvKGlEYXR1bSwgc3RlcCwge1xuICAgICAgICAgICAgYW5pbVNldDogXCJleGl0XCIsXG4gICAgICAgICAgICBqb2luS2V5OiBjb21wdXRlSWQuaW5pdGlhbChpRGF0dW0sIGkpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZEYXRhU3ViQ29tcC5mb3JFYWNoKChmRGF0dW0sIGkpID0+IHtcbiAgICAgICAgICBzZXRKb2luSW5mbyhmRGF0dW0sIHN0ZXAsIHtcbiAgICAgICAgICAgIGFuaW1TZXQ6IFwiZW50ZXJcIixcbiAgICAgICAgICAgIGpvaW5LZXk6IGNvbXB1dGVJZC5maW5hbChmRGF0dW0sIGkpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgam9pblRoZW0oaURhdGFTdWJDb21wLCBmRGF0YVN1YkNvbXAsIGNvbXB1dGVJZCwgc3RlcCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGxldCBpc0FuaW1TZXQgPSBnZXRJc0FuaW1TZXQoc3ViQ29tcEVuY05hbWUsIGNoYW5nZS5lbmNvZGUpO1xuICAgICAgLy8gbGV0IGlEYXRhQW5pbVNldHMgPSAoaXNBbmltU2V0LmV4aXQgPyBbXSA6IFtcImV4aXRcIl0pLmNvbmNhdChpc0FuaW1TZXQudXBkYXRlID8gW10gOiBbXCJ1cGRhdGVcIl0pLFxuICAgICAgLy8gICBmRGF0YUFuaW1TZXRzID0gKGlzQW5pbVNldC5lbnRlciA/IFtcImVudGVyXCJdIDogW10pLmNvbmNhdChpc0FuaW1TZXQudXBkYXRlID8gW1widXBkYXRlXCJdIDogW10pXG4gICAgICBjb25zdCBpRGF0YUFuaW1TZXRzID0gW107IGxldCBmRGF0YUFuaW1TZXRzID0gW1wiZW50ZXJcIiwgXCJ1cGRhdGVcIl07XG4gICAgICBjb25zdCBuZXh0RGF0YSA9IGlEYXRhU3ViQ29tcFxuICAgICAgICAuZmlsdGVyKGQgPT4gaURhdGFBbmltU2V0cy5pbmRleE9mKGdldEpvaW5JbmZvKGQsIHN0ZXAsIFwiYW5pbVNldFwiKSkgPj0gMClcbiAgICAgICAgLmNvbmNhdChmRGF0YVN1YkNvbXAuZmlsdGVyKGQgPT4gZkRhdGFBbmltU2V0cy5pbmRleE9mKGdldEpvaW5JbmZvKGQsIHN0ZXAsIFwiYW5pbVNldFwiKSkgPj0gMCkpO1xuXG4gICAgICAvLyBsZXQgbmV4dERhdGEgPSBbXTtcblxuICAgICAgLy8gbmV4dERhdGEgPSBuZXh0RGF0YS5jb25jYXQoaXNBbmltU2V0LnVwZGF0ZSA/IGpvaW5lZERhdGEudXBkYXRlLmZpbmFsIDogam9pbmVkRGF0YS51cGRhdGUuaW5pdGlhbClcbiAgICAgIC8vIG5leHREYXRhID0gaXNBbmltU2V0LmVudGVyID8gbmV4dERhdGEuY29uY2F0KGpvaW5lZERhdGEuZW50ZXIpIDogbmV4dERhdGE7XG4gICAgICAvLyBuZXh0RGF0YSA9ICFpc0FuaW1TZXQuZXhpdCA/IG5leHREYXRhLmNvbmNhdChqb2luZWREYXRhLmV4aXQpIDogbmV4dERhdGE7XG5cbiAgICAgIGFjYy5uZXh0RGF0YVtzdWJDb21wXSA9IG5leHREYXRhO1xuICAgICAgYWNjLmN1cnJEYXRhW3N1YkNvbXBdID0gaURhdGFTdWJDb21wO1xuICAgICAgYWNjLmNvbXB1dGVEYXR1bUlkW3N1YkNvbXBdID0gY29tcHV0ZUlkO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCByZXN1bHQpO1xuXG4gIH1cbiAgaWYgKGNoYW5nZS5jb21wVHlwZSA9PT0gXCJsZWdlbmRcIikge1xuICAgIGNvbnN0IGdldENvbXB1dGVJZCA9IHN1YkNvbXAgPT4ge1xuICAgICAgaWYgKHN1YkNvbXAgPT09IFwicGFpcnNcIikge1xuICAgICAgICByZXR1cm4gZCA9PiB7XG4gICAgICAgICAgY29uc3Qge2RhdHVtfSA9IGQuaXRlbXMuZmluZChpdGVtID0+IGl0ZW0ucm9sZSA9PT0gXCJsZWdlbmQtbGFiZWxcIikuaXRlbXNbMF07XG4gICAgICAgICAgcmV0dXJuIHN0cmluZ2lmeURhdHVtVmFsdWUoZGF0dW0udmFsdWUpO1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChzdWJDb21wID09PSBcInRpdGxlXCIpIHtcbiAgICAgICAgcmV0dXJuIGQgPT4gZC50ZXh0O1xuICAgICAgfSBlbHNlIGlmIChzdWJDb21wID09PSBcImdyYWRpZW50XCIpIHtcbiAgICAgICAgcmV0dXJuIGQgPT4gSlNPTi5zdHJpbmdpZnkoZC5maWxsLnN0b3BzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkID0+IHN0cmluZ2lmeURhdHVtVmFsdWUoZC5kYXR1bS52YWx1ZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IE9iamVjdC5rZXlzKGlEYXRhKS5yZWR1Y2UoXG4gICAgICAoYWNjLCBzdWJDb21wKSA9PiB7XG4gICAgICAgIGNvbXB1dGVJZCA9IGdldENvbXB1dGVJZChzdWJDb21wKTtcbiAgICAgICAgY29uc3QgbmV4dERhdGEgPSBpRGF0YVtzdWJDb21wXS5tYXAoKGQsIGkpID0+IHtcbiAgICAgICAgICBzZXRKb2luSW5mbyhkLCBzdGVwLCB7IGFuaW1TZXQ6IFwidXBkYXRlXCIsIGpvaW5LZXk6IGNvbXB1dGVJZChkLCBpKSB9KTtcbiAgICAgICAgICByZXR1cm4gZDtcbiAgICAgICAgfSk7XG4gICAgICAgIGFjYy5uZXh0RGF0YVtzdWJDb21wXSA9IG5leHREYXRhO1xuICAgICAgICBhY2MuY3VyckRhdGFbc3ViQ29tcF0gPSBuZXh0RGF0YTtcbiAgICAgICAgYWNjLmNvbXB1dGVEYXR1bUlkW3N1YkNvbXBdID0gY29tcHV0ZUlkO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmV4dERhdGE6IHt9LFxuICAgICAgICBjdXJyRGF0YToge30sXG4gICAgICAgIGNvbXB1dGVEYXR1bUlkOiB7fVxuICAgICAgfVxuICAgICk7XG5cbiAgICBpZiAoXG4gICAgICBjaGFuZ2Uuc2NhbGUgPT09IGZhbHNlIHx8XG4gICAgICAoY2hhbmdlLnNjYWxlICYmIGNoYW5nZS5zY2FsZS5kYXRhID09PSBmYWxzZSlcbiAgICApIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgaWYgKGlzUmVtb3ZlKSB7XG4gICAgICByZXN1bHQubmV4dERhdGEgPSBnZXRFbXB0eUxlZ2VuZERhdGEoY2hhbmdlLmluaXRpYWwpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgZkRhdGEgPSBnZXRMZWdlbmREYXRhKGVWaWV3LCBjaGFuZ2UuY29tcE5hbWUsIGNoYW5nZS5maW5hbCk7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGZEYXRhKVxuICAgICAgLmNvbmNhdChPYmplY3Qua2V5cyhpRGF0YSkpXG4gICAgICAudW5pcXVlKCk7XG4gICAgcmV0dXJuIGtleXMucmVkdWNlKChhY2MsIHN1YkNvbXApID0+IHtcbiAgICAgIGNvbnN0IHN1YkNvbXBFbmNOYW1lID0gc3ViQ29tcDtcbiAgICAgIGlmIChjaGFuZ2UuZW5jb2RlICYmIGNoYW5nZS5lbmNvZGVbc3ViQ29tcEVuY05hbWVdID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuICAgICAgY29tcHV0ZUlkID0gZ2V0Q29tcHV0ZUlkKHN1YkNvbXApO1xuICAgICAgY29uc3QgaURhdGFTdWJDb21wID0gaURhdGFbc3ViQ29tcF0gfHwgW107XG4gICAgICBsZXQgZkRhdGFTdWJDb21wID0gZkRhdGFbc3ViQ29tcF18fCBbXTtcbiAgICAgIGlmIChcbiAgICAgICAgKHN1YkNvbXAgPT09IFwibGFiZWxzXCIgJiZcbiAgICAgICAgICBzdGVwLmxlZ2VuZFR5cGVzLmluaXRpYWwgIT09IHN0ZXAubGVnZW5kVHlwZXMuZmluYWwpIHx8XG4gICAgICAgICFzdGVwLnNhbWVEb21haW5EaW1lbnNpb25cbiAgICAgICkge1xuICAgICAgICBjb25zdCBjaSA9IGFwcGVuZFBvc3RmaXgoY29tcHV0ZUlkLCBcIl9leGl0XCIpO1xuICAgICAgICBsZXQgY2YgPSBhcHBlbmRQb3N0Zml4KGNvbXB1dGVJZCwgXCJfZW50ZXJcIik7XG4gICAgICAgIGNvbXB1dGVJZCA9IHsgaW5pdGlhbDogY2ksIGZpbmFsOiBjZiB9O1xuXG4gICAgICAgIGlEYXRhU3ViQ29tcC5mb3JFYWNoKChpRGF0dW0sIGkpID0+IHtcbiAgICAgICAgICBzZXRKb2luSW5mbyhpRGF0dW0sIHN0ZXAsIHtcbiAgICAgICAgICAgIGFuaW1TZXQ6IFwiZXhpdFwiLFxuICAgICAgICAgICAgam9pbktleTogY29tcHV0ZUlkLmluaXRpYWwoaURhdHVtLCBpKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBmRGF0YVN1YkNvbXAuZm9yRWFjaCgoZkRhdHVtLCBpKSA9PiB7XG4gICAgICAgICAgc2V0Sm9pbkluZm8oZkRhdHVtLCBzdGVwLCB7XG4gICAgICAgICAgICBhbmltU2V0OiBcImVudGVyXCIsXG4gICAgICAgICAgICBqb2luS2V5OiBjb21wdXRlSWQuZmluYWwoZkRhdHVtLCBpKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGpvaW5UaGVtKGlEYXRhU3ViQ29tcCwgZkRhdGFTdWJDb21wLCBjb21wdXRlSWQsIHN0ZXApO1xuICAgICAgfVxuXG4gICAgICAvLyBsZXQgaXNBbmltU2V0ID0gZ2V0SXNBbmltU2V0KHN1YkNvbXBFbmNOYW1lLCBjaGFuZ2UuZW5jb2RlKTtcblxuICAgICAgLy8gbGV0IGlEYXRhQW5pbVNldHMgPSAoaXNBbmltU2V0LmV4aXQgPyBbXSA6IFtcImV4aXRcIl0pLmNvbmNhdChpc0FuaW1TZXQudXBkYXRlID8gW10gOiBbXCJ1cGRhdGVcIl0pLFxuICAgICAgLy8gICBmRGF0YUFuaW1TZXRzID0gKGlzQW5pbVNldC5lbnRlciA/IFtcImVudGVyXCJdIDogW10pLmNvbmNhdChpc0FuaW1TZXQudXBkYXRlID8gW1widXBkYXRlXCJdIDogW10pXG4gICAgICBjb25zdCBpRGF0YUFuaW1TZXRzID0gW107IGxldCBmRGF0YUFuaW1TZXRzID0gW1wiZW50ZXJcIiwgXCJ1cGRhdGVcIl07XG4gICAgICBjb25zdCBuZXh0RGF0YSA9IGlEYXRhU3ViQ29tcFxuICAgICAgICAuZmlsdGVyKGQgPT4gaURhdGFBbmltU2V0cy5pbmRleE9mKGdldEpvaW5JbmZvKGQsIHN0ZXAsIFwiYW5pbVNldFwiKSkgPj0gMClcbiAgICAgICAgLmNvbmNhdChmRGF0YVN1YkNvbXAuZmlsdGVyKGQgPT4gZkRhdGFBbmltU2V0cy5pbmRleE9mKGdldEpvaW5JbmZvKGQsIHN0ZXAsIFwiYW5pbVNldFwiKSkgPj0gMCkpO1xuXG4gICAgICBhY2MubmV4dERhdGFbc3ViQ29tcF0gPSBuZXh0RGF0YSB8fCBbXTtcbiAgICAgIGFjYy5jdXJyRGF0YVtzdWJDb21wXSA9IGlEYXRhU3ViQ29tcDtcbiAgICAgIGFjYy5jb21wdXRlRGF0dW1JZFtzdWJDb21wXSA9IGNvbXB1dGVJZDtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgcmVzdWx0KTtcbiAgfVxuICBpZiAoY2hhbmdlLmNvbXBUeXBlID09PSBcIm1hcmtcIikge1xuICAgIGNvbnN0IHttYXJrdHlwZXN9ID0gc3RlcDtcblxuICAgIGxldCBkb1VwZGF0ZSA9ICFpc1JlbW92ZSAmJiAhaXNBZGQgJiYgY2hhbmdlLmRhdGEgIT09IGZhbHNlLFxuICAgICAgZG9FbnRlciA9ICFpc1JlbW92ZSAmJiAoaXNBZGQgfHwgY2hhbmdlLmRhdGEgIT09IGZhbHNlKSxcbiAgICAgIGRvRXhpdCA9ICFpc0FkZCAmJiAoaXNSZW1vdmUgfHwgY2hhbmdlLmRhdGEgIT09IGZhbHNlKTtcbiAgICBsZXQgam9pbkZpZWxkcyA9IG51bGw7XG4gICAgaWYgKGNoYW5nZS5kYXRhKSB7XG4gICAgICBkb1VwZGF0ZSA9IGNoYW5nZS5kYXRhLnVwZGF0ZSA9PT0gZmFsc2UgPyBmYWxzZSA6IGRvVXBkYXRlO1xuICAgICAgZG9FbnRlciA9IGNoYW5nZS5kYXRhLmVudGVyID09PSBmYWxzZSA/IGZhbHNlIDogZG9FbnRlcjtcbiAgICAgIGRvRXhpdCA9IGNoYW5nZS5kYXRhLmV4aXQgPT09IGZhbHNlID8gZmFsc2UgOiBkb0V4aXQ7XG4gICAgICBqb2luRmllbGRzID0gQXJyYXkuaXNBcnJheShjaGFuZ2UuZGF0YSkgPyBjaGFuZ2UuZGF0YSA6IGNoYW5nZS5kYXRhLmtleXM7XG4gICAgfVxuXG5cbiAgICBjb25zdCBhZ2dyZWdhdGUgPSBzdGVwLmFnZ3JlZ2F0ZXM7XG4gICAgY29uc3QgaXNHcm91cGluZ01hcmt0eXBlcyA9IHtcbiAgICAgIGluaXRpYWw6IGlzR3JvdXBpbmdNYXJrdHlwZShtYXJrdHlwZXMuaW5pdGlhbCB8fCBtYXJrdHlwZXMuZmluYWwpLFxuICAgICAgZmluYWw6IGlzR3JvdXBpbmdNYXJrdHlwZShtYXJrdHlwZXMuZmluYWwgfHwgbWFya3R5cGVzLmluaXRpYWwpXG4gICAgfTtcblxuICAgIGNvbnN0IGZhY2V0cyA9IHtcbiAgICAgIGluaXRpYWw6IGhhc0ZhY2V0LmluaXRpYWxcbiAgICAgICAgPyBnZXRGYWNldChjaGFuZ2UuaW5pdGlhbCkgfHwgZ2V0RmFjZXQoY2hhbmdlLmZpbmFsKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGZpbmFsOiBoYXNGYWNldC5maW5hbFxuICAgICAgICA/IGdldEZhY2V0KGNoYW5nZS5maW5hbCkgfHwgZ2V0RmFjZXQoY2hhbmdlLmluaXRpYWwpXG4gICAgICAgIDogdW5kZWZpbmVkXG4gICAgfTtcbiAgICBpZiAoY2hhbmdlLm1hcmt0eXBlID09PSBmYWxzZSkge1xuICAgICAgaXNHcm91cGluZ01hcmt0eXBlcy5maW5hbCA9IGlzR3JvdXBpbmdNYXJrdHlwZXMuaW5pdGlhbDtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlLmRhdGEgfHwgaXNBZGQgfHwgaXNSZW1vdmUpIHtcbiAgICAgIHN0ZXAuY2hhbmdlLmFnZ3JlZ2F0ZSA9IGFnZ3JlZ2F0ZTtcblxuICAgICAgbGV0IGZEYXRhID0gW107XG4gICAgICBpZiAoIWlzUmVtb3ZlKSB7XG4gICAgICAgIGNvbnN0IG10eXBlID0gbWFya3R5cGVzLmZpbmFsIHx8IG1hcmt0eXBlcy5pbml0aWFsO1xuICAgICAgICBjb25zdCBmYWNldCA9XG4gICAgICAgICAgY2hhbmdlLm1hcmt0eXBlID09PSBmYWxzZVxuICAgICAgICAgICAgPyBjaGFuZ2UuaW5pdGlhbC5wYXJlbnQuZnJvbVxuICAgICAgICAgICAgICA/IGNoYW5nZS5pbml0aWFsLnBhcmVudC5mcm9tLmZhY2V0XG4gICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgICA6IGNoYW5nZS5maW5hbC5wYXJlbnQuZnJvbVxuICAgICAgICAgICAgICA/IGNoYW5nZS5maW5hbC5wYXJlbnQuZnJvbS5mYWNldFxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgICBmRGF0YSA9IGdldE1hcmtEYXRhKGVWaWV3LCBjaGFuZ2UuZmluYWwsIGNoYW5nZS5jb21wTmFtZSwgbXR5cGUsIGZhY2V0KTtcbiAgICAgIH1cbiAgICAgIC8vICAgLy8gRGF0YSBzaG91bGQgYmUgZnJvbSBjaGFuZ2UuZmluYWwhXG4gICAgICAvLyAgIGxldCBkTmFtZSA9IGNvbXB1dGVIYXNGYWNldChjaGFuZ2UuZmluYWwpID8gY2hhbmdlLmZpbmFsLnBhcmVudC5uYW1lIDogZGF0YU5hbWU7XG4gICAgICAvLyAgIGxldCBfZkRhdGEgPSBlVmlldy5fcnVudGltZS5kYXRhW2ROYW1lXSA/IChlVmlldy5fcnVudGltZS5kYXRhW2ROYW1lXS52YWx1ZXMudmFsdWUpIDogW107XG5cbiAgICAgIC8vICAgLy8gd2hlbiB0aGUgZmluYWwgZGF0YSBzaG91bGQgYmUgZmFjZXR0ZWQgYnV0IGFyZSBub3QgZmFjZXR0ZWQgeWV0OlxuICAgICAgLy8gICBpZiAoaXNHcm91cGluZ01hcmt0eXBlcy5maW5hbCAmJiAhY29tcHV0ZUhhc0ZhY2V0KGNoYW5nZS5maW5hbCkpe1xuICAgICAgLy8gICAgIGlmIChjaGFuZ2UubWFya3R5cGUgPT09IGZhbHNlKSB7XG4gICAgICAvLyAgICAgICBmRGF0YSA9IGZhY2V0RGF0YShfZkRhdGEsIGNoYW5nZS5pbml0aWFsLnBhcmVudC5mcm9tID8gY2hhbmdlLmluaXRpYWwucGFyZW50LmZyb20uZmFjZXQgOiB1bmRlZmluZWQpO1xuICAgICAgLy8gICAgIH0gZWxzZSB7XG4gICAgICAvLyAgICAgICBmRGF0YSA9IGZhY2V0RGF0YShfZkRhdGEsIGNoYW5nZS5maW5hbC5wYXJlbnQuZnJvbSA/IGNoYW5nZS5maW5hbC5wYXJlbnQuZnJvbS5mYWNldCA6IHVuZGVmaW5lZCk7XG4gICAgICAvLyAgICAgfVxuICAgICAgLy8gICB9IGVsc2UgaWYgKCFpc0dyb3VwaW5nTWFya3R5cGVzLmZpbmFsICYmIGNvbXB1dGVIYXNGYWNldChjaGFuZ2UuZmluYWwpKSB7XG4gICAgICAvLyAgICAgZkRhdGEgPSB1bnBhY2tEYXRhKF9mRGF0YSk7XG4gICAgICAvLyAgIH0gZWxzZSB7XG4gICAgICAvLyAgICAgZkRhdGEgPSBfZkRhdGE7XG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH1cblxuICAgICAgW1wiaW5pdGlhbFwiLCBcImZpbmFsXCJdLmZvckVhY2god2hpY2ggPT4ge1xuICAgICAgICBpZiAoY2hhbmdlW3doaWNoXSAmJiBmYWNldHNbd2hpY2hdKSB7XG4gICAgICAgICAgY29tcHV0ZUlkW3doaWNoXSA9IGNvbXB1dGVJZE1ha2VyKGZhY2V0c1t3aGljaF0uZ3JvdXBieSk7XG4gICAgICAgIH0gZWxzZSBpZiAoYWdncmVnYXRlW3doaWNoXSkge1xuICAgICAgICAgIGNvbXB1dGVJZFt3aGljaF0gPSBjb21wdXRlSWRNYWtlcihhZ2dyZWdhdGVbd2hpY2hdLmdyb3VwYnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbXB1dGVJZFt3aGljaF0gPSBjb21wdXRlSWRNYWtlcihqb2luRmllbGRzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cblxuICAgICAgaWYgKGlzR3JvdXBpbmdNYXJrdHlwZXMuaW5pdGlhbCAmJiBpc0dyb3VwaW5nTWFya3R5cGVzLmZpbmFsKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjaGFuZ2UuZmluYWwgJiZcbiAgICAgICAgICBjaGFuZ2UuaW5pdGlhbCAmJlxuICAgICAgICAgIGZhY2V0cy5maW5hbCAmJlxuICAgICAgICAgIGZhY2V0cy5pbml0aWFsICYmXG4gICAgICAgICAgZmFjZXRzLmluaXRpYWwuZ3JvdXBieS5zb3J0KCkudG9TdHJpbmcoKSA9PT1cbiAgICAgICAgICAgIGZhY2V0cy5maW5hbC5ncm91cGJ5LnNvcnQoKS50b1N0cmluZygpXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbXB1dGVJZCA9IGNvbXB1dGVJZC5pbml0aWFsO1xuICAgICAgICAgIGpvaW5UaGVtKGlEYXRhLCBmRGF0YSwgY29tcHV0ZUlkLCBzdGVwKTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBjaGFuZ2UuZmluYWwgJiZcbiAgICAgICAgICBjaGFuZ2UuaW5pdGlhbCAmJlxuICAgICAgICAgICFmYWNldHMuZmluYWwgJiZcbiAgICAgICAgICAhZmFjZXRzLmluaXRpYWxcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29tcHV0ZUlkID0gY29tcHV0ZUlkLmluaXRpYWw7XG4gICAgICAgICAgam9pblRoZW0oaURhdGEsIGZEYXRhLCBjb21wdXRlSWQsIHN0ZXApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNpID0gYXBwZW5kUG9zdGZpeChjb21wdXRlSWQuaW5pdGlhbCwgXCJfZXhpdFwiKTtcbiAgICAgICAgICBsZXQgY2YgPSBhcHBlbmRQb3N0Zml4KGNvbXB1dGVJZC5maW5hbCwgXCJfZW50ZXJcIik7XG5cbiAgICAgICAgICBjb21wdXRlSWQgPSB7IGluaXRpYWw6IGNpLCBmaW5hbDogY2YgfTtcbiAgICAgICAgICBpRGF0YS5mb3JFYWNoKChpRGF0dW0sIGkpID0+IHtcbiAgICAgICAgICAgIHNldEpvaW5JbmZvKGlEYXR1bSwgc3RlcCwge1xuICAgICAgICAgICAgICBhbmltU2V0OiBcImV4aXRcIixcbiAgICAgICAgICAgICAgam9pbktleTogY29tcHV0ZUlkLmluaXRpYWwoaURhdHVtLCBpKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZkRhdGEuZm9yRWFjaCgoZkRhdHVtLCBpKSA9PiB7XG4gICAgICAgICAgICBzZXRKb2luSW5mbyhmRGF0dW0sIHN0ZXAsIHtcbiAgICAgICAgICAgICAgYW5pbVNldDogXCJlbnRlclwiLFxuICAgICAgICAgICAgICBqb2luS2V5OiBjb21wdXRlSWQuZmluYWwoZkRhdHVtLCBpKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIWlzR3JvdXBpbmdNYXJrdHlwZXMuaW5pdGlhbCAmJiAhaXNHcm91cGluZ01hcmt0eXBlcy5maW5hbCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgYWdncmVnYXRlLmluaXRpYWwgJiZcbiAgICAgICAgICBhZ2dyZWdhdGUuZmluYWwgJiZcbiAgICAgICAgICBhZ2dyZWdhdGUuaW5pdGlhbC5ncm91cGJ5LnNvcnQoKS50b1N0cmluZygpID09PVxuICAgICAgICAgICAgYWdncmVnYXRlLmZpbmFsLmdyb3VwYnkuc29ydCgpLnRvU3RyaW5nKClcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29tcHV0ZUlkID0gY29tcHV0ZUlkLmluaXRpYWw7XG4gICAgICAgICAgam9pblRoZW0oaURhdGEsIGZEYXRhLCBjb21wdXRlSWQsIHN0ZXApO1xuICAgICAgICB9IGVsc2UgaWYgKCFhZ2dyZWdhdGUuaW5pdGlhbCAmJiAhYWdncmVnYXRlLmZpbmFsKSB7XG4gICAgICAgICAgY29tcHV0ZUlkID0gY29tcHV0ZUlkLmluaXRpYWw7XG4gICAgICAgICAgam9pblRoZW0oaURhdGEsIGZEYXRhLCBjb21wdXRlSWQsIHN0ZXApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCBjaSA9IGFwcGVuZFBvc3RmaXgoY29tcHV0ZUlkLmluaXRpYWwsIFwiX2V4aXRcIik7XG4gICAgICAgICAgbGV0IGNmID0gYXBwZW5kUG9zdGZpeChjb21wdXRlSWQuZmluYWwsIFwiX2VudGVyXCIpO1xuICAgICAgICAgIGNvbXB1dGVJZCA9IHsgaW5pdGlhbDogY2ksIGZpbmFsOiBjZiB9O1xuXG4gICAgICAgICAgaURhdGEuZm9yRWFjaCgoaURhdHVtLCBpKSA9PiB7XG4gICAgICAgICAgICBzZXRKb2luSW5mbyhpRGF0dW0sIHN0ZXAsIHtcbiAgICAgICAgICAgICAgYW5pbVNldDogXCJleGl0XCIsXG4gICAgICAgICAgICAgIGpvaW5LZXk6IGNvbXB1dGVJZC5pbml0aWFsKGlEYXR1bSwgaSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgZkRhdGEuZm9yRWFjaCgoZkRhdHVtLCBpKSA9PiB7XG4gICAgICAgICAgICBzZXRKb2luSW5mbyhmRGF0dW0sIHN0ZXAsIHtcbiAgICAgICAgICAgICAgYW5pbVNldDogXCJlbnRlclwiLFxuICAgICAgICAgICAgICBqb2luS2V5OiBjb21wdXRlSWQuZmluYWwoZkRhdHVtLCBpKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAoIWFnZ3JlZ2F0ZS5pbml0aWFsICYmIGFnZ3JlZ2F0ZS5maW5hbCkge1xuICAgICAgICAgICAgYXR0YWNoQWdnRGF0YShmRGF0YSwgaURhdGEsIGNvbXB1dGVJZC5maW5hbCwgYWdncmVnYXRlLmZpbmFsKTtcbiAgICAgICAgICAgIHByZUZldGNoQ3VyckRhdGEgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYWdncmVnYXRlLmluaXRpYWwgJiYgIWFnZ3JlZ2F0ZS5maW5hbCkge1xuICAgICAgICAgICAgYXR0YWNoQWdnRGF0YShpRGF0YSwgZkRhdGEsIGNvbXB1dGVJZC5pbml0aWFsLCBhZ2dyZWdhdGUuaW5pdGlhbCk7XG4gICAgICAgICAgICBwcmVGZXRjaEN1cnJEYXRhID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFdoZW4gdGhlIG1hcmt0eXBlIGNoYW5nZXMgYmV0d2VlbiBhcmVhL2xpbmUgdG8gdGhlIG90aGVycy5cbiAgICAgICAgbGV0IGdyb3VwZWREYXRhOyBsZXQgdW5wYWNrZWREYXRhO1xuICAgICAgICBpZiAoaXNHcm91cGluZ01hcmt0eXBlcy5pbml0aWFsKSB7XG4gICAgICAgICAgY29tcHV0ZUlkLmluaXRpYWwgPSBjb21wdXRlSWRNYWtlcihcbiAgICAgICAgICAgIGZhY2V0cy5pbml0aWFsID8gY2hhbmdlLmluaXRpYWwucGFyZW50LmZyb20uZmFjZXQuZ3JvdXBieSA6IG51bGxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbXB1dGVJZC5maW5hbCA9IGNvbXB1dGVJZE1ha2VyKGpvaW5GaWVsZHMgfHwgbnVsbCk7XG4gICAgICAgICAgdW5wYWNrZWREYXRhID0gdW5wYWNrRGF0YShpRGF0YSk7XG4gICAgICAgICAgam9pblRoZW0odW5wYWNrZWREYXRhLCBmRGF0YSwgY29tcHV0ZUlkLmZpbmFsLCBzdGVwKTtcblxuICAgICAgICAgIGdyb3VwZWREYXRhID0gZmFjZXREYXRhKFxuICAgICAgICAgICAgZkRhdGEsXG4gICAgICAgICAgICBjaGFuZ2UuaW5pdGlhbC5wYXJlbnQuZnJvbVxuICAgICAgICAgICAgICA/IGNoYW5nZS5pbml0aWFsLnBhcmVudC5mcm9tLmZhY2V0XG4gICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgKTtcbiAgICAgICAgICBqb2luVGhlbShpRGF0YSwgZ3JvdXBlZERhdGEsIGNvbXB1dGVJZC5pbml0aWFsLCBzdGVwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb21wdXRlSWQuaW5pdGlhbCA9IGNvbXB1dGVJZE1ha2VyKGpvaW5GaWVsZHMgfHwgbnVsbCk7XG4gICAgICAgICAgY29tcHV0ZUlkLmZpbmFsID0gY29tcHV0ZUlkTWFrZXIoXG4gICAgICAgICAgICBmYWNldHMuZmluYWwgPyBjaGFuZ2UuZmluYWwucGFyZW50LmZyb20uZmFjZXQuZ3JvdXBieSA6IG51bGxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdW5wYWNrZWREYXRhID0gdW5wYWNrRGF0YShmRGF0YSk7XG4gICAgICAgICAgam9pblRoZW0oaURhdGEsIHVucGFja2VkRGF0YSwgY29tcHV0ZUlkLmluaXRpYWwsIHN0ZXApO1xuXG4gICAgICAgICAgZ3JvdXBlZERhdGEgPSBmYWNldERhdGEoXG4gICAgICAgICAgICBpRGF0YSxcbiAgICAgICAgICAgIGNoYW5nZS5maW5hbC5wYXJlbnQuZnJvbVxuICAgICAgICAgICAgICA/IGNoYW5nZS5maW5hbC5wYXJlbnQuZnJvbS5mYWNldFxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgICk7XG4gICAgICAgICAgam9pblRoZW0oZ3JvdXBlZERhdGEsIGZEYXRhLCBjb21wdXRlSWQuZmluYWwsIHN0ZXApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuZXh0RGF0YTogZkRhdGEsXG4gICAgICAgICAgY3VyckRhdGE6IGlEYXRhLFxuICAgICAgICAgIGNvbXB1dGVEYXR1bUlkOiBjb21wdXRlSWQsXG4gICAgICAgICAgZ3JvdXBlZERhdGEsXG4gICAgICAgICAgdW5wYWNrZWREYXRhXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlEYXRhQW5pbVNldHMgPSAoZG9FeGl0ID8gW10gOiBbXCJleGl0XCJdKS5jb25jYXQoXG4gICAgICAgIGRvVXBkYXRlID8gW10gOiBbXCJ1cGRhdGVcIl1cbiAgICAgICk7XG4gICAgICBsZXQgZkRhdGFBbmltU2V0cyA9IChkb0VudGVyID8gW1wiZW50ZXJcIl0gOiBbXSkuY29uY2F0KFxuICAgICAgICBkb1VwZGF0ZSA/IFtcInVwZGF0ZVwiXSA6IFtdXG4gICAgICApO1xuICAgICAgbGV0IG5leHREYXRhID0gaURhdGEuZmlsdGVyKFxuICAgICAgICBkID0+IGlEYXRhQW5pbVNldHMuaW5kZXhPZihnZXRKb2luSW5mbyhkLCBzdGVwLCBcImFuaW1TZXRcIikpID49IDBcbiAgICAgICk7XG4gICAgICBpZiAoIWRvRXhpdCkge1xuICAgICAgICAvLyB3ZSBpbmNsdWRlZCB0aGUgZXhpdCBkYXRhIGFzIHdlIGRvIG5vdCBtYWtlIHRoZW0gZXhpdC5cbiAgICAgICAgbmV4dERhdGEuZm9yRWFjaCgoZGF0dW0pID0+IHtcbiAgICAgICAgICBzZXRKb2luSW5mbyhkYXR1bSwgc3RlcCwgeyBhbmltU2V0OiBcInVwZGF0ZVwiIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgbmV4dERhdGEgPSBuZXh0RGF0YS5jb25jYXQoXG4gICAgICAgIGZEYXRhLmZpbHRlcihcbiAgICAgICAgICBkID0+IGZEYXRhQW5pbVNldHMuaW5kZXhPZihnZXRKb2luSW5mbyhkLCBzdGVwLCBcImFuaW1TZXRcIikpID49IDBcbiAgICAgICAgKVxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dERhdGEsXG4gICAgICAgIGN1cnJEYXRhOiBpRGF0YSxcbiAgICAgICAgY29tcHV0ZURhdHVtSWQ6IGNvbXB1dGVJZCxcbiAgICAgICAgcHJlRmV0Y2hDdXJyRGF0YVxuICAgICAgfTtcbiAgICB9XG4gICAgLy8gV2hlbiB0aGVyZSBpcyBubyBkYXRhIGNoYW5nZVxuICAgIGNvbXB1dGVJZCA9IGNvbXB1dGVJZE1ha2VyKG51bGwpO1xuICAgIGNvbnN0IHNhbWVEYXRhID0gaURhdGEubWFwKChkLCBpKSA9PiB7XG4gICAgICBzZXRKb2luSW5mbyhkLCBzdGVwLCB7IGFuaW1TZXQ6IFwidXBkYXRlXCIsIGpvaW5LZXk6IGNvbXB1dGVJZChkLGkpIH0pO1xuICAgICAgcmV0dXJuIGQ7XG4gICAgfSk7XG5cbiAgICBpZiAoaXNHcm91cGluZ01hcmt0eXBlcy5pbml0aWFsICE9PSBpc0dyb3VwaW5nTWFya3R5cGVzLmZpbmFsKSB7XG4gICAgICAvLyBXaGVuIHRoZSBtYXJrdHlwZSBjaGFuZ2VzIGJldHdlZW4gYXJlYS9saW5lIHRvIHRoZSBvdGhlcnMuXG4gICAgICBsZXQgZ3JvdXBlZERhdGE7IGxldCB1bnBhY2tlZERhdGE7XG4gICAgICBpZiAoaXNHcm91cGluZ01hcmt0eXBlcy5pbml0aWFsKSB7XG4gICAgICAgIHVucGFja2VkRGF0YSA9IHVucGFja0RhdGEoaURhdGEpO1xuICAgICAgICB1bnBhY2tlZERhdGEubWFwKChkLCBpKSA9PiB7XG4gICAgICAgICAgc2V0Sm9pbkluZm8oZCwgc3RlcCwgeyBhbmltU2V0OiBcInVwZGF0ZVwiLCBqb2luS2V5OiBjb21wdXRlSWQoZCxpKSB9KTtcbiAgICAgICAgICByZXR1cm4gZDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmV4dERhdGE6IHVucGFja2VkRGF0YSwgY3VyckRhdGE6IGlEYXRhLFxuICAgICAgICAgIGNvbXB1dGVEYXR1bUlkOiBjb21wdXRlSWQsXG4gICAgICAgICAgZ3JvdXBlZERhdGE6IGlEYXRhLFxuICAgICAgICAgIHVucGFja2VkRGF0YTogdW5wYWNrZWREYXRhXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBncm91cGVkRGF0YSA9IGZhY2V0RGF0YShpRGF0YSwgY2hhbmdlLmZpbmFsLnBhcmVudC5mcm9tID8gY2hhbmdlLmZpbmFsLnBhcmVudC5mcm9tLmZhY2V0IDogdW5kZWZpbmVkKTtcbiAgICAgIGdyb3VwZWREYXRhLm1hcCgoZCwgaSkgPT4ge1xuICAgICAgICBzZXRKb2luSW5mbyhkLCBzdGVwLCB7IGFuaW1TZXQ6IFwidXBkYXRlXCIsIGpvaW5LZXk6IGNvbXB1dGVJZChkLGkpIH0pO1xuICAgICAgICByZXR1cm4gZDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dERhdGE6IGdyb3VwZWREYXRhLCBjdXJyRGF0YTogaURhdGEsXG4gICAgICAgIGNvbXB1dGVEYXR1bUlkOiBjb21wdXRlSWQsXG4gICAgICAgIGdyb3VwZWREYXRhLFxuICAgICAgICB1bnBhY2tlZERhdGE6IGlEYXRhXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBuZXh0RGF0YTogc2FtZURhdGEsXG4gICAgICBjdXJyRGF0YTogc2FtZURhdGEsXG4gICAgICBjb21wdXRlRGF0dW1JZDogY29tcHV0ZUlkXG4gICAgfTtcbiAgfVxuICBpZiAoY2hhbmdlLmNvbXBUeXBlID09PSBcInZpZXdcIikge1xuICAgIHJldHVybiB7IG5leHREYXRhOiBlVmlldy5fcnVudGltZS5kYXRhLnJvb3QudmFsdWVzLnZhbHVlWzBdIH07XG4gIH1cbiAgcmV0dXJuIGlEYXRhO1xufVxuZnVuY3Rpb24gam9pblRoZW0oaURhdGEsIGZEYXRhLCBjb21wdXRlSWQsIHN0ZXApIHtcbiAgY29uc3QgdXBkYXRlRGF0YSA9IHsgaW5pdGlhbDogW10sIGZpbmFsOiBbXSB9O1xuICBjb25zdCBlbnRlckRhdGEgPSBbXTtcbiAgY29uc3QgZXhpdERhdGEgPSBbXTtcblxuICBjb25zdCB0YWtlbkNoZWNrZXIgPSBuZXcgQXJyYXkoZkRhdGEubGVuZ3RoKTtcbiAgdGFrZW5DaGVja2VyLmZpbGwoZmFsc2UpO1xuICBpRGF0YS5mb3JFYWNoKChpRGF0dW0sIGkpID0+IHtcbiAgICBjb25zdCBpZCA9IGNvbXB1dGVJZChpRGF0dW0sIGkpO1xuICAgIGNvbnN0IGZvdW5kSW5kZXggPSBmRGF0YS5maW5kSW5kZXgoXG4gICAgICAoZkRhdHVtLCBqKSA9PiBjb21wdXRlSWQoZkRhdHVtLCBqKSA9PT0gaWRcbiAgICApO1xuICAgIGNvbnN0IGZvdW5kID0gZm91bmRJbmRleCA+PSAwID8gZkRhdGFbZm91bmRJbmRleF0gOiBudWxsO1xuXG4gICAgaWYgKGZvdW5kKSB7XG4gICAgICBjb25zdCBpbmZvID0geyBhbmltU2V0OiBcInVwZGF0ZVwiLCBqb2luS2V5OiBpZCB9O1xuICAgICAgc2V0Sm9pbkluZm8oZm91bmQsIHN0ZXAsIGluZm8pO1xuICAgICAgc2V0Sm9pbkluZm8oaURhdHVtLCBzdGVwLCBpbmZvKTtcbiAgICAgIGNvbnN0IGV4dGVuZGVkSURhdHVtID0geyAuLi5mb3VuZC5kYXR1bSwgLi4uaURhdHVtLmRhdHVtIH07XG4gICAgICBjb25zdCBleHRlbmRlZEZEYXR1bSA9IHsgLi4uaURhdHVtLmRhdHVtLCAuLi5mb3VuZC5kYXR1bSB9O1xuICAgICAgaURhdHVtLmRhdHVtID0gZXh0ZW5kZWRJRGF0dW07XG4gICAgICBmb3VuZC5kYXR1bSA9IGV4dGVuZGVkRkRhdHVtO1xuICAgICAgdXBkYXRlRGF0YS5maW5hbC5wdXNoKGZvdW5kKTtcbiAgICAgIHVwZGF0ZURhdGEuaW5pdGlhbC5wdXNoKGlEYXR1bSk7XG5cbiAgICAgIHRha2VuQ2hlY2tlcltmb3VuZEluZGV4XSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldEpvaW5JbmZvKGlEYXR1bSwgc3RlcCwgeyBhbmltU2V0OiBcImV4aXRcIiwgam9pbktleTogaWQgfSk7XG4gICAgICBleGl0RGF0YS5wdXNoKGlEYXR1bSk7XG4gICAgfVxuICB9KTtcbiAgdGFrZW5DaGVja2VyLmZvckVhY2goKHRha2VuLCBpKSA9PiB7XG4gICAgaWYgKCF0YWtlbikge1xuICAgICAgc2V0Sm9pbkluZm8oZkRhdGFbaV0sIHN0ZXAsIHtcbiAgICAgICAgYW5pbVNldDogXCJlbnRlclwiLFxuICAgICAgICBqb2luS2V5OiBjb21wdXRlSWQoZkRhdGFbaV0sIGkpXG4gICAgICB9KTtcbiAgICAgIGVudGVyRGF0YS5wdXNoKGZEYXRhW2ldKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgZW50ZXI6IGVudGVyRGF0YSxcbiAgICB1cGRhdGU6IHVwZGF0ZURhdGEsXG4gICAgZXhpdDogZXhpdERhdGFcbiAgfTtcbn1cbmZ1bmN0aW9uIGF0dGFjaEFnZ0RhdGEoYWdnRGF0YSwgcmF3RGF0YSwgYWdnSWQsIGFnZykge1xuICByYXdEYXRhLmZvckVhY2goKHJhd0RhdHVtLCBpKSA9PiB7XG4gICAgYWdnRGF0YS5mb3JFYWNoKChhZ2dEYXR1bSwgaikgPT4ge1xuICAgICAgaWYgKGFnZ0lkKHJhd0RhdHVtLCBpKSA9PT0gYWdnSWQoYWdnRGF0dW0sIGopKSB7XG4gICAgICAgIGFnZy5maWVsZHMuZm9yRWFjaCgoZiwgZl9pKSA9PiB7XG4gICAgICAgICAgcmF3RGF0dW0uZGF0dW1bYWdnLmFzW2ZfaV1dID0gYWdnRGF0dW0uZGF0dW1bYWdnLmFzW2ZfaV1dO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldEpvaW5JbmZvKGQsIHN0ZXAsIHByb3ApIHtcbiAgcmV0dXJuIGQuX19nZW1pbmlfX1tzdGVwLnN0ZXBJZF1cbiAgICA/IGQuX19nZW1pbmlfX1tzdGVwLnN0ZXBJZF1bcHJvcF1cbiAgICA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gYXBwZW5kUG9zdGZpeChjb21wdXRlSWQsIHBvc3RGaXgpIHtcbiAgcmV0dXJuIChkLCBpKSA9PiB7XG4gICAgcmV0dXJuIGNvbXB1dGVJZChkLCBpKSArIHBvc3RGaXg7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldEFnZ3JlZ2F0ZShjaGFuZ2UsIHJhd0luZm8pIHtcbiAgY29uc3QgYWdncmVnYXRlID0ge307XG4gIGlmICghY2hhbmdlLmluaXRpYWwgfHwgIWNoYW5nZS5maW5hbCkge1xuICAgIHJldHVybiBhZ2dyZWdhdGU7XG4gIH1cbiAgY29uc3Qgc1NwZWMgPSByYXdJbmZvLnNWaXMuc3BlYztcbiAgY29uc3QgZVNwZWMgPSByYXdJbmZvLmVWaXMuc3BlYztcblxuICBjb25zdCBkYXRhTmFtZSA9IGNvbXBTcGVjID0+IHtcbiAgICByZXR1cm4gY29tcHV0ZUhhc0ZhY2V0KGNvbXBTcGVjKVxuICAgICAgPyBjb21wU3BlYy5wYXJlbnQuZnJvbS5mYWNldC5kYXRhXG4gICAgICA6IGNvbXBTcGVjLmZyb20uZGF0YTtcbiAgfTtcblxuICBjb25zdCBkYXRhU291cmNlX2YgPSBlU3BlYy5kYXRhLmZpbmQoXG4gICAgZHNldCA9PiBkc2V0Lm5hbWUgPT09IGRhdGFOYW1lKGNoYW5nZS5maW5hbClcbiAgKTtcbiAgaWYgKGRhdGFTb3VyY2VfZi50cmFuc2Zvcm0pIHtcbiAgICBhZ2dyZWdhdGUuZmluYWwgPSBkYXRhU291cmNlX2YudHJhbnNmb3JtLmZpbmQoXG4gICAgICB0cnNmbSA9PiB0cnNmbS50eXBlID09PSBcImFnZ3JlZ2F0ZVwiXG4gICAgKTtcbiAgfVxuICBjb25zdCBkYXRhU291cmNlX2kgPSBzU3BlYy5kYXRhLmZpbmQoXG4gICAgZHNldCA9PiBkc2V0Lm5hbWUgPT09IGRhdGFOYW1lKGNoYW5nZS5pbml0aWFsKVxuICApO1xuICBpZiAoZGF0YVNvdXJjZV9pLnRyYW5zZm9ybSkge1xuICAgIGFnZ3JlZ2F0ZS5pbml0aWFsID0gZGF0YVNvdXJjZV9pLnRyYW5zZm9ybS5maW5kKFxuICAgICAgdHJzZm0gPT4gdHJzZm0udHlwZSA9PT0gXCJhZ2dyZWdhdGVcIlxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGFnZ3JlZ2F0ZTtcbn1cblxuZnVuY3Rpb24gc2V0Sm9pbkluZm8oZGF0dW0sIHN0ZXAsIGluZm8pIHtcbiAgZGF0dW0uX19nZW1pbmlfXyA9IGRhdHVtLl9fZ2VtaW5pX18gfHwge307XG4gIGRhdHVtLl9fZ2VtaW5pX19bc3RlcC5zdGVwSWRdID0gZGF0dW0uX19nZW1pbmlfX1tzdGVwLnN0ZXBJZF0gfHwge307XG4gIE9iamVjdC5hc3NpZ24oZGF0dW0uX19nZW1pbmlfX1tzdGVwLnN0ZXBJZF0sIGluZm8pO1xufVxuXG5leHBvcnQgeyBqb2luRGF0YSwgaW5pdGlhbERhdGEsIGdldEFnZ3JlZ2F0ZSB9O1xuIiwiaW1wb3J0IHsgY29weSB9IGZyb20gXCIuLi8uLi8uLi91dGlsL3V0aWxcIjtcbmltcG9ydCAqIGFzIHZlZ2EgZnJvbSBcInZlZ2FcIjtcbmZ1bmN0aW9uIGRhdGFQcmVzZXJ2ZWRTY2FsZShzU3BlYywgZVNwZWMsIHNjTmFtZSkge1xuICBjb25zdCB0ZW1wU3BlYyA9IGNvcHkoZVNwZWMpO1xuICBjb25zdCBzY2FsZVNwZWMgPSB0ZW1wU3BlYy5zY2FsZXMuZmluZChzYyA9PiBzYy5uYW1lID09PSBzY05hbWUpO1xuICBpZiAoc2NhbGVTcGVjLmRvbWFpbi5kYXRhKSB7XG4gICAgY29uc3QgaW5kZXggPSB0ZW1wU3BlYy5kYXRhLmZpbmRJbmRleChcbiAgICAgIGQgPT4gZC5uYW1lID09PSBzY2FsZVNwZWMuZG9tYWluLmRhdGFcbiAgICApO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB0ZW1wU3BlYy5kYXRhLnNwbGljZShcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIDEsXG4gICAgICAgIHNTcGVjLmRhdGEuZmluZChkID0+IGQubmFtZSA9PT0gc2NhbGVTcGVjLmRvbWFpbi5kYXRhKVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgdGVtcFZpZXcgPSBuZXcgdmVnYS5WaWV3KHZlZ2EucGFyc2UodGVtcFNwZWMpLCB7XG4gICAgcmVuZGVyZXI6IFwibm9uZVwiXG4gIH0pLnJ1bigpO1xuICByZXR1cm4gdGVtcFZpZXcuX3J1bnRpbWUuc2NhbGVzW3NjTmFtZV0udmFsdWU7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVLZXB0RW5jb2RlKG1hbnVhbEVuY29kZSwgcmVmZXJlbmNlRW5jb2RlLCBzZXQpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG1hbnVhbEVuY29kZSAmJiBtYW51YWxFbmNvZGVbc2V0XSA/IG1hbnVhbEVuY29kZVtzZXRdIDoge30pXG4gICAgLmZpbHRlcihhdHRyID0+IG1hbnVhbEVuY29kZVtzZXRdW2F0dHJdID09PSBmYWxzZSlcbiAgICAucmVkdWNlKChrZXB0RW5jb2RlLCBhdHRyKSA9PiB7XG4gICAgICBrZXB0RW5jb2RlW2F0dHJdID0gcmVmZXJlbmNlRW5jb2RlW3NldF1bYXR0cl07XG4gICAgICByZXR1cm4ga2VwdEVuY29kZTtcbiAgICB9LCB7fSk7XG59XG5cblxuZnVuY3Rpb24gcmVwbGFjZVBvc2l0aW9uQXR0cnModGFyZ2V0TWFya3R5cGUsIHRhcmdldEVuY29kZSwgcmVmZXJlbmNlRW5jb2RlKSB7XG4gIGNvbnN0IGVuY29kZSA9IE9iamVjdC5hc3NpZ24oe30sIHRhcmdldEVuY29kZSk7XG4gIGNvbnN0IFBPU0lUSU9OX0FUVFJTID0gW1wieFwiLCBcIngyXCIsIFwieGNcIiwgXCJ3aWR0aFwiLCBcInlcIiwgXCJ5MlwiLCBcInljXCIsIFwiaGVpZ2h0XCJdO1xuICBjb25zdCByZXBsYWNlUnVsZXMgPSB7XG4gICAgcmVjdDogW1xuICAgICAge3JlcGxhY2VCeTogW1wieFwiLCBcIngyXCJdLCB9LFxuICAgICAge3JlcGxhY2VCeTogW1wieFwiLCBcIndpZHRoXCJdLCB9LFxuICAgICAge3JlcGxhY2VCeTogW1wieGNcIiwgXCJ3aWR0aFwiXSwgcmVtb3ZlOiBbXCJ4XCJdIH0sXG4gICAgICB7cmVwbGFjZUJ5OiBbXCJ5XCIsIFwieTJcIl0sIH0sXG4gICAgICB7cmVwbGFjZUJ5OiBbXCJ5XCIsIFwiaGVpZ2h0XCJdLCB9LFxuICAgICAge3JlcGxhY2VCeTogW1wieWNcIiwgXCJoZWlnaHRcIl0sIHJlbW92ZTogW1wieVwiXSB9XG4gICAgXSxcbiAgICBhcmVhOiBbXG4gICAgICB7cmVwbGFjZUJ5OiBbXCJ4XCIsIFwieDJcIiwgXCJ5XCJdLCByZW1vdmU6IFwiKlwiIH0sXG4gICAgICB7cmVwbGFjZUJ5OiBbXCJ4XCIsIFwid2lkdGhcIiwgXCJ5XCJdLCByZW1vdmU6IFwiKlwiIH0sXG4gICAgICB7cmVwbGFjZUJ5OiBbXCJ4Y1wiLCBcIndpZHRoXCIsIFwieVwiXSwgcmVtb3ZlOiBcIipcIiB9LFxuICAgICAge3JlcGxhY2VCeTogW1wieVwiLCBcInkyXCIsIFwieFwiXSwgcmVtb3ZlOiBcIipcIiB9LFxuICAgICAge3JlcGxhY2VCeTogW1wieVwiLCBcImhlaWdodFwiLCBcInhcIl0sIHJlbW92ZTogXCIqXCIgfSxcbiAgICAgIHtyZXBsYWNlQnk6IFtcInljXCIsIFwiaGVpZ2h0XCIsIFwieFwiXSwgcmVtb3ZlOiBcIipcIiB9LFxuICAgICAge3JlcGxhY2VCeTogW1wieFwiLCBcIngyXCIsIFwieWNcIl0sIHJlbW92ZTogXCIqXCIgfSxcbiAgICAgIHtyZXBsYWNlQnk6IFtcInhcIiwgXCJ3aWR0aFwiLCBcInljXCJdLCByZW1vdmU6IFwiKlwiIH0sXG4gICAgICB7cmVwbGFjZUJ5OiBbXCJ4Y1wiLCBcIndpZHRoXCIsIFwieWNcIl0sIHJlbW92ZTogXCIqXCIgfSxcbiAgICAgIHtyZXBsYWNlQnk6IFtcInlcIiwgXCJ5MlwiLCBcInhjXCJdLCByZW1vdmU6IFwiKlwiIH0sXG4gICAgICB7cmVwbGFjZUJ5OiBbXCJ5XCIsIFwiaGVpZ2h0XCIsIFwieGNcIl0sIHJlbW92ZTogXCIqXCIgfSxcbiAgICAgIHtyZXBsYWNlQnk6IFtcInljXCIsIFwiaGVpZ2h0XCIsIFwieGNcIl0sIHJlbW92ZTogXCIqXCIgfVxuICAgIF0sXG4gICAgZGVmYXVsdDogW1xuICAgICAge3JlcGxhY2VCeTogW1wieFwiXSB9LFxuICAgICAge3JlcGxhY2VCeTogW1wieGNcIl0sIHJlbW92ZTogW1wieFwiXSB9LFxuICAgICAge3JlcGxhY2VCeTogW1wieVwiXSB9LFxuICAgICAge3JlcGxhY2VCeTogW1wieWNcIl0sIHJlbW92ZTogW1wieVwiXSB9XG4gICAgXVxuICB9O1xuICBsZXQgcnVsZXMgPSByZXBsYWNlUnVsZXNbdGFyZ2V0TWFya3R5cGVdIHx8IHJlcGxhY2VSdWxlcy5kZWZhdWx0O1xuXG4gIHJ1bGVzLmZvckVhY2gocnVsZSA9PiB7XG4gICAgY29uc3QgaGFzQWxsID0gcnVsZS5yZXBsYWNlQnkucmVkdWNlKChoYXNBbGwsIGF0dHIpID0+IHtcbiAgICAgIHJldHVybiBoYXNBbGwgJiYgcmVmZXJlbmNlRW5jb2RlW2F0dHJdO1xuICAgIH0sIHRydWUpO1xuICAgIGlmIChoYXNBbGwpIHtcbiAgICAgIHJ1bGUucmVwbGFjZUJ5LmZvckVhY2goYXR0ciA9PiB7XG4gICAgICAgIGVuY29kZVthdHRyXSA9IHJlZmVyZW5jZUVuY29kZVthdHRyXTtcbiAgICAgIH0pO1xuICAgICAgbGV0IHJlbW92ZWRBdHRycyA9IHJ1bGUucmVtb3ZlIHx8IFtdO1xuICAgICAgaWYgKHJ1bGUucmVtb3ZlID09PSBcIipcIikge1xuICAgICAgICByZW1vdmVkQXR0cnMgPSBQT1NJVElPTl9BVFRSUy5maWx0ZXIoYXR0ciA9PiBydWxlLnJlcGxhY2VCeS5pbmRleE9mKGF0dHIpIDwgMCk7XG4gICAgICB9XG4gICAgICByZW1vdmVkQXR0cnMuZm9yRWFjaChhdHRyID0+IHtcbiAgICAgICAgZGVsZXRlIGVuY29kZVthdHRyXTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cblxuICByZXR1cm4gZW5jb2RlO1xufVxuXG5leHBvcnQgeyBkYXRhUHJlc2VydmVkU2NhbGUsIGNvbXB1dGVLZXB0RW5jb2RlLCByZXBsYWNlUG9zaXRpb25BdHRycyB9OyIsImltcG9ydCB7IGRhdGFQcmVzZXJ2ZWRTY2FsZSwgY29tcHV0ZUtlcHRFbmNvZGUsIHJlcGxhY2VQb3NpdGlvbkF0dHJzIH0gZnJvbSBcIi4vdXRpbFwiO1xuaW1wb3J0IHsgY29weTIsIGNvcHksIGdldCB9IGZyb20gXCIuLi8uLi8uLi91dGlsL3V0aWxcIjtcbmltcG9ydCB7IERFRkFVTFRfRU5DT0RFLCBERUZBVUxUX1NUWUxFIH0gZnJvbSBcIi4uLy4uLy4uL2RlZmF1bHRcIjtcbmltcG9ydCB7IGNvbXB1dGVIYXNGYWNldCB9IGZyb20gXCIuLi91dGlsXCI7XG5pbXBvcnQgeyBnZXRBZ2dyZWdhdGUgfSBmcm9tIFwiLi4vZGF0YUpvaW5cIjtcblxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZShyYXdJbmZvLCBzdGVwLCBsYXN0U3RhdGUpIHtcbiAgY29uc3QgZVZpZXcgPSByYXdJbmZvLmVWaXMudmlldztcbiAgY29uc3QgeyBjaGFuZ2UgfSA9IHN0ZXA7XG4gIGNvbnN0IGlzQWRkID0gIWNoYW5nZS5pbml0aWFsICYmICEhY2hhbmdlLmZpbmFsO1xuICBjb25zdCBpc1JlbW92ZSA9ICEhY2hhbmdlLmluaXRpYWwgJiYgIWNoYW5nZS5maW5hbDtcblxuICBjb25zdCBtYW51YWxFbmNvZGUgPSBjaGFuZ2UuZW5jb2RlO1xuICBsZXQgZG9FbnRlciA9ICFpc1JlbW92ZSAmJiAoaXNBZGQgfHwgY2hhbmdlLmRhdGEgIT09IGZhbHNlKTtcbiAgbGV0IGRvRXhpdCA9ICFpc0FkZCAmJiAoaXNSZW1vdmUgfHwgY2hhbmdlLmRhdGEgIT09IGZhbHNlKTtcblxuICBpZiAoY2hhbmdlLmRhdGEpIHtcbiAgICBkb0VudGVyID0gY2hhbmdlLmRhdGEuZW50ZXIgPT09IGZhbHNlID8gZmFsc2UgOiBkb0VudGVyO1xuICAgIGRvRXhpdCA9IGNoYW5nZS5kYXRhLmV4aXQgPT09IGZhbHNlID8gZmFsc2UgOiBkb0V4aXQ7XG4gIH1cblxuICBpZiAoXG4gICAgIWlzQWRkICYmXG4gICAgIWlzUmVtb3ZlICYmXG4gICAgY2hhbmdlLmluaXRpYWwuZnJvbS5kYXRhICE9PSBjaGFuZ2UuZmluYWwuZnJvbS5kYXRhXG4gICkge1xuICAgIGlmICghY29tcHV0ZUhhc0ZhY2V0KGNoYW5nZS5maW5hbCkgJiYgIWNvbXB1dGVIYXNGYWNldChjaGFuZ2UuaW5pdGlhbCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBEYXRhIHNvdXJjZSBvZiB0aGlzIG1hcmsgKCR7Y2hhbmdlLmNvbXBOYW1lfSkgaGFzIGNoYW5nZWQgdW5leHBlY3RlZGx5IWBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgYWdncmVnYXRlcyA9IHtcbiAgICBpbml0aWFsOiBsYXN0U3RhdGUuYWdncmVnYXRlLFxuICAgIGZpbmFsOiBsYXN0U3RhdGUuYWdncmVnYXRlXG4gIH07XG5cbiAgaWYgKGNoYW5nZS5kYXRhKSB7XG4gICAgLy8gYWdncmVnYXRlcy5kb25lID0gdHJ1ZTtcbiAgICBhZ2dyZWdhdGVzLmZpbmFsID0gZ2V0QWdncmVnYXRlKGNoYW5nZSwgcmF3SW5mbykuZmluYWw7XG4gIH1cblxuICBjb25zdCBtYXJrdHlwZXMgPSB7XG4gICAgaW5pdGlhbDogbGFzdFN0YXRlLm1hcmt0eXBlLCAvLyBjaGFuZ2UuaW5pdGlhbCA/IGNoYW5nZS5pbml0aWFsLnR5cGUgOiB1bmRlZmluZWQsXG4gICAgZmluYWw6IGNoYW5nZS5maW5hbCA/IGNoYW5nZS5maW5hbC50eXBlIDogdW5kZWZpbmVkXG4gIH07XG5cbiAgaWYgKFxuICAgIG1hcmt0eXBlcy5pbml0aWFsICYmXG4gICAgbWFya3R5cGVzLmZpbmFsICYmXG4gICAgbWFya3R5cGVzLmluaXRpYWwgIT09IG1hcmt0eXBlcy5maW5hbFxuICApIHtcbiAgICBjb25zb2xlLmxvZyhcIm1hcmsgdHJhbnNmb3JtIGNoYW5nZSFcIik7XG4gICAgaWYgKGNoYW5nZS5tYXJrdHlwZSA9PT0gZmFsc2UpIHtcbiAgICAgIG1hcmt0eXBlcy5maW5hbCA9IG1hcmt0eXBlcy5pbml0aWFsO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhc0ZhY2V0ID0ge1xuICAgIGluaXRpYWw6IGxhc3RTdGF0ZS5oYXNGYWNldCxcbiAgICBmaW5hbDogbGFzdFN0YXRlLmhhc0ZhY2V0XG4gIH07XG4gIGlmICgoY2hhbmdlLmRhdGEgfHwgaXNBZGQgfHwgaXNSZW1vdmUpICYmIGNoYW5nZS5tYXJrdHlwZSAhPT0gZmFsc2UpIHtcbiAgICBoYXNGYWNldC5maW5hbCA9IGNvbXB1dGVIYXNGYWNldChjaGFuZ2UuZmluYWwpO1xuICB9XG5cbiAgY29uc3Qgc2NhbGVzID0ge1xuICAgIGluaXRpYWw6IGxhc3RTdGF0ZS5zY2FsZSxcbiAgICBmaW5hbDogY29weTIobGFzdFN0YXRlLnNjYWxlKVxuICB9O1xuICBjb25zdCBlbmNvZGVzID0ge1xuICAgIGluaXRpYWw6IE9iamVjdC5hc3NpZ24oeyB1cGRhdGU6IHt9IH0sIGNvcHkobGFzdFN0YXRlLmVuY29kZSkpLFxuICAgIGZpbmFsOiBPYmplY3QuYXNzaWduKHsgdXBkYXRlOiB7fSB9LCBjb3B5KGxhc3RTdGF0ZS5lbmNvZGUpKVxuICB9O1xuICBjb25zdCBzaWduYWxzID0ge1xuICAgIGluaXRpYWw6IGxhc3RTdGF0ZS5zaWduYWxcbiAgfTtcbiAgY29uc3Qgc2lnbmFsc0ZpbmFsID0gW1wid2lkdGhcIiwgXCJoZWlnaHRcIiwgXCJwYWRkaW5nXCJdLnJlZHVjZSgoYWNjLCBzZ05hbWUpID0+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGFuZ2Uuc2lnbmFsKSkge1xuICAgICAgaWYgKGNoYW5nZS5zaWduYWwuaW5kZXhPZihzZ05hbWUpID49IDApIHtcbiAgICAgICAgYWNjW3NnTmFtZV0gPSBlVmlldy5zaWduYWwoc2dOYW1lKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuICAgIGlmIChjaGFuZ2Uuc2lnbmFsID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG4gICAgYWNjW3NnTmFtZV0gPSBlVmlldy5zaWduYWwoc2dOYW1lKTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIHNpZ25hbHMuZmluYWwgPSBPYmplY3QuYXNzaWduKHt9LCBzaWduYWxzLmluaXRpYWwsIHNpZ25hbHNGaW5hbCk7XG5cbiAgaWYgKGNoYW5nZS5zY2FsZSAhPT0gZmFsc2UpIHtcbiAgICBsZXQgZmluYWxTY2FsZU5hbWVzID0gW107XG4gICAgaWYgKGNoYW5nZS5zY2FsZSA9PT0gdHJ1ZSB8fCBpc0FkZCkge1xuICAgICAgZmluYWxTY2FsZU5hbWVzID0gT2JqZWN0LmtleXMoZVZpZXcuX3J1bnRpbWUuc2NhbGVzKTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoY2hhbmdlLnNjYWxlKSkge1xuICAgICAgZmluYWxTY2FsZU5hbWVzID0gY2hhbmdlLnNjYWxlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNoYW5nZS5zY2FsZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgZmluYWxTY2FsZU5hbWVzID0gT2JqZWN0LmtleXMoY2hhbmdlLnNjYWxlKTtcbiAgICB9XG4gICAgZmluYWxTY2FsZU5hbWVzLmZvckVhY2goc2NOYW1lID0+IHtcbiAgICAgIGlmIChjaGFuZ2Uuc2NhbGVbc2NOYW1lXSAmJiBjaGFuZ2Uuc2NhbGVbc2NOYW1lXS5kYXRhID09PSBmYWxzZSkge1xuICAgICAgICBzY2FsZXMuZmluYWxbc2NOYW1lXSA9IGRhdGFQcmVzZXJ2ZWRTY2FsZShcbiAgICAgICAgICByYXdJbmZvLnNWaXMuc3BlYyxcbiAgICAgICAgICByYXdJbmZvLmVWaXMuc3BlYyxcbiAgICAgICAgICBzY05hbWVcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNjYWxlcy5maW5hbFtzY05hbWVdID0gZVZpZXcuX3J1bnRpbWUuc2NhbGVzW3NjTmFtZV1cbiAgICAgICAgICA/IGVWaWV3Ll9ydW50aW1lLnNjYWxlc1tzY05hbWVdLnZhbHVlXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNoYW5uZWwgPSBPYmplY3Qua2V5cyhlbmNvZGVzLmZpbmFsLnVwZGF0ZSkuZmluZChcbiAgICAgICAga2V5ID0+IGtleS5zY2FsZSA9PT0gc2NOYW1lXG4gICAgICApO1xuICAgICAgZW5jb2Rlcy5maW5hbC51cGRhdGVbY2hhbm5lbF0gPSBjaGFuZ2UuZmluYWxcbiAgICAgICAgPyBjb3B5KGNoYW5nZS5maW5hbC5lbmNvZGUudXBkYXRlW2NoYW5uZWxdKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChtYW51YWxFbmNvZGUgPT09IGZhbHNlKSB7XG4gICAgdGhyb3cgRXJyb3IoXCJJbnRlcnBvbGF0aW5nIGRhdGEgcmVxdWlyZXMgdG8gaW50ZXJwb2xhdGUgZW5jb2RlLlwiKTtcbiAgfVxuXG4gIGNvbnN0IHN0eWxlRW5jb2RlcyA9IHtcbiAgICBpbml0aWFsOiBjb3B5KGxhc3RTdGF0ZS5zdHlsZUVuY29kZSksXG4gICAgZmluYWw6IGNvcHkobGFzdFN0YXRlLnN0eWxlRW5jb2RlKVxuICB9O1xuICBpZiAoY2hhbmdlLm1hcmt0eXBlKSB7XG4gICAgc3R5bGVFbmNvZGVzLmZpbmFsID0gY2hhbmdlLmZpbmFsICYmIGNoYW5nZS5maW5hbC5zdHlsZVxuICAgICAgPyBERUZBVUxUX1NUWUxFW2NoYW5nZS5maW5hbC5zdHlsZV0gfHwge31cbiAgICAgIDoge307XG4gIH1cblxuICBjb25zdCBtYW51YWxFbmNvZGVFbnRlcldpdGhvdXRJbml0aWFsID0gbWFudWFsRW5jb2RlXG4gICAgPyBjb3B5KG1hbnVhbEVuY29kZS5lbnRlciB8fCB7fSlcbiAgICA6IHt9O1xuICBkZWxldGUgbWFudWFsRW5jb2RlRW50ZXJXaXRob3V0SW5pdGlhbC5pbml0aWFsO1xuXG4gIGVuY29kZXMuaW5pdGlhbC5lbnRlciA9IE9iamVjdC5hc3NpZ24oXG4gICAge30sXG4gICAgbGFzdFN0YXRlLmVuY29kZS51cGRhdGUsXG4gICAgREVGQVVMVF9FTkNPREUubWFyay5lbnRlcixcbiAgICBtYW51YWxFbmNvZGUgJiYgbWFudWFsRW5jb2RlLmVudGVyID8gbWFudWFsRW5jb2RlLmVudGVyLmluaXRpYWwgOiB7fVxuICApO1xuXG4gIGlmIChnZXQoY2hhbmdlLCBcImVuY29kZVwiLCBcImVudGVyXCIpID09PSBmYWxzZSkge1xuICAgIGVuY29kZXMuZmluYWwuZW50ZXIgPSBlbmNvZGVzLmluaXRpYWwuZW50ZXI7XG4gIH0gZWxzZSB7XG4gICAgZW5jb2Rlcy5maW5hbC5lbnRlciA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIERFRkFVTFRfRU5DT0RFLm1hcmtbbWFya3R5cGVzLmZpbmFsIHx8IG1hcmt0eXBlcy5pbml0aWFsXS51cGRhdGUsXG4gICAgICBzdHlsZUVuY29kZXMuZmluYWwsXG4gICAgICBjb3B5KGdldChjaGFuZ2UsIFwiZmluYWxcIiwgXCJlbmNvZGVcIiwgXCJ1cGRhdGVcIikgfHwge30pLFxuICAgICAgbWFudWFsRW5jb2RlID8gbWFudWFsRW5jb2RlRW50ZXJXaXRob3V0SW5pdGlhbCA6IHt9LFxuICAgICAgY29tcHV0ZUtlcHRFbmNvZGUobWFudWFsRW5jb2RlLCBlbmNvZGVzLmluaXRpYWwsIFwiZW50ZXJcIilcbiAgICApO1xuICB9XG5cbiAgZW5jb2Rlcy5pbml0aWFsLmV4aXQgPSBPYmplY3QuYXNzaWduKHt9LCBsYXN0U3RhdGUuZW5jb2RlLnVwZGF0ZSk7XG4gIGlmIChjaGFuZ2UuZW5jb2RlICYmIGNoYW5nZS5lbmNvZGUuZXhpdCA9PT0gZmFsc2UpIHtcbiAgICBlbmNvZGVzLmZpbmFsLmV4aXQgPSBlbmNvZGVzLmluaXRpYWwuZXhpdDtcbiAgfSBlbHNlIHtcbiAgICBlbmNvZGVzLmZpbmFsLmV4aXQgPSBPYmplY3QuYXNzaWduKFxuICAgICAge30sXG4gICAgICBERUZBVUxUX0VOQ09ERS5tYXJrW21hcmt0eXBlcy5pbml0aWFsIHx8IG1hcmt0eXBlcy5maW5hbF0udXBkYXRlLFxuICAgICAgc3R5bGVFbmNvZGVzLmZpbmFsLFxuICAgICAgZG9FeGl0XG4gICAgICAgID8gY29weShcbiAgICAgICAgICBnZXQoY2hhbmdlLCBcImZpbmFsXCIsIFwiZW5jb2RlXCIsIFwidXBkYXRlXCIpIHx8XG4gICAgICAgICAgICAgIGdldChjaGFuZ2UsIFwiaW5pdGlhbFwiLCBcImVuY29kZVwiLCBcInVwZGF0ZVwiKVxuICAgICAgICApXG4gICAgICAgIDogY29weShcbiAgICAgICAgICBnZXQoY2hhbmdlLCBcImluaXRpYWxcIiwgXCJlbmNvZGVcIiwgXCJ1cGRhdGVcIikgfHxcbiAgICAgICAgICAgICAgZ2V0KGNoYW5nZSwgXCJmaW5hbFwiLCBcImVuY29kZVwiLCBcInVwZGF0ZVwiKVxuICAgICAgICApLFxuICAgICAgREVGQVVMVF9FTkNPREUubWFyay5leGl0LFxuICAgICAgbWFudWFsRW5jb2RlID8gbWFudWFsRW5jb2RlLmV4aXQgOiB7fSxcbiAgICAgIGNvbXB1dGVLZXB0RW5jb2RlKG1hbnVhbEVuY29kZSwgZW5jb2Rlcy5pbml0aWFsLCBcImV4aXRcIilcbiAgICApO1xuICB9XG5cbiAgaWYgKGNoYW5nZS5lbmNvZGUgJiYgY2hhbmdlLmVuY29kZS51cGRhdGUgPT09IGZhbHNlKSB7XG4gICAgZW5jb2Rlcy5maW5hbC51cGRhdGUgPSBlbmNvZGVzLmluaXRpYWwudXBkYXRlO1xuICB9IGVsc2Uge1xuICAgIGVuY29kZXMuZmluYWwudXBkYXRlID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHt9LFxuICAgICAgREVGQVVMVF9FTkNPREUubWFya1ttYXJrdHlwZXMuZmluYWwgfHwgbWFya3R5cGVzLmluaXRpYWxdLnVwZGF0ZSxcbiAgICAgIHN0eWxlRW5jb2Rlcy5maW5hbCxcbiAgICAgIGNvcHkoZ2V0KGNoYW5nZSwgXCJmaW5hbFwiLCBcImVuY29kZVwiLCBcInVwZGF0ZVwiKSB8fCB7fSksXG4gICAgICBtYW51YWxFbmNvZGUgPyBtYW51YWxFbmNvZGUudXBkYXRlIDoge30sXG4gICAgICBjb21wdXRlS2VwdEVuY29kZShtYW51YWxFbmNvZGUsIGVuY29kZXMuaW5pdGlhbCwgXCJ1cGRhdGVcIilcbiAgICApO1xuICB9XG5cbiAgLy8gV2hlbiBtYXJrdHlwZSBjaGFuZ2VzXG4gIC8vIHxTX2V4aXQgIHwgLT4gfCAgICAgICAgICB8IGV4aXQhICAgICAgICAgICAgICAgICAoaW5pdGlhbC5leGl0ICAtPiBmaW5hbC5leGl0KVxuICAvLyB8U191cGRhdGV8IC0+IHwgICAgICAgICAgfCB1cGRhdGUgdmlhIGZhZGluZyBvdXQgKGluaXRpYWwudXBkYXRlIC0+IGluaXRpYWwuaW50ZXJtZWRpYXRlKVxuICAvLyB8ICAgICAgICB8IC0+IHwgRV91cGRhdGUgfCAmIGZhZGluZyBpbiAgICAgICAgICAgKGZpbmFsLmludGVybWVkaWF0ZSAtPiBmaW5hbC51cGRhdGUpXG4gIC8vIHwgICAgICAgIHwgLT4gfCBFX2VudGVyICB8IGVudGVyISAgICAgICAgICAgICAgICAoaW5pdGlhbC5lbnRlciAgLT4gZmluYWwuZW50ZXIpXG4gIGlmIChtYXJrdHlwZXMuZmluYWwgIT09IG1hcmt0eXBlcy5pbml0aWFsKSB7XG4gICAgZW5jb2Rlcy5pbml0aWFsLmludGVybWVkaWF0ZSA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIHJlcGxhY2VQb3NpdGlvbkF0dHJzKG1hcmt0eXBlcy5pbml0aWFsLCBlbmNvZGVzLmluaXRpYWwudXBkYXRlLCBlbmNvZGVzLmZpbmFsLnVwZGF0ZSksXG4gICAgICB7IG9wYWNpdHk6IHsgdmFsdWU6IDAgfSB9XG4gICAgKTtcblxuICAgIGVuY29kZXMuZmluYWwuaW50ZXJtZWRpYXRlID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHt9LFxuICAgICAgcmVwbGFjZVBvc2l0aW9uQXR0cnMobWFya3R5cGVzLmZpbmFsLCBlbmNvZGVzLmZpbmFsLnVwZGF0ZSwgZW5jb2Rlcy5pbml0aWFsLnVwZGF0ZSksXG4gICAgICB7IG9wYWNpdHk6IHsgdmFsdWU6IDAgfSB9XG4gICAgKTtcblxuICAgIGlmIChkb0VudGVyKSB7XG4gICAgICBlbmNvZGVzLmluaXRpYWwuZW50ZXIgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICB7fSxcbiAgICAgICAgcmVwbGFjZVBvc2l0aW9uQXR0cnMobWFya3R5cGVzLmZpbmFsLCBlbmNvZGVzLmZpbmFsLmVudGVyLCBlbmNvZGVzLmluaXRpYWwuZW50ZXIpLFxuICAgICAgICB7IG9wYWNpdHk6IHsgdmFsdWU6IDAgfSB9LFxuICAgICAgICBtYW51YWxFbmNvZGUgJiYgbWFudWFsRW5jb2RlLmVudGVyID8gbWFudWFsRW5jb2RlLmVudGVyLmluaXRpYWwgOiB7fVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGRvRXhpdCkge1xuICAgICAgZW5jb2Rlcy5maW5hbC5leGl0ID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAge30sXG4gICAgICAgIHJlcGxhY2VQb3NpdGlvbkF0dHJzKG1hcmt0eXBlcy5pbml0aWFsLCBlbmNvZGVzLmluaXRpYWwuZXhpdCwgZW5jb2Rlcy5maW5hbC5leGl0KSxcbiAgICAgICAgeyBvcGFjaXR5OiB7IHZhbHVlOiAwIH0gfSxcbiAgICAgICAgbWFudWFsRW5jb2RlID8gbWFudWFsRW5jb2RlLmV4aXQgOiB7fSxcbiAgICAgICAgY29tcHV0ZUtlcHRFbmNvZGUobWFudWFsRW5jb2RlLCBlbmNvZGVzLmluaXRpYWwsIFwiZXhpdFwiKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGlmICghYWdncmVnYXRlcy5pbml0aWFsICYmIGFnZ3JlZ2F0ZXMuZmluYWwgJiYgY2hhbmdlLmRhdGEgKSB7XG4gICAgLy8gd2hlbiBhZ2dyZWdhdGVcbiAgICBlbmNvZGVzLmZpbmFsLmV4aXQgPSBPYmplY3QuYXNzaWduKFxuICAgICAgIWNoYW5nZS5tYXJrdHlwZSA/IGVuY29kZXMuZmluYWwudXBkYXRlIDogcmVwbGFjZVBvc2l0aW9uQXR0cnMobWFya3R5cGVzLmluaXRpYWwsIGVuY29kZXMuZmluYWwuZXhpdCwgZW5jb2Rlcy5maW5hbC51cGRhdGUpLFxuICAgICAgeyBvcGFjaXR5OiB7IHZhbHVlOiAwIH0gfSxcbiAgICAgIG1hbnVhbEVuY29kZSA/IG1hbnVhbEVuY29kZS5leGl0IDoge30sXG4gICAgICBjb21wdXRlS2VwdEVuY29kZShtYW51YWxFbmNvZGUsIGVuY29kZXMuaW5pdGlhbCwgXCJleGl0XCIpLFxuICAgICk7XG5cbiAgICBlbmNvZGVzLmZpbmFsLnVwZGF0ZSA9IGNvcHkoZW5jb2Rlcy5maW5hbC5lbnRlcik7XG4gIH0gZWxzZSBpZiAoYWdncmVnYXRlcy5pbml0aWFsICYmICFhZ2dyZWdhdGVzLmZpbmFsICYmIGNoYW5nZS5kYXRhICkge1xuICAgIC8vIHdoZW4gZGlzYWdncmVnYXRlXG5cbiAgICBlbmNvZGVzLmluaXRpYWwuZW50ZXIgPSBPYmplY3QuYXNzaWduKFxuICAgICAge30sXG4gICAgICAhY2hhbmdlLm1hcmt0eXBlID8gZW5jb2Rlcy5pbml0aWFsLnVwZGF0ZSA6IHJlcGxhY2VQb3NpdGlvbkF0dHJzKG1hcmt0eXBlcy5maW5hbCwgZW5jb2Rlcy5pbml0aWFsLmVudGVyLCBlbmNvZGVzLmluaXRpYWwudXBkYXRlKSxcbiAgICAgIHsgb3BhY2l0eTogeyB2YWx1ZTogMCB9IH0sXG4gICAgICBtYW51YWxFbmNvZGUgJiYgbWFudWFsRW5jb2RlLmVudGVyID8gbWFudWFsRW5jb2RlLmVudGVyLmluaXRpYWwgOiB7fVxuICAgICk7XG5cbiAgICBlbmNvZGVzLmZpbmFsLnVwZGF0ZSA9IGNvcHkoZW5jb2Rlcy5maW5hbC5lbnRlcik7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGVuY29kZXMsXG4gICAgc2NhbGVzLFxuICAgIHNpZ25hbHMsXG4gICAgbWFya3R5cGVzLFxuICAgIGhhc0ZhY2V0LFxuICAgIGFnZ3JlZ2F0ZXMsXG4gICAgc3R5bGVFbmNvZGVzXG4gIH07XG59IiwiaW1wb3J0IHsgZGF0YVByZXNlcnZlZFNjYWxlLCBjb21wdXRlS2VwdEVuY29kZSB9IGZyb20gXCIuL3V0aWxcIjtcbmltcG9ydCB7IGNvcHkyLCBjb3B5LCBnZXQsIGRlZXBFcXVhbCB9IGZyb20gXCIuLi8uLi8uLi91dGlsL3V0aWxcIjtcbmltcG9ydCB7IERFRkFVTFRfRU5DT0RFIH0gZnJvbSBcIi4uLy4uLy4uL2RlZmF1bHRcIjtcbmltcG9ydCB7IGZpbmRDb21wIH0gZnJvbSBcIi4uLy4uLy4uL2FjdHVhdG9yL3V0aWxcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGUocmF3SW5mbywgc3RlcCwgbGFzdFN0YXRlKSB7XG4gIGNvbnN0IHsgY2hhbmdlIH0gPSBzdGVwO1xuICBjb25zdCBjb21wU3RhdGUgPSBsYXN0U3RhdGU7XG4gIGNvbnN0IGVWaWV3ID0gcmF3SW5mby5lVmlzLnZpZXc7XG4gIGNvbnN0IGlzUmVtb3ZlID0gIWNoYW5nZS5maW5hbDtcbiAgY29uc3QgaXNBZGQgPSAhY2hhbmdlLmluaXRpYWw7XG4gIGxldCBkb1RpY2tzO1xuICBsZXQgZG9MYWJlbHM7XG4gIGxldCBkb0F4aXNHO1xuICBsZXQgZG9UaXRsZTtcbiAgbGV0IGRvRG9tYWluO1xuICBsZXQgZG9HcmlkO1xuICBkb1RpY2tzID0gZG9MYWJlbHMgPSBkb0F4aXNHID0gZG9UaXRsZSA9IGRvRG9tYWluID0gZG9HcmlkID0gdHJ1ZTtcblxuICBpZiAoY2hhbmdlLmVuY29kZSA9PT0gZmFsc2UpIHtcbiAgICBkb1RpY2tzID0gZG9MYWJlbHMgPSBkb0F4aXNHID0gZG9UaXRsZSA9IGRvRG9tYWluID0gZG9HcmlkID0gZmFsc2U7XG4gIH0gZWxzZSBpZiAoY2hhbmdlLmVuY29kZSkge1xuICAgIGRvVGlja3MgPSAhKGNoYW5nZS5lbmNvZGUudGlja3MgPT09IGZhbHNlKTtcbiAgICBkb0xhYmVscyA9ICEoY2hhbmdlLmVuY29kZS5sYWJlbHMgPT09IGZhbHNlKTtcbiAgICBkb0F4aXNHID0gIShjaGFuZ2UuZW5jb2RlLmF4aXMgPT09IGZhbHNlKTtcbiAgICBkb1RpdGxlID0gIShjaGFuZ2UuZW5jb2RlLnRpdGxlID09PSBmYWxzZSk7XG4gICAgZG9HcmlkID0gIShjaGFuZ2UuZW5jb2RlLmdyaWQgPT09IGZhbHNlKTtcbiAgICBkb0RvbWFpbiA9ICEoY2hhbmdlLmVuY29kZS5kb21haW4gPT09IGZhbHNlKTtcbiAgfVxuXG4gIGNvbnN0IHNjTmFtZXMgPSB7XG4gICAgaW5pdGlhbDogY2hhbmdlLmluaXRpYWwgPyBjaGFuZ2UuaW5pdGlhbC5zY2FsZSA6IHVuZGVmaW5lZCxcbiAgICBmaW5hbDogY2hhbmdlLmZpbmFsID8gY2hhbmdlLmZpbmFsLnNjYWxlIDogdW5kZWZpbmVkXG4gIH07XG5cbiAgLy8gY29sbGVjdCB0aGUgc2NhbGUgb2JqZWN0cyB0byBzY2FsZSB0aGUgaW5pdGlhbC9maW5hbCB2YWx1ZXNcbiAgY29uc3Qgc2NhbGVzID0ge1xuICAgIGluaXRpYWw6IGNvbXBTdGF0ZS5zY2FsZSxcbiAgICBmaW5hbDogY29weTIoY29tcFN0YXRlLnNjYWxlKVxuICB9O1xuXG4gIGlmICghKGNoYW5nZS5zY2FsZSA9PT0gZmFsc2UpKSB7XG4gICAgaWYgKCFzY05hbWVzLmZpbmFsKSB7XG4gICAgICBzY2FsZXMuZmluYWwgPSB7fTtcbiAgICB9IGVsc2UgaWYgKGNoYW5nZS5zY2FsZSAmJiBjaGFuZ2Uuc2NhbGUuZGF0YSA9PT0gZmFsc2UpIHtcbiAgICAgIHNjYWxlcy5maW5hbFtzY05hbWVzLmZpbmFsXSA9IGRhdGFQcmVzZXJ2ZWRTY2FsZShcbiAgICAgICAgcmF3SW5mby5zVmlzLnNwZWMsXG4gICAgICAgIHJhd0luZm8uZVZpcy5zcGVjLFxuICAgICAgICBzY05hbWVzLmZpbmFsXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBzY2FsZXMuZmluYWxbc2NOYW1lcy5maW5hbF0gPSBlVmlldy5fcnVudGltZS5zY2FsZXNbc2NOYW1lcy5maW5hbF1cbiAgICAgICAgPyBlVmlldy5fcnVudGltZS5zY2FsZXNbc2NOYW1lcy5maW5hbF0udmFsdWVcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgbGV0IHNhbWVEb21haW5EaW1lbnNpb24gPSBnZXQoY2hhbmdlLCBcInNjYWxlXCIsIFwiZG9tYWluRGltZW5zaW9uXCIpO1xuICBpZiAodHlwZW9mIHNhbWVEb21haW5EaW1lbnNpb24gPT09IFwic3RyaW5nXCIpIHtcbiAgICBzYW1lRG9tYWluRGltZW5zaW9uID1cbiAgICAgIHNhbWVEb21haW5EaW1lbnNpb24gPT09IFwic2FtZVwiXG4gICAgICAgID8gdHJ1ZVxuICAgICAgICA6IHNhbWVEb21haW5EaW1lbnNpb24gPT09IFwiZGlmZlwiXG4gICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICB9XG4gIGlmIChpc1JlbW92ZSB8fCBpc0FkZCkge1xuICAgIHNhbWVEb21haW5EaW1lbnNpb24gPSBmYWxzZTtcbiAgfSBlbHNlIGlmIChzYW1lRG9tYWluRGltZW5zaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoY2hhbmdlLnNjYWxlID09PSBmYWxzZSkge1xuICAgICAgc2FtZURvbWFpbkRpbWVuc2lvbiA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNjYWxlRGVmcyA9IHtcbiAgICAgICAgaW5pdGlhbDogcmF3SW5mby5zVmlzLnNwZWMuc2NhbGVzLmZpbmQoXG4gICAgICAgICAgc2NhbGVEZWYgPT4gc2NhbGVEZWYubmFtZSA9PT0gc2NOYW1lcy5pbml0aWFsXG4gICAgICAgICksXG4gICAgICAgIGZpbmFsOiByYXdJbmZvLmVWaXMuc3BlYy5zY2FsZXMuZmluZChcbiAgICAgICAgICBzY2FsZURlZiA9PiBzY2FsZURlZi5uYW1lID09PSBzY05hbWVzLmZpbmFsXG4gICAgICAgIClcbiAgICAgIH07XG4gICAgICBzYW1lRG9tYWluRGltZW5zaW9uID0gZGVlcEVxdWFsKFxuICAgICAgICBzY2FsZURlZnMuaW5pdGlhbC5kb21haW4sXG4gICAgICAgIHNjYWxlRGVmcy5maW5hbC5kb21haW5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2lnbmFscyA9IHtcbiAgICBpbml0aWFsOiBjb21wU3RhdGUuc2lnbmFsXG4gIH07XG4gIGNvbnN0IHNpZ25hbHNGaW5hbCA9IFtcIndpZHRoXCIsIFwiaGVpZ2h0XCIsIFwicGFkZGluZ1wiXS5yZWR1Y2UoKGFjYywgc2dOYW1lKSA9PiB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY2hhbmdlLnNpZ25hbCkpIHtcbiAgICAgIGlmIChjaGFuZ2Uuc2lnbmFsLmluZGV4T2Yoc2dOYW1lKSA+PSAwKSB7XG4gICAgICAgIGFjY1tzZ05hbWVdID0gZVZpZXcuc2lnbmFsKHNnTmFtZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlLnNpZ25hbCA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuICAgIGFjY1tzZ05hbWVdID0gZVZpZXcuc2lnbmFsKHNnTmFtZSk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuICBzaWduYWxzLmZpbmFsID0gT2JqZWN0LmFzc2lnbih7fSwgc2lnbmFscy5pbml0aWFsLCBzaWduYWxzRmluYWwpO1xuXG4gIGNvbnN0IGFsbEVuY29kZXMgPSB7fTtcblxuICBjb25zdCBzdWJDb21wcyA9IHtcbiAgICB0aWNrczogZG9UaWNrcyxcbiAgICBsYWJlbHM6IGRvTGFiZWxzLFxuICAgIHRpdGxlOiBkb1RpdGxlLFxuICAgIGF4aXM6IGRvQXhpc0csXG4gICAgZ3JpZDogZG9HcmlkLFxuICAgIGRvbWFpbjogZG9Eb21haW5cbiAgfTtcbiAgY29uc3QgYXhpc0dEYXR1bUZpbmFsID0gY2hhbmdlLmZpbmFsXG4gICAgPyBmaW5kQ29tcChlVmlldy5zY2VuZWdyYXBoKCkucm9vdCwgY2hhbmdlLmNvbXBOYW1lLCBcImF4aXNcIilbMF0uaXRlbXNbMF1cbiAgICA6IHVuZGVmaW5lZDtcbiAgY29uc3QgYXhpc0dFbmNvZGVCYXNlRmluYWwgPSBheGlzR0RhdHVtRmluYWxcbiAgICA/IHtcbiAgICAgIHg6IHsgdmFsdWU6IGF4aXNHRGF0dW1GaW5hbC54IH0sXG4gICAgICB5OiB7IHZhbHVlOiBheGlzR0RhdHVtRmluYWwueSB9XG4gICAgfVxuICAgIDoge307XG5cbiAgT2JqZWN0LmtleXMoc3ViQ29tcHMpLmZvckVhY2goc3ViQ29tcCA9PiB7XG4gICAgY29uc3QgbWFudWFsRW5jb2RlID1cbiAgICAgIGNoYW5nZS5lbmNvZGUgJiYgY2hhbmdlLmVuY29kZVtzdWJDb21wXSA/IGNoYW5nZS5lbmNvZGVbc3ViQ29tcF0gOiB7fTtcbiAgICBhbGxFbmNvZGVzW3N1YkNvbXBdID0gZ2V0QXhpc1N1YkNvbXBFbmNvZGVzKHN1YkNvbXAsIG1hbnVhbEVuY29kZSk7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGdldEF4aXNTdWJDb21wRW5jb2RlcyhzdWJDb21wb25lbnQsIG1hbnVhbEVuY29kZSkge1xuICAgIGNvbnN0IGVuY29kZXMgPSB7XG4gICAgICBpbml0aWFsOiBjb3B5KGNvbXBTdGF0ZS5lbmNvZGVbc3ViQ29tcG9uZW50XSB8fCB7fSksXG4gICAgICBmaW5hbDogY29weShjb21wU3RhdGUuZW5jb2RlW3N1YkNvbXBvbmVudF0gfHwge30pXG4gICAgfTtcblxuICAgIGlmIChzdWJDb21wc1tzdWJDb21wb25lbnRdICE9PSB0cnVlKSB7XG4gICAgICByZXR1cm4gZW5jb2RlcztcbiAgICB9XG5cbiAgICBjb25zdCBzdWJDb21wRW5jb2RlID0ge1xuICAgICAgaW5pdGlhbDpcbiAgICAgICAgY2hhbmdlLmluaXRpYWwgJiZcbiAgICAgICAgY2hhbmdlLmluaXRpYWwuZW5jb2RlICYmXG4gICAgICAgIGNoYW5nZS5pbml0aWFsLmVuY29kZVtzdWJDb21wb25lbnRdXG4gICAgICAgICAgPyBjaGFuZ2UuaW5pdGlhbC5lbmNvZGVbc3ViQ29tcG9uZW50XS51cGRhdGVcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGZpbmFsOlxuICAgICAgICBjaGFuZ2UuZmluYWwgJiYgY2hhbmdlLmZpbmFsLmVuY29kZSAmJiBjaGFuZ2UuZmluYWwuZW5jb2RlW3N1YkNvbXBvbmVudF1cbiAgICAgICAgICA/IGNoYW5nZS5maW5hbC5lbmNvZGVbc3ViQ29tcG9uZW50XS51cGRhdGVcbiAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgIH07XG5cbiAgICBlbmNvZGVzLmluaXRpYWwuZW50ZXIgPSBPYmplY3QuYXNzaWduKFxuICAgICAge30sXG4gICAgICAvLyBkZWZhdWx0QXhpc0VuY29kZS5pbml0aWFsLFxuICAgICAgREVGQVVMVF9FTkNPREUuYXhpc1tzdWJDb21wb25lbnRdKHNhbWVEb21haW5EaW1lbnNpb24gPyBjaGFuZ2UuaW5pdGlhbCA6IGNoYW5nZS5maW5hbClcbiAgICAgICAgLnVwZGF0ZSxcbiAgICAgIHNhbWVEb21haW5EaW1lbnNpb24gPyBzdWJDb21wRW5jb2RlLmluaXRpYWwgOiBzdWJDb21wRW5jb2RlLmZpbmFsIHx8IHt9LFxuICAgICAgREVGQVVMVF9FTkNPREUubWFyay5lbnRlcixcbiAgICAgIGNvbXBTdGF0ZS5lbmNvZGUuZW50ZXIsXG4gICAgICBtYW51YWxFbmNvZGUgJiYgbWFudWFsRW5jb2RlLmVudGVyID8gbWFudWFsRW5jb2RlLmVudGVyLmluaXRpYWwgOiB7fVxuICAgICk7XG4gICAgaWYgKG1hbnVhbEVuY29kZSAmJiBtYW51YWxFbmNvZGUuZW50ZXIgPT09IGZhbHNlKSB7XG4gICAgICBlbmNvZGVzLmZpbmFsLmVudGVyID0gZW5jb2Rlcy5pbml0aWFsLmVudGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmNvZGVzLmZpbmFsLmVudGVyID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAge30sXG4gICAgICAgIC8vIGRlZmF1bHRBeGlzRW5jb2RlLmZpbmFsLFxuICAgICAgICBERUZBVUxUX0VOQ09ERS5heGlzW3N1YkNvbXBvbmVudF0oY2hhbmdlLmZpbmFsKS51cGRhdGUsXG4gICAgICAgIHN1YkNvbXBFbmNvZGUuZmluYWwgPyBzdWJDb21wRW5jb2RlLmZpbmFsIDoge30sXG4gICAgICAgIG1hbnVhbEVuY29kZSA/IG1hbnVhbEVuY29kZS5lbnRlciA6IHt9LFxuICAgICAgICBjb21wdXRlS2VwdEVuY29kZShtYW51YWxFbmNvZGUsIGVuY29kZXMuaW5pdGlhbCwgXCJlbnRlclwiKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBlbmNvZGVzLmluaXRpYWwuZXhpdCA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIC8vIGRlZmF1bHRBeGlzRW5jb2RlLmluaXRpYWwsXG4gICAgICBERUZBVUxUX0VOQ09ERS5heGlzW3N1YkNvbXBvbmVudF0oY2hhbmdlLmluaXRpYWwpLnVwZGF0ZSxcbiAgICAgIHN1YkNvbXBFbmNvZGUuaW5pdGlhbCA/IHN1YkNvbXBFbmNvZGUuaW5pdGlhbCA6IHt9LFxuICAgICAgY29tcFN0YXRlLmVuY29kZS5leGl0IHx8IGNvbXBTdGF0ZS5lbmNvZGUudXBkYXRlXG4gICAgKTtcbiAgICBpZiAobWFudWFsRW5jb2RlICYmIG1hbnVhbEVuY29kZS5leGl0ID09PSBmYWxzZSkge1xuICAgICAgZW5jb2Rlcy5maW5hbC5leGl0ID0gZW5jb2Rlcy5pbml0aWFsLmV4aXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVuY29kZXMuZmluYWwuZXhpdCA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgIHt9LFxuICAgICAgICAvLyBkZWZhdWx0QXhpc0VuY29kZS5maW5hbCxcbiAgICAgICAgREVGQVVMVF9FTkNPREUuYXhpc1tzdWJDb21wb25lbnRdKFxuICAgICAgICAgIHNhbWVEb21haW5EaW1lbnNpb24gPyBjaGFuZ2UuZmluYWwgOiBjaGFuZ2UuaW5pdGlhbFxuICAgICAgICApLnVwZGF0ZSxcbiAgICAgICAgc2FtZURvbWFpbkRpbWVuc2lvbiA/IHN1YkNvbXBFbmNvZGUuZmluYWwgOiBzdWJDb21wRW5jb2RlLmluaXRpYWwgfHwge30sXG4gICAgICAgIERFRkFVTFRfRU5DT0RFLm1hcmsuZXhpdCxcbiAgICAgICAgbWFudWFsRW5jb2RlID8gbWFudWFsRW5jb2RlLmV4aXQgOiB7fSxcbiAgICAgICAgY29tcHV0ZUtlcHRFbmNvZGUobWFudWFsRW5jb2RlLCBlbmNvZGVzLmluaXRpYWwsIFwiZXhpdFwiKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBlbmNvZGVzLmluaXRpYWwudXBkYXRlID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHt9LFxuICAgICAgLy8gZGVmYXVsdEF4aXNFbmNvZGUuaW5pdGlhbCxcbiAgICAgIERFRkFVTFRfRU5DT0RFLmF4aXNbc3ViQ29tcG9uZW50XShjaGFuZ2UuaW5pdGlhbCkudXBkYXRlLFxuICAgICAgc3ViQ29tcEVuY29kZS5pbml0aWFsIHx8IHt9LFxuICAgICAgZW5jb2Rlcy5pbml0aWFsLnVwZGF0ZVxuICAgICk7XG5cbiAgICBpZiAobWFudWFsRW5jb2RlICYmIG1hbnVhbEVuY29kZS51cGRhdGUgPT09IGZhbHNlKSB7XG4gICAgICBlbmNvZGVzLmZpbmFsLnVwZGF0ZSA9IGVuY29kZXMuaW5pdGlhbC51cGRhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVuY29kZXMuZmluYWwudXBkYXRlID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAge30sXG4gICAgICAgIC8vIGRlZmF1bHRBeGlzRW5jb2RlLmZpbmFsLFxuICAgICAgICBzdWJDb21wb25lbnQgPT09IFwiYXhpc1wiID8gYXhpc0dFbmNvZGVCYXNlRmluYWwgOiB7fSxcbiAgICAgICAgREVGQVVMVF9FTkNPREUuYXhpc1tzdWJDb21wb25lbnRdKGNoYW5nZS5maW5hbCkudXBkYXRlLFxuICAgICAgICBzdWJDb21wRW5jb2RlLmZpbmFsIHx8IHt9LFxuICAgICAgICBtYW51YWxFbmNvZGUgPyBtYW51YWxFbmNvZGUudXBkYXRlIDoge30sXG4gICAgICAgIGNvbXB1dGVLZXB0RW5jb2RlKG1hbnVhbEVuY29kZSwgZW5jb2Rlcy5pbml0aWFsLCBcInVwZGF0ZVwiKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGVuY29kZXM7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGVuY29kZXM6IGFsbEVuY29kZXMsXG4gICAgc2NhbGVzLFxuICAgIHNpZ25hbHMsXG4gICAgc2FtZURvbWFpbkRpbWVuc2lvblxuICB9O1xufSIsImltcG9ydCB7IGRhdGFQcmVzZXJ2ZWRTY2FsZSwgY29tcHV0ZUtlcHRFbmNvZGUgfSBmcm9tIFwiLi91dGlsXCI7XG5pbXBvcnQgeyBjb3B5MiwgZ2V0LCBkZWVwRXF1YWwgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC91dGlsXCI7XG5pbXBvcnQgeyBERUZBVUxUX0VOQ09ERSB9IGZyb20gXCIuLi8uLi8uLi9kZWZhdWx0XCI7XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGUocmF3SW5mbywgc3RlcCwgbGFzdFN0YXRlKSB7XG4gIGNvbnN0IExFR0VORF9DSEFOTkVMUyA9IFtcbiAgICBcImZpbGxcIixcbiAgICBcIm9wYWNpdHlcIixcbiAgICBcInNoYXBlXCIsXG4gICAgXCJzaXplXCIsXG4gICAgXCJzdHJva2VcIixcbiAgICBcInN0cm9rZURhc2hcIixcbiAgICBcInN0cm9rZVdpZHRoXCJcbiAgXTtcbiAgY29uc3QgeyBjaGFuZ2UgfSA9IHN0ZXA7XG4gIGNvbnN0IGVWaWV3ID0gcmF3SW5mby5lVmlzLnZpZXc7XG5cbiAgbGV0IGRvVGl0bGU7XG4gIGxldCBkb1N5bWJvbHM7XG4gIGxldCBkb0xhYmVscztcbiAgbGV0IGRvRW50cmllcztcbiAgbGV0IGRvR3JhZGllbnQ7XG4gIGxldCBkb0xlZ2VuZEc7XG4gIGRvVGl0bGUgPSBkb1N5bWJvbHMgPSBkb0xhYmVscyA9IGRvRW50cmllcyA9IGRvR3JhZGllbnQgPSBkb0xlZ2VuZEcgPSB0cnVlO1xuICBjb25zdCBpc1JlbW92ZSA9ICFsYXN0U3RhdGUuaXNSZW1vdmUgJiYgIWNoYW5nZS5maW5hbDtcbiAgY29uc3QgaXNBZGQgPSAhbGFzdFN0YXRlLmlzQWRkICYmICFjaGFuZ2UuaW5pdGlhbDtcbiAgaWYgKGNoYW5nZS5lbmNvZGUgPT09IGZhbHNlKSB7XG4gICAgZG9UaXRsZSA9IGRvU3ltYm9scyA9IGRvTGFiZWxzID0gZG9FbnRyaWVzID0gZG9HcmFkaWVudCA9IGRvTGVnZW5kRyA9IGZhbHNlO1xuICB9IGVsc2UgaWYgKGNoYW5nZS5lbmNvZGUpIHtcbiAgICBkb1RpdGxlID0gIShjaGFuZ2UuZW5jb2RlLnRpdGxlID09PSBmYWxzZSk7XG4gICAgZG9TeW1ib2xzID0gIShjaGFuZ2UuZW5jb2RlLnN5bWJvbHMgPT09IGZhbHNlKTtcbiAgICBkb0xhYmVscyA9ICEoY2hhbmdlLmVuY29kZS5sYWJlbHMgPT09IGZhbHNlKTtcbiAgICBkb0VudHJpZXMgPSAhKGNoYW5nZS5lbmNvZGUuZW50cmllcyA9PT0gZmFsc2UpO1xuICAgIGRvR3JhZGllbnQgPSAhKGNoYW5nZS5lbmNvZGUuZ3JhZGllbnQgPT09IGZhbHNlKTtcbiAgICBkb0xlZ2VuZEcgPSAhKGNoYW5nZS5lbmNvZGUubGVnZW5kID09PSBmYWxzZSk7XG4gIH1cblxuICBjb25zdCBsZWdlbmRUeXBlcyA9IHtcbiAgICBpbml0aWFsOiBsYXN0U3RhdGUubGVnZW5kVHlwZSxcbiAgICBmaW5hbDpcbiAgICAgIGNoYW5nZS5zY2FsZSA9PT0gZmFsc2VcbiAgICAgICAgPyBsYXN0U3RhdGUubGVnZW5kVHlwZVxuICAgICAgICA6IGNoYW5nZS5maW5hbFxuICAgICAgICAgID8gY2hhbmdlLmZpbmFsLnR5cGVcbiAgICAgICAgICA6IHVuZGVmaW5lZFxuICB9O1xuXG4gIGNvbnN0IHNjTmFtZXMgPSB7XG4gICAgaW5pdGlhbDogW10sXG4gICAgZmluYWw6IFtdXG4gIH07XG4gIExFR0VORF9DSEFOTkVMUy5mb3JFYWNoKGNoYW5uZWwgPT4ge1xuICAgIGlmIChjaGFuZ2UuaW5pdGlhbCAmJiBjaGFuZ2UuaW5pdGlhbFtjaGFubmVsXSkge1xuICAgICAgc2NOYW1lcy5pbml0aWFsLnB1c2goY2hhbmdlLmluaXRpYWxbY2hhbm5lbF0pO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlLmZpbmFsICYmIGNoYW5nZS5maW5hbFtjaGFubmVsXSkge1xuICAgICAgc2NOYW1lcy5maW5hbC5wdXNoKGNoYW5nZS5maW5hbFtjaGFubmVsXSk7XG4gICAgfVxuICB9KTtcblxuICAvLyBjb2xsZWN0IHRoZSBzY2FsZSBvYmplY3RzIHRvIHNjYWxlIHRoZSBpbml0aWFsL2ZpbmFsIHZhbHVlc1xuICBjb25zdCBzY2FsZXMgPSB7XG4gICAgaW5pdGlhbDogbGFzdFN0YXRlLnNjYWxlLFxuICAgIGZpbmFsOiBjb3B5MihsYXN0U3RhdGUuc2NhbGUpXG4gIH07XG5cbiAgaWYgKGNoYW5nZS5zY2FsZSAhPT0gZmFsc2UpIHtcbiAgICBsZXQgZmluYWxTY2FsZU5hbWVzID0gW107XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY2hhbmdlLnNjYWxlKSkge1xuICAgICAgZmluYWxTY2FsZU5hbWVzID0gY2hhbmdlLnNjYWxlO1xuICAgIH0gZWxzZSBpZiAoY2hhbmdlLnNjYWxlID09PSB0cnVlIHx8IGlzQWRkKSB7XG4gICAgICBmaW5hbFNjYWxlTmFtZXMgPSBzY05hbWVzLmZpbmFsO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNoYW5nZS5zY2FsZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgZmluYWxTY2FsZU5hbWVzID0gc2NOYW1lcy5maW5hbC5maWx0ZXIoXG4gICAgICAgIHNjTmFtZSA9PiBjaGFuZ2Uuc2NhbGVbc2NOYW1lXSAhPT0gZmFsc2VcbiAgICAgICk7XG4gICAgfVxuICAgIGZpbmFsU2NhbGVOYW1lcy5mb3JFYWNoKHNjTmFtZSA9PiB7XG4gICAgICBpZiAoY2hhbmdlLnNjYWxlW3NjTmFtZV0gJiYgY2hhbmdlLnNjYWxlW3NjTmFtZV0uZGF0YSA9PT0gZmFsc2UpIHtcbiAgICAgICAgc2NhbGVzLmZpbmFsW3NjTmFtZV0gPSBkYXRhUHJlc2VydmVkU2NhbGUoXG4gICAgICAgICAgcmF3SW5mby5zVmlzLnNwZWMsXG4gICAgICAgICAgcmF3SW5mby5lVmlzLnNwZWMsXG4gICAgICAgICAgc2NOYW1lXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzY2FsZXMuZmluYWxbc2NOYW1lXSA9IGVWaWV3Ll9ydW50aW1lLnNjYWxlc1tzY05hbWVdXG4gICAgICAgICAgPyBlVmlldy5fcnVudGltZS5zY2FsZXNbc2NOYW1lXS52YWx1ZVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbGV0IHNhbWVEb21haW5EaW1lbnNpb24gPSBnZXQoY2hhbmdlLCBcInNjYWxlXCIsIFwiZG9tYWluRGltZW5zaW9uXCIpO1xuICBpZiAodHlwZW9mIHNhbWVEb21haW5EaW1lbnNpb24gPT09IFwic3RyaW5nXCIpIHtcbiAgICBzYW1lRG9tYWluRGltZW5zaW9uID1cbiAgICAgIHNhbWVEb21haW5EaW1lbnNpb24gPT09IFwic2FtZVwiXG4gICAgICAgID8gdHJ1ZVxuICAgICAgICA6IHNhbWVEb21haW5EaW1lbnNpb24gPT09IFwiZGlmZlwiXG4gICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICB9XG4gIGlmIChzYW1lRG9tYWluRGltZW5zaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoY2hhbmdlLnNjYWxlID09PSBmYWxzZSkge1xuICAgICAgc2FtZURvbWFpbkRpbWVuc2lvbiA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChpc1JlbW92ZSB8fCBpc0FkZCkge1xuICAgICAgc2FtZURvbWFpbkRpbWVuc2lvbiA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGYWN0OiBFYWNoIGxlZ2VuZCBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIG11bHRpcGxlIHNjYWxlcyBidXQgdGhlaXIgZG9tYWlucyBhcmUgZXF1YWwuXG4gICAgICBjb25zdCBzY2FsZURlZnMgPSB7XG4gICAgICAgIGluaXRpYWw6IHJhd0luZm8uc1Zpcy5zcGVjLnNjYWxlcy5maW5kKFxuICAgICAgICAgIHNjYWxlRGVmID0+IHNjYWxlRGVmLm5hbWUgPT09IHNjTmFtZXMuaW5pdGlhbFswXVxuICAgICAgICApLFxuICAgICAgICBmaW5hbDogcmF3SW5mby5lVmlzLnNwZWMuc2NhbGVzLmZpbmQoXG4gICAgICAgICAgc2NhbGVEZWYgPT4gc2NhbGVEZWYubmFtZSA9PT0gc2NOYW1lcy5maW5hbFswXVxuICAgICAgICApXG4gICAgICB9O1xuICAgICAgc2FtZURvbWFpbkRpbWVuc2lvbiA9IGRlZXBFcXVhbChcbiAgICAgICAgc2NhbGVEZWZzLmluaXRpYWwuZG9tYWluLFxuICAgICAgICBzY2FsZURlZnMuZmluYWwuZG9tYWluXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNpZ25hbHMgPSB7XG4gICAgaW5pdGlhbDogbGFzdFN0YXRlLnNpZ25hbFxuICB9O1xuICBjb25zdCBzaWduYWxzRmluYWwgPSBbXCJ3aWR0aFwiLCBcImhlaWdodFwiLCBcInBhZGRpbmdcIl0ucmVkdWNlKChhY2MsIHNnTmFtZSkgPT4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGNoYW5nZS5zaWduYWwpKSB7XG4gICAgICBpZiAoY2hhbmdlLnNpZ25hbC5pbmRleE9mKHNnTmFtZSkgPj0gMCkge1xuICAgICAgICBhY2Nbc2dOYW1lXSA9IGVWaWV3LnNpZ25hbChzZ05hbWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG4gICAgaWYgKGNoYW5nZS5zaWduYWwgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cbiAgICBhY2Nbc2dOYW1lXSA9IGVWaWV3LnNpZ25hbChzZ05hbWUpO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbiAgc2lnbmFscy5maW5hbCA9IE9iamVjdC5hc3NpZ24oe30sIHNpZ25hbHMuaW5pdGlhbCwgc2lnbmFsc0ZpbmFsKTtcblxuICBjb25zdCBhbGxFbmNvZGVzID0ge307XG5cbiAgY29uc3Qgc3ViQ29tcHMgPSB7XG4gICAgZ3JhZGllbnQ6IGRvR3JhZGllbnQsXG4gICAgYmFuZHM6IGRvR3JhZGllbnQsXG4gICAgcGFpcnM6IGRvU3ltYm9scyB8fCBkb0xhYmVscyxcbiAgICBsYWJlbHM6IGRvTGFiZWxzLFxuICAgIHRpdGxlOiBkb1RpdGxlLFxuICAgIGxlZ2VuZDogZG9MZWdlbmRHLFxuICAgIGVudHJpZXM6IGRvRW50cmllcyxcbiAgICBzeW1ib2xzOiBkb1N5bWJvbHNcbiAgfTtcbiAgT2JqZWN0LmtleXMoc3ViQ29tcHMpLmZvckVhY2goc3ViQ29tcCA9PiB7XG4gICAgaWYgKHN1YkNvbXBzW3N1YkNvbXBdKSB7XG4gICAgICBjb25zdCBtYW51YWxFbmNvZGUgPVxuICAgICAgICBjaGFuZ2UuZW5jb2RlICYmIGNoYW5nZS5lbmNvZGVbc3ViQ29tcF0gPyBjaGFuZ2UuZW5jb2RlW3N1YkNvbXBdIDoge307XG4gICAgICBhbGxFbmNvZGVzW3N1YkNvbXBdID0gZ2V0TGVnZW5kU3ViQ29tcEVuY29kZXMoXG4gICAgICAgIHN1YkNvbXAsXG4gICAgICAgIG1hbnVhbEVuY29kZVxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGdldExlZ2VuZFN1YkNvbXBFbmNvZGVzKHN1YkNvbXBvbmVudCwgbWFudWFsRW5jb2RlKSB7XG4gICAgY29uc3QgZGVmYXVsdFN1YmNvbXBFbmNvZGUgPSB7XG4gICAgICBpbml0aWFsOiBERUZBVUxUX0VOQ09ERS5sZWdlbmRbc3ViQ29tcG9uZW50XShjaGFuZ2UuaW5pdGlhbCkudXBkYXRlLFxuICAgICAgZmluYWw6IERFRkFVTFRfRU5DT0RFLmxlZ2VuZFtzdWJDb21wb25lbnRdKGNoYW5nZS5maW5hbCkudXBkYXRlXG4gICAgfTtcbiAgICBjb25zdCBjb21wcyA9IGNoYW5nZTtcbiAgICBjb25zdCBjb21wRW5jb2RlID0ge307XG4gICAgW1wiaW5pdGlhbFwiLCBcImZpbmFsXCJdLmZvckVhY2god2hpY2ggPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBjb21wc1t3aGljaF0gJiZcbiAgICAgICAgY29tcHNbd2hpY2hdLmVuY29kZSAmJlxuICAgICAgICBjb21wc1t3aGljaF0uZW5jb2RlW3N1YkNvbXBvbmVudF1cbiAgICAgICkge1xuICAgICAgICBjb21wRW5jb2RlW3doaWNoXSA9IGNvbXBzW3doaWNoXS5lbmNvZGVbc3ViQ29tcG9uZW50XS51cGRhdGU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBlbmNvZGVzID0ge1xuICAgICAgaW5pdGlhbDogY29weTIoXG4gICAgICAgIGxhc3RTdGF0ZS5lbmNvZGUgJiYgbGFzdFN0YXRlLmVuY29kZVtzdWJDb21wb25lbnRdXG4gICAgICAgICAgPyBsYXN0U3RhdGUuZW5jb2RlW3N1YkNvbXBvbmVudF1cbiAgICAgICAgICA6IHsgdXBkYXRlOiBkZWZhdWx0U3ViY29tcEVuY29kZS5pbml0aWFsIH1cbiAgICAgICksXG4gICAgICBmaW5hbDogY29weTIoXG4gICAgICAgIGxhc3RTdGF0ZS5lbmNvZGUgJiYgbGFzdFN0YXRlLmVuY29kZVtzdWJDb21wb25lbnRdXG4gICAgICAgICAgPyBsYXN0U3RhdGUuZW5jb2RlW3N1YkNvbXBvbmVudF1cbiAgICAgICAgICA6IHsgdXBkYXRlOiBkZWZhdWx0U3ViY29tcEVuY29kZS5maW5hbCB9XG4gICAgICApXG4gICAgfTtcblxuICAgIGVuY29kZXMuaW5pdGlhbC5lbnRlciA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIHNhbWVEb21haW5EaW1lbnNpb25cbiAgICAgICAgPyBkZWZhdWx0U3ViY29tcEVuY29kZS5pbml0aWFsXG4gICAgICAgIDogZGVmYXVsdFN1YmNvbXBFbmNvZGUuZmluYWwsXG4gICAgICBzYW1lRG9tYWluRGltZW5zaW9uID8gY29tcEVuY29kZS5pbml0aWFsIDogY29tcEVuY29kZS5maW5hbCxcbiAgICAgIERFRkFVTFRfRU5DT0RFLm1hcmsuZW50ZXIsXG4gICAgICBsYXN0U3RhdGUuZW5jb2RlLmVudGVyLFxuICAgICAgbWFudWFsRW5jb2RlICYmIG1hbnVhbEVuY29kZS5lbnRlciA/IG1hbnVhbEVuY29kZS5lbnRlci5pbml0aWFsIDoge31cbiAgICApO1xuICAgIGlmIChtYW51YWxFbmNvZGUgJiYgbWFudWFsRW5jb2RlLmVudGVyID09PSBmYWxzZSkge1xuICAgICAgZW5jb2Rlcy5maW5hbC5lbnRlciA9IGVuY29kZXMuaW5pdGlhbC5lbnRlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgZW5jb2Rlcy5maW5hbC5lbnRlciA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgIHt9LFxuICAgICAgICBkZWZhdWx0U3ViY29tcEVuY29kZS5maW5hbCxcbiAgICAgICAgY29tcEVuY29kZS5maW5hbCxcbiAgICAgICAgbWFudWFsRW5jb2RlID8gbWFudWFsRW5jb2RlLmVudGVyIDoge30sXG4gICAgICAgIGNvbXB1dGVLZXB0RW5jb2RlKG1hbnVhbEVuY29kZSwgZW5jb2Rlcy5pbml0aWFsLCBcImVudGVyXCIpXG4gICAgICApO1xuICAgIH1cblxuICAgIGVuY29kZXMuaW5pdGlhbC5leGl0ID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHt9LFxuICAgICAgZGVmYXVsdFN1YmNvbXBFbmNvZGUuaW5pdGlhbCxcbiAgICAgIGNvbXBFbmNvZGUuaW5pdGlhbCxcbiAgICAgIGxhc3RTdGF0ZS5lbmNvZGUuZXhpdCB8fCBsYXN0U3RhdGUuZW5jb2RlLnVwZGF0ZVxuICAgICk7XG5cbiAgICBpZiAobWFudWFsRW5jb2RlICYmIG1hbnVhbEVuY29kZS5leGl0ID09PSBmYWxzZSkge1xuICAgICAgZW5jb2Rlcy5maW5hbC5leGl0ID0gZW5jb2Rlcy5pbml0aWFsLmV4aXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVuY29kZXMuZmluYWwuZXhpdCA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgIHt9LFxuICAgICAgICBzYW1lRG9tYWluRGltZW5zaW9uXG4gICAgICAgICAgPyBkZWZhdWx0U3ViY29tcEVuY29kZS5maW5hbFxuICAgICAgICAgIDogZGVmYXVsdFN1YmNvbXBFbmNvZGUuaW5pdGlhbCxcbiAgICAgICAgc2FtZURvbWFpbkRpbWVuc2lvbiA/IGNvbXBFbmNvZGUuZmluYWwgOiBjb21wRW5jb2RlLmluaXRpYWwsXG4gICAgICAgIERFRkFVTFRfRU5DT0RFLm1hcmsuZXhpdCxcbiAgICAgICAgbWFudWFsRW5jb2RlID8gbWFudWFsRW5jb2RlLmV4aXQgOiB7fSxcbiAgICAgICAgY29tcHV0ZUtlcHRFbmNvZGUobWFudWFsRW5jb2RlLCBlbmNvZGVzLmluaXRpYWwsIFwiZXhpdFwiKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBlbmNvZGVzLmluaXRpYWwudXBkYXRlID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHt9LFxuICAgICAgZGVmYXVsdFN1YmNvbXBFbmNvZGUuaW5pdGlhbCxcbiAgICAgIGNvbXBFbmNvZGUuaW5pdGlhbCxcbiAgICAgIGVuY29kZXMuaW5pdGlhbC51cGRhdGVcbiAgICApO1xuXG4gICAgaWYgKG1hbnVhbEVuY29kZSAmJiBtYW51YWxFbmNvZGUudXBkYXRlID09PSBmYWxzZSkge1xuICAgICAgZW5jb2Rlcy5maW5hbC51cGRhdGUgPSBlbmNvZGVzLmluaXRpYWwudXBkYXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmNvZGVzLmZpbmFsLnVwZGF0ZSA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgIHt9LFxuICAgICAgICBkZWZhdWx0U3ViY29tcEVuY29kZS5maW5hbCxcbiAgICAgICAgY29tcEVuY29kZS5maW5hbCxcbiAgICAgICAgbWFudWFsRW5jb2RlID8gbWFudWFsRW5jb2RlLnVwZGF0ZSA6IHt9LFxuICAgICAgICBjb21wdXRlS2VwdEVuY29kZShtYW51YWxFbmNvZGUsIGVuY29kZXMuaW5pdGlhbCwgXCJ1cGRhdGVcIilcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVuY29kZXM7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGVuY29kZXM6IGFsbEVuY29kZXMsXG4gICAgc2NhbGVzLFxuICAgIHNpZ25hbHMsXG4gICAgbGVnZW5kVHlwZXMsXG4gICAgc2FtZURvbWFpbkRpbWVuc2lvbixcbiAgICBpc0FkZCxcbiAgICBpc1JlbW92ZVxuICB9O1xufSIsImltcG9ydCB7IGNvcHkgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC91dGlsXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlKHJhd0luZm8sIHN0ZXAsIGxhc3RTdGF0ZSkge1xuICBjb25zdCB7IGNoYW5nZSB9ID0gc3RlcDtcbiAgY29uc3Qgc2lnbmFscyA9IHtcbiAgICBpbml0aWFsOiBsYXN0U3RhdGUuc2lnbmFsXG4gIH07XG4gIGNvbnN0IGVuY29kZXMgPSB7XG4gICAgaW5pdGlhbDogY29weShsYXN0U3RhdGUuZW5jb2RlKSxcbiAgICBmaW5hbDogY29weShsYXN0U3RhdGUuZW5jb2RlKVxuICB9O1xuXG4gIGNvbnN0IHNpZ25hbHNGaW5hbCA9IHt9O1xuICBjb25zdCBmaW5hbFNpZ25hbE5hbWVzID0gQXJyYXkuaXNBcnJheShjaGFuZ2Uuc2lnbmFsKVxuICAgID8gY2hhbmdlLnNpZ25hbFxuICAgIDogW1wid2lkdGhcIiwgXCJoZWlnaHRcIiwgXCJwYWRkaW5nXCJdO1xuXG4gIGZpbmFsU2lnbmFsTmFtZXMuZm9yRWFjaChzZ05hbWUgPT4ge1xuICAgIHNpZ25hbHNGaW5hbFtzZ05hbWVdID0gcmF3SW5mby5lVmlzLnZpZXcuc2lnbmFsKHNnTmFtZSk7XG4gIH0pO1xuXG4gIHNpZ25hbHMuZmluYWwgPSB7IC4uLnNpZ25hbHMuaW5pdGlhbCwgLi4uc2lnbmFsc0ZpbmFsIH07XG5cbiAgaWYgKHN0ZXAuY2hhbmdlLnNpZ25hbCAhPT0gZmFsc2UpIHtcbiAgICBpZiAoZmluYWxTaWduYWxOYW1lcy5pbmRleE9mKFwiaGVpZ2h0XCIpID49IDApIHtcbiAgICAgIGVuY29kZXMuZmluYWwuc3ZnLnkgPSB7IHZhbHVlOiBjaGFuZ2UuZmluYWwueSArIGNoYW5nZS5maW5hbC5wYWRkaW5nIH07XG4gICAgICBlbmNvZGVzLmZpbmFsLnN2Zy5oZWlnaHQgPSB7XG4gICAgICAgIHZhbHVlOiBjaGFuZ2UuZmluYWwudmlld0hlaWdodCArIGNoYW5nZS5maW5hbC5wYWRkaW5nICogMlxuICAgICAgfTtcbiAgICAgIGVuY29kZXMuZmluYWwucm9vdC5oZWlnaHQgPSB7IHZhbHVlOiBzaWduYWxzLmZpbmFsLmhlaWdodCB9O1xuICAgIH1cbiAgICBpZiAoZmluYWxTaWduYWxOYW1lcy5pbmRleE9mKFwid2lkdGhcIikgPj0gMCkge1xuICAgICAgZW5jb2Rlcy5maW5hbC5zdmcueCA9IHsgdmFsdWU6IGNoYW5nZS5maW5hbC54ICsgY2hhbmdlLmZpbmFsLnBhZGRpbmcgfTtcbiAgICAgIGVuY29kZXMuZmluYWwuc3ZnLndpZHRoID0ge1xuICAgICAgICB2YWx1ZTogY2hhbmdlLmZpbmFsLnZpZXdXaWR0aCArIGNoYW5nZS5maW5hbC5wYWRkaW5nICogMlxuICAgICAgfTtcbiAgICAgIGVuY29kZXMuZmluYWwucm9vdC53aWR0aCA9IHsgdmFsdWU6IHNpZ25hbHMuZmluYWwud2lkdGggfTtcbiAgICB9XG4gIH1cblxuICAvLyBUb2RvIEVuY29kZXMgZm9yIHZpZXcgY29tcFxuICBjb25zdCBmUm9vdERhdHVtID0gcmF3SW5mby5lVmlzLnZpZXcuX3J1bnRpbWUuZGF0YS5yb290LnZhbHVlcy52YWx1ZVswXTtcbiAgZW5jb2Rlcy5maW5hbC5yb290LmZpbGwgPSB7IHZhbHVlOiBmUm9vdERhdHVtLmZpbGwgfTtcbiAgZW5jb2Rlcy5maW5hbC5yb290LnN0cm9rZSA9IHsgdmFsdWU6IGZSb290RGF0dW0uc3Ryb2tlIH07XG5cbiAgcmV0dXJuIHtcbiAgICBzaWduYWxzLFxuICAgIGVuY29kZXNcbiAgfTtcblxufSIsImZ1bmN0aW9uIGdldExlZ2VuZFR5cGUobGVnZW5kQ29tcFNwZWMsIHZpZXcpIHtcbiAgaWYgKGxlZ2VuZENvbXBTcGVjLmZpbGwpIHtcbiAgICBjb25zdCBzY2FsZSA9IHZpZXcuX3J1bnRpbWUuc2NhbGVzW2xlZ2VuZENvbXBTcGVjLmZpbGxdLnZhbHVlO1xuICAgIGlmIChcbiAgICAgIFtcbiAgICAgICAgXCJzZXF1ZW50aWFsLWxpbmVhclwiLFxuICAgICAgICBcImxpbmVhclwiLFxuICAgICAgICBcImxvZ1wiLFxuICAgICAgICBcInBvd1wiLFxuICAgICAgICBcInNxcnRcIixcbiAgICAgICAgXCJzeW1sb2dcIixcbiAgICAgICAgXCJiaW4tb3JkaW5hbFwiXG4gICAgICBdLmluZGV4T2Yoc2NhbGUudHlwZSkgPj0gMFxuICAgICkge1xuICAgICAgaWYgKHNjYWxlLnR5cGUgPT09IFwiYmluLW9yZGluYWxcIikge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcImdyYWRpZW50XCIsIGlzQmFuZDogdHJ1ZSB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgdHlwZTogXCJncmFkaWVudFwiIH07XG4gICAgfVxuICB9XG5cbiAgaWYgKGxlZ2VuZENvbXBTcGVjLnN0cm9rZSkge1xuICAgIGNvbnN0IHNjYWxlID0gdmlldy5fcnVudGltZS5zY2FsZXNbbGVnZW5kQ29tcFNwZWMuc3Ryb2tlXS52YWx1ZTtcbiAgICBpZiAoXG4gICAgICBbXG4gICAgICAgIFwic2VxdWVudGlhbC1saW5lYXJcIixcbiAgICAgICAgXCJsaW5lYXJcIixcbiAgICAgICAgXCJsb2dcIixcbiAgICAgICAgXCJwb3dcIixcbiAgICAgICAgXCJzcXJ0XCIsXG4gICAgICAgIFwic3ltbG9nXCIsXG4gICAgICAgIFwiYmluLW9yZGluYWxcIlxuICAgICAgXS5pbmRleE9mKHNjYWxlLnR5cGUpID49IDBcbiAgICApIHtcbiAgICAgIGlmIChzY2FsZS50eXBlID09PSBcImJpbi1vcmRpbmFsXCIpIHtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJncmFkaWVudFwiLCBpc0JhbmQ6IHRydWUgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IHR5cGU6IFwiZ3JhZGllbnRcIiB9O1xuICAgIH1cbiAgfVxuICByZXR1cm4geyB0eXBlOiBcInN5bWJvbFwiIH07XG59XG5cbmV4cG9ydCB7IGdldExlZ2VuZFR5cGUgfTtcbiIsImltcG9ydCB7IGNvcHkgfSBmcm9tIFwiLi4vdXRpbC91dGlsXCI7XG5pbXBvcnQgeyBnZXRMZWdlbmRUeXBlIH0gZnJvbSBcIi4uL3V0aWwvdmdTcGVjSGVscGVyXCI7XG5cbmZ1bmN0aW9uIGdldENvbXBvbmVudHModmdTcGVjKSB7XG4gIC8vIEJ5IHRyYXZlbGluZyB2Z1NwZWMsIGNvbGxlY3QgdGhlIG1hcmtzLCBheGVzLCBsZWdlbmRzLCBhbmQgc2NhbGVzIHdpdGggdGhlaXIgYm91bmQgZGF0YSBhbmQgZW5jb2RpbmcuXG4gIGNvbnN0IGNvbXBvbmVudHMgPSBbXTtcbiAgZnVuY3Rpb24gY29sbGVjdENvbXAobWFyaywgY3VyckNvbXAsIGlzUm9vdCA9IGZhbHNlKSB7XG4gICAgaWYgKGlzUm9vdCkge1xuICAgICAgbWFyay5uYW1lID0gXCJyb290XCI7XG4gICAgfVxuICAgIGxldCBuZXdDb21wID0gY3VyckNvbXA7XG4gICAgaWYgKG1hcmsuYXhlcykge1xuICAgICAgbmV3Q29tcCA9IG5ld0NvbXAuY29uY2F0KFxuICAgICAgICBtYXJrLmF4ZXMubWFwKGQgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5jb3B5KGQpLFxuICAgICAgICAgICAgY29tcFR5cGU6IFwiYXhpc1wiXG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKG1hcmsubGVnZW5kcykge1xuICAgICAgbmV3Q29tcCA9IG5ld0NvbXAuY29uY2F0KFxuICAgICAgICBtYXJrLmxlZ2VuZHMubWFwKGQgPT4geyByZXR1cm4geyAuLi5jb3B5KGQpLCAgY29tcFR5cGU6IFwibGVnZW5kXCIgfTsgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKG1hcmsuc2NhbGVzKSB7XG4gICAgICBuZXdDb21wID0gbmV3Q29tcC5jb25jYXQoXG4gICAgICAgIG1hcmsuc2NhbGVzLm1hcChkID0+IHsgcmV0dXJuIHsgLi4uY29weShkKSwgIGNvbXBUeXBlOiBcInNjYWxlXCIgfTsgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFpc1Jvb3QpIHtcbiAgICAgIGNvbnN0IG5ld01hcmsgPSB7IC4uLmNvcHkobWFyayksICBjb21wVHlwZTogXCJtYXJrXCIgfTtcbiAgICAgIGRlbGV0ZSBuZXdNYXJrLm1hcmtzO1xuICAgICAgbmV3Q29tcC5wdXNoKG5ld01hcmspO1xuICAgIH1cblxuICAgIGlmIChtYXJrLm1hcmtzKSB7XG4gICAgICBuZXdDb21wID0gbWFyay5tYXJrcy5yZWR1Y2UoKGFjYywgY3VycikgPT4ge1xuICAgICAgICBjb25zdCBzdWJDb21wcyA9IGNvbGxlY3RDb21wKFxuICAgICAgICAgIHsgLi4uY3VyciwgcGFyZW50OiAobWFyayB8fCBcInJvb3RcIikgfSxcbiAgICAgICAgICBbXVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gYWNjLmNvbmNhdChzdWJDb21wcyk7XG4gICAgICB9LCBuZXdDb21wKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld0NvbXA7XG4gIH1cblxuICByZXR1cm4gY29sbGVjdENvbXAodmdTcGVjLCBjb21wb25lbnRzLCB0cnVlKTtcbn1cbmZ1bmN0aW9uIGdldENoYW5nZXMoc0NvbXBvbmVudHMsIGVDb21wb25lbnRzKSB7XG4gIGNvbnN0IElERU5USUZJRVJTID0ge1xuICAgIGF4aXM6IGNvbXAgPT5cbiAgICAgIGNvbXAuZW5jb2RlICYmIGNvbXAuZW5jb2RlLmF4aXMgPyBjb21wLmVuY29kZS5heGlzLm5hbWUgOiBjb21wLnNjYWxlLFxuICAgIGxlZ2VuZDogY29tcCA9PlxuICAgICAgY29tcC5lbmNvZGUgJiYgY29tcC5lbmNvZGUubGVnZW5kID8gY29tcC5lbmNvZGUubGVnZW5kLm5hbWUgOiBjb21wLnNjYWxlLFxuICAgIG1hcms6IGNvbXAgPT4gY29tcC5uYW1lLFxuICAgIHNjYWxlOiBjb21wID0+IGNvbXAubmFtZVxuICB9O1xuICBjb25zdCBtZXJnZWQgPSBbXTtcbiAgc0NvbXBvbmVudHMuZm9yRWFjaChzQ29tcCA9PiB7XG4gICAgY29uc3QgaWQgPSBJREVOVElGSUVSU1tzQ29tcC5jb21wVHlwZV07XG4gICAgY29uc3QgbWF0Y2hlZElkID0gZUNvbXBvbmVudHMuZmluZEluZGV4KFxuICAgICAgZUNvbXAgPT4gc0NvbXAuY29tcFR5cGUgPT09IGVDb21wLmNvbXBUeXBlICYmIGlkKHNDb21wKSA9PT0gaWQoZUNvbXApXG4gICAgKTtcbiAgICBpZiAobWF0Y2hlZElkID49IDApIHtcbiAgICAgIG1lcmdlZC5wdXNoKHtcbiAgICAgICAgY29tcFR5cGU6IHNDb21wLmNvbXBUeXBlLFxuICAgICAgICBjb21wTmFtZTogaWQoc0NvbXApLFxuICAgICAgICBwYXJlbnQ6IHNDb21wLnBhcmVudCxcbiAgICAgICAgaW5pdGlhbDogc0NvbXAsXG4gICAgICAgIGZpbmFsOiBlQ29tcG9uZW50cy5zcGxpY2UobWF0Y2hlZElkLCAxKVswXVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1lcmdlZC5wdXNoKHtcbiAgICAgICAgY29tcFR5cGU6IHNDb21wLmNvbXBUeXBlLFxuICAgICAgICBjb21wTmFtZTogaWQoc0NvbXApLFxuICAgICAgICBwYXJlbnQ6IHNDb21wLnBhcmVudCxcbiAgICAgICAgaW5pdGlhbDogc0NvbXAsXG4gICAgICAgIGZpbmFsOiBudWxsXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBtZXJnZWQuY29uY2F0KFxuICAgIGVDb21wb25lbnRzLm1hcChlQ29tcCA9PiB7XG4gICAgICBjb25zdCBpZCA9IElERU5USUZJRVJTW2VDb21wLmNvbXBUeXBlXTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbXBUeXBlOiBlQ29tcC5jb21wVHlwZSxcbiAgICAgICAgY29tcE5hbWU6IGlkKGVDb21wKSxcbiAgICAgICAgcGFyZW50OiBlQ29tcC5wYXJlbnQsXG4gICAgICAgIGluaXRpYWw6IG51bGwsXG4gICAgICAgIGZpbmFsOiBlQ29tcFxuICAgICAgfTtcbiAgICB9KVxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRWaWV3Q2hhbmdlKHJhd0luZm8pIHtcbiAgcmV0dXJuIHtcbiAgICBjb21wVHlwZTogXCJ2aWV3XCIsXG4gICAgY29tcE5hbWU6IFwiZ2xvYmFsXCIsXG5cbiAgICBpbml0aWFsOiB7XG4gICAgICB2aWV3V2lkdGg6IHJhd0luZm8uc1Zpcy52aWV3Ll92aWV3V2lkdGgsXG4gICAgICB2aWV3SGVpZ2h0OiByYXdJbmZvLnNWaXMudmlldy5fdmlld0hlaWdodCxcbiAgICAgIHdpZHRoOiByYXdJbmZvLnNWaXMudmlldy53aWR0aCgpLFxuICAgICAgaGVpZ2h0OiByYXdJbmZvLnNWaXMudmlldy5oZWlnaHQoKSxcbiAgICAgIHg6IHJhd0luZm8uc1Zpcy52aWV3Ll9vcmlnaW5bMF0sXG4gICAgICB5OiByYXdJbmZvLnNWaXMudmlldy5fb3JpZ2luWzFdLFxuICAgICAgcGFkZGluZzogcmF3SW5mby5zVmlzLnNwZWMucGFkZGluZ1xuICAgIH0sXG4gICAgZmluYWw6IHtcbiAgICAgIHZpZXdXaWR0aDogcmF3SW5mby5lVmlzLnZpZXcuX3ZpZXdXaWR0aCxcbiAgICAgIHZpZXdIZWlnaHQ6IHJhd0luZm8uZVZpcy52aWV3Ll92aWV3SGVpZ2h0LFxuICAgICAgd2lkdGg6IHJhd0luZm8uZVZpcy52aWV3LndpZHRoKCksXG4gICAgICBoZWlnaHQ6IHJhd0luZm8uZVZpcy52aWV3LmhlaWdodCgpLFxuICAgICAgeDogcmF3SW5mby5lVmlzLnZpZXcuX29yaWdpblswXSxcbiAgICAgIHk6IHJhd0luZm8uZVZpcy52aWV3Ll9vcmlnaW5bMV0sXG4gICAgICBwYWRkaW5nOiByYXdJbmZvLmVWaXMuc3BlYy5wYWRkaW5nXG4gICAgfVxuICB9O1xufVxuXG5cbmZ1bmN0aW9uIGdldERlZmF1bHRDaGFuZ2Uoc3RlcCwgcmF3SW5mbykge1xuICBjb25zdCBjaGFuZ2UgPSBjb3B5KHN0ZXAuY2hhbmdlIHx8IHt9KTtcbiAgaWYgKHN0ZXAuY29tcFR5cGUgPT09IFwibWFya1wiKSB7XG4gICAgY2hhbmdlLmRhdGEgPSBjaGFuZ2UuZGF0YSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGNoYW5nZS5kYXRhO1xuICAgIGlmIChcbiAgICAgIGNoYW5nZS5kYXRhLnVwZGF0ZSA9PT0gZmFsc2UgJiZcbiAgICAgIGNoYW5nZS5kYXRhLmVudGVyID09PSBmYWxzZSAmJlxuICAgICAgY2hhbmdlLmRhdGEuZXhpdCA9PT0gZmFsc2VcbiAgICApIHtcbiAgICAgIGNoYW5nZS5kYXRhID0gZmFsc2U7XG4gICAgfVxuICAgIGNoYW5nZS5tYXJrdHlwZSA9IGNoYW5nZS5tYXJrdHlwZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGNoYW5nZS5tYXJrdHlwZTtcbiAgICBjaGFuZ2Uuc2NhbGUgPSBjaGFuZ2Uuc2NhbGUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBjaGFuZ2Uuc2NhbGU7XG4gICAgY2hhbmdlLnNpZ25hbCA9IGNoYW5nZS5zaWduYWwgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBjaGFuZ2Uuc2lnbmFsO1xuICAgIGNoYW5nZS5lbmNvZGUgPSBjaGFuZ2UuZW5jb2RlID09PSB1bmRlZmluZWQgPyB0cnVlIDogY2hhbmdlLmVuY29kZTtcbiAgfSBlbHNlIGlmIChzdGVwLmNvbXBUeXBlID09PSBcImF4aXNcIiB8fCBzdGVwLmNvbXBUeXBlID09PSBcImxlZ2VuZFwiKSB7XG4gICAgY2hhbmdlLnNpZ25hbCA9IGNoYW5nZS5zaWduYWwgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBjaGFuZ2Uuc2lnbmFsO1xuICAgIGNoYW5nZS5zY2FsZSA9IGNoYW5nZS5zY2FsZSA9PT0gdW5kZWZpbmVkID8ge30gOiBjaGFuZ2Uuc2NhbGU7XG5cbiAgICBpZiAoc3RlcC5jb21wVHlwZSA9PT0gXCJsZWdlbmRcIikge1xuICAgICAgY2hhbmdlLnNjYWxlID0gY2hhbmdlLnNjYWxlID09PSB1bmRlZmluZWQgPyB0cnVlIDogY2hhbmdlLnNjYWxlO1xuICAgICAgY2hhbmdlLnNpZ25hbCA9IGNoYW5nZS5zaWduYWwgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBjaGFuZ2Uuc2lnbmFsO1xuICAgICAgLy8gc3BlY2lmeSB0aGUgdHlwZSBvZiB0aGUgbGVnZW5kXG4gICAgICBpZiAoY2hhbmdlLmluaXRpYWwpIHtcbiAgICAgICAgY2hhbmdlLmluaXRpYWwgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICAgIGNoYW5nZS5pbml0aWFsLFxuICAgICAgICAgIGdldExlZ2VuZFR5cGUoY2hhbmdlLmluaXRpYWwsIHJhd0luZm8uc1Zpcy52aWV3KVxuICAgICAgICApO1xuXG4gICAgICAgIGNoYW5nZS5pbml0aWFsLmRpcmVjdGlvbiA9IGNoYW5nZS5pbml0aWFsLmRpcmVjdGlvbiB8fCBcInZlcnRpY2FsXCI7XG4gICAgICAgIGNoYW5nZS5pbml0aWFsLm9yaWVudCA9IGNoYW5nZS5pbml0aWFsLm9yaWVudCB8fCBcInJpZ2h0XCI7XG4gICAgICB9XG4gICAgICBpZiAoY2hhbmdlLmZpbmFsKSB7XG4gICAgICAgIGNoYW5nZS5maW5hbCA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgY2hhbmdlLmZpbmFsLFxuICAgICAgICAgIGdldExlZ2VuZFR5cGUoY2hhbmdlLmZpbmFsLCByYXdJbmZvLmVWaXMudmlldylcbiAgICAgICAgKTtcbiAgICAgICAgY2hhbmdlLmZpbmFsLmRpcmVjdGlvbiA9IGNoYW5nZS5maW5hbC5kaXJlY3Rpb24gfHwgXCJ2ZXJ0aWNhbFwiO1xuICAgICAgICBjaGFuZ2UuZmluYWwub3JpZW50ID0gY2hhbmdlLmZpbmFsLm9yaWVudCB8fCBcInJpZ2h0XCI7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKHN0ZXAuY29tcFR5cGUgPT09IFwidmlld1wiKSB7XG4gICAgY2hhbmdlLnNpZ25hbCA9IGNoYW5nZS5zaWduYWwgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBjaGFuZ2Uuc2lnbmFsO1xuICB9XG4gIHJldHVybiBjaGFuZ2U7XG59XG5cblxuZnVuY3Rpb24gYXR0YWNoQ2hhbmdlcyhyYXdJbmZvLCBzY2hlZHVsZSkge1xuICBjb25zdCBjaGFuZ2VzID0gZ2V0Q2hhbmdlcyhcbiAgICBnZXRDb21wb25lbnRzKHJhd0luZm8uc1Zpcy5zcGVjKSxcbiAgICBnZXRDb21wb25lbnRzKHJhd0luZm8uZVZpcy5zcGVjKVxuICApO1xuXG4gIC8vIGF0dGFjaCB0aGUgdmlldyBjaGFuZ2VcbiAgY2hhbmdlcy5wdXNoKGdldFZpZXdDaGFuZ2UocmF3SW5mbykpO1xuXG4gIHNjaGVkdWxlLmZvckVhY2godHJhY2sgPT4ge1xuICAgIHRyYWNrLnN0ZXBzID0gdHJhY2suc3RlcHMubWFwKHN0ZXAgPT4ge1xuICAgICAgaWYgKHN0ZXAuY29tcFR5cGUgPT09IFwicGF1c2VcIikge1xuICAgICAgICByZXR1cm4gc3RlcDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm91bmQgPSBjaGFuZ2VzLmZpbmQoY2hhbmdlID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBjaGFuZ2UuY29tcFR5cGUgPT09IHN0ZXAuY29tcFR5cGUgJiZcbiAgICAgICAgICAoY2hhbmdlLmNvbXBOYW1lID09PSBzdGVwLmNvbXBOYW1lIHx8IHN0ZXAuY29tcFR5cGUgPT09IFwidmlld1wiKVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYGNhbm5vdCBmb3VuZCB0aGUgY2hhbmdlcyBvZiAke3N0ZXAuY29tcE5hbWV9LmApO1xuICAgICAgfVxuXG4gICAgICBzdGVwLmNoYW5nZSA9IHtcbiAgICAgICAgLi4uc3RlcC5jaGFuZ2UsXG4gICAgICAgIC4uLmZvdW5kXG4gICAgICB9O1xuICAgICAgc3RlcC5jaGFuZ2UgPSB7XG4gICAgICAgIC4uLnN0ZXAuY2hhbmdlLFxuICAgICAgICAuLi5nZXREZWZhdWx0Q2hhbmdlKHN0ZXAsIHJhd0luZm8pXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gc3RlcDtcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHNjaGVkdWxlO1xufVxuXG5leHBvcnQgeyBnZXRDb21wb25lbnRzLCBnZXRDaGFuZ2VzLCBnZXRWaWV3Q2hhbmdlLCBnZXREZWZhdWx0Q2hhbmdlLCBhdHRhY2hDaGFuZ2VzIH07XG4iLCJpbXBvcnQgKiBhcyB2ZWdhIGZyb20gXCJ2ZWdhXCI7XG5pbXBvcnQgeyBqb2luRGF0YSwgaW5pdGlhbERhdGEsIGdldEFnZ3JlZ2F0ZSB9IGZyb20gXCIuL2RhdGFKb2luXCI7XG5pbXBvcnQgeyBmaW5kQ29tcCB9IGZyb20gXCIuLi8uLi9hY3R1YXRvci91dGlsXCI7XG5pbXBvcnQgeyBERUZBVUxUX0VOQ09ERSwgREVGQVVMVF9TVFlMRSB9IGZyb20gXCIuLi8uLi9kZWZhdWx0XCI7XG5pbXBvcnQgKiBhcyBjb21wdXRlU3RhdGVzIGZyb20gXCIuL2NvbXB1dGVcIjtcbmltcG9ydCB7IGNvbXB1dGVOZXdTcGVjLCBFbnVtZXJhdG9yIH0gZnJvbSBcIi4uLy4uL2VudW1lcmF0b3JcIjtcbmltcG9ydCB7IGNvcHksIGdldCB9IGZyb20gXCIuLi8uLi91dGlsL3V0aWxcIjtcbmltcG9ydCB7XG4gIGdldENvbXBvbmVudHMsXG4gIGdldFZpZXdDaGFuZ2UsXG59IGZyb20gXCIuLi9jaGFuZ2VcIjtcbmltcG9ydCB7XG4gIGNvbXB1dGVIYXNGYWNldCxcbiAgaXNHcm91cGluZ01hcmt0eXBlLFxuICBmaW5kTWFyayxcbiAgZmluZEZpbHRlcixcbiAgZmluZERhdGFcbn0gZnJvbSBcIi4vdXRpbFwiO1xuXG5cbi8vVG9kbyBtYWtlIHNjaGVkdWxlIGNsYXNzIGFuZCBwdXQgdGhpcyBhcyBpdHMgbWV0aG9kXG5mdW5jdGlvbiBnZXRNb21lbnRzKHNjaGVkdWxlKSB7XG4gIGNvbnN0IG1vbWVudHMgPSBbXTtcbiAgc2NoZWR1bGUuZm9yRWFjaCh0cmFjayA9PiB7XG4gICAgdHJhY2suc3RlcHMuZm9yRWFjaChzdGVwID0+IHtcbiAgICAgIGxldCBtID0gbW9tZW50cy5maW5kKG0gPT4gbS50aW1lID09PSBzdGVwLnNUaW1lKTtcbiAgICAgIGlmICghbSkge1xuICAgICAgICBtb21lbnRzLnB1c2goe1xuICAgICAgICAgIHRpbWU6IHN0ZXAuc1RpbWUsXG4gICAgICAgICAgc3RhcnRpbmc6IFtzdGVwXSxcbiAgICAgICAgICBlbmRpbmc6IFtdXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbS5zdGFydGluZy5wdXNoKHN0ZXApO1xuICAgICAgfVxuICAgICAgbSA9IG1vbWVudHMuZmluZChtID0+IG0udGltZSA9PT0gc3RlcC5lVGltZSk7XG4gICAgICBpZiAoIW0pIHtcbiAgICAgICAgbW9tZW50cy5wdXNoKHtcbiAgICAgICAgICB0aW1lOiBzdGVwLmVUaW1lLFxuICAgICAgICAgIHN0YXJ0aW5nOiBbXSxcbiAgICAgICAgICBlbmRpbmc6IFtzdGVwXVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG0uZW5kaW5nLnB1c2goc3RlcCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gbW9tZW50cy5zb3J0KChhLCBiKSA9PiBhLnRpbWUgLSBiLnRpbWUpO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2hTdGF0ZXMoc2NoZWR1bGUsIHJhd0luZm8pIHtcbiAgY29uc3Qgc3RhdGUgPSBpbml0aWFsaXplU3RhdGUoc2NoZWR1bGUsIHJhd0luZm8pO1xuICBjb25zdCBtb21lbnRzID0gZ2V0TW9tZW50cyhzY2hlZHVsZSk7XG4gIHNjaGVkdWxlLm1vbWVudHMgPSBtb21lbnRzO1xuXG4gIG1vbWVudHMuZm9yRWFjaChtb21lbnQgPT4ge1xuICAgIG1vbWVudC5lbmRpbmcuZm9yRWFjaChzdGVwID0+IHtcbiAgICAgIGNvbnN0IGxhc3RTdGF0ZSA9IHN0YXRlW3N0ZXAudHJhY2tOYW1lXTtcbiAgICAgIGlmIChzdGVwLmNvbXBUeXBlID09PSBcInBhdXNlXCIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsYXN0U3RhdGUuZGF0YSA9IGxhc3RTdGF0ZS5kYXRhIHx8IGluaXRpYWxEYXRhKHN0ZXAsIHJhd0luZm8pO1xuXG4gICAgICAvLyBXaGVuIHRoZSBzdGVwcyBhcmUgZW51bWVyYXRlZCBieSBcImVudW1lcmF0b3JcIlxuICAgICAgbGV0IGVWaWV3O1xuICAgICAgaWYgKHN0ZXAuZW51bWVyYXRlZCkge1xuICAgICAgICBzdGVwLmVudW1lcmF0ZWQuZm9yRWFjaChlbnVtZWQgPT4ge1xuICAgICAgICAgIGNvbnN0IGZpbHRlciA9IGZpbmRGaWx0ZXIoc3RhdGUuc3BlYywgZW51bWVkLmRlZi5maWx0ZXIpO1xuICAgICAgICAgIHN0YXRlLnNwZWMgPSBjb21wdXRlTmV3U3BlYyhzdGF0ZS5zcGVjLCBmaWx0ZXIsIGVudW1lZC52YWwpO1xuICAgICAgICB9KTtcbiAgICAgICAgZVZpZXcgPSBuZXcgdmVnYS5WaWV3KHZlZ2EucGFyc2Uoc3RhdGUuc3BlYyksIHtcbiAgICAgICAgICByZW5kZXJlcjogXCJub25lXCJcbiAgICAgICAgfSkucnVuKCk7XG4gICAgICB9XG4gICAgICBjb25zdCBuZXdSYXdJbmZvID0ge1xuICAgICAgICBzVmlzOiByYXdJbmZvLnNWaXMsXG4gICAgICAgIGVWaXM6IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAge30sXG4gICAgICAgICAgcmF3SW5mby5lVmlzLFxuICAgICAgICAgIGVWaWV3ID8geyB2aWV3OiBlVmlldyB9IDogdW5kZWZpbmVkXG4gICAgICAgIClcbiAgICAgIH07XG4gICAgICBpZiAoc3RlcC5jb21wVHlwZSA9PT0gXCJ2aWV3XCIpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzdGVwLmNoYW5nZSwgZ2V0Vmlld0NoYW5nZShuZXdSYXdJbmZvKSk7XG4gICAgICB9XG5cbiAgICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICAgIHN0ZXAsXG4gICAgICAgIGNvbXB1dGVTdGF0ZXNbc3RlcC5jb21wVHlwZV0obmV3UmF3SW5mbywgc3RlcCwgbGFzdFN0YXRlKVxuICAgICAgKTtcbiAgICAgIE9iamVjdC5hc3NpZ24oc3RlcCwgam9pbkRhdGEoc3RlcCwgbmV3UmF3SW5mbywgbGFzdFN0YXRlLmRhdGEpKTtcbiAgICAgIGxhc3RTdGF0ZS5kYXRhID0gc3RlcC5uZXh0RGF0YTtcblxuICAgICAgaWYgKHN0ZXAuZW5jb2Rlcykge1xuICAgICAgICBsYXN0U3RhdGUuZW5jb2RlID1cbiAgICAgICAgICBjb3B5KHN0ZXAuZW5jb2Rlcy5maW5hbCkgfHxcbiAgICAgICAgICBPYmplY3Qua2V5cyhzdGVwLmVuY29kZXMpLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGFjY1trZXldID0gc3RlcC5lbmNvZGVzW2tleV0uZmluYWw7XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgIH0sIHt9KTtcbiAgICAgIH1cbiAgICAgIGxhc3RTdGF0ZS5zdHlsZUVuY29kZSA9IHN0ZXAuc3R5bGVFbmNvZGVzID8gc3RlcC5zdHlsZUVuY29kZXMuZmluYWwgOiB1bmRlZmluZWQ7XG4gICAgICBsYXN0U3RhdGUuc2lnbmFsID0gc3RlcC5zaWduYWxzID8gc3RlcC5zaWduYWxzLmZpbmFsIDogdW5kZWZpbmVkO1xuICAgICAgbGFzdFN0YXRlLnNjYWxlID0gc3RlcC5zY2FsZXMgPyBzdGVwLnNjYWxlcy5maW5hbCA6IHVuZGVmaW5lZDtcbiAgICAgIGxhc3RTdGF0ZS5tYXJrdHlwZSA9IHN0ZXAubWFya3R5cGVzID8gc3RlcC5tYXJrdHlwZXMuZmluYWwgOiB1bmRlZmluZWQ7XG4gICAgICBsYXN0U3RhdGUuaGFzRmFjZXQgPSBzdGVwLmhhc0ZhY2V0ID8gc3RlcC5oYXNGYWNldC5maW5hbCA6IHVuZGVmaW5lZDtcbiAgICAgIGxhc3RTdGF0ZS5hZ2dyZWdhdGUgPSBzdGVwLmFnZ3JlZ2F0ZXMgPyBzdGVwLmFnZ3JlZ2F0ZXMuZmluYWwgOiB1bmRlZmluZWQ7XG4gICAgICBsYXN0U3RhdGUuaXNBZGQgPSBzdGVwLmlzQWRkO1xuICAgICAgbGFzdFN0YXRlLmlzUmVtb3ZlID0gc3RlcC5pc1JlbW92ZTtcbiAgICAgIGxhc3RTdGF0ZS5zYW1lRG9tYWluRGltZW5zaW9uID0gc3RlcC5zYW1lRG9tYWluRGltZW5zaW9uO1xuXG4gICAgICBzdGF0ZS5zcGVjID0gdXBkYXRlU3BlYyhzdGF0ZSwgc3RlcCwgbmV3UmF3SW5mby5lVmlzLnNwZWMpO1xuXG4gICAgICAvLyBDYXRjaCBpZiBzY2FsZSA8IGRhdGEgZm9yIGVuY29kZXMgdXNpbmcgc2NhbGVzXG5cbiAgICAgIGlmIChzdGVwLmNvbXBUeXBlID09PSBcIm1hcmtcIikge1xuICAgICAgICBsZXQgdmFsaWQgPSBzY2hlZHVsZS5maW5kKHRyYWNrID0+IHRyYWNrLm5hbWUgPT09IHN0ZXAudHJhY2tOYW1lKVxuICAgICAgICAgIC5zY2FsZU9yZGVyVmFsaWQ7XG4gICAgICAgIHZhbGlkID0gdmFsaWQgPT09IHVuZGVmaW5lZCA/IHRydWUgOiB2YWxpZDtcblxuICAgICAgICBPYmplY3Qua2V5cyhsYXN0U3RhdGUuZW5jb2RlLnVwZGF0ZSkubWFwKHByb3AgPT4ge1xuICAgICAgICAgIGNvbnN0IGZvdW5kU2NhbGUgPVxuICAgICAgICAgICAgbGFzdFN0YXRlLnNjYWxlW2xhc3RTdGF0ZS5lbmNvZGUudXBkYXRlW3Byb3BdLnNjYWxlXTtcblxuICAgICAgICAgIGlmIChmb3VuZFNjYWxlICYmIGxhc3RTdGF0ZS5lbmNvZGUudXBkYXRlW3Byb3BdLmZpZWxkKSB7XG4gICAgICAgICAgICBjb25zdCB7IGZpZWxkIH0gPSBsYXN0U3RhdGUuZW5jb2RlLnVwZGF0ZVtwcm9wXTtcbiAgICAgICAgICAgIGxldCB2YWxzID0gbGFzdFN0YXRlLmRhdGEubWFwKGQgPT4gZC5kYXR1bVtmaWVsZF0pO1xuXG4gICAgICAgICAgICBpZiAobGFzdFN0YXRlLmRhdGFbMF0ubWFyay5tYXJrdHlwZSA9PT0gXCJncm91cFwiKSB7XG4gICAgICAgICAgICAgIHZhbHMgPSBsYXN0U3RhdGUuZGF0YS5yZWR1Y2UoKHZhbHMsIGQpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFscy5jb25jYXQoZC5pdGVtc1swXS5pdGVtcy5tYXAoZDIgPT4gZDIuZGF0dW1bZmllbGRdKSk7XG4gICAgICAgICAgICAgIH0sIFtdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc2NhbGVEb21haW4gPSBmb3VuZFNjYWxlLmRvbWFpbigpO1xuICAgICAgICAgICAgaWYgKGZvdW5kU2NhbGUudHlwZSA9PT0gXCJiYW5kXCIgfHwgZm91bmRTY2FsZS50eXBlID09PSBcInBvaW50XCIpIHtcbiAgICAgICAgICAgICAgdmFsaWQgPVxuICAgICAgICAgICAgICAgIHZhbGlkICYmXG4gICAgICAgICAgICAgICAgdmFscy5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAoYWNjLCB2KSA9PiAoYWNjID0gYWNjICYmIHNjYWxlRG9tYWluLmluZGV4T2YodikgPj0gMCksXG4gICAgICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm91bmRTY2FsZS50eXBlID09PSBcImxpbmVhclwiKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG1heCA9IE1hdGgubWF4KC4uLnZhbHMpO1xuICAgICAgICAgICAgICBjb25zdCBtaW4gPSBNYXRoLm1pbiguLi52YWxzKTtcbiAgICAgICAgICAgICAgdmFsaWQgPSB2YWxpZCAmJiBzY2FsZURvbWFpblswXSA8PSBtaW4gJiYgc2NhbGVEb21haW5bMV0gPj0gbWF4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHNjaGVkdWxlLmZpbmQoXG4gICAgICAgICAgdHJhY2sgPT4gdHJhY2submFtZSA9PT0gc3RlcC50cmFja05hbWVcbiAgICAgICAgKS5zY2FsZU9yZGVyVmFsaWQgPSB2YWxpZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBtb21lbnQuc3RhcnRpbmcuZm9yRWFjaChzdGVwID0+IHtcbiAgICAgIGNvbnN0IGxhc3RTdGF0ZSA9IHN0YXRlW3N0ZXAudHJhY2tOYW1lXTtcbiAgICAgIGlmIChnZXQoc3RlcCwgXCJlbnVtZXJhdG9yXCIpKSB7XG4gICAgICAgIGlmIChzdGVwLmNvbXBUeXBlID09PSBcIm1hcmtcIikge1xuICAgICAgICAgIC8vIGZldGNoIGVudW1lcmF0b3JcbiAgICAgICAgICBzdGVwLmVudW1lcmF0b3JEZWYgPSBzdGVwLmVudW1lcmF0b3I7XG4gICAgICAgICAgY29uc3QgZW51bWVyYXRvciA9IChzdGVwLmVudW1lcmF0b3IgPSBuZXcgRW51bWVyYXRvcihcbiAgICAgICAgICAgIHN0ZXAuZW51bWVyYXRvcixcbiAgICAgICAgICAgIHN0YXRlLnNwZWMsXG4gICAgICAgICAgICByYXdJbmZvXG4gICAgICAgICAgKSk7XG4gICAgICAgICAgLy8gbGV0IGRhdGFOYW1lID0gKHN0ZXAuY2hhbmdlLmZpbmFsIHx8IHN0ZXAuY2hhbmdlLmZpbmFsKS5mcm9tLmRhdGE7XG4gICAgICAgICAgbGV0IGRhdGFOYW1lID0gc3RlcC5jb21wTmFtZTtcblxuICAgICAgICAgIGxldCBrZXkgPVxuICAgICAgICAgICAgKEFycmF5LmlzQXJyYXkoc3RlcC5jaGFuZ2UuZGF0YSlcbiAgICAgICAgICAgICAgPyBzdGVwLmNoYW5nZS5kYXRhXG4gICAgICAgICAgICAgIDogc3RlcC5jaGFuZ2UuZGF0YS5rZXlzKSB8fCBudWxsO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbXB1dGVIYXNGYWNldChzdGVwLmNoYW5nZS5pbml0aWFsKSAmJlxuICAgICAgICAgICAgY29tcHV0ZUhhc0ZhY2V0KHN0ZXAuY2hhbmdlLmZpbmFsKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAga2V5ID0gKHN0ZXAuY2hhbmdlLmZpbmFsIHx8IHN0ZXAuY2hhbmdlLmZpbmFsKS5wYXJlbnQuZnJvbS5mYWNldFxuICAgICAgICAgICAgICAuZ3JvdXBieTtcbiAgICAgICAgICAgIGRhdGFOYW1lID0gKHN0ZXAuY2hhbmdlLmZpbmFsIHx8IHN0ZXAuY2hhbmdlLmZpbmFsKS5wYXJlbnQubmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IGV4dHJhY3REYXRhID0gdmlldyA9PiB2aWV3LmRhdGEoZGF0YU5hbWUpO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFjb21wdXRlSGFzRmFjZXQoc3RlcC5jaGFuZ2UuaW5pdGlhbCkgJiZcbiAgICAgICAgICAgICFjb21wdXRlSGFzRmFjZXQoc3RlcC5jaGFuZ2UuZmluYWwpICYmXG4gICAgICAgICAgICBpc0dyb3VwaW5nTWFya3R5cGUoc3RlcC5jaGFuZ2UuaW5pdGlhbCkgJiZcbiAgICAgICAgICAgIGlzR3JvdXBpbmdNYXJrdHlwZShzdGVwLmNoYW5nZS5maW5hbClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGV4dHJhY3REYXRhID0gdmlldyA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB2aWV3Ll9ydW50aW1lLmRhdGFbZGF0YU5hbWVdLnZhbHVlcy52YWx1ZTtcbiAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBkYXR1bToge30sXG4gICAgICAgICAgICAgICAgICBtYXJrOiB7IHJvbGU6IFwiZ3JvdXBcIiwgbWFya3R5cGU6IFwiZ3JvdXBcIiB9LFxuICAgICAgICAgICAgICAgICAgaXRlbXM6IFt7IGl0ZW1zOiBkYXRhIH1dXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZW51bWVyYXRvci5qb2luRGF0YShleHRyYWN0RGF0YSwgKGQsIGkpID0+IHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGtleSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGtleVxuICAgICAgICAgICAgICAgIC5tYXAoZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGQuZGF0dW1bZmllbGRdO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmpvaW4oXCItXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGkudG9TdHJpbmcoKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIENoZWNrIGlmIHNjYWxlIDwgZGF0YVxuICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgZW51bWVyYXRvci5zdG9wTiAtIDE7IGkrKykge1xuICAgICAgICAgICAgbGV0IHNjYWxlID0gc2NOYW1lID0+IGxhc3RTdGF0ZS5zY2FsZVtzY05hbWVdO1xuICAgICAgICAgICAgaWYgKHN0ZXAuY2hhbmdlLnNjYWxlKSB7XG4gICAgICAgICAgICAgIHNjYWxlID0gZW51bWVyYXRvci5fZ2V0U2NhbGVzKGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGVudW1lcmF0b3IuZ2V0RGF0YShpKTtcbiAgICAgICAgICAgIGxldCB2YWxpZCA9IHNjaGVkdWxlLmZpbmQodHJhY2sgPT4gdHJhY2submFtZSA9PT0gc3RlcC50cmFja05hbWUpXG4gICAgICAgICAgICAgIC5zY2FsZU9yZGVyVmFsaWQ7XG4gICAgICAgICAgICB2YWxpZCA9IHZhbGlkID09PSB1bmRlZmluZWQgPyB0cnVlIDogdmFsaWQ7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhsYXN0U3RhdGUuZW5jb2RlLnVwZGF0ZSkubWFwKHByb3AgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBmb3VuZFNjYWxlID0gc2NhbGUobGFzdFN0YXRlLmVuY29kZS51cGRhdGVbcHJvcF0uc2NhbGUpO1xuXG4gICAgICAgICAgICAgIGlmIChmb3VuZFNjYWxlICYmIGxhc3RTdGF0ZS5lbmNvZGUudXBkYXRlW3Byb3BdLmZpZWxkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBmaWVsZCB9ID0gbGFzdFN0YXRlLmVuY29kZS51cGRhdGVbcHJvcF07XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NhbGVEb21haW4gPSBmb3VuZFNjYWxlLmRvbWFpbigpO1xuICAgICAgICAgICAgICAgIGxldCB2YWxzID0gZGF0YS5tYXAoZCA9PiBkW2ZpZWxkXSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoZGF0YVswXS5tYXJrLm1hcmt0eXBlID09PSBcImdyb3VwXCIpIHtcbiAgICAgICAgICAgICAgICAgIHZhbHMgPSBkYXRhLnJlZHVjZSgodmFscywgZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFscy5jb25jYXQoXG4gICAgICAgICAgICAgICAgICAgICAgZC5pdGVtc1swXS5pdGVtcy5tYXAoZDIgPT4gZDIuZGF0dW1bZmllbGRdKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfSwgW10pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChmb3VuZFNjYWxlLnR5cGUgPT09IFwiYmFuZFwiIHx8IGZvdW5kU2NhbGUudHlwZSA9PT0gXCJwb2ludFwiKSB7XG4gICAgICAgICAgICAgICAgICB2YWxpZCA9XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkICYmXG4gICAgICAgICAgICAgICAgICAgIHZhbHMucmVkdWNlKFxuICAgICAgICAgICAgICAgICAgICAgIChhY2MsIHYpID0+IChhY2MgPSBhY2MgJiYgc2NhbGVEb21haW4uaW5kZXhPZih2KSA+PSAwKSxcbiAgICAgICAgICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb3VuZFNjYWxlLnR5cGUgPT09IFwibGluZWFyXCIpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG1heCA9IE1hdGgubWF4KC4uLnZhbHMpO1xuICAgICAgICAgICAgICAgICAgY29uc3QgbWluID0gTWF0aC5taW4oLi4udmFscyk7XG4gICAgICAgICAgICAgICAgICB2YWxpZCA9XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkICYmIHNjYWxlRG9tYWluWzBdIDw9IG1pbiAmJiBzY2FsZURvbWFpblsxXSA+PSBtYXg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNjaGVkdWxlLmZpbmQoXG4gICAgICAgICAgICAgIHRyYWNrID0+IHRyYWNrLm5hbWUgPT09IHN0ZXAudHJhY2tOYW1lXG4gICAgICAgICAgICApLnNjYWxlT3JkZXJWYWxpZCA9IHZhbGlkO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChzdGVwLmNvbXBUeXBlID09PSBcImF4aXNcIikge1xuICAgICAgICAgIHN0ZXAuZW51bWVyYXRvckRlZiA9IHN0ZXAuZW51bWVyYXRvcjtcbiAgICAgICAgICBzdGVwLmVudW1lcmF0b3IgPSBbXCJ0aWNrXCIsIFwibGFiZWxcIiwgXCJncmlkXCJdLnJlZHVjZSgoYWNjLCBzdWJDb21wKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbnVtZXJhdG9yID0gbmV3IEVudW1lcmF0b3IoXG4gICAgICAgICAgICAgIHN0ZXAuZW51bWVyYXRvcixcbiAgICAgICAgICAgICAgc3RhdGUuc3BlYyxcbiAgICAgICAgICAgICAgcmF3SW5mb1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IHNjTmFtZSA9IHN0ZXAuY29tcE5hbWU7XG4gICAgICAgICAgICBlbnVtZXJhdG9yLmpvaW5EYXRhKFxuICAgICAgICAgICAgICB2aWV3ID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmlld1xuICAgICAgICAgICAgICAgICAgLmRhdGEoc2NOYW1lKVswXVxuICAgICAgICAgICAgICAgICAgLml0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0ucm9sZSA9PT0gYGF4aXMtJHtzdWJDb21wfWApWzBdXG4gICAgICAgICAgICAgICAgICAuaXRlbXM7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGQgPT4gZC5kYXR1bS52YWx1ZS50b1N0cmluZygpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYWNjW3N1YkNvbXBdID0gZW51bWVyYXRvcjtcbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgfSwge30pO1xuICAgICAgICB9IGVsc2UgaWYgKHN0ZXAuY29tcFR5cGUgPT09IFwibGVnZW5kXCIpIHtcbiAgICAgICAgICBzdGVwLmVudW1lcmF0b3JEZWYgPSBzdGVwLmVudW1lcmF0b3I7XG4gICAgICAgICAgbGV0IGxlZ2VuZEVudW1EZWZzID0gW107XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgc3RlcC5jaGFuZ2UuaW5pdGlhbC50eXBlID09PSBcImdyYWRpZW50XCIgJiZcbiAgICAgICAgICAgIHN0ZXAuY2hhbmdlLmluaXRpYWwudHlwZSA9PT0gXCJncmFkaWVudFwiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBzdWJDb21wcyA9IHN0ZXAuY2hhbmdlLmluaXRpYWwuaXNCYW5kXG4gICAgICAgICAgICAgID8gW1wiYmFuZHNcIiwgXCJsYWJlbHNcIl1cbiAgICAgICAgICAgICAgOiBbXCJsYWJlbHNcIl07XG4gICAgICAgICAgICBsZWdlbmRFbnVtRGVmcyA9IHN1YkNvbXBzLm1hcChzdWJDb21wID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzdWJDb21wLFxuICAgICAgICAgICAgICAgIGV4dHJhY3REYXRhOiB2aWV3ID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGVudHJ5RyA9IHZpZXcuX3J1bnRpbWUuZGF0YVtcbiAgICAgICAgICAgICAgICAgICAgc3RlcC5jb21wTmFtZVxuICAgICAgICAgICAgICAgICAgXS52YWx1ZXMudmFsdWVbMF0uaXRlbXMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgaXRlbSA9PiBpdGVtLnJvbGUgPT09IFwibGVnZW5kLWVudHJ5XCJcbiAgICAgICAgICAgICAgICAgICkuaXRlbXNbMF07XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZW50cnlHLml0ZW1zLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0gPT4gaXRlbS5yb2xlID09PSBgbGVnZW5kLSR7c3ViQ29tcC5yZXBsYWNlKC9zJC9nLCBcIlwiKX1gXG4gICAgICAgICAgICAgICAgICApLml0ZW1zO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaWRlbnRpZnlEYXR1bTogZCA9PiBkLmRhdHVtLnZhbHVlLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBzdGVwLmNoYW5nZS5pbml0aWFsLnR5cGUgPT09IFwic3ltYm9sXCIgJiZcbiAgICAgICAgICAgIHN0ZXAuY2hhbmdlLmluaXRpYWwudHlwZSA9PT0gXCJzeW1ib2xcIlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgbGVnZW5kRW51bURlZnMucHVzaCh7XG4gICAgICAgICAgICAgIHN1YkNvbXA6IFwicGFpcnNcIixcbiAgICAgICAgICAgICAgZXh0cmFjdERhdGE6IHZpZXcgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB2aWV3Ll9ydW50aW1lLmRhdGFbXG4gICAgICAgICAgICAgICAgICBzdGVwLmNvbXBOYW1lXG4gICAgICAgICAgICAgICAgXS52YWx1ZXMudmFsdWVbMF0uaXRlbXMuZmluZChcbiAgICAgICAgICAgICAgICAgIGl0ZW0gPT4gaXRlbS5yb2xlID09PSBcImxlZ2VuZC1lbnRyeVwiXG4gICAgICAgICAgICAgICAgKS5pdGVtc1swXS5pdGVtc1swXS5pdGVtcztcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaWRlbnRpZnlEYXR1bTogZCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBkYXR1bSB9ID0gZC5pdGVtcy5maW5kKFxuICAgICAgICAgICAgICAgICAgaXRlbSA9PiBpdGVtLnJvbGUgPT09IFwibGVnZW5kLWxhYmVsXCJcbiAgICAgICAgICAgICAgICApLml0ZW1zWzBdO1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXR1bS52YWx1ZS50b1N0cmluZygpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgbGVnZW5kRW51bURlZnMucHVzaCh7XG4gICAgICAgICAgICAgIHN1YkNvbXA6IFwibGFiZWxzXCIsXG4gICAgICAgICAgICAgIGV4dHJhY3REYXRhOiB2aWV3ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYWlycyA9IHZpZXcuX3J1bnRpbWUuZGF0YVtcbiAgICAgICAgICAgICAgICAgIHN0ZXAuY29tcE5hbWVcbiAgICAgICAgICAgICAgICBdLnZhbHVlcy52YWx1ZVswXS5pdGVtcy5maW5kKFxuICAgICAgICAgICAgICAgICAgaXRlbSA9PiBpdGVtLnJvbGUgPT09IFwibGVnZW5kLWVudHJ5XCJcbiAgICAgICAgICAgICAgICApLml0ZW1zWzBdLml0ZW1zWzBdLml0ZW1zO1xuICAgICAgICAgICAgICAgIHJldHVybiBwYWlycy5tYXAocGFpciA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gcGFpci5pdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS5yb2xlID09PSBcImxlZ2VuZC1sYWJlbFwiKVxuICAgICAgICAgICAgICAgICAgICAuaXRlbXNbMF07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGlkZW50aWZ5RGF0dW06IGQgPT4gZC5kYXR1bS52YWx1ZS50b1N0cmluZygpXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgbGVnZW5kRW51bURlZnMucHVzaCh7XG4gICAgICAgICAgICAgIHN1YkNvbXA6IFwic3ltYm9sc1wiLFxuICAgICAgICAgICAgICBleHRyYWN0RGF0YTogdmlldyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFpcnMgPSB2aWV3Ll9ydW50aW1lLmRhdGFbXG4gICAgICAgICAgICAgICAgICBzdGVwLmNvbXBOYW1lXG4gICAgICAgICAgICAgICAgXS52YWx1ZXMudmFsdWVbMF0uaXRlbXMuZmluZChcbiAgICAgICAgICAgICAgICAgIGl0ZW0gPT4gaXRlbS5yb2xlID09PSBcImxlZ2VuZC1lbnRyeVwiXG4gICAgICAgICAgICAgICAgKS5pdGVtc1swXS5pdGVtc1swXS5pdGVtcztcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFpcnMubWFwKHBhaXIgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhaXIuaXRlbXMuZmluZChpdGVtID0+IGl0ZW0ucm9sZSA9PT0gXCJsZWdlbmQtc3ltYm9sXCIpXG4gICAgICAgICAgICAgICAgICAgIC5pdGVtc1swXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaWRlbnRpZnlEYXR1bTogZCA9PiBkLmRhdHVtLnZhbHVlLnRvU3RyaW5nKClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkNhbm5vdCBlbnVtZXJhdGUgdGhlIGNoYW5nZXMgd2hlbiB0aGUgbGVnZW5kIHR5cGUgY2hhbmdlcy5cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3RlcC5lbnVtZXJhdG9yID0gbGVnZW5kRW51bURlZnMucmVkdWNlKChhY2MsIGVudW1EZWYpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVudW1lcmF0b3IgPSBuZXcgRW51bWVyYXRvcihcbiAgICAgICAgICAgICAgc3RlcC5lbnVtZXJhdG9yLFxuICAgICAgICAgICAgICBzdGF0ZS5zcGVjLFxuICAgICAgICAgICAgICByYXdJbmZvXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZW51bWVyYXRvci5qb2luRGF0YShlbnVtRGVmLmV4dHJhY3REYXRhLCBlbnVtRGVmLmlkZW50aWZ5RGF0dW0pO1xuICAgICAgICAgICAgYWNjW2VudW1EZWYuc3ViQ29tcF0gPSBlbnVtZXJhdG9yO1xuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICB9LCB7fSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHNjaGVkdWxlO1xufVxuXG5mdW5jdGlvbiBpbml0aWFsaXplU3RhdGUoc2NoZWR1bGUsIHJhd0luZm8pIHtcbiAgY29uc3Qgc1ZpZXcgPSByYXdJbmZvLnNWaXMudmlldztcbiAgY29uc3Qgc1NwZWMgPSByYXdJbmZvLnNWaXMuc3BlYztcbiAgY29uc3Qgc0NvbXBzID0gZ2V0Q29tcG9uZW50cyhzU3BlYyk7XG4gIGNvbnN0IGluaXRpYWxTdGF0ZSA9IHtcbiAgICBzcGVjOiBjb3B5KHNTcGVjKVxuICB9O1xuICByZXR1cm4gc2NoZWR1bGUucmVkdWNlKChpbml0aWFsU3RhdGUsIHRyYWNrKSA9PiB7XG4gICAgLy8gVG9kbzogc29tZSBzY2FsZXMgY2FuIGJlIGhpZGRlbiBpbiBfcnVudGltZS5fc3ViY29udGV4dFxuICAgIGNvbnN0IGNvbXBTdGF0ZSA9IHtcbiAgICAgIHNjYWxlOiB7fSxcbiAgICAgIHNpZ25hbDoge1xuICAgICAgICB3aWR0aDogc1ZpZXcuc2lnbmFsKFwid2lkdGhcIiksXG4gICAgICAgIGhlaWdodDogc1ZpZXcuc2lnbmFsKFwiaGVpZ2h0XCIpLFxuICAgICAgICBwYWRkaW5nOiBzVmlldy5zaWduYWwoXCJwYWRkaW5nXCIpXG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmICh0cmFjay5jb21wVHlwZSA9PT0gXCJtYXJrXCIpIHtcbiAgICAgIGNvbnN0IHNDb21wID0gc0NvbXBzLmZpbmQoYyA9PiBjLm5hbWUgPT09IHRyYWNrLmNvbXBOYW1lKTtcblxuICAgICAgaWYgKHNDb21wKSB7XG4gICAgICAgIGNvbXBTdGF0ZS5tYXJrdHlwZSA9IHNDb21wLnR5cGU7XG4gICAgICAgIGNvbXBTdGF0ZS5oYXNGYWNldCA9IGNvbXB1dGVIYXNGYWNldChzQ29tcCk7XG4gICAgICAgIGNvbXBTdGF0ZS5zdHlsZUVuY29kZSA9IHNDb21wLnN0eWxlID8gREVGQVVMVF9TVFlMRVtzQ29tcC5zdHlsZV0gOiB7fTtcblxuICAgICAgICBjb21wU3RhdGUuZW5jb2RlID0gY29weShzQ29tcC5lbmNvZGUgfHwge30pO1xuICAgICAgICBjb25zdCBiYXNlRW5jb2RlID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICB7fSxcbiAgICAgICAgICBERUZBVUxUX0VOQ09ERS5tYXJrW2NvbXBTdGF0ZS5tYXJrdHlwZV0udXBkYXRlLFxuICAgICAgICAgIHNDb21wLnN0eWxlID8gREVGQVVMVF9TVFlMRVtzQ29tcC5zdHlsZV0gOiB7fVxuICAgICAgICApO1xuICAgICAgICBjb21wU3RhdGUuZW5jb2RlLnVwZGF0ZSA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgYmFzZUVuY29kZSxcbiAgICAgICAgICBjb21wU3RhdGUuZW5jb2RlLnVwZGF0ZVxuICAgICAgICApO1xuICAgICAgICBjb21wU3RhdGUuZW5jb2RlLmV4aXQgPSBjb3B5KGNvbXBTdGF0ZS5lbmNvZGUudXBkYXRlKTtcbiAgICAgICAgY29tcFN0YXRlLmVuY29kZS5lbnRlciA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAge30sXG4gICAgICAgICAgY29tcFN0YXRlLmVuY29kZS51cGRhdGUsXG4gICAgICAgICAgREVGQVVMVF9FTkNPREUubWFyay5lbnRlclxuICAgICAgICApO1xuXG4gICAgICAgIHNDb21wc1xuICAgICAgICAgIC5maWx0ZXIoY29tcCA9PiBjb21wLmNvbXBUeXBlID09PSBcInNjYWxlXCIpXG4gICAgICAgICAgLmZvckVhY2goc2NhbGUgPT4ge1xuICAgICAgICAgICAgY29tcFN0YXRlLnNjYWxlW3NjYWxlLm5hbWVdID0gc1ZpZXcuc2NhbGUoc2NhbGUubmFtZSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21wU3RhdGUuZW5jb2RlID0ge307XG4gICAgICAgIGNvbXBTdGF0ZS5zdHlsZUVuY29kZSA9IHt9O1xuICAgICAgfVxuICAgICAgY29tcFN0YXRlLmFnZ3JlZ2F0ZSA9IGdldEFnZ3JlZ2F0ZShcbiAgICAgICAgdHJhY2suc3RlcHNbMF0uY2hhbmdlLFxuICAgICAgICByYXdJbmZvXG4gICAgICApLmluaXRpYWw7XG4gICAgICAvLyBjb21wU3RhdGUuYWdncmVnYXRlLmRvbmUgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKHRyYWNrLmNvbXBUeXBlID09PSBcImF4aXNcIikge1xuICAgICAgLy8gZm9yIGF4aXMgY29tcFxuICAgICAgY29uc3Qgc0NvbXAgPSBzQ29tcHMuZmluZChcbiAgICAgICAgYyA9PiBjLmNvbXBUeXBlID09PSBcImF4aXNcIiAmJiBjLmVuY29kZS5heGlzLm5hbWUgPT09IHRyYWNrLmNvbXBOYW1lXG4gICAgICApO1xuXG4gICAgICBpZiAodHJhY2suc3RlcHNbMF0uY2hhbmdlLmluaXRpYWwpIHtcbiAgICAgICAgY29tcFN0YXRlLnNjYWxlW3NDb21wLnNjYWxlXSA9IHNWaWV3LnNjYWxlKHNDb21wLnNjYWxlKTtcbiAgICAgIH1cblxuICAgICAgY29tcFN0YXRlLmVuY29kZSA9IHNDb21wID8gY29weShzQ29tcC5lbmNvZGUgfHwge30pIDoge307XG4gICAgICBjb25zdCBheGlzR0RhdHVtSW5pdGlhbCA9IHNDb21wXG4gICAgICAgID8gZmluZENvbXAoc1ZpZXcuc2NlbmVncmFwaCgpLnJvb3QsIHRyYWNrLmNvbXBOYW1lLCBcImF4aXNcIilbMF0uaXRlbXNbMF1cbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICBjb21wU3RhdGUuZW5jb2RlLmF4aXMgPSBheGlzR0RhdHVtSW5pdGlhbFxuICAgICAgICA/IHtcbiAgICAgICAgICB1cGRhdGU6IHtcbiAgICAgICAgICAgIHg6IHsgdmFsdWU6IGF4aXNHRGF0dW1Jbml0aWFsLnggfSxcbiAgICAgICAgICAgIHk6IHsgdmFsdWU6IGF4aXNHRGF0dW1Jbml0aWFsLnkgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICA6IHt9O1xuICAgIH0gZWxzZSBpZiAodHJhY2suY29tcFR5cGUgPT09IFwibGVnZW5kXCIpIHtcbiAgICAgIC8vIGZvciBheGlzIGNvbXBcblxuICAgICAgY29uc3Qgc0NvbXAgPSBzQ29tcHMuZmluZChcbiAgICAgICAgYyA9PiBjLmNvbXBUeXBlID09PSBcImxlZ2VuZFwiICYmIGMuZW5jb2RlLmxlZ2VuZC5uYW1lID09PSB0cmFjay5jb21wTmFtZVxuICAgICAgKTtcbiAgICAgIGNvbXBTdGF0ZS5sZWdlbmRUeXBlID0gdW5kZWZpbmVkO1xuICAgICAgaWYgKHRyYWNrLnN0ZXBzWzBdLmNoYW5nZS5pbml0aWFsKSB7XG4gICAgICAgIGNvbXBTdGF0ZS5sZWdlbmRUeXBlID0gdHJhY2suc3RlcHNbMF0uY2hhbmdlLmluaXRpYWwudHlwZTtcbiAgICAgICAgW1xuICAgICAgICAgIFwiZmlsbFwiLFxuICAgICAgICAgIFwib3BhY2l0eVwiLFxuICAgICAgICAgIFwic2hhcGVcIixcbiAgICAgICAgICBcInNpemVcIixcbiAgICAgICAgICBcInN0cm9rZVwiLFxuICAgICAgICAgIFwic3Ryb2tlRGFzaFwiLFxuICAgICAgICAgIFwic3Ryb2tlV2lkdGhcIlxuICAgICAgICBdLmZvckVhY2goY2hhbm5lbCA9PiB7XG4gICAgICAgICAgY29uc3Qgc2NOYW1lID0gdHJhY2suc3RlcHNbMF0uY2hhbmdlLmluaXRpYWxbY2hhbm5lbF07XG4gICAgICAgICAgaWYgKHNjTmFtZSkge1xuICAgICAgICAgICAgY29tcFN0YXRlLnNjYWxlW3NjTmFtZV0gPSBzVmlldy5zY2FsZShzY05hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGNvbXBTdGF0ZS5lbmNvZGUgPSBzQ29tcCA/IGNvcHkoc0NvbXAuZW5jb2RlIHx8IHt9KSA6IHt9O1xuICAgIH0gZWxzZSBpZiAodHJhY2suY29tcFR5cGUgPT09IFwidmlld1wiKSB7XG4gICAgICBjb25zdCBpUm9vdERhdHVtID0gc1ZpZXcuX3J1bnRpbWUuZGF0YS5yb290LnZhbHVlcy52YWx1ZVswXTtcbiAgICAgIGNvbnN0IHsgaW5pdGlhbCB9ID0gdHJhY2suc3RlcHNbMF0uY2hhbmdlO1xuICAgICAgY29tcFN0YXRlLmVuY29kZSA9IHtcbiAgICAgICAgc3ZnOiB7XG4gICAgICAgICAgeDogeyB2YWx1ZTogaW5pdGlhbC54ICsgaW5pdGlhbC5wYWRkaW5nIH0sXG4gICAgICAgICAgeTogeyB2YWx1ZTogaW5pdGlhbC55ICsgaW5pdGlhbC5wYWRkaW5nIH0sXG4gICAgICAgICAgd2lkdGg6IHsgdmFsdWU6IGluaXRpYWwudmlld1dpZHRoICsgaW5pdGlhbC5wYWRkaW5nICogMiB9LFxuICAgICAgICAgIGhlaWdodDogeyB2YWx1ZTogaW5pdGlhbC52aWV3SGVpZ2h0ICsgaW5pdGlhbC5wYWRkaW5nICogMiB9XG4gICAgICAgIH0sXG4gICAgICAgIHJvb3Q6IHtcbiAgICAgICAgICB3aWR0aDogeyB2YWx1ZTogaW5pdGlhbC53aWR0aCB9LFxuICAgICAgICAgIGhlaWdodDogeyB2YWx1ZTogaW5pdGlhbC5oZWlnaHQgfSxcbiAgICAgICAgICBmaWxsOiB7IHZhbHVlOiBpUm9vdERhdHVtLmZpbGwgfSxcbiAgICAgICAgICBzdHJva2U6IHsgdmFsdWU6IGlSb290RGF0dW0uc3Ryb2tlIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgaW5pdGlhbFN0YXRlW3RyYWNrLm5hbWVdID0gY29tcFN0YXRlO1xuICAgIHJldHVybiBpbml0aWFsU3RhdGU7XG4gIH0sIGluaXRpYWxTdGF0ZSk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVNwZWMobGFzdFN0YXRlLCBsYXN0U3RlcCwgZVNwZWMpIHtcbiAgY29uc3QgdXBkYXRlZFNwZWMgPSBjb3B5KGxhc3RTdGF0ZS5zcGVjKTtcbiAgaWYgKGxhc3RTdGVwLmNvbXBUeXBlID09PSBcIm1hcmtcIikge1xuICAgIGNvbnN0IGxhc3RNYXJrQ29tcCA9IGxhc3RTdGVwLmNoYW5nZS5maW5hbDtcbiAgICAvLyBJZiB0aGUgbWFya0NvbXAgaXMgZmFjZXR0ZWQsIGl0cyBwYXJlbnQgbWFyayBzaG91bGQgYmUgdXBkYXRlZC5cbiAgICBjb25zdCBjb21wTmFtZSA9IGNvbXB1dGVIYXNGYWNldChsYXN0TWFya0NvbXApXG4gICAgICA/IGxhc3RNYXJrQ29tcC5wYXJlbnQubmFtZVxuICAgICAgOiBsYXN0U3RlcC5jb21wTmFtZTtcbiAgICBpZiAoIWxhc3RNYXJrQ29tcCAmJiBjb21wTmFtZSAmJiBsYXN0U3RlcC5jaGFuZ2UuZGF0YSkge1xuICAgICAgLy8gUmVtb3ZlIHRoZSBtYXJrXG4gICAgICBjb25zdCBvbGQgPSB1cGRhdGVkU3BlYy5tYXJrcy5maW5kSW5kZXgobWFyayA9PiBtYXJrLm5hbWUgPT09IGNvbXBOYW1lKTtcbiAgICAgIHVwZGF0ZWRTcGVjLm1hcmtzLnNwbGljZShvbGQsIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBvbGQgPSBmaW5kTWFyayh1cGRhdGVkU3BlYy5tYXJrcywgY29tcE5hbWUpO1xuICAgICAgaWYgKCFvbGQpIHtcbiAgICAgICAgdXBkYXRlZFNwZWMubWFya3MucHVzaChmaW5kTWFyayhlU3BlYy5tYXJrcywgY29tcE5hbWUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGRhdGFOYW1lID0gY29tcHV0ZUhhc0ZhY2V0KGxhc3RNYXJrQ29tcClcbiAgICAgICAgICA/IGxhc3RNYXJrQ29tcC5wYXJlbnQuZnJvbS5mYWNldC5kYXRhXG4gICAgICAgICAgOiBsYXN0TWFya0NvbXAuZnJvbS5kYXRhO1xuICAgICAgICBpZiAobGFzdFN0ZXAuY2hhbmdlLmRhdGEpIHtcbiAgICAgICAgICAvLyB1cGRhdGUgZGF0YSBzb3VyY2VcbiAgICAgICAgICBjb25zdCBvbGQgPSB1cGRhdGVkU3BlYy5kYXRhLmZpbmRJbmRleChcbiAgICAgICAgICAgIGRhdGEgPT4gZGF0YS5uYW1lID09PSBkYXRhTmFtZVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKG9sZCA+PSAwKSB7XG4gICAgICAgICAgICB1cGRhdGVkU3BlYy5kYXRhLnNwbGljZShvbGQsIDEsIGNvcHkoZmluZERhdGEoZVNwZWMsIGRhdGFOYW1lKSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBuZXdJID0gZVNwZWMuZGF0YS5maW5kSW5kZXgoZGF0YSA9PiBkYXRhLm5hbWUgPT09IGRhdGFOYW1lKTtcbiAgICAgICAgICAgIHVwZGF0ZWRTcGVjLmRhdGEuc3BsaWNlKG5ld0ksIDAsIGNvcHkoZmluZERhdGEoZVNwZWMsIGRhdGFOYW1lKSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvbGQuZW5jb2RlLnVwZGF0ZSA9IGxhc3RTdGF0ZVtsYXN0U3RlcC50cmFja05hbWVdLmVuY29kZS51cGRhdGU7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGxhc3RTdGVwLmNvbXBUeXBlID09PSBcImF4aXNcIikge1xuICAgIC8vIGNvbnNvbGUubG9nKGxhc3RTdGVwLmNvbXBOYW1lKTtcbiAgICBjb25zdCBvbGQgPSB1cGRhdGVkU3BlYy5heGVzLmZpbmRJbmRleChcbiAgICAgIGF4aXMgPT5cbiAgICAgICAgYXhpcy5lbmNvZGUgJiZcbiAgICAgICAgYXhpcy5lbmNvZGUuYXhpcyAmJlxuICAgICAgICBheGlzLmVuY29kZS5heGlzLm5hbWUgPT09IGxhc3RTdGVwLmNvbXBOYW1lXG4gICAgKTtcbiAgICBpZiAob2xkID49IDApIHtcbiAgICAgIHVwZGF0ZWRTcGVjLmF4ZXMuc3BsaWNlKG9sZCwgMSk7XG4gICAgfVxuICAgIGxldCBuZXdBeGlzO1xuICAgIGlmIChcbiAgICAgIChuZXdBeGlzID0gZVNwZWMuYXhlcy5maW5kKFxuICAgICAgICBheGlzID0+XG4gICAgICAgICAgYXhpcy5lbmNvZGUgJiZcbiAgICAgICAgICBheGlzLmVuY29kZS5heGlzICYmXG4gICAgICAgICAgYXhpcy5lbmNvZGUuYXhpcy5uYW1lID09PSBsYXN0U3RlcC5jb21wTmFtZVxuICAgICAgKSlcbiAgICApIHtcbiAgICAgIHVwZGF0ZWRTcGVjLmF4ZXMucHVzaChuZXdBeGlzKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAobGFzdFN0ZXAuY29tcFR5cGUgPT09IFwibGVnZW5kXCIpIHtcbiAgICBjb25zdCBvbGQgPSB1cGRhdGVkU3BlYy5sZWdlbmRzXG4gICAgICA/IHVwZGF0ZWRTcGVjLmxlZ2VuZHMuZmluZEluZGV4KFxuICAgICAgICBsZWdlbmQgPT5cbiAgICAgICAgICBsZWdlbmQuZW5jb2RlICYmXG4gICAgICAgICAgICBsZWdlbmQuZW5jb2RlLmxlZ2VuZCAmJlxuICAgICAgICAgICAgbGVnZW5kLmVuY29kZS5sZWdlbmQubmFtZSA9PT0gbGFzdFN0ZXAuY29tcE5hbWVcbiAgICAgIClcbiAgICAgIDogLTE7XG4gICAgaWYgKG9sZCA+PSAwKSB7XG4gICAgICB1cGRhdGVkU3BlYy5sZWdlbmRzLnNwbGljZShvbGQsIDEpO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld0xlZ2VuZCA9IGVTcGVjLmxlZ2VuZHNcbiAgICAgID8gZVNwZWMubGVnZW5kcy5maW5kKFxuICAgICAgICBsZWdlbmQgPT5cbiAgICAgICAgICBsZWdlbmQuZW5jb2RlICYmXG4gICAgICAgICAgICBsZWdlbmQuZW5jb2RlLmxlZ2VuZCAmJlxuICAgICAgICAgICAgbGVnZW5kLmVuY29kZS5sZWdlbmQubmFtZSA9PT0gbGFzdFN0ZXAuY29tcE5hbWVcbiAgICAgIClcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIGlmIChuZXdMZWdlbmQpIHtcbiAgICAgIGlmICh1cGRhdGVkU3BlYy5sZWdlbmRzKSB7XG4gICAgICAgIHVwZGF0ZWRTcGVjLmxlZ2VuZHMucHVzaChuZXdMZWdlbmQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXBkYXRlZFNwZWMubGVnZW5kcyA9IFtuZXdMZWdlbmRdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdXBkYXRlZFNwZWM7XG59IiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3ZlZ2EvdmVnYS9ibG9iL21hc3Rlci9wYWNrYWdlcy92ZWdhLXNjZW5lZ3JhcGgvc3JjL3V0aWwvdGV4dC5qc1xuZnVuY3Rpb24gdGV4dE9mZnNldChpdGVtKSB7XG4gIC8vIHBlcmZvcm0gb3VyIG93biBmb250IGJhc2VsaW5lIGNhbGN1bGF0aW9uXG4gIC8vIHdoeT8gbm90IGFsbCBicm93c2VycyBzdXBwb3J0IFNWRyAxLjEgJ2FsaWdubWVudC1iYXNlbGluZScgOihcbiAgY29uc3QgeyBiYXNlbGluZSB9ID0gaXRlbTtcbiAgY29uc3QgaCA9IGZvbnRTaXplKGl0ZW0pO1xuICBzd2l0Y2ggKGJhc2VsaW5lKSB7XG4gIGNhc2UgXCJ0b3BcIjpcbiAgICByZXR1cm4gMC43OSAqIGg7XG4gIGNhc2UgXCJtaWRkbGVcIjpcbiAgICByZXR1cm4gMC4zICogaDtcbiAgY2FzZSBcImJvdHRvbVwiOlxuICAgIHJldHVybiAtMC4yMSAqIGg7XG4gIGNhc2UgXCJsaW5lLXRvcFwiOlxuICAgIHJldHVybiAwLjI5ICogaCArIDAuNSAqIGxpbmVIZWlnaHQoaXRlbSk7XG4gIGNhc2UgXCJsaW5lLWJvdHRvbVwiOlxuICAgIHJldHVybiAwLjI5ICogaCAtIDAuNSAqIGxpbmVIZWlnaHQoaXRlbSk7XG4gIGRlZmF1bHQ6XG4gICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9udFNpemUoaXRlbSkge1xuICByZXR1cm4gaXRlbS5mb250U2l6ZSAhPSBudWxsID8gK2l0ZW0uZm9udFNpemUgfHwgMCA6IDExO1xufVxuXG5mdW5jdGlvbiBsaW5lSGVpZ2h0KGl0ZW0pIHtcbiAgcmV0dXJuIGl0ZW0ubGluZUhlaWdodCAhPSBudWxsID8gaXRlbS5saW5lSGVpZ2h0IDogZm9udFNpemUoaXRlbSkgKyAyO1xufVxuXG5mdW5jdGlvbiBnZXRTdHlsZShhdHRyKSB7XG4gIHN3aXRjaCAoYXR0cikge1xuICBjYXNlIFwiZm9udFwiOlxuICAgIHJldHVybiBcImZvbnQtZmFtaWx5XCI7XG4gIGNhc2UgXCJmb250U2l6ZVwiOlxuICAgIHJldHVybiBcImZvbnQtc2l6ZVwiO1xuICBjYXNlIFwiZm9udFN0eWxlXCI6XG4gICAgcmV0dXJuIFwiZm9udC1zdHlsZVwiO1xuICBjYXNlIFwiZm9udFZhcmlhbnRcIjpcbiAgICByZXR1cm4gXCJmb250LXZhcmlhbnRcIjtcbiAgY2FzZSBcImZvbnRXZWlnaHRcIjpcbiAgICByZXR1cm4gXCJmb250LXdlaWdodFwiO1xuICBjYXNlIFwic3Ryb2tlV2lkdGhcIjpcbiAgICByZXR1cm4gXCJzdHJva2Utd2lkdGhcIjtcbiAgY2FzZSBcInN0cm9rZURhc2hhcnJheVwiOlxuICAgIHJldHVybiBcInN0cm9rZS1kYXNoYXJyYXlcIjtcbiAgfVxuICByZXR1cm4gYXR0cjtcbn1cblxuZnVuY3Rpb24gc2V0VGV4dEFuY2hvcihkM1NlbGVjdGlvbiwgZm4pIHtcbiAgY29uc3QgdGV4dEFuY2hvciA9IHtcbiAgICBsZWZ0OiBcInN0YXJ0XCIsXG4gICAgY2VudGVyOiBcIm1pZGRsZVwiLFxuICAgIHJpZ2h0OiBcImVuZFwiXG4gIH07XG4gIGQzU2VsZWN0aW9uLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBkID0+IHRleHRBbmNob3JbZm4oZCldKTtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtSXRlbShpdGVtKSB7XG4gIHJldHVybiBgdHJhbnNsYXRlKCR7aXRlbS54IHx8IDB9LCAke2l0ZW0ueSB8fCAwfSkke1xuICAgIGl0ZW0uYW5nbGUgPyBgIHJvdGF0ZSgke2l0ZW0uYW5nbGV9KWAgOiBcIlwiXG4gIH1gO1xufVxuXG5leHBvcnQgeyB0ZXh0T2Zmc2V0LCBnZXRTdHlsZSwgc2V0VGV4dEFuY2hvciwgdHJhbnNmb3JtSXRlbSB9O1xuIiwiaW1wb3J0ICogYXMgZDMgZnJvbSBcImQzXCI7XG4vLyBNb2RpZnkgZDMtaW50ZXJwb2xhdGUtcGF0aCAoaHR0cHM6Ly9naXRodWIuY29tL3BiZXNoYWkvZDMtaW50ZXJwb2xhdGUtcGF0aCkgcGFja2FnZSBieSAqKi5cblxuLyoqXG4gKiBMaXN0IG9mIHBhcmFtcyBmb3IgZWFjaCBjb21tYW5kIHR5cGUgaW4gYSBwYXRoIGBkYCBhdHRyaWJ1dGVcbiAqL1xuY29uc3QgdHlwZU1hcCA9IHtcbiAgTTogW1wieFwiLCBcInlcIl0sXG4gIEw6IFtcInhcIiwgXCJ5XCJdLFxuICBIOiBbXCJ4XCJdLFxuICBWOiBbXCJ5XCJdLFxuICBDOiBbXCJ4MVwiLCBcInkxXCIsIFwieDJcIiwgXCJ5MlwiLCBcInhcIiwgXCJ5XCJdLFxuICBTOiBbXCJ4MlwiLCBcInkyXCIsIFwieFwiLCBcInlcIl0sXG4gIFE6IFtcIngxXCIsIFwieTFcIiwgXCJ4XCIsIFwieVwiXSxcbiAgVDogW1wieFwiLCBcInlcIl0sXG4gIEE6IFtcInJ4XCIsIFwicnlcIiwgXCJ4QXhpc1JvdGF0aW9uXCIsIFwibGFyZ2VBcmNGbGFnXCIsIFwic3dlZXBGbGFnXCIsIFwieFwiLCBcInlcIl1cbn07XG5cbi8qKlxuICogQ29udmVydCB0byBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbW1hbmQgZnJvbSBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb21tYW5kU3RyaW5nIFRva2VuIHN0cmluZyBmcm9tIHRoZSBgZGAgYXR0cmlidXRlIChlLmcuLCBMMCwwKVxuICogQHJldHVybiB7T2JqZWN0fSBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgY29tbWFuZC5cbiAqL1xuZnVuY3Rpb24gY29tbWFuZE9iamVjdChjb21tYW5kU3RyaW5nKSB7XG4gIC8vIGNvbnZlcnQgYWxsIHNwYWNlcyB0byBjb21tYXNcbiAgY29tbWFuZFN0cmluZyA9IGNvbW1hbmRTdHJpbmcudHJpbSgpLnJlcGxhY2UoLyAvZywgXCIsXCIpO1xuXG4gIGNvbnN0IHR5cGUgPSBjb21tYW5kU3RyaW5nWzBdO1xuICBjb25zdCBhcmdzID0gY29tbWFuZFN0cmluZy5zdWJzdHJpbmcoMSkuc3BsaXQoXCIsXCIpO1xuICByZXR1cm4gdHlwZU1hcFt0eXBlLnRvVXBwZXJDYXNlKCldLnJlZHVjZShcbiAgICAob2JqLCBwYXJhbSwgaSkgPT4ge1xuICAgICAgLy8gcGFyc2UgWCBhcyBmbG9hdCBzaW5jZSB3ZSBuZWVkIGl0IHRvIGRvIGRpc3RhbmNlIGNoZWNrcyBmb3IgZXh0ZW5kaW5nIHBvaW50c1xuICAgICAgb2JqW3BhcmFtXSA9IFtcInhcIiwgXCJ5XCJdLmluZGV4T2YocGFyYW0pID49IDAgPyBwYXJzZUZsb2F0KGFyZ3NbaV0pIDogYXJnc1tpXTtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSxcbiAgICB7IHR5cGUgfVxuICApO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgY29tbWFuZCBvYmplY3QgdG8gYSBzdHJpbmcgdG8gYmUgdXNlZCBpbiBhIGBkYCBhdHRyaWJ1dGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb21tYW5kIEEgY29tbWFuZCBvYmplY3RcbiAqIEByZXR1cm4ge1N0cmluZ30gVGhlIHN0cmluZyBmb3IgdGhlIGBkYCBhdHRyaWJ1dGVcbiAqL1xuZnVuY3Rpb24gY29tbWFuZFRvU3RyaW5nKGNvbW1hbmQpIHtcbiAgY29uc3QgeyB0eXBlIH0gPSBjb21tYW5kO1xuICBjb25zdCBwYXJhbXMgPSB0eXBlTWFwW3R5cGUudG9VcHBlckNhc2UoKV07XG4gIHJldHVybiBgJHt0eXBlfSR7cGFyYW1zLm1hcChwID0+IGNvbW1hbmRbcF0pLmpvaW4oXCIsXCIpfWA7XG59XG5cbi8qKlxuICogQ29udmVydHMgY29tbWFuZCBBIHRvIGhhdmUgdGhlIHNhbWUgdHlwZSBhcyBjb21tYW5kIEIuXG4gKlxuICogZS5nLiwgTDAsNSAtPiBDMCw1LDAsNSwwLDVcbiAqXG4gKiBVc2VzIHRoZXNlIHJ1bGVzOlxuICogeDEgPC0geFxuICogeDIgPC0geFxuICogeTEgPC0geVxuICogeTIgPC0geVxuICogcnggPC0gMFxuICogcnkgPC0gMFxuICogeEF4aXNSb3RhdGlvbiA8LSByZWFkIGZyb20gQlxuICogbGFyZ2VBcmNGbGFnIDwtIHJlYWQgZnJvbSBCXG4gKiBzd2VlcGZsYWcgPC0gcmVhZCBmcm9tIEJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYUNvbW1hbmQgQ29tbWFuZCBvYmplY3QgZnJvbSBwYXRoIGBkYCBhdHRyaWJ1dGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBiQ29tbWFuZCBDb21tYW5kIG9iamVjdCBmcm9tIHBhdGggYGRgIGF0dHJpYnV0ZSB0byBtYXRjaCBhZ2FpbnN0XG4gKiBAcmV0dXJuIHtPYmplY3R9IGFDb21tYW5kIGNvbnZlcnRlZCB0byB0eXBlIG9mIGJDb21tYW5kXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRUb1NhbWVUeXBlKGFDb21tYW5kLCBiQ29tbWFuZCkge1xuICBjb25zdCBjb252ZXJzaW9uTWFwID0ge1xuICAgIHgxOiBcInhcIixcbiAgICB5MTogXCJ5XCIsXG4gICAgeDI6IFwieFwiLFxuICAgIHkyOiBcInlcIlxuICB9O1xuXG4gIGNvbnN0IHJlYWRGcm9tQktleXMgPSBbXCJ4QXhpc1JvdGF0aW9uXCIsIFwibGFyZ2VBcmNGbGFnXCIsIFwic3dlZXBGbGFnXCJdO1xuXG4gIC8vIGNvbnZlcnQgKGJ1dCBpZ25vcmUgTSB0eXBlcylcbiAgaWYgKGFDb21tYW5kLnR5cGUgIT09IGJDb21tYW5kLnR5cGUgJiYgYkNvbW1hbmQudHlwZS50b1VwcGVyQ2FzZSgpICE9PSBcIk1cIikge1xuICAgIGNvbnN0IGFDb252ZXJ0ZWQgPSB7fTtcbiAgICBPYmplY3Qua2V5cyhiQ29tbWFuZCkuZm9yRWFjaChiS2V5ID0+IHtcbiAgICAgIGNvbnN0IGJWYWx1ZSA9IGJDb21tYW5kW2JLZXldO1xuICAgICAgLy8gZmlyc3QgcmVhZCBmcm9tIHRoZSBBIGNvbW1hbmRcbiAgICAgIGxldCBhVmFsdWUgPSBhQ29tbWFuZFtiS2V5XTtcblxuICAgICAgLy8gaWYgaXQgaXMgb25lIG9mIHRoZXNlIHZhbHVlcywgcmVhZCBmcm9tIEIgbm8gbWF0dGVyIHdoYXRcbiAgICAgIGlmIChhVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAocmVhZEZyb21CS2V5cy5pbmNsdWRlcyhiS2V5KSkge1xuICAgICAgICAgIGFWYWx1ZSA9IGJWYWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBpZiBpdCB3YXNuJ3QgaW4gdGhlIEEgY29tbWFuZCwgc2VlIGlmIGFuIGVxdWl2YWxlbnQgd2FzXG4gICAgICAgICAgaWYgKGFWYWx1ZSA9PT0gdW5kZWZpbmVkICYmIGNvbnZlcnNpb25NYXBbYktleV0pIHtcbiAgICAgICAgICAgIGFWYWx1ZSA9IGFDb21tYW5kW2NvbnZlcnNpb25NYXBbYktleV1dO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGlmIGl0IGRvZXNuJ3QgaGF2ZSBhIGNvbnZlcnRlZCB2YWx1ZSwgdXNlIDBcbiAgICAgICAgICBpZiAoYVZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFWYWx1ZSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGFDb252ZXJ0ZWRbYktleV0gPSBhVmFsdWU7XG4gICAgfSk7XG5cbiAgICAvLyB1cGRhdGUgdGhlIHR5cGUgdG8gbWF0Y2ggQlxuICAgIGFDb252ZXJ0ZWQudHlwZSA9IGJDb21tYW5kLnR5cGU7XG4gICAgYUNvbW1hbmQgPSBhQ29udmVydGVkO1xuICB9XG5cbiAgcmV0dXJuIGFDb21tYW5kO1xufVxuXG4vKipcbiAqIEV4dGVuZHMgYW4gYXJyYXkgb2YgY29tbWFuZHMgdG8gdGhlIGxlbmd0aCBvZiB0aGUgc2Vjb25kIGFycmF5XG4gKiBpbnNlcnRpbmcgcG9pbnRzIGF0IHRoZSBzcG90IHRoYXQgaXMgY2xvc2VzdCBieSBYIHZhbHVlLiBFbnN1cmVzXG4gKiBhbGwgdGhlIHBvaW50cyBvZiBjb21tYW5kc1RvRXh0ZW5kIGFyZSBpbiB0aGUgZXh0ZW5kZWQgYXJyYXkgYW5kIHRoYXRcbiAqIG9ubHkgbnVtUG9pbnRzVG9FeHRlbmQgcG9pbnRzIGFyZSBhZGRlZC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdFtdfSBjb21tYW5kc1RvRXh0ZW5kIFRoZSBjb21tYW5kcyBhcnJheSB0byBleHRlbmRcbiAqIEBwYXJhbSB7T2JqZWN0W119IHJlZmVyZW5jZUNvbW1hbmRzIFRoZSBjb21tYW5kcyBhcnJheSB0byBtYXRjaFxuICogQHJldHVybiB7T2JqZWN0W119IFRoZSBleHRlbmRlZCBjb21tYW5kczEgYXJyYXlcbiAqL1xuZnVuY3Rpb24gZXh0ZW5kKGNvbW1hbmRzVG9FeHRlbmQsIHJlZmVyZW5jZUNvbW1hbmRzLCBudW1Qb2ludHNUb0V4dGVuZCkge1xuICAvLyBtYXAgZWFjaCBjb21tYW5kIGluIEIgdG8gYSBjb21tYW5kIGluIEEgYnkgY291bnRpbmcgaG93IG1hbnkgdGltZXMgaWRlYWxseVxuICAvLyBhIGNvbW1hbmQgaW4gQSB3YXMgaW4gdGhlIGluaXRpYWwgcGF0aCAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wYmVzaGFpL2QzLWludGVycG9sYXRlLXBhdGgvaXNzdWVzLzgpXG4gIGxldCBpbml0aWFsQ29tbWFuZEluZGV4O1xuICBpZiAoY29tbWFuZHNUb0V4dGVuZC5sZW5ndGggPiAxICYmIGNvbW1hbmRzVG9FeHRlbmRbMF0udHlwZSA9PT0gXCJNXCIpIHtcbiAgICBpbml0aWFsQ29tbWFuZEluZGV4ID0gMTtcbiAgfSBlbHNlIHtcbiAgICBpbml0aWFsQ29tbWFuZEluZGV4ID0gMDtcbiAgfVxuXG4gIGNvbnN0IGNvdW50cyA9IHJlZmVyZW5jZUNvbW1hbmRzLnJlZHVjZSgoY291bnRzLCByZWZDb21tYW5kLCBpKSA9PiB7XG4gICAgLy8gc2tpcCBmaXJzdCBNXG4gICAgaWYgKGkgPT09IDAgJiYgcmVmQ29tbWFuZC50eXBlID09PSBcIk1cIikge1xuICAgICAgY291bnRzWzBdID0gMTtcbiAgICAgIHJldHVybiBjb3VudHM7XG4gICAgfVxuXG4gICAgbGV0IG1pbkRpc3RhbmNlID0gTWF0aC5hYnMoXG4gICAgICBjb21tYW5kc1RvRXh0ZW5kW2luaXRpYWxDb21tYW5kSW5kZXhdLnggLSByZWZDb21tYW5kLnhcbiAgICApO1xuICAgIGxldCBtaW5Db21tYW5kID0gaW5pdGlhbENvbW1hbmRJbmRleDtcblxuICAgIC8vIGZpbmQgdGhlIGNsb3Nlc3QgcG9pbnQgYnkgWCBwb3NpdGlvbiBpbiBBXG4gICAgZm9yIChsZXQgaiA9IGluaXRpYWxDb21tYW5kSW5kZXggKyAxOyBqIDwgY29tbWFuZHNUb0V4dGVuZC5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgZGlzdGFuY2UgPSBNYXRoLmFicyhjb21tYW5kc1RvRXh0ZW5kW2pdLnggLSByZWZDb21tYW5kLngpO1xuICAgICAgaWYgKGRpc3RhbmNlIDwgbWluRGlzdGFuY2UpIHtcbiAgICAgICAgbWluRGlzdGFuY2UgPSBkaXN0YW5jZTtcbiAgICAgICAgbWluQ29tbWFuZCA9IGo7XG4gICAgICAgIC8vIHNpbmNlIHdlIGFzc3VtZSBzb3J0ZWQgYnkgWCwgb25jZSB3ZSBmaW5kIGEgdmFsdWUgZmFydGhlciwgd2UgY2FuIHJldHVybiB0aGUgbWluLlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY291bnRzW21pbkNvbW1hbmRdID0gKGNvdW50c1ttaW5Db21tYW5kXSB8fCAwKSArIDE7XG4gICAgcmV0dXJuIGNvdW50cztcbiAgfSwge30pO1xuXG4gIC8vIG5vdyBleHRlbmQgdGhlIGFycmF5IGFkZGluZyBpbiBhdCB0aGUgYXBwcm9wcmlhdGUgcGxhY2UgYXMgbmVlZGVkXG4gIGNvbnN0IGV4dGVuZGVkID0gW107XG4gIGxldCBudW1FeHRlbmRlZCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY29tbWFuZHNUb0V4dGVuZC5sZW5ndGg7IGkrKykge1xuICAgIC8vIGFkZCBpbiB0aGUgaW5pdGlhbCBwb2ludCBmb3IgdGhpcyBBIGNvbW1hbmRcbiAgICBleHRlbmRlZC5wdXNoKGNvbW1hbmRzVG9FeHRlbmRbaV0pO1xuXG4gICAgZm9yIChsZXQgaiA9IDE7IGogPCBjb3VudHNbaV0gJiYgbnVtRXh0ZW5kZWQgPCBudW1Qb2ludHNUb0V4dGVuZDsgaisrKSB7XG4gICAgICBjb25zdCBjb21tYW5kVG9BZGQgPSBPYmplY3QuYXNzaWduKHt9LCBjb21tYW5kc1RvRXh0ZW5kW2ldKTtcbiAgICAgIC8vIGRvbid0IGFsbG93IG11bHRpcGxlIE1zXG4gICAgICBpZiAoY29tbWFuZFRvQWRkLnR5cGUgPT09IFwiTVwiKSB7XG4gICAgICAgIGNvbW1hbmRUb0FkZC50eXBlID0gXCJMXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0cnkgdG8gc2V0IGNvbnRyb2wgcG9pbnRzIHRvIHggYW5kIHlcbiAgICAgICAgaWYgKGNvbW1hbmRUb0FkZC54MSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29tbWFuZFRvQWRkLngxID0gY29tbWFuZFRvQWRkLng7XG4gICAgICAgICAgY29tbWFuZFRvQWRkLnkxID0gY29tbWFuZFRvQWRkLnk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29tbWFuZFRvQWRkLngyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb21tYW5kVG9BZGQueDIgPSBjb21tYW5kVG9BZGQueDtcbiAgICAgICAgICBjb21tYW5kVG9BZGQueTIgPSBjb21tYW5kVG9BZGQueTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXh0ZW5kZWQucHVzaChjb21tYW5kVG9BZGQpO1xuICAgICAgbnVtRXh0ZW5kZWQgKz0gMTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXh0ZW5kZWQ7XG59XG5cbi8qKlxuICogRXh0ZW5kcyBhbiBhcnJheSBvZiBjb21tYW5kcyB0byB0aGUgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgYXJyYXlcbiAqIGluc2VydGluZyBwb2ludHMgYXQgdGhlIHNwb3QgdGhhdCBpcyBjbG9zZXN0IGJ5IFggdmFsdWUuIEVuc3VyZXNcbiAqIGFsbCB0aGUgcG9pbnRzIG9mIGNvbW1hbmRzVG9FeHRlbmQgYXJlIGluIHRoZSBleHRlbmRlZCBhcnJheSBhbmQgdGhhdFxuICogb25seSBudW1Qb2ludHNUb0V4dGVuZCBwb2ludHMgYXJlIGFkZGVkLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0W119IGNvbW1hbmRzVG9FeHRlbmQgVGhlIGNvbW1hbmRzIGFycmF5IHRvIGV4dGVuZFxuICogQHBhcmFtIHtPYmplY3RbXX0gcmVmZXJlbmNlQ29tbWFuZHMgVGhlIGNvbW1hbmRzIGFycmF5IHRvIG1hdGNoXG4gKiBAcmV0dXJuIHtPYmplY3RbXX0gVGhlIGV4dGVuZGVkIGNvbW1hbmRzMSBhcnJheVxuICovXG5mdW5jdGlvbiBleHRlbmQyKGNvbW1hbmRzVG9FeHRlbmQsIHJlZmVyZW5jZUNvbW1hbmRzLCBudW1Qb2ludHNUb0V4dGVuZCwgYWxvbmdUbz1cInhcIikge1xuICAvLyBtYXAgZWFjaCBjb21tYW5kIGluIEIgdG8gYSBjb21tYW5kIGluIEEgYnkgY291bnRpbmcgaG93IG1hbnkgdGltZXMgaWRlYWxseVxuICAvLyBhIGNvbW1hbmQgaW4gQSB3YXMgaW4gdGhlIGluaXRpYWwgcGF0aCAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wYmVzaGFpL2QzLWludGVycG9sYXRlLXBhdGgvaXNzdWVzLzgpXG4gIGxldCBpbml0aWFsQ29tbWFuZEluZGV4O1xuICBpZiAoY29tbWFuZHNUb0V4dGVuZC5sZW5ndGggPiAxICYmIGNvbW1hbmRzVG9FeHRlbmRbMF0udHlwZSA9PT0gXCJNXCIpIHtcbiAgICBpbml0aWFsQ29tbWFuZEluZGV4ID0gMTtcbiAgfSBlbHNlIHtcbiAgICBpbml0aWFsQ29tbWFuZEluZGV4ID0gMDtcbiAgfVxuICBsZXQgW20sIHN1Yk1dID0gYWxvbmdUbyA9PT0gXCJ4XCIgPyBbXCJ4XCIsIFwieVwiXSA6IFtcInlcIiwgXCJ4XCJdO1xuXG5cbiAgY29uc3QgY291bnRzID0gcmVmZXJlbmNlQ29tbWFuZHMucmVkdWNlKChjb3VudHMsIHJlZkNvbW1hbmQsIGkpID0+IHtcbiAgICAvLyBza2lwIGZpcnN0IE1cbiAgICBpZiAoaSA9PT0gMCAmJiByZWZDb21tYW5kLnR5cGUgPT09IFwiTVwiKSB7XG4gICAgICBjb3VudHNbMF0gPSAxO1xuICAgICAgcmV0dXJuIGNvdW50cztcbiAgICB9XG5cbiAgICBsZXQgbWluRGlzdGFuY2UgPSBNYXRoLmFicyhcbiAgICAgIGNvbW1hbmRzVG9FeHRlbmRbaW5pdGlhbENvbW1hbmRJbmRleF1bbV0gLSByZWZDb21tYW5kW21dXG4gICAgKTtcbiAgICBsZXQgc3ViTWluRGlzdGFuY2UgPSBNYXRoLmFicyhcbiAgICAgIGNvbW1hbmRzVG9FeHRlbmRbaW5pdGlhbENvbW1hbmRJbmRleF1bc3ViTV0gLSByZWZDb21tYW5kW3N1Yk1dXG4gICAgKTtcbiAgICBsZXQgbWluQ29tbWFuZCA9IGluaXRpYWxDb21tYW5kSW5kZXg7XG5cbiAgICAvLyBmaW5kIHRoZSBjbG9zZXN0IHBvaW50IGJ5IFggcG9zaXRpb24gaW4gQVxuICAgIGZvciAobGV0IGogPSBpbml0aWFsQ29tbWFuZEluZGV4ICsgMTsgaiA8IGNvbW1hbmRzVG9FeHRlbmQubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IGRpc3RhbmNlID0gTWF0aC5hYnMoY29tbWFuZHNUb0V4dGVuZFtqXVttXSAtIHJlZkNvbW1hbmRbbV0pO1xuICAgICAgY29uc3Qgc3ViRGlzdGFuY2UgPSBNYXRoLmFicyhjb21tYW5kc1RvRXh0ZW5kW2pdW3N1Yk1dIC0gcmVmQ29tbWFuZFtzdWJNXSk7XG4gICAgICBpZiAoZGlzdGFuY2UgPCBtaW5EaXN0YW5jZSkge1xuICAgICAgICBtaW5EaXN0YW5jZSA9IGRpc3RhbmNlO1xuICAgICAgICBtaW5Db21tYW5kID0gajtcbiAgICAgICAgc3ViTWluRGlzdGFuY2UgPSBzdWJEaXN0YW5jZTtcbiAgICAgICAgLy8gc2luY2Ugd2UgYXNzdW1lIHNvcnRlZCBieSBYLCBvbmNlIHdlIGZpbmQgYSB2YWx1ZSBmYXJ0aGVyLCB3ZSBjYW4gcmV0dXJuIHRoZSBtaW4uXG4gICAgICB9IGVsc2UgaWYgKGRpc3RhbmNlID09PSBtaW5EaXN0YW5jZSkge1xuICAgICAgICBpZiAoc3ViRGlzdGFuY2UgPCBzdWJNaW5EaXN0YW5jZSkge1xuICAgICAgICAgIG1pbkNvbW1hbmQgPSBqO1xuICAgICAgICAgIHN1Yk1pbkRpc3RhbmNlID0gc3ViRGlzdGFuY2U7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvdW50c1ttaW5Db21tYW5kXSA9IChjb3VudHNbbWluQ29tbWFuZF0gfHwgMCkgKyAxO1xuICAgIHJldHVybiBjb3VudHM7XG4gIH0sIHt9KTtcblxuICAvLyBub3cgZXh0ZW5kIHRoZSBhcnJheSBhZGRpbmcgaW4gYXQgdGhlIGFwcHJvcHJpYXRlIHBsYWNlIGFzIG5lZWRlZFxuICBjb25zdCBleHRlbmRlZCA9IFtdO1xuICBsZXQgbnVtRXh0ZW5kZWQgPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbW1hbmRzVG9FeHRlbmQubGVuZ3RoOyBpKyspIHtcbiAgICAvLyBhZGQgaW4gdGhlIGluaXRpYWwgcG9pbnQgZm9yIHRoaXMgQSBjb21tYW5kXG4gICAgZXh0ZW5kZWQucHVzaChjb21tYW5kc1RvRXh0ZW5kW2ldKTtcblxuICAgIGZvciAobGV0IGogPSAxOyBqIDwgY291bnRzW2ldICYmIG51bUV4dGVuZGVkIDwgbnVtUG9pbnRzVG9FeHRlbmQ7IGorKykge1xuICAgICAgY29uc3QgY29tbWFuZFRvQWRkID0gT2JqZWN0LmFzc2lnbih7fSwgY29tbWFuZHNUb0V4dGVuZFtpXSk7XG4gICAgICAvLyBkb24ndCBhbGxvdyBtdWx0aXBsZSBNc1xuICAgICAgaWYgKGNvbW1hbmRUb0FkZC50eXBlID09PSBcIk1cIikge1xuICAgICAgICBjb21tYW5kVG9BZGQudHlwZSA9IFwiTFwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdHJ5IHRvIHNldCBjb250cm9sIHBvaW50cyB0byB4IGFuZCB5XG4gICAgICAgIGlmIChjb21tYW5kVG9BZGQueDEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbW1hbmRUb0FkZC54MSA9IGNvbW1hbmRUb0FkZC54O1xuICAgICAgICAgIGNvbW1hbmRUb0FkZC55MSA9IGNvbW1hbmRUb0FkZC55O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbW1hbmRUb0FkZC54MiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29tbWFuZFRvQWRkLngyID0gY29tbWFuZFRvQWRkLng7XG4gICAgICAgICAgY29tbWFuZFRvQWRkLnkyID0gY29tbWFuZFRvQWRkLnk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGV4dGVuZGVkLnB1c2goY29tbWFuZFRvQWRkKTtcbiAgICAgIG51bUV4dGVuZGVkICs9IDE7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGV4dGVuZGVkO1xufVxuXG4vKipcbiAqIEludGVycG9sYXRlIGZyb20gQSB0byBCIGJ5IGV4dGVuZGluZyBBIGFuZCBCIGR1cmluZyBpbnRlcnBvbGF0aW9uIHRvIGhhdmVcbiAqIHRoZSBzYW1lIG51bWJlciBvZiBwb2ludHMuIFRoaXMgYWxsb3dzIGZvciBhIHNtb290aCB0cmFuc2l0aW9uIHdoZW4gdGhleVxuICogaGF2ZSBhIGRpZmZlcmVudCBudW1iZXIgb2YgcG9pbnRzLlxuICpcbiAqIElnbm9yZXMgdGhlIGBaYCBjaGFyYWN0ZXIgaW4gcGF0aHMgdW5sZXNzIGJvdGggQSBhbmQgQiBlbmQgd2l0aCBpdC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYSBUaGUgYGRgIGF0dHJpYnV0ZSBmb3IgYSBwYXRoXG4gKiBAcGFyYW0ge1N0cmluZ30gYiBUaGUgYGRgIGF0dHJpYnV0ZSBmb3IgYSBwYXRoXG4gKi9cbmZ1bmN0aW9uIGludGVycG9sYXRlUGF0aChhLCBiLCBhbG9uZ1RvID0gXCJ4XCIpIHtcbiAgLy8gcmVtb3ZlIFosIHJlbW92ZSBzcGFjZXMgYWZ0ZXIgbGV0dGVycyBhcyBzZWVuIGluIElFXG4gIGNvbnN0IGFOb3JtYWxpemVkID1cbiAgICBhID09IG51bGwgPyBcIlwiIDogYS5yZXBsYWNlKC9bWl0vZ2ksIFwiXCIpLnJlcGxhY2UoLyhbTUxDU1RRQUhWXSlcXHMqL2dpLCBcIiQxXCIpO1xuICBjb25zdCBiTm9ybWFsaXplZCA9XG4gICAgYiA9PSBudWxsID8gXCJcIiA6IGIucmVwbGFjZSgvW1pdL2dpLCBcIlwiKS5yZXBsYWNlKC8oW01MQ1NUUUFIVl0pXFxzKi9naSwgXCIkMVwiKTtcbiAgY29uc3QgYVBvaW50cyA9XG4gICAgYU5vcm1hbGl6ZWQgPT09IFwiXCIgPyBbXSA6IGFOb3JtYWxpemVkLnNwbGl0KC8oPz1bTUxDU1RRQUhWXSkvZ2kpO1xuICBjb25zdCBiUG9pbnRzID1cbiAgICBiTm9ybWFsaXplZCA9PT0gXCJcIiA/IFtdIDogYk5vcm1hbGl6ZWQuc3BsaXQoLyg/PVtNTENTVFFBSFZdKS9naSk7XG5cbiAgLy8gaWYgYm90aCBhcmUgZW1wdHksIGludGVycG9sYXRpb24gaXMgYWx3YXlzIHRoZSBlbXB0eSBzdHJpbmcuXG4gIGlmICghYVBvaW50cy5sZW5ndGggJiYgIWJQb2ludHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIG51bGxJbnRlcnBvbGF0b3IoKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9O1xuICB9XG5cbiAgLy8gaWYgQSBpcyBlbXB0eSwgdHJlYXQgaXQgYXMgaWYgaXQgdXNlZCB0byBjb250YWluIGp1c3QgdGhlIGZpcnN0IHBvaW50XG4gIC8vIG9mIEIuIFRoaXMgbWFrZXMgaXQgc28gdGhlIGxpbmUgZXh0ZW5kcyBvdXQgb2YgZnJvbSB0aGF0IGZpcnN0IHBvaW50LlxuICBpZiAoIWFQb2ludHMubGVuZ3RoKSB7XG4gICAgYVBvaW50cy5wdXNoKGJQb2ludHNbMF0pO1xuXG4gICAgLy8gb3RoZXJ3aXNlIGlmIEIgaXMgZW1wdHksIHRyZWF0IGl0IGFzIGlmIGl0IGNvbnRhaW5zIHRoZSBmaXJzdCBwb2ludFxuICAgIC8vIG9mIEEuIFRoaXMgbWFrZXMgaXQgc28gdGhlIGxpbmUgcmV0cmFjdHMgaW50byB0aGUgZmlyc3QgcG9pbnQuXG4gIH0gZWxzZSBpZiAoIWJQb2ludHMubGVuZ3RoKSB7XG4gICAgYlBvaW50cy5wdXNoKGFQb2ludHNbMF0pO1xuICB9XG5cbiAgLy8gY29udmVydCB0byBjb21tYW5kIG9iamVjdHMgc28gd2UgY2FuIG1hdGNoIHR5cGVzXG4gIGxldCBhQ29tbWFuZHMgPSBhUG9pbnRzLm1hcChjb21tYW5kT2JqZWN0KTtcbiAgbGV0IGJDb21tYW5kcyA9IGJQb2ludHMubWFwKGNvbW1hbmRPYmplY3QpO1xuXG4gIC8vIGV4dGVuZCB0byBtYXRjaCBlcXVhbCBzaXplXG4gIGNvbnN0IG51bVBvaW50c1RvRXh0ZW5kID0gTWF0aC5hYnMoYlBvaW50cy5sZW5ndGggLSBhUG9pbnRzLmxlbmd0aCk7XG5cbiAgaWYgKG51bVBvaW50c1RvRXh0ZW5kICE9PSAwKSB7XG4gICAgLy8gQiBoYXMgbW9yZSBwb2ludHMgdGhhbiBBLCBzbyBhZGQgcG9pbnRzIHRvIEEgYmVmb3JlIGludGVycG9sYXRpbmdcbiAgICBpZiAoYkNvbW1hbmRzLmxlbmd0aCA+IGFDb21tYW5kcy5sZW5ndGgpIHtcbiAgICAgIGFDb21tYW5kcyA9IGV4dGVuZDIoYUNvbW1hbmRzLCBiQ29tbWFuZHMsIG51bVBvaW50c1RvRXh0ZW5kLCBhbG9uZ1RvKTtcblxuICAgICAgLy8gZWxzZSBpZiBBIGhhcyBtb3JlIHBvaW50cyB0aGFuIEIsIGFkZCBtb3JlIHBvaW50cyB0byBCXG4gICAgfSBlbHNlIGlmIChiQ29tbWFuZHMubGVuZ3RoIDwgYUNvbW1hbmRzLmxlbmd0aCkge1xuICAgICAgYkNvbW1hbmRzID0gZXh0ZW5kMihiQ29tbWFuZHMsIGFDb21tYW5kcywgbnVtUG9pbnRzVG9FeHRlbmQsIGFsb25nVG8pO1xuICAgIH1cbiAgfVxuXG4gIC8vIGNvbW1hbmRzIGhhdmUgc2FtZSBsZW5ndGggbm93LlxuICAvLyBjb252ZXJ0IEEgdG8gdGhlIHNhbWUgdHlwZSBvZiBCXG4gIGFDb21tYW5kcyA9IGFDb21tYW5kcy5tYXAoKGFDb21tYW5kLCBpKSA9PlxuICAgIGNvbnZlcnRUb1NhbWVUeXBlKGFDb21tYW5kLCBiQ29tbWFuZHNbaV0pXG4gICk7XG5cbiAgbGV0IGFQcm9jZXNzZWQgPSBhQ29tbWFuZHMubWFwKGNvbW1hbmRUb1N0cmluZykuam9pbihcIlwiKTtcbiAgbGV0IGJQcm9jZXNzZWQgPSBiQ29tbWFuZHMubWFwKGNvbW1hbmRUb1N0cmluZykuam9pbihcIlwiKTtcblxuICAvLyBpZiBib3RoIEEgYW5kIEIgZW5kIHdpdGggWiBhZGQgaXQgYmFjayBpblxuICBpZiAoXG4gICAgKGEgPT0gbnVsbCB8fCBhW2EubGVuZ3RoIC0gMV0gPT09IFwiWlwiKSAmJlxuICAgIChiID09IG51bGwgfHwgYltiLmxlbmd0aCAtIDFdID09PSBcIlpcIilcbiAgKSB7XG4gICAgYVByb2Nlc3NlZCArPSBcIlpcIjtcbiAgICBiUHJvY2Vzc2VkICs9IFwiWlwiO1xuICB9XG5cbiAgY29uc3Qgc3RyaW5nSW50ZXJwb2xhdG9yID0gZDMuaW50ZXJwb2xhdGVTdHJpbmcoYVByb2Nlc3NlZCwgYlByb2Nlc3NlZCk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHBhdGhJbnRlcnBvbGF0b3IodCkge1xuICAgIC8vIGF0IDEgcmV0dXJuIHRoZSBmaW5hbCB2YWx1ZSB3aXRob3V0IHRoZSBleHRlbnNpb25zIHVzZWQgZHVyaW5nIGludGVycG9sYXRpb25cbiAgICBpZiAodCA9PT0gMSkge1xuICAgICAgcmV0dXJuIGIgPT0gbnVsbCA/IFwiXCIgOiBiO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJpbmdJbnRlcnBvbGF0b3IodCk7XG4gIH07XG59XG5cbi8vIGEgLT4gYSArIHJldmVyc2UoYSkgc28gdGhhdCB0aGUgbGluZSBpcyBjbG9zZWQuXG5mdW5jdGlvbiBsaW5lVG9BcmVhKGEpIHtcbiAgY29uc3QgYU5vcm1hbGl6ZWQgPVxuICAgIGEgPT0gbnVsbCA/IFwiXCIgOiBhLnJlcGxhY2UoL1taXS9naSwgXCJcIikucmVwbGFjZSgvKFtNTENTVFFBSFZdKVxccyovZ2ksIFwiJDFcIik7XG4gIGNvbnN0IGFQb2ludHMgPVxuICAgIGFOb3JtYWxpemVkID09PSBcIlwiID8gW10gOiBhTm9ybWFsaXplZC5zcGxpdCgvKD89W01MQ1NUUUFIVl0pL2dpKTtcblxuICBpZiAoYVBvaW50cy5sZW5ndGggPD0gMCkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgLy8gY29udmVydCB0byBjb21tYW5kIG9iamVjdHMgc28gd2UgY2FuIG1hdGNoIHR5cGVzXG4gIGNvbnN0IGFDb21tYW5kcyA9IGFQb2ludHMubWFwKGNvbW1hbmRPYmplY3QpO1xuICBjb25zdCByZXZlcnNlZCA9IGFQb2ludHMubWFwKGNvbW1hbmRPYmplY3QpLnJldmVyc2UoKTtcbiAgaWYgKHJldmVyc2VkW3JldmVyc2VkLmxlbmd0aCAtIDFdLnR5cGUgPT0gXCJNXCIpIHtcbiAgICByZXZlcnNlZFtyZXZlcnNlZC5sZW5ndGggLSAxXS50eXBlID0gcmV2ZXJzZWRbcmV2ZXJzZWQubGVuZ3RoIC0gMl0udHlwZTtcbiAgfVxuICByZXR1cm4gYCR7YUNvbW1hbmRzXG4gICAgLmNvbmNhdChyZXZlcnNlZClcbiAgICAubWFwKGNvbW1hbmRUb1N0cmluZylcbiAgICAuam9pbihcIlwiKX1aYDtcbn1cbi8qKlxuICogSW50ZXJwb2xhdGUgZnJvbSBBIHRvIEIgYnkgZXh0ZW5kaW5nIEEgYW5kIEIgZHVyaW5nIGludGVycG9sYXRpb24gdG8gaGF2ZVxuICogdGhlIHNhbWUgbnVtYmVyIG9mIHBvaW50cy4gVGhpcyBhbGxvd3MgZm9yIGEgc21vb3RoIHRyYW5zaXRpb24gd2hlbiB0aGV5XG4gKiBoYXZlIGEgZGlmZmVyZW50IG51bWJlciBvZiBwb2ludHMuXG4gKlxuICogSWdub3JlcyB0aGUgYFpgIGNoYXJhY3RlciBpbiBwYXRocyB1bmxlc3MgYm90aCBBIGFuZCBCIGVuZCB3aXRoIGl0LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBhIFRoZSBgZGAgYXR0cmlidXRlIGZvciBhIHBhdGhcbiAqIEBwYXJhbSB7U3RyaW5nfSBiIFRoZSBgZGAgYXR0cmlidXRlIGZvciBhIHBhdGhcbiAqL1xuZnVuY3Rpb24gaW50ZXJwb2xhdGVQYXRoMihhLCBiLCBhbG9uZ1RvID0gXCJ4XCIpIHtcbiAgLy8gcmVtb3ZlIFosIHJlbW92ZSBzcGFjZXMgYWZ0ZXIgbGV0dGVycyBhcyBzZWVuIGluIElFXG4gIGNvbnN0IGFOb3JtYWxpemVkID1cbiAgICBhID09IG51bGwgPyBcIlwiIDogYS5yZXBsYWNlKC9bWl0vZ2ksIFwiXCIpLnJlcGxhY2UoLyhbTUxDU1RRQUhWXSlcXHMqL2dpLCBcIiQxXCIpO1xuICBjb25zdCBiTm9ybWFsaXplZCA9XG4gICAgYiA9PSBudWxsID8gXCJcIiA6IGIucmVwbGFjZSgvW1pdL2dpLCBcIlwiKS5yZXBsYWNlKC8oW01MQ1NUUUFIVl0pXFxzKi9naSwgXCIkMVwiKTtcbiAgY29uc3QgYVBvaW50cyA9XG4gICAgYU5vcm1hbGl6ZWQgPT09IFwiXCIgPyBbXSA6IGFOb3JtYWxpemVkLnNwbGl0KC8oPz1bTUxDU1RRQUhWXSkvZ2kpO1xuICBjb25zdCBiUG9pbnRzID1cbiAgICBiTm9ybWFsaXplZCA9PT0gXCJcIiA/IFtdIDogYk5vcm1hbGl6ZWQuc3BsaXQoLyg/PVtNTENTVFFBSFZdKS9naSk7XG5cbiAgLy8gaWYgYm90aCBhcmUgZW1wdHksIGludGVycG9sYXRpb24gaXMgYWx3YXlzIHRoZSBlbXB0eSBzdHJpbmcuXG4gIGlmICghYVBvaW50cy5sZW5ndGggJiYgIWJQb2ludHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIG51bGxJbnRlcnBvbGF0b3IoKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9O1xuICB9XG5cbiAgLy8gaWYgQSBpcyBlbXB0eSwgdHJlYXQgaXQgYXMgaWYgaXQgdXNlZCB0byBjb250YWluIGp1c3QgdGhlIGZpcnN0IHBvaW50XG4gIC8vIG9mIEIuIFRoaXMgbWFrZXMgaXQgc28gdGhlIGxpbmUgZXh0ZW5kcyBvdXQgb2YgZnJvbSB0aGF0IGZpcnN0IHBvaW50LlxuICBpZiAoIWFQb2ludHMubGVuZ3RoKSB7XG4gICAgYVBvaW50cy5wdXNoKGJQb2ludHNbMF0pO1xuXG4gICAgLy8gb3RoZXJ3aXNlIGlmIEIgaXMgZW1wdHksIHRyZWF0IGl0IGFzIGlmIGl0IGNvbnRhaW5zIHRoZSBmaXJzdCBwb2ludFxuICAgIC8vIG9mIEEuIFRoaXMgbWFrZXMgaXQgc28gdGhlIGxpbmUgcmV0cmFjdHMgaW50byB0aGUgZmlyc3QgcG9pbnQuXG4gIH0gZWxzZSBpZiAoIWJQb2ludHMubGVuZ3RoKSB7XG4gICAgYlBvaW50cy5wdXNoKGFQb2ludHNbMF0pO1xuICB9XG5cbiAgLy8gY29udmVydCB0byBjb21tYW5kIG9iamVjdHMgc28gd2UgY2FuIG1hdGNoIHR5cGVzXG4gIGNvbnN0IGFDb21tYW5kcyA9IGFQb2ludHMubWFwKGNvbW1hbmRPYmplY3QpO1xuICBjb25zdCBiQ29tbWFuZHMgPSBiUG9pbnRzLm1hcChjb21tYW5kT2JqZWN0KTtcbiAgbGV0IGhhc1ogPSBmYWxzZTtcbiAgaWYgKFxuICAgIChhID09IG51bGwgfHwgYVthLmxlbmd0aCAtIDFdID09PSBcIlpcIikgJiZcbiAgICAoYiA9PSBudWxsIHx8IGJbYi5sZW5ndGggLSAxXSA9PT0gXCJaXCIpXG4gICkge1xuICAgIGhhc1ogPSB0cnVlO1xuICB9XG5cbiAgLy8gZ2V0IHRhaWxcbiAgLy8gZ2V0IGhlYWRcbiAgLy8gY29uY2F0IHRhaWwgKyBib2R5ICsgaGVhZFxuICBjb25zdCBhRXh0ZW50ID0gZDMuZXh0ZW50KGFDb21tYW5kcywgYyA9PiBjW2Fsb25nVG9dKTtcbiAgY29uc3QgYkV4dGVudCA9IGQzLmV4dGVudChiQ29tbWFuZHMsIGMgPT4gY1thbG9uZ1RvXSk7XG4gIGlmIChhbG9uZ1RvID09PSBcInhcIikge1xuICAgIGNvbnN0IGFIZWFkSSA9IGFDb21tYW5kcy5maW5kSW5kZXgoYyA9PiBjW2Fsb25nVG9dID09PSBhRXh0ZW50WzFdKTtcbiAgICBjb25zdCBiSGVhZEkgPSBiQ29tbWFuZHMuZmluZEluZGV4KGMgPT4gY1thbG9uZ1RvXSA9PT0gYkV4dGVudFsxXSk7XG5cbiAgICBjb25zdCBhVG9wID0gYUNvbW1hbmRzLnNsaWNlKDAsIGFIZWFkSSArIDEpO1xuICAgIGNvbnN0IGJUb3AgPSBiQ29tbWFuZHMuc2xpY2UoMCwgYkhlYWRJICsgMSk7XG4gICAgY29uc3QgYUJvdHRvbSA9IGFDb21tYW5kcy5zbGljZShhSGVhZEkgKyAxKS5yZXZlcnNlKCk7XG4gICAgY29uc3QgYkJvdHRvbSA9IGJDb21tYW5kcy5zbGljZShiSGVhZEkgKyAxKS5yZXZlcnNlKCk7XG4gICAgY29uc3QgaGFzQm90dG9tID0gYUJvdHRvbS5sZW5ndGggPiAwICYmIGJCb3R0b20ubGVuZ3RoID4gMDtcblxuICAgIHJldHVybiB0ID0+IHtcbiAgICAgIGlmICh0ID09PSAxKSB7XG4gICAgICAgIHJldHVybiBiID09PSBudWxsID8gXCJcIiA6IGI7XG4gICAgICB9XG4gICAgICByZXR1cm4gKFxuICAgICAgICBpbnRlcnBvbGF0ZU91dGxpbmUoYVRvcCwgYlRvcCwgYUV4dGVudCwgYkV4dGVudCkodCkgK1xuICAgICAgICAoaGFzQm90dG9tXG4gICAgICAgICAgPyBpbnRlcnBvbGF0ZU91dGxpbmUoYUJvdHRvbSwgYkJvdHRvbSwgYUV4dGVudCwgYkV4dGVudCwgdHJ1ZSwgdHJ1ZSkodClcbiAgICAgICAgICA6IFwiXCIpICtcbiAgICAgICAgKGhhc1ogPyBcIlpcIiA6IFwiXCIpXG4gICAgICApO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgYUhlYWRJID0gYUNvbW1hbmRzLmZpbmRJbmRleChjID0+IGNbYWxvbmdUb10gPT09IGFFeHRlbnRbMF0pO1xuICAgIGNvbnN0IGJIZWFkSSA9IGJDb21tYW5kcy5maW5kSW5kZXgoYyA9PiBjW2Fsb25nVG9dID09PSBiRXh0ZW50WzBdKTtcblxuICAgIGNvbnN0IGFUb3AgPSBhQ29tbWFuZHMuc2xpY2UoMCwgYUhlYWRJICsgMSkucmV2ZXJzZSgpO1xuICAgIGNvbnN0IGJUb3AgPSBiQ29tbWFuZHMuc2xpY2UoMCwgYkhlYWRJICsgMSkucmV2ZXJzZSgpO1xuICAgIGNvbnN0IGFCb3R0b20gPSBhQ29tbWFuZHMuc2xpY2UoYUhlYWRJICsgMSk7XG4gICAgY29uc3QgYkJvdHRvbSA9IGJDb21tYW5kcy5zbGljZShiSGVhZEkgKyAxKTtcbiAgICBjb25zdCBoYXNCb3R0b20gPSBhQm90dG9tLmxlbmd0aCA+IDAgJiYgYkJvdHRvbS5sZW5ndGggPiAwO1xuXG4gICAgcmV0dXJuIHQgPT4ge1xuICAgICAgaWYgKHQgPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGIgPT09IG51bGwgPyBcIlwiIDogYjtcbiAgICAgIH1cbiAgICAgIHJldHVybiAoXG4gICAgICAgIGludGVycG9sYXRlT3V0bGluZShhVG9wLCBiVG9wLCBhRXh0ZW50LCBiRXh0ZW50LCB0cnVlKSh0KSArXG4gICAgICAgIChoYXNCb3R0b21cbiAgICAgICAgICA/IGludGVycG9sYXRlT3V0bGluZShhQm90dG9tLCBiQm90dG9tLCBhRXh0ZW50LCBiRXh0ZW50LCBmYWxzZSwgdHJ1ZSkodClcbiAgICAgICAgICA6IFwiXCIpICtcbiAgICAgICAgKGhhc1ogPyBcIlpcIiA6IFwiXCIpXG4gICAgICApO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBpbnRlcnBvbGF0ZU91dGxpbmUoXG4gICAgYUNvbW1hbmRzLFxuICAgIGJDb21tYW5kcyxcbiAgICBhRXh0ZW50LFxuICAgIGJFeHRlbnQsXG4gICAgcmV2ZXJzZSxcbiAgICBpc0JvdHRvbSA9IGZhbHNlXG4gICkge1xuICAgIGxldCBoZWFkO1xuICAgIGxldCB0YWlsO1xuICAgIGxldCBib2R5O1xuICAgIGlmIChhRXh0ZW50WzFdIDwgYkV4dGVudFswXSB8fCBhRXh0ZW50WzBdID4gYkV4dGVudFsxXSkge1xuICAgICAgLy8ganVzdCBpbnRlcnBvbGF0ZVxuICAgICAgYm9keSA9IGdldEJvZHkoYUNvbW1hbmRzLCBiQ29tbWFuZHMsIHJldmVyc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoYUV4dGVudFsxXSA+IGJFeHRlbnRbMV0pIHtcbiAgICAgICAgLy8gc2hyaW5rIGhlYWRcbiAgICAgICAgY29uc3QgaSA9IGFDb21tYW5kcy5maW5kSW5kZXgoYyA9PiBjW2Fsb25nVG9dID4gYkV4dGVudFsxXSk7XG4gICAgICAgIGhlYWQgPSBnZXRIZWFkKGFDb21tYW5kcy5zbGljZShpIC0gMSksIHJldmVyc2UsIHRydWUsIGlzQm90dG9tKTtcbiAgICAgIH0gZWxzZSBpZiAoYUV4dGVudFsxXSA8IGJFeHRlbnRbMV0pIHtcbiAgICAgICAgLy8gZXh0ZW5kIGhlYWRcbiAgICAgICAgY29uc3QgaSA9IGJDb21tYW5kcy5maW5kSW5kZXgoYyA9PiBjW2Fsb25nVG9dID4gYUV4dGVudFsxXSk7XG4gICAgICAgIGhlYWQgPSBnZXRIZWFkKGJDb21tYW5kcy5zbGljZShpIC0gMSksIHJldmVyc2UsIGZhbHNlLCBpc0JvdHRvbSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChhRXh0ZW50WzBdIDwgYkV4dGVudFswXSkge1xuICAgICAgICAvLyBzaHJpbmsgdGFpbFxuICAgICAgICBjb25zdCBpID0gYUNvbW1hbmRzLmZpbmRJbmRleChjID0+IGNbYWxvbmdUb10gPj0gYkV4dGVudFswXSk7XG4gICAgICAgIHRhaWwgPSBnZXRUYWlsKGFDb21tYW5kcy5zbGljZSgwLCBpICsgMSksIHJldmVyc2UsIHRydWUsIGlzQm90dG9tKTtcbiAgICAgIH0gZWxzZSBpZiAoYUV4dGVudFswXSA+IGJFeHRlbnRbMF0pIHtcbiAgICAgICAgLy8gZXh0ZW5kIHRhaWxcbiAgICAgICAgY29uc3QgaSA9IGJDb21tYW5kcy5maW5kSW5kZXgoYyA9PiBjW2Fsb25nVG9dID49IGFFeHRlbnRbMF0pO1xuICAgICAgICB0YWlsID0gZ2V0VGFpbChiQ29tbWFuZHMuc2xpY2UoMCwgaSArIDEpLCByZXZlcnNlLCBmYWxzZSwgaXNCb3R0b20pO1xuICAgICAgICAvLyB0YWlsID0gZ2V0VGFpbChiQ29tbWFuZHMuZmlsdGVyKGMgPT4gY1thbG9uZ1RvXSA8IGFFeHRlbnRbMF0pLCBmYWxzZSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJvZHlNaW4gPSBNYXRoLm1heChhRXh0ZW50WzBdLCBiRXh0ZW50WzBdKTtcbiAgICAgIGNvbnN0IGJvZHlNYXggPSBNYXRoLm1pbihhRXh0ZW50WzFdLCBiRXh0ZW50WzFdKTtcbiAgICAgIC8vIGdldCBib2R5XG4gICAgICBib2R5ID0gZ2V0Qm9keShcbiAgICAgICAgYUNvbW1hbmRzLmZpbHRlcihjID0+IGNbYWxvbmdUb10gPj0gYm9keU1pbiAmJiBjW2Fsb25nVG9dIDw9IGJvZHlNYXggICksXG4gICAgICAgIGJDb21tYW5kcy5maWx0ZXIoYyA9PiBjW2Fsb25nVG9dID49IGJvZHlNaW4gJiYgY1thbG9uZ1RvXSA8PSBib2R5TWF4ICApLFxuICAgICAgICByZXZlcnNlLFxuICAgICAgICAhaXNCb3R0b20gJiYgKChyZXZlcnNlICYmICFoZWFkKSB8fCAoIXJldmVyc2UgJiYgIXRhaWwpKVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHJldmVyc2UpIHtcbiAgICAgIHJldHVybiB0ID0+IHtcbiAgICAgICAgcmV0dXJuIChoZWFkID8gaGVhZCh0KSA6IFwiXCIpICsgYm9keSh0KSArICh0YWlsID8gdGFpbCh0KSA6IFwiXCIpO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHQgPT4ge1xuICAgICAgICByZXR1cm4gKHRhaWwgPyB0YWlsKHQpIDogXCJcIikgKyBib2R5KHQpICsgKGhlYWQgPyBoZWFkKHQpIDogXCJcIik7XG4gICAgICB9O1xuICAgIH1cblxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0Qm9keShhQ29tbWFuZHMsIGJDb21tYW5kcywgcmV2ZXJzZSA9IGZhbHNlLCBpc1RhaWwgPSBmYWxzZSkge1xuICAgIC8vIGV4dGVuZCB0byBtYXRjaCBlcXVhbCBzaXplXG4gICAgY29uc3QgbnVtUG9pbnRzVG9FeHRlbmQgPSBNYXRoLmFicyhiQ29tbWFuZHMubGVuZ3RoIC0gYUNvbW1hbmRzLmxlbmd0aCk7XG4gICAgaWYgKGFDb21tYW5kcy5sZW5ndGggPD0gMSAmJiBiQ29tbWFuZHMubGVuZ3RoIDw9IDEpIHtcbiAgICAgIHJldHVybiB0ID0+IFwiXCI7XG4gICAgfVxuICAgIGlmIChudW1Qb2ludHNUb0V4dGVuZCAhPT0gMCkge1xuICAgICAgLy8gQiBoYXMgbW9yZSBwb2ludHMgdGhhbiBBLCBzbyBhZGQgcG9pbnRzIHRvIEEgYmVmb3JlIGludGVycG9sYXRpbmdcbiAgICAgIGlmIChiQ29tbWFuZHMubGVuZ3RoID4gYUNvbW1hbmRzLmxlbmd0aCkge1xuICAgICAgICBhQ29tbWFuZHMgPSBleHRlbmQoYUNvbW1hbmRzLCBiQ29tbWFuZHMsIG51bVBvaW50c1RvRXh0ZW5kKTtcblxuICAgICAgICAvLyBlbHNlIGlmIEEgaGFzIG1vcmUgcG9pbnRzIHRoYW4gQiwgYWRkIG1vcmUgcG9pbnRzIHRvIEJcbiAgICAgIH0gZWxzZSBpZiAoYkNvbW1hbmRzLmxlbmd0aCA8IGFDb21tYW5kcy5sZW5ndGgpIHtcbiAgICAgICAgYkNvbW1hbmRzID0gZXh0ZW5kKGJDb21tYW5kcywgYUNvbW1hbmRzLCBudW1Qb2ludHNUb0V4dGVuZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gY29tbWFuZHMgaGF2ZSBzYW1lIGxlbmd0aCBub3cuXG4gICAgLy8gY29udmVydCBBIHRvIHRoZSBzYW1lIHR5cGUgb2YgQlxuICAgIGFDb21tYW5kcyA9IGFDb21tYW5kcy5tYXAoKGFDb21tYW5kLCBpKSA9PlxuICAgICAgY29udmVydFRvU2FtZVR5cGUoYUNvbW1hbmQsIGJDb21tYW5kc1tpXSlcbiAgICApO1xuICAgIGFDb21tYW5kcyA9IChyZXZlcnNlID8gYUNvbW1hbmRzLnJldmVyc2UoKSA6IGFDb21tYW5kcyk7XG4gICAgYkNvbW1hbmRzID0gKHJldmVyc2UgPyBiQ29tbWFuZHMucmV2ZXJzZSgpIDogYkNvbW1hbmRzKTtcbiAgICBpZiAoaXNUYWlsKSB7XG4gICAgICBhQ29tbWFuZHNbMF0gPSBPYmplY3QuYXNzaWduKHt9LCBhQ29tbWFuZHNbMF0sIHsgdHlwZTogXCJNXCIgfSk7XG4gICAgICBiQ29tbWFuZHNbMF0gPSBPYmplY3QuYXNzaWduKHt9LCBiQ29tbWFuZHNbMF0sIHsgdHlwZTogXCJNXCIgfSk7XG4gICAgfVxuICAgIGNvbnN0IGFQcm9jZXNzZWQgPSBhQ29tbWFuZHNcbiAgICAgIC5tYXAoY29tbWFuZFRvU3RyaW5nKVxuICAgICAgLmpvaW4oXCJcIik7XG4gICAgY29uc3QgYlByb2Nlc3NlZCA9IGJDb21tYW5kc1xuICAgICAgLm1hcChjb21tYW5kVG9TdHJpbmcpXG4gICAgICAuam9pbihcIlwiKTtcblxuICAgIGNvbnN0IHN0cmluZ0ludGVycG9sYXRvciA9IGQzLmludGVycG9sYXRlU3RyaW5nKGFQcm9jZXNzZWQsIGJQcm9jZXNzZWQpO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIHBhdGhJbnRlcnBvbGF0b3IodCkge1xuICAgICAgLy8gYXQgMSByZXR1cm4gdGhlIGZpbmFsIHZhbHVlIHdpdGhvdXQgdGhlIGV4dGVuc2lvbnMgdXNlZCBkdXJpbmcgaW50ZXJwb2xhdGlvblxuICAgICAgaWYgKHQgPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGJQcm9jZXNzZWQgPT0gbnVsbCA/IFwiXCIgOiBiUHJvY2Vzc2VkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RyaW5nSW50ZXJwb2xhdG9yKHQpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRIZWFkKGNvbW1hbmRzLCByZXZlcnNlID0gZmFsc2UsIGlzU2hyaW5rID0gZmFsc2UsIGlzQm90dG9tPWZhbHNlKSB7XG4gICAgY29uc3QgZCA9IGNvbW1hbmRzLm1hcChjb21tYW5kVG9TdHJpbmcpLmpvaW4oXCJcIik7XG4gICAgY29uc3QgTCA9IGNvbW1hbmRzLmxlbmd0aDtcbiAgICBjb25zdCBwaGFzZXMgPSBbXTtcbiAgICBjb25zdCBkZWJ1ZyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IEwgLSAxOyBpKyspIHtcbiAgICAgIGxldCBhQ29tbWFuZHMgPSBjb21tYW5kcy5zbGljZSgwLCBpKS5jb25jYXQoW2NvbW1hbmRzW2kgLSAxXV0pO1xuICAgICAgbGV0IGJDb21tYW5kcyA9IGNvbW1hbmRzLnNsaWNlKDAsIGkgKyAxKTtcbiAgICAgIGFDb21tYW5kcyA9IChyZXZlcnNlID8gYUNvbW1hbmRzLnJldmVyc2UoKSA6IGFDb21tYW5kcyk7XG4gICAgICBiQ29tbWFuZHMgPSAocmV2ZXJzZSA/IGJDb21tYW5kcy5yZXZlcnNlKCkgOiBiQ29tbWFuZHMpO1xuICAgICAgY29uc3QgYVByb2Nlc3NlZCA9IGFDb21tYW5kc1xuICAgICAgICAubWFwKGNvbW1hbmRUb1N0cmluZylcbiAgICAgICAgLmpvaW4oXCJcIik7XG4gICAgICBjb25zdCBiUHJvY2Vzc2VkID0gYkNvbW1hbmRzXG4gICAgICAgIC5tYXAoY29tbWFuZFRvU3RyaW5nKVxuICAgICAgICAuam9pbihcIlwiKTtcbiAgICAgIGlmIChyZXZlcnNlICYmICFpc0JvdHRvbSkge1xuICAgICAgICBhQ29tbWFuZHNbMF0gPSBPYmplY3QuYXNzaWduKHt9LCBhQ29tbWFuZHNbMF0sIHsgdHlwZTogXCJNXCIgfSk7XG4gICAgICAgIGJDb21tYW5kc1swXSA9IE9iamVjdC5hc3NpZ24oe30sIGJDb21tYW5kc1swXSwgeyB0eXBlOiBcIk1cIiB9KTtcbiAgICAgIH1cbiAgICAgIGRlYnVnLnB1c2goeyBhUHJvY2Vzc2VkLCBiUHJvY2Vzc2VkIH0pO1xuICAgICAgcGhhc2VzLnB1c2goZnVuY3Rpb24odCkge1xuICAgICAgICByZXR1cm4gZDMuaW50ZXJwb2xhdGVTdHJpbmcoYVByb2Nlc3NlZCwgYlByb2Nlc3NlZCkodCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgaWYgKGlzU2hyaW5rKSB7XG4gICAgICAgIHQgPSAxIC0gdDtcbiAgICAgIH1cbiAgICAgIGlmICh0ID09PSAxKSB7XG4gICAgICAgIHJldHVybiBkID09IG51bGwgPyBcIlwiIDogZDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBoYXNlID0gTWF0aC5mbG9vcih0ICogKEwgLSAxKSk7XG5cbiAgICAgIHJldHVybiBwaGFzZXNbcGhhc2VdKHQgKiAoTCAtIDEpIC0gcGhhc2UpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRUYWlsKGNvbW1hbmRzLCByZXZlcnNlID0gZmFsc2UsIGlzU2hyaW5rID0gZmFsc2UsIGlzQm90dG9tPWZhbHNlKSB7XG4gICAgY29uc3QgZCA9IGNvbW1hbmRzLm1hcChjb21tYW5kVG9TdHJpbmcpLmpvaW4oXCJcIik7XG4gICAgY29uc3QgTCA9IGNvbW1hbmRzLmxlbmd0aDtcbiAgICBjb25zdCBwaGFzZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IEw7IGkrKykge1xuICAgICAgbGV0IGFDb21tYW5kcyA9IFtjb21tYW5kc1tMIC0gaV1dLmNvbmNhdChjb21tYW5kcy5zbGljZShMIC0gaSwgTCkpO1xuICAgICAgbGV0IGJDb21tYW5kcyA9IGNvbW1hbmRzLnNsaWNlKEwgLSBpIC0gMSwgTCk7XG5cbiAgICAgIGFDb21tYW5kcyA9IChyZXZlcnNlID8gYUNvbW1hbmRzLnJldmVyc2UoKSA6IGFDb21tYW5kcyk7XG4gICAgICBiQ29tbWFuZHMgPSAocmV2ZXJzZSA/IGJDb21tYW5kcy5yZXZlcnNlKCkgOiBiQ29tbWFuZHMpO1xuXG4gICAgICBpZiAoIXJldmVyc2UgJiYgIWlzQm90dG9tKSB7XG4gICAgICAgIGFDb21tYW5kc1swXSA9IE9iamVjdC5hc3NpZ24oe30sIGFDb21tYW5kc1swXSwgeyB0eXBlOiBcIk1cIiB9KTtcbiAgICAgICAgYkNvbW1hbmRzWzBdID0gT2JqZWN0LmFzc2lnbih7fSwgYkNvbW1hbmRzWzBdLCB7IHR5cGU6IFwiTVwiIH0pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhUHJvY2Vzc2VkID0gYUNvbW1hbmRzXG4gICAgICAgIC5tYXAoY29tbWFuZFRvU3RyaW5nKVxuICAgICAgICAuam9pbihcIlwiKTtcbiAgICAgIGNvbnN0IGJQcm9jZXNzZWQgPSBiQ29tbWFuZHNcbiAgICAgICAgLm1hcChjb21tYW5kVG9TdHJpbmcpXG4gICAgICAgIC5qb2luKFwiXCIpO1xuXG4gICAgICBwaGFzZXMucHVzaChmdW5jdGlvbih0KSB7XG4gICAgICAgIHJldHVybiBkMy5pbnRlcnBvbGF0ZVN0cmluZyhhUHJvY2Vzc2VkLCBiUHJvY2Vzc2VkKSh0KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgaWYgKGlzU2hyaW5rKSB7XG4gICAgICAgIHQgPSAxIC0gdDtcbiAgICAgIH1cbiAgICAgIGlmICh0ID09PSAxKSB7XG4gICAgICAgIHJldHVybiBkID09IG51bGwgPyBcIlwiIDogZDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBoYXNlID0gTWF0aC5mbG9vcih0ICogKEwgLSAxKSk7XG4gICAgICByZXR1cm4gcGhhc2VzW3BoYXNlXSh0ICogKEwgLSAxKSAtIHBoYXNlKTtcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCB7IGludGVycG9sYXRlUGF0aCwgaW50ZXJwb2xhdGVQYXRoMiwgbGluZVRvQXJlYSB9O1xuIiwiLyogZXNsaW50LWRpc2FibGUgY2FtZWxjYXNlICovXG5pbXBvcnQgKiBhcyBkMyBmcm9tIFwiZDNcIjtcbmltcG9ydCB7IGludGVycG9sYXRlUGF0aCwgaW50ZXJwb2xhdGVQYXRoMiB9IGZyb20gXCIuL2ludGVycG9sYXRlUGF0aFlIXCI7XG5pbXBvcnQge2dldH0gZnJvbSBcIi4uLy4uL3V0aWwvdXRpbFwiO1xuXG5cblxuXG5mdW5jdGlvbiByZWN0SW50ZXJwb2xhdG9yKHNjYWxlcywgZW5jb2Rlcywgc2lnbmFscywgZCwgb2xkRCwgZ2V0UmVjdCkge1xuICBsZXQgcGF0aF9pO1xuICBsZXQgcGF0aF9mO1xuICBjb25zdCBkX2kgPSBkLmluaXRpYWwgfHwgb2xkRCB8fCBkMy5zZWxlY3QodGhpcykuZGF0dW0oKTtcbiAgY29uc3QgZF9mID0gZC5maW5hbCB8fCBkO1xuICBjb25zdCBlbmNvZGVfaSA9IGVuY29kZXMuaW5pdGlhbCB8fCBlbmNvZGVzO1xuICBjb25zdCBlbmNvZGVfZiA9IGVuY29kZXMuZmluYWwgfHwgZW5jb2RlcztcbiAgY29uc3Qgc2NhbGVfaSA9IHtcbiAgICBwcmltYXJ5OiBzY2FsZXMuaW5pdGlhbCB8fCBzY2FsZXMsXG4gICAgc2Vjb25kYXJ5OiBzY2FsZXMuZmluYWwgfHwgc2NhbGVzXG4gIH07XG4gIGNvbnN0IHNjYWxlX2YgPSB7XG4gICAgcHJpbWFyeTogc2NhbGVzLmZpbmFsIHx8IHNjYWxlcyxcbiAgICBzZWNvbmRhcnk6IHNjYWxlcy5pbml0aWFsIHx8IHNjYWxlc1xuICB9O1xuICBjb25zdCBzaWduYWxfaSA9IHNpZ25hbHMuaW5pdGlhbCB8fCBzaWduYWxzO1xuICBjb25zdCBzaWduYWxfZiA9IHNpZ25hbHMuZmluYWwgfHwgc2lnbmFscztcblxuICBwYXRoX2kgPSBnZXRSZWN0KGRfaSwgc2NhbGVfaSwgZW5jb2RlX2ksIHNpZ25hbF9pKS5wYXRoO1xuICBwYXRoX2YgPSBnZXRSZWN0KGRfZiwgc2NhbGVfZiwgZW5jb2RlX2YsIHNpZ25hbF9mKS5wYXRoO1xuXG4gIHJldHVybiBpbnRlcnBvbGF0ZVBhdGgocGF0aF9pLCBwYXRoX2YpO1xufVxuZnVuY3Rpb24gc3ltYm9sSW50ZXJwb2xhdG9yKHNjYWxlcywgZW5jb2Rlcywgc2lnbmFscywgZCwgb2xkRCwgZ2V0U2hhcGUpIHtcbiAgbGV0IHNoYXBlX2k7XG4gIGxldCBzaGFwZV9mO1xuICBsZXQgc2hhcGVfaV9kaW1pbmlzaGVkO1xuICBsZXQgc2hhcGVfZl9kaW1pbmlzaGVkO1xuICBjb25zdCBkX2kgPSBkLmluaXRpYWwgfHwgb2xkRCB8fCBkMy5zZWxlY3QodGhpcykuZGF0dW0oKTtcbiAgY29uc3QgZF9mID0gZC5maW5hbCB8fCBkO1xuICBjb25zdCBlbmNvZGVfaSA9IGVuY29kZXMuaW5pdGlhbCB8fCBlbmNvZGVzO1xuICBjb25zdCBlbmNvZGVfZiA9IGVuY29kZXMuZmluYWwgfHwgZW5jb2RlcztcbiAgY29uc3Qgc2NhbGVfaSA9IHNjYWxlcy5pbml0aWFsIHx8IHNjYWxlcztcbiAgY29uc3Qgc2NhbGVfZiA9IHNjYWxlcy5maW5hbCB8fCBzY2FsZXM7XG4gIGNvbnN0IHNpZ25hbF9pID0gc2lnbmFscy5pbml0aWFsIHx8IHNpZ25hbHM7XG4gIGNvbnN0IHNpZ25hbF9mID0gc2lnbmFscy5maW5hbCB8fCBzaWduYWxzO1xuICBsZXQgaXNNb3JwaCA9IGZhbHNlO1xuXG4gIHNoYXBlX2kgPSBnZXRTaGFwZShkX2ksIHNjYWxlX2ksIGVuY29kZV9pLCBzaWduYWxfaSk7XG4gIHNoYXBlX2YgPSBnZXRTaGFwZShkX2YsIHNjYWxlX2YsIGVuY29kZV9mLCBzaWduYWxfZik7XG4gIGlmIChzaGFwZV9pLm1ldGEuc2hhcGUgIT09IHNoYXBlX2YubWV0YS5zaGFwZSkge1xuICAgIGlzTW9ycGggPSB0cnVlO1xuICAgIHNoYXBlX2lfZGltaW5pc2hlZCA9IGdldFNoYXBlKGRfaSwgc2NhbGVfaSwgZW5jb2RlX2ksIHNpZ25hbF9pLCB0cnVlKTtcbiAgICBzaGFwZV9mX2RpbWluaXNoZWQgPSBnZXRTaGFwZShkX2YsIHNjYWxlX2YsIGVuY29kZV9mLCBzaWduYWxfZiwgdHJ1ZSk7XG4gIH1cblxuICBpZiAoaXNNb3JwaCkge1xuICAgIHJldHVybiB0ID0+IHtcbiAgICAgIGlmICh0IDwgMC41KSB7XG4gICAgICAgIHJldHVybiBpbnRlcnBvbGF0ZVBhdGgoc2hhcGVfaS5wYXRoLCBzaGFwZV9pX2RpbWluaXNoZWQucGF0aCkodCAqIDIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGludGVycG9sYXRlUGF0aChcbiAgICAgICAgc2hhcGVfZl9kaW1pbmlzaGVkLnBhdGgsXG4gICAgICAgIHNoYXBlX2YucGF0aFxuICAgICAgKSgodCAtIDAuNSkgKiAyKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBpbnRlcnBvbGF0ZVBhdGgoc2hhcGVfaS5wYXRoLCBzaGFwZV9mLnBhdGgpO1xufVxuXG5mdW5jdGlvbiBhcmVhTGluZUludGVycG9sYXRvcldpdGhTY2FsZXMoXG4gIHNjYWxlcyxcbiAgZW5jb2RlcyxcbiAgbWFya3R5cGVzLFxuICBkLFxuICBvbGRELFxuICBzaWduYWxzLFxuICBnZXRQYXRoLFxuICBpbnRlcnBvbGF0ZVN0eWxlLFxuICBhbG9uZ1Rvc1xuKSB7XG4gIGNvbnN0IGVuY29kZV9pID0gZW5jb2Rlcy5pbml0aWFsIHx8IGVuY29kZXM7XG4gIGNvbnN0IGVuY29kZV9mID0gZW5jb2Rlcy5maW5hbCB8fCBlbmNvZGVzO1xuICBjb25zdCBtYXJrdHlwZV9pID0gbWFya3R5cGVzLmluaXRpYWwgfHwgbWFya3R5cGVzO1xuICAvLyBjb25zdCBtYXJrdHlwZV9pID0gXCJhcmVhXCI7XG4gIGNvbnN0IG1hcmt0eXBlX2YgPSBtYXJrdHlwZXMuZmluYWwgfHwgbWFya3R5cGVzO1xuICBjb25zdCBzY2FsZV9pID0gc2NhbGVzLmluaXRpYWwgfHwgc2NhbGVzO1xuICBjb25zdCBzY2FsZV9mID0gc2NhbGVzLmZpbmFsIHx8IHNjYWxlcztcbiAgY29uc3Qgc2lnbmFsX2kgPSBzaWduYWxzLmluaXRpYWwgfHwgc2lnbmFscztcbiAgY29uc3Qgc2lnbmFsX2YgPSBzaWduYWxzLmZpbmFsIHx8IHNpZ25hbHM7XG4gIGNvbnN0IGRfaSA9IGQuaW5pdGlhbCB8fCBvbGREO1xuICBjb25zdCBkX2YgPSBkLmZpbmFsIHx8IGQ7XG4gIGNvbnN0IGFsb25nVG9faSA9IGFsb25nVG9zLmluaXRpYWwgfHwgYWxvbmdUb3M7XG4gIGNvbnN0IGFsb25nVG9fZiA9IGFsb25nVG9zLmZpbmFsIHx8IGFsb25nVG9zO1xuICBjb25zdCBwYXRoc18xMSA9IGdldFBhdGgoYXJlYUxpbmVEVG9EYXRhKGRfaSksIHNjYWxlX2ksIGVuY29kZV9pLCBzaWduYWxfaSwgbWFya3R5cGVfaSwgYWxvbmdUb19pKTtcbiAgY29uc3QgcGF0aHNfMTIgPSBnZXRQYXRoKGFyZWFMaW5lRFRvRGF0YShkX2kpLCBzY2FsZV9mLCBlbmNvZGVfaSwgc2lnbmFsX2ksIG1hcmt0eXBlX2ksIGFsb25nVG9faSk7XG4gIGNvbnN0IHBhdGhzXzIxID0gZ2V0UGF0aChhcmVhTGluZURUb0RhdGEoZF9mKSwgc2NhbGVfaSwgZW5jb2RlX2YsIHNpZ25hbF9mLCBtYXJrdHlwZV9mLCBhbG9uZ1RvX2YpO1xuICBjb25zdCBwYXRoc18yMiA9IGdldFBhdGgoYXJlYUxpbmVEVG9EYXRhKGRfZiksIHNjYWxlX2YsIGVuY29kZV9mLCBzaWduYWxfZiwgbWFya3R5cGVfZiwgYWxvbmdUb19mKTtcblxuICBpZiAoXG4gICAgaXNWYWxpZFBhdGgocGF0aHNfMTEpICYmXG4gICAgaXNWYWxpZFBhdGgocGF0aHNfMTIpICYmXG4gICAgaXNWYWxpZFBhdGgocGF0aHNfMjEpICYmXG4gICAgaXNWYWxpZFBhdGgocGF0aHNfMjIpXG4gICkge1xuICAgIGNvbnN0IGludGVycG9sYXRvcl9zY2FsZTEgPSBpbnRlcnBvbGF0ZVBhdGgocGF0aHNfMTEsIHBhdGhzXzEyLCBhbG9uZ1RvX2kpO1xuICAgIGNvbnN0IGludGVycG9sYXRvcl9zY2FsZTIgPSBpbnRlcnBvbGF0ZVBhdGgocGF0aHNfMjEsIHBhdGhzXzIyLCBhbG9uZ1RvX2YpO1xuICAgIGNvbnN0IGludGVycG9sYXRvcl9kYXRhID1cbiAgICAgIGludGVycG9sYXRlU3R5bGUgPT09IFwidXBkYXRlXCIgPyBpbnRlcnBvbGF0ZVBhdGgyIDogaW50ZXJwb2xhdGVQYXRoO1xuICAgICAgLy8gaW50ZXJwb2xhdGVTdHlsZSA9PT0gXCJ1cGRhdGVcIiA/IGludGVycG9sYXRlUGF0aDMgOiBpbnRlcnBvbGF0ZVBhdGg7XG4gICAgcmV0dXJuIHQgPT4ge1xuICAgICAgcmV0dXJuIGludGVycG9sYXRvcl9kYXRhKFxuICAgICAgICBpbnRlcnBvbGF0b3Jfc2NhbGUxKHQpLFxuICAgICAgICBpbnRlcnBvbGF0b3Jfc2NhbGUyKHQpLFxuICAgICAgICBhbG9uZ1RvX2lcbiAgICAgICkodCk7XG4gICAgfTtcbiAgfVxuICBjb25zdCBpbnRlcnBvbGF0b3JfZGF0YSA9XG4gICAgaW50ZXJwb2xhdGVTdHlsZSA9PT0gXCJ1cGRhdGVcIiA/IGludGVycG9sYXRlUGF0aDIgOiBpbnRlcnBvbGF0ZVBhdGg7XG4gICAgLy8gaW50ZXJwb2xhdGVTdHlsZSA9PT0gXCJ1cGRhdGVcIiA/IGludGVycG9sYXRlUGF0aDMgOiBpbnRlcnBvbGF0ZVBhdGg7XG5cbiAgcmV0dXJuIGludGVycG9sYXRvcl9kYXRhKHBhdGhzXzExLCBwYXRoc18yMiwgYWxvbmdUb19pKTtcbn1cblxuZnVuY3Rpb24gYXJlYUxpbmVJbnRlcnBvbGF0b3IoXG4gIHNjYWxlcyxcbiAgZW5jb2RlcyxcbiAgbWFya3R5cGVzLFxuICBkLFxuICBvbGRELFxuICBzaWduYWxzLFxuICBnZXRQYXRoLFxuICBpbnRlcnBvbGF0ZVN0eWxlXG4pIHtcbiAgY29uc3QgbWFya3R5cGUgPSB0eXBlb2YgbWFya3R5cGVzID09PSBcInN0cmluZ1wiID8gbWFya3R5cGVzIDogdW5kZWZpbmVkO1xuXG4gIGlmIChtYXJrdHlwZSA9PT0gXCJsaW5lXCIpIHtcbiAgICBjb25zdCBkYXRhVG9QYXRoID0gKGRhdGEsIHNjYWxlLCBlbmNvZGUsIHNpZ25hbCkgPT4ge1xuICAgICAgcmV0dXJuIGdldFBhdGgoZGF0YSwgc2NhbGUsIGVuY29kZSwgc2lnbmFsLCBcImxpbmVcIik7XG4gICAgfTtcbiAgICBjb25zdCBjb21wdXRJZCA9IChlbmNvZGUsIGQpID0+IHtcbiAgICAgIHJldHVybiAhZFxuICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICA6IFtkLmRhdHVtW2VuY29kZS54LmZpZWxkXSwgZC5kYXR1bVtlbmNvZGUueS5maWVsZF1dLmpvaW4oXCIsXCIpO1xuICAgIH07XG4gICAgcmV0dXJuIGNvbXB1dGVMaW5lSW50ZXJwb2xhdG9yKFxuICAgICAgYXJlYUxpbmVEVG9EYXRhKGQuaW5pdGlhbCB8fCBvbGREKSxcbiAgICAgIGFyZWFMaW5lRFRvRGF0YShkLmZpbmFsIHx8IGQpLFxuICAgICAgc2NhbGVzLFxuICAgICAgZW5jb2RlcyxcbiAgICAgIHNpZ25hbHMsXG4gICAgICBjb21wdXRJZCxcbiAgICAgIGRhdGFUb1BhdGhcbiAgICApO1xuICAgIC8vIGlmIChpbnRlcnBvbGF0ZVN0eWxlID09PSBcInVwZGF0ZVwiKSB7XG4gICAgLy8gICBjb25zdCBkYXRhVG9QYXRoID0gKGRhdGEsIHNjYWxlLCBlbmNvZGUsIHNpZ25hbCkgPT4ge1xuICAgIC8vICAgICByZXR1cm4gZ2V0UGF0aChkYXRhLCBzY2FsZSwgZW5jb2RlLCBzaWduYWwsIFwibGluZVwiKTtcbiAgICAvLyAgIH07XG4gICAgLy8gICBjb25zdCBjb21wdXRJZCA9IChlbmNvZGUsIGQpID0+IHtcbiAgICAvLyAgICAgcmV0dXJuICFkXG4gICAgLy8gICAgICAgPyB1bmRlZmluZWRcbiAgICAvLyAgICAgICA6IFtkLmRhdHVtW2VuY29kZS54LmZpZWxkXSwgZC5kYXR1bVtlbmNvZGUueS5maWVsZF1dLmpvaW4oXCIsXCIpO1xuICAgIC8vICAgfTtcbiAgICAvLyAgIHJldHVybiBjb21wdXRlTGluZUludGVycG9sYXRvcihcbiAgICAvLyAgICAgYXJlYUxpbmVEVG9EYXRhKG9sZEQpLFxuICAgIC8vICAgICBhcmVhTGluZURUb0RhdGEoZCksXG4gICAgLy8gICAgIHNjYWxlcyxcbiAgICAvLyAgICAgZW5jb2RlcyxcbiAgICAvLyAgICAgc2lnbmFscyxcbiAgICAvLyAgICAgY29tcHV0SWQsXG4gICAgLy8gICAgIGRhdGFUb1BhdGhcbiAgICAvLyAgICk7XG4gICAgLy8gfVxuXG4gICAgLy8gcmV0dXJuIGFyZWFMaW5lSW50ZXJwb2xhdG9yV2l0aFNjYWxlcy5iaW5kKHRoaXMpKFxuICAgIC8vICAgc2NhbGVzLFxuICAgIC8vICAgZW5jb2RlcyxcbiAgICAvLyAgIFwibGluZVwiLFxuICAgIC8vICAgZCxcbiAgICAvLyAgIG9sZEQsXG4gICAgLy8gICBzaWduYWxzLFxuICAgIC8vICAgZ2V0UGF0aCxcbiAgICAvLyAgIGludGVycG9sYXRlU3R5bGVcbiAgICAvLyApO1xuICB9XG4gIGlmIChtYXJrdHlwZSA9PT0gXCJhcmVhXCIgfHwgbWFya3R5cGUgPT09IFwidHJhaWxcIikge1xuICAgIGNvbnN0IGFsb25nVG9zID0ge1xuICAgICAgaW5pdGlhbDogZ2V0KGVuY29kZXMsIFwiaW5pdGlhbFwiLCBcIm9yaWVudFwiLCBcInZhbHVlXCIpID09PSBcImhvcml6b250YWxcIiA/IFwieVwiOiBcInhcIixcbiAgICAgIGZpbmFsOiBnZXQoZW5jb2RlcywgXCJmaW5hbFwiLCBcIm9yaWVudFwiLCBcInZhbHVlXCIpID09PSBcImhvcml6b250YWxcIiA/IFwieVwiOiBcInhcIlxuICAgIH07XG4gICAgcmV0dXJuIGFyZWFMaW5lSW50ZXJwb2xhdG9yV2l0aFNjYWxlcy5iaW5kKHRoaXMpKFxuICAgICAgc2NhbGVzLFxuICAgICAgZW5jb2RlcyxcbiAgICAgIG1hcmt0eXBlLFxuICAgICAgZCxcbiAgICAgIG9sZEQsXG4gICAgICBzaWduYWxzLFxuICAgICAgZ2V0UGF0aCxcbiAgICAgIGludGVycG9sYXRlU3R5bGUsXG4gICAgICBhbG9uZ1Rvc1xuICAgICk7XG4gIH1cblxuICAvLyB3aGVuIHRoZSBtYXJrdHlwZSBjaGFuZ2VzIGJldHdlZW4gXCJhcmVhXCIgYW5kIFwibGluZVwiLCBhc3N1bWUgdGhlIGxpbmUgYXMgYXJlYS5cblxuICBpZiAobWFya3R5cGVzLmluaXRpYWwgPT09IFwibGluZVwiICYmIG1hcmt0eXBlcy5maW5hbCA9PT0gXCJhcmVhXCIpIHtcbiAgICBsZXQgYWxvbmdUbyA9IGdldChlbmNvZGVzLCBcImZpbmFsXCIsIFwib3JpZW50XCIsIFwidmFsdWVcIikgPT09IFwiaG9yaXpvbnRhbFwiID8gXCJ5XCI6IFwieFwiO1xuICAgIHJldHVybiBhcmVhTGluZUludGVycG9sYXRvcldpdGhTY2FsZXMuYmluZCh0aGlzKShzY2FsZXMsIGVuY29kZXMsIFwiYXJlYVwiLCBkLCBvbGRELCBzaWduYWxzLCBnZXRQYXRoLCBpbnRlcnBvbGF0ZVN0eWxlLCBhbG9uZ1RvKTtcbiAgfSBlbHNlIHsgLy8gYXJlYSAtPiBsaW5lXG4gICAgbGV0IGFsb25nVG8gPSBnZXQoZW5jb2RlcywgXCJpbml0aWFsXCIsIFwib3JpZW50XCIsIFwidmFsdWVcIikgPT09IFwiaG9yaXpvbnRhbFwiID8gXCJ5XCI6IFwieFwiO1xuICAgIGxldCBsaW5lUGF0aHMgPSBnZXRQYXRoKFxuICAgICAgYXJlYUxpbmVEVG9EYXRhKGQuZmluYWwgfHwgZCksXG4gICAgICBzY2FsZXMuZmluYWwgfHwgc2NhbGVzLFxuICAgICAgZW5jb2Rlcy5maW5hbCB8fCBlbmNvZGVzLFxuICAgICAgc2lnbmFscy5maW5hbCB8fCBzaWduYWxzLFxuICAgICAgXCJsaW5lXCIpO1xuICAgIGxldCBpbnRwID0gYXJlYUxpbmVJbnRlcnBvbGF0b3JXaXRoU2NhbGVzLmJpbmQodGhpcykoc2NhbGVzLCBlbmNvZGVzLCBcImFyZWFcIiwgZCwgb2xkRCwgc2lnbmFscywgZ2V0UGF0aCwgaW50ZXJwb2xhdGVTdHlsZSwgYWxvbmdUbyk7XG4gICAgcmV0dXJuICh0KSA9PiB7XG4gICAgICByZXR1cm4gdCA+PSAxID8gbGluZVBhdGhzIDogaW50cCh0KTtcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGFyZWFMaW5lRFRvRGF0YShkKSB7XG4gIGlmICghZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGQubWFyay5tYXJrdHlwZSAhPT0gXCJncm91cFwiID8gZC5tYXJrLml0ZW1zIDogZC5pdGVtc1swXS5pdGVtcztcbn1cblxuLy8gSW50ZXJwb2xhdGUgcGF0aChkYXRhQSwgc2NhbGVBKSAtPiBwYXRoKGRhdGFCLCBzY2FsZUIpXG5mdW5jdGlvbiBjb21wdXRlTGluZUludGVycG9sYXRvcihcbiAgZGF0YUEsXG4gIGRhdGFCLFxuICBzY2FsZXMsXG4gIGVuY29kZXMsXG4gIHNpZ25hbHMsXG4gIGNvbXB1dGVJZCxcbiAgZ2V0UGF0aFxuKSB7XG4gIGNvbnN0IHQgPSBEYXRlLm5vdygpO1xuICAvLyAxKSBjYWxjdWxhdGUgdHdvIGFuY2hvcnMgYmV0d2VlbiBkYXRhQSBhbmQgZGF0YUJcbiAgY29uc3QgX2VuY29kZXMgPSBlbmNvZGVzLmluaXRpYWwgJiYgZW5jb2Rlcy5maW5hbCA/IGVuY29kZXMgOiB7XG4gICAgaW5pdGlhbDogZW5jb2RlcyxcbiAgICBmaW5hbDogZW5jb2Rlc1xuICB9O1xuICBjb25zdCBjb21wdXRlSWRBID0gZCA9PiBjb21wdXRlSWQoX2VuY29kZXMuaW5pdGlhbCwgZCk7XG4gIGNvbnN0IGNvbXB1dGVJZEIgPSBkID0+IGNvbXB1dGVJZChfZW5jb2Rlcy5maW5hbCwgZCk7XG4gIGNvbnN0IExhID0gZGF0YUEubGVuZ3RoO1xuICBjb25zdCBMYiA9IGRhdGFCLmxlbmd0aDtcbiAgbGV0IGkgPSBkYXRhQi5maW5kSW5kZXgoZCA9PiBjb21wdXRlSWRCKGQpID09PSBjb21wdXRlSWRBKGRhdGFBWzBdKSk7XG4gIGxldCBqID0gZGF0YUIuZmluZEluZGV4KGQgPT4gY29tcHV0ZUlkQihkKSA9PT0gY29tcHV0ZUlkQShkYXRhQVtMYSAtIDFdKSk7XG4gIGxldCBoZWFkO1xuICBsZXQgdGFpbDtcbiAgbGV0IGJvZHk7XG5cbiAgaWYgKGkgPj0gMCkge1xuICAgIGlmIChqID49IDApIHtcbiAgICAgIGlmIChqIDwgaSkge1xuICAgICAgICBib2R5ID0gZ2V0Qm9keShkYXRhQSwgZGF0YUIsIHNjYWxlcywgX2VuY29kZXMsIHNpZ25hbHMsIGdldFBhdGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFpbCA9IGdldFRhaWwoXG4gICAgICAgICAgZGF0YUIuc2xpY2UoMCwgaSArIDEpLFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIHNjYWxlcyxcbiAgICAgICAgICBfZW5jb2RlcyxcbiAgICAgICAgICBzaWduYWxzLFxuICAgICAgICAgIGdldFBhdGhcbiAgICAgICAgKTtcbiAgICAgICAgYm9keSA9IGdldEJvZHkoXG4gICAgICAgICAgZGF0YUEsXG4gICAgICAgICAgZGF0YUIuc2xpY2UoaSwgaiArIDEpLFxuICAgICAgICAgIHNjYWxlcyxcbiAgICAgICAgICBfZW5jb2RlcyxcbiAgICAgICAgICBzaWduYWxzLFxuICAgICAgICAgIGdldFBhdGgsXG4gICAgICAgICAgZmFsc2VcbiAgICAgICAgKTtcbiAgICAgICAgaGVhZCA9IGdldEhlYWQoXG4gICAgICAgICAgZGF0YUIuc2xpY2UoaiksXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgc2NhbGVzLFxuICAgICAgICAgIF9lbmNvZGVzLFxuICAgICAgICAgIHNpZ25hbHMsXG4gICAgICAgICAgZ2V0UGF0aFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICAoaiA9IGRhdGFBLmZpbmRJbmRleChkID0+IGNvbXB1dGVJZEEoZCkgPT09IGNvbXB1dGVJZEIoZGF0YUJbTGIgLSAxXSkpKSA+PSAwXG4gICAgKSB7XG4gICAgICB0YWlsID0gZ2V0VGFpbChcbiAgICAgICAgZGF0YUIuc2xpY2UoMCwgaSArIDEpLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgc2NhbGVzLFxuICAgICAgICBfZW5jb2RlcyxcbiAgICAgICAgc2lnbmFscyxcbiAgICAgICAgZ2V0UGF0aFxuICAgICAgKTtcbiAgICAgIGJvZHkgPSBnZXRCb2R5KFxuICAgICAgICBkYXRhQS5zbGljZSgwLCBqICsgMSksXG4gICAgICAgIGRhdGFCLnNsaWNlKGkpLFxuICAgICAgICBzY2FsZXMsXG4gICAgICAgIF9lbmNvZGVzLFxuICAgICAgICBzaWduYWxzLFxuICAgICAgICBnZXRQYXRoLFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICAgIGhlYWQgPSBnZXRIZWFkKGRhdGFBLnNsaWNlKGopLCB0cnVlLCBzY2FsZXMsIF9lbmNvZGVzLCBzaWduYWxzLCBnZXRQYXRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYm9keSA9IGdldEJvZHkoZGF0YUEsIGRhdGFCLCBzY2FsZXMsIF9lbmNvZGVzLCBzaWduYWxzLCBnZXRQYXRoKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaiA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgKGkgPSBkYXRhQS5maW5kSW5kZXgoZCA9PiBjb21wdXRlSWRBKGQpID09PSBjb21wdXRlSWRCKGRhdGFCWzBdKSkpID49IDBcbiAgICApIHtcbiAgICAgIHRhaWwgPSBnZXRUYWlsKFxuICAgICAgICBkYXRhQS5zbGljZSgwLCBpICsgMSksXG4gICAgICAgIHRydWUsXG4gICAgICAgIHNjYWxlcyxcbiAgICAgICAgX2VuY29kZXMsXG4gICAgICAgIHNpZ25hbHMsXG4gICAgICAgIGdldFBhdGhcbiAgICAgICk7XG4gICAgICBib2R5ID0gZ2V0Qm9keShcbiAgICAgICAgZGF0YUEuc2xpY2UoaSksXG4gICAgICAgIGRhdGFCLnNsaWNlKDAsIGogKyAxKSxcbiAgICAgICAgc2NhbGVzLFxuICAgICAgICBfZW5jb2RlcyxcbiAgICAgICAgc2lnbmFscyxcbiAgICAgICAgZ2V0UGF0aCxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgICBoZWFkID0gZ2V0SGVhZChkYXRhQi5zbGljZShqKSwgZmFsc2UsIHNjYWxlcywgX2VuY29kZXMsIHNpZ25hbHMsIGdldFBhdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBib2R5ID0gZ2V0Qm9keShkYXRhQSwgZGF0YUIsIHNjYWxlcywgX2VuY29kZXMsIHNpZ25hbHMsIGdldFBhdGgpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpID0gZGF0YUEuZmluZEluZGV4KGQgPT4gY29tcHV0ZUlkQShkKSA9PT0gY29tcHV0ZUlkQihkYXRhQlswXSkpO1xuICAgIGogPSBkYXRhQS5maW5kSW5kZXgoZCA9PiBjb21wdXRlSWRBKGQpID09PSBjb21wdXRlSWRCKGRhdGFCW0xiIC0gMV0pKTtcbiAgICBpZiAoaSA+PSAwICYmIGogPj0gMCkge1xuICAgICAgdGFpbCA9IGdldFRhaWwoXG4gICAgICAgIGRhdGFBLnNsaWNlKDAsIGkgKyAxKSxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICAgc2NhbGVzLFxuICAgICAgICBfZW5jb2RlcyxcbiAgICAgICAgc2lnbmFscyxcbiAgICAgICAgZ2V0UGF0aFxuICAgICAgKTtcbiAgICAgIGJvZHkgPSBnZXRCb2R5KFxuICAgICAgICBkYXRhQS5zbGljZShpLCBqICsgMSksXG4gICAgICAgIGRhdGFCLFxuICAgICAgICBzY2FsZXMsXG4gICAgICAgIF9lbmNvZGVzLFxuICAgICAgICBzaWduYWxzLFxuICAgICAgICBnZXRQYXRoLFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICAgIGhlYWQgPSBnZXRIZWFkKGRhdGFBLnNsaWNlKGopLCB0cnVlLCBzY2FsZXMsIF9lbmNvZGVzLCBzaWduYWxzLCBnZXRQYXRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYm9keSA9IGdldEJvZHkoZGF0YUEsIGRhdGFCLCBzY2FsZXMsIF9lbmNvZGVzLCBzaWduYWxzLCBnZXRQYXRoKTtcbiAgICB9XG4gIH1cblxuICBpZiAoaGVhZCAmJiB0YWlsICYmIGJvZHkpIHtcbiAgICByZXR1cm4gdCA9PiB7XG4gICAgICBpZiAodCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gZ2V0UGF0aChkYXRhQiwgc2NhbGVzLmZpbmFsLCBfZW5jb2Rlcy5maW5hbCwgc2lnbmFscy5maW5hbCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGFpbCh0KSArIGJvZHkodCkgKyBoZWFkKHQpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIHQgPT4ge1xuICAgIGlmICh0ID09PSAxKSB7XG4gICAgICByZXR1cm4gZ2V0UGF0aChkYXRhQiwgc2NhbGVzLmZpbmFsLCBfZW5jb2Rlcy5maW5hbCwgc2lnbmFscy5maW5hbCk7XG4gICAgfVxuICAgIHJldHVybiBib2R5KHQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRIZWFkKGRhdGEsIGlzU2hyaW5rLCBzY2FsZXMsIGVuY29kZXMsIHNpZ25hbHMsIGdldFBhdGgpIHtcbiAgY29uc3QgTCA9IGRhdGEubGVuZ3RoO1xuICBpZiAoTCA8PSAxKSB7XG4gICAgcmV0dXJuIHQgPT4gXCJcIjtcbiAgfVxuXG4gIGNvbnN0IGludGVycG9sYXRvcnMgPSBbXCJpbml0aWFsXCIsIFwiZmluYWxcIl0ubWFwKHdoaWNoID0+IHtcbiAgICBjb25zdCBwaGFzZXMgPSBbXTtcbiAgICBjb25zdCBzY2FsZSA9IHNjYWxlc1t3aGljaF07XG4gICAgY29uc3QgZW5jb2RlID0gZW5jb2Rlc1t3aGljaF07XG4gICAgY29uc3Qgc2lnbmFsID0gc2lnbmFsc1t3aGljaF0gfHwgc2lnbmFscztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBMIC0gMjsgaSsrKSB7XG4gICAgICBjb25zdCBmcm9tUGF0aCA9IGdldFBhdGgoXG4gICAgICAgIGRhdGEuc2xpY2UoMCwgaSArIDEpLmNvbmNhdChkYXRhLnNsaWNlKGksIGkgKyAxKSksXG4gICAgICAgIHNjYWxlLFxuICAgICAgICBlbmNvZGUsXG4gICAgICAgIHNpZ25hbFxuICAgICAgKS5yZXBsYWNlKC9eTS9nLCBcIkxcIik7XG4gICAgICBjb25zdCB0b1BhdGggPSBnZXRQYXRoKFxuICAgICAgICBkYXRhLnNsaWNlKDAsIGkgKyAyKSxcbiAgICAgICAgc2NhbGUsXG4gICAgICAgIGVuY29kZSxcbiAgICAgICAgc2lnbmFsXG4gICAgICApLnJlcGxhY2UoL15NL2csIFwiTFwiKTtcbiAgICAgIHBoYXNlcy5wdXNoKGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgcmV0dXJuIGQzLmludGVycG9sYXRlU3RyaW5nKGZyb21QYXRoLCB0b1BhdGgpKHQpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICBpZiAoaXNTaHJpbmspIHtcbiAgICAgICAgdCA9IDEgLSB0O1xuICAgICAgfVxuICAgICAgaWYgKHQgPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGdldFBhdGgoZGF0YSwgc2NhbGUsIGVuY29kZSwgc2lnbmFsKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBoYXNlID0gTWF0aC5mbG9vcih0ICogKEwgLSAxKSk7XG5cbiAgICAgIHJldHVybiBwaGFzZXNbcGhhc2VdKHQgKiAoTCAtIDEpIC0gcGhhc2UpO1xuICAgIH07XG4gIH0pO1xuXG4gIHJldHVybiB0ID0+IHtcbiAgICByZXR1cm4gZDMuaW50ZXJwb2xhdGVTdHJpbmcoaW50ZXJwb2xhdG9yc1swXSh0KSwgaW50ZXJwb2xhdG9yc1sxXSh0KSkodCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFRhaWwoZGF0YSwgaXNTaHJpbmssIHNjYWxlcywgZW5jb2Rlcywgc2lnbmFscywgZ2V0UGF0aCkge1xuICBjb25zdCBMID0gZGF0YS5sZW5ndGg7XG4gIGlmIChMIDw9IDEpIHtcbiAgICByZXR1cm4gdCA9PiBcIlwiO1xuICB9XG4gIGNvbnN0IGludGVycG9sYXRvcnMgPSBbXCJpbml0aWFsXCIsIFwiZmluYWxcIl0ubWFwKHdoaWNoID0+IHtcbiAgICBjb25zdCBwaGFzZXMgPSBbXTtcbiAgICBjb25zdCBzY2FsZSA9IHNjYWxlc1t3aGljaF07XG4gICAgY29uc3QgZW5jb2RlID0gZW5jb2Rlc1t3aGljaF07XG4gICAgY29uc3Qgc2lnbmFsID0gc2lnbmFsc1t3aGljaF0gfHwgc2lnbmFscztcbiAgICBmb3IgKGxldCBpID0gTCAtIDI7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBjb25zdCBmcm9tUGF0aCA9IGdldFBhdGgoXG4gICAgICAgIGRhdGEuc2xpY2UoaSArIDEsIGkgKyAyKS5jb25jYXQoZGF0YS5zbGljZShpICsgMSkpLFxuICAgICAgICBzY2FsZSxcbiAgICAgICAgZW5jb2RlLFxuICAgICAgICBzaWduYWxcbiAgICAgICkucmVwbGFjZSgvWiQvZywgXCJcIik7XG4gICAgICBjb25zdCB0b1BhdGggPSBnZXRQYXRoKGRhdGEuc2xpY2UoaSksIHNjYWxlLCBlbmNvZGUsIHNpZ25hbCkucmVwbGFjZShcbiAgICAgICAgL1okL2csXG4gICAgICAgIFwiXCJcbiAgICAgICk7XG5cbiAgICAgIHBoYXNlcy5wdXNoKGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgcmV0dXJuIGQzLmludGVycG9sYXRlU3RyaW5nKGZyb21QYXRoLCB0b1BhdGgpKHQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIGlmIChpc1Nocmluaykge1xuICAgICAgICB0ID0gMSAtIHQ7XG4gICAgICB9XG4gICAgICBpZiAodCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gZ2V0UGF0aChkYXRhLCBzY2FsZSwgZW5jb2RlLCBzaWduYWwpO1xuICAgICAgfVxuICAgICAgY29uc3QgcGhhc2UgPSBNYXRoLmZsb29yKHQgKiAoTCAtIDEpKTtcblxuICAgICAgcmV0dXJuIHBoYXNlc1twaGFzZV0odCAqIChMIC0gMSkgLSBwaGFzZSk7XG4gICAgfTtcbiAgfSk7XG4gIHJldHVybiB0ID0+IHtcbiAgICByZXR1cm4gZDMuaW50ZXJwb2xhdGVTdHJpbmcoaW50ZXJwb2xhdG9yc1swXSh0KSwgaW50ZXJwb2xhdG9yc1sxXSh0KSkodCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldEJvZHkoXG4gIGZyb21EYXRhLFxuICB0b0RhdGEsXG4gIHNjYWxlcyxcbiAgZW5jb2RlcyxcbiAgc2lnbmFscyxcbiAgZ2V0UGF0aCxcbiAgdG9CZUFzc2VtYmxlZFxuKSB7XG4gIGNvbnN0IHBhdGhQYWlycyA9IFtcImluaXRpYWxcIiwgXCJmaW5hbFwiXS5tYXAod2hpY2ggPT4ge1xuICAgIGNvbnN0IHNjYWxlID0gc2NhbGVzW3doaWNoXTtcbiAgICBjb25zdCBlbmNvZGUgPSBlbmNvZGVzW3doaWNoXTtcbiAgICBjb25zdCBzaWduYWwgPSBzaWduYWxzW3doaWNoXSB8fCBzaWduYWxzO1xuICAgIGxldCBmcm9tUGF0aCA9IGdldFBhdGgoZnJvbURhdGEsIHNjYWxlLCBlbmNvZGUsIHNpZ25hbCk7XG4gICAgbGV0IHRvUGF0aCA9IGdldFBhdGgodG9EYXRhLCBzY2FsZSwgZW5jb2RlLCBzaWduYWwpO1xuXG4gICAgaWYgKHRvQmVBc3NlbWJsZWQpIHtcbiAgICAgIGZyb21QYXRoID0gZnJvbVBhdGgucmVwbGFjZSgvXk0vZywgXCJMXCIpLnJlcGxhY2UoL1okL2csIFwiXCIpO1xuICAgICAgdG9QYXRoID0gdG9QYXRoLnJlcGxhY2UoL15NL2csIFwiTFwiKS5yZXBsYWNlKC9aJC9nLCBcIlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIFtmcm9tUGF0aCwgdG9QYXRoXTtcbiAgfSk7XG5cbiAgaWYgKFxuICAgIGlzVmFsaWRQYXRoKHBhdGhQYWlyc1swXVswXSkgJiZcbiAgICBpc1ZhbGlkUGF0aChwYXRoUGFpcnNbMF1bMV0pICYmXG4gICAgaXNWYWxpZFBhdGgocGF0aFBhaXJzWzFdWzBdKSAmJlxuICAgIGlzVmFsaWRQYXRoKHBhdGhQYWlyc1sxXVswXSlcbiAgKSB7XG4gICAgY29uc3QgaW50ZXJwb2xhdG9yMSA9IGludGVycG9sYXRlUGF0aChwYXRoUGFpcnNbMF1bMF0sIHBhdGhQYWlyc1swXVsxXSk7XG4gICAgY29uc3QgaW50ZXJwb2xhdG9yMiA9IGludGVycG9sYXRlUGF0aChwYXRoUGFpcnNbMV1bMF0sIHBhdGhQYWlyc1sxXVsxXSk7XG4gICAgcmV0dXJuIHQgPT4ge1xuICAgICAgcmV0dXJuIGQzLmludGVycG9sYXRlU3RyaW5nKGludGVycG9sYXRvcjEodCksIGludGVycG9sYXRvcjIodCkpKHQpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGQzLmludGVycG9sYXRlU3RyaW5nKHBhdGhQYWlyc1swXVswXSwgcGF0aFBhaXJzWzFdWzFdKTtcbn1cbmZ1bmN0aW9uIGlzVmFsaWRQYXRoKHApIHtcbiAgcmV0dXJuIHAuaW5kZXhPZihcIk5hTlwiKSA8IDA7XG59XG5cbmV4cG9ydCB7XG4gIGFyZWFMaW5lSW50ZXJwb2xhdG9yV2l0aFNjYWxlcyxcbiAgYXJlYUxpbmVJbnRlcnBvbGF0b3IsXG4gIHN5bWJvbEludGVycG9sYXRvcixcbiAgYXJlYUxpbmVEVG9EYXRhLFxuICByZWN0SW50ZXJwb2xhdG9yXG59O1xuIiwiLyogZXNsaW50LWRpc2FibGUgcHJlZmVyLWRlc3RydWN0dXJpbmcgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdXNlLWJlZm9yZS1kZWZpbmUgKi9cbi8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuaW1wb3J0ICogYXMgdmVnYSBmcm9tIFwidmVnYVwiO1xuaW1wb3J0ICogYXMgdmVnYUV4cHJlc3Npb24gZnJvbSBcInZlZ2EtZXhwcmVzc2lvblwiO1xuaW1wb3J0ICogYXMgZDMgZnJvbSBcImQzXCI7XG5pbXBvcnQgeyBwcm9wTWFwLCBpc0xpbmVhck1hcmt0eXBlIH0gZnJvbSBcIi4vdXRpbFwiO1xuaW1wb3J0IHsgdGV4dE9mZnNldCwgZ2V0U3R5bGUsIHRyYW5zZm9ybUl0ZW0gfSBmcm9tIFwiLi92ZWdhLXJlbmRlci11dGlsXCI7XG5pbXBvcnQgeyBjb3B5LCBjb3B5MiwgaXNOdW1iZXIsIGdldCB9IGZyb20gXCIuLi91dGlsL3V0aWxcIjtcbmltcG9ydCB7XG4gIGFyZWFMaW5lSW50ZXJwb2xhdG9yLFxuICBzeW1ib2xJbnRlcnBvbGF0b3IsXG4gIGFyZWFMaW5lRFRvRGF0YSxcbiAgcmVjdEludGVycG9sYXRvclxufSBmcm9tIFwiLi9tYXJrL2ludGVycG9sYXRlSGVscGVyXCI7XG5pbXBvcnQgeyBCUl9QUk9QX0RFRkFVTFQgfSBmcm9tIFwiLi4vZGVmYXVsdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZmV0Y2hBdHRyaWJ1dGVzKGQzU2VsZWN0aW9uLCBwcm9wcywgc2NhbGVzLCBzaWduYWwsIGVuY29kZSwgcHJldkRhdGEpIHtcbiAgcHJvcHMuZm9yRWFjaChwcm9wID0+IHtcbiAgICBwcm9wTWFwKHByb3ApLmZvckVhY2gocCA9PiB7XG4gICAgICBpZiAocC50eXBlID09PSBcImF0dHJUd2VlblwiKSB7XG4gICAgICAgIGlmIChkM1NlbGVjdGlvbi5hdHRyVHdlZW4pIHtcbiAgICAgICAgICBkM1NlbGVjdGlvbi5hdHRyVHdlZW4oZ2V0U3R5bGUocC52YWwpLCBmdW5jdGlvbihkKSB7XG4gICAgICAgICAgICBjb25zdCBvbGREID0gcHJldkRhdGEgPyBwcmV2RGF0YS5nZXQodGhpcykgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICByZXR1cm4gZ2V0UHJvcFZhbC5iaW5kKHRoaXMpKHAsIGVuY29kZSwgc2NhbGVzLCBzaWduYWwsIGQsIG9sZEQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHRlbXBQID0gT2JqZWN0LmFzc2lnbih7fSwgcCwgeyB0eXBlOiBcImF0dHJcIiB9KTtcbiAgICAgICAgICBkM1NlbGVjdGlvbi5hdHRyKHRlbXBQLnZhbCwgZnVuY3Rpb24oZCkge1xuICAgICAgICAgICAgY29uc3Qgb2xkRCA9IHByZXZEYXRhID8gcHJldkRhdGEuZ2V0KHRoaXMpIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmV0dXJuIGdldFByb3BWYWwuYmluZCh0aGlzKShcbiAgICAgICAgICAgICAgdGVtcFAsXG4gICAgICAgICAgICAgIGVuY29kZSxcbiAgICAgICAgICAgICAgc2NhbGVzLFxuICAgICAgICAgICAgICBzaWduYWwsXG4gICAgICAgICAgICAgIGQsXG4gICAgICAgICAgICAgIG9sZERcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocC50eXBlID09PSBcImF0dHJcIikge1xuICAgICAgICBkM1NlbGVjdGlvbi5hdHRyKGdldFN0eWxlKHAudmFsKSwgZnVuY3Rpb24oZCkge1xuICAgICAgICAgIGNvbnN0IG9sZEQgPSBwcmV2RGF0YSA/IHByZXZEYXRhLmdldCh0aGlzKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICByZXR1cm4gZ2V0UHJvcFZhbC5iaW5kKHRoaXMpKHAsIGVuY29kZSwgc2NhbGVzLCBzaWduYWwsIGQsIG9sZEQpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAocC50eXBlID09PSBcInRleHRcIikge1xuICAgICAgICBkM1NlbGVjdGlvbi50ZXh0KGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICBjb25zdCBvbGREID0gcHJldkRhdGEgPyBwcmV2RGF0YS5nZXQodGhpcykgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgcmV0dXJuIGdldFByb3BWYWwuYmluZCh0aGlzKShwLCBlbmNvZGUsIHNjYWxlcywgc2lnbmFsLCBkLCBvbGREKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHAudHlwZSA9PT0gXCJzdHlsZVwiKSB7XG4gICAgICAgIGlmIChwLmFzVHdlZW4pIHtcbiAgICAgICAgICBkM1NlbGVjdGlvbi5zdHlsZVR3ZWVuKGdldFN0eWxlKHAudmFsKSwgZnVuY3Rpb24oZCkge1xuICAgICAgICAgICAgY29uc3Qgb2xkRCA9IHByZXZEYXRhID8gcHJldkRhdGEuZ2V0KHRoaXMpIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmV0dXJuIGdldFByb3BWYWwuYmluZCh0aGlzKShwLCBlbmNvZGUsIHNjYWxlcywgc2lnbmFsLCBkLCBvbGREKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkM1NlbGVjdGlvbi5zdHlsZShnZXRTdHlsZShwLnZhbCksIGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICAgIGNvbnN0IG9sZEQgPSBwcmV2RGF0YSA/IHByZXZEYXRhLmdldCh0aGlzKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJldHVybiBnZXRQcm9wVmFsLmJpbmQodGhpcykocCwgZW5jb2RlLCBzY2FsZXMsIHNpZ25hbCwgZCwgb2xkRCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm9wVmFsKHByb3BJbmZvLCBlbmNvZGVzLCBzY2FsZXMsIHNpZ25hbHMsIGQsIG9sZEQpIHtcbiAgY29uc3Qgc2lnbmFsID0gc2lnbmFscy5maW5hbCB8fCBzaWduYWxzO1xuICBjb25zdCBlbmNvZGUgPSBlbmNvZGVzLmZpbmFsIHx8IGVuY29kZXM7XG5cbiAgaWYgKHByb3BJbmZvLmVsbVR5cGUgPT09IFwidGV4dFwiKSB7XG4gICAgaWYgKHByb3BJbmZvLnZhbCA9PT0gXCJ0cmFuc2Zvcm1cIikge1xuICAgICAgLy8gZ2V0IHRyYW5zZm9ybVxuICAgICAgY29uc3QgdHJmRCA9IHRyYW5zZm9ybUQuYmluZCh0aGlzKShlbmNvZGUsIHNjYWxlcywgc2lnbmFsLCBkLCBmYWxzZSk7XG4gICAgICBjb25zdCBkeCA9IGRlY29kZUVuY29kZS5iaW5kKHRoaXMpKFwiZHhcIiwgZW5jb2RlLCBzY2FsZXMsIHNpZ25hbCwgZCk7XG4gICAgICBjb25zdCBkeSA9IGRlY29kZUVuY29kZS5iaW5kKHRoaXMpKFwiZHlcIiwgZW5jb2RlLCBzY2FsZXMsIHNpZ25hbCwgZCk7XG4gICAgICB0cmZELnggPSAodHJmRC54IHx8IDApICsgKGR4IHx8IDApO1xuICAgICAgdHJmRC55ID0gKHRyZkQueSB8fCAwKSArIChkeSB8fCAwKTtcbiAgICAgIGNvbnN0IGJhc2VsaW5lID0gZGVjb2RlRW5jb2RlLmJpbmQodGhpcykoXG4gICAgICAgIFwiYmFzZWxpbmVcIixcbiAgICAgICAgZW5jb2RlLFxuICAgICAgICBzY2FsZXMsXG4gICAgICAgIHNpZ25hbCxcbiAgICAgICAgZFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGZvbnRTaXplID0gZGVjb2RlRW5jb2RlLmJpbmQodGhpcykoXG4gICAgICAgIFwiZm9udFNpemVcIixcbiAgICAgICAgZW5jb2RlLFxuICAgICAgICBzY2FsZXMsXG4gICAgICAgIHNpZ25hbCxcbiAgICAgICAgZFxuICAgICAgKTtcbiAgICAgIGlmIChvbGREICYmIG9sZEQuYWxpZ24gIT09IGQuYWxpZ24pIHtcbiAgICAgICAgY29uc3QgYWxpZ25GYWN0b3IgPSB7IHJpZ2h0OiAtMC41LCBjZW50ZXI6IDAsIGxlZnQ6IDAuNSB9O1xuICAgICAgICB0cmZELnggKz1cbiAgICAgICAgICB2ZWdhLnRleHRNZXRyaWNzLndpZHRoKGQsZC50ZXh0KSAqXG4gICAgICAgICAgKGFsaWduRmFjdG9yW2QuYWxpZ25dIC0gYWxpZ25GYWN0b3Jbb2xkRC5hbGlnbl0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYCR7dHJhbnNmb3JtSXRlbSh0cmZEKX0gJHt0cmFuc2Zvcm1JdGVtKHtcbiAgICAgICAgeTogdGV4dE9mZnNldChPYmplY3QuYXNzaWduKHsgYmFzZWxpbmUsIGZvbnRTaXplIH0sIGQpKVxuICAgICAgfSl9YDtcbiAgICB9XG4gICAgaWYgKHByb3BJbmZvLnZhbCA9PT0gXCJ0ZXh0XCIpIHtcbiAgICAgIHJldHVybiBlbmNvZGUudGV4dFxuICAgICAgICA/IGRlY29kZUVuY29kZS5iaW5kKHRoaXMpKFwidGV4dFwiLCBlbmNvZGUsIHNjYWxlcywgc2lnbmFsLCBkKVxuICAgICAgICA6IGQudGV4dDtcbiAgICB9XG4gIH0gZWxzZSBpZiAocHJvcEluZm8uZWxtVHlwZSA9PT0gXCJ0aXRsZVwiKSB7XG4gICAgaWYgKHByb3BJbmZvLnZhbCA9PT0gXCJ0cmFuc2Zvcm1cIikge1xuICAgICAgLy8gZ2V0IHRyYW5zZm9ybVxuICAgICAgY29uc3QgdHJmRCA9IHRyYW5zZm9ybUQuYmluZCh0aGlzKShlbmNvZGUsIHNjYWxlcywgc2lnbmFsLCBkKTtcbiAgICAgIC8vIGxldCB0cmZEID0gdHJhbnNmb3JtRC5iaW5kKHRoaXMpKGVuY29kZSwgc2NhbGVzLCBzaWduYWwsIGQsIGZhbHNlKTtcbiAgICAgIGNvbnN0IGR4ID0gZGVjb2RlRW5jb2RlLmJpbmQodGhpcykoXCJkeFwiLCBlbmNvZGUsIHNjYWxlcywgc2lnbmFsLCBkKTtcbiAgICAgIGNvbnN0IGR5ID0gZGVjb2RlRW5jb2RlLmJpbmQodGhpcykoXCJkeVwiLCBlbmNvZGUsIHNjYWxlcywgc2lnbmFsLCBkKTtcbiAgICAgIHRyZkQueCA9ICh0cmZELnggfHwgMCkgKyAoZHggfHwgMCk7XG4gICAgICB0cmZELnkgPSAodHJmRC55IHx8IDApICsgKGR5IHx8IDApO1xuICAgICAgY29uc3QgYmFzZWxpbmUgPSBkZWNvZGVFbmNvZGUuYmluZCh0aGlzKShcbiAgICAgICAgXCJiYXNlbGluZVwiLFxuICAgICAgICBlbmNvZGUsXG4gICAgICAgIHNjYWxlcyxcbiAgICAgICAgc2lnbmFsLFxuICAgICAgICBkXG4gICAgICApO1xuICAgICAgY29uc3QgZm9udFNpemUgPSBkZWNvZGVFbmNvZGUuYmluZCh0aGlzKShcbiAgICAgICAgXCJmb250U2l6ZVwiLFxuICAgICAgICBlbmNvZGUsXG4gICAgICAgIHNjYWxlcyxcbiAgICAgICAgc2lnbmFsLFxuICAgICAgICBkXG4gICAgICApO1xuICAgICAgcmV0dXJuIGAke3RyYW5zZm9ybUl0ZW0odHJmRCl9ICR7dHJhbnNmb3JtSXRlbSh7XG4gICAgICAgIHk6IHRleHRPZmZzZXQoT2JqZWN0LmFzc2lnbih7IGJhc2VsaW5lLCBmb250U2l6ZSB9LCBkKSlcbiAgICAgIH0pfWA7XG4gICAgfVxuICAgIGlmIChwcm9wSW5mby52YWwgPT09IFwidGV4dFwiKSB7XG4gICAgICByZXR1cm4gZW5jb2RlLnRleHRcbiAgICAgICAgPyBkZWNvZGVFbmNvZGUuYmluZCh0aGlzKShcInRleHRcIiwgZW5jb2RlLCBzY2FsZXMsIHNpZ25hbCwgZClcbiAgICAgICAgOiBkLnRleHQ7XG4gICAgfVxuICB9IGVsc2UgaWYgKFxuICAgIHByb3BJbmZvLmVsbVR5cGUgPT09IFwidGlja1wiIHx8XG4gICAgcHJvcEluZm8uZWxtVHlwZSA9PT0gXCJncmlkXCIgfHxcbiAgICBwcm9wSW5mby5lbG1UeXBlID09PSBcImRvbWFpblwiXG4gICkge1xuICAgIC8vIGhvdGZpeFxuICAgIGlmIChwcm9wSW5mby52YWwgPT09IFwidHJhbnNmb3JtXCIpIHtcbiAgICAgIC8vIGdldCB0cmFuc2Zvcm1cbiAgICAgIGxldCB0cmZEID0gdHJhbnNmb3JtRC5iaW5kKHRoaXMpKGVuY29kZSwgc2NhbGVzLCBzaWduYWwsIGQsIGZhbHNlKTtcbiAgICAgIHRyZkQgPSBPYmplY3Qua2V5cyh0cmZEKS5sZW5ndGggPT09IDAgPyBkIDogdHJmRDtcbiAgICAgIGNvbnN0IHgyID0gZGVjb2RlRW5jb2RlLmJpbmQodGhpcykoXCJ4MlwiLCBlbmNvZGUsIHNjYWxlcywgc2lnbmFsLCBkKTtcbiAgICAgIGNvbnN0IHkyID0gZGVjb2RlRW5jb2RlLmJpbmQodGhpcykoXCJ5MlwiLCBlbmNvZGUsIHNjYWxlcywgc2lnbmFsLCBkKTtcbiAgICAgIGlmIChvbGREKSB7XG4gICAgICAgIGlmICh4MiA9PT0gMCAmJiAob2xkRC55MiAtIG9sZEQueSkgKiB5MiA8IDApIHtcbiAgICAgICAgICB0cmZELnkgKz0geTI7XG4gICAgICAgIH0gZWxzZSBpZiAoeTIgPT09IDAgJiYgKG9sZEQueDIgLSBvbGRELngpICogeDIgPCAwKSB7XG4gICAgICAgICAgdHJmRC54ICs9IHgyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJhbnNmb3JtSXRlbShPYmplY3Qua2V5cyh0cmZEKS5sZW5ndGggPT09IDAgPyBkIDogdHJmRCk7XG4gICAgfVxuICAgIGlmIChwcm9wSW5mby52YWwgPT09IFwieDJcIikge1xuICAgICAgbGV0IHgyID0gZGVjb2RlRW5jb2RlLmJpbmQodGhpcykoXCJ4MlwiLCBlbmNvZGUsIHNjYWxlcywgc2lnbmFsLCBkKTtcbiAgICAgIGlmIChpc05hTih4MikpIHtcbiAgICAgICAgcmV0dXJuIGQueDIgLSBkLng7XG4gICAgICB9XG4gICAgICBpZiAob2xkRCkge1xuICAgICAgICBpZiAoKG9sZEQueDIgLSBvbGRELngpICogeDIgPCAwKSB7XG4gICAgICAgICAgeDIgPSAteDI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBpc05hTih4MikgPyBkLngyIC0gZC54IDogeDI7XG4gICAgfVxuICAgIGlmIChwcm9wSW5mby52YWwgPT09IFwieTJcIikge1xuICAgICAgbGV0IHkyID0gZGVjb2RlRW5jb2RlLmJpbmQodGhpcykoXCJ5MlwiLCBlbmNvZGUsIHNjYWxlcywgc2lnbmFsLCBkKTtcbiAgICAgIGlmIChpc05hTih5MikpIHtcbiAgICAgICAgcmV0dXJuIGQueTIgLSBkLnk7XG4gICAgICB9XG4gICAgICBpZiAob2xkRCkge1xuICAgICAgICBpZiAoKG9sZEQueTIgLSBvbGRELnkpICogeTIgPCAwKSB7XG4gICAgICAgICAgeTIgPSAteTI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB5MjtcbiAgICB9XG4gIH0gZWxzZSBpZiAocHJvcEluZm8uZWxtVHlwZSA9PT0gXCJyZWN0XCIpIHtcbiAgICBpZiAocHJvcEluZm8udmFsID09PSBcInRyYW5zZm9ybVwiKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gICAgaWYgKHByb3BJbmZvLnZhbCA9PT0gXCJkXCIpIHtcbiAgICAgIGlmIChwcm9wSW5mby50eXBlID09PSBcImF0dHJUd2VlblwiKSB7XG4gICAgICAgIHJldHVybiByZWN0SW50ZXJwb2xhdG9yLmJpbmQodGhpcykoXG4gICAgICAgICAgc2NhbGVzLFxuICAgICAgICAgIGVuY29kZXMsXG4gICAgICAgICAgc2lnbmFscyxcbiAgICAgICAgICBkLFxuICAgICAgICAgIG9sZEQsXG4gICAgICAgICAgZ2V0UmVjdFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGdldFJlY3QoZCwgc2NhbGVzLCBlbmNvZGVzLCBzaWduYWwpLnBhdGg7XG4gICAgfVxuICB9IGVsc2UgaWYgKHByb3BJbmZvLmVsbVR5cGUgPT09IFwic3ltYm9sXCIpIHtcbiAgICBpZiAocHJvcEluZm8udmFsID09PSBcImRcIikge1xuICAgICAgaWYgKHByb3BJbmZvLnR5cGUgPT09IFwiYXR0clR3ZWVuXCIpIHtcbiAgICAgICAgcmV0dXJuIHN5bWJvbEludGVycG9sYXRvci5iaW5kKHRoaXMpKFxuICAgICAgICAgIHNjYWxlcyxcbiAgICAgICAgICBlbmNvZGVzLFxuICAgICAgICAgIHNpZ25hbHMsXG4gICAgICAgICAgZCxcbiAgICAgICAgICBvbGRELFxuICAgICAgICAgIGdldFNoYXBlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZ2V0U2hhcGUoZCwgc2NhbGVzLCBlbmNvZGUsIHNpZ25hbCkucGF0aDtcbiAgICB9XG4gICAgaWYgKHByb3BJbmZvLnZhbCA9PT0gXCJ0cmFuc2Zvcm1cIikge1xuICAgICAgY29uc3QgdHJmRCA9IHRyYW5zZm9ybUQuYmluZCh0aGlzKShlbmNvZGUsIHNjYWxlcywgc2lnbmFsLCBkLCBmYWxzZSk7XG4gICAgICByZXR1cm4gdHJhbnNmb3JtSXRlbShPYmplY3Qua2V5cyh0cmZEKS5sZW5ndGggPT09IDAgPyBkIDogdHJmRCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHByb3BJbmZvLmVsbVR5cGUgPT09IFwiZ3JhZGllbnRcIikge1xuICAgIGlmIChwcm9wSW5mby52YWwgPT09IFwiZFwiKSB7XG4gICAgICBjb25zdCBuZXdEID0gT2JqZWN0LmtleXMoZW5jb2RlLnByaW1hcnkgfHwgZW5jb2RlKVxuICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgIGtleSA9PlxuICAgICAgICAgICAgW1wieFwiLCBcIngyXCIsIFwieGNcIiwgXCJ3aWR0aFwiLCBcInlcIiwgXCJ5MlwiLCBcInljXCIsIFwiaGVpZ2h0XCJdLmluZGV4T2YoXG4gICAgICAgICAgICAgIGtleVxuICAgICAgICAgICAgKSA+PSAwXG4gICAgICAgIClcbiAgICAgICAgLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiB7XG4gICAgICAgICAgYWNjW2N1cnJdID0gZGVjb2RlRW5jb2RlLmJpbmQodGhpcykoY3VyciwgZW5jb2RlLCBzY2FsZXMsIHNpZ25hbCwgZCk7XG4gICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwge30pO1xuICAgICAgbGV0IHg7IGxldCB5OyBsZXQgd2lkdGg7IGxldCBoZWlnaHQ7XG4gICAgICBpZiAoaXNOYU4obmV3RC54KSkge1xuICAgICAgICB4ID0gaXNOYU4obmV3RC54YyAtIG5ld0Qud2lkdGggLyAyKVxuICAgICAgICAgID8gbmV3RC54MlxuICAgICAgICAgIDogbmV3RC54YyAtIG5ld0Qud2lkdGggLyAyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgeCA9IG5ld0QueDtcbiAgICAgIH1cbiAgICAgIGlmIChpc05hTihuZXdELndpZHRoKSkge1xuICAgICAgICB3aWR0aCA9IGlzTmFOKG5ld0QueDIgLSBuZXdELngpID8gdW5kZWZpbmVkIDogbmV3RC54MiAtIG5ld0QueDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpZHRoID0gbmV3RC53aWR0aDtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc05hTihuZXdELnkyKSAmJiAhaXNOYU4obmV3RC55KSkge1xuICAgICAgICB5ID0gTWF0aC5taW4obmV3RC55MiwgbmV3RC55KTtcbiAgICAgICAgaGVpZ2h0ID0gTWF0aC5hYnMobmV3RC55MiAtIG5ld0QueSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB5ID0gaXNOYU4obmV3RC55KSA/IG5ld0QueTIgOiBuZXdELnk7XG4gICAgICAgIGhlaWdodCA9IG5ld0QuaGVpZ2h0O1xuICAgICAgfVxuXG4gICAgICAvLyAgaGVpZ2h0ID0gaXNOYU4obmV3RC5oZWlnaHQpID8gKCBpc05hTihuZXdELnkyIC0gbmV3RC55KSA/IHVuZGVmaW5lZCA6IChuZXdELnkyIC0gbmV3RC55KSkgOiBuZXdELmhlaWdodDtcbiAgICAgIC8vIHJldHVybiB2ZWdhLnBhdGhSZWN0YW5nbGUoKS54KHgpLnkoeSkud2lkdGgod2lkdGgpLmhlaWdodChoZWlnaHQpKCk7XG5cbiAgICAgIHJldHVybiB2ZWdhXG4gICAgICAgIC5wYXRoUmVjdGFuZ2xlKClcbiAgICAgICAgLngoeClcbiAgICAgICAgLnkoeSlcbiAgICAgICAgLndpZHRoKHdpZHRoKVxuICAgICAgICAuaGVpZ2h0KGhlaWdodCkoKTtcbiAgICB9XG4gICAgaWYgKHByb3BJbmZvLnZhbCA9PT0gXCJ0cmFuc2Zvcm1cIikge1xuICAgICAgY29uc3QgdHJmRCA9IHRyYW5zZm9ybUQuYmluZCh0aGlzKShlbmNvZGUsIHNjYWxlcywgc2lnbmFsLCBkLCBmYWxzZSk7XG4gICAgICByZXR1cm4gdHJhbnNmb3JtSXRlbShPYmplY3Qua2V5cyh0cmZEKS5sZW5ndGggPT09IDAgPyBkIDogdHJmRCk7XG4gICAgfVxuICAgIGlmIChwcm9wSW5mby52YWwgPT09IFwiZmlsbFwiKSB7XG4gICAgICBpZiAocHJvcEluZm8uZGVmcyAmJiAhcHJvcEluZm8uaXNVcGRhdGUpIHtcbiAgICAgICAgY29uc3QgdXJsID0gcHJvcEluZm8uZGVmcyhkMy5zZWxlY3QodGhpcy5jbG9zZXN0KFwic3ZnXCIpKSwgZCk7XG4gICAgICAgIHJldHVybiBgdXJsKFwiJHt1cmx9XCIpYDtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAocHJvcEluZm8uZWxtVHlwZSA9PT0gXCJydWxlXCIpIHtcbiAgICBpZiAocHJvcEluZm8udmFsID09PSBcInRyYW5zZm9ybVwiKSB7XG4gICAgICAvLyBnZXQgdHJhbnNmb3JtXG4gICAgICBjb25zdCB0cmZEID0gdHJhbnNmb3JtRC5iaW5kKHRoaXMpKGVuY29kZSwgc2NhbGVzLCBzaWduYWwsIGQsIGZhbHNlKTtcbiAgICAgIHJldHVybiB0cmFuc2Zvcm1JdGVtKE9iamVjdC5rZXlzKHRyZkQpLmxlbmd0aCA9PT0gMCA/IGQgOiB0cmZEKTtcbiAgICB9XG4gICAgaWYgKHByb3BJbmZvLnZhbCA9PT0gXCJ4MlwiKSB7XG4gICAgICBjb25zdCB4MiA9IGRlY29kZUVuY29kZS5iaW5kKHRoaXMpKFwieDJcIiwgZW5jb2RlLCBzY2FsZXMsIHNpZ25hbCwgZCk7XG4gICAgICBjb25zdCB4ID0gZGVjb2RlRW5jb2RlLmJpbmQodGhpcykoXCJ4XCIsIGVuY29kZSwgc2NhbGVzLCBzaWduYWwsIGQpO1xuICAgICAgcmV0dXJuIGlzTnVtYmVyKHgyIC0geCkgPyB4MiAtIHggOiBkLngyIHx8IDA7XG4gICAgfVxuICAgIGlmIChwcm9wSW5mby52YWwgPT09IFwieTJcIikge1xuICAgICAgY29uc3QgeTIgPSBkZWNvZGVFbmNvZGUuYmluZCh0aGlzKShcInkyXCIsIGVuY29kZSwgc2NhbGVzLCBzaWduYWwsIGQpO1xuICAgICAgY29uc3QgeSA9IGRlY29kZUVuY29kZS5iaW5kKHRoaXMpKFwieVwiLCBlbmNvZGUsIHNjYWxlcywgc2lnbmFsLCBkKTtcbiAgICAgIHJldHVybiBpc051bWJlcih5MiAtIHkpID8geTIgLSB5IDogZC55MiB8fCAwO1xuICAgIH1cbiAgfSBlbHNlIGlmIChwcm9wSW5mby5lbG1UeXBlID09PSBcImdyb3VwXCIpIHtcbiAgICBpZiAocHJvcEluZm8udmFsID09PSBcInRyYW5zZm9ybVwiKSB7XG4gICAgICBjb25zdCB0cmZEID0gdHJhbnNmb3JtRC5iaW5kKHRoaXMpKGVuY29kZSwgc2NhbGVzLCBzaWduYWwsIGQpO1xuICAgICAgcmV0dXJuIHRyYW5zZm9ybUl0ZW0oT2JqZWN0LmtleXModHJmRCkubGVuZ3RoID09PSAwID8gZCA6IHRyZkQpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChwcm9wSW5mby5lbG1UeXBlID09PSBcImJhY2tncm91bmRcIikge1xuICAgIGlmIChwcm9wSW5mby52YWwgPT09IFwiZFwiKSB7XG4gICAgICBjb25zdCByZWN0RCA9IHtcbiAgICAgICAgeDogZGVjb2RlRW5jb2RlLmJpbmQodGhpcykoXCJ4XCIsIGVuY29kZSwgc2NhbGVzLCBzaWduYWwsIGQpIHx8IDAsXG4gICAgICAgIHk6IGRlY29kZUVuY29kZS5iaW5kKHRoaXMpKFwieVwiLCBlbmNvZGUsIHNjYWxlcywgc2lnbmFsLCBkKSB8fCAwLFxuICAgICAgICBoZWlnaHQ6IGRlY29kZUVuY29kZS5iaW5kKHRoaXMpKFwiaGVpZ2h0XCIsIGVuY29kZSwgc2NhbGVzLCBzaWduYWwsIGQpLFxuICAgICAgICB3aWR0aDogZGVjb2RlRW5jb2RlLmJpbmQodGhpcykoXCJ3aWR0aFwiLCBlbmNvZGUsIHNjYWxlcywgc2lnbmFsLCBkKVxuICAgICAgfTtcbiAgICAgIHJldHVybiB2ZWdhXG4gICAgICAgIC5wYXRoUmVjdGFuZ2xlKClcbiAgICAgICAgLngocmVjdEQueClcbiAgICAgICAgLnkocmVjdEQueSlcbiAgICAgICAgLndpZHRoKHJlY3RELndpZHRoKVxuICAgICAgICAuaGVpZ2h0KHJlY3RELmhlaWdodCkoKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNMaW5lYXJNYXJrdHlwZShwcm9wSW5mby5lbG1UeXBlKSkge1xuICAgIGlmIChwcm9wSW5mby52YWwgPT09IFwiZFwiKSB7XG4gICAgICBpZiAocHJvcEluZm8udHlwZSA9PT0gXCJhdHRyVHdlZW5cIikge1xuICAgICAgICBjb25zdCBtYXJrdHlwZXMgPSBwcm9wSW5mby5pbml0aWFsTWFya3R5cGVcbiAgICAgICAgICA/IHsgaW5pdGlhbDogcHJvcEluZm8uaW5pdGlhbE1hcmt0eXBlLCBmaW5hbDogcHJvcEluZm8uZWxtVHlwZSB9XG4gICAgICAgICAgOiBwcm9wSW5mby5lbG1UeXBlO1xuICAgICAgICByZXR1cm4gYXJlYUxpbmVJbnRlcnBvbGF0b3IuYmluZCh0aGlzKShcbiAgICAgICAgICBzY2FsZXMsXG4gICAgICAgICAgZW5jb2RlcyxcbiAgICAgICAgICBtYXJrdHlwZXMsXG4gICAgICAgICAgZCxcbiAgICAgICAgICBvbGRELFxuICAgICAgICAgIHNpZ25hbHMsXG4gICAgICAgICAgZ2V0UGF0aC5iaW5kKHRoaXMpLFxuICAgICAgICAgIHByb3BJbmZvLmludGVycG9sYXRlU3R5bGVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBnZXRQYXRoLmJpbmQodGhpcykoXG4gICAgICAgIGFyZWFMaW5lRFRvRGF0YShkKSxcbiAgICAgICAgc2NhbGVzLFxuICAgICAgICBlbmNvZGUsXG4gICAgICAgIHNpZ25hbCxcbiAgICAgICAgcHJvcEluZm8uZWxtVHlwZVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHByb3BJbmZvLnZhbCA9PT0gXCJmaWxsXCIgJiYgcHJvcEluZm8uYXNUd2Vlbikge1xuICAgICAgY29uc3QgZ2V0RmlsbCA9IGVuY29kZSA9PlxuICAgICAgICBkZWNvZGVFbmNvZGUuYmluZCh0aGlzKShcbiAgICAgICAgICBcImZpbGxcIixcbiAgICAgICAgICBlbmNvZGUsXG4gICAgICAgICAgc2NhbGVzLFxuICAgICAgICAgIHNpZ25hbCxcbiAgICAgICAgICBkLm1hcmsubWFya3R5cGUgIT09IFwiZ3JvdXBcIiA/IHsgZGF0dW06IHt9IH0gOiBkXG4gICAgICAgICk7XG4gICAgICBpZiAocHJvcEluZm8uaW5pdGlhbE1hcmt0eXBlID09PSBcImFyZWFcIiAmJiBwcm9wSW5mby5lbG1UeXBlID09PSBcImxpbmVcIikge1xuICAgICAgICAvLyB3aGlsZSBhcmVhIC0+IGxpbmUsIGtlZXAgdGhlIGZpbGwgb2YgdGhlIHBhdGggYW5kIHJlbW92ZSBhdCB0aGUgZW5kLlxuICAgICAgICBjb25zdCBkZWNvZGVkVmFsdWUgPSBnZXRGaWxsKHtcbiAgICAgICAgICBmaWxsOiAoZW5jb2Rlcy5pbml0aWFsIHx8IGVuY29kZSkuZmlsbFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHQgPT4gKHQgPj0gMSA/IFwibm9uZVwiIDogZGVjb2RlZFZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRlY29kZWRWYWx1ZSA9IGdldEZpbGwoZW5jb2RlKTtcbiAgICAgIHJldHVybiAodCkgPT4gZGVjb2RlZFZhbHVlO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBwcm9wSW5mby52YWwgPT09IFwic3Ryb2tlXCIgJiZcbiAgICAgIHByb3BJbmZvLmluaXRpYWxNYXJrdHlwZSA9PT0gXCJsaW5lXCIgJiZcbiAgICAgIHByb3BJbmZvLmVsbVR5cGUgPT09IFwiYXJlYVwiXG4gICAgKSB7XG4gICAgICBjb25zdCBfZW5jb2RlID0geyBzdHJva2U6IGVuY29kZS5zdHJva2UgfHwgZW5jb2RlLmZpbGwgfTtcbiAgICAgIHJldHVybiBkZWNvZGVFbmNvZGUuYmluZCh0aGlzKShcbiAgICAgICAgXCJzdHJva2VcIixcbiAgICAgICAgX2VuY29kZSxcbiAgICAgICAgc2NhbGVzLFxuICAgICAgICBzaWduYWwsXG4gICAgICAgIGQubWFyay5tYXJrdHlwZSAhPT0gXCJncm91cFwiID8geyBkYXR1bToge30gfSA6IGRcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChoYXNQcm9wKGVuY29kZSwgcHJvcEluZm8pKSB7XG4gICAgICAvLyBzaW5jZSBkYXRhIGJpbmQgdG8gdGhlIGdyb3VwIG9mIHRoZSBsaW5lXG4gICAgICByZXR1cm4gZGVjb2RlRW5jb2RlLmJpbmQodGhpcykoXG4gICAgICAgIHByb3BJbmZvLnZhbCxcbiAgICAgICAgZW5jb2RlLFxuICAgICAgICBzY2FsZXMsXG4gICAgICAgIHNpZ25hbCxcbiAgICAgICAgZC5tYXJrLm1hcmt0eXBlICE9PSBcImdyb3VwXCIgPyB7IGRhdHVtOiB7fSB9IDogZFxuICAgICAgKSArIChwcm9wSW5mby52YWwgPT09IFwic3Ryb2tlV2lkdGhcIiA/IFwicHhcIiA6IFwiXCIpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChwcm9wSW5mby52YWwgPT09IFwidGV4dC1hbmNob3JcIikge1xuICAgIGNvbnN0IHRleHRBbmNob3IgPSB7XG4gICAgICBsZWZ0OiBcInN0YXJ0XCIsXG4gICAgICBjZW50ZXI6IFwibWlkZGxlXCIsXG4gICAgICByaWdodDogXCJlbmRcIlxuICAgIH07XG4gICAgcmV0dXJuIHRleHRBbmNob3JbXG4gICAgICAob2xkRCA/IG9sZEQuYWxpZ24gOiBkLmFsaWduKSB8fFxuICAgICAgICBkZWNvZGVFbmNvZGUuYmluZCh0aGlzKShcImFsaWduXCIsIGVuY29kZSwgc2NhbGVzLCBzaWduYWwsIGQpXG4gICAgXTtcbiAgfVxuICBpZiAoaGFzUHJvcChlbmNvZGUsIHByb3BJbmZvKSkge1xuICAgIHJldHVybiBkZWNvZGVFbmNvZGUuYmluZCh0aGlzKShwcm9wSW5mby52YWwsIGVuY29kZXMsIHNjYWxlcywgc2lnbmFsLCBkKTtcbiAgfVxuICAvLyBWZWdhIG1ha2Ugc29tZSBsYWJsZXMgdHJhbnNwYXJlbnQgdG8gYXZvaWQgdGhlIG92ZXJsYXBzLlxuICAvLyBHZW1pbmkgdGFrZXMgdGhlIHZlZ2EncyBkZWNpc2lvbnMuXG4gIGlmIChwcm9wSW5mby5lbG1UeXBlID09PSBcInRleHRcIiAmJiBwcm9wSW5mby52YWwgPT09IFwib3BhY2l0eVwiKSB7XG4gICAgcmV0dXJuIGRbcHJvcEluZm8udmFsXTtcbiAgfVxuICByZXR1cm4gQlJfUFJPUF9ERUZBVUxUW3Byb3BJbmZvLmVsbVR5cGVdW3Byb3BJbmZvLnZhbF07XG5cbiAgZnVuY3Rpb24gaGFzUHJvcChlbmNvZGUsIHByb3BJbmZvKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGdldChlbmNvZGUsIFwicHJpbWFyeVwiLCBwcm9wSW5mby52YWwpIHx8XG4gICAgICBnZXQoZW5jb2RlLCBcInNlY29uZGFyeVwiLCBwcm9wSW5mby52YWwpIHx8XG4gICAgICBnZXQoZW5jb2RlLCBwcm9wSW5mby52YWwpXG4gICAgKTtcbiAgfVxuICBmdW5jdGlvbiBnZXRSZWN0KGQsIHNjYWxlcywgZW5jb2Rlcywgc2lnbmFsLCBpc0RpbWluaXNoZWQpIHtcbiAgICBjb25zdCBlbmNvZGUgPSBlbmNvZGVzLnByaW1hcnkgfHwgZW5jb2RlcztcbiAgICBjb25zdCBzdWJFbmNvZGUgPSBlbmNvZGVzLnNlY29uZGFyeSB8fCBlbmNvZGVzO1xuICAgIGNvbnN0IFBPU0lUSU9OX0FUVFJTID0gW1xuICAgICAgXCJ4XCIsXG4gICAgICBcIngyXCIsXG4gICAgICBcInhjXCIsXG4gICAgICBcIndpZHRoXCIsXG4gICAgICBcInlcIixcbiAgICAgIFwieTJcIixcbiAgICAgIFwieWNcIixcbiAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICBcImNvcm5lclJhZGl1c1wiXG4gICAgXTtcbiAgICBjb25zdCBuZXdEID0gUE9TSVRJT05fQVRUUlMucmVkdWNlKChhY2MsIGF0dHIpID0+IHtcbiAgICAgIGlmIChlbmNvZGVbYXR0cl0gfHwgc3ViRW5jb2RlW2F0dHJdKSB7XG4gICAgICAgIGFjY1thdHRyXSA9IGRlY29kZUVuY29kZS5iaW5kKHRoaXMpKFxuICAgICAgICAgIGF0dHIsXG4gICAgICAgICAgZW5jb2RlcyxcbiAgICAgICAgICBzY2FsZXMsXG4gICAgICAgICAgc2lnbmFsLFxuICAgICAgICAgIGQsXG4gICAgICAgICAgZmFsc2VcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuXG4gICAgbGV0IHg7IGxldCB5OyBsZXQgd2lkdGg7IGxldCBoZWlnaHQ7IGxldCBjb3JuZXJSYWRpdXM7XG4gICAgaWYgKGlzTnVtYmVyKG5ld0QueGMpICYmIGlzTnVtYmVyKG5ld0Qud2lkdGgpKSB7XG4gICAgICB4ID0gbmV3RC54YyAtIG5ld0Qud2lkdGggLyAyO1xuICAgICAgd2lkdGggPSBuZXdELndpZHRoO1xuICAgIH0gZWxzZSBpZiAoaXNOdW1iZXIobmV3RC54KSAmJiBpc051bWJlcihuZXdELngyKSkge1xuICAgICAgeCA9IE1hdGgubWluKG5ld0QueCwgbmV3RC54Mik7XG4gICAgICB3aWR0aCA9IE1hdGguYWJzKG5ld0QueCAtIG5ld0QueDIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB4ID0gaXNOdW1iZXIobmV3RC54KSA/IG5ld0QueCA6IG5ld0QueDI7XG4gICAgICB3aWR0aCA9IG5ld0Qud2lkdGg7XG4gICAgfVxuXG4gICAgaWYgKGlzTnVtYmVyKG5ld0QueWMpICYmIGlzTnVtYmVyKG5ld0QuaGVpZ2h0KSkge1xuICAgICAgeSA9IG5ld0QueWMgLSBuZXdELmhlaWdodCAvIDI7XG4gICAgICBoZWlnaHQgPSBuZXdELmhlaWdodDtcbiAgICB9IGVsc2UgaWYgKGlzTnVtYmVyKG5ld0QueTIpICYmIGlzTnVtYmVyKG5ld0QueSkpIHtcbiAgICAgIHkgPSBNYXRoLm1pbihuZXdELnkyLCBuZXdELnkpO1xuICAgICAgaGVpZ2h0ID0gTWF0aC5hYnMobmV3RC55MiAtIG5ld0QueSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHkgPSBpc051bWJlcihuZXdELnkpID8gbmV3RC55IDogbmV3RC55MjtcbiAgICAgIGhlaWdodCA9IG5ld0QuaGVpZ2h0O1xuICAgIH1cblxuICAgIGNvcm5lclJhZGl1cyA9ICFpc051bWJlcihuZXdELmNvcm5lclJhZGl1cykgPyAwIDogbmV3RC5jb3JuZXJSYWRpdXM7XG4gICAgaWYgKGlzRGltaW5pc2hlZCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGF0aDogdmVnYVxuICAgICAgICAgIC5wYXRoUmVjdGFuZ2xlKClcbiAgICAgICAgICAueCgwKVxuICAgICAgICAgIC55KDApXG4gICAgICAgICAgLndpZHRoKDEpXG4gICAgICAgICAgLmhlaWdodCgxKSgpLFxuICAgICAgICBtZXRhOiBuZXdEXG4gICAgICB9O1xuICAgIH1cbiAgICAvLyAgaGVpZ2h0ID0gaXNOYU4obmV3RC5oZWlnaHQpID8gKCBpc05hTihuZXdELnkyIC0gbmV3RC55KSA/IHVuZGVmaW5lZCA6IChuZXdELnkyIC0gbmV3RC55KSkgOiBuZXdELmhlaWdodDtcbiAgICAvLyByZXR1cm4gdmVnYS5wYXRoUmVjdGFuZ2xlKCkueCh4KS55KHkpLndpZHRoKHdpZHRoKS5oZWlnaHQoaGVpZ2h0KSgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBhdGg6IHZlZ2FcbiAgICAgICAgLnBhdGhSZWN0YW5nbGUoKVxuICAgICAgICAueCh4KVxuICAgICAgICAueSh5KVxuICAgICAgICAud2lkdGgod2lkdGgpXG4gICAgICAgIC5oZWlnaHQoaGVpZ2h0KVxuICAgICAgICAuY29ybmVyUmFkaXVzKGNvcm5lclJhZGl1cykoKSxcbiAgICAgIG1ldGE6IG5ld0RcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0U2hhcGUoZCwgc2NhbGVzLCBlbmNvZGVzLCBzaWduYWwsIGlzRGltaW5pc2hlZCA9IGZhbHNlKSB7XG4gICAgY29uc3QgZW5jb2RlID0gZW5jb2Rlcy5wcmltYXJ5IHx8IGVuY29kZXM7XG4gICAgbGV0IG5ld0QgPSBPYmplY3Qua2V5cyhlbmNvZGUpXG4gICAgICAuZmlsdGVyKGtleSA9PiBbXCJzaXplXCIsIFwic2hhcGVcIl0uaW5kZXhPZihrZXkpID49IDApXG4gICAgICAucmVkdWNlKChhY2MsIGN1cnIpID0+IHtcbiAgICAgICAgYWNjW2N1cnJdID0gZGVjb2RlRW5jb2RlLmJpbmQodGhpcykoY3VyciwgZW5jb2Rlcywgc2NhbGVzLCBzaWduYWwsIGQpO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge30pO1xuICAgIGNvbnN0IGNvbnRleHQgPSBkMy5wYXRoKCk7XG4gICAgbmV3RCA9IHtcbiAgICAgIHNoYXBlOiBuZXdELnNoYXBlIHx8IFwiY2lyY2xlXCIsXG4gICAgICBzaXplOiBpc051bWJlcihuZXdELnNpemUpID8gbmV3RC5zaXplIDogaXNOdW1iZXIoZC5zaXplKSA/IGQuc2l6ZSA6IDMwXG4gICAgfTtcblxuICAgIHZlZ2EucGF0aFN5bWJvbHMobmV3RC5zaGFwZSkuZHJhdyhjb250ZXh0LCBpc0RpbWluaXNoZWQgPyAxIDogbmV3RC5zaXplKTtcbiAgICByZXR1cm4ge1xuICAgICAgcGF0aDogY29udGV4dC50b1N0cmluZygpLFxuICAgICAgbWV0YTogbmV3RFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRQYXRoKGRhdGEsIHNjYWxlcywgZW5jb2Rlcywgc2lnbmFsLCB0eXBlLCBhbG9uZ1RvPVwieFwiKSB7XG4gICAgLy8gbGV0IGRhdGEgPSAoZC5tYXJrLm1hcmt0eXBlICE9PSBcImdyb3VwXCIgPyBkIDogZC5pdGVtc1swXS5pdGVtc1swXSkubWFyay5pdGVtcztcbiAgICBjb25zdCBlbmNvZGUgPSBlbmNvZGVzLnByaW1hcnkgfHwgZW5jb2RlcztcbiAgICBjb25zdCBuZXdEYXRhID0gZGF0YS5tYXAob2xkRCA9PiB7XG4gICAgICBjb25zdCBkZWZhdWx0RCA9IE9iamVjdC5rZXlzKGVuY29kZSlcbiAgICAgICAgLmZpbHRlcihrZXkgPT4gW1wieFwiLCBcIngyXCIsIFwieGNcIiwgXCJ3aWR0aFwiLCBcInlcIiwgXCJ5MlwiLCBcInljXCIsIFwiaGVpZ2h0XCIsIFwic2l6ZVwiXS5pbmRleE9mKGtleSkgPj0gMCkgLy8gXCJkZWZpbmVkXCIgY2hhbm5lbCBpcyBpZ25vcmVkIGR1ZSB0byBwZXJmb3JtYW5jZSBpc3N1ZS5cbiAgICAgICAgLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3VmFsID0gZGVjb2RlRW5jb2RlLmJpbmQodGhpcykoXG4gICAgICAgICAgICBjdXJyLFxuICAgICAgICAgICAgZW5jb2RlcyxcbiAgICAgICAgICAgIHNjYWxlcyxcbiAgICAgICAgICAgIHNpZ25hbCxcbiAgICAgICAgICAgIG9sZERcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICghaXNOdW1iZXIobmV3VmFsKSkge1xuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICB9XG4gICAgICAgICAgYWNjW2N1cnJdID0gbmV3VmFsO1xuICAgICAgICAgIGlmIChzY2FsZXNbY3Vycl0gJiYgc2NhbGVzW2N1cnJdLnR5cGUgPT09IFwiYmFuZFwiKSB7XG4gICAgICAgICAgICBhY2NbY3Vycl0gKz0gTWF0aC5yb3VuZChcbiAgICAgICAgICAgICAgc2NhbGVzW2N1cnJdLmJhbmR3aWR0aCgpICogKGVuY29kZS5iYW5kUG9zaXRpb24gfHwgMC41KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwge30pO1xuICAgICAgZGVmYXVsdEQuaGVpZ2h0ID0gaXNOdW1iZXIoZGVmYXVsdEQuaGVpZ2h0KVxuICAgICAgICA/IGRlZmF1bHRELmhlaWdodFxuICAgICAgICA6IE1hdGguYWJzKGRlZmF1bHRELnkyIC0gZGVmYXVsdEQueSk7XG4gICAgICBkZWZhdWx0RC53aWR0aCA9IGlzTnVtYmVyKGRlZmF1bHRELndpZHRoKVxuICAgICAgICA/IGRlZmF1bHRELndpZHRoXG4gICAgICAgIDogTWF0aC5hYnMoZGVmYXVsdEQueDIgLSBkZWZhdWx0RC54KTtcbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKFxuICAgICAgICAvLyB7XG4gICAgICAgIC8vICAgeDogb2xkRC54LFxuICAgICAgICAvLyAgIHk6IG9sZEQueSxcbiAgICAgICAgLy8gICB3aWR0aDogb2xkRC53aWR0aCxcbiAgICAgICAgLy8gICBoZWlnaHQ6IG9sZEQuaGVpZ2h0XG4gICAgICAgIC8vIH0sXG4gICAgICAgIGRlZmF1bHREXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaWYgKHR5cGUgPT09IFwibGluZVwiKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBkM1xuICAgICAgICAgIC5saW5lKClcbiAgICAgICAgICAueChkID0+IE1hdGguZmxvb3IoZC54ICogMTAwKSAvIDEwMClcbiAgICAgICAgICAueShkID0+IE1hdGguZmxvb3IoZC55ICogMTAwKSAvIDEwMCkobmV3RGF0YSkgfHwgXCJcIlxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwiYXJlYVwiKSB7XG4gICAgICAvLyBhcmVhaFNoYXBlICA9IGQzX2FyZWEoKS55KHkpLngxKHgpLngwKHh3KS5kZWZpbmVkKGRlZiksXG4gICAgICBpZiAoYWxvbmdUbyA9PT0gXCJ4XCIpIHtcbiAgICAgICAgbmV3RGF0YS5mb3JFYWNoKGQgPT4ge1xuICAgICAgICAgIGQueTIgPSBpc051bWJlcihkLnkyKSA/IGQueTIgOiBkLnk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGQzXG4gICAgICAgICAgICAuYXJlYSgpXG4gICAgICAgICAgICAueChkID0+IE1hdGguZmxvb3IoZC54ICogMTAwKSAvIDEwMClcbiAgICAgICAgICAgIC55MShkID0+IE1hdGguZmxvb3IoTWF0aC5taW4oZC55LCBkLnkyKSAqIDEwMCkgLyAxMDApXG4gICAgICAgICAgICAueTAoXG4gICAgICAgICAgICAgIGQgPT4gTWF0aC5mbG9vcigoTWF0aC5taW4oZC55LCBkLnkyKSArIChkLmhlaWdodCB8fCAwKSkgKiAxMDApIC8gMTAwXG4gICAgICAgICAgICApKG5ld0RhdGEpIHx8IFwiXCJcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld0RhdGEuZm9yRWFjaChkID0+IHtcbiAgICAgICAgICBkLngyID0gaXNOdW1iZXIoZC54MikgPyBkLngyIDogZC54O1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBkM1xuICAgICAgICAgICAgLmFyZWEoKVxuICAgICAgICAgICAgLnkoZCA9PiBNYXRoLmZsb29yKGQueSAqIDEwMCkgLyAxMDApXG4gICAgICAgICAgICAueDEoZCA9PiBNYXRoLmZsb29yKE1hdGgubWluKGQueCwgZC54MikgKiAxMDApIC8gMTAwKVxuICAgICAgICAgICAgLngwKFxuICAgICAgICAgICAgICBkID0+IE1hdGguZmxvb3IoKE1hdGgubWluKGQueCwgZC54MikgKyAoZC53aWR0aCB8fCAwKSkgKiAxMDApIC8gMTAwXG4gICAgICAgICAgICApKG5ld0RhdGEpIHx8IFwiXCJcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJ0cmFpbFwiKSB7XG5cbiAgICAgIHJldHVybiB2ZWdhLnBhdGhUcmFpbCgpXG4gICAgICAgIC54KGQgPT4gZC54KVxuICAgICAgICAueShkPT4gZC55KVxuICAgICAgICAuc2l6ZShkPT4gKGlzTnVtYmVyKGQuc2l6ZSkgPyBkLnNpemUgOiAyKSkgLy8gMiBpcyBkZWZhdWx0IHNpemUgaW4gVmVnYVxuICAgICAgICAuZGVmaW5lZChkPT4oZC5kZWZpbmVkIHx8IHRydWUpKShuZXdEYXRhKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybUQoZW5jb2Rlcywgc2NhbGVzLCBzaWduYWwsIGQsIGluaGVyaXQgPSB0cnVlKSB7XG4gIGNvbnN0IGVuY29kZSA9IGVuY29kZXMucHJpbWFyeSB8fCBlbmNvZGVzO1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihcbiAgICB7fSxcbiAgICBPYmplY3Qua2V5cyhlbmNvZGUpXG4gICAgICAuZmlsdGVyKGtleSA9PiBbXCJ4XCIsIFwieVwiLCBcImFuZ2xlXCIsIFwieWNcIiwgXCJ4Y1wiXS5pbmRleE9mKGtleSkgPj0gMClcbiAgICAgIC5yZWR1Y2UoKGFjYywgY3VycikgPT4ge1xuICAgICAgICBjb25zdCBuZXdWYWwgPSBkZWNvZGVFbmNvZGUuYmluZCh0aGlzKShcbiAgICAgICAgICBjdXJyLFxuICAgICAgICAgIGVuY29kZXMsXG4gICAgICAgICAgc2NhbGVzLFxuICAgICAgICAgIHNpZ25hbCxcbiAgICAgICAgICBkXG4gICAgICAgICk7XG4gICAgICAgIGxldCBwcm9wID0gY3VycjtcbiAgICAgICAgaWYgKGlzTmFOKG5ld1ZhbCkpIHtcbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyID09PSBcInhjXCIpIHtcbiAgICAgICAgICBwcm9wID0gXCJ4XCI7XG4gICAgICAgIH0gZWxzZSBpZiAoY3VyciA9PT0gXCJ5Y1wiKSB7XG4gICAgICAgICAgcHJvcCA9IFwieVwiO1xuICAgICAgICB9XG5cbiAgICAgICAgYWNjW3Byb3BdID0gaXNOYU4oYWNjW3Byb3BdKSA/IG5ld1ZhbCA6IGFjY1twcm9wXTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIHt9KSxcbiAgICBpbmhlcml0ID8gZCA6IHt9XG4gICk7XG59XG5leHBvcnRcbmZ1bmN0aW9uIGNhbGN1bGF0ZUdldFZhbGV1cyhlbmNvZGVzLCBzY2FsZXMsIHNpZ25hbHMsIGNvbXB1dGVTY2FsZSwgc2NOYW1lcykge1xuICByZXR1cm4ge1xuICAgIHVwZGF0ZToge1xuICAgICAgaW5pdGlhbDogKGF0dHIsIGdldFNjYWxlcywgZCkgPT4ge1xuICAgICAgICBjb25zdCBjb21wdXRlZFNjYWxlcyA9IGNvbXB1dGVTY2FsZShzY2FsZXMsIHNjTmFtZXMsIGdldFNjYWxlcyk7XG4gICAgICAgIHJldHVybiBnZXRQcm9wVmFsKFxuICAgICAgICAgIGF0dHIsXG4gICAgICAgICAgZW5jb2Rlcy5pbml0aWFsLnVwZGF0ZSxcbiAgICAgICAgICBjb21wdXRlZFNjYWxlcy5pbml0aWFsLFxuICAgICAgICAgIHNpZ25hbHMuaW5pdGlhbCxcbiAgICAgICAgICBkXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgZmluYWw6IChhdHRyLCBnZXRTY2FsZXMsIGQpID0+IHtcbiAgICAgICAgY29uc3QgY29tcHV0ZWRTY2FsZXMgPSBjb21wdXRlU2NhbGUoc2NhbGVzLCBzY05hbWVzLCBnZXRTY2FsZXMpO1xuICAgICAgICByZXR1cm4gZ2V0UHJvcFZhbChcbiAgICAgICAgICBhdHRyLFxuICAgICAgICAgIGVuY29kZXMuZmluYWwudXBkYXRlLFxuICAgICAgICAgIGNvbXB1dGVkU2NhbGVzLmZpbmFsLFxuICAgICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgICAgZFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIGN1c3RvbShhdHRyLCBnZXRTY2FsZXMsIGRfaSwgZF9mKSB7XG4gICAgICAgIGNvbnN0IGRhdHVtID0ge1xuICAgICAgICAgIGluaXRpYWw6IGRfaSxcbiAgICAgICAgICBmaW5hbDogZF9mXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgY29tcHV0ZWRTY2FsZXMgPSBjb21wdXRlU2NhbGUoc2NhbGVzLCBzY05hbWVzLCBnZXRTY2FsZXMpO1xuICAgICAgICByZXR1cm4gZ2V0UHJvcFZhbC5iaW5kKHRoaXMpKFxuICAgICAgICAgIGF0dHIsXG4gICAgICAgICAgZW5jb2Rlcy5maW5hbC51cGRhdGUsXG4gICAgICAgICAgY29tcHV0ZWRTY2FsZXMsXG4gICAgICAgICAgc2lnbmFscy5maW5hbCxcbiAgICAgICAgICBkYXR1bVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0sXG4gICAgZW50ZXI6IHtcbiAgICAgIGluaXRpYWw6IChhdHRyLCBnZXRTY2FsZXMsIGQpID0+IHtcbiAgICAgICAgY29uc3QgY29tcHV0ZWRTY2FsZXMgPSBjb21wdXRlU2NhbGUoc2NhbGVzLCBzY05hbWVzLCBnZXRTY2FsZXMpO1xuXG4gICAgICAgIHJldHVybiBnZXRQcm9wVmFsKFxuICAgICAgICAgIGF0dHIsXG4gICAgICAgICAgZW5jb2Rlcy5pbml0aWFsLmVudGVyLFxuICAgICAgICAgIHsgcHJpbWFyeTogY29tcHV0ZWRTY2FsZXMuaW5pdGlhbCwgc2Vjb25kYXJ5OiBjb21wdXRlZFNjYWxlcy5maW5hbCB9LFxuICAgICAgICAgIHNpZ25hbHMuaW5pdGlhbCxcbiAgICAgICAgICBkXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgZmluYWw6IChhdHRyLCBnZXRTY2FsZXMsIGQpID0+IHtcbiAgICAgICAgY29uc3QgY29tcHV0ZWRTY2FsZXMgPSBjb21wdXRlU2NhbGUoc2NhbGVzLCBzY05hbWVzLCBnZXRTY2FsZXMpO1xuICAgICAgICByZXR1cm4gZ2V0UHJvcFZhbChcbiAgICAgICAgICBhdHRyLFxuICAgICAgICAgIGVuY29kZXMuZmluYWwuZW50ZXIsXG4gICAgICAgICAgY29tcHV0ZWRTY2FsZXMuZmluYWwsXG4gICAgICAgICAgc2lnbmFscy5maW5hbCxcbiAgICAgICAgICBkXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgY3VzdG9tKGF0dHIsIGdldFNjYWxlcywgZF9pLCBkX2YpIHtcbiAgICAgICAgY29uc3QgZGF0dW0gPSB7XG4gICAgICAgICAgaW5pdGlhbDogZF9pLFxuICAgICAgICAgIGZpbmFsOiBkX2ZcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBjb21wdXRlZFNjYWxlcyA9IGNvbXB1dGVTY2FsZShzY2FsZXMsIHNjTmFtZXMsIGdldFNjYWxlcyk7XG4gICAgICAgIHJldHVybiBnZXRQcm9wVmFsLmJpbmQodGhpcykoXG4gICAgICAgICAgYXR0cixcbiAgICAgICAgICBlbmNvZGVzLmZpbmFsLmVudGVyLFxuICAgICAgICAgIGNvbXB1dGVkU2NhbGVzLFxuICAgICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgICAgZGF0dW1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGV4aXQ6IHtcbiAgICAgIGluaXRpYWw6IChhdHRyLCBnZXRTY2FsZXMsIGQpID0+IHtcbiAgICAgICAgY29uc3QgY29tcHV0ZWRTY2FsZXMgPSBjb21wdXRlU2NhbGUoc2NhbGVzLCBzY05hbWVzLCBnZXRTY2FsZXMpO1xuICAgICAgICByZXR1cm4gZ2V0UHJvcFZhbChcbiAgICAgICAgICBhdHRyLFxuICAgICAgICAgIGVuY29kZXMuaW5pdGlhbC5leGl0LFxuICAgICAgICAgIGNvbXB1dGVkU2NhbGVzLmluaXRpYWwsXG4gICAgICAgICAgc2lnbmFscy5pbml0aWFsLFxuICAgICAgICAgIGRcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBmaW5hbDogKGF0dHIsIGdldFNjYWxlcywgZCkgPT4ge1xuICAgICAgICBjb25zdCBjb21wdXRlZFNjYWxlcyA9IGNvbXB1dGVTY2FsZShzY2FsZXMsIHNjTmFtZXMsIGdldFNjYWxlcyk7XG4gICAgICAgIHJldHVybiBnZXRQcm9wVmFsKFxuICAgICAgICAgIGF0dHIsXG4gICAgICAgICAgZW5jb2Rlcy5maW5hbC5leGl0LFxuICAgICAgICAgIHsgcHJpbWFyeTogY29tcHV0ZWRTY2FsZXMuZmluYWwsIHNlY29uZGFyeTogY29tcHV0ZWRTY2FsZXMuaW5pdGlhbCB9LFxuICAgICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgICAgZFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIGN1c3RvbShhdHRyLCBnZXRTY2FsZXMsIGRfaSwgZF9mKSB7XG4gICAgICAgIGNvbnN0IGRhdHVtID0ge1xuICAgICAgICAgIGluaXRpYWw6IGRfaSxcbiAgICAgICAgICBmaW5hbDogZF9mXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgY29tcHV0ZWRTY2FsZXMgPSBjb21wdXRlU2NhbGUoc2NhbGVzLCBzY05hbWVzLCBnZXRTY2FsZXMpO1xuICAgICAgICByZXR1cm4gZ2V0UHJvcFZhbC5iaW5kKHRoaXMpKFxuICAgICAgICAgIGF0dHIsXG4gICAgICAgICAgZW5jb2Rlcy5maW5hbC5leGl0LFxuICAgICAgICAgIGNvbXB1dGVkU2NhbGVzLFxuICAgICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgICAgZGF0dW1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGRlY29kZUVuY29kZShwcm9wLCBlbmNvZGVzLCBzY2FsZXMsIHNpZ25hbCwgZCkge1xuICBsZXQgc3ViU2NhbGVzID0gY29weTIoc2NhbGVzKTtcbiAgaWYgKHNjYWxlcy5wcmltYXJ5ICYmIHNjYWxlcy5zZWNvbmRhcnkpIHtcbiAgICBzdWJTY2FsZXMgPSBzY2FsZXMuc2Vjb25kYXJ5O1xuICAgIHNjYWxlcyA9IHNjYWxlcy5wcmltYXJ5O1xuICB9IGVsc2UgaWYgKHNjYWxlcy5pbml0aWFsICYmIHNjYWxlcy5maW5hbCkge1xuICAgIHNjYWxlcyA9IHNjYWxlcy5maW5hbDtcbiAgfVxuXG4gIGxldCBlbmNvZGUgPSBjb3B5KGVuY29kZXMpO1xuICBsZXQgc3ViRW5jb2RlID0gY29weShlbmNvZGVzKTtcbiAgaWYgKGVuY29kZXMucHJpbWFyeSAmJiBlbmNvZGVzLnNlY29uZGFyeSkge1xuICAgIGVuY29kZSA9IGVuY29kZXMucHJpbWFyeTtcbiAgICBzdWJFbmNvZGUgPSBlbmNvZGVzLnNlY29uZGFyeTtcbiAgfSBlbHNlIGlmIChlbmNvZGVzLmluaXRpYWwgJiYgZW5jb2Rlcy5maW5hbCkge1xuICAgIHN1YkVuY29kZSA9IGVuY29kZSA9IGVuY29kZXMuZmluYWw7XG4gIH1cblxuICBjb25zdCBlbkF0dHIgPSBlbmNvZGVbcHJvcF07XG4gIGNvbnN0IHN1YkVuQXR0ciA9IHN1YkVuY29kZVtwcm9wXTtcblxuICBmdW5jdGlvbiBnZXRWYWwoZW5BdHRyLCBzY2FsZXMpIHtcbiAgICBpZiAoIWVuQXR0cikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShlbkF0dHIpKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVuQXR0ci5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgLy8gVGhlbiB0aGUgaXRlbXMgc2hvdWxkIGNvbnRhaW4gJ3Rlc3QnIHByb3AgdG8gdGVzdCAoZXhjZXB0IHRoZSBsYXN0KVxuICAgICAgICBpZiAoZXZhbFNpZ25hbFZhbChlbkF0dHJbaV0udGVzdCwgc2lnbmFsLCBzY2FsZXMsIGQuZGF0dW0pKSB7XG4gICAgICAgICAgcmV0dXJuIGVuQXR0cltpXS52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZW5BdHRyID0gY29weShlbkF0dHJbZW5BdHRyLmxlbmd0aCAtIDFdKTtcbiAgICB9XG5cbiAgICBsZXQgZmluYWxWYWwgPSBlbkF0dHIudmFsdWU7XG4gICAgaWYgKGVuQXR0ci5maWVsZCkge1xuICAgICAgaWYgKGVuQXR0ci5zY2FsZSkge1xuICAgICAgICBjb25zdCBzY05hbWUgPSBlbkF0dHIuc2NhbGU7XG4gICAgICAgIGZpbmFsVmFsID0gc2NhbGVzW3NjTmFtZV1cbiAgICAgICAgICA/IHNjYWxlc1tzY05hbWVdKGQuZGF0dW1bZW5BdHRyLmZpZWxkXSlcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSBpZiAoZW5BdHRyLmZpZWxkLmdyb3VwKSB7XG4gICAgICAgIHJldHVybiBkLm1hcmsuZ3JvdXBbZW5BdHRyLmZpZWxkLmdyb3VwXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbmFsVmFsID0gZC5kYXR1bVtlbkF0dHIuZmllbGRdO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZW5BdHRyLnNpZ25hbCkge1xuICAgICAgY29uc3QgdmFsID0gZXZhbFNpZ25hbFZhbChlbkF0dHIuc2lnbmFsLCBzaWduYWwsIHNjYWxlcywgZC5kYXR1bSk7XG5cbiAgICAgIGlmIChlbkF0dHIuc2NhbGUpIHtcbiAgICAgICAgY29uc3Qgc2NOYW1lID0gZW5BdHRyLnNjYWxlO1xuICAgICAgICBmaW5hbFZhbCA9IHNjYWxlc1tzY05hbWVdID8gc2NhbGVzW3NjTmFtZV0odmFsKSA6IHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbmFsVmFsID0gdmFsO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZW5BdHRyLnNjYWxlKSB7XG4gICAgICBjb25zdCBzY05hbWUgPSBlbkF0dHIuc2NhbGU7XG5cbiAgICAgIGlmIChlbkF0dHIudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmaW5hbFZhbCA9IHNjYWxlc1tzY05hbWVdID8gc2NhbGVzW3NjTmFtZV0oZW5BdHRyLnZhbHVlKSA6IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGVuQXR0ci5iYW5kKSB7XG4gICAgICAgIGNvbnN0IHNjID0gc2NhbGVzW3NjTmFtZV07XG4gICAgICAgIGxldCBidyA9IHNjICYmIHNjLnR5cGUgPT09IFwiYmFuZFwiID8gc2MuYmFuZHdpZHRoKCkgOiAwO1xuICAgICAgICBidyA9IE1hdGgucm91bmQoXG4gICAgICAgICAgYncgKlxuICAgICAgICAgICAgKGVuQXR0ci5iYW5kID09PSB0cnVlIHx8IGlzTnVtYmVyKGVuQXR0ci5iYW5kKSA/IGVuQXR0ci5iYW5kIDogMC41KVxuICAgICAgICApO1xuICAgICAgICBmaW5hbFZhbCA9IGlzTnVtYmVyKGZpbmFsVmFsKSA/IGJ3ICsgZmluYWxWYWwgOiBidztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZW5BdHRyLmV4cCkge1xuICAgICAgY29uc29sZS5lcnJvcihcIlRvZG8gZGVjb2RlRW5jZG9lIHdpdGggZXhwLlwiKTtcbiAgICB9XG4gICAgaWYgKGVuQXR0ci5tdWx0KSB7XG4gICAgICBpZiAoaXNOdW1iZXIoZW5BdHRyLm11bHQpKSB7XG4gICAgICAgIGZpbmFsVmFsICo9IGVuQXR0ci5tdWx0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmluYWxWYWwgKj0gZGVjb2RlRW5jb2RlKFxuICAgICAgICAgIFwibXVsdFwiLFxuICAgICAgICAgIHsgbXVsdDogZW5BdHRyLm11bHQgfSxcbiAgICAgICAgICBzY2FsZXMsXG4gICAgICAgICAgc2lnbmFsLFxuICAgICAgICAgIGRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVuQXR0ci5vZmZzZXQpIHtcbiAgICAgIGlmIChpc051bWJlcihlbkF0dHIub2Zmc2V0KSkge1xuICAgICAgICBmaW5hbFZhbCArPSBlbkF0dHIub2Zmc2V0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmluYWxWYWwgKz0gZGVjb2RlRW5jb2RlKFxuICAgICAgICAgIFwib2Zmc2V0XCIsXG4gICAgICAgICAgeyBvZmZzZXQ6IGVuQXR0ci5vZmZzZXQgfSxcbiAgICAgICAgICBzY2FsZXMsXG4gICAgICAgICAgc2lnbmFsLFxuICAgICAgICAgIGRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZpbmFsVmFsO1xuICB9XG4gIGNvbnN0IGZWYWxQcmltYXJ5ID0gZ2V0VmFsKGVuQXR0ciwgc2NhbGVzKTtcbiAgY29uc3QgZlZhbFNlY29uZGFyeSA9IGdldFZhbChzdWJFbkF0dHIsIHN1YlNjYWxlcyk7XG4gIHJldHVybiBmVmFsUHJpbWFyeSAhPT0gdW5kZWZpbmVkID8gZlZhbFByaW1hcnkgOiBmVmFsU2Vjb25kYXJ5O1xufVxuXG5cbmZ1bmN0aW9uIGV2YWxTaWduYWxWYWwoc2lnbmFsVmFsLCBzaWduYWwsIHNjYWxlcywgZGF0dW0pIHtcbiAgY29uc3QgVkVHQV9GVU5DVElPTlMgPSBbXG4gICAge1xuICAgICAgbmFtZTogXCJzY2FsZVwiLFxuICAgICAgZm46IChzY05hbWUsIHZhbCkgPT4gKHNjYWxlc1tzY05hbWVdID8gc2NhbGVzW3NjTmFtZV0odmFsKSA6IHVuZGVmaW5lZClcbiAgICB9LFxuICAgIHsgbmFtZTogXCJpc1ZhbGlkXCIsIGZuOiBvID0+IG8gIT09IG51bGwgJiYgbyA9PT0gbyB9LFxuICAgIHsgbmFtZTogXCJ0aW1lRm9ybWF0XCIsIGZuOiAoYSwgYikgPT4gdmVnYS50aW1lRm9ybWF0KGIpKGEpIH0sXG4gICAgeyBuYW1lOiBcInRpbWVVbml0U3BlY2lmaWVyXCIsIGZuOiAoYSwgYikgPT4gdmVnYS50aW1lVW5pdFNwZWNpZmllcihhLCBiKSB9XG4gIF07XG5cbiAgY29uc3QgY29kZWdlbiA9IHZlZ2FFeHByZXNzaW9uLmNvZGVnZW4oe1xuICAgIHdoaXRlbGlzdDogW1wiZGF0dW1cIl0uY29uY2F0KE9iamVjdC5rZXlzKHNpZ25hbCB8fCB7fSkpLFxuICAgIGdsb2JhbHZhcjogXCJnbG9iYWxcIlxuICB9KTtcblxuXG4gIFZFR0FfRlVOQ1RJT05TLmZvckVhY2goZm5EZWYgPT4ge1xuICAgIGNvZGVnZW4uZnVuY3Rpb25zW2ZuRGVmLm5hbWVdID0gZm5EZWYubmFtZTtcbiAgfSk7XG4gIGNvbnN0IGV4dHJhRnVuY3Rpb25zID0gVkVHQV9GVU5DVElPTlMubWFwKGZuRGVmID0+IGZuRGVmLmZuKTtcbiAgY29uc3QgZXh0cmFGdW5jdGlvbk5hbWVzID0gVkVHQV9GVU5DVElPTlMubWFwKGZuRGVmID0+IGZuRGVmLm5hbWUpO1xuXG4gIGNvbnN0IGNvZGVnZW5WYWwgPSBjb2RlZ2VuKHZlZ2FFeHByZXNzaW9uLnBhcnNlKHNpZ25hbFZhbCkpO1xuXG4gIGNvbnN0IGZuID0gRnVuY3Rpb24oXG4gICAgXCJkYXR1bVwiLFxuICAgIC4uLk9iamVjdC5rZXlzKHNpZ25hbCB8fCB7fSksXG4gICAgLi4uZXh0cmFGdW5jdGlvbk5hbWVzLFxuICAgIGByZXR1cm4gKCR7Y29kZWdlblZhbC5jb2RlfSlgXG4gICk7XG4gIHJldHVybiBmbihcbiAgICBkYXR1bSxcbiAgICAuLi5PYmplY3Qua2V5cyhzaWduYWwgfHwge30pLm1hcChrZXkgPT4gc2lnbmFsW2tleV0pLFxuICAgIC4uLmV4dHJhRnVuY3Rpb25zXG4gICk7XG5cbn0iLCJpbXBvcnQgKiBhcyBkMyBmcm9tIFwiZDNcIjtcbmltcG9ydCB7IGZsYXR0ZW4gfSBmcm9tIFwiLi4vdXRpbC91dGlsLmpzXCI7XG5pbXBvcnQgeyBnZXRFYXNlRm4gfSBmcm9tIFwiLi91dGlsXCI7XG5cbmNvbnN0IE9SREVSID0ge1xuICBhc2NlbmRpbmc6IGQzLmFzY2VuZGluZyxcbiAgZGVzY2VuZGluZzogZDMuZGVzY2VuZGluZ1xufTtcblxuZnVuY3Rpb24gZ2V0T3JkZXJGbihpc051bWJlciwgb3JkZXIpIHtcbiAgaWYgKGlzTnVtYmVyICYmIG9yZGVyKSB7XG4gICAgcmV0dXJuIChhLCBiKSA9PiBPUkRFUltvcmRlcl0oTnVtYmVyKGEpLCBOdW1iZXIoYikpO1xuICB9XG4gIHJldHVybiBPUkRFUltvcmRlcl07XG59XG5cbmZ1bmN0aW9uIHN0YWdnZXJlZFRpbWluZyhzdGFnZ2VyaW5nLCBkYXRhLCBkdXJhdGlvbikge1xuICBsZXQgTjtcbiAgbGV0IGdyb3VwZWQ7XG4gIGNvbnN0IGRhdGFXaXRoVGltaW5nID0gZGF0YS5tYXAoKGQsIGkpID0+IHtcbiAgICByZXR1cm4geyAuLi5kLCBfX3N0YWdnZXJpbmdfaWRfXzogaSB9O1xuICB9KTtcbiAgY29uc3Qgc3ViU3RhZ2dlcmluZyA9IHN0YWdnZXJpbmcuc3RhZ2dlcmluZztcblxuICBjb25zdCBpc051bWJlciA9XG4gICAgc3RhZ2dlcmluZy5ieSAmJlxuICAgIGRhdGFXaXRoVGltaW5nLnJlZHVjZSgoYWNjLCBkKSA9PiB7XG4gICAgICBsZXQgdmFsO1xuICAgICAgaWYgKHR5cGVvZiBzdGFnZ2VyaW5nLmJ5ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHZhbCA9IChkLmluaXRpYWwgfHwgZC5maW5hbClbc3RhZ2dlcmluZy5ieV07XG4gICAgICB9IGVsc2UgaWYgKHN0YWdnZXJpbmcuYnkuaW5pdGlhbCB8fCBzdGFnZ2VyaW5nLmJ5LmZpbmFsKSB7XG4gICAgICAgIGNvbnN0IHdoaWNoID0gc3RhZ2dlcmluZy5ieS5pbml0aWFsID8gXCJpbml0aWFsXCIgOiBcImZpbmFsXCI7XG4gICAgICAgIHZhbCA9ICh3aGljaCA9PT0gXCJpbml0aWFsXCJcbiAgICAgICAgICA/IGQuaW5pdGlhbCB8fCBkLmZpbmFsXG4gICAgICAgICAgOiBkLmZpbmFsIHx8IGQuaW5pdGlhbClbc3RhZ2dlcmluZy5ieVt3aGljaF1dO1xuICAgICAgfVxuICAgICAgcmV0dXJuIChhY2MgPSBhY2MgJiYgKHZhbCAhPT0gdW5kZWZpbmVkID8gIWlzTmFOKE51bWJlcih2YWwpKSA6IHRydWUpKTtcbiAgICB9LCB0cnVlKTtcbiAgaWYgKCFzdGFnZ2VyaW5nLmJ5KSB7XG4gICAgZ3JvdXBlZCA9IGQzXG4gICAgICAubmVzdCgpXG4gICAgICAua2V5KGQgPT4ge1xuICAgICAgICBjb25zdCB2YWwgPSBkLl9fc3RhZ2dlcmluZ19pZF9fO1xuICAgICAgICByZXR1cm4gdmFsID09PSB1bmRlZmluZWQgPyBcIl9fZW1wdHlfX1wiIDogdmFsO1xuICAgICAgfSlcbiAgICAgIC5zb3J0S2V5cyhnZXRPcmRlckZuKHRydWUsIHN0YWdnZXJpbmcub3JkZXIpKVxuICAgICAgLmVudHJpZXMoZGF0YVdpdGhUaW1pbmcpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBzdGFnZ2VyaW5nLmJ5ID09PSBcInN0cmluZ1wiKSB7XG4gICAgZ3JvdXBlZCA9IGQzXG4gICAgICAubmVzdCgpXG4gICAgICAua2V5KGQgPT4ge1xuICAgICAgICBjb25zdCB2YWwgPSAoZC5pbml0aWFsIHx8IGQuZmluYWwpW3N0YWdnZXJpbmcuYnldO1xuICAgICAgICByZXR1cm4gdmFsID09PSB1bmRlZmluZWQgPyBcIl9fZW1wdHlfX1wiIDogdmFsO1xuICAgICAgfSlcbiAgICAgIC5zb3J0S2V5cyhnZXRPcmRlckZuKGlzTnVtYmVyLCBzdGFnZ2VyaW5nLm9yZGVyKSlcbiAgICAgIC5lbnRyaWVzKGRhdGFXaXRoVGltaW5nKTtcbiAgfSBlbHNlIGlmIChzdGFnZ2VyaW5nLmJ5LmluaXRpYWwgfHwgc3RhZ2dlcmluZy5ieS5maW5hbCkge1xuICAgIGNvbnN0IHdoaWNoID0gc3RhZ2dlcmluZy5ieS5pbml0aWFsID8gXCJpbml0aWFsXCIgOiBcImZpbmFsXCI7XG4gICAgZ3JvdXBlZCA9IGQzXG4gICAgICAubmVzdCgpXG4gICAgICAua2V5KGQgPT4ge1xuICAgICAgICBjb25zdCB2YWwgPSAod2hpY2ggPT09IFwiaW5pdGlhbFwiXG4gICAgICAgICAgPyBkLmluaXRpYWwgfHwgZC5maW5hbFxuICAgICAgICAgIDogZC5maW5hbCB8fCBkLmluaXRpYWwpW3N0YWdnZXJpbmcuYnlbd2hpY2hdXTtcbiAgICAgICAgcmV0dXJuIHZhbCA9PT0gdW5kZWZpbmVkID8gXCJfX2VtcHR5X19cIiA6IHZhbDtcbiAgICAgIH0pXG4gICAgICAuc29ydEtleXMoZ2V0T3JkZXJGbihpc051bWJlciwgc3RhZ2dlcmluZy5vcmRlcikpXG4gICAgICAuZW50cmllcyhkYXRhV2l0aFRpbWluZyk7XG4gIH1cblxuICBOID0gZ3JvdXBlZC5sZW5ndGg7XG5cbiAgY29uc3QgZWFzZSA9IGdldEVhc2VGbihzdGFnZ2VyaW5nLmVhc2UgfHwgXCJsaW5lYXJcIikgfHwgZDMuZWFzZUxpbmVhcjtcbiAgY29uc3QgciA9IHN0YWdnZXJpbmcub3ZlcmxhcCA9PT0gdW5kZWZpbmVkID8gMSA6IHN0YWdnZXJpbmcub3ZlcmxhcDtcbiAgY29uc3QgZGVsdGFfZSA9IGkgPT4gZWFzZSgoaSArIDEpIC8gTikgLSBlYXNlKGkgLyBOKTtcbiAgY29uc3QgYWxwaGEgPSAxIC8gKGRlbHRhX2UoMCkgKiByICsgMSAtIHIpO1xuXG4gIGxldCBkdXJhdGlvbnMgPSBuZXcgQXJyYXkoTikuZmlsbCgwKTtcbiAgZHVyYXRpb25zID0gZHVyYXRpb25zLm1hcCgoZCwgaSkgPT4gZGVsdGFfZShpKSAqIGFscGhhICogZHVyYXRpb24pO1xuICBsZXQgZGVsYXlBY2MgPSAwO1xuICBjb25zdCBkZWxheXMgPSBkdXJhdGlvbnMubWFwKChkdXIsIGksIGR1cmF0aW9ucykgPT4ge1xuICAgIGNvbnN0IGN1cnJEZWxheSA9IGRlbGF5QWNjO1xuICAgIGlmIChpIDwgTiAtIDEpIHtcbiAgICAgIGRlbGF5QWNjID0gZGVsYXlBY2MgKyBkdXIgLSBkdXJhdGlvbnNbaSArIDFdICogcjtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnJEZWxheTtcbiAgfSk7XG5cbiAgaWYgKHN1YlN0YWdnZXJpbmcpIHtcbiAgICBjb25zdCB0aW1pbmdzID0gZGVsYXlzLm1hcCgoZCwgaSkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGVsYXk6IGQsXG4gICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbnNbaV1cbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICB0aW1pbmdzLmdyb3VwcyA9IGdyb3VwZWQubWFwKChnLCBpKSA9PiB7XG4gICAgICByZXR1cm4gc3RhZ2dlcmVkVGltaW5nKHN1YlN0YWdnZXJpbmcsIGcudmFsdWVzLCBkdXJhdGlvbnNbaV0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGdldEZsYXR0ZW5UaW1pbmdzKHRpbWluZ3MpO1xuICB9XG4gIGdyb3VwZWQuZm9yRWFjaCgoZ3JvdXAsIGkpID0+IHtcbiAgICBncm91cC52YWx1ZXMuZm9yRWFjaChkYXR1bSA9PiB7XG4gICAgICBkYXR1bS5kZWxheSA9IGRlbGF5c1tpXTtcbiAgICAgIGRhdHVtLmR1cmF0aW9uID0gZHVyYXRpb25zW2ldO1xuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gZGF0YVdpdGhUaW1pbmc7XG59XG5cbmZ1bmN0aW9uIGdldEZsYXR0ZW5UaW1pbmdzKHRpbWluZ3MpIHtcbiAgaWYgKCF0aW1pbmdzLmdyb3Vwcykge1xuICAgIHJldHVybiB0aW1pbmdzO1xuICB9XG4gIHJldHVybiBmbGF0dGVuKFxuICAgIHRpbWluZ3MubWFwKChnX3QsIGkpID0+IHtcbiAgICAgIHJldHVybiBnZXRGbGF0dGVuVGltaW5ncyh0aW1pbmdzLmdyb3Vwc1tpXSkubWFwKHQgPT4ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgdCwgeyBkZWxheTogdC5kZWxheSArIGdfdC5kZWxheSB9KTtcbiAgICAgIH0pO1xuICAgIH0pXG4gICk7XG59XG5cbmV4cG9ydCB7IHN0YWdnZXJlZFRpbWluZyB9O1xuIiwiaW1wb3J0IHsgc3RhZ2dlcmVkVGltaW5nIH0gZnJvbSBcIi4vc3RhZ2dlcmluZ1wiO1xuXG5mdW5jdGlvbiBjb21wdXRlVGltaW5nKGluaXRpYWxEYXRhLCBmaW5hbERhdGEsIHN0ZXBUaW1pbmcsIGpvaW5LZXksIGpvaW5TZXQpIHtcbiAgbGV0IHRpbWluZ3MgPSBpbml0aWFsRGF0YS5tYXAoKGRfaSwgaSkgPT4ge1xuICAgIGNvbnN0IGtleSA9IGpvaW5LZXkoZF9pLCBpLCBcImluaXRpYWxcIik7XG4gICAgY29uc3QgZm91bmQgPSBmaW5hbERhdGEuZmluZCgoZF9mLCBqKSA9PiBrZXkgPT09IGpvaW5LZXkoZF9mLCBqLCBcImZpbmFsXCIpKTtcbiAgICByZXR1cm4ge1xuICAgICAgaW5pdGlhbDogZF9pLmRhdHVtLFxuICAgICAgZmluYWw6IGZvdW5kID8gZm91bmQuZGF0dW0gOiBudWxsLFxuICAgICAgc2V0OiBmb3VuZCA/IFwidXBkYXRlXCIgOiBcImV4aXRcIixcbiAgICAgIGlkOiBrZXksXG4gICAgICBkdXJhdGlvbjogc3RlcFRpbWluZy5kdXJhdGlvbixcbiAgICAgIGRlbGF5OiBzdGVwVGltaW5nLmRlbGF5XG4gICAgfTtcbiAgfSk7XG4gIHRpbWluZ3MgPSB0aW1pbmdzLmNvbmNhdChcbiAgICBmaW5hbERhdGFcbiAgICAgIC5maWx0ZXIoZCA9PiBqb2luU2V0KGQpID09PSBcImVudGVyXCIpXG4gICAgICAubWFwKChkLCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IGtleSA9IGpvaW5LZXkoZCwgaSwgXCJmaW5hbFwiKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpbml0aWFsOiBudWxsLFxuICAgICAgICAgIGZpbmFsOiBkLmRhdHVtLFxuICAgICAgICAgIHNldDogXCJlbnRlclwiLFxuICAgICAgICAgIGlkOiBrZXksXG4gICAgICAgICAgZHVyYXRpb246IHN0ZXBUaW1pbmcuZHVyYXRpb24sXG4gICAgICAgICAgZGVsYXk6IHN0ZXBUaW1pbmcuZGVsYXlcbiAgICAgICAgfTtcbiAgICAgIH0pXG4gICk7XG5cbiAgaWYgKHN0ZXBUaW1pbmcuc3RhZ2dlcmluZykge1xuICAgIHRpbWluZ3MgPSBzdGFnZ2VyZWRUaW1pbmcoXG4gICAgICBzdGVwVGltaW5nLnN0YWdnZXJpbmcsXG4gICAgICB0aW1pbmdzLFxuICAgICAgc3RlcFRpbWluZy5kdXJhdGlvblxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHRpbWluZ3M7XG59XG5cbmZ1bmN0aW9uIGVudW1TdGVwQ29tcHV0ZVRpbWluZyhlbnVtZXJhdG9yLCBzdGVwVGltaW5nKSB7XG4gIC8vIHN0YWdnZXJpbmdcbiAgbGV0IHRpbWluZ3MgPSBlbnVtZXJhdG9yLmFsbEtleXMubWFwKChkLCBpKSA9PiB7XG4gICAgbGV0IGRhdHVtX2kgPSBlbnVtZXJhdG9yLmdldERhdHVtKGQsIDApO1xuICAgIGxldCBkYXR1bV9mID0gZW51bWVyYXRvci5nZXREYXR1bShkLCAwKTtcbiAgICBmb3IgKGxldCBrID0gMTsgayA8IGVudW1lcmF0b3Iuc3RvcE47IGsrKykge1xuICAgICAgZGF0dW1faSA9IGRhdHVtX2kgfHwgZW51bWVyYXRvci5nZXREYXR1bShkLCAwKTtcbiAgICAgIGRhdHVtX2YgPSBlbnVtZXJhdG9yLmdldERhdHVtKGQsIGspIHx8IGRhdHVtX2Y7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGluaXRpYWw6IGRhdHVtX2ksXG4gICAgICBmaW5hbDogZGF0dW1fZixcbiAgICAgIHNldDogXCJ1cGRhdGVcIiwgLy8gVG9kb1xuICAgICAgaWQ6IGksXG4gICAgICBrZXk6IGQsXG4gICAgICBkdXJhdGlvbjogc3RlcFRpbWluZy5kdXJhdGlvbixcbiAgICAgIGRlbGF5OiBzdGVwVGltaW5nLmRlbGF5XG4gICAgfTtcbiAgfSk7XG5cbiAgaWYgKHN0ZXBUaW1pbmcuc3RhZ2dlcmluZykge1xuICAgIHRpbWluZ3MgPSBzdGFnZ2VyZWRUaW1pbmcoXG4gICAgICBzdGVwVGltaW5nLnN0YWdnZXJpbmcsXG4gICAgICB0aW1pbmdzLFxuICAgICAgc3RlcFRpbWluZy5kdXJhdGlvblxuICAgICk7XG4gIH1cbiAgdGltaW5ncyA9IHRpbWluZ3Muc29ydCgoYSwgYikgPT4gYS5pZCAtIGIuaWQpO1xuICByZXR1cm4gdGltaW5ncztcbn1cblxuZXhwb3J0IHsgY29tcHV0ZVRpbWluZywgZW51bVN0ZXBDb21wdXRlVGltaW5nIH07XG4iLCJpbXBvcnQgKiBhcyBkMyBmcm9tIFwiZDNcIjtcbmltcG9ydCB7IGZpbmRBZnRlclNpYmxpbmcsIHByb3BNYXAsIGdldEVhc2VGbiwgZ2V0Sm9pbkluZm8sIGNvbXB1dGVTY2FsZX0gZnJvbSBcIi4uL3V0aWwuanNcIjtcbmltcG9ydCB7IGdldFByb3BWYWwsIGZldGNoQXR0cmlidXRlc30gZnJvbSBcIi4uL2F0dHJpYnV0ZUZldGNoZXJcIjtcbmltcG9ydCB7IGdldFN0eWxlIH0gZnJvbSBcIi4uL3ZlZ2EtcmVuZGVyLXV0aWwuanNcIjtcbmltcG9ydCB7IGNvbXB1dGVUaW1pbmcsIGVudW1TdGVwQ29tcHV0ZVRpbWluZyB9IGZyb20gXCIuLi90aW1pbmdzXCI7XG5cbmZ1bmN0aW9uIG1hcmtJbnRlcnBvbGF0ZShyYXdJbmZvLCBzdGVwLCB0YXJnZXRFbG0pIHtcbiAgY29uc3Qgam9pbktleSA9IChkLCBpLCBpbml0aWFsT3JGaW5hbCkgPT4ge1xuICAgIHJldHVybiBkLl9fZ2VtaW5pX18gP1xuICAgICAgZ2V0Sm9pbkluZm8oZCwgaSwgc3RlcCwgXCJqb2luS2V5XCIpIDpcbiAgICAgIChcbiAgICAgICAgdHlwZW9mKHN0ZXAuY29tcHV0ZURhdHVtSWQpID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IHN0ZXAuY29tcHV0ZURhdHVtSWQoZCwgaSlcbiAgICAgICAgICA6IHN0ZXAuY29tcHV0ZURhdHVtSWRbaW5pdGlhbE9yRmluYWwgfHwgXCJpbml0aWFsXCJdKGQsIGkpXG4gICAgICApO1xuICB9OyBjb25zdCBqb2luU2V0ID0gKGQsIGkpID0+IHtcbiAgICByZXR1cm4gZC5fX2dlbWluaV9fID8gZ2V0Sm9pbkluZm8oZCwgaSwgc3RlcCwgXCJhbmltU2V0XCIpIDogdW5kZWZpbmVkO1xuICB9O1xuXG4gIGNvbnN0IGFuaW1WaXMgPSB0YXJnZXRFbG07XG4gIGNvbnN0IGVWaWV3ID0gcmF3SW5mby5lVmlzLnZpZXc7XG5cbiAgY29uc3QgTUFSS19BVFRSUyA9IHtcbiAgICByZWN0OiBbXCJyZWN0XCJdLFxuICAgIHN5bWJvbDogW1wic3ltYm9sXCJdLFxuICAgIHJ1bGU6IFtcInJ1bGVcIl0sXG4gICAgdGV4dDogW1widGV4dFwiLCBcImFsaWduXCJdXG4gIH07XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3QgZG9uZSA9IGRvbmVNYWtlcigpO1xuICAgIGNvbnN0IHRpbWluZ3MgPSBjb21wdXRlVGltaW5nKFxuICAgICAgc3RlcC5jdXJyRGF0YSxcbiAgICAgIHN0ZXAubmV4dERhdGEsXG4gICAgICBzdGVwLnRpbWluZyxcbiAgICAgIGpvaW5LZXksXG4gICAgICBqb2luU2V0XG4gICAgKTtcbiAgICBjb25zdCB7XG4gICAgICBjaGFuZ2UsXG4gICAgICBtYXJrdHlwZXMsXG4gICAgICBzY2FsZXMsXG4gICAgICBlbmNvZGVzLFxuICAgICAgc2lnbmFsc1xuICAgIH0gPSBzdGVwO1xuXG4gICAgY29uc3QgaXNBZGQgPSAhY2hhbmdlLmluaXRpYWwgJiYgISFjaGFuZ2UuZmluYWwsXG4gICAgICBpc1JlbW92ZSA9ICEhY2hhbmdlLmluaXRpYWwgJiYgIWNoYW5nZS5maW5hbDtcbiAgICAvLyBpZiAoaXNWYWxpZE1hcmt0eXBlKG1hcmt0eXBlcy5pbml0aWFsKSAmJiBpc1ZhbGlkTWFya3R5cGUobWFya3R5cGVzLmZpbmFsKSAmJiBtYXJrdHlwZXMuaW5pdGlhbCAhPT0gbWFya3R5cGVzLmZpbmFsKSB7XG4gICAgLy8gICBpc0FkZCA9IGlzUmVtb3ZlID0gdHJ1ZTtcbiAgICAvLyB9XG4gICAgY29uc3QgZWFzZUZuID0gZ2V0RWFzZUZuKHN0ZXAudGltaW5nLmVhc2UpO1xuXG4gICAgLy8gbGV0IGRvVXBkYXRlID0gICFpc1JlbW92ZSAmJiAhaXNBZGQgJiYgKGNoYW5nZS5lbmNvZGUgIT09IGZhbHNlKSxcbiAgICAvLyAgIGRvRW50ZXIgPSAhaXNSZW1vdmUgJiYgKGlzQWRkIHx8IGNoYW5nZS5lbmNvZGUgIT09IGZhbHNlKSxcbiAgICAvLyAgIGRvRXhpdCA9ICFpc0FkZCAmJiAoaXNSZW1vdmUgfHwgY2hhbmdlLmVuY29kZSAhPT0gZmFsc2UpO1xuXG4gICAgLy8gaWYgKGNoYW5nZS5lbmNvZGUpIHtcbiAgICAvLyAgIGRvVXBkYXRlID0gY2hhbmdlLmVuY29kZS51cGRhdGUgPT09IGZhbHNlID8gZmFsc2UgOiBkb1VwZGF0ZTtcbiAgICAvLyAgIGRvRW50ZXIgPSBjaGFuZ2UuZW5jb2RlLmVudGVyID09PSBmYWxzZSA/IGZhbHNlIDogZG9FbnRlcjtcbiAgICAvLyAgIGRvRXhpdCA9IGNoYW5nZS5lbmNvZGUuZXhpdCA9PT0gZmFsc2UgPyBmYWxzZSA6IGRvRXhpdDtcbiAgICAvLyB9XG4gICAgLy8gZG9FeGl0ID0gdHJ1ZTtcbiAgICAvLyBkb0VudGVyID0gdHJ1ZTtcbiAgICBsZXQgbWFya3R5cGU7XG5cbiAgICBpZiAoaXNSZW1vdmUpIHtcbiAgICAgIG1hcmt0eXBlID0gbWFya3R5cGVzLmluaXRpYWw7XG4gICAgfSBlbHNlIGlmIChpc0FkZCkge1xuICAgICAgbWFya3R5cGUgPSBtYXJrdHlwZXMuZmluYWw7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIG1hcmt0eXBlcy5pbml0aWFsICYmXG4gICAgICBtYXJrdHlwZXMuZmluYWwgJiZcbiAgICAgIG1hcmt0eXBlcy5pbml0aWFsICE9PSBtYXJrdHlwZXMuZmluYWxcbiAgICApIHtcbiAgICAgIGlmIChjaGFuZ2UubWFya3R5cGUgPT09IGZhbHNlKSB7XG4gICAgICAgIG1hcmt0eXBlID0gbWFya3R5cGVzLmluaXRpYWw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtYXJrdHlwZSA9IG1hcmt0eXBlcy5maW5hbDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbWFya3R5cGUgPSBtYXJrdHlwZXMuaW5pdGlhbCB8fCBtYXJrdHlwZXMuZmluYWw7XG4gICAgfVxuXG4gICAgY29uc3Qgc3ZnRWxtVHlwZSA9IGdldFN2Z0VsbVR5cGUobWFya3R5cGUpO1xuICAgIGNvbnN0IHN2Z0VsbVR5cGVzID0ge1xuICAgICAgaW5pdGlhbDogZ2V0U3ZnRWxtVHlwZShtYXJrdHlwZXMuaW5pdGlhbCksXG4gICAgICBmaW5hbDogZ2V0U3ZnRWxtVHlwZShtYXJrdHlwZXMuZmluYWwpXG4gICAgfTtcblxuICAgIGxldCBtYXJrcyA9IGQzLnNlbGVjdChgJHthbmltVmlzICB9IC5tYXJrLSR7bWFya3R5cGV9LnJvbGUtbWFyay4ke2NoYW5nZS5jb21wTmFtZX1gKTtcblxuXG4gICAgaWYgKFxuICAgICAgaXNBZGQgfHxcbiAgICAgIChtYXJrdHlwZXMuaW5pdGlhbCAhPT0gbWFya3R5cGVzLmZpbmFsICYmXG4gICAgICAgIGlzVmFsaWRNYXJrdHlwZShtYXJrdHlwZXMuZmluYWwpKVxuICAgICkge1xuICAgICAgY29uc3Qgc2liID0gZmluZEFmdGVyU2libGluZyhlVmlldy5zY2VuZWdyYXBoKCkucm9vdCwgY2hhbmdlLmNvbXBOYW1lKTtcblxuICAgICAgbWFya3MgPSBhZGRNYXJrKFxuICAgICAgICBkMy5zZWxlY3QoYCR7YW5pbVZpcyAgfSAuJHtjaGFuZ2UuZmluYWwucGFyZW50Lm5hbWV9ID4gZyA+IGdgKSxcbiAgICAgICAgY2hhbmdlLmZpbmFsLFxuICAgICAgICBzaWIgPyBgLiR7c2liLm5hbWV9YCA6IHVuZGVmaW5lZFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoc3RlcC5lbnVtZXJhdG9yKSB7XG4gICAgICBpZiAoIWNoYW5nZS5kYXRhKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJDYW5ub3QgYXBwbHkgZW51bWVyYXRvciBmb3IgYSBtYXJrIGludGVycG9sYXRpb24gd2l0aG91dCBkYXRhIGNoYW5nZSFcIlxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29uc3Qge2VudW1lcmF0b3J9ID0gc3RlcDtcbiAgICAgIGxldCBmaW5hbFNjYWxlTmFtZXMgPSBbXTtcbiAgICAgIGlmIChjaGFuZ2Uuc2NhbGUgPT09IHRydWUpIHtcbiAgICAgICAgZmluYWxTY2FsZU5hbWVzID0gT2JqZWN0LmtleXMoZVZpZXcuX3J1bnRpbWUuc2NhbGVzKTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShjaGFuZ2Uuc2NhbGUpKSB7XG4gICAgICAgIGZpbmFsU2NhbGVOYW1lcyA9IGNoYW5nZS5zY2FsZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZ2V0VmFsdWVzID0ge1xuICAgICAgICB1cGRhdGU6IHtcbiAgICAgICAgICBpbml0aWFsKGF0dHIsIGdldFNjYWxlcywgZCl7XG5cbiAgICAgICAgICAgIGxldCBjb21wdXRlZFNjYWxlcyA9IGNvbXB1dGVTY2FsZShzY2FsZXMsIGZpbmFsU2NhbGVOYW1lcywgZ2V0U2NhbGVzKTtcbiAgICAgICAgICAgIHJldHVybiBnZXRQcm9wVmFsLmJpbmQodGhpcykoXG4gICAgICAgICAgICAgIGF0dHIsXG4gICAgICAgICAgICAgIGVuY29kZXMuaW5pdGlhbC51cGRhdGUsXG4gICAgICAgICAgICAgIGNvbXB1dGVkU2NhbGVzLmluaXRpYWwsXG4gICAgICAgICAgICAgIHNpZ25hbHMuaW5pdGlhbCxcbiAgICAgICAgICAgICAgZCk7XG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGZpbmFsOiBmdW5jdGlvbihhdHRyLCBnZXRTY2FsZXMsIGQpe1xuICAgICAgICAgICAgY29uc3QgY29tcHV0ZWRTY2FsZXMgPSBjb21wdXRlU2NhbGUoc2NhbGVzLCBmaW5hbFNjYWxlTmFtZXMsIGdldFNjYWxlcyk7XG4gICAgICAgICAgICByZXR1cm4gZ2V0UHJvcFZhbC5iaW5kKHRoaXMpKFxuICAgICAgICAgICAgICBhdHRyLFxuICAgICAgICAgICAgICBlbmNvZGVzLmZpbmFsLnVwZGF0ZSxcbiAgICAgICAgICAgICAgY29tcHV0ZWRTY2FsZXMuZmluYWwsXG4gICAgICAgICAgICAgIHNpZ25hbHMuaW5pdGlhbCxcbiAgICAgICAgICAgICAgZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGN1c3RvbShhdHRyLCBnZXRTY2FsZXMsIGRfaSwgZF9mKSB7XG4gICAgICAgICAgICBsZXQgZGF0dW0gPSB7XG4gICAgICAgICAgICAgIGluaXRpYWw6IGRfaSxcbiAgICAgICAgICAgICAgZmluYWw6IGRfZlxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgbGV0IGNvbXB1dGVkU2NhbGVzID0gY29tcHV0ZVNjYWxlKHNjYWxlcywgZmluYWxTY2FsZU5hbWVzLCBnZXRTY2FsZXMpO1xuICAgICAgICAgICAgcmV0dXJuIGdldFByb3BWYWwuYmluZCh0aGlzKShcbiAgICAgICAgICAgICAgYXR0cixcbiAgICAgICAgICAgICAgZW5jb2Rlcy5maW5hbC51cGRhdGUsXG4gICAgICAgICAgICAgIGNvbXB1dGVkU2NhbGVzLFxuICAgICAgICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICAgICAgICBkYXR1bSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlbnRlcjoge1xuICAgICAgICAgIGluaXRpYWwoYXR0ciwgZ2V0U2NhbGVzLCBkKXtcblxuICAgICAgICAgICAgbGV0IGNvbXB1dGVkU2NhbGVzID0gY29tcHV0ZVNjYWxlKHNjYWxlcywgZmluYWxTY2FsZU5hbWVzLCBnZXRTY2FsZXMpO1xuICAgICAgICAgICAgcmV0dXJuIGdldFByb3BWYWwuYmluZCh0aGlzKShcbiAgICAgICAgICAgICAgYXR0cixcbiAgICAgICAgICAgICAgZW5jb2Rlcy5pbml0aWFsLmVudGVyLFxuICAgICAgICAgICAgICB7cHJpbWFyeTogY29tcHV0ZWRTY2FsZXMuaW5pdGlhbCwgc2Vjb25kYXJ5OiBjb21wdXRlZFNjYWxlcy5maW5hbH0sXG4gICAgICAgICAgICAgIHNpZ25hbHMuaW5pdGlhbCxcbiAgICAgICAgICAgICAgZCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBmaW5hbChhdHRyLCBnZXRTY2FsZXMsIGQpe1xuICAgICAgICAgICAgbGV0IGNvbXB1dGVkU2NhbGVzID0gY29tcHV0ZVNjYWxlKHNjYWxlcywgZmluYWxTY2FsZU5hbWVzLCBnZXRTY2FsZXMpO1xuICAgICAgICAgICAgcmV0dXJuIGdldFByb3BWYWwuYmluZCh0aGlzKShcbiAgICAgICAgICAgICAgYXR0cixcbiAgICAgICAgICAgICAgZW5jb2Rlcy5maW5hbC5lbnRlcixcbiAgICAgICAgICAgICAgY29tcHV0ZWRTY2FsZXMuZmluYWwsXG4gICAgICAgICAgICAgIHNpZ25hbHMuaW5pdGlhbCxcbiAgICAgICAgICAgICAgZCk7XG5cbiAgICAgICAgICB9LFxuICAgICAgICAgIGN1c3RvbShhdHRyLCBnZXRTY2FsZXMsIGRfaSwgZF9mKXtcbiAgICAgICAgICAgIGxldCBkYXR1bSA9IHtcbiAgICAgICAgICAgICAgaW5pdGlhbDogZF9pLFxuICAgICAgICAgICAgICBmaW5hbDogZF9mXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBsZXQgY29tcHV0ZWRTY2FsZXMgPSBjb21wdXRlU2NhbGUoc2NhbGVzLCBmaW5hbFNjYWxlTmFtZXMsIGdldFNjYWxlcyk7XG4gICAgICAgICAgICByZXR1cm4gZ2V0UHJvcFZhbC5iaW5kKHRoaXMpKFxuICAgICAgICAgICAgICBhdHRyLFxuICAgICAgICAgICAgICBlbmNvZGVzLmZpbmFsLmVudGVyLFxuICAgICAgICAgICAgICBjb21wdXRlZFNjYWxlcyxcbiAgICAgICAgICAgICAgc2lnbmFscy5maW5hbCxcbiAgICAgICAgICAgICAgZGF0dW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXhpdDoge1xuICAgICAgICAgIGluaXRpYWwoYXR0ciwgZ2V0U2NhbGVzLCBkKXtcblxuICAgICAgICAgICAgbGV0IGNvbXB1dGVkU2NhbGVzID0gY29tcHV0ZVNjYWxlKHNjYWxlcywgZmluYWxTY2FsZU5hbWVzLCBnZXRTY2FsZXMpO1xuICAgICAgICAgICAgcmV0dXJuIGdldFByb3BWYWwuYmluZCh0aGlzKShcbiAgICAgICAgICAgICAgYXR0cixcbiAgICAgICAgICAgICAgZW5jb2Rlcy5pbml0aWFsLmV4aXQsXG4gICAgICAgICAgICAgIGNvbXB1dGVkU2NhbGVzLmluaXRpYWwsXG4gICAgICAgICAgICAgIHNpZ25hbHMuaW5pdGlhbCxcbiAgICAgICAgICAgICAgZCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBmaW5hbChhdHRyLCBnZXRTY2FsZXMsIGQpe1xuICAgICAgICAgICAgbGV0IGNvbXB1dGVkU2NhbGVzID0gY29tcHV0ZVNjYWxlKHNjYWxlcywgZmluYWxTY2FsZU5hbWVzLCBnZXRTY2FsZXMpO1xuICAgICAgICAgICAgcmV0dXJuIGdldFByb3BWYWwuYmluZCh0aGlzKShcbiAgICAgICAgICAgICAgYXR0cixcbiAgICAgICAgICAgICAgZW5jb2Rlcy5maW5hbC5leGl0LFxuICAgICAgICAgICAgICB7cHJpbWFyeTogY29tcHV0ZWRTY2FsZXMuZmluYWwsIHNlY29uZGFyeTogY29tcHV0ZWRTY2FsZXMuaW5pdGlhbH0sXG4gICAgICAgICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgICAgICAgIGQpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgY3VzdG9tKGF0dHIsIGdldFNjYWxlcywgZF9pLCBkX2Ype1xuICAgICAgICAgICAgbGV0IGRhdHVtID0ge1xuICAgICAgICAgICAgICBpbml0aWFsOiBkX2ksXG4gICAgICAgICAgICAgIGZpbmFsOiBkX2ZcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxldCBjb21wdXRlZFNjYWxlcyA9IGNvbXB1dGVTY2FsZShzY2FsZXMsIGZpbmFsU2NhbGVOYW1lcywgZ2V0U2NhbGVzKTtcbiAgICAgICAgICAgIHJldHVybiBnZXRQcm9wVmFsLmJpbmQodGhpcykoXG4gICAgICAgICAgICAgIGF0dHIsXG4gICAgICAgICAgICAgIGVuY29kZXMuZmluYWwuZXhpdCxcbiAgICAgICAgICAgICAgY29tcHV0ZWRTY2FsZXMsXG4gICAgICAgICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgICAgICAgIGRhdHVtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICAvLyBiaW5kIGFsbEtleXNcbiAgICAgIGNvbnN0IG5ld0JvdW5kTWFya3MgPSBtYXJrc1xuICAgICAgICAuc2VsZWN0QWxsKHN2Z0VsbVR5cGUpXG4gICAgICAgIC5kYXRhKGVudW1lcmF0b3IuYWxsS2V5cywgZCA9PiBkKTtcbiAgICAgIG5ld0JvdW5kTWFya3MuZXhpdCgpLnJlbW92ZSgpO1xuICAgICAgbmV3Qm91bmRNYXJrcy5lbnRlcigpLmFwcGVuZChzdmdFbG1UeXBlKTtcblxuICAgICAgY29uc3QgaW5pdGlhbE1hcmtzID0gbWFya3NcbiAgICAgICAgLnNlbGVjdEFsbChzdmdFbG1UeXBlKVxuICAgICAgICAuZmlsdGVyKGlkID0+IFtcInVwZGF0ZVwiLCBcImV4aXRcIl0uaW5kZXhPZihlbnVtZXJhdG9yLnNldChpZCwgMCkpID49IDApO1xuICAgICAgY29uc3QgYWxsUHJvcHMgPSBNQVJLX0FUVFJTW21hcmt0eXBlXS5yZWR1Y2UoKGFjYywgcHJvcCkgPT4ge1xuICAgICAgICByZXR1cm4gYWNjLmNvbmNhdChwcm9wTWFwKHByb3ApKTtcbiAgICAgIH0sIFtdKTtcbiAgICAgIGFsbFByb3BzLmZvckVhY2gocCA9PiB7XG4gICAgICAgIGlmIChwLnR5cGUgPT09IFwiYXR0clR3ZWVuXCIpIHtcbiAgICAgICAgICBjb25zdCB0ZW1wUCA9IE9iamVjdC5hc3NpZ24oe30sIHAsIHsgdHlwZTogXCJhdHRyXCIgfSk7XG4gICAgICAgICAgaW5pdGlhbE1hcmtzW3RlbXBQLnR5cGVdKGdldFN0eWxlKHRlbXBQLnZhbCksIGlkID0+XG4gICAgICAgICAgICBlbnVtZXJhdG9yLmdldFByb3BWYWwodGVtcFAsIGdldFZhbHVlcywgMCwgaWQpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChwLnR5cGUgPT09IFwidGV4dFwiKSB7XG4gICAgICAgICAgaW5pdGlhbE1hcmtzW3AudHlwZV0oaWQgPT5cbiAgICAgICAgICAgIGVudW1lcmF0b3IuZ2V0UHJvcFZhbChwLCBnZXRWYWx1ZXMsIDAsIGlkKVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW5pdGlhbE1hcmtzW3AudHlwZV0oZ2V0U3R5bGUocC52YWwpLCBpZCA9PlxuICAgICAgICAgICAgZW51bWVyYXRvci5nZXRQcm9wVmFsKHAsIGdldFZhbHVlcywgMCwgaWQpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cblxuXG4gICAgICAvLyBzdGFnZ2VyaW5nXG4gICAgICBjb25zdCB0aW1pbmdzID0gZW51bVN0ZXBDb21wdXRlVGltaW5nKGVudW1lcmF0b3IsIHN0ZXAudGltaW5nKTtcblxuICAgICAgY29uc3QgYW5pbU1hcmtzID0gbWFya3Muc2VsZWN0QWxsKHN2Z0VsbVR5cGUpLnRyYW5zaXRpb24oKTtcblxuICAgICAgYWxsUHJvcHMuZm9yRWFjaChwID0+IHtcbiAgICAgICAgaWYgKHAudHlwZSA9PT0gXCJhdHRyXCIpIHtcbiAgICAgICAgICBhbmltTWFya3MuYXR0clR3ZWVuKHAudmFsLCBmdW5jdGlvbihkKSB7XG4gICAgICAgICAgICByZXR1cm4gZW51bWVyYXRvci5pbnRlcnBvbGF0ZUFsb25nRW51bU1ha2VyKHAsIGdldFZhbHVlcywgdGhpcykoZCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAocC50eXBlID09PSBcImF0dHJUd2VlblwiKSB7XG4gICAgICAgICAgYW5pbU1hcmtzLmF0dHJUd2VlbihwLnZhbCwgZnVuY3Rpb24oZCkge1xuICAgICAgICAgICAgcmV0dXJuIGVudW1lcmF0b3IuaW50ZXJwb2xhdGVBbG9uZ0VudW1NYWtlcihwLCBnZXRWYWx1ZXMsIHRoaXMpKGQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHAudHlwZSA9PT0gXCJ0ZXh0XCIpIHtcbiAgICAgICAgICBhbmltTWFya3MudHdlZW4oXCJ0ZXh0XCIsIGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICAgIGNvbnN0IHRleHRJbnRlcnBvbGF0b3IgPSBlbnVtZXJhdG9yLmludGVycG9sYXRlQWxvbmdFbnVtTWFrZXIoXG4gICAgICAgICAgICAgIHAsXG4gICAgICAgICAgICAgIGdldFZhbHVlcyxcbiAgICAgICAgICAgICAgdGhpc1xuICAgICAgICAgICAgKShkKTtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKFwidGV4dFwiLCB0ZXh0SW50ZXJwb2xhdG9yKHQpKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAocC50eXBlID09PSBcInN0eWxlXCIpIHtcbiAgICAgICAgICBhbmltTWFya3Muc3R5bGVUd2VlbihnZXRTdHlsZShwLnZhbCksIGQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGVudW1lcmF0b3IuaW50ZXJwb2xhdGVBbG9uZ0VudW1NYWtlcihwLCBnZXRWYWx1ZXMsIHRoaXMpKGQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gaW50ZXJwb2xhdGUgdGhlbVxuICAgICAgYW5pbU1hcmtzXG4gICAgICAgIC5kdXJhdGlvbigoZCwgaSkgPT4gdGltaW5nc1tpXS5kdXJhdGlvbilcbiAgICAgICAgLmRlbGF5KChkLCBpKSA9PiB0aW1pbmdzW2ldLmRlbGF5KVxuICAgICAgICAuZWFzZShlYXNlRm4pXG4gICAgICAgIC5lbmQoKVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgbWFya3Muc2VsZWN0QWxsKHN2Z0VsbVR5cGUpLmRhdGEoc3RlcC5uZXh0RGF0YSk7XG4gICAgICAgICAgZG9uZShcImFsbFwiLCAoKSA9PiB7cmVzb2x2ZSgpO30pO1xuICAgICAgICB9KTtcblxuXG5cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgdGhlcmUgaXMgYSBtYXJrdHlwZSBjaGFuZ2UgYmV0d2VlbiBkaWZmZXJlbnQgc3ZnRWxtVHlwZXNcbiAgICAgIGlmIChtYXJrdHlwZXMuaW5pdGlhbCAhPT0gbWFya3R5cGVzLmZpbmFsKSB7XG4gICAgICAgIGxldCBhbmltTWFya3NJOyBsZXQgYW5pbU1hcmtzRjtcbiAgICAgICAgaWYgKGlzVmFsaWRNYXJrdHlwZShtYXJrdHlwZXMuaW5pdGlhbCkpIHtcbiAgICAgICAgICBjb25zdCBtYXJrcyA9IGQzLnNlbGVjdChcbiAgICAgICAgICAgIGFuaW1WaXMgKyBgIC5tYXJrLSR7bWFya3R5cGVzLmluaXRpYWx9LnJvbGUtbWFyay4ke2NoYW5nZS5jb21wTmFtZX1gXG4gICAgICAgICAgKTtcbiAgICAgICAgICBhbmltTWFya3NJID0gbWFya3Muc2VsZWN0QWxsKHN2Z0VsbVR5cGVzLmluaXRpYWwpO1xuICAgICAgICAgIGNvbnN0IG5ld1RpbWluZ3MgPVxuICAgICAgICAgICAgbWFya3R5cGVzLmZpbmFsICYmICFpc1ZhbGlkTWFya3R5cGUobWFya3R5cGVzLmZpbmFsKVxuICAgICAgICAgICAgICA/IGNvbXB1dGVUaW1pbmcoXG4gICAgICAgICAgICAgICAgc3RlcC5jdXJyRGF0YSxcbiAgICAgICAgICAgICAgICBzdGVwLnVucGFja2VkRGF0YSxcbiAgICAgICAgICAgICAgICBzdGVwLnRpbWluZyxcbiAgICAgICAgICAgICAgICBqb2luS2V5LFxuICAgICAgICAgICAgICAgIGpvaW5TZXRcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IHRpbWluZ3M7XG4gICAgICAgICAgY29uc3QgcHJldkRhdGEgPSBkMy5sb2NhbCgpO1xuICAgICAgICAgIGxldCBuZXh0RGF0YSA9XG4gICAgICAgICAgICAgIG1hcmt0eXBlcy5maW5hbCAmJiAhaXNWYWxpZE1hcmt0eXBlKG1hcmt0eXBlcy5maW5hbClcbiAgICAgICAgICAgICAgICA/IHN0ZXAudW5wYWNrZWREYXRhXG4gICAgICAgICAgICAgICAgOiBzdGVwLm5leHREYXRhO1xuXG4gICAgICAgICAgaWYgKGNoYW5nZS5kYXRhIHx8IGlzQWRkIHx8IGlzUmVtb3ZlKSB7XG4gICAgICAgICAgICBhbmltTWFya3NJID0gYW5pbU1hcmtzSS5kYXRhKHN0ZXAuY3VyckRhdGEpO1xuICAgICAgICAgICAgYW5pbU1hcmtzSS5lYWNoKGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICAgICAgcHJldkRhdGEuc2V0KHRoaXMsIGQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhbmltTWFya3NJID0gYW5pbU1hcmtzSS5kYXRhKG5leHREYXRhLCAoZCwgaSkgPT5cbiAgICAgICAgICAgICAgam9pbktleShkLCBpLCBcImluaXRpYWxcIilcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFuaW1NYXJrc0kuZWFjaChmdW5jdGlvbihkKSB7XG4gICAgICAgICAgICAgIHByZXZEYXRhLnNldCh0aGlzLCBkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGV4aXQoXG4gICAgICAgICAgICBuZXdUaW1pbmdzLFxuICAgICAgICAgICAgYW5pbU1hcmtzSSxcbiAgICAgICAgICAgIG1hcmt0eXBlcy5pbml0aWFsLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpbml0aWFsOiBlbmNvZGVzLmluaXRpYWwuZXhpdCxcbiAgICAgICAgICAgICAgZmluYWw6IGVuY29kZXMuZmluYWwuZXhpdFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNpZ25hbHMsXG4gICAgICAgICAgICBwcmV2RGF0YVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB1cGRhdGUoXG4gICAgICAgICAgICBuZXdUaW1pbmdzLFxuICAgICAgICAgICAgYW5pbU1hcmtzSSxcbiAgICAgICAgICAgIG1hcmt0eXBlcy5pbml0aWFsLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpbml0aWFsOiBlbmNvZGVzLmluaXRpYWwudXBkYXRlLFxuICAgICAgICAgICAgICBmaW5hbDogZW5jb2Rlcy5pbml0aWFsLmludGVybWVkaWF0ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIGVuY29kZSxcbiAgICAgICAgICAgIHNpZ25hbHMsXG4gICAgICAgICAgICBwcmV2RGF0YSxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRvbmUoXCJleGl0XCIsICgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1ZhbGlkTWFya3R5cGUobWFya3R5cGVzLmZpbmFsKSkge1xuICAgICAgICAgIGNvbnN0IHByZXZEYXRhID0gZDMubG9jYWwoKTtcbiAgICAgICAgICBsZXQgbmV3VGltaW5ncyA9IG1hcmt0eXBlcy5pbml0aWFsICYmICFpc1ZhbGlkTWFya3R5cGUobWFya3R5cGVzLmluaXRpYWwpID8gY29tcHV0ZVRpbWluZyhzdGVwLnVucGFja2VkRGF0YSwgc3RlcC5uZXh0RGF0YSwgc3RlcC50aW1pbmcsIGpvaW5LZXksIGpvaW5TZXQpIDogdGltaW5ncztcbiAgICAgICAgICBsZXQgY3VyckRhdGEgPSAhbWFya3R5cGVzLmluaXRpYWxcbiAgICAgICAgICAgID8gW11cbiAgICAgICAgICAgIDogIWlzVmFsaWRNYXJrdHlwZShtYXJrdHlwZXMuaW5pdGlhbClcbiAgICAgICAgICAgICAgPyBzdGVwLnVucGFja2VkRGF0YVxuICAgICAgICAgICAgICA6IGFuaW1NYXJrc0kuZGF0YSgpO1xuICAgICAgICAgIGNvbnN0IG1hcmtzID0gZDMuc2VsZWN0KFxuICAgICAgICAgICAgYW5pbVZpcyArIGAgLm1hcmstJHttYXJrdHlwZXMuZmluYWx9LnJvbGUtbWFyay4ke2NoYW5nZS5jb21wTmFtZX1gXG4gICAgICAgICAgKTtcbiAgICAgICAgICBhbmltTWFya3NGID0gbWFya3NcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoc3ZnRWxtVHlwZXMuZmluYWwpXG4gICAgICAgICAgICAuZmlsdGVyKGQgPT4gIWQpXG4gICAgICAgICAgICAuZGF0YShjdXJyRGF0YSk7XG5cbiAgICAgICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgICAgICBhbmltTWFya3NGLmVudGVyKCkuYXBwZW5kKHN2Z0VsbVR5cGVzLmZpbmFsKSxcbiAgICAgICAgICAgIE1BUktfQVRUUlNbbWFya3R5cGVzLmZpbmFsXSxcbiAgICAgICAgICAgIHsgcHJpbWFyeTogc2NhbGVzLmluaXRpYWwsIHNlY29uZGFyeTogc2NhbGVzLmZpbmFsIH0sXG4gICAgICAgICAgICBzaWduYWxzLmluaXRpYWwsXG4gICAgICAgICAgICBlbmNvZGVzLmZpbmFsLmludGVybWVkaWF0ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgYW5pbU1hcmtzRiA9IG1hcmtzLnNlbGVjdEFsbChzdmdFbG1UeXBlcy5maW5hbCk7XG4gICAgICAgICAgYW5pbU1hcmtzRi5lYWNoKGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICAgIHByZXZEYXRhLnNldCh0aGlzLCBkKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoY2hhbmdlLmRhdGEgfHwgaXNBZGQgfHwgaXNSZW1vdmUpIHtcbiAgICAgICAgICAgIGFuaW1NYXJrc0YgPSBhbmltTWFya3NGLmRhdGEoc3RlcC5uZXh0RGF0YSwgKGQsIGkpID0+XG4gICAgICAgICAgICAgIGpvaW5LZXkoZCwgaSwgXCJmaW5hbFwiKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlbnRlcihuZXdUaW1pbmdzLCBhbmltTWFya3NGLCBtYXJrdHlwZXMuZmluYWwpO1xuICAgICAgICAgIC8vIGZhZGUtaW4gdGhlIG5ldyBtYXJ0eXBlXG4gICAgICAgICAgdXBkYXRlKFxuICAgICAgICAgICAgbmV3VGltaW5ncyxcbiAgICAgICAgICAgIGFuaW1NYXJrc0YsXG4gICAgICAgICAgICBtYXJrdHlwZXMuZmluYWwsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGluaXRpYWw6IGVuY29kZXMuZmluYWwuaW50ZXJtZWRpYXRlLFxuICAgICAgICAgICAgICBmaW5hbDogZW5jb2Rlcy5maW5hbC51cGRhdGVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzaWduYWxzLFxuICAgICAgICAgICAgcHJldkRhdGEsXG4gICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZG9uZShcInVwZGF0ZVwiLCAoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZG9uZShcImVudGVyXCIsICgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGFuaW1NYXJrcyA9IG1hcmtzLnNlbGVjdEFsbChzdmdFbG1UeXBlKTtcbiAgICAgICAgY29uc3QgcHJldkRhdGEgPSBkMy5sb2NhbCgpO1xuICAgICAgICBhbmltTWFya3MuZWFjaChmdW5jdGlvbihkKSB7XG4gICAgICAgICAgcHJldkRhdGEuc2V0KHRoaXMsIGQpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGNoYW5nZS5kYXRhIHx8IGlzQWRkIHx8IGlzUmVtb3ZlKSB7XG4gICAgICAgICAgLy8gbGV0IG5leHREYXRhID0gY2hhbmdlLm1hcmt0eXBlID09PSBmYWxzZSA/IHN0ZXAudW5wYWNrZWREYXRhIDogc3RlcC5uZXh0RGF0YTtcblxuICAgICAgICAgIGlmIChzdGVwLnByZUZldGNoQ3VyckRhdGEpIHtcbiAgICAgICAgICAgIGFuaW1NYXJrcyA9IGFuaW1NYXJrcy5kYXRhKHN0ZXAuY3VyckRhdGEpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGFuaW1NYXJrcyA9IGFuaW1NYXJrcy5kYXRhKHN0ZXAubmV4dERhdGEsIChkLCBpKSA9PiB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhqb2luS2V5KGQsIGkpKTtcbiAgICAgICAgICAgIHJldHVybiBqb2luS2V5KGQsIGkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZW50ZXJcbiAgICAgICAgZW50ZXIodGltaW5ncywgYW5pbU1hcmtzLCBtYXJrdHlwZSk7XG5cbiAgICAgICAgLy8gZXhpdFxuICAgICAgICBleGl0KFxuICAgICAgICAgIHRpbWluZ3MsXG4gICAgICAgICAgYW5pbU1hcmtzLFxuICAgICAgICAgIG1hcmt0eXBlLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGluaXRpYWw6IGVuY29kZXMuaW5pdGlhbC5leGl0LCAvLyBlbmNvZGVzLmZpbmFsLmV4aXQsXG4gICAgICAgICAgICBmaW5hbDogZW5jb2Rlcy5maW5hbC5leGl0XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzaWduYWxzLFxuICAgICAgICAgIHByZXZEYXRhXG4gICAgICAgICk7XG5cbiAgICAgICAgdXBkYXRlKFxuICAgICAgICAgIHRpbWluZ3MsXG4gICAgICAgICAgYW5pbU1hcmtzLFxuICAgICAgICAgIG1hcmt0eXBlLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGluaXRpYWw6IGVuY29kZXMuaW5pdGlhbC51cGRhdGUsIC8vIGVuY29kZXMuZmluYWwudXBkYXRlLFxuICAgICAgICAgICAgZmluYWw6IGVuY29kZXMuZmluYWwudXBkYXRlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzaWduYWxzLFxuICAgICAgICAgIHByZXZEYXRhXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVudGVyKFxuICAgICAgdGltaW5ncyxcbiAgICAgIGFuaW1NYXJrcyxcbiAgICAgIG1hcmt0eXBlLFxuICAgICAgZW5jb2RlSW5pdGlhbCA9IGVuY29kZXMuaW5pdGlhbC5lbnRlcixcbiAgICAgIGVuY29kZSA9IGVuY29kZXMuZmluYWwuZW50ZXJcbiAgICApIHtcbiAgICAgIC8vIGVudGVyXG4gICAgICBsZXQgZW50ZXJJID0gYW5pbU1hcmtzLmVudGVyKCkuYXBwZW5kKGdldFN2Z0VsbVR5cGUobWFya3R5cGUpKTtcbiAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgZW50ZXJJLFxuICAgICAgICBNQVJLX0FUVFJTW21hcmt0eXBlXSxcbiAgICAgICAgLy8gVG9kbzogV2hlbiB1c2luZyB0aGUgZmluYWwgc2NhbGUsIGl0IHNob3VsZCB1c2UgdGhlIGZpbmFsIGVuY29kZSBhcyB3ZWxsLlxuICAgICAgICB7IHByaW1hcnk6IHNjYWxlcy5pbml0aWFsLCBzZWNvbmRhcnk6IHNjYWxlcy5maW5hbCB9LFxuICAgICAgICBzaWduYWxzLmluaXRpYWwsXG4gICAgICAgIHtcbiAgICAgICAgICBwcmltYXJ5OiBlbmNvZGVJbml0aWFsLFxuICAgICAgICAgIHNlY29uZGFyeTogT2JqZWN0LmFzc2lnbih7fSwgZW5jb2RlLCB7IG9wYWNpdHk6IHsgdmFsdWU6IDAgfSB9KVxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICAvLyBJZiB0aGV5IGFyZSBhbHJlYWR5IGVudGVyZWQsXG4gICAgICBpZiAoZW50ZXJJLmRhdGEoKS5sZW5ndGggPD0gMCkge1xuICAgICAgICBlbnRlckkgPSBhbmltTWFya3MuZmlsdGVyKChkLCBpKSA9PiBqb2luU2V0KGQsIGkpID09PSBcImVudGVyXCIpO1xuICAgICAgfVxuICAgICAgaWYgKGVudGVySS5kYXRhKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBpZiAoZG9FbnRlciAmJiBlbnRlckkuZGF0YSgpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3Qgc2V0VHlwZSA9IFwiZmluYWxcIjtcbiAgICAgICAgY29uc3QgZW50ZXJGID0gZW50ZXJJLnRyYW5zaXRpb24oKTtcblxuICAgICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgICAgZW50ZXJGLFxuICAgICAgICAgIE1BUktfQVRUUlNbbWFya3R5cGVdLFxuICAgICAgICAgIHNjYWxlcy5maW5hbCxcbiAgICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGluaXRpYWw6IHtcbiAgICAgICAgICAgICAgcHJpbWFyeTogZW5jb2RlSW5pdGlhbCxcbiAgICAgICAgICAgICAgc2Vjb25kYXJ5OiBPYmplY3QuYXNzaWduKHt9LCBlbmNvZGUsIHsgb3BhY2l0eTogeyB2YWx1ZTogMCB9IH0pXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmluYWw6IGVuY29kZVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICBlbnRlckZcbiAgICAgICAgICAuZHVyYXRpb24oXG4gICAgICAgICAgICAoZCwgaSkgPT5cbiAgICAgICAgICAgICAgdGltaW5ncy5maW5kKHQgPT4gdC5pZCA9PT0gam9pbktleShkLCBpLCBzZXRUeXBlKSkuZHVyYXRpb25cbiAgICAgICAgICApXG4gICAgICAgICAgLmRlbGF5KFxuICAgICAgICAgICAgKGQsIGkpID0+IHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSwgc2V0VHlwZSkpLmRlbGF5XG4gICAgICAgICAgKVxuICAgICAgICAgIC5lYXNlKGVhc2VGbilcbiAgICAgICAgICAuZW5kKClcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKFwiZW50ZXJcIiwgKCkgPT4ge3Jlc29sdmUoKTt9KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvbmUoXCJlbnRlclwiLCAoKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZXhpdCh0aW1pbmdzLCBhbmltTWFya3MsIG1hcmt0eXBlLCBlbmNvZGUsIHNpZ25hbHMsIHByZXZEYXRhKSB7XG4gICAgICAvLyBleGl0XG4gICAgICAvLyBpbml0aWF0ZSBleGl0XG4gICAgICBsZXQgZXhpdEkgPSBhbmltTWFya3MuZXhpdCgpO1xuICAgICAgLy8gSWYgdGhleSBhcmUgYWxyZWFkeSBlbnRlcmVkLFxuICAgICAgaWYgKGV4aXRJLmRhdGEoKS5sZW5ndGggPD0gMCkge1xuICAgICAgICBleGl0SSA9IGFuaW1NYXJrcy5maWx0ZXIoKGQsIGkpID0+IGpvaW5TZXQoZCwgaSkgPT09IFwiZXhpdFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChleGl0SS5kYXRhKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBpZiAoZG9FeGl0ICYmIGV4aXRJLmRhdGEoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHNldFR5cGUgPSBcImluaXRpYWxcIjtcbiAgICAgICAgY29uc3QgZXhpdEYgPSBleGl0SS50cmFuc2l0aW9uKCk7XG5cbiAgICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICAgIGV4aXRGLFxuICAgICAgICAgIE1BUktfQVRUUlNbbWFya3R5cGVdLFxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oe30sIHNjYWxlcywge1xuICAgICAgICAgICAgcHJpbWFyeTogc2NhbGVzLmZpbmFsLFxuICAgICAgICAgICAgc2Vjb25kYXJ5OiBzY2FsZXMuaW5pdGlhbFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHNpZ25hbHMsXG4gICAgICAgICAgZW5jb2RlIHx8IGVuY29kZXMuZmluYWwuZXhpdCxcbiAgICAgICAgICBwcmV2RGF0YVxuICAgICAgICApO1xuXG4gICAgICAgIGV4aXRGXG4gICAgICAgICAgLmR1cmF0aW9uKFxuICAgICAgICAgICAgKGQsIGkpID0+XG4gICAgICAgICAgICAgIHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSwgc2V0VHlwZSkpLmR1cmF0aW9uXG4gICAgICAgICAgKVxuICAgICAgICAgIC5kZWxheShcbiAgICAgICAgICAgIChkLCBpKSA9PiB0aW1pbmdzLmZpbmQodCA9PiB0LmlkID09PSBqb2luS2V5KGQsIGksIHNldFR5cGUpKS5kZWxheVxuICAgICAgICAgIClcbiAgICAgICAgICAuZWFzZShlYXNlRm4pXG4gICAgICAgICAgLnJlbW92ZSgpXG4gICAgICAgICAgLmVuZCgpXG4gICAgICAgICAgLnRoZW4oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBkb25lKFwiZXhpdFwiLCAoKSA9PiB7cmVzb2x2ZSgpO30pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAvLyBUb2RvOiB3aGVuIHNob3VsZCB3ZSByZW1vdmUgZXhpdC1tYXJrcz9cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvbmUoXCJleGl0XCIsICgpID0+IHtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGUoXG4gICAgICB0aW1pbmdzLFxuICAgICAgYW5pbU1hcmtzLFxuICAgICAgbWFya3R5cGUsXG4gICAgICBlbmNvZGVzLFxuICAgICAgc2lnbmFscyxcbiAgICAgIHByZXZEYXRhLFxuICAgICAgZG9TdGF0dXNVcGRhdGUgPSB0cnVlLFxuICAgICAgZmlsdGVyVXBkYXRlID0gdHJ1ZVxuICAgICkge1xuICAgICAgbGV0IHVwZGF0ZUYgPSBmaWx0ZXJVcGRhdGVcbiAgICAgICAgPyBhbmltTWFya3MuZmlsdGVyKChkLCBpKSA9PiBqb2luU2V0KGQsIGkpID09PSBcInVwZGF0ZVwiKVxuICAgICAgICA6IGFuaW1NYXJrcztcbiAgICAgIGlmIChjaGFuZ2UuZGF0YSA9PT0gZmFsc2UgJiYgdXBkYXRlRi5kYXRhKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHVwZGF0ZUYgPSBhbmltTWFya3M7XG4gICAgICB9XG5cbiAgICAgIGlmICh1cGRhdGVGLmRhdGEoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHNldFR5cGUgPSBcImluaXRpYWxcIjsgLy8gQWN0dWFsbHksIGl0IGFsc28gY2FuIGJlICdmaW5hbCcuXG4gICAgICAgIHVwZGF0ZUYgPSB1cGRhdGVGLnRyYW5zaXRpb24oKTtcblxuICAgICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgICAgdXBkYXRlRixcbiAgICAgICAgICBNQVJLX0FUVFJTW21hcmt0eXBlXSxcbiAgICAgICAgICBzY2FsZXMsXG4gICAgICAgICAgc2lnbmFscyxcbiAgICAgICAgICBlbmNvZGVzLFxuICAgICAgICAgIHByZXZEYXRhXG4gICAgICAgICk7XG4gICAgICAgIHVwZGF0ZUZcbiAgICAgICAgICAuZHVyYXRpb24oXG4gICAgICAgICAgICAoZCwgaSkgPT5cbiAgICAgICAgICAgICAgdGltaW5ncy5maW5kKHQgPT4gdC5pZCA9PT0gam9pbktleShkLCBpLCBzZXRUeXBlKSkuZHVyYXRpb25cbiAgICAgICAgICApXG4gICAgICAgICAgLmRlbGF5KFxuICAgICAgICAgICAgKGQsIGkpID0+IHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSwgc2V0VHlwZSkpLmRlbGF5XG4gICAgICAgICAgKVxuICAgICAgICAgIC5lYXNlKGVhc2VGbilcbiAgICAgICAgICAuZW5kKClcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpZiAoZG9TdGF0dXNVcGRhdGUpIHtcbiAgICAgICAgICAgICAgZG9uZShcInVwZGF0ZVwiLCAoKSA9PiB7cmVzb2x2ZSgpO30pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChkb1N0YXR1c1VwZGF0ZSkge1xuICAgICAgICBkb25lKFwidXBkYXRlXCIsICgpID0+IHtyZXNvbHZlKCk7fSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgZnVuY3Rpb24gaXNWYWxpZE1hcmt0eXBlKG1hcmt0eXBlKSB7XG4gICAgcmV0dXJuICEhTUFSS19BVFRSU1ttYXJrdHlwZV07XG4gIH1cbn1cbmZ1bmN0aW9uIGRvbmVNYWtlcigpIHtcbiAgY29uc3QgdHJhbnNpdGlvblN0YXR1cyA9IHtcbiAgICB1cGRhdGU6IGZhbHNlLFxuICAgIGVudGVyOiBmYWxzZSxcbiAgICBleGl0OiBmYWxzZVxuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbih3aGljaCwgY2IsIGFyZ3MpIHtcbiAgICBpZiAod2hpY2ggPT09IFwiYWxsXCIpIHtcbiAgICAgIHRyYW5zaXRpb25TdGF0dXMudXBkYXRlID0gdHJhbnNpdGlvblN0YXR1cy5lbnRlciA9IHRyYW5zaXRpb25TdGF0dXMuZXhpdCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyYW5zaXRpb25TdGF0dXNbd2hpY2hdID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdHJhbnNpdGlvblN0YXR1cy51cGRhdGUgJiZcbiAgICAgIHRyYW5zaXRpb25TdGF0dXMuZW50ZXIgJiZcbiAgICAgIHRyYW5zaXRpb25TdGF0dXMuZXhpdFxuICAgICkge1xuICAgICAgY2IoYXJncyk7XG4gICAgfVxuICB9O1xufVxuXG5cbmZ1bmN0aW9uIGFkZE1hcmsoZDNTZWxlY3Rpb24sIGNvbXBTcGVjLCBiZWZvcmUpIHtcbiAgcmV0dXJuIGQzU2VsZWN0aW9uXG4gICAgLmluc2VydChcImdcIiwgYmVmb3JlKVxuICAgIC5hdHRyKFwiY2xhc3NcIiwgYG1hcmstJHtjb21wU3BlYy50eXBlfSByb2xlLW1hcmsgJHtjb21wU3BlYy5uYW1lfWApO1xufVxuZnVuY3Rpb24gZ2V0U3ZnRWxtVHlwZShtYXJrVHlwZSl7XG4gIHN3aXRjaCAobWFya1R5cGUpIHtcbiAgY2FzZSBcInJlY3RcIjpcbiAgY2FzZSBcInN5bWJvbFwiOlxuICAgIHJldHVybiBcInBhdGhcIjtcbiAgY2FzZSBcInJ1bGVcIjpcbiAgICByZXR1cm4gXCJsaW5lXCI7XG4gIGNhc2UgXCJ0ZXh0XCI6XG4gICAgcmV0dXJuIFwidGV4dFwiO1xuICBkZWZhdWx0OlxuXG4gIH1cbn1cbmV4cG9ydCB7IG1hcmtJbnRlcnBvbGF0ZSB9O1xuIiwiaW1wb3J0ICogYXMgZDMgZnJvbSBcImQzXCI7XG5pbXBvcnQgeyBwcm9wTWFwLCBnZXRFYXNlRm4sIGZpbmRBZnRlclNpYmxpbmcsIGdldEpvaW5JbmZvLCBjb21wdXRlU2NhbGUsIGlzTGluZWFyTWFya3R5cGUgfSBmcm9tIFwiLi4vdXRpbC5qc1wiO1xuaW1wb3J0IHsgZ2V0UHJvcFZhbCwgZmV0Y2hBdHRyaWJ1dGVzfSBmcm9tIFwiLi4vYXR0cmlidXRlRmV0Y2hlclwiO1xuaW1wb3J0IHsgZ2V0U3R5bGUgfSBmcm9tIFwiLi4vdmVnYS1yZW5kZXItdXRpbC5qc1wiO1xuaW1wb3J0IHsgY29tcHV0ZVRpbWluZywgZW51bVN0ZXBDb21wdXRlVGltaW5nIH0gZnJvbSBcIi4uL3RpbWluZ3NcIjtcblxuZnVuY3Rpb24gYXJlYUxpbmVJbnRlcnBvbGF0ZShyYXdJbmZvLCBzdGVwLCB0YXJnZXRFbG0pIHtcbiAgY29uc3Qgam9pbktleSA9IChkLCBpLCBpbml0aWFsT3JGaW5hbCkgPT4ge1xuICAgIHJldHVybiBkLl9fZ2VtaW5pX18gP1xuICAgICAgZ2V0Sm9pbkluZm8oZCwgaSwgc3RlcCwgXCJqb2luS2V5XCIpIDpcbiAgICAgICggdHlwZW9mKHN0ZXAuY29tcHV0ZURhdHVtSWQpID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgPyBzdGVwLmNvbXB1dGVEYXR1bUlkKGQsIGkpXG4gICAgICAgIDogc3RlcC5jb21wdXRlRGF0dW1JZFtpbml0aWFsT3JGaW5hbCB8fCBcImZpbmFsXCJdKGQsIGkpKTtcbiAgfTsgY29uc3Qgam9pblNldCA9IChkLCBpKSA9PiB7XG4gICAgcmV0dXJuIGQuX19nZW1pbmlfXyA/IGdldEpvaW5JbmZvKGQsIGksIHN0ZXAsIFwiYW5pbVNldFwiKSA6IHVuZGVmaW5lZDtcbiAgfTtcbiAgY29uc3QgTUFSS19BVFRSUyA9IHtcbiAgICBhcmVhOiBbeyBuYW1lOiBcImFyZWFcIiwgdHdlYWtzOiBbXSB9XSxcbiAgICBsaW5lOiBbeyBuYW1lOiBcImxpbmVcIiwgdHdlYWtzOiBbXSB9XSxcbiAgICB0cmFpbDogW3sgbmFtZTogXCJ0cmFpbFwiLCB0d2Vha3M6IFtdIH1dXG4gIH07XG4gIGNvbnN0IHR3ZWFrcyA9IFt7IHR5cGU6IFwiYXR0clR3ZWVuXCIsIHZhbDogXCJkXCIsIGludGVycG9sYXRlU3R5bGU6IFwidXBkYXRlXCIgfV07XG4gIGNvbnN0IE1BUktfQVRUUlNfREFUQV9JTlRFUlBPTEFURSA9IHtcbiAgICBhcmVhOiBbeyBuYW1lOiBcImFyZWFcIiwgdHdlYWtzfV0sXG4gICAgbGluZTogW3sgbmFtZTogXCJsaW5lXCIsIHR3ZWFrc31dLFxuICAgIHRyYWlsOiBbeyBuYW1lOiBcInRyYWlsXCIsIHR3ZWFrc31dXG4gIH07XG5cblxuICAvLyBHZXQgVGltaW5nXG5cbiAgY29uc3QgYW5pbVZpcyA9IHRhcmdldEVsbTtcbiAgY29uc3QgZVZpZXcgPSByYXdJbmZvLmVWaXMudmlldztcbiAgY29uc3QgdHJhbnNpdGlvblN0YXR1cyA9IHtcbiAgICB1cGRhdGU6IGZhbHNlLFxuICAgIGVudGVyOiBmYWxzZSxcbiAgICBleGl0OiBmYWxzZVxuICB9O1xuXG4gIGZ1bmN0aW9uIGRvbmUod2hpY2gsIGNiLCBhcmdzKSB7XG4gICAgaWYgKHdoaWNoID09PSBcImFsbFwiKSB7XG4gICAgICB0cmFuc2l0aW9uU3RhdHVzLnVwZGF0ZSA9IHRyYW5zaXRpb25TdGF0dXMuZW50ZXIgPSB0cmFuc2l0aW9uU3RhdHVzLmV4aXQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0cmFuc2l0aW9uU3RhdHVzW3doaWNoXSA9IHRydWU7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRyYW5zaXRpb25TdGF0dXMudXBkYXRlICYmXG4gICAgICB0cmFuc2l0aW9uU3RhdHVzLmVudGVyICYmXG4gICAgICB0cmFuc2l0aW9uU3RhdHVzLmV4aXRcbiAgICApIHtcbiAgICAgIGNiKGFyZ3MpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBpc0FyZWFMaW5lTWFya3R5cGUobWFya3R5cGUpIHtcbiAgICByZXR1cm4gISFNQVJLX0FUVFJTW21hcmt0eXBlXTtcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IHRpbWluZ3MgPSBjb21wdXRlVGltaW5nKFxuICAgICAgc3RlcC5jdXJyRGF0YSxcbiAgICAgIHN0ZXAubmV4dERhdGEsXG4gICAgICBzdGVwLnRpbWluZyxcbiAgICAgIGpvaW5LZXksXG4gICAgICBqb2luU2V0XG4gICAgKTtcbiAgICBjb25zdCB7Y2hhbmdlfSA9IHN0ZXA7XG4gICAgY29uc3QgZWFzZUZuID0gZ2V0RWFzZUZuKHN0ZXAudGltaW5nLmVhc2UpO1xuICAgIGNvbnN0IHttYXJrdHlwZXN9ID0gc3RlcDtcblxuICAgIGNvbnN0IGlzQWRkID0gIWNoYW5nZS5pbml0aWFsICYmICEhY2hhbmdlLmZpbmFsLFxuICAgICAgaXNSZW1vdmUgPSAhIWNoYW5nZS5pbml0aWFsICYmICFjaGFuZ2UuZmluYWw7XG5cbiAgICBsZXQgbWFya3R5cGU7XG4gICAgaWYgKFxuICAgICAgbWFya3R5cGVzLmluaXRpYWwgJiZcbiAgICAgIG1hcmt0eXBlcy5maW5hbCAmJlxuICAgICAgbWFya3R5cGVzLmluaXRpYWwgIT09IG1hcmt0eXBlcy5maW5hbFxuICAgICkge1xuICAgICAgaWYgKGNoYW5nZS5tYXJrdHlwZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgbWFya3R5cGUgPSBtYXJrdHlwZXMuaW5pdGlhbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1hcmt0eXBlID0gbWFya3R5cGVzLmZpbmFsO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNSZW1vdmUpIHtcbiAgICAgIG1hcmt0eXBlID0gbWFya3R5cGVzLmluaXRpYWw7XG4gICAgfSBlbHNlIGlmIChpc0FkZCkge1xuICAgICAgbWFya3R5cGUgPSBtYXJrdHlwZXMuZmluYWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1hcmt0eXBlID0gbWFya3R5cGVzLmluaXRpYWwgfHwgbWFya3R5cGVzLmZpbmFsO1xuICAgIH1cbiAgICBjb25zdCB7aGFzRmFjZXR9ID0gc3RlcDtcbiAgICAvLyBjb2xsZWN0IHRoZSBzY2FsZSBvYmplY3RzIHRvIHNjYWxlIHRoZSBpbml0aWFsL2ZpbmFsIHZhbHVlc1xuICAgIGNvbnN0IHtzY2FsZXN9ID0gc3RlcDtcbiAgICBjb25zdCB7ZW5jb2Rlc30gPSBzdGVwO1xuICAgIGNvbnN0IHtzaWduYWxzfSA9IHN0ZXA7XG5cbiAgICBpZiAoaXNBZGQgfHwgIWlzQXJlYUxpbmVNYXJrdHlwZShtYXJrdHlwZXMuaW5pdGlhbCkpIHtcbiAgICAgIGlmIChoYXNGYWNldC5maW5hbCkge1xuICAgICAgICBjb25zdCBzaWIgPSBmaW5kQWZ0ZXJTaWJsaW5nKFxuICAgICAgICAgIGVWaWV3LnNjZW5lZ3JhcGgoKS5yb290LFxuICAgICAgICAgIGNoYW5nZS5maW5hbC5wYXJlbnQubmFtZVxuICAgICAgICApO1xuXG4gICAgICAgIGFkZE1hcmsoXG4gICAgICAgICAgZDMuc2VsZWN0KGAke2FuaW1WaXMgIH0gLiR7Y2hhbmdlLmZpbmFsLnBhcmVudC5wYXJlbnQubmFtZX0gPiBnID4gZ2ApLFxuICAgICAgICAgIGNoYW5nZS5maW5hbCxcbiAgICAgICAgICBzaWIgPyBgLiR7c2liLm5hbWV9YCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB7IGhhc0dyb3VwOiB0cnVlIH1cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHNpYiA9IGZpbmRBZnRlclNpYmxpbmcoZVZpZXcuc2NlbmVncmFwaCgpLnJvb3QsIGNoYW5nZS5jb21wTmFtZSk7XG5cbiAgICAgICAgYWRkTWFyayhcbiAgICAgICAgICBkMy5zZWxlY3QoYCR7YW5pbVZpcyAgfSAuJHtjaGFuZ2UuZmluYWwucGFyZW50Lm5hbWV9ID4gZyA+IGdgKSxcbiAgICAgICAgICBjaGFuZ2UuZmluYWwsXG4gICAgICAgICAgc2liID8gYC4ke3NpYi5uYW1lfWAgOiB1bmRlZmluZWRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RlcC5lbnVtZXJhdG9yKSB7XG4gICAgICBsZXQgZmluYWxTY2FsZU5hbWVzID0gW107XG4gICAgICBpZiAoY2hhbmdlLnNjYWxlID09PSB0cnVlKSB7XG4gICAgICAgIGZpbmFsU2NhbGVOYW1lcyA9IE9iamVjdC5rZXlzKGVWaWV3Ll9ydW50aW1lLnNjYWxlcyk7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoY2hhbmdlLnNjYWxlKSkge1xuICAgICAgICBmaW5hbFNjYWxlTmFtZXMgPSBjaGFuZ2Uuc2NhbGU7XG4gICAgICB9XG5cblxuICAgICAgY29uc3Qge2VudW1lcmF0b3J9ID0gc3RlcDtcbiAgICAgIGNvbnN0IGdldFZhbHVlcyA9IHtcbiAgICAgICAgdXBkYXRlOiB7XG4gICAgICAgICAgaW5pdGlhbDogKGF0dHIsIGdldFNjYWxlcywgZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29tcHV0ZWRTY2FsZXMgPSBjb21wdXRlU2NhbGUoc2NhbGVzLCBmaW5hbFNjYWxlTmFtZXMsIGdldFNjYWxlcyk7XG4gICAgICAgICAgICByZXR1cm4gZ2V0UHJvcFZhbChcbiAgICAgICAgICAgICAgYXR0cixcbiAgICAgICAgICAgICAgZW5jb2Rlcy5pbml0aWFsLnVwZGF0ZSxcbiAgICAgICAgICAgICAgY29tcHV0ZWRTY2FsZXMuaW5pdGlhbCxcbiAgICAgICAgICAgICAgc2lnbmFscy5pbml0aWFsLFxuICAgICAgICAgICAgICBkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZmluYWw6IChhdHRyLCBnZXRTY2FsZXMsIGQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXB1dGVkU2NhbGVzID0gY29tcHV0ZVNjYWxlKHNjYWxlcywgZmluYWxTY2FsZU5hbWVzLCBnZXRTY2FsZXMpO1xuICAgICAgICAgICAgcmV0dXJuIGdldFByb3BWYWwoXG4gICAgICAgICAgICAgIGF0dHIsXG4gICAgICAgICAgICAgIGVuY29kZXMuZmluYWwudXBkYXRlLFxuICAgICAgICAgICAgICBjb21wdXRlZFNjYWxlcy5maW5hbCxcbiAgICAgICAgICAgICAgc2lnbmFscy5maW5hbCxcbiAgICAgICAgICAgICAgZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGN1c3RvbTogKGF0dHIsIGdldFNjYWxlcywgZF9pLCBkX2YpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhaHREYXRhID0ge1xuICAgICAgICAgICAgICBpbml0aWFsOiBkX2kuaXRlbXNbMF0uaXRlbXNbMF0sXG4gICAgICAgICAgICAgIGZpbmFsOiBkX2YuaXRlbXNbMF0uaXRlbXNbMF1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBudWFuY2VkQXR0ciA9IE9iamVjdC5hc3NpZ24oe30sIGF0dHIsIHtcbiAgICAgICAgICAgICAgaW50ZXJwb2xhdGVTdHlsZTogXCJ1cGRhdGVcIlxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBjb21wdXRlZFNjYWxlcyA9IGNvbXB1dGVTY2FsZShzY2FsZXMsIGZpbmFsU2NhbGVOYW1lcywgZ2V0U2NhbGVzKTtcblxuICAgICAgICAgICAgcmV0dXJuIGdldFByb3BWYWwuYmluZCh0aGlzKShcbiAgICAgICAgICAgICAgY2hhbmdlLnNjYWxlID8gYXR0ciA6IG51YW5jZWRBdHRyLFxuICAgICAgICAgICAgICBlbmNvZGVzLmZpbmFsLnVwZGF0ZSxcbiAgICAgICAgICAgICAgY2hhbmdlLnNjYWxlID8gY29tcHV0ZWRTY2FsZXMgOiBjb21wdXRlZFNjYWxlcy5maW5hbCxcbiAgICAgICAgICAgICAgc2lnbmFscy5maW5hbCxcbiAgICAgICAgICAgICAgcGFodERhdGFcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlbnRlcjoge1xuICAgICAgICAgIGluaXRpYWw6IChhdHRyLCBnZXRTY2FsZXMsIGQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXB1dGVkU2NhbGVzID0gY29tcHV0ZVNjYWxlKHNjYWxlcywgZmluYWxTY2FsZU5hbWVzLCBnZXRTY2FsZXMpO1xuXG4gICAgICAgICAgICByZXR1cm4gZ2V0UHJvcFZhbChcbiAgICAgICAgICAgICAgYXR0cixcbiAgICAgICAgICAgICAgZW5jb2Rlcy5pbml0aWFsLmVudGVyLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcHJpbWFyeTogY29tcHV0ZWRTY2FsZXMuaW5pdGlhbCxcbiAgICAgICAgICAgICAgICBzZWNvbmRhcnk6IGNvbXB1dGVkU2NhbGVzLmZpbmFsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHNpZ25hbHMuaW5pdGlhbCxcbiAgICAgICAgICAgICAgZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZpbmFsOiAoYXR0ciwgZ2V0U2NhbGVzLCBkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb21wdXRlZFNjYWxlcyA9IGNvbXB1dGVTY2FsZShzY2FsZXMsIGZpbmFsU2NhbGVOYW1lcywgZ2V0U2NhbGVzKTtcbiAgICAgICAgICAgIHJldHVybiBnZXRQcm9wVmFsKFxuICAgICAgICAgICAgICBhdHRyLFxuICAgICAgICAgICAgICBlbmNvZGVzLmZpbmFsLmVudGVyLFxuICAgICAgICAgICAgICBjb21wdXRlZFNjYWxlcy5maW5hbCxcbiAgICAgICAgICAgICAgc2lnbmFscy5maW5hbCxcbiAgICAgICAgICAgICAgZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGN1c3RvbShhdHRyLCBnZXRTY2FsZXMsIGRfaSwgZF9mKXtcbiAgICAgICAgICAgIGxldCBwYWh0RGF0YSA9IHtcbiAgICAgICAgICAgICAgaW5pdGlhbDogY2hhbmdlLnNjYWxlID8gZF9mLml0ZW1zWzBdLml0ZW1zWzBdIDogeyBtYXJrOiB7IGl0ZW1zOltdIH0gfSxcbiAgICAgICAgICAgICAgZmluYWw6IGRfZi5pdGVtc1swXS5pdGVtc1swXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGxldCBudWFuY2VkQXR0ciA9IE9iamVjdC5hc3NpZ24oe30sIGF0dHIsIHtpbnRlcnBvbGF0ZVN0eWxlOiBcInVwZGF0ZVwifSk7XG4gICAgICAgICAgICBsZXQgY29tcHV0ZWRTY2FsZXMgPSBjb21wdXRlU2NhbGUoc2NhbGVzLCBmaW5hbFNjYWxlTmFtZXMsIGdldFNjYWxlcyk7XG5cbiAgICAgICAgICAgIHJldHVybiBnZXRQcm9wVmFsLmJpbmQodGhpcykoXG4gICAgICAgICAgICAgIGNoYW5nZS5zY2FsZSA/IGF0dHIgOiBudWFuY2VkQXR0cixcbiAgICAgICAgICAgICAgZW5jb2Rlcy5maW5hbC51cGRhdGUsXG4gICAgICAgICAgICAgIGNoYW5nZS5zY2FsZSA/IGNvbXB1dGVkU2NhbGVzIDogY29tcHV0ZWRTY2FsZXMuZmluYWwsXG4gICAgICAgICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgICAgICAgIHBhaHREYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGV4aXQ6IHtcbiAgICAgICAgICBpbml0aWFsOiAoYXR0ciwgZ2V0U2NhbGVzLCBkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb21wdXRlZFNjYWxlcyA9IGNvbXB1dGVTY2FsZShzY2FsZXMsIGZpbmFsU2NhbGVOYW1lcywgZ2V0U2NhbGVzKTtcbiAgICAgICAgICAgIHJldHVybiBnZXRQcm9wVmFsKFxuICAgICAgICAgICAgICBhdHRyLFxuICAgICAgICAgICAgICBlbmNvZGVzLmluaXRpYWwuZXhpdCxcbiAgICAgICAgICAgICAgY29tcHV0ZWRTY2FsZXMuaW5pdGlhbCxcbiAgICAgICAgICAgICAgc2lnbmFscy5pbml0aWFsLFxuICAgICAgICAgICAgICBkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZmluYWw6IChhdHRyLCBnZXRTY2FsZXMsIGQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXB1dGVkU2NhbGVzID0gY29tcHV0ZVNjYWxlKHNjYWxlcywgZmluYWxTY2FsZU5hbWVzLCBnZXRTY2FsZXMpO1xuICAgICAgICAgICAgcmV0dXJuIGdldFByb3BWYWwoXG4gICAgICAgICAgICAgIGF0dHIsXG4gICAgICAgICAgICAgIGVuY29kZXMuZmluYWwuZXhpdCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHByaW1hcnk6IGNvbXB1dGVkU2NhbGVzLmZpbmFsLFxuICAgICAgICAgICAgICAgIHNlY29uZGFyeTogY29tcHV0ZWRTY2FsZXMuaW5pdGlhbFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICAgICAgICBkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgY3VzdG9tOiAoYXR0ciwgZ2V0U2NhbGVzLCBkX2kpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhaHREYXRhID0ge1xuICAgICAgICAgICAgICBpbml0aWFsOiBkX2kuaXRlbXNbMF0uaXRlbXNbMF0sXG4gICAgICAgICAgICAgIGZpbmFsOiBjaGFuZ2Uuc2NhbGVcbiAgICAgICAgICAgICAgICA/IGRfaS5pdGVtc1swXS5pdGVtc1swXVxuICAgICAgICAgICAgICAgIDogeyBtYXJrOiB7IGl0ZW1zOiBbXSB9IH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbXB1dGVkU2NhbGVzID0gY29tcHV0ZVNjYWxlKHNjYWxlcywgZmluYWxTY2FsZU5hbWVzLCBnZXRTY2FsZXMpO1xuICAgICAgICAgICAgY29uc3QgbnVhbmNlZEF0dHIgPSBPYmplY3QuYXNzaWduKHt9LCBhdHRyLCB7XG4gICAgICAgICAgICAgIGludGVycG9sYXRlU3R5bGU6IFwidXBkYXRlXCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGdldFByb3BWYWwuYmluZCh0aGlzKShcbiAgICAgICAgICAgICAgY2hhbmdlLnNjYWxlID8gYXR0ciA6IG51YW5jZWRBdHRyLFxuICAgICAgICAgICAgICBlbmNvZGVzLmZpbmFsLmV4aXQsXG4gICAgICAgICAgICAgIGNoYW5nZS5zY2FsZSA/IGNvbXB1dGVkU2NhbGVzIDogY29tcHV0ZWRTY2FsZXMuaW5pdGlhbCxcbiAgICAgICAgICAgICAgc2lnbmFscy5maW5hbCxcbiAgICAgICAgICAgICAgcGFodERhdGFcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgaWYgKGhhc0ZhY2V0LmluaXRpYWwgJiYgaGFzRmFjZXQuZmluYWwpIHtcbiAgICAgICAgLy8gYmluZCBhbGxLZXlzXG4gICAgICAgIGxldCBtYXJrR3MgPSBkM1xuICAgICAgICAgIC5zZWxlY3RBbGwoYW5pbVZpcyArIGAgLnJvbGUtc2NvcGUuJHtjaGFuZ2UuZmluYWwucGFyZW50Lm5hbWV9ID4gZ2ApXG4gICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcIl9fc3ViXCIpO1xuICAgICAgICBtYXJrR3MgPSBkM1xuICAgICAgICAgIC5zZWxlY3QoYW5pbVZpcyArIGAgLnJvbGUtc2NvcGUuJHtjaGFuZ2UuZmluYWwucGFyZW50Lm5hbWV9YClcbiAgICAgICAgICAuc2VsZWN0QWxsKFwiLl9fc3ViXCIpO1xuICAgICAgICBtYXJrR3MgPSBtYXJrR3MuZGF0YShlbnVtZXJhdG9yLmFsbEtleXMsIGQgPT4gZCk7XG4gICAgICAgIG1hcmtHcy5leGl0KCkucmVtb3ZlKCk7XG4gICAgICAgIG1hcmtHcyA9IG1hcmtHcy5lbnRlcigpLmFwcGVuZChcImdcIik7XG4gICAgICAgIG1hcmtHcy5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJjbGFzc1wiLCBcImJhY2tncm91bmRcIik7XG5cbiAgICAgICAgLy8gYXBwZW5kIG1hcmsgbWFya1xuICAgICAgICBsZXQgbWFya3MgPSBtYXJrR3NcbiAgICAgICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBgJHttYXJrdHlwZX0tbWFyayByb2xlLW1hcmsgJHtjaGFuZ2UuY29tcE5hbWV9YClcbiAgICAgICAgICAuYXBwZW5kKFwicGF0aFwiKTtcblxuICAgICAgICBjb25zdCBpbml0aWFsTWFya3MgPSBtYXJrcy5maWx0ZXIoXG4gICAgICAgICAgaWQgPT4gW1widXBkYXRlXCIsIFwiZXhpdFwiXS5pbmRleE9mKGVudW1lcmF0b3Iuc2V0KGlkLCAwKSkgPj0gMFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBhbGxQcm9wcyA9IE1BUktfQVRUUlNbbWFya3R5cGVdLnJlZHVjZSgoYWNjLCBwcm9wKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQocHJvcE1hcChwcm9wKSk7XG4gICAgICAgIH0sIFtdKTtcblxuICAgICAgICAvLyBpbml0XG4gICAgICAgIGFsbFByb3BzLmZvckVhY2gocCA9PiB7XG4gICAgICAgICAgaWYgKHAudHlwZSA9PT0gXCJhdHRyVHdlZW5cIikge1xuICAgICAgICAgICAgY29uc3QgdGVtcFAgPSBPYmplY3QuYXNzaWduKHt9LCBwLCB7IHR5cGU6IFwiYXR0clwiIH0pO1xuICAgICAgICAgICAgaW5pdGlhbE1hcmtzW3RlbXBQLnR5cGVdKGdldFN0eWxlKHRlbXBQLnZhbCksIGlkID0+XG4gICAgICAgICAgICAgIGVudW1lcmF0b3IuZ2V0UHJvcFZhbCh0ZW1wUCwgZ2V0VmFsdWVzLCAwLCBpZClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluaXRpYWxNYXJrc1twLnR5cGVdKGdldFN0eWxlKHAudmFsKSwgaWQgPT5cbiAgICAgICAgICAgICAgZW51bWVyYXRvci5nZXRQcm9wVmFsKHAsIGdldFZhbHVlcywgMCwgaWQpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdGltaW5ncyA9IGVudW1TdGVwQ29tcHV0ZVRpbWluZyhlbnVtZXJhdG9yLCBzdGVwLnRpbWluZyk7XG5cbiAgICAgICAgbWFya3MgPSBtYXJrcy50cmFuc2l0aW9uKCk7XG5cbiAgICAgICAgYWxsUHJvcHMuZm9yRWFjaChwID0+IHtcbiAgICAgICAgICBpZiAocC50eXBlID09PSBcImF0dHJcIikge1xuICAgICAgICAgICAgbWFya3MuYXR0clR3ZWVuKHAudmFsLCBmdW5jdGlvbihkKSB7XG4gICAgICAgICAgICAgIHJldHVybiBlbnVtZXJhdG9yLmludGVycG9sYXRlQWxvbmdFbnVtTWFrZXIoXG4gICAgICAgICAgICAgICAgcCxcbiAgICAgICAgICAgICAgICBnZXRWYWx1ZXMsXG4gICAgICAgICAgICAgICAgdGhpc1xuICAgICAgICAgICAgICApKGQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChwLnR5cGUgPT09IFwiYXR0clR3ZWVuXCIpIHtcbiAgICAgICAgICAgIG1hcmtzLmF0dHJUd2VlbihwLnZhbCwgZnVuY3Rpb24oZCkge1xuICAgICAgICAgICAgICByZXR1cm4gZW51bWVyYXRvci5pbnRlcnBvbGF0ZUFsb25nRW51bU1ha2VyKFxuICAgICAgICAgICAgICAgIHAsXG4gICAgICAgICAgICAgICAgZ2V0VmFsdWVzLFxuICAgICAgICAgICAgICAgIHRoaXNcbiAgICAgICAgICAgICAgKShkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAocC50eXBlID09PSBcInRleHRcIikge1xuICAgICAgICAgICAgbWFya3MudHdlZW4oXCJ0ZXh0XCIsIGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICAgICAgY29uc3QgdGV4dEludGVycG9sYXRvciA9IGVudW1lcmF0b3IuaW50ZXJwb2xhdGVBbG9uZ0VudW1NYWtlcihcbiAgICAgICAgICAgICAgICBwLFxuICAgICAgICAgICAgICAgIGdldFZhbHVlcyxcbiAgICAgICAgICAgICAgICB0aGlzXG4gICAgICAgICAgICAgICkoZCk7XG4gICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbm5lckhUTUwgPSB0ZXh0SW50ZXJwb2xhdG9yKHQpO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChwLnR5cGUgPT09IFwic3R5bGVcIikge1xuICAgICAgICAgICAgbWFya3Muc3R5bGVUd2VlbihnZXRTdHlsZShwLnZhbCksIGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGVudW1lcmF0b3IuaW50ZXJwb2xhdGVBbG9uZ0VudW1NYWtlcihcbiAgICAgICAgICAgICAgICBwLFxuICAgICAgICAgICAgICAgIGdldFZhbHVlcyxcbiAgICAgICAgICAgICAgICB0aGlzXG4gICAgICAgICAgICAgICkoZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGludGVycG9sYXRlIHRoZW1cbiAgICAgICAgbWFya3NcbiAgICAgICAgICAuZHVyYXRpb24oKGQsIGkpID0+IHRpbWluZ3NbaV0uZHVyYXRpb24pXG4gICAgICAgICAgLmRlbGF5KChkLCBpKSA9PiB0aW1pbmdzW2ldLmRlbGF5KVxuICAgICAgICAgIC5lYXNlKGVhc2VGbilcbiAgICAgICAgICAuZW5kKClcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKFwiYWxsXCIsICgpID0+IHtcbiAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKCFoYXNGYWNldC5pbml0aWFsICYmICFoYXNGYWNldC5maW5hbCkge1xuICAgICAgICBsZXQgbWFyayA9IGQzXG4gICAgICAgICAgLnNlbGVjdChhbmltVmlzICsgYCAubWFyay0ke21hcmt0eXBlfS5yb2xlLW1hcmsuJHtjaGFuZ2UuY29tcE5hbWV9YClcbiAgICAgICAgICAuc2VsZWN0QWxsKFwicGF0aFwiKTtcblxuICAgICAgICBtYXJrID0gbWFyay5kYXRhKGVudW1lcmF0b3IuYWxsS2V5cywgZCA9PiBkKTtcbiAgICAgICAgbWFyay5leGl0KCkucmVtb3ZlKCk7XG4gICAgICAgIG1hcmsgPSBtYXJrLmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKTtcblxuICAgICAgICBjb25zdCBhbGxQcm9wcyA9IE1BUktfQVRUUlNbbWFya3R5cGVdLnJlZHVjZSgoYWNjLCBwcm9wKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQocHJvcE1hcChwcm9wKSk7XG4gICAgICAgIH0sIFtdKTtcblxuICAgICAgICAvLyBpbml0XG4gICAgICAgIGFsbFByb3BzLmZvckVhY2gocCA9PiB7XG4gICAgICAgICAgaWYgKHAudHlwZSA9PT0gXCJhdHRyVHdlZW5cIikge1xuICAgICAgICAgICAgY29uc3QgdGVtcFAgPSBPYmplY3QuYXNzaWduKHt9LCBwLCB7IHR5cGU6IFwiYXR0clwiIH0pO1xuICAgICAgICAgICAgbWFya1t0ZW1wUC50eXBlXShnZXRTdHlsZSh0ZW1wUC52YWwpLCBpZCA9PlxuICAgICAgICAgICAgICBlbnVtZXJhdG9yLmdldFByb3BWYWwodGVtcFAsIGdldFZhbHVlcywgMCwgaWQpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtYXJrW3AudHlwZV0oZ2V0U3R5bGUocC52YWwpLCBpZCA9PlxuICAgICAgICAgICAgICBlbnVtZXJhdG9yLmdldFByb3BWYWwocCwgZ2V0VmFsdWVzLCAwLCBpZClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0aW1pbmdzID0gZW51bVN0ZXBDb21wdXRlVGltaW5nKGVudW1lcmF0b3IsIHN0ZXAudGltaW5nKTtcblxuICAgICAgICBtYXJrID0gbWFyay50cmFuc2l0aW9uKCk7XG5cbiAgICAgICAgYWxsUHJvcHMuZm9yRWFjaChwID0+IHtcbiAgICAgICAgICBpZiAocC50eXBlID09PSBcImF0dHJcIikge1xuICAgICAgICAgICAgbWFyay5hdHRyVHdlZW4ocC52YWwsIGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGVudW1lcmF0b3IuaW50ZXJwb2xhdGVBbG9uZ0VudW1NYWtlcihcbiAgICAgICAgICAgICAgICBwLFxuICAgICAgICAgICAgICAgIGdldFZhbHVlcyxcbiAgICAgICAgICAgICAgICB0aGlzXG4gICAgICAgICAgICAgICkoZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHAudHlwZSA9PT0gXCJhdHRyVHdlZW5cIikge1xuICAgICAgICAgICAgbWFyay5hdHRyVHdlZW4ocC52YWwsIGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGVudW1lcmF0b3IuaW50ZXJwb2xhdGVBbG9uZ0VudW1NYWtlcihcbiAgICAgICAgICAgICAgICBwLFxuICAgICAgICAgICAgICAgIGdldFZhbHVlcyxcbiAgICAgICAgICAgICAgICB0aGlzXG4gICAgICAgICAgICAgICkoZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHAudHlwZSA9PT0gXCJ0ZXh0XCIpIHtcbiAgICAgICAgICAgIG1hcmsudHdlZW4oXCJ0ZXh0XCIsIGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICAgICAgY29uc3QgdGV4dEludGVycG9sYXRvciA9IGVudW1lcmF0b3IuaW50ZXJwb2xhdGVBbG9uZ0VudW1NYWtlcihcbiAgICAgICAgICAgICAgICBwLFxuICAgICAgICAgICAgICAgIGdldFZhbHVlcyxcbiAgICAgICAgICAgICAgICB0aGlzXG4gICAgICAgICAgICAgICkoZCk7XG4gICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbm5lckhUTUwgPSB0ZXh0SW50ZXJwb2xhdG9yKHQpO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChwLnR5cGUgPT09IFwic3R5bGVcIikge1xuICAgICAgICAgICAgbWFyay5zdHlsZVR3ZWVuKGdldFN0eWxlKHAudmFsKSwgZnVuY3Rpb24oZCkge1xuICAgICAgICAgICAgICByZXR1cm4gZW51bWVyYXRvci5pbnRlcnBvbGF0ZUFsb25nRW51bU1ha2VyKFxuICAgICAgICAgICAgICAgIHAsXG4gICAgICAgICAgICAgICAgZ2V0VmFsdWVzLFxuICAgICAgICAgICAgICAgIHRoaXNcbiAgICAgICAgICAgICAgKShkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gaW50ZXJwb2xhdGUgdGhlbVxuICAgICAgICBtYXJrXG4gICAgICAgICAgLmR1cmF0aW9uKChkLCBpKSA9PiB0aW1pbmdzW2ldLmR1cmF0aW9uKVxuICAgICAgICAgIC5kZWxheSgoZCwgaSkgPT4gdGltaW5nc1tpXS5kZWxheSlcbiAgICAgICAgICAuZWFzZShlYXNlRm4pXG4gICAgICAgICAgLmVuZCgpXG4gICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZShcImFsbFwiLCAoKSA9PiB7XG4gICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobWFya3R5cGVzLmluaXRpYWwgJiYgIWlzQXJlYUxpbmVNYXJrdHlwZShtYXJrdHlwZXMuaW5pdGlhbCkpIHtcbiAgICAgIC8vIHdoZW4gbWFya3R5cGUgY2hhbmdlcyBmcm9tIG90aGVyIG1hcmtzIHRvIGFyZWEvbGluZSBtYXJrXG5cbiAgICAgIGNvbnN0IHNldFR5cGUgPSBcImZpbmFsXCI7IGNvbnN0IG1hcmt0eXBlID0gbWFya3R5cGVzLmZpbmFsO1xuICAgICAgY29uc3QgcHJldkRhdGEgPSBkMy5sb2NhbCgpO1xuXG4gICAgICBpZiAoaGFzRmFjZXQuZmluYWwpIHtcbiAgICAgICAgY29uc3QgdGltaW5ncyA9IGNvbXB1dGVUaW1pbmcoXG4gICAgICAgICAgc3RlcC5ncm91cGVkRGF0YSxcbiAgICAgICAgICBzdGVwLm5leHREYXRhLFxuICAgICAgICAgIHN0ZXAudGltaW5nLFxuICAgICAgICAgIGpvaW5LZXksXG4gICAgICAgICAgam9pblNldFxuICAgICAgICApO1xuICAgICAgICBsZXQgbWFya0dzID0gZDMuc2VsZWN0QWxsKFxuICAgICAgICAgIGFuaW1WaXMgKyBgIC5yb2xlLXNjb3BlLiR7Y2hhbmdlLmZpbmFsLnBhcmVudC5uYW1lfSA+IGdgXG4gICAgICAgICk7XG4gICAgICAgIG1hcmtHcyA9IGQzXG4gICAgICAgICAgLnNlbGVjdChgJHthbmltVmlzICB9IC5yb2xlLXNjb3BlLiR7Y2hhbmdlLmZpbmFsLnBhcmVudC5uYW1lfWApXG4gICAgICAgICAgLnNlbGVjdEFsbChgLnJvbGUtc2NvcGUuJHtjaGFuZ2UuZmluYWwucGFyZW50Lm5hbWV9ID4gZ2ApXG4gICAgICAgICAgLmRhdGEoc3RlcC5ncm91cGVkRGF0YSwgKGQsIGkpID0+IGpvaW5LZXkoZCwgaSwgc2V0VHlwZSkpO1xuXG4gICAgICAgIC8vIGFwcGVuZCBncm91cCBtYXJrXG4gICAgICAgIGNvbnN0IGVudGVySUcgPSBtYXJrR3MuZW50ZXIoKS5hcHBlbmQoXCJnXCIpO1xuICAgICAgICBlbnRlcklHLmFwcGVuZChcInBhdGhcIikuYXR0cihcImNsYXNzXCIsIFwiYmFja2dyb3VuZFwiKTtcblxuICAgICAgICAvLyBhcHBlbmQgbWFyayBtYXJrXG4gICAgICAgIGNvbnN0IGVudGVySU1hcmsgPSBlbnRlcklHXG4gICAgICAgICAgLmFwcGVuZChcImdcIilcbiAgICAgICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgYG1hcmstJHttYXJrdHlwZX0gcm9sZS1tYXJrICR7Y2hhbmdlLmNvbXBOYW1lfWApXG4gICAgICAgICAgLmFwcGVuZChcInBhdGhcIik7XG5cbiAgICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICAgIGVudGVySU1hcmssXG4gICAgICAgICAgTUFSS19BVFRSU1ttYXJrdHlwZV0sXG4gICAgICAgICAgeyBwcmltYXJ5OiBzY2FsZXMuaW5pdGlhbCwgc2Vjb25kYXJ5OiBzY2FsZXMuZmluYWwgfSxcbiAgICAgICAgICBzaWduYWxzLmluaXRpYWwsXG4gICAgICAgICAgZW5jb2Rlcy5maW5hbC5pbnRlcm1lZGlhdGVcbiAgICAgICAgKTtcblxuICAgICAgICBtYXJrR3MgPSBkM1xuICAgICAgICAgIC5zZWxlY3QoYCR7YW5pbVZpcyAgfSAucm9sZS1zY29wZS4ke2NoYW5nZS5maW5hbC5wYXJlbnQubmFtZX1gKVxuICAgICAgICAgIC5zZWxlY3RBbGwoYC5yb2xlLXNjb3BlLiR7Y2hhbmdlLmZpbmFsLnBhcmVudC5uYW1lfSA+IGdgKTtcblxuICAgICAgICBtYXJrR3MuZWFjaChmdW5jdGlvbihkKSB7XG4gICAgICAgICAgcHJldkRhdGEuc2V0KHRoaXMsIGQpO1xuICAgICAgICB9KTtcbiAgICAgICAgbWFya0dzID0gbWFya0dzLmRhdGEoc3RlcC5uZXh0RGF0YSwgKGQsIGkpID0+IGpvaW5LZXkoZCwgaSwgc2V0VHlwZSkpO1xuXG4gICAgICAgIHVwZGF0ZShcbiAgICAgICAgICB0aW1pbmdzLFxuICAgICAgICAgIG1hcmtHcyxcbiAgICAgICAgICBtYXJrdHlwZSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpbml0aWFsOiBlbmNvZGVzLmZpbmFsLmludGVybWVkaWF0ZSxcbiAgICAgICAgICAgIGZpbmFsOiBlbmNvZGVzLmZpbmFsLnVwZGF0ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJldkRhdGFcbiAgICAgICAgKTtcblxuICAgICAgICBlbnRlcih0aW1pbmdzLCBtYXJrR3MsIG1hcmt0eXBlKTtcblxuICAgICAgICBkb25lKFwiZXhpdFwiLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IG1hcmsgPSBkM1xuICAgICAgICAgIC5zZWxlY3QoYW5pbVZpcyArIGAgLm1hcmstJHttYXJrdHlwZX0ucm9sZS1tYXJrLiR7Y2hhbmdlLmNvbXBOYW1lfWApXG4gICAgICAgICAgLnNlbGVjdEFsbChcInBhdGhcIik7XG4gICAgICAgIG1hcmsgPSBtYXJrLmRhdGEoc3RlcC5ncm91cGVkRGF0YSk7XG5cbiAgICAgICAgY29uc3QgZW50ZXJJID0gbWFyay5lbnRlcigpLmFwcGVuZChcInBhdGhcIik7XG5cbiAgICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICAgIGVudGVySSxcbiAgICAgICAgICBNQVJLX0FUVFJTW21hcmt0eXBlXSxcbiAgICAgICAgICB7IHByaW1hcnk6IHNjYWxlcy5pbml0aWFsLCBzZWNvbmRhcnk6IHNjYWxlcy5maW5hbCB9LFxuICAgICAgICAgIHNpZ25hbHMuaW5pdGlhbCxcbiAgICAgICAgICBlbmNvZGVzLmZpbmFsLmludGVybWVkaWF0ZVxuICAgICAgICApO1xuXG4gICAgICAgIGxldCBlbnRlckYgPSBkM1xuICAgICAgICAgIC5zZWxlY3QoXG4gICAgICAgICAgICBhbmltVmlzICsgYCAubWFyay0ke21hcmt0eXBlcy5maW5hbH0ucm9sZS1tYXJrLiR7Y2hhbmdlLmNvbXBOYW1lfWBcbiAgICAgICAgICApXG4gICAgICAgICAgLnNlbGVjdEFsbChcInBhdGhcIik7XG4gICAgICAgIGVudGVyRi5lYWNoKGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICBwcmV2RGF0YS5zZXQodGhpcywgZCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGVudGVyRiA9IGVudGVyRi5kYXRhKHN0ZXAubmV4dERhdGEpLnRyYW5zaXRpb24oKTtcblxuICAgICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgICAgZW50ZXJGLFxuICAgICAgICAgIE1BUktfQVRUUlNbbWFya3R5cGVzLmZpbmFsXSwgLy8gTUFSS19BVFRSU19EQVRBX0lOVEVSUE9MQVRFW21hcmt0eXBlXSxcbiAgICAgICAgICBzY2FsZXMsXG4gICAgICAgICAgc2lnbmFscy5maW5hbCxcbiAgICAgICAgICBlbmNvZGVzLmZpbmFsLnVwZGF0ZSxcbiAgICAgICAgICBwcmV2RGF0YVxuICAgICAgICApO1xuXG4gICAgICAgIGVudGVyRlxuICAgICAgICAgIC5kdXJhdGlvbihzdGVwLnRpbWluZy5kdXJhdGlvbilcbiAgICAgICAgICAuZGVsYXkoc3RlcC50aW1pbmcuZGVsYXkpXG4gICAgICAgICAgLmVhc2UoZWFzZUZuKVxuICAgICAgICAgIC5lbmQoKVxuICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoXCJhbGxcIiwgKCkgPT4ge3Jlc29sdmUoKTt9KTtcbiAgICAgICAgICB9KTtcblxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobWFya3R5cGVzLmZpbmFsICYmICFpc0FyZWFMaW5lTWFya3R5cGUobWFya3R5cGVzLmZpbmFsKSkge1xuICAgICAgLy8gd2hlbiBtYXJrdHlwZSBjaGFuZ2VzIGZyb20gYXJlYS9saW5lIHRvIHRoZSBvdGhlciBtYXJrdHlwZXNcbiAgICAgIC8vIGV4aXRcbiAgICAgIGNvbnN0IHRpbWluZ3MgPSBjb21wdXRlVGltaW5nKFxuICAgICAgICBzdGVwLmN1cnJEYXRhLFxuICAgICAgICBzdGVwLmdyb3VwZWREYXRhLFxuICAgICAgICBzdGVwLnRpbWluZyxcbiAgICAgICAgam9pbktleSxcbiAgICAgICAgam9pblNldFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHByZXZEYXRhID0gZDMubG9jYWwoKTtcbiAgICAgIGNvbnN0IHNldFR5cGUgPSBcImluaXRpYWxcIjsgY29uc3QgbWFya3R5cGUgPSBtYXJrdHlwZXMuaW5pdGlhbDtcbiAgICAgIGlmIChoYXNGYWNldC5pbml0aWFsKSB7XG4gICAgICAgIGxldCBtYXJrR3MgPSBkMy5zZWxlY3RBbGwoXG4gICAgICAgICAgYW5pbVZpcyArIGAgLnJvbGUtc2NvcGUuJHtjaGFuZ2UuaW5pdGlhbC5wYXJlbnQubmFtZX0gPiBnYFxuICAgICAgICApO1xuICAgICAgICBtYXJrR3MgPSBkM1xuICAgICAgICAgIC5zZWxlY3QoYCR7YW5pbVZpcyAgfSAucm9sZS1zY29wZS4ke2NoYW5nZS5pbml0aWFsLnBhcmVudC5uYW1lfWApXG4gICAgICAgICAgLnNlbGVjdEFsbChgLnJvbGUtc2NvcGUuJHtjaGFuZ2UuaW5pdGlhbC5wYXJlbnQubmFtZX0gPiBnYCk7XG5cbiAgICAgICAgbWFya0dzLmVhY2goZnVuY3Rpb24oZCkge1xuICAgICAgICAgIHByZXZEYXRhLnNldCh0aGlzLCBkKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG1hcmtHcyA9IG1hcmtHcy5kYXRhKHN0ZXAuZ3JvdXBlZERhdGEsIChkLCBpKSA9PlxuICAgICAgICAgIGpvaW5LZXkoZCwgaSwgc2V0VHlwZSlcbiAgICAgICAgKTtcblxuICAgICAgICBleGl0KFxuICAgICAgICAgIHRpbWluZ3MsXG4gICAgICAgICAgbWFya0dzLFxuICAgICAgICAgIG1hcmt0eXBlLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGluaXRpYWw6IGVuY29kZXMuaW5pdGlhbC5leGl0LFxuICAgICAgICAgICAgZmluYWw6IGVuY29kZXMuZmluYWwuZXhpdFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJldkRhdGEsXG4gICAgICAgICAgXCJpbml0aWFsXCJcbiAgICAgICAgKTtcblxuICAgICAgICB1cGRhdGUoXG4gICAgICAgICAgdGltaW5ncyxcbiAgICAgICAgICBtYXJrR3MsXG4gICAgICAgICAgbWFya3R5cGUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaW5pdGlhbDogZW5jb2Rlcy5pbml0aWFsLnVwZGF0ZSxcbiAgICAgICAgICAgIGZpbmFsOiBlbmNvZGVzLmluaXRpYWwuaW50ZXJtZWRpYXRlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwcmV2RGF0YVxuICAgICAgICApO1xuICAgICAgICBkb25lKFwiZW50ZXJcIiwgKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBtYXJrID0gZDNcbiAgICAgICAgICAuc2VsZWN0KGFuaW1WaXMgKyBgIC5tYXJrLSR7bWFya3R5cGV9LnJvbGUtbWFyay4ke2NoYW5nZS5jb21wTmFtZX1gKVxuICAgICAgICAgIC5zZWxlY3RBbGwoXCJwYXRoXCIpO1xuICAgICAgICBtYXJrLmVhY2goZnVuY3Rpb24oZCkge1xuICAgICAgICAgIHByZXZEYXRhLnNldCh0aGlzLCBkKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG1hcmsgPSBtYXJrLmRhdGEoc3RlcC5ncm91cGVkRGF0YSkudHJhbnNpdGlvbigpO1xuICAgICAgICAvLyBmYWRlLW91dCBieSB0aGUgZXhpdCBlbmNvZGluZ1xuXG4gICAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgICBtYXJrLFxuICAgICAgICAgIE1BUktfQVRUUlNbbWFya3R5cGVdLFxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oe30sIHNjYWxlcywge1xuICAgICAgICAgICAgcHJpbWFyeTogc2NhbGVzLmZpbmFsLFxuICAgICAgICAgICAgc2Vjb25kYXJ5OiBzY2FsZXMuaW5pdGlhbFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaW5pdGlhbDogZW5jb2Rlcy5pbml0aWFsLnVwZGF0ZSxcbiAgICAgICAgICAgIGZpbmFsOiBlbmNvZGVzLmluaXRpYWwuaW50ZXJtZWRpYXRlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwcmV2RGF0YVxuICAgICAgICApO1xuXG4gICAgICAgIG1hcmtcbiAgICAgICAgICAuZHVyYXRpb24oc3RlcC5kdXJhdGlvbilcbiAgICAgICAgICAuZGVsYXkoc3RlcC5kZWxheSlcbiAgICAgICAgICAuZWFzZShlYXNlRm4pXG4gICAgICAgICAgLy8gLnJlbW92ZSgpXG4gICAgICAgICAgLmVuZCgpXG4gICAgICAgICAgLnRoZW4oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBkb25lKFwiYWxsXCIsICgpID0+IHtyZXNvbHZlKCk7fSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgoaXNSZW1vdmUgfHwgaGFzRmFjZXQuZmluYWwpICYmIChpc0FkZCB8fCBoYXNGYWNldC5pbml0aWFsKSkge1xuICAgICAgLy8gV2hlbiBhZGRpbmcgb3IgcmVtb3Zpbmcgb3IgY2hhbmdpbmcgbWFya3Mgd2l0aCBwYXRoR3JvdXBcbiAgICAgIGNvbnN0IHBhcmVudE5hbWUgPSBpc0FkZFxuICAgICAgICA/IGNoYW5nZS5maW5hbC5wYXJlbnQubmFtZVxuICAgICAgICA6IGlzUmVtb3ZlXG4gICAgICAgICAgPyBjaGFuZ2UuaW5pdGlhbC5wYXJlbnQubmFtZVxuICAgICAgICAgIDogY2hhbmdlLmluaXRpYWwudHlwZSA9PT0gbWFya3R5cGVzLmluaXRpYWxcbiAgICAgICAgICAgID8gY2hhbmdlLmluaXRpYWwucGFyZW50Lm5hbWVcbiAgICAgICAgICAgIDogY2hhbmdlLmZpbmFsLnBhcmVudC5uYW1lO1xuICAgICAgbGV0IG1hcmtHcyA9IGQzXG4gICAgICAgIC5zZWxlY3RBbGwoYW5pbVZpcyArIGAgLnJvbGUtc2NvcGUuJHtwYXJlbnROYW1lfSA+IGdgKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwiX19zdWJcIik7XG5cbiAgICAgIG1hcmtHcyA9IGQzXG4gICAgICAgIC5zZWxlY3QoYW5pbVZpcyArIGAgLnJvbGUtc2NvcGUuJHtwYXJlbnROYW1lfWApXG4gICAgICAgIC5zZWxlY3RBbGwoXCIuX19zdWJcIik7XG4gICAgICBjb25zdCBwcmV2RGF0YSA9IGQzLmxvY2FsKCk7XG4gICAgICBtYXJrR3MuZWFjaChmdW5jdGlvbihkKSB7XG4gICAgICAgIHByZXZEYXRhLnNldCh0aGlzLCBkKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKGNoYW5nZS5kYXRhIHx8IGlzQWRkIHx8IGlzUmVtb3ZlKSB7XG4gICAgICAgIG1hcmtHcyA9IG1hcmtHcy5kYXRhKHN0ZXAubmV4dERhdGEsIChkLCBpKSA9PiBqb2luS2V5KGQsIGkpKTtcbiAgICAgIH1cblxuICAgICAgLy8gZW50ZXJcbiAgICAgIC8vIGlmIChkb0VudGVyKSB7XG4gICAgICBlbnRlcih0aW1pbmdzLCBtYXJrR3MsIG1hcmt0eXBlcy5maW5hbCk7IC8vICwgZW5jb2Rlcy5pbml0aWFsLmVudGVyLCBlbmNvZGVzLmZpbmFsLmVudGVyLCBcImZpbmFsXCIpXG5cbiAgICAgIC8vIGV4aXRcbiAgICAgIC8vIGlmIChkb0V4aXQpIHtcbiAgICAgIGV4aXQoXG4gICAgICAgIHRpbWluZ3MsXG4gICAgICAgIG1hcmtHcyxcbiAgICAgICAgbWFya3R5cGVzLmluaXRpYWwsXG4gICAgICAgIHtcbiAgICAgICAgICBpbml0aWFsOiBlbmNvZGVzLmluaXRpYWwuZXhpdCxcbiAgICAgICAgICBmaW5hbDogZW5jb2Rlcy5maW5hbC5leGl0XG4gICAgICAgIH0sXG4gICAgICAgIHByZXZEYXRhLFxuICAgICAgICBcImluaXRpYWxcIlxuICAgICAgKTtcblxuICAgICAgLy8gZmluYWxpemUgdXBkYXRlXG4gICAgICAvLyBpZiAoZG9VcGRhdGUpIHtcblxuICAgICAgdXBkYXRlKFxuICAgICAgICB0aW1pbmdzLFxuICAgICAgICBtYXJrR3MsXG4gICAgICAgIG1hcmt0eXBlcyxcbiAgICAgICAge1xuICAgICAgICAgIGluaXRpYWw6IGVuY29kZXMuaW5pdGlhbC51cGRhdGUsXG4gICAgICAgICAgZmluYWw6IGVuY29kZXMuZmluYWwudXBkYXRlXG4gICAgICAgIH0sXG4gICAgICAgIHByZXZEYXRhXG4gICAgICApO1xuXG4gICAgfSBlbHNlIGlmICgoaXNSZW1vdmUgfHwgIWhhc0ZhY2V0LmZpbmFsKSAmJiAoaXNBZGQgfHwgIWhhc0ZhY2V0LmluaXRpYWwpKSB7XG4gICAgICAvLyBXaGVuIGFkZGluZyBvciByZW1vdmluZyBvciB1cGRhdGluZyBhIHNpbmdsZSBtYXJrIHdpdGhvdXQgcGF0aGdyb3VwXG5cbiAgICAgIGNvbnN0IG1hcmtHID0gZDMuc2VsZWN0KFxuICAgICAgICBhbmltVmlzICsgYCAubWFyay0ke21hcmt0eXBlcy5pbml0aWFsfS5yb2xlLW1hcmsuJHtjaGFuZ2UuY29tcE5hbWV9YFxuICAgICAgKTtcbiAgICAgIGxldCBtYXJrID0gbWFya0cuc2VsZWN0QWxsKFwicGF0aFwiKTtcbiAgICAgIGNvbnN0IHByZXZEYXRhID0gZDMubG9jYWwoKTtcbiAgICAgIG1hcmsuZWFjaChmdW5jdGlvbihkKSB7XG4gICAgICAgIHByZXZEYXRhLnNldCh0aGlzLCBkKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKGNoYW5nZS5kYXRhIHx8IGlzQWRkIHx8IGlzUmVtb3ZlKSB7XG4gICAgICAgIG1hcmsgPSBtYXJrLmRhdGEoc3RlcC5uZXh0RGF0YSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGVudGVyXG5cbiAgICAgIGNvbnN0IGVudGVySSA9IG1hcmsuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpO1xuXG4gICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgIGVudGVySSxcbiAgICAgICAgTUFSS19BVFRSU1ttYXJrdHlwZV0sXG4gICAgICAgIHsgcHJpbWFyeTogc2NhbGVzLmluaXRpYWwsIHNlY29uZGFyeTogc2NhbGVzLmZpbmFsIH0sXG4gICAgICAgIHNpZ25hbHMuaW5pdGlhbCxcbiAgICAgICAgZW5jb2Rlcy5pbml0aWFsLmVudGVyXG4gICAgICApO1xuICAgICAgaWYgKGVudGVySS5kYXRhKCkubGVuZ3RoID4gMCkge1xuICAgICAgICBsZXQgZW50ZXJGID0gZW50ZXJJLnRyYW5zaXRpb24oKTtcblxuICAgICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgICAgZW50ZXJGLFxuICAgICAgICAgIE1BUktfQVRUUlNbbWFya3R5cGVdLCAvLyBNQVJLX0FUVFJTX0RBVEFfSU5URVJQT0xBVEVbbWFya3R5cGVdLFxuICAgICAgICAgIHNjYWxlcy5maW5hbCxcbiAgICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICAgIGVuY29kZXMuZmluYWwuZW50ZXJcbiAgICAgICAgKTtcblxuICAgICAgICBlbnRlckZcbiAgICAgICAgICAuZHVyYXRpb24oc3RlcC50aW1pbmcuZHVyYXRpb24pXG4gICAgICAgICAgLmRlbGF5KHN0ZXAudGltaW5nLmRlbGF5KVxuICAgICAgICAgIC5lYXNlKGVhc2VGbilcbiAgICAgICAgICAuZW5kKClcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKFwiZW50ZXJcIiwgKCkgPT4ge3Jlc29sdmUoKTt9KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvbmUoXCJlbnRlclwiLCAoKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuXG4gICAgICAvLyBleGl0XG5cbiAgICAgIC8vIGluaXRpYXRlIGV4aXRcbiAgICAgIGNvbnN0IGV4aXRJID0gbWFyay5leGl0KCk7XG5cbiAgICAgIGlmIChleGl0SS5kYXRhKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBmaW5hbGl6ZSBleGl0XG4gICAgICAgIGNvbnN0IGV4aXRGID0gZXhpdEkudHJhbnNpdGlvbigpO1xuXG4gICAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgICBleGl0RixcbiAgICAgICAgICBNQVJLX0FUVFJTW21hcmt0eXBlXSwgLy8gTUFSS19BVFRSU19EQVRBX0lOVEVSUE9MQVRFW21hcmt0eXBlXSxcbiAgICAgICAgICB7IHByaW1hcnk6IHNjYWxlcy5maW5hbCwgc2Vjb25kYXJ5OiBzY2FsZXMuaW5pdGlhbCB9LFxuICAgICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgICAgZW5jb2Rlcy5maW5hbC5leGl0XG4gICAgICAgICk7XG5cbiAgICAgICAgZXhpdEZcbiAgICAgICAgICAuZHVyYXRpb24oKGQsIGkpID0+IHN0ZXAudGltaW5nLmR1cmF0aW9uKVxuICAgICAgICAgIC5kZWxheSgoZCwgaSkgPT4gc3RlcC50aW1pbmcuZGVsYXkpXG4gICAgICAgICAgLmVhc2UoZWFzZUZuKVxuICAgICAgICAgIC5lbmQoKVxuICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgZG9uZShcImV4aXRcIiwgKCkgPT4ge3Jlc29sdmUoKTt9KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvbmUoXCJleGl0XCIsICgpID0+IHtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG5cbiAgICAgIC8vIGZpbmFsaXplIHVwZGF0ZVxuXG4gICAgICBpZiAobWFyay5kYXRhKCkubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAobWFya3R5cGVzLmluaXRpYWwgIT09IG1hcmt0eXBlcy5maW5hbCkge1xuICAgICAgICAgIG1hcmtHLmNsYXNzZWQoYG1hcmstJHttYXJrdHlwZXMuaW5pdGlhbH1gLCBmYWxzZSk7XG4gICAgICAgICAgbWFya0cuY2xhc3NlZChgbWFyay0ke21hcmt0eXBlcy5maW5hbH1gLCB0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVwZGF0ZUYgPSBtYXJrLnRyYW5zaXRpb24oKTtcblxuICAgICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgICAgdXBkYXRlRixcbiAgICAgICAgICBnZXRQcm9wKG1hcmt0eXBlcyksXG4gICAgICAgICAgc2NhbGVzLFxuICAgICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaW5pdGlhbDogZW5jb2Rlcy5pbml0aWFsLnVwZGF0ZSxcbiAgICAgICAgICAgIGZpbmFsOiBlbmNvZGVzLmZpbmFsLnVwZGF0ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJldkRhdGFcbiAgICAgICAgKTtcbiAgICAgICAgdXBkYXRlRlxuICAgICAgICAgIC5kdXJhdGlvbihzdGVwLnRpbWluZy5kdXJhdGlvbilcbiAgICAgICAgICAuZGVsYXkoc3RlcC50aW1pbmcuZGVsYXkpXG4gICAgICAgICAgLmVhc2UoZWFzZUZuKVxuICAgICAgICAgIC5lbmQoKVxuICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoXCJ1cGRhdGVcIiwgKCkgPT4ge3Jlc29sdmUoKTt9KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvbmUoXCJ1cGRhdGVcIiwgKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cblxuICAgIH0gZWxzZSBpZiAoIWhhc0ZhY2V0LmluaXRpYWwgJiYgaGFzRmFjZXQuZmluYWwpIHtcbiAgICAgIC8vIHNpbmdsZSBtYXJrIHdpdGhvdXQgcGF0aGdyb3VwIC0+IG1hcmtzIHdpdGggcGF0aGdyb3VwXG4gICAgICBjb25zdCBwcmV2RGF0YSA9IGQzLmxvY2FsKCk7XG5cbiAgICAgIC8vIFJlbW92ZSB0aGUgc2luZ2xlIGFyZWFcbiAgICAgIGxldCBleGl0TWFyayA9IGQzXG4gICAgICAgIC5zZWxlY3QoXG4gICAgICAgICAgYW5pbVZpcyArIGAgLm1hcmstJHttYXJrdHlwZXMuaW5pdGlhbH0ucm9sZS1tYXJrLiR7Y2hhbmdlLmNvbXBOYW1lfWBcbiAgICAgICAgKVxuICAgICAgICAuc2VsZWN0QWxsKFwicGF0aFwiKTtcbiAgICAgIGV4aXRNYXJrID0gZXhpdE1hcmtcbiAgICAgICAgLmVhY2goZnVuY3Rpb24oZCkge1xuICAgICAgICAgIHByZXZEYXRhLnNldCh0aGlzLCBkKTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRyYW5zaXRpb24oKTtcblxuICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICBleGl0TWFyayxcbiAgICAgICAgTUFSS19BVFRSU1ttYXJrdHlwZXMuaW5pdGlhbF0sIC8vIE1BUktfQVRUUlNfREFUQV9JTlRFUlBPTEFURVttYXJrdHlwZXMuaW5pdGlhbF0sXG4gICAgICAgIE9iamVjdC5hc3NpZ24oe30sIHNjYWxlcywge1xuICAgICAgICAgIHByaW1hcnk6IHNjYWxlcy5maW5hbCxcbiAgICAgICAgICBzZWNvbmRhcnk6IHNjYWxlcy5pbml0aWFsXG4gICAgICAgIH0pLFxuICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICBPYmplY3QuYXNzaWduKHt9LCBlbmNvZGVzLmluaXRpYWwuZXhpdCwgeyBvcGFjaXR5OiB7IHZhbHVlOiAwIH0gfSksXG4gICAgICAgIHByZXZEYXRhXG4gICAgICApO1xuXG4gICAgICBleGl0TWFya1xuICAgICAgICAuZHVyYXRpb24oKGQsIGkpID0+IHRpbWluZ3MuZmluZCh0ID0+IHQuc2V0ID09PSBcImV4aXRcIikuZHVyYXRpb24pXG4gICAgICAgIC5kZWxheSgoZCwgaSkgPT4gdGltaW5ncy5maW5kKHQgPT4gdC5zZXQgPT09IFwiZXhpdFwiKS5kZWxheSlcbiAgICAgICAgLmVhc2UoZWFzZUZuKVxuICAgICAgICAucmVtb3ZlKClcbiAgICAgICAgLmVuZCgpXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGQzLnNlbGVjdChgJHthbmltVmlzICB9IC5tYXJrLSR7bWFya3R5cGVzLmluaXRpYWx9LnJvbGUtbWFyay4ke2NoYW5nZS5jb21wTmFtZX1gKS5yZW1vdmUoKTtcbiAgICAgICAgICBkb25lKFwiZXhpdFwiLCAoKSA9PiB7cmVzb2x2ZSgpO30pO1xuICAgICAgICB9KTtcblxuICAgICAgLy8gQWRkIHBhdGhncm91cCB3aXRoIG1hcmtzXG4gICAgICBjb25zdCB7cGFyZW50fSA9IGNoYW5nZS5maW5hbDtcbiAgICAgIGNvbnN0IHNpYiA9IGZpbmRBZnRlclNpYmxpbmcoZVZpZXcuc2NlbmVncmFwaCgpLnJvb3QsIHBhcmVudC5uYW1lKTtcblxuICAgICAgYWRkTWFyayhcbiAgICAgICAgZDMuc2VsZWN0KGAke2FuaW1WaXMgIH0gLiR7cGFyZW50LnBhcmVudC5uYW1lfSA+IGcgPiBnYCksXG4gICAgICAgIGNoYW5nZS5maW5hbCxcbiAgICAgICAgc2liID8gYC4ke3NpYi5uYW1lfWAgOiB1bmRlZmluZWQsXG4gICAgICAgIHsgaGFzR3JvdXA6IHRydWUgfVxuICAgICAgKTtcblxuICAgICAgY29uc3QgbWFya0dzID0gZDNcbiAgICAgICAgLnNlbGVjdChhbmltVmlzICsgYCAucm9sZS1zY29wZS4ke3BhcmVudC5uYW1lfWApXG4gICAgICAgIC5zZWxlY3RBbGwoXCJnXCIpXG4gICAgICAgIC5kYXRhKHN0ZXAubmV4dERhdGEpO1xuXG4gICAgICAvLyBhcHBlbmQgZ3JvdXAgbWFya1xuICAgICAgY29uc3QgZW50ZXJJRyA9IG1hcmtHcy5lbnRlcigpLmFwcGVuZChcImdcIik7XG4gICAgICBlbnRlcklHLmFwcGVuZChcInBhdGhcIikuYXR0cihcImNsYXNzXCIsIFwiYmFja2dyb3VuZFwiKTtcbiAgICAgIC8vIGQgKHJlY3QpXG4gICAgICAvLyBmaWxsIChub25lKVxuXG4gICAgICAvLyBhcHBlbmQgbWFyayBtYXJrXG4gICAgICBjb25zdCBlbnRlcklNYXJrID0gZW50ZXJJR1xuICAgICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIGAke21hcmt0eXBlcy5maW5hbH0tbWFyayByb2xlLW1hcmsgJHtjaGFuZ2UuY29tcE5hbWV9YClcbiAgICAgICAgLmFwcGVuZChcInBhdGhcIik7XG5cbiAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgZW50ZXJJTWFyayxcbiAgICAgICAgTUFSS19BVFRSU1ttYXJrdHlwZXMuZmluYWxdLFxuICAgICAgICB7IHByaW1hcnk6IHNjYWxlcy5pbml0aWFsLCBzZWNvbmRhcnk6IHNjYWxlcy5maW5hbCB9LFxuICAgICAgICBzaWduYWxzLmluaXRpYWwsXG4gICAgICAgIE9iamVjdC5hc3NpZ24oe30sIGVuY29kZXMuZmluYWwuZW50ZXIsIHsgb3BhY2l0eTogeyB2YWx1ZTogMCB9IH0pXG4gICAgICAgIC8vIGVuY29kZXMuaW5pdGlhbC5lbnRlclxuICAgICAgKTtcblxuICAgICAgY29uc3QgZW50ZXJGTWFyayA9IGVudGVySU1hcmtcbiAgICAgICAgLmVhY2goZnVuY3Rpb24oZCkge1xuICAgICAgICAgIHByZXZEYXRhLnNldCh0aGlzLCBkKTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRyYW5zaXRpb24oKTtcblxuICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICBlbnRlckZNYXJrLFxuICAgICAgICBNQVJLX0FUVFJTW21hcmt0eXBlcy5maW5hbF0sXG4gICAgICAgIHNjYWxlcyxcbiAgICAgICAgc2lnbmFscy5maW5hbCxcbiAgICAgICAgZW5jb2Rlcy5maW5hbC5lbnRlcixcbiAgICAgICAgcHJldkRhdGFcbiAgICAgICk7XG5cbiAgICAgIGVudGVyRk1hcmtcbiAgICAgICAgLmR1cmF0aW9uKFxuICAgICAgICAgIChkLCBpKSA9PiB0aW1pbmdzLmZpbmQodCA9PiB0LmlkID09PSBqb2luS2V5KGQsIGksIFwiZmluYWxcIikpLmR1cmF0aW9uXG4gICAgICAgIClcbiAgICAgICAgLmRlbGF5KFxuICAgICAgICAgIChkLCBpKSA9PiB0aW1pbmdzLmZpbmQodCA9PiB0LmlkID09PSBqb2luS2V5KGQsIGksIFwiZmluYWxcIikpLmRlbGF5XG4gICAgICAgIClcbiAgICAgICAgLmVhc2UoZWFzZUZuKVxuICAgICAgICAuZW5kKClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGRvbmUoXCJlbnRlclwiLCAoKSA9PiB7cmVzb2x2ZSgpO30pO1xuICAgICAgICB9KTtcbiAgICAgIGRvbmUoXCJ1cGRhdGVcIiwgKCkgPT4ge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGhhc0ZhY2V0LmluaXRpYWwgJiYgIWhhc0ZhY2V0LmZpbmFsKSB7XG4gICAgICAvLyBtYXJrcyB3aXRoIHBhdGhncm91cCAtPiBzaW5nbGUgbWFyayB3aXRob3V0IHBhdGhncm91cFxuXG4gICAgICBjb25zdCB7cGFyZW50fSA9IGNoYW5nZS5pbml0aWFsLFxuICAgICAgICBwcmV2RGF0YSA9IGQzLmxvY2FsKCk7XG4gICAgICAvLyBSZW1vdmUgdGhlIHBhdGhncm91cCBhbmQgdGhlIG1hcmtzXG5cbiAgICAgIGxldCBleGl0TWFya3MgPSBkM1xuICAgICAgICAuc2VsZWN0KGFuaW1WaXMgKyBgIC5yb2xlLXNjb3BlLiR7cGFyZW50Lm5hbWV9YClcbiAgICAgICAgLnNlbGVjdEFsbChgIC5yb2xlLXNjb3BlLiR7cGFyZW50Lm5hbWV9ID4gZ2ApXG4gICAgICAgIC5kYXRhKHN0ZXAuY3VyckRhdGEpXG4gICAgICAgIC5zZWxlY3QoYC4ke2NoYW5nZS5jb21wTmFtZX0gPiBwYXRoYClcbiAgICAgICAgLmVhY2goZnVuY3Rpb24oZCkge1xuICAgICAgICAgIHByZXZEYXRhLnNldCh0aGlzLCBkKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIGV4aXRNYXJrcyA9IGV4aXRNYXJrcy50cmFuc2l0aW9uKCk7XG5cbiAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgZXhpdE1hcmtzLFxuICAgICAgICAvLyBNQVJLX0FUVFJTX0RBVEFfSU5URVJQT0xBVEVbbWFya3R5cGVdLFxuICAgICAgICBNQVJLX0FUVFJTW21hcmt0eXBlcy5pbml0aWFsXSxcbiAgICAgICAgT2JqZWN0LmFzc2lnbih7fSwgc2NhbGVzLCB7XG4gICAgICAgICAgcHJpbWFyeTogc2NhbGVzLmZpbmFsLFxuICAgICAgICAgIHNlY29uZGFyeTogc2NhbGVzLmluaXRpYWxcbiAgICAgICAgfSksXG4gICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgIE9iamVjdC5hc3NpZ24oe30sIGVuY29kZXMuaW5pdGlhbC5leGl0LCB7IG9wYWNpdHk6IHsgdmFsdWU6IDAgfSB9KSxcbiAgICAgICAgcHJldkRhdGFcbiAgICAgICk7XG5cbiAgICAgIGV4aXRNYXJrc1xuICAgICAgICAuZHVyYXRpb24oXG4gICAgICAgICAgKGQsIGkpID0+XG4gICAgICAgICAgICB0aW1pbmdzLmZpbmQodCA9PiB0LmlkID09PSBqb2luS2V5KGQsIGksIFwiaW5pdGlhbFwiKSkuZHVyYXRpb25cbiAgICAgICAgKVxuICAgICAgICAuZGVsYXkoXG4gICAgICAgICAgKGQsIGkpID0+IHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSwgXCJpbml0aWFsXCIpKS5kZWxheVxuICAgICAgICApXG4gICAgICAgIC5lYXNlKGVhc2VGbilcbiAgICAgICAgLnJlbW92ZSgpXG4gICAgICAgIC5lbmQoKVxuICAgICAgICAudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgICBkb25lKFwiZXhpdFwiLCAoKSA9PiB7cmVzb2x2ZSgpO30pO1xuICAgICAgICB9KTtcblxuICAgICAgLy8gQWRkIHRoZSBzaW5nbGUgYXJlYVxuICAgICAgY29uc3Qgc2liID0gZmluZEFmdGVyU2libGluZyhlVmlldy5zY2VuZWdyYXBoKCkucm9vdCwgY2hhbmdlLmNvbXBOYW1lKTtcblxuICAgICAgbGV0IGVudGVySU1hcmsgPSBhZGRNYXJrKFxuICAgICAgICBkMy5zZWxlY3QoYCR7YW5pbVZpcyAgfSAuJHtjaGFuZ2UuZmluYWwucGFyZW50Lm5hbWV9ID4gZyA+IGdgKSxcbiAgICAgICAgY2hhbmdlLmZpbmFsLFxuICAgICAgICBzaWIgPyBgLiR7c2liLm5hbWV9YCA6IHVuZGVmaW5lZFxuICAgICAgKTtcblxuICAgICAgZW50ZXJJTWFyayA9IGVudGVySU1hcmtcbiAgICAgICAgLnNlbGVjdEFsbChcInBhdGhcIilcbiAgICAgICAgLmRhdGEoc3RlcC5uZXh0RGF0YSlcbiAgICAgICAgLmVudGVyKClcbiAgICAgICAgLmFwcGVuZChcInBhdGhcIik7XG5cbiAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgZW50ZXJJTWFyayxcbiAgICAgICAgTUFSS19BVFRSU1ttYXJrdHlwZXMuZmluYWxdLFxuICAgICAgICB7IHByaW1hcnk6IHNjYWxlcy5pbml0aWFsLCBzZWNvbmRhcnk6IHNjYWxlcy5maW5hbCB9LFxuICAgICAgICBzaWduYWxzLmluaXRpYWwsXG4gICAgICAgIE9iamVjdC5hc3NpZ24oe30sIGVuY29kZXMuZmluYWwuZW50ZXIsIHsgb3BhY2l0eTogeyB2YWx1ZTogMCB9IH0pXG4gICAgICApO1xuXG4gICAgICBlbnRlcklNYXJrLmVhY2goZnVuY3Rpb24oZCkge1xuICAgICAgICBwcmV2RGF0YS5zZXQodGhpcywgZCk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGVudGVyRiA9IGVudGVySU1hcmsudHJhbnNpdGlvbigpO1xuXG4gICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgIGVudGVyRixcbiAgICAgICAgTUFSS19BVFRSU1ttYXJrdHlwZXMuZmluYWxdLFxuICAgICAgICBzY2FsZXMsXG4gICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgIGVuY29kZXMuZmluYWwuZW50ZXIsXG4gICAgICAgIHByZXZEYXRhXG4gICAgICApO1xuXG4gICAgICBlbnRlckZcbiAgICAgICAgLmR1cmF0aW9uKChkLCBpKSA9PiB0aW1pbmdzLmZpbmQodCA9PiB0LnNldCA9PT0gXCJlbnRlclwiKS5kdXJhdGlvbilcbiAgICAgICAgLmRlbGF5KChkLCBpKSA9PiB0aW1pbmdzLmZpbmQodCA9PiB0LnNldCA9PT0gXCJlbnRlclwiKS5kZWxheSlcbiAgICAgICAgLmVhc2UoZWFzZUZuKVxuICAgICAgICAuZW5kKClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGRvbmUoXCJlbnRlclwiLCAoKSA9PiB7cmVzb2x2ZSgpO30pO1xuICAgICAgICB9KTtcbiAgICAgIGRvbmUoXCJ1cGRhdGVcIiwgKCkgPT4ge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRQcm9wKG1hcmt0eXBlcykge1xuICAgICAgY29uc3QgbWFya3R5cGUgPVxuICAgICAgICB0eXBlb2YgbWFya3R5cGVzID09PSBcInN0cmluZ1wiID8gbWFya3R5cGVzIDogbWFya3R5cGVzLmZpbmFsO1xuICAgICAgY29uc3QgcHJvcHMgPSBjaGFuZ2UuZGF0YSAmJiAoaXNMaW5lYXJNYXJrdHlwZShtYXJrdHlwZSkpID9cbiAgICAgICAgTUFSS19BVFRSU19EQVRBX0lOVEVSUE9MQVRFW21hcmt0eXBlXSA6XG4gICAgICAgIE1BUktfQVRUUlNbbWFya3R5cGVdO1xuICAgICAgaWYgKFxuICAgICAgICBpc0FyZWFMaW5lTWFya3R5cGUobWFya3R5cGVzLmluaXRpYWwpICYmXG4gICAgICAgIGlzQXJlYUxpbmVNYXJrdHlwZShtYXJrdHlwZXMuZmluYWwpICYmXG4gICAgICAgIG1hcmt0eXBlcy5maW5hbCAhPT0gbWFya3R5cGVzLmluaXRpYWxcbiAgICAgICkge1xuICAgICAgICBwcm9wc1swXS50d2Vha3MucHVzaCh7XG4gICAgICAgICAgdHlwZTogXCJhdHRyVHdlZW5cIixcbiAgICAgICAgICB2YWw6IFwiZFwiLFxuICAgICAgICAgIGluaXRpYWxNYXJrdHlwZTogbWFya3R5cGVzLmluaXRpYWwsXG4gICAgICAgICAgaW50ZXJwb2xhdGVTdHlsZTogXCJ1cGRhdGVcIlxuICAgICAgICB9KTtcbiAgICAgICAgcHJvcHNbMF0udHdlYWtzLnB1c2goe1xuICAgICAgICAgIHR5cGU6IFwic3R5bGVcIixcbiAgICAgICAgICB2YWw6IFwiZmlsbFwiLFxuICAgICAgICAgIGluaXRpYWxNYXJrdHlwZTogbWFya3R5cGVzLmluaXRpYWwsXG4gICAgICAgICAgYXNUd2VlbjogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgcHJvcHNbMF0udHdlYWtzLnB1c2goe1xuICAgICAgICAgIHR5cGU6IFwic3R5bGVcIixcbiAgICAgICAgICB2YWw6IFwic3Ryb2tlXCIsXG4gICAgICAgICAgaW5pdGlhbE1hcmt0eXBlOiBtYXJrdHlwZXMuaW5pdGlhbFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwcm9wcztcbiAgICB9XG4gICAgZnVuY3Rpb24gZXhpdChcbiAgICAgIHRpbWluZ3MsXG4gICAgICBtYXJrR3MsXG4gICAgICBtYXJrdHlwZSxcbiAgICAgIGVuY29kZXMsXG4gICAgICBwcmV2RGF0YSxcbiAgICAgIHNldFR5cGUsXG4gICAgICBpc0FsbERvbmUgPSBmYWxzZVxuICAgICkge1xuICAgICAgLy8gaW5pdGlhdGUgZXhpdFxuICAgICAgbGV0IGV4aXRJID0gbWFya0dzLmV4aXQoKTtcblxuICAgICAgLy8gSWYgdGhleSBhcmUgYWxyZWFkeSBlbnRlcmVkLFxuICAgICAgaWYgKGV4aXRJLmRhdGEoKS5sZW5ndGggPT09IDAgfHwgIShjaGFuZ2UuZGF0YSB8fCBpc0FkZCB8fCBpc1JlbW92ZSkpIHtcbiAgICAgICAgZXhpdEkgPSBtYXJrR3MuZmlsdGVyKGQgPT4gam9pblNldChkKSA9PT0gXCJleGl0XCIpO1xuICAgICAgfVxuICAgICAgaWYgKGV4aXRJLmRhdGEoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGV4aXRJTWFyayA9IGV4aXRJLnNlbGVjdChgLiR7Y2hhbmdlLmNvbXBOYW1lfSA+IHBhdGhgKTtcblxuICAgICAgICAvLyBmaW5hbGl6ZSBleGl0XG4gICAgICAgIGNvbnN0IGV4aXRGTWFyayA9IGV4aXRJTWFyay50cmFuc2l0aW9uKCk7XG5cbiAgICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICAgIGV4aXRGTWFyayxcbiAgICAgICAgICBNQVJLX0FUVFJTW21hcmt0eXBlXSxcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHt9LCBzY2FsZXMsIHtcbiAgICAgICAgICAgIHByaW1hcnk6IHNjYWxlcy5maW5hbCxcbiAgICAgICAgICAgIHNlY29uZGFyeTogc2NhbGVzLmluaXRpYWxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICAgIGVuY29kZXMsXG4gICAgICAgICAgcHJldkRhdGFcbiAgICAgICAgKTtcblxuICAgICAgICBleGl0Rk1hcmtcbiAgICAgICAgICAuZHVyYXRpb24oXG4gICAgICAgICAgICAoZCwgaSkgPT5cbiAgICAgICAgICAgICAgdGltaW5ncy5maW5kKHQgPT4gdC5pZCA9PT0gam9pbktleShkLCBpLCBzZXRUeXBlKSkuZHVyYXRpb25cbiAgICAgICAgICApXG4gICAgICAgICAgLmRlbGF5KFxuICAgICAgICAgICAgKGQsIGkpID0+IHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSwgc2V0VHlwZSkpLmRlbGF5XG4gICAgICAgICAgKVxuICAgICAgICAgIC5lYXNlKGVhc2VGbilcbiAgICAgICAgICAucmVtb3ZlKClcbiAgICAgICAgICAuZW5kKClcbiAgICAgICAgICAudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGV4aXRJLnJlbW92ZSgpO1xuICAgICAgICAgICAgZG9uZShpc0FsbERvbmUgPyBcImFsbFwiIDogXCJleGl0XCIsICgpID0+IHtyZXNvbHZlKCk7fSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkb25lKGlzQWxsRG9uZSA/IFwiYWxsXCIgOiBcImV4aXRcIiwgKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZSh0aW1pbmdzLCBtYXJrR3MsIG1hcmt0eXBlcywgZW5jb2RlcywgcHJldkRhdGEpIHtcbiAgICAgIGxldCB1cGRhdGVGID0gbWFya0dzLmZpbHRlcihkID0+IGpvaW5TZXQoZCkgPT09IFwidXBkYXRlXCIpO1xuXG4gICAgICBpZiAoY2hhbmdlLmRhdGEgPT09IGZhbHNlICYmIHVwZGF0ZUYuZGF0YSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB1cGRhdGVGID0gbWFya0dzO1xuICAgICAgfVxuICAgICAgbGV0IHVwZGF0ZUZNYXJrID0gdXBkYXRlRi5zZWxlY3QoYC4ke2NoYW5nZS5jb21wTmFtZX1gKTtcbiAgICAgIGlmIChtYXJrdHlwZXMuaW5pdGlhbCAhPT0gbWFya3R5cGVzLmZpbmFsKSB7XG4gICAgICAgIHVwZGF0ZUZNYXJrLmNsYXNzZWQoYG1hcmstJHttYXJrdHlwZXMuaW5pdGlhbH1gLCBmYWxzZSk7XG4gICAgICAgIHVwZGF0ZUZNYXJrLmNsYXNzZWQoYG1hcmstJHttYXJrdHlwZXMuZmluYWx9YCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICB1cGRhdGVGTWFyayA9IHVwZGF0ZUZNYXJrLnNlbGVjdChcInBhdGhcIik7XG4gICAgICBpZiAodXBkYXRlRk1hcmsuZGF0YSgpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdXBkYXRlRk1hcmsgPSB1cGRhdGVGTWFyay50cmFuc2l0aW9uKCk7XG4gICAgICAgIGNvbnN0IHByb3BzID0gZ2V0UHJvcChtYXJrdHlwZXMpO1xuICAgICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgICAgdXBkYXRlRk1hcmssXG4gICAgICAgICAgcHJvcHMsXG4gICAgICAgICAgLy8gY2hhbmdlLmRhdGEgPyBNQVJLX0FUVFJTX0RBVEFfSU5URVJQT0xBVEVbbWFya3R5cGVdIDogTUFSS19BVFRSU1ttYXJrdHlwZV0sXG4gICAgICAgICAgc2NhbGVzLFxuICAgICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgICAgZW5jb2RlcyxcbiAgICAgICAgICBwcmV2RGF0YVxuICAgICAgICApO1xuICAgICAgICB1cGRhdGVGTWFya1xuICAgICAgICAgIC5kdXJhdGlvbihcbiAgICAgICAgICAgIChkLCBpKSA9PiB0aW1pbmdzLmZpbmQodCA9PiB0LmlkID09PSBqb2luS2V5KGQsIGkpKS5kdXJhdGlvblxuICAgICAgICAgIClcbiAgICAgICAgICAuZGVsYXkoKGQsIGkpID0+IHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSkpLmRlbGF5KVxuICAgICAgICAgIC5lYXNlKGVhc2VGbilcbiAgICAgICAgICAuZW5kKClcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKFwidXBkYXRlXCIsICgpID0+IHtyZXNvbHZlKCk7fSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkb25lKFwidXBkYXRlXCIsICgpID0+IHtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBlbnRlcihcbiAgICAgIHRpbWluZ3MsXG4gICAgICBtYXJrR3MsXG4gICAgICBtYXJrdHlwZSxcbiAgICAgIGVuY29kZUluaXRpYWwgPSBlbmNvZGVzLmluaXRpYWwuZW50ZXIsXG4gICAgICBlbmNvZGUgPSBlbmNvZGVzLmZpbmFsLmVudGVyXG4gICAgKSB7XG4gICAgICAvLyBhcHBlbmQgZ3JvdXAgbWFya1xuICAgICAgY29uc3QgZW50ZXJJRyA9IG1hcmtHcy5lbnRlcigpLmFwcGVuZChcImdcIik7XG4gICAgICBlbnRlcklHLmFwcGVuZChcInBhdGhcIikuYXR0cihcImNsYXNzXCIsIFwiYmFja2dyb3VuZFwiKTtcblxuICAgICAgLy8gYXBwZW5kIG1hcmsgbWFya1xuICAgICAgbGV0IGVudGVySU1hcmsgPSBlbnRlcklHXG4gICAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgYG1hcmstJHttYXJrdHlwZX0gcm9sZS1tYXJrICR7Y2hhbmdlLmNvbXBOYW1lfWApXG4gICAgICAgIC5hcHBlbmQoXCJwYXRoXCIpO1xuXG4gICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgIGVudGVySU1hcmssXG4gICAgICAgIE1BUktfQVRUUlNbbWFya3R5cGVdLFxuICAgICAgICB7IHByaW1hcnk6IHNjYWxlcy5pbml0aWFsLCBzZWNvbmRhcnk6IHNjYWxlcy5maW5hbCB9LFxuICAgICAgICBzaWduYWxzLmluaXRpYWwsXG4gICAgICAgIGVuY29kZUluaXRpYWxcbiAgICAgICk7XG5cbiAgICAgIC8vIElmIHRoZXkgYXJlIGFscmVhZHkgZW50ZXJlZCxcbiAgICAgIGlmIChlbnRlcklHLmRhdGEoKS5sZW5ndGggPT09IDAgfHwgIShjaGFuZ2UuZGF0YSB8fCBpc0FkZCB8fCBpc1JlbW92ZSkpIHtcbiAgICAgICAgZW50ZXJJTWFyayA9IG1hcmtHc1xuICAgICAgICAgIC5maWx0ZXIoZCA9PiBqb2luU2V0KGQpID09PSBcImVudGVyXCIpXG4gICAgICAgICAgLnNlbGVjdEFsbChgLiR7Y2hhbmdlLmNvbXBOYW1lfSA+IHBhdGhgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVudGVySU1hcmsuZGF0YSgpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgcHJldkRhdGEgPSBkMy5sb2NhbCgpO1xuICAgICAgICBlbnRlcklNYXJrLmVhY2goZnVuY3Rpb24oZCkge1xuICAgICAgICAgIHByZXZEYXRhLnNldCh0aGlzLCBkKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGVudGVyRk1hcmsgPSBlbnRlcklNYXJrLnRyYW5zaXRpb24oKTtcblxuICAgICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgICAgZW50ZXJGTWFyayxcbiAgICAgICAgICAvLyBNQVJLX0FUVFJTX0RBVEFfSU5URVJQT0xBVEVbbWFya3R5cGVdLFxuICAgICAgICAgIE1BUktfQVRUUlNbbWFya3R5cGVdLFxuICAgICAgICAgIHNjYWxlcyxcbiAgICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICAgIGVuY29kZSxcbiAgICAgICAgICBwcmV2RGF0YVxuICAgICAgICApO1xuXG4gICAgICAgIGVudGVyRk1hcmtcbiAgICAgICAgICAuZHVyYXRpb24oXG4gICAgICAgICAgICAoZCwgaSkgPT5cbiAgICAgICAgICAgICAgdGltaW5ncy5maW5kKHQgPT4gdC5pZCA9PT0gam9pbktleShkLCBpLCBcImZpbmFsXCIpKS5kdXJhdGlvblxuICAgICAgICAgIClcbiAgICAgICAgICAuZGVsYXkoXG4gICAgICAgICAgICAoZCwgaSkgPT4gdGltaW5ncy5maW5kKHQgPT4gdC5pZCA9PT0gam9pbktleShkLCBpLCBcImZpbmFsXCIpKS5kZWxheVxuICAgICAgICAgIClcbiAgICAgICAgICAuZWFzZShlYXNlRm4pXG4gICAgICAgICAgLmVuZCgpXG4gICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZShcImVudGVyXCIsICgpID0+IHtyZXNvbHZlKCk7fSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkb25lKFwiZW50ZXJcIiwgKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxufVxuZnVuY3Rpb24gYWRkTWFyayAoZDNTZWxlY3Rpb24sIGNvbXBTcGVjLCBiZWZvcmUsIG9wdCA9IHt9KSB7XG4gIGlmIChvcHQuaGFzR3JvdXApIHtcbiAgICByZXR1cm4gZDNTZWxlY3Rpb24uaW5zZXJ0KFwiZ1wiLCBiZWZvcmUpXG4gICAgICAuYXR0cihcImNsYXNzXCIsIGBtYXJrLWdyb3VwIHJvbGUtc2NvcGUgJHtjb21wU3BlYy5wYXJlbnQubmFtZX1gKTtcbiAgfVxuICByZXR1cm4gZDNTZWxlY3Rpb24uaW5zZXJ0KFwiZ1wiLCBiZWZvcmUpXG4gICAgLmF0dHIoXCJjbGFzc1wiLCBgbWFyay0ke2NvbXBTcGVjLnR5cGV9IHJvbGUtbWFyayAke2NvbXBTcGVjLm5hbWV9YCk7XG5cbn1cblxuZXhwb3J0IHsgYXJlYUxpbmVJbnRlcnBvbGF0ZSB9O1xuIiwiaW1wb3J0ICogYXMgZDMgZnJvbSBcImQzXCI7XG5pbXBvcnQge1xuICBwcm9wTWFwLFxuICBnZXRFYXNlRm4sXG4gIGZpbmRBZnRlclNpYmxpbmcsXG4gIGdldEpvaW5JbmZvLFxuICBmaW5kQ29tcCxcbiAgY29tcHV0ZVNjYWxlXG59IGZyb20gXCIuL3V0aWxcIjtcbmltcG9ydCB7IGZldGNoQXR0cmlidXRlcywgZ2V0UHJvcFZhbCB9IGZyb20gXCIuL2F0dHJpYnV0ZUZldGNoZXJcIjtcbmltcG9ydCB7IGdldFN0eWxlLCB0cmFuc2Zvcm1JdGVtIH0gZnJvbSBcIi4vdmVnYS1yZW5kZXItdXRpbFwiO1xuaW1wb3J0IHsgY29weSB9IGZyb20gXCIuLi91dGlsL3V0aWxcIjtcbmltcG9ydCB7IGNvbXB1dGVUaW1pbmcsIGVudW1TdGVwQ29tcHV0ZVRpbWluZyB9IGZyb20gXCIuL3RpbWluZ3NcIjtcbmltcG9ydCB7IERFRkFVTFRfRU5DT0RFIH0gZnJvbSBcIi4uL2RlZmF1bHRcIjtcblxuY29uc3QgSU5JVElBTF9TVEFUVVMgPSB7XG4gIHVwZGF0ZTogZmFsc2UsXG4gIGVudGVyOiBmYWxzZSxcbiAgZXhpdDogZmFsc2Vcbn07XG5cbmZ1bmN0aW9uIGFkZEF4aXMoZDNTZWxlY3Rpb24sIG5ld0F4aXNTY2VuZSwgcHJpb3IpIHtcbiAgY29uc3Qgc2NOYW1lID0gbmV3QXhpc1NjZW5lLm5hbWU7XG4gIGNvbnN0IGF4aXNTdWJHID0gZDNTZWxlY3Rpb25cbiAgICAuaW5zZXJ0KFwiZ1wiLCBwcmlvcilcbiAgICAuYXR0cihcImNsYXNzXCIsIGBtYXJrLWdyb3VwIHJvbGUtYXhpcyAke3NjTmFtZX1gKVxuICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgdHJhbnNmb3JtSXRlbShuZXdBeGlzU2NlbmUuaXRlbXNbMF0pKTtcblxuICBjb25zdCB7IGRhdHVtIH0gPSBuZXdBeGlzU2NlbmUuaXRlbXNbMF07XG4gIGlmIChkYXR1bS50aWNrcykge1xuICAgIGF4aXNTdWJHLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsIFwibWFyay1ydWxlIHJvbGUtYXhpcy10aWNrXCIpO1xuICB9XG4gIGlmIChkYXR1bS5sYWJlbHMpIHtcbiAgICBheGlzU3ViRy5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1hcmstdGV4dCByb2xlLWF4aXMtbGFiZWxcIik7XG4gIH1cbiAgaWYgKGRhdHVtLmdyaWQpIHtcbiAgICBheGlzU3ViRy5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1hcmstcnVsZSByb2xlLWF4aXMtZ3JpZFwiKTtcbiAgfVxuICBpZiAoZGF0dW0uZG9tYWluKSB7XG4gICAgYXhpc1N1YkcuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJtYXJrLXJ1bGUgcm9sZS1heGlzLWRvbWFpblwiKTtcbiAgfVxuICBpZiAoZGF0dW0udGl0bGUpIHtcbiAgICBheGlzU3ViRy5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1hcmstdGV4dCByb2xlLWF4aXMtdGl0bGVcIik7XG4gIH1cblxuICByZXR1cm4gZDNTZWxlY3Rpb247XG59XG5cbmZ1bmN0aW9uIGRvbmVNYWtlcihzdWJDb21wb25lbnRzKSB7XG4gIGNvbnN0IHRyYW5zaXRpb25TdGF0dXMgPSBzdWJDb21wb25lbnRzLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiB7XG4gICAgYWNjW2N1cnJdID0gY29weShJTklUSUFMX1NUQVRVUyk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuXG4gIHJldHVybiBmdW5jdGlvbih3aGljaCwgY2IpIHtcbiAgICBpZiAod2hpY2gubGVuZ3RoID09PSAyKSB7XG4gICAgICBpZiAod2hpY2hbMV0gPT09IFwiYWxsXCIpIHtcbiAgICAgICAgdHJhbnNpdGlvblN0YXR1c1t3aGljaFswXV0uZXhpdCA9IHRydWU7XG4gICAgICAgIHRyYW5zaXRpb25TdGF0dXNbd2hpY2hbMF1dLmVudGVyID0gdHJ1ZTtcbiAgICAgICAgdHJhbnNpdGlvblN0YXR1c1t3aGljaFswXV0udXBkYXRlID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyYW5zaXRpb25TdGF0dXNbd2hpY2hbMF1dW3doaWNoWzFdXSA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh3aGljaCA9PT0gXCJhbGxcIikge1xuICAgICAgdHJhbnNpdGlvblN0YXR1cy51cGRhdGUgPSB0cnVlO1xuICAgICAgdHJhbnNpdGlvblN0YXR1cy5lbnRlciA9IHRydWU7XG4gICAgICB0cmFuc2l0aW9uU3RhdHVzLmV4aXQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0cmFuc2l0aW9uU3RhdHVzW3doaWNoXSA9IHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgYWxsRG9uZSA9IE9iamVjdC5rZXlzKHRyYW5zaXRpb25TdGF0dXMpLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGFjYyAmJlxuICAgICAgICB0cmFuc2l0aW9uU3RhdHVzW2tleV0udXBkYXRlICYmXG4gICAgICAgIHRyYW5zaXRpb25TdGF0dXNba2V5XS5lbnRlciAmJlxuICAgICAgICB0cmFuc2l0aW9uU3RhdHVzW2tleV0uZXhpdFxuICAgICAgKTtcbiAgICB9LCB0cnVlKTtcbiAgICBpZiAoYWxsRG9uZSkge1xuICAgICAgY2IoKTtcbiAgICB9XG4gIH07XG59XG5mdW5jdGlvbiBheGlzSW50ZXJwb2xhdGUocmF3SW5mbywgc3RlcCwgdGFyZ2V0RWxtKSB7XG4gIGZ1bmN0aW9uIGpvaW5LZXlHZW4oc3ViY29tcCkge1xuICAgIHJldHVybiAoZCwgaSwgaW5pdGlhbE9yRmluYWwgPSBcImluaXRpYWxcIikgPT4ge1xuICAgICAgaWYgKCFkKSB7XG4gICAgICAgIHJldHVybiBpLnRvU3RyaW5nKCk7XG4gICAgICB9XG4gICAgICBpZiAoIWQuX19nZW1pbmlfXykge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHN0ZXAuY29tcHV0ZURhdHVtSWRbc3ViY29tcF0gPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gc3RlcC5jb21wdXRlRGF0dW1JZFtzdWJjb21wXShkLCBpKVxuICAgICAgICAgIDogc3RlcC5jb21wdXRlRGF0dW1JZFtzdWJjb21wXVtpbml0aWFsT3JGaW5hbF0oZCwgaSk7XG4gICAgICAgIC8vIHJldHVybiBzdGVwLmNvbXB1dGVEYXR1bUlkW3N1YmNvbXBdKGQsIGkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGdldEpvaW5JbmZvKGQsIGksIHN0ZXAsIFwiam9pbktleVwiKTtcbiAgICB9O1xuICB9XG4gIGNvbnN0IGpvaW5TZXQgPSAoZCwgaSkgPT4gZ2V0Sm9pbkluZm8oZCwgaSwgc3RlcCwgXCJhbmltU2V0XCIpO1xuICBjb25zdCBhbmltVmlzID0gdGFyZ2V0RWxtO1xuICBjb25zdCBlVmlldyA9IHJhd0luZm8uZVZpcy52aWV3O1xuXG4gIGNvbnN0IGRvbmUgPSBkb25lTWFrZXIoW1widGlja1wiLCBcImxhYmVsXCIsIFwiZ3JpZFwiLCBcInRpdGxlXCIsIFwiZG9tYWluXCJdKTtcblxuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgLy8gTWFyayBJbnRlcnBvbGF0ZSBEYXRhXG5cbiAgICBjb25zdCB7IGNoYW5nZSB9ID0gc3RlcDtcbiAgICBjb25zdCBlYXNlRm4gPSBnZXRFYXNlRm4oc3RlcC50aW1pbmcuZWFzZSk7XG5cbiAgICBsZXQgZGVmYXVsdERvID0gdHJ1ZTtcbiAgICBpZiAoY2hhbmdlLmVuY29kZSA9PT0gZmFsc2UpIHtcbiAgICAgIGRlZmF1bHREbyA9IGZhbHNlO1xuICAgIH1cbiAgICBsZXQgZG9UaWNrcyA9IGRlZmF1bHREbztcbiAgICBsZXQgZG9MYWJlbHMgPSBkZWZhdWx0RG87XG4gICAgbGV0IGRvQXhpc0cgPSBkZWZhdWx0RG87XG4gICAgbGV0IGRvVGl0bGUgPSBkZWZhdWx0RG87XG4gICAgbGV0IGRvRG9tYWluID0gZGVmYXVsdERvO1xuICAgIGxldCBkb0dyaWQgPSBkZWZhdWx0RG87XG5cbiAgICBpZiAoY2hhbmdlLmVuY29kZSkge1xuICAgICAgZG9UaWNrcyA9ICEoY2hhbmdlLmVuY29kZS50aWNrcyA9PT0gZmFsc2UpO1xuICAgICAgZG9MYWJlbHMgPSAhKGNoYW5nZS5lbmNvZGUubGFiZWxzID09PSBmYWxzZSk7XG4gICAgICBkb0F4aXNHID0gIShjaGFuZ2UuZW5jb2RlLmF4aXMgPT09IGZhbHNlKTtcbiAgICAgIGRvVGl0bGUgPSAhKGNoYW5nZS5lbmNvZGUudGl0bGUgPT09IGZhbHNlKTtcbiAgICAgIGRvR3JpZCA9ICEoY2hhbmdlLmVuY29kZS5ncmlkID09PSBmYWxzZSk7XG4gICAgICBkb0RvbWFpbiA9ICEoY2hhbmdlLmVuY29kZS5kb21haW4gPT09IGZhbHNlKTtcbiAgICB9XG5cbiAgICBsZXQgaXNSZW1vdmUgPSBmYWxzZTtcbiAgICBsZXQgYXhpcyA9IGQzLnNlbGVjdEFsbChgJHthbmltVmlzfSAucm9sZS1heGlzLiR7Y2hhbmdlLmNvbXBOYW1lfWApO1xuXG4gICAgY29uc3Qgc2NOYW1lID0gY2hhbmdlLmNvbXBOYW1lO1xuICAgIC8vIGNvbGxlY3QgdGhlIHNjYWxlIG9iamVjdHMgdG8gc2NhbGUgdGhlIGluaXRpYWwvZmluYWwgdmFsdWVzXG4gICAgY29uc3QgeyBzY2FsZXMgfSA9IHN0ZXA7XG4gICAgY29uc3QgeyBzaWduYWxzIH0gPSBzdGVwO1xuXG4gICAgLy8gQWRkIEF4aXNcbiAgICBpZiAoY2hhbmdlLmluaXRpYWwgPT09IG51bGwpIHtcbiAgICAgIC8vIHRvZG86IGZpbmQgd2hlcmUtdG8tYWRkIGQzU2VsZWN0aW9uIGJ5IHNlYXJjaGluZyBlVmlldy5zY2VuZWdyYXBoXG4gICAgICBjb25zdCByb290TWFyayA9IGQzLnNlbGVjdChgJHthbmltVmlzfSAubWFyay1ncm91cC5yb290IGcgZyBgKTtcbiAgICAgIGNvbnN0IHJvb3RTY2VuZSA9IGVWaWV3LnNjZW5lZ3JhcGgoKS5yb290O1xuICAgICAgY29uc3Qgc2liID0gZmluZEFmdGVyU2libGluZyhyb290U2NlbmUsIGNoYW5nZS5jb21wTmFtZSk7XG4gICAgICBhZGRBeGlzKFxuICAgICAgICByb290TWFyayxcbiAgICAgICAgZmluZENvbXAocm9vdFNjZW5lLCBzY05hbWUsIFwiYXhpc1wiKVswXSxcbiAgICAgICAgc2liID8gYC4ke3NpYi5uYW1lfWAgOiB1bmRlZmluZWRcbiAgICAgICk7XG4gICAgICBheGlzID0gZDMuc2VsZWN0QWxsKGAke2FuaW1WaXN9IC5yb2xlLWF4aXMuJHtjaGFuZ2UuY29tcE5hbWV9YCk7XG4gICAgfSBlbHNlIGlmIChjaGFuZ2UuZmluYWwgPT09IG51bGwpIHtcbiAgICAgIC8vIFJlbW92ZSBBeGlzXG4gICAgICBpc1JlbW92ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIGF4aXMgZ3JvdXBcbiAgICBpZiAoaXNSZW1vdmUpIHtcbiAgICAgIGNvbnN0IG1hbnVhbEVuY29kZSA9XG4gICAgICAgIGNoYW5nZS5lbmNvZGUgJiYgY2hhbmdlLmVuY29kZS5heGlzID8gY2hhbmdlLmVuY29kZS5heGlzLmV4aXQgOiB7fTtcbiAgICAgIGNvbnN0IGF4aXNHID0gYXhpcy5zZWxlY3QoXCJnXCIpO1xuICAgICAgY29uc3QgZkF4aXNHID0gYXhpc0cudHJhbnNpdGlvbigpO1xuICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICBmQXhpc0csXG4gICAgICAgIFtcImdyb3VwXCJdLFxuICAgICAgICBzY2FsZXMuZmluYWwsXG4gICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgIE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfRU5DT0RFLmF4aXMuYXhpcy5leGl0LCBtYW51YWxFbmNvZGUpXG4gICAgICApO1xuICAgICAgZkF4aXNHLmR1cmF0aW9uKHN0ZXAuZHVyYXRpb24pO1xuICAgIH0gZWxzZSBpZiAoZG9BeGlzRykge1xuICAgICAgY29uc3QgYXhpc0cgPSBheGlzLnNlbGVjdChcImdcIik7XG4gICAgICBheGlzRy5kYXRhKHN0ZXAubmV4dERhdGEuYXhpcyk7XG4gICAgICBjb25zdCBmQXhpc0cgPSBheGlzRy50cmFuc2l0aW9uKCk7XG4gICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgIGZBeGlzRyxcbiAgICAgICAgW1wiZ3JvdXBcIl0sXG4gICAgICAgIHNjYWxlcy5maW5hbCxcbiAgICAgICAgc2lnbmFscy5maW5hbCxcbiAgICAgICAgc3RlcC5lbmNvZGVzLmF4aXMuZmluYWwudXBkYXRlXG4gICAgICApO1xuICAgICAgZkF4aXNHXG4gICAgICAgIC5kZWxheShzdGVwLmRlbGF5KVxuICAgICAgICAuZHVyYXRpb24oc3RlcC5kdXJhdGlvbilcbiAgICAgICAgLmVhc2UoZWFzZUZuKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYWxjdWxhdGVHZXRWYWx1ZXMoZW5jb2Rlcykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdXBkYXRlOiB7XG4gICAgICAgICAgaW5pdGlhbDogKGF0dHIsIGdldFNjYWxlcywgZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29tcHV0ZWRTY2FsZXMgPSBjb21wdXRlU2NhbGUoc2NhbGVzLCBbc2NOYW1lXSwgZ2V0U2NhbGVzKTtcbiAgICAgICAgICAgIHJldHVybiBnZXRQcm9wVmFsKFxuICAgICAgICAgICAgICBhdHRyLFxuICAgICAgICAgICAgICBlbmNvZGVzLmluaXRpYWwudXBkYXRlLFxuICAgICAgICAgICAgICBjb21wdXRlZFNjYWxlcy5pbml0aWFsLFxuICAgICAgICAgICAgICBzaWduYWxzLmluaXRpYWwsXG4gICAgICAgICAgICAgIGRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBmaW5hbDogKGF0dHIsIGdldFNjYWxlcywgZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29tcHV0ZWRTY2FsZXMgPSBjb21wdXRlU2NhbGUoc2NhbGVzLCBbc2NOYW1lXSwgZ2V0U2NhbGVzKTtcbiAgICAgICAgICAgIHJldHVybiBnZXRQcm9wVmFsKFxuICAgICAgICAgICAgICBhdHRyLFxuICAgICAgICAgICAgICBlbmNvZGVzLmZpbmFsLnVwZGF0ZSxcbiAgICAgICAgICAgICAgY29tcHV0ZWRTY2FsZXMuZmluYWwsXG4gICAgICAgICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgICAgICAgIGRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlbnRlcjoge1xuICAgICAgICAgIGluaXRpYWw6IChhdHRyLCBnZXRTY2FsZXMsIGQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXB1dGVkU2NhbGVzID0gY29tcHV0ZVNjYWxlKHNjYWxlcywgW3NjTmFtZV0sIGdldFNjYWxlcyk7XG5cbiAgICAgICAgICAgIHJldHVybiBnZXRQcm9wVmFsKFxuICAgICAgICAgICAgICBhdHRyLFxuICAgICAgICAgICAgICBlbmNvZGVzLmluaXRpYWwuZW50ZXIsXG4gICAgICAgICAgICAgIGNvbXB1dGVkU2NhbGVzLmluaXRpYWxbc2NOYW1lXVxuICAgICAgICAgICAgICAgID8gY29tcHV0ZWRTY2FsZXMuaW5pdGlhbFxuICAgICAgICAgICAgICAgIDogY29tcHV0ZWRTY2FsZXMuZmluYWwsXG4gICAgICAgICAgICAgIHNpZ25hbHMuaW5pdGlhbCxcbiAgICAgICAgICAgICAgZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZpbmFsOiAoYXR0ciwgZ2V0U2NhbGVzLCBkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb21wdXRlZFNjYWxlcyA9IGNvbXB1dGVTY2FsZShzY2FsZXMsIFtzY05hbWVdLCBnZXRTY2FsZXMpO1xuICAgICAgICAgICAgcmV0dXJuIGdldFByb3BWYWwoXG4gICAgICAgICAgICAgIGF0dHIsXG4gICAgICAgICAgICAgIGVuY29kZXMuZmluYWwuZW50ZXIsXG4gICAgICAgICAgICAgIGNvbXB1dGVkU2NhbGVzLmZpbmFsLFxuICAgICAgICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICAgICAgICBkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXhpdDoge1xuICAgICAgICAgIGluaXRpYWw6IChhdHRyLCBnZXRTY2FsZXMsIGQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXB1dGVkU2NhbGVzID0gY29tcHV0ZVNjYWxlKHNjYWxlcywgW3NjTmFtZV0sIGdldFNjYWxlcyk7XG4gICAgICAgICAgICByZXR1cm4gZ2V0UHJvcFZhbChcbiAgICAgICAgICAgICAgYXR0cixcbiAgICAgICAgICAgICAgZW5jb2Rlcy5pbml0aWFsLmV4aXQsXG4gICAgICAgICAgICAgIGNvbXB1dGVkU2NhbGVzLmluaXRpYWwsXG4gICAgICAgICAgICAgIHNpZ25hbHMuaW5pdGlhbCxcbiAgICAgICAgICAgICAgZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZpbmFsOiAoYXR0ciwgZ2V0U2NhbGVzLCBkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb21wdXRlZFNjYWxlcyA9IGNvbXB1dGVTY2FsZShzY2FsZXMsIFtzY05hbWVdLCBnZXRTY2FsZXMpO1xuICAgICAgICAgICAgcmV0dXJuIGdldFByb3BWYWwoXG4gICAgICAgICAgICAgIGF0dHIsXG4gICAgICAgICAgICAgIGVuY29kZXMuZmluYWwuZXhpdCxcbiAgICAgICAgICAgICAgY29tcHV0ZWRTY2FsZXMuZmluYWwsXG4gICAgICAgICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgICAgICAgIGRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICAvLyB1cGRhdGUgdGlja1xuICAgIGlmIChkb1RpY2tzKSB7XG4gICAgICBjb25zdCB0aWNrRyA9IGF4aXMuc2VsZWN0QWxsKFwiLnJvbGUtYXhpcy10aWNrXCIpO1xuICAgICAgY29uc3QgZW5jb2RlcyA9IHN0ZXAuZW5jb2Rlcy50aWNrcztcblxuICAgICAgY29uc3QgVElDS19BVFRSUyA9IFtcInRpY2tcIl07XG5cbiAgICAgIGlmIChzdGVwLmVudW1lcmF0b3IpIHtcbiAgICAgICAgY29uc3QgZW51bWVyYXRvciA9IHN0ZXAuZW51bWVyYXRvci50aWNrO1xuICAgICAgICBjb25zdCBnZXRWYWx1ZXMgPSBjYWxjdWxhdGVHZXRWYWx1ZXMoZW5jb2Rlcyk7XG4gICAgICAgIC8vIGJpbmQgYWxsS2V5c1xuICAgICAgICBjb25zdCBuZXdCb3VuZFRpY2tzID0gdGlja0dcbiAgICAgICAgICAuc2VsZWN0QWxsKFwibGluZVwiKVxuICAgICAgICAgIC5kYXRhKGVudW1lcmF0b3IuYWxsS2V5cywgZCA9PiBkKTtcbiAgICAgICAgbmV3Qm91bmRUaWNrcy5leGl0KCkucmVtb3ZlKCk7XG4gICAgICAgIG5ld0JvdW5kVGlja3MuZW50ZXIoKS5hcHBlbmQoXCJsaW5lXCIpO1xuICAgICAgICBjb25zdCBhbGxQcm9wcyA9IFRJQ0tfQVRUUlMucmVkdWNlKChhY2MsIHByb3ApID0+IHtcbiAgICAgICAgICByZXR1cm4gYWNjLmNvbmNhdChwcm9wTWFwKHByb3ApKTtcbiAgICAgICAgfSwgW10pO1xuICAgICAgICBjb25zdCBpbml0aWFsVGlja3MgPSB0aWNrR1xuICAgICAgICAgIC5zZWxlY3RBbGwoXCJsaW5lXCIpXG4gICAgICAgICAgLmZpbHRlcihpZCA9PiBbXCJ1cGRhdGVcIiwgXCJleGl0XCJdLmluZGV4T2YoZW51bWVyYXRvci5zZXQoaWQsIDApKSA+PSAwKTtcbiAgICAgICAgYWxsUHJvcHMuZm9yRWFjaChwID0+IHtcbiAgICAgICAgICBpZiAocC50eXBlID09PSBcImF0dHJUd2VlblwiKSB7XG4gICAgICAgICAgICBjb25zdCB0ZW1wUCA9IE9iamVjdC5hc3NpZ24oe30sIHAsIHsgdHlwZTogXCJhdHRyXCIgfSk7XG4gICAgICAgICAgICBpbml0aWFsVGlja3NbdGVtcFAudHlwZV0oZ2V0U3R5bGUodGVtcFAudmFsKSwgaWQgPT5cbiAgICAgICAgICAgICAgZW51bWVyYXRvci5nZXRQcm9wVmFsKHRlbXBQLCBnZXRWYWx1ZXMsIDAsIGlkKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHAudHlwZSA9PT0gXCJ0ZXh0XCIpIHtcbiAgICAgICAgICAgIGluaXRpYWxUaWNrc1twLnR5cGVdKGlkID0+XG4gICAgICAgICAgICAgIGVudW1lcmF0b3IuZ2V0UHJvcFZhbChwLCBnZXRWYWx1ZXMsIDAsIGlkKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5pdGlhbFRpY2tzW3AudHlwZV0oZ2V0U3R5bGUocC52YWwpLCBpZCA9PlxuICAgICAgICAgICAgICBlbnVtZXJhdG9yLmdldFByb3BWYWwocCwgZ2V0VmFsdWVzLCAwLCBpZClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0aW1pbmdzID0gZW51bVN0ZXBDb21wdXRlVGltaW5nKGVudW1lcmF0b3IsIHN0ZXAudGltaW5nKTtcbiAgICAgICAgY29uc3QgdGlja3MgPSB0aWNrRy5zZWxlY3RBbGwoXCJsaW5lXCIpLnRyYW5zaXRpb24oKTtcblxuICAgICAgICBhbGxQcm9wcy5mb3JFYWNoKHAgPT4ge1xuICAgICAgICAgIGlmIChwLnR5cGUgPT09IFwiYXR0clwiKSB7XG4gICAgICAgICAgICB0aWNrcy5hdHRyVHdlZW4ocC52YWwsIGQgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gZW51bWVyYXRvci5pbnRlcnBvbGF0ZUFsb25nRW51bU1ha2VyKHAsIGdldFZhbHVlcykoZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHAudHlwZSA9PT0gXCJ0ZXh0XCIpIHtcbiAgICAgICAgICAgIHRpY2tzLnR3ZWVuKFwidGV4dFwiLCBmdW5jdGlvbihkKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHRleHRJbnRlcnBvbGF0b3IgPSBlbnVtZXJhdG9yLmludGVycG9sYXRlQWxvbmdFbnVtTWFrZXIoXG4gICAgICAgICAgICAgICAgcCxcbiAgICAgICAgICAgICAgICBnZXRWYWx1ZXNcbiAgICAgICAgICAgICAgKShkKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlubmVySFRNTCA9IHRleHRJbnRlcnBvbGF0b3IodCk7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHAudHlwZSA9PT0gXCJzdHlsZVwiKSB7XG4gICAgICAgICAgICB0aWNrcy5zdHlsZVR3ZWVuKGdldFN0eWxlKHAudmFsKSwgZCA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBlbnVtZXJhdG9yLmludGVycG9sYXRlQWxvbmdFbnVtTWFrZXIocCwgZ2V0VmFsdWVzKShkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gaW50ZXJwb2xhdGUgdGhlbVxuICAgICAgICB0aWNrc1xuICAgICAgICAgIC5kdXJhdGlvbigoZCwgaSkgPT4gdGltaW5nc1tpXS5kdXJhdGlvbilcbiAgICAgICAgICAuZGVsYXkoKGQsIGkpID0+IHRpbWluZ3NbaV0uZGVsYXkpXG4gICAgICAgICAgLmVhc2UoZWFzZUZuKVxuICAgICAgICAgIC5lbmQoKVxuICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoW1widGlja1wiLCBcImFsbFwiXSwgKCkgPT4ge1xuICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCB0aWNrcyA9IHRpY2tHLnNlbGVjdEFsbChcImxpbmVcIik7XG4gICAgICAgIGNvbnN0IGN1cnJEYXRhID0gc3RlcC5jdXJyRGF0YS50aWNrO1xuICAgICAgICBjb25zdCBuZXdEYXRhID0gc3RlcC5uZXh0RGF0YS50aWNrO1xuICAgICAgICBjb25zdCBqb2luS2V5ID0gam9pbktleUdlbihcInRpY2tcIik7XG4gICAgICAgIGNvbnN0IHRpbWluZ3MgPSBjb21wdXRlVGltaW5nKFxuICAgICAgICAgIGN1cnJEYXRhLFxuICAgICAgICAgIG5ld0RhdGEsXG4gICAgICAgICAgc3RlcC50aW1pbmcsXG4gICAgICAgICAgam9pbktleSxcbiAgICAgICAgICBqb2luU2V0XG4gICAgICAgICk7XG5cbiAgICAgICAgdGlja3MgPSB0aWNrcy5kYXRhKG5ld0RhdGEsIGQgPT4gam9pbktleShkKSk7XG4gICAgICAgIGxldCBlbnRlclRpY2tzSSA9IHRpY2tzLmVudGVyKCkuYXBwZW5kKFwibGluZVwiKTtcbiAgICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICAgIGVudGVyVGlja3NJLFxuICAgICAgICAgIFRJQ0tfQVRUUlMsXG4gICAgICAgICAgc3RlcC5zYW1lRG9tYWluRGltZW5zaW9uXG4gICAgICAgICAgICA/IHsgcHJpbWFyeTogc2NhbGVzLmluaXRpYWwsIHNlY29uZGFyeTogc2NhbGVzLmZpbmFsIH1cbiAgICAgICAgICAgIDogeyBwcmltYXJ5OiBzY2FsZXMuZmluYWwsIHNlY29uZGFyeTogc2NhbGVzLmluaXRpYWwgfSxcbiAgICAgICAgICBzaWduYWxzLmluaXRpYWwsXG4gICAgICAgICAgZW5jb2Rlcy5pbml0aWFsLmVudGVyXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGVudGVyVGlja3NJLmRhdGEoKS5sZW5ndGggPD0gMCkge1xuICAgICAgICAgIGVudGVyVGlja3NJID0gdGlja3MuZmlsdGVyKGQgPT4gam9pblNldChkKSA9PT0gXCJlbnRlclwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVudGVyVGlja3NGID0gZW50ZXJUaWNrc0kudHJhbnNpdGlvbigpO1xuICAgICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgICAgZW50ZXJUaWNrc0YsXG4gICAgICAgICAgVElDS19BVFRSUyxcbiAgICAgICAgICBzY2FsZXMuZmluYWwsXG4gICAgICAgICAgc2lnbmFscy5maW5hbCxcbiAgICAgICAgICBlbmNvZGVzLmZpbmFsLmVudGVyXG4gICAgICAgICk7XG4gICAgICAgIGVudGVyVGlja3NGXG4gICAgICAgICAgLmR1cmF0aW9uKFxuICAgICAgICAgICAgKGQsIGkpID0+XG4gICAgICAgICAgICAgIHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSwgXCJmaW5hbFwiKSkuZHVyYXRpb25cbiAgICAgICAgICApXG4gICAgICAgICAgLmRlbGF5KFxuICAgICAgICAgICAgKGQsIGkpID0+IHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSwgXCJmaW5hbFwiKSkuZGVsYXlcbiAgICAgICAgICApXG4gICAgICAgICAgLmVhc2UoZWFzZUZuKVxuICAgICAgICAgIC5lbmQoKVxuICAgICAgICAgIC50aGVuKGRvbmUoW1widGlja1wiLCBcImVudGVyXCJdLCAoKSA9PiByZXNvbHZlKCkpKTtcblxuICAgICAgICBsZXQgZXhpdFRpY2tzSSA9IHRpY2tzLmV4aXQoKTtcbiAgICAgICAgaWYgKGV4aXRUaWNrc0kuZGF0YSgpLmxlbmd0aCA8PSAwKSB7XG4gICAgICAgICAgZXhpdFRpY2tzSSA9IHRpY2tzLmZpbHRlcihkID0+IGpvaW5TZXQoZCkgPT09IFwiZXhpdFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV4aXRUaWNrc0YgPSBleGl0VGlja3NJLnRyYW5zaXRpb24oKTtcbiAgICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICAgIGV4aXRUaWNrc0YsXG4gICAgICAgICAgVElDS19BVFRSUyxcbiAgICAgICAgICAvLyBzY2FsZXMuZmluYWxbc2NOYW1lXSA/IHNjYWxlcy5maW5hbCA6IHNjYWxlcy5pbml0aWFsLFxuICAgICAgICAgIHN0ZXAuc2FtZURvbWFpbkRpbWVuc2lvblxuICAgICAgICAgICAgPyB7IHByaW1hcnk6IHNjYWxlcy5maW5hbCwgc2Vjb25kYXJ5OiBzY2FsZXMuaW5pdGlhbCB9XG4gICAgICAgICAgICA6IHsgcHJpbWFyeTogc2NhbGVzLmluaXRpYWwsIHNlY29uZGFyeTogc2NhbGVzLmZpbmFsIH0sIC8vIHsgcHJpbWFyeTogc2NhbGVzLmZpbmFsLCBzZWNvbmRhcnk6IHNjYWxlcy5pbml0aWFsIH0sXG4gICAgICAgICAgc2lnbmFscy5maW5hbCxcbiAgICAgICAgICBlbmNvZGVzLmZpbmFsLmV4aXRcbiAgICAgICAgKTtcbiAgICAgICAgZXhpdFRpY2tzRlxuICAgICAgICAgIC5kdXJhdGlvbihcbiAgICAgICAgICAgIChkLCBpKSA9PlxuICAgICAgICAgICAgICB0aW1pbmdzLmZpbmQodCA9PiB0LmlkID09PSBqb2luS2V5KGQsIGksIFwiaW5pdGlhbFwiKSkuZHVyYXRpb25cbiAgICAgICAgICApXG4gICAgICAgICAgLmRlbGF5KFxuICAgICAgICAgICAgKGQsIGkpID0+IHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSwgXCJpbml0aWFsXCIpKS5kZWxheVxuICAgICAgICAgIClcbiAgICAgICAgICAuZWFzZShlYXNlRm4pXG4gICAgICAgICAgLnJlbW92ZSgpXG4gICAgICAgICAgLmVuZCgpXG4gICAgICAgICAgLnRoZW4oZG9uZShbXCJ0aWNrXCIsIFwiZXhpdFwiXSwgKCkgPT4gcmVzb2x2ZSgpKSk7XG5cbiAgICAgICAgaWYgKHRydWUgJiYgdGlja3MuZGF0YSgpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aWNrcyA9IHRpY2tzLmZpbHRlcihkID0+IGpvaW5TZXQoZCkgPT09IFwidXBkYXRlXCIpLnRyYW5zaXRpb24oKTtcbiAgICAgICAgICAvLyBmaW5hbGl6ZSB0aGUgdXBkYXRlIHNldCBvZiB0aGUgdGlja3NcbiAgICAgICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgICAgICB0aWNrcyxcbiAgICAgICAgICAgIFRJQ0tfQVRUUlMsXG4gICAgICAgICAgICBzY2FsZXMuZmluYWwsXG4gICAgICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICAgICAgZW5jb2Rlcy5maW5hbC51cGRhdGVcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdGlja3NcbiAgICAgICAgICAgIC5kdXJhdGlvbihcbiAgICAgICAgICAgICAgKGQsIGkpID0+IHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSkpLmR1cmF0aW9uXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuZGVsYXkoKGQsIGkpID0+IHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSkpLmRlbGF5KVxuICAgICAgICAgICAgLmVhc2UoZWFzZUZuKVxuICAgICAgICAgICAgLmVuZCgpXG4gICAgICAgICAgICAudGhlbihkb25lKFtcInRpY2tcIiwgXCJ1cGRhdGVcIl0sICgpID0+IHJlc29sdmUoKSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRvbmUoW1widGlja1wiLCBcInVwZGF0ZVwiXSwgKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkb25lKFtcInRpY2tcIiwgXCJlbnRlclwiXSwgKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICAgIGRvbmUoW1widGlja1wiLCBcImV4aXRcIl0sICgpID0+IHJlc29sdmUoKSk7XG4gICAgICBkb25lKFtcInRpY2tcIiwgXCJ1cGRhdGVcIl0sICgpID0+IHJlc29sdmUoKSk7XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIGxhYmVsXG4gICAgY29uc3QgbGFiZWxHID0gYXhpcy5zZWxlY3RBbGwoXCIucm9sZS1heGlzLWxhYmVsXCIpO1xuXG4gICAgY29uc3QgTEFCRUxfQVRUUlMgPSBbXCJ0ZXh0XCIsIFwiYWxpZ25cIl07XG4gICAgLy8gY29uc3QgTEFCRUxfQVRUUlMgPSBbIFwidGV4dFwiIF07XG5cbiAgICBpZiAoIWxhYmVsRy5lbXB0eSgpICYmIGRvTGFiZWxzKSB7XG4gICAgICBjb25zdCBlbmNvZGVzID0gc3RlcC5lbmNvZGVzLmxhYmVscztcblxuICAgICAgaWYgKHN0ZXAuZW51bWVyYXRvcikge1xuICAgICAgICBjb25zdCBlbnVtZXJhdG9yID0gc3RlcC5lbnVtZXJhdG9yLmxhYmVsO1xuXG4gICAgICAgIGNvbnN0IGdldFZhbHVlcyA9IGNhbGN1bGF0ZUdldFZhbHVlcyhlbmNvZGVzKTtcbiAgICAgICAgLy8gYmluZCBhbGxLZXlzXG4gICAgICAgIGNvbnN0IG5ld0JvdW5kTGFiZWxzID0gbGFiZWxHXG4gICAgICAgICAgLnNlbGVjdEFsbChcInRleHRcIilcbiAgICAgICAgICAuZGF0YShlbnVtZXJhdG9yLmFsbEtleXMsIGQgPT4gZCk7XG4gICAgICAgIG5ld0JvdW5kTGFiZWxzLmV4aXQoKS5yZW1vdmUoKTtcbiAgICAgICAgbmV3Qm91bmRMYWJlbHMuZW50ZXIoKS5hcHBlbmQoXCJ0ZXh0XCIpO1xuICAgICAgICBjb25zdCBhbGxQcm9wcyA9IExBQkVMX0FUVFJTLnJlZHVjZSgoYWNjLCBwcm9wKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQocHJvcE1hcChwcm9wKSk7XG4gICAgICAgIH0sIFtdKTtcbiAgICAgICAgY29uc3QgaW5pdGlhbExhYmVscyA9IGxhYmVsR1xuICAgICAgICAgIC5zZWxlY3RBbGwoXCJ0ZXh0XCIpXG4gICAgICAgICAgLmZpbHRlcihpZCA9PiBbXCJ1cGRhdGVcIiwgXCJleGl0XCJdLmluZGV4T2YoZW51bWVyYXRvci5zZXQoaWQsIDApKSA+PSAwKTtcbiAgICAgICAgYWxsUHJvcHMuZm9yRWFjaChwID0+IHtcbiAgICAgICAgICBpZiAocC50eXBlID09PSBcImF0dHJUd2VlblwiKSB7XG4gICAgICAgICAgICBjb25zdCB0ZW1wUCA9IE9iamVjdC5hc3NpZ24oe30sIHAsIHsgdHlwZTogXCJhdHRyXCIgfSk7XG4gICAgICAgICAgICBpbml0aWFsTGFiZWxzW3RlbXBQLnR5cGVdKGdldFN0eWxlKHRlbXBQLnZhbCksIGlkID0+XG4gICAgICAgICAgICAgIGVudW1lcmF0b3IuZ2V0UHJvcFZhbCh0ZW1wUCwgZ2V0VmFsdWVzLCAwLCBpZClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIGlmIChwLnR5cGUgPT09IFwidGV4dFwiKSB7XG4gICAgICAgICAgICBpbml0aWFsTGFiZWxzW3AudHlwZV0oaWQgPT5cbiAgICAgICAgICAgICAgZW51bWVyYXRvci5nZXRQcm9wVmFsKHAsIGdldFZhbHVlcywgMCwgaWQpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbml0aWFsTGFiZWxzW3AudHlwZV0oZ2V0U3R5bGUocC52YWwpLCBpZCA9PlxuICAgICAgICAgICAgICBlbnVtZXJhdG9yLmdldFByb3BWYWwocCwgZ2V0VmFsdWVzLCAwLCBpZClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBsYWJlbHMgPSBsYWJlbEcuc2VsZWN0QWxsKFwidGV4dFwiKS50cmFuc2l0aW9uKCk7XG4gICAgICAgIGNvbnN0IHRpbWluZ3MgPSBlbnVtU3RlcENvbXB1dGVUaW1pbmcoZW51bWVyYXRvciwgc3RlcC50aW1pbmcpO1xuICAgICAgICBhbGxQcm9wcy5mb3JFYWNoKHAgPT4ge1xuICAgICAgICAgIGlmIChwLnR5cGUgPT09IFwiYXR0clwiKSB7XG4gICAgICAgICAgICBsYWJlbHMuYXR0clR3ZWVuKHAudmFsLCBkID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGVudW1lcmF0b3IuaW50ZXJwb2xhdGVBbG9uZ0VudW1NYWtlcihwLCBnZXRWYWx1ZXMpKGQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChwLnR5cGUgPT09IFwidGV4dFwiKSB7XG4gICAgICAgICAgICBsYWJlbHMudHdlZW4oXCJ0ZXh0XCIsIGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICAgICAgY29uc3QgdGV4dEludGVycG9sYXRvciA9IGVudW1lcmF0b3IuaW50ZXJwb2xhdGVBbG9uZ0VudW1NYWtlcihcbiAgICAgICAgICAgICAgICBwLFxuICAgICAgICAgICAgICAgIGdldFZhbHVlc1xuICAgICAgICAgICAgICApKGQpO1xuICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5uZXJIVE1MID0gdGV4dEludGVycG9sYXRvcih0KTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAocC50eXBlID09PSBcInN0eWxlXCIpIHtcbiAgICAgICAgICAgIGxhYmVscy5zdHlsZVR3ZWVuKGdldFN0eWxlKHAudmFsKSwgZCA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBlbnVtZXJhdG9yLmludGVycG9sYXRlQWxvbmdFbnVtTWFrZXIocCwgZ2V0VmFsdWVzKShkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gaW50ZXJwb2xhdGUgdGhlbVxuICAgICAgICBsYWJlbHNcbiAgICAgICAgICAuZHVyYXRpb24oKGQsIGkpID0+IHRpbWluZ3NbaV0uZHVyYXRpb24pXG4gICAgICAgICAgLmRlbGF5KChkLCBpKSA9PiB0aW1pbmdzW2ldLmRlbGF5KVxuICAgICAgICAgIC5lYXNlKGVhc2VGbilcbiAgICAgICAgICAuZW5kKClcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKFtcImxhYmVsXCIsIFwiYWxsXCJdLCAoKSA9PiB7XG4gICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGxhYmVscyA9IGxhYmVsRy5zZWxlY3RBbGwoXCJ0ZXh0XCIpO1xuICAgICAgICBjb25zdCBjdXJyRGF0YSA9IHN0ZXAuY3VyckRhdGEubGFiZWw7XG4gICAgICAgIGNvbnN0IG5ld0RhdGEgPSBzdGVwLm5leHREYXRhLmxhYmVsO1xuICAgICAgICBjb25zdCBqb2luS2V5ID0gam9pbktleUdlbihcImxhYmVsXCIpO1xuICAgICAgICBjb25zdCB0aW1pbmdzID0gY29tcHV0ZVRpbWluZyhcbiAgICAgICAgICBjdXJyRGF0YSxcbiAgICAgICAgICBuZXdEYXRhLFxuICAgICAgICAgIHN0ZXAudGltaW5nLFxuICAgICAgICAgIGpvaW5LZXksXG4gICAgICAgICAgam9pblNldFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBwcmV2RGF0YSA9IGQzLmxvY2FsKCk7XG4gICAgICAgIGxhYmVscy5lYWNoKGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICBwcmV2RGF0YS5zZXQodGhpcywgZCk7XG4gICAgICAgIH0pO1xuICAgICAgICBsYWJlbHMgPSBsYWJlbHMuZGF0YShuZXdEYXRhLCBkID0+IGpvaW5LZXkoZCkpO1xuXG4gICAgICAgIGxldCBlbnRlckxhYmVsSSA9IGxhYmVscy5lbnRlcigpLmFwcGVuZChcInRleHRcIik7XG4gICAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgICBlbnRlckxhYmVsSSxcbiAgICAgICAgICBMQUJFTF9BVFRSUyxcbiAgICAgICAgICBzdGVwLnNhbWVEb21haW5EaW1lbnNpb25cbiAgICAgICAgICAgID8geyBwcmltYXJ5OiBzY2FsZXMuaW5pdGlhbCwgc2Vjb25kYXJ5OiBzY2FsZXMuZmluYWwgfVxuICAgICAgICAgICAgOiB7IHByaW1hcnk6IHNjYWxlcy5maW5hbCwgc2Vjb25kYXJ5OiBzY2FsZXMuaW5pdGlhbCB9LCAvLyB7IHByaW1hcnk6IHNjYWxlcy5maW5hbCwgc2Vjb25kYXJ5OiBzY2FsZXMuaW5pdGlhbCB9LFxuICAgICAgICAgIHNpZ25hbHMuaW5pdGlhbCxcbiAgICAgICAgICBlbmNvZGVzLmluaXRpYWwuZW50ZXJcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBlbnRlcmVkIGxhYmVsc1xuXG4gICAgICAgIGlmIChlbnRlckxhYmVsSS5kYXRhKCkubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICBlbnRlckxhYmVsSSA9IGxhYmVscy5maWx0ZXIoZCA9PiBqb2luU2V0KGQpID09PSBcImVudGVyXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZW50ZXJMYWJlbEYgPSBlbnRlckxhYmVsSS50cmFuc2l0aW9uKCk7XG4gICAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgICBlbnRlckxhYmVsRixcbiAgICAgICAgICBMQUJFTF9BVFRSUyxcbiAgICAgICAgICBzY2FsZXMuZmluYWwsXG4gICAgICAgICAgc2lnbmFscy5maW5hbCxcbiAgICAgICAgICBlbmNvZGVzLmZpbmFsLmVudGVyXG4gICAgICAgICk7XG4gICAgICAgIGVudGVyTGFiZWxGXG4gICAgICAgICAgLmR1cmF0aW9uKFxuICAgICAgICAgICAgKGQsIGkpID0+XG4gICAgICAgICAgICAgIHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSwgXCJmaW5hbFwiKSkuZHVyYXRpb25cbiAgICAgICAgICApXG4gICAgICAgICAgLmRlbGF5KFxuICAgICAgICAgICAgKGQsIGkpID0+IHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSwgXCJmaW5hbFwiKSkuZGVsYXlcbiAgICAgICAgICApXG4gICAgICAgICAgLmVhc2UoZWFzZUZuKVxuICAgICAgICAgIC5lbmQoKVxuICAgICAgICAgIC50aGVuKGRvbmUoW1wibGFiZWxcIiwgXCJlbnRlclwiXSwgKCkgPT4gcmVzb2x2ZSgpKSk7XG5cbiAgICAgICAgLy8gZXhpdCBsYWJlbHNcbiAgICAgICAgbGV0IGV4aXRMYWJlbEkgPSBsYWJlbHMuZXhpdCgpO1xuICAgICAgICBpZiAoZXhpdExhYmVsSS5kYXRhKCkubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICBleGl0TGFiZWxJID0gbGFiZWxzLmZpbHRlcihkID0+IGpvaW5TZXQoZCkgPT09IFwiZXhpdFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV4aXRMYWJlbEYgPSBleGl0TGFiZWxJLnRyYW5zaXRpb24oKTtcbiAgICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICAgIGV4aXRMYWJlbEYsXG4gICAgICAgICAgTEFCRUxfQVRUUlMsXG4gICAgICAgICAgc3RlcC5zYW1lRG9tYWluRGltZW5zaW9uXG4gICAgICAgICAgICA/IHsgcHJpbWFyeTogc2NhbGVzLmZpbmFsLCBzZWNvbmRhcnk6IHNjYWxlcy5pbml0aWFsIH1cbiAgICAgICAgICAgIDogeyBwcmltYXJ5OiBzY2FsZXMuaW5pdGlhbCwgc2Vjb25kYXJ5OiBzY2FsZXMuZmluYWwgfSwgLy8geyBwcmltYXJ5OiBzY2FsZXMuZmluYWwsIHNlY29uZGFyeTogc2NhbGVzLmluaXRpYWwgfSxcbiAgICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICAgIGVuY29kZXMuZmluYWwuZXhpdCxcbiAgICAgICAgICBwcmV2RGF0YVxuICAgICAgICApO1xuICAgICAgICBleGl0TGFiZWxGXG4gICAgICAgICAgLmR1cmF0aW9uKFxuICAgICAgICAgICAgKGQsIGkpID0+XG4gICAgICAgICAgICAgIHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSwgXCJpbml0aWFsXCIpKS5kdXJhdGlvblxuICAgICAgICAgIClcbiAgICAgICAgICAuZGVsYXkoXG4gICAgICAgICAgICAoZCwgaSkgPT4gdGltaW5ncy5maW5kKHQgPT4gdC5pZCA9PT0gam9pbktleShkLCBpLCBcImluaXRpYWxcIikpLmRlbGF5XG4gICAgICAgICAgKVxuICAgICAgICAgIC5lYXNlKGVhc2VGbilcbiAgICAgICAgICAucmVtb3ZlKClcbiAgICAgICAgICAuZW5kKClcbiAgICAgICAgICAudGhlbihkb25lKFtcImxhYmVsXCIsIFwiZXhpdFwiXSwgKCkgPT4gcmVzb2x2ZSgpKSk7XG5cbiAgICAgICAgLy8gVG9kbyB1cGRhdGUgbGFiZWxzISFcbiAgICAgICAgaWYgKHRydWUgJiYgbGFiZWxzLmRhdGEoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgbGFiZWxzID0gbGFiZWxzLmZpbHRlcihkID0+IGpvaW5TZXQoZCkgPT09IFwidXBkYXRlXCIpLnRyYW5zaXRpb24oKTtcbiAgICAgICAgICAvLyBmaW5hbGl6ZSB0aGUgdXBkYXRlIHNldCBvZiB0aGUgbGFiZWxzXG4gICAgICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICAgICAgbGFiZWxzLFxuICAgICAgICAgICAgTEFCRUxfQVRUUlMsXG4gICAgICAgICAgICBzY2FsZXMuZmluYWwsXG4gICAgICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICAgICAgZW5jb2Rlcy5maW5hbC51cGRhdGUsXG4gICAgICAgICAgICBwcmV2RGF0YVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBsYWJlbHNcbiAgICAgICAgICAgIC5kdXJhdGlvbihcbiAgICAgICAgICAgICAgKGQsIGkpID0+IHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSkpLmR1cmF0aW9uXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuZGVsYXkoKGQsIGkpID0+IHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSkpLmRlbGF5KVxuICAgICAgICAgICAgLmVhc2UoZWFzZUZuKVxuICAgICAgICAgICAgLmVuZCgpXG4gICAgICAgICAgICAudGhlbihkb25lKFtcImxhYmVsXCIsIFwidXBkYXRlXCJdLCAoKSA9PiByZXNvbHZlKCkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkb25lKFtcImxhYmVsXCIsIFwidXBkYXRlXCJdLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRvbmUoW1wibGFiZWxcIiwgXCJlbnRlclwiXSwgKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICAgIGRvbmUoW1wibGFiZWxcIiwgXCJleGl0XCJdLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgZG9uZShbXCJsYWJlbFwiLCBcInVwZGF0ZVwiXSwgKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICB9XG5cbiAgICAvLyB1cGRhdGUgZ3JpZFxuICAgIGxldCBncmlkRyA9IGF4aXMuc2VsZWN0QWxsKFwiLnJvbGUtYXhpcy1ncmlkXCIpO1xuICAgIGNvbnN0IEdSSURfQVRUUlMgPSBbXCJncmlkXCJdO1xuXG4gICAgaWYgKFxuICAgICAgKCFzdGVwLmNoYW5nZS5pbml0aWFsIHx8IHN0ZXAuY2hhbmdlLmluaXRpYWwuZ3JpZCA9PT0gZmFsc2UpICYmXG4gICAgICBzdGVwLmNoYW5nZS5maW5hbCAmJlxuICAgICAgc3RlcC5jaGFuZ2UuZmluYWwuZ3JpZCA9PT0gdHJ1ZVxuICAgICkge1xuICAgICAgLy8gYWRkIGdyaWRcbiAgICAgIGdyaWRHID0gYXhpc1xuICAgICAgICAuc2VsZWN0KFwiZ1wiKVxuICAgICAgICAuc2VsZWN0KFwiZ1wiKVxuICAgICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwibWFyay1ydWxlIHJvbGUtYXhpcy1ncmlkXCIpO1xuICAgIH1cbiAgICBpZiAoIWdyaWRHLmVtcHR5KCkgJiYgZG9HcmlkKSB7XG4gICAgICBjb25zdCBlbmNvZGVzID0gc3RlcC5lbmNvZGVzLmdyaWQ7XG5cbiAgICAgIGlmIChzdGVwLmVudW1lcmF0b3IpIHtcbiAgICAgICAgY29uc3QgZW51bWVyYXRvciA9IHN0ZXAuZW51bWVyYXRvci5ncmlkO1xuXG4gICAgICAgIGNvbnN0IGdldFZhbHVlcyA9IGNhbGN1bGF0ZUdldFZhbHVlcyhlbmNvZGVzKTtcblxuICAgICAgICAvLyBiaW5kIGFsbEtleXNcbiAgICAgICAgY29uc3QgbmV3Qm91bmRHcmlkcyA9IGdyaWRHXG4gICAgICAgICAgLnNlbGVjdEFsbChcImxpbmVcIilcbiAgICAgICAgICAuZGF0YShlbnVtZXJhdG9yLmFsbEtleXMsIGQgPT4gZCk7XG4gICAgICAgIG5ld0JvdW5kR3JpZHMuZXhpdCgpLnJlbW92ZSgpO1xuICAgICAgICBuZXdCb3VuZEdyaWRzLmVudGVyKCkuYXBwZW5kKFwibGluZVwiKTtcbiAgICAgICAgY29uc3QgaW5pdGlhbEdyaWRzID0gZ3JpZEdcbiAgICAgICAgICAuc2VsZWN0QWxsKFwibGluZVwiKVxuICAgICAgICAgIC5maWx0ZXIoaWQgPT4gW1widXBkYXRlXCIsIFwiZXhpdFwiXS5pbmRleE9mKGVudW1lcmF0b3Iuc2V0KGlkLCAwKSkgPj0gMCk7XG4gICAgICAgIC8vIGluaXRcbiAgICAgICAgY29uc3QgYWxsUHJvcHMgPSBHUklEX0FUVFJTLnJlZHVjZSgoYWNjLCBwcm9wKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQocHJvcE1hcChwcm9wKSk7XG4gICAgICAgIH0sIFtdKTtcblxuICAgICAgICBhbGxQcm9wcy5mb3JFYWNoKHAgPT4ge1xuICAgICAgICAgIGlmIChwLnR5cGUgPT09IFwiYXR0clR3ZWVuXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHRlbXBQID0gT2JqZWN0LmFzc2lnbih7fSwgcCwgeyB0eXBlOiBcImF0dHJcIiB9KTtcbiAgICAgICAgICAgIGluaXRpYWxHcmlkc1t0ZW1wUC50eXBlXShnZXRTdHlsZSh0ZW1wUC52YWwpLCBpZCA9PlxuICAgICAgICAgICAgICBlbnVtZXJhdG9yLmdldFByb3BWYWwodGVtcFAsIGdldFZhbHVlcywgMCwgaWQpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSBpZiAocC50eXBlID09PSBcInRleHRcIikge1xuICAgICAgICAgICAgaW5pdGlhbEdyaWRzW3AudHlwZV0oaWQgPT5cbiAgICAgICAgICAgICAgZW51bWVyYXRvci5nZXRQcm9wVmFsKHAsIGdldFZhbHVlcywgMCwgaWQpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbml0aWFsR3JpZHNbcC50eXBlXShnZXRTdHlsZShwLnZhbCksIGlkID0+XG4gICAgICAgICAgICAgIGVudW1lcmF0b3IuZ2V0UHJvcFZhbChwLCBnZXRWYWx1ZXMsIDAsIGlkKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGdyaWRzID0gZ3JpZEcuc2VsZWN0QWxsKFwibGluZVwiKS50cmFuc2l0aW9uKCk7XG4gICAgICAgIGNvbnN0IHRpbWluZ3MgPSBlbnVtU3RlcENvbXB1dGVUaW1pbmcoZW51bWVyYXRvciwgc3RlcC50aW1pbmcpO1xuXG4gICAgICAgIGFsbFByb3BzLmZvckVhY2gocCA9PiB7XG4gICAgICAgICAgaWYgKHAudHlwZSA9PT0gXCJhdHRyXCIpIHtcbiAgICAgICAgICAgIGdyaWRzLmF0dHJUd2VlbihwLnZhbCwgZCA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBlbnVtZXJhdG9yLmludGVycG9sYXRlQWxvbmdFbnVtTWFrZXIocCwgZ2V0VmFsdWVzKShkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAocC50eXBlID09PSBcInRleHRcIikge1xuICAgICAgICAgICAgZ3JpZHMudHdlZW4oXCJ0ZXh0XCIsIGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICAgICAgY29uc3QgdGV4dEludGVycG9sYXRvciA9IGVudW1lcmF0b3IuaW50ZXJwb2xhdGVBbG9uZ0VudW1NYWtlcihcbiAgICAgICAgICAgICAgICBwLFxuICAgICAgICAgICAgICAgIGdldFZhbHVlc1xuICAgICAgICAgICAgICApKGQpO1xuICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5uZXJIVE1MID0gdGV4dEludGVycG9sYXRvcih0KTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAocC50eXBlID09PSBcInN0eWxlXCIpIHtcbiAgICAgICAgICAgIGdyaWRzLnN0eWxlVHdlZW4oZ2V0U3R5bGUocC52YWwpLCBkID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGVudW1lcmF0b3IuaW50ZXJwb2xhdGVBbG9uZ0VudW1NYWtlcihwLCBnZXRWYWx1ZXMpKGQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBpbnRlcnBvbGF0ZSB0aGVtXG4gICAgICAgIGdyaWRzXG4gICAgICAgICAgLmR1cmF0aW9uKChkLCBpKSA9PiB0aW1pbmdzW2ldLmR1cmF0aW9uKVxuICAgICAgICAgIC5kZWxheSgoZCwgaSkgPT4gdGltaW5nc1tpXS5kZWxheSlcbiAgICAgICAgICAuZWFzZShlYXNlRm4pXG4gICAgICAgICAgLmVuZCgpXG4gICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZShbXCJncmlkXCIsIFwiYWxsXCJdLCAoKSA9PiB7XG4gICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGdyaWRzID0gZ3JpZEcuc2VsZWN0QWxsKFwibGluZVwiKTtcbiAgICAgICAgY29uc3QgY3VyckRhdGEgPSBzdGVwLmN1cnJEYXRhLmdyaWQ7XG4gICAgICAgIGNvbnN0IG5ld0RhdGEgPSBzdGVwLm5leHREYXRhLmdyaWQ7XG4gICAgICAgIGNvbnN0IGpvaW5LZXkgPSBqb2luS2V5R2VuKFwiZ3JpZFwiKTtcbiAgICAgICAgY29uc3QgdGltaW5ncyA9IGNvbXB1dGVUaW1pbmcoXG4gICAgICAgICAgY3VyckRhdGEsXG4gICAgICAgICAgbmV3RGF0YSxcbiAgICAgICAgICBzdGVwLnRpbWluZyxcbiAgICAgICAgICBqb2luS2V5LFxuICAgICAgICAgIGpvaW5TZXRcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcHJldkRhdGEgPSBkMy5sb2NhbCgpO1xuICAgICAgICBncmlkcy5lYWNoKGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICBwcmV2RGF0YS5zZXQodGhpcywgZCk7XG4gICAgICAgIH0pO1xuICAgICAgICBncmlkcyA9IGdyaWRzLmRhdGEobmV3RGF0YSwgZCA9PiBqb2luS2V5KGQpKTtcbiAgICAgICAgbGV0IGVudGVyR3JpZEkgPSBncmlkcy5lbnRlcigpLmFwcGVuZChcImxpbmVcIik7XG4gICAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgICBlbnRlckdyaWRJLFxuICAgICAgICAgIEdSSURfQVRUUlMsXG4gICAgICAgICAgLy8gc2NhbGVzLmluaXRpYWxbc2NOYW1lXSA/IHNjYWxlcy5pbml0aWFsIDogc2NhbGVzLmZpbmFsLFxuICAgICAgICAgIHN0ZXAuc2FtZURvbWFpbkRpbWVuc2lvblxuICAgICAgICAgICAgPyB7IHByaW1hcnk6IHNjYWxlcy5pbml0aWFsLCBzZWNvbmRhcnk6IHNjYWxlcy5maW5hbCB9XG4gICAgICAgICAgICA6IHsgcHJpbWFyeTogc2NhbGVzLmZpbmFsLCBzZWNvbmRhcnk6IHNjYWxlcy5pbml0aWFsIH0sXG4gICAgICAgICAgc2lnbmFscy5pbml0aWFsLFxuICAgICAgICAgIGVuY29kZXMuaW5pdGlhbC5lbnRlclxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChlbnRlckdyaWRJLmRhdGEoKS5sZW5ndGggPD0gMCkge1xuICAgICAgICAgIGVudGVyR3JpZEkgPSBncmlkcy5maWx0ZXIoZCA9PiBqb2luU2V0KGQpID09PSBcImVudGVyXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZW50ZXJHcmlkRiA9IGVudGVyR3JpZEkudHJhbnNpdGlvbigpO1xuICAgICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgICAgZW50ZXJHcmlkRixcbiAgICAgICAgICBHUklEX0FUVFJTLFxuICAgICAgICAgIHNjYWxlcy5maW5hbCxcbiAgICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICAgIGVuY29kZXMuZmluYWwuZW50ZXJcbiAgICAgICAgKTtcbiAgICAgICAgZW50ZXJHcmlkRlxuICAgICAgICAgIC5kdXJhdGlvbihcbiAgICAgICAgICAgIChkLCBpKSA9PlxuICAgICAgICAgICAgICB0aW1pbmdzLmZpbmQodCA9PiB0LmlkID09PSBqb2luS2V5KGQsIGksIFwiZmluYWxcIikpLmR1cmF0aW9uXG4gICAgICAgICAgKVxuICAgICAgICAgIC5kZWxheShcbiAgICAgICAgICAgIChkLCBpKSA9PiB0aW1pbmdzLmZpbmQodCA9PiB0LmlkID09PSBqb2luS2V5KGQsIGksIFwiZmluYWxcIikpLmRlbGF5XG4gICAgICAgICAgKVxuICAgICAgICAgIC5lYXNlKGVhc2VGbilcbiAgICAgICAgICAuZW5kKClcbiAgICAgICAgICAudGhlbihkb25lKFtcImdyaWRcIiwgXCJlbnRlclwiXSwgKCkgPT4gcmVzb2x2ZSgpKSk7XG5cbiAgICAgICAgbGV0IGV4aXRHcmlkSSA9IGdyaWRzLmV4aXQoKTtcbiAgICAgICAgaWYgKGV4aXRHcmlkSS5kYXRhKCkubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICBleGl0R3JpZEkgPSBncmlkcy5maWx0ZXIoZCA9PiBqb2luU2V0KGQpID09PSBcImV4aXRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBleGl0R3JpZEYgPSBleGl0R3JpZEkudHJhbnNpdGlvbigpO1xuXG4gICAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgICBleGl0R3JpZEYsXG4gICAgICAgICAgR1JJRF9BVFRSUyxcbiAgICAgICAgICBzdGVwLnNhbWVEb21haW5EaW1lbnNpb25cbiAgICAgICAgICAgID8geyBwcmltYXJ5OiBzY2FsZXMuZmluYWwsIHNlY29uZGFyeTogc2NhbGVzLmluaXRpYWwgfVxuICAgICAgICAgICAgOiB7IHByaW1hcnk6IHNjYWxlcy5pbml0aWFsLCBzZWNvbmRhcnk6IHNjYWxlcy5maW5hbCB9LFxuICAgICAgICAgIC8vIHNjYWxlcy5maW5hbFtzY05hbWVdID8gc2NhbGVzLmZpbmFsIDogc2NhbGVzLmluaXRpYWwsXG4gICAgICAgICAgc2lnbmFscy5maW5hbCxcbiAgICAgICAgICBlbmNvZGVzLmZpbmFsLmV4aXQsXG4gICAgICAgICAgcHJldkRhdGFcbiAgICAgICAgKTtcbiAgICAgICAgZXhpdEdyaWRGXG4gICAgICAgICAgLmR1cmF0aW9uKFxuICAgICAgICAgICAgKGQsIGkpID0+XG4gICAgICAgICAgICAgIHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSwgXCJpbml0aWFsXCIpKS5kdXJhdGlvblxuICAgICAgICAgIClcbiAgICAgICAgICAuZGVsYXkoXG4gICAgICAgICAgICAoZCwgaSkgPT4gdGltaW5ncy5maW5kKHQgPT4gdC5pZCA9PT0gam9pbktleShkLCBpLCBcImluaXRpYWxcIikpLmRlbGF5XG4gICAgICAgICAgKVxuICAgICAgICAgIC5lYXNlKGVhc2VGbilcbiAgICAgICAgICAucmVtb3ZlKClcbiAgICAgICAgICAuZW5kKClcbiAgICAgICAgICAudGhlbihkb25lKFtcImdyaWRcIiwgXCJleGl0XCJdLCAoKSA9PiByZXNvbHZlKCkpKTtcblxuICAgICAgICBncmlkcyA9IGdyaWRzLmZpbHRlcihkID0+IGpvaW5TZXQoZCkgPT09IFwidXBkYXRlXCIpLnRyYW5zaXRpb24oKTtcbiAgICAgICAgLy8gZmluYWxpemUgdGhlIHVwZGF0ZSBzZXQgb2YgdGhlIGdyaWRzXG4gICAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgICBncmlkcyxcbiAgICAgICAgICBHUklEX0FUVFJTLFxuICAgICAgICAgIHNjYWxlcy5maW5hbCxcbiAgICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICAgIGVuY29kZXMuZmluYWwudXBkYXRlLFxuICAgICAgICAgIHByZXZEYXRhXG4gICAgICAgICk7XG5cbiAgICAgICAgZ3JpZHNcbiAgICAgICAgICAuZHVyYXRpb24oXG4gICAgICAgICAgICAoZCwgaSkgPT4gdGltaW5ncy5maW5kKHQgPT4gdC5pZCA9PT0gam9pbktleShkLCBpKSkuZHVyYXRpb25cbiAgICAgICAgICApXG4gICAgICAgICAgLmRlbGF5KChkLCBpKSA9PiB0aW1pbmdzLmZpbmQodCA9PiB0LmlkID09PSBqb2luS2V5KGQsIGkpKS5kZWxheSlcbiAgICAgICAgICAuZWFzZShlYXNlRm4pXG4gICAgICAgICAgLmVuZCgpXG4gICAgICAgICAgLnRoZW4oZG9uZShbXCJncmlkXCIsIFwidXBkYXRlXCJdLCAoKSA9PiByZXNvbHZlKCkpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZG9uZShbXCJncmlkXCIsIFwiZW50ZXJcIl0sICgpID0+IHJlc29sdmUoKSk7XG4gICAgICBkb25lKFtcImdyaWRcIiwgXCJleGl0XCJdLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgZG9uZShbXCJncmlkXCIsIFwidXBkYXRlXCJdLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgIH1cbiAgICAvLyB1cGRhdGUgdGl0bGVcbiAgICBjb25zdCBUSVRMRV9BVFRSUyA9IFtcInRpdGxlXCIsIFwiYWxpZ25cIl07XG4gICAgY29uc3QgdGl0bGVHID0gYXhpcy5zZWxlY3RBbGwoXCIucm9sZS1heGlzLXRpdGxlXCIpO1xuICAgIGlmICghdGl0bGVHLmVtcHR5KCkgJiYgZG9UaXRsZSkge1xuICAgICAgLy8gQXNzdW1lIHRoYXQgdGhlcmUgaXMgbm8gZGF0YSBiaW5kaW5nIChubyBlbnRlciBhbmQgZXhpdClcblxuICAgICAgY29uc3QgZW5jb2RlcyA9IHN0ZXAuZW5jb2Rlcy50aXRsZTtcbiAgICAgIGxldCB0aXRsZSA9IHRpdGxlRy5zZWxlY3RBbGwoXCJ0ZXh0XCIpO1xuXG4gICAgICBjb25zdCBpRGF0YSA9IHRpdGxlLmRhdGEoKTtcbiAgICAgIGxldCBmRGF0YSA9IFtdO1xuICAgICAgaWYgKCFpc1JlbW92ZSkge1xuXG4gICAgICAgIGlmIChzdGVwLmNoYW5nZS5zY2FsZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBmRGF0YSA9IGlEYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZEYXRhID0gZVZpZXcuX3J1bnRpbWUuZGF0YVtzY05hbWVdLnZhbHVlcy52YWx1ZVswXS5pdGVtcy5maWx0ZXIoXG4gICAgICAgICAgICBpdGVtID0+IGl0ZW0ucm9sZSA9PT0gXCJheGlzLXRpdGxlXCJcbiAgICAgICAgICApWzBdLml0ZW1zO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRpdGxlLmRhdGEoaURhdGEsIGQgPT4gZC50ZXh0KTtcbiAgICAgIHRpdGxlID0gdGl0bGUuZGF0YShmRGF0YSwgZCA9PiBkLnRleHQpO1xuICAgICAgY29uc3QgZW50ZXJUaXRsZUkgPSB0aXRsZS5lbnRlcigpLmFwcGVuZChcInRleHRcIik7XG5cbiAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgZW50ZXJUaXRsZUksXG4gICAgICAgIFRJVExFX0FUVFJTLFxuICAgICAgICB7fSxcbiAgICAgICAgc2lnbmFscy5pbml0aWFsLFxuICAgICAgICBlbmNvZGVzLmluaXRpYWwuZW50ZXJcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGVudGVyVGl0bGVGID0gZW50ZXJUaXRsZUkudHJhbnNpdGlvbigpO1xuICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICBlbnRlclRpdGxlRixcbiAgICAgICAgVElUTEVfQVRUUlMsXG4gICAgICAgIHt9LFxuICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICBlbmNvZGVzLmZpbmFsLmVudGVyXG4gICAgICApO1xuICAgICAgZW50ZXJUaXRsZUZcbiAgICAgICAgLmR1cmF0aW9uKHN0ZXAuZHVyYXRpb24pXG4gICAgICAgIC5kZWxheShzdGVwLmRlbGF5KVxuICAgICAgICAuZWFzZShlYXNlRm4pXG4gICAgICAgIC5lbmQoKVxuICAgICAgICAudGhlbihkb25lKFtcInRpdGxlXCIsIFwiZW50ZXJcIl0sICgpID0+IHJlc29sdmUoKSkpO1xuXG4gICAgICBjb25zdCBleGl0VGl0bGVJID0gdGl0bGUuZXhpdCgpO1xuICAgICAgY29uc3QgZXhpdFRpdGxlRiA9IGV4aXRUaXRsZUkudHJhbnNpdGlvbigpO1xuICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICBleGl0VGl0bGVGLFxuICAgICAgICBUSVRMRV9BVFRSUyxcbiAgICAgICAge30sXG4gICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgIGVuY29kZXMuZmluYWwuZXhpdFxuICAgICAgKTtcbiAgICAgIGV4aXRUaXRsZUZcbiAgICAgICAgLmR1cmF0aW9uKHN0ZXAuZHVyYXRpb24pXG4gICAgICAgIC5kZWxheShzdGVwLmRlbGF5KVxuICAgICAgICAuZWFzZShlYXNlRm4pXG4gICAgICAgIC5lbmQoKVxuICAgICAgICAudGhlbihkb25lKFtcInRpdGxlXCIsIFwiZXhpdFwiXSwgKCkgPT4gcmVzb2x2ZSgpKSk7XG5cbiAgICAgIHRpdGxlID0gdGl0bGUudHJhbnNpdGlvbigpO1xuICAgICAgLy8gdXBkYXRlIHRoZSB0aXRsZVxuICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICB0aXRsZSxcbiAgICAgICAgVElUTEVfQVRUUlMsXG4gICAgICAgIHt9LFxuICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICBlbmNvZGVzLmZpbmFsLnVwZGF0ZVxuICAgICAgKTtcblxuICAgICAgdGl0bGVcbiAgICAgICAgLmR1cmF0aW9uKHN0ZXAuZHVyYXRpb24pXG4gICAgICAgIC5kZWxheShzdGVwLmRlbGF5KVxuICAgICAgICAuZWFzZShlYXNlRm4pXG4gICAgICAgIC5lbmQoKVxuICAgICAgICAudGhlbihkb25lKFtcInRpdGxlXCIsIFwidXBkYXRlXCJdLCAoKSA9PiByZXNvbHZlKCkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZG9uZShbXCJ0aXRsZVwiLCBcImVudGVyXCJdLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgZG9uZShbXCJ0aXRsZVwiLCBcImV4aXRcIl0sICgpID0+IHJlc29sdmUoKSk7XG4gICAgICBkb25lKFtcInRpdGxlXCIsIFwidXBkYXRlXCJdLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgIH1cblxuICAgIC8vIHVwZGF0ZSBkb21haW5cbiAgICBjb25zdCBET01BSU5fQVRUUlMgPSBbXCJkb21haW5cIl07XG5cbiAgICBjb25zdCBkb21haW5HID0gYXhpcy5zZWxlY3RBbGwoXCIucm9sZS1heGlzLWRvbWFpblwiKTtcbiAgICBpZiAoIWRvbWFpbkcuZW1wdHkoKSAmJiBkb0RvbWFpbikge1xuICAgICAgY29uc3QgZW5jb2RlcyA9IHN0ZXAuZW5jb2Rlcy5kb21haW47XG4gICAgICBsZXQgZkRhdGEgPSBbXTtcbiAgICAgIGlmICghaXNSZW1vdmUpIHtcbiAgICAgICAgZkRhdGEgPSBlVmlldy5fcnVudGltZS5kYXRhW3NjTmFtZV0udmFsdWVzLnZhbHVlWzBdLml0ZW1zLmZpbHRlcihcbiAgICAgICAgICBpdGVtID0+IGl0ZW0ucm9sZSA9PT0gXCJheGlzLWRvbWFpblwiXG4gICAgICAgIClbMF0uaXRlbXM7XG4gICAgICB9XG4gICAgICBsZXQgZG9tYWluID0gZG9tYWluRy5zZWxlY3RBbGwoXCJsaW5lXCIpLmRhdGEoZkRhdGEpO1xuXG4gICAgICBjb25zdCBpRG9tYWluRW50ZXIgPSBkb21haW4uZW50ZXIoKS5hcHBlbmQoXCJsaW5lXCIpO1xuICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICBpRG9tYWluRW50ZXIsXG4gICAgICAgIERPTUFJTl9BVFRSUyxcbiAgICAgICAge30sXG4gICAgICAgIHNpZ25hbHMuaW5pdGlhbCxcbiAgICAgICAgZW5jb2Rlcy5pbml0aWFsLmVudGVyXG4gICAgICApO1xuICAgICAgY29uc3QgZkRvbWFpbkVudGVyID0gaURvbWFpbkVudGVyLnRyYW5zaXRpb24oKTtcbiAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgZkRvbWFpbkVudGVyLFxuICAgICAgICBET01BSU5fQVRUUlMsXG4gICAgICAgIHt9LFxuICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICBlbmNvZGVzLmZpbmFsLmVudGVyXG4gICAgICApO1xuICAgICAgZkRvbWFpbkVudGVyXG4gICAgICAgIC5kdXJhdGlvbihzdGVwLmR1cmF0aW9uKVxuICAgICAgICAuZGVsYXkoc3RlcC5kZWxheSlcbiAgICAgICAgLmVhc2UoZWFzZUZuKVxuICAgICAgICAuZW5kKClcbiAgICAgICAgLnRoZW4oZG9uZShbXCJkb21haW5cIiwgXCJlbnRlclwiXSwgKCkgPT4gcmVzb2x2ZSgpKSk7XG5cbiAgICAgIGNvbnN0IGlEb21haW5FeGl0ID0gZG9tYWluLmV4aXQoKTtcbiAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgaURvbWFpbkV4aXQsXG4gICAgICAgIERPTUFJTl9BVFRSUyxcbiAgICAgICAge30sXG4gICAgICAgIHNpZ25hbHMuaW5pdGlhbCxcbiAgICAgICAgZW5jb2Rlcy5pbml0aWFsLmV4aXRcbiAgICAgICk7XG4gICAgICBjb25zdCBmRG9tYWluRXhpdCA9IGlEb21haW5FeGl0LnRyYW5zaXRpb24oKTtcbiAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgZkRvbWFpbkV4aXQsXG4gICAgICAgIERPTUFJTl9BVFRSUyxcbiAgICAgICAge30sXG4gICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgIGVuY29kZXMuZmluYWwuZXhpdFxuICAgICAgKTtcbiAgICAgIGZEb21haW5FeGl0XG4gICAgICAgIC5kdXJhdGlvbihzdGVwLmR1cmF0aW9uKVxuICAgICAgICAuZGVsYXkoc3RlcC5kZWxheSlcbiAgICAgICAgLmVhc2UoZWFzZUZuKVxuICAgICAgICAuZW5kKClcbiAgICAgICAgLnRoZW4oZG9uZShbXCJkb21haW5cIiwgXCJleGl0XCJdLCAoKSA9PiByZXNvbHZlKCkpKTtcblxuICAgICAgLy8gdXBkYXRlIHRoZSBkb21haW5cblxuICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICBkb21haW4sXG4gICAgICAgIERPTUFJTl9BVFRSUyxcbiAgICAgICAgc2NhbGVzLmluaXRpYWwsXG4gICAgICAgIHNpZ25hbHMuaW5pdGlhbCxcbiAgICAgICAgZW5jb2Rlcy5pbml0aWFsLnVwZGF0ZVxuICAgICAgKTtcbiAgICAgIGRvbWFpbiA9IGRvbWFpbi50cmFuc2l0aW9uKCk7XG5cbiAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgZG9tYWluLFxuICAgICAgICBET01BSU5fQVRUUlMsXG4gICAgICAgIHNjYWxlcy5maW5hbCxcbiAgICAgICAgc2lnbmFscy5maW5hbCxcbiAgICAgICAgZW5jb2Rlcy5maW5hbC51cGRhdGVcbiAgICAgICk7XG5cbiAgICAgIGRvbWFpblxuICAgICAgICAuZHVyYXRpb24oc3RlcC5kdXJhdGlvbilcbiAgICAgICAgLmRlbGF5KHN0ZXAuZGVsYXkpXG4gICAgICAgIC5lYXNlKGVhc2VGbilcbiAgICAgICAgLmVuZCgpXG4gICAgICAgIC50aGVuKGRvbmUoW1wiZG9tYWluXCIsIFwidXBkYXRlXCJdLCAoKSA9PiByZXNvbHZlKCkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZG9uZShbXCJkb21haW5cIiwgXCJlbnRlclwiXSwgKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICAgIGRvbmUoW1wiZG9tYWluXCIsIFwiZXhpdFwiXSwgKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICAgIGRvbmUoW1wiZG9tYWluXCIsIFwidXBkYXRlXCJdLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCB7IGF4aXNJbnRlcnBvbGF0ZSB9O1xuIiwiaW1wb3J0ICogYXMgZDMgZnJvbSBcImQzXCI7XG5pbXBvcnQge1xuICBwcm9wTWFwLFxuICBnZXRFYXNlRm4sXG4gIGZpbmRBZnRlclNpYmxpbmcsXG4gIGdldEpvaW5JbmZvLFxuICBmaW5kQ29tcCxcbiAgc3ZnUmVuZGVyLFxuICBjb21wdXRlU2NhbGVcbn0gZnJvbSBcIi4vdXRpbC5qc1wiO1xuaW1wb3J0IHsgZmV0Y2hBdHRyaWJ1dGVzLCBjYWxjdWxhdGVHZXRWYWxldXMgfSBmcm9tIFwiLi9hdHRyaWJ1dGVGZXRjaGVyXCI7XG5pbXBvcnQgeyBnZXRTdHlsZSB9IGZyb20gXCIuL3ZlZ2EtcmVuZGVyLXV0aWwuanNcIjtcbmltcG9ydCB7IGNvcHkgfSBmcm9tIFwiLi4vdXRpbC91dGlsLmpzXCI7XG5pbXBvcnQgeyBjb21wdXRlVGltaW5nLCBlbnVtU3RlcENvbXB1dGVUaW1pbmcgfSBmcm9tIFwiLi90aW1pbmdzXCI7XG5cbmNvbnN0IExFR0VORF9DSEFOTkVMUyA9IFtcbiAgXCJmaWxsXCIsXG4gIFwib3BhY2l0eVwiLFxuICBcInNoYXBlXCIsXG4gIFwic2l6ZVwiLFxuICBcInN0cm9rZVwiLFxuICBcInN0cm9rZURhc2hcIixcbiAgXCJzdHJva2VXaWR0aFwiXG5dO1xuY29uc3QgSU5JVElBTF9TVEFUVVMgPSB7XG4gIHVwZGF0ZTogZmFsc2UsXG4gIGVudGVyOiBmYWxzZSxcbiAgZXhpdDogZmFsc2Vcbn07XG5cbmZ1bmN0aW9uIGRvbmVNYWtlcihzdWJDb21wb25lbnRzLCBsZWdlbmRUeXBlcywgbGVnZW5kKSB7XG4gIGNvbnN0IHRyYW5zaXRpb25TdGF0dXMgPSBzdWJDb21wb25lbnRzLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiB7XG4gICAgYWNjW2N1cnJdID0gY29weShJTklUSUFMX1NUQVRVUyk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuXG4gIHJldHVybiBmdW5jdGlvbih3aGljaCwgY2IpIHtcbiAgICBpZiAod2hpY2gubGVuZ3RoID09PSAyKSB7XG4gICAgICBpZiAod2hpY2hbMV0gPT09IFwiYWxsXCIpIHtcbiAgICAgICAgdHJhbnNpdGlvblN0YXR1c1t3aGljaFswXV0udXBkYXRlID0gdHJhbnNpdGlvblN0YXR1c1tcbiAgICAgICAgICB3aGljaFswXVxuICAgICAgICBdLmVudGVyID0gdHJhbnNpdGlvblN0YXR1c1t3aGljaFswXV0uZXhpdCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cmFuc2l0aW9uU3RhdHVzW3doaWNoWzBdXVt3aGljaFsxXV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAod2hpY2ggPT09IFwiYWxsXCIpIHtcbiAgICAgIHRyYW5zaXRpb25TdGF0dXMudXBkYXRlID0gdHJhbnNpdGlvblN0YXR1cy5lbnRlciA9IHRyYW5zaXRpb25TdGF0dXMuZXhpdCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyYW5zaXRpb25TdGF0dXNbd2hpY2hdID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBhbGxEb25lID1cbiAgICAgIFtcInRpdGxlXCIsIFwibGFiZWxzXCIsIFwic3ltYm9sc1wiLCBcInBhaXJzXCIsIFwiZW50cmllc1wiLCBcImxlZ2VuZFwiXS5yZWR1Y2UoXG4gICAgICAgIChhY2MsIGtleSkgPT4ge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBhY2MgJiZcbiAgICAgICAgICAgIHRyYW5zaXRpb25TdGF0dXNba2V5XS51cGRhdGUgJiZcbiAgICAgICAgICAgIHRyYW5zaXRpb25TdGF0dXNba2V5XS5lbnRlciAmJlxuICAgICAgICAgICAgdHJhbnNpdGlvblN0YXR1c1trZXldLmV4aXRcbiAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICApIHx8XG4gICAgICBbXCJ0aXRsZVwiLCBcImxhYmVsc1wiLCBcImdyYWRpZW50XCIsIFwiYmFuZHNcIiwgXCJlbnRyaWVzXCIsIFwibGVnZW5kXCJdLnJlZHVjZShcbiAgICAgICAgKGFjYywga2V5KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGFjYyAmJlxuICAgICAgICAgICAgdHJhbnNpdGlvblN0YXR1c1trZXldLnVwZGF0ZSAmJlxuICAgICAgICAgICAgdHJhbnNpdGlvblN0YXR1c1trZXldLmVudGVyICYmXG4gICAgICAgICAgICB0cmFuc2l0aW9uU3RhdHVzW2tleV0uZXhpdFxuICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgaWYgKGFsbERvbmUpIHtcbiAgICAgIGlmIChsZWdlbmRUeXBlcy5maW5hbCkge1xuICAgICAgICBpZiAobGVnZW5kVHlwZXMuZmluYWwgPT09IFwiZ3JhZGllbnRcIikge1xuICAgICAgICAgIGxlZ2VuZC5zZWxlY3RBbGwoXCIubWFyay1ncm91cC5yb2xlLXNjb3BlXCIpLnJlbW92ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGVudHJ5RyA9IGxlZ2VuZC5zZWxlY3QoXCIucm9sZS1sZWdlbmQtZW50cnkgPiBnID4gZ1wiKTtcbiAgICAgICAgICBsZWdlbmRcbiAgICAgICAgICAgIC5zZWxlY3QoXCIucm9sZS1sZWdlbmQtZW50cnkgPiBnID4gZyA+IC5tYXJrLXRleHQucm9sZS1sZWdlbmQtbGFiZWxcIilcbiAgICAgICAgICAgIC5yZW1vdmUoKTtcbiAgICAgICAgICBlbnRyeUcuc2VsZWN0KFwiLm1hcmstdGV4dC5yb2xlLWxlZ2VuZC1iYW5kXCIpLnJlbW92ZSgpO1xuICAgICAgICAgIGVudHJ5Ry5zZWxlY3QoXCIubWFyay10ZXh0LnJvbGUtbGVnZW5kLWdyYWRpZW50XCIpLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjYigpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gbGVnZW5kSW50ZXJwb2xhdGUocmF3SW5mbywgc3RlcCwgdGFyZ2V0RWxtKSB7XG4gIGZ1bmN0aW9uIGpvaW5LZXlHZW4oc3ViY29tcCkge1xuICAgIHJldHVybiAoZCwgaSwgaW5pdGlhbE9yRmluYWwgPSBcImluaXRpYWxcIikgPT4ge1xuICAgICAgaWYgKCFkKSB7XG4gICAgICAgIHJldHVybiBpLnRvU3RyaW5nKCk7XG4gICAgICB9XG4gICAgICBpZiAoIWQuX19nZW1pbmlfXykge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHN0ZXAuY29tcHV0ZURhdHVtSWRbc3ViY29tcF0gPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gc3RlcC5jb21wdXRlRGF0dW1JZFtzdWJjb21wXShkLCBpKVxuICAgICAgICAgIDogc3RlcC5jb21wdXRlRGF0dW1JZFtzdWJjb21wXVtpbml0aWFsT3JGaW5hbF0oZCwgaSk7XG4gICAgICAgIC8vIHJldHVybiBzdGVwLmNvbXB1dGVEYXR1bUlkW3N1YmNvbXBdKGQsIGkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGdldEpvaW5JbmZvKGQsIGksIHN0ZXAsIFwiam9pbktleVwiKTtcbiAgICB9O1xuICB9XG4gIGNvbnN0IGpvaW5TZXQgPSAoZCwgaSkgPT4ge1xuICAgIHJldHVybiBkLl9fZ2VtaW5pX18gPyBnZXRKb2luSW5mbyhkLCBpLCBzdGVwLCBcImFuaW1TZXRcIikgOiB1bmRlZmluZWQ7XG4gIH07XG4gIGNvbnN0IGVWaWV3ID0gcmF3SW5mby5lVmlzLnZpZXc7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgLy8gTWFyayBJbnRlcnBvbGF0ZSBEYXRhXG5cbiAgICBjb25zdCB7IGNoYW5nZSB9ID0gc3RlcDtcbiAgICBjb25zdCBlYXNlRm4gPSBnZXRFYXNlRm4oc3RlcC50aW1pbmcuZWFzZSk7XG5cbiAgICBsZXQgZG9UaXRsZTtcbiAgICBsZXQgZG9TeW1ib2xzO1xuICAgIGxldCBkb0xhYmVscztcbiAgICBsZXQgZG9HcmFkaWVudDtcblxuICAgIGRvVGl0bGUgPSBkb1N5bWJvbHMgPSBkb0xhYmVscyA9IGRvR3JhZGllbnQgPSB0cnVlO1xuXG4gICAgaWYgKGNoYW5nZS5lbmNvZGUgPT09IGZhbHNlKSB7XG4gICAgICBkb1RpdGxlID0gZG9TeW1ib2xzID0gZG9MYWJlbHMgPSBkb0dyYWRpZW50ID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmIChjaGFuZ2UuZW5jb2RlKSB7XG4gICAgICBkb1RpdGxlID0gIShjaGFuZ2UuZW5jb2RlLnRpdGxlID09PSBmYWxzZSk7XG4gICAgICBkb1N5bWJvbHMgPSAhKGNoYW5nZS5lbmNvZGUuc3ltYm9scyA9PT0gZmFsc2UpO1xuICAgICAgZG9MYWJlbHMgPSAhKGNoYW5nZS5lbmNvZGUubGFiZWxzID09PSBmYWxzZSk7XG4gICAgICBkb0dyYWRpZW50ID0gIShjaGFuZ2UuZW5jb2RlLmdyYWRpZW50ID09PSBmYWxzZSk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBpc1JlbW92ZSB9ID0gc3RlcDtcbiAgICBjb25zdCB7IGlzQWRkIH0gPSBzdGVwO1xuICAgIGxldCBsZWdlbmQgPSBkMy5zZWxlY3QoYCR7dGFyZ2V0RWxtfSAucm9sZS1sZWdlbmQuJHtjaGFuZ2UuY29tcE5hbWV9YCk7XG4gICAgY29uc3QgZG9uZSA9IGRvbmVNYWtlcihcbiAgICAgIFtcbiAgICAgICAgXCJlbnRyaWVzXCIsXG4gICAgICAgIFwidGl0bGVcIixcbiAgICAgICAgXCJsYWJlbHNcIixcbiAgICAgICAgXCJncmFkaWVudFwiLFxuICAgICAgICBcInN5bWJvbHNcIixcbiAgICAgICAgXCJsZWdlbmRcIixcbiAgICAgICAgXCJwYWlyc1wiLFxuICAgICAgICBcImJhbmRzXCJcbiAgICAgIF0sXG4gICAgICBzdGVwLmxlZ2VuZFR5cGVzLFxuICAgICAgbGVnZW5kXG4gICAgKTtcbiAgICBjb25zdCB7IGNvbXBOYW1lIH0gPSBjaGFuZ2U7XG4gICAgLy8gY29sbGVjdCB0aGUgc2NhbGUgb2JqZWN0cyB0byBzY2FsZSB0aGUgaW5pdGlhbC9maW5hbCB2YWx1ZXNcbiAgICBjb25zdCB7IHNjYWxlcyB9ID0gc3RlcDtcbiAgICBjb25zdCB7IHNpZ25hbHMgfSA9IHN0ZXA7XG4gICAgY29uc3QgeyBlbmNvZGVzIH0gPSBzdGVwO1xuICAgIGNvbnN0IHsgbGVnZW5kVHlwZXMgfSA9IHN0ZXA7XG5cbiAgICAvLyBhZGQvcmVtb3ZlL3VwZGF0ZSBsZWdlbmRcbiAgICBpZiAoaXNBZGQpIHtcbiAgICAgIGNvbnN0IHJvb3RNYXJrID0gZDMuc2VsZWN0KGAke3RhcmdldEVsbX0gLm1hcmstZ3JvdXAucm9vdCBnIGcgYCk7XG4gICAgICBjb25zdCByb290U2NlbmUgPSBlVmlldy5zY2VuZWdyYXBoKCkucm9vdDtcbiAgICAgIGNvbnN0IHNpYiA9IGZpbmRBZnRlclNpYmxpbmcocm9vdFNjZW5lLCBjaGFuZ2UuY29tcE5hbWUpO1xuICAgICAgYWRkTGVnZW5kKFxuICAgICAgICByb290TWFyayxcbiAgICAgICAgZmluZENvbXAocm9vdFNjZW5lLCBjaGFuZ2UuY29tcE5hbWUsIFwibGVnZW5kXCIpWzBdLFxuICAgICAgICBzaWIgPyBgLiR7c2liLm5hbWV9YCA6IHVuZGVmaW5lZFxuICAgICAgKTtcbiAgICAgIGxlZ2VuZCA9IGQzLnNlbGVjdEFsbChgJHt0YXJnZXRFbG19IC5yb2xlLWxlZ2VuZC4ke2NoYW5nZS5jb21wTmFtZX1gKTtcblxuICAgICAgZG9uZShbXCJsZWdlbmRcIiwgXCJhbGxcIl0sICgpID0+IHJlc29sdmUoKSk7XG4gICAgICBkb25lKFtcImVudHJpZXNcIiwgXCJhbGxcIl0sICgpID0+IHJlc29sdmUoKSk7XG4gICAgfSBlbHNlIGlmIChpc1JlbW92ZSkge1xuICAgICAgY29uc3QgbWFudWFsRW5jb2RlID1cbiAgICAgICAgY2hhbmdlLmVuY29kZSAmJiBjaGFuZ2UuZW5jb2RlLmxlZ2VuZCA/IGNoYW5nZS5lbmNvZGUubGVnZW5kLmV4aXQgOiB7fTtcbiAgICAgIGNvbnN0IGxlZ2VuZEcgPSBsZWdlbmQuc2VsZWN0KFwiZ1wiKTtcbiAgICAgIGNvbnN0IGZMZWdlbmRHID0gbGVnZW5kRy50cmFuc2l0aW9uKCk7XG4gICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgIGZMZWdlbmRHLFxuICAgICAgICBbXCJncm91cFwiXSxcbiAgICAgICAgc2NhbGVzLmZpbmFsLFxuICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICBPYmplY3QuYXNzaWduKHt9LCBzdGVwLmVuY29kZXMubGVnZW5kLmZpbmFsLmV4aXQsIG1hbnVhbEVuY29kZSlcbiAgICAgICk7XG4gICAgICBmTGVnZW5kR1xuICAgICAgICAuZHVyYXRpb24oc3RlcC5kdXJhdGlvbilcbiAgICAgICAgLmVuZCgpXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICBkb25lKFtcImxlZ2VuZFwiLCBcImFsbFwiXSwgKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICAgICAgICBkb25lKFtcImVudHJpZXNcIiwgXCJhbGxcIl0sICgpID0+IHJlc29sdmUoKSk7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1cGRhdGUgbGVnZW5kIEdcbiAgICAgIGNvbnN0IGZMZWdlbmREID0gZmluZENvbXAoZVZpZXcuc2NlbmVncmFwaCgpLnJvb3QsIGNvbXBOYW1lLCBcImxlZ2VuZFwiKVswXVxuICAgICAgICAuaXRlbXNbMF07XG4gICAgICBjb25zdCBlbmNvZGUgPSB7XG4gICAgICAgIHg6IHsgdmFsdWU6IGZMZWdlbmRELnggfSxcbiAgICAgICAgeTogeyB2YWx1ZTogZkxlZ2VuZEQueSB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBsZWdlbmRHID0gbGVnZW5kLnNlbGVjdChcImdcIik7XG4gICAgICBjb25zdCBmRGF0YSA9IFtlVmlldy5fcnVudGltZS5kYXRhW2NvbXBOYW1lXS52YWx1ZXMudmFsdWVbMF0uZGF0dW1dO1xuICAgICAgbGVnZW5kRy5kYXRhKGZEYXRhKTtcbiAgICAgIGNvbnN0IGZMZWdlbmRHID0gbGVnZW5kRy50cmFuc2l0aW9uKCk7XG4gICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgIGZMZWdlbmRHLFxuICAgICAgICBbXCJncm91cFwiXSxcbiAgICAgICAgc2NhbGVzLmZpbmFsLFxuICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICBPYmplY3QuYXNzaWduKHt9LCBzdGVwLmVuY29kZXMubGVnZW5kLnVwZGF0ZSwgZW5jb2RlKVxuICAgICAgKTtcbiAgICAgIGZMZWdlbmRHXG4gICAgICAgIC5kdXJhdGlvbihzdGVwLmR1cmF0aW9uKVxuICAgICAgICAuZW5kKClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGRvbmUoW1wibGVnZW5kXCIsIFwiYWxsXCJdLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgICAgIGRvbmUoW1wiZW50cmllc1wiLCBcImFsbFwiXSwgKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2NOYW1lcyA9IHtcbiAgICAgIGluaXRpYWw6IFtdLFxuICAgICAgZmluYWw6IFtdXG4gICAgfTtcbiAgICBMRUdFTkRfQ0hBTk5FTFMuZm9yRWFjaChjaGFubmVsID0+IHtcbiAgICAgIGlmIChjaGFuZ2UuaW5pdGlhbCAmJiBjaGFuZ2UuaW5pdGlhbFtjaGFubmVsXSkge1xuICAgICAgICBzY05hbWVzLmluaXRpYWwucHVzaChjaGFuZ2UuaW5pdGlhbFtjaGFubmVsXSk7XG4gICAgICB9XG4gICAgICBpZiAoY2hhbmdlLmZpbmFsICYmIGNoYW5nZS5maW5hbFtjaGFubmVsXSkge1xuICAgICAgICBzY05hbWVzLmZpbmFsLnB1c2goY2hhbmdlLmZpbmFsW2NoYW5uZWxdKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGxldCBmaW5hbFNjYWxlTmFtZXMgPSBbXTtcbiAgICBpZiAoY2hhbmdlLnNjYWxlID09PSB0cnVlIHx8IGlzQWRkKSB7XG4gICAgICBmaW5hbFNjYWxlTmFtZXMgPSBzY05hbWVzLmZpbmFsO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShjaGFuZ2Uuc2NhbGUpKSB7XG4gICAgICBmaW5hbFNjYWxlTmFtZXMgPSBjaGFuZ2Uuc2NhbGU7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY2hhbmdlLnNjYWxlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBmaW5hbFNjYWxlTmFtZXMgPSBPYmplY3Qua2V5cyhjaGFuZ2Uuc2NhbGUpLmZpbHRlcihcbiAgICAgICAgc2NOYW1lID0+IGNoYW5nZS5zY2FsZVtzY05hbWVdXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChzdGVwLmVudW1lcmF0b3IpIHtcbiAgICAgIGlmIChsZWdlbmRUeXBlcy5pbml0aWFsICE9PSBsZWdlbmRUeXBlcy5maW5hbCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiQ2Fubm90IGVudW1lcmF0ZSB0aGUgY2hhbmdlIG9mIHRoZSBsZWdlbmQgdHlwZS5cIik7XG4gICAgICB9XG4gICAgICBjb25zdCBsZWdUeXBlID0gbGVnZW5kVHlwZXMuaW5pdGlhbCB8fCBsZWdlbmRUeXBlcy5maW5hbDtcbiAgICAgIGxldCBzdWJDb21wcztcbiAgICAgIGlmIChsZWdUeXBlID09PSBcInN5bWJvbFwiKSB7XG4gICAgICAgIGNvbnN0IHBhaXJzID0gbGVnZW5kXG4gICAgICAgICAgLnNlbGVjdChcIi5yb2xlLWxlZ2VuZC1lbnRyeSAucm9sZS1zY29wZVwiKVxuICAgICAgICAgIC5zZWxlY3RBbGwoXCIucm9sZS1zY29wZSA+IGdcIilcbiAgICAgICAgICAuZGF0YShzdGVwLmVudW1lcmF0b3IucGFpcnMuYWxsS2V5cywgZCA9PiBkKTtcbiAgICAgICAgcGFpcnMuZXhpdCgpLnJlbW92ZSgpO1xuICAgICAgICBjb25zdCBlbnRlclBhaXJTdWJHcyA9IHBhaXJzXG4gICAgICAgICAgLmVudGVyKClcbiAgICAgICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgICAgIC5hcHBlbmQoXCJnXCIpO1xuICAgICAgICBlbnRlclBhaXJTdWJHc1xuICAgICAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcIm1hcmstc3ltYm9sIHJvbGUtbGVnZW5kLXN5bWJvbFwiKVxuICAgICAgICAgIC5hcHBlbmQoXCJwYXRoXCIpXG4gICAgICAgICAgLmRhdHVtKChkLCBpKSA9PiBzdGVwLmVudW1lcmF0b3Iuc3ltYm9scy5hbGxLZXlzW2ldKTtcbiAgICAgICAgZW50ZXJQYWlyU3ViR3NcbiAgICAgICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJtYXJrLXRleHQgcm9sZS1sZWdlbmQtbGFiZWxcIilcbiAgICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAgIC5kYXR1bSgoZCwgaSkgPT4gc3RlcC5lbnVtZXJhdG9yLmxhYmVscy5hbGxLZXlzW2ldKTtcblxuICAgICAgICBzdWJDb21wcyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcInBhaXJzXCIsXG4gICAgICAgICAgICBzZWxlY3Rpb246IGxlZ2VuZFxuICAgICAgICAgICAgICAuc2VsZWN0KFwiLnJvbGUtbGVnZW5kLWVudHJ5IC5yb2xlLXNjb3BlXCIpXG4gICAgICAgICAgICAgIC5zZWxlY3RBbGwoXCIucm9sZS1zY29wZSA+IGdcIiksXG4gICAgICAgICAgICBwcm9wczogW1wiZ3JvdXBcIl1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwic3ltYm9sc1wiLFxuICAgICAgICAgICAgc2VsZWN0aW9uOiBsZWdlbmRcbiAgICAgICAgICAgICAgLnNlbGVjdChcIi5yb2xlLWxlZ2VuZC1lbnRyeSAucm9sZS1zY29wZVwiKVxuICAgICAgICAgICAgICAuc2VsZWN0QWxsKFwiLnJvbGUtbGVnZW5kLXN5bWJvbCA+IHBhdGhcIiksXG4gICAgICAgICAgICBwcm9wczogW1wic3ltYm9sXCJdXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcImxhYmVsc1wiLFxuICAgICAgICAgICAgc2VsZWN0aW9uOiBsZWdlbmRcbiAgICAgICAgICAgICAgLnNlbGVjdChcIi5yb2xlLWxlZ2VuZC1lbnRyeSAucm9sZS1zY29wZVwiKVxuICAgICAgICAgICAgICAuc2VsZWN0QWxsKFwiLnJvbGUtbGVnZW5kLWxhYmVsID4gdGV4dFwiKSxcbiAgICAgICAgICAgIHByb3BzOiBbXCJ0ZXh0XCJdXG4gICAgICAgICAgfVxuICAgICAgICBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYmluZCBhbGxLZXlzXG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGxlZ2VuZFxuICAgICAgICAgIC5zZWxlY3QoXCIucm9sZS1sZWdlbmQtbGFiZWxcIilcbiAgICAgICAgICAuc2VsZWN0QWxsKFwidGV4dFwiKVxuICAgICAgICAgIC5kYXRhKHN0ZXAuZW51bWVyYXRvci5sYWJlbHMuYWxsS2V5cywgZCA9PiBkKTtcbiAgICAgICAgc2VsZWN0aW9uLmV4aXQoKS5yZW1vdmUoKTtcbiAgICAgICAgc2VsZWN0aW9uLmVudGVyKCkuYXBwZW5kKFwidGV4dFwiKTtcblxuICAgICAgICBzdWJDb21wcyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcImxhYmVsc1wiLFxuICAgICAgICAgICAgc2VsZWN0aW9uOiBsZWdlbmQuc2VsZWN0KFwiLnJvbGUtbGVnZW5kLWxhYmVsXCIpLnNlbGVjdEFsbChcInRleHRcIiksXG4gICAgICAgICAgICBzdmdFbG1UeXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHByb3BzOiBbXCJ0ZXh0XCJdXG4gICAgICAgICAgfVxuICAgICAgICBdO1xuICAgICAgICBpZiAoc3RlcC5jaGFuZ2UuaW5pdGlhbC5pc0JhbmQpIHtcbiAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSBsZWdlbmRcbiAgICAgICAgICAgIC5zZWxlY3QoXCIucm9sZS1sZWdlbmQtYmFuZCBcIilcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJwYXRoXCIpXG4gICAgICAgICAgICAuZGF0YShzdGVwLmVudW1lcmF0b3IuYmFuZHMuYWxsS2V5cywgZCA9PiBkKTtcbiAgICAgICAgICBzZWxlY3Rpb24uZXhpdCgpLnJlbW92ZSgpO1xuICAgICAgICAgIHNlbGVjdGlvbi5lbnRlcigpLmFwcGVuZChcInBhdGhcIik7XG5cbiAgICAgICAgICBzdWJDb21wcy5wdXNoKHtcbiAgICAgICAgICAgIG5hbWU6IFwiYmFuZHNcIixcbiAgICAgICAgICAgIHNlbGVjdGlvbjogbGVnZW5kLnNlbGVjdChcIi5yb2xlLWxlZ2VuZC1iYW5kIFwiKS5zZWxlY3RBbGwoXCJwYXRoXCIpLFxuICAgICAgICAgICAgc3ZnRWxtVHlwZTogXCJwYXRoXCIsXG4gICAgICAgICAgICBwcm9wczogW1wicmVjdFwiXVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRvbmUoW1wiYmFuZHNcIiwgXCJhbGxcIl0sICgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBkb25lKFtcImdyYWRpZW50XCIsIFwiYWxsXCJdLCAoKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9KTsgLy8gVGhlIGdyYWRpZW50IGVsbXMgY2Fubm90IGJlIGVudW1lcmF0ZWQuXG4gICAgICB9XG5cbiAgICAgIHN1YkNvbXBzLmZvckVhY2goc3ViQ29tcCA9PiB7XG4gICAgICAgIGNvbnN0IHN1YkNvbXBFbnVtZXJhdG9yID0gc3RlcC5lbnVtZXJhdG9yW3N1YkNvbXAubmFtZV07XG4gICAgICAgIGNvbnN0IGdldFZhbHVlcyA9IGNhbGN1bGF0ZUdldFZhbGV1cyhcbiAgICAgICAgICBlbmNvZGVzW3N1YkNvbXAubmFtZV0sXG4gICAgICAgICAgc2NhbGVzLFxuICAgICAgICAgIHNpZ25hbHMsXG4gICAgICAgICAgY29tcHV0ZVNjYWxlLFxuICAgICAgICAgIGZpbmFsU2NhbGVOYW1lc1xuICAgICAgICApO1xuICAgICAgICBjb25zdCBhbGxQcm9wcyA9IHN1YkNvbXAucHJvcHMucmVkdWNlKChhY2MsIHByb3ApID0+IHtcbiAgICAgICAgICByZXR1cm4gYWNjLmNvbmNhdChwcm9wTWFwKHByb3ApKTtcbiAgICAgICAgfSwgW10pO1xuXG4gICAgICAgIGNvbnN0IGluaXRpYWxzID0gc3ViQ29tcC5zZWxlY3Rpb24uZmlsdGVyKFxuICAgICAgICAgIGlkID0+IFtcInVwZGF0ZVwiLCBcImV4aXRcIl0uaW5kZXhPZihzdWJDb21wRW51bWVyYXRvci5zZXQoaWQsIDApKSA+PSAwXG4gICAgICAgICk7XG4gICAgICAgIGFsbFByb3BzLmZvckVhY2gocCA9PiB7XG4gICAgICAgICAgaWYgKHAudHlwZSA9PT0gXCJhdHRyVHdlZW5cIikge1xuICAgICAgICAgICAgY29uc3QgdGVtcFAgPSBPYmplY3QuYXNzaWduKHt9LCBwLCB7IHR5cGU6IFwiYXR0clwiIH0pO1xuICAgICAgICAgICAgaW5pdGlhbHNbdGVtcFAudHlwZV0oZ2V0U3R5bGUodGVtcFAudmFsKSwgaWQgPT5cbiAgICAgICAgICAgICAgc3ViQ29tcEVudW1lcmF0b3IuZ2V0UHJvcFZhbCh0ZW1wUCwgZ2V0VmFsdWVzLCAwLCBpZClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIGlmIChwLnR5cGUgPT09IFwidGV4dFwiKSB7XG4gICAgICAgICAgICBpbml0aWFsc1twLnR5cGVdKGlkID0+XG4gICAgICAgICAgICAgIHN1YkNvbXBFbnVtZXJhdG9yLmdldFByb3BWYWwocCwgZ2V0VmFsdWVzLCAwLCBpZClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluaXRpYWxzW3AudHlwZV0oZ2V0U3R5bGUocC52YWwpLCBpZCA9PlxuICAgICAgICAgICAgICBzdWJDb21wRW51bWVyYXRvci5nZXRQcm9wVmFsKHAsIGdldFZhbHVlcywgMCwgaWQpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgc3ViQ29tcFRyYW5zaXRpb24gPSBzdWJDb21wLnNlbGVjdGlvbi50cmFuc2l0aW9uKCk7XG4gICAgICAgIGNvbnN0IHRpbWluZ3MgPSBlbnVtU3RlcENvbXB1dGVUaW1pbmcoc3ViQ29tcEVudW1lcmF0b3IsIHN0ZXAudGltaW5nKTtcbiAgICAgICAgYWxsUHJvcHMuZm9yRWFjaChwID0+IHtcbiAgICAgICAgICBpZiAocC50eXBlID09PSBcImF0dHJcIikge1xuICAgICAgICAgICAgc3ViQ29tcFRyYW5zaXRpb24uYXR0clR3ZWVuKHAudmFsLCBkID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHN1YkNvbXBFbnVtZXJhdG9yLmludGVycG9sYXRlQWxvbmdFbnVtTWFrZXIoXG4gICAgICAgICAgICAgICAgcCxcbiAgICAgICAgICAgICAgICBnZXRWYWx1ZXNcbiAgICAgICAgICAgICAgKShkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAocC50eXBlID09PSBcImF0dHJUd2VlblwiKSB7XG4gICAgICAgICAgICBzdWJDb21wVHJhbnNpdGlvbi5hdHRyVHdlZW4ocC52YWwsIGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHN1YkNvbXBFbnVtZXJhdG9yLmludGVycG9sYXRlQWxvbmdFbnVtTWFrZXIoXG4gICAgICAgICAgICAgICAgcCxcbiAgICAgICAgICAgICAgICBnZXRWYWx1ZXMsXG4gICAgICAgICAgICAgICAgdGhpc1xuICAgICAgICAgICAgICApKGQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChwLnR5cGUgPT09IFwidGV4dFwiKSB7XG4gICAgICAgICAgICBzdWJDb21wVHJhbnNpdGlvbi50d2VlbihcInRleHRcIiwgZnVuY3Rpb24oZCkge1xuICAgICAgICAgICAgICBjb25zdCB0ZXh0SW50ZXJwb2xhdG9yID0gc3ViQ29tcEVudW1lcmF0b3IuaW50ZXJwb2xhdGVBbG9uZ0VudW1NYWtlcihcbiAgICAgICAgICAgICAgICBwLFxuICAgICAgICAgICAgICAgIGdldFZhbHVlc1xuICAgICAgICAgICAgICApKGQpO1xuICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5uZXJIVE1MID0gdGV4dEludGVycG9sYXRvcih0KTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAocC50eXBlID09PSBcInN0eWxlXCIpIHtcbiAgICAgICAgICAgIHN1YkNvbXBUcmFuc2l0aW9uLnN0eWxlVHdlZW4oZ2V0U3R5bGUocC52YWwpLCBkID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHN1YkNvbXBFbnVtZXJhdG9yLmludGVycG9sYXRlQWxvbmdFbnVtTWFrZXIoXG4gICAgICAgICAgICAgICAgcCxcbiAgICAgICAgICAgICAgICBnZXRWYWx1ZXNcbiAgICAgICAgICAgICAgKShkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gaW50ZXJwb2xhdGUgdGhlbVxuICAgICAgICBzdWJDb21wVHJhbnNpdGlvblxuICAgICAgICAgIC5kdXJhdGlvbigoZCwgaSkgPT4gdGltaW5nc1tpXS5kdXJhdGlvbilcbiAgICAgICAgICAuZGVsYXkoKGQsIGkpID0+IHRpbWluZ3NbaV0uZGVsYXkpXG4gICAgICAgICAgLmVhc2UoZWFzZUZuKVxuICAgICAgICAgIC5lbmQoKVxuICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoW3N1YkNvbXAubmFtZSwgXCJhbGxcIl0sICgpID0+IHtcbiAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFxuICAgICAgICBbbGVnZW5kVHlwZXMuaW5pdGlhbCwgbGVnZW5kVHlwZXMuZmluYWxdLmluZGV4T2YoXCJzeW1ib2xcIikgPj0gMCAmJlxuICAgICAgICAoZG9TeW1ib2xzIHx8IGRvTGFiZWxzKVxuICAgICAgKSB7XG4gICAgICAgIGlmIChsZWdlbmRUeXBlcy5pbml0aWFsICE9PSBcInN5bWJvbFwiKSB7XG4gICAgICAgICAgLy8gYWRkIHRoZSBmcmFtZSBmb3IgdGhlIHN5bWJvbCBsZWdlbmQuXG4gICAgICAgICAgbGVnZW5kXG4gICAgICAgICAgICAuc2VsZWN0KFwiIC5yb2xlLWxlZ2VuZC1lbnRyeSA+IGcgPiBnXCIpXG4gICAgICAgICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcIm1hcmstZ3JvdXAgcm9sZS1zY29wZVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwYWlycyA9IGxlZ2VuZFxuICAgICAgICAgIC5zZWxlY3QoXCIucm9sZS1sZWdlbmQtZW50cnkgLnJvbGUtc2NvcGVcIilcbiAgICAgICAgICAuc2VsZWN0QWxsKFwiLnJvbGUtc2NvcGUgPiBnXCIpO1xuXG4gICAgICAgIGNvbnN0IGpvaW5LZXkgPSB7XG4gICAgICAgICAgcGFpcnM6IGpvaW5LZXlHZW4oXCJwYWlyc1wiKSxcbiAgICAgICAgICBzeW1ib2xzOiBqb2luS2V5R2VuKFwic3ltYm9sc1wiKSxcbiAgICAgICAgICBsYWJlbHM6IGpvaW5LZXlHZW4oXCJsYWJlbHNcIilcbiAgICAgICAgfTsgLy8gY3VyckRhdGEuc3ltYm9scyA9PT0gY3VyckRhdGEubGFiZWxzXG4gICAgICAgIGNvbnN0IG5leHREYXRhTGFiZWxzID1cbiAgICAgICAgICBsZWdlbmRUeXBlcy5maW5hbCAhPT0gXCJzeW1ib2xcIiA/IFtdIDogc3RlcC5uZXh0RGF0YS5sYWJlbHM7XG4gICAgICAgIGNvbnN0IGN1cnJEYXRhTGFiZWxzID1cbiAgICAgICAgICBsZWdlbmRUeXBlcy5pbml0aWFsICE9PSBcInN5bWJvbFwiID8gW10gOiBzdGVwLmN1cnJEYXRhLmxhYmVscztcbiAgICAgICAgY29uc3QgdGltaW5ncyA9IHtcbiAgICAgICAgICBwYWlyczogY29tcHV0ZVRpbWluZyhcbiAgICAgICAgICAgIHN0ZXAuY3VyckRhdGEucGFpcnMsXG4gICAgICAgICAgICBzdGVwLm5leHREYXRhLnBhaXJzLFxuICAgICAgICAgICAgc3RlcC50aW1pbmcsXG4gICAgICAgICAgICBqb2luS2V5LnBhaXJzLFxuICAgICAgICAgICAgam9pblNldFxuICAgICAgICAgICksXG4gICAgICAgICAgc3ltYm9sczogY29tcHV0ZVRpbWluZyhcbiAgICAgICAgICAgIHN0ZXAuY3VyckRhdGEuc3ltYm9scyxcbiAgICAgICAgICAgIHN0ZXAubmV4dERhdGEuc3ltYm9scyxcbiAgICAgICAgICAgIHN0ZXAudGltaW5nLFxuICAgICAgICAgICAgam9pbktleS5zeW1ib2xzLFxuICAgICAgICAgICAgam9pblNldFxuICAgICAgICAgICksXG4gICAgICAgICAgbGFiZWxzOiBjb21wdXRlVGltaW5nKFxuICAgICAgICAgICAgY3VyckRhdGFMYWJlbHMsXG4gICAgICAgICAgICBuZXh0RGF0YUxhYmVscyxcbiAgICAgICAgICAgIHN0ZXAudGltaW5nLFxuICAgICAgICAgICAgam9pbktleS5sYWJlbHMsXG4gICAgICAgICAgICBqb2luU2V0XG4gICAgICAgICAgKVxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHByZXZEYXRhID0gZDMubG9jYWwoKTtcblxuICAgICAgICBwYWlycy5zZWxlY3RBbGwoXCIucm9sZS1sZWdlbmQtc3ltYm9sID4gcGF0aFwiKS5lYWNoKGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICBwcmV2RGF0YS5zZXQodGhpcywgZCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHBhaXJzID0gcGFpcnMuZGF0YShzdGVwLm5leHREYXRhLnBhaXJzLCBkID0+IGpvaW5LZXkucGFpcnMoZCkpO1xuICAgICAgICAvLyBpZiAoIWlzUmVtb3ZlICYmIChpc0FuaW1TZXRTeW1ib2xzLmVudGVyIHx8IGlzQW5pbVNldExhYmVscy5lbnRlcikpIHtcbiAgICAgICAgaWYgKCFpc1JlbW92ZSAmJiBwYWlycy5lbnRlcigpLmRhdGEoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgbGV0IGVudGVyUGFpcnNJID0gcGFpcnMuZW50ZXIoKS5hcHBlbmQoXCJnXCIpO1xuICAgICAgICAgIGNvbnN0IGVudGVyUGFpcnNJc3ViRyA9IGVudGVyUGFpcnNJLmFwcGVuZChcImdcIik7XG4gICAgICAgICAgbGV0IGVudGVyU3ltYm9sc0kgPSBlbnRlclBhaXJzSXN1YkdcbiAgICAgICAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwibWFyay1zeW1ib2wgcm9sZS1sZWdlbmQtc3ltYm9sXCIpXG4gICAgICAgICAgICAuYXBwZW5kKFwicGF0aFwiKVxuICAgICAgICAgICAgLmRhdHVtKChkLCBpKSA9PiBzdGVwLm5leHREYXRhLnN5bWJvbHNbaV0pO1xuICAgICAgICAgIGxldCBlbnRlckxhYmVsc0kgPSBlbnRlclBhaXJzSXN1YkdcbiAgICAgICAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwibWFyay10ZXh0IHJvbGUtbGVnZW5kLWxhYmVsXCIpXG4gICAgICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAgICAgLmRhdHVtKChkLCBpKSA9PiBzdGVwLm5leHREYXRhLmxhYmVsc1tpXSk7XG5cbiAgICAgICAgICBjb25zdCBhY3RpbmdTY2FsZXMgPSBzdGVwLnNhbWVEb21haW5EaW1lbnNpb25cbiAgICAgICAgICAgID8geyBwcmltYXJ5OiBzY2FsZXMuaW5pdGlhbCwgc2Vjb25kYXJ5OiBzY2FsZXMuZmluYWwgfVxuICAgICAgICAgICAgOiB7IHByaW1hcnk6IHNjYWxlcy5maW5hbCwgc2Vjb25kYXJ5OiBzY2FsZXMuaW5pdGlhbCB9O1xuXG4gICAgICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICAgICAgZW50ZXJQYWlyc0ksXG4gICAgICAgICAgICBbXCJncm91cFwiXSxcbiAgICAgICAgICAgIGFjdGluZ1NjYWxlcyxcbiAgICAgICAgICAgIHNpZ25hbHMuaW5pdGlhbCxcbiAgICAgICAgICAgIGVuY29kZXMucGFpcnMuaW5pdGlhbC5lbnRlclxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgICAgICBlbnRlclN5bWJvbHNJLFxuICAgICAgICAgICAgW1wic3ltYm9sXCJdLFxuICAgICAgICAgICAgYWN0aW5nU2NhbGVzLFxuICAgICAgICAgICAgc2lnbmFscy5pbml0aWFsLFxuICAgICAgICAgICAgZW5jb2Rlcy5zeW1ib2xzLmluaXRpYWwuZW50ZXJcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICAgICAgZW50ZXJMYWJlbHNJLFxuICAgICAgICAgICAgW1widGV4dFwiXSxcbiAgICAgICAgICAgIGFjdGluZ1NjYWxlcyxcbiAgICAgICAgICAgIHNpZ25hbHMuaW5pdGlhbCxcbiAgICAgICAgICAgIGVuY29kZXMubGFiZWxzLmluaXRpYWwuZW50ZXJcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKGVudGVyUGFpcnNJLmRhdGEoKS5sZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgZW50ZXJQYWlyc0kgPSBwYWlycy5maWx0ZXIoZCA9PiBqb2luU2V0KGQpID09PSBcImVudGVyXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGVudGVyUGFpcnNGID0gZW50ZXJQYWlyc0kudHJhbnNpdGlvbigpO1xuICAgICAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgICAgIGVudGVyUGFpcnNGLFxuICAgICAgICAgICAgW1wiZ3JvdXBcIl0sXG4gICAgICAgICAgICBzY2FsZXMuZmluYWwsXG4gICAgICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICAgICAgZW5jb2Rlcy5wYWlycy5maW5hbC5lbnRlclxuICAgICAgICAgICk7XG4gICAgICAgICAgZW50ZXJQYWlyc0ZcbiAgICAgICAgICAgIC5kdXJhdGlvbihcbiAgICAgICAgICAgICAgKGQsIGkpID0+XG4gICAgICAgICAgICAgICAgdGltaW5ncy5wYWlycy5maW5kKHQgPT4gdC5pZCA9PT0gam9pbktleS5wYWlycyhkLCBpLCBcImZpbmFsXCIpKVxuICAgICAgICAgICAgICAgICAgLmR1cmF0aW9uXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuZGVsYXkoXG4gICAgICAgICAgICAgIChkLCBpKSA9PlxuICAgICAgICAgICAgICAgIHRpbWluZ3MucGFpcnMuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkucGFpcnMoZCwgaSwgXCJmaW5hbFwiKSlcbiAgICAgICAgICAgICAgICAgIC5kZWxheVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmVhc2UoZWFzZUZuKVxuICAgICAgICAgICAgLmVuZCgpXG4gICAgICAgICAgICAudGhlbihkb25lKFtcInBhaXJzXCIsIFwiZW50ZXJcIl0sICgpID0+IHJlc29sdmUoKSkpO1xuXG4gICAgICAgICAgaWYgKGVudGVyU3ltYm9sc0kuZGF0YSgpLmxlbmd0aCA8PSAwKSB7XG4gICAgICAgICAgICBlbnRlclN5bWJvbHNJID0gcGFpcnNcbiAgICAgICAgICAgICAgLnNlbGVjdEFsbChcIi5yb2xlLWxlZ2VuZC1zeW1ib2wgPiBwYXRoXCIpXG4gICAgICAgICAgICAgIC5maWx0ZXIoZCA9PiBqb2luU2V0KGQpID09PSBcImVudGVyXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBlbnRlclN5bWJvbHNGID0gZW50ZXJTeW1ib2xzSS50cmFuc2l0aW9uKCk7XG4gICAgICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICAgICAgZW50ZXJTeW1ib2xzRixcbiAgICAgICAgICAgIFtcInN5bWJvbFwiXSxcbiAgICAgICAgICAgIHNjYWxlcyxcbiAgICAgICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgICAgICBlbmNvZGVzLnN5bWJvbHMuZmluYWwuZW50ZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGVudGVyU3ltYm9sc0ZcbiAgICAgICAgICAgIC5kdXJhdGlvbihcbiAgICAgICAgICAgICAgKGQsIGkpID0+XG4gICAgICAgICAgICAgICAgdGltaW5ncy5zeW1ib2xzLmZpbmQoXG4gICAgICAgICAgICAgICAgICB0ID0+IHQuaWQgPT09IGpvaW5LZXkuc3ltYm9scyhkLCBpLCBcImZpbmFsXCIpXG4gICAgICAgICAgICAgICAgKS5kdXJhdGlvblxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmRlbGF5KFxuICAgICAgICAgICAgICAoZCwgaSkgPT5cbiAgICAgICAgICAgICAgICB0aW1pbmdzLnN5bWJvbHMuZmluZChcbiAgICAgICAgICAgICAgICAgIHQgPT4gdC5pZCA9PT0gam9pbktleS5zeW1ib2xzKGQsIGksIFwiZmluYWxcIilcbiAgICAgICAgICAgICAgICApLmRlbGF5XG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuZWFzZShlYXNlRm4pXG4gICAgICAgICAgICAuZW5kKClcbiAgICAgICAgICAgIC50aGVuKGRvbmUoW1wic3ltYm9sc1wiLCBcImVudGVyXCJdLCAoKSA9PiByZXNvbHZlKCkpKTtcblxuICAgICAgICAgIGlmIChlbnRlckxhYmVsc0kuZGF0YSgpLmxlbmd0aCA8PSAwKSB7XG4gICAgICAgICAgICBlbnRlckxhYmVsc0kgPSBwYWlyc1xuICAgICAgICAgICAgICAuc2VsZWN0QWxsKFwiLnJvbGUtbGVnZW5kLWxhYmVsID4gdGV4dFwiKVxuICAgICAgICAgICAgICAuZmlsdGVyKGQgPT4gam9pblNldChkKSA9PT0gXCJlbnRlclwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgZW50ZXJMYWJlbHNGID0gZW50ZXJMYWJlbHNJLnRyYW5zaXRpb24oKTtcbiAgICAgICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgICAgICBlbnRlckxhYmVsc0YsXG4gICAgICAgICAgICBbXCJ0ZXh0XCJdLFxuICAgICAgICAgICAgc2NhbGVzLmZpbmFsLFxuICAgICAgICAgICAgc2lnbmFscy5maW5hbCxcbiAgICAgICAgICAgIGVuY29kZXMubGFiZWxzLmZpbmFsLmVudGVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBlbnRlckxhYmVsc0ZcbiAgICAgICAgICAgIC5kdXJhdGlvbihcbiAgICAgICAgICAgICAgKGQsIGkpID0+XG4gICAgICAgICAgICAgICAgdGltaW5ncy5sYWJlbHMuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkubGFiZWxzKGQsIGksIFwiZmluYWxcIikpXG4gICAgICAgICAgICAgICAgICAuZHVyYXRpb25cbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5kZWxheShcbiAgICAgICAgICAgICAgKGQsIGkpID0+XG4gICAgICAgICAgICAgICAgdGltaW5ncy5sYWJlbHMuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkubGFiZWxzKGQsIGksIFwiZmluYWxcIikpXG4gICAgICAgICAgICAgICAgICAuZGVsYXlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5lYXNlKGVhc2VGbilcbiAgICAgICAgICAgIC5lbmQoKVxuICAgICAgICAgICAgLnRoZW4oZG9uZShbXCJsYWJlbHNcIiwgXCJlbnRlclwiXSwgKCkgPT4gcmVzb2x2ZSgpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZG9uZShbXCJwYWlyc1wiLCBcImVudGVyXCJdLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgICAgIGRvbmUoW1wic3ltYm9sc1wiLCBcImVudGVyXCJdLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgICAgIGRvbmUoW1wibGFiZWxzXCIsIFwiZW50ZXJcIl0sICgpID0+IHJlc29sdmUoKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiAoIWlzQWRkICYmIChpc0FuaW1TZXRTeW1ib2xzLmV4aXQgfHwgaXNBbmltU2V0TGFiZWxzLmV4aXQpKSB7XG4gICAgICAgIGlmICghaXNBZGQgJiYgcGFpcnMuZXhpdCgpLmRhdGEoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgbGV0IGV4aXRQYWlyc0kgPSBwYWlycy5leGl0KCk7XG4gICAgICAgICAgaWYgKGV4aXRQYWlyc0kuZGF0YSgpLmxlbmd0aCA8PSAwKSB7XG4gICAgICAgICAgICBleGl0UGFpcnNJID0gcGFpcnMuZmlsdGVyKGQgPT4gam9pblNldChkKSA9PT0gXCJleGl0XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBhY3RpbmdTY2FsZXMgPSBzdGVwLnNhbWVEb21haW5EaW1lbnNpb25cbiAgICAgICAgICAgID8geyBwcmltYXJ5OiBzY2FsZXMuZmluYWwsIHNlY29uZGFyeTogc2NhbGVzLmluaXRpYWwgfVxuICAgICAgICAgICAgOiB7IHByaW1hcnk6IHNjYWxlcy5pbml0aWFsLCBzZWNvbmRhcnk6IHNjYWxlcy5maW5hbCB9O1xuXG4gICAgICAgICAgY29uc3QgZXhpdFBhaXJzRiA9IGV4aXRQYWlyc0kudHJhbnNpdGlvbigpO1xuICAgICAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgICAgIGV4aXRQYWlyc0YsXG4gICAgICAgICAgICBbXCJncm91cFwiXSxcbiAgICAgICAgICAgIGFjdGluZ1NjYWxlcyxcbiAgICAgICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgICAgICBlbmNvZGVzLnBhaXJzLmZpbmFsLmV4aXRcbiAgICAgICAgICApO1xuICAgICAgICAgIGV4aXRQYWlyc0ZcbiAgICAgICAgICAgIC5kdXJhdGlvbihcbiAgICAgICAgICAgICAgKGQsIGkpID0+XG4gICAgICAgICAgICAgICAgdGltaW5ncy5wYWlycy5maW5kKHQgPT4gdC5pZCA9PT0gam9pbktleS5wYWlycyhkLCBpLCBcImluaXRpYWxcIikpXG4gICAgICAgICAgICAgICAgICAuZHVyYXRpb25cbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5kZWxheShcbiAgICAgICAgICAgICAgKGQsIGkpID0+XG4gICAgICAgICAgICAgICAgdGltaW5ncy5wYWlycy5maW5kKHQgPT4gdC5pZCA9PT0gam9pbktleS5wYWlycyhkLCBpLCBcImluaXRpYWxcIikpXG4gICAgICAgICAgICAgICAgICAuZGVsYXlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5lYXNlKGVhc2VGbilcbiAgICAgICAgICAgIC5yZW1vdmUoKVxuICAgICAgICAgICAgLmVuZCgpXG4gICAgICAgICAgICAudGhlbihkb25lKFtcInBhaXJzXCIsIFwiZXhpdFwiXSwgKCkgPT4gcmVzb2x2ZSgpKSk7XG5cbiAgICAgICAgICBjb25zdCBleGl0U3ltYm9sc0kgPSBleGl0UGFpcnNJLnNlbGVjdEFsbChcbiAgICAgICAgICAgIFwiLnJvbGUtbGVnZW5kLXN5bWJvbCA+IHBhdGhcIlxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgZXhpdFN5bWJvbHNGID0gZXhpdFN5bWJvbHNJLnRyYW5zaXRpb24oKTtcbiAgICAgICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgICAgICBleGl0U3ltYm9sc0YsXG4gICAgICAgICAgICBbXCJzeW1ib2xcIl0sXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHt9LCBzY2FsZXMsIHtcbiAgICAgICAgICAgICAgcHJpbWFyeTogc2NhbGVzLmZpbmFsLFxuICAgICAgICAgICAgICBzZWNvbmRhcnk6IHNjYWxlcy5pbml0aWFsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgICAgICBlbmNvZGVzLnN5bWJvbHMuZmluYWwuZXhpdFxuICAgICAgICAgICk7XG4gICAgICAgICAgZXhpdFN5bWJvbHNGXG4gICAgICAgICAgICAuZHVyYXRpb24oXG4gICAgICAgICAgICAgIChkLCBpKSA9PlxuICAgICAgICAgICAgICAgIHRpbWluZ3Muc3ltYm9scy5maW5kKFxuICAgICAgICAgICAgICAgICAgdCA9PiB0LmlkID09PSBqb2luS2V5LnN5bWJvbHMoZCwgaSwgXCJpbml0aWFsXCIpXG4gICAgICAgICAgICAgICAgKS5kdXJhdGlvblxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmRlbGF5KFxuICAgICAgICAgICAgICAoZCwgaSkgPT5cbiAgICAgICAgICAgICAgICB0aW1pbmdzLnN5bWJvbHMuZmluZChcbiAgICAgICAgICAgICAgICAgIHQgPT4gdC5pZCA9PT0gam9pbktleS5zeW1ib2xzKGQsIGksIFwiaW5pdGlhbFwiKVxuICAgICAgICAgICAgICAgICkuZGVsYXlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5lYXNlKGVhc2VGbilcbiAgICAgICAgICAgIC5yZW1vdmUoKVxuICAgICAgICAgICAgLmVuZCgpXG4gICAgICAgICAgICAudGhlbihkb25lKFtcInN5bWJvbHNcIiwgXCJleGl0XCJdLCAoKSA9PiByZXNvbHZlKCkpKTtcblxuICAgICAgICAgIGNvbnN0IGV4aXRMYWJlbHNJID0gZXhpdFBhaXJzSS5zZWxlY3RBbGwoXCIucm9sZS1sZWdlbmQtbGFiZWwgPiB0ZXh0XCIpO1xuICAgICAgICAgIGNvbnN0IGV4aXRMYWJlbHNGID0gZXhpdExhYmVsc0kudHJhbnNpdGlvbigpO1xuICAgICAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgICAgIGV4aXRMYWJlbHNGLFxuICAgICAgICAgICAgW1widGV4dFwiXSxcbiAgICAgICAgICAgIGFjdGluZ1NjYWxlcyxcbiAgICAgICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgICAgICBlbmNvZGVzLmxhYmVscy5maW5hbC5leGl0XG4gICAgICAgICAgKTtcbiAgICAgICAgICBleGl0TGFiZWxzRlxuICAgICAgICAgICAgLmR1cmF0aW9uKFxuICAgICAgICAgICAgICAoZCwgaSkgPT5cbiAgICAgICAgICAgICAgICB0aW1pbmdzLmxhYmVscy5maW5kKFxuICAgICAgICAgICAgICAgICAgdCA9PiB0LmlkID09PSBqb2luS2V5LmxhYmVscyhkLCBpLCBcImluaXRpYWxcIilcbiAgICAgICAgICAgICAgICApLmR1cmF0aW9uXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuZGVsYXkoXG4gICAgICAgICAgICAgIChkLCBpKSA9PlxuICAgICAgICAgICAgICAgIHRpbWluZ3MubGFiZWxzLmZpbmQoXG4gICAgICAgICAgICAgICAgICB0ID0+IHQuaWQgPT09IGpvaW5LZXkubGFiZWxzKGQsIGksIFwiaW5pdGlhbFwiKVxuICAgICAgICAgICAgICAgICkuZGVsYXlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5lYXNlKGVhc2VGbilcbiAgICAgICAgICAgIC5yZW1vdmUoKVxuICAgICAgICAgICAgLmVuZCgpXG4gICAgICAgICAgICAudGhlbihkb25lKFtcImxhYmVsc1wiLCBcImV4aXRcIl0sICgpID0+IHJlc29sdmUoKSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRvbmUoW1wicGFpcnNcIiwgXCJleGl0XCJdLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgICAgIGRvbmUoW1wibGFiZWxzXCIsIFwiZXhpdFwiXSwgKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICAgICAgICBkb25lKFtcInN5bWJvbHNcIiwgXCJleGl0XCJdLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhaXJzLmRhdGEoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgLy8gaWYgKChpc0FuaW1TZXRTeW1ib2xzLnVwZGF0ZSB8fCBpc0FuaW1TZXRMYWJlbHMudXBkYXRlKSAmJiBwYWlycy5kYXRhKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHVwZGF0ZVBhaXJzRiA9IHBhaXJzXG4gICAgICAgICAgICAuZmlsdGVyKGQgPT4gam9pblNldChkKSA9PT0gXCJ1cGRhdGVcIilcbiAgICAgICAgICAgIC50cmFuc2l0aW9uKCk7XG4gICAgICAgICAgLy8gZmluYWxpemUgdGhlIHVwZGF0ZSBzZXQgb2YgdGhlIHBhaXJzXG4gICAgICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICAgICAgdXBkYXRlUGFpcnNGLFxuICAgICAgICAgICAgW1wiZ3JvdXBcIl0sXG4gICAgICAgICAgICBzY2FsZXMuZmluYWwsXG4gICAgICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICAgICAgZW5jb2Rlcy5wYWlycy5maW5hbC51cGRhdGVcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdXBkYXRlUGFpcnNGXG4gICAgICAgICAgICAuZHVyYXRpb24oXG4gICAgICAgICAgICAgIChkLCBpKSA9PlxuICAgICAgICAgICAgICAgIHRpbWluZ3MucGFpcnMuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkucGFpcnMoZCwgaSkpLmR1cmF0aW9uXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuZGVsYXkoXG4gICAgICAgICAgICAgIChkLCBpKSA9PlxuICAgICAgICAgICAgICAgIHRpbWluZ3MucGFpcnMuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkucGFpcnMoZCwgaSkpLmRlbGF5XG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuZWFzZShlYXNlRm4pXG4gICAgICAgICAgICAuZW5kKClcbiAgICAgICAgICAgIC50aGVuKGRvbmUoW1wicGFpcnNcIiwgXCJ1cGRhdGVcIl0sICgpID0+IHJlc29sdmUoKSkpO1xuXG4gICAgICAgICAgY29uc3QgdXBkYXRlU3ltYm9sc0kgPSBwYWlyc1xuICAgICAgICAgICAgLnNlbGVjdChcIi5yb2xlLWxlZ2VuZC1zeW1ib2wgPiBwYXRoXCIpXG4gICAgICAgICAgICAuZGF0dW0oKGQsIGkpID0+IHN0ZXAubmV4dERhdGEuc3ltYm9sc1tpXSk7XG4gICAgICAgICAgY29uc3QgdXBkYXRlU3ltYm9sc0YgPSB1cGRhdGVTeW1ib2xzSS50cmFuc2l0aW9uKCk7XG4gICAgICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICAgICAgdXBkYXRlU3ltYm9sc0YsXG4gICAgICAgICAgICBbXCJzeW1ib2xcIl0sXG4gICAgICAgICAgICBzY2FsZXMsXG4gICAgICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpbml0aWFsOiBlbmNvZGVzLnN5bWJvbHMuaW5pdGlhbC51cGRhdGUsXG4gICAgICAgICAgICAgIGZpbmFsOiBlbmNvZGVzLnN5bWJvbHMuZmluYWwudXBkYXRlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJldkRhdGFcbiAgICAgICAgICApO1xuICAgICAgICAgIHVwZGF0ZVN5bWJvbHNGXG4gICAgICAgICAgICAuZHVyYXRpb24oXG4gICAgICAgICAgICAgIChkLCBpKSA9PlxuICAgICAgICAgICAgICAgIHRpbWluZ3Muc3ltYm9scy5maW5kKHQgPT4gdC5pZCA9PT0gam9pbktleS5zeW1ib2xzKGQsIGkpKVxuICAgICAgICAgICAgICAgICAgLmR1cmF0aW9uXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuZGVsYXkoXG4gICAgICAgICAgICAgIChkLCBpKSA9PlxuICAgICAgICAgICAgICAgIHRpbWluZ3Muc3ltYm9scy5maW5kKHQgPT4gdC5pZCA9PT0gam9pbktleS5zeW1ib2xzKGQsIGkpKS5kZWxheVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmVhc2UoZWFzZUZuKVxuICAgICAgICAgICAgLmVuZCgpXG4gICAgICAgICAgICAudGhlbihkb25lKFtcInN5bWJvbHNcIiwgXCJ1cGRhdGVcIl0sICgpID0+IHJlc29sdmUoKSkpO1xuXG4gICAgICAgICAgY29uc3QgdXBkYXRlTGFiZWxzSSA9IHBhaXJzXG4gICAgICAgICAgICAuc2VsZWN0KFwiLnJvbGUtbGVnZW5kLWxhYmVsID4gdGV4dFwiKVxuICAgICAgICAgICAgLmRhdHVtKChkLCBpKSA9PiBzdGVwLm5leHREYXRhLmxhYmVsc1tpXSk7XG4gICAgICAgICAgY29uc3QgdXBkYXRlTGFiZWxzRiA9IHVwZGF0ZUxhYmVsc0kudHJhbnNpdGlvbigpO1xuICAgICAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgICAgIHVwZGF0ZUxhYmVsc0YsXG4gICAgICAgICAgICBbXCJ0ZXh0XCJdLFxuICAgICAgICAgICAgc2NhbGVzLmZpbmFsLFxuICAgICAgICAgICAgc2lnbmFscy5maW5hbCxcbiAgICAgICAgICAgIGVuY29kZXMubGFiZWxzLmZpbmFsLnVwZGF0ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgdXBkYXRlTGFiZWxzRlxuICAgICAgICAgICAgLmR1cmF0aW9uKFxuICAgICAgICAgICAgICAoZCwgaSkgPT5cbiAgICAgICAgICAgICAgICB0aW1pbmdzLmxhYmVscy5maW5kKHQgPT4gdC5pZCA9PT0gam9pbktleS5sYWJlbHMoZCwgaSkpLmR1cmF0aW9uXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuZGVsYXkoXG4gICAgICAgICAgICAgIChkLCBpKSA9PlxuICAgICAgICAgICAgICAgIHRpbWluZ3MubGFiZWxzLmZpbmQodCA9PiB0LmlkID09PSBqb2luS2V5LmxhYmVscyhkLCBpKSkuZGVsYXlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5lYXNlKGVhc2VGbilcbiAgICAgICAgICAgIC5lbmQoKVxuICAgICAgICAgICAgLnRoZW4oZG9uZShbXCJsYWJlbHNcIiwgXCJ1cGRhdGVcIl0sICgpID0+IHJlc29sdmUoKSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRvbmUoW1wicGFpcnNcIiwgXCJ1cGRhdGVcIl0sICgpID0+IHJlc29sdmUoKSk7XG4gICAgICAgICAgZG9uZShbXCJzeW1ib2xzXCIsIFwidXBkYXRlXCJdLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgICAgIGRvbmUoW1wibGFiZWxzXCIsIFwidXBkYXRlXCJdLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIFtsZWdlbmRUeXBlcy5pbml0aWFsLCBsZWdlbmRUeXBlcy5maW5hbF0uaW5kZXhPZihcImdyYWRpZW50XCIpID49IDAgJiZcbiAgICAgICAgKGRvR3JhZGllbnQgfHwgZG9MYWJlbHMpXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgZW50cnlHID0gbGVnZW5kLnNlbGVjdChcIiAucm9sZS1sZWdlbmQtZW50cnkgPiBnID4gZ1wiKTtcbiAgICAgICAgaWYgKGxlZ2VuZFR5cGVzLmluaXRpYWwgIT09IFwiZ3JhZGllbnRcIikge1xuICAgICAgICAgIC8vIGFkZCB0aGUgZnJhbWUgZm9yIHRoZSBzeW1ib2wgbGVnZW5kLlxuICAgICAgICAgIGVudHJ5Ry5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1hcmstdGV4dCByb2xlLWxlZ2VuZC1sYWJlbFwiKTtcblxuICAgICAgICAgIGlmIChzdGVwLmNoYW5nZS5maW5hbC5pc0JhbmQpIHtcbiAgICAgICAgICAgIGVudHJ5Ry5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1hcmstcmVjdCByb2xlLWxlZ2VuZC1iYW5kXCIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbnRyeUcuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJtYXJrLXJlY3Qgcm9sZS1sZWdlbmQtZ3JhZGllbnRcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0ZXAuY2hhbmdlLmluaXRpYWwuaXNCYW5kICYmICFzdGVwLmNoYW5nZS5maW5hbC5pc0JhbmQgKSB7XG4gICAgICAgICAgZW50cnlHLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsIFwibWFyay1yZWN0IHJvbGUtbGVnZW5kLWdyYWRpZW50XCIpO1xuICAgICAgICB9IGVsc2UgaWYgKCFzdGVwLmNoYW5nZS5pbml0aWFsLmlzQmFuZCAmJiBzdGVwLmNoYW5nZS5maW5hbC5pc0JhbmQpIHtcbiAgICAgICAgICBlbnRyeUcuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJtYXJrLXJlY3Qgcm9sZS1sZWdlbmQtYmFuZFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxhYmVsRyA9IGxlZ2VuZC5zZWxlY3QoXG4gICAgICAgICAgXCIgLnJvbGUtbGVnZW5kLWVudHJ5ID4gZyA+IGcgPiAucm9sZS1sZWdlbmQtbGFiZWxcIlxuICAgICAgICApO1xuICAgICAgICBpZiAoZG9MYWJlbHMgJiYgIWxhYmVsRy5lbXB0eSgpKSB7XG4gICAgICAgICAgZ3JhZGllbnRTdWJDb21wKFwibGFiZWxzXCIsIGxhYmVsRywgXCJ0ZXh0XCIsIFtcInRleHRcIl0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRvbmUoW1wibGFiZWxzXCIsIFwiYWxsXCJdLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZ3JhZGllbnRHID0gbGVnZW5kLnNlbGVjdChcIi5yb2xlLWxlZ2VuZC1ncmFkaWVudFwiKTtcbiAgICAgICAgaWYgKGRvR3JhZGllbnQgJiYgIWdyYWRpZW50Ry5lbXB0eSgpKSB7XG4gICAgICAgICAgZ3JhZGllbnRTdWJDb21wKFwiZ3JhZGllbnRcIiwgZ3JhZGllbnRHLCBcInBhdGhcIiwgW1wiZ3JhZGllbnRcIl0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRvbmUoW1wiZ3JhZGllbnRcIiwgXCJhbGxcIl0sICgpID0+IHJlc29sdmUoKSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBiYW5kc0cgPSBsZWdlbmQuc2VsZWN0KFwiLnJvbGUtbGVnZW5kLWJhbmRcIik7XG4gICAgICAgIGlmIChkb0dyYWRpZW50ICYmICFiYW5kc0cuZW1wdHkoKSkge1xuICAgICAgICAgIGdyYWRpZW50U3ViQ29tcChcImJhbmRzXCIsIGJhbmRzRywgXCJwYXRoXCIsIFtcInJlY3RcIl0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRvbmUoW1wiYmFuZHNcIiwgXCJhbGxcIl0sICgpID0+IHJlc29sdmUoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaXRsZVxuICAgIGNvbnN0IHRpdGxlRyA9IGxlZ2VuZC5zZWxlY3QoXCIucm9sZS1sZWdlbmQtdGl0bGVcIik7XG4gICAgaWYgKCF0aXRsZUcuZW1wdHkoKSAmJiBkb1RpdGxlKSB7XG4gICAgICBsZXQgdGl0bGUgPSB0aXRsZUcuc2VsZWN0QWxsKFwidGV4dFwiKTtcblxuXG4gICAgICBjb25zdCBqb2luS2V5ID0gam9pbktleUdlbihcInRpdGxlXCIpO1xuICAgICAgY29uc3QgdGltaW5ncyA9IGNvbXB1dGVUaW1pbmcoXG4gICAgICAgIHN0ZXAuY3VyckRhdGEudGl0bGUsXG4gICAgICAgIHN0ZXAubmV4dERhdGEudGl0bGUsXG4gICAgICAgIHN0ZXAudGltaW5nLFxuICAgICAgICBqb2luS2V5LFxuICAgICAgICBqb2luU2V0XG4gICAgICApO1xuXG4gICAgICB0aXRsZSA9IHRpdGxlLmRhdGEoc3RlcC5uZXh0RGF0YS50aXRsZSwgZCA9PiBkLnRleHQpO1xuICAgICAgY29uc3QgZW50ZXJUaXRsZUkgPSB0aXRsZS5lbnRlcigpLmFwcGVuZChcInRleHRcIik7XG5cbiAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgZW50ZXJUaXRsZUksXG4gICAgICAgIFtcInRpdGxlXCIsIFwiYWxpZ25cIl0sXG4gICAgICAgIHt9LFxuICAgICAgICBzaWduYWxzLmluaXRpYWwsXG4gICAgICAgIGVuY29kZXMudGl0bGUuaW5pdGlhbC5lbnRlclxuICAgICAgKTtcblxuXG4gICAgICBjb25zdCBlbnRlclRpdGxlRiA9IGVudGVyVGl0bGVJLnRyYW5zaXRpb24oKTtcbiAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgZW50ZXJUaXRsZUYsXG4gICAgICAgIFtcInRpdGxlXCIsIFwiYWxpZ25cIl0sXG4gICAgICAgIHt9LFxuICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICBlbmNvZGVzLnRpdGxlLmZpbmFsLmVudGVyXG4gICAgICApO1xuICAgICAgZW50ZXJUaXRsZUZcbiAgICAgICAgLmR1cmF0aW9uKFxuICAgICAgICAgIChkLCBpKSA9PlxuICAgICAgICAgICAgdGltaW5ncy5maW5kKHQgPT4gdC5pZCA9PT0gam9pbktleShkLCBpLCBcImZpbmFsXCIpKS5kdXJhdGlvblxuICAgICAgICApXG4gICAgICAgIC5kZWxheShcbiAgICAgICAgICAoZCwgaSkgPT4gdGltaW5ncy5maW5kKHQgPT4gdC5pZCA9PT0gam9pbktleShkLCBpLCBcImZpbmFsXCIpKS5kZWxheVxuICAgICAgICApXG4gICAgICAgIC5lYXNlKGVhc2VGbilcbiAgICAgICAgLmVuZCgpXG4gICAgICAgIC50aGVuKGRvbmUoW1widGl0bGVcIiwgXCJlbnRlclwiXSwgKCkgPT4gcmVzb2x2ZSgpKSk7XG5cblxuXG5cbiAgICAgIGNvbnN0IGV4aXRUaXRsZUkgPSB0aXRsZS5leGl0KCk7XG4gICAgICBjb25zdCBleGl0VGl0bGVGID0gZXhpdFRpdGxlSS50cmFuc2l0aW9uKCk7XG4gICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgIGV4aXRUaXRsZUYsXG4gICAgICAgIFtcInRpdGxlXCIsIFwiYWxpZ25cIl0sXG4gICAgICAgIHt9LFxuICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICBlbmNvZGVzLnRpdGxlLmZpbmFsLmV4aXRcbiAgICAgICk7XG4gICAgICBleGl0VGl0bGVGXG4gICAgICAgIC5kdXJhdGlvbihcbiAgICAgICAgICAoZCwgaSkgPT5cbiAgICAgICAgICAgIHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSwgXCJpbml0aWFsXCIpKS5kdXJhdGlvblxuICAgICAgICApXG4gICAgICAgIC5kZWxheShcbiAgICAgICAgICAoZCwgaSkgPT4gdGltaW5ncy5maW5kKHQgPT4gdC5pZCA9PT0gam9pbktleShkLCBpLCBcImluaXRpYWxcIikpLmRlbGF5XG4gICAgICAgIClcbiAgICAgICAgLmVhc2UoZWFzZUZuKVxuICAgICAgICAucmVtb3ZlKClcbiAgICAgICAgLmVuZCgpXG4gICAgICAgIC50aGVuKGRvbmUoW1widGl0bGVcIiwgXCJleGl0XCJdLCAoKSA9PiByZXNvbHZlKCkpKTtcblxuXG5cblxuICAgICAgdGl0bGUgPSB0aXRsZS50cmFuc2l0aW9uKCk7XG4gICAgICAvLyB1cGRhdGUgdGhlIHRpdGxlXG4gICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgIHRpdGxlLFxuICAgICAgICBbXCJ0aXRsZVwiLCBcImFsaWduXCJdLFxuICAgICAgICB7fSxcbiAgICAgICAgc2lnbmFscy5maW5hbCxcbiAgICAgICAgZW5jb2Rlcy50aXRsZS5maW5hbC51cGRhdGVcbiAgICAgICk7XG5cbiAgICAgIHRpdGxlXG4gICAgICAgIC5kdXJhdGlvbihcbiAgICAgICAgICAoZCwgaSkgPT4gdGltaW5ncy5maW5kKHQgPT4gdC5pZCA9PT0gam9pbktleShkLCBpKSkuZHVyYXRpb25cbiAgICAgICAgKVxuICAgICAgICAuZGVsYXkoKGQsIGkpID0+IHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSkpLmRlbGF5KVxuICAgICAgICAuZWFzZShlYXNlRm4pXG4gICAgICAgIC5lbmQoKVxuICAgICAgICAudGhlbihkb25lKFtcInRpdGxlXCIsIFwidXBkYXRlXCJdLCAoKSA9PiByZXNvbHZlKCkpKTtcblxuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gZ3JhZGllbnRTdWJDb21wKFxuICAgICAgc3ViQ29tcE5hbWUsXG4gICAgICBzdWJDb21wRyxcbiAgICAgIHN1YkNvbXBTdmdFbG1UeXBlLFxuICAgICAgc3ViQ29tcFByb3BzXG4gICAgKSB7XG4gICAgICBjb25zdCBwcmV2RGF0YSA9IGQzLmxvY2FsKCk7XG4gICAgICBsZXQgc3ViQ29tcFNlbGVjdGlvbiA9IHN1YkNvbXBHLnNlbGVjdEFsbChzdWJDb21wU3ZnRWxtVHlwZSk7XG5cbiAgICAgIGNvbnN0IGpvaW5LZXkgPSBqb2luS2V5R2VuKHN1YkNvbXBOYW1lKTtcbiAgICAgIGNvbnN0IG5leHREYXRhID1cbiAgICAgICAgc3ViQ29tcE5hbWUgPT09IFwibGFiZWxzXCIgJiYgbGVnZW5kVHlwZXMuZmluYWwgIT09IFwiZ3JhZGllbnRcIlxuICAgICAgICAgID8gW11cbiAgICAgICAgICA6IHN0ZXAubmV4dERhdGFbc3ViQ29tcE5hbWVdO1xuICAgICAgY29uc3QgY3VyckRhdGEgPVxuICAgICAgICBzdWJDb21wTmFtZSA9PT0gXCJsYWJlbHNcIiAmJiBsZWdlbmRUeXBlcy5pbml0aWFsICE9PSBcImdyYWRpZW50XCJcbiAgICAgICAgICA/IFtdXG4gICAgICAgICAgOiBzdGVwLmN1cnJEYXRhW3N1YkNvbXBOYW1lXTtcbiAgICAgIGNvbnN0IHRpbWluZ3MgPSBjb21wdXRlVGltaW5nKFxuICAgICAgICBjdXJyRGF0YSxcbiAgICAgICAgbmV4dERhdGEsXG4gICAgICAgIHN0ZXAudGltaW5nLFxuICAgICAgICBqb2luS2V5LFxuICAgICAgICBqb2luU2V0XG4gICAgICApO1xuICAgICAgc3ViQ29tcFNlbGVjdGlvbi5lYWNoKGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgcHJldkRhdGEuc2V0KHRoaXMsIGQpO1xuICAgICAgfSk7XG4gICAgICBzdWJDb21wU2VsZWN0aW9uID0gc3ViQ29tcFNlbGVjdGlvbi5kYXRhKG5leHREYXRhLCAoZCwgaSkgPT5cbiAgICAgICAgam9pbktleShkLCBpKVxuICAgICAgKTtcblxuICAgICAgLy8gaWYgKCFpc1JlbW92ZSAmJiBpc0FuaW1TZXQuZW50ZXIpIHtcbiAgICAgIGlmICghaXNSZW1vdmUgJiYgc3ViQ29tcFNlbGVjdGlvbi5lbnRlcigpLmRhdGEoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGxldCBlbnRlclN1YkNvbXBJID0gc3ViQ29tcFNlbGVjdGlvbi5lbnRlcigpLmFwcGVuZChzdWJDb21wU3ZnRWxtVHlwZSk7XG5cbiAgICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICAgIGVudGVyU3ViQ29tcEksXG4gICAgICAgICAgc3ViQ29tcFByb3BzLFxuICAgICAgICAgIHN0ZXAuc2FtZURvbWFpbkRpbWVuc2lvblxuICAgICAgICAgICAgPyB7IHByaW1hcnk6IHNjYWxlcy5pbml0aWFsLCBzZWNvbmRhcnk6IHNjYWxlcy5maW5hbCB9XG4gICAgICAgICAgICA6IHsgcHJpbWFyeTogc2NhbGVzLmZpbmFsLCBzZWNvbmRhcnk6IHNjYWxlcy5pbml0aWFsIH0sXG4gICAgICAgICAgc2lnbmFscy5pbml0aWFsLFxuICAgICAgICAgIGVuY29kZXNbc3ViQ29tcE5hbWVdLmluaXRpYWwuZW50ZXJcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoZW50ZXJTdWJDb21wSS5kYXRhKCkubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICBlbnRlclN1YkNvbXBJID0gc3ViQ29tcEdcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoc3ViQ29tcFN2Z0VsbVR5cGUpXG4gICAgICAgICAgICAuZmlsdGVyKGQgPT4gam9pblNldChkKSA9PT0gXCJlbnRlclwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbnRlclN1YkNvbXBGID0gZW50ZXJTdWJDb21wSS50cmFuc2l0aW9uKCk7XG4gICAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgICBlbnRlclN1YkNvbXBGLFxuICAgICAgICAgIHN1YkNvbXBQcm9wcyxcbiAgICAgICAgICBzY2FsZXMsXG4gICAgICAgICAgc2lnbmFscy5maW5hbCxcbiAgICAgICAgICBlbmNvZGVzW3N1YkNvbXBOYW1lXS5maW5hbC5lbnRlcixcbiAgICAgICAgICBwcmV2RGF0YVxuICAgICAgICApO1xuICAgICAgICBlbnRlclN1YkNvbXBGXG4gICAgICAgICAgLmR1cmF0aW9uKFxuICAgICAgICAgICAgKGQsIGkpID0+XG4gICAgICAgICAgICAgIHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSwgXCJmaW5hbFwiKSkuZHVyYXRpb25cbiAgICAgICAgICApXG4gICAgICAgICAgLmRlbGF5KFxuICAgICAgICAgICAgKGQsIGkpID0+IHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSwgXCJmaW5hbFwiKSkuZGVsYXlcbiAgICAgICAgICApXG4gICAgICAgICAgLmVhc2UoZWFzZUZuKVxuICAgICAgICAgIC5lbmQoKVxuICAgICAgICAgIC50aGVuKGRvbmUoW3N1YkNvbXBOYW1lLCBcImVudGVyXCJdLCAoKSA9PiByZXNvbHZlKCkpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvbmUoW3N1YkNvbXBOYW1lLCBcImVudGVyXCJdLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiAoIWlzQWRkICYmIGlzQW5pbVNldC5leGl0KSB7XG4gICAgICBpZiAoIWlzQWRkICYmIHN1YkNvbXBTZWxlY3Rpb24uZXhpdCgpLmRhdGEoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGV4aXRTdWJDb21wSSA9IHN1YkNvbXBTZWxlY3Rpb24uZXhpdCgpO1xuICAgICAgICBjb25zdCBleGl0U3ViQ29tcEYgPSBleGl0U3ViQ29tcEkudHJhbnNpdGlvbigpO1xuICAgICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgICAgZXhpdFN1YkNvbXBGLFxuICAgICAgICAgIHN1YkNvbXBQcm9wcyxcbiAgICAgICAgICBzdGVwLnNhbWVEb21haW5EaW1lbnNpb25cbiAgICAgICAgICAgID8geyBwcmltYXJ5OiBzY2FsZXMuZmluYWwsIHNlY29uZGFyeTogc2NhbGVzLmluaXRpYWwgfVxuICAgICAgICAgICAgOiB7IHByaW1hcnk6IHNjYWxlcy5pbml0aWFsLCBzZWNvbmRhcnk6IHNjYWxlcy5maW5hbCB9LFxuICAgICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgICAgZW5jb2Rlc1tzdWJDb21wTmFtZV0uZmluYWwuZXhpdCxcbiAgICAgICAgICBwcmV2RGF0YVxuICAgICAgICApO1xuICAgICAgICBleGl0U3ViQ29tcEZcbiAgICAgICAgICAuZHVyYXRpb24oXG4gICAgICAgICAgICAoZCwgaSkgPT5cbiAgICAgICAgICAgICAgdGltaW5ncy5maW5kKHQgPT4gdC5pZCA9PT0gam9pbktleShkLCBpLCBcImluaXRpYWxcIikpLmR1cmF0aW9uXG4gICAgICAgICAgKVxuICAgICAgICAgIC5kZWxheShcbiAgICAgICAgICAgIChkLCBpKSA9PiB0aW1pbmdzLmZpbmQodCA9PiB0LmlkID09PSBqb2luS2V5KGQsIGksIFwiaW5pdGlhbFwiKSkuZGVsYXlcbiAgICAgICAgICApXG4gICAgICAgICAgLmVhc2UoZWFzZUZuKVxuICAgICAgICAgIC5yZW1vdmUoKVxuICAgICAgICAgIC5lbmQoKVxuICAgICAgICAgIC50aGVuKGRvbmUoW3N1YkNvbXBOYW1lLCBcImV4aXRcIl0sICgpID0+IHJlc29sdmUoKSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9uZShbc3ViQ29tcE5hbWUsIFwiZXhpdFwiXSwgKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICAgIH1cblxuICAgICAgLy8gaWYgKChpc0FuaW1TZXQudXBkYXRlKSAmJiBzdWJDb21wU2VsZWN0aW9uLmRhdGEoKS5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoc3ViQ29tcFNlbGVjdGlvbi5kYXRhKCkubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCB1cGRhdGVTdWJDb21wRiA9IHN1YkNvbXBTZWxlY3Rpb24udHJhbnNpdGlvbigpO1xuICAgICAgICBsZXQgbW9kaWZpZWRTdWJDb21wUHJvcHMgPSBzdWJDb21wTmFtZSA9PT0gXCJncmFkaWVudFwiXG4gICAgICAgICAgPyBbeyBuYW1lOiBcImdyYWRpZW50XCIsIGV4Y2x1ZGVzOiBbeyB0eXBlOiBcInN0eWxlXCIsIHZhbDogXCJmaWxsXCIgfV0gfV1cbiAgICAgICAgICA6IHN1YkNvbXBQcm9wcztcblxuXG4gICAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgICB1cGRhdGVTdWJDb21wRixcbiAgICAgICAgICBtb2RpZmllZFN1YkNvbXBQcm9wcyxcbiAgICAgICAgICBzY2FsZXMsXG4gICAgICAgICAgc2lnbmFscy5maW5hbCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpbml0aWFsOiBlbmNvZGVzW3N1YkNvbXBOYW1lXS5pbml0aWFsLnVwZGF0ZSxcbiAgICAgICAgICAgIGZpbmFsOiBlbmNvZGVzW3N1YkNvbXBOYW1lXS5maW5hbC51cGRhdGVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHByZXZEYXRhXG4gICAgICAgICk7XG4gICAgICAgIGlmIChzdWJDb21wTmFtZSA9PT0gXCJncmFkaWVudFwiKSB7XG4gICAgICAgICAgdXBkYXRlR3JhZGllbnRGaWxsKHN1YkNvbXBTZWxlY3Rpb24sIHN0ZXApO1xuICAgICAgICB9XG5cblxuXG4gICAgICAgIHVwZGF0ZVN1YkNvbXBGXG4gICAgICAgICAgLmR1cmF0aW9uKFxuICAgICAgICAgICAgKGQsIGkpID0+IHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSkpLmR1cmF0aW9uXG4gICAgICAgICAgKVxuICAgICAgICAgIC5kZWxheSgoZCwgaSkgPT4gdGltaW5ncy5maW5kKHQgPT4gdC5pZCA9PT0gam9pbktleShkLCBpKSkuZGVsYXkpXG4gICAgICAgICAgLmVhc2UoZWFzZUZuKVxuICAgICAgICAgIC5lbmQoKVxuICAgICAgICAgIC50aGVuKGRvbmUoW3N1YkNvbXBOYW1lLCBcInVwZGF0ZVwiXSwgKCkgPT4gcmVzb2x2ZSgpKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkb25lKFtzdWJDb21wTmFtZSwgXCJ1cGRhdGVcIl0sICgpID0+IHJlc29sdmUoKSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUdyYWRpZW50RmlsbChncmFkQ29tcFNlbGVjdGlvbiwgc3RlcCkge1xuICBjb25zdCB1cmwgPSBncmFkQ29tcFNlbGVjdGlvbi5ub2RlKCkuc3R5bGUuZmlsbC5yZXBsYWNlKC9edXJsXFwoWydcIl0vLCBcIlwiKS5yZXBsYWNlKC9bJ1wiXVxcKSQvLCBcIlwiKTtcbiAgY29uc3QgdmdEYXR1bSA9IGdyYWRDb21wU2VsZWN0aW9uLmRhdGEoKVswXTtcbiAgY29uc3QgZ3JhZGllbnRJZCA9IHVybC5zcGxpdChcIiNcIikucG9wKCk7XG4gIGNvbnN0IGdyYWRpZW50ID0gZDMuc2VsZWN0KGAjJHtncmFkaWVudElkfWApO1xuICBncmFkaWVudC5zZWxlY3RBbGwoXCJzdG9wXCIpXG4gICAgLmRhdGEodmdEYXR1bS5maWxsLnN0b3BzLCBkID0+IChkIHx8IHt9KS5vZmZzZXQpXG4gICAgLnRyYW5zaXRpb24oKVxuICAgIC5hdHRyKFwic3RvcC1jb2xvclwiLCBkPT4gZC5jb2xvcilcbiAgICAuZHVyYXRpb24oc3RlcC5kdXJhdGlvbilcbiAgICAuZGVsYXkoc3RlcC5kZWxheSk7XG4gIGdyYWRpZW50LnRyYW5zaXRpb24oKVxuICAgIC5hdHRyKFwieDFcIiwgdmdEYXR1bS5maWxsLngxKVxuICAgIC5hdHRyKFwieDJcIiwgdmdEYXR1bS5maWxsLngyKVxuICAgIC5hdHRyKFwieTFcIiwgdmdEYXR1bS5maWxsLnkxKVxuICAgIC5hdHRyKFwieTJcIiwgdmdEYXR1bS5maWxsLnkyKVxuICAgIC5kdXJhdGlvbihzdGVwLmR1cmF0aW9uKVxuICAgIC5kZWxheShzdGVwLmRlbGF5KTtcblxufVxuZnVuY3Rpb24gYWRkTGVnZW5kKGQzU2VsZWN0aW9uLCBuZXdMZWdlbmRTY2VuZSkge1xuICBjb25zdCBjb21wTmFtZSA9IG5ld0xlZ2VuZFNjZW5lLm5hbWU7XG4gIGNvbnN0IGVsZW0gPSBzdmdSZW5kZXIobmV3TGVnZW5kU2NlbmUpLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXG4gICAgXCJyb2xlLWxlZ2VuZFwiXG4gIClbMF07XG4gIGQzU2VsZWN0aW9uLm5vZGUoKS5hcHBlbmRDaGlsZChlbGVtKTtcbiAgY29uc3QgeyBkYXR1bSB9ID0gbmV3TGVnZW5kU2NlbmUuaXRlbXNbMF07XG4gIC8vIGFmdGVyIGFkZGluZyB0aGUgcmVuZGVyZWQgcmVzdWx0LCBkZWxldGUgdGhlIGl0ZW1zIHRvIHJlLWVuY29kZSBhY2NvcmRpbmcgdG8gYGVuY29kZXNgLlxuXG4gIGlmIChkYXR1bS50aXRsZSkge1xuICAgIGQzU2VsZWN0aW9uLnNlbGVjdChgLiR7Y29tcE5hbWV9IC5yb2xlLWxlZ2VuZC10aXRsZSB0ZXh0YCkucmVtb3ZlKCk7XG4gIH1cbiAgaWYgKGRhdHVtLnR5cGUgPT09IFwic3ltYm9sXCIpIHtcbiAgICBkM1NlbGVjdGlvblxuICAgICAgLnNlbGVjdEFsbChgLiR7Y29tcE5hbWV9IC5yb2xlLWxlZ2VuZC1lbnRyeSAucm9sZS1zY29wZSA+IGdgKVxuICAgICAgLnJlbW92ZSgpO1xuICB9IGVsc2Uge1xuICAgIGQzU2VsZWN0aW9uXG4gICAgICAuc2VsZWN0QWxsKGAuJHtjb21wTmFtZX0gLnJvbGUtbGVnZW5kLWVudHJ5IC5yb2xlLWxlZ2VuZC1sYWJlbCA+IHRleHRgKVxuICAgICAgLnJlbW92ZSgpO1xuICAgIGQzU2VsZWN0aW9uXG4gICAgICAuc2VsZWN0QWxsKGAuJHtjb21wTmFtZX0gLnJvbGUtbGVnZW5kLWVudHJ5IC5yb2xlLWxlZ2VuZC1ncmFkaWVudCA+IHBhdGhgKVxuICAgICAgLnJlbW92ZSgpO1xuICAgIGQzU2VsZWN0aW9uXG4gICAgICAuc2VsZWN0QWxsKGAuJHtjb21wTmFtZX0gLnJvbGUtbGVnZW5kLWVudHJ5IC5yb2xlLWxlZ2VuZC1iYW5kID4gcGF0aGApXG4gICAgICAucmVtb3ZlKCk7XG4gIH1cblxuICByZXR1cm4gZDNTZWxlY3Rpb247XG59XG5cbmV4cG9ydCB7IGxlZ2VuZEludGVycG9sYXRlIH07XG4iLCJpbXBvcnQgKiBhcyBkMyBmcm9tIFwiZDNcIjtcbmltcG9ydCB7IHRyYW5zZm9ybUl0ZW0gfSBmcm9tIFwiLi92ZWdhLXJlbmRlci11dGlsXCI7XG5pbXBvcnQgeyBnZXRFYXNlRm4gfSBmcm9tIFwiLi91dGlsLmpzXCI7XG5pbXBvcnQgeyBmZXRjaEF0dHJpYnV0ZXMgfSBmcm9tIFwiLi9hdHRyaWJ1dGVGZXRjaGVyXCI7XG5cbmZ1bmN0aW9uIHZpZXdJbnRlcnBvbGF0ZShyYXdJbmZvLCBzdGVwLCB0YXJnZXRFbG0pIHtcbiAgY29uc3QgYW5pbVZpcyA9IHRhcmdldEVsbTtcblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBlYXNlRm4gPSBnZXRFYXNlRm4oc3RlcC50aW1pbmcuZWFzZSk7XG5cbiAgICBpZiAoc3RlcC5jaGFuZ2Uuc2lnbmFsID09PSBmYWxzZSkge1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIGNvbnN0IHZpZXcgPSBkMy5zZWxlY3QoYCR7YW5pbVZpc30gc3ZnYCk7XG4gICAgY29uc3Qgc3ZnRW5jb2RlID0gc3RlcC5lbmNvZGVzLmZpbmFsLnN2ZztcbiAgICAvLyB1cGRhdGUgc3ZnXG4gICAgLy8gV2hlbiBqdXN0IGFwcGx5aW5nIGF0dHIoXCJ3aWR0aFwiLCAuLi4pLCB0aGUgc2l6ZSBvZiB0aGUgY2hhcnQgaml0dGVycy5cbiAgICB2aWV3XG4gICAgICAudHJhbnNpdGlvbigpXG4gICAgICAudHdlZW4oXCJyZXNpemVcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgIGNvbnN0IHcgPSBkMy5pbnRlcnBvbGF0ZShcbiAgICAgICAgICB0aGlzLmdldEF0dHJpYnV0ZShcIndpZHRoXCIpLFxuICAgICAgICAgIHN2Z0VuY29kZS53aWR0aC52YWx1ZVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBoID0gZDMuaW50ZXJwb2xhdGUoXG4gICAgICAgICAgdGhpcy5nZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiksXG4gICAgICAgICAgc3ZnRW5jb2RlLmhlaWdodC52YWx1ZVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgICAgIGNvbnN0IF93ID0gTWF0aC5yb3VuZCh3KHQpICogMSkgLyAxO1xuICAgICAgICAgIGNvbnN0IF9oID0gTWF0aC5yb3VuZChoKHQpICogMSkgLyAxO1xuICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgX3cpO1xuICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIF9oKTtcbiAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZShcInZpZXdCb3hcIiwgYDAgMCAke193fSAke19ofWApO1xuICAgICAgICB9O1xuICAgICAgfSlcbiAgICAgIC5kdXJhdGlvbihzdGVwLmR1cmF0aW9uKVxuICAgICAgLmRlbGF5KHN0ZXAuZGVsYXkpXG4gICAgICAuZWFzZShlYXNlRm4pXG4gICAgICAuZW5kKClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSk7XG5cbiAgICAvLyB1cGRhdGUgc3ZnID4gZ1xuICAgIHZpZXdcbiAgICAgIC5zZWxlY3QoXCJnXCIpXG4gICAgICAudHJhbnNpdGlvbigpXG4gICAgICAuYXR0cihcbiAgICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgdHJhbnNmb3JtSXRlbSh7IHg6IHN2Z0VuY29kZS54LnZhbHVlLCB5OiBzdmdFbmNvZGUueS52YWx1ZSB9KVxuICAgICAgKVxuICAgICAgLmR1cmF0aW9uKHN0ZXAuZHVyYXRpb24pXG4gICAgICAuZGVsYXkoc3RlcC5kZWxheSlcbiAgICAgIC5lYXNlKGVhc2VGbik7XG5cbiAgICAvLyB1cGRhdGUgYmFja2dyb3VuZFxuICAgIGxldCByb290ID0gdmlldy5zZWxlY3QoXCIucm9vdCBnID4gLmJhY2tncm91bmRcIik7XG4gICAgY29uc3Qgcm9vdEVuY29kZSA9IHN0ZXAuZW5jb2Rlcy5maW5hbC5yb290O1xuICAgIGNvbnN0IGZEYXR1bSA9IE9iamVjdC5rZXlzKHJvb3RFbmNvZGUpLnJlZHVjZSgoZkRhdHVtLCBrZXkpID0+IHtcbiAgICAgIGZEYXR1bVtrZXldID0gcm9vdEVuY29kZVtrZXldLnZhbHVlO1xuICAgICAgcmV0dXJuIGZEYXR1bTtcbiAgICB9LCB7fSk7XG4gICAgcm9vdCA9IHJvb3QuZGF0YShbZkRhdHVtXSkudHJhbnNpdGlvbigpO1xuICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgIHJvb3QsXG4gICAgICBbXCJiYWNrZ3JvdW5kXCIsIFwiZmlsbFwiLCBcInN0cm9rZVwiXSxcbiAgICAgIHt9LFxuICAgICAgc3RlcC5zaWduYWxzLmZpbmFsLFxuICAgICAgcm9vdEVuY29kZVxuICAgICk7XG5cbiAgICByb290XG4gICAgICAuZHVyYXRpb24oc3RlcC5kdXJhdGlvbilcbiAgICAgIC5kZWxheShzdGVwLmRlbGF5KVxuICAgICAgLmVhc2UoZWFzZUZuKTtcblxuICAgIC8vIHVwZGF0ZSBmcmFtZVxuICB9KTtcbn1cblxuZXhwb3J0IHsgdmlld0ludGVycG9sYXRlIH07XG4iLCJpbXBvcnQgeyBtYXJrSW50ZXJwb2xhdGUgfSBmcm9tIFwiLi9tYXJrL21hcmtcIjtcbmltcG9ydCB7IGFyZWFMaW5lSW50ZXJwb2xhdGUgfSBmcm9tIFwiLi9tYXJrL2FyZWFMaW5lXCI7XG5pbXBvcnQgeyBheGlzSW50ZXJwb2xhdGUgfSBmcm9tIFwiLi9heGlzXCI7XG5pbXBvcnQgeyBsZWdlbmRJbnRlcnBvbGF0ZSB9IGZyb20gXCIuL2xlZ2VuZFwiO1xuaW1wb3J0IHsgdmlld0ludGVycG9sYXRlIH0gZnJvbSBcIi4vdmlld1wiO1xuaW1wb3J0IHsgaXNMaW5lYXJNYXJrdHlwZX0gZnJvbSBcIi4vdXRpbFwiO1xuXG5jb25zdCBMSUJSQVJZID0ge1xuICBsZWdlbmQ6IGxlZ2VuZEludGVycG9sYXRlLFxuICBheGlzOiBheGlzSW50ZXJwb2xhdGUsXG4gIG1hcms6IHtcbiAgICBpbnRlcnBvbGF0ZToge1xuICAgICAgb3RoZXJzOiBtYXJrSW50ZXJwb2xhdGUsXG4gICAgICBhcmVhTGluZTogYXJlYUxpbmVJbnRlcnBvbGF0ZVxuICAgIH0sXG4gICAgbWFya3R5cGVDaGFuZ2VcbiAgfSxcbiAgdmlldzogdmlld0ludGVycG9sYXRlLFxuICBwYXVzZTogc3RlcCA9PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9LCBzdGVwLmR1cmF0aW9uICsgc3RlcC5kZWxheSk7XG4gICAgfSk7XG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzdGVwKSB7XG4gIGxldCB0ZW1wbGF0ZTtcbiAgY29uc3QgeyBtYXJrdHlwZXMgfSA9IHN0ZXA7XG4gIGlmIChzdGVwLmNvbXBUeXBlID09PSBcIm1hcmtcIikge1xuICAgIGlmIChcbiAgICAgIG1hcmt0eXBlcy5maW5hbCAmJlxuICAgICAgbWFya3R5cGVzLmluaXRpYWwgJiZcbiAgICAgIG1hcmt0eXBlcy5pbml0aWFsICE9PSBzdGVwLm1hcmt0eXBlcy5maW5hbFxuICAgICkge1xuICAgICAgdGVtcGxhdGUgPSBMSUJSQVJZLm1hcmsubWFya3R5cGVDaGFuZ2U7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGlzTGluZWFyTWFya3R5cGUobWFya3R5cGVzLmluaXRpYWwpIHx8IGlzTGluZWFyTWFya3R5cGUobWFya3R5cGVzLmZpbmFsKVxuICAgICkge1xuICAgICAgdGVtcGxhdGUgPSBMSUJSQVJZLm1hcmsuaW50ZXJwb2xhdGUuYXJlYUxpbmU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRlbXBsYXRlID0gTElCUkFSWS5tYXJrLmludGVycG9sYXRlLm90aGVycztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGVtcGxhdGUgPSBMSUJSQVJZW3N0ZXAuY29tcFR5cGVdO1xuICB9XG5cbiAgcmV0dXJuIHRlbXBsYXRlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBtYXJrdHlwZUNoYW5nZShyYXdJbmZvLCBzdGVwLCB0YXJnZXRFbG0pIHtcbiAgY29uc3QgbVR5cGVJID0gc3RlcC5tYXJrdHlwZXMuaW5pdGlhbDtcbiAgY29uc3QgbVR5cGVGID0gc3RlcC5tYXJrdHlwZXMuZmluYWw7XG4gIGlmICggaXNMaW5lYXJNYXJrdHlwZShtVHlwZUYpICYmIGlzTGluZWFyTWFya3R5cGUobVR5cGVJKSkge1xuICAgIHJldHVybiBMSUJSQVJZLm1hcmsuaW50ZXJwb2xhdGUuYXJlYUxpbmUocmF3SW5mbywgc3RlcCwgdGFyZ2V0RWxtKTtcbiAgfVxuICBpZiAoXG4gICAgKCBpc0xpbmVhck1hcmt0eXBlKG1UeXBlSSkgJiYgW1wicnVsZVwiLCBcInJlY3RcIiwgXCJzeW1ib2xcIiwgXCJ0ZXh0XCJdLmluZGV4T2YobVR5cGVGKSA+PSAwKSB8fFxuICAgICggaXNMaW5lYXJNYXJrdHlwZShtVHlwZUYpICYmIFtcInJ1bGVcIiwgXCJyZWN0XCIsIFwic3ltYm9sXCIsIFwidGV4dFwiXS5pbmRleE9mKG1UeXBlSSkgPj0gMClcbiAgKSB7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFtcbiAgICAgIExJQlJBUlkubWFyay5pbnRlcnBvbGF0ZS5vdGhlcnMocmF3SW5mbywgc3RlcCwgdGFyZ2V0RWxtKSxcbiAgICAgIExJQlJBUlkubWFyay5pbnRlcnBvbGF0ZS5hcmVhTGluZShyYXdJbmZvLCBzdGVwLCB0YXJnZXRFbG0pXG4gICAgXSk7XG4gIH1cbiAgcmV0dXJuIExJQlJBUlkubWFyay5pbnRlcnBvbGF0ZS5vdGhlcnMocmF3SW5mbywgc3RlcCwgdGFyZ2V0RWxtKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0ZXN0SW50ZXJwb2xhdG9yKHN0ZXAsIHN0YXRlKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICBjb25zdCBuZXh0U3RhdGUgPSBgJHtzdGF0ZX0gJHtzdGVwLmNvbXBOYW1lfWA7XG4gICAgICByZXNvbHZlKG5leHRTdGF0ZSk7XG4gICAgfSwgc3RlcC5kdXJhdGlvbiArIHN0ZXAuZGVsYXkpO1xuICB9KTtcbn1cbiIsImltcG9ydCB7YXR0YWNoU3RhdGVzfSBmcm9tIFwiLi9jaGFuZ2VGZXRjaGVyXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBhdXRvU2NhbGVPcmRlcihleHRlbmRlZFNjaGVkdWxlLCByZXNvbHZlcywgcmF3SW5mbykge1xuICBjb25zdCBtYWluVGltZWxpbmUgPSBleHRlbmRlZFNjaGVkdWxlLmdldFRpbWVsaW5lKFwiOm1haW5cIik7XG5cbiAgbGV0IGV4dGVuZGVkVGltZWxpbmUgPSBhdHRhY2hTdGF0ZXMobWFpblRpbWVsaW5lLCByYXdJbmZvKTtcbiAgY29uc3Qgc2NhbGVPcmRlclJlc292bGVzID0gcmVzb2x2ZXMuZmlsdGVyKHIgPT4gci5hdXRvU2NhbGVPcmRlciksXG4gICAgc2NoZWR1bGVBbHRlcm5hdG9yID0gZXh0ZW5kZWRTY2hlZHVsZS5nZXRUaW1lbGluZUFsdGVybmF0b3Ioc2NhbGVPcmRlclJlc292bGVzKTtcblxuICB3aGlsZSAoIXZhbGlkYXRlU2NhbGVPcmRlcihzY2FsZU9yZGVyUmVzb3ZsZXMsIGV4dGVuZGVkVGltZWxpbmUpKSB7XG4gICAgY29uc3QgYWx0VGltZWxpbmUgPSBzY2hlZHVsZUFsdGVybmF0b3IoKTtcbiAgICBpZiAoIWFsdFRpbWVsaW5lKSB7XG4gICAgICBleHRlbmRlZFRpbWVsaW5lID0gYXR0YWNoU3RhdGVzKG1haW5UaW1lbGluZSwgcmF3SW5mbyk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgZXh0ZW5kZWRUaW1lbGluZSA9IGF0dGFjaFN0YXRlcyhhbHRUaW1lbGluZSwgcmF3SW5mbyk7XG4gIH1cbiAgcmV0dXJuIGV4dGVuZGVkVGltZWxpbmU7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU2NhbGVPcmRlcihyZXNvbHZlcywgdGltZWxpbmUpIHtcbiAgbGV0IHZhbGlkID0gdHJ1ZTtcbiAgcmVzb2x2ZXMuZm9yRWFjaChyZXNvbHZlID0+IHtcbiAgICByZXNvbHZlLmF1dG9TY2FsZU9yZGVyLmZvckVhY2goY29tcE5hbWUgPT4ge1xuICAgICAgY29uc3QgZm91bmRUcmFjayA9IHRpbWVsaW5lLmZpbmQodHJhY2sgPT4gdHJhY2suY29tcE5hbWUgPT09IGNvbXBOYW1lKTtcbiAgICAgIGlmIChmb3VuZFRyYWNrICYmIGZvdW5kVHJhY2suc2NhbGVPcmRlclZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIHZhbGlkO1xufSIsImltcG9ydCAqIGFzIHZlZ2EgZnJvbSBcInZlZ2FcIjtcbmltcG9ydCB7IEFuaW1hdGlvbiB9IGZyb20gXCIuL2FuaW1hdGlvblwiO1xuaW1wb3J0IHsgcGFyc2UgfSBmcm9tIFwiLi9wYXJzZXJcIjtcbmltcG9ydCB7IGF0dGFjaENoYW5nZXMgfSBmcm9tIFwiLi9jaGFuZ2VGZXRjaGVyXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIEFjdHVhdG9yIH0gZnJvbSBcIi4vYWN0dWF0b3JcIjtcbmltcG9ydCB7IGF1dG9TY2FsZU9yZGVyIH0gZnJvbSBcIi4vcmVzb2x2ZXJcIjtcblxuXG5mdW5jdGlvbiBhdHRhY2hBbmltVGVtcGxhdGVzKHNjaGVkdWxlKSB7XG4gIHNjaGVkdWxlLmZvckVhY2godHJhY2sgPT4ge1xuICAgIHRyYWNrLnN0ZXBzID0gdHJhY2suc3RlcHMubWFwKHN0ZXAgPT4ge1xuICAgICAgY29uc3QgdGVtcGxhdGUgPSBBY3R1YXRvcihzdGVwKTtcbiAgICAgIGlmICghdGVtcGxhdGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBgVGhlcmUgaXMgbm8gc3VjaCBhbmltYXRpb24gdGVtcGxhdGUgZm9yICR7c3RlcC5jb21wVHlwZX0uYFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBzdGVwLnRlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgICByZXR1cm4gc3RlcDtcbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBzY2hlZHVsZTtcbn1cblxuY2xhc3MgR2VtaW5pIHtcbiAgc3RhdGljIGFzeW5jIGFuaW1hdGUoc3RhcnRWaXNTcGVjLCBlbmRWaXNTcGVjLCBzcGVjKSB7XG5cbiAgICBjb25zdCBlVmlldyA9IGF3YWl0IG5ldyB2ZWdhLlZpZXcodmVnYS5wYXJzZShlbmRWaXNTcGVjKSwge1xuICAgICAgcmVuZGVyZXI6IFwic3ZnXCJcbiAgICB9KS5ydW5Bc3luYygpO1xuXG4gICAgY29uc3Qgc1ZpZXcgPSBhd2FpdCBuZXcgdmVnYS5WaWV3KHZlZ2EucGFyc2Uoc3RhcnRWaXNTcGVjKSwge1xuICAgICAgcmVuZGVyZXI6IFwic3ZnXCJcbiAgICB9KS5ydW5Bc3luYygpO1xuXG4gICAgY29uc3QgcmF3SW5mbyA9IHtcbiAgICAgIHNWaXM6IHsgdmlldzogc1ZpZXcsIHNwZWM6IHN0YXJ0VmlzU3BlYyB9LFxuICAgICAgZVZpczogeyB2aWV3OiBlVmlldywgc3BlYzogZW5kVmlzU3BlYyB9XG4gICAgfTtcblxuICAgIGNvbnN0IHsgc2NoZWR1bGUsIHJlc29sdmVzIH0gPSBwYXJzZShzcGVjLCByYXdJbmZvKTtcbiAgICBzY2hlZHVsZS50cmFja3MgPSBhdHRhY2hDaGFuZ2VzKHJhd0luZm8sIHNjaGVkdWxlLnRyYWNrcyk7XG4gICAgY29uc3QgZmluYWxUaW1lbGluZSA9IGF1dG9TY2FsZU9yZGVyKHNjaGVkdWxlLCByZXNvbHZlcywgcmF3SW5mbyk7XG5cbiAgICByZXR1cm4gbmV3IEFuaW1hdGlvbihhdHRhY2hBbmltVGVtcGxhdGVzKGZpbmFsVGltZWxpbmUpLCByYXdJbmZvLCBzcGVjKTtcbiAgfVxufVxuXG5leHBvcnQge1xuICBHZW1pbmksXG4gIGF0dGFjaEFuaW1UZW1wbGF0ZXMgYXMgYXR0YWNoQW5pbVRlbXBsYXRlXG59O1xuIiwiaW1wb3J0IHsgY29weSB9IGZyb20gXCIuLi91dGlsL3V0aWxcIjtcblxuY29uc3QgTUlOX1BPU19ERUxUQSA9IDEwO1xuY29uc3QgQ0hBTk5FTF9UT19BVFRSUyA9IFtcbiAgeyBjaGFubmVsOiBcInhcIiwgYXR0cnM6IFtcInhcIiwgXCJ4MlwiLCBcInhjXCIsIFwid2lkdGhcIl0gfSxcbiAgeyBjaGFubmVsOiBcInlcIiwgYXR0cnM6IFtcInlcIiwgXCJ5MlwiLCBcInljXCIsIFwiaGVpZ2h0XCJdIH0sXG4gIHsgY2hhbm5lbDogXCJjb2xvclwiLCBhdHRyczogW1wic3Ryb2tlXCIsIFwiZmlsbFwiXSB9LFxuICB7IGNoYW5uZWw6IFwic2hhcGVcIiwgYXR0cnM6IFtcInNoYXBlXCJdIH0sXG4gIHsgY2hhbm5lbDogXCJzaXplXCIsIGF0dHJzOiBbXCJzaXplXCJdIH0sXG4gIHsgY2hhbm5lbDogXCJvcGFjaXR5XCIsIGF0dHJzOiBbXCJvcGFjaXR5XCJdIH0sXG4gIHsgY2hhbm5lbDogXCJ0ZXh0XCIsIGF0dHJzOiBbXCJ0ZXh0XCJdIH0sXG4gIHsgY2hhbm5lbDogXCJvdGhlcnNcIiwgYXR0cnM6IFtcInRvb2x0aXBcIiwgXCJkZWZpbmVcIiwgXCJzdHJva2VXaWR0aFwiXSB9XG5dO1xuY29uc3QgQ0hBTk5FTFMgPSBbXCJ4XCIsIFwieVwiLCBcImNvbG9yXCIsIFwic2hhcGVcIiwgXCJzaXplXCIsIFwib3BhY2l0eVwiLCBcInRleHRcIl07XG5cbmNvbnN0IENIQU5ORUxfVE9fQVRUUlNfT0JKID0ge1xuICB4OiBbXCJ4XCIsIFwieDJcIiwgXCJ4Y1wiLCBcIndpZHRoXCJdLFxuICB5OiBbXCJ5XCIsIFwieTJcIiwgXCJ5Y1wiLCBcImhlaWdodFwiXSxcbiAgY29sb3I6IFtcInN0cm9rZVwiLCBcImZpbGxcIl0sXG4gIHNoYXBlOiBbXCJzaGFwZVwiXSxcbiAgc2l6ZTogW1wic2l6ZVwiXSxcbiAgb3BhY2l0eTogW1wib3BhY2l0eVwiXSxcbiAgdGV4dDogW1widGV4dFwiXSxcbiAgb3RoZXJzOiBbXCJ0b29sdGlwXCIsIFwiZGVmaW5lXCIsIFwic3Ryb2tlV2lkdGhcIl1cbn07XG5cbmZ1bmN0aW9uIGdldFN1YkVuY29kZUJ5Q2hhbm5lbChlbmNvZGUsIGNoYW5uZWwpIHtcbiAgY29uc3Qgc3ViRW5jb2RlID0ge307XG4gIGlmIChjaGFubmVsID09PSBcIm90aGVyc1wiKSB7XG4gICAgY29uc3Qgb3RoZXJFbmNvZGUgPSBjb3B5KGVuY29kZSk7XG4gICAgQ0hBTk5FTF9UT19BVFRSUy5yZWR1Y2UoKGNoYW5uZWxSZWxhdGVkQXR0cnMsIGNoMkF0dHJzKSA9PiB7XG4gICAgICByZXR1cm4gKGNoYW5uZWxSZWxhdGVkQXR0cnMgPSBjaGFubmVsUmVsYXRlZEF0dHJzLmNvbmNhdChjaDJBdHRycy5hdHRycykpO1xuICAgIH0sIFtdKS5mb3JFYWNoKGF0dHIgPT4ge1xuICAgICAgZGVsZXRlIG90aGVyRW5jb2RlW2F0dHJdO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG90aGVyRW5jb2RlO1xuICB9XG5cbiAgQ0hBTk5FTF9UT19BVFRSU19PQkpbY2hhbm5lbF1cbiAgICAvLyAuZmlsdGVyKGF0dHIgPT4gZW5jb2RlW2F0dHJdKVxuICAgIC5mb3JFYWNoKGF0dHIgPT4ge1xuICAgICAgc3ViRW5jb2RlW2F0dHJdID0gZW5jb2RlW2F0dHJdO1xuICAgIH0pO1xuICByZXR1cm4gc3ViRW5jb2RlO1xufVxuZnVuY3Rpb24gZ2V0Q29yZUF0dHIoc3ViRW5jb2RlLCBjaGFubmVsLCBtYXJrdHlwZSl7XG4gIGlmICghc3ViRW5jb2RlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChjaGFubmVsID09PSBcImNvbG9yXCIpIHtcbiAgICBsZXQgY29yZUF0dHIgPSBbXCJsaW5lXCIsIFwicnVsZVwiLCBcInN5bWJvbFwiXS5pbmRleE9mKG1hcmt0eXBlKSA+PSAwXG4gICAgICA/IHN1YkVuY29kZS5zdHJva2VcbiAgICAgIDogc3ViRW5jb2RlLmZpbGw7XG5cbiAgICBpZiAoXG4gICAgICBjb3JlQXR0ciA9PT0gXCJzeW1ib2xcIiAmJlxuICAgICAgICBzdWJFbmNvZGUuZmlsbCAmJlxuICAgICAgICBzdWJFbmNvZGUuZmlsbC52YWx1ZSAhPT0gXCJ0cmFuc3BhcmVudFwiXG4gICAgKSB7XG4gICAgICBjb3JlQXR0ciA9IHN1YkVuY29kZS5maWxsO1xuICAgIH1cblxuICAgIHJldHVybiBjb3JlQXR0cjtcbiAgfVxuICBpZiAoY2hhbm5lbD09PVwieFwiKSB7XG4gICAgcmV0dXJuIHN1YkVuY29kZS54ICB8fCBzdWJFbmNvZGUueGM7XG4gIH0gZWxzZSBpZiAoY2hhbm5lbD09PVwieVwiKSB7XG4gICAgcmV0dXJuIHN1YkVuY29kZS55ICB8fCBzdWJFbmNvZGUueWM7XG4gIH1cbiAgcmV0dXJuIHN1YkVuY29kZVtjaGFubmVsXTtcbn1cblxuZXhwb3J0IHsgQ0hBTk5FTFMsIENIQU5ORUxfVE9fQVRUUlNfT0JKLCBNSU5fUE9TX0RFTFRBLCBnZXRTdWJFbmNvZGVCeUNoYW5uZWwsIGdldENvcmVBdHRyIH07XG4iLCJpbXBvcnQgeyBnZXRDb21wb25lbnRzLCBnZXRDaGFuZ2VzLCBnZXRWaWV3Q2hhbmdlIH0gZnJvbSBcIi4uL2NoYW5nZUZldGNoZXIvY2hhbmdlXCI7XG5pbXBvcnQgeyBjb3B5LCBkZWVwRXF1YWwsIGlzTnVtYmVyLCBnZXQgfSBmcm9tIFwiLi4vdXRpbC91dGlsXCI7XG5pbXBvcnQgeyBmaW5kQ29tcCB9IGZyb20gXCIuLi9hY3R1YXRvci91dGlsXCI7XG5pbXBvcnQgeyBjb21wdXRlSGFzRmFjZXQsIGlzR3JvdXBpbmdNYXJrdHlwZSB9IGZyb20gXCIuLi9jaGFuZ2VGZXRjaGVyL3N0YXRlL3V0aWxcIjtcbmltcG9ydCB7IENIQU5ORUxTLCBnZXRTdWJFbmNvZGVCeUNoYW5uZWwsIE1JTl9QT1NfREVMVEEsZ2V0Q29yZUF0dHIgfSBmcm9tIFwiLi91dGlsXCI7XG5pbXBvcnQgeyBnZXRNYXJrRGF0YSwgdW5wYWNrRGF0YSB9IGZyb20gXCIuLi91dGlsL3ZnRGF0YUhlbHBlclwiO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3REaWZmcyhyYXdJbmZvLCB1c2VySW5wdXQgPSB7fSkge1xuICAvLyAwKSBjb21wYXJlIHNpZ25hbHNcbiAgY29uc3Qgc2lnbmFsRGlmZnMgPSBkZXRlY3RTaWduYWxEaWZmcyhyYXdJbmZvKTtcblxuICBjb25zdCBtYXRjaGVzID0gZ2V0Q2hhbmdlcyhcbiAgICBnZXRDb21wb25lbnRzKHJhd0luZm8uc1Zpcy5zcGVjKSxcbiAgICBnZXRDb21wb25lbnRzKHJhd0luZm8uZVZpcy5zcGVjKVxuICApO1xuICBjb25zdCBzY2FsZURpZmZzID0gbWF0Y2hlc1xuICAgIC5maWx0ZXIobWF0Y2ggPT4gbWF0Y2guY29tcFR5cGUgPT09IFwic2NhbGVcIilcbiAgICAucmVkdWNlKChzY2FsZURpZmZzLCBtYXRjaCkgPT4ge1xuICAgICAgc2NhbGVEaWZmc1ttYXRjaC5jb21wTmFtZV0gPSBtYXRjaDtcbiAgICAgIHNjYWxlRGlmZnNbbWF0Y2guY29tcE5hbWVdLm1ldGEgPSBkZXRlY3RTY2FsZURpZmZzKG1hdGNoLCByYXdJbmZvLCB1c2VySW5wdXQuc2NhbGVzKTtcblxuICAgICAgcmV0dXJuIHNjYWxlRGlmZnM7XG4gICAgfSwge30pO1xuXG4gIGNvbnN0IGNvbXBEaWZmcyA9IG1hdGNoZXNcbiAgICAuZmlsdGVyKG1hdGNoID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIFtcInJvb3RcIiwgXCJwYXRoZ3JvdXBcIl0uaW5kZXhPZihtYXRjaC5jb21wTmFtZSkgPCAwICYmXG4gICAgICAgIG1hdGNoLmNvbXBUeXBlICE9PSBcInNjYWxlXCJcbiAgICAgICk7XG4gICAgfSkubWFwKG1hdGNoID0+IHtcbiAgICAgIHN3aXRjaCAobWF0Y2guY29tcFR5cGUpIHtcbiAgICAgIGNhc2UgXCJtYXJrXCI6XG4gICAgICAgIG1hdGNoLm1ldGEgPSBkZXRlY3RNYXJrRGlmZnMobWF0Y2gsIHJhd0luZm8sIHNjYWxlRGlmZnMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJheGlzXCI6XG4gICAgICAgIG1hdGNoLm1ldGEgPSBkZXRlY3RBeGlzRGlmZnMobWF0Y2gsIHJhd0luZm8sIHNjYWxlRGlmZnMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJsZWdlbmRcIjpcbiAgICAgICAgbWF0Y2gubWV0YSA9IGRldGVjdExlZ2VuZERpZmZzKG1hdGNoLCByYXdJbmZvLCBzY2FsZURpZmZzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1hdGNoO1xuICAgIH0pO1xuICBjb25zdCB2aWV3RGlmZnMgPSBkZXRlY3RWaWV3RGlmZihyYXdJbmZvKTtcblxuICAvLyAxKSBzaG91bGQgcmV0dXJuIHRoZSBjb21wb25lbnRzXG4gIHJldHVybiB7XG4gICAgY29tcERpZmZzLFxuICAgIHNjYWxlRGlmZnMsXG4gICAgc2lnbmFsRGlmZnMsXG4gICAgdmlld0RpZmZzXG4gIH07XG59XG5mdW5jdGlvbiBhcHBlbmRDb21wU2NhbGVEaWZmKHVzZWRTY2FsZXMsIHNjYWxlRGlmZnMpIHtcbiAgbGV0IGNvbXBTY2FsZURpZmZEZXRhaWxzID0ge307IGxldCBjb21wU2NhbGVEaWZmID0gZmFsc2U7XG5cbiAgdXNlZFNjYWxlcy5mb3JFYWNoKHNjYWxlTmFtZSA9PiB7XG4gICAgY29tcFNjYWxlRGlmZkRldGFpbHNbc2NhbGVOYW1lXSA9IHNjYWxlRGlmZnNbc2NhbGVOYW1lXS5tZXRhO1xuICAgIGNvbXBTY2FsZURpZmYgPSBjb21wU2NhbGVEaWZmIHx8IHNjYWxlRGlmZnNbc2NhbGVOYW1lXS5tZXRhO1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIGNvbXBTY2FsZURpZmYgPyBjb21wU2NhbGVEaWZmRGV0YWlscyA6IGZhbHNlO1xufVxuZnVuY3Rpb24gZGV0ZWN0TWFya0RpZmZzKG1hdGNoLCByYXdJbmZvLCBzY2FsZURpZmZzKSB7XG4gIGxldCBtYXJrRGlmZnMgPSB7IHZpZXc6IHsgZGVsdGFXOiAwLCBkZWx0YUg6IDAgfSB9O1xuICBpZiAoIW1hdGNoLmluaXRpYWwpIHtcbiAgICBtYXJrRGlmZnMuYWRkID0gdHJ1ZTtcbiAgICBtYXJrRGlmZnMudmlldyA9IHsgZGVsdGFXOiBNSU5fUE9TX0RFTFRBLCBkZWx0YUg6IE1JTl9QT1NfREVMVEEgfTtcbiAgfSBlbHNlIGlmICghbWF0Y2guZmluYWwpIHtcbiAgICBtYXJrRGlmZnMucmVtb3ZlID0gdHJ1ZTtcbiAgICBtYXJrRGlmZnMudmlldyA9IHsgZGVsdGFXOiBNSU5fUE9TX0RFTFRBLCBkZWx0YUg6IE1JTl9QT1NfREVMVEEgfTtcbiAgfVxuXG4gIC8vIG1hcmt0eXBlXG4gIG1hcmtEaWZmcy5tYXJrdHlwZSA9ICFtYXRjaC5pbml0aWFsIHx8ICFtYXRjaC5maW5hbCB8fCAobWF0Y2guaW5pdGlhbC50eXBlICE9PSBtYXRjaC5maW5hbC50eXBlKTtcblxuICAvLyBjb21wYXJlIHRoZSBlbmNvZGVzIHBlciBjaGFubmVsXG4gIGNvbnN0IGVuQXR0cnNfaSA9IE9iamVjdC5rZXlzKGdldChtYXRjaCwgXCJpbml0aWFsXCIsIFwiZW5jb2RlXCIsIFwidXBkYXRlXCIpIHx8IHt9KTtcbiAgbGV0IGVuQXR0cnNfZiA9IE9iamVjdC5rZXlzKGdldChtYXRjaCwgXCJmaW5hbFwiLCBcImVuY29kZVwiLCBcInVwZGF0ZVwiKSB8fCB7fSk7XG4gIG1hcmtEaWZmcy51c2VkRW5BdHRycyA9IGVuQXR0cnNfaS5jb25jYXQoZW5BdHRyc19mKS51bmlxdWUoKTtcblxuICBtYXJrRGlmZnMuZW5jb2RlID0gQ0hBTk5FTFMucmVkdWNlKChlbmNvZGVEaWZmcywgY2hhbm5lbCkgPT4ge1xuICAgIGNvbnN0IHN1YkVuY29kZV9pID0gZ2V0U3ViRW5jb2RlQnlDaGFubmVsKFxuICAgICAgZ2V0KG1hdGNoLCBcImluaXRpYWxcIiwgXCJlbmNvZGVcIiwgXCJ1cGRhdGVcIikgfHwge30sXG4gICAgICBjaGFubmVsXG4gICAgKTtcbiAgICBsZXQgc3ViRW5jb2RlX2YgPSBnZXRTdWJFbmNvZGVCeUNoYW5uZWwoXG4gICAgICBnZXQobWF0Y2gsIFwiZmluYWxcIiwgXCJlbmNvZGVcIiwgXCJ1cGRhdGVcIikgfHwge30sXG4gICAgICBjaGFubmVsXG4gICAgKTtcblxuICAgIGVuY29kZURpZmZzW2NoYW5uZWxdID0gIWRlZXBFcXVhbChzdWJFbmNvZGVfaSwgc3ViRW5jb2RlX2YpO1xuXG4gICAgLy8gaWdub3JlYWJsZSBlbmNvZGUgZGlmZnMgKGQgKG9wYWNpdHkpID4gMC41IClcbiAgICBpZiAoXG4gICAgICBjaGFubmVsID09PSBcIm9wYWNpdHlcIiAmJlxuICAgICAgKGdldChzdWJFbmNvZGVfaSwgXCJvcGFjaXR5XCIsIFwidmFsdWVcIikgfHxcbiAgICAgICAgZ2V0KHN1YkVuY29kZV9pLCBcIm9wYWNpdHlcIikgPT09IHVuZGVmaW5lZCkgJiZcbiAgICAgIChnZXQoc3ViRW5jb2RlX2YsIFwib3BhY2l0eVwiLCBcInZhbHVlXCIpIHx8XG4gICAgICAgIGdldChzdWJFbmNvZGVfZiwgXCJvcGFjaXR5XCIpID09PSB1bmRlZmluZWQpXG4gICAgKSB7XG4gICAgICBjb25zdCBvcGFjaXR5VmFsX2kgPSBnZXQoc3ViRW5jb2RlX2ksIFwib3BhY2l0eVwiLCBcInZhbHVlXCIpIHx8IDEuMDtcbiAgICAgIGxldCBvcGFjaXR5VmFsX2YgPSBnZXQoc3ViRW5jb2RlX2YsIFwib3BhY2l0eVwiLCBcInZhbHVlXCIpIHx8IDEuMDtcbiAgICAgIGlmIChNYXRoLmFicyhvcGFjaXR5VmFsX2kgLSBvcGFjaXR5VmFsX2YpIDwgMC41KSB7XG4gICAgICAgIGVuY29kZURpZmZzLm9wYWNpdHkgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvL1xuICAgIGlmIChtYXJrRGlmZnMubWFya3R5cGUgJiYgZW5jb2RlRGlmZnNbY2hhbm5lbF0pIHtcbiAgICAgIGNvbnN0IG1hcmt0eXBlX2kgPSBnZXQobWF0Y2gsIFwiaW5pdGlhbFwiLCBcInR5cGVcIiksXG4gICAgICAgIG1hcmt0eXBlX2YgPSBnZXQobWF0Y2gsIFwiZmluYWxcIiwgXCJ0eXBlXCIpO1xuICAgICAgbGV0IGNvcmVFbkF0dHJfaSA9IGdldENvcmVBdHRyKHN1YkVuY29kZV9pLCBjaGFubmVsLCBtYXJrdHlwZV9pKTtcbiAgICAgIGxldCBjb3JlRW5BdHRyX2YgPSBnZXRDb3JlQXR0cihzdWJFbmNvZGVfZiwgY2hhbm5lbCwgbWFya3R5cGVfZik7XG5cbiAgICAgIGlmIChkZWVwRXF1YWwoY29yZUVuQXR0cl9pLCBjb3JlRW5BdHRyX2YpKSB7XG4gICAgICAgIGVuY29kZURpZmZzW2NoYW5uZWxdID0gXCJieU1hcmt0eXBlQ2hhbmdlXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy9cbiAgICByZXR1cm4gZW5jb2RlRGlmZnM7XG4gIH0sIHt9KTtcblxuXG5cbiAgLy8gZmluZCB0aGUgdXNlZCBzY2FsZXNcbiAgbGV0IHVzZWRTY2FsZXMgPSBbXTtcbiAgW1widXBkYXRlXCJdLmZvckVhY2goc2V0ID0+IHtcbiAgICBjb25zdCBlbmNvZGVfaSA9IG1hdGNoLmluaXRpYWwgJiYgbWF0Y2guaW5pdGlhbC5lbmNvZGVbc2V0XTtcbiAgICBjb25zdCBlbmNvZGVfZiA9IG1hdGNoLmZpbmFsICYmIG1hdGNoLmZpbmFsLmVuY29kZVtzZXRdO1xuXG4gICAgW2VuY29kZV9pLCBlbmNvZGVfZl0uZm9yRWFjaChlbmNvZGUgPT4ge1xuICAgICAgT2JqZWN0LmtleXMoZW5jb2RlIHx8IHt9KS5tYXAoYXR0ciA9PiB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGVuY29kZVthdHRyXSkpIHtcbiAgICAgICAgICB1c2VkU2NhbGVzID0gdXNlZFNjYWxlcy5jb25jYXQoXG4gICAgICAgICAgICBlbmNvZGVbYXR0cl0uZmlsdGVyKGNoID0+IGNoLnNjYWxlKS5tYXAoY2ggPT4gY2guc2NhbGUpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChlbmNvZGVbYXR0cl0uc2NhbGUpIHtcbiAgICAgICAgICB1c2VkU2NhbGVzLnB1c2goZW5jb2RlW2F0dHJdLnNjYWxlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuICBtYXJrRGlmZnMudXNlZFNjYWxlcyA9IHVzZWRTY2FsZXMudW5pcXVlKCk7XG4gIG1hcmtEaWZmcy5zY2FsZSA9IGFwcGVuZENvbXBTY2FsZURpZmYobWFya0RpZmZzLnVzZWRTY2FsZXMsIHNjYWxlRGlmZnMpO1xuICBtYXJrRGlmZnMuc2NOYW1lcyA9IE9iamVjdC5rZXlzKG1hcmtEaWZmcy5zY2FsZSk7XG4gIG1hcmtEaWZmcy52aWV3ID0ge1xuICAgIGRlbHRhVzogbWFya0RpZmZzLnNjYWxlLnhcbiAgICAgID8gbWFya0RpZmZzLnNjYWxlLngucmFuZ2VEZWx0YVxuICAgICAgOiBtYXJrRGlmZnMudmlldy5kZWx0YVcsXG4gICAgZGVsdGFIOiBtYXJrRGlmZnMuc2NhbGUueVxuICAgICAgPyBtYXJrRGlmZnMuc2NhbGUueS5yYW5nZURlbHRhXG4gICAgICA6IG1hcmtEaWZmcy52aWV3LmRlbHRhSFxuICB9O1xuICBpZiAobWFya0RpZmZzLnNjYWxlLnkgJiYgbWFya0RpZmZzLnNjYWxlLnkuYWRkKSB7XG4gICAgbWFya0RpZmZzLnZpZXcuZGVsdGFIID0gTUlOX1BPU19ERUxUQTtcbiAgfSBlbHNlIGlmIChtYXJrRGlmZnMuc2NhbGUueSAmJiBtYXJrRGlmZnMuc2NhbGUueS5yZW1vdmUpIHtcbiAgICBtYXJrRGlmZnMudmlldy5kZWx0YUggPSAtTUlOX1BPU19ERUxUQTtcbiAgfVxuXG4gIGlmIChtYXJrRGlmZnMuc2NhbGUueCAmJiBtYXJrRGlmZnMuc2NhbGUueC5hZGQpIHtcbiAgICBtYXJrRGlmZnMudmlldy5kZWx0YVcgPSBNSU5fUE9TX0RFTFRBO1xuICB9IGVsc2UgaWYgKG1hcmtEaWZmcy5zY2FsZS54ICYmIG1hcmtEaWZmcy5zY2FsZS54LnJlbW92ZSkge1xuICAgIG1hcmtEaWZmcy52aWV3LmRlbHRhVyA9IC1NSU5fUE9TX0RFTFRBO1xuICB9XG5cbiAgLy8gR2V0IGRhdGEgYW5kIGNvbXBhcmVcbiAgLy8gZ2V0IGRhdGFDb21wIG5hbWVcbiAgLy8gbGV0IGlEYXRhQ29tcE5hbWUgPSBjb21wdXRlSGFzRmFjZXQobWF0Y2guaW5pdGlhbCkgPyBtYXRjaC5pbml0aWFsLnBhcmVudC5mcm9tLmZhY2V0LmRhdGEgOiBtYXRjaC5pbml0aWFsLmZyb20uZGF0YSxcbiAgLy8gICBmRGF0YUNvbXBOYW1lID0gY29tcHV0ZUhhc0ZhY2V0KG1hdGNoLmZpbmFsKSA/IG1hdGNoLmZpbmFsLnBhcmVudC5mcm9tLmZhY2V0LmRhdGEgOiBtYXRjaC5maW5hbC5mcm9tLmRhdGE7XG5cbiAgLy8gbWFya0RpZmZzLmRhdGEgPSBpc0RpZmZEYXRhQ29tcChcbiAgLy8gICBmaW5kRGF0YUNvbXAocmF3SW5mby5zVmlzLnNwZWMsIGlEYXRhQ29tcE5hbWUpLFxuICAvLyAgIGZpbmREYXRhQ29tcChyYXdJbmZvLmVWaXMuc3BlYywgZkRhdGFDb21wTmFtZSksXG4gIC8vICAgcmF3SW5mb1xuICAvLyApO1xuICAvLyBpZiAobWFya0RpZmZzLmRhdGEgfHwgdHJ1ZSkge1xuICBsZXQgaURhdGEgPSBtYXRjaC5pbml0aWFsXG4gICAgPyBnZXRNYXJrRGF0YShyYXdJbmZvLnNWaXMudmlldywgbWF0Y2guaW5pdGlhbCwgbWF0Y2guY29tcE5hbWUpXG4gICAgOiBbXTtcbiAgbGV0IGZEYXRhID0gbWF0Y2guZmluYWxcbiAgICA/IGdldE1hcmtEYXRhKHJhd0luZm8uZVZpcy52aWV3LCBtYXRjaC5maW5hbCwgbWF0Y2guY29tcE5hbWUpXG4gICAgOiBbXTtcblxuICBpZiAobWF0Y2guaW5pdGlhbCAmJiAoY29tcHV0ZUhhc0ZhY2V0KG1hdGNoLmluaXRpYWwpIHx8IGlzR3JvdXBpbmdNYXJrdHlwZShtYXRjaC5pbml0aWFsLnR5cGUpKSkge1xuICAgIGlEYXRhID0gdW5wYWNrRGF0YShpRGF0YSk7XG4gIH1cbiAgaWYgKG1hdGNoLmZpbmFsICYmIChjb21wdXRlSGFzRmFjZXQobWF0Y2guZmluYWwpIHx8IGlzR3JvdXBpbmdNYXJrdHlwZShtYXRjaC5maW5hbC50eXBlKSkpIHtcbiAgICBmRGF0YSA9IHVucGFja0RhdGEoZkRhdGEpO1xuICB9XG4gIGlmICghbWFya0RpZmZzLmRhdGEpIHtcblxuICAgIGlEYXRhID0gY29tcHV0ZUhhc0ZhY2V0KG1hdGNoLmluaXRpYWwpID8gdW5wYWNrRGF0YShpRGF0YSkgOiBpRGF0YTtcbiAgICBmRGF0YSA9IGNvbXB1dGVIYXNGYWNldChtYXRjaC5maW5hbCkgPyB1bnBhY2tEYXRhKGZEYXRhKSA6IGZEYXRhO1xuXG4gICAgbWFya0RpZmZzLmRhdGEgPSBpc0RpZmZEYXRhKGlEYXRhLCBmRGF0YSk7XG4gIH1cblxuICAvLyB9XG5cbiAgcmV0dXJuIG1hcmtEaWZmcztcbn1cblxuZnVuY3Rpb24gZGV0ZWN0U2NhbGVEaWZmcyhtYXRjaCwgcmF3SW5mbywgdXNlcklucHV0U2NhbGVzID0ge30pIHtcbiAgaWYgKCFtYXRjaC5pbml0aWFsKSB7XG4gICAgcmV0dXJuIHthZGQ6IHRydWV9O1xuICB9IGlmICghbWF0Y2guZmluYWwpIHtcbiAgICByZXR1cm4ge3JlbW92ZTogdHJ1ZX07XG4gIH1cbiAgbGV0IHNjYWxlRGlmZiA9IGRlZXBFcXVhbChtYXRjaC5pbml0aWFsLCBtYXRjaC5maW5hbCkgPyBmYWxzZSA6IHt9O1xuXG4gIGxldCByYW5nZVZhbHNfaSA9IHJhd0luZm8uc1Zpcy52aWV3LnNjYWxlKG1hdGNoLmluaXRpYWwubmFtZSkucmFuZ2UoKSxcbiAgICByYW5nZVZhbHNfZiA9IHJhd0luZm8uZVZpcy52aWV3LnNjYWxlKG1hdGNoLmZpbmFsLm5hbWUpLnJhbmdlKCk7XG4gIGxldCByYW5nZURlbHRhID0gMDtcbiAgaWYgKCFkZWVwRXF1YWwocmFuZ2VWYWxzX2ksIHJhbmdlVmFsc19mKSl7XG4gICAgaWYgKChyYW5nZVZhbHNfaS5sZW5ndGggPT09IDIgJiYgaXNOdW1iZXIocmFuZ2VWYWxzX2lbMF0pICYmIGlzTnVtYmVyKHJhbmdlVmFsc19pWzFdKSlcbiAgICAgICYmIChyYW5nZVZhbHNfZi5sZW5ndGggPT09IDIgJiYgaXNOdW1iZXIocmFuZ2VWYWxzX2ZbMF0pICYmIGlzTnVtYmVyKHJhbmdlVmFsc19mWzFdKSkpIHtcbiAgICAgIHJhbmdlRGVsdGEgPSBNYXRoLmFicyhyYW5nZVZhbHNfZlswXS1yYW5nZVZhbHNfZlsxXSkgLSBNYXRoLmFicyhyYW5nZVZhbHNfaVswXS1yYW5nZVZhbHNfaVsxXSk7XG4gICAgfVxuICB9XG5cbiAgbGV0IGRvbWFpblZhbHNfaSA9IHJhd0luZm8uc1Zpcy52aWV3LnNjYWxlKG1hdGNoLmluaXRpYWwubmFtZSkuZG9tYWluKCksXG4gICAgZG9tYWluVmFsc19mID0gcmF3SW5mby5lVmlzLnZpZXcuc2NhbGUobWF0Y2guZmluYWwubmFtZSkuZG9tYWluKCk7XG5cbiAgaWYgKCFzY2FsZURpZmYgJiYgZGVlcEVxdWFsKGRvbWFpblZhbHNfaSwgZG9tYWluVmFsc19mKSAmJiAocmFuZ2VEZWx0YSA9PT0gMCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc2NhbGVEaWZmID0ge1xuICAgIHJhbmdlRGVsdGE6IHJhbmdlRGVsdGEsXG4gICAgZG9tYWluVmFsdWVEaWZmOiAhZGVlcEVxdWFsKGRvbWFpblZhbHNfaSwgZG9tYWluVmFsc19mKVxuICB9O1xuXG4gIGxldCB1c2VySW5wdXREb21haW5EaW1lbnNpb25EaWZmID0gZ2V0KHVzZXJJbnB1dFNjYWxlc1ttYXRjaC5pbml0aWFsLm5hbWVdLCBcImRvbWFpbkRpbWVuc2lvblwiKTtcbiAgc2NhbGVEaWZmLmRvbWFpblNwYWNlRGlmZiA9IHVzZXJJbnB1dERvbWFpbkRpbWVuc2lvbkRpZmYgPT09IFwiZGlmZlwiID8gdHJ1ZSA6IChcbiAgICB1c2VySW5wdXREb21haW5EaW1lbnNpb25EaWZmID09PSBcInNhbWVcIiA/IGZhbHNlIDpcbiAgICAgICFkZWVwRXF1YWwobWF0Y2guaW5pdGlhbC5kb21haW4sIG1hdGNoLmZpbmFsLmRvbWFpbilcbiAgKTtcblxuXG4gIGlmICgoW1wiYmFuZFwiLCBcInBvaW50XCIsIFwib3JkaW5hbFwiXS5pbmRleE9mKG1hdGNoLmluaXRpYWwudHlwZSkgPj0gMCkgJiZcbiAgICAoW1wiYmFuZFwiLCBcInBvaW50XCIsIFwib3JkaW5hbFwiXS5pbmRleE9mKG1hdGNoLmZpbmFsLnR5cGUpID49IDApKSB7XG4gICAgc2NhbGVEaWZmLnN0YXlEaXNjcmV0ZSA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIHNjYWxlRGlmZjtcbn1cblxuZnVuY3Rpb24gZGV0ZWN0TGVnZW5kRGlmZnMobWF0Y2gsIHJhd0luZm8sIHNjYWxlRGlmZnMpIHtcbiAgY29uc3QgbGVnZW5kRGlmZnMgPSB7XG4gICAgdXNlZFNjYWxlczogW10sXG4gICAgdmlldzogeyBkZWx0YVc6IDAsIGRlbHRhSDogMCwgeDogMCwgeTogMCB9XG4gIH07XG4gIGlmICghbWF0Y2guaW5pdGlhbCkge1xuICAgIGxlZ2VuZERpZmZzLmFkZCA9IHRydWU7XG4gICAgbGVnZW5kRGlmZnMudmlldyA9IHtcbiAgICAgIGRlbHRhVzogTUlOX1BPU19ERUxUQSxcbiAgICAgIGRlbHRhSDogTUlOX1BPU19ERUxUQSxcbiAgICAgIHg6IE1JTl9QT1NfREVMVEEsXG4gICAgICB5OiBNSU5fUE9TX0RFTFRBXG4gICAgfTtcbiAgfSBlbHNlIGlmICghbWF0Y2guZmluYWwpIHtcbiAgICBsZWdlbmREaWZmcy5yZW1vdmUgPSB0cnVlO1xuICAgIGxlZ2VuZERpZmZzLnZpZXcgPSB7XG4gICAgICBkZWx0YVc6IC1NSU5fUE9TX0RFTFRBLFxuICAgICAgZGVsdGFIOiAtTUlOX1BPU19ERUxUQSxcbiAgICAgIHg6IC1NSU5fUE9TX0RFTFRBLFxuICAgICAgeTogLU1JTl9QT1NfREVMVEFcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgbGVnZW5kX2kgPSBjb3B5KG1hdGNoLmluaXRpYWwgfHwge30pOyBsZXQgbGVnZW5kX2YgPSBjb3B5KG1hdGNoLmZpbmFsIHx8IHt9KTtcblxuICAvLyAxKSBzY2FsZSBkaWZmXG4gIFtcbiAgICBcImZpbGxcIixcbiAgICBcIm9wYWNpdHlcIixcbiAgICBcInNoYXBlXCIsXG4gICAgXCJzaXplXCIsXG4gICAgXCJzdHJva2VcIixcbiAgICBcInN0cm9rZURhc2hcIixcbiAgICBcInN0cm9rZVdpZHRoXCJcbiAgXS5mb3JFYWNoKHNjYWxlID0+IHtcbiAgICBpZiAobWF0Y2guaW5pdGlhbCAmJiBtYXRjaC5pbml0aWFsW3NjYWxlXSkge1xuICAgICAgbGVnZW5kRGlmZnMudXNlZFNjYWxlcy5wdXNoKG1hdGNoLmluaXRpYWxbc2NhbGVdKTtcbiAgICB9XG4gICAgaWYgKG1hdGNoLmZpbmFsICYmIG1hdGNoLmZpbmFsW3NjYWxlXSkge1xuICAgICAgbGVnZW5kRGlmZnMudXNlZFNjYWxlcy5wdXNoKG1hdGNoLmZpbmFsW3NjYWxlXSk7XG4gICAgfVxuXG4gICAgZGVsZXRlIGxlZ2VuZF9pW3NjYWxlXTtcbiAgICBkZWxldGUgbGVnZW5kX2Zbc2NhbGVdO1xuICB9LCBmYWxzZSk7XG4gIGxlZ2VuZERpZmZzLnVzZWRTY2FsZXMgPSBsZWdlbmREaWZmcy51c2VkU2NhbGVzLnVuaXF1ZSgpO1xuICBsZWdlbmREaWZmcy5zY2FsZSA9IGFwcGVuZENvbXBTY2FsZURpZmYobGVnZW5kRGlmZnMudXNlZFNjYWxlcywgc2NhbGVEaWZmcyk7XG4gIGxlZ2VuZERpZmZzLnNjTmFtZXMgPSBPYmplY3Qua2V5cyhsZWdlbmREaWZmcy5zY2FsZSk7XG4gIC8vIDIpIGVuY29kZSBkaWZmXG4gIGxlZ2VuZERpZmZzLmVuY29kZSA9ICFkZWVwRXF1YWwobGVnZW5kX2ksIGxlZ2VuZF9mKTtcblxuICAvLyAzKSBQb3MgRGlmZlxuICBpZiAobWF0Y2guaW5pdGlhbCAmJiBtYXRjaC5maW5hbCkge1xuICAgIGNvbnN0IGxlZ2VuZEdEYXR1bSA9IHtcbiAgICAgIGluaXRpYWw6IGZpbmRDb21wKFxuICAgICAgICByYXdJbmZvLnNWaXMudmlldy5zY2VuZWdyYXBoKCkucm9vdCxcbiAgICAgICAgbWF0Y2guY29tcE5hbWUsXG4gICAgICAgIFwibGVnZW5kXCJcbiAgICAgIClbMF0uaXRlbXNbMF0sXG4gICAgICBmaW5hbDogZmluZENvbXAoXG4gICAgICAgIHJhd0luZm8uZVZpcy52aWV3LnNjZW5lZ3JhcGgoKS5yb290LFxuICAgICAgICBtYXRjaC5jb21wTmFtZSxcbiAgICAgICAgXCJsZWdlbmRcIlxuICAgICAgKVswXS5pdGVtc1swXVxuICAgIH07XG5cbiAgICBsZWdlbmREaWZmcy52aWV3LnggPSBsZWdlbmRHRGF0dW0uZmluYWwueCAtIGxlZ2VuZEdEYXR1bS5pbml0aWFsLng7XG4gICAgbGVnZW5kRGlmZnMudmlldy55ID0gbGVnZW5kR0RhdHVtLmZpbmFsLnkgLSBsZWdlbmRHRGF0dW0uaW5pdGlhbC55O1xuICB9XG5cbiAgcmV0dXJuIGxlZ2VuZERpZmZzO1xufVxuXG5mdW5jdGlvbiBkZXRlY3RBeGlzRGlmZnMobWF0Y2gsIHJhd0luZm8sIHNjYWxlRGlmZnMpIHtcbiAgY29uc3QgYXhpc0RpZmZzID0ge1xuICAgIHZpZXc6IHsgZGVsdGFXOiAwLCBkZWx0YUg6IDAsIHg6IDAsIHk6IDAgfVxuICB9O1xuICBpZiAoIW1hdGNoLmluaXRpYWwpIHtcbiAgICBheGlzRGlmZnMuYWRkID0gdHJ1ZTtcbiAgICBheGlzRGlmZnMudmlldyA9IHtcbiAgICAgIGRlbHRhVzogTUlOX1BPU19ERUxUQSxcbiAgICAgIGRlbHRhSDogTUlOX1BPU19ERUxUQSxcbiAgICAgIHg6IE1JTl9QT1NfREVMVEEsXG4gICAgICB5OiBNSU5fUE9TX0RFTFRBXG4gICAgfTtcbiAgfSBlbHNlIGlmICghbWF0Y2guZmluYWwpIHtcbiAgICBheGlzRGlmZnMucmVtb3ZlID0gdHJ1ZTtcbiAgICBheGlzRGlmZnMudmlldyA9IHtcbiAgICAgIGRlbHRhVzogLU1JTl9QT1NfREVMVEEsXG4gICAgICBkZWx0YUg6IC1NSU5fUE9TX0RFTFRBLFxuICAgICAgeDogLU1JTl9QT1NfREVMVEEsXG4gICAgICB5OiAtTUlOX1BPU19ERUxUQVxuICAgIH07XG4gIH1cbiAgLy8gMSkgc2NhbGUgZGlmZlxuICBheGlzRGlmZnMudXNlZFNjYWxlcyA9IFtdO1xuICBpZiAobWF0Y2guaW5pdGlhbCkge1xuICAgIGF4aXNEaWZmcy51c2VkU2NhbGVzLnB1c2gobWF0Y2guaW5pdGlhbC5zY2FsZSk7XG4gIH0gZWxzZSBpZiAobWF0Y2guZmluYWwpIHtcbiAgICBheGlzRGlmZnMudXNlZFNjYWxlcy5wdXNoKG1hdGNoLmZpbmFsLnNjYWxlKTtcbiAgfVxuXG4gIGF4aXNEaWZmcy5zY2FsZSA9IGFwcGVuZENvbXBTY2FsZURpZmYoYXhpc0RpZmZzLnVzZWRTY2FsZXMsIHNjYWxlRGlmZnMpO1xuICBheGlzRGlmZnMuc2NOYW1lcyA9IE9iamVjdC5rZXlzKGF4aXNEaWZmcy5zY2FsZSk7XG4gIGlmIChtYXRjaC5maW5hbCAmJiBtYXRjaC5pbml0aWFsKSB7XG4gICAgYXhpc0RpZmZzLnZpZXcgPSB7XG4gICAgICBkZWx0YVc6IGF4aXNEaWZmcy5zY2FsZS54ID8gYXhpc0RpZmZzLnNjYWxlLngucmFuZ2VEZWx0YSA6IDAsXG4gICAgICBkZWx0YUg6IGF4aXNEaWZmcy5zY2FsZS55ID8gYXhpc0RpZmZzLnNjYWxlLnkucmFuZ2VEZWx0YSA6IDBcbiAgICB9O1xuICAgIGlmIChtYXRjaC5pbml0aWFsLnNjYWxlID09PSBtYXRjaC5maW5hbC5zY2FsZSkge1xuICAgICAgaWYgKCEhbWF0Y2guaW5pdGlhbC5ncmlkICE9PSAhIW1hdGNoLmZpbmFsLmdyaWQpIHtcbiAgICAgICAgaWYgKG1hdGNoLmZpbmFsLnNjYWxlID09PSBcInhcIikge1xuICAgICAgICAgIGF4aXNEaWZmcy52aWV3LmRlbHRhSCA9IG1hdGNoLmluaXRpYWwuZ3JpZFxuICAgICAgICAgICAgPyAtTUlOX1BPU19ERUxUQVxuICAgICAgICAgICAgOiBNSU5fUE9TX0RFTFRBO1xuICAgICAgICB9IGVsc2UgaWYgKG1hdGNoLmZpbmFsLnNjYWxlID09PSBcInlcIikge1xuICAgICAgICAgIGF4aXNEaWZmcy52aWV3LmRlbHRhVyA9IG1hdGNoLmluaXRpYWwuZ3JpZFxuICAgICAgICAgICAgPyAtTUlOX1BPU19ERUxUQVxuICAgICAgICAgICAgOiBNSU5fUE9TX0RFTFRBO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCEhbWF0Y2guaW5pdGlhbC5ncmlkICYmICEhbWF0Y2guZmluYWwuZ3JpZCkge1xuICAgICAgICBsZXQgZGVsdGEgPVxuICAgICAgICAgIGdldChzY2FsZURpZmZzLCBtYXRjaC5pbml0aWFsLmdyaWRTY2FsZSwgXCJtZXRhXCIsIFwicmFuZ2VEZWx0YVwiKSB8fCAwO1xuICAgICAgICBpZiAobWF0Y2guZmluYWwub3JpZW50ID09PSBcImxlZnRcIiB8fCBtYXRjaC5maW5hbC5vcmllbnQgPT09IFwicmlnaHRcIikge1xuICAgICAgICAgIGF4aXNEaWZmcy52aWV3LmRlbHRhVyA9IGRlbHRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF4aXNEaWZmcy52aWV3LmRlbHRhSCA9IGRlbHRhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gMikgZW5jb2RlIGRpZmZcbiAgY29uc3QgYXhpc19pID0gY29weShtYXRjaC5pbml0aWFsKSB8fCB7fTsgbGV0IGF4aXNfZiA9IGNvcHkobWF0Y2guZmluYWwgfHwge30pO1xuICBkZWxldGUgYXhpc19pLnNjYWxlO1xuICBkZWxldGUgYXhpc19mLnNjYWxlO1xuICBheGlzRGlmZnMuZW5jb2RlID0gIWRlZXBFcXVhbChheGlzX2ksIGF4aXNfZik7XG5cbiAgLy8gMykgUG9zIERpZmZcbiAgaWYgKG1hdGNoLmluaXRpYWwgJiYgbWF0Y2guZmluYWwpIHtcbiAgICBjb25zdCBheGlzR0RhdHVtID0ge1xuICAgICAgaW5pdGlhbDogZmluZENvbXAoXG4gICAgICAgIHJhd0luZm8uc1Zpcy52aWV3LnNjZW5lZ3JhcGgoKS5yb290LFxuICAgICAgICBtYXRjaC5jb21wTmFtZSxcbiAgICAgICAgXCJheGlzXCJcbiAgICAgIClbMF0uaXRlbXNbMF0sXG4gICAgICBmaW5hbDogZmluZENvbXAoXG4gICAgICAgIHJhd0luZm8uZVZpcy52aWV3LnNjZW5lZ3JhcGgoKS5yb290LFxuICAgICAgICBtYXRjaC5jb21wTmFtZSxcbiAgICAgICAgXCJheGlzXCJcbiAgICAgIClbMF0uaXRlbXNbMF1cbiAgICB9O1xuICAgIGxldCBmV2lkdGggPSBheGlzR0RhdHVtLmZpbmFsLmJvdW5kcy54MiAtIGF4aXNHRGF0dW0uZmluYWwuYm91bmRzLngxLFxuICAgICAgaVdpZHRoID0gYXhpc0dEYXR1bS5pbml0aWFsLmJvdW5kcy54MiAtIGF4aXNHRGF0dW0uaW5pdGlhbC5ib3VuZHMueDEsXG4gICAgICBmSGVpZ2h0ID0gYXhpc0dEYXR1bS5maW5hbC5ib3VuZHMueTIgLSBheGlzR0RhdHVtLmZpbmFsLmJvdW5kcy55MSxcbiAgICAgIGlIZWlnaHQgPSBheGlzR0RhdHVtLmluaXRpYWwuYm91bmRzLnkyIC0gYXhpc0dEYXR1bS5pbml0aWFsLmJvdW5kcy55MTtcblxuICAgIGF4aXNEaWZmcy52aWV3LmRlbHRhVyArPSBmV2lkdGggLSBpV2lkdGg7XG4gICAgYXhpc0RpZmZzLnZpZXcuZGVsdGFIICs9IGZIZWlnaHQgLSBpSGVpZ2h0O1xuXG4gICAgYXhpc0RpZmZzLnZpZXcueCA9IGF4aXNHRGF0dW0uZmluYWwueCAtIGF4aXNHRGF0dW0uaW5pdGlhbC54O1xuICAgIGF4aXNEaWZmcy52aWV3LnkgPSBheGlzR0RhdHVtLmZpbmFsLnkgLSBheGlzR0RhdHVtLmluaXRpYWwueTtcbiAgfVxuXG4gIHJldHVybiBheGlzRGlmZnM7XG59XG5mdW5jdGlvbiBkZXRlY3RWaWV3RGlmZihyYXdJbmZvKSB7XG4gIGNvbnN0IHZpZXdEaWZmcyA9IGdldFZpZXdDaGFuZ2UocmF3SW5mbyk7XG4gIGNvbnN0IHBhZGRpbmdEaWZmID0gdmlld0RpZmZzLmZpbmFsLnBhZGRpbmcgLSB2aWV3RGlmZnMuaW5pdGlhbC5wYWRkaW5nO1xuICB2aWV3RGlmZnMuZGVsdGFXID0gdmlld0RpZmZzLmZpbmFsLnZpZXdXaWR0aCAtIHZpZXdEaWZmcy5pbml0aWFsLnZpZXdXaWR0aCArIHBhZGRpbmdEaWZmO1xuICB2aWV3RGlmZnMuZGVsdGFIID0gdmlld0RpZmZzLmZpbmFsLnZpZXdIZWlnaHQgLSB2aWV3RGlmZnMuaW5pdGlhbC52aWV3SGVpZ2h0ICsgcGFkZGluZ0RpZmY7XG4gIHZpZXdEaWZmcy53aWR0aCA9IHt9O1xuICB2aWV3RGlmZnMuaGVpZ2h0ID0ge307XG4gIGlmIChNYXRoLmFicyh2aWV3RGlmZnMuZGVsdGFXKSA+IE1JTl9QT1NfREVMVEEvMikge1xuICAgIHZpZXdEaWZmcy53aWR0aFt2aWV3RGlmZnMuZGVsdGFXID4gMCA/IFwiaW5jcmVhc2VcIiA6IFwiZGVjcmVhc2VcIl0gPSB0cnVlO1xuICB9XG4gIGlmIChNYXRoLmFicyh2aWV3RGlmZnMuZGVsdGFIKSA+IE1JTl9QT1NfREVMVEEvMikge1xuICAgIHZpZXdEaWZmcy5oZWlnaHRbdmlld0RpZmZzLmRlbHRhSCA+IDAgPyBcImluY3JlYXNlXCIgOiBcImRlY3JlYXNlXCJdID0gdHJ1ZTtcbiAgfVxuICB2aWV3RGlmZnMuc2NOYW1lcyA9IFtdO1xuXG4gIHJldHVybiB2aWV3RGlmZnM7XG59XG5cbmZ1bmN0aW9uIGRldGVjdFNpZ25hbERpZmZzKHJhd0luZm8pIHtcbiAgY29uc3Qgc2lnbmFsRGlmZnMgPSB7XG4gICAgaW5pdGlhbDogcmF3SW5mby5zVmlzLnZpZXcuX3J1bnRpbWUuc2lnbmFscyxcbiAgICBmaW5hbDogcmF3SW5mby5lVmlzLnZpZXcuX3J1bnRpbWUuc2lnbmFscyxcbiAgICBtZXRhOiB7XG4gICAgICB1cGRhdGU6IFtdLFxuICAgICAgZXhpdDogW10sXG4gICAgICBlbnRlcjogW10sXG4gICAgICBzYW1lOiBbXVxuICAgIH1cbiAgfTtcbiAgT2JqZWN0LmtleXMoc2lnbmFsRGlmZnMuaW5pdGlhbClcbiAgICAuY29uY2F0KE9iamVjdC5rZXlzKHNpZ25hbERpZmZzLmZpbmFsKSlcbiAgICAudW5pcXVlKClcbiAgICAuZm9yRWFjaChzZ05hbWUgPT4ge1xuICAgICAgbGV0IHNnX2YgPSBzaWduYWxEaWZmcy5maW5hbFtzZ05hbWVdO1xuICAgICAgbGV0IHNnX2kgPSBzaWduYWxEaWZmcy5pbml0aWFsW3NnTmFtZV07XG4gICAgICBpZiAoIXNnX2YpIHtcbiAgICAgICAgc2lnbmFsRGlmZnMubWV0YS5leGl0LnB1c2goc2dOYW1lKTtcbiAgICAgIH0gZWxzZSBpZiAoIXNnX2kpIHtcbiAgICAgICAgc2lnbmFsRGlmZnMubWV0YS5lbnRlci5wdXNoKHNnTmFtZSk7XG4gICAgICB9IGVsc2UgaWYgKCFkZWVwRXF1YWwoc2dfZi52YWx1ZSwgc2dfaS52YWx1ZSkpIHtcbiAgICAgICAgc2lnbmFsRGlmZnMubWV0YS51cGRhdGUucHVzaChzZ05hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2lnbmFsRGlmZnMubWV0YS5zYW1lLnB1c2goc2dOYW1lKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgcmV0dXJuIHNpZ25hbERpZmZzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEaWZmRGF0YShpRGF0YSwgZkRhdGEpIHtcbiAgY29uc3QgZGlmZiA9IHsgY29sdW1uOiBmYWxzZSwgcm93OiBmYWxzZSB9O1xuXG4gIGxldCBpRmllbGRzID0gaURhdGFbMF0gPyBPYmplY3Qua2V5cyhpRGF0YVswXS5kYXR1bSkgOiBbXTtcbiAgbGV0IGZGaWVsZHMgPSBmRGF0YVswXSA/IE9iamVjdC5rZXlzKGZEYXRhWzBdLmRhdHVtKSA6IFtdO1xuICBsZXQgc2hhcmVkRmllbGRzID0gW107XG4gIGlmICghZGVlcEVxdWFsKGlGaWVsZHMsIGZGaWVsZHMpKSB7XG4gICAgaWYgKGlGaWVsZHMuY29udGFpbkFsbChmRmllbGRzKSkge1xuICAgICAgZGlmZi5jb2x1bW4gPSBcInJlbW92ZWRcIjtcbiAgICAgIHNoYXJlZEZpZWxkcyA9IGZGaWVsZHM7XG4gICAgfSBlbHNlIGlmIChmRmllbGRzLmNvbnRhaW5BbGwoaUZpZWxkcykpIHtcbiAgICAgIGRpZmYuY29sdW1uID0gXCJhZGRlZFwiO1xuICAgICAgc2hhcmVkRmllbGRzID0gaUZpZWxkcztcbiAgICB9IGVsc2Uge1xuICAgICAgZGlmZi5jb2x1bW4gPSBcImNoYW5nZWRcIjtcbiAgICAgIHNoYXJlZEZpZWxkcyA9IGlGaWVsZHMuZmlsdGVyKGYgPT4gZkZpZWxkcy5pbmRleE9mKGYpID49IDApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBzaGFyZWRGaWVsZHMgPSBpRmllbGRzO1xuICB9XG5cbiAgaWYgKHNoYXJlZEZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgbWFwcGVkSURhdGEgPSBpRGF0YS5tYXAoZCA9PlxuICAgICAgc2hhcmVkRmllbGRzLm1hcChmID0+IGQuZGF0dW1bZl0pLmpvaW4oXCIsXCIpXG4gICAgKTtcbiAgICBjb25zdCBtYXBwZWRGRGF0YSA9IGZEYXRhLm1hcChkID0+XG4gICAgICBzaGFyZWRGaWVsZHMubWFwKGYgPT4gZC5kYXR1bVtmXSkuam9pbihcIixcIilcbiAgICApO1xuICAgIGRpZmYucm93ID0gIWRlZXBFcXVhbChtYXBwZWRJRGF0YSwgbWFwcGVkRkRhdGEpO1xuICB9IGVsc2Uge1xuICAgIGRpZmYucm93ID0gaURhdGEubGVuZ3RoICE9PSBmRGF0YS5sZW5ndGg7XG4gIH1cblxuICBpZiAoIWRpZmYuY29sdW1uICYmICFkaWZmLnJvdykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBkaWZmLnNoYXJlZEZpZWxkcyA9IHNoYXJlZEZpZWxkcztcbiAgcmV0dXJuIGRpZmY7XG59XG5cbi8vIGZ1bmN0aW9uIGlzRGlmZkRhdGFDb21wKGlEYXRhQ29tcCwgZkRhdGFDb21wLCByYXdJbmZvKSB7XG4vLyAgIGlmIChpRGF0YUNvbXAuc291cmNlIHx8IGZEYXRhQ29tcC5zb3VyY2UpIHtcbi8vICAgICBsZXQgbmV3SURhdGFDb21wID0gaURhdGFDb21wLFxuLy8gICAgICAgbmV3RkRhdGFDb21wID0gZkRhdGFDb21wO1xuLy8gICAgIGlmIChpRGF0YUNvbXAuc291cmNlICYmIHR5cGVvZihpRGF0YUNvbXAuc291cmNlKSA9PT0gXCJzdHJpbmdcIikge1xuLy8gICAgICAgbmV3SURhdGFDb21wID0gZmluZERhdGFDb21wKHJhd0luZm8uc1Zpcy5zcGVjLCBpRGF0YUNvbXAuc291cmNlKTtcbi8vICAgICAgIG5ld0lEYXRhQ29tcC50cmFuc2Zvcm0gPSAobmV3SURhdGFDb21wLnRyYW5zZm9ybSB8fCBbXSkuY29uY2F0KGlEYXRhQ29tcC50cmFuc2Zvcm0pO1xuLy8gICAgIH1cbi8vICAgICBpZiAoZkRhdGFDb21wLnNvdXJjZSAmJiB0eXBlb2YoZkRhdGFDb21wLnNvdXJjZSkgPT09IFwic3RyaW5nXCIpIHtcbi8vICAgICAgIG5ld0ZEYXRhQ29tcCA9IGZpbmREYXRhQ29tcChyYXdJbmZvLmVWaXMuc3BlYywgZkRhdGFDb21wLnNvdXJjZSk7XG4vLyAgICAgICBuZXdGRGF0YUNvbXAudHJhbnNmb3JtID0gKG5ld0ZEYXRhQ29tcC50cmFuc2Zvcm0gfHwgW10pLmNvbmNhdChmRGF0YUNvbXAudHJhbnNmb3JtKTtcbi8vICAgICB9XG5cbi8vICAgICByZXR1cm4gaXNEaWZmRGF0YUNvbXAobmV3SURhdGFDb21wLCBuZXdGRGF0YUNvbXAsIHJhd0luZm8pXG4vLyAgIH1cblxuLy8gICBsZXQgX2kgPSBjb3B5KGlEYXRhQ29tcCksIF9mID0gY29weShmRGF0YUNvbXApO1xuLy8gICBkZWxldGUgX2kubmFtZTtcbi8vICAgLy8gZGVsZXRlIF9pLnZhbHVlcztcbi8vICAgZGVsZXRlIF9mLm5hbWU7XG4vLyAgIC8vIGRlbGV0ZSBfZi52YWx1ZXM7XG4vLyAgIGlmIChfaS52YWx1ZXMgJiYgX2YudmFsdWVzKSB7XG4vLyAgICAgaWYgKF9pLnZhbHVlcy5sZW5ndGggIT09IF9mLnZhbHVlcy5sZW5ndGgpIHtcbi8vICAgICAgIHJldHVybiB0cnVlXG4vLyAgICAgfVxuLy8gICAgIGlmICggSlNPTi5zdHJpbmdpZnkoX2kudmFsdWVzLnNvcnQoKSkgIT09IEpTT04uc3RyaW5naWZ5KF9mLnZhbHVlcy5zb3J0KCkpKXtcbi8vICAgICAgIHJldHVybiB0cnVlXG4vLyAgICAgfVxuXG4vLyAgIH1cbi8vICAgZGVsZXRlIF9pLnZhbHVlcztcbi8vICAgZGVsZXRlIF9mLnZhbHVlcztcbi8vICAgcmV0dXJuICFkZWVwRXF1YWwoX2ksIF9mKTtcbi8vICAgLy9jb21wYXJlIGFsbCBleGNlcHQgZm9yIFwibmFtZVwiLiAgKFwidmFsdWVzXCIgbWF5IHRha2UgYSBsb3Qgb2YgdGltZXMuLi4pXG4vLyB9XG5cbi8vIGZ1bmN0aW9uIGZpbmREYXRhQ29tcChzcGVjLCBjb21wTmFtZSkge1xuLy8gICByZXR1cm4gc3BlYy5kYXRhLmZpbmQoY29tcCA9PiBjb21wLm5hbWUgPT09IGNvbXBOYW1lKTtcbi8vIH1cbiIsImltcG9ydCB7IGdldE1hcmtEYXRhLCB1bnBhY2tEYXRhIH0gZnJvbSBcIi4uL3V0aWwvdmdEYXRhSGVscGVyXCI7XG5pbXBvcnQgeyBnZXQgfSBmcm9tIFwiLi4vdXRpbC91dGlsXCI7XG5pbXBvcnQgeyBjb21wdXRlSGFzRmFjZXQsIGlzR3JvdXBpbmdNYXJrdHlwZSB9IGZyb20gXCIuLi9jaGFuZ2VGZXRjaGVyL3N0YXRlL3V0aWxcIjtcbmltcG9ydCB7IGdldFN1YkVuY29kZUJ5Q2hhbm5lbCB9IGZyb20gXCIuL3V0aWxcIjtcblxuZnVuY3Rpb24gYXBwbHlNYXJrRGlmZnMoXG4gIG1hcmtEaWZmLFxuICBhcHBseWluZ0RpZmZzLFxuICByYXdJbmZvLFxuICBleHRyYURpZmZzQnlNYXJrdHlwZUNoYW5nZSA9IFtdXG4pIHtcblxuICBjb25zdCBtYXJrQ29tcFN1bW1hcnkgPSBuZXcgTWFya1N1bW1hcnkobWFya0RpZmYsIHJhd0luZm8pO1xuXG4gIGFwcGx5aW5nRGlmZnMuZm9yRWFjaChkaWZmID0+IHtcbiAgICBtYXJrQ29tcFN1bW1hcnkuYXBwbHlEaWZmKGRpZmYsIGV4dHJhRGlmZnNCeU1hcmt0eXBlQ2hhbmdlKTtcbiAgfSk7XG4gIHJldHVybiBtYXJrQ29tcFN1bW1hcnk7XG59XG5cblxuY2xhc3MgTWFya1N1bW1hcnkge1xuICBjb25zdHJ1Y3RvcihtYXJrRGlmZiwgcmF3SW5mbykge1xuICAgIGNvbnN0IHZlZ2FWaWV3ID0gcmF3SW5mby5zVmlzLnZpZXc7XG4gICAgbGV0IGRhdGEgPSBnZXRNYXJrRGF0YShcbiAgICAgIHZlZ2FWaWV3LFxuICAgICAgbWFya0RpZmYuaW5pdGlhbCxcbiAgICAgIG1hcmtEaWZmLmNvbXBOYW1lLFxuXG4gICAgKTtcbiAgICBsZXQgaGFzRmFjZXQgPSBtYXJrRGlmZi5pbml0aWFsID8gY29tcHV0ZUhhc0ZhY2V0KG1hcmtEaWZmLmluaXRpYWwpIDogdW5kZWZpbmVkO1xuICAgIGxldCBpc0dyb3VwaW5nTXR5cGUgPSBtYXJrRGlmZi5pbml0aWFsID8gaXNHcm91cGluZ01hcmt0eXBlKG1hcmtEaWZmLmluaXRpYWwudHlwZSkgOiB1bmRlZmluZWQ7XG4gICAgZGF0YSA9IGhhc0ZhY2V0IHx8IGlzR3JvdXBpbmdNdHlwZSA/IHVucGFja0RhdGEoZGF0YSkgOiBkYXRhO1xuICAgIHRoaXMubWFya0RpZmYgPSBtYXJrRGlmZjtcbiAgICB0aGlzLnJhd0luZm8gPSByYXdJbmZvO1xuICAgIHRoaXMuaXNFbXB0eSA9IG1hcmtEaWZmLmFkZDtcbiAgICB0aGlzLm1hcmt0eXBlID0gZ2V0KG1hcmtEaWZmLCBcImluaXRpYWxcIiwgXCJ0eXBlXCIpO1xuICAgIHRoaXMuZW5jb2RlID0gZ2V0KG1hcmtEaWZmLCBcImluaXRpYWxcIiwgXCJlbmNvZGVcIiwgXCJ1cGRhdGVcIikgfHwge307XG5cbiAgICB0aGlzLmRhdGEgPSB7XG4gICAgICBoYXNGYWNldCxcbiAgICAgIGlzR3JvdXBpbmdNYXJrdHlwZTogaXNHcm91cGluZ010eXBlLFxuICAgICAgZmllbGRzOiBkYXRhWzBdID8gT2JqZWN0LmtleXMoZGF0YVswXS5kYXR1bSkgOiBbXSxcbiAgICAgIHZhbHVlczogZGF0YVxuICAgIH07XG5cbiAgICB0aGlzLnNjYWxlcyA9IG1hcmtEaWZmLm1ldGEudXNlZFNjYWxlcy5yZWR1Y2UoKHNjYWxlcywgc2NOYW1lKSA9PiB7XG4gICAgICBjb25zdCBzY2FsZV9pID0gdmVnYVZpZXcuX3J1bnRpbWUuc2NhbGVzW3NjTmFtZV07XG4gICAgICBpZiAoc2NhbGVfaSkge1xuICAgICAgICBzY2FsZXNbc2NOYW1lXSA9IHNjYWxlX2kudmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2NhbGVzO1xuICAgIH0sIHt9KTtcblxuICAgIHRoaXMuc3R5bGUgPSBnZXQobWFya0RpZmYsIFwiaW5pdGlhbFwiLCBcInN0eWxlXCIpO1xuICB9XG5cbiAgYXBwbHlEaWZmKGRpZmYsIGV4dHJhRGlmZnNCeU1hcmt0eXBlQ2hhbmdlKSB7XG5cbiAgICBpZiAoZGlmZiA9PT0gXCJhZGRcIikge1xuICAgICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGRpZmYgPT09IFwicmVtb3ZlXCIpIHtcbiAgICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoZGlmZiA9PT0gXCJtYXJrdHlwZVwiKSB7XG4gICAgICB0aGlzLm1hcmt0eXBlID0gZ2V0KHRoaXMubWFya0RpZmYsIFwiZmluYWxcIiwgXCJ0eXBlXCIpO1xuICAgICAgZXh0cmFEaWZmc0J5TWFya3R5cGVDaGFuZ2UuZm9yRWFjaChleHRyYURpZmYgPT4ge1xuICAgICAgICB0aGlzLmFwcGx5RGlmZihleHRyYURpZmYpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChkaWZmID09PSBcImRhdGFcIikge1xuICAgICAgdGhpcy5kYXRhID0ge1xuICAgICAgICBpc0dyb3VwaW5nTWFya3R5cGU6IHRoaXMubWFya0RpZmYuZmluYWwgPyBpc0dyb3VwaW5nTWFya3R5cGUodGhpcy5tYXJrRGlmZi5maW5hbC50eXBlKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgaGFzRmFjZXQ6IHRoaXMubWFya0RpZmYuZmluYWwgPyBjb21wdXRlSGFzRmFjZXQodGhpcy5tYXJrRGlmZi5maW5hbCkgOiB1bmRlZmluZWQsXG4gICAgICB9O1xuICAgICAgbGV0IGRhdGEgPSBnZXRNYXJrRGF0YShcbiAgICAgICAgdGhpcy5yYXdJbmZvLmVWaXMudmlldyxcbiAgICAgICAgdGhpcy5tYXJrRGlmZi5maW5hbCxcbiAgICAgICAgdGhpcy5tYXJrRGlmZi5jb21wTmFtZVxuICAgICAgKTtcbiAgICAgIGRhdGEgPSB0aGlzLmRhdGEuaGFzRmFjZXQgfHwgdGhpcy5kYXRhLmlzR3JvdXBpbmdNYXJrdHlwZSA/IHVucGFja0RhdGEoZGF0YSkgOiBkYXRhO1xuICAgICAgdGhpcy5kYXRhLmZpZWxkcyA9IGRhdGFbMF0gPyBPYmplY3Qua2V5cyhkYXRhWzBdLmRhdHVtKSA6IFtdO1xuICAgICAgdGhpcy5kYXRhLnZhbHVlcyA9IGRhdGE7XG4gICAgfSBlbHNlIGlmIChkaWZmLmluZGV4T2YoXCJlbmNvZGUuXCIpID49IDApIHtcbiAgICAgIGNvbnN0IGNoYW5uZWwgPSBkaWZmLnJlcGxhY2UoXCJlbmNvZGUuXCIsIFwiXCIpO1xuICAgICAgdGhpcy5lbmNvZGUgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICB7fSxcbiAgICAgICAgdGhpcy5lbmNvZGUsXG4gICAgICAgIHRoaXMubWFya0RpZmYuZmluYWwgPyBnZXRTdWJFbmNvZGVCeUNoYW5uZWwodGhpcy5tYXJrRGlmZi5maW5hbC5lbmNvZGUudXBkYXRlLCBjaGFubmVsKSA6IHt9XG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoZGlmZi5pbmRleE9mKFwic2NhbGUuXCIpID49IDApIHtcbiAgICAgIGNvbnN0IHNjTmFtZSA9IGRpZmYucmVwbGFjZShcInNjYWxlLlwiLCBcIlwiKTtcbiAgICAgIGNvbnN0IHNjYWxlX2YgPSB0aGlzLnJhd0luZm8uZVZpcy52aWV3Ll9ydW50aW1lLnNjYWxlc1tzY05hbWVdO1xuICAgICAgaWYgKHNjYWxlX2YpIHtcbiAgICAgICAgdGhpcy5zY2FsZXNbc2NOYW1lXSA9IHNjYWxlX2YudmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgdGhpcy5zY2FsZXNbc2NOYW1lXTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRpZmYgPT09IFwic3R5bGVcIikge1xuICAgICAgdGhpcy5zdHlsZSA9IGdldCh0aGlzLm1hcmtEaWZmLCBcImZpbmFsXCIsIFwic3R5bGVcIik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbn1cblxuXG5leHBvcnQgeyBhcHBseU1hcmtEaWZmcyB9O1xuLy8gVG9kb1xuLy8gTWFrZSBUZXN0XG4iLCJmdW5jdGlvbiBjaGVja01hcmtDb21wKG1hcmtDb21wU3VtbWFyeSkge1xuICBjb25zdCB7IGVuY29kZSB9ID0gbWFya0NvbXBTdW1tYXJ5O1xuICBjb25zdCB7IG1hcmt0eXBlIH0gPSBtYXJrQ29tcFN1bW1hcnk7XG4gIGNvbnN0IHsgZGF0YSB9ID0gbWFya0NvbXBTdW1tYXJ5O1xuICBjb25zdCB7IHNjYWxlcyB9ID0gbWFya0NvbXBTdW1tYXJ5O1xuXG4gIGlmIChtYXJrQ29tcFN1bW1hcnkuaXNFbXB0eSkge1xuICAgIHJldHVybiB7IHJlc3VsdDogdHJ1ZSB9O1xuICB9XG5cbiAgLy8gZW5jb2RlIC0gbWFya3R5cGVcbiAgaWYgKG1hcmt0eXBlID09PSBcInJlY3RcIikge1xuICAgIGNvbnN0IGlzWEVuY29kZVZhbGlkID0gY29udGFpbkFueUF0dHJTZXQoXG4gICAgICBbXG4gICAgICAgIFtcInhcIiwgXCJ4MlwiXSxcbiAgICAgICAgW1wieFwiLCBcIndpZHRoXCJdLFxuICAgICAgICBbXCJ4Y1wiLCBcIndpZHRoXCJdXG4gICAgICBdLFxuICAgICAgZW5jb2RlXG4gICAgKTtcbiAgICBjb25zdCBpc1lFbmNvZGVWYWxpZCA9IGNvbnRhaW5BbnlBdHRyU2V0KFxuICAgICAgW1xuICAgICAgICBbXCJ5XCIsIFwieTJcIl0sXG4gICAgICAgIFtcInlcIiwgXCJoZWlnaHRcIl0sXG4gICAgICAgIFtcInljXCIsIFwiaGVpZ2h0XCJdXG4gICAgICBdLFxuICAgICAgZW5jb2RlXG4gICAgKTtcbiAgICBpZiAoIWlzWEVuY29kZVZhbGlkIHx8ICFpc1lFbmNvZGVWYWxpZCkge1xuICAgICAgcmV0dXJuIHsgcmVzdWx0OiBmYWxzZSwgcmVhc29uczogW1wiZW5jb2RlXCIsIFwibWFya3R5cGVcIl0gfTtcbiAgICB9XG4gIH0gZWxzZSBpZiAobWFya3R5cGUgPT09IFwiYXJlYVwiKSB7XG4gICAgY29uc3QgaXNWYWxpZCA9XG4gICAgICBlbmNvZGUub3JpZW50ICYmIGVuY29kZS5vcmllbnQudmFsdWUgPT09IFwiaG9yaXpvbnRhbFwiXG4gICAgICAgID8gY29udGFpbkFueUF0dHJTZXQoXG4gICAgICAgICAgW1xuICAgICAgICAgICAgW1wieFwiLCBcIngyXCIsIFwieVwiXSxcbiAgICAgICAgICAgIFtcInhcIiwgXCJ5XCIsIFwid2lkdGhcIl1cbiAgICAgICAgICBdLFxuICAgICAgICAgIGVuY29kZVxuICAgICAgICApXG4gICAgICAgIDogY29udGFpbkFueUF0dHJTZXQoXG4gICAgICAgICAgW1xuICAgICAgICAgICAgW1wieFwiLCBcInkyXCIsIFwieVwiXSxcbiAgICAgICAgICAgIFtcInhcIiwgXCJ5XCIsIFwiaGVpZ2h0XCJdXG4gICAgICAgICAgXSxcbiAgICAgICAgICBlbmNvZGVcbiAgICAgICAgKTtcblxuICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIHsgcmVzdWx0OiBmYWxzZSwgcmVhc29uczogW1wiZW5jb2RlXCIsIFwibWFya3R5cGVcIl0gfTtcbiAgICB9XG4gIH0gZWxzZSBpZiAobWFya3R5cGUgPT09IFwibGluZVwiKSB7XG4gICAgY29uc3QgaXNJblZhbGlkID0gY29udGFpbkFueUF0dHJTZXQoXG4gICAgICBbIFtcIngyXCIsIFwieFwiXSwgW1wieTJcIiwgXCJ5XCJdLCBbXCJ5XCIsIFwiaGVpZ2h0XCJdLCBbXCJ5Y1wiLCBcImhlaWdodFwiXSwgW1wieFwiLCBcIndpZHRoXCJdLCBbXCJ4Y1wiLCBcIndpZHRoXCJdIF0sXG4gICAgICBlbmNvZGVcbiAgICApO1xuICAgIGlmIChpc0luVmFsaWQpIHtcbiAgICAgIHJldHVybiB7IHJlc3VsdDogZmFsc2UsIHJlYXNvbnM6IFtcImVuY29kZVwiLCBcIm1hcmt0eXBlXCJdIH07XG4gICAgfVxuICB9IGVsc2UgaWYgKG1hcmt0eXBlID09PSBcInRleHRcIikge1xuICAgIGlmICghZW5jb2RlLnRleHQpIHtcbiAgICAgIHJldHVybiB7IHJlc3VsdDogZmFsc2UsIHJlYXNvbnM6IFtcImVuY29kZVwiLCBcIm1hcmt0eXBlXCJdIH07XG4gICAgfVxuICB9IGVsc2UgaWYgKG1hcmt0eXBlID09PSBcInJ1bGVcIikge1xuICAgIGlmIChcbiAgICAgICFjb250YWluQW55QXR0clNldChcbiAgICAgICAgW1xuICAgICAgICAgIFtcInhcIiwgXCJ4MlwiLCBcInlcIl0sXG4gICAgICAgICAgW1wieVwiLCBcInkyXCIsIFwieFwiXVxuICAgICAgICBdLFxuICAgICAgICBlbmNvZGVcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHJldHVybiB7IHJlc3VsdDogZmFsc2UsIHJlYXNvbnM6IFtcImVuY29kZVwiLCBcIm1hcmt0eXBlXCJdIH07XG4gICAgfVxuICB9IGVsc2UgaWYgKCFtYXJrdHlwZSkge1xuICAgIHJldHVybiB7IHJlc3VsdDogZmFsc2UsIHJlYXNvbnM6IFtcIm1hcmt0eXBlXCJdIH07XG4gIH1cblxuICAvLyBlbmNvZGUgLSBkYXRhLCBlbmNvZGUgLSBkYXRhIC0gc2NhbGUsIGVuY29kZSAtIHNjYWxlXG4gIGNvbnN0IGF0dHJzID0gT2JqZWN0LmtleXMoZW5jb2RlKTtcbiAgbGV0IHZhbGlkID0gdHJ1ZTtcbiAgT2JqZWN0LmtleXMoc2NhbGVzIHx8IHt9KS5mb3JFYWNoKHNjTmFtZSA9PiB7XG5cbiAgICBpZiAoIWF0dHJzLmZpbmQoYXR0ciA9PiB7XG4gICAgICBpZiAoIWVuY29kZVthdHRyXSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCBlbkF0dHJzID0gQXJyYXkuaXNBcnJheShlbmNvZGVbYXR0cl0pID8gZW5jb2RlW2F0dHJdIDogWyBlbmNvZGVbYXR0cl0gXTtcbiAgICAgIHJldHVybiBlbkF0dHJzLmZpbmQoZW5BdHRyID0+IGVuQXR0ci5zY2FsZSA9PT0gc2NOYW1lKTtcbiAgICB9KSkge1xuICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICB9XG4gIH0pO1xuICBpZiAoIXZhbGlkKSB7XG4gICAgcmV0dXJuIHsgcmVhc29uczogW1wiZW5jb2RlXCIsIFwic2NhbGVcIl0sIHJlc3VsdDogZmFsc2UgfTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBlbkF0dHJzID0gQXJyYXkuaXNBcnJheShlbmNvZGVbYXR0cnNbaV1dKSA/IGVuY29kZVthdHRyc1tpXV0gOiBbIGVuY29kZVthdHRyc1tpXV0gXTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGVuQXR0cnMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IGVuQXR0ciA9IGVuQXR0cnNbal07XG4gICAgICBpZiAoZW5BdHRyICYmIGVuQXR0ci5zY2FsZSkge1xuICAgICAgICBpZiAoIXNjYWxlc1tlbkF0dHIuc2NhbGVdKSB7XG4gICAgICAgICAgcmV0dXJuIHsgcmVhc29uczogW1wiZW5jb2RlXCIsIFwic2NhbGVcIl0sIHJlc3VsdDogZmFsc2UgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW5BdHRyLmJhbmQgJiYgc2NhbGVzW2VuQXR0ci5zY2FsZV0udHlwZSAhPT0gXCJiYW5kXCIpIHtcbiAgICAgICAgICByZXR1cm4geyByZWFzb25zOiBbXCJlbmNvZGVcIiwgXCJzY2FsZVwiXSwgcmVzdWx0OiBmYWxzZSB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZW5BdHRyICYmIGVuQXR0ci5maWVsZCkge1xuICAgICAgICBpZiAoZGF0YS5maWVsZHMuaW5kZXhPZihlbkF0dHIuZmllbGQpIDwgMCkge1xuICAgICAgICAgIHJldHVybiB7IHJlc3VsdDogZmFsc2UsIHJlYXNvbnM6IFtcImVuY29kZVwiLCBcImRhdGFcIl0gfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW5BdHRyLnNjYWxlKSB7XG4gICAgICAgICAgY29uc3QgZm91bmRTY2FsZSA9IHNjYWxlc1tlbkF0dHIuc2NhbGVdO1xuICAgICAgICAgIGNvbnN0IHZhbHMgPSBkYXRhLnZhbHVlcy5tYXAoZCA9PiBkLmRhdHVtW2VuQXR0ci5maWVsZF0pO1xuICAgICAgICAgIGNvbnN0IHNjYWxlRG9tYWluID0gZm91bmRTY2FsZS5kb21haW4oKTtcbiAgICAgICAgICBsZXQgdmFsaWQgPSB0cnVlO1xuXG4gICAgICAgICAgaWYgKFtcImJhbmRcIiwgXCJvcmRpbmFsXCIsIFwicG9pbnRcIl0uaW5kZXhPZihmb3VuZFNjYWxlLnR5cGUpID49IDApIHtcbiAgICAgICAgICAgIC8vIGZvciBkaXNjcmV0ZSBzY2FsZXNcbiAgICAgICAgICAgIHZhbGlkID1cbiAgICAgICAgICAgICAgdmFsaWQgJiZcbiAgICAgICAgICAgICAgdmFscy5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgKGFjYywgdikgPT4gKGFjYyA9IGFjYyAmJiBzY2FsZURvbWFpbi5pbmRleE9mKHYpID49IDApLFxuICAgICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGZvdW5kU2NhbGUudHlwZSA9PT0gXCJsaW5lYXJcIikge1xuICAgICAgICAgICAgY29uc3QgbWF4ID0gTWF0aC5tYXgoLi4udmFscyk7XG4gICAgICAgICAgICBjb25zdCBtaW4gPSBNYXRoLm1pbiguLi52YWxzKTtcbiAgICAgICAgICAgIHZhbGlkID0gdmFsaWQgJiYgc2NhbGVEb21haW5bMF0gPD0gbWluICYmIHNjYWxlRG9tYWluWzFdID49IG1heDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGZvdW5kU2NhbGUudHlwZSA9PT0gXCJ0aW1lXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IG1heCA9IE1hdGgubWF4KC4uLnZhbHMpO1xuICAgICAgICAgICAgY29uc3QgbWluID0gTWF0aC5taW4oLi4udmFscyk7XG4gICAgICAgICAgICB2YWxpZCA9IHZhbGlkICYmIHNjYWxlRG9tYWluWzBdIDw9IG1pbiAmJiBzY2FsZURvbWFpblsxXSA+PSBtYXg7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgcmVhc29uczogW1wiZW5jb2RlXCIsIFwiZGF0YVwiLCBcInNjYWxlXCJdLCByZXN1bHQ6IGZhbHNlIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB7IHJlc3VsdDogdHJ1ZSB9O1xufVxuXG5mdW5jdGlvbiBjb250YWluQW55QXR0clNldChwb3NzaWJsZUF0dHJTZXRzLCBlbmNvZGUpIHtcbiAgcmV0dXJuIHBvc3NpYmxlQXR0clNldHMucmVkdWNlKCh2YWxpZCwgYXR0cnMpID0+IHtcbiAgICBjb25zdCBoYXNBdHRycyA9IGF0dHJzLnJlZHVjZShcbiAgICAgIChoYXNBdHRycywgYXR0cikgPT4gaGFzQXR0cnMgJiYgZW5jb2RlW2F0dHJdLFxuICAgICAgdHJ1ZVxuICAgICk7XG4gICAgcmV0dXJuIHZhbGlkIHx8IGhhc0F0dHJzO1xuICB9LCBmYWxzZSk7XG59XG5cbi8vIGZ1bmN0aW9uIGNoZWNrVmlld0F4aXNDb25zdHJhaW50KHBzZXVkb1RsKSB7XG4vLyAgIGxldCB5QXhpc1ZpZXdDaGFuZ2UsIG1hcmtWaWV3Q2hhbmdlcyA9IFtdLCB4QXhpc1ZpZXdDaGFuZ2U7XG4vLyAgIHBzZXVkb1RsLmNvbmNhdC5mb3JFYWNoKChzdGFnZSwgaSkgPT4ge1xuLy8gICAgIHN0YWdlLnN5bmMuZm9yRWFjaChwc2V1ZG9TdGVwID0+IHtcbi8vICAgICAgIGxldCBkZWx0YVcgPSBnZXQocHNldWRvU3RlcCwgXCJkaWZmXCIsIFwibWV0YVwiLCBcInZpZXdcIiwgXCJkZWx0YVdcIiksXG4vLyAgICAgICAgIGRlbHRhSCA9IGdldChwc2V1ZG9TdGVwLCBcImRpZmZcIiwgXCJtZXRhXCIsIFwidmlld1wiLCBcImRlbHRhSFwiKTtcblxuLy8gICAgICAgaWYgKHBzZXVkb1N0ZXAuZGlmZi5jb21wVHlwZSA9PT0gXCJheGlzXCIgJiYgcHNldWRvU3RlcC5kaWZmLmNvbXBOYW1lID09PSBcInhcIiAmJiAheEF4aXNWaWV3Q2hhbmdlKSB7XG4vLyAgICAgICAgIHhBeGlzVmlld0NoYW5nZSA9IHtcbi8vICAgICAgICAgICB3aWR0aENoYW5nZTogZGVsdGFXID4gMCA/IFwiaW5jXCIgOiAoZGVsdGFXIDwgMCA/IFwiZGVjXCIgOiBmYWxzZSksXG4vLyAgICAgICAgICAgb3JpZW50OiBwc2V1ZG9TdGVwLmRpZmYuaW5pdGlhbC5vcmllbnQsXG4vLyAgICAgICAgICAgd2hlbjogaVxuLy8gICAgICAgICB9XG4vLyAgICAgICB9XG4vLyAgICAgICBpZiAocHNldWRvU3RlcC5kaWZmLmNvbXBUeXBlID09PSBcImF4aXNcIiAmJiBwc2V1ZG9TdGVwLmRpZmYuY29tcE5hbWUgPT09IFwieVwiICYmICF5QXhpc1ZpZXdDaGFuZ2UpIHtcbi8vICAgICAgICAgeUF4aXNWaWV3Q2hhbmdlID0ge1xuLy8gICAgICAgICAgIGhlaWdodENoYW5nZTogZGVsdGFIID4gMCA/IFwiaW5jXCIgOiAoZGVsdGFIIDwgMCA/IFwiZGVjXCIgOiBmYWxzZSksXG4vLyAgICAgICAgICAgb3JpZW50OiBwc2V1ZG9TdGVwLmRpZmYuaW5pdGlhbC5vcmllbnQsXG4vLyAgICAgICAgICAgd2hlbjogaVxuLy8gICAgICAgICB9XG4vLyAgICAgICB9XG4vLyAgICAgICBpZiAocHNldWRvU3RlcC5kaWZmLmNvbXBUeXBlID09PSBcIm1hcmtcIiApIHtcbi8vICAgICAgICAgbWFya1ZpZXdDaGFuZ2VzLnB1c2goe1xuLy8gICAgICAgICAgIHdpZHRoQ2hhbmdlOiBkZWx0YVcgPiAwID8gXCJpbmNcIiA6IChkZWx0YVcgPCAwID8gXCJkZWNcIiA6IGZhbHNlKSxcbi8vICAgICAgICAgICBoZWlnaHRDaGFuZ2U6IGRlbHRhSCA+IDAgPyBcImluY1wiIDogKGRlbHRhSCA8IDAgPyBcImRlY1wiIDogZmFsc2UpLFxuLy8gICAgICAgICAgIHdoZW46IGlcbi8vICAgICAgICAgfSlcbi8vICAgICAgIH1cbi8vICAgICB9KVxuLy8gICB9KVxuLy8gICBpZiAoeEF4aXNWaWV3Q2hhbmdlLm9yaWVudCA9PT0gXCJib3R0b21cIikge1xuLy8gICAgIGlmICh4QXhpc1ZpZXdDaGFuZ2UuaGVpZ2h0Q2hhbmdlID09PSBcImluY1wiKSB7XG4vLyAgICAgICBpZiAoeEF4aXNWaWV3Q2hhbmdlLndoZW4gPiB5QXhpc1ZpZXdDaGFuZ2Uud2hlbikge1xuLy8gICAgICAgICByZXR1cm4gZmFsc2Vcbi8vICAgICAgIH0gZWxzZSBpZiAoeEF4aXNWaWV3Q2hhbmdlLndoZW4gPiBNYXRoLm1pbiguLi5tYXJrVmlld0NoYW5nZXMubWFwKGMgPT4gYy53aGVuKSkpIHtcbi8vICAgICAgICAgcmV0dXJuIGZhbHNlXG4vLyAgICAgICB9XG4vLyAgICAgfSBlbHNlIGlmICh4QXhpc1ZpZXdDaGFuZ2UuaGVpZ2h0Q2hhbmdlID09PSBcImRlY1wiKSB7XG4vLyAgICAgICBpZiAoeEF4aXNWaWV3Q2hhbmdlLndoZW4gPCB5QXhpc1ZpZXdDaGFuZ2Uud2hlbikge1xuLy8gICAgICAgICByZXR1cm4gZmFsc2Vcbi8vICAgICAgIH0gZWxzZSBpZiAoeEF4aXNWaWV3Q2hhbmdlLndoZW4gPCBNYXRoLm1heCguLi5tYXJrVmlld0NoYW5nZXMubWFwKGMgPT4gYy53aGVuKSkpIHtcbi8vICAgICAgICAgcmV0dXJuIGZhbHNlXG4vLyAgICAgICB9XG4vLyAgICAgfVxuLy8gICB9IGVsc2UgaWYgKHlBeGlzVmlld0NoYW5nZS5vcmllbnQgPT09IFwicmlnaHRcIiAmJlxuLy8gICAgIHlBeGlzVmlld0NoYW5nZS5oZWlnaHRDaGFuZ2UgPT09IFwiaW5jXCIpIHtcbi8vICAgICBjb25zb2xlLmVycm9yKFwiVE9ET1wiKTtcbi8vICAgfVxuLy8gICByZXR1cm4gdHJ1ZTtcbi8vIH1cblxuZXhwb3J0IHtcbiAgY2hlY2tNYXJrQ29tcFxuICAvLyBjaGVja1ZpZXdBeGlzQ29uc3RyYWludCBhcyBjaGVja1ZpZXdBeGlzQ29uc3RyYWludFxufTtcbiIsImltcG9ydCB7IGdldCwgZGVlcEVxdWFsIH0gZnJvbSBcIi4uL3V0aWwvdXRpbFwiO1xuaW1wb3J0IHsgTUlOX1BPU19ERUxUQSB9IGZyb20gXCIuL3V0aWxcIjtcblxuZnVuY3Rpb24gdmFsaWRhdGUocHNldWRvVGltZWxpbmUsIHN0YWdlTikge1xuICByZXR1cm4gKFxuICAgIGNoZWNrVmlld0F4aXNDb25zdHJhaW50KHBzZXVkb1RpbWVsaW5lKSAmJlxuICAgIGNoZWNrVmlld0xlZ2VuZENvbnN0cmFpbnQocHNldWRvVGltZWxpbmUpICYmXG4gICAgY2hlY2tVbmVtcHR5KHBzZXVkb1RpbWVsaW5lKSAmJlxuICAgIHBzZXVkb1RpbWVsaW5lLmNvbmNhdC5sZW5ndGggPT09IHN0YWdlTiAmJlxuICAgIGNoZWNrTWFya0NvbnN0cmFpbnQocHNldWRvVGltZWxpbmUpXG4gICk7XG59XG5mdW5jdGlvbiBjaGVja1VuZW1wdHkocHNldWRvVGwpIHtcbiAgcmV0dXJuICFwc2V1ZG9UbC5jb25jYXQuZmluZChzdGFnZSA9PiBzdGFnZS5zeW5jLmxlbmd0aCA9PT0gMCk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrVmlld0F4aXNDb25zdHJhaW50KHBzZXVkb1RsKSB7XG4gIGxldCB5QXhpc1ZpZXdDaGFuZ2UsIG1hcmtWaWV3Q2hhbmdlcyA9IFtdLCB4QXhpc1ZpZXdDaGFuZ2U7XG4gIHBzZXVkb1RsLmNvbmNhdC5mb3JFYWNoKChzdGFnZSwgaSkgPT4ge1xuICAgIHN0YWdlLnN5bmMuZm9yRWFjaChwc2V1ZG9TdGVwID0+IHtcbiAgICAgIGxldCBkZWx0YVcgPSBnZXQocHNldWRvU3RlcCwgXCJkaWZmXCIsIFwibWV0YVwiLCBcInZpZXdcIiwgXCJ4XCIpLFxuICAgICAgICBkZWx0YUggPSBnZXQocHNldWRvU3RlcCwgXCJkaWZmXCIsIFwibWV0YVwiLCBcInZpZXdcIiwgXCJ5XCIpO1xuXG4gICAgICBpZiAocHNldWRvU3RlcC5kaWZmLmNvbXBUeXBlID09PSBcImF4aXNcIiAmJiBwc2V1ZG9TdGVwLmRpZmYuY29tcE5hbWUgPT09IFwieFwiICYmICF4QXhpc1ZpZXdDaGFuZ2UpIHtcbiAgICAgICAgeEF4aXNWaWV3Q2hhbmdlID0ge1xuICAgICAgICAgIHdpZHRoOiBkZWx0YVcgPj0gTUlOX1BPU19ERUxUQSA/IFwiaW5jXCIgOiAoZGVsdGFXIDw9IC1NSU5fUE9TX0RFTFRBID8gXCJkZWNcIiA6IGZhbHNlKSxcbiAgICAgICAgICBoZWlnaHQ6IGRlbHRhSCA+PSBNSU5fUE9TX0RFTFRBID8gXCJpbmNcIiA6IChkZWx0YUggPD0gLU1JTl9QT1NfREVMVEEgPyBcImRlY1wiIDogZmFsc2UpLFxuICAgICAgICAgIG9yaWVudDogZ2V0KHBzZXVkb1N0ZXAsIFwiZGlmZlwiLCBcImluaXRpYWxcIiwgXCJvcmllbnRcIikgfHwgZ2V0KHBzZXVkb1N0ZXAsIFwiZGlmZlwiLCBcImZpbmFsXCIsIFwib3JpZW50XCIpLFxuICAgICAgICAgIHdoZW46IGlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChwc2V1ZG9TdGVwLmRpZmYuY29tcFR5cGUgPT09IFwiYXhpc1wiICYmIHBzZXVkb1N0ZXAuZGlmZi5jb21wTmFtZSA9PT0gXCJ5XCIgJiYgIXlBeGlzVmlld0NoYW5nZSkge1xuICAgICAgICB5QXhpc1ZpZXdDaGFuZ2UgPSB7XG4gICAgICAgICAgd2lkdGg6IGRlbHRhVyA+PSBNSU5fUE9TX0RFTFRBID8gXCJpbmNcIiA6IChkZWx0YVcgPD0gLU1JTl9QT1NfREVMVEEgPyBcImRlY1wiIDogZmFsc2UpLFxuICAgICAgICAgIGhlaWdodDogZGVsdGFIID49IE1JTl9QT1NfREVMVEEgPyBcImluY1wiIDogKGRlbHRhSCA8PSAtTUlOX1BPU19ERUxUQSA/IFwiZGVjXCIgOiBmYWxzZSksXG4gICAgICAgICAgb3JpZW50OiBnZXQocHNldWRvU3RlcCwgXCJkaWZmXCIsIFwiaW5pdGlhbFwiLCBcIm9yaWVudFwiKSB8fCBnZXQocHNldWRvU3RlcCwgXCJkaWZmXCIsIFwiZmluYWxcIiwgXCJvcmllbnRcIiksXG4gICAgICAgICAgd2hlbjogaVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAocHNldWRvU3RlcC5kaWZmLmNvbXBUeXBlID09PSBcIm1hcmtcIiApIHtcbiAgICAgICAgbWFya1ZpZXdDaGFuZ2VzLnB1c2goe1xuICAgICAgICAgIHdpZHRoOiBkZWx0YVcgPj0gTUlOX1BPU19ERUxUQSA/IFwiaW5jXCIgOiAoZGVsdGFXIDw9IC1NSU5fUE9TX0RFTFRBID8gXCJkZWNcIiA6IGZhbHNlKSxcbiAgICAgICAgICBoZWlnaHQ6IGRlbHRhSCA+PSBNSU5fUE9TX0RFTFRBID8gXCJpbmNcIiA6IChkZWx0YUggPD0gLU1JTl9QT1NfREVMVEEgPyBcImRlY1wiIDogZmFsc2UpLFxuICAgICAgICAgIHdoZW46IGlcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIGZvciAoY29uc3QgY29uZGl0aW9uIG9mIFtbeEF4aXNWaWV3Q2hhbmdlLCB5QXhpc1ZpZXdDaGFuZ2UsIFwiYm90dG9tXCIsIFwiaGVpZ2h0XCJdLCBbeUF4aXNWaWV3Q2hhbmdlLCB4QXhpc1ZpZXdDaGFuZ2UsIFwicmlnaHRcIiwgXCJ3aWR0aFwiXV0pIHtcbiAgICBsZXQgW2F4aXMsIG90aGVyQXhpcywgb3JpZW50LCBzaWRlXSA9IGNvbmRpdGlvbjtcblxuICAgIGlmIChnZXQoYXhpcywgXCJvcmllbnRcIikgPT09IG9yaWVudCkge1xuICAgICAgaWYgKGF4aXNbc2lkZV0gPT09IFwiaW5jXCIpIHtcbiAgICAgICAgaWYgKGF4aXMud2hlbiA+IGdldChvdGhlckF4aXMsIFwid2hlblwiKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBpZiAoKG1hcmtWaWV3Q2hhbmdlcy5sZW5ndGggPiAwKSAmJlxuICAgICAgICAgIChheGlzLndoZW4gPiBNYXRoLm1pbiguLi5tYXJrVmlld0NoYW5nZXMubWFwKGMgPT4gYy53aGVuKSkpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGF4aXNbc2lkZV0gPT09IFwiZGVjXCIpIHtcbiAgICAgICAgaWYgKGF4aXMud2hlbiA8IGdldChvdGhlckF4aXMsIFwid2hlblwiKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmICgobWFya1ZpZXdDaGFuZ2VzLmxlbmd0aCA+IDApICYmXG4gICAgICAgICAgKGF4aXMud2hlbiA8IE1hdGgubWF4KC4uLm1hcmtWaWV3Q2hhbmdlcy5tYXAoYyA9PiBjLndoZW4pKSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY2hlY2tWaWV3TGVnZW5kQ29uc3RyYWludChwc2V1ZG9UbCkge1xuICBjb25zdCB2aWV3Q2hhbmdlcyA9IHtcbiAgICBtYXJrczogW10sXG4gICAgbGVnZW5kczogW11cbiAgfTtcblxuICBwc2V1ZG9UbC5jb25jYXQuZm9yRWFjaCgoc3RhZ2UsIGkpID0+IHtcbiAgICBzdGFnZS5zeW5jLmZvckVhY2gocHNldWRvU3RlcCA9PiB7XG4gICAgICBjb25zdCBkZWx0YSA9IHtcbiAgICAgICAgeDogZ2V0KHBzZXVkb1N0ZXAsIFwiZGlmZlwiLCBcIm1ldGFcIiwgXCJ2aWV3XCIsIFwieFwiKSxcbiAgICAgICAgeTogZ2V0KHBzZXVkb1N0ZXAsIFwiZGlmZlwiLCBcIm1ldGFcIiwgXCJ2aWV3XCIsIFwieVwiKSxcbiAgICAgICAgd2lkdGg6IGdldChwc2V1ZG9TdGVwLCBcImRpZmZcIiwgXCJtZXRhXCIsIFwidmlld1wiLCBcImRlbHRhV1wiKSxcbiAgICAgICAgaGVpZ2h0OiBnZXQocHNldWRvU3RlcCwgXCJkaWZmXCIsIFwibWV0YVwiLCBcInZpZXdcIiwgXCJkZWx0YUhcIilcbiAgICAgIH07XG5cbiAgICAgIGlmIChbXCJsZWdlbmRcIiwgXCJtYXJrXCJdLmluZGV4T2YocHNldWRvU3RlcC5kaWZmLmNvbXBUeXBlKSA+PSAwKSB7XG4gICAgICAgIGNvbnN0IHZjID0ge1xuICAgICAgICAgIHg6XG4gICAgICAgICAgICBkZWx0YS54ID49IE1JTl9QT1NfREVMVEFcbiAgICAgICAgICAgICAgPyBcImluY1wiXG4gICAgICAgICAgICAgIDogZGVsdGEueCA8PSAtTUlOX1BPU19ERUxUQVxuICAgICAgICAgICAgICAgID8gXCJkZWNcIlxuICAgICAgICAgICAgICAgIDogZmFsc2UsXG4gICAgICAgICAgeTpcbiAgICAgICAgICAgIGRlbHRhLnkgPj0gTUlOX1BPU19ERUxUQVxuICAgICAgICAgICAgICA/IFwiaW5jXCJcbiAgICAgICAgICAgICAgOiBkZWx0YS55IDw9IC1NSU5fUE9TX0RFTFRBXG4gICAgICAgICAgICAgICAgPyBcImRlY1wiXG4gICAgICAgICAgICAgICAgOiBmYWxzZSxcbiAgICAgICAgICB3aWR0aDpcbiAgICAgICAgICAgIGRlbHRhLndpZHRoID49IE1JTl9QT1NfREVMVEFcbiAgICAgICAgICAgICAgPyBcImluY1wiXG4gICAgICAgICAgICAgIDogZGVsdGEud2lkdGggPD0gLU1JTl9QT1NfREVMVEFcbiAgICAgICAgICAgICAgICA/IFwiZGVjXCJcbiAgICAgICAgICAgICAgICA6IGZhbHNlLFxuICAgICAgICAgIGhlaWdodDpcbiAgICAgICAgICAgIGRlbHRhLmhlaWdodCA+PSBNSU5fUE9TX0RFTFRBXG4gICAgICAgICAgICAgID8gXCJpbmNcIlxuICAgICAgICAgICAgICA6IGRlbHRhLmhlaWdodCA8PSAtTUlOX1BPU19ERUxUQVxuICAgICAgICAgICAgICAgID8gXCJkZWNcIlxuICAgICAgICAgICAgICAgIDogZmFsc2UsXG4gICAgICAgICAgd2hlbjogaVxuICAgICAgICB9O1xuICAgICAgICBpZiAodmMueCB8fCB2Yy55IHx8IHZjLndpZHRoIHx8IHZjLmhlaWdodCkge1xuICAgICAgICAgIGlmIChwc2V1ZG9TdGVwLmRpZmYuY29tcFR5cGUgPT09IFwibGVnZW5kXCIpIHtcbiAgICAgICAgICAgIHZjLm9yaWVudCA9XG4gICAgICAgICAgICAgIGdldChwc2V1ZG9TdGVwLCBcImRpZmZcIiwgXCJpbml0aWFsXCIsIFwib3JpZW50XCIpIHx8XG4gICAgICAgICAgICAgIGdldChwc2V1ZG9TdGVwLCBcImRpZmZcIiwgXCJmaW5hbFwiLCBcIm9yaWVudFwiKSB8fFxuICAgICAgICAgICAgICBcInJpZ2h0XCI7XG4gICAgICAgICAgICB2aWV3Q2hhbmdlcy5sZWdlbmRzLnB1c2godmMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2aWV3Q2hhbmdlcy5tYXJrcy5wdXNoKHZjKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG4gIGlmICh2aWV3Q2hhbmdlcy5tYXJrcy5sZW5ndGggPT09IDAgfHwgdmlld0NoYW5nZXMubGVnZW5kcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGZvciAoY29uc3QgbWFya1ZpZXdDaGFuZ2Ugb2Ygdmlld0NoYW5nZXMubWFya3MpIHtcbiAgICBjb25zdCByaWdodExlZ2VuZFZDcyA9IHZpZXdDaGFuZ2VzLmxlZ2VuZHMuZmlsdGVyKFxuICAgICAgdmMgPT4gdmMub3JpZW50ID09PSBcInJpZ2h0XCJcbiAgICApO1xuICAgIGlmIChyaWdodExlZ2VuZFZDcy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAobWFya1ZpZXdDaGFuZ2Uud2lkdGggPT09IFwiaW5jXCIpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG1hcmtWaWV3Q2hhbmdlLndoZW4gPFxuICAgICAgICAgIE1hdGgubWluKFxuICAgICAgICAgICAgLi4ucmlnaHRMZWdlbmRWQ3MuZmlsdGVyKHZjID0+IHZjLnggPT09IFwiaW5jXCIpLm1hcChjID0+IGMud2hlbilcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChtYXJrVmlld0NoYW5nZS53aWR0aCA9PT0gXCJkZWNcIikge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbWFya1ZpZXdDaGFuZ2Uud2hlbiA+XG4gICAgICAgICAgTWF0aC5tYXgoXG4gICAgICAgICAgICAuLi5yaWdodExlZ2VuZFZDcy5maWx0ZXIodmMgPT4gdmMueCA9PT0gXCJkZWNcIikubWFwKGMgPT4gYy53aGVuKVxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGJvdHRvbUxlZ2VuZFZDcyA9IHZpZXdDaGFuZ2VzLmxlZ2VuZHMuZmlsdGVyKFxuICAgICAgdmMgPT4gdmMub3JpZW50ID09PSBcImJvdHRvbVwiXG4gICAgKTtcbiAgICBpZiAoYm90dG9tTGVnZW5kVkNzLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmIChtYXJrVmlld0NoYW5nZS5oZWlnaHQgPT09IFwiaW5jXCIpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG1hcmtWaWV3Q2hhbmdlLndoZW4gPFxuICAgICAgICAgIE1hdGgubWluKFxuICAgICAgICAgICAgLi4uYm90dG9tTGVnZW5kVkNzLmZpbHRlcih2YyA9PiB2Yy55ID09PSBcImluY1wiKS5tYXAoYyA9PiBjLndoZW4pXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobWFya1ZpZXdDaGFuZ2UuaGVpZ2h0ID09PSBcImRlY1wiKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBtYXJrVmlld0NoYW5nZS53aGVuID5cbiAgICAgICAgICBNYXRoLm1heChcbiAgICAgICAgICAgIC4uLmJvdHRvbUxlZ2VuZFZDcy5maWx0ZXIodmMgPT4gdmMueSA9PT0gXCJkZWNcIikubWFwKGMgPT4gYy53aGVuKVxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGNoZWNrTWFya0NvbnN0cmFpbnQocHNldWRvVGwpIHtcbiAgZm9yIChjb25zdCBzdGFnZSBvZiBwc2V1ZG9UbC5jb25jYXQpIHtcbiAgICBjb25zdCBtYXJrUHNlZHVvU3RlcHMgPSBzdGFnZS5zeW5jLmZpbHRlcihcbiAgICAgIHBzZXVkb1N0ZXAgPT4gcHNldWRvU3RlcC5kaWZmLmNvbXBUeXBlID09PSBcIm1hcmtcIlxuICAgICk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXJrUHNlZHVvU3RlcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHBzZXVkb1N0ZXAgPSBtYXJrUHNlZHVvU3RlcHNbaV07XG4gICAgICBpZiAoXG4gICAgICAgIChcbiAgICAgICAgICBkZWVwRXF1YWwocHNldWRvU3RlcC5mYWN0b3JTZXRzLmN1cnJlbnQsIFtcImRhdGFcIl0pIHx8XG4gICAgICAgICAgZGVlcEVxdWFsKHBzZXVkb1N0ZXAuZmFjdG9yU2V0cy5jdXJyZW50LCBbXCJkYXRhXCIsIFwibWFya3R5cGVcIl0pXG4gICAgICAgICkgJiZcbiAgICAgICAgcHNldWRvU3RlcC5kaWZmLm1ldGEuZGF0YS5yb3cgPT09IGZhbHNlXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLypcbiAgICAgIGlmIHBzZXVkb1N0ZXAuZmFjdG9yU2V0cy5jdXJyZW50IGhhcyBcImRhdGFcIlxuICAgICAgICYmIHBzZXVkb1N0ZXAuZGlmZi5tZXRhLmRhdGEucm93ID09PSBmYWxzZVxuICAgICAgICYmIHBzZXVkb1N0ZXAuZGlmZi5pbml0aWFsLmVuY29kZS5cbiAgICAgICovXG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgeyBjaGVja1ZpZXdBeGlzQ29uc3RyYWludCwgdmFsaWRhdGUsIGNoZWNrVW5lbXB0eSB9O1xuIiwiaW1wb3J0IHsgYXBwbHlNYXJrRGlmZnMgfSBmcm9tIFwiLi9kaWZmQXBwbGllclwiO1xuaW1wb3J0IHsgY2hlY2tNYXJrQ29tcCB9IGZyb20gXCIuL21hcmtDb21wQ2hlY2tlclwiO1xuaW1wb3J0IHsgdmFsaWRhdGUgfSBmcm9tIFwiLi9wc2V1ZG9UaW1lbGluZVZhbGlkYXRvclwiO1xuaW1wb3J0IHsgY29weSwgZW51bUFycmF5c0J5SXRlbXMgfSBmcm9tIFwiLi4vdXRpbC91dGlsXCI7XG5pbXBvcnQgeyBNSU5fUE9TX0RFTFRBIH0gZnJvbSBcIi4vdXRpbFwiO1xuXG4vLyBFbnVlbWVyYXRlIGEgc2V0IG9mIHN0ZXBzICg8c3RhZ2VOKSBieSBzcGxpdHRpbmcgdGhlIGRpZmZzLlxuZnVuY3Rpb24gZW51bWVyYXRlUHNldWRvVGltZWxpbmVzKGRpZmZzLCBzdGFnZU4sIHJhd0luZm8sIHRpbWluZykge1xuICAvLyBBc3N1bWU6IEF4ZXMgYW5kIGxlZ2VuZHMgY2Fubm90IGJlIHNwbGl0dGVkXG4gIC8vIEFzc3VtZTogVGhlcmUgaXMgb25seSBvbmUgbWFyayBjb21wb25lbnQuIChubyBhZGQvcmVtb3ZlIG9mIHRoZSBtYXJrIGNvbXBvbmVudHMpXG5cbiAgLy8gMC4gZmluZCB0aGUgbWFyayBjb21wb25lbnRzLlxuICBjb25zdCBtYXJrRGlmZnMgPSBkaWZmcy5jb21wRGlmZnMuZmlsdGVyKFxuICAgIGRpZmYgPT4gZGlmZi5jb21wVHlwZSA9PT0gXCJtYXJrXCJcbiAgKTtcblxuICBjb25zdCBlbnVtZWRNYXJrc1B1c2Vkb1N0ZXBzID0gbWFya0RpZmZzLm1hcChtYXJrRGlmZiA9PiB7XG4gICAgLy8gMS4gZmluZCB2YWxpZCBzcGxpdHRpbmcgZmFjdG9ycyBvZiB0aGUgbWFyayBjb21wb25lbnRzLlxuICAgIGNvbnN0IHsgYWxsRmFjdG9ycywgZXh0cmFGYWN0b3JzQnlNYXJrdHlwZSB9ID0gZmluZEFsbEZhY3RvcnMobWFya0RpZmYpO1xuXG4gICAgLy8gMi4gZW51bWVyYXRlIGJ5IGFzc2lnbmluZyBhIHZhbHVlIGFtb25nIFswLCAuLi4sIHN0YWdlTiAtMV0gb24gZWFjaCBmYWN0b3JcbiAgICBjb25zdCBza2lwcGluZ0NvbmRpdGlvbiA9IG5ldyBTa2lwcGluZ0NvbmRpdGlvbnMoKTtcbiAgICBjb25zdCBlbnVtZWQgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTWF0aC5wb3coc3RhZ2VOLCBhbGxGYWN0b3JzLmxlbmd0aCk7IGkrKykge1xuICAgICAgY29uc3QgZmFjdG9yQXNzaWdubWVudCA9IGdldEZhY3RvckFzc2lnbm1lbnQoaSwgYWxsRmFjdG9ycy5sZW5ndGgsIHN0YWdlTik7XG5cbiAgICAgIGxldCB2YWxpZCA9IHRydWU7XG4gICAgICBjb25zdCBmYWN0b3JTZXRzID0gW107XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHN0YWdlTiAtIDE7IGorKykge1xuICAgICAgICBjb25zdCBhcHBseWluZ0ZhY3RvcnMgPSBhbGxGYWN0b3JzLmZpbHRlcigoZmFjdG9yLCBmYWN0b3JJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBmYWN0b3JBc3NpZ25tZW50W2ZhY3RvcklkXSA+PSBzdGFnZU4gLSBqIC0gMTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHNraXBwaW5nQ29uZGl0aW9uLmNoZWNrKGFwcGx5aW5nRmFjdG9ycykpIHtcbiAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWFya0NvbXBTdW1tYXJ5ID0gYXBwbHlNYXJrRGlmZnMoXG4gICAgICAgICAgbWFya0RpZmYsXG4gICAgICAgICAgYXBwbHlpbmdGYWN0b3JzLFxuICAgICAgICAgIHJhd0luZm8sXG4gICAgICAgICAgZXh0cmFGYWN0b3JzQnlNYXJrdHlwZVxuICAgICAgICApO1xuICAgICAgICAvLyAzLiBDaGVjayBpZiB0aGUgaW50ZXJtZWRpYXRlIG1hcmsgY29tcG9uZW50cyBhcmUgdmFsaWQuIElmIG5vdCwgZXhjbHVkZSB0aGUgZW51bWVyYXRlZCBzdGVwcy5cbiAgICAgICAgY29uc3QgeyByZWFzb25zIH0gPSBjaGVja01hcmtDb21wKG1hcmtDb21wU3VtbWFyeSk7XG5cbiAgICAgICAgaWYgKHJlYXNvbnMpIHtcbiAgICAgICAgICAvLyByZWdpc3RlciBhIG5ldyBza2lwcGluZyBjb25kaXRpb25cbiAgICAgICAgICBjb25zdCBuZXdTa2lwcGluZ0NvbmRpdGlvbiA9IGFsbEZhY3RvcnNcbiAgICAgICAgICAgIC5maWx0ZXIoZmFjdG9yID0+XG4gICAgICAgICAgICAgIHJlYXNvbnMuZmluZChyZWFzb24gPT4gZmFjdG9yLmluZGV4T2YocmVhc29uKSA+PSAwKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLm1hcChmYWN0b3IgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4ge2ZhY3RvciwgaW5jbHVkZTogYXBwbHlpbmdGYWN0b3JzLmluZGV4T2YoZmFjdG9yKSA+PSAwfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIHNraXBwaW5nQ29uZGl0aW9uLnJlZ2lzdGVyKG5ld1NraXBwaW5nQ29uZGl0aW9uKTtcblxuICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgIWZhY3RvclNldHMuZmluZChcbiAgICAgICAgICAgIGFwcEZjdHJzID0+IGFwcEZjdHJzLnRvU3RyaW5nKCkgPT09IGFwcGx5aW5nRmFjdG9ycy50b1N0cmluZygpXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICBmYWN0b3JTZXRzLnB1c2goYXBwbHlpbmdGYWN0b3JzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodmFsaWQpIHtcbiAgICAgICAgZmFjdG9yU2V0cy5wdXNoKGFsbEZhY3RvcnMpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWVudW1lZC5maW5kKFxuICAgICAgICAgICAgZmN0clNldHMgPT4gZmN0clNldHMudG9TdHJpbmcoKSA9PT0gZmFjdG9yU2V0cy50b1N0cmluZygpXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICBlbnVtZWQucHVzaChmYWN0b3JTZXRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlbnVtZWQubWFwKGZhY3RvclNldHMgPT4ge1xuICAgICAgbGV0IHByZXZGYWN0b3JTZXQ7XG4gICAgICByZXR1cm4gZmFjdG9yU2V0cy5tYXAoZmFjdG9yU2V0ID0+IHtcbiAgICAgICAgbGV0IG5ld1BzZXVkb1N0ZXAgPSB7XG4gICAgICAgICAgZGlmZjogbWFya0RpZmYsXG4gICAgICAgICAgZmFjdG9yU2V0czoge1xuICAgICAgICAgICAgY3VycmVudDogcHJldkZhY3RvclNldFxuICAgICAgICAgICAgICA/IGZhY3RvclNldC5leGNsdWRlKHByZXZGYWN0b3JTZXQpXG4gICAgICAgICAgICAgIDogZmFjdG9yU2V0LFxuICAgICAgICAgICAgYXBwbGllZDogZmFjdG9yU2V0LFxuICAgICAgICAgICAgYWxsOiBhbGxGYWN0b3JzLFxuICAgICAgICAgICAgZXh0cmFCeU1hcmt0eXBlOiBleHRyYUZhY3RvcnNCeU1hcmt0eXBlXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBwcmV2RmFjdG9yU2V0ID0gZmFjdG9yU2V0O1xuICAgICAgICByZXR1cm4gbmV3UHNldWRvU3RlcDtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gIH0pO1xuXG4gIGNvbnN0IGF4ZXNwc2V1ZG9TdGVwcyA9IGdldEF4aXNQc2V1ZG9TdGVwcyhkaWZmcyk7XG5cbiAgY29uc3QgbGVnZW5kc3BzZXVkb1N0ZXBzID0gZ2V0TGVnZW5kUHNldWRvU3RlcHMoZGlmZnMpO1xuXG4gIGxldCBwc2V1ZG9UaW1lbGluZXM7XG4gIGlmIChlbnVtZWRNYXJrc1B1c2Vkb1N0ZXBzLmxlbmd0aCA9PT0gMSkge1xuICAgIHBzZXVkb1RpbWVsaW5lcyA9IGVudW1BcnJheXNCeUl0ZW1zKFxuICAgICAgZW51bWVkTWFya3NQdXNlZG9TdGVwc1swXSxcbiAgICAgIGxlZ2VuZHNwc2V1ZG9TdGVwcy5jb25jYXQoYXhlc3BzZXVkb1N0ZXBzKSxcbiAgICAgIGVudW1UbEJ5U3RlcFxuICAgICkubWFwKHBzZXVkb1RsID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbmNhdDogcHNldWRvVGwubWFwKHN0YWdlID0+IHtcbiAgICAgICAgICByZXR1cm4geyBzeW5jOiBBcnJheS5pc0FycmF5KHN0YWdlKSA/IHN0YWdlIDogW3N0YWdlXSB9O1xuICAgICAgICB9KVxuICAgICAgfTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgXCJDdXJyZW50bHksIEdlbWluaSBSZWNvbW1lbmRhdGlvbiBvbmx5IHN1cHBvcnRzIGEgc2luZ2xlIG1hcmsgd2l0aG91dCBhZGRpbmcgb3IgcmVtb3ZpbmcuXCJcbiAgICApO1xuICAgIGNvbnNvbGUuZXJyb3IoXCJUT0RPOiBjcm9zcyBqb2luIHRoZSBwc2V1ZG8gdGltZWxpbmVzIG9mIGVhY2ggbWFyay5cIik7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIHBzZXVkb1RpbWVsaW5lc1xuICAgICAgLm1hcChwc2V1ZG9UbCA9PiB7XG4gICAgICAgIHBzZXVkb1RsLmNvbmNhdCA9IHBzZXVkb1RsLmNvbmNhdC5tYXAoc3RhZ2UgPT4ge1xuICAgICAgICAgIGxldCBjdXJyU3luYyA9IHN0YWdlLnN5bmM7XG5cbiAgICAgICAgICAvLyBmaWx0ZXIgZW1wdHkgbWFyayBwU3RlcFxuICAgICAgICAgIGN1cnJTeW5jID0gY3VyclN5bmMuZmlsdGVyKHBTdGVwID0+IHtcbiAgICAgICAgICAgIHJldHVybiAocFN0ZXAuZGlmZi5jb21wVHlwZSAhPT0gXCJtYXJrXCIpIHx8XG4gICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgICAgKHBTdGVwLmZhY3RvclNldHMuYXBwbGllZC5sZW5ndGggPT09IDApIHx8XG4gICAgICAgICAgICAgICAgICAocFN0ZXAuZmFjdG9yU2V0cy5jdXJyZW50Lmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICAgICApICYmXG4gICAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAgIChwU3RlcC5mYWN0b3JTZXRzLmFsbC5pbmRleE9mKFwiYWRkXCIpID49IDApICYmXG4gICAgICAgICAgICAgICAgICAocFN0ZXAuZmFjdG9yU2V0cy5hcHBsaWVkLmluZGV4T2YoXCJhZGRcIikgPCAwKVxuICAgICAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgICAgKHBTdGVwLmZhY3RvclNldHMuYWxsLmluZGV4T2YoXCJyZW1vdmVcIikgPj0gMCkgJiZcbiAgICAgICAgICAgICAgICAgIChwU3RlcC5mYWN0b3JTZXRzLmFwcGxpZWQubGVuZ3RoICE9PSBwU3RlcC5mYWN0b3JTZXRzLmN1cnJlbnQubGVuZ3RoKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgIH0pO1xuXG5cblxuICAgICAgICAgIHJldHVybiB7IHN5bmM6IGN1cnJTeW5jIH07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcHNldWRvVGw7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcihwc2V1ZG9UbCA9PiB2YWxpZGF0ZShwc2V1ZG9UbCwgc3RhZ2VOKSlcbiAgICAgIC8vIC5tYXAoKHBzZXVkb1RsLCBpKSA9PiBhcHBlbmRHdWlkZU1vdmVzKHBzZXVkb1RsLCBheGVzcHNldWRvU3RlcHMsIGxlZ2VuZHNwc2V1ZG9TdGVwcykpXG4gICAgICAubWFwKHBzZXVkb1RsID0+IGFwcGVuZFZpZXdEaWZmKHBzZXVkb1RsLCBkaWZmcy52aWV3RGlmZnMpKVxuICAgICAgLm1hcChwc2V1ZG9UbCA9PiBhcHBlbmRHcmlkQ2hhbmdlcyhwc2V1ZG9UbCkpXG4gICAgICAubWFwKHBzZXVkb1RsID0+IGFwcGVuZFRpbWluZyhwc2V1ZG9UbCwgdGltaW5nKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gYXBwZW5kVGltaW5nKHBzZXVkb1RsLCB0aW1pbmcgPSB7fSkge1xuICBjb25zdCB0b3RhbER1cmF0aW9uID0gdGltaW5nLnRvdGFsRHVyYXRpb24gfHwgMjAwMDtcbiAgcHNldWRvVGwuY29uY2F0LmZvckVhY2goc3RhZ2UgPT4ge1xuICAgIGZvciAoY29uc3QgcHNldWRvU3RlcCBvZiBzdGFnZS5zeW5jKSB7XG4gICAgICBwc2V1ZG9TdGVwLnRpbWluZyA9IHtcbiAgICAgICAgZHVyYXRpb246IHsgcmF0aW86IE1hdGguZmxvb3IoMTAwIC8gcHNldWRvVGwuY29uY2F0Lmxlbmd0aCkgLyAxMDAgfVxuICAgICAgfTtcblxuICAgIH1cbiAgfSk7XG4gIHBzZXVkb1RsLnRvdGFsRHVyYXRpb24gPSB0b3RhbER1cmF0aW9uO1xuICByZXR1cm4gcHNldWRvVGw7XG59XG5mdW5jdGlvbiBnZXRMZWdlbmRQc2V1ZG9TdGVwcyhkaWZmcykge1xuICByZXR1cm4gZGlmZnMuY29tcERpZmZzXG4gICAgLmZpbHRlcihcbiAgICAgIGRpZmYgPT5cbiAgICAgICAgZGlmZi5jb21wVHlwZSA9PT0gXCJsZWdlbmRcIiAmJlxuICAgICAgICAoZGlmZi5tZXRhLnNjYWxlIHx8XG4gICAgICAgICAgZGlmZi5tZXRhLmVuY29kZSB8fFxuICAgICAgICAgIGRpZmYubWV0YS5hZGQgfHxcbiAgICAgICAgICBkaWZmLm1ldGEucmVtb3ZlIHx8XG4gICAgICAgICAgTWF0aC5hYnMoZGlmZi5tZXRhLnZpZXcueCkgLSBNSU5fUE9TX0RFTFRBID4gMCB8fFxuICAgICAgICAgIE1hdGguYWJzKGRpZmYubWV0YS52aWV3LnkpIC0gTUlOX1BPU19ERUxUQSA+IDAgfHxcbiAgICAgICAgICBNYXRoLmFicyhkaWZmLm1ldGEudmlldy5kZWx0YUgpIC0gTUlOX1BPU19ERUxUQSA+IDAgfHxcbiAgICAgICAgICBNYXRoLmFicyhkaWZmLm1ldGEudmlldy5kZWx0YVcpIC0gTUlOX1BPU19ERUxUQSA+IDApXG4gICAgKVxuICAgIC5yZWR1Y2UoKHN0ZXBzLCBkaWZmKSA9PiB7XG4gICAgICBsZXQgZmFjdG9ycyA9IFtdO1xuICAgICAgaWYgKGRpZmYubWV0YS5hZGQpIHtcbiAgICAgICAgZmFjdG9ycyA9IFtgYWRkLiR7ZGlmZi5tZXRhLnVzZWRTY2FsZXMuc29ydCgpLmpvaW4oXCJfXCIpfWBdO1xuICAgICAgfSBlbHNlIGlmIChkaWZmLm1ldGEucmVtb3ZlKSB7XG4gICAgICAgIGZhY3RvcnMgPSBbYHJlbW92ZS4ke2RpZmYubWV0YS51c2VkU2NhbGVzLnNvcnQoKS5qb2luKFwiX1wiKX1gXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChkaWZmLm1ldGEuc2NhbGUpIHtcbiAgICAgICAgICBmYWN0b3JzID0gZmFjdG9ycy5jb25jYXQoT2JqZWN0LmtleXMoZGlmZi5tZXRhLnNjYWxlKS5tYXAoc2NOYW1lID0+IGBzY2FsZS4ke3NjTmFtZX1gKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRpZmYubWV0YS5lbmNvZGUpIHtcbiAgICAgICAgICBmYWN0b3JzLnB1c2goXCJlbmNvZGVcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRpZmYubWV0YS52aWV3LnggIT09IDAgfHwgZGlmZi5tZXRhLnZpZXcueSAhPT0gMCkge1xuICAgICAgICAgIGZhY3RvcnMucHVzaChcImVuY29kZS5wb3NpdGlvblwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyByZXR1cm4gc3RlcHMuY29uY2F0KFxuICAgICAgLy8gICBmYWN0b3JzLm1hcChmY3RyID0+IHtcbiAgICAgIC8vICAgICByZXR1cm4geyBkaWZmOiBkaWZmLCBmYWN0b3JTZXRzOiB7Y3VycmVudDogW2ZjdHJdLCAgYWxsOiBmYWN0b3JzfSB9XG4gICAgICAvLyAgIH0pXG4gICAgICAvLyApO1xuICAgICAgcmV0dXJuIHN0ZXBzLmNvbmNhdCh7IGRpZmYsIGZhY3RvclNldHM6IHtjdXJyZW50OiBmYWN0b3JzLCAgYWxsOiBmYWN0b3JzfSB9KTtcbiAgICB9LCBbXSk7XG59XG5mdW5jdGlvbiBnZXRBeGlzUHNldWRvU3RlcHMoZGlmZnMpIHtcbiAgcmV0dXJuIGRpZmZzLmNvbXBEaWZmc1xuICAgIC5maWx0ZXIoXG4gICAgICBkaWZmID0+XG4gICAgICAgIGRpZmYuY29tcFR5cGUgPT09IFwiYXhpc1wiICYmXG4gICAgICAgIChkaWZmLm1ldGEuc2NhbGUgfHxcbiAgICAgICAgICBkaWZmLm1ldGEuZW5jb2RlIHx8XG4gICAgICAgICAgZGlmZi5tZXRhLmFkZCB8fFxuICAgICAgICAgIGRpZmYubWV0YS5yZW1vdmUgfHxcbiAgICAgICAgICBNYXRoLmFicyhkaWZmLm1ldGEudmlldy54KSAtIE1JTl9QT1NfREVMVEEgPiAwIHx8XG4gICAgICAgICAgTWF0aC5hYnMoZGlmZi5tZXRhLnZpZXcueSkgLSBNSU5fUE9TX0RFTFRBID4gMCB8fFxuICAgICAgICAgIE1hdGguYWJzKGRpZmYubWV0YS52aWV3LmRlbHRhSCkgLSBNSU5fUE9TX0RFTFRBID4gMCB8fFxuICAgICAgICAgIE1hdGguYWJzKGRpZmYubWV0YS52aWV3LmRlbHRhVykgLSBNSU5fUE9TX0RFTFRBID4gMClcbiAgICApXG4gICAgLmZpbHRlcihkaWZmID0+IHtcbiAgICAgIGlmIChkaWZmLm1ldGEuc2NhbGVbZGlmZi5tZXRhLnVzZWRTY2FsZXNbMF1dKSB7XG4gICAgICAgIGNvbnN0IHNjYWxlRGlmZiA9IGRpZmYubWV0YS5zY2FsZVtkaWZmLm1ldGEudXNlZFNjYWxlc1swXV07XG4gICAgICAgIHJldHVybiBzY2FsZURpZmYucmFuZ2VEZWx0YSA9PT0gMCAmJlxuICAgICAgICAgICFzY2FsZURpZmYuZG9tYWluVmFsdWVEaWZmICYmXG4gICAgICAgICAgc2NhbGVEaWZmLnN0YXlEaXNjcmV0ZVxuICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICA6IHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KVxuICAgIC5tYXAoZGlmZiA9PiB7XG4gICAgICBsZXQgZmFjdG9ycyA9IFtdO1xuICAgICAgaWYgKGRpZmYubWV0YS5hZGQpIHtcbiAgICAgICAgZmFjdG9ycyA9IFtgYWRkLiR7ZGlmZi5jb21wTmFtZX1gXTtcbiAgICAgIH0gZWxzZSBpZiAoZGlmZi5tZXRhLnJlbW92ZSkge1xuICAgICAgICBmYWN0b3JzID0gW2ByZW1vdmUuJHtkaWZmLmNvbXBOYW1lfWBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGRpZmYubWV0YS5zY2FsZSkge1xuICAgICAgICAgIGZhY3RvcnMgPSBmYWN0b3JzLmNvbmNhdChPYmplY3Qua2V5cyhkaWZmLm1ldGEuc2NhbGUpLm1hcChzY05hbWUgPT4gYHNjYWxlLiR7c2NOYW1lfWApKTtcbiAgICAgICAgICBmYWN0b3JzLnB1c2goXCJlbmNvZGVcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGlmZi5tZXRhLnZpZXcueCAhPT0gMCB8fCBkaWZmLm1ldGEudmlldy55ICE9PSAwKSB7XG4gICAgICAgICAgZmFjdG9ycy5wdXNoKFwiZW5jb2RlLnBvc2l0aW9uXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4geyBkaWZmLCBmYWN0b3JTZXRzOiB7Y3VycmVudDogZmFjdG9ycywgYXBwbGllZDogZmFjdG9ycywgYWxsOiBmYWN0b3JzfSB9O1xuICAgIH0pO1xufVxuXG5cbmZ1bmN0aW9uIGFwcGVuZFZpZXdEaWZmKHBzZXVkb1RsLCB2aWV3RGlmZnMpIHtcbiAgY29uc3QgZG9uZSA9IHtcbiAgICBpbmNyZWFzZTogeyB3aWR0aDogZmFsc2UsIGhlaWdodDogZmFsc2UgfSxcbiAgICBkZWNyZWFzZTogeyB3aWR0aDogZmFsc2UsIGhlaWdodDogZmFsc2UgfVxuICB9O1xuICBmdW5jdGlvbiBhcHBlbmREaWZmKHN0YWdlLCBpbmNPckRlYykge1xuICAgIGZvciAoY29uc3Qgd2hpY2ggb2YgW1wid2lkdGhcIiwgXCJoZWlnaHRcIl0pIHtcbiAgICAgIGlmIChcbiAgICAgICAgdmlld0RpZmZzW3doaWNoXVtpbmNPckRlY10gJiZcbiAgICAgICAgbmVlZFZpZXdEaWZmKHN0YWdlLnN5bmMsIGluY09yRGVjLCB3aGljaCkgJiZcbiAgICAgICAgIWRvbmVbaW5jT3JEZWNdW3doaWNoXVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGZvdW5kID0gc3RhZ2Uuc3luYy5maW5kKHBTdGVwID0+IHBTdGVwLmRpZmYuY29tcFR5cGUgPT09IFwidmlld1wiKTtcbiAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgZm91bmQuZmFjdG9yU2V0cy5jdXJyZW50LnB1c2god2hpY2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YWdlLnN5bmMucHVzaCh7XG5cbiAgICAgICAgICAgIGRpZmY6IHtcbiAgICAgICAgICAgICAgY29tcE5hbWU6IHZpZXdEaWZmcy5jb21wTmFtZSxcbiAgICAgICAgICAgICAgY29tcFR5cGU6IHZpZXdEaWZmcy5jb21wVHlwZSxcbiAgICAgICAgICAgICAgbWV0YTogdmlld0RpZmZzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmFjdG9yU2V0czogeyBjdXJyZW50OiBbd2hpY2hdIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRvbmVbaW5jT3JEZWNdW3doaWNoXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YWdlO1xuICB9XG4gIHJldHVybiB7XG4gICAgY29uY2F0OiBwc2V1ZG9UbC5jb25jYXRcbiAgICAgIC5tYXAoKHN0YWdlLCBqKSA9PiBhcHBlbmREaWZmKHN0YWdlLCBcImluY3JlYXNlXCIsIGopKVxuICAgICAgLnJldmVyc2UoKVxuICAgICAgLm1hcChzdGFnZSA9PiBhcHBlbmREaWZmKHN0YWdlLCBcImRlY3JlYXNlXCIpKVxuICAgICAgLnJldmVyc2UoKVxuICB9O1xufVxuZnVuY3Rpb24gbmVlZFZpZXdEaWZmKHBzZXVkb1N0ZXBzLCBpbmNPckRlYywgd2hpY2gpIHtcbiAgZm9yIChjb25zdCBwc2V1ZG9TdGVwIG9mIHBzZXVkb1N0ZXBzLmZpbHRlcihcbiAgICBzdGVwID0+IFtcIm1hcmtcIiwgXCJheGlzXCIsIFwibGVnZW5kXCJdLmluZGV4T2Yoc3RlcC5kaWZmLmNvbXBUeXBlKSA+PSAwXG4gICkpIHtcbiAgICBsZXQgZGVsdGFQcm9wID0gd2hpY2ggPT09IFwid2lkdGhcIiA/IFwieFwiIDogXCJ5XCI7XG4gICAgaWYgKHBzZXVkb1N0ZXAuZGlmZi5jb21wVHlwZSA9PT0gXCJtYXJrXCIpIHtcbiAgICAgIGRlbHRhUHJvcCA9IHdoaWNoID09PSBcIndpZHRoXCIgPyBcImRlbHRhV1wiIDogXCJkZWx0YUhcIjtcbiAgICB9IGVsc2UgaWYgKHBzZXVkb1N0ZXAuZGlmZi5jb21wVHlwZSA9PT0gXCJheGlzXCIpIHtcbiAgICAgIGlmIChcbiAgICAgICAgW1wibGVmdFwiLCBcInRvcFwiXS5pbmRleE9mKFxuICAgICAgICAgIChwc2V1ZG9TdGVwLmRpZmYuaW5pdGlhbCB8fCBwc2V1ZG9TdGVwLmRpZmYuZmluYWwpLm9yaWVudFxuICAgICAgICApID49IDBcbiAgICAgICkge1xuICAgICAgICBkZWx0YVByb3AgPSB3aGljaCA9PT0gXCJ3aWR0aFwiID8gXCJkZWx0YVdcIiA6IFwiZGVsdGFIXCI7XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBoYXNWaXdSZWxhdGVkU2NhbGVEaWZmID0gdHJ1ZTtcbiAgICBpZiAocHNldWRvU3RlcC5kaWZmLmNvbXBUeXBlID09PSBcIm1hcmtcIikge1xuICAgICAgaGFzVml3UmVsYXRlZFNjYWxlRGlmZiA9XG4gICAgICAgIHBzZXVkb1N0ZXAuZmFjdG9yU2V0cy5jdXJyZW50LmluZGV4T2YoXG4gICAgICAgICAgd2hpY2ggPT09IFwid2lkdGhcIiA/IFwic2NhbGUueFwiIDogXCJzY2FsZS55XCJcbiAgICAgICAgKSA+PSAwO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHBzZXVkb1N0ZXAuZGlmZi5tZXRhLnZpZXdbZGVsdGFQcm9wXSA+PSBNSU5fUE9TX0RFTFRBICYmXG4gICAgICBpbmNPckRlYyA9PT0gXCJpbmNyZWFzZVwiICYmXG4gICAgICBoYXNWaXdSZWxhdGVkU2NhbGVEaWZmXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgcHNldWRvU3RlcC5kaWZmLm1ldGEudmlld1tkZWx0YVByb3BdIDw9IC1NSU5fUE9TX0RFTFRBICYmXG4gICAgICBpbmNPckRlYyA9PT0gXCJkZWNyZWFzZVwiICYmXG4gICAgICBoYXNWaXdSZWxhdGVkU2NhbGVEaWZmXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBXaGVuIHRoZSBzaXplIG9mIHRoZSBtYXJrIHZpZXcgY2hhbmdlcywgZ3JpZCBsaW5lcyBzaG91bGQgYmUgZXh0ZW5kZWQuXG5mdW5jdGlvbiBhcHBlbmRHcmlkQ2hhbmdlcyhwc2V1ZG9UbCkge1xuICAvLyBDdXJyZW50bHkgb25seSBvbmUgcFN0ZXAgaXMgZ2VuZXJhdGVkLlxuICBsZXQgeEF4aXNQU3RlcCwgeUF4aXNQU3RlcDtcbiAgcHNldWRvVGwuY29uY2F0LmZvckVhY2goc3RhZ2UgPT4ge1xuICAgIHhBeGlzUFN0ZXAgPSB4QXhpc1BTdGVwIHx8IHN0YWdlLnN5bmMuZmluZChhUFN0ZXAgPT5cbiAgICAgICFhUFN0ZXAuZGlmZi5tZXRhLmFkZCAmJlxuICAgICAgIWFQU3RlcC5kaWZmLm1ldGEucmVtb3ZlICYmXG4gICAgICBhUFN0ZXAuZGlmZi5jb21wVHlwZSA9PT0gXCJheGlzXCIgJiZcbiAgICAgIGFQU3RlcC5kaWZmLm1ldGEuc2NOYW1lc1swXSA9PT0gXCJ4XCIpO1xuICAgIHlBeGlzUFN0ZXAgPSB5QXhpc1BTdGVwIHx8IHN0YWdlLnN5bmMuZmluZChhUFN0ZXAgPT5cbiAgICAgICFhUFN0ZXAuZGlmZi5tZXRhLmFkZCAmJlxuICAgICAgIWFQU3RlcC5kaWZmLm1ldGEucmVtb3ZlICYmXG4gICAgICBhUFN0ZXAuZGlmZi5jb21wVHlwZSA9PT0gXCJheGlzXCIgJiZcbiAgICAgIGFQU3RlcC5kaWZmLm1ldGEuc2NOYW1lc1swXSA9PT0gXCJ5XCIpO1xuICB9KTtcblxuICBpZiAoIXhBeGlzUFN0ZXAgJiYgIXlBeGlzUFN0ZXApIHtcbiAgICByZXR1cm4gcHNldWRvVGw7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5wc2V1ZG9UbCxcbiAgICBjb25jYXQ6IHBzZXVkb1RsLmNvbmNhdC5tYXAoc3RhZ2UgPT4ge1xuICAgICAgbGV0IG5ld1N0YWdlID0gY29weShzdGFnZSk7XG4gICAgICAvLyBpZiB0aGVyZSBpcyBhbnkgbWFyay52aWV3IGNoYW5nZVxuICAgICAgaWYgKCBzdGFnZS5zeW5jLmZpbmQocFN0ZXAgPT4gW1wibWFya1wiLCBcImF4aXNcIl0uaW5kZXhPZihwU3RlcC5kaWZmLmNvbXBUeXBlKSA+PSAwICYmIHBTdGVwLmRpZmYubWV0YS52aWV3LmRlbHRhSCAhPT0gMCkgKSB7XG4gICAgICAgIGlmICh4QXhpc1BTdGVwICYmICFzdGFnZS5zeW5jLmZpbmQocFN0ZXAgPT4gcFN0ZXAuZGlmZi5jb21wVHlwZSA9PT0gXCJheGlzXCIgJiYgcFN0ZXAuZGlmZi5tZXRhLnNjTmFtZXNbMF0gPT09IFwieFwiKSkge1xuXG4gICAgICAgICAgeEF4aXNQU3RlcC5mYWN0b3JTZXRzLmFsbC5wdXNoKFwiZW5jb2RlLm9ubHkuZ3JpZFwiKTtcbiAgICAgICAgICBsZXQgZ3JpZENoYW5naW5nQXhpc1BTdGVwID0ge1xuICAgICAgICAgICAgLi4ueEF4aXNQU3RlcCxcbiAgICAgICAgICAgIGZhY3RvclNldHM6IHtcbiAgICAgICAgICAgICAgYWxsOiBjb3B5KHhBeGlzUFN0ZXAuZmFjdG9yU2V0cy5hbGwpLFxuICAgICAgICAgICAgICBhcHBsaWVkOiBbXCJlbmNvZGUub25seS5ncmlkXCJdLFxuICAgICAgICAgICAgICBjdXJyZW50OiBbXCJlbmNvZGUub25seS5ncmlkXCJdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICB4QXhpc1BTdGVwLmZhY3RvclNldHMuYXBwbGllZC5wdXNoKFwiZW5jb2RlLm9ubHkuZ3JpZFwiKTtcbiAgICAgICAgICBuZXdTdGFnZS5zeW5jLnB1c2goZ3JpZENoYW5naW5nQXhpc1BTdGVwKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIHN0YWdlLnN5bmMuZmluZChwU3RlcCA9PiBbXCJtYXJrXCIsIFwiYXhpc1wiXS5pbmRleE9mKHBTdGVwLmRpZmYuY29tcFR5cGUpID49IDAgJiYgcFN0ZXAuZGlmZi5tZXRhLnZpZXcuZGVsdGFXICE9PSAwKSApIHtcbiAgICAgICAgaWYgKHlBeGlzUFN0ZXAgJiYgIXN0YWdlLnN5bmMuZmluZChwU3RlcCA9PiBwU3RlcC5kaWZmLmNvbXBUeXBlID09PSBcImF4aXNcIiAmJiBwU3RlcC5kaWZmLm1ldGEuc2NOYW1lc1swXSA9PT0gXCJ5XCIpKSB7XG4gICAgICAgICAgeUF4aXNQU3RlcC5mYWN0b3JTZXRzLmFsbC5wdXNoKFwiZW5jb2RlLm9ubHkuZ3JpZFwiKTtcbiAgICAgICAgICBsZXQgZ3JpZENoYW5naW5nQXhpc1BTdGVwID0ge1xuICAgICAgICAgICAgLi4ueUF4aXNQU3RlcCxcbiAgICAgICAgICAgIGZhY3RvclNldHM6IHtcbiAgICAgICAgICAgICAgYWxsOiBjb3B5KHlBeGlzUFN0ZXAuZmFjdG9yU2V0cy5hbGwpLFxuICAgICAgICAgICAgICBhcHBsaWVkOiBbXCJlbmNvZGUub25seS5ncmlkXCJdLFxuICAgICAgICAgICAgICBjdXJyZW50OiBbXCJlbmNvZGUub25seS5ncmlkXCJdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICB5QXhpc1BTdGVwLmZhY3RvclNldHMuYXBwbGllZC5wdXNoKFwiZW5jb2RlLm9ubHkuZ3JpZFwiKTtcbiAgICAgICAgICBuZXdTdGFnZS5zeW5jLnB1c2goZ3JpZENoYW5naW5nQXhpc1BTdGVwKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3U3RhZ2U7XG4gICAgfSlcbiAgfTtcblxufVxuZnVuY3Rpb24gZW51bVRsQnlTdGVwKFRsLCBzdGVwKSB7XG4gIGNvbnN0IG5ld1RscyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IFRsLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgbmV3VGwgPSBjb3B5KFRsKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkobmV3VGxbaV0pKSB7XG4gICAgICBuZXdUbFtpXSA9IFtuZXdUbFtpXV07XG4gICAgfVxuICAgIGNvbnN0IGZvdW5kID0gbmV3VGxbaV0uZmluZChzdHAgPT4gc3RwLmRpZmYuY29tcE5hbWUgPT09IHN0ZXAuZGlmZi5jb21wTmFtZSk7XG4gICAgaWYgKGZvdW5kKSB7XG4gICAgICBmb3VuZC5mYWN0b3JTZXRzLmN1cnJlbnQgPSBmb3VuZC5mYWN0b3JTZXRzLmN1cnJlbnQuY29uY2F0KFxuICAgICAgICBzdGVwLmZhY3RvclNldHMuY3VycmVudFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3VGxbaV0ucHVzaChzdGVwKTtcbiAgICB9XG5cbiAgICBuZXdUbHMucHVzaChuZXdUbCk7XG4gIH1cbiAgcmV0dXJuIG5ld1Rscztcbn1cblxuLy8gY2hvb3NlIHRoZSBmYWN0b3JzIGhhdmluZyBkaWZmcyBiZXR3ZWVuIGluaXRpYWwgYW5kIGZpbmFsLlxuZnVuY3Rpb24gZmluZEFsbEZhY3RvcnMobWFya0RpZmYpIHtcbiAgY29uc3QgYWxsRmFjdG9ycyA9IFtdO1xuICBsZXQgZGlmZkluZm8gPSBtYXJrRGlmZi5tZXRhO1xuICBsZXQgZXh0cmFGYWN0b3JzQnlNYXJrdHlwZSA9IFtdO1xuICBpZiAoZGlmZkluZm8uYWRkKSB7XG4gICAgYWxsRmFjdG9ycy5wdXNoKFwiYWRkXCIpO1xuICB9XG5cbiAgaWYgKGRpZmZJbmZvLnJlbW92ZSkge1xuICAgIGFsbEZhY3RvcnMucHVzaChcInJlbW92ZVwiKTtcbiAgICByZXR1cm4geyBhbGxGYWN0b3JzLCBleHRyYUZhY3RvcnNCeU1hcmt0eXBlIH07XG4gIH1cblxuICBpZiAoZGlmZkluZm8ubWFya3R5cGUpIHtcbiAgICBhbGxGYWN0b3JzLnB1c2goXCJtYXJrdHlwZVwiKTtcbiAgICBleHRyYUZhY3RvcnNCeU1hcmt0eXBlLnB1c2goXCJlbmNvZGUub3RoZXJzXCIpO1xuICB9XG4gIGlmIChkaWZmSW5mby5kYXRhKSB7XG4gICAgaWYgKGRpZmZJbmZvLmRhdGEucm93ICE9PSBmYWxzZSB8fCBkaWZmSW5mby5kYXRhLmNvbHVtbiAhPT0gXCJyZW1vdmVkXCIpIHtcbiAgICAgIGFsbEZhY3RvcnMucHVzaChcImRhdGFcIik7XG4gICAgfVxuICB9XG4gIGlmIChkaWZmSW5mby5zY2FsZSkge1xuICAgIE9iamVjdC5rZXlzKGRpZmZJbmZvLnNjYWxlKS5mb3JFYWNoKHNjTmFtZSA9PiB7XG4gICAgICBjb25zdCBzY2FsZURpZmYgPSBkaWZmSW5mby5zY2FsZVtzY05hbWVdO1xuICAgICAgaWYgKHNjYWxlRGlmZikge1xuICAgICAgICBhbGxGYWN0b3JzLnB1c2goYHNjYWxlLiR7c2NOYW1lfWApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIE9iamVjdC5rZXlzKGRpZmZJbmZvLmVuY29kZSkuZm9yRWFjaChjaE5hbWUgPT4ge1xuICAgIGNvbnN0IGNoRGlmZiA9IGRpZmZJbmZvLmVuY29kZVtjaE5hbWVdO1xuICAgIGlmIChjaERpZmYgPT09IHRydWUpIHtcbiAgICAgIGFsbEZhY3RvcnMucHVzaChgZW5jb2RlLiR7Y2hOYW1lfWApO1xuICAgIH0gZWxzZSBpZiAoY2hEaWZmID09PSBcImJ5TWFya3R5cGVDaGFuZ2VcIikge1xuICAgICAgZXh0cmFGYWN0b3JzQnlNYXJrdHlwZS5wdXNoKGBlbmNvZGUuJHtjaE5hbWV9YCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHsgYWxsRmFjdG9ycywgZXh0cmFGYWN0b3JzQnlNYXJrdHlwZSB9O1xufVxuXG5mdW5jdGlvbiBnZXRGYWN0b3JBc3NpZ25tZW50KGksIGZhY3Rvckxlbiwgc3RhZ2VOKSB7XG4gIGxldCBxdW90aWVudCA9IGk7XG4gIGNvbnN0IGFzc2lnbm1lbnQgPSBuZXcgQXJyYXkoZmFjdG9yTGVuKTtcbiAgZm9yIChsZXQgaiA9IDA7IGogPCBmYWN0b3JMZW47IGorKykge1xuICAgIGFzc2lnbm1lbnRbal0gPSBxdW90aWVudCAlIHN0YWdlTjtcbiAgICBxdW90aWVudCA9IE1hdGguZmxvb3IocXVvdGllbnQgLyBzdGFnZU4pO1xuICB9XG4gIHJldHVybiBhc3NpZ25tZW50O1xufVxuXG5jbGFzcyBTa2lwcGluZ0NvbmRpdGlvbnMge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnJlZ2lzdGVyZWQgPSBbXTtcbiAgfVxuXG4gIHJlZ2lzdGVyKGNvbmRpdGlvbikge1xuICAgIHRoaXMucmVnaXN0ZXJlZC5wdXNoKGNvbmRpdGlvbik7XG4gIH1cblxuICBjaGVjayhmYWN0b3JzKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJlZ2lzdGVyZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNvbmRpdGlvbiA9IHRoaXMucmVnaXN0ZXJlZFtpXTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbmRpdGlvbi5yZWR1Y2UoKHNhdGlzZnlpbmcsIGNvbmRGKSA9PiB7XG4gICAgICAgIHJldHVybiAoc2F0aXNmeWluZyA9XG4gICAgICAgICAgc2F0aXNmeWluZyAmJiBmYWN0b3JzLmluZGV4T2YoY29uZEYuZmFjdG9yKSA+PSAwID09PSBjb25kRi5pbmNsdWRlKTtcbiAgICAgIH0sIHRydWUpO1xuXG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IHsgZmluZEFsbEZhY3RvcnMsIFNraXBwaW5nQ29uZGl0aW9ucywgZW51bWVyYXRlUHNldWRvVGltZWxpbmVzIH07XG5cbi8vIGxlZ2VuZHNwc2V1ZG9TdGVwcy5tYXAocFN0ZXAgPT4gcFN0ZXAuZGlmZi5jb21wTmFtZSlcbi8vICAgLnVuaXF1ZSgpXG4vLyAgIC5mb3JFYWNoKGxlZ2VuZE5hbWUgPT4ge1xuLy8gICBsZXQgbWVyZ2VkTGVnZW5kU3RlcCA9IG1lcmdlUHVzZWRvU3RlcHMoY3VyclN5bmMuZmlsdGVyKHBTdGVwID0+IHBTdGVwLmRpZmYuY29tcE5hbWUgPT09IGxlZ2VuZE5hbWUpKVxuLy8gICBpZiAobWVyZ2VkTGVnZW5kU3RlcCl7XG4vLyAgICAgY3VyclN5bmMgPSBjdXJyU3luYy5maWx0ZXIocFN0ZXAgPT4gcFN0ZXAuZGlmZi5jb21wTmFtZSAhPT0gbGVnZW5kTmFtZSkuY29uY2F0KFttZXJnZWRMZWdlbmRTdGVwXSlcbi8vICAgfVxuLy8gfSk7XG4vLyBmdW5jdGlvbiBtZXJnZVB1c2Vkb1N0ZXBzKHBTdGVwcykge1xuLy8gICBpZiAocFN0ZXBzLmxlbmd0aCA9PT0gMCkge1xuLy8gICAgIHJldHVybjtcbi8vICAgfVxuLy8gICBjb25zdCBtZXJnZWQgPSBjb3B5KHBTdGVwc1swXSk7XG4vLyAgIG1lcmdlZC5mYWN0b3JTZXRzID0ge1xuLy8gICAgIGFwcGxpZWQ6IHBTdGVwcy5yZWR1Y2UoKGFwcGxpZWQsIHBTdGVwKSA9PiBhcHBsaWVkLmNvbmNhdChwU3RlcC5mYWN0b3JTZXRzID8gcFN0ZXAuZmFjdG9yU2V0cy5hcHBsaWVkIDogW10pLCBbXSksXG4vLyAgICAgYWxsOiBtZXJnZWQuZmFjdG9yU2V0cyA/IG1lcmdlZC5mYWN0b3JTZXRzLmFsbCA6IFtdLFxuLy8gICAgIGV4dHJhQnlNYXJrdHlwZTogbWVyZ2VkLmZhY3RvclNldHMgPyBtZXJnZWQuZmFjdG9yU2V0cy5leHRyYUJ5TWFya3R5cGUgOiBbXVxuLy8gICB9XG5cbi8vICAgcmV0dXJuIG1lcmdlZDtcbi8vIH1cblxuLy8gZnVuY3Rpb24gYXBwZW5kR3VpZGVNb3Zlcyhwc2V1ZG9UbCwgYXhlc3BzZXVkb1N0ZXBzLCBsZWdlbmRzcHNldWRvU3RlcHMpIHtcbi8vICAgbGV0IGJvdHRvbUF4aXNQU3RlcCA9IGF4ZXNwc2V1ZG9TdGVwcy5maW5kKHBTdGVwID0+XG4vLyAgICAgKHBTdGVwLmRpZmYuaW5pdGlhbCAmJiBwU3RlcC5kaWZmLmluaXRpYWwub3JpZW50ID09PSBcImJvdHRvbVwiKSAmJlxuLy8gICAgIChwU3RlcC5kaWZmLmZpbmFsICYmIHBTdGVwLmRpZmYuZmluYWwub3JpZW50ID09PSBcImJvdHRvbVwiKVxuLy8gICApO1xuLy8gICBsZXQgcmlnaHRMZWdlbmRQU3RlcCA9IGxlZ2VuZHNwc2V1ZG9TdGVwcy5maW5kKHBTdGVwID0+XG4vLyAgICAgKHBTdGVwLmRpZmYuaW5pdGlhbCAmJiBwU3RlcC5kaWZmLmluaXRpYWwub3JpZW50ID09PSBcInJpZ2h0XCIpICYmXG4vLyAgICAgKHBTdGVwLmRpZmYuZmluYWwgJiYgcFN0ZXAuZGlmZi5maW5hbC5vcmllbnQgPT09IFwicmlnaHRcIilcbi8vICAgKTtcbi8vICAgbGV0IGJvdHRvbUF4aXNNb3ZlZCA9IGZhbHNlO1xuLy8gICBwc2V1ZG9UbC5jb25jYXQuZm9yRWFjaChzdGFnZSA9PiB7XG4vLyAgICAgbGV0IG1hcmtQc2V1ZG9TdGVwcyA9IHN0YWdlLnN5bmMuZmlsdGVyKHBTdGVwID0+IHBTdGVwLmRpZmYuY29tcFR5cGUgPT09IFwibWFya1wiKTtcbi8vICAgICBsZXQgd2lkdGhDaGFuZ2UgPSAhIW1hcmtQc2V1ZG9TdGVwcy5maW5kKG1Qc2V1ZG9TdGVwID0+XG4vLyAgICAgICBtUHNldWRvU3RlcC5mYWN0b3JTZXRzLmN1cnJlbnQuaW5kZXhPZihcInNjYWxlLnhcIikgPj0gMCAmJiBtUHNldWRvU3RlcC5kaWZmLm1ldGEudmlldy5kZWx0YVcgIT09IDBcbi8vICAgICApO1xuXG4vLyAgICAgaWYgKGJvdHRvbUF4aXNQU3RlcCkge1xuLy8gICAgICAgbGV0IHRoaXNib3R0b21BeGlzUFN0ZXAgPSBzdGFnZS5zeW5jLmZpbmQocFN0ZXAgPT4gcFN0ZXAuZGlmZi5jb21wTmFtZSA9PT0gYm90dG9tQXhpc1BTdGVwLmRpZmYuY29tcE5hbWUgKTtcbi8vICAgICAgIGlmIChib3R0b21BeGlzTW92ZWQgJiYgdGhpc2JvdHRvbUF4aXNQU3RlcCkge1xuLy8gICAgICAgICB0aGlzYm90dG9tQXhpc1BTdGVwLmZhY3RvclNldHMuY3VycmVudCA9IHRoaXNib3R0b21BeGlzUFN0ZXAuZmFjdG9yU2V0cy5jdXJyZW50LmZpbHRlcihmY3RyID0+IGZjdHIgIT09IFwiZW5jb2RlLnBvc2l0aW9uXCIpO1xuLy8gICAgICAgfVxuXG4vLyAgICAgICBpZiAoKG1hcmtQc2V1ZG9TdGVwcy5sZW5ndGggPiAwKSkge1xuLy8gICAgICAgICBsZXQgaGVpZ2h0Q2hhbmdlID0gISFtYXJrUHNldWRvU3RlcHMuZmluZChtUHNldWRvU3RlcCA9PlxuLy8gICAgICAgICAgIG1Qc2V1ZG9TdGVwLmZhY3RvclNldHMuY3VycmVudC5pbmRleE9mKFwic2NhbGUueVwiKSA+PSAwICYmIG1Qc2V1ZG9TdGVwLmRpZmYubWV0YS52aWV3LmRlbHRhSCAhPT0gMFxuLy8gICAgICAgICApO1xuLy8gICAgICAgICBpZiAoaGVpZ2h0Q2hhbmdlKSB7XG4vLyAgICAgICAgICAgLy8gSWYgbWFya3MgaGVpZ2h0IGNoYW5nZSwgdGhlIGJvdHRvbSBheGlzIHNob3VsZCBtb3ZlXG4vLyAgICAgICAgICAgaWYgKCF0aGlzYm90dG9tQXhpc1BTdGVwICYmICFib3R0b21BeGlzTW92ZWQpIHtcbi8vICAgICAgICAgICAgIC8vIGFkZCBheGlzUFN0ZXAgb25seSBjaGFuZ2luZyBheGlzR1xuLy8gICAgICAgICAgICAgc3RhZ2Uuc3luYy5wdXNoKHtcbi8vICAgICAgICAgICAgICAgZGlmZjogYm90dG9tQXhpc1BTdGVwLmRpZmYsXG4vLyAgICAgICAgICAgICAgIGZhY3RvclNldHM6IHtcbi8vICAgICAgICAgICAgICAgICBjdXJyZW50OiBbXCJlbmNvZGUucG9zaXRpb25cIl0sXG4vLyAgICAgICAgICAgICAgICAgYXBwbGllZDogW1wiZW5jb2RlLnBvc2l0aW9uXCJdLFxuLy8gICAgICAgICAgICAgICAgIGFsbDogYm90dG9tQXhpc1BTdGVwLmZhY3RvclNldHMuYWxsXG4vLyAgICAgICAgICAgICAgIH1cbi8vICAgICAgICAgICAgIH0pXG4vLyAgICAgICAgICAgfVxuLy8gICAgICAgICAgIGJvdHRvbUF4aXNNb3ZlZCA9IHRydWU7XG4vLyAgICAgICAgIH0gZWxzZSB7XG4vLyAgICAgICAgICAgLy8gSWYgbWFya3MgaGVpZ2h0IGRvZXMgbm90IGNoYW5nZSwgdGhlIGJvdHRvbSBheGlzIHNob3VsZCBub3QgbW92ZVxuLy8gICAgICAgICAgIGlmICh0aGlzYm90dG9tQXhpc1BTdGVwICYmICFib3R0b21BeGlzTW92ZWQpIHtcbi8vICAgICAgICAgICAgIC8vIGJvdHRvbUF4aXNQU3RlcCBzaG91bGQgbm90IG1vdmVcbi8vICAgICAgICAgICAgIHRoaXNib3R0b21BeGlzUFN0ZXAuZmFjdG9yU2V0cy5jdXJyZW50ID0gdGhpc2JvdHRvbUF4aXNQU3RlcC5mYWN0b3JTZXRzLmN1cnJlbnQuZmlsdGVyKGZjdHIgPT4gZmN0ciAhPT0gXCJlbmNvZGUucG9zaXRpb25cIilcblxuLy8gICAgICAgICAgIH1cbi8vICAgICAgICAgICBib3R0b21BeGlzTW92ZWQgPSBmYWxzZTtcbi8vICAgICAgICAgfVxuLy8gICAgICAgfSBlbHNlIHtcbi8vICAgICAgICAgaWYgKHRoaXNib3R0b21BeGlzUFN0ZXApIHtcbi8vICAgICAgICAgICBib3R0b21BeGlzTW92ZWQgPSB0cnVlO1xuLy8gICAgICAgICB9XG4vLyAgICAgICB9XG4vLyAgICAgfVxuXG4vLyAgIH0pXG5cbi8vICAgcmV0dXJuIHBzZXVkb1RsO1xuLy8gICAvLyBJZiBtYXJrcyB3aWR0aCBjaGFuZ2UsIHRoZSByaWdodCBheGlzIHNob3VsZCBtb3ZlXG4vLyAgIC8vIElmIG1hcmtzIHdpZHRoIGNoYW5nZSwgdGhlIHJpZ2h0IGxlZ2VuZCBzaG91bGQgbW92ZVxuXG4vLyAgIC8vIElmIG1hcmtzIHdpZHRoIGRvZXMgbm9udCBjaGFuZ2UsIHRoZSByaWdodCBheGlzIHNob3VsZCAgbm90IG1vdmVcbi8vICAgLy8gSWYgbWFya3Mgd2lkdGggZG9lcyBub3QgY2hhbmdlLCB0aGUgcmlnaHQgbGVnZW5kIHNob3VsZCBub3QgbW92ZVxuLy8gfSIsImltcG9ydCB7IGdldCB9IGZyb20gXCIuLi91dGlsL3V0aWxcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIFBFUkNFUFRJT05fQ0FQKGR1cmF0aW9uKSB7XG4gIC8vIGlmIChkdXJhdGlvbiA8IDApIHtcbiAgLy8gICBjb25zb2xlLmVycm9yKFwiRHVyYXRpb24gY2Fubm90IGJlIG5lZ2F0aXZlIVwiKTtcbiAgLy8gfSBlbHNlIGlmIChkdXJhdGlvbiA8PSAwKSB7XG4gIC8vICAgcmV0dXJuIDAuM1xuICAvLyB9IGVsc2UgaWYgKGR1cmF0aW9uIDw9IDY2Nykge1xuICAvLyAgIHJldHVybiAwLjVcbiAgLy8gfSBlbHNlIGlmIChkdXJhdGlvbiA8PSAxMDAwKSB7XG4gIC8vICAgcmV0dXJuIDAuOFxuICAvLyB9IGVsc2UgaWYgKGR1cmF0aW9uIDw9IDIwMDApIHtcbiAgLy8gICByZXR1cm4gMS4wXG4gIC8vIH0gZWxzZVxuICAvLyAgIHJldHVybiAxLjVcbiAgLy8gfVxuICAvLyByZXR1cm4gMS4wMCAvICgxICsgTWF0aC5leHAoLShkdXJhdGlvbi0xMjUwKS8xODApKSArIDAuNFxuICAvLyByZXR1cm4gMS4wMCAvICgxICsgTWF0aC5leHAoLShkdXJhdGlvbi0xMjUwKS8xODApKSArIDAuMzVcbiAgcmV0dXJuIDEuNCAvICgxICsgTWF0aC5leHAoLShkdXJhdGlvbiAtIDEyMDApIC8gMzAwKSk7XG59XG5cbi8vIFR1bmluZyBmb3IgdGhlIG10dXJrIHN0dWR5XG4vLyAvLyBTdGltdWx1cyAxXG4vLyBzdGFnZTEtcmFuazEgPiBzdGFnZTMtcmFuazEsIHN0YWdlMi1yYW5rMiwgc3RhZ2UyLXJhbmszXG4vLyBzdGFnZTItcmFuazEgPiBzdGFnZTMtcmFuazEsIHN0YWdlMi1yYW5rMiwgc3RhZ2UyLXJhbmszXG5cbi8vIC8vIFN0aW11bHVzIDJcbi8vIHMxUjEgPiAqXG5cbi8vIC8vIFN0aW11bHVzIDNcbi8vIHN0YWdlMS1yYW5rMSA+ICpcbi8vIHN0YWdlMi1yYW5rMSA+IHN0YWdlMi1yYW5rMiwgc3RhZ2UzLXJhbmsxXG5cbi8vIC8vIFN0aW11bHVzIDRcbi8vIHN0YWdlMS1yYW5rMSA+IHN0YWdlMi1yYW5rM1xuXG5jb25zdCBzYW1lRG9tYWluID0gKHBzZXVkb1N0ZXAsIGZvdW5kRmFjdG9yKSA9PiB7XG4gIHJldHVybiAoXG4gICAgZ2V0KFxuICAgICAgcHNldWRvU3RlcCxcbiAgICAgIFwiZGlmZlwiLFxuICAgICAgXCJtZXRhXCIsXG4gICAgICBcInNjYWxlXCIsXG4gICAgICBmb3VuZEZhY3Rvci5zcGxpdChcIi5cIilbMV0sXG4gICAgICBcImRvbWFpblNwYWNlRGlmZlwiXG4gICAgKSA9PT0gZmFsc2VcbiAgKTtcbn07XG5jb25zdCBkaWZmRG9tYWluID0gKHBzZXVkb1N0ZXAsIGZvdW5kRmFjdG9yKSA9PiB7XG4gIHJldHVybiAoXG4gICAgZ2V0KFxuICAgICAgcHNldWRvU3RlcCxcbiAgICAgIFwiZGlmZlwiLFxuICAgICAgXCJtZXRhXCIsXG4gICAgICBcInNjYWxlXCIsXG4gICAgICBmb3VuZEZhY3Rvci5zcGxpdChcIi5cIilbMV0sXG4gICAgICBcImRvbWFpblNwYWNlRGlmZlwiXG4gICAgKSA9PT0gdHJ1ZVxuICApO1xufTtcbmNvbnN0IG5vRmFjdG9ycyA9IGZhY3RvcnMgPT4ge1xuICByZXR1cm4gZnVuY3Rpb24ocHNldWRvU3RlcCkge1xuICAgIGZvciAoY29uc3QgZmN0ciBvZiBmYWN0b3JzKSB7XG4gICAgICBpZiAocHNldWRvU3RlcC5mYWN0b3JTZXRzLmN1cnJlbnQuaW5kZXhPZihmY3RyKSA+PSAwKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG59O1xuZXhwb3J0IGNvbnN0IFBFUkNFUFRJT05fQ09TVCA9IHtcbiAgbWFyazogW1xuICAgIHsgZmFjdG9yOiBcIm1hcmt0eXBlXCIsIGNvc3Q6IDAuMyB9LFxuICAgIHsgZmFjdG9yOiBcImRhdGFcIiwgY29zdDogMC41IH0sXG4gICAgeyBmYWN0b3I6IFwic2NhbGUueVwiLCBjb3N0OiAwLjQsIHdpdGg6IFtzYW1lRG9tYWluXSB9LFxuICAgIHsgZmFjdG9yOiBcInNjYWxlLnhcIiwgY29zdDogMC40LCB3aXRoOiBbc2FtZURvbWFpbl0gfSxcbiAgICB7IGZhY3RvcjogXCJzY2FsZS5jb2xvclwiLCBjb3N0OiAwLjQsIHdpdGg6IFtzYW1lRG9tYWluXSB9LFxuICAgIHsgZmFjdG9yOiBcInNjYWxlLnNoYXBlXCIsIGNvc3Q6IDAuNCwgd2l0aDogW3NhbWVEb21haW5dIH0sXG4gICAgeyBmYWN0b3I6IFwic2NhbGUuc2l6ZVwiLCBjb3N0OiAwLjQsIHdpdGg6IFtzYW1lRG9tYWluXSB9LFxuICAgIHsgZmFjdG9yOiBcInNjYWxlLnlcIiwgY29zdDogMC42NSwgd2l0aG91dDogW3NhbWVEb21haW5dIH0sXG4gICAgeyBmYWN0b3I6IFwic2NhbGUueFwiLCBjb3N0OiAwLjY1LCB3aXRob3V0OiBbc2FtZURvbWFpbl0gfSxcbiAgICB7IGZhY3RvcjogXCJzY2FsZS5jb2xvclwiLCBjb3N0OiAwLjY1LCB3aXRob3V0OiBbc2FtZURvbWFpbl0gfSxcbiAgICB7IGZhY3RvcjogXCJzY2FsZS5zaGFwZVwiLCBjb3N0OiAwLjY1LCB3aXRob3V0OiBbc2FtZURvbWFpbl0gfSxcbiAgICB7IGZhY3RvcjogXCJzY2FsZS5zaXplXCIsIGNvc3Q6IDAuNjUsIHdpdGhvdXQ6IFtzYW1lRG9tYWluXSB9LFxuICAgIHsgZmFjdG9yOiBcImVuY29kZS54XCIsIGNvc3Q6IDAuMyB9LFxuICAgIHsgZmFjdG9yOiBcImVuY29kZS55XCIsIGNvc3Q6IDAuMyB9LFxuICAgIHsgZmFjdG9yOiBcImVuY29kZS5jb2xvclwiLCBjb3N0OiAwLjMgfSxcbiAgICB7IGZhY3RvcjogXCJlbmNvZGUuc2hhcGVcIiwgY29zdDogMC4zIH0sXG4gICAgeyBmYWN0b3I6IFwiZW5jb2RlLnNpemVcIiwgY29zdDogMC4zIH0sXG4gICAgeyBmYWN0b3I6IFwiZW5jb2RlLm9wYWNpdHlcIiwgY29zdDogMC4yIH1cbiAgXSxcbiAgYXhpczogW1xuICAgIC8vIHsgZmFjdG9yOiBcInNjYWxlLipcIiwgY29zdDogMC43IH0sXG4gICAgLy8geyBmYWN0b3I6IFwiYWRkLipcIiwgY29zdDogMSB9LFxuICAgIC8vIHsgZmFjdG9yOiBcInJlbW92ZS4qXCIsIGNvc3Q6IDEgfSxcbiAgICB7IGZhY3RvcjogXCJlbmNvZGVcIiwgY29zdDogMC4zIH0sXG4gICAgeyBmYWN0b3I6IFwic2NhbGVcIiwgY29zdDogMC41LCB3aXRoOiBbc2FtZURvbWFpbl0gfSxcbiAgICB7IGZhY3RvcjogXCJhZGRcIiwgY29zdDogMC43IH0sXG4gICAgeyBmYWN0b3I6IFwicmVtb3ZlXCIsIGNvc3Q6IDAuNyB9LFxuICAgIHsgZmFjdG9yOiBcInNjYWxlXCIsIGNvc3Q6IDEsIHdpdGhvdXQ6IFtzYW1lRG9tYWluXSB9XG4gIF0sXG4gIGxlZ2VuZDogW1xuICAgIC8vIHsgZmFjdG9yOiBcInNjYWxlLipcIiwgY29zdDogMC43IH0sXG4gICAgLy8geyBmYWN0b3I6IFwiYWRkLipcIiwgY29zdDogMSB9LFxuICAgIC8vIHsgZmFjdG9yOiBcInJlbW92ZS4qXCIsIGNvc3Q6IDEgfSxcbiAgICB7IGZhY3RvcjogXCJlbmNvZGVcIiwgY29zdDogMC4zIH0sXG4gICAgeyBmYWN0b3I6IFwic2NhbGVcIiwgY29zdDogMC41LCB3aXRoOiBbc2FtZURvbWFpbl0gfSxcbiAgICB7IGZhY3RvcjogXCJhZGRcIiwgY29zdDogMC43IH0sXG4gICAgeyBmYWN0b3I6IFwicmVtb3ZlXCIsIGNvc3Q6IDAuNyB9LFxuICAgIHsgZmFjdG9yOiBcInNjYWxlXCIsIGNvc3Q6IDEsIHdpdGhvdXQ6IFtzYW1lRG9tYWluXSB9XG4gIF1cbn07XG5cbmV4cG9ydCBjb25zdCBQRU5BTFRZX0NPTUJPUyA9IFtcbiAge1xuICAgIGNodW5rczogW1xuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgY29tcFR5cGU6IFwibWFya1wiLFxuICAgICAgICAgIGZhY3RvcjogXCJzY2FsZS55XCIsXG4gICAgICAgICAgd2l0aDogW2RpZmZEb21haW4sIG5vRmFjdG9ycyhbXCJlbmNvZGUueVwiXSldXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICBdLFxuICAgIGNvc3Q6IDEuMFxuICB9LFxuICB7XG4gICAgY2h1bmtzOiBbXG4gICAgICBbXG4gICAgICAgIHtcbiAgICAgICAgICBjb21wVHlwZTogXCJtYXJrXCIsXG4gICAgICAgICAgZmFjdG9yOiBcInNjYWxlLnhcIixcbiAgICAgICAgICB3aXRoOiBbZGlmZkRvbWFpbiwgbm9GYWN0b3JzKFtcImVuY29kZS54XCJdKV1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIF0sXG4gICAgY29zdDogMS4wXG4gIH0sXG4gIHtcbiAgICBjaHVua3M6IFtcbiAgICAgIFtcbiAgICAgICAge1xuICAgICAgICAgIGNvbXBUeXBlOiBcIm1hcmtcIixcbiAgICAgICAgICBmYWN0b3I6IFwic2NhbGUuc2l6ZVwiLFxuICAgICAgICAgIHdpdGg6IFtkaWZmRG9tYWluLCBub0ZhY3RvcnMoW1wiZW5jb2RlLnNpemVcIl0pXVxuICAgICAgICB9XG4gICAgICBdXG4gICAgXSxcbiAgICBjb3N0OiAxLjBcbiAgfSxcbiAge1xuICAgIGNodW5rczogW1xuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgY29tcFR5cGU6IFwibWFya1wiLFxuICAgICAgICAgIGZhY3RvcjogXCJzY2FsZS5jb2xvclwiLFxuICAgICAgICAgIHdpdGg6IFtkaWZmRG9tYWluLCBub0ZhY3RvcnMoW1wiZW5jb2RlLmNvbG9yXCJdKV1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIF0sXG4gICAgY29zdDogMS4wXG4gIH1cbl07XG5cbmV4cG9ydCBjb25zdCBESVNDT1VOVF9DT01CT1MgPSBbXG4gIHtcbiAgICBjaHVua3M6IFtcbiAgICAgIFtcbiAgICAgICAgeyBjb21wVHlwZTogXCJtYXJrXCIsIGZhY3RvcjogXCJzY2FsZS55XCIsIHdpdGg6IFtzYW1lRG9tYWluXSB9LFxuICAgICAgICB7IGNvbXBUeXBlOiBcIm1hcmtcIiwgZmFjdG9yOiBcInNjYWxlLnhcIiwgd2l0aDogW3NhbWVEb21haW5dIH1cbiAgICAgIF1cbiAgICBdLFxuICAgIGNvc3Q6IC0wLjJcbiAgfSxcbiAge1xuICAgIGNodW5rczogW1xuICAgICAgW1xuICAgICAgICB7IGNvbXBUeXBlOiBcIm1hcmtcIiwgZmFjdG9yOiBcInNjYWxlLnNpemVcIiB9LFxuICAgICAgICB7IGNvbXBUeXBlOiBcIm1hcmtcIiwgZmFjdG9yOiBcInNjYWxlLnNoYXBlXCIgfVxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgeyBjb21wVHlwZTogXCJtYXJrXCIsIGZhY3RvcjogXCJzY2FsZS5jb2xvclwiIH0sXG4gICAgICAgIHsgY29tcFR5cGU6IFwibWFya1wiLCBmYWN0b3I6IFwic2NhbGUuc2hhcGVcIiB9XG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICB7IGNvbXBUeXBlOiBcIm1hcmtcIiwgZmFjdG9yOiBcInNjYWxlLmNvbG9yXCIgfSxcbiAgICAgICAgeyBjb21wVHlwZTogXCJtYXJrXCIsIGZhY3RvcjogXCJzY2FsZS5zaXplXCIgfVxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgeyBjb21wVHlwZTogXCJtYXJrXCIsIGZhY3RvcjogXCJzY2FsZS5zaXplXCIgfSxcbiAgICAgICAgeyBjb21wVHlwZTogXCJtYXJrXCIsIGZhY3RvcjogXCJzY2FsZS5vcGFjaXR5XCIgfVxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgeyBjb21wVHlwZTogXCJtYXJrXCIsIGZhY3RvcjogXCJzY2FsZS5vcGFjaXR5XCIgfSxcbiAgICAgICAgeyBjb21wVHlwZTogXCJtYXJrXCIsIGZhY3RvcjogXCJzY2FsZS5zaGFwZVwiIH1cbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgIHsgY29tcFR5cGU6IFwibWFya1wiLCBmYWN0b3I6IFwic2NhbGUuY29sb3JcIiB9LFxuICAgICAgICB7IGNvbXBUeXBlOiBcIm1hcmtcIiwgZmFjdG9yOiBcInNjYWxlLm9wYWNpdHlcIiB9XG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICB7IGNvbXBUeXBlOiBcIm1hcmtcIiwgZmFjdG9yOiBcInNjYWxlLmNvbG9yXCIgfSxcbiAgICAgICAgeyBjb21wVHlwZTogXCJtYXJrXCIsIGZhY3RvcjogXCJzY2FsZS5zaXplXCIgfSxcbiAgICAgICAgeyBjb21wVHlwZTogXCJtYXJrXCIsIGZhY3RvcjogXCJzY2FsZS5zaGFwZVwiIH1cbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgIHsgY29tcFR5cGU6IFwibWFya1wiLCBmYWN0b3I6IFwic2NhbGUuc2l6ZVwiIH0sXG4gICAgICAgIHsgY29tcFR5cGU6IFwibWFya1wiLCBmYWN0b3I6IFwic2NhbGUuc2hhcGVcIiB9LFxuICAgICAgICB7IGNvbXBUeXBlOiBcIm1hcmtcIiwgZmFjdG9yOiBcInNjYWxlLm9wYWNpdHlcIiB9XG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICB7IGNvbXBUeXBlOiBcIm1hcmtcIiwgZmFjdG9yOiBcInNjYWxlLmNvbG9yXCIgfSxcbiAgICAgICAgeyBjb21wVHlwZTogXCJtYXJrXCIsIGZhY3RvcjogXCJzY2FsZS5zaGFwZVwiIH0sXG4gICAgICAgIHsgY29tcFR5cGU6IFwibWFya1wiLCBmYWN0b3I6IFwic2NhbGUub3BhY2l0eVwiIH1cbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgIHsgY29tcFR5cGU6IFwibWFya1wiLCBmYWN0b3I6IFwic2NhbGUuY29sb3JcIiB9LFxuICAgICAgICB7IGNvbXBUeXBlOiBcIm1hcmtcIiwgZmFjdG9yOiBcInNjYWxlLnNpemVcIiB9LFxuICAgICAgICB7IGNvbXBUeXBlOiBcIm1hcmtcIiwgZmFjdG9yOiBcInNjYWxlLm9wYWNpdHlcIiB9XG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICB7IGNvbXBUeXBlOiBcIm1hcmtcIiwgZmFjdG9yOiBcInNjYWxlLmNvbG9yXCIgfSxcbiAgICAgICAgeyBjb21wVHlwZTogXCJtYXJrXCIsIGZhY3RvcjogXCJzY2FsZS5zaXplXCIgfSxcbiAgICAgICAgeyBjb21wVHlwZTogXCJtYXJrXCIsIGZhY3RvcjogXCJzY2FsZS5vcGFjaXR5XCIgfSxcbiAgICAgICAgeyBjb21wVHlwZTogXCJtYXJrXCIsIGZhY3RvcjogXCJzY2FsZS5zaGFwZVwiIH1cbiAgICAgIF1cbiAgICBdLFxuICAgIGNvc3Q6IC0wLjFcbiAgfSxcbiAge1xuICAgIGNodW5rczogW1xuICAgICAgW1xuICAgICAgICB7IGNvbXBUeXBlOiBcIm1hcmtcIiwgZmFjdG9yOiBcInNjYWxlLnlcIiwgd2l0aDogW3NhbWVEb21haW5dIH0sXG4gICAgICAgIHsgY29tcFR5cGU6IFwiYXhpc1wiLCBmYWN0b3I6IFwic2NhbGUueVwiLCB3aXRoOiBbc2FtZURvbWFpbl0gfVxuICAgICAgXVxuICAgIF0sXG4gICAgY29zdDogLTAuNVxuICB9LFxuICB7XG4gICAgY2h1bmtzOiBbXG4gICAgICBbXG4gICAgICAgIHsgY29tcFR5cGU6IFwibWFya1wiLCBmYWN0b3I6IFwic2NhbGUueVwiLCB3aXRoOiBbZGlmZkRvbWFpbl0gfSxcbiAgICAgICAgeyBjb21wVHlwZTogXCJheGlzXCIsIGZhY3RvcjogXCJzY2FsZS55XCIsIHdpdGg6IFtkaWZmRG9tYWluXSB9XG4gICAgICBdXG4gICAgXSxcbiAgICBjb3N0OiAtMVxuICB9LFxuICB7XG4gICAgY2h1bmtzOiBbXG4gICAgICBbXG4gICAgICAgIHsgY29tcFR5cGU6IFwibWFya1wiLCBmYWN0b3I6IFwiZW5jb2RlLnlcIiB9LFxuICAgICAgICB7IGNvbXBUeXBlOiBcImF4aXNcIiwgZmFjdG9yOiBcImFkZC55XCIgfVxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgeyBjb21wVHlwZTogXCJtYXJrXCIsIGZhY3RvcjogXCJlbmNvZGUueVwiIH0sXG4gICAgICAgIHsgY29tcFR5cGU6IFwiYXhpc1wiLCBmYWN0b3I6IFwicmVtb3ZlLnlcIiB9XG4gICAgICBdXG4gICAgXSxcbiAgICBjb3N0OiAtMC43XG4gIH0sXG4gIHtcbiAgICBjaHVua3M6IFtcbiAgICAgIFtcbiAgICAgICAgeyBjb21wVHlwZTogXCJtYXJrXCIsIGZhY3RvcjogXCJzY2FsZS54XCIsIHdpdGg6IFtzYW1lRG9tYWluXSB9LFxuICAgICAgICB7IGNvbXBUeXBlOiBcImF4aXNcIiwgZmFjdG9yOiBcInNjYWxlLnhcIiwgd2l0aDogW3NhbWVEb21haW5dIH1cbiAgICAgIF1cbiAgICBdLFxuICAgIGNvc3Q6IC0wLjVcbiAgfSxcbiAge1xuICAgIGNodW5rczogW1xuICAgICAgW1xuICAgICAgICB7IGNvbXBUeXBlOiBcIm1hcmtcIiwgZmFjdG9yOiBcInNjYWxlLnhcIiwgd2l0aDogW2RpZmZEb21haW5dIH0sXG4gICAgICAgIHsgY29tcFR5cGU6IFwiYXhpc1wiLCBmYWN0b3I6IFwic2NhbGUueFwiLCB3aXRoOiBbZGlmZkRvbWFpbl0gfVxuICAgICAgXVxuICAgIF0sXG4gICAgY29zdDogLTFcbiAgfSxcbiAge1xuICAgIGNodW5rczogW1xuICAgICAgW1xuICAgICAgICB7IGNvbXBUeXBlOiBcIm1hcmtcIiwgZmFjdG9yOiBcImVuY29kZS54XCIgfSxcbiAgICAgICAgeyBjb21wVHlwZTogXCJheGlzXCIsIGZhY3RvcjogXCJhZGQueFwiIH1cbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgIHsgY29tcFR5cGU6IFwibWFya1wiLCBmYWN0b3I6IFwiZW5jb2RlLnhcIiB9LFxuICAgICAgICB7IGNvbXBUeXBlOiBcImF4aXNcIiwgZmFjdG9yOiBcInJlbW92ZS54XCIgfVxuICAgICAgXVxuICAgIF0sXG4gICAgY29zdDogLTAuN1xuICB9LFxuICB7XG4gICAgY2h1bmtzOiBbXG4gICAgICBbXG4gICAgICAgIHsgY29tcFR5cGU6IFwibWFya1wiLCBmYWN0b3I6IFwic2NhbGUuY29sb3JcIiB9LFxuICAgICAgICB7IGNvbXBUeXBlOiBcImxlZ2VuZFwiLCBjb250YWluOiBcImNvbG9yXCIgfVxuICAgICAgXVxuICAgIF0sXG4gICAgY29zdDogLTAuNVxuICB9LFxuICB7XG4gICAgY2h1bmtzOiBbXG4gICAgICBbXG4gICAgICAgIHsgY29tcFR5cGU6IFwibWFya1wiLCBmYWN0b3I6IFwic2NhbGUuc2l6ZVwiIH0sXG4gICAgICAgIHsgY29tcFR5cGU6IFwibGVnZW5kXCIsIGNvbnRhaW46IFwic2l6ZVwiIH1cbiAgICAgIF1cbiAgICBdLFxuICAgIGNvc3Q6IC0wLjVcbiAgfSxcbiAge1xuICAgIGNodW5rczogW1xuICAgICAgW1xuICAgICAgICB7IGNvbXBUeXBlOiBcIm1hcmtcIiwgZmFjdG9yOiBcInNjYWxlLnNoYXBlXCIgfSxcbiAgICAgICAgeyBjb21wVHlwZTogXCJsZWdlbmRcIiwgY29udGFpbjogXCJzaGFwZVwiIH1cbiAgICAgIF1cbiAgICBdLFxuICAgIGNvc3Q6IC0wLjVcbiAgfVxuXTtcbiIsImltcG9ydCB7IHJvdW5kVXAsIHZhcmlhbmNlLCBtZWFuIH0gZnJvbSBcIi4uL3V0aWwvdXRpbFwiO1xuaW1wb3J0ICogYXMgREcgZnJvbSBcIi4vZGVzaWduR3VpZGVsaW5lc1wiO1xuXG5mdW5jdGlvbiBldmFsdWF0ZShwc2V1ZG9UaW1lbGluZSkge1xuICBjb25zdCBzdGFnZUNvc3RzID0gW107XG4gIGNvbnN0IGNhcHBlZFN0YWdlQ29zdHMgPSBbXTtcbiAgY29uc3QgTiA9IHBzZXVkb1RpbWVsaW5lLmNvbmNhdC5sZW5ndGg7XG4gIGNvbnN0IGNvc3QgPSBwc2V1ZG9UaW1lbGluZS5jb25jYXQucmVkdWNlKChjb3N0LCBzdGFnZSwgaSkgPT4ge1xuICAgIGNvbnN0IHRvdGFsQ29zdCA9IHN0YWdlLnN5bmMucmVkdWNlKChzdW0sIHBzZXVkb1N0ZXApID0+IHtcbiAgICAgIHBzZXVkb1N0ZXAubWV0YSA9IHsgY29zdDogZ2V0Q29zdChwc2V1ZG9TdGVwKSB9O1xuICAgICAgcmV0dXJuIHN1bSArIGdldENvc3QocHNldWRvU3RlcCk7XG4gICAgfSwgMCk7XG4gICAgY29uc3QgY29tYm9Db3N0ID0gZ2V0Q29tYm9Db3N0KHN0YWdlLnN5bmMpO1xuICAgIGNvbnN0IGR1ciA9IHBzZXVkb1RpbWVsaW5lLnRvdGFsRHVyYXRpb24gLyBwc2V1ZG9UaW1lbGluZS5jb25jYXQubGVuZ3RoO1xuICAgIGNvbnN0IGNhcCA9IERHLlBFUkNFUFRJT05fQ0FQKGR1cikgKiBNYXRoLnBvdygwLjk5LCBOIC0gMSAtIGkpO1xuICAgIHN0YWdlLm1ldGEgPSB7XG4gICAgICB0b3RhbENvc3Q6IHJvdW5kVXAodG90YWxDb3N0KSxcbiAgICAgIGNvbWJvQ29zdDogcm91bmRVcChjb21ib0Nvc3QpLFxuICAgICAgY2FwLFxuICAgICAgY29zdDogcm91bmRVcChNYXRoLm1heCh0b3RhbENvc3QgKyBjb21ib0Nvc3QgLSBjYXAsIDApKVxuICAgIH07XG4gICAgc3RhZ2VDb3N0cy5wdXNoKE1hdGgubWF4KHRvdGFsQ29zdCArIGNvbWJvQ29zdCkpO1xuICAgIGNhcHBlZFN0YWdlQ29zdHMucHVzaChNYXRoLm1heCh0b3RhbENvc3QgKyBjb21ib0Nvc3QgLSBjYXAsIDApKTtcbiAgICByZXR1cm4gY29zdCArIE1hdGgubWF4KHRvdGFsQ29zdCArIGNvbWJvQ29zdCAtIGNhcCwgMCk7XG4gIH0sIDApO1xuXG4gIHJldHVybiB7XG4gICAgY29zdDogcm91bmRVcChjb3N0KSxcbiAgICB0aWVicmVha2VyOiBtZWFuKHN0YWdlQ29zdHMpLFxuICAgIHRpZWJyZWFrZXIyOiB2YXJpYW5jZShjYXBwZWRTdGFnZUNvc3RzKVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRDb21ib0Nvc3QocHNldWRvU3RlcHMpIHtcbiAgY29uc3QgY2hlY2sgPSAocGllY2UsIGZhY3RvclNldCkgPT4ge1xuICAgIHJldHVybiBmYWN0b3JTZXQuZmluZChcbiAgICAgIGZjdHIgPT4gZmN0ciA9PT0gcGllY2UuZmFjdG9yIHx8IGZjdHIuaW5kZXhPZihwaWVjZS5jb250YWluKSA+PSAwXG4gICAgKTtcbiAgfTtcblxuICByZXR1cm4gREcuRElTQ09VTlRfQ09NQk9TLmNvbmNhdChERy5QRU5BTFRZX0NPTUJPUykucmVkdWNlKFxuICAgICh0b3RhbERpc2NvdW50LCBjb21ibykgPT4ge1xuICAgICAgZm9yIChjb25zdCBjaHVuayBvZiBjb21iby5jaHVua3MpIHtcbiAgICAgICAgY29uc3QgaXNDaHVuayA9IGNodW5rLnJlZHVjZSgoaXNDaHVuaywgcGllY2UpID0+IHtcbiAgICAgICAgICBjb25zdCBmb3VuZCA9IHBzZXVkb1N0ZXBzLmZpbmQocFN0ZXAgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgcFN0ZXAuZGlmZi5jb21wVHlwZSA9PT0gcGllY2UuY29tcFR5cGUgJiZcbiAgICAgICAgICAgICAgY2hlY2socGllY2UsIHBTdGVwLmZhY3RvclNldHMuY3VycmVudClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChwaWVjZS53aXRoKSB7XG4gICAgICAgICAgICBpc0NodW5rID0gcGllY2Uud2l0aC5yZWR1Y2UoKGlzQ2h1bmssIHN1YkNvbmRpdGlvbikgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gaXNDaHVuayAmJiBzdWJDb25kaXRpb24oZm91bmQsIHBpZWNlLmZhY3Rvcik7XG4gICAgICAgICAgICB9LCBpc0NodW5rKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gaXNDaHVuayAmJiAhIWZvdW5kO1xuICAgICAgICB9LCB0cnVlKTtcbiAgICAgICAgaWYgKGlzQ2h1bmspIHtcbiAgICAgICAgICB0b3RhbERpc2NvdW50ICs9IGNvbWJvLmNvc3Q7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0b3RhbERpc2NvdW50O1xuICAgIH0sXG4gICAgMFxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRDb3N0KHBzZXVkb1N0ZXApIHtcbiAgLy8gVG9kb1xuICBpZiAoXG4gICAgcHNldWRvU3RlcC5kaWZmLmNvbXBUeXBlID09PSBcInZpZXdcIiB8fFxuICAgIHBzZXVkb1N0ZXAuZGlmZi5jb21wVHlwZSA9PT0gXCJwYXVzZVwiXG4gICkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIGxldCBzdGVwQ29zdCA9IDA7XG4gIGZvciAoY29uc3QgY29uZGl0aW9uIG9mIERHLlBFUkNFUFRJT05fQ09TVFtwc2V1ZG9TdGVwLmRpZmYuY29tcFR5cGVdKSB7XG4gICAgY29uc3QgZm91bmRGYWN0b3IgPSBwc2V1ZG9TdGVwLmZhY3RvclNldHMuY3VycmVudC5maW5kKFxuICAgICAgZmN0ciA9PiBmY3RyLmluZGV4T2YoY29uZGl0aW9uLmZhY3RvcikgPj0gMFxuICAgICk7XG4gICAgbGV0IHdpdGhfd2l0aG91dCA9IHRydWU7XG4gICAgaWYgKGZvdW5kRmFjdG9yICYmIGNvbmRpdGlvbi53aXRoKSB7XG4gICAgICB3aXRoX3dpdGhvdXQgPSBjb25kaXRpb24ud2l0aC5yZWR1Y2UoKHNhdCwgc3ViQ29uZGl0aW9uKSA9PiB7XG4gICAgICAgIHJldHVybiBzYXQgJiYgc3ViQ29uZGl0aW9uKHBzZXVkb1N0ZXAsIGZvdW5kRmFjdG9yKTtcbiAgICAgIH0sIHRydWUpO1xuICAgIH0gZWxzZSBpZiAoZm91bmRGYWN0b3IgJiYgY29uZGl0aW9uLndpdGhvdXQpIHtcbiAgICAgIHdpdGhfd2l0aG91dCA9IGNvbmRpdGlvbi53aXRob3V0LnJlZHVjZSgoc2F0LCBzdWJDb25kaXRpb24pID0+IHtcbiAgICAgICAgcmV0dXJuIHNhdCAmJiAhc3ViQ29uZGl0aW9uKHBzZXVkb1N0ZXAsIGZvdW5kRmFjdG9yKTtcbiAgICAgIH0sIHRydWUpO1xuICAgIH1cblxuICAgIHN0ZXBDb3N0ICs9IGZvdW5kRmFjdG9yICYmIHdpdGhfd2l0aG91dCA/IGNvbmRpdGlvbi5jb3N0IDogMDtcbiAgfVxuICByZXR1cm4gc3RlcENvc3Q7XG59XG5cbmV4cG9ydCB7IGdldENvbWJvQ29zdCwgZ2V0Q29zdCwgZXZhbHVhdGUgfTtcbiIsImltcG9ydCB7IENIQU5ORUxfVE9fQVRUUlNfT0JKIH0gZnJvbSBcIi4vdXRpbFwiO1xuaW1wb3J0IHsgY29weSwgZ2V0LCBpc0VtcHR5IH0gZnJvbSBcIi4uL3V0aWwvdXRpbFwiO1xuXG5mdW5jdGlvbiBnZW5lcmF0ZVRpbWVsaW5lKHBzZXVkb1RpbWVsaW5lLCB1c2VySW5wdXQsIGluY2x1ZGVNZXRhKSB7XG4gIC8vIEFzc3VtZTogcHNldWRvVGltZWxpbmUgPSB7Y29uY2F0OiBbIHtzeW5jOiBbLi4uXSB9LCB7c3luYzogWy4uLl19LCAuLi5dfVxuICAvLyBBc3N1bWU6IHVzZXJJbnB1dD0ge21hcmtzOiB7Li4ufSwgYXhlczogey4uLn0sIGxlZ2VuZHM6IHsuLi59LCBzY2FsZXM6IHsuLi59fVxuICBsZXQgZGVmYXVsdE9wdCA9IHtcbiAgICB0aW1pbmc6IHtcbiAgICAgIGR1cmF0aW9uOiB7XG4gICAgICAgIHJhdGlvOiBNYXRoLmZsb29yKDEwMCAvIHBzZXVkb1RpbWVsaW5lLmNvbmNhdC5sZW5ndGgpIC8gMTAwXG4gICAgICB9XG4gICAgfVxuICB9O1xuICBpZiAodXNlcklucHV0Lmdsb2JhbCkge1xuICAgIGRlZmF1bHRPcHQgPSBPYmplY3QuYXNzaWduKGRlZmF1bHRPcHQsIHVzZXJJbnB1dC5nbG9iYWwpO1xuICB9XG4gIGxldCBvcHQ7XG5cbiAgY29uc3QgbmV3Q29uY2F0ID0gcHNldWRvVGltZWxpbmUuY29uY2F0Lm1hcChzeW5jQmxvY2sgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBzeW5jOiBzeW5jQmxvY2suc3luYy5tYXAocHNldWRvU3RlcCA9PiB7XG4gICAgICAgIGxldCBzdGVwO1xuICAgICAgICBzd2l0Y2ggKHBzZXVkb1N0ZXAuZGlmZi5jb21wVHlwZSkge1xuICAgICAgICBjYXNlIFwibWFya1wiOlxuICAgICAgICAgIG9wdCA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIGRlZmF1bHRPcHQsXG4gICAgICAgICAgICBnZXQodXNlcklucHV0LCBcIm1hcmtzXCIsIHBzZXVkb1N0ZXAuZGlmZi5jb21wTmFtZSkgfHwge31cbiAgICAgICAgICApO1xuICAgICAgICAgIHN0ZXAgPSBnZW5lcmF0ZU1hcmtDb21wU3RlcChwc2V1ZG9TdGVwLCBvcHQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiYXhpc1wiOlxuICAgICAgICAgIG9wdCA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIGRlZmF1bHRPcHQsXG4gICAgICAgICAgICBnZXQodXNlcklucHV0LCBcImF4ZXNcIiwgcHNldWRvU3RlcC5kaWZmLmNvbXBOYW1lKSB8fCB7fVxuICAgICAgICAgICk7XG4gICAgICAgICAgc3RlcCA9IGdlbmVyYXRlQXhpc0NvbXBTdGVwKHBzZXVkb1N0ZXAsIG9wdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJsZWdlbmRcIjpcbiAgICAgICAgICBvcHQgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICBkZWZhdWx0T3B0LFxuICAgICAgICAgICAgZ2V0KHVzZXJJbnB1dCwgXCJsZWdlbmRzXCIsIHBzZXVkb1N0ZXAuZGlmZi5jb21wTmFtZSkgfHwge31cbiAgICAgICAgICApO1xuICAgICAgICAgIHN0ZXAgPSBnZW5lcmF0ZUxlZ2VuZENvbXBTdGVwKHBzZXVkb1N0ZXAsIG9wdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ2aWV3XCI6XG4gICAgICAgICAgc3RlcCA9IGdlbmVyYXRlVmlld0NvbXBTdGVwKHBzZXVkb1N0ZXAsIG9wdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluY2x1ZGVNZXRhKSB7XG4gICAgICAgICAgc3RlcC5tZXRhID0gcHNldWRvU3RlcC5tZXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN0ZXA7XG4gICAgICB9KSxcbiAgICAgIC4uLihpbmNsdWRlTWV0YSA/IHsgbWV0YTogc3luY0Jsb2NrLm1ldGEgfSA6IHt9KVxuICAgIH07XG4gIH0pO1xuICByZXR1cm4geyBjb25jYXQ6IG5ld0NvbmNhdCB9O1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVZpZXdDb21wU3RlcChwc2V1ZG9WaWV3U3RlcCwgb3B0KSB7XG4gIHJldHVybiB7XG4gICAgY29tcG9uZW50OiBcInZpZXdcIixcbiAgICBjaGFuZ2U6IHtcbiAgICAgIHNpZ25hbDogcHNldWRvVmlld1N0ZXAuZmFjdG9yU2V0cy5jdXJyZW50XG4gICAgfSxcbiAgICB0aW1pbmc6IHBzZXVkb1ZpZXdTdGVwLnRpbWluZyB8fCBjb3B5KG9wdC50aW1pbmcpXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlQXhpc0NvbXBTdGVwKHBzZXVkb1N0ZXAsIG9wdCkge1xuICBjb25zdCBzY2FsZURvbWFpbkRpbWVuc2lvbiA9IGdldChvcHQsIFwiY2hhbmdlXCIsIFwic2NhbGVcIiwgXCJkb21haW5EaW1lbnNpb25cIik7XG4gIGNvbnN0IHsgZmFjdG9yU2V0cyB9ID0gcHNldWRvU3RlcDtcbiAgY29uc3Qgc3RlcCA9IHtcbiAgICBjb21wb25lbnQ6IHsgYXhpczogcHNldWRvU3RlcC5kaWZmLmNvbXBOYW1lIH0sXG4gICAgY2hhbmdlOiB7fSxcbiAgICB0aW1pbmc6IHBzZXVkb1N0ZXAudGltaW5nIHx8IGNvcHkob3B0LnRpbWluZylcbiAgfTtcbiAgaWYgKHNjYWxlRG9tYWluRGltZW5zaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICBzdGVwLmNoYW5nZSA9IHsgc2NhbGU6IHsgZG9tYWluRGltZW5zaW9uOiBzY2FsZURvbWFpbkRpbWVuc2lvbiB9IH07XG4gIH1cbiAgaWYgKFxuICAgIGZhY3RvclNldHMuYWxsLmluZGV4T2YoXCJzY2FsZS55XCIpID49IDAgJiZcbiAgICBmYWN0b3JTZXRzLmFwcGxpZWQuaW5kZXhPZihcInNjYWxlLnlcIikgPCAwXG4gICkge1xuICAgIHN0ZXAuY2hhbmdlLnNjYWxlID0gZmFsc2U7XG4gIH0gZWxzZSBpZiAoXG4gICAgZmFjdG9yU2V0cy5hbGwuaW5kZXhPZihcInNjYWxlLnhcIikgPj0gMCAmJlxuICAgIGZhY3RvclNldHMuYXBwbGllZC5pbmRleE9mKFwic2NhbGUueFwiKSA8IDBcbiAgKSB7XG4gICAgc3RlcC5jaGFuZ2Uuc2NhbGUgPSBmYWxzZTtcbiAgfVxuICBpZiAoXG4gICAgZmFjdG9yU2V0cy5hcHBsaWVkLmluZGV4T2YoXCJlbmNvZGVcIikgPCAwICYmXG4gICAgZmFjdG9yU2V0cy5hbGwuaW5kZXhPZihcImVuY29kZVwiKSA+PSAwXG4gICkge1xuICAgIHN0ZXAuY2hhbmdlLmVuY29kZSA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKFxuICAgIHN0ZXAuY2hhbmdlLmVuY29kZSA9PT0gZmFsc2UgJiZcbiAgICBmYWN0b3JTZXRzLmFwcGxpZWQuaW5kZXhPZihcImVuY29kZS5vbmx5LmdyaWRcIikgPj0gMFxuICApIHtcbiAgICBzdGVwLmNoYW5nZS5lbmNvZGUgPSB7XG4gICAgICBncmlkOiB0cnVlLFxuICAgICAgYXhpczogZmFsc2UsXG4gICAgICBsYWJlbHM6IGZhbHNlLFxuICAgICAgdGl0bGU6IGZhbHNlLFxuICAgICAgdGlja3M6IGZhbHNlLFxuICAgICAgZG9tYWluOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBpZiAoXG4gICAgKCAoc3RlcC5jaGFuZ2UuZW5jb2RlID09PSBmYWxzZSkgfHxcbiAgICAgIChnZXQoc3RlcCwgXCJjaGFuZ2VcIiwgXCJlbmNvZGVcIiwgXCJheGlzXCIpID09PSBmYWxzZSkgKSAmJlxuICAgIGZhY3RvclNldHMuYXBwbGllZC5pbmRleE9mKFwiZW5jb2RlLnBvc2l0aW9uXCIpID49IDBcbiAgKSB7XG4gICAgaWYgKHN0ZXAuY2hhbmdlLmVuY29kZSkge1xuICAgICAgc3RlcC5jaGFuZ2UuZW5jb2RlLmF4aXMgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RlcC5jaGFuZ2UuZW5jb2RlID0ge2F4aXM6IGZhbHNlfTtcbiAgICB9XG4gIH1cblxuICBpZiAoaXNFbXB0eShzdGVwLmNoYW5nZSkpIHtcbiAgICBkZWxldGUgc3RlcC5jaGFuZ2U7XG4gIH1cblxuICByZXR1cm4gc3RlcDtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVMZWdlbmRDb21wU3RlcChwc2V1ZG9TdGVwLCBvcHQpIHtcbiAgY29uc3Qgc3RlcCA9IHtcbiAgICBjb21wb25lbnQ6IHsgbGVnZW5kOiBwc2V1ZG9TdGVwLmRpZmYuY29tcE5hbWUgfSxcbiAgICB0aW1pbmc6IHBzZXVkb1N0ZXAudGltaW5nIHx8IGNvcHkob3B0LnRpbWluZylcbiAgfTtcbiAgLy8gY29uc3QgZmFjdG9yU2V0cyA9IHBzZXVkb1N0ZXAuZmFjdG9yU2V0cztcbiAgLy8gaWYgKGZhY3RvclNldHMgJiYgZmFjdG9yU2V0cy5jdXJyZW50ICYmIGZhY3RvclNldHMuY3VycmVudC5sZW5ndGggPiAwKSB7XG4gIC8vICAgc3RlcC5jaGFuZ2UgPSB7XG4gIC8vICAgICBzY2FsZTogZmFjdG9yU2V0cy5jdXJyZW50Lm1hcChmY3QgPT4gZmN0LnJlcGxhY2UoXCJzY2FsZS5cIiwgXCJcIikpXG4gIC8vICAgfTtcbiAgLy8gfVxuICAvLyBpZiAoZmFjdG9yU2V0cy5jdXJyZW50LmluZGV4T2YoXCJlbmNvZGUucG9zaXRpb25cIikgPCAwICYmIGZhY3RvclNldHMuYWxsLmluZGV4T2YoXCJlbmNvZGUucG9zaXRpb25cIikgPj0gMCkge1xuICAvLyAgIHN0ZXAuY2hhbmdlID0ge1xuICAvLyAgICAgLi4uKHN0ZXAuY2hhbmdlIHx8IHt9KSxcbiAgLy8gICAgIGVuY29kZTogeyBsZWdlbmQ6IGZhbHNlIH1cbiAgLy8gICB9O1xuICAvLyB9XG4gIHJldHVybiBzdGVwO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZU1hcmtDb21wU3RlcChwc2V1ZG9TdGVwLCBvcHQpIHtcbiAgY29uc3QgbWFya0NvbXBEaWZmID0gcHNldWRvU3RlcC5kaWZmO1xuICBjb25zdCB7IGZhY3RvclNldHMgfSA9IHBzZXVkb1N0ZXA7XG4gIGNvbnN0IHN0ZXAgPSB7XG4gICAgY29tcG9uZW50OiB7IG1hcms6IG1hcmtDb21wRGlmZi5jb21wTmFtZSB9LFxuICAgIGNoYW5nZTogZ2V0QmxhbmtDaGFuZ2UoZmFjdG9yU2V0cy5hbGwpLFxuICAgIHRpbWluZzogcHNldWRvU3RlcC50aW1pbmcgfHwgY29weShvcHQudGltaW5nKVxuICB9O1xuICBpZiAoZmFjdG9yU2V0cy5hcHBsaWVkLmluZGV4T2YoXCJyZW1vdmVcIikgPj0gMCkge1xuICAgIGRlbGV0ZSBzdGVwLmNoYW5nZTtcbiAgICByZXR1cm4gc3RlcDtcbiAgfVxuICAvLyBjaGFuZ2Uuc2NhbGVcbiAgY29uc3Qgc2NhbGVGYWN0cm9zID0gZmFjdG9yU2V0cy5hcHBsaWVkLmZpbHRlcihcbiAgICBmY3RyID0+IGZjdHIuaW5kZXhPZihcInNjYWxlXCIpID49IDBcbiAgKTtcbiAgaWYgKHNjYWxlRmFjdHJvcy5sZW5ndGggPiAwKSB7XG4gICAgc3RlcC5jaGFuZ2Uuc2NhbGUgPSBzY2FsZUZhY3Ryb3MubWFwKGZjdHIgPT4gZmN0ci5yZXBsYWNlKFwic2NhbGUuXCIsIFwiXCIpKTtcbiAgfVxuXG4gIC8vIGNoYW5nZS5kYXRhXG4gIGlmIChmYWN0b3JTZXRzLmFwcGxpZWQuaW5kZXhPZihcImRhdGFcIikgPj0gMCkge1xuICAgIHN0ZXAuY2hhbmdlLmRhdGEgPSBnZXQob3B0LCBcImNoYW5nZVwiLCBcImRhdGFcIikgfHwgdHJ1ZTtcbiAgfVxuXG4gIC8vIFRvZG86IEZvciBlbmNvZGUgZmFjdG9ycyBub3QgaW4gdGhlIGZhY3RvclNldCwgdGhlbiBpdCBzaG91bGQgbm90IHNwZWNpZnkgYW55dGhpbmcuXG4gIC8vIGNoYW5nZS5lbmNvZGVcbiAgY29uc3QgZW5jb2RlRmFjdG9ycyA9IGZhY3RvclNldHMuYXBwbGllZC5maWx0ZXIoXG4gICAgZmN0ciA9PiBmY3RyLmluZGV4T2YoXCJlbmNvZGVcIikgPj0gMFxuICApO1xuICBjb25zdCBlbmNvZGVDaGFuZ2UgPSBnZXRCbGFua0VuY29kZUNoYW5nZShcbiAgICBmYWN0b3JTZXRzLmFsbC5jb25jYXQoZmFjdG9yU2V0cy5leHRyYUJ5TWFya3R5cGUpXG4gICk7XG5cbiAgaWYgKGVuY29kZUZhY3RvcnMubGVuZ3RoID4gMCkge1xuICAgIGVuY29kZUZhY3RvcnMuZm9yRWFjaChmY3RyID0+IHtcbiAgICAgIGNvbnN0IGNoYW5uZWwgPSBmY3RyLnJlcGxhY2UoXCJlbmNvZGUuXCIsIFwiXCIpO1xuICAgICAgY29uc3QgYXR0cnMgPSBDSEFOTkVMX1RPX0FUVFJTX09CSltjaGFubmVsXTtcbiAgICAgIGF0dHJzLmZvckVhY2goYXR0ciA9PiB7XG4gICAgICAgIGRlbGV0ZSBlbmNvZGVDaGFuZ2UudXBkYXRlW2F0dHJdO1xuICAgICAgICBkZWxldGUgZW5jb2RlQ2hhbmdlLmV4aXRbYXR0cl07XG4gICAgICAgIGRlbGV0ZSBlbmNvZGVDaGFuZ2UuZW50ZXJbYXR0cl07XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICBzdGVwLmNoYW5nZS5lbmNvZGUgPSBlbmNvZGVDaGFuZ2U7XG5cbiAgLy8gY2hhbmdlLm1hcmt0eXBlXG4gIGlmIChmYWN0b3JTZXRzLmFwcGxpZWQuaW5kZXhPZihcIm1hcmt0eXBlXCIpID49IDApIHtcbiAgICBzdGVwLmNoYW5nZS5tYXJrdHlwZSA9IHRydWU7XG5cbiAgICBmYWN0b3JTZXRzLmV4dHJhQnlNYXJrdHlwZS5mb3JFYWNoKGZjdHIgPT4ge1xuICAgICAgY29uc3QgY2hhbm5lbCA9IGZjdHIucmVwbGFjZShcImVuY29kZS5cIiwgXCJcIik7XG4gICAgICBjb25zdCBhdHRycyA9IENIQU5ORUxfVE9fQVRUUlNfT0JKW2NoYW5uZWxdO1xuICAgICAgYXR0cnMuZm9yRWFjaChhdHRyID0+IHtcbiAgICAgICAgZGVsZXRlIHN0ZXAuY2hhbmdlLmVuY29kZS51cGRhdGVbYXR0cl07XG4gICAgICAgIGRlbGV0ZSBzdGVwLmNoYW5nZS5lbmNvZGUuZXhpdFthdHRyXTtcbiAgICAgICAgZGVsZXRlIHN0ZXAuY2hhbmdlLmVuY29kZS5lbnRlclthdHRyXTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgW1widXBkYXRlXCIsIFwiZW50ZXJcIiwgXCJleGl0XCJdLmZvckVhY2goZGF0YVNldCA9PiB7XG4gICAgaWYgKCFpc0VtcHR5KGdldChzdGVwLCBcImNoYW5nZVwiLCBcImVuY29kZVwiLCBkYXRhU2V0KSkpIHtcbiAgICAgIHN0ZXAuY2hhbmdlLmVuY29kZVtkYXRhU2V0XSA9IE9iamVjdC5rZXlzKHN0ZXAuY2hhbmdlLmVuY29kZVtkYXRhU2V0XSlcbiAgICAgICAgLmZpbHRlcihhdHRyID0+IG1hcmtDb21wRGlmZi5tZXRhLnVzZWRFbkF0dHJzLmluZGV4T2YoYXR0cikgPj0gMClcbiAgICAgICAgLnJlZHVjZSgoYWNjLCBhdHRyKSA9PiB7XG4gICAgICAgICAgYWNjW2F0dHJdID0gc3RlcC5jaGFuZ2UuZW5jb2RlW2RhdGFTZXRdW2F0dHJdO1xuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KTtcbiAgICB9XG5cbiAgICBpZiAoaXNFbXB0eShnZXQoc3RlcCwgXCJjaGFuZ2VcIiwgXCJlbmNvZGVcIiwgZGF0YVNldCkpKSB7XG4gICAgICBzdGVwLmNoYW5nZS5lbmNvZGVbZGF0YVNldF0gPSB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHN0ZXA7XG59XG5cbi8vIEl0IHByb3ZpZGVzIGEgY2hhbmdlLmVuY29kZSB0aGF0IGRvZXMgbm90IGNoYW5nZSBhbnkgYXR0cmlidXRlLlxuLy8gVGhlIGJsYW5rRW5jb2RlQ2hhbmdlcyBhcmUgdG8gYmUgYXNzaWduZWQgYnkgZW5jb2RlIGZhY3RvcnMuXG5mdW5jdGlvbiBnZXRCbGFua0VuY29kZUNoYW5nZShyZWxhdGVkRmFjdG9ycykge1xuICBjb25zdCBibGFua0VuY29kZSA9IHJlbGF0ZWRGYWN0b3JzXG4gICAgLmZpbHRlcihmY3RyID0+IGZjdHIuaW5kZXhPZihcImVuY29kZVwiKSA+PSAwKVxuICAgIC5tYXAoZmN0ciA9PiBDSEFOTkVMX1RPX0FUVFJTX09CSltmY3RyLnJlcGxhY2UoXCJlbmNvZGUuXCIsIFwiXCIpXSlcbiAgICAucmVkdWNlKChibGFua0VuY29kZSwgYXR0cnMpID0+IHtcbiAgICAgIGF0dHJzLmZvckVhY2goYXR0ciA9PiB7XG4gICAgICAgIGJsYW5rRW5jb2RlW2F0dHJdID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBibGFua0VuY29kZTtcbiAgICB9LCB7fSk7XG5cbiAgY29uc3QgYmxhbmtFeGl0RW5jb2RlID0gY29weShibGFua0VuY29kZSk7XG4gIGRlbGV0ZSBibGFua0V4aXRFbmNvZGUub3BhY2l0eTtcblxuICByZXR1cm4ge1xuICAgIHVwZGF0ZTogY29weShibGFua0VuY29kZSksXG4gICAgZW50ZXI6IGJsYW5rRXhpdEVuY29kZSxcbiAgICBleGl0OiBibGFua0V4aXRFbmNvZGVcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldEJsYW5rQ2hhbmdlKGFsbEZhY3RvcnMpIHtcbiAgcmV0dXJuIFtcInNjYWxlXCIsIFwic2lnbmFsXCIsIFwiZGF0YVwiLCBcImVuY29kZVwiLCBcIm1hcmt0eXBlXCJdLnJlZHVjZShcbiAgICAoY2hhbmdlLCBmYWN0b3IpID0+IHtcbiAgICAgIGlmIChhbGxGYWN0b3JzLmZpbmQoZiA9PiBmLmluZGV4T2YoZmFjdG9yKSA+PSAwKSkge1xuICAgICAgICBjaGFuZ2VbZmFjdG9yXSA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNoYW5nZTtcbiAgICB9LFxuICAgIHt9XG4gICk7XG59XG5leHBvcnQgeyBnZW5lcmF0ZVRpbWVsaW5lLCBnZW5lcmF0ZU1hcmtDb21wU3RlcCB9O1xuIiwiaW1wb3J0ICogYXMgdmVnYSBmcm9tIFwidmVnYVwiO1xuaW1wb3J0IHsgZGV0ZWN0RGlmZnMgfSBmcm9tIFwiLi9kaWZmRGV0ZWN0b3JcIjtcbmltcG9ydCB7IGVudW1lcmF0ZVBzZXVkb1RpbWVsaW5lcyB9IGZyb20gXCIuL3BzZXVkb1RpbWVsaW5lRW51bWVyYXRvclwiO1xuaW1wb3J0IHsgZXZhbHVhdGUgfSBmcm9tIFwiLi9wc2V1ZG9UaW1lbGluZUV2YWx1YXRvclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGVUaW1lbGluZSB9IGZyb20gXCIuL3RpbWVsaW5lR2VuZXJhdG9yXCI7XG5pbXBvcnQgeyBjb3B5IH0gZnJvbSBcIi4uL3V0aWwvdXRpbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbihcbiAgc1NwZWMsXG4gIGVTcGVjLFxuICBvcHQgPSB7IG1hcmtzOiB7fSwgYXhlczoge30sIGxlZ2VuZHM6IHt9LCBzY2FsZXM6IHt9IH1cbikge1xuICBjb25zdCB1c2VySW5wdXQgPSBvcHQ7XG4gIGNvbnN0IHN0YWdlTiA9IE51bWJlcihvcHQuc3RhZ2VOKSB8fCAyO1xuICBjb25zdCB7IGluY2x1ZGVNZXRhIH0gPSBvcHQ7XG4gIGNvbnN0IHRpbWluZyA9IHsgdG90YWxEdXJhdGlvbjogdXNlcklucHV0LnRvdGFsRHVyYXRpb24gfHwgMjAwMCB9O1xuXG4gIHVzZXJJbnB1dC5heGVzID0gdXNlcklucHV0LmF4ZXMgfHwge307XG4gIGZvciAoY29uc3Qgc2NhbGVOYW1lIGluIHVzZXJJbnB1dC5zY2FsZXMgfHwge30pIHtcbiAgICB1c2VySW5wdXQuYXhlc1tzY2FsZU5hbWVdID0gdXNlcklucHV0LmF4ZXNbc2NhbGVOYW1lXSB8fCB7fTtcbiAgICB1c2VySW5wdXQuYXhlc1tzY2FsZU5hbWVdLmNoYW5nZSA9IHVzZXJJbnB1dC5heGVzW3NjYWxlTmFtZV0uY2hhbmdlIHx8IHt9O1xuICAgIHVzZXJJbnB1dC5heGVzW3NjYWxlTmFtZV0uY2hhbmdlLnNjYWxlID1cbiAgICAgIHVzZXJJbnB1dC5heGVzW3NjYWxlTmFtZV0uY2hhbmdlLnNjYWxlIHx8IHt9O1xuICAgIGlmICh1c2VySW5wdXQuYXhlc1tzY2FsZU5hbWVdLmNoYW5nZS5zY2FsZSAhPT0gZmFsc2UpIHtcbiAgICAgIHVzZXJJbnB1dC5heGVzW3NjYWxlTmFtZV0uY2hhbmdlLnNjYWxlLmRvbWFpbkRpbWVuc2lvbiA9XG4gICAgICAgIHVzZXJJbnB1dC5zY2FsZXNbc2NhbGVOYW1lXS5kb21haW5EaW1lbnNpb247XG4gICAgfVxuICB9XG4gIGNvbnN0IGVWaWV3ID0gYXdhaXQgbmV3IHZlZ2EuVmlldyh2ZWdhLnBhcnNlKGVTcGVjKSwge1xuICAgIHJlbmRlcmVyOiBcInN2Z1wiXG4gIH0pLnJ1bkFzeW5jKCk7XG5cbiAgY29uc3Qgc1ZpZXcgPSBhd2FpdCBuZXcgdmVnYS5WaWV3KHZlZ2EucGFyc2Uoc1NwZWMpLCB7XG4gICAgcmVuZGVyZXI6IFwic3ZnXCJcbiAgfSkucnVuQXN5bmMoKTtcblxuXG4gIGNvbnN0IHJhd0luZm8gPSB7XG4gICAgc1ZpczogeyBzcGVjOiBjb3B5KHNTcGVjKSwgdmlldzogc1ZpZXcgfSxcbiAgICBlVmlzOiB7IHNwZWM6IGNvcHkoZVNwZWMpLCB2aWV3OiBlVmlldyB9XG4gIH07XG5cbiAgY29uc3QgZGV0ZWN0ZWQgPSBkZXRlY3REaWZmcyhyYXdJbmZvLCB1c2VySW5wdXQpO1xuICAvLyBmb3IgKGxldCBpID0gMTsgaSA8PSBtYXhTdGFnZU47IGkrKykge1xuICAvLyAgIHBzZXVkb1RscyA9IHBzZXVkb1Rscy5jb25jYXQoZW51bWVyYXRlUHNldWRvVGltZWxpbmVzKGRldGVjdGVkLCBpLCByYXdJbmZvKSk7XG4gIC8vIH1cbiAgbGV0IHBzZXVkb1RscyA9IGVudW1lcmF0ZVBzZXVkb1RpbWVsaW5lcyhkZXRlY3RlZCwgc3RhZ2VOLCByYXdJbmZvLCB0aW1pbmcpO1xuICBwc2V1ZG9UbHMgPSBwc2V1ZG9UbHNcbiAgICAubWFwKHBzZXVkb1RsID0+IHtcbiAgICAgIHBzZXVkb1RsLmV2YWwgPSBldmFsdWF0ZShwc2V1ZG9UbCk7XG4gICAgICByZXR1cm4gcHNldWRvVGw7XG4gICAgfSlcbiAgICAuc29ydCgoYSwgYikgPT4gY29tcGFyZUNvc3QoYS5ldmFsLCBiLmV2YWwpKTtcblxuICByZXR1cm4gcHNldWRvVGxzLm1hcChwc2V1ZG9UbCA9PiB7XG4gICAgY29uc3QgbWV0YSA9IGluY2x1ZGVNZXRhID8gcHNldWRvVGwuZXZhbCA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4ge1xuICAgICAgc3BlYzoge1xuICAgICAgICB0aW1lbGluZTogZ2VuZXJhdGVUaW1lbGluZShwc2V1ZG9UbCwgdXNlcklucHV0LCBpbmNsdWRlTWV0YSksXG4gICAgICAgIHRvdGFsRHVyYXRpb246IHRpbWluZy50b3RhbER1cmF0aW9uLFxuICAgICAgICBtZXRhXG4gICAgICB9LFxuICAgICAgcHNldWRvVGltZWxpbmU6IHBzZXVkb1RsXG4gICAgfTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gY29tcGFyZUNvc3QoYSwgYikge1xuICBpZiAoYS5jb3N0ID09PSBiLmNvc3QpIHtcbiAgICBpZiAoYS50aWVicmVha2VyID09PSBiLnRpZWJyZWFrZXIpIHtcbiAgICAgIHJldHVybiBhLnRpZWJyZWFrZXIyIC0gYi50aWVicmVha2VyMjtcbiAgICB9XG4gICAgcmV0dXJuIGEudGllYnJlYWtlciAtIGIudGllYnJlYWtlcjtcbiAgfVxuICByZXR1cm4gYS5jb3N0IC0gYi5jb3N0O1xufVxuIiwiaW1wb3J0ICogYXMgZDMgZnJvbSBcImQzXCI7XG5pbXBvcnQgKiBhcyB2ZWdhTGl0ZSBmcm9tIFwidmVnYS1saXRlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZsMnZnNGdlbWluaSh2bFNwZWMpIHtcbiAgbGV0IHZnU3BlYyA9IHZlZ2FMaXRlLmNvbXBpbGUodmxTcGVjKS5zcGVjO1xuICB2Z1NwZWMuYXhlcyA9IG1lcmdlRHVwbGljYXRlZEF4ZXModmdTcGVjLmF4ZXMpO1xuICBhcHBlbmROYW1lc09uR3VpZGVzKHZnU3BlYyk7XG4gIHJldHVybiB2Z1NwZWM7XG59XG5cblxuZnVuY3Rpb24gYXBwZW5kTmFtZXNPbkd1aWRlcyh2Z1NwZWMpe1xuICBpZiAodmdTcGVjLmF4ZXMpIHtcbiAgICB2Z1NwZWMuYXhlcy5mb3JFYWNoKGF4aXMgPT4ge1xuICAgICAgaWYgKCFheGlzLmVuY29kZSkge1xuICAgICAgICBheGlzLmVuY29kZSA9IHtheGlzOiB7bmFtZTogYXhpcy5zY2FsZX19O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXhpcy5lbmNvZGUuYXhpcyA9IHsgLi4uYXhpcy5lbmNvZGUuYXhpcywgbmFtZTogYXhpcy5zY2FsZSB9O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGlmICh2Z1NwZWMubGVnZW5kcykge1xuICAgIHZnU3BlYy5sZWdlbmRzLmZvckVhY2goKGxlZ2VuZCwgaSkgPT4ge1xuICAgICAgaWYgKCFsZWdlbmQuZW5jb2RlKSB7XG4gICAgICAgIGxlZ2VuZC5lbmNvZGUgPSB7bGVnZW5kOiB7bmFtZTogYGxlZ2VuZCR7aX1gfX07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZWdlbmQuZW5jb2RlLmxlZ2VuZCA9IE9iamVjdC5hc3NpZ24oe30sIGxlZ2VuZC5lbmNvZGUubGVnZW5kLCB7bmFtZTogYGxlZ2VuZCR7aX1gfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBtZXJnZUR1cGxpY2F0ZWRBeGVzKHZlZ2FBeGVzKSB7XG4gIGlmICghdmVnYUF4ZXMgfHwgdmVnYUF4ZXMubGVuZ3RoIDw9IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgbGV0IGF4ZXNTY2FsZXMgPSB2ZWdhQXhlcy5maWx0ZXIoYSA9PiBhLmdyaWQpLm1hcChhID0+IGEuc2NhbGUpO1xuXG4gIHJldHVybiBkMy5uZXN0KClcbiAgICAua2V5KGF4aXMgPT4gYXhpcy5zY2FsZSlcbiAgICAucm9sbHVwKGF4ZXMgPT4ge1xuICAgICAgbGV0IGF4aXNXaXRoR3JpZCA9IGF4ZXMuZmluZChhID0+IGEuZ3JpZCk7XG4gICAgICBsZXQgYXhpc1dpdGhvdXRHcmlkID0geyAuLi5heGVzLmZpbmQoYSA9PiAhYS5ncmlkKSB9O1xuXG4gICAgICBpZiAoYXhpc1dpdGhHcmlkKSB7XG4gICAgICAgIGF4aXNXaXRob3V0R3JpZC5ncmlkID0gdHJ1ZTtcbiAgICAgICAgaWYgKGF4aXNXaXRoR3JpZC5ncmlkU2NhbGUpIHtcbiAgICAgICAgICBheGlzV2l0aG91dEdyaWQuZ3JpZFNjYWxlID0gYXhpc1dpdGhHcmlkLmdyaWRTY2FsZTtcbiAgICAgICAgfVxuICAgICAgICBheGlzV2l0aG91dEdyaWQuemluZGV4ID0gMDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBheGlzV2l0aG91dEdyaWQ7XG4gICAgfSkuZW50cmllcyh2ZWdhQXhlcylcbiAgICAubWFwKGQgPT4gZC52YWx1ZSlcbiAgICAuc29ydCgoYSxiKSA9PiAoYXhlc1NjYWxlcy5pbmRleE9mKGEuc2NhbGUpIC0gYXhlc1NjYWxlcy5pbmRleE9mKGIuc2NhbGUpKSk7XG59XG5cbiIsImltcG9ydCB7IEdlbWluaSB9IGZyb20gXCIuL2dlbWluaS5qc1wiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyByZWNvbW1lbmQsIGNvbXBhcmVDb3N0IH0gZnJvbSBcIi4vcmVjb21tZW5kZXJcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgdmwydmc0Z2VtaW5pIH0gZnJvbSBcIi4vdXRpbC92bDJ2ZzRnZW1pbmlcIjtcblxuY29uc3QgeyBhbmltYXRlIH0gPSBHZW1pbmk7XG5leHBvcnQgeyBhbmltYXRlLCByZWNvbW1lbmQsIGNvbXBhcmVDb3N0LCB2bDJ2ZzRnZW1pbmkgfTtcbiJdLCJuYW1lcyI6WyJtZXJnZSIsInNldHMiLCJsZW5ndGgiLCJzbGljZSIsInhsIiwieCIsImpvaW4iLCJzdWJleHAiLCJzdHIiLCJ0eXBlT2YiLCJvIiwidW5kZWZpbmVkIiwiT2JqZWN0IiwicHJvdG90eXBlIiwidG9TdHJpbmciLCJjYWxsIiwic3BsaXQiLCJwb3AiLCJzaGlmdCIsInRvTG93ZXJDYXNlIiwidG9VcHBlckNhc2UiLCJ0b0FycmF5Iiwib2JqIiwiQXJyYXkiLCJzZXRJbnRlcnZhbCIsImFzc2lnbiIsInRhcmdldCIsInNvdXJjZSIsImtleSIsImJ1aWxkRXhwcyIsImlzSVJJIiwiQUxQSEEkJCIsIkNSJCIsIkRJR0lUJCQiLCJEUVVPVEUkJCIsIkhFWERJRyQkIiwiUENUX0VOQ09ERUQkIiwiU1VCX0RFTElNUyQkIiwiUkVTRVJWRUQkJCIsIkdFTl9ERUxJTVMkJCIsIlVDU0NIQVIkJCIsIlNDSEVNRSQiLCJVU0VSSU5GTyQiLCJVTlJFU0VSVkVEJCQiLCJERUNfT0NURVQkIiwiREVDX09DVEVUX1JFTEFYRUQkIiwiSDE2JCIsIkxTMzIkIiwiSVBWNEFERFJFU1MkIiwiSVBWNkFERFJFU1MxJCIsIklQVjZBRERSRVNTMiQiLCJJUFY2QUREUkVTUzMkIiwiSVBWNkFERFJFU1M0JCIsIklQVjZBRERSRVNTNSQiLCJJUFY2QUREUkVTUzYkIiwiSVBWNkFERFJFU1M3JCIsIklQVjZBRERSRVNTOCQiLCJJUFY2QUREUkVTUzkkIiwiWk9ORUlEJCIsIklQX0xJVEVSQUwkIiwiSE9TVCQiLCJQQ0hBUiQiLCJTRUdNRU5UJCIsIlNFR01FTlRfTlpfTkMkIiwiUEFUSF9BQkVNUFRZJCIsIlFVRVJZJCIsIklQUklWQVRFJCQiLCJSZWdFeHAiLCJJUFY2QUREUkVTUyQiLCJtYXhJbnQiLCJiYXNlIiwidE1pbiIsInRNYXgiLCJza2V3IiwiZGFtcCIsImluaXRpYWxCaWFzIiwiaW5pdGlhbE4iLCJkZWxpbWl0ZXIiLCJyZWdleFB1bnljb2RlIiwicmVnZXhOb25BU0NJSSIsInJlZ2V4U2VwYXJhdG9ycyIsImVycm9ycyIsImJhc2VNaW51c1RNaW4iLCJmbG9vciIsIk1hdGgiLCJzdHJpbmdGcm9tQ2hhckNvZGUiLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJlcnJvciIsInR5cGUiLCJSYW5nZUVycm9yIiwibWFwIiwiYXJyYXkiLCJmbiIsInJlc3VsdCIsIm1hcERvbWFpbiIsInN0cmluZyIsInBhcnRzIiwicmVwbGFjZSIsImxhYmVscyIsImVuY29kZWQiLCJ1Y3MyZGVjb2RlIiwib3V0cHV0IiwiY291bnRlciIsInZhbHVlIiwiY2hhckNvZGVBdCIsImV4dHJhIiwicHVzaCIsInVjczJlbmNvZGUiLCJmcm9tQ29kZVBvaW50IiwiYmFzaWNUb0RpZ2l0IiwiY29kZVBvaW50IiwiZGlnaXRUb0Jhc2ljIiwiZGlnaXQiLCJmbGFnIiwiYWRhcHQiLCJkZWx0YSIsIm51bVBvaW50cyIsImZpcnN0VGltZSIsImsiLCJkZWNvZGUiLCJpbnB1dCIsImlucHV0TGVuZ3RoIiwiaSIsIm4iLCJiaWFzIiwiYmFzaWMiLCJsYXN0SW5kZXhPZiIsImoiLCJpbmRleCIsIm9sZGkiLCJ3IiwidCIsImJhc2VNaW51c1QiLCJvdXQiLCJzcGxpY2UiLCJlbmNvZGUiLCJjdXJyZW50VmFsdWUiLCJiYXNpY0xlbmd0aCIsImhhbmRsZWRDUENvdW50IiwibSIsImhhbmRsZWRDUENvdW50UGx1c09uZSIsInEiLCJxTWludXNUIiwidG9Vbmljb2RlIiwidGVzdCIsInRvQVNDSUkiLCJwdW55Y29kZSIsIlNDSEVNRVMiLCJwY3RFbmNDaGFyIiwiY2hyIiwiYyIsImUiLCJwY3REZWNDaGFycyIsIm5ld1N0ciIsImlsIiwicGFyc2VJbnQiLCJzdWJzdHIiLCJjMiIsImMzIiwiX25vcm1hbGl6ZUNvbXBvbmVudEVuY29kaW5nIiwiY29tcG9uZW50cyIsInByb3RvY29sIiwiZGVjb2RlVW5yZXNlcnZlZCIsImRlY1N0ciIsIm1hdGNoIiwiVU5SRVNFUlZFRCIsInNjaGVtZSIsIlBDVF9FTkNPREVEIiwiTk9UX1NDSEVNRSIsInVzZXJpbmZvIiwiTk9UX1VTRVJJTkZPIiwiaG9zdCIsIk5PVF9IT1NUIiwicGF0aCIsIk5PVF9QQVRIIiwiTk9UX1BBVEhfTk9TQ0hFTUUiLCJxdWVyeSIsIk5PVF9RVUVSWSIsImZyYWdtZW50IiwiTk9UX0ZSQUdNRU5UIiwiX3N0cmlwTGVhZGluZ1plcm9zIiwiX25vcm1hbGl6ZUlQdjQiLCJtYXRjaGVzIiwiSVBWNEFERFJFU1MiLCJhZGRyZXNzIiwiX25vcm1hbGl6ZUlQdjYiLCJJUFY2QUREUkVTUyIsInpvbmUiLCJyZXZlcnNlIiwibGFzdCIsImZpcnN0IiwiZmlyc3RGaWVsZHMiLCJsYXN0RmllbGRzIiwiaXNMYXN0RmllbGRJUHY0QWRkcmVzcyIsImZpZWxkQ291bnQiLCJsYXN0RmllbGRzU3RhcnQiLCJmaWVsZHMiLCJhbGxaZXJvRmllbGRzIiwicmVkdWNlIiwiYWNjIiwiZmllbGQiLCJsYXN0TG9uZ2VzdCIsImxvbmdlc3RaZXJvRmllbGRzIiwic29ydCIsImEiLCJiIiwibmV3SG9zdCIsIm5ld0ZpcnN0IiwibmV3TGFzdCIsIlVSSV9QQVJTRSIsIk5PX01BVENIX0lTX1VOREVGSU5FRCIsInBhcnNlIiwidXJpU3RyaW5nIiwib3B0aW9ucyIsImlyaSIsIklSSV9QUk9UT0NPTCIsIlVSSV9QUk9UT0NPTCIsInJlZmVyZW5jZSIsInBvcnQiLCJpc05hTiIsImluZGV4T2YiLCJzY2hlbWVIYW5kbGVyIiwidW5pY29kZVN1cHBvcnQiLCJkb21haW5Ib3N0IiwiX3JlY29tcG9zZUF1dGhvcml0eSIsInVyaVRva2VucyIsIl8iLCIkMSIsIiQyIiwiUkRTMSIsIlJEUzIiLCJSRFMzIiwiUkRTNSIsInJlbW92ZURvdFNlZ21lbnRzIiwiaW0iLCJzIiwiRXJyb3IiLCJzZXJpYWxpemUiLCJhdXRob3JpdHkiLCJjaGFyQXQiLCJhYnNvbHV0ZVBhdGgiLCJyZXNvbHZlQ29tcG9uZW50cyIsInJlbGF0aXZlIiwic2tpcE5vcm1hbGl6YXRpb24iLCJ0b2xlcmFudCIsInJlc29sdmUiLCJiYXNlVVJJIiwicmVsYXRpdmVVUkkiLCJzY2hlbWVsZXNzT3B0aW9ucyIsIm5vcm1hbGl6ZSIsInVyaSIsImVxdWFsIiwidXJpQSIsInVyaUIiLCJlc2NhcGVDb21wb25lbnQiLCJFU0NBUEUiLCJ1bmVzY2FwZUNvbXBvbmVudCIsImhhbmRsZXIiLCJodHRwIiwiTyIsIkFURVhUJCQiLCJRVEVYVCQkIiwiVkNIQVIkJCIsIlNPTUVfREVMSU1TJCQiLCJOT1RfTE9DQUxfUEFSVCIsIk5PVF9IRk5BTUUiLCJOT1RfSEZWQUxVRSIsIm1haWx0b0NvbXBvbmVudHMiLCJ0byIsInVua25vd25IZWFkZXJzIiwiaGVhZGVycyIsImhmaWVsZHMiLCJoZmllbGQiLCJ0b0FkZHJzIiwic3ViamVjdCIsImJvZHkiLCJhZGRyIiwidG9BZGRyIiwiYXRJZHgiLCJsb2NhbFBhcnQiLCJkb21haW4iLCJuYW1lIiwiVVJOX1BBUlNFIiwidXJuQ29tcG9uZW50cyIsIm5pZCIsIm5zcyIsInVyblNjaGVtZSIsInVyaUNvbXBvbmVudHMiLCJVVUlEIiwidXVpZENvbXBvbmVudHMiLCJ1dWlkIiwiaHR0cHMiLCJtYWlsdG8iLCJ1cm4iLCJjb3B5IiwicmVxdWlyZSQkMCIsInJlcXVpcmUkJDEiLCJTY2hlbWFPYmplY3QiLCJVUkkiLCJ0cmF2ZXJzZSIsInVjczJsZW5ndGgiLCJWYWxpZGF0aW9uRXJyb3IiLCJlcnJvckNsYXNzZXMiLCJ2YWxpZGF0ZUdlbmVyYXRvciIsInZhbGlkYXRlIiwic3RhYmxlU3RyaW5naWZ5IiwiSlNPTl9QT0lOVEVSIiwiUkVMQVRJVkVfSlNPTl9QT0lOVEVSIiwicmVxdWlyZSQkMiIsInJlcXVpcmUkJDMiLCJyZXF1aXJlJCQ0IiwicmVxdWlyZSQkNSIsInJlcXVpcmUkJDYiLCJyZXF1aXJlJCQ3IiwicmVxdWlyZSQkOCIsInJlcXVpcmUkJDkiLCJyZXF1aXJlJCQxMCIsInJlcXVpcmUkJDExIiwicmVxdWlyZSQkMTIiLCJyZXF1aXJlJCQxMyIsInJlcXVpcmUkJDE0IiwicmVxdWlyZSQkMTUiLCJyZXF1aXJlJCQxNiIsInJlcXVpcmUkJDE3IiwicmVxdWlyZSQkMTgiLCJyZXF1aXJlJCQxOSIsInJlcXVpcmUkJDIwIiwicmVxdWlyZSQkMjEiLCJyZXF1aXJlJCQyMiIsInJlcXVpcmUkJDIzIiwidG9IYXNoIiwicnVsZU1vZHVsZXMiLCJNaXNzaW5nUmVmRXJyb3IiLCJtZXRhU2NoZW1hIiwiSURFTlRJRklFUiIsImN1c3RvbVJ1bGVDb2RlIiwiZGVmaW5pdGlvblNjaGVtYSIsImNvbXBpbGUiLCJjdXN0b21LZXl3b3JkIiwiJGRhdGFNZXRhU2NoZW1hIiwiZm9ybWF0cyIsIkNhY2hlIiwiY29tcGlsZVNjaGVtYSIsImFqdiIsIkFqdiIsInN0cmluZ1ZhbHVlIiwidmdDb25maWciLCJ2Zy5FTVBUWV9FTkNPREUiLCJ2Zy5sZWdlbmRMYWJsZVBvcyIsInZnLmxlZ2VuZExhYmVsQWxpZ24iLCJ2Zy5iYXNlbGluZSIsInZnLmxhYmxlQW5nbGUiLCJ2Zy5sZWdlbmRCYW5kUG9zIiwidmcuYXhpc0NvbXBQb3MiLCJ2Zy5heGlzVGV4dERwb3MiLCJ2Zy5heGlzTGFiZWxBbGlnbiIsInZnLnRpY2tMZW5ndGgiLCJ2Zy5ncmlkTGVuZ3RoIiwidmcudGl0bGVBbmdsZSIsInZnLnRpdGxlUG9zIiwidmcuZG9tYWluTGVuZ3RoIiwidmVnYS5TVkdSZW5kZXJlciIsInZlZ2Euc2NlbmVGcm9tSlNPTiIsInZlZ2Euc2NlbmVUb0pTT04iLCJkMy5pbnRlcnBvbGF0ZSIsInZlZ2EuVmlldyIsInZlZ2EucGFyc2UiLCJjaGVja0NvbmZsaWN0IiwiZDNcbiAgICAubmVzdCIsImdldEpvaW5JbmZvIiwiY29tcHV0ZSIsImQzLmludGVycG9sYXRlU3RyaW5nIiwiZDMuZXh0ZW50IiwiZDMuc2VsZWN0IiwidmVnYS50ZXh0TWV0cmljcyIsInZlZ2FcbiAgICAgICAgLnBhdGhSZWN0YW5nbGUiLCJ2ZWdhXG4gICAgICAgICAgLnBhdGhSZWN0YW5nbGUiLCJkMy5wYXRoIiwidmVnYS5wYXRoU3ltYm9scyIsImQzXG4gICAgICAgICAgLmxpbmUiLCJkM1xuICAgICAgICAgICAgLmFyZWEiLCJ2ZWdhLnBhdGhUcmFpbCIsInZlZ2EudGltZUZvcm1hdCIsInZlZ2EudGltZVVuaXRTcGVjaWZpZXIiLCJ2ZWdhRXhwcmVzc2lvbi5jb2RlZ2VuIiwidmVnYUV4cHJlc3Npb24ucGFyc2UiLCJkMy5hc2NlbmRpbmciLCJkMy5kZXNjZW5kaW5nIiwiZDNcbiAgICAgIC5uZXN0IiwiZDMuZWFzZUxpbmVhciIsImQzLmxvY2FsIiwiYWRkTWFyayIsImQzXG4gICAgICAgICAgLnNlbGVjdEFsbCIsImQzXG4gICAgICAgICAgLnNlbGVjdCIsImQzLnNlbGVjdEFsbCIsImQzXG4gICAgICAgIC5zZWxlY3RBbGwiLCJkM1xuICAgICAgICAuc2VsZWN0IiwiZG9uZU1ha2VyIiwiSU5JVElBTF9TVEFUVVMiLCJERy5QRVJDRVBUSU9OX0NBUCIsIkRHLkRJU0NPVU5UX0NPTUJPUyIsIkRHLlBFTkFMVFlfQ09NQk9TIiwiREcuUEVSQ0VQVElPTl9DT1NUIiwidmVnYUxpdGUuY29tcGlsZSIsImQzLm5lc3QiXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsTUFBTSxTQUFTLENBQUM7RUFDZCxXQUFXLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDekIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztJQUNyQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQztJQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNqQixJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUs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QUUsWUFBWSxDQUFDLENBQUM7RUFDL0MsTUFBTSxjQUFjLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7RUFDN0UsTUFBTSxZQUFZLEdBQUc7SUFDbkIsSUFBSSxFQUFFO01BQ0osQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7TUFDMUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7TUFDN0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUU7TUFDNUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7TUFDMUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUc7TUFDOUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUU7S0FDOUM7SUFDRCxJQUFJLEVBQUU7TUFDSixDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRTtNQUMzQyxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRTtNQUM5QyxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRTtNQUMvQyxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRTtNQUMzQyxDQUFDLFNBQVMsRUFBRSxDQUFD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QUcsTUFBTSxHQUFHLElBQUksQ0FBQzs7RUFFbEUsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLEtBQUssRUFBRTtJQUMzQixPQUFPLEdBQUcsUUFBUSxHQUFHLE9BQU8sR0FBRyxPQUFPLEdBQUcsUUFBUSxHQUFHLE1BQU0sR0FBRyxLQUFLLENBQUM7R0FDcEUsTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUU7SUFDeEIsT0FBTyxHQUFHLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLENBQUM7SUFDM0MsUUFBUSxHQUFHLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLENBQUM7SUFDN0MsT0FBTyxHQUFHLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUM7SUFDMUMsT0FBTyxHQUFHLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLENBQUM7SUFDM0MsTUFBTSxHQUFHLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUM7SUFDekMsUUFBUSxHQUFHLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLENBQUM7R0FDOUM7O0VBRUQsTUFBTSxPQUFPLEdBQUc7SUFDZCxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxTQUFTO0lBQzFELEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLFNBQVM7R0FDckQsQ0FBQzs7O0VBR0YsTUFBTSxNQUFNLEdBQUc7SUFDYixPQUFPLEVBQUUsU0FBUyxDQUFDLEtBQUs7SUFDeEIsS0FBSyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO0dBQzlCLENBQUM7O0VBRUYsSUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLEtBQUssS0FB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QUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUQsSUFBSSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO09BQ2xFOztNQUVELElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTs7UUFFM0IsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdELElBQUksR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7T0FDcEUsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7O1FBRWxDLE1BQU0sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3RCxJQUFJLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDOztPQUVyRTs7TUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNqRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FB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Q0FBQzs7RUFFbEQsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLEtBQUssSUFBSSxTQUFTLENBQUM7RUFDaEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUM7RUFDekMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7RUFDdkMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUM7RUFDNUMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUM7RUFDMUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUM7RUFDOUIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7RUFDekIsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLE9BQU8sSUFBSSxRQUFRLENBQUM7RUFDL0MsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLEtBQUssSUFBSSxRQUFRLENBQUM7RUFDN0MsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7RUFDbkcsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7RUFDbkcsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7RUFDbkcsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7O0VBRW5HO0lBQ0UsV0FBVyxDQUFDLFFBQVEsQ0FBQztJQUNyQixXQUFXLENBQUMsUUFBUSxDQUFDO0lBQ3JCLFdBQVcsQ0FBQyxRQUFRLENBQUM7SUFDckIsV0FBVyxDQUFDLFFBQVEsQ0FBQztJQUNyQjtJQUNBLE1BQU0sbUJBQW1CLEdBQUcsZUFBZSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDM0UsTUFBTSxtQkFBbUIsR0FBRyxlQUFlLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUMzRSxNQUFNLGlCQUFpQjtNQUNyQixnQkFBZ0IsS0FBSyxRQUFRLEdBQUcsZ0JBQWdCLEdBQUcsZUFBZSxDQUFDOztJQUVyRSxPQUFPLENBQUMsSUFBSTtNQUNWLE9BQU8saUJBQWlCO1FBQ3RCLG1CQUFtQixDQUFDLENBQUMsQ0FBQztRQUN0QixtQkFBbUIsQ0FBQyxDQUFDLENBQUM7UUFDdEIsU0FBUztPQUNWLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDTixDQUFDO0dBQ0g7RUFDRCxNQUFNLGlCQUFpQjtJQUNyQixnQkFBZ0IsS0FBSyxRQUFRLEdBQUcsZ0JBQWdCLEdBQUcsZUFBZSxDQUFDOzs7RUFHckUsT0FBTyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0NBQ3pEOztBQUVELFNBQVMsb0JBQW9CO0VBQzNCLE1BQU07RUFDTixPQUFPO0VBQ1AsU0FBUztFQUNULENBQUM7RUFDRCxJQUFJO0VBQ0osT0FBTztFQUNQLE9BQU87RUFDUCxnQkFBZ0I7RUFDaEI7RUFDQSxNQUFNLFFBQVEsR0FBRyxPQUFPLFNBQVMsS0FBSyxRQUFRLEdBQUcsU0FBUyxHQUFHLFNBQVMsQ0FBQzs7RUFFdkUsSUFBSSxRQUFRLEtBQUssTUFBTSxFQUFFO0lBQ3ZCLE1BQU0sVUFBVSxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxLQUFLO01BQ2xELE9BQU8sT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztLQUNyRCxDQUFDO0lBQ0YsTUFBTSxRQUFRLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLO01BQzlCLE9BQU8sQ0FBQyxDQUFDO1VBQ0wsU0FBUztVQUNULENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNsRSxDQUFDO0lBQ0YsT0FBTyx1QkFBdUI7TUFDNUIsZUFBZSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDO01BQ2xDLGVBQWUsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztNQUM3QixNQUFNO01BQ04sT0FBTztNQUNQLE9BQU87TUFDUCxRQUFRO01BQ1IsVUFBVTtLQUNYLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0ErQkg7RUFDRCxJQUFJLFFBQVEsS0FBSyxNQUFNLElBQUksUUFBUSxLQUFLLE9BQU8sRUFBRTtJQUMvQyxNQUFNLFFBQVEsR0FBRztNQUNmLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLEtBQUssWUFBWSxHQUFHLEdBQUcsRUFBRSxHQUFHO01BQy9FLEtBQUssRUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLEtBQUssWUFBWSxHQUFHLEdBQUcsRUFBRSxHQUFHO0tBQzVFLENBQUM7SUFDRixPQUFPLDhCQUE4QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7TUFDOUMsTUFBTTtNQUNOLE9BQU87TUFDUCxRQUFRO01BQ1IsQ0FBQztNQUNELElBQUk7TUFDSixPQUFPO01BQ1AsT0FBTztNQUNQLGdCQUFnQjtNQUNoQixRQUFRO0tBQ1QsQ0FBQztHQUNIOzs7O0VBSUQsSUFBSSxTQUFTLENBQUMsT0FBTyxLQUFLLE1BQU0sSUFBSSxTQUFTLENBQUMsS0FBSyxLQUFLLE1BQU0sRUFBRTtJQUM5RCxJQUFJLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLEtBQUssWUFBWSxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDbkYsT0FBTyw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0dBQ2pJLE1BQU07SUFDTCxJQUFJLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLEtBQUssWUFBWSxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDckYsSUFBSSxTQUFTLEdBQUcsT0FBTztNQUNyQixlQUFlLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7TUFDN0IsTUFBTSxDQUFDLEtBQUssSUFBSSxNQUFNO01BQ3RCLE9BQU8sQ0FBQyxLQUFLLElBQUksT0FBTztNQUN4QixPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU87TUFDeEIsTUFBTSxDQUFDLENBQUM7SUFDVixJQUFJLElBQUksR0FBRyw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3BJLE9BQU8sQ0FBQyxDQUFDLEtBQUs7TUFDWixPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNyQyxDQUFDO0dBQ0g7Q0FDRjs7QUFFRCxTQUFTLGVBQWUsQ0FBQyxDQUFDLEVBQUU7RUFDMUIsSUFBSSxDQUFDLENBQUMsRUFBRTtJQUNOLE9BQU8sU0FBUyxDQUFDO0dBQ2xCO0VBQ0QsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxPQUFPLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7Q0FDdEU7OztBQUdELFNBQVMsdUJBQXVCO0VBQzlCLEtBQUs7RUFDTCxLQUFLO0VBQ0wsTUFBTTtFQUNOLE9BQU87RUFDUCxPQUFPO0VBQ1AsU0FBUztFQUNULE9BQU87RUFDUDtBQUNGLEFBQ0E7RUFDRSxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEdBQUcsT0FBTyxHQUFHO0lBQzVELE9BQU8sRUFBRSxPQUFPO0lBQ2hCLEtBQUssRUFBRSxPQUFPO0dBQ2YsQ0FBQztFQUNGLE1BQU0sVUFBVSxHQUFHLENBQUMsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztFQUN2RCxNQUFNLFVBQVUsR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDckQsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztFQUN4QixNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0VBQ3hCLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyRSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFFLElBQUksSUFBSSxDQUFDO0VBQ1QsSUFBSSxJQUFJLENBQUM7RUFDVCxJQUFJLElBQUksQ0FBQzs7RUFFVCxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7SUFDVixJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7TUFDVixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDVCxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7T0FDbEUsTUFBTTtRQUNMLElBQUksR0FBRyxPQUFPO1VBQ1osS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztVQUNyQixLQUFLO1VBQ0wsTUFBTTtVQUNOLFFBQVE7VUFDUixPQUFPO1VBQ1AsT0FBTztTQUNSLENBQUM7UUFDRixJQUFJLEdBQUcsT0FBTztVQUNaLEtBQUs7VUFDTCxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1VBQ3JCLE1BQU07VUFDTixRQUFRO1VBQ1IsT0FBTztVQUNQLE9BQU87VUFDUCxLQUFLO1NBQ04sQ0FBQztRQUNGLElBQUksR0FBRyxPQUFPO1VBQ1osS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7VUFDZCxLQUFLO1VBQ0wsTUFBTTtVQUNOLFFBQVE7VUFDUixPQUFPO1VBQ1AsT0FBTztTQUNSLENBQUM7T0FDSDtLQUNGLE1BQU07TUFDTCxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7TUFDNUU7TUFDQSxJQUFJLEdBQUcsT0FBTztRQUNaLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckIsS0FBSztRQUNMLE1BQU07UUFDTixRQUFRO1FBQ1IsT0FBTztRQUNQLE9BQU87T0FDUixDQUFDO01BQ0YsSUFBSSxHQUFHLE9BQU87UUFDWixLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2QsTUFBTTtRQUNOLFFBQVE7UUFDUixPQUFPO1FBQ1AsT0FBTztRQUNQLEtBQUs7T0FDTixDQUFDO01BQ0YsSUFBSSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztLQUMxRSxNQUFNO01BQ0wsSUFBSSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQ2xFO0dBQ0YsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7SUFDakI7TUFDRSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztNQUN2RTtNQUNBLElBQUksR0FBRyxPQUFPO1FBQ1osS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQixJQUFJO1FBQ0osTUFBTTtRQUNOLFFBQVE7UUFDUixPQUFPO1FBQ1AsT0FBTztPQUNSLENBQUM7TUFDRixJQUFJLEdBQUcsT0FBTztRQUNaLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2QsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQixNQUFNO1FBQ04sUUFBUTtRQUNSLE9BQU87UUFDUCxPQUFPO1FBQ1AsS0FBSztPQUNOLENBQUM7TUFDRixJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQzNFLE1BQU07TUFDTCxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDbEU7R0FDRixNQUFNO0lBQ0wsQ0FBQyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRSxDQUFDLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtNQUNwQixJQUFJLEdBQUcsT0FBTztRQUNaLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckIsSUFBSTtRQUNKLE1BQU07UUFDTixRQUFRO1FBQ1IsT0FBTztRQUNQLE9BQU87T0FDUixDQUFDO01BQ0YsSUFBSSxHQUFHLE9BQU87UUFDWixLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLEtBQUs7UUFDTCxNQUFNO1FBQ04sUUFBUTtRQUNSLE9BQU87UUFDUCxPQUFPO1FBQ1AsS0FBSztPQUNOLENBQUM7TUFDRixJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQzFFLE1BQU07TUFDTCxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDbEU7R0FDRjs7RUFFRCxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFO0lBQ3hCLE9BQU8sQ0FBQyxJQUFJO01BQ1YsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ1gsT0FBTyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7T0FDcEU7TUFDRCxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3BDLENBQUM7R0FDSDtFQUNELE9BQU8sQ0FBQyxJQUFJO0lBQ1YsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO01BQ1gsT0FBTyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDcEU7SUFDRCxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztHQUNoQixDQUFDO0NBQ0g7O0FBRUQsU0FBUyxPQUFPLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUU7RUFDbEUsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztFQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7SUFDVixPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7R0FDaEI7O0VBRUQsTUFBTSxhQUFhLEdBQUcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSTtJQUN0RCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDbEIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDO0lBQ3pDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO01BQy9CLE1BQU0sUUFBUSxHQUFHLE9BQU87UUFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDakQsS0FBSztRQUNMLE1BQU07UUFDTixNQUFNO09BQ1AsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO01BQ3RCLE1BQU0sTUFBTSxHQUFHLE9BQU87UUFDcEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwQixLQUFLO1FBQ0wsTUFBTTtRQUNOLE1BQU07T0FDUCxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7TUFDdEIsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtRQUN0QixPQUFPRixpQkFBb0IsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7T0FDbEQsQ0FBQyxDQUFDO0tBQ0o7SUFDRCxPQUFPLFNBQVMsQ0FBQyxFQUFFO01BQ2pCLElBQUksUUFBUSxFQUFFO1FBQ1osQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7T0FDWDtNQUNELElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNYLE9BQU8sT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO09BQzdDO01BQ0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7O01BRXRDLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7S0FDM0MsQ0FBQztHQUNILENBQUMsQ0FBQzs7RUFFSCxPQUFPLENBQUMsSUFBSTtJQUNWLE9BQU9BLGlCQUFvQixDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztHQUMxRSxDQUFDO0NBQ0g7O0FBRUQsU0FBUyxPQUFPLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUU7RUFDbEUsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztFQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7SUFDVixPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7R0FDaEI7RUFDRCxNQUFNLGFBQWEsR0FBRyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJO0lBQ3RELE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNsQixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUIsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUM7SUFDekMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7TUFDL0IsTUFBTSxRQUFRLEdBQUcsT0FBTztRQUN0QixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNsRCxLQUFLO1FBQ0wsTUFBTTtRQUNOLE1BQU07T0FDUCxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7TUFDckIsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxPQUFPO1FBQ2xFLEtBQUs7UUFDTCxFQUFFO09BQ0gsQ0FBQzs7TUFFRixNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1FBQ3RCLE9BQU9BLGlCQUFvQixDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztPQUNsRCxDQUFDLENBQUM7S0FDSjs7SUFFRCxPQUFPLFNBQVMsQ0FBQyxFQUFFO01BQ2pCLElBQUksUUFBUSxFQUFFO1FBQ1osQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7T0FDWDtNQUNELElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNYLE9BQU8sT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO09BQzdDO01BQ0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7O01BRXRDLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7S0FDM0MsQ0FBQztHQUNILENBQUMsQ0FBQztFQUNILE9BQU8sQ0FBQyxJQUFJO0lBQ1YsT0FBT0EsaUJBQW9CLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0dBQzFFLENBQUM7Q0FDSDs7QUFFRCxTQUFTLE9BQU87RUFDZCxRQUFRO0VBQ1IsTUFBTTtFQUNOLE1BQU07RUFDTixPQUFPO0VBQ1AsT0FBTztFQUNQLE9BQU87RUFDUCxhQUFhO0VBQ2I7RUFDQSxNQUFNLFNBQVMsR0FBRyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJO0lBQ2xELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQztJQUN6QyxJQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDeEQsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDOztJQUVwRCxJQUFJLGFBQWEsRUFBRTtNQUNqQixRQUFRLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztNQUMzRCxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztLQUN4RDtJQUNELE9BQU8sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7R0FDM0IsQ0FBQyxDQUFDOztFQUVIO0lBQ0UsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QixXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVCLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUIsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QjtJQUNBLE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEUsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RSxPQUFPLENBQUMsSUFBSTtNQUNWLE9BQU9BLGlCQUFvQixDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNwRSxDQUFDO0dBQ0g7RUFDRCxPQUFPQSxpQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDL0Q7QUFDRCxTQUFTLFdBQVcsQ0FBQyxDQUFDLEVBQUU7RUFDdEIsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUM3Qjs7QUMzZkQ7QUFDQSxBQWdCQTtBQUNBLEFBQU8sU0FBUyxlQUFlLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUU7RUFDcEYsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUk7SUFDcEIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUk7TUFDekIsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRTtRQUMxQixJQUFJLFdBQVcsQ0FBQyxTQUFTLEVBQUU7VUFDekIsV0FBVyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFO1lBQ2pELE1BQU0sSUFBSSxHQUFHLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQztZQUN2RCxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztXQUNsRSxDQUFDLENBQUM7U0FDSixNQUFNO1VBQ0wsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7VUFDckQsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxFQUFFO1lBQ3RDLE1BQU0sSUFBSSxHQUFHLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQztZQUN2RCxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2NBQzFCLEtBQUs7Y0FDTCxNQUFNO2NBQ04sTUFBTTtjQUNOLE1BQU07Y0FDTixDQUFDO2NBQ0QsSUFBSTthQUNMLENBQUM7V0FDSCxDQUFDLENBQUM7U0FDSjtPQUNGLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtRQUM1QixXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQUU7VUFDNUMsTUFBTSxJQUFJLEdBQUcsUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDO1VBQ3ZELE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ2xFLENBQUMsQ0FBQztPQUNKLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtRQUM1QixXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1VBQzNCLE1BQU0sSUFBSSxHQUFHLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQztVQUN2RCxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNsRSxDQUFDLENBQUM7T0FDSixNQUFNLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUU7UUFDN0IsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFO1VBQ2IsV0FBVyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFO1lBQ2xELE1BQU0sSUFBSSxHQUFHLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQztZQUN2RCxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMs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QUUsQ0FBQyxDQUFDLENBQUM7TUFDcEUsTUFBTSxDQUFDLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFDbEUsT0FBTyxRQUFRLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDOUM7R0FDRixNQUFNLElBQUksUUFBUSxDQUFDLE9BQU8sS0FBSyxPQUFPLEVBQUU7SUFDdkMsSUFBSSxRQUFRLENBQUMsR0FBRyxLQUFLLFdBQVcsRUFBRTtNQUNoQyxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQzlELE9BQU8sYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7S0FDakU7R0FDRixNQUFNLElBQUksUUFBUSxDQUFDLE9BQU8sS0FBSyxZQUFZLEVBQUU7SUFDNUMsSUFBSSxRQUFRLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRTtNQUN4QixNQUFNLEtBQUssR0FBRztRQUNaLENBQUMsRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQy9ELENBQUMsRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQy9ELE1BQU0sRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxD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QUNIO01BQ0QsT0FBTyxHQUFHLENBQUM7S0FDWixFQUFFLEVBQUUsQ0FBQyxDQUFDOztJQUVQLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsSUFBSSxZQUFZLENBQUM7SUFDdEQsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7TUFDN0MsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7TUFDN0IsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7S0FDcEIsTUFBTSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRTtNQUNoRCxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUM5QixLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUNwQyxNQUFNO01BQ0wsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO01BQ3hDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0tBQ3BCOztJQUVELElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO01BQzlDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO01BQzlCLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFB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cEQsT0FBTyxLQUFLLENBQUM7T0FDZDtLQUNGO0lBQ0QsT0FBTyxJQUFJLENBQUM7R0FDYixDQUFDO0NBQ0gsQ0FBQztBQUNGLEFBQU8sTUFBTSxlQUFlLEdBQUc7RUFDN0IsSUFBSSxFQUFFO0lBQ0osRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7SUFDakMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7SUFDN0IsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUU7SUFDcEQsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUU7SUFDcEQsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUU7SUFDeEQsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUU7SUFDeEQsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUU7SUFDdkQsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUU7SUFDeEQsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUU7SUFDeEQsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUU7SUFDNUQsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUU7SUFDNUQsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUU7SUFDM0QsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7SUFDakMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7SUFDakMsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7SUFDckMsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7SUFDckMsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7SUFDcEMsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtHQUN4QztFQUNELElBQUksRUFBRTs7OztJQUlKLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFO0lBQy9CLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFO0lBQ2xELEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFO0lBQzVCLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFO0lBQy9CLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFO0dBQ3BEO0VBQ0QsTUFBTSxFQUFFOzs7O0lBSU4sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7SUFDL0IsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUU7SUFDbEQsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7SUFDNUIsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7SUFDL0IsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUU7R0FDcEQ7Q0FDRixDQUFDOztBQUVGLEFBQU8sTUFBTSxjQUFjLEdBQUc7RUFDNUI7SUFDRSxNQUFNLEVBQUU7TUFDTjtRQUNFO1VBQ0UsUUFBUSxFQUFFLE1BQU07VUFDaEIsTUFBTSxFQUFFLFNBQVM7VUFDakIsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7U0FDNUM7T0FDRjtLQUNGO0lBQ0QsSUFBSSxFQUFFLEdBQUc7R0FDVjtFQUNEO0lBQ0UsTUFBTSxFQUFFO01BQ047UUFDRTtVQUNFLFFBQVEsRUFBRSxNQUFNO1VBQ2hCLE1BQU0sRUFBRSxTQUFTO1VBQ2pCLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1NBQzVDO09BQ0Y7S0FDRjtJQUNELElBQUksRUFBRSxHQUFHO0dBQ1Y7RUFDRDtJQUNFLE1BQU0sRUFBRTtNQUNOO1FBQ0U7VUFDRSxRQUFRLEVBQUUsTUFBTTtVQUNoQixNQUFNLEVBQUUsWUFBWTtVQUNwQixJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztTQUMvQztPQUNGO0tBQ0Y7SUFDRCxJQUFJLEVBQUUsR0FBRztHQUNWO0VBQ0Q7SUFDRSxNQUFNLEVBQUU7TUFDTjtRQUNFO1VBQ0UsUUFBUSxFQUFFLE1BQU07VUFDaEIsTUFBTSxFQUFFLGFBQWE7VUFDckIsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7U0FDaEQ7T0FDRjtLQUNGO0lBQ0QsSUFBSSxFQUFFLEdBQUc7R0FDVjtDQUNGLENBQUM7O0FBRUYsQUFBTyxNQUFNLGVBQWUsR0FBRztFQUM3QjtJQUNFLE1BQU0sRUFBRTtNQUNOO1FBQ0UsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUU7UUFDM0QsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUU7T0FDNUQ7S0FDRjtJQUNELElBQUksRUFBRSxDQUFDLEdBQUc7R0FDWDtFQUNEO0lBQ0UsTUFBTSxFQUFFO01BQ047UUFDRSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRTtRQUMxQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRTtPQUM1QztNQUNEO1FBQ0UsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUU7UUFDM0MsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUU7T0FDNUM7TUFDRDtRQUNFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFO1FBQzNDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFO09BQzNDO01BQ0Q7UUFDRSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRTtRQUMxQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRTtPQUM5QztNQUNEO1FBQ0UsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUU7UUFDN0MsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUU7T0FDNUM7TUFDRDtRQUNFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFO1FBQzNDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFO09BQzlDO01BQ0Q7UUFDRSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRTtRQUMzQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRTtRQUMxQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRTtPQUM1QztNQUNEO1FBQ0UsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUU7UUFDMUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUU7UUFDM0MsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUU7T0FDOUM7TUFDRDtRQUNFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFO1FBQzNDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFO1FBQzNDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFO09BQzlDO01BQ0Q7UUFDRSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRTtRQUMzQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRTtRQUMxQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRTtPQUM5QztNQUNEO1FBQ0UsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUU7UUFDM0MsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUU7UUFDMUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUU7UUFDN0MsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUU7T0FDNUM7S0FDRjtJQUNELElBQUksRUFBRSxDQUFDLEdBQUc7R0FDWDtFQUNEO0lBQ0UsTUFBTSxFQUFFO01BQ047UUFDRSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRTtRQUMzRCxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRTtPQUM1RDtLQUNGO0lBQ0QsSUFBSSxFQUFFLENBQUMsR0FBRztHQUNYO0VBQ0Q7SUFDRSxNQUFNLEVBQUU7TUFDTjtRQUNFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1FBQzNELEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFO09BQzVEO0tBQ0Y7SUFDRCxJQUFJLEVBQUUsQ0FBQyxDQUFDO0dBQ1Q7RUFDRDtJQUNFLE1BQU0sRUFBRTtNQUNOO1FBQ0UsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUU7UUFDeEMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUU7T0FDdEM7TUFDRDtRQUNFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFO1FBQ3hDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFO09BQ3pDO0tBQ0Y7SUFDRCxJQUFJLEVBQUUsQ0FBQyxHQUFHO0dBQ1g7RUFDRDtJQUNFLE1BQU0sRUFBRTtNQUNOO1FBQ0UsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUU7UUFDM0QsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUU7T0FDNUQ7S0FDRjtJQUNELElBQUksRUFBRSxDQUFDLEdBQUc7R0FDWDtFQUNEO0lBQ0UsTUFBTSxFQUFFO01BQ047UUFDRSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRTtRQUMzRCxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRTtPQUM1RDtLQUNGO0lBQ0QsSUFBSSxFQUFFLENBQUMsQ0FBQztHQUNUO0VBQ0Q7SUFDRSxNQUFNLEVBQUU7TUFDTjtRQUNFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFO1FBQ3hDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFO09BQ3RDO01BQ0Q7UUFDRSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRTtRQUN4QyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRTtPQUN6QztLQUNGO0lBQ0QsSUFBSSxFQUFFLENBQUMsR0FBRztHQUNYO0VBQ0Q7SUFDRSxNQUFNLEVBQUU7TUFDTjtRQUNFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFO1FBQzNDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFO09BQ3pDO0tBQ0Y7SUFDRCxJQUFJLEVBQUUsQ0FBQyxHQUFHO0dBQ1g7RUFDRDtJQUNFLE1BQU0sRUFBRTtNQUNOO1FBQ0UsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUU7UUFDMUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUU7T0FDeEM7S0FDRjtJQUNELElBQUksRUFBRSxDQUFDLEdBQUc7R0FDWDtFQUNEO0lBQ0UsTUFBTSxFQUFFO01BQ047UUFDRSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRTtRQUMzQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRTtPQUN6QztLQUNGO0lBQ0QsSUFBSSxFQUFFLENBQUMsR0FBRztHQUNYO0NBQ0YsQ0FBQzs7QUMzVEYsU0FBUyxRQUFRLENBQUMsY0FBYyxFQUFFO0VBQ2hDLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztFQUN0QixNQUFNLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztFQUM1QixNQUFNLENBQUMsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztFQUN2QyxNQUFNLElBQUksR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxLQUFLO0lBQzVELE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLFVBQVUsS0FBSztNQUN2RCxVQUFVLENBQUMsSUFBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO01BQ2hELE9BQU8sR0FBRyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztLQUNsQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ04sTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQyxNQUFNLEdBQUcsR0FBRyxjQUFjLENBQUMsYUFBYSxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3hFLE1BQU0sR0FBRyxHQUFHK0YsY0FBaUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9ELEtBQUssQ0FBQyxJQUFJLEdBQUc7TUFDWCxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQztNQUM3QixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQztNQUM3QixHQUFHO01BQ0gsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ3hELENBQUM7SUFDRixVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDakQsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLFNBQVMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRSxPQUFPLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0dBQ3hELEVBQUUsQ0FBQyxDQUFDLENBQUM7O0VBRU4sT0FBTztJQUNMLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQ25CLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQzVCLFdBQVcsRUFBRSxRQUFRLENBQUMsZ0JBQWdCLENBQUM7R0FDeEMsQ0FBQztDQUNIOztBQUVELFNBQVMsWUFBWSxDQUFDLFdBQVcsRUFBRTtFQUNqQyxNQUFNLEtBQUssR0FBRyxDQUFDLEtBQUssRUFBRSxTQUFTLEtBQUs7SUFDbEMsT0FBTyxTQUFTLENBQUMsSUFBSTtNQUNuQixJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztLQUNsRSxDQUFDO0dBQ0gsQ0FBQzs7RUFFRixPQUFPQyxlQUFrQixDQUFDLE1BQU0sQ0FBQ0MsY0FBaUIsQ0FBQyxDQUFDLE1BQU07SUFDeEQsQ0FBQyxhQUFhLEVBQUUsS0FBSyxLQUFLO01BQ3hCLEtBQUssTUFBTSxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRTtRQUNoQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEtBQUssS0FBSztVQUMvQyxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSTtZQUN0QztjQUNFLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLEtBQUssQ0FBQyxRQUFRO2NBQ3RDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUM7Y0FDdEM7V0FDSCxDQUFDLENBQUM7VUFDSCxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1YsT0FBTyxLQUFLLENBQUM7V0FDZDs7VUFFRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUU7WUFDZCxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxLQUFLO2NBQ3JELE9BQU8sT0FBTyxJQUFJLFlBQVksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3JELEVBQUUsT0FBTyxDQUFDLENBQUM7V0FDYjs7VUFFRCxPQUFPLE9BQU8sSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDO1NBQzNCLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDVCxJQUFJLE9BQU8sRUFBRTtVQUNYLGFBQWEsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDO1VBQzVCLE1BQU07U0FDUDtPQUNGO01BQ0QsT0FBTyxhQUFhLENBQUM7S0FDdEI7SUFDRCxDQUFDO0dBQ0YsQ0FBQztDQUNIOztBQUVELFNBQVMsT0FBTyxDQUFDLFVBQVUsRUFBRTs7RUFFM0I7SUFDRSxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxNQUFNO0lBQ25DLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLE9BQU87SUFDcEM7SUFDQSxPQUFPLENBQUMsQ0FBQztHQUNWO0VBQ0QsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0VBQ2pCLEtBQUssTUFBTSxTQUFTLElBQUlDLGVBQWtCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtJQUNwRSxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJO01BQ3BELElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO0tBQzVDLENBQUM7SUFDRixJQUFJLFlBQVksR0FBRyxJQUFJLENBQUM7SUFDeEIsSUFBSSxXQUFXLElBQUksU0FBUyxDQUFDLElBQUksRUFBRTtNQUNqQyxZQUFZLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsWUFBWSxLQUFLO1FBQzFELE9BQU8sR0FBRyxJQUFJLFlBQVksQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUM7T0FDckQsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUNWLE1BQU0sSUFBSSxXQUFXLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRTtNQUMzQyxZQUFZLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsWUFBWSxLQUFLO1FBQzdELE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztPQUN0RCxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ1Y7O0lBRUQsUUFBUSxJQUFJLFdBQVcsSUFBSSxZQUFZLEdBQUcsU0FBUyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7R0FDOUQ7RUFDRCxPQUFPLFFBQVEsQ0FBQztDQUNqQjs7QUNqR0QsU0FBUyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRTs7O0VBR2hFLElBQUksVUFBVSxHQUFHO0lBQ2YsTUFBTSxFQUFFO01BQ04sUUFBUSxFQUFFO1FBQ1IsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRztPQUM1RDtLQUNGO0dBQ0YsQ0FBQztFQUNGLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRTtJQUNwQixVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0dBQzFEO0VBQ0QsSUFBSSxHQUFHLENBQUM7O0VBRVIsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxJQUFJO0lBQ3ZELE9BQU87TUFDTCxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJO1FBQ3JDLElBQUksSUFBSSxDQUFDO1FBQ1QsUUFBUSxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVE7UUFDaEMsS0FBSyxNQUFNO1VBQ1QsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNO1lBQ2pCLEVBQUU7WUFDRixVQUFVO1lBQ1YsR0FBRyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFO1dBQ3hELENBQUM7VUFDRixJQUFJLEdBQUcsb0JBQW9CLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1VBQzdDLE1BQU07UUFDUixLQUFLLE1BQU07VUFDVCxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU07WUFDakIsRUFBRTtZQUNGLFVBQVU7WUFDVixHQUFHLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUU7V0FDdkQsQ0FBQztVQUNGLElBQUksR0FBRyxvQkFBb0IsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7VUFDN0MsTUFBTTtRQUNSLEtBQUssUUFBUTtVQUNYLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTTtZQUNqQixFQUFFO1lBQ0YsVUFBVTtZQUNWLEdBQUcsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRTtXQUMxRCxDQUFDO1VBQ0YsSUFBSSxHQUFHLHNCQUFzQixDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztVQUMvQyxNQUFNO1FBQ1IsS0FBSyxNQUFNO1VBQ1QsSUFBSSxHQUFHLG9CQUFvQixDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztVQUM3QyxNQUFNO1NBQ1A7UUFDRCxJQUFJLFdBQVcsRUFBRTtVQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztTQUM3Qjs7UUFFRCxPQUFPLElBQUksQ0FBQztPQUNiLENBQUM7TUFDRixJQUFJLFdBQVcsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO0tBQ2pELENBQUM7R0FDSCxDQUFDLENBQUM7RUFDSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDO0NBQzlCOztBQUVELFNBQVMsb0JBQW9CLENBQUMsY0FBYyxFQUFFLEdBQUcsRUFBRTtFQUNqRCxPQUFPO0lBQ0wsU0FBUyxFQUFFLE1BQU07SUFDakIsTUFBTSxFQUFFO01BQ04sTUFBTSxFQUFFLGNBQWMsQ0FBQyxVQUFVLENBQUMsT0FBTztLQUMxQztJQUNELE1BQU0sRUFBRSxjQUFjLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO0dBQ2xELENBQUM7Q0FDSDs7QUFFRCxTQUFTLG9CQUFvQixDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUU7RUFDN0MsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztFQUM1RSxNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ2xDLE1BQU0sSUFBSSxHQUFHO0lBQ1gsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO0lBQzdDLE1BQU0sRUFBRSxFQUFFO0lBQ1YsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7R0FDOUMsQ0FBQztFQUNGLElBQUksb0JBQW9CLEtBQUssU0FBUyxFQUFFO0lBQ3RDLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxlQUFlLEVBQUUsb0JBQW9CLEVBQUUsRUFBRSxDQUFDO0dBQ3BFO0VBQ0Q7SUFDRSxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO0lBQ3RDLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUM7SUFDekM7SUFDQSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7R0FDM0IsTUFBTTtJQUNMLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7SUFDdEMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQztJQUN6QztJQUNBLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztHQUMzQjtFQUNEO0lBQ0UsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztJQUN4QyxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO0lBQ3JDO0lBQ0EsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0dBQzVCOztFQUVEO0lBQ0UsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssS0FBSztJQUM1QixVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7SUFDbkQ7SUFDQSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRztNQUNuQixJQUFJLEVBQUUsSUFBSTtNQUNWLElBQUksRUFBRSxLQUFLO01BQ1gsTUFBTSxFQUFFLEtBQUs7TUFDYixLQUFLLEVBQUUsS0FBSztNQUNaLEtBQUssRUFBRSxLQUFLO01BQ1osTUFBTSxFQUFFLEtBQUs7S0FDZCxDQUFDO0dBQ0g7O0VBRUQ7SUFDRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssS0FBSztPQUM1QixHQUFHLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEtBQUssS0FBSyxDQUFDO0lBQ25ELFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQztJQUNsRDtJQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7TUFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztLQUNqQyxNQUFNO01BQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDcEM7R0FDRjs7RUFFRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7SUFDeEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0dBQ3BCOztFQUVELE9BQU8sSUFBSSxDQUFDO0NBQ2I7O0FBRUQsU0FBUyxzQkFBc0IsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFO0VBQy9DLE1BQU0sSUFBSSxHQUFHO0lBQ1gsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO0lBQy9DLE1BQU0sRUFBRSxVQUFVLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO0dBQzlDLENBQUM7Ozs7Ozs7Ozs7Ozs7RUFhRixPQUFPLElBQUksQ0FBQztDQUNiOztBQUVELFNBQVMsb0JBQW9CLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRTtFQUM3QyxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO0VBQ3JDLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDbEMsTUFBTSxJQUFJLEdBQUc7SUFDWCxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsWUFBWSxDQUFDLFFBQVEsRUFBRTtJQUMxQyxNQUFNLEVBQUUsY0FBYyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7SUFDdEMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7R0FDOUMsQ0FBQztFQUNGLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO0lBQzdDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNuQixPQUFPLElBQUksQ0FBQztHQUNiOztFQUVELE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTTtJQUM1QyxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0dBQ25DLENBQUM7RUFDRixJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0lBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7R0FDMUU7OztFQUdELElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO0lBQzNDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQztHQUN2RDs7OztFQUlELE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTTtJQUM3QyxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO0dBQ3BDLENBQUM7RUFDRixNQUFNLFlBQVksR0FBRyxvQkFBb0I7SUFDdkMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQztHQUNsRCxDQUFDOztFQUVGLElBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7SUFDNUIsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUk7TUFDNUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7TUFDNUMsTUFBTSxLQUFLLEdBQUcsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7TUFDNUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUk7UUFDcEIsT0FBTyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQixPQUFPLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDakMsQ0FBQyxDQUFDO0tBQ0osQ0FBQyxDQUFDO0dBQ0o7RUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUM7OztFQUdsQyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRTtJQUMvQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7O0lBRTVCLFVBQVUsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSTtNQUN6QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztNQUM1QyxNQUFNLEtBQUssR0FBRyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztNQUM1QyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSTtRQUNwQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUN2QyxDQUFDLENBQUM7S0FDSixDQUFDLENBQUM7R0FDSjs7RUFFRCxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSTtJQUM3QyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFO01BQ3BELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDbkUsTUFBTSxDQUFDLElBQUksSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2hFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEtBQUs7VUFDckIsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1VBQzlDLE9BQU8sR0FBRyxDQUFDO1NBQ1osRUFBRSxFQUFFLENBQUMsQ0FBQztLQUNWOztJQUVELElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFO01BQ25ELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQztLQUNwQztHQUNGLENBQUMsQ0FBQzs7RUFFSCxPQUFPLElBQUksQ0FBQztDQUNiOzs7O0FBSUQsU0FBUyxvQkFBb0IsQ0FBQyxjQUFjLEVBQUU7RUFDNUMsTUFBTSxXQUFXLEdBQUcsY0FBYztLQUMvQixNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzNDLEdBQUcsQ0FBQyxJQUFJLElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUM5RCxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxLQUFLO01BQzlCLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJO1FBQ3BCLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7T0FDM0IsQ0FBQyxDQUFDO01BQ0gsT0FBTyxXQUFXLENBQUM7S0FDcEIsRUFBRSxFQUFFLENBQUMsQ0FBQzs7RUFFVCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7RUFDMUMsT0FBTyxlQUFlLENBQUMsT0FBTyxDQUFDOztFQUUvQixPQUFPO0lBQ0wsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDekIsS0FBSyxFQUFFLGVBQWU7SUFDdEIsSUFBSSxFQUFFLGVBQWU7R0FDdEIsQ0FBQztDQUNIO0FBQ0QsU0FBUyxjQUFjLENBQUMsVUFBVSxFQUFFO0VBQ2xDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUMsTUFBTTtJQUM3RCxDQUFDLE1BQU0sRUFBRSxNQUFNLEtBQUs7TUFDbEIsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO1FBQ2hELE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUM7T0FDeEI7TUFDRCxPQUFPLE1BQU0sQ0FBQztLQUNmO0lBQ0QsRUFBRTtHQUNILENBQUM7Q0FDSDs7QUNwUWMsc0JBQWM7RUFDM0IsS0FBSztFQUNMLEtBQUs7RUFDTCxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFO0VBQ3REO0VBQ0EsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDO0VBQ3RCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ3ZDLE1BQU0sRUFBRSxXQUFXLEVBQUUsR0FBRyxHQUFHLENBQUM7RUFDNUIsTUFBTSxNQUFNLEdBQUcsRUFBRSxhQUFhLEVBQUUsU0FBUyxDQUFDLGFBQWEsSUFBSSxJQUFJLEVBQUUsQ0FBQzs7RUFFbEUsU0FBUyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztFQUN0QyxLQUFLLE1BQU0sU0FBUyxJQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFO0lBQzlDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDNUQsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO0lBQzFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUs7TUFDcEMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztJQUMvQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUU7TUFDcEQsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWU7UUFDcEQsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxlQUFlLENBQUM7S0FDL0M7R0FDRjtFQUNELE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSXJDLElBQVMsQ0FBQ0MsT0FBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO0lBQ25ELFFBQVEsRUFBRSxLQUFLO0dBQ2hCLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQzs7RUFFZCxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUlELElBQVMsQ0FBQ0MsT0FBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO0lBQ25ELFFBQVEsRUFBRSxLQUFLO0dBQ2hCLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQzs7O0VBR2QsTUFBTSxPQUFPLEdBQUc7SUFDZCxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUU7SUFDeEMsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFO0dBQ3pDLENBQUM7O0VBRUYsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQzs7OztFQUlqRCxJQUFJLFNBQVMsR0FBRyx3QkFBd0IsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztFQUM1RSxTQUFTLEdBQUcsU0FBUztLQUNsQixHQUFHLENBQUMsUUFBUSxJQUFJO01BQ2YsUUFBUSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7TUFDbkMsT0FBTyxRQUFRLENBQUM7S0FDakIsQ0FBQztLQUNELElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7O0VBRS9DLE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLElBQUk7SUFDL0IsTUFBTSxJQUFJLEdBQUcsV0FBVyxHQUFHLFFBQVEsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO0lBQ3JELE9BQU87TUFDTCxJQUFJLEVBQUU7UUFDSixRQUFRLEVBQUUsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUM7UUFDNUQsYUFBYSxFQUFFLE1BQU0sQ0FBQyxhQUFhO1FBQ25DLElBQUk7T0FDTDtNQUNELGNBQWMsRUFBRSxRQUFRO0tBQ3pCLENBQUM7R0FDSCxDQUFDLENBQUM7Q0FDSjtBQUNELEFBQU8sU0FBUyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNoQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRTtJQUNyQixJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssQ0FBQyxDQUFDLFVBQVUsRUFBRTtNQUNqQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQztLQUN0QztJQUNELE9BQU8sQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDO0dBQ3BDO0VBQ0QsT0FBTyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7Q0FDeEI7O0FDdkVjLFNBQVMsWUFBWSxDQUFDLE1BQU0sRUFBRTtFQUMzQyxJQUFJLE1BQU0sR0FBR3FDLFNBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDO0VBQzNDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQy9DLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0VBQzVCLE9BQU8sTUFBTSxDQUFDO0NBQ2Y7OztBQUdELFNBQVMsbUJBQW1CLENBQUMsTUFBTSxDQUFDO0VBQ2xDLElBQUksTUFBTSxDQUFDLElBQUksRUFBRTtJQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSTtNQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtRQUNoQixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO09BQzFDLE1BQU07UUFDTCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztPQUM5RDtLQUNGLENBQUMsQ0FBQztHQUNKO0VBQ0QsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFO0lBQ2xCLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSztNQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtRQUNsQixNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQ2hELE1BQU07UUFDTCxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztPQUN0RjtLQUNGLENBQUMsQ0FBQztHQUNKO0NBQ0Y7OztBQUdELFNBQVMsbUJBQW1CLENBQUMsUUFBUSxFQUFFO0VBQ3JDLElBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7SUFDckMsT0FBTyxFQUFFLENBQUM7R0FDWDtFQUNELElBQUksVUFBVSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQzs7RUFFaEUsT0FBT0MsSUFBTyxFQUFFO0tBQ2IsR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO0tBQ3ZCLE1BQU0sQ0FBQyxJQUFJLElBQUk7TUFDZCxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDMUMsSUFBSSxlQUFlLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7O01BRXJELElBQUksWUFBWSxFQUFFO1FBQ2hCLGVBQWUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQzVCLElBQUksWUFBWSxDQUFDLFNBQVMsRUFBRTtVQUMxQixlQUFlLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUM7U0FDcEQ7UUFDRCxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztPQUM1QjtNQUNELE9BQU8sZUFBZSxDQUFDO0tBQ3hCLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO0tBQ25CLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQztLQUNqQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMvRTs7QUNwREksTUFBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLE1BQU07Ozs7In0= +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VtaW5pLmpzIiwic291cmNlcyI6WyJzcmMvYW5pbWF0aW9uLmpzIiwic3JjL3V0aWwvdXRpbC5qcyIsInNyYy9wYXJzZXIvcmVzb2x2ZUNvbGxlY3Rvci5qcyIsInNyYy9zY2hlZHVsZS5qcyIsInNyYy9wYXJzZXIvY29uZmxpY3RDaGVja2VyLmpzIiwibm9kZV9tb2R1bGVzL3VyaS1qcy9zcmMvdXRpbC50cyIsIm5vZGVfbW9kdWxlcy91cmktanMvc3JjL3JlZ2V4cHMtdXJpLnRzIiwibm9kZV9tb2R1bGVzL3VyaS1qcy9zcmMvcmVnZXhwcy1pcmkudHMiLCJub2RlX21vZHVsZXMvdXJpLWpzL25vZGVfbW9kdWxlcy9wdW55Y29kZS9wdW55Y29kZS5lczYuanMiLCJub2RlX21vZHVsZXMvdXJpLWpzL3NyYy91cmkudHMiLCJub2RlX21vZHVsZXMvdXJpLWpzL3NyYy9zY2hlbWVzL2h0dHAudHMiLCJub2RlX21vZHVsZXMvdXJpLWpzL3NyYy9zY2hlbWVzL2h0dHBzLnRzIiwibm9kZV9tb2R1bGVzL3VyaS1qcy9zcmMvc2NoZW1lcy9tYWlsdG8udHMiLCJub2RlX21vZHVsZXMvdXJpLWpzL3NyYy9zY2hlbWVzL3Vybi50cyIsIm5vZGVfbW9kdWxlcy91cmktanMvc3JjL3NjaGVtZXMvdXJuLXV1aWQudHMiLCJub2RlX21vZHVsZXMvdXJpLWpzL3NyYy9pbmRleC50cyIsIm5vZGVfbW9kdWxlcy9mYXN0LWRlZXAtZXF1YWwvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9jb21waWxlL3VjczJsZW5ndGguanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9jb21waWxlL3V0aWwuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9jb21waWxlL3NjaGVtYV9vYmouanMiLCJub2RlX21vZHVsZXMvanNvbi1zY2hlbWEtdHJhdmVyc2UvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9jb21waWxlL3Jlc29sdmUuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9jb21waWxlL2Vycm9yX2NsYXNzZXMuanMiLCJub2RlX21vZHVsZXMvZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy92YWxpZGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbGliL2NvbXBpbGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9jYWNoZS5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbGliL2NvbXBpbGUvZm9ybWF0cy5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL3JlZi5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL2FsbE9mLmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvYW55T2YuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9jb21tZW50LmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvY29uc3QuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9jb250YWlucy5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL2RlcGVuZGVuY2llcy5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL2VudW0uanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9mb3JtYXQuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9pZi5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL2l0ZW1zLmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvX2xpbWl0LmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvX2xpbWl0SXRlbXMuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9fbGltaXRMZW5ndGguanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9fbGltaXRQcm9wZXJ0aWVzLmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvbXVsdGlwbGVPZi5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL25vdC5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL29uZU9mLmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvcGF0dGVybi5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL3Byb3BlcnRpZXMuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9wcm9wZXJ0eU5hbWVzLmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvcmVxdWlyZWQuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy91bmlxdWVJdGVtcy5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvY29tcGlsZS9ydWxlcy5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbGliL2RhdGEuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9jb21waWxlL2FzeW5jLmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvY3VzdG9tLmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvZGVmaW5pdGlvbl9zY2hlbWEuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9rZXl3b3JkLmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvYWp2LmpzIiwic3JjL3BhcnNlci9zcGVjQ2hlY2tlci5qcyIsIm5vZGVfbW9kdWxlcy92ZWdhLWV4cHJlc3Npb24vc3JjL2FzdC5qcyIsIm5vZGVfbW9kdWxlcy92ZWdhLWV4cHJlc3Npb24vc3JjL3BhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy92ZWdhLWV4cHJlc3Npb24vc3JjL2NvbnN0YW50cy5qcyIsIm5vZGVfbW9kdWxlcy92ZWdhLXV0aWwvc3JjL2FjY2Vzc29yLmpzIiwibm9kZV9tb2R1bGVzL3ZlZ2EtdXRpbC9zcmMvZXJyb3IuanMiLCJub2RlX21vZHVsZXMvdmVnYS11dGlsL3NyYy9zcGxpdEFjY2Vzc1BhdGguanMiLCJub2RlX21vZHVsZXMvdmVnYS11dGlsL3NyYy9pc0FycmF5LmpzIiwibm9kZV9tb2R1bGVzL3ZlZ2EtdXRpbC9zcmMvaXNPYmplY3QuanMiLCJub2RlX21vZHVsZXMvdmVnYS11dGlsL3NyYy9pc1N0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy92ZWdhLXV0aWwvc3JjL3N0cmluZ1ZhbHVlLmpzIiwibm9kZV9tb2R1bGVzL3ZlZ2EtdXRpbC9zcmMvZmllbGQuanMiLCJub2RlX21vZHVsZXMvdmVnYS11dGlsL3NyYy9hY2Nlc3NvcnMuanMiLCJub2RlX21vZHVsZXMvdmVnYS11dGlsL3NyYy9pc0Z1bmN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3ZlZ2EtdXRpbC9zcmMvaGFzT3duUHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvdmVnYS11dGlsL3NyYy90b1NldC5qcyIsIm5vZGVfbW9kdWxlcy92ZWdhLWV4cHJlc3Npb24vc3JjL2Z1bmN0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy92ZWdhLWV4cHJlc3Npb24vc3JjL2NvZGVnZW4uanMiLCJzcmMvZGVmYXVsdC9icm93c2VyLmpzIiwic3JjL2RlZmF1bHQvZWFzZS5qcyIsInNyYy9kZWZhdWx0L3ZlZ2FDb25maWcuanMiLCJzcmMvZGVmYXVsdC91dGlsLmpzIiwic3JjL2RlZmF1bHQvc3R5bGUuanMiLCJzcmMvZGVmYXVsdC9lbmNvZGUvdmVnYURlZmF1bHQuanMiLCJzcmMvZGVmYXVsdC9lbmNvZGUvbGVnZW5kLmpzIiwic3JjL2RlZmF1bHQvZW5jb2RlL21hcmsuanMiLCJzcmMvZGVmYXVsdC9lbmNvZGUvYXhpcy5qcyIsInNyYy9kZWZhdWx0L2VuY29kZS9pbmRleC5qcyIsInNyYy9hY3R1YXRvci91dGlsLmpzIiwic3JjL2NoYW5nZUZldGNoZXIvc3RhdGUvdXRpbC5qcyIsInNyYy9lbnVtZXJhdG9yLmpzIiwic3JjL3BhcnNlci9zdGVwRW51bWVyYXRvci5qcyIsInNyYy9wYXJzZXIvaW5kZXguanMiLCJzcmMvdXRpbC92Z0RhdGFIZWxwZXIuanMiLCJzcmMvY2hhbmdlRmV0Y2hlci9zdGF0ZS9kYXRhSm9pbi5qcyIsInNyYy9jaGFuZ2VGZXRjaGVyL3N0YXRlL2NvbXB1dGUvdXRpbC5qcyIsInNyYy9jaGFuZ2VGZXRjaGVyL3N0YXRlL2NvbXB1dGUvbWFyay5qcyIsInNyYy9jaGFuZ2VGZXRjaGVyL3N0YXRlL2NvbXB1dGUvYXhpcy5qcyIsInNyYy9jaGFuZ2VGZXRjaGVyL3N0YXRlL2NvbXB1dGUvbGVnZW5kLmpzIiwic3JjL2NoYW5nZUZldGNoZXIvc3RhdGUvY29tcHV0ZS92aWV3LmpzIiwic3JjL3V0aWwvdmdTcGVjSGVscGVyLmpzIiwic3JjL2NoYW5nZUZldGNoZXIvY2hhbmdlLmpzIiwic3JjL2NoYW5nZUZldGNoZXIvc3RhdGUvaW5kZXguanMiLCJzcmMvYWN0dWF0b3IvdmVnYS1yZW5kZXItdXRpbC5qcyIsInNyYy9hY3R1YXRvci9tYXJrL2ludGVycG9sYXRlUGF0aFlILmpzIiwic3JjL2FjdHVhdG9yL21hcmsvaW50ZXJwb2xhdGVIZWxwZXIuanMiLCJzcmMvYWN0dWF0b3IvYXR0cmlidXRlRmV0Y2hlci5qcyIsInNyYy9hY3R1YXRvci9zdGFnZ2VyaW5nLmpzIiwic3JjL2FjdHVhdG9yL3RpbWluZ3MuanMiLCJzcmMvYWN0dWF0b3IvbWFyay9tYXJrLmpzIiwic3JjL2FjdHVhdG9yL21hcmsvYXJlYUxpbmUuanMiLCJzcmMvYWN0dWF0b3IvYXhpcy5qcyIsInNyYy9hY3R1YXRvci9sZWdlbmQuanMiLCJzcmMvYWN0dWF0b3Ivdmlldy5qcyIsInNyYy9hY3R1YXRvci9pbmRleC5qcyIsInNyYy9yZXNvbHZlci5qcyIsInNyYy9nZW1pbmkuanMiLCJzcmMvcmVjb21tZW5kZXIvdXRpbC5qcyIsInNyYy9yZWNvbW1lbmRlci9kaWZmRGV0ZWN0b3IuanMiLCJzcmMvcmVjb21tZW5kZXIvZGlmZkFwcGxpZXIuanMiLCJzcmMvcmVjb21tZW5kZXIvbWFya0NvbXBDaGVja2VyLmpzIiwic3JjL3JlY29tbWVuZGVyL3BzZXVkb1RpbWVsaW5lVmFsaWRhdG9yLmpzIiwic3JjL3JlY29tbWVuZGVyL3BzZXVkb1RpbWVsaW5lRW51bWVyYXRvci5qcyIsInNyYy9yZWNvbW1lbmRlci9kZXNpZ25HdWlkZWxpbmVzLmpzIiwic3JjL3JlY29tbWVuZGVyL3BzZXVkb1RpbWVsaW5lRXZhbHVhdG9yLmpzIiwic3JjL3JlY29tbWVuZGVyL3RpbWVsaW5lR2VuZXJhdG9yLmpzIiwic3JjL3JlY29tbWVuZGVyL2luZGV4LmpzIiwic3JjL3V0aWwvdmwydmc0Z2VtaW5pLmpzIiwic3JjL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNsYXNzIEFuaW1hdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHNjaGVkdWxlLCByYXdJbmZvLCBzcGVjKSB7XG4gICAgdGhpcy5zY2hlZHVsZSA9IHNjaGVkdWxlO1xuICAgIHRoaXMubW9tZW50cyA9IHRoaXMuc2NoZWR1bGUubW9tZW50cztcbiAgICB0aGlzLnN0YXR1cyA9IFwicmVhZHlcIjtcbiAgICB0aGlzLnNwZWMgPSBzcGVjO1xuICAgIHRoaXMubG9ncyA9IFtdO1xuICAgIHRoaXMuX3F1ZXVlID0gW107XG4gICAgdGhpcy5yYXdJbmZvID0gcmF3SW5mbztcbiAgfVxuXG4gIGxvZyh0aW1lc3RhbXAsIG1lc3NhZ2UsIGluZm8pIHtcbiAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIHRpbWVzdGFtcCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgdGhpcy5sb2dzLnB1c2goe1xuICAgICAgICB0aW1lc3RhbXAsXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIGluZm9cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5sb2dzO1xuICB9XG5cbiAgYXN5bmMgcGxheSh0YXJnZXRFbG0pIHtcbiAgICB0aGlzLnN0YXR1cyA9IFwicGxheWluZ1wiO1xuICAgIC8vIGdldCBtb21lbnRzIGFuZCBzb3J0IGJ5IHNUaW1lXG4gICAgY29uc3QgeyBtb21lbnRzIH0gPSB0aGlzO1xuXG4gICAgY29uc3QgZ2xvYmFsU1RpbWUgPSBuZXcgRGF0ZSgpO1xuICAgIHRoaXMuX3N0YXJ0KG1vbWVudHNbMF0uc3RhcnRpbmcsIHRhcmdldEVsbSk7XG4gICAgdGhpcy5sb2cobmV3IERhdGUoKSAtIGdsb2JhbFNUaW1lLCBcIjAtdGggbW9tZW50XCIpO1xuXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBtb21lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBtb21lbnQgPSBtb21lbnRzW2ldO1xuXG4gICAgICBhd2FpdCB0aGlzLl9lbmQobW9tZW50KS50aGVuKCgpID0+IHtcbiAgICAgICAgY29uc3QgZGVsYXkgPSBNYXRoLm1heChtb21lbnQudGltZSAtIChuZXcgRGF0ZSgpIC0gZ2xvYmFsU1RpbWUpLCAwKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dCgoKSA9PiByZXNvbHZlKCksIGRlbGF5KSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX3N0YXJ0KG1vbWVudC5zdGFydGluZywgdGFyZ2V0RWxtKTtcbiAgICAgIHRoaXMubG9nKG5ldyBEYXRlKCkgLSBnbG9iYWxTVGltZSwgYCR7aX0tdGggbW9tZW50YCk7XG5cbiAgICAgIGlmIChpID09PSBtb21lbnRzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBcInJlYWR5XCI7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfc3RhcnQoc3RlcHMsIHRhcmdldEVsbSkge1xuICAgIHN0ZXBzLmZvckVhY2goc3RlcCA9PiB7XG4gICAgICB0aGlzLl9xdWV1ZS5wdXNoKHtcbiAgICAgICAgc1RpbWU6IHN0ZXAuc1RpbWUsXG4gICAgICAgIGVUaW1lOiBzdGVwLmVUaW1lLFxuICAgICAgICBzdGVwLFxuICAgICAgICByZXN1bHQ6IHN0ZXAudGVtcGxhdGUodGhpcy5yYXdJbmZvLCBzdGVwLCB0YXJnZXRFbG0pIC8vIGNvbnRhaW5zIHRoZSBwcm9taXNlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIF9lbmQobW9tZW50KSB7XG4gICAgY29uc3QgeyB0aW1lIH0gPSBtb21lbnQ7XG5cbiAgICBjb25zdCB3b3JraW5nU3RlcHMgPSB0aGlzLl9xdWV1ZS5maWx0ZXIoaXRlbSA9PiBpdGVtLmVUaW1lID09PSB0aW1lKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHdvcmtpbmdTdGVwcy5sZW5ndGg7IGkrKykge1xuICAgICAgYXdhaXQgd29ya2luZ1N0ZXBzW2ldLnJlc3VsdDtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHsgQW5pbWF0aW9uIH07XG4iLCJBcnJheS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbih2LCBhY2Nlc3Nvcikge1xuICBhY2Nlc3NvciA9XG4gICAgYWNjZXNzb3IgfHxcbiAgICAoZCA9PiB7XG4gICAgICByZXR1cm4gZDtcbiAgICB9KTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGFjY2Vzc29yKHRoaXNbaV0pID09PSBhY2Nlc3Nvcih2KSkgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcbkFycmF5LnByb3RvdHlwZS5jb250YWluQWxsID0gZnVuY3Rpb24oYXJyLCBhY2Nlc3Nvcikge1xuICBhY2Nlc3NvciA9XG4gICAgYWNjZXNzb3IgfHxcbiAgICAoZCA9PiB7XG4gICAgICByZXR1cm4gZDtcbiAgICB9KTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIXRoaXMuY29udGFpbnMoYXJyW2ldLCBhY2Nlc3NvcikpIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbkFycmF5LnByb3RvdHlwZS51bmlxdWUgPSBmdW5jdGlvbihhY2Nlc3Nvcikge1xuICBjb25zdCBhcnIgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKCFhcnIuY29udGFpbnModGhpc1tpXSwgYWNjZXNzb3IpKSB7XG4gICAgICBhcnIucHVzaCh0aGlzW2ldKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFycjtcbn07XG5cbkFycmF5LnByb3RvdHlwZS5zYW1wbGUgPSBmdW5jdGlvbihOKSB7XG4gIGNvbnN0IHRlbXBUaGlzID0gdGhpcy5zbGljZSgpO1xuICBjb25zdCBzYW1wbGVkID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgTjsgaSsrKSB7XG4gICAgc2FtcGxlZC5wdXNoKFxuICAgICAgdGVtcFRoaXMuc3BsaWNlKFtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiB0ZW1wVGhpcy5sZW5ndGgpXSwgMSlbMF1cbiAgICApO1xuICB9XG4gIHJldHVybiBzYW1wbGVkO1xufTtcblxuQXJyYXkucHJvdG90eXBlLnNodWZmbGUgPSBmdW5jdGlvbigpIHtcbiAgZm9yIChsZXQgaSA9IHRoaXMubGVuZ3RoOyBpOyBpLS0pIHtcbiAgICBjb25zdCBqID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogaSk7XG4gICAgW3RoaXNbaSAtIDFdLCB0aGlzW2pdXSA9IFt0aGlzW2pdLCB0aGlzW2kgLSAxXV07XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xuQXJyYXkucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMpKTtcbn07XG5mdW5jdGlvbiBzdHJpbmdpZnlEYXR1bVZhbHVlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBcIl9fbnVsbF9fXCI7XG4gIH1cbiAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG59XG5mdW5jdGlvbiBkZWVwRXF1YWwob2JqMSwgb2JqMikge1xuICBpZiAob2JqMSA9PT0gb2JqMikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChpc0RhdGUob2JqMSkgJiYgaXNEYXRlKG9iajIpKSB7XG4gICAgcmV0dXJuIE51bWJlcihvYmoxKSA9PT0gTnVtYmVyKG9iajIpO1xuICB9XG4gIGlmIChcbiAgICB0eXBlb2Ygb2JqMSA9PT0gXCJvYmplY3RcIiAmJlxuICAgIG9iajEgIT09IHVuZGVmaW5lZCAmJlxuICAgIHR5cGVvZiBvYmoyID09PSBcIm9iamVjdFwiICYmXG4gICAgb2JqMiAhPT0gdW5kZWZpbmVkXG4gICkge1xuICAgIGNvbnN0IHByb3BzMSA9IE9iamVjdC5rZXlzKG9iajEpO1xuICAgIGNvbnN0IHByb3BzMiA9IE9iamVjdC5rZXlzKG9iajIpO1xuICAgIGlmIChwcm9wczEubGVuZ3RoICE9PSBwcm9wczIubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wczEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHByb3AgPSBwcm9wczFbaV07XG5cbiAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iajIsIHByb3ApIHx8ICFkZWVwRXF1YWwob2JqMVtwcm9wXSwgb2JqMltwcm9wXSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGNvcHkob2JqKSB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqKSk7XG59XG4vLyBjcmVhdGUgYSBuZXcgb2JqIHRoYXQgaGFzIHRoZSBzYW1lIGtleXMgcG9pbnRpbmcgdGhlIHNhbWUgdmFsdWVzL2Z1bmN0aW9ucztcbmZ1bmN0aW9uIGNvcHkyKG9iaikge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5yZWR1Y2UoKGFjYywgY3VycikgPT4ge1xuICAgIGFjY1tjdXJyXSA9IG9ialtjdXJyXTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG59XG5mdW5jdGlvbiBmbGF0dGVuKGFycmF5cykge1xuICByZXR1cm4gYXJyYXlzLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiB7XG4gICAgYWNjID0gYWNjLmNvbmNhdChjdXJyKTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG59XG5cbmZ1bmN0aW9uIHBlcm11dGF0ZShhcnIpIHtcbiAgaWYgKGFyci5sZW5ndGggPT09IDIpIHtcbiAgICByZXR1cm4gW2FyciwgW2FyclsxXSwgYXJyWzBdXV07XG4gIH1cbiAgcmV0dXJuIGFyci5yZWR1Y2UoKGFjYywgYW5jaG9yLCBpKSA9PiB7XG4gICAgY29uc3Qgd29ya2luZ0FyciA9IGNvcHkoYXJyKTtcbiAgICB3b3JraW5nQXJyLnNwbGljZShpLCAxKTtcblxuICAgIGFjYyA9IGFjYy5jb25jYXQoXG4gICAgICBwZXJtdXRhdGUod29ya2luZ0FycikubWFwKG5ld0FyciA9PiB7XG4gICAgICAgIHJldHVybiBbYW5jaG9yXS5jb25jYXQobmV3QXJyKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG59XG5mdW5jdGlvbiBpc0RhdGUobykge1xuICByZXR1cm4gbyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvLmdldE1vbnRoID09PSBcImZ1bmN0aW9uXCI7XG59XG5cbmZ1bmN0aW9uIGVudW1BcnIoYXJyLCBpdGVtKSB7XG4gIGNvbnN0IG5ld0FycnMgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBuZXdBcnIgPSBjb3B5KGFycik7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmV3QXJyW2ldKSkge1xuICAgICAgbmV3QXJyW2ldLnB1c2goaXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0FycltpXSA9IFtuZXdBcnJbaV0sIGl0ZW1dO1xuICAgIH1cbiAgICBuZXdBcnJzLnB1c2gobmV3QXJyKTtcbiAgfVxuICByZXR1cm4gbmV3QXJycztcbn1cblxuZnVuY3Rpb24gZW51bUFycmF5c0J5SXRlbXMoYXJycywgaXRlbXMsIGVudW1BcnJGbiA9IGVudW1BcnIpIHtcbiAgbGV0IG5ld0FycnMgPSBjb3B5KGFycnMpO1xuICBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgIG5ld0FycnMgPSBuZXdBcnJzLnJlZHVjZSgoYWxsQXJycywgYXJyKSA9PiB7XG4gICAgICByZXR1cm4gKGFsbEFycnMgPSBhbGxBcnJzLmNvbmNhdChlbnVtQXJyRm4oYXJyLCBpdGVtKSkpO1xuICAgIH0sIFtdKTtcbiAgfSk7XG4gIHJldHVybiBuZXdBcnJzO1xufVxuXG5mdW5jdGlvbiBnZXQobywgLi4ucHJvcHMpIHtcbiAgcmV0dXJuIHByb3BzLnJlZHVjZSgob2JqLCBwcm9wKSA9PiB7XG4gICAgcmV0dXJuICFpc051bGxPclVuZGVmaW5lZChvYmopICYmICFpc051bGxPclVuZGVmaW5lZChvYmpbcHJvcF0pXG4gICAgICA/IG9ialtwcm9wXVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIH0sIG8pO1xufVxuXG5mdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZChvYmopIHtcbiAgcmV0dXJuIG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGlzTnVtYmVyKHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSBcIm51bWJlclwiICYmICFpc05hTih4KTtcbn1cbmZ1bmN0aW9uIHJvdW5kVXAobnVtLCBkID0gNSkge1xuICByZXR1cm4gTWF0aC5yb3VuZChNYXRoLnBvdygxMCwgZCkgKiBudW0pIC8gTWF0aC5wb3coMTAsIGQpO1xufVxuQXJyYXkucHJvdG90eXBlLmV4Y2x1ZGUgPSBmdW5jdGlvbihpdGVtcywgYWNjZXNzb3IgPSB4ID0+IHgpIHtcbiAgY29uc3QgbmV3QXJyID0gdGhpcy5zbGljZSgpO1xuICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICBjb25zdCBpID0gbmV3QXJyLmZpbmRJbmRleCh4ID0+IGFjY2Vzc29yKHgpID09PSBhY2Nlc3NvcihpdGVtKSk7XG4gICAgaWYgKGkgPj0gMCkge1xuICAgICAgbmV3QXJyLnNwbGljZShpLCAxKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ld0Fycjtcbn07XG5mdW5jdGlvbiB2YXJpYW5jZShudW1zKSB7XG4gIGNvbnN0IG11ID0gbWVhbihudW1zKTtcbiAgcmV0dXJuIChcbiAgICBudW1zLnJlZHVjZSgoYWNjLCBudW0pID0+IChhY2MgKz0gTWF0aC5wb3cobnVtIC0gbXUsIDIpKSwgMCkgLyBudW1zLmxlbmd0aFxuICApO1xufVxuZnVuY3Rpb24gbWVhbihudW1zKSB7XG4gIHJldHVybiBudW1zLnJlZHVjZSgoc3VtLCBudW0pID0+IHN1bSArIG51bSwgMCkgLyBudW1zLmxlbmd0aDtcbn1cblxuZnVuY3Rpb24gaXNFbXB0eShvKSB7XG4gIHJldHVybiB0eXBlb2YgbyA9PT0gXCJvYmplY3RcIiAmJiBPYmplY3Qua2V5cyhvKS5sZW5ndGggPT09IDA7XG59XG5cbmV4cG9ydCB7XG4gIGRlZXBFcXVhbCxcbiAgY29weSxcbiAgY29weTIsXG4gIGZsYXR0ZW4sXG4gIHBlcm11dGF0ZSxcbiAgaXNOdW1iZXIsXG4gIGVudW1BcnJheXNCeUl0ZW1zLFxuICBnZXQsXG4gIHJvdW5kVXAsXG4gIHZhcmlhbmNlLFxuICBtZWFuLFxuICBpc0VtcHR5LFxuICBzdHJpbmdpZnlEYXR1bVZhbHVlXG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocGFyc2VkQmxvY2ssIHBhcnNlZFN0ZXBzKSB7XG4gIGxldCByZXNvbHZlcyA9IGNvbGxlY3QocGFyc2VkQmxvY2spO1xuICAvLyAxLTIuIGNvbGxlY3QgdGhlIGFsdGVybmF0aXZlIHRpbWVsaW5lcy4gKGFsdGVySWRzKVxuICByZXNvbHZlcy5mb3JFYWNoKHIgPT4ge1xuICAgIHIuYWx0ZXJJZHMgPSBwYXJzZWRTdGVwc1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgc3RlcCA9PiBzdGVwLmFsdGVySWQgJiZcbiAgICAgICAgICAoc3RlcC5hbHRlcklkLnNwbGl0KFwiOlwiKVswXSA9PT0gci5hbHRlck5hbWUpXG4gICAgICApXG4gICAgICAubWFwKHN0ZXAgPT4gc3RlcC5hbHRlcklkKVxuICAgICAgLnVuaXF1ZSgpO1xuXG4gICAgLy8gUGxhY2UgXCI6bWFpblwiIGF0IGZpcnN0XG4gICAgY29uc3QgaSA9IHIuYWx0ZXJJZHMuZmluZEluZGV4KGQgPT4gZC5pbmRleE9mKFwiOm1haW5cIikgPj0gMCk7XG4gICAgY29uc3QgaGVhZCA9IHIuYWx0ZXJJZHMuc3BsaWNlKGksIDEpO1xuICAgIHIuYWx0ZXJJZHMgPSBoZWFkLmNvbmNhdChyLmFsdGVySWRzKTtcbiAgfSk7XG4gIHJldHVybiByZXNvbHZlcztcbn1cblxuZnVuY3Rpb24gY29sbGVjdChibG9jaykge1xuICBsZXQgcmVzb2x2ZXMgPSBbXTtcblxuICBpZiAoYmxvY2suc3luYykge1xuICAgIGJsb2NrLnN5bmMuZm9yRWFjaChibGsgPT4ge1xuICAgICAgcmVzb2x2ZXMgPSByZXNvbHZlcy5jb25jYXQoY29sbGVjdChibGspKTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChibG9jay5jb25jYXQpIHtcbiAgICBibG9jay5jb25jYXQuZm9yRWFjaChibGsgPT4ge1xuICAgICAgcmVzb2x2ZXMgPSByZXNvbHZlcy5jb25jYXQoY29sbGVjdChibGspKTtcbiAgICB9KTtcbiAgfVxuICBpZiAoYmxvY2sucmVzb2x2ZSkge1xuICAgIHJlc29sdmVzLnB1c2goYmxvY2sucmVzb2x2ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc29sdmVzO1xufSIsImNsYXNzIFNjaGVkdWxlIHtcbiAgY29uc3RydWN0b3IocGFyc2VkU3RlcHMpIHtcbiAgICAvLyBBc3NnaW4gdGhlIHNUaW1lIGFuZCBlVGltZVxuXG4gICAgbGV0IG5ld1BhcnNlZFN0ZXBzID0gcGFyc2VkU3RlcHMubWFwKChzdHAsIGkpID0+IHtcbiAgICAgIHJldHVybiB7IC4uLnN0cCwgc3RlcElkOiBpIH07XG4gICAgfSk7XG5cbiAgICB0aGlzLnRyYWNrcyA9IG5ld1BhcnNlZFN0ZXBzXG4gICAgICAubWFwKGQgPT4ge1xuICAgICAgICBjb25zdCB0cmFja05hbWUgPSAoZC50cmFja05hbWUgPSBkLmNvbXBOYW1lXG4gICAgICAgICAgPyBgJHtkLmNvbXBUeXBlfS4ke2QuY29tcE5hbWV9YFxuICAgICAgICAgIDogZC5jb21wVHlwZSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiB0cmFja05hbWUsXG4gICAgICAgICAgY29tcFR5cGU6IGQuY29tcFR5cGUsXG4gICAgICAgICAgY29tcE5hbWU6IGQuY29tcE5hbWVcbiAgICAgICAgfTtcbiAgICAgIH0pXG4gICAgICAudW5pcXVlKGQgPT4gZC5uYW1lKVxuICAgICAgLm1hcCh0cmFjayA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4udHJhY2ssXG4gICAgICAgICAgc3RlcHM6IG5ld1BhcnNlZFN0ZXBzLmZpbHRlcihkID0+IGQudHJhY2tOYW1lID09PSB0cmFjay5uYW1lKVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gIH1cblxuXG4gIGdldFRpbWVsaW5lKGFsdGVySWQpIHtcbiAgICByZXR1cm4gdGhpcy50cmFja3MubWFwKHRyYWNrID0+IHtcbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0cmFjaywge1xuICAgICAgICBzdGVwczogdHJhY2suc3RlcHMuZmlsdGVyKFxuICAgICAgICAgIHN0ZXAgPT4gc3RlcC5hbHRlcklkID09PSB1bmRlZmluZWQgfHwgc3RlcC5hbHRlcklkLmluZGV4T2YoYWx0ZXJJZCkgPj0gMFxuICAgICAgICApXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFRpbWVsaW5lQWx0ZXJuYXRvcihzY2FsZU9yZGVyUmVzb3ZsZXMpIHtcbiAgICBsZXQgY291bnRlciA9IDA7XG4gICAgbGV0IGRpdmlkZXJzID0gc2NhbGVPcmRlclJlc292bGVzLnJlZHVjZShcbiAgICAgIChhY2MsIHIsIGkpID0+IHtcbiAgICAgICAgYWNjLnB1c2goci5hbHRlcklkcy5sZW5ndGggKiBhY2NbaV0pO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSxcbiAgICAgIFsxXVxuICAgICk7XG4gICAgY29uc3QgdG90YWxDb3VudCA9IGRpdmlkZXJzW2RpdmlkZXJzLmxlbmd0aCAtIDFdO1xuICAgIGRpdmlkZXJzID0gZGl2aWRlcnMuc2xpY2UoMCwgZGl2aWRlcnMubGVuZ3RoIC0gMSkuc29ydCgoYSwgYikgPT4gYiAtIGEpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjb3VudGVyICs9IDE7XG4gICAgICBjb3VudGVyICU9IHRvdGFsQ291bnQ7XG4gICAgICBpZiAoY291bnRlciA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJHZW1pbmkgY2Fubm90IGZpbmQgdGhlIG9yZGVyIHRvIHJlc29sdmUuXCIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGl2aWRlcnMucmVkdWNlKFxuICAgICAgICAoYWNjLCBkaXZpZGVyLCBpKSA9PiB7XG4gICAgICAgICAgY29uc3QgcSA9IE1hdGguZmxvb3IoYWNjLnJlbWFpbmRlciAvIGRpdmlkZXIpO1xuICAgICAgICAgIGFjYy5yZW1haW5kZXIgLT0gcSAqIGRpdmlkZXI7XG4gICAgICAgICAgY29uc3QgcmVzb2x2ZSA9IHNjYWxlT3JkZXJSZXNvdmxlc1tpXTtcblxuICAgICAgICAgIGNvbnN0IGFsdGVySWQgPSByZXNvbHZlLmFsdGVySWRzW3FdO1xuXG4gICAgICAgICAgYWNjLnRyYWNrcyA9IGFjYy50cmFja3MubWFwKHRyYWNrID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1N0ZXBzID0gdHJhY2suc3RlcHMuZmlsdGVyKHN0ZXAgPT4ge1xuICAgICAgICAgICAgICBpZiAoc3RlcC5hbHRlcklkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc3RlcC5hbHRlcklkLnNwbGl0KFwiOlwiKVswXSA9PT0gYWx0ZXJJZC5zcGxpdChcIjpcIilbMF0gJiZcbiAgICAgICAgICAgICAgICBzdGVwLmFsdGVySWQuc3BsaXQoXCI6XCIpWzFdICE9PSBhbHRlcklkLnNwbGl0KFwiOlwiKVsxXVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHRyYWNrLCB7IHN0ZXBzOiBuZXdTdGVwcyB9KTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sXG4gICAgICAgIHsgdHJhY2tzOiB0aGlzLnRyYWNrcywgcmVtYWluZGVyOiBjb3VudGVyIH1cbiAgICAgICkudHJhY2tzO1xuICAgIH07XG4gIH1cblxuXG59XG5cblxuXG5cblxuZXhwb3J0IHtTY2hlZHVsZX07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2hlY2soc2NoZWR1bGUsIHJlc29sdmVzKSB7XG4gIC8vIDMuIGNoZWNrIGlmIHRoZXJlIGlzIGFueSBjb21wb25lbnQgd2hvc2Ugc3RlcHMgYXJlIG92ZXJsYXBwZWQgYnkgdGhlbXNlbHZlcy5cbiAgbGV0IHRyYWNrc1BlckFsdGVySWQgPSBbeyBhbHRlcklkOiBcIjptYWluXCIsIHRyYWNrczogc2NoZWR1bGUudHJhY2tzIH1dO1xuICBpZiAocmVzb2x2ZXMubGVuZ3RoID4gMCkge1xuICAgIHRyYWNrc1BlckFsdGVySWQgPSByZXNvbHZlc1xuICAgICAgLnJlZHVjZSgoYWxsQWx0ZXJJZHMsIHJlc29sdmUpID0+IHtcbiAgICAgICAgcmV0dXJuIGFsbEFsdGVySWRzLmNvbmNhdChyZXNvbHZlLmFsdGVySWRzKTtcbiAgICAgIH0sIFtdKVxuICAgICAgLm1hcChhbHRlcklkID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0cmFja3M6IHNjaGVkdWxlLnRyYWNrcy5tYXAodHJhY2sgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4udHJhY2ssXG4gICAgICAgICAgICAgIHN0ZXBzOiB0cmFjay5zdGVwcy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgc3RwID0+ICFzdHAuYWx0ZXJJZCB8fCBhbHRlcklkID09PSBzdHAuYWx0ZXJJZFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGFsdGVySWRcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICB9XG4gIGNvbnN0IGNvbmZsaWN0c1BlckFsdGVySWQgPSB0cmFja3NQZXJBbHRlcklkLm1hcChmaW5kQ29uZmxpY3RzKTtcbiAgY29uc3QgY29uZmxpY3RlZEFsdGVySWRzID0gY29uZmxpY3RzUGVyQWx0ZXJJZFxuICAgIC5maWx0ZXIoY29uZmxpY3RzID0+IGNvbmZsaWN0cy5sZW5ndGggPiAwKVxuICAgIC5tYXAoY29uZmxpY3RzID0+IGNvbmZsaWN0cy5hbHRlcklkKTtcblxuICBpZiAoY29uZmxpY3RlZEFsdGVySWRzLmxlbmd0aCA9PT0gdHJhY2tzUGVyQWx0ZXJJZC5sZW5ndGgpIHtcbiAgICBpZiAoY29uZmxpY3RzUGVyQWx0ZXJJZC5sZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQWxsIHBvc3NpYmxlIHRpbWVsaW5lcyBoYXZlIDErIHNjaGVkdWxlIGNvbmZsaWN0LlwiLFxuICAgICAgICBjb25mbGljdHNQZXJBbHRlcklkXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiVGhlIHRpbWVsaW5lIGhhcyAxKyBzY2hlZHVsZSBjb25mbGljdC5cIixcbiAgICAgICAgY29uZmxpY3RzUGVyQWx0ZXJJZFxuICAgICAgKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY29uZmxpY3RlZEFsdGVySWRzLmxlbmd0aCA+IDApIHtcbiAgICBpZiAoXG4gICAgICBjb25mbGljdHNQZXJBbHRlcklkLmZpbmQoY29uZmxpY3RzID0+XG4gICAgICAgIGNvbmZsaWN0cy5maW5kKGNvbmYgPT4gY29uZi5hbHRlcklkLmluZGV4T2YoXCI6bWFpblwiKSA+PSAwKVxuICAgICAgKVxuICAgICkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBcIlRoZSBtYWluIHRpbWVsaW5lIChzcGVjaWZpZWQgdGltZWxpbmUpIGhhcyAxKyBzY2hlZHVsZSBjb25mbGljdC5cIixcbiAgICAgICAgY29uZmxpY3RzUGVyQWx0ZXJJZFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBcIlNvbWUgcG9zc2libGUgdGltZWxpbmVzIGhhdmUgMSsgc2NoZWR1bGUgY29uZmxpY3QuXCIsXG4gICAgICAgIGNvbmZsaWN0c1BlckFsdGVySWRcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHNjaGVkdWxlLnRyYWNrcyA9IHNjaGVkdWxlLnRyYWNrcy5tYXAodHJhY2sgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi50cmFjayxcbiAgICAgIHN0ZXBzOiB0cmFjay5zdGVwcy5maWx0ZXIoXG4gICAgICAgIHN0cCA9PiBjb25mbGljdGVkQWx0ZXJJZHMuaW5kZXhPZihzdHAuYWx0ZXJJZCkgPCAwXG4gICAgICApXG4gICAgfTtcbiAgfSk7XG4gIHJlc29sdmVzID0gcmVzb2x2ZXMubWFwKHJlc29sdmUgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5yZXNvbHZlLFxuICAgICAgYWx0ZXJJZHM6IHJlc29sdmUuYWx0ZXJJZHMuZmlsdGVyKFxuICAgICAgICBpZCA9PiBjb25mbGljdGVkQWx0ZXJJZHMuaW5kZXhPZihpZCkgPCAwXG4gICAgICApXG4gICAgfTtcbiAgfSk7XG5cbiAgcmV0dXJuIHtjb25mbGljdHNQZXJBbHRlcklkfTtcbn1cblxuXG5mdW5jdGlvbiBmaW5kQ29uZmxpY3RzKHRyYWNrc1dpdGhBbHRlcklkKSB7XG4gIGNvbnN0IGNvbmZsaWN0cyA9IFtdO1xuICBjb25zdCB7IHRyYWNrcyB9ID0gdHJhY2tzV2l0aEFsdGVySWQ7XG4gIGNvbnN0IHsgYWx0ZXJJZCB9ID0gdHJhY2tzV2l0aEFsdGVySWQ7XG5cbiAgZm9yIChjb25zdCB0cmFjayBvZiB0cmFja3MpIHtcbiAgICBjb25zdCBzb3J0ZWRTdGVwcyA9IHRyYWNrLnN0ZXBzLnNvcnQoXG4gICAgICAoc3RwMSwgc3RwMikgPT4gc3RwMS5zVGltZSAtIHN0cDIuc1RpbWVcbiAgICApO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc29ydGVkU3RlcHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBpZiAoc29ydGVkU3RlcHNbaV0uZVRpbWUgPiBzb3J0ZWRTdGVwc1tpICsgMV0uc1RpbWUpIHtcbiAgICAgICAgY29uZmxpY3RzLnB1c2goe1xuICAgICAgICAgIGFsdGVySWQsXG4gICAgICAgICAgY29uZmxpY3RlZFN0ZXBzOiBbc29ydGVkU3RlcHNbaV0sIHNvcnRlZFN0ZXBzW2kgKyAxXV0sXG4gICAgICAgICAgY29tcE5hbWU6IHRyYWNrLmNvbXBOYW1lLFxuICAgICAgICAgIGNvbXBUeXBlOiB0cmFjay5jb21wVHlwZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29uZmxpY3RzO1xufSIsImV4cG9ydCBmdW5jdGlvbiBtZXJnZSguLi5zZXRzOkFycmF5PHN0cmluZz4pOnN0cmluZyB7XG5cdGlmIChzZXRzLmxlbmd0aCA+IDEpIHtcblx0XHRzZXRzWzBdID0gc2V0c1swXS5zbGljZSgwLCAtMSk7XG5cdFx0Y29uc3QgeGwgPSBzZXRzLmxlbmd0aCAtIDE7XG5cdFx0Zm9yIChsZXQgeCA9IDE7IHggPCB4bDsgKyt4KSB7XG5cdFx0XHRzZXRzW3hdID0gc2V0c1t4XS5zbGljZSgxLCAtMSk7XG5cdFx0fVxuXHRcdHNldHNbeGxdID0gc2V0c1t4bF0uc2xpY2UoMSk7XG5cdFx0cmV0dXJuIHNldHMuam9pbignJyk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHNldHNbMF07XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YmV4cChzdHI6c3RyaW5nKTpzdHJpbmcge1xuXHRyZXR1cm4gXCIoPzpcIiArIHN0ciArIFwiKVwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZU9mKG86YW55KTpzdHJpbmcge1xuXHRyZXR1cm4gbyA9PT0gdW5kZWZpbmVkID8gXCJ1bmRlZmluZWRcIiA6IChvID09PSBudWxsID8gXCJudWxsXCIgOiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc3BsaXQoXCIgXCIpLnBvcCgpLnNwbGl0KFwiXVwiKS5zaGlmdCgpLnRvTG93ZXJDYXNlKCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9VcHBlckNhc2Uoc3RyOnN0cmluZyk6c3RyaW5nIHtcblx0cmV0dXJuIHN0ci50b1VwcGVyQ2FzZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9BcnJheShvYmo6YW55KTpBcnJheTxhbnk+IHtcblx0cmV0dXJuIG9iaiAhPT0gdW5kZWZpbmVkICYmIG9iaiAhPT0gbnVsbCA/IChvYmogaW5zdGFuY2VvZiBBcnJheSA/IG9iaiA6ICh0eXBlb2Ygb2JqLmxlbmd0aCAhPT0gXCJudW1iZXJcIiB8fCBvYmouc3BsaXQgfHwgb2JqLnNldEludGVydmFsIHx8IG9iai5jYWxsID8gW29ial0gOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChvYmopKSkgOiBbXTtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gYXNzaWduKHRhcmdldDogb2JqZWN0LCBzb3VyY2U6IGFueSk6IGFueSB7XG5cdGNvbnN0IG9iaiA9IHRhcmdldCBhcyBhbnk7XG5cdGlmIChzb3VyY2UpIHtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBzb3VyY2UpIHtcblx0XHRcdG9ialtrZXldID0gc291cmNlW2tleV07XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvYmo7XG59IiwiaW1wb3J0IHsgVVJJUmVnRXhwcyB9IGZyb20gXCIuL3VyaVwiO1xuaW1wb3J0IHsgbWVyZ2UsIHN1YmV4cCB9IGZyb20gXCIuL3V0aWxcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkRXhwcyhpc0lSSTpib29sZWFuKTpVUklSZWdFeHBzIHtcblx0Y29uc3Rcblx0XHRBTFBIQSQkID0gXCJbQS1aYS16XVwiLFxuXHRcdENSJCA9IFwiW1xcXFx4MERdXCIsXG5cdFx0RElHSVQkJCA9IFwiWzAtOV1cIixcblx0XHREUVVPVEUkJCA9IFwiW1xcXFx4MjJdXCIsXG5cdFx0SEVYRElHJCQgPSBtZXJnZShESUdJVCQkLCBcIltBLUZhLWZdXCIpLCAgLy9jYXNlLWluc2Vuc2l0aXZlXG5cdFx0TEYkJCA9IFwiW1xcXFx4MEFdXCIsXG5cdFx0U1AkJCA9IFwiW1xcXFx4MjBdXCIsXG5cdFx0UENUX0VOQ09ERUQkID0gc3ViZXhwKHN1YmV4cChcIiVbRUZlZl1cIiArIEhFWERJRyQkICsgXCIlXCIgKyBIRVhESUckJCArIEhFWERJRyQkICsgXCIlXCIgKyBIRVhESUckJCArIEhFWERJRyQkKSArIFwifFwiICsgc3ViZXhwKFwiJVs4OUEtRmEtZl1cIiArIEhFWERJRyQkICsgXCIlXCIgKyBIRVhESUckJCArIEhFWERJRyQkKSArIFwifFwiICsgc3ViZXhwKFwiJVwiICsgSEVYRElHJCQgKyBIRVhESUckJCkpLCAgLy9leHBhbmRlZFxuXHRcdEdFTl9ERUxJTVMkJCA9IFwiW1xcXFw6XFxcXC9cXFxcP1xcXFwjXFxcXFtcXFxcXVxcXFxAXVwiLFxuXHRcdFNVQl9ERUxJTVMkJCA9IFwiW1xcXFwhXFxcXCRcXFxcJlxcXFwnXFxcXChcXFxcKVxcXFwqXFxcXCtcXFxcLFxcXFw7XFxcXD1dXCIsXG5cdFx0UkVTRVJWRUQkJCA9IG1lcmdlKEdFTl9ERUxJTVMkJCwgU1VCX0RFTElNUyQkKSxcblx0XHRVQ1NDSEFSJCQgPSBpc0lSSSA/IFwiW1xcXFx4QTAtXFxcXHUyMDBEXFxcXHUyMDEwLVxcXFx1MjAyOVxcXFx1MjAyRi1cXFxcdUQ3RkZcXFxcdUY5MDAtXFxcXHVGRENGXFxcXHVGREYwLVxcXFx1RkZFRl1cIiA6IFwiW11cIiwgIC8vc3Vic2V0LCBleGNsdWRlcyBiaWRpIGNvbnRyb2wgY2hhcmFjdGVyc1xuXHRcdElQUklWQVRFJCQgPSBpc0lSSSA/IFwiW1xcXFx1RTAwMC1cXFxcdUY4RkZdXCIgOiBcIltdXCIsICAvL3N1YnNldFxuXHRcdFVOUkVTRVJWRUQkJCA9IG1lcmdlKEFMUEhBJCQsIERJR0lUJCQsIFwiW1xcXFwtXFxcXC5cXFxcX1xcXFx+XVwiLCBVQ1NDSEFSJCQpLFxuXHRcdFNDSEVNRSQgPSBzdWJleHAoQUxQSEEkJCArIG1lcmdlKEFMUEhBJCQsIERJR0lUJCQsIFwiW1xcXFwrXFxcXC1cXFxcLl1cIikgKyBcIipcIiksXG5cdFx0VVNFUklORk8kID0gc3ViZXhwKHN1YmV4cChQQ1RfRU5DT0RFRCQgKyBcInxcIiArIG1lcmdlKFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkLCBcIltcXFxcOl1cIikpICsgXCIqXCIpLFxuXHRcdERFQ19PQ1RFVCQgPSBzdWJleHAoc3ViZXhwKFwiMjVbMC01XVwiKSArIFwifFwiICsgc3ViZXhwKFwiMlswLTRdXCIgKyBESUdJVCQkKSArIFwifFwiICsgc3ViZXhwKFwiMVwiICsgRElHSVQkJCArIERJR0lUJCQpICsgXCJ8XCIgKyBzdWJleHAoXCJbMS05XVwiICsgRElHSVQkJCkgKyBcInxcIiArIERJR0lUJCQpLFxuXHRcdERFQ19PQ1RFVF9SRUxBWEVEJCA9IHN1YmV4cChzdWJleHAoXCIyNVswLTVdXCIpICsgXCJ8XCIgKyBzdWJleHAoXCIyWzAtNF1cIiArIERJR0lUJCQpICsgXCJ8XCIgKyBzdWJleHAoXCIxXCIgKyBESUdJVCQkICsgRElHSVQkJCkgKyBcInxcIiArIHN1YmV4cChcIjA/WzEtOV1cIiArIERJR0lUJCQpICsgXCJ8MD8wP1wiICsgRElHSVQkJCksICAvL3JlbGF4ZWQgcGFyc2luZyBydWxlc1xuXHRcdElQVjRBRERSRVNTJCA9IHN1YmV4cChERUNfT0NURVRfUkVMQVhFRCQgKyBcIlxcXFwuXCIgKyBERUNfT0NURVRfUkVMQVhFRCQgKyBcIlxcXFwuXCIgKyBERUNfT0NURVRfUkVMQVhFRCQgKyBcIlxcXFwuXCIgKyBERUNfT0NURVRfUkVMQVhFRCQpLFxuXHRcdEgxNiQgPSBzdWJleHAoSEVYRElHJCQgKyBcInsxLDR9XCIpLFxuXHRcdExTMzIkID0gc3ViZXhwKHN1YmV4cChIMTYkICsgXCJcXFxcOlwiICsgSDE2JCkgKyBcInxcIiArIElQVjRBRERSRVNTJCksXG5cdFx0SVBWNkFERFJFU1MxJCA9IHN1YmV4cCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJleHAoSDE2JCArIFwiXFxcXDpcIikgKyBcIns2fVwiICsgTFMzMiQpLCAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIDYoIGgxNiBcIjpcIiApIGxzMzJcblx0XHRJUFY2QUREUkVTUzIkID0gc3ViZXhwKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcXFw6XFxcXDpcIiArIHN1YmV4cChIMTYkICsgXCJcXFxcOlwiKSArIFwiezV9XCIgKyBMUzMyJCksIC8vICAgICAgICAgICAgICAgICAgICAgIFwiOjpcIiA1KCBoMTYgXCI6XCIgKSBsczMyXG5cdFx0SVBWNkFERFJFU1MzJCA9IHN1YmV4cChzdWJleHAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSDE2JCkgKyBcIj9cXFxcOlxcXFw6XCIgKyBzdWJleHAoSDE2JCArIFwiXFxcXDpcIikgKyBcIns0fVwiICsgTFMzMiQpLCAvL1sgICAgICAgICAgICAgICBoMTYgXSBcIjo6XCIgNCggaDE2IFwiOlwiICkgbHMzMlxuXHRcdElQVjZBRERSRVNTNCQgPSBzdWJleHAoc3ViZXhwKHN1YmV4cChIMTYkICsgXCJcXFxcOlwiKSArIFwiezAsMX1cIiArIEgxNiQpICsgXCI/XFxcXDpcXFxcOlwiICsgc3ViZXhwKEgxNiQgKyBcIlxcXFw6XCIpICsgXCJ7M31cIiArIExTMzIkKSwgLy9bICoxKCBoMTYgXCI6XCIgKSBoMTYgXSBcIjo6XCIgMyggaDE2IFwiOlwiICkgbHMzMlxuXHRcdElQVjZBRERSRVNTNSQgPSBzdWJleHAoc3ViZXhwKHN1YmV4cChIMTYkICsgXCJcXFxcOlwiKSArIFwiezAsMn1cIiArIEgxNiQpICsgXCI/XFxcXDpcXFxcOlwiICsgc3ViZXhwKEgxNiQgKyBcIlxcXFw6XCIpICsgXCJ7Mn1cIiArIExTMzIkKSwgLy9bICoyKCBoMTYgXCI6XCIgKSBoMTYgXSBcIjo6XCIgMiggaDE2IFwiOlwiICkgbHMzMlxuXHRcdElQVjZBRERSRVNTNiQgPSBzdWJleHAoc3ViZXhwKHN1YmV4cChIMTYkICsgXCJcXFxcOlwiKSArIFwiezAsM31cIiArIEgxNiQpICsgXCI/XFxcXDpcXFxcOlwiICsgICAgICAgIEgxNiQgKyBcIlxcXFw6XCIgICAgICAgICAgKyBMUzMyJCksIC8vWyAqMyggaDE2IFwiOlwiICkgaDE2IF0gXCI6OlwiICAgIGgxNiBcIjpcIiAgIGxzMzJcblx0XHRJUFY2QUREUkVTUzckID0gc3ViZXhwKHN1YmV4cChzdWJleHAoSDE2JCArIFwiXFxcXDpcIikgKyBcInswLDR9XCIgKyBIMTYkKSArIFwiP1xcXFw6XFxcXDpcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBMUzMyJCksIC8vWyAqNCggaDE2IFwiOlwiICkgaDE2IF0gXCI6OlwiICAgICAgICAgICAgICBsczMyXG5cdFx0SVBWNkFERFJFU1M4JCA9IHN1YmV4cChzdWJleHAoc3ViZXhwKEgxNiQgKyBcIlxcXFw6XCIpICsgXCJ7MCw1fVwiICsgSDE2JCkgKyBcIj9cXFxcOlxcXFw6XCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgSDE2JCApLCAvL1sgKjUoIGgxNiBcIjpcIiApIGgxNiBdIFwiOjpcIiAgICAgICAgICAgICAgaDE2XG5cdFx0SVBWNkFERFJFU1M5JCA9IHN1YmV4cChzdWJleHAoc3ViZXhwKEgxNiQgKyBcIlxcXFw6XCIpICsgXCJ7MCw2fVwiICsgSDE2JCkgKyBcIj9cXFxcOlxcXFw6XCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLCAvL1sgKjYoIGgxNiBcIjpcIiApIGgxNiBdIFwiOjpcIlxuXHRcdElQVjZBRERSRVNTJCA9IHN1YmV4cChbSVBWNkFERFJFU1MxJCwgSVBWNkFERFJFU1MyJCwgSVBWNkFERFJFU1MzJCwgSVBWNkFERFJFU1M0JCwgSVBWNkFERFJFU1M1JCwgSVBWNkFERFJFU1M2JCwgSVBWNkFERFJFU1M3JCwgSVBWNkFERFJFU1M4JCwgSVBWNkFERFJFU1M5JF0uam9pbihcInxcIikpLFxuXHRcdFpPTkVJRCQgPSBzdWJleHAoc3ViZXhwKFVOUkVTRVJWRUQkJCArIFwifFwiICsgUENUX0VOQ09ERUQkKSArIFwiK1wiKSwgIC8vUkZDIDY4NzRcblx0XHRJUFY2QUREUlokID0gc3ViZXhwKElQVjZBRERSRVNTJCArIFwiXFxcXCUyNVwiICsgWk9ORUlEJCksICAvL1JGQyA2ODc0XG5cdFx0SVBWNkFERFJaX1JFTEFYRUQkID0gc3ViZXhwKElQVjZBRERSRVNTJCArIHN1YmV4cChcIlxcXFwlMjV8XFxcXCUoPyFcIiArIEhFWERJRyQkICsgXCJ7Mn0pXCIpICsgWk9ORUlEJCksICAvL1JGQyA2ODc0LCB3aXRoIHJlbGF4ZWQgcGFyc2luZyBydWxlc1xuXHRcdElQVkZVVFVSRSQgPSBzdWJleHAoXCJbdlZdXCIgKyBIRVhESUckJCArIFwiK1xcXFwuXCIgKyBtZXJnZShVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCwgXCJbXFxcXDpdXCIpICsgXCIrXCIpLFxuXHRcdElQX0xJVEVSQUwkID0gc3ViZXhwKFwiXFxcXFtcIiArIHN1YmV4cChJUFY2QUREUlpfUkVMQVhFRCQgKyBcInxcIiArIElQVjZBRERSRVNTJCArIFwifFwiICsgSVBWRlVUVVJFJCkgKyBcIlxcXFxdXCIpLCAgLy9SRkMgNjg3NFxuXHRcdFJFR19OQU1FJCA9IHN1YmV4cChzdWJleHAoUENUX0VOQ09ERUQkICsgXCJ8XCIgKyBtZXJnZShVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCkpICsgXCIqXCIpLFxuXHRcdEhPU1QkID0gc3ViZXhwKElQX0xJVEVSQUwkICsgXCJ8XCIgKyBJUFY0QUREUkVTUyQgKyBcIig/IVwiICsgUkVHX05BTUUkICsgXCIpXCIgKyBcInxcIiArIFJFR19OQU1FJCksXG5cdFx0UE9SVCQgPSBzdWJleHAoRElHSVQkJCArIFwiKlwiKSxcblx0XHRBVVRIT1JJVFkkID0gc3ViZXhwKHN1YmV4cChVU0VSSU5GTyQgKyBcIkBcIikgKyBcIj9cIiArIEhPU1QkICsgc3ViZXhwKFwiXFxcXDpcIiArIFBPUlQkKSArIFwiP1wiKSxcblx0XHRQQ0hBUiQgPSBzdWJleHAoUENUX0VOQ09ERUQkICsgXCJ8XCIgKyBtZXJnZShVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCwgXCJbXFxcXDpcXFxcQF1cIikpLFxuXHRcdFNFR01FTlQkID0gc3ViZXhwKFBDSEFSJCArIFwiKlwiKSxcblx0XHRTRUdNRU5UX05aJCA9IHN1YmV4cChQQ0hBUiQgKyBcIitcIiksXG5cdFx0U0VHTUVOVF9OWl9OQyQgPSBzdWJleHAoc3ViZXhwKFBDVF9FTkNPREVEJCArIFwifFwiICsgbWVyZ2UoVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQsIFwiW1xcXFxAXVwiKSkgKyBcIitcIiksXG5cdFx0UEFUSF9BQkVNUFRZJCA9IHN1YmV4cChzdWJleHAoXCJcXFxcL1wiICsgU0VHTUVOVCQpICsgXCIqXCIpLFxuXHRcdFBBVEhfQUJTT0xVVEUkID0gc3ViZXhwKFwiXFxcXC9cIiArIHN1YmV4cChTRUdNRU5UX05aJCArIFBBVEhfQUJFTVBUWSQpICsgXCI/XCIpLCAgLy9zaW1wbGlmaWVkXG5cdFx0UEFUSF9OT1NDSEVNRSQgPSBzdWJleHAoU0VHTUVOVF9OWl9OQyQgKyBQQVRIX0FCRU1QVFkkKSwgIC8vc2ltcGxpZmllZFxuXHRcdFBBVEhfUk9PVExFU1MkID0gc3ViZXhwKFNFR01FTlRfTlokICsgUEFUSF9BQkVNUFRZJCksICAvL3NpbXBsaWZpZWRcblx0XHRQQVRIX0VNUFRZJCA9IFwiKD8hXCIgKyBQQ0hBUiQgKyBcIilcIixcblx0XHRQQVRIJCA9IHN1YmV4cChQQVRIX0FCRU1QVFkkICsgXCJ8XCIgKyBQQVRIX0FCU09MVVRFJCArIFwifFwiICsgUEFUSF9OT1NDSEVNRSQgKyBcInxcIiArIFBBVEhfUk9PVExFU1MkICsgXCJ8XCIgKyBQQVRIX0VNUFRZJCksXG5cdFx0UVVFUlkkID0gc3ViZXhwKHN1YmV4cChQQ0hBUiQgKyBcInxcIiArIG1lcmdlKFwiW1xcXFwvXFxcXD9dXCIsIElQUklWQVRFJCQpKSArIFwiKlwiKSxcblx0XHRGUkFHTUVOVCQgPSBzdWJleHAoc3ViZXhwKFBDSEFSJCArIFwifFtcXFxcL1xcXFw/XVwiKSArIFwiKlwiKSxcblx0XHRISUVSX1BBUlQkID0gc3ViZXhwKHN1YmV4cChcIlxcXFwvXFxcXC9cIiArIEFVVEhPUklUWSQgKyBQQVRIX0FCRU1QVFkkKSArIFwifFwiICsgUEFUSF9BQlNPTFVURSQgKyBcInxcIiArIFBBVEhfUk9PVExFU1MkICsgXCJ8XCIgKyBQQVRIX0VNUFRZJCksXG5cdFx0VVJJJCA9IHN1YmV4cChTQ0hFTUUkICsgXCJcXFxcOlwiICsgSElFUl9QQVJUJCArIHN1YmV4cChcIlxcXFw/XCIgKyBRVUVSWSQpICsgXCI/XCIgKyBzdWJleHAoXCJcXFxcI1wiICsgRlJBR01FTlQkKSArIFwiP1wiKSxcblx0XHRSRUxBVElWRV9QQVJUJCA9IHN1YmV4cChzdWJleHAoXCJcXFxcL1xcXFwvXCIgKyBBVVRIT1JJVFkkICsgUEFUSF9BQkVNUFRZJCkgKyBcInxcIiArIFBBVEhfQUJTT0xVVEUkICsgXCJ8XCIgKyBQQVRIX05PU0NIRU1FJCArIFwifFwiICsgUEFUSF9FTVBUWSQpLFxuXHRcdFJFTEFUSVZFJCA9IHN1YmV4cChSRUxBVElWRV9QQVJUJCArIHN1YmV4cChcIlxcXFw/XCIgKyBRVUVSWSQpICsgXCI/XCIgKyBzdWJleHAoXCJcXFxcI1wiICsgRlJBR01FTlQkKSArIFwiP1wiKSxcblx0XHRVUklfUkVGRVJFTkNFJCA9IHN1YmV4cChVUkkkICsgXCJ8XCIgKyBSRUxBVElWRSQpLFxuXHRcdEFCU09MVVRFX1VSSSQgPSBzdWJleHAoU0NIRU1FJCArIFwiXFxcXDpcIiArIEhJRVJfUEFSVCQgKyBzdWJleHAoXCJcXFxcP1wiICsgUVVFUlkkKSArIFwiP1wiKSxcblxuXHRcdEdFTkVSSUNfUkVGJCA9IFwiXihcIiArIFNDSEVNRSQgKyBcIilcXFxcOlwiICsgc3ViZXhwKHN1YmV4cChcIlxcXFwvXFxcXC8oXCIgKyBzdWJleHAoXCIoXCIgKyBVU0VSSU5GTyQgKyBcIilAXCIpICsgXCI/KFwiICsgSE9TVCQgKyBcIilcIiArIHN1YmV4cChcIlxcXFw6KFwiICsgUE9SVCQgKyBcIilcIikgKyBcIj8pXCIpICsgXCI/KFwiICsgUEFUSF9BQkVNUFRZJCArIFwifFwiICsgUEFUSF9BQlNPTFVURSQgKyBcInxcIiArIFBBVEhfUk9PVExFU1MkICsgXCJ8XCIgKyBQQVRIX0VNUFRZJCArIFwiKVwiKSArIHN1YmV4cChcIlxcXFw/KFwiICsgUVVFUlkkICsgXCIpXCIpICsgXCI/XCIgKyBzdWJleHAoXCJcXFxcIyhcIiArIEZSQUdNRU5UJCArIFwiKVwiKSArIFwiPyRcIixcblx0XHRSRUxBVElWRV9SRUYkID0gXCJeKCl7MH1cIiArIHN1YmV4cChzdWJleHAoXCJcXFxcL1xcXFwvKFwiICsgc3ViZXhwKFwiKFwiICsgVVNFUklORk8kICsgXCIpQFwiKSArIFwiPyhcIiArIEhPU1QkICsgXCIpXCIgKyBzdWJleHAoXCJcXFxcOihcIiArIFBPUlQkICsgXCIpXCIpICsgXCI/KVwiKSArIFwiPyhcIiArIFBBVEhfQUJFTVBUWSQgKyBcInxcIiArIFBBVEhfQUJTT0xVVEUkICsgXCJ8XCIgKyBQQVRIX05PU0NIRU1FJCArIFwifFwiICsgUEFUSF9FTVBUWSQgKyBcIilcIikgKyBzdWJleHAoXCJcXFxcPyhcIiArIFFVRVJZJCArIFwiKVwiKSArIFwiP1wiICsgc3ViZXhwKFwiXFxcXCMoXCIgKyBGUkFHTUVOVCQgKyBcIilcIikgKyBcIj8kXCIsXG5cdFx0QUJTT0xVVEVfUkVGJCA9IFwiXihcIiArIFNDSEVNRSQgKyBcIilcXFxcOlwiICsgc3ViZXhwKHN1YmV4cChcIlxcXFwvXFxcXC8oXCIgKyBzdWJleHAoXCIoXCIgKyBVU0VSSU5GTyQgKyBcIilAXCIpICsgXCI/KFwiICsgSE9TVCQgKyBcIilcIiArIHN1YmV4cChcIlxcXFw6KFwiICsgUE9SVCQgKyBcIilcIikgKyBcIj8pXCIpICsgXCI/KFwiICsgUEFUSF9BQkVNUFRZJCArIFwifFwiICsgUEFUSF9BQlNPTFVURSQgKyBcInxcIiArIFBBVEhfUk9PVExFU1MkICsgXCJ8XCIgKyBQQVRIX0VNUFRZJCArIFwiKVwiKSArIHN1YmV4cChcIlxcXFw/KFwiICsgUVVFUlkkICsgXCIpXCIpICsgXCI/JFwiLFxuXHRcdFNBTUVET0NfUkVGJCA9IFwiXlwiICsgc3ViZXhwKFwiXFxcXCMoXCIgKyBGUkFHTUVOVCQgKyBcIilcIikgKyBcIj8kXCIsXG5cdFx0QVVUSE9SSVRZX1JFRiQgPSBcIl5cIiArIHN1YmV4cChcIihcIiArIFVTRVJJTkZPJCArIFwiKUBcIikgKyBcIj8oXCIgKyBIT1NUJCArIFwiKVwiICsgc3ViZXhwKFwiXFxcXDooXCIgKyBQT1JUJCArIFwiKVwiKSArIFwiPyRcIlxuXHQ7XG5cblx0cmV0dXJuIHtcblx0XHROT1RfU0NIRU1FIDogbmV3IFJlZ0V4cChtZXJnZShcIlteXVwiLCBBTFBIQSQkLCBESUdJVCQkLCBcIltcXFxcK1xcXFwtXFxcXC5dXCIpLCBcImdcIiksXG5cdFx0Tk9UX1VTRVJJTkZPIDogbmV3IFJlZ0V4cChtZXJnZShcIlteXFxcXCVcXFxcOl1cIiwgVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQpLCBcImdcIiksXG5cdFx0Tk9UX0hPU1QgOiBuZXcgUmVnRXhwKG1lcmdlKFwiW15cXFxcJVxcXFxbXFxcXF1cXFxcOl1cIiwgVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQpLCBcImdcIiksXG5cdFx0Tk9UX1BBVEggOiBuZXcgUmVnRXhwKG1lcmdlKFwiW15cXFxcJVxcXFwvXFxcXDpcXFxcQF1cIiwgVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQpLCBcImdcIiksXG5cdFx0Tk9UX1BBVEhfTk9TQ0hFTUUgOiBuZXcgUmVnRXhwKG1lcmdlKFwiW15cXFxcJVxcXFwvXFxcXEBdXCIsIFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkKSwgXCJnXCIpLFxuXHRcdE5PVF9RVUVSWSA6IG5ldyBSZWdFeHAobWVyZ2UoXCJbXlxcXFwlXVwiLCBVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCwgXCJbXFxcXDpcXFxcQFxcXFwvXFxcXD9dXCIsIElQUklWQVRFJCQpLCBcImdcIiksXG5cdFx0Tk9UX0ZSQUdNRU5UIDogbmV3IFJlZ0V4cChtZXJnZShcIlteXFxcXCVdXCIsIFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkLCBcIltcXFxcOlxcXFxAXFxcXC9cXFxcP11cIiksIFwiZ1wiKSxcblx0XHRFU0NBUEUgOiBuZXcgUmVnRXhwKG1lcmdlKFwiW15dXCIsIFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkKSwgXCJnXCIpLFxuXHRcdFVOUkVTRVJWRUQgOiBuZXcgUmVnRXhwKFVOUkVTRVJWRUQkJCwgXCJnXCIpLFxuXHRcdE9USEVSX0NIQVJTIDogbmV3IFJlZ0V4cChtZXJnZShcIlteXFxcXCVdXCIsIFVOUkVTRVJWRUQkJCwgUkVTRVJWRUQkJCksIFwiZ1wiKSxcblx0XHRQQ1RfRU5DT0RFRCA6IG5ldyBSZWdFeHAoUENUX0VOQ09ERUQkLCBcImdcIiksXG5cdFx0SVBWNEFERFJFU1MgOiBuZXcgUmVnRXhwKFwiXihcIiArIElQVjRBRERSRVNTJCArIFwiKSRcIiksXG5cdFx0SVBWNkFERFJFU1MgOiBuZXcgUmVnRXhwKFwiXlxcXFxbPyhcIiArIElQVjZBRERSRVNTJCArIFwiKVwiICsgc3ViZXhwKHN1YmV4cChcIlxcXFwlMjV8XFxcXCUoPyFcIiArIEhFWERJRyQkICsgXCJ7Mn0pXCIpICsgXCIoXCIgKyBaT05FSUQkICsgXCIpXCIpICsgXCI/XFxcXF0/JFwiKSAgLy9SRkMgNjg3NCwgd2l0aCByZWxheGVkIHBhcnNpbmcgcnVsZXNcblx0fTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYnVpbGRFeHBzKGZhbHNlKTtcbiIsImltcG9ydCB7IFVSSVJlZ0V4cHMgfSBmcm9tIFwiLi91cmlcIjtcbmltcG9ydCB7IGJ1aWxkRXhwcyB9IGZyb20gXCIuL3JlZ2V4cHMtdXJpXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGJ1aWxkRXhwcyh0cnVlKTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqIEhpZ2hlc3QgcG9zaXRpdmUgc2lnbmVkIDMyLWJpdCBmbG9hdCB2YWx1ZSAqL1xuY29uc3QgbWF4SW50ID0gMjE0NzQ4MzY0NzsgLy8gYWthLiAweDdGRkZGRkZGIG9yIDJeMzEtMVxuXG4vKiogQm9vdHN0cmluZyBwYXJhbWV0ZXJzICovXG5jb25zdCBiYXNlID0gMzY7XG5jb25zdCB0TWluID0gMTtcbmNvbnN0IHRNYXggPSAyNjtcbmNvbnN0IHNrZXcgPSAzODtcbmNvbnN0IGRhbXAgPSA3MDA7XG5jb25zdCBpbml0aWFsQmlhcyA9IDcyO1xuY29uc3QgaW5pdGlhbE4gPSAxMjg7IC8vIDB4ODBcbmNvbnN0IGRlbGltaXRlciA9ICctJzsgLy8gJ1xceDJEJ1xuXG4vKiogUmVndWxhciBleHByZXNzaW9ucyAqL1xuY29uc3QgcmVnZXhQdW55Y29kZSA9IC9eeG4tLS87XG5jb25zdCByZWdleE5vbkFTQ0lJID0gL1teXFwwLVxceDdFXS87IC8vIG5vbi1BU0NJSSBjaGFyc1xuY29uc3QgcmVnZXhTZXBhcmF0b3JzID0gL1tcXHgyRVxcdTMwMDJcXHVGRjBFXFx1RkY2MV0vZzsgLy8gUkZDIDM0OTAgc2VwYXJhdG9yc1xuXG4vKiogRXJyb3IgbWVzc2FnZXMgKi9cbmNvbnN0IGVycm9ycyA9IHtcblx0J292ZXJmbG93JzogJ092ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzJyxcblx0J25vdC1iYXNpYyc6ICdJbGxlZ2FsIGlucHV0ID49IDB4ODAgKG5vdCBhIGJhc2ljIGNvZGUgcG9pbnQpJyxcblx0J2ludmFsaWQtaW5wdXQnOiAnSW52YWxpZCBpbnB1dCdcbn07XG5cbi8qKiBDb252ZW5pZW5jZSBzaG9ydGN1dHMgKi9cbmNvbnN0IGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbjtcbmNvbnN0IGZsb29yID0gTWF0aC5mbG9vcjtcbmNvbnN0IHN0cmluZ0Zyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKipcbiAqIEEgZ2VuZXJpYyBlcnJvciB1dGlsaXR5IGZ1bmN0aW9uLlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSBlcnJvciB0eXBlLlxuICogQHJldHVybnMge0Vycm9yfSBUaHJvd3MgYSBgUmFuZ2VFcnJvcmAgd2l0aCB0aGUgYXBwbGljYWJsZSBlcnJvciBtZXNzYWdlLlxuICovXG5mdW5jdGlvbiBlcnJvcih0eXBlKSB7XG5cdHRocm93IG5ldyBSYW5nZUVycm9yKGVycm9yc1t0eXBlXSk7XG59XG5cbi8qKlxuICogQSBnZW5lcmljIGBBcnJheSNtYXBgIHV0aWxpdHkgZnVuY3Rpb24uXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIGZvciBldmVyeSBhcnJheVxuICogaXRlbS5cbiAqIEByZXR1cm5zIHtBcnJheX0gQSBuZXcgYXJyYXkgb2YgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gbWFwKGFycmF5LCBmbikge1xuXHRjb25zdCByZXN1bHQgPSBbXTtcblx0bGV0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblx0d2hpbGUgKGxlbmd0aC0tKSB7XG5cdFx0cmVzdWx0W2xlbmd0aF0gPSBmbihhcnJheVtsZW5ndGhdKTtcblx0fVxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEEgc2ltcGxlIGBBcnJheSNtYXBgLWxpa2Ugd3JhcHBlciB0byB3b3JrIHdpdGggZG9tYWluIG5hbWUgc3RyaW5ncyBvciBlbWFpbFxuICogYWRkcmVzc2VzLlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBkb21haW4gVGhlIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnlcbiAqIGNoYXJhY3Rlci5cbiAqIEByZXR1cm5zIHtBcnJheX0gQSBuZXcgc3RyaW5nIG9mIGNoYXJhY3RlcnMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrXG4gKiBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gbWFwRG9tYWluKHN0cmluZywgZm4pIHtcblx0Y29uc3QgcGFydHMgPSBzdHJpbmcuc3BsaXQoJ0AnKTtcblx0bGV0IHJlc3VsdCA9ICcnO1xuXHRpZiAocGFydHMubGVuZ3RoID4gMSkge1xuXHRcdC8vIEluIGVtYWlsIGFkZHJlc3Nlcywgb25seSB0aGUgZG9tYWluIG5hbWUgc2hvdWxkIGJlIHB1bnljb2RlZC4gTGVhdmVcblx0XHQvLyB0aGUgbG9jYWwgcGFydCAoaS5lLiBldmVyeXRoaW5nIHVwIHRvIGBAYCkgaW50YWN0LlxuXHRcdHJlc3VsdCA9IHBhcnRzWzBdICsgJ0AnO1xuXHRcdHN0cmluZyA9IHBhcnRzWzFdO1xuXHR9XG5cdC8vIEF2b2lkIGBzcGxpdChyZWdleClgIGZvciBJRTggY29tcGF0aWJpbGl0eS4gU2VlICMxNy5cblx0c3RyaW5nID0gc3RyaW5nLnJlcGxhY2UocmVnZXhTZXBhcmF0b3JzLCAnXFx4MkUnKTtcblx0Y29uc3QgbGFiZWxzID0gc3RyaW5nLnNwbGl0KCcuJyk7XG5cdGNvbnN0IGVuY29kZWQgPSBtYXAobGFiZWxzLCBmbikuam9pbignLicpO1xuXHRyZXR1cm4gcmVzdWx0ICsgZW5jb2RlZDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG4gKiBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4gV2hpbGUgSmF2YVNjcmlwdCB1c2VzIFVDUy0yIGludGVybmFsbHksXG4gKiB0aGlzIGZ1bmN0aW9uIHdpbGwgY29udmVydCBhIHBhaXIgb2Ygc3Vycm9nYXRlIGhhbHZlcyAoZWFjaCBvZiB3aGljaFxuICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG4gKiBtYXRjaGluZyBVVEYtMTYuXG4gKiBAc2VlIGBwdW55Y29kZS51Y3MyLmVuY29kZWBcbiAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuICogQG1lbWJlck9mIHB1bnljb2RlLnVjczJcbiAqIEBuYW1lIGRlY29kZVxuICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cbiAqIEByZXR1cm5zIHtBcnJheX0gVGhlIG5ldyBhcnJheSBvZiBjb2RlIHBvaW50cy5cbiAqL1xuZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcblx0Y29uc3Qgb3V0cHV0ID0gW107XG5cdGxldCBjb3VudGVyID0gMDtcblx0Y29uc3QgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcblx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRjb25zdCB2YWx1ZSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0aWYgKHZhbHVlID49IDB4RDgwMCAmJiB2YWx1ZSA8PSAweERCRkYgJiYgY291bnRlciA8IGxlbmd0aCkge1xuXHRcdFx0Ly8gSXQncyBhIGhpZ2ggc3Vycm9nYXRlLCBhbmQgdGhlcmUgaXMgYSBuZXh0IGNoYXJhY3Rlci5cblx0XHRcdGNvbnN0IGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICgoZXh0cmEgJiAweEZDMDApID09IDB4REMwMCkgeyAvLyBMb3cgc3Vycm9nYXRlLlxuXHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gSXQncyBhbiB1bm1hdGNoZWQgc3Vycm9nYXRlOyBvbmx5IGFwcGVuZCB0aGlzIGNvZGUgdW5pdCwgaW4gY2FzZSB0aGVcblx0XHRcdFx0Ly8gbmV4dCBjb2RlIHVuaXQgaXMgdGhlIGhpZ2ggc3Vycm9nYXRlIG9mIGEgc3Vycm9nYXRlIHBhaXIuXG5cdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdFx0Y291bnRlci0tO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRvdXRwdXQucHVzaCh2YWx1ZSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvdXRwdXQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0cmluZyBiYXNlZCBvbiBhbiBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG4gKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuICogQG5hbWUgZW5jb2RlXG4gKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuICogQHJldHVybnMge1N0cmluZ30gVGhlIG5ldyBVbmljb2RlIHN0cmluZyAoVUNTLTIpLlxuICovXG5jb25zdCB1Y3MyZW5jb2RlID0gYXJyYXkgPT4gU3RyaW5nLmZyb21Db2RlUG9pbnQoLi4uYXJyYXkpO1xuXG4vKipcbiAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cbiAqIEBzZWUgYGRpZ2l0VG9CYXNpYygpYFxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cbiAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludCAoZm9yIHVzZSBpblxuICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpbiB0aGUgcmFuZ2UgYDBgIHRvIGBiYXNlIC0gMWAsIG9yIGBiYXNlYCBpZlxuICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXG4gKi9cbmNvbnN0IGJhc2ljVG9EaWdpdCA9IGZ1bmN0aW9uKGNvZGVQb2ludCkge1xuXHRpZiAoY29kZVBvaW50IC0gMHgzMCA8IDB4MEEpIHtcblx0XHRyZXR1cm4gY29kZVBvaW50IC0gMHgxNjtcblx0fVxuXHRpZiAoY29kZVBvaW50IC0gMHg0MSA8IDB4MUEpIHtcblx0XHRyZXR1cm4gY29kZVBvaW50IC0gMHg0MTtcblx0fVxuXHRpZiAoY29kZVBvaW50IC0gMHg2MSA8IDB4MUEpIHtcblx0XHRyZXR1cm4gY29kZVBvaW50IC0gMHg2MTtcblx0fVxuXHRyZXR1cm4gYmFzZTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuICogQHNlZSBgYmFzaWNUb0RpZ2l0KClgXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtOdW1iZXJ9IGRpZ2l0IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludC5cbiAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBiYXNpYyBjb2RlIHBvaW50IHdob3NlIHZhbHVlICh3aGVuIHVzZWQgZm9yXG4gKiByZXByZXNlbnRpbmcgaW50ZWdlcnMpIGlzIGBkaWdpdGAsIHdoaWNoIG5lZWRzIHRvIGJlIGluIHRoZSByYW5nZVxuICogYDBgIHRvIGBiYXNlIC0gMWAuIElmIGBmbGFnYCBpcyBub24temVybywgdGhlIHVwcGVyY2FzZSBmb3JtIGlzXG4gKiB1c2VkOyBlbHNlLCB0aGUgbG93ZXJjYXNlIGZvcm0gaXMgdXNlZC4gVGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZFxuICogaWYgYGZsYWdgIGlzIG5vbi16ZXJvIGFuZCBgZGlnaXRgIGhhcyBubyB1cHBlcmNhc2UgZm9ybS5cbiAqL1xuY29uc3QgZGlnaXRUb0Jhc2ljID0gZnVuY3Rpb24oZGlnaXQsIGZsYWcpIHtcblx0Ly8gIDAuLjI1IG1hcCB0byBBU0NJSSBhLi56IG9yIEEuLlpcblx0Ly8gMjYuLjM1IG1hcCB0byBBU0NJSSAwLi45XG5cdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG59O1xuXG4vKipcbiAqIEJpYXMgYWRhcHRhdGlvbiBmdW5jdGlvbiBhcyBwZXIgc2VjdGlvbiAzLjQgb2YgUkZDIDM0OTIuXG4gKiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzQ5MiNzZWN0aW9uLTMuNFxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgYWRhcHQgPSBmdW5jdGlvbihkZWx0YSwgbnVtUG9pbnRzLCBmaXJzdFRpbWUpIHtcblx0bGV0IGsgPSAwO1xuXHRkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xuXHRkZWx0YSArPSBmbG9vcihkZWx0YSAvIG51bVBvaW50cyk7XG5cdGZvciAoLyogbm8gaW5pdGlhbGl6YXRpb24gKi87IGRlbHRhID4gYmFzZU1pbnVzVE1pbiAqIHRNYXggPj4gMTsgayArPSBiYXNlKSB7XG5cdFx0ZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xuXHR9XG5cdHJldHVybiBmbG9vcihrICsgKGJhc2VNaW51c1RNaW4gKyAxKSAqIGRlbHRhIC8gKGRlbHRhICsgc2tldykpO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMgdG8gYSBzdHJpbmcgb2YgVW5pY29kZVxuICogc3ltYm9scy5cbiAqIEBtZW1iZXJPZiBwdW55Y29kZVxuICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzLlxuICovXG5jb25zdCBkZWNvZGUgPSBmdW5jdGlvbihpbnB1dCkge1xuXHQvLyBEb24ndCB1c2UgVUNTLTIuXG5cdGNvbnN0IG91dHB1dCA9IFtdO1xuXHRjb25zdCBpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aDtcblx0bGV0IGkgPSAwO1xuXHRsZXQgbiA9IGluaXRpYWxOO1xuXHRsZXQgYmlhcyA9IGluaXRpYWxCaWFzO1xuXG5cdC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHM6IGxldCBgYmFzaWNgIGJlIHRoZSBudW1iZXIgb2YgaW5wdXQgY29kZVxuXHQvLyBwb2ludHMgYmVmb3JlIHRoZSBsYXN0IGRlbGltaXRlciwgb3IgYDBgIGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gY29weVxuXHQvLyB0aGUgZmlyc3QgYmFzaWMgY29kZSBwb2ludHMgdG8gdGhlIG91dHB1dC5cblxuXHRsZXQgYmFzaWMgPSBpbnB1dC5sYXN0SW5kZXhPZihkZWxpbWl0ZXIpO1xuXHRpZiAoYmFzaWMgPCAwKSB7XG5cdFx0YmFzaWMgPSAwO1xuXHR9XG5cblx0Zm9yIChsZXQgaiA9IDA7IGogPCBiYXNpYzsgKytqKSB7XG5cdFx0Ly8gaWYgaXQncyBub3QgYSBiYXNpYyBjb2RlIHBvaW50XG5cdFx0aWYgKGlucHV0LmNoYXJDb2RlQXQoaikgPj0gMHg4MCkge1xuXHRcdFx0ZXJyb3IoJ25vdC1iYXNpYycpO1xuXHRcdH1cblx0XHRvdXRwdXQucHVzaChpbnB1dC5jaGFyQ29kZUF0KGopKTtcblx0fVxuXG5cdC8vIE1haW4gZGVjb2RpbmcgbG9vcDogc3RhcnQganVzdCBhZnRlciB0aGUgbGFzdCBkZWxpbWl0ZXIgaWYgYW55IGJhc2ljIGNvZGVcblx0Ly8gcG9pbnRzIHdlcmUgY29waWVkOyBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG90aGVyd2lzZS5cblxuXHRmb3IgKGxldCBpbmRleCA9IGJhc2ljID4gMCA/IGJhc2ljICsgMSA6IDA7IGluZGV4IDwgaW5wdXRMZW5ndGg7IC8qIG5vIGZpbmFsIGV4cHJlc3Npb24gKi8pIHtcblxuXHRcdC8vIGBpbmRleGAgaXMgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSBjb25zdW1lZC5cblx0XHQvLyBEZWNvZGUgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlciBpbnRvIGBkZWx0YWAsXG5cdFx0Ly8gd2hpY2ggZ2V0cyBhZGRlZCB0byBgaWAuIFRoZSBvdmVyZmxvdyBjaGVja2luZyBpcyBlYXNpZXJcblx0XHQvLyBpZiB3ZSBpbmNyZWFzZSBgaWAgYXMgd2UgZ28sIHRoZW4gc3VidHJhY3Qgb2ZmIGl0cyBzdGFydGluZ1xuXHRcdC8vIHZhbHVlIGF0IHRoZSBlbmQgdG8gb2J0YWluIGBkZWx0YWAuXG5cdFx0bGV0IG9sZGkgPSBpO1xuXHRcdGZvciAobGV0IHcgPSAxLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblxuXHRcdFx0aWYgKGluZGV4ID49IGlucHV0TGVuZ3RoKSB7XG5cdFx0XHRcdGVycm9yKCdpbnZhbGlkLWlucHV0Jyk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGRpZ2l0ID0gYmFzaWNUb0RpZ2l0KGlucHV0LmNoYXJDb2RlQXQoaW5kZXgrKykpO1xuXG5cdFx0XHRpZiAoZGlnaXQgPj0gYmFzZSB8fCBkaWdpdCA+IGZsb29yKChtYXhJbnQgLSBpKSAvIHcpKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRpICs9IGRpZ2l0ICogdztcblx0XHRcdGNvbnN0IHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXG5cdFx0XHRpZiAoZGlnaXQgPCB0KSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRpZiAodyA+IGZsb29yKG1heEludCAvIGJhc2VNaW51c1QpKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHR3ICo9IGJhc2VNaW51c1Q7XG5cblx0XHR9XG5cblx0XHRjb25zdCBvdXQgPSBvdXRwdXQubGVuZ3RoICsgMTtcblx0XHRiaWFzID0gYWRhcHQoaSAtIG9sZGksIG91dCwgb2xkaSA9PSAwKTtcblxuXHRcdC8vIGBpYCB3YXMgc3VwcG9zZWQgdG8gd3JhcCBhcm91bmQgZnJvbSBgb3V0YCB0byBgMGAsXG5cdFx0Ly8gaW5jcmVtZW50aW5nIGBuYCBlYWNoIHRpbWUsIHNvIHdlJ2xsIGZpeCB0aGF0IG5vdzpcblx0XHRpZiAoZmxvb3IoaSAvIG91dCkgPiBtYXhJbnQgLSBuKSB7XG5cdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHR9XG5cblx0XHRuICs9IGZsb29yKGkgLyBvdXQpO1xuXHRcdGkgJT0gb3V0O1xuXG5cdFx0Ly8gSW5zZXJ0IGBuYCBhdCBwb3NpdGlvbiBgaWAgb2YgdGhlIG91dHB1dC5cblx0XHRvdXRwdXQuc3BsaWNlKGkrKywgMCwgbik7XG5cblx0fVxuXG5cdHJldHVybiBTdHJpbmcuZnJvbUNvZGVQb2ludCguLi5vdXRwdXQpO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMgKGUuZy4gYSBkb21haW4gbmFtZSBsYWJlbCkgdG8gYVxuICogUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cbiAqIEBtZW1iZXJPZiBwdW55Y29kZVxuICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzLlxuICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuICovXG5jb25zdCBlbmNvZGUgPSBmdW5jdGlvbihpbnB1dCkge1xuXHRjb25zdCBvdXRwdXQgPSBbXTtcblxuXHQvLyBDb252ZXJ0IHRoZSBpbnB1dCBpbiBVQ1MtMiB0byBhbiBhcnJheSBvZiBVbmljb2RlIGNvZGUgcG9pbnRzLlxuXHRpbnB1dCA9IHVjczJkZWNvZGUoaW5wdXQpO1xuXG5cdC8vIENhY2hlIHRoZSBsZW5ndGguXG5cdGxldCBpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aDtcblxuXHQvLyBJbml0aWFsaXplIHRoZSBzdGF0ZS5cblx0bGV0IG4gPSBpbml0aWFsTjtcblx0bGV0IGRlbHRhID0gMDtcblx0bGV0IGJpYXMgPSBpbml0aWFsQmlhcztcblxuXHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzLlxuXHRmb3IgKGNvbnN0IGN1cnJlbnRWYWx1ZSBvZiBpbnB1dCkge1xuXHRcdGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XG5cdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoY3VycmVudFZhbHVlKSk7XG5cdFx0fVxuXHR9XG5cblx0bGV0IGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcblx0bGV0IGhhbmRsZWRDUENvdW50ID0gYmFzaWNMZW5ndGg7XG5cblx0Ly8gYGhhbmRsZWRDUENvdW50YCBpcyB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIHRoYXQgaGF2ZSBiZWVuIGhhbmRsZWQ7XG5cdC8vIGBiYXNpY0xlbmd0aGAgaXMgdGhlIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cblxuXHQvLyBGaW5pc2ggdGhlIGJhc2ljIHN0cmluZyB3aXRoIGEgZGVsaW1pdGVyIHVubGVzcyBpdCdzIGVtcHR5LlxuXHRpZiAoYmFzaWNMZW5ndGgpIHtcblx0XHRvdXRwdXQucHVzaChkZWxpbWl0ZXIpO1xuXHR9XG5cblx0Ly8gTWFpbiBlbmNvZGluZyBsb29wOlxuXHR3aGlsZSAoaGFuZGxlZENQQ291bnQgPCBpbnB1dExlbmd0aCkge1xuXG5cdFx0Ly8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dFxuXHRcdC8vIGxhcmdlciBvbmU6XG5cdFx0bGV0IG0gPSBtYXhJbnQ7XG5cdFx0Zm9yIChjb25zdCBjdXJyZW50VmFsdWUgb2YgaW5wdXQpIHtcblx0XHRcdGlmIChjdXJyZW50VmFsdWUgPj0gbiAmJiBjdXJyZW50VmFsdWUgPCBtKSB7XG5cdFx0XHRcdG0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LFxuXHRcdC8vIGJ1dCBndWFyZCBhZ2FpbnN0IG92ZXJmbG93LlxuXHRcdGNvbnN0IGhhbmRsZWRDUENvdW50UGx1c09uZSA9IGhhbmRsZWRDUENvdW50ICsgMTtcblx0XHRpZiAobSAtIG4gPiBmbG9vcigobWF4SW50IC0gZGVsdGEpIC8gaGFuZGxlZENQQ291bnRQbHVzT25lKSkge1xuXHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0fVxuXG5cdFx0ZGVsdGEgKz0gKG0gLSBuKSAqIGhhbmRsZWRDUENvdW50UGx1c09uZTtcblx0XHRuID0gbTtcblxuXHRcdGZvciAoY29uc3QgY3VycmVudFZhbHVlIG9mIGlucHV0KSB7XG5cdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgbiAmJiArK2RlbHRhID4gbWF4SW50KSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA9PSBuKSB7XG5cdFx0XHRcdC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyLlxuXHRcdFx0XHRsZXQgcSA9IGRlbHRhO1xuXHRcdFx0XHRmb3IgKGxldCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblx0XHRcdFx0XHRjb25zdCB0ID0gayA8PSBiaWFzID8gdE1pbiA6IChrID49IGJpYXMgKyB0TWF4ID8gdE1heCA6IGsgLSBiaWFzKTtcblx0XHRcdFx0XHRpZiAocSA8IHQpIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBxTWludXNUID0gcSAtIHQ7XG5cdFx0XHRcdFx0Y29uc3QgYmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRcdG91dHB1dC5wdXNoKFxuXHRcdFx0XHRcdFx0c3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QsIDApKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0cSA9IGZsb29yKHFNaW51c1QgLyBiYXNlTWludXNUKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWMocSwgMCkpKTtcblx0XHRcdFx0YmlhcyA9IGFkYXB0KGRlbHRhLCBoYW5kbGVkQ1BDb3VudFBsdXNPbmUsIGhhbmRsZWRDUENvdW50ID09IGJhc2ljTGVuZ3RoKTtcblx0XHRcdFx0ZGVsdGEgPSAwO1xuXHRcdFx0XHQrK2hhbmRsZWRDUENvdW50O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdCsrZGVsdGE7XG5cdFx0KytuO1xuXG5cdH1cblx0cmV0dXJuIG91dHB1dC5qb2luKCcnKTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBQdW55Y29kZSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZG9tYWluIG5hbWUgb3IgYW4gZW1haWwgYWRkcmVzc1xuICogdG8gVW5pY29kZS4gT25seSB0aGUgUHVueWNvZGVkIHBhcnRzIG9mIHRoZSBpbnB1dCB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLlxuICogaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgb24gYSBzdHJpbmcgdGhhdCBoYXMgYWxyZWFkeSBiZWVuXG4gKiBjb252ZXJ0ZWQgdG8gVW5pY29kZS5cbiAqIEBtZW1iZXJPZiBwdW55Y29kZVxuICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZWQgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0b1xuICogY29udmVydCB0byBVbmljb2RlLlxuICogQHJldHVybnMge1N0cmluZ30gVGhlIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFB1bnljb2RlXG4gKiBzdHJpbmcuXG4gKi9cbmNvbnN0IHRvVW5pY29kZSA9IGZ1bmN0aW9uKGlucHV0KSB7XG5cdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdHJldHVybiByZWdleFB1bnljb2RlLnRlc3Qoc3RyaW5nKVxuXHRcdFx0PyBkZWNvZGUoc3RyaW5nLnNsaWNlKDQpLnRvTG93ZXJDYXNlKCkpXG5cdFx0XHQ6IHN0cmluZztcblx0fSk7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgVW5pY29kZSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZG9tYWluIG5hbWUgb3IgYW4gZW1haWwgYWRkcmVzcyB0b1xuICogUHVueWNvZGUuIE9ubHkgdGhlIG5vbi1BU0NJSSBwYXJ0cyBvZiB0aGUgZG9tYWluIG5hbWUgd2lsbCBiZSBjb252ZXJ0ZWQsXG4gKiBpLmUuIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCdzIGFscmVhZHkgaW5cbiAqIEFTQ0lJLlxuICogQG1lbWJlck9mIHB1bnljb2RlXG4gKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MgdG8gY29udmVydCwgYXMgYVxuICogVW5pY29kZSBzdHJpbmcuXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgUHVueWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRvbWFpbiBuYW1lIG9yXG4gKiBlbWFpbCBhZGRyZXNzLlxuICovXG5jb25zdCB0b0FTQ0lJID0gZnVuY3Rpb24oaW5wdXQpIHtcblx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHJlZ2V4Tm9uQVNDSUkudGVzdChzdHJpbmcpXG5cdFx0XHQ/ICd4bi0tJyArIGVuY29kZShzdHJpbmcpXG5cdFx0XHQ6IHN0cmluZztcblx0fSk7XG59O1xuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLyoqIERlZmluZSB0aGUgcHVibGljIEFQSSAqL1xuY29uc3QgcHVueWNvZGUgPSB7XG5cdC8qKlxuXHQgKiBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgUHVueWNvZGUuanMgdmVyc2lvbiBudW1iZXIuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAdHlwZSBTdHJpbmdcblx0ICovXG5cdCd2ZXJzaW9uJzogJzIuMS4wJyxcblx0LyoqXG5cdCAqIEFuIG9iamVjdCBvZiBtZXRob2RzIHRvIGNvbnZlcnQgZnJvbSBKYXZhU2NyaXB0J3MgaW50ZXJuYWwgY2hhcmFjdGVyXG5cdCAqIHJlcHJlc2VudGF0aW9uIChVQ1MtMikgdG8gVW5pY29kZSBjb2RlIHBvaW50cywgYW5kIGJhY2suXG5cdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHR5cGUgT2JqZWN0XG5cdCAqL1xuXHQndWNzMic6IHtcblx0XHQnZGVjb2RlJzogdWNzMmRlY29kZSxcblx0XHQnZW5jb2RlJzogdWNzMmVuY29kZVxuXHR9LFxuXHQnZGVjb2RlJzogZGVjb2RlLFxuXHQnZW5jb2RlJzogZW5jb2RlLFxuXHQndG9BU0NJSSc6IHRvQVNDSUksXG5cdCd0b1VuaWNvZGUnOiB0b1VuaWNvZGVcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHB1bnljb2RlO1xuIiwiLyoqXG4gKiBVUkkuanNcbiAqXG4gKiBAZmlsZW92ZXJ2aWV3IEFuIFJGQyAzOTg2IGNvbXBsaWFudCwgc2NoZW1lIGV4dGVuZGFibGUgVVJJIHBhcnNpbmcvdmFsaWRhdGluZy9yZXNvbHZpbmcgbGlicmFyeSBmb3IgSmF2YVNjcmlwdC5cbiAqIEBhdXRob3IgPGEgaHJlZj1cIm1haWx0bzpnYXJ5LmNvdXJ0QGdtYWlsLmNvbVwiPkdhcnkgQ291cnQ8L2E+XG4gKiBAc2VlIGh0dHA6Ly9naXRodWIuY29tL2dhcnljb3VydC91cmktanNcbiAqL1xuXG4vKipcbiAqIENvcHlyaWdodCAyMDExIEdhcnkgQ291cnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlXG4gKiBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZlxuICogICAgICAgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICpcbiAqICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0XG4gKiAgICAgICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFsc1xuICogICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR0FSWSBDT1VSVCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRURcbiAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkRcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBHQVJZIENPVVJUIE9SXG4gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUlxuICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUlxuICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElOR1xuICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGXG4gKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqXG4gKiBUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24gYXJlIHRob3NlIG9mIHRoZVxuICogYXV0aG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcgb2ZmaWNpYWwgcG9saWNpZXMsIGVpdGhlciBleHByZXNzZWRcbiAqIG9yIGltcGxpZWQsIG9mIEdhcnkgQ291cnQuXG4gKi9cblxuaW1wb3J0IFVSSV9QUk9UT0NPTCBmcm9tIFwiLi9yZWdleHBzLXVyaVwiO1xuaW1wb3J0IElSSV9QUk9UT0NPTCBmcm9tIFwiLi9yZWdleHBzLWlyaVwiO1xuaW1wb3J0IHB1bnljb2RlIGZyb20gXCJwdW55Y29kZVwiO1xuaW1wb3J0IHsgdG9VcHBlckNhc2UsIHR5cGVPZiwgYXNzaWduIH0gZnJvbSBcIi4vdXRpbFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFVSSUNvbXBvbmVudHMge1xuXHRzY2hlbWU/OnN0cmluZztcblx0dXNlcmluZm8/OnN0cmluZztcblx0aG9zdD86c3RyaW5nO1xuXHRwb3J0PzpudW1iZXJ8c3RyaW5nO1xuXHRwYXRoPzpzdHJpbmc7XG5cdHF1ZXJ5PzpzdHJpbmc7XG5cdGZyYWdtZW50PzpzdHJpbmc7XG5cdHJlZmVyZW5jZT86c3RyaW5nO1xuXHRlcnJvcj86c3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVSSU9wdGlvbnMge1xuXHRzY2hlbWU/OnN0cmluZztcblx0cmVmZXJlbmNlPzpzdHJpbmc7XG5cdHRvbGVyYW50Pzpib29sZWFuO1xuXHRhYnNvbHV0ZVBhdGg/OmJvb2xlYW47XG5cdGlyaT86Ym9vbGVhbjtcblx0dW5pY29kZVN1cHBvcnQ/OmJvb2xlYW47XG5cdGRvbWFpbkhvc3Q/OmJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVVJJU2NoZW1lSGFuZGxlcjxDb21wb25lbnRzIGV4dGVuZHMgVVJJQ29tcG9uZW50cyA9IFVSSUNvbXBvbmVudHMsIE9wdGlvbnMgZXh0ZW5kcyBVUklPcHRpb25zID0gVVJJT3B0aW9ucywgUGFyZW50Q29tcG9uZW50cyBleHRlbmRzIFVSSUNvbXBvbmVudHMgPSBVUklDb21wb25lbnRzPiB7XG5cdHNjaGVtZTpzdHJpbmc7XG5cdHBhcnNlKGNvbXBvbmVudHM6UGFyZW50Q29tcG9uZW50cywgb3B0aW9uczpPcHRpb25zKTpDb21wb25lbnRzO1xuXHRzZXJpYWxpemUoY29tcG9uZW50czpDb21wb25lbnRzLCBvcHRpb25zOk9wdGlvbnMpOlBhcmVudENvbXBvbmVudHM7XG5cdHVuaWNvZGVTdXBwb3J0Pzpib29sZWFuO1xuXHRkb21haW5Ib3N0Pzpib29sZWFuO1xuXHRhYnNvbHV0ZVBhdGg/OmJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVVJJUmVnRXhwcyB7XG5cdE5PVF9TQ0hFTUUgOiBSZWdFeHAsXG5cdE5PVF9VU0VSSU5GTyA6IFJlZ0V4cCxcblx0Tk9UX0hPU1QgOiBSZWdFeHAsXG5cdE5PVF9QQVRIIDogUmVnRXhwLFxuXHROT1RfUEFUSF9OT1NDSEVNRSA6IFJlZ0V4cCxcblx0Tk9UX1FVRVJZIDogUmVnRXhwLFxuXHROT1RfRlJBR01FTlQgOiBSZWdFeHAsXG5cdEVTQ0FQRSA6IFJlZ0V4cCxcblx0VU5SRVNFUlZFRCA6IFJlZ0V4cCxcblx0T1RIRVJfQ0hBUlMgOiBSZWdFeHAsXG5cdFBDVF9FTkNPREVEIDogUmVnRXhwLFxuXHRJUFY0QUREUkVTUyA6IFJlZ0V4cCxcblx0SVBWNkFERFJFU1MgOiBSZWdFeHAsXG59XG5cbmV4cG9ydCBjb25zdCBTQ0hFTUVTOntbc2NoZW1lOnN0cmluZ106VVJJU2NoZW1lSGFuZGxlcn0gPSB7fTtcblxuZXhwb3J0IGZ1bmN0aW9uIHBjdEVuY0NoYXIoY2hyOnN0cmluZyk6c3RyaW5nIHtcblx0Y29uc3QgYyA9IGNoci5jaGFyQ29kZUF0KDApO1xuXHRsZXQgZTpzdHJpbmc7XG5cblx0aWYgKGMgPCAxNikgZSA9IFwiJTBcIiArIGMudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG5cdGVsc2UgaWYgKGMgPCAxMjgpIGUgPSBcIiVcIiArIGMudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG5cdGVsc2UgaWYgKGMgPCAyMDQ4KSBlID0gXCIlXCIgKyAoKGMgPj4gNikgfCAxOTIpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpICsgXCIlXCIgKyAoKGMgJiA2MykgfCAxMjgpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuXHRlbHNlIGUgPSBcIiVcIiArICgoYyA+PiAxMikgfCAyMjQpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpICsgXCIlXCIgKyAoKChjID4+IDYpICYgNjMpIHwgMTI4KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSArIFwiJVwiICsgKChjICYgNjMpIHwgMTI4KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcblxuXHRyZXR1cm4gZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBjdERlY0NoYXJzKHN0cjpzdHJpbmcpOnN0cmluZyB7XG5cdGxldCBuZXdTdHIgPSBcIlwiO1xuXHRsZXQgaSA9IDA7XG5cdGNvbnN0IGlsID0gc3RyLmxlbmd0aDtcblxuXHR3aGlsZSAoaSA8IGlsKSB7XG5cdFx0Y29uc3QgYyA9IHBhcnNlSW50KHN0ci5zdWJzdHIoaSArIDEsIDIpLCAxNik7XG5cblx0XHRpZiAoYyA8IDEyOCkge1xuXHRcdFx0bmV3U3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYyk7XG5cdFx0XHRpICs9IDM7XG5cdFx0fVxuXHRcdGVsc2UgaWYgKGMgPj0gMTk0ICYmIGMgPCAyMjQpIHtcblx0XHRcdGlmICgoaWwgLSBpKSA+PSA2KSB7XG5cdFx0XHRcdGNvbnN0IGMyID0gcGFyc2VJbnQoc3RyLnN1YnN0cihpICsgNCwgMiksIDE2KTtcblx0XHRcdFx0bmV3U3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKChjICYgMzEpIDw8IDYpIHwgKGMyICYgNjMpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG5ld1N0ciArPSBzdHIuc3Vic3RyKGksIDYpO1xuXHRcdFx0fVxuXHRcdFx0aSArPSA2O1xuXHRcdH1cblx0XHRlbHNlIGlmIChjID49IDIyNCkge1xuXHRcdFx0aWYgKChpbCAtIGkpID49IDkpIHtcblx0XHRcdFx0Y29uc3QgYzIgPSBwYXJzZUludChzdHIuc3Vic3RyKGkgKyA0LCAyKSwgMTYpO1xuXHRcdFx0XHRjb25zdCBjMyA9IHBhcnNlSW50KHN0ci5zdWJzdHIoaSArIDcsIDIpLCAxNik7XG5cdFx0XHRcdG5ld1N0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCgoYyAmIDE1KSA8PCAxMikgfCAoKGMyICYgNjMpIDw8IDYpIHwgKGMzICYgNjMpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG5ld1N0ciArPSBzdHIuc3Vic3RyKGksIDkpO1xuXHRcdFx0fVxuXHRcdFx0aSArPSA5O1xuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdG5ld1N0ciArPSBzdHIuc3Vic3RyKGksIDMpO1xuXHRcdFx0aSArPSAzO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBuZXdTdHI7XG59XG5cbmZ1bmN0aW9uIF9ub3JtYWxpemVDb21wb25lbnRFbmNvZGluZyhjb21wb25lbnRzOlVSSUNvbXBvbmVudHMsIHByb3RvY29sOlVSSVJlZ0V4cHMpIHtcblx0ZnVuY3Rpb24gZGVjb2RlVW5yZXNlcnZlZChzdHI6c3RyaW5nKTpzdHJpbmcge1xuXHRcdGNvbnN0IGRlY1N0ciA9IHBjdERlY0NoYXJzKHN0cik7XG5cdFx0cmV0dXJuICghZGVjU3RyLm1hdGNoKHByb3RvY29sLlVOUkVTRVJWRUQpID8gc3RyIDogZGVjU3RyKTtcblx0fVxuXG5cdGlmIChjb21wb25lbnRzLnNjaGVtZSkgY29tcG9uZW50cy5zY2hlbWUgPSBTdHJpbmcoY29tcG9uZW50cy5zY2hlbWUpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIGRlY29kZVVucmVzZXJ2ZWQpLnRvTG93ZXJDYXNlKCkucmVwbGFjZShwcm90b2NvbC5OT1RfU0NIRU1FLCBcIlwiKTtcblx0aWYgKGNvbXBvbmVudHMudXNlcmluZm8gIT09IHVuZGVmaW5lZCkgY29tcG9uZW50cy51c2VyaW5mbyA9IFN0cmluZyhjb21wb25lbnRzLnVzZXJpbmZvKS5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCBkZWNvZGVVbnJlc2VydmVkKS5yZXBsYWNlKHByb3RvY29sLk5PVF9VU0VSSU5GTywgcGN0RW5jQ2hhcikucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgdG9VcHBlckNhc2UpO1xuXHRpZiAoY29tcG9uZW50cy5ob3N0ICE9PSB1bmRlZmluZWQpIGNvbXBvbmVudHMuaG9zdCA9IFN0cmluZyhjb21wb25lbnRzLmhvc3QpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIGRlY29kZVVucmVzZXJ2ZWQpLnRvTG93ZXJDYXNlKCkucmVwbGFjZShwcm90b2NvbC5OT1RfSE9TVCwgcGN0RW5jQ2hhcikucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgdG9VcHBlckNhc2UpO1xuXHRpZiAoY29tcG9uZW50cy5wYXRoICE9PSB1bmRlZmluZWQpIGNvbXBvbmVudHMucGF0aCA9IFN0cmluZyhjb21wb25lbnRzLnBhdGgpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIGRlY29kZVVucmVzZXJ2ZWQpLnJlcGxhY2UoKGNvbXBvbmVudHMuc2NoZW1lID8gcHJvdG9jb2wuTk9UX1BBVEggOiBwcm90b2NvbC5OT1RfUEFUSF9OT1NDSEVNRSksIHBjdEVuY0NoYXIpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIHRvVXBwZXJDYXNlKTtcblx0aWYgKGNvbXBvbmVudHMucXVlcnkgIT09IHVuZGVmaW5lZCkgY29tcG9uZW50cy5xdWVyeSA9IFN0cmluZyhjb21wb25lbnRzLnF1ZXJ5KS5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCBkZWNvZGVVbnJlc2VydmVkKS5yZXBsYWNlKHByb3RvY29sLk5PVF9RVUVSWSwgcGN0RW5jQ2hhcikucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgdG9VcHBlckNhc2UpO1xuXHRpZiAoY29tcG9uZW50cy5mcmFnbWVudCAhPT0gdW5kZWZpbmVkKSBjb21wb25lbnRzLmZyYWdtZW50ID0gU3RyaW5nKGNvbXBvbmVudHMuZnJhZ21lbnQpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIGRlY29kZVVucmVzZXJ2ZWQpLnJlcGxhY2UocHJvdG9jb2wuTk9UX0ZSQUdNRU5ULCBwY3RFbmNDaGFyKS5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCB0b1VwcGVyQ2FzZSk7XG5cblx0cmV0dXJuIGNvbXBvbmVudHM7XG59O1xuXG5mdW5jdGlvbiBfc3RyaXBMZWFkaW5nWmVyb3Moc3RyOnN0cmluZyk6c3RyaW5nIHtcblx0cmV0dXJuIHN0ci5yZXBsYWNlKC9eMCooLiopLywgXCIkMVwiKSB8fCBcIjBcIjtcbn1cblxuZnVuY3Rpb24gX25vcm1hbGl6ZUlQdjQoaG9zdDpzdHJpbmcsIHByb3RvY29sOlVSSVJlZ0V4cHMpOnN0cmluZyB7XG5cdGNvbnN0IG1hdGNoZXMgPSBob3N0Lm1hdGNoKHByb3RvY29sLklQVjRBRERSRVNTKSB8fCBbXTtcblx0Y29uc3QgWywgYWRkcmVzc10gPSBtYXRjaGVzO1xuXHRcblx0aWYgKGFkZHJlc3MpIHtcblx0XHRyZXR1cm4gYWRkcmVzcy5zcGxpdChcIi5cIikubWFwKF9zdHJpcExlYWRpbmdaZXJvcykuam9pbihcIi5cIik7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGhvc3Q7XG5cdH1cbn1cblxuZnVuY3Rpb24gX25vcm1hbGl6ZUlQdjYoaG9zdDpzdHJpbmcsIHByb3RvY29sOlVSSVJlZ0V4cHMpOnN0cmluZyB7XG5cdGNvbnN0IG1hdGNoZXMgPSBob3N0Lm1hdGNoKHByb3RvY29sLklQVjZBRERSRVNTKSB8fCBbXTtcblx0Y29uc3QgWywgYWRkcmVzcywgem9uZV0gPSBtYXRjaGVzO1xuXG5cdGlmIChhZGRyZXNzKSB7XG5cdFx0Y29uc3QgW2xhc3QsIGZpcnN0XSA9IGFkZHJlc3MudG9Mb3dlckNhc2UoKS5zcGxpdCgnOjonKS5yZXZlcnNlKCk7XG5cdFx0Y29uc3QgZmlyc3RGaWVsZHMgPSBmaXJzdCA/IGZpcnN0LnNwbGl0KFwiOlwiKS5tYXAoX3N0cmlwTGVhZGluZ1plcm9zKSA6IFtdO1xuXHRcdGNvbnN0IGxhc3RGaWVsZHMgPSBsYXN0LnNwbGl0KFwiOlwiKS5tYXAoX3N0cmlwTGVhZGluZ1plcm9zKTtcblx0XHRjb25zdCBpc0xhc3RGaWVsZElQdjRBZGRyZXNzID0gcHJvdG9jb2wuSVBWNEFERFJFU1MudGVzdChsYXN0RmllbGRzW2xhc3RGaWVsZHMubGVuZ3RoIC0gMV0pO1xuXHRcdGNvbnN0IGZpZWxkQ291bnQgPSBpc0xhc3RGaWVsZElQdjRBZGRyZXNzID8gNyA6IDg7XG5cdFx0Y29uc3QgbGFzdEZpZWxkc1N0YXJ0ID0gbGFzdEZpZWxkcy5sZW5ndGggLSBmaWVsZENvdW50O1xuXHRcdGNvbnN0IGZpZWxkcyA9IEFycmF5PHN0cmluZz4oZmllbGRDb3VudCk7XG5cblx0XHRmb3IgKGxldCB4ID0gMDsgeCA8IGZpZWxkQ291bnQ7ICsreCkge1xuXHRcdFx0ZmllbGRzW3hdID0gZmlyc3RGaWVsZHNbeF0gfHwgbGFzdEZpZWxkc1tsYXN0RmllbGRzU3RhcnQgKyB4XSB8fCAnJztcblx0XHR9XG5cblx0XHRpZiAoaXNMYXN0RmllbGRJUHY0QWRkcmVzcykge1xuXHRcdFx0ZmllbGRzW2ZpZWxkQ291bnQgLSAxXSA9IF9ub3JtYWxpemVJUHY0KGZpZWxkc1tmaWVsZENvdW50IC0gMV0sIHByb3RvY29sKTtcblx0XHR9XG5cblx0XHRjb25zdCBhbGxaZXJvRmllbGRzID0gZmllbGRzLnJlZHVjZTxBcnJheTx7aW5kZXg6bnVtYmVyLGxlbmd0aDpudW1iZXJ9Pj4oKGFjYywgZmllbGQsIGluZGV4KSA9PiB7XG5cdFx0XHRpZiAoIWZpZWxkIHx8IGZpZWxkID09PSBcIjBcIikge1xuXHRcdFx0XHRjb25zdCBsYXN0TG9uZ2VzdCA9IGFjY1thY2MubGVuZ3RoIC0gMV07XG5cdFx0XHRcdGlmIChsYXN0TG9uZ2VzdCAmJiBsYXN0TG9uZ2VzdC5pbmRleCArIGxhc3RMb25nZXN0Lmxlbmd0aCA9PT0gaW5kZXgpIHtcblx0XHRcdFx0XHRsYXN0TG9uZ2VzdC5sZW5ndGgrKztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhY2MucHVzaCh7IGluZGV4LCBsZW5ndGggOiAxIH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gYWNjO1xuXHRcdH0sIFtdKTtcblxuXHRcdGNvbnN0IGxvbmdlc3RaZXJvRmllbGRzID0gYWxsWmVyb0ZpZWxkcy5zb3J0KChhLCBiKSA9PiBiLmxlbmd0aCAtIGEubGVuZ3RoKVswXTtcblxuXHRcdGxldCBuZXdIb3N0OnN0cmluZztcblx0XHRpZiAobG9uZ2VzdFplcm9GaWVsZHMgJiYgbG9uZ2VzdFplcm9GaWVsZHMubGVuZ3RoID4gMSkge1xuXHRcdFx0Y29uc3QgbmV3Rmlyc3QgPSBmaWVsZHMuc2xpY2UoMCwgbG9uZ2VzdFplcm9GaWVsZHMuaW5kZXgpIDtcblx0XHRcdGNvbnN0IG5ld0xhc3QgPSBmaWVsZHMuc2xpY2UobG9uZ2VzdFplcm9GaWVsZHMuaW5kZXggKyBsb25nZXN0WmVyb0ZpZWxkcy5sZW5ndGgpO1xuXHRcdFx0bmV3SG9zdCA9IG5ld0ZpcnN0LmpvaW4oXCI6XCIpICsgXCI6OlwiICsgbmV3TGFzdC5qb2luKFwiOlwiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bmV3SG9zdCA9IGZpZWxkcy5qb2luKFwiOlwiKTtcblx0XHR9XG5cblx0XHRpZiAoem9uZSkge1xuXHRcdFx0bmV3SG9zdCArPSBcIiVcIiArIHpvbmU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ld0hvc3Q7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGhvc3Q7XG5cdH1cbn1cblxuY29uc3QgVVJJX1BBUlNFID0gL14oPzooW146XFwvPyNdKyk6KT8oPzpcXC9cXC8oKD86KFteXFwvPyNAXSopQCk/KFxcW1teXFwvPyNcXF1dK1xcXXxbXlxcLz8jOl0qKSg/OlxcOihcXGQqKSk/KSk/KFtePyNdKikoPzpcXD8oW14jXSopKT8oPzojKCg/Oi58XFxufFxccikqKSk/L2k7XG5jb25zdCBOT19NQVRDSF9JU19VTkRFRklORUQgPSAoPFJlZ0V4cE1hdGNoQXJyYXk+KFwiXCIpLm1hdGNoKC8oKXswfS8pKVsxXSA9PT0gdW5kZWZpbmVkO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodXJpU3RyaW5nOnN0cmluZywgb3B0aW9uczpVUklPcHRpb25zID0ge30pOlVSSUNvbXBvbmVudHMge1xuXHRjb25zdCBjb21wb25lbnRzOlVSSUNvbXBvbmVudHMgPSB7fTtcblx0Y29uc3QgcHJvdG9jb2wgPSAob3B0aW9ucy5pcmkgIT09IGZhbHNlID8gSVJJX1BST1RPQ09MIDogVVJJX1BST1RPQ09MKTtcblxuXHRpZiAob3B0aW9ucy5yZWZlcmVuY2UgPT09IFwic3VmZml4XCIpIHVyaVN0cmluZyA9IChvcHRpb25zLnNjaGVtZSA/IG9wdGlvbnMuc2NoZW1lICsgXCI6XCIgOiBcIlwiKSArIFwiLy9cIiArIHVyaVN0cmluZztcblxuXHRjb25zdCBtYXRjaGVzID0gdXJpU3RyaW5nLm1hdGNoKFVSSV9QQVJTRSk7XG5cblx0aWYgKG1hdGNoZXMpIHtcblx0XHRpZiAoTk9fTUFUQ0hfSVNfVU5ERUZJTkVEKSB7XG5cdFx0XHQvL3N0b3JlIGVhY2ggY29tcG9uZW50XG5cdFx0XHRjb21wb25lbnRzLnNjaGVtZSA9IG1hdGNoZXNbMV07XG5cdFx0XHRjb21wb25lbnRzLnVzZXJpbmZvID0gbWF0Y2hlc1szXTtcblx0XHRcdGNvbXBvbmVudHMuaG9zdCA9IG1hdGNoZXNbNF07XG5cdFx0XHRjb21wb25lbnRzLnBvcnQgPSBwYXJzZUludChtYXRjaGVzWzVdLCAxMCk7XG5cdFx0XHRjb21wb25lbnRzLnBhdGggPSBtYXRjaGVzWzZdIHx8IFwiXCI7XG5cdFx0XHRjb21wb25lbnRzLnF1ZXJ5ID0gbWF0Y2hlc1s3XTtcblx0XHRcdGNvbXBvbmVudHMuZnJhZ21lbnQgPSBtYXRjaGVzWzhdO1xuXG5cdFx0XHQvL2ZpeCBwb3J0IG51bWJlclxuXHRcdFx0aWYgKGlzTmFOKGNvbXBvbmVudHMucG9ydCkpIHtcblx0XHRcdFx0Y29tcG9uZW50cy5wb3J0ID0gbWF0Y2hlc1s1XTtcblx0XHRcdH1cblx0XHR9IGVsc2UgeyAgLy9JRSBGSVggZm9yIGltcHJvcGVyIFJlZ0V4cCBtYXRjaGluZ1xuXHRcdFx0Ly9zdG9yZSBlYWNoIGNvbXBvbmVudFxuXHRcdFx0Y29tcG9uZW50cy5zY2hlbWUgPSBtYXRjaGVzWzFdIHx8IHVuZGVmaW5lZDtcblx0XHRcdGNvbXBvbmVudHMudXNlcmluZm8gPSAodXJpU3RyaW5nLmluZGV4T2YoXCJAXCIpICE9PSAtMSA/IG1hdGNoZXNbM10gOiB1bmRlZmluZWQpO1xuXHRcdFx0Y29tcG9uZW50cy5ob3N0ID0gKHVyaVN0cmluZy5pbmRleE9mKFwiLy9cIikgIT09IC0xID8gbWF0Y2hlc1s0XSA6IHVuZGVmaW5lZCk7XG5cdFx0XHRjb21wb25lbnRzLnBvcnQgPSBwYXJzZUludChtYXRjaGVzWzVdLCAxMCk7XG5cdFx0XHRjb21wb25lbnRzLnBhdGggPSBtYXRjaGVzWzZdIHx8IFwiXCI7XG5cdFx0XHRjb21wb25lbnRzLnF1ZXJ5ID0gKHVyaVN0cmluZy5pbmRleE9mKFwiP1wiKSAhPT0gLTEgPyBtYXRjaGVzWzddIDogdW5kZWZpbmVkKTtcblx0XHRcdGNvbXBvbmVudHMuZnJhZ21lbnQgPSAodXJpU3RyaW5nLmluZGV4T2YoXCIjXCIpICE9PSAtMSA/IG1hdGNoZXNbOF0gOiB1bmRlZmluZWQpO1xuXG5cdFx0XHQvL2ZpeCBwb3J0IG51bWJlclxuXHRcdFx0aWYgKGlzTmFOKGNvbXBvbmVudHMucG9ydCkpIHtcblx0XHRcdFx0Y29tcG9uZW50cy5wb3J0ID0gKHVyaVN0cmluZy5tYXRjaCgvXFwvXFwvKD86LnxcXG4pKlxcOig/OlxcL3xcXD98XFwjfCQpLykgPyBtYXRjaGVzWzRdIDogdW5kZWZpbmVkKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoY29tcG9uZW50cy5ob3N0KSB7XG5cdFx0XHQvL25vcm1hbGl6ZSBJUCBob3N0c1xuXHRcdFx0Y29tcG9uZW50cy5ob3N0ID0gX25vcm1hbGl6ZUlQdjYoX25vcm1hbGl6ZUlQdjQoY29tcG9uZW50cy5ob3N0LCBwcm90b2NvbCksIHByb3RvY29sKTtcblx0XHR9XG5cblx0XHQvL2RldGVybWluZSByZWZlcmVuY2UgdHlwZVxuXHRcdGlmIChjb21wb25lbnRzLnNjaGVtZSA9PT0gdW5kZWZpbmVkICYmIGNvbXBvbmVudHMudXNlcmluZm8gPT09IHVuZGVmaW5lZCAmJiBjb21wb25lbnRzLmhvc3QgPT09IHVuZGVmaW5lZCAmJiBjb21wb25lbnRzLnBvcnQgPT09IHVuZGVmaW5lZCAmJiAhY29tcG9uZW50cy5wYXRoICYmIGNvbXBvbmVudHMucXVlcnkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29tcG9uZW50cy5yZWZlcmVuY2UgPSBcInNhbWUtZG9jdW1lbnRcIjtcblx0XHR9IGVsc2UgaWYgKGNvbXBvbmVudHMuc2NoZW1lID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbXBvbmVudHMucmVmZXJlbmNlID0gXCJyZWxhdGl2ZVwiO1xuXHRcdH0gZWxzZSBpZiAoY29tcG9uZW50cy5mcmFnbWVudCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb21wb25lbnRzLnJlZmVyZW5jZSA9IFwiYWJzb2x1dGVcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29tcG9uZW50cy5yZWZlcmVuY2UgPSBcInVyaVwiO1xuXHRcdH1cblxuXHRcdC8vY2hlY2sgZm9yIHJlZmVyZW5jZSBlcnJvcnNcblx0XHRpZiAob3B0aW9ucy5yZWZlcmVuY2UgJiYgb3B0aW9ucy5yZWZlcmVuY2UgIT09IFwic3VmZml4XCIgJiYgb3B0aW9ucy5yZWZlcmVuY2UgIT09IGNvbXBvbmVudHMucmVmZXJlbmNlKSB7XG5cdFx0XHRjb21wb25lbnRzLmVycm9yID0gY29tcG9uZW50cy5lcnJvciB8fCBcIlVSSSBpcyBub3QgYSBcIiArIG9wdGlvbnMucmVmZXJlbmNlICsgXCIgcmVmZXJlbmNlLlwiO1xuXHRcdH1cblxuXHRcdC8vZmluZCBzY2hlbWUgaGFuZGxlclxuXHRcdGNvbnN0IHNjaGVtZUhhbmRsZXIgPSBTQ0hFTUVTWyhvcHRpb25zLnNjaGVtZSB8fCBjb21wb25lbnRzLnNjaGVtZSB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpXTtcblxuXHRcdC8vY2hlY2sgaWYgc2NoZW1lIGNhbid0IGhhbmRsZSBJUklzXG5cdFx0aWYgKCFvcHRpb25zLnVuaWNvZGVTdXBwb3J0ICYmICghc2NoZW1lSGFuZGxlciB8fCAhc2NoZW1lSGFuZGxlci51bmljb2RlU3VwcG9ydCkpIHtcblx0XHRcdC8vaWYgaG9zdCBjb21wb25lbnQgaXMgYSBkb21haW4gbmFtZVxuXHRcdFx0aWYgKGNvbXBvbmVudHMuaG9zdCAmJiAob3B0aW9ucy5kb21haW5Ib3N0IHx8IChzY2hlbWVIYW5kbGVyICYmIHNjaGVtZUhhbmRsZXIuZG9tYWluSG9zdCkpKSB7XG5cdFx0XHRcdC8vY29udmVydCBVbmljb2RlIElETiAtPiBBU0NJSSBJRE5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRjb21wb25lbnRzLmhvc3QgPSBwdW55Y29kZS50b0FTQ0lJKGNvbXBvbmVudHMuaG9zdC5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCBwY3REZWNDaGFycykudG9Mb3dlckNhc2UoKSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRjb21wb25lbnRzLmVycm9yID0gY29tcG9uZW50cy5lcnJvciB8fCBcIkhvc3QncyBkb21haW4gbmFtZSBjYW4gbm90IGJlIGNvbnZlcnRlZCB0byBBU0NJSSB2aWEgcHVueWNvZGU6IFwiICsgZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly9jb252ZXJ0IElSSSAtPiBVUklcblx0XHRcdF9ub3JtYWxpemVDb21wb25lbnRFbmNvZGluZyhjb21wb25lbnRzLCBVUklfUFJPVE9DT0wpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvL25vcm1hbGl6ZSBlbmNvZGluZ3Ncblx0XHRcdF9ub3JtYWxpemVDb21wb25lbnRFbmNvZGluZyhjb21wb25lbnRzLCBwcm90b2NvbCk7XG5cdFx0fVxuXG5cdFx0Ly9wZXJmb3JtIHNjaGVtZSBzcGVjaWZpYyBwYXJzaW5nXG5cdFx0aWYgKHNjaGVtZUhhbmRsZXIgJiYgc2NoZW1lSGFuZGxlci5wYXJzZSkge1xuXHRcdFx0c2NoZW1lSGFuZGxlci5wYXJzZShjb21wb25lbnRzLCBvcHRpb25zKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Y29tcG9uZW50cy5lcnJvciA9IGNvbXBvbmVudHMuZXJyb3IgfHwgXCJVUkkgY2FuIG5vdCBiZSBwYXJzZWQuXCI7XG5cdH1cblxuXHRyZXR1cm4gY29tcG9uZW50cztcbn07XG5cbmZ1bmN0aW9uIF9yZWNvbXBvc2VBdXRob3JpdHkoY29tcG9uZW50czpVUklDb21wb25lbnRzLCBvcHRpb25zOlVSSU9wdGlvbnMpOnN0cmluZ3x1bmRlZmluZWQge1xuXHRjb25zdCBwcm90b2NvbCA9IChvcHRpb25zLmlyaSAhPT0gZmFsc2UgPyBJUklfUFJPVE9DT0wgOiBVUklfUFJPVE9DT0wpO1xuXHRjb25zdCB1cmlUb2tlbnM6QXJyYXk8c3RyaW5nPiA9IFtdO1xuXG5cdGlmIChjb21wb25lbnRzLnVzZXJpbmZvICE9PSB1bmRlZmluZWQpIHtcblx0XHR1cmlUb2tlbnMucHVzaChjb21wb25lbnRzLnVzZXJpbmZvKTtcblx0XHR1cmlUb2tlbnMucHVzaChcIkBcIik7XG5cdH1cblxuXHRpZiAoY29tcG9uZW50cy5ob3N0ICE9PSB1bmRlZmluZWQpIHtcblx0XHQvL25vcm1hbGl6ZSBJUCBob3N0cywgYWRkIGJyYWNrZXRzIGFuZCBlc2NhcGUgem9uZSBzZXBhcmF0b3IgZm9yIElQdjZcblx0XHR1cmlUb2tlbnMucHVzaChfbm9ybWFsaXplSVB2Nihfbm9ybWFsaXplSVB2NChTdHJpbmcoY29tcG9uZW50cy5ob3N0KSwgcHJvdG9jb2wpLCBwcm90b2NvbCkucmVwbGFjZShwcm90b2NvbC5JUFY2QUREUkVTUywgKF8sICQxLCAkMikgPT4gXCJbXCIgKyAkMSArICgkMiA/IFwiJTI1XCIgKyAkMiA6IFwiXCIpICsgXCJdXCIpKTtcblx0fVxuXG5cdGlmICh0eXBlb2YgY29tcG9uZW50cy5wb3J0ID09PSBcIm51bWJlclwiKSB7XG5cdFx0dXJpVG9rZW5zLnB1c2goXCI6XCIpO1xuXHRcdHVyaVRva2Vucy5wdXNoKGNvbXBvbmVudHMucG9ydC50b1N0cmluZygxMCkpO1xuXHR9XG5cblx0cmV0dXJuIHVyaVRva2Vucy5sZW5ndGggPyB1cmlUb2tlbnMuam9pbihcIlwiKSA6IHVuZGVmaW5lZDtcbn07XG5cbmNvbnN0IFJEUzEgPSAvXlxcLlxcLj9cXC8vO1xuY29uc3QgUkRTMiA9IC9eXFwvXFwuKFxcL3wkKS87XG5jb25zdCBSRFMzID0gL15cXC9cXC5cXC4oXFwvfCQpLztcbmNvbnN0IFJEUzQgPSAvXlxcLlxcLj8kLztcbmNvbnN0IFJEUzUgPSAvXlxcLz8oPzoufFxcbikqPyg/PVxcL3wkKS87XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVEb3RTZWdtZW50cyhpbnB1dDpzdHJpbmcpOnN0cmluZyB7XG5cdGNvbnN0IG91dHB1dDpBcnJheTxzdHJpbmc+ID0gW107XG5cblx0d2hpbGUgKGlucHV0Lmxlbmd0aCkge1xuXHRcdGlmIChpbnB1dC5tYXRjaChSRFMxKSkge1xuXHRcdFx0aW5wdXQgPSBpbnB1dC5yZXBsYWNlKFJEUzEsIFwiXCIpO1xuXHRcdH0gZWxzZSBpZiAoaW5wdXQubWF0Y2goUkRTMikpIHtcblx0XHRcdGlucHV0ID0gaW5wdXQucmVwbGFjZShSRFMyLCBcIi9cIik7XG5cdFx0fSBlbHNlIGlmIChpbnB1dC5tYXRjaChSRFMzKSkge1xuXHRcdFx0aW5wdXQgPSBpbnB1dC5yZXBsYWNlKFJEUzMsIFwiL1wiKTtcblx0XHRcdG91dHB1dC5wb3AoKTtcblx0XHR9IGVsc2UgaWYgKGlucHV0ID09PSBcIi5cIiB8fCBpbnB1dCA9PT0gXCIuLlwiKSB7XG5cdFx0XHRpbnB1dCA9IFwiXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGltID0gaW5wdXQubWF0Y2goUkRTNSk7XG5cdFx0XHRpZiAoaW0pIHtcblx0XHRcdFx0Y29uc3QgcyA9IGltWzBdO1xuXHRcdFx0XHRpbnB1dCA9IGlucHV0LnNsaWNlKHMubGVuZ3RoKTtcblx0XHRcdFx0b3V0cHV0LnB1c2gocyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGRvdCBzZWdtZW50IGNvbmRpdGlvblwiKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gb3V0cHV0LmpvaW4oXCJcIik7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplKGNvbXBvbmVudHM6VVJJQ29tcG9uZW50cywgb3B0aW9uczpVUklPcHRpb25zID0ge30pOnN0cmluZyB7XG5cdGNvbnN0IHByb3RvY29sID0gKG9wdGlvbnMuaXJpID8gSVJJX1BST1RPQ09MIDogVVJJX1BST1RPQ09MKTtcblx0Y29uc3QgdXJpVG9rZW5zOkFycmF5PHN0cmluZz4gPSBbXTtcblxuXHQvL2ZpbmQgc2NoZW1lIGhhbmRsZXJcblx0Y29uc3Qgc2NoZW1lSGFuZGxlciA9IFNDSEVNRVNbKG9wdGlvbnMuc2NoZW1lIHx8IGNvbXBvbmVudHMuc2NoZW1lIHx8IFwiXCIpLnRvTG93ZXJDYXNlKCldO1xuXG5cdC8vcGVyZm9ybSBzY2hlbWUgc3BlY2lmaWMgc2VyaWFsaXphdGlvblxuXHRpZiAoc2NoZW1lSGFuZGxlciAmJiBzY2hlbWVIYW5kbGVyLnNlcmlhbGl6ZSkgc2NoZW1lSGFuZGxlci5zZXJpYWxpemUoY29tcG9uZW50cywgb3B0aW9ucyk7XG5cblx0aWYgKGNvbXBvbmVudHMuaG9zdCkge1xuXHRcdC8vaWYgaG9zdCBjb21wb25lbnQgaXMgYW4gSVB2NiBhZGRyZXNzXG5cdFx0aWYgKHByb3RvY29sLklQVjZBRERSRVNTLnRlc3QoY29tcG9uZW50cy5ob3N0KSkge1xuXHRcdFx0Ly9UT0RPOiBub3JtYWxpemUgSVB2NiBhZGRyZXNzIGFzIHBlciBSRkMgNTk1MlxuXHRcdH1cblxuXHRcdC8vaWYgaG9zdCBjb21wb25lbnQgaXMgYSBkb21haW4gbmFtZVxuXHRcdGVsc2UgaWYgKG9wdGlvbnMuZG9tYWluSG9zdCB8fCAoc2NoZW1lSGFuZGxlciAmJiBzY2hlbWVIYW5kbGVyLmRvbWFpbkhvc3QpKSB7XG5cdFx0XHQvL2NvbnZlcnQgSUROIHZpYSBwdW55Y29kZVxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29tcG9uZW50cy5ob3N0ID0gKCFvcHRpb25zLmlyaSA/IHB1bnljb2RlLnRvQVNDSUkoY29tcG9uZW50cy5ob3N0LnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIHBjdERlY0NoYXJzKS50b0xvd2VyQ2FzZSgpKSA6IHB1bnljb2RlLnRvVW5pY29kZShjb21wb25lbnRzLmhvc3QpKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0Y29tcG9uZW50cy5lcnJvciA9IGNvbXBvbmVudHMuZXJyb3IgfHwgXCJIb3N0J3MgZG9tYWluIG5hbWUgY2FuIG5vdCBiZSBjb252ZXJ0ZWQgdG8gXCIgKyAoIW9wdGlvbnMuaXJpID8gXCJBU0NJSVwiIDogXCJVbmljb2RlXCIpICsgXCIgdmlhIHB1bnljb2RlOiBcIiArIGU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly9ub3JtYWxpemUgZW5jb2Rpbmdcblx0X25vcm1hbGl6ZUNvbXBvbmVudEVuY29kaW5nKGNvbXBvbmVudHMsIHByb3RvY29sKTtcblxuXHRpZiAob3B0aW9ucy5yZWZlcmVuY2UgIT09IFwic3VmZml4XCIgJiYgY29tcG9uZW50cy5zY2hlbWUpIHtcblx0XHR1cmlUb2tlbnMucHVzaChjb21wb25lbnRzLnNjaGVtZSk7XG5cdFx0dXJpVG9rZW5zLnB1c2goXCI6XCIpO1xuXHR9XG5cblx0Y29uc3QgYXV0aG9yaXR5ID0gX3JlY29tcG9zZUF1dGhvcml0eShjb21wb25lbnRzLCBvcHRpb25zKTtcblx0aWYgKGF1dGhvcml0eSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0aWYgKG9wdGlvbnMucmVmZXJlbmNlICE9PSBcInN1ZmZpeFwiKSB7XG5cdFx0XHR1cmlUb2tlbnMucHVzaChcIi8vXCIpO1xuXHRcdH1cblxuXHRcdHVyaVRva2Vucy5wdXNoKGF1dGhvcml0eSk7XG5cblx0XHRpZiAoY29tcG9uZW50cy5wYXRoICYmIGNvbXBvbmVudHMucGF0aC5jaGFyQXQoMCkgIT09IFwiL1wiKSB7XG5cdFx0XHR1cmlUb2tlbnMucHVzaChcIi9cIik7XG5cdFx0fVxuXHR9XG5cblx0aWYgKGNvbXBvbmVudHMucGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0bGV0IHMgPSBjb21wb25lbnRzLnBhdGg7XG5cblx0XHRpZiAoIW9wdGlvbnMuYWJzb2x1dGVQYXRoICYmICghc2NoZW1lSGFuZGxlciB8fCAhc2NoZW1lSGFuZGxlci5hYnNvbHV0ZVBhdGgpKSB7XG5cdFx0XHRzID0gcmVtb3ZlRG90U2VnbWVudHMocyk7XG5cdFx0fVxuXG5cdFx0aWYgKGF1dGhvcml0eSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRzID0gcy5yZXBsYWNlKC9eXFwvXFwvLywgXCIvJTJGXCIpOyAgLy9kb24ndCBhbGxvdyB0aGUgcGF0aCB0byBzdGFydCB3aXRoIFwiLy9cIlxuXHRcdH1cblxuXHRcdHVyaVRva2Vucy5wdXNoKHMpO1xuXHR9XG5cblx0aWYgKGNvbXBvbmVudHMucXVlcnkgIT09IHVuZGVmaW5lZCkge1xuXHRcdHVyaVRva2Vucy5wdXNoKFwiP1wiKTtcblx0XHR1cmlUb2tlbnMucHVzaChjb21wb25lbnRzLnF1ZXJ5KTtcblx0fVxuXG5cdGlmIChjb21wb25lbnRzLmZyYWdtZW50ICE9PSB1bmRlZmluZWQpIHtcblx0XHR1cmlUb2tlbnMucHVzaChcIiNcIik7XG5cdFx0dXJpVG9rZW5zLnB1c2goY29tcG9uZW50cy5mcmFnbWVudCk7XG5cdH1cblxuXHRyZXR1cm4gdXJpVG9rZW5zLmpvaW4oXCJcIik7ICAvL21lcmdlIHRva2VucyBpbnRvIGEgc3RyaW5nXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUNvbXBvbmVudHMoYmFzZTpVUklDb21wb25lbnRzLCByZWxhdGl2ZTpVUklDb21wb25lbnRzLCBvcHRpb25zOlVSSU9wdGlvbnMgPSB7fSwgc2tpcE5vcm1hbGl6YXRpb24/OmJvb2xlYW4pOlVSSUNvbXBvbmVudHMge1xuXHRjb25zdCB0YXJnZXQ6VVJJQ29tcG9uZW50cyA9IHt9O1xuXG5cdGlmICghc2tpcE5vcm1hbGl6YXRpb24pIHtcblx0XHRiYXNlID0gcGFyc2Uoc2VyaWFsaXplKGJhc2UsIG9wdGlvbnMpLCBvcHRpb25zKTsgIC8vbm9ybWFsaXplIGJhc2UgY29tcG9uZW50c1xuXHRcdHJlbGF0aXZlID0gcGFyc2Uoc2VyaWFsaXplKHJlbGF0aXZlLCBvcHRpb25zKSwgb3B0aW9ucyk7ICAvL25vcm1hbGl6ZSByZWxhdGl2ZSBjb21wb25lbnRzXG5cdH1cblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0aWYgKCFvcHRpb25zLnRvbGVyYW50ICYmIHJlbGF0aXZlLnNjaGVtZSkge1xuXHRcdHRhcmdldC5zY2hlbWUgPSByZWxhdGl2ZS5zY2hlbWU7XG5cdFx0Ly90YXJnZXQuYXV0aG9yaXR5ID0gcmVsYXRpdmUuYXV0aG9yaXR5O1xuXHRcdHRhcmdldC51c2VyaW5mbyA9IHJlbGF0aXZlLnVzZXJpbmZvO1xuXHRcdHRhcmdldC5ob3N0ID0gcmVsYXRpdmUuaG9zdDtcblx0XHR0YXJnZXQucG9ydCA9IHJlbGF0aXZlLnBvcnQ7XG5cdFx0dGFyZ2V0LnBhdGggPSByZW1vdmVEb3RTZWdtZW50cyhyZWxhdGl2ZS5wYXRoIHx8IFwiXCIpO1xuXHRcdHRhcmdldC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuXHR9IGVsc2Uge1xuXHRcdGlmIChyZWxhdGl2ZS51c2VyaW5mbyAhPT0gdW5kZWZpbmVkIHx8IHJlbGF0aXZlLmhvc3QgIT09IHVuZGVmaW5lZCB8fCByZWxhdGl2ZS5wb3J0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vdGFyZ2V0LmF1dGhvcml0eSA9IHJlbGF0aXZlLmF1dGhvcml0eTtcblx0XHRcdHRhcmdldC51c2VyaW5mbyA9IHJlbGF0aXZlLnVzZXJpbmZvO1xuXHRcdFx0dGFyZ2V0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0O1xuXHRcdFx0dGFyZ2V0LnBvcnQgPSByZWxhdGl2ZS5wb3J0O1xuXHRcdFx0dGFyZ2V0LnBhdGggPSByZW1vdmVEb3RTZWdtZW50cyhyZWxhdGl2ZS5wYXRoIHx8IFwiXCIpO1xuXHRcdFx0dGFyZ2V0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICghcmVsYXRpdmUucGF0aCkge1xuXHRcdFx0XHR0YXJnZXQucGF0aCA9IGJhc2UucGF0aDtcblx0XHRcdFx0aWYgKHJlbGF0aXZlLnF1ZXJ5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHR0YXJnZXQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0YXJnZXQucXVlcnkgPSBiYXNlLnF1ZXJ5O1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAocmVsYXRpdmUucGF0aC5jaGFyQXQoMCkgPT09IFwiL1wiKSB7XG5cdFx0XHRcdFx0dGFyZ2V0LnBhdGggPSByZW1vdmVEb3RTZWdtZW50cyhyZWxhdGl2ZS5wYXRoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZiAoKGJhc2UudXNlcmluZm8gIT09IHVuZGVmaW5lZCB8fCBiYXNlLmhvc3QgIT09IHVuZGVmaW5lZCB8fCBiYXNlLnBvcnQgIT09IHVuZGVmaW5lZCkgJiYgIWJhc2UucGF0aCkge1xuXHRcdFx0XHRcdFx0dGFyZ2V0LnBhdGggPSBcIi9cIiArIHJlbGF0aXZlLnBhdGg7XG5cdFx0XHRcdFx0fSBlbHNlIGlmICghYmFzZS5wYXRoKSB7XG5cdFx0XHRcdFx0XHR0YXJnZXQucGF0aCA9IHJlbGF0aXZlLnBhdGg7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRhcmdldC5wYXRoID0gYmFzZS5wYXRoLnNsaWNlKDAsIGJhc2UucGF0aC5sYXN0SW5kZXhPZihcIi9cIikgKyAxKSArIHJlbGF0aXZlLnBhdGg7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRhcmdldC5wYXRoID0gcmVtb3ZlRG90U2VnbWVudHModGFyZ2V0LnBhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRhcmdldC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuXHRcdFx0fVxuXHRcdFx0Ly90YXJnZXQuYXV0aG9yaXR5ID0gYmFzZS5hdXRob3JpdHk7XG5cdFx0XHR0YXJnZXQudXNlcmluZm8gPSBiYXNlLnVzZXJpbmZvO1xuXHRcdFx0dGFyZ2V0Lmhvc3QgPSBiYXNlLmhvc3Q7XG5cdFx0XHR0YXJnZXQucG9ydCA9IGJhc2UucG9ydDtcblx0XHR9XG5cdFx0dGFyZ2V0LnNjaGVtZSA9IGJhc2Uuc2NoZW1lO1xuXHR9XG5cblx0dGFyZ2V0LmZyYWdtZW50ID0gcmVsYXRpdmUuZnJhZ21lbnQ7XG5cblx0cmV0dXJuIHRhcmdldDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlKGJhc2VVUkk6c3RyaW5nLCByZWxhdGl2ZVVSSTpzdHJpbmcsIG9wdGlvbnM/OlVSSU9wdGlvbnMpOnN0cmluZyB7XG5cdGNvbnN0IHNjaGVtZWxlc3NPcHRpb25zID0gYXNzaWduKHsgc2NoZW1lIDogJ251bGwnIH0sIG9wdGlvbnMpO1xuXHRyZXR1cm4gc2VyaWFsaXplKHJlc29sdmVDb21wb25lbnRzKHBhcnNlKGJhc2VVUkksIHNjaGVtZWxlc3NPcHRpb25zKSwgcGFyc2UocmVsYXRpdmVVUkksIHNjaGVtZWxlc3NPcHRpb25zKSwgc2NoZW1lbGVzc09wdGlvbnMsIHRydWUpLCBzY2hlbWVsZXNzT3B0aW9ucyk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplKHVyaTpzdHJpbmcsIG9wdGlvbnM/OlVSSU9wdGlvbnMpOnN0cmluZztcbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemUodXJpOlVSSUNvbXBvbmVudHMsIG9wdGlvbnM/OlVSSU9wdGlvbnMpOlVSSUNvbXBvbmVudHM7XG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplKHVyaTphbnksIG9wdGlvbnM/OlVSSU9wdGlvbnMpOmFueSB7XG5cdGlmICh0eXBlb2YgdXJpID09PSBcInN0cmluZ1wiKSB7XG5cdFx0dXJpID0gc2VyaWFsaXplKHBhcnNlKHVyaSwgb3B0aW9ucyksIG9wdGlvbnMpO1xuXHR9IGVsc2UgaWYgKHR5cGVPZih1cmkpID09PSBcIm9iamVjdFwiKSB7XG5cdFx0dXJpID0gcGFyc2Uoc2VyaWFsaXplKDxVUklDb21wb25lbnRzPnVyaSwgb3B0aW9ucyksIG9wdGlvbnMpO1xuXHR9XG5cblx0cmV0dXJuIHVyaTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbCh1cmlBOnN0cmluZywgdXJpQjpzdHJpbmcsIG9wdGlvbnM/OiBVUklPcHRpb25zKTpib29sZWFuO1xuZXhwb3J0IGZ1bmN0aW9uIGVxdWFsKHVyaUE6VVJJQ29tcG9uZW50cywgdXJpQjpVUklDb21wb25lbnRzLCBvcHRpb25zPzpVUklPcHRpb25zKTpib29sZWFuO1xuZXhwb3J0IGZ1bmN0aW9uIGVxdWFsKHVyaUE6YW55LCB1cmlCOmFueSwgb3B0aW9ucz86VVJJT3B0aW9ucyk6Ym9vbGVhbiB7XG5cdGlmICh0eXBlb2YgdXJpQSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHVyaUEgPSBzZXJpYWxpemUocGFyc2UodXJpQSwgb3B0aW9ucyksIG9wdGlvbnMpO1xuXHR9IGVsc2UgaWYgKHR5cGVPZih1cmlBKSA9PT0gXCJvYmplY3RcIikge1xuXHRcdHVyaUEgPSBzZXJpYWxpemUoPFVSSUNvbXBvbmVudHM+dXJpQSwgb3B0aW9ucyk7XG5cdH1cblxuXHRpZiAodHlwZW9mIHVyaUIgPT09IFwic3RyaW5nXCIpIHtcblx0XHR1cmlCID0gc2VyaWFsaXplKHBhcnNlKHVyaUIsIG9wdGlvbnMpLCBvcHRpb25zKTtcblx0fSBlbHNlIGlmICh0eXBlT2YodXJpQikgPT09IFwib2JqZWN0XCIpIHtcblx0XHR1cmlCID0gc2VyaWFsaXplKDxVUklDb21wb25lbnRzPnVyaUIsIG9wdGlvbnMpO1xuXHR9XG5cblx0cmV0dXJuIHVyaUEgPT09IHVyaUI7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlQ29tcG9uZW50KHN0cjpzdHJpbmcsIG9wdGlvbnM/OlVSSU9wdGlvbnMpOnN0cmluZyB7XG5cdHJldHVybiBzdHIgJiYgc3RyLnRvU3RyaW5nKCkucmVwbGFjZSgoIW9wdGlvbnMgfHwgIW9wdGlvbnMuaXJpID8gVVJJX1BST1RPQ09MLkVTQ0FQRSA6IElSSV9QUk9UT0NPTC5FU0NBUEUpLCBwY3RFbmNDaGFyKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiB1bmVzY2FwZUNvbXBvbmVudChzdHI6c3RyaW5nLCBvcHRpb25zPzpVUklPcHRpb25zKTpzdHJpbmcge1xuXHRyZXR1cm4gc3RyICYmIHN0ci50b1N0cmluZygpLnJlcGxhY2UoKCFvcHRpb25zIHx8ICFvcHRpb25zLmlyaSA/IFVSSV9QUk9UT0NPTC5QQ1RfRU5DT0RFRCA6IElSSV9QUk9UT0NPTC5QQ1RfRU5DT0RFRCksIHBjdERlY0NoYXJzKTtcbn07XG4iLCJpbXBvcnQgeyBVUklTY2hlbWVIYW5kbGVyLCBVUklDb21wb25lbnRzLCBVUklPcHRpb25zIH0gZnJvbSBcIi4uL3VyaVwiO1xuXG5jb25zdCBoYW5kbGVyOlVSSVNjaGVtZUhhbmRsZXIgPSB7XG5cdHNjaGVtZSA6IFwiaHR0cFwiLFxuXG5cdGRvbWFpbkhvc3QgOiB0cnVlLFxuXG5cdHBhcnNlIDogZnVuY3Rpb24gKGNvbXBvbmVudHM6VVJJQ29tcG9uZW50cywgb3B0aW9uczpVUklPcHRpb25zKTpVUklDb21wb25lbnRzIHtcblx0XHQvL3JlcG9ydCBtaXNzaW5nIGhvc3Rcblx0XHRpZiAoIWNvbXBvbmVudHMuaG9zdCkge1xuXHRcdFx0Y29tcG9uZW50cy5lcnJvciA9IGNvbXBvbmVudHMuZXJyb3IgfHwgXCJIVFRQIFVSSXMgbXVzdCBoYXZlIGEgaG9zdC5cIjtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29tcG9uZW50cztcblx0fSxcblxuXHRzZXJpYWxpemUgOiBmdW5jdGlvbiAoY29tcG9uZW50czpVUklDb21wb25lbnRzLCBvcHRpb25zOlVSSU9wdGlvbnMpOlVSSUNvbXBvbmVudHMge1xuXHRcdC8vbm9ybWFsaXplIHRoZSBkZWZhdWx0IHBvcnRcblx0XHRpZiAoY29tcG9uZW50cy5wb3J0ID09PSAoU3RyaW5nKGNvbXBvbmVudHMuc2NoZW1lKS50b0xvd2VyQ2FzZSgpICE9PSBcImh0dHBzXCIgPyA4MCA6IDQ0MykgfHwgY29tcG9uZW50cy5wb3J0ID09PSBcIlwiKSB7XG5cdFx0XHRjb21wb25lbnRzLnBvcnQgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdFxuXHRcdC8vbm9ybWFsaXplIHRoZSBlbXB0eSBwYXRoXG5cdFx0aWYgKCFjb21wb25lbnRzLnBhdGgpIHtcblx0XHRcdGNvbXBvbmVudHMucGF0aCA9IFwiL1wiO1xuXHRcdH1cblxuXHRcdC8vTk9URTogV2UgZG8gbm90IHBhcnNlIHF1ZXJ5IHN0cmluZ3MgZm9yIEhUVFAgVVJJc1xuXHRcdC8vYXMgV1dXIEZvcm0gVXJsIEVuY29kZWQgcXVlcnkgc3RyaW5ncyBhcmUgcGFydCBvZiB0aGUgSFRNTDQrIHNwZWMsXG5cdFx0Ly9hbmQgbm90IHRoZSBIVFRQIHNwZWMuXG5cblx0XHRyZXR1cm4gY29tcG9uZW50cztcblx0fVxufTtcblxuZXhwb3J0IGRlZmF1bHQgaGFuZGxlcjsiLCJpbXBvcnQgeyBVUklTY2hlbWVIYW5kbGVyLCBVUklDb21wb25lbnRzLCBVUklPcHRpb25zIH0gZnJvbSBcIi4uL3VyaVwiO1xuaW1wb3J0IGh0dHAgZnJvbSBcIi4vaHR0cFwiO1xuXG5jb25zdCBoYW5kbGVyOlVSSVNjaGVtZUhhbmRsZXIgPSB7XG5cdHNjaGVtZSA6IFwiaHR0cHNcIixcblx0ZG9tYWluSG9zdCA6IGh0dHAuZG9tYWluSG9zdCxcblx0cGFyc2UgOiBodHRwLnBhcnNlLFxuXHRzZXJpYWxpemUgOiBodHRwLnNlcmlhbGl6ZVxufVxuXG5leHBvcnQgZGVmYXVsdCBoYW5kbGVyOyIsImltcG9ydCB7IFVSSVNjaGVtZUhhbmRsZXIsIFVSSUNvbXBvbmVudHMsIFVSSU9wdGlvbnMgfSBmcm9tIFwiLi4vdXJpXCI7XG5pbXBvcnQgeyBwY3RFbmNDaGFyLCBwY3REZWNDaGFycywgdW5lc2NhcGVDb21wb25lbnQgfSBmcm9tIFwiLi4vdXJpXCI7XG5pbXBvcnQgcHVueWNvZGUgZnJvbSBcInB1bnljb2RlXCI7XG5pbXBvcnQgeyBtZXJnZSwgc3ViZXhwLCB0b1VwcGVyQ2FzZSwgdG9BcnJheSB9IGZyb20gXCIuLi91dGlsXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFpbHRvSGVhZGVycyB7XG5cdFtoZm5hbWU6c3RyaW5nXTpzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNYWlsdG9Db21wb25lbnRzIGV4dGVuZHMgVVJJQ29tcG9uZW50cyB7XG5cdHRvOkFycmF5PHN0cmluZz4sXG5cdGhlYWRlcnM/Ok1haWx0b0hlYWRlcnMsXG5cdHN1YmplY3Q/OnN0cmluZyxcblx0Ym9keT86c3RyaW5nXG59XG5cbmNvbnN0IE86TWFpbHRvSGVhZGVycyA9IHt9O1xuY29uc3QgaXNJUkkgPSB0cnVlO1xuXG4vL1JGQyAzOTg2XG5jb25zdCBVTlJFU0VSVkVEJCQgPSBcIltBLVphLXowLTlcXFxcLVxcXFwuXFxcXF9cXFxcflwiICsgKGlzSVJJID8gXCJcXFxceEEwLVxcXFx1MjAwRFxcXFx1MjAxMC1cXFxcdTIwMjlcXFxcdTIwMkYtXFxcXHVEN0ZGXFxcXHVGOTAwLVxcXFx1RkRDRlxcXFx1RkRGMC1cXFxcdUZGRUZcIiA6IFwiXCIpICsgXCJdXCI7XG5jb25zdCBIRVhESUckJCA9IFwiWzAtOUEtRmEtZl1cIjsgIC8vY2FzZS1pbnNlbnNpdGl2ZVxuY29uc3QgUENUX0VOQ09ERUQkID0gc3ViZXhwKHN1YmV4cChcIiVbRUZlZl1cIiArIEhFWERJRyQkICsgXCIlXCIgKyBIRVhESUckJCArIEhFWERJRyQkICsgXCIlXCIgKyBIRVhESUckJCArIEhFWERJRyQkKSArIFwifFwiICsgc3ViZXhwKFwiJVs4OUEtRmEtZl1cIiArIEhFWERJRyQkICsgXCIlXCIgKyBIRVhESUckJCArIEhFWERJRyQkKSArIFwifFwiICsgc3ViZXhwKFwiJVwiICsgSEVYRElHJCQgKyBIRVhESUckJCkpOyAgLy9leHBhbmRlZFxuXG4vL1JGQyA1MzIyLCBleGNlcHQgdGhlc2Ugc3ltYm9scyBhcyBwZXIgUkZDIDYwNjg6IEAgOiAvID8gIyBbIF0gJiA7ID1cbi8vY29uc3QgQVRFWFQkJCA9IFwiW0EtWmEtejAtOVxcXFwhXFxcXCNcXFxcJFxcXFwlXFxcXCZcXFxcJ1xcXFwqXFxcXCtcXFxcLVxcXFwvXFxcXD1cXFxcP1xcXFxeXFxcXF9cXFxcYFxcXFx7XFxcXHxcXFxcfVxcXFx+XVwiO1xuLy9jb25zdCBXU1AkJCA9IFwiW1xcXFx4MjBcXFxceDA5XVwiO1xuLy9jb25zdCBPQlNfUVRFWFQkJCA9IFwiW1xcXFx4MDEtXFxcXHgwOFxcXFx4MEJcXFxceDBDXFxcXHgwRS1cXFxceDFGXFxcXHg3Rl1cIjsgIC8vKCVkMS04IC8gJWQxMS0xMiAvICVkMTQtMzEgLyAlZDEyNylcbi8vY29uc3QgUVRFWFQkJCA9IG1lcmdlKFwiW1xcXFx4MjFcXFxceDIzLVxcXFx4NUJcXFxceDVELVxcXFx4N0VdXCIsIE9CU19RVEVYVCQkKTsgIC8vJWQzMyAvICVkMzUtOTEgLyAlZDkzLTEyNiAvIG9icy1xdGV4dFxuLy9jb25zdCBWQ0hBUiQkID0gXCJbXFxcXHgyMS1cXFxceDdFXVwiO1xuLy9jb25zdCBXU1AkJCA9IFwiW1xcXFx4MjBcXFxceDA5XVwiO1xuLy9jb25zdCBPQlNfUVAkID0gc3ViZXhwKFwiXFxcXFxcXFxcIiArIG1lcmdlKFwiW1xcXFx4MDBcXFxceDBEXFxcXHgwQV1cIiwgT0JTX1FURVhUJCQpKTsgIC8vJWQwIC8gQ1IgLyBMRiAvIG9icy1xdGV4dFxuLy9jb25zdCBGV1MkID0gc3ViZXhwKHN1YmV4cChXU1AkJCArIFwiKlwiICsgXCJcXFxceDBEXFxcXHgwQVwiKSArIFwiP1wiICsgV1NQJCQgKyBcIitcIik7XG4vL2NvbnN0IFFVT1RFRF9QQUlSJCA9IHN1YmV4cChzdWJleHAoXCJcXFxcXFxcXFwiICsgc3ViZXhwKFZDSEFSJCQgKyBcInxcIiArIFdTUCQkKSkgKyBcInxcIiArIE9CU19RUCQpO1xuLy9jb25zdCBRVU9URURfU1RSSU5HJCA9IHN1YmV4cCgnXFxcXFwiJyArIHN1YmV4cChGV1MkICsgXCI/XCIgKyBRQ09OVEVOVCQpICsgXCIqXCIgKyBGV1MkICsgXCI/XCIgKyAnXFxcXFwiJyk7XG5jb25zdCBBVEVYVCQkID0gXCJbQS1aYS16MC05XFxcXCFcXFxcJFxcXFwlXFxcXCdcXFxcKlxcXFwrXFxcXC1cXFxcXlxcXFxfXFxcXGBcXFxce1xcXFx8XFxcXH1cXFxcfl1cIjtcbmNvbnN0IFFURVhUJCQgPSBcIltcXFxcIVxcXFwkXFxcXCVcXFxcJ1xcXFwoXFxcXClcXFxcKlxcXFwrXFxcXCxcXFxcLVxcXFwuMC05XFxcXDxcXFxcPkEtWlxcXFx4NUUtXFxcXHg3RV1cIjtcbmNvbnN0IFZDSEFSJCQgPSBtZXJnZShRVEVYVCQkLCBcIltcXFxcXFxcIlxcXFxcXFxcXVwiKTtcbmNvbnN0IERPVF9BVE9NX1RFWFQkID0gc3ViZXhwKEFURVhUJCQgKyBcIitcIiArIHN1YmV4cChcIlxcXFwuXCIgKyBBVEVYVCQkICsgXCIrXCIpICsgXCIqXCIpO1xuY29uc3QgUVVPVEVEX1BBSVIkID0gc3ViZXhwKFwiXFxcXFxcXFxcIiArIFZDSEFSJCQpO1xuY29uc3QgUUNPTlRFTlQkID0gc3ViZXhwKFFURVhUJCQgKyBcInxcIiArIFFVT1RFRF9QQUlSJCk7XG5jb25zdCBRVU9URURfU1RSSU5HJCA9IHN1YmV4cCgnXFxcXFwiJyArIFFDT05URU5UJCArIFwiKlwiICsgJ1xcXFxcIicpO1xuXG4vL1JGQyA2MDY4XG5jb25zdCBEVEVYVF9OT19PQlMkJCA9IFwiW1xcXFx4MjEtXFxcXHg1QVxcXFx4NUUtXFxcXHg3RV1cIjsgIC8vJWQzMy05MCAvICVkOTQtMTI2XG5jb25zdCBTT01FX0RFTElNUyQkID0gXCJbXFxcXCFcXFxcJFxcXFwnXFxcXChcXFxcKVxcXFwqXFxcXCtcXFxcLFxcXFw7XFxcXDpcXFxcQF1cIjtcbmNvbnN0IFFDSEFSJCA9IHN1YmV4cChVTlJFU0VSVkVEJCQgKyBcInxcIiArIFBDVF9FTkNPREVEJCArIFwifFwiICsgU09NRV9ERUxJTVMkJCk7XG5jb25zdCBET01BSU4kID0gc3ViZXhwKERPVF9BVE9NX1RFWFQkICsgXCJ8XCIgKyBcIlxcXFxbXCIgKyBEVEVYVF9OT19PQlMkJCArIFwiKlwiICsgXCJcXFxcXVwiKTtcbmNvbnN0IExPQ0FMX1BBUlQkID0gc3ViZXhwKERPVF9BVE9NX1RFWFQkICsgXCJ8XCIgKyBRVU9URURfU1RSSU5HJCk7XG5jb25zdCBBRERSX1NQRUMkID0gc3ViZXhwKExPQ0FMX1BBUlQkICsgXCJcXFxcQFwiICsgRE9NQUlOJCk7XG5jb25zdCBUTyQgPSBzdWJleHAoQUREUl9TUEVDJCArIHN1YmV4cChcIlxcXFwsXCIgKyBBRERSX1NQRUMkKSArIFwiKlwiKTtcbmNvbnN0IEhGTkFNRSQgPSBzdWJleHAoUUNIQVIkICsgXCIqXCIpO1xuY29uc3QgSEZWQUxVRSQgPSBIRk5BTUUkO1xuY29uc3QgSEZJRUxEJCA9IHN1YmV4cChIRk5BTUUkICsgXCJcXFxcPVwiICsgSEZWQUxVRSQpO1xuY29uc3QgSEZJRUxEUzIkID0gc3ViZXhwKEhGSUVMRCQgKyBzdWJleHAoXCJcXFxcJlwiICsgSEZJRUxEJCkgKyBcIipcIik7XG5jb25zdCBIRklFTERTJCA9IHN1YmV4cChcIlxcXFw/XCIgKyBIRklFTERTMiQpO1xuY29uc3QgTUFJTFRPX1VSSSA9IG5ldyBSZWdFeHAoXCJebWFpbHRvXFxcXDpcIiArIFRPJCArIFwiP1wiICsgSEZJRUxEUyQgKyBcIj8kXCIpO1xuXG5jb25zdCBVTlJFU0VSVkVEID0gbmV3IFJlZ0V4cChVTlJFU0VSVkVEJCQsIFwiZ1wiKTtcbmNvbnN0IFBDVF9FTkNPREVEID0gbmV3IFJlZ0V4cChQQ1RfRU5DT0RFRCQsIFwiZ1wiKTtcbmNvbnN0IE5PVF9MT0NBTF9QQVJUID0gbmV3IFJlZ0V4cChtZXJnZShcIlteXVwiLCBBVEVYVCQkLCBcIltcXFxcLl1cIiwgJ1tcXFxcXCJdJywgVkNIQVIkJCksIFwiZ1wiKTtcbmNvbnN0IE5PVF9ET01BSU4gPSBuZXcgUmVnRXhwKG1lcmdlKFwiW15dXCIsIEFURVhUJCQsIFwiW1xcXFwuXVwiLCBcIltcXFxcW11cIiwgRFRFWFRfTk9fT0JTJCQsIFwiW1xcXFxdXVwiKSwgXCJnXCIpO1xuY29uc3QgTk9UX0hGTkFNRSA9IG5ldyBSZWdFeHAobWVyZ2UoXCJbXl1cIiwgVU5SRVNFUlZFRCQkLCBTT01FX0RFTElNUyQkKSwgXCJnXCIpO1xuY29uc3QgTk9UX0hGVkFMVUUgPSBOT1RfSEZOQU1FO1xuY29uc3QgVE8gPSBuZXcgUmVnRXhwKFwiXlwiICsgVE8kICsgXCIkXCIpO1xuY29uc3QgSEZJRUxEUyA9IG5ldyBSZWdFeHAoXCJeXCIgKyBIRklFTERTMiQgKyBcIiRcIik7XG5cbmZ1bmN0aW9uIGRlY29kZVVucmVzZXJ2ZWQoc3RyOnN0cmluZyk6c3RyaW5nIHtcblx0Y29uc3QgZGVjU3RyID0gcGN0RGVjQ2hhcnMoc3RyKTtcblx0cmV0dXJuICghZGVjU3RyLm1hdGNoKFVOUkVTRVJWRUQpID8gc3RyIDogZGVjU3RyKTtcbn1cblxuY29uc3QgaGFuZGxlcjpVUklTY2hlbWVIYW5kbGVyPE1haWx0b0NvbXBvbmVudHM+ID0gIHtcblx0c2NoZW1lIDogXCJtYWlsdG9cIixcblxuXHRwYXJzZSA6IGZ1bmN0aW9uIChjb21wb25lbnRzOlVSSUNvbXBvbmVudHMsIG9wdGlvbnM6VVJJT3B0aW9ucyk6TWFpbHRvQ29tcG9uZW50cyB7XG5cdFx0Y29uc3QgbWFpbHRvQ29tcG9uZW50cyA9IGNvbXBvbmVudHMgYXMgTWFpbHRvQ29tcG9uZW50cztcblx0XHRjb25zdCB0byA9IG1haWx0b0NvbXBvbmVudHMudG8gPSAobWFpbHRvQ29tcG9uZW50cy5wYXRoID8gbWFpbHRvQ29tcG9uZW50cy5wYXRoLnNwbGl0KFwiLFwiKSA6IFtdKTtcblx0XHRtYWlsdG9Db21wb25lbnRzLnBhdGggPSB1bmRlZmluZWQ7XG5cblx0XHRpZiAobWFpbHRvQ29tcG9uZW50cy5xdWVyeSkge1xuXHRcdFx0bGV0IHVua25vd25IZWFkZXJzID0gZmFsc2Vcblx0XHRcdGNvbnN0IGhlYWRlcnM6TWFpbHRvSGVhZGVycyA9IHt9O1xuXHRcdFx0Y29uc3QgaGZpZWxkcyA9IG1haWx0b0NvbXBvbmVudHMucXVlcnkuc3BsaXQoXCImXCIpO1xuXG5cdFx0XHRmb3IgKGxldCB4ID0gMCwgeGwgPSBoZmllbGRzLmxlbmd0aDsgeCA8IHhsOyArK3gpIHtcblx0XHRcdFx0Y29uc3QgaGZpZWxkID0gaGZpZWxkc1t4XS5zcGxpdChcIj1cIik7XG5cblx0XHRcdFx0c3dpdGNoIChoZmllbGRbMF0pIHtcblx0XHRcdFx0XHRjYXNlIFwidG9cIjpcblx0XHRcdFx0XHRcdGNvbnN0IHRvQWRkcnMgPSBoZmllbGRbMV0uc3BsaXQoXCIsXCIpO1xuXHRcdFx0XHRcdFx0Zm9yIChsZXQgeCA9IDAsIHhsID0gdG9BZGRycy5sZW5ndGg7IHggPCB4bDsgKyt4KSB7XG5cdFx0XHRcdFx0XHRcdHRvLnB1c2godG9BZGRyc1t4XSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwic3ViamVjdFwiOlxuXHRcdFx0XHRcdFx0bWFpbHRvQ29tcG9uZW50cy5zdWJqZWN0ID0gdW5lc2NhcGVDb21wb25lbnQoaGZpZWxkWzFdLCBvcHRpb25zKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJib2R5XCI6XG5cdFx0XHRcdFx0XHRtYWlsdG9Db21wb25lbnRzLmJvZHkgPSB1bmVzY2FwZUNvbXBvbmVudChoZmllbGRbMV0sIG9wdGlvbnMpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdHVua25vd25IZWFkZXJzID0gdHJ1ZTtcblx0XHRcdFx0XHRcdGhlYWRlcnNbdW5lc2NhcGVDb21wb25lbnQoaGZpZWxkWzBdLCBvcHRpb25zKV0gPSB1bmVzY2FwZUNvbXBvbmVudChoZmllbGRbMV0sIG9wdGlvbnMpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKHVua25vd25IZWFkZXJzKSBtYWlsdG9Db21wb25lbnRzLmhlYWRlcnMgPSBoZWFkZXJzO1xuXHRcdH1cblxuXHRcdG1haWx0b0NvbXBvbmVudHMucXVlcnkgPSB1bmRlZmluZWQ7XG5cblx0XHRmb3IgKGxldCB4ID0gMCwgeGwgPSB0by5sZW5ndGg7IHggPCB4bDsgKyt4KSB7XG5cdFx0XHRjb25zdCBhZGRyID0gdG9beF0uc3BsaXQoXCJAXCIpO1xuXG5cdFx0XHRhZGRyWzBdID0gdW5lc2NhcGVDb21wb25lbnQoYWRkclswXSk7XG5cblx0XHRcdGlmICghb3B0aW9ucy51bmljb2RlU3VwcG9ydCkge1xuXHRcdFx0XHQvL2NvbnZlcnQgVW5pY29kZSBJRE4gLT4gQVNDSUkgSUROXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0YWRkclsxXSA9IHB1bnljb2RlLnRvQVNDSUkodW5lc2NhcGVDb21wb25lbnQoYWRkclsxXSwgb3B0aW9ucykudG9Mb3dlckNhc2UoKSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRtYWlsdG9Db21wb25lbnRzLmVycm9yID0gbWFpbHRvQ29tcG9uZW50cy5lcnJvciB8fCBcIkVtYWlsIGFkZHJlc3MncyBkb21haW4gbmFtZSBjYW4gbm90IGJlIGNvbnZlcnRlZCB0byBBU0NJSSB2aWEgcHVueWNvZGU6IFwiICsgZTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YWRkclsxXSA9IHVuZXNjYXBlQ29tcG9uZW50KGFkZHJbMV0sIG9wdGlvbnMpLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHR9XG5cblx0XHRcdHRvW3hdID0gYWRkci5qb2luKFwiQFwiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbWFpbHRvQ29tcG9uZW50cztcblx0fSxcblxuXHRzZXJpYWxpemUgOiBmdW5jdGlvbiAobWFpbHRvQ29tcG9uZW50czpNYWlsdG9Db21wb25lbnRzLCBvcHRpb25zOlVSSU9wdGlvbnMpOlVSSUNvbXBvbmVudHMge1xuXHRcdGNvbnN0IGNvbXBvbmVudHMgPSBtYWlsdG9Db21wb25lbnRzIGFzIFVSSUNvbXBvbmVudHM7XG5cdFx0Y29uc3QgdG8gPSB0b0FycmF5KG1haWx0b0NvbXBvbmVudHMudG8pO1xuXHRcdGlmICh0bykge1xuXHRcdFx0Zm9yIChsZXQgeCA9IDAsIHhsID0gdG8ubGVuZ3RoOyB4IDwgeGw7ICsreCkge1xuXHRcdFx0XHRjb25zdCB0b0FkZHIgPSBTdHJpbmcodG9beF0pO1xuXHRcdFx0XHRjb25zdCBhdElkeCA9IHRvQWRkci5sYXN0SW5kZXhPZihcIkBcIik7XG5cdFx0XHRcdGNvbnN0IGxvY2FsUGFydCA9ICh0b0FkZHIuc2xpY2UoMCwgYXRJZHgpKS5yZXBsYWNlKFBDVF9FTkNPREVELCBkZWNvZGVVbnJlc2VydmVkKS5yZXBsYWNlKFBDVF9FTkNPREVELCB0b1VwcGVyQ2FzZSkucmVwbGFjZShOT1RfTE9DQUxfUEFSVCwgcGN0RW5jQ2hhcik7XG5cdFx0XHRcdGxldCBkb21haW4gPSB0b0FkZHIuc2xpY2UoYXRJZHggKyAxKTtcblxuXHRcdFx0XHQvL2NvbnZlcnQgSUROIHZpYSBwdW55Y29kZVxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGRvbWFpbiA9ICghb3B0aW9ucy5pcmkgPyBwdW55Y29kZS50b0FTQ0lJKHVuZXNjYXBlQ29tcG9uZW50KGRvbWFpbiwgb3B0aW9ucykudG9Mb3dlckNhc2UoKSkgOiBwdW55Y29kZS50b1VuaWNvZGUoZG9tYWluKSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRjb21wb25lbnRzLmVycm9yID0gY29tcG9uZW50cy5lcnJvciB8fCBcIkVtYWlsIGFkZHJlc3MncyBkb21haW4gbmFtZSBjYW4gbm90IGJlIGNvbnZlcnRlZCB0byBcIiArICghb3B0aW9ucy5pcmkgPyBcIkFTQ0lJXCIgOiBcIlVuaWNvZGVcIikgKyBcIiB2aWEgcHVueWNvZGU6IFwiICsgZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRvW3hdID0gbG9jYWxQYXJ0ICsgXCJAXCIgKyBkb21haW47XG5cdFx0XHR9XG5cblx0XHRcdGNvbXBvbmVudHMucGF0aCA9IHRvLmpvaW4oXCIsXCIpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGhlYWRlcnMgPSBtYWlsdG9Db21wb25lbnRzLmhlYWRlcnMgPSBtYWlsdG9Db21wb25lbnRzLmhlYWRlcnMgfHwge307XG5cblx0XHRpZiAobWFpbHRvQ29tcG9uZW50cy5zdWJqZWN0KSBoZWFkZXJzW1wic3ViamVjdFwiXSA9IG1haWx0b0NvbXBvbmVudHMuc3ViamVjdDtcblx0XHRpZiAobWFpbHRvQ29tcG9uZW50cy5ib2R5KSBoZWFkZXJzW1wiYm9keVwiXSA9IG1haWx0b0NvbXBvbmVudHMuYm9keTtcblxuXHRcdGNvbnN0IGZpZWxkcyA9IFtdO1xuXHRcdGZvciAoY29uc3QgbmFtZSBpbiBoZWFkZXJzKSB7XG5cdFx0XHRpZiAoaGVhZGVyc1tuYW1lXSAhPT0gT1tuYW1lXSkge1xuXHRcdFx0XHRmaWVsZHMucHVzaChcblx0XHRcdFx0XHRuYW1lLnJlcGxhY2UoUENUX0VOQ09ERUQsIGRlY29kZVVucmVzZXJ2ZWQpLnJlcGxhY2UoUENUX0VOQ09ERUQsIHRvVXBwZXJDYXNlKS5yZXBsYWNlKE5PVF9IRk5BTUUsIHBjdEVuY0NoYXIpICtcblx0XHRcdFx0XHRcIj1cIiArXG5cdFx0XHRcdFx0aGVhZGVyc1tuYW1lXS5yZXBsYWNlKFBDVF9FTkNPREVELCBkZWNvZGVVbnJlc2VydmVkKS5yZXBsYWNlKFBDVF9FTkNPREVELCB0b1VwcGVyQ2FzZSkucmVwbGFjZShOT1RfSEZWQUxVRSwgcGN0RW5jQ2hhcilcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGZpZWxkcy5sZW5ndGgpIHtcblx0XHRcdGNvbXBvbmVudHMucXVlcnkgPSBmaWVsZHMuam9pbihcIiZcIik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbXBvbmVudHM7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgaGFuZGxlcjsiLCJpbXBvcnQgeyBVUklTY2hlbWVIYW5kbGVyLCBVUklDb21wb25lbnRzLCBVUklPcHRpb25zIH0gZnJvbSBcIi4uL3VyaVwiO1xuaW1wb3J0IHsgcGN0RW5jQ2hhciwgU0NIRU1FUyB9IGZyb20gXCIuLi91cmlcIjtcblxuZXhwb3J0IGludGVyZmFjZSBVUk5Db21wb25lbnRzIGV4dGVuZHMgVVJJQ29tcG9uZW50cyB7XG5cdG5pZD86c3RyaW5nO1xuXHRuc3M/OnN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVUk5PcHRpb25zIGV4dGVuZHMgVVJJT3B0aW9ucyB7XG5cdG5pZD86c3RyaW5nO1xufVxuXG5jb25zdCBOSUQkID0gXCIoPzpbMC05QS1aYS16XVswLTlBLVphLXpcXFxcLV17MSwzMX0pXCI7XG5jb25zdCBQQ1RfRU5DT0RFRCQgPSBcIig/OlxcXFwlWzAtOUEtRmEtZl17Mn0pXCI7XG5jb25zdCBUUkFOUyQkID0gXCJbMC05QS1aYS16XFxcXChcXFxcKVxcXFwrXFxcXCxcXFxcLVxcXFwuXFxcXDpcXFxcPVxcXFxAXFxcXDtcXFxcJFxcXFxfXFxcXCFcXFxcKlxcXFwnXFxcXC9cXFxcP1xcXFwjXVwiO1xuY29uc3QgTlNTJCA9IFwiKD86KD86XCIgKyBQQ1RfRU5DT0RFRCQgKyBcInxcIiArIFRSQU5TJCQgKyBcIikrKVwiO1xuY29uc3QgVVJOX1NDSEVNRSA9IG5ldyBSZWdFeHAoXCJedXJuXFxcXDooXCIgKyBOSUQkICsgXCIpJFwiKTtcbmNvbnN0IFVSTl9QQVRIID0gbmV3IFJlZ0V4cChcIl4oXCIgKyBOSUQkICsgXCIpXFxcXDooXCIgKyBOU1MkICsgXCIpJFwiKTtcbmNvbnN0IFVSTl9QQVJTRSA9IC9eKFteXFw6XSspXFw6KC4qKS87XG5jb25zdCBVUk5fRVhDTFVERUQgPSAvW1xceDAwLVxceDIwXFxcXFxcXCJcXCZcXDxcXD5cXFtcXF1cXF5cXGBcXHtcXHxcXH1cXH5cXHg3Ri1cXHhGRl0vZztcblxuLy9SRkMgMjE0MVxuY29uc3QgaGFuZGxlcjpVUklTY2hlbWVIYW5kbGVyPFVSTkNvbXBvbmVudHMsVVJOT3B0aW9ucz4gPSB7XG5cdHNjaGVtZSA6IFwidXJuXCIsXG5cblx0cGFyc2UgOiBmdW5jdGlvbiAoY29tcG9uZW50czpVUklDb21wb25lbnRzLCBvcHRpb25zOlVSTk9wdGlvbnMpOlVSTkNvbXBvbmVudHMge1xuXHRcdGNvbnN0IG1hdGNoZXMgPSBjb21wb25lbnRzLnBhdGggJiYgY29tcG9uZW50cy5wYXRoLm1hdGNoKFVSTl9QQVJTRSk7XG5cdFx0bGV0IHVybkNvbXBvbmVudHMgPSBjb21wb25lbnRzIGFzIFVSTkNvbXBvbmVudHM7XG5cblx0XHRpZiAobWF0Y2hlcykge1xuXHRcdFx0Y29uc3Qgc2NoZW1lID0gb3B0aW9ucy5zY2hlbWUgfHwgdXJuQ29tcG9uZW50cy5zY2hlbWUgfHwgXCJ1cm5cIjtcblx0XHRcdGNvbnN0IG5pZCA9IG1hdGNoZXNbMV0udG9Mb3dlckNhc2UoKTtcblx0XHRcdGNvbnN0IG5zcyA9IG1hdGNoZXNbMl07XG5cdFx0XHRjb25zdCB1cm5TY2hlbWUgPSBgJHtzY2hlbWV9OiR7b3B0aW9ucy5uaWQgfHwgbmlkfWA7XG5cdFx0XHRjb25zdCBzY2hlbWVIYW5kbGVyID0gU0NIRU1FU1t1cm5TY2hlbWVdO1xuXG5cdFx0XHR1cm5Db21wb25lbnRzLm5pZCA9IG5pZDtcblx0XHRcdHVybkNvbXBvbmVudHMubnNzID0gbnNzO1xuXHRcdFx0dXJuQ29tcG9uZW50cy5wYXRoID0gdW5kZWZpbmVkO1xuXG5cdFx0XHRpZiAoc2NoZW1lSGFuZGxlcikge1xuXHRcdFx0XHR1cm5Db21wb25lbnRzID0gc2NoZW1lSGFuZGxlci5wYXJzZSh1cm5Db21wb25lbnRzLCBvcHRpb25zKSBhcyBVUk5Db21wb25lbnRzO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR1cm5Db21wb25lbnRzLmVycm9yID0gdXJuQ29tcG9uZW50cy5lcnJvciB8fCBcIlVSTiBjYW4gbm90IGJlIHBhcnNlZC5cIjtcblx0XHR9XG5cblx0XHRyZXR1cm4gdXJuQ29tcG9uZW50cztcblx0fSxcblxuXHRzZXJpYWxpemUgOiBmdW5jdGlvbiAodXJuQ29tcG9uZW50czpVUk5Db21wb25lbnRzLCBvcHRpb25zOlVSTk9wdGlvbnMpOlVSSUNvbXBvbmVudHMge1xuXHRcdGNvbnN0IHNjaGVtZSA9IG9wdGlvbnMuc2NoZW1lIHx8IHVybkNvbXBvbmVudHMuc2NoZW1lIHx8IFwidXJuXCI7XG5cdFx0Y29uc3QgbmlkID0gdXJuQ29tcG9uZW50cy5uaWQ7XG5cdFx0Y29uc3QgdXJuU2NoZW1lID0gYCR7c2NoZW1lfToke29wdGlvbnMubmlkIHx8IG5pZH1gO1xuXHRcdGNvbnN0IHNjaGVtZUhhbmRsZXIgPSBTQ0hFTUVTW3VyblNjaGVtZV07XG5cblx0XHRpZiAoc2NoZW1lSGFuZGxlcikge1xuXHRcdFx0dXJuQ29tcG9uZW50cyA9IHNjaGVtZUhhbmRsZXIuc2VyaWFsaXplKHVybkNvbXBvbmVudHMsIG9wdGlvbnMpIGFzIFVSTkNvbXBvbmVudHM7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdXJpQ29tcG9uZW50cyA9IHVybkNvbXBvbmVudHMgYXMgVVJJQ29tcG9uZW50cztcblx0XHRjb25zdCBuc3MgPSB1cm5Db21wb25lbnRzLm5zcztcblx0XHR1cmlDb21wb25lbnRzLnBhdGggPSBgJHtuaWQgfHwgb3B0aW9ucy5uaWR9OiR7bnNzfWA7XG5cblx0XHRyZXR1cm4gdXJpQ29tcG9uZW50cztcblx0fSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGhhbmRsZXI7IiwiaW1wb3J0IHsgVVJJU2NoZW1lSGFuZGxlciwgVVJJQ29tcG9uZW50cywgVVJJT3B0aW9ucyB9IGZyb20gXCIuLi91cmlcIjtcbmltcG9ydCB7IFVSTkNvbXBvbmVudHMgfSBmcm9tIFwiLi91cm5cIjtcbmltcG9ydCB7IFNDSEVNRVMgfSBmcm9tIFwiLi4vdXJpXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVVVJRENvbXBvbmVudHMgZXh0ZW5kcyBVUk5Db21wb25lbnRzIHtcblx0dXVpZD86IHN0cmluZztcbn1cblxuY29uc3QgVVVJRCA9IC9eWzAtOUEtRmEtZl17OH0oPzpcXC1bMC05QS1GYS1mXXs0fSl7M31cXC1bMC05QS1GYS1mXXsxMn0kLztcbmNvbnN0IFVVSURfUEFSU0UgPSAvXlswLTlBLUZhLWZcXC1dezM2fS87XG5cbi8vUkZDIDQxMjJcbmNvbnN0IGhhbmRsZXI6VVJJU2NoZW1lSGFuZGxlcjxVVUlEQ29tcG9uZW50cywgVVJJT3B0aW9ucywgVVJOQ29tcG9uZW50cz4gPSB7XG5cdHNjaGVtZSA6IFwidXJuOnV1aWRcIixcblxuXHRwYXJzZSA6IGZ1bmN0aW9uICh1cm5Db21wb25lbnRzOlVSTkNvbXBvbmVudHMsIG9wdGlvbnM6VVJJT3B0aW9ucyk6VVVJRENvbXBvbmVudHMge1xuXHRcdGNvbnN0IHV1aWRDb21wb25lbnRzID0gdXJuQ29tcG9uZW50cyBhcyBVVUlEQ29tcG9uZW50cztcblx0XHR1dWlkQ29tcG9uZW50cy51dWlkID0gdXVpZENvbXBvbmVudHMubnNzO1xuXHRcdHV1aWRDb21wb25lbnRzLm5zcyA9IHVuZGVmaW5lZDtcblxuXHRcdGlmICghb3B0aW9ucy50b2xlcmFudCAmJiAoIXV1aWRDb21wb25lbnRzLnV1aWQgfHwgIXV1aWRDb21wb25lbnRzLnV1aWQubWF0Y2goVVVJRCkpKSB7XG5cdFx0XHR1dWlkQ29tcG9uZW50cy5lcnJvciA9IHV1aWRDb21wb25lbnRzLmVycm9yIHx8IFwiVVVJRCBpcyBub3QgdmFsaWQuXCI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHV1aWRDb21wb25lbnRzO1xuXHR9LFxuXG5cdHNlcmlhbGl6ZSA6IGZ1bmN0aW9uICh1dWlkQ29tcG9uZW50czpVVUlEQ29tcG9uZW50cywgb3B0aW9uczpVUklPcHRpb25zKTpVUk5Db21wb25lbnRzIHtcblx0XHRjb25zdCB1cm5Db21wb25lbnRzID0gdXVpZENvbXBvbmVudHMgYXMgVVJOQ29tcG9uZW50cztcblx0XHQvL25vcm1hbGl6ZSBVVUlEXG5cdFx0dXJuQ29tcG9uZW50cy5uc3MgPSAodXVpZENvbXBvbmVudHMudXVpZCB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpO1xuXHRcdHJldHVybiB1cm5Db21wb25lbnRzO1xuXHR9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgaGFuZGxlcjsiLCJpbXBvcnQgeyBTQ0hFTUVTIH0gZnJvbSBcIi4vdXJpXCI7XG5cbmltcG9ydCBodHRwIGZyb20gXCIuL3NjaGVtZXMvaHR0cFwiO1xuU0NIRU1FU1todHRwLnNjaGVtZV0gPSBodHRwO1xuXG5pbXBvcnQgaHR0cHMgZnJvbSBcIi4vc2NoZW1lcy9odHRwc1wiO1xuU0NIRU1FU1todHRwcy5zY2hlbWVdID0gaHR0cHM7XG5cbmltcG9ydCBtYWlsdG8gZnJvbSBcIi4vc2NoZW1lcy9tYWlsdG9cIjtcblNDSEVNRVNbbWFpbHRvLnNjaGVtZV0gPSBtYWlsdG87XG5cbmltcG9ydCB1cm4gZnJvbSBcIi4vc2NoZW1lcy91cm5cIjtcblNDSEVNRVNbdXJuLnNjaGVtZV0gPSB1cm47XG5cbmltcG9ydCB1dWlkIGZyb20gXCIuL3NjaGVtZXMvdXJuLXV1aWRcIjtcblNDSEVNRVNbdXVpZC5zY2hlbWVdID0gdXVpZDtcblxuZXhwb3J0ICogZnJvbSBcIi4vdXJpXCI7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vIGRvIG5vdCBlZGl0IC5qcyBmaWxlcyBkaXJlY3RseSAtIGVkaXQgc3JjL2luZGV4LmpzdFxuXG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBlcXVhbChhLCBiKSB7XG4gIGlmIChhID09PSBiKSByZXR1cm4gdHJ1ZTtcblxuICBpZiAoYSAmJiBiICYmIHR5cGVvZiBhID09ICdvYmplY3QnICYmIHR5cGVvZiBiID09ICdvYmplY3QnKSB7XG4gICAgaWYgKGEuY29uc3RydWN0b3IgIT09IGIuY29uc3RydWN0b3IpIHJldHVybiBmYWxzZTtcblxuICAgIHZhciBsZW5ndGgsIGksIGtleXM7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHtcbiAgICAgIGxlbmd0aCA9IGEubGVuZ3RoO1xuICAgICAgaWYgKGxlbmd0aCAhPSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgZm9yIChpID0gbGVuZ3RoOyBpLS0gIT09IDA7KVxuICAgICAgICBpZiAoIWVxdWFsKGFbaV0sIGJbaV0pKSByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cblxuXG4gICAgaWYgKGEuY29uc3RydWN0b3IgPT09IFJlZ0V4cCkgcmV0dXJuIGEuc291cmNlID09PSBiLnNvdXJjZSAmJiBhLmZsYWdzID09PSBiLmZsYWdzO1xuICAgIGlmIChhLnZhbHVlT2YgIT09IE9iamVjdC5wcm90b3R5cGUudmFsdWVPZikgcmV0dXJuIGEudmFsdWVPZigpID09PSBiLnZhbHVlT2YoKTtcbiAgICBpZiAoYS50b1N0cmluZyAhPT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZykgcmV0dXJuIGEudG9TdHJpbmcoKSA9PT0gYi50b1N0cmluZygpO1xuXG4gICAga2V5cyA9IE9iamVjdC5rZXlzKGEpO1xuICAgIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIGlmIChsZW5ndGggIT09IE9iamVjdC5rZXlzKGIpLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgZm9yIChpID0gbGVuZ3RoOyBpLS0gIT09IDA7KVxuICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwga2V5c1tpXSkpIHJldHVybiBmYWxzZTtcblxuICAgIGZvciAoaSA9IGxlbmd0aDsgaS0tICE9PSAwOykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG5cbiAgICAgIGlmICghZXF1YWwoYVtrZXldLCBiW2tleV0pKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyB0cnVlIGlmIGJvdGggTmFOLCBmYWxzZSBvdGhlcndpc2VcbiAgcmV0dXJuIGEhPT1hICYmIGIhPT1iO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmdcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iZXN0aWVqcy9wdW55Y29kZS5qcyAtIHB1bnljb2RlLnVjczIuZGVjb2RlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHVjczJsZW5ndGgoc3RyKSB7XG4gIHZhciBsZW5ndGggPSAwXG4gICAgLCBsZW4gPSBzdHIubGVuZ3RoXG4gICAgLCBwb3MgPSAwXG4gICAgLCB2YWx1ZTtcbiAgd2hpbGUgKHBvcyA8IGxlbikge1xuICAgIGxlbmd0aCsrO1xuICAgIHZhbHVlID0gc3RyLmNoYXJDb2RlQXQocG9zKyspO1xuICAgIGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIHBvcyA8IGxlbikge1xuICAgICAgLy8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG4gICAgICB2YWx1ZSA9IHN0ci5jaGFyQ29kZUF0KHBvcyk7XG4gICAgICBpZiAoKHZhbHVlICYgMHhGQzAwKSA9PSAweERDMDApIHBvcysrOyAvLyBsb3cgc3Vycm9nYXRlXG4gICAgfVxuICB9XG4gIHJldHVybiBsZW5ndGg7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjb3B5OiBjb3B5LFxuICBjaGVja0RhdGFUeXBlOiBjaGVja0RhdGFUeXBlLFxuICBjaGVja0RhdGFUeXBlczogY2hlY2tEYXRhVHlwZXMsXG4gIGNvZXJjZVRvVHlwZXM6IGNvZXJjZVRvVHlwZXMsXG4gIHRvSGFzaDogdG9IYXNoLFxuICBnZXRQcm9wZXJ0eTogZ2V0UHJvcGVydHksXG4gIGVzY2FwZVF1b3RlczogZXNjYXBlUXVvdGVzLFxuICBlcXVhbDogcmVxdWlyZSgnZmFzdC1kZWVwLWVxdWFsJyksXG4gIHVjczJsZW5ndGg6IHJlcXVpcmUoJy4vdWNzMmxlbmd0aCcpLFxuICB2YXJPY2N1cmVuY2VzOiB2YXJPY2N1cmVuY2VzLFxuICB2YXJSZXBsYWNlOiB2YXJSZXBsYWNlLFxuICBjbGVhblVwQ29kZTogY2xlYW5VcENvZGUsXG4gIGZpbmFsQ2xlYW5VcENvZGU6IGZpbmFsQ2xlYW5VcENvZGUsXG4gIHNjaGVtYUhhc1J1bGVzOiBzY2hlbWFIYXNSdWxlcyxcbiAgc2NoZW1hSGFzUnVsZXNFeGNlcHQ6IHNjaGVtYUhhc1J1bGVzRXhjZXB0LFxuICBzY2hlbWFVbmtub3duUnVsZXM6IHNjaGVtYVVua25vd25SdWxlcyxcbiAgdG9RdW90ZWRTdHJpbmc6IHRvUXVvdGVkU3RyaW5nLFxuICBnZXRQYXRoRXhwcjogZ2V0UGF0aEV4cHIsXG4gIGdldFBhdGg6IGdldFBhdGgsXG4gIGdldERhdGE6IGdldERhdGEsXG4gIHVuZXNjYXBlRnJhZ21lbnQ6IHVuZXNjYXBlRnJhZ21lbnQsXG4gIHVuZXNjYXBlSnNvblBvaW50ZXI6IHVuZXNjYXBlSnNvblBvaW50ZXIsXG4gIGVzY2FwZUZyYWdtZW50OiBlc2NhcGVGcmFnbWVudCxcbiAgZXNjYXBlSnNvblBvaW50ZXI6IGVzY2FwZUpzb25Qb2ludGVyXG59O1xuXG5cbmZ1bmN0aW9uIGNvcHkobywgdG8pIHtcbiAgdG8gPSB0byB8fCB7fTtcbiAgZm9yICh2YXIga2V5IGluIG8pIHRvW2tleV0gPSBvW2tleV07XG4gIHJldHVybiB0bztcbn1cblxuXG5mdW5jdGlvbiBjaGVja0RhdGFUeXBlKGRhdGFUeXBlLCBkYXRhLCBuZWdhdGUpIHtcbiAgdmFyIEVRVUFMID0gbmVnYXRlID8gJyAhPT0gJyA6ICcgPT09ICdcbiAgICAsIEFORCA9IG5lZ2F0ZSA/ICcgfHwgJyA6ICcgJiYgJ1xuICAgICwgT0sgPSBuZWdhdGUgPyAnIScgOiAnJ1xuICAgICwgTk9UID0gbmVnYXRlID8gJycgOiAnISc7XG4gIHN3aXRjaCAoZGF0YVR5cGUpIHtcbiAgICBjYXNlICdudWxsJzogcmV0dXJuIGRhdGEgKyBFUVVBTCArICdudWxsJztcbiAgICBjYXNlICdhcnJheSc6IHJldHVybiBPSyArICdBcnJheS5pc0FycmF5KCcgKyBkYXRhICsgJyknO1xuICAgIGNhc2UgJ29iamVjdCc6IHJldHVybiAnKCcgKyBPSyArIGRhdGEgKyBBTkQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAndHlwZW9mICcgKyBkYXRhICsgRVFVQUwgKyAnXCJvYmplY3RcIicgKyBBTkQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBOT1QgKyAnQXJyYXkuaXNBcnJheSgnICsgZGF0YSArICcpKSc7XG4gICAgY2FzZSAnaW50ZWdlcic6IHJldHVybiAnKHR5cGVvZiAnICsgZGF0YSArIEVRVUFMICsgJ1wibnVtYmVyXCInICsgQU5EICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PVCArICcoJyArIGRhdGEgKyAnICUgMSknICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIEFORCArIGRhdGEgKyBFUVVBTCArIGRhdGEgKyAnKSc7XG4gICAgZGVmYXVsdDogcmV0dXJuICd0eXBlb2YgJyArIGRhdGEgKyBFUVVBTCArICdcIicgKyBkYXRhVHlwZSArICdcIic7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBjaGVja0RhdGFUeXBlcyhkYXRhVHlwZXMsIGRhdGEpIHtcbiAgc3dpdGNoIChkYXRhVHlwZXMubGVuZ3RoKSB7XG4gICAgY2FzZSAxOiByZXR1cm4gY2hlY2tEYXRhVHlwZShkYXRhVHlwZXNbMF0sIGRhdGEsIHRydWUpO1xuICAgIGRlZmF1bHQ6XG4gICAgICB2YXIgY29kZSA9ICcnO1xuICAgICAgdmFyIHR5cGVzID0gdG9IYXNoKGRhdGFUeXBlcyk7XG4gICAgICBpZiAodHlwZXMuYXJyYXkgJiYgdHlwZXMub2JqZWN0KSB7XG4gICAgICAgIGNvZGUgPSB0eXBlcy5udWxsID8gJygnOiAnKCEnICsgZGF0YSArICcgfHwgJztcbiAgICAgICAgY29kZSArPSAndHlwZW9mICcgKyBkYXRhICsgJyAhPT0gXCJvYmplY3RcIiknO1xuICAgICAgICBkZWxldGUgdHlwZXMubnVsbDtcbiAgICAgICAgZGVsZXRlIHR5cGVzLmFycmF5O1xuICAgICAgICBkZWxldGUgdHlwZXMub2JqZWN0O1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVzLm51bWJlcikgZGVsZXRlIHR5cGVzLmludGVnZXI7XG4gICAgICBmb3IgKHZhciB0IGluIHR5cGVzKVxuICAgICAgICBjb2RlICs9IChjb2RlID8gJyAmJiAnIDogJycgKSArIGNoZWNrRGF0YVR5cGUodCwgZGF0YSwgdHJ1ZSk7XG5cbiAgICAgIHJldHVybiBjb2RlO1xuICB9XG59XG5cblxudmFyIENPRVJDRV9UT19UWVBFUyA9IHRvSGFzaChbICdzdHJpbmcnLCAnbnVtYmVyJywgJ2ludGVnZXInLCAnYm9vbGVhbicsICdudWxsJyBdKTtcbmZ1bmN0aW9uIGNvZXJjZVRvVHlwZXMob3B0aW9uQ29lcmNlVHlwZXMsIGRhdGFUeXBlcykge1xuICBpZiAoQXJyYXkuaXNBcnJheShkYXRhVHlwZXMpKSB7XG4gICAgdmFyIHR5cGVzID0gW107XG4gICAgZm9yICh2YXIgaT0wOyBpPGRhdGFUeXBlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHQgPSBkYXRhVHlwZXNbaV07XG4gICAgICBpZiAoQ09FUkNFX1RPX1RZUEVTW3RdKSB0eXBlc1t0eXBlcy5sZW5ndGhdID0gdDtcbiAgICAgIGVsc2UgaWYgKG9wdGlvbkNvZXJjZVR5cGVzID09PSAnYXJyYXknICYmIHQgPT09ICdhcnJheScpIHR5cGVzW3R5cGVzLmxlbmd0aF0gPSB0O1xuICAgIH1cbiAgICBpZiAodHlwZXMubGVuZ3RoKSByZXR1cm4gdHlwZXM7XG4gIH0gZWxzZSBpZiAoQ09FUkNFX1RPX1RZUEVTW2RhdGFUeXBlc10pIHtcbiAgICByZXR1cm4gW2RhdGFUeXBlc107XG4gIH0gZWxzZSBpZiAob3B0aW9uQ29lcmNlVHlwZXMgPT09ICdhcnJheScgJiYgZGF0YVR5cGVzID09PSAnYXJyYXknKSB7XG4gICAgcmV0dXJuIFsnYXJyYXknXTtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIHRvSGFzaChhcnIpIHtcbiAgdmFyIGhhc2ggPSB7fTtcbiAgZm9yICh2YXIgaT0wOyBpPGFyci5sZW5ndGg7IGkrKykgaGFzaFthcnJbaV1dID0gdHJ1ZTtcbiAgcmV0dXJuIGhhc2g7XG59XG5cblxudmFyIElERU5USUZJRVIgPSAvXlthLXokX11bYS16JF8wLTldKiQvaTtcbnZhciBTSU5HTEVfUVVPVEUgPSAvJ3xcXFxcL2c7XG5mdW5jdGlvbiBnZXRQcm9wZXJ0eShrZXkpIHtcbiAgcmV0dXJuIHR5cGVvZiBrZXkgPT0gJ251bWJlcidcbiAgICAgICAgICA/ICdbJyArIGtleSArICddJ1xuICAgICAgICAgIDogSURFTlRJRklFUi50ZXN0KGtleSlcbiAgICAgICAgICAgID8gJy4nICsga2V5XG4gICAgICAgICAgICA6IFwiWydcIiArIGVzY2FwZVF1b3RlcyhrZXkpICsgXCInXVwiO1xufVxuXG5cbmZ1bmN0aW9uIGVzY2FwZVF1b3RlcyhzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKFNJTkdMRV9RVU9URSwgJ1xcXFwkJicpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxuL2csICdcXFxcbicpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxyL2csICdcXFxccicpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxmL2csICdcXFxcZicpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFx0L2csICdcXFxcdCcpO1xufVxuXG5cbmZ1bmN0aW9uIHZhck9jY3VyZW5jZXMoc3RyLCBkYXRhVmFyKSB7XG4gIGRhdGFWYXIgKz0gJ1teMC05XSc7XG4gIHZhciBtYXRjaGVzID0gc3RyLm1hdGNoKG5ldyBSZWdFeHAoZGF0YVZhciwgJ2cnKSk7XG4gIHJldHVybiBtYXRjaGVzID8gbWF0Y2hlcy5sZW5ndGggOiAwO1xufVxuXG5cbmZ1bmN0aW9uIHZhclJlcGxhY2Uoc3RyLCBkYXRhVmFyLCBleHByKSB7XG4gIGRhdGFWYXIgKz0gJyhbXjAtOV0pJztcbiAgZXhwciA9IGV4cHIucmVwbGFjZSgvXFwkL2csICckJCQkJyk7XG4gIHJldHVybiBzdHIucmVwbGFjZShuZXcgUmVnRXhwKGRhdGFWYXIsICdnJyksIGV4cHIgKyAnJDEnKTtcbn1cblxuXG52YXIgRU1QVFlfRUxTRSA9IC9lbHNlXFxzKntcXHMqfS9nXG4gICwgRU1QVFlfSUZfTk9fRUxTRSA9IC9pZlxccypcXChbXildK1xcKVxccypcXHtcXHMqXFx9KD8hXFxzKmVsc2UpL2dcbiAgLCBFTVBUWV9JRl9XSVRIX0VMU0UgPSAvaWZcXHMqXFwoKFteKV0rKVxcKVxccypcXHtcXHMqXFx9XFxzKmVsc2UoPyFcXHMqaWYpL2c7XG5mdW5jdGlvbiBjbGVhblVwQ29kZShvdXQpIHtcbiAgcmV0dXJuIG91dC5yZXBsYWNlKEVNUFRZX0VMU0UsICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoRU1QVFlfSUZfTk9fRUxTRSwgJycpXG4gICAgICAgICAgICAucmVwbGFjZShFTVBUWV9JRl9XSVRIX0VMU0UsICdpZiAoISgkMSkpJyk7XG59XG5cblxudmFyIEVSUk9SU19SRUdFWFAgPSAvW152Ll1lcnJvcnMvZ1xuICAsIFJFTU9WRV9FUlJPUlMgPSAvdmFyIGVycm9ycyA9IDA7fHZhciB2RXJyb3JzID0gbnVsbDt8dmFsaWRhdGUuZXJyb3JzID0gdkVycm9yczsvZ1xuICAsIFJFTU9WRV9FUlJPUlNfQVNZTkMgPSAvdmFyIGVycm9ycyA9IDA7fHZhciB2RXJyb3JzID0gbnVsbDsvZ1xuICAsIFJFVFVSTl9WQUxJRCA9ICdyZXR1cm4gZXJyb3JzID09PSAwOydcbiAgLCBSRVRVUk5fVFJVRSA9ICd2YWxpZGF0ZS5lcnJvcnMgPSBudWxsOyByZXR1cm4gdHJ1ZTsnXG4gICwgUkVUVVJOX0FTWU5DID0gL2lmIFxcKGVycm9ycyA9PT0gMFxcKSByZXR1cm4gZGF0YTtcXHMqZWxzZSB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yXFwodkVycm9yc1xcKTsvXG4gICwgUkVUVVJOX0RBVEFfQVNZTkMgPSAncmV0dXJuIGRhdGE7J1xuICAsIFJPT1REQVRBX1JFR0VYUCA9IC9bXkEtWmEtel8kXXJvb3REYXRhW15BLVphLXowLTlfJF0vZ1xuICAsIFJFTU9WRV9ST09UREFUQSA9IC9pZiBcXChyb290RGF0YSA9PT0gdW5kZWZpbmVkXFwpIHJvb3REYXRhID0gZGF0YTsvO1xuXG5mdW5jdGlvbiBmaW5hbENsZWFuVXBDb2RlKG91dCwgYXN5bmMpIHtcbiAgdmFyIG1hdGNoZXMgPSBvdXQubWF0Y2goRVJST1JTX1JFR0VYUCk7XG4gIGlmIChtYXRjaGVzICYmIG1hdGNoZXMubGVuZ3RoID09IDIpIHtcbiAgICBvdXQgPSBhc3luY1xuICAgICAgICAgID8gb3V0LnJlcGxhY2UoUkVNT1ZFX0VSUk9SU19BU1lOQywgJycpXG4gICAgICAgICAgICAgICAucmVwbGFjZShSRVRVUk5fQVNZTkMsIFJFVFVSTl9EQVRBX0FTWU5DKVxuICAgICAgICAgIDogb3V0LnJlcGxhY2UoUkVNT1ZFX0VSUk9SUywgJycpXG4gICAgICAgICAgICAgICAucmVwbGFjZShSRVRVUk5fVkFMSUQsIFJFVFVSTl9UUlVFKTtcbiAgfVxuXG4gIG1hdGNoZXMgPSBvdXQubWF0Y2goUk9PVERBVEFfUkVHRVhQKTtcbiAgaWYgKCFtYXRjaGVzIHx8IG1hdGNoZXMubGVuZ3RoICE9PSAzKSByZXR1cm4gb3V0O1xuICByZXR1cm4gb3V0LnJlcGxhY2UoUkVNT1ZFX1JPT1REQVRBLCAnJyk7XG59XG5cblxuZnVuY3Rpb24gc2NoZW1hSGFzUnVsZXMoc2NoZW1hLCBydWxlcykge1xuICBpZiAodHlwZW9mIHNjaGVtYSA9PSAnYm9vbGVhbicpIHJldHVybiAhc2NoZW1hO1xuICBmb3IgKHZhciBrZXkgaW4gc2NoZW1hKSBpZiAocnVsZXNba2V5XSkgcmV0dXJuIHRydWU7XG59XG5cblxuZnVuY3Rpb24gc2NoZW1hSGFzUnVsZXNFeGNlcHQoc2NoZW1hLCBydWxlcywgZXhjZXB0S2V5d29yZCkge1xuICBpZiAodHlwZW9mIHNjaGVtYSA9PSAnYm9vbGVhbicpIHJldHVybiAhc2NoZW1hICYmIGV4Y2VwdEtleXdvcmQgIT0gJ25vdCc7XG4gIGZvciAodmFyIGtleSBpbiBzY2hlbWEpIGlmIChrZXkgIT0gZXhjZXB0S2V5d29yZCAmJiBydWxlc1trZXldKSByZXR1cm4gdHJ1ZTtcbn1cblxuXG5mdW5jdGlvbiBzY2hlbWFVbmtub3duUnVsZXMoc2NoZW1hLCBydWxlcykge1xuICBpZiAodHlwZW9mIHNjaGVtYSA9PSAnYm9vbGVhbicpIHJldHVybjtcbiAgZm9yICh2YXIga2V5IGluIHNjaGVtYSkgaWYgKCFydWxlc1trZXldKSByZXR1cm4ga2V5O1xufVxuXG5cbmZ1bmN0aW9uIHRvUXVvdGVkU3RyaW5nKHN0cikge1xuICByZXR1cm4gJ1xcJycgKyBlc2NhcGVRdW90ZXMoc3RyKSArICdcXCcnO1xufVxuXG5cbmZ1bmN0aW9uIGdldFBhdGhFeHByKGN1cnJlbnRQYXRoLCBleHByLCBqc29uUG9pbnRlcnMsIGlzTnVtYmVyKSB7XG4gIHZhciBwYXRoID0ganNvblBvaW50ZXJzIC8vIGZhbHNlIGJ5IGRlZmF1bHRcbiAgICAgICAgICAgICAgPyAnXFwnL1xcJyArICcgKyBleHByICsgKGlzTnVtYmVyID8gJycgOiAnLnJlcGxhY2UoL34vZywgXFwnfjBcXCcpLnJlcGxhY2UoL1xcXFwvL2csIFxcJ34xXFwnKScpXG4gICAgICAgICAgICAgIDogKGlzTnVtYmVyID8gJ1xcJ1tcXCcgKyAnICsgZXhwciArICcgKyBcXCddXFwnJyA6ICdcXCdbXFxcXFxcJ1xcJyArICcgKyBleHByICsgJyArIFxcJ1xcXFxcXCddXFwnJyk7XG4gIHJldHVybiBqb2luUGF0aHMoY3VycmVudFBhdGgsIHBhdGgpO1xufVxuXG5cbmZ1bmN0aW9uIGdldFBhdGgoY3VycmVudFBhdGgsIHByb3AsIGpzb25Qb2ludGVycykge1xuICB2YXIgcGF0aCA9IGpzb25Qb2ludGVycyAvLyBmYWxzZSBieSBkZWZhdWx0XG4gICAgICAgICAgICAgID8gdG9RdW90ZWRTdHJpbmcoJy8nICsgZXNjYXBlSnNvblBvaW50ZXIocHJvcCkpXG4gICAgICAgICAgICAgIDogdG9RdW90ZWRTdHJpbmcoZ2V0UHJvcGVydHkocHJvcCkpO1xuICByZXR1cm4gam9pblBhdGhzKGN1cnJlbnRQYXRoLCBwYXRoKTtcbn1cblxuXG52YXIgSlNPTl9QT0lOVEVSID0gL15cXC8oPzpbXn5dfH4wfH4xKSokLztcbnZhciBSRUxBVElWRV9KU09OX1BPSU5URVIgPSAvXihbMC05XSspKCN8XFwvKD86W15+XXx+MHx+MSkqKT8kLztcbmZ1bmN0aW9uIGdldERhdGEoJGRhdGEsIGx2bCwgcGF0aHMpIHtcbiAgdmFyIHVwLCBqc29uUG9pbnRlciwgZGF0YSwgbWF0Y2hlcztcbiAgaWYgKCRkYXRhID09PSAnJykgcmV0dXJuICdyb290RGF0YSc7XG4gIGlmICgkZGF0YVswXSA9PSAnLycpIHtcbiAgICBpZiAoIUpTT05fUE9JTlRFUi50ZXN0KCRkYXRhKSkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEpTT04tcG9pbnRlcjogJyArICRkYXRhKTtcbiAgICBqc29uUG9pbnRlciA9ICRkYXRhO1xuICAgIGRhdGEgPSAncm9vdERhdGEnO1xuICB9IGVsc2Uge1xuICAgIG1hdGNoZXMgPSAkZGF0YS5tYXRjaChSRUxBVElWRV9KU09OX1BPSU5URVIpO1xuICAgIGlmICghbWF0Y2hlcykgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEpTT04tcG9pbnRlcjogJyArICRkYXRhKTtcbiAgICB1cCA9ICttYXRjaGVzWzFdO1xuICAgIGpzb25Qb2ludGVyID0gbWF0Y2hlc1syXTtcbiAgICBpZiAoanNvblBvaW50ZXIgPT0gJyMnKSB7XG4gICAgICBpZiAodXAgPj0gbHZsKSB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBhY2Nlc3MgcHJvcGVydHkvaW5kZXggJyArIHVwICsgJyBsZXZlbHMgdXAsIGN1cnJlbnQgbGV2ZWwgaXMgJyArIGx2bCk7XG4gICAgICByZXR1cm4gcGF0aHNbbHZsIC0gdXBdO1xuICAgIH1cblxuICAgIGlmICh1cCA+IGx2bCkgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYWNjZXNzIGRhdGEgJyArIHVwICsgJyBsZXZlbHMgdXAsIGN1cnJlbnQgbGV2ZWwgaXMgJyArIGx2bCk7XG4gICAgZGF0YSA9ICdkYXRhJyArICgobHZsIC0gdXApIHx8ICcnKTtcbiAgICBpZiAoIWpzb25Qb2ludGVyKSByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHZhciBleHByID0gZGF0YTtcbiAgdmFyIHNlZ21lbnRzID0ganNvblBvaW50ZXIuc3BsaXQoJy8nKTtcbiAgZm9yICh2YXIgaT0wOyBpPHNlZ21lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNlZ21lbnQgPSBzZWdtZW50c1tpXTtcbiAgICBpZiAoc2VnbWVudCkge1xuICAgICAgZGF0YSArPSBnZXRQcm9wZXJ0eSh1bmVzY2FwZUpzb25Qb2ludGVyKHNlZ21lbnQpKTtcbiAgICAgIGV4cHIgKz0gJyAmJiAnICsgZGF0YTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGV4cHI7XG59XG5cblxuZnVuY3Rpb24gam9pblBhdGhzIChhLCBiKSB7XG4gIGlmIChhID09ICdcIlwiJykgcmV0dXJuIGI7XG4gIHJldHVybiAoYSArICcgKyAnICsgYikucmVwbGFjZSgvJyBcXCsgJy9nLCAnJyk7XG59XG5cblxuZnVuY3Rpb24gdW5lc2NhcGVGcmFnbWVudChzdHIpIHtcbiAgcmV0dXJuIHVuZXNjYXBlSnNvblBvaW50ZXIoZGVjb2RlVVJJQ29tcG9uZW50KHN0cikpO1xufVxuXG5cbmZ1bmN0aW9uIGVzY2FwZUZyYWdtZW50KHN0cikge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGVzY2FwZUpzb25Qb2ludGVyKHN0cikpO1xufVxuXG5cbmZ1bmN0aW9uIGVzY2FwZUpzb25Qb2ludGVyKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL34vZywgJ34wJykucmVwbGFjZSgvXFwvL2csICd+MScpO1xufVxuXG5cbmZ1bmN0aW9uIHVuZXNjYXBlSnNvblBvaW50ZXIoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvfjEvZywgJy8nKS5yZXBsYWNlKC9+MC9nLCAnficpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNjaGVtYU9iamVjdDtcblxuZnVuY3Rpb24gU2NoZW1hT2JqZWN0KG9iaikge1xuICB1dGlsLmNvcHkob2JqLCB0aGlzKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHRyYXZlcnNlID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc2NoZW1hLCBvcHRzLCBjYikge1xuICAvLyBMZWdhY3kgc3VwcG9ydCBmb3IgdjAuMy4xIGFuZCBlYXJsaWVyLlxuICBpZiAodHlwZW9mIG9wdHMgPT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gb3B0cztcbiAgICBvcHRzID0ge307XG4gIH1cblxuICBjYiA9IG9wdHMuY2IgfHwgY2I7XG4gIHZhciBwcmUgPSAodHlwZW9mIGNiID09ICdmdW5jdGlvbicpID8gY2IgOiBjYi5wcmUgfHwgZnVuY3Rpb24oKSB7fTtcbiAgdmFyIHBvc3QgPSBjYi5wb3N0IHx8IGZ1bmN0aW9uKCkge307XG5cbiAgX3RyYXZlcnNlKG9wdHMsIHByZSwgcG9zdCwgc2NoZW1hLCAnJywgc2NoZW1hKTtcbn07XG5cblxudHJhdmVyc2Uua2V5d29yZHMgPSB7XG4gIGFkZGl0aW9uYWxJdGVtczogdHJ1ZSxcbiAgaXRlbXM6IHRydWUsXG4gIGNvbnRhaW5zOiB0cnVlLFxuICBhZGRpdGlvbmFsUHJvcGVydGllczogdHJ1ZSxcbiAgcHJvcGVydHlOYW1lczogdHJ1ZSxcbiAgbm90OiB0cnVlXG59O1xuXG50cmF2ZXJzZS5hcnJheUtleXdvcmRzID0ge1xuICBpdGVtczogdHJ1ZSxcbiAgYWxsT2Y6IHRydWUsXG4gIGFueU9mOiB0cnVlLFxuICBvbmVPZjogdHJ1ZVxufTtcblxudHJhdmVyc2UucHJvcHNLZXl3b3JkcyA9IHtcbiAgZGVmaW5pdGlvbnM6IHRydWUsXG4gIHByb3BlcnRpZXM6IHRydWUsXG4gIHBhdHRlcm5Qcm9wZXJ0aWVzOiB0cnVlLFxuICBkZXBlbmRlbmNpZXM6IHRydWVcbn07XG5cbnRyYXZlcnNlLnNraXBLZXl3b3JkcyA9IHtcbiAgZGVmYXVsdDogdHJ1ZSxcbiAgZW51bTogdHJ1ZSxcbiAgY29uc3Q6IHRydWUsXG4gIHJlcXVpcmVkOiB0cnVlLFxuICBtYXhpbXVtOiB0cnVlLFxuICBtaW5pbXVtOiB0cnVlLFxuICBleGNsdXNpdmVNYXhpbXVtOiB0cnVlLFxuICBleGNsdXNpdmVNaW5pbXVtOiB0cnVlLFxuICBtdWx0aXBsZU9mOiB0cnVlLFxuICBtYXhMZW5ndGg6IHRydWUsXG4gIG1pbkxlbmd0aDogdHJ1ZSxcbiAgcGF0dGVybjogdHJ1ZSxcbiAgZm9ybWF0OiB0cnVlLFxuICBtYXhJdGVtczogdHJ1ZSxcbiAgbWluSXRlbXM6IHRydWUsXG4gIHVuaXF1ZUl0ZW1zOiB0cnVlLFxuICBtYXhQcm9wZXJ0aWVzOiB0cnVlLFxuICBtaW5Qcm9wZXJ0aWVzOiB0cnVlXG59O1xuXG5cbmZ1bmN0aW9uIF90cmF2ZXJzZShvcHRzLCBwcmUsIHBvc3QsIHNjaGVtYSwganNvblB0ciwgcm9vdFNjaGVtYSwgcGFyZW50SnNvblB0ciwgcGFyZW50S2V5d29yZCwgcGFyZW50U2NoZW1hLCBrZXlJbmRleCkge1xuICBpZiAoc2NoZW1hICYmIHR5cGVvZiBzY2hlbWEgPT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoc2NoZW1hKSkge1xuICAgIHByZShzY2hlbWEsIGpzb25QdHIsIHJvb3RTY2hlbWEsIHBhcmVudEpzb25QdHIsIHBhcmVudEtleXdvcmQsIHBhcmVudFNjaGVtYSwga2V5SW5kZXgpO1xuICAgIGZvciAodmFyIGtleSBpbiBzY2hlbWEpIHtcbiAgICAgIHZhciBzY2ggPSBzY2hlbWFba2V5XTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHNjaCkpIHtcbiAgICAgICAgaWYgKGtleSBpbiB0cmF2ZXJzZS5hcnJheUtleXdvcmRzKSB7XG4gICAgICAgICAgZm9yICh2YXIgaT0wOyBpPHNjaC5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIF90cmF2ZXJzZShvcHRzLCBwcmUsIHBvc3QsIHNjaFtpXSwganNvblB0ciArICcvJyArIGtleSArICcvJyArIGksIHJvb3RTY2hlbWEsIGpzb25QdHIsIGtleSwgc2NoZW1hLCBpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChrZXkgaW4gdHJhdmVyc2UucHJvcHNLZXl3b3Jkcykge1xuICAgICAgICBpZiAoc2NoICYmIHR5cGVvZiBzY2ggPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIHNjaClcbiAgICAgICAgICAgIF90cmF2ZXJzZShvcHRzLCBwcmUsIHBvc3QsIHNjaFtwcm9wXSwganNvblB0ciArICcvJyArIGtleSArICcvJyArIGVzY2FwZUpzb25QdHIocHJvcCksIHJvb3RTY2hlbWEsIGpzb25QdHIsIGtleSwgc2NoZW1hLCBwcm9wKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChrZXkgaW4gdHJhdmVyc2Uua2V5d29yZHMgfHwgKG9wdHMuYWxsS2V5cyAmJiAhKGtleSBpbiB0cmF2ZXJzZS5za2lwS2V5d29yZHMpKSkge1xuICAgICAgICBfdHJhdmVyc2Uob3B0cywgcHJlLCBwb3N0LCBzY2gsIGpzb25QdHIgKyAnLycgKyBrZXksIHJvb3RTY2hlbWEsIGpzb25QdHIsIGtleSwgc2NoZW1hKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcG9zdChzY2hlbWEsIGpzb25QdHIsIHJvb3RTY2hlbWEsIHBhcmVudEpzb25QdHIsIHBhcmVudEtleXdvcmQsIHBhcmVudFNjaGVtYSwga2V5SW5kZXgpO1xuICB9XG59XG5cblxuZnVuY3Rpb24gZXNjYXBlSnNvblB0cihzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9+L2csICd+MCcpLnJlcGxhY2UoL1xcLy9nLCAnfjEnKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFVSSSA9IHJlcXVpcmUoJ3VyaS1qcycpXG4gICwgZXF1YWwgPSByZXF1aXJlKCdmYXN0LWRlZXAtZXF1YWwnKVxuICAsIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKVxuICAsIFNjaGVtYU9iamVjdCA9IHJlcXVpcmUoJy4vc2NoZW1hX29iaicpXG4gICwgdHJhdmVyc2UgPSByZXF1aXJlKCdqc29uLXNjaGVtYS10cmF2ZXJzZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlc29sdmU7XG5cbnJlc29sdmUubm9ybWFsaXplSWQgPSBub3JtYWxpemVJZDtcbnJlc29sdmUuZnVsbFBhdGggPSBnZXRGdWxsUGF0aDtcbnJlc29sdmUudXJsID0gcmVzb2x2ZVVybDtcbnJlc29sdmUuaWRzID0gcmVzb2x2ZUlkcztcbnJlc29sdmUuaW5saW5lUmVmID0gaW5saW5lUmVmO1xucmVzb2x2ZS5zY2hlbWEgPSByZXNvbHZlU2NoZW1hO1xuXG4vKipcbiAqIFtyZXNvbHZlIGFuZCBjb21waWxlIHRoZSByZWZlcmVuY2VzICgkcmVmKV1cbiAqIEB0aGlzICAgQWp2XG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gY29tcGlsZSByZWZlcmVuY2UgdG8gc2NoZW1hIGNvbXBpbGF0aW9uIGZ1bmNpdG9uIChsb2NhbENvbXBpbGUpXG4gKiBAcGFyYW0gIHtPYmplY3R9IHJvb3Qgb2JqZWN0IHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJvb3Qgc2NoZW1hIGZvciB0aGUgY3VycmVudCBzY2hlbWFcbiAqIEBwYXJhbSAge1N0cmluZ30gcmVmIHJlZmVyZW5jZSB0byByZXNvbHZlXG4gKiBAcmV0dXJuIHtPYmplY3R8RnVuY3Rpb259IHNjaGVtYSBvYmplY3QgKGlmIHRoZSBzY2hlbWEgY2FuIGJlIGlubGluZWQpIG9yIHZhbGlkYXRpb24gZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZShjb21waWxlLCByb290LCByZWYpIHtcbiAgLyoganNoaW50IHZhbGlkdGhpczogdHJ1ZSAqL1xuICB2YXIgcmVmVmFsID0gdGhpcy5fcmVmc1tyZWZdO1xuICBpZiAodHlwZW9mIHJlZlZhbCA9PSAnc3RyaW5nJykge1xuICAgIGlmICh0aGlzLl9yZWZzW3JlZlZhbF0pIHJlZlZhbCA9IHRoaXMuX3JlZnNbcmVmVmFsXTtcbiAgICBlbHNlIHJldHVybiByZXNvbHZlLmNhbGwodGhpcywgY29tcGlsZSwgcm9vdCwgcmVmVmFsKTtcbiAgfVxuXG4gIHJlZlZhbCA9IHJlZlZhbCB8fCB0aGlzLl9zY2hlbWFzW3JlZl07XG4gIGlmIChyZWZWYWwgaW5zdGFuY2VvZiBTY2hlbWFPYmplY3QpIHtcbiAgICByZXR1cm4gaW5saW5lUmVmKHJlZlZhbC5zY2hlbWEsIHRoaXMuX29wdHMuaW5saW5lUmVmcylcbiAgICAgICAgICAgID8gcmVmVmFsLnNjaGVtYVxuICAgICAgICAgICAgOiByZWZWYWwudmFsaWRhdGUgfHwgdGhpcy5fY29tcGlsZShyZWZWYWwpO1xuICB9XG5cbiAgdmFyIHJlcyA9IHJlc29sdmVTY2hlbWEuY2FsbCh0aGlzLCByb290LCByZWYpO1xuICB2YXIgc2NoZW1hLCB2LCBiYXNlSWQ7XG4gIGlmIChyZXMpIHtcbiAgICBzY2hlbWEgPSByZXMuc2NoZW1hO1xuICAgIHJvb3QgPSByZXMucm9vdDtcbiAgICBiYXNlSWQgPSByZXMuYmFzZUlkO1xuICB9XG5cbiAgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIFNjaGVtYU9iamVjdCkge1xuICAgIHYgPSBzY2hlbWEudmFsaWRhdGUgfHwgY29tcGlsZS5jYWxsKHRoaXMsIHNjaGVtYS5zY2hlbWEsIHJvb3QsIHVuZGVmaW5lZCwgYmFzZUlkKTtcbiAgfSBlbHNlIGlmIChzY2hlbWEgIT09IHVuZGVmaW5lZCkge1xuICAgIHYgPSBpbmxpbmVSZWYoc2NoZW1hLCB0aGlzLl9vcHRzLmlubGluZVJlZnMpXG4gICAgICAgID8gc2NoZW1hXG4gICAgICAgIDogY29tcGlsZS5jYWxsKHRoaXMsIHNjaGVtYSwgcm9vdCwgdW5kZWZpbmVkLCBiYXNlSWQpO1xuICB9XG5cbiAgcmV0dXJuIHY7XG59XG5cblxuLyoqXG4gKiBSZXNvbHZlIHNjaGVtYSwgaXRzIHJvb3QgYW5kIGJhc2VJZFxuICogQHRoaXMgQWp2XG4gKiBAcGFyYW0gIHtPYmplY3R9IHJvb3Qgcm9vdCBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIHNjaGVtYSwgcmVmVmFsLCByZWZzXG4gKiBAcGFyYW0gIHtTdHJpbmd9IHJlZiAgcmVmZXJlbmNlIHRvIHJlc29sdmVcbiAqIEByZXR1cm4ge09iamVjdH0gb2JqZWN0IHdpdGggcHJvcGVydGllcyBzY2hlbWEsIHJvb3QsIGJhc2VJZFxuICovXG5mdW5jdGlvbiByZXNvbHZlU2NoZW1hKHJvb3QsIHJlZikge1xuICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlICovXG4gIHZhciBwID0gVVJJLnBhcnNlKHJlZilcbiAgICAsIHJlZlBhdGggPSBfZ2V0RnVsbFBhdGgocClcbiAgICAsIGJhc2VJZCA9IGdldEZ1bGxQYXRoKHRoaXMuX2dldElkKHJvb3Quc2NoZW1hKSk7XG4gIGlmIChPYmplY3Qua2V5cyhyb290LnNjaGVtYSkubGVuZ3RoID09PSAwIHx8IHJlZlBhdGggIT09IGJhc2VJZCkge1xuICAgIHZhciBpZCA9IG5vcm1hbGl6ZUlkKHJlZlBhdGgpO1xuICAgIHZhciByZWZWYWwgPSB0aGlzLl9yZWZzW2lkXTtcbiAgICBpZiAodHlwZW9mIHJlZlZhbCA9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHJlc29sdmVSZWN1cnNpdmUuY2FsbCh0aGlzLCByb290LCByZWZWYWwsIHApO1xuICAgIH0gZWxzZSBpZiAocmVmVmFsIGluc3RhbmNlb2YgU2NoZW1hT2JqZWN0KSB7XG4gICAgICBpZiAoIXJlZlZhbC52YWxpZGF0ZSkgdGhpcy5fY29tcGlsZShyZWZWYWwpO1xuICAgICAgcm9vdCA9IHJlZlZhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVmVmFsID0gdGhpcy5fc2NoZW1hc1tpZF07XG4gICAgICBpZiAocmVmVmFsIGluc3RhbmNlb2YgU2NoZW1hT2JqZWN0KSB7XG4gICAgICAgIGlmICghcmVmVmFsLnZhbGlkYXRlKSB0aGlzLl9jb21waWxlKHJlZlZhbCk7XG4gICAgICAgIGlmIChpZCA9PSBub3JtYWxpemVJZChyZWYpKVxuICAgICAgICAgIHJldHVybiB7IHNjaGVtYTogcmVmVmFsLCByb290OiByb290LCBiYXNlSWQ6IGJhc2VJZCB9O1xuICAgICAgICByb290ID0gcmVmVmFsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXJvb3Quc2NoZW1hKSByZXR1cm47XG4gICAgYmFzZUlkID0gZ2V0RnVsbFBhdGgodGhpcy5fZ2V0SWQocm9vdC5zY2hlbWEpKTtcbiAgfVxuICByZXR1cm4gZ2V0SnNvblBvaW50ZXIuY2FsbCh0aGlzLCBwLCBiYXNlSWQsIHJvb3Quc2NoZW1hLCByb290KTtcbn1cblxuXG4vKiBAdGhpcyBBanYgKi9cbmZ1bmN0aW9uIHJlc29sdmVSZWN1cnNpdmUocm9vdCwgcmVmLCBwYXJzZWRSZWYpIHtcbiAgLyoganNoaW50IHZhbGlkdGhpczogdHJ1ZSAqL1xuICB2YXIgcmVzID0gcmVzb2x2ZVNjaGVtYS5jYWxsKHRoaXMsIHJvb3QsIHJlZik7XG4gIGlmIChyZXMpIHtcbiAgICB2YXIgc2NoZW1hID0gcmVzLnNjaGVtYTtcbiAgICB2YXIgYmFzZUlkID0gcmVzLmJhc2VJZDtcbiAgICByb290ID0gcmVzLnJvb3Q7XG4gICAgdmFyIGlkID0gdGhpcy5fZ2V0SWQoc2NoZW1hKTtcbiAgICBpZiAoaWQpIGJhc2VJZCA9IHJlc29sdmVVcmwoYmFzZUlkLCBpZCk7XG4gICAgcmV0dXJuIGdldEpzb25Qb2ludGVyLmNhbGwodGhpcywgcGFyc2VkUmVmLCBiYXNlSWQsIHNjaGVtYSwgcm9vdCk7XG4gIH1cbn1cblxuXG52YXIgUFJFVkVOVF9TQ09QRV9DSEFOR0UgPSB1dGlsLnRvSGFzaChbJ3Byb3BlcnRpZXMnLCAncGF0dGVyblByb3BlcnRpZXMnLCAnZW51bScsICdkZXBlbmRlbmNpZXMnLCAnZGVmaW5pdGlvbnMnXSk7XG4vKiBAdGhpcyBBanYgKi9cbmZ1bmN0aW9uIGdldEpzb25Qb2ludGVyKHBhcnNlZFJlZiwgYmFzZUlkLCBzY2hlbWEsIHJvb3QpIHtcbiAgLyoganNoaW50IHZhbGlkdGhpczogdHJ1ZSAqL1xuICBwYXJzZWRSZWYuZnJhZ21lbnQgPSBwYXJzZWRSZWYuZnJhZ21lbnQgfHwgJyc7XG4gIGlmIChwYXJzZWRSZWYuZnJhZ21lbnQuc2xpY2UoMCwxKSAhPSAnLycpIHJldHVybjtcbiAgdmFyIHBhcnRzID0gcGFyc2VkUmVmLmZyYWdtZW50LnNwbGl0KCcvJyk7XG5cbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwYXJ0ID0gcGFydHNbaV07XG4gICAgaWYgKHBhcnQpIHtcbiAgICAgIHBhcnQgPSB1dGlsLnVuZXNjYXBlRnJhZ21lbnQocGFydCk7XG4gICAgICBzY2hlbWEgPSBzY2hlbWFbcGFydF07XG4gICAgICBpZiAoc2NoZW1hID09PSB1bmRlZmluZWQpIGJyZWFrO1xuICAgICAgdmFyIGlkO1xuICAgICAgaWYgKCFQUkVWRU5UX1NDT1BFX0NIQU5HRVtwYXJ0XSkge1xuICAgICAgICBpZCA9IHRoaXMuX2dldElkKHNjaGVtYSk7XG4gICAgICAgIGlmIChpZCkgYmFzZUlkID0gcmVzb2x2ZVVybChiYXNlSWQsIGlkKTtcbiAgICAgICAgaWYgKHNjaGVtYS4kcmVmKSB7XG4gICAgICAgICAgdmFyICRyZWYgPSByZXNvbHZlVXJsKGJhc2VJZCwgc2NoZW1hLiRyZWYpO1xuICAgICAgICAgIHZhciByZXMgPSByZXNvbHZlU2NoZW1hLmNhbGwodGhpcywgcm9vdCwgJHJlZik7XG4gICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgc2NoZW1hID0gcmVzLnNjaGVtYTtcbiAgICAgICAgICAgIHJvb3QgPSByZXMucm9vdDtcbiAgICAgICAgICAgIGJhc2VJZCA9IHJlcy5iYXNlSWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChzY2hlbWEgIT09IHVuZGVmaW5lZCAmJiBzY2hlbWEgIT09IHJvb3Quc2NoZW1hKVxuICAgIHJldHVybiB7IHNjaGVtYTogc2NoZW1hLCByb290OiByb290LCBiYXNlSWQ6IGJhc2VJZCB9O1xufVxuXG5cbnZhciBTSU1QTEVfSU5MSU5FRCA9IHV0aWwudG9IYXNoKFtcbiAgJ3R5cGUnLCAnZm9ybWF0JywgJ3BhdHRlcm4nLFxuICAnbWF4TGVuZ3RoJywgJ21pbkxlbmd0aCcsXG4gICdtYXhQcm9wZXJ0aWVzJywgJ21pblByb3BlcnRpZXMnLFxuICAnbWF4SXRlbXMnLCAnbWluSXRlbXMnLFxuICAnbWF4aW11bScsICdtaW5pbXVtJyxcbiAgJ3VuaXF1ZUl0ZW1zJywgJ211bHRpcGxlT2YnLFxuICAncmVxdWlyZWQnLCAnZW51bSdcbl0pO1xuZnVuY3Rpb24gaW5saW5lUmVmKHNjaGVtYSwgbGltaXQpIHtcbiAgaWYgKGxpbWl0ID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICBpZiAobGltaXQgPT09IHVuZGVmaW5lZCB8fCBsaW1pdCA9PT0gdHJ1ZSkgcmV0dXJuIGNoZWNrTm9SZWYoc2NoZW1hKTtcbiAgZWxzZSBpZiAobGltaXQpIHJldHVybiBjb3VudEtleXMoc2NoZW1hKSA8PSBsaW1pdDtcbn1cblxuXG5mdW5jdGlvbiBjaGVja05vUmVmKHNjaGVtYSkge1xuICB2YXIgaXRlbTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hKSkge1xuICAgIGZvciAodmFyIGk9MDsgaTxzY2hlbWEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGl0ZW0gPSBzY2hlbWFbaV07XG4gICAgICBpZiAodHlwZW9mIGl0ZW0gPT0gJ29iamVjdCcgJiYgIWNoZWNrTm9SZWYoaXRlbSkpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIga2V5IGluIHNjaGVtYSkge1xuICAgICAgaWYgKGtleSA9PSAnJHJlZicpIHJldHVybiBmYWxzZTtcbiAgICAgIGl0ZW0gPSBzY2hlbWFba2V5XTtcbiAgICAgIGlmICh0eXBlb2YgaXRlbSA9PSAnb2JqZWN0JyAmJiAhY2hlY2tOb1JlZihpdGVtKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuXG5mdW5jdGlvbiBjb3VudEtleXMoc2NoZW1hKSB7XG4gIHZhciBjb3VudCA9IDAsIGl0ZW07XG4gIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYSkpIHtcbiAgICBmb3IgKHZhciBpPTA7IGk8c2NoZW1hLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpdGVtID0gc2NoZW1hW2ldO1xuICAgICAgaWYgKHR5cGVvZiBpdGVtID09ICdvYmplY3QnKSBjb3VudCArPSBjb3VudEtleXMoaXRlbSk7XG4gICAgICBpZiAoY291bnQgPT0gSW5maW5pdHkpIHJldHVybiBJbmZpbml0eTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIga2V5IGluIHNjaGVtYSkge1xuICAgICAgaWYgKGtleSA9PSAnJHJlZicpIHJldHVybiBJbmZpbml0eTtcbiAgICAgIGlmIChTSU1QTEVfSU5MSU5FRFtrZXldKSB7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpdGVtID0gc2NoZW1hW2tleV07XG4gICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PSAnb2JqZWN0JykgY291bnQgKz0gY291bnRLZXlzKGl0ZW0pICsgMTtcbiAgICAgICAgaWYgKGNvdW50ID09IEluZmluaXR5KSByZXR1cm4gSW5maW5pdHk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBjb3VudDtcbn1cblxuXG5mdW5jdGlvbiBnZXRGdWxsUGF0aChpZCwgbm9ybWFsaXplKSB7XG4gIGlmIChub3JtYWxpemUgIT09IGZhbHNlKSBpZCA9IG5vcm1hbGl6ZUlkKGlkKTtcbiAgdmFyIHAgPSBVUkkucGFyc2UoaWQpO1xuICByZXR1cm4gX2dldEZ1bGxQYXRoKHApO1xufVxuXG5cbmZ1bmN0aW9uIF9nZXRGdWxsUGF0aChwKSB7XG4gIHJldHVybiBVUkkuc2VyaWFsaXplKHApLnNwbGl0KCcjJylbMF0gKyAnIyc7XG59XG5cblxudmFyIFRSQUlMSU5HX1NMQVNIX0hBU0ggPSAvI1xcLz8kLztcbmZ1bmN0aW9uIG5vcm1hbGl6ZUlkKGlkKSB7XG4gIHJldHVybiBpZCA/IGlkLnJlcGxhY2UoVFJBSUxJTkdfU0xBU0hfSEFTSCwgJycpIDogJyc7XG59XG5cblxuZnVuY3Rpb24gcmVzb2x2ZVVybChiYXNlSWQsIGlkKSB7XG4gIGlkID0gbm9ybWFsaXplSWQoaWQpO1xuICByZXR1cm4gVVJJLnJlc29sdmUoYmFzZUlkLCBpZCk7XG59XG5cblxuLyogQHRoaXMgQWp2ICovXG5mdW5jdGlvbiByZXNvbHZlSWRzKHNjaGVtYSkge1xuICB2YXIgc2NoZW1hSWQgPSBub3JtYWxpemVJZCh0aGlzLl9nZXRJZChzY2hlbWEpKTtcbiAgdmFyIGJhc2VJZHMgPSB7Jyc6IHNjaGVtYUlkfTtcbiAgdmFyIGZ1bGxQYXRocyA9IHsnJzogZ2V0RnVsbFBhdGgoc2NoZW1hSWQsIGZhbHNlKX07XG4gIHZhciBsb2NhbFJlZnMgPSB7fTtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHRyYXZlcnNlKHNjaGVtYSwge2FsbEtleXM6IHRydWV9LCBmdW5jdGlvbihzY2gsIGpzb25QdHIsIHJvb3RTY2hlbWEsIHBhcmVudEpzb25QdHIsIHBhcmVudEtleXdvcmQsIHBhcmVudFNjaGVtYSwga2V5SW5kZXgpIHtcbiAgICBpZiAoanNvblB0ciA9PT0gJycpIHJldHVybjtcbiAgICB2YXIgaWQgPSBzZWxmLl9nZXRJZChzY2gpO1xuICAgIHZhciBiYXNlSWQgPSBiYXNlSWRzW3BhcmVudEpzb25QdHJdO1xuICAgIHZhciBmdWxsUGF0aCA9IGZ1bGxQYXRoc1twYXJlbnRKc29uUHRyXSArICcvJyArIHBhcmVudEtleXdvcmQ7XG4gICAgaWYgKGtleUluZGV4ICE9PSB1bmRlZmluZWQpXG4gICAgICBmdWxsUGF0aCArPSAnLycgKyAodHlwZW9mIGtleUluZGV4ID09ICdudW1iZXInID8ga2V5SW5kZXggOiB1dGlsLmVzY2FwZUZyYWdtZW50KGtleUluZGV4KSk7XG5cbiAgICBpZiAodHlwZW9mIGlkID09ICdzdHJpbmcnKSB7XG4gICAgICBpZCA9IGJhc2VJZCA9IG5vcm1hbGl6ZUlkKGJhc2VJZCA/IFVSSS5yZXNvbHZlKGJhc2VJZCwgaWQpIDogaWQpO1xuXG4gICAgICB2YXIgcmVmVmFsID0gc2VsZi5fcmVmc1tpZF07XG4gICAgICBpZiAodHlwZW9mIHJlZlZhbCA9PSAnc3RyaW5nJykgcmVmVmFsID0gc2VsZi5fcmVmc1tyZWZWYWxdO1xuICAgICAgaWYgKHJlZlZhbCAmJiByZWZWYWwuc2NoZW1hKSB7XG4gICAgICAgIGlmICghZXF1YWwoc2NoLCByZWZWYWwuc2NoZW1hKSlcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2lkIFwiJyArIGlkICsgJ1wiIHJlc29sdmVzIHRvIG1vcmUgdGhhbiBvbmUgc2NoZW1hJyk7XG4gICAgICB9IGVsc2UgaWYgKGlkICE9IG5vcm1hbGl6ZUlkKGZ1bGxQYXRoKSkge1xuICAgICAgICBpZiAoaWRbMF0gPT0gJyMnKSB7XG4gICAgICAgICAgaWYgKGxvY2FsUmVmc1tpZF0gJiYgIWVxdWFsKHNjaCwgbG9jYWxSZWZzW2lkXSkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2lkIFwiJyArIGlkICsgJ1wiIHJlc29sdmVzIHRvIG1vcmUgdGhhbiBvbmUgc2NoZW1hJyk7XG4gICAgICAgICAgbG9jYWxSZWZzW2lkXSA9IHNjaDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWxmLl9yZWZzW2lkXSA9IGZ1bGxQYXRoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGJhc2VJZHNbanNvblB0cl0gPSBiYXNlSWQ7XG4gICAgZnVsbFBhdGhzW2pzb25QdHJdID0gZnVsbFBhdGg7XG4gIH0pO1xuXG4gIHJldHVybiBsb2NhbFJlZnM7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciByZXNvbHZlID0gcmVxdWlyZSgnLi9yZXNvbHZlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBWYWxpZGF0aW9uOiBlcnJvclN1YmNsYXNzKFZhbGlkYXRpb25FcnJvciksXG4gIE1pc3NpbmdSZWY6IGVycm9yU3ViY2xhc3MoTWlzc2luZ1JlZkVycm9yKVxufTtcblxuXG5mdW5jdGlvbiBWYWxpZGF0aW9uRXJyb3IoZXJyb3JzKSB7XG4gIHRoaXMubWVzc2FnZSA9ICd2YWxpZGF0aW9uIGZhaWxlZCc7XG4gIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICB0aGlzLmFqdiA9IHRoaXMudmFsaWRhdGlvbiA9IHRydWU7XG59XG5cblxuTWlzc2luZ1JlZkVycm9yLm1lc3NhZ2UgPSBmdW5jdGlvbiAoYmFzZUlkLCByZWYpIHtcbiAgcmV0dXJuICdjYW5cXCd0IHJlc29sdmUgcmVmZXJlbmNlICcgKyByZWYgKyAnIGZyb20gaWQgJyArIGJhc2VJZDtcbn07XG5cblxuZnVuY3Rpb24gTWlzc2luZ1JlZkVycm9yKGJhc2VJZCwgcmVmLCBtZXNzYWdlKSB7XG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgTWlzc2luZ1JlZkVycm9yLm1lc3NhZ2UoYmFzZUlkLCByZWYpO1xuICB0aGlzLm1pc3NpbmdSZWYgPSByZXNvbHZlLnVybChiYXNlSWQsIHJlZik7XG4gIHRoaXMubWlzc2luZ1NjaGVtYSA9IHJlc29sdmUubm9ybWFsaXplSWQocmVzb2x2ZS5mdWxsUGF0aCh0aGlzLm1pc3NpbmdSZWYpKTtcbn1cblxuXG5mdW5jdGlvbiBlcnJvclN1YmNsYXNzKFN1YmNsYXNzKSB7XG4gIFN1YmNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcbiAgU3ViY2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3ViY2xhc3M7XG4gIHJldHVybiBTdWJjbGFzcztcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZGF0YSwgb3B0cykge1xuICAgIGlmICghb3B0cykgb3B0cyA9IHt9O1xuICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykgb3B0cyA9IHsgY21wOiBvcHRzIH07XG4gICAgdmFyIGN5Y2xlcyA9ICh0eXBlb2Ygb3B0cy5jeWNsZXMgPT09ICdib29sZWFuJykgPyBvcHRzLmN5Y2xlcyA6IGZhbHNlO1xuXG4gICAgdmFyIGNtcCA9IG9wdHMuY21wICYmIChmdW5jdGlvbiAoZikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHZhciBhb2JqID0geyBrZXk6IGEsIHZhbHVlOiBub2RlW2FdIH07XG4gICAgICAgICAgICAgICAgdmFyIGJvYmogPSB7IGtleTogYiwgdmFsdWU6IG5vZGVbYl0gfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZihhb2JqLCBib2JqKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfSkob3B0cy5jbXApO1xuXG4gICAgdmFyIHNlZW4gPSBbXTtcbiAgICByZXR1cm4gKGZ1bmN0aW9uIHN0cmluZ2lmeSAobm9kZSkge1xuICAgICAgICBpZiAobm9kZSAmJiBub2RlLnRvSlNPTiAmJiB0eXBlb2Ygbm9kZS50b0pTT04gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG5vZGUgPSBub2RlLnRvSlNPTigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgICAgICBpZiAodHlwZW9mIG5vZGUgPT0gJ251bWJlcicpIHJldHVybiBpc0Zpbml0ZShub2RlKSA/ICcnICsgbm9kZSA6ICdudWxsJztcbiAgICAgICAgaWYgKHR5cGVvZiBub2RlICE9PSAnb2JqZWN0JykgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG5vZGUpO1xuXG4gICAgICAgIHZhciBpLCBvdXQ7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSB7XG4gICAgICAgICAgICBvdXQgPSAnWyc7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbm9kZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChpKSBvdXQgKz0gJywnO1xuICAgICAgICAgICAgICAgIG91dCArPSBzdHJpbmdpZnkobm9kZVtpXSkgfHwgJ251bGwnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG91dCArICddJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChub2RlID09PSBudWxsKSByZXR1cm4gJ251bGwnO1xuXG4gICAgICAgIGlmIChzZWVuLmluZGV4T2Yobm9kZSkgIT09IC0xKSB7XG4gICAgICAgICAgICBpZiAoY3ljbGVzKSByZXR1cm4gSlNPTi5zdHJpbmdpZnkoJ19fY3ljbGVfXycpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ29udmVydGluZyBjaXJjdWxhciBzdHJ1Y3R1cmUgdG8gSlNPTicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNlZW5JbmRleCA9IHNlZW4ucHVzaChub2RlKSAtIDE7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMobm9kZSkuc29ydChjbXAgJiYgY21wKG5vZGUpKTtcbiAgICAgICAgb3V0ID0gJyc7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IHN0cmluZ2lmeShub2RlW2tleV0pO1xuXG4gICAgICAgICAgICBpZiAoIXZhbHVlKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmIChvdXQpIG91dCArPSAnLCc7XG4gICAgICAgICAgICBvdXQgKz0gSlNPTi5zdHJpbmdpZnkoa2V5KSArICc6JyArIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHNlZW4uc3BsaWNlKHNlZW5JbmRleCwgMSk7XG4gICAgICAgIHJldHVybiAneycgKyBvdXQgKyAnfSc7XG4gICAgfSkoZGF0YSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV92YWxpZGF0ZShpdCwgJGtleXdvcmQsICRydWxlVHlwZSkge1xuICB2YXIgb3V0ID0gJyc7XG4gIHZhciAkYXN5bmMgPSBpdC5zY2hlbWEuJGFzeW5jID09PSB0cnVlLFxuICAgICRyZWZLZXl3b3JkcyA9IGl0LnV0aWwuc2NoZW1hSGFzUnVsZXNFeGNlcHQoaXQuc2NoZW1hLCBpdC5SVUxFUy5hbGwsICckcmVmJyksXG4gICAgJGlkID0gaXQuc2VsZi5fZ2V0SWQoaXQuc2NoZW1hKTtcbiAgaWYgKGl0Lm9wdHMuc3RyaWN0S2V5d29yZHMpIHtcbiAgICB2YXIgJHVua25vd25Ld2QgPSBpdC51dGlsLnNjaGVtYVVua25vd25SdWxlcyhpdC5zY2hlbWEsIGl0LlJVTEVTLmtleXdvcmRzKTtcbiAgICBpZiAoJHVua25vd25Ld2QpIHtcbiAgICAgIHZhciAka2V5d29yZHNNc2cgPSAndW5rbm93biBrZXl3b3JkOiAnICsgJHVua25vd25Ld2Q7XG4gICAgICBpZiAoaXQub3B0cy5zdHJpY3RLZXl3b3JkcyA9PT0gJ2xvZycpIGl0LmxvZ2dlci53YXJuKCRrZXl3b3Jkc01zZyk7XG4gICAgICBlbHNlIHRocm93IG5ldyBFcnJvcigka2V5d29yZHNNc2cpO1xuICAgIH1cbiAgfVxuICBpZiAoaXQuaXNUb3ApIHtcbiAgICBvdXQgKz0gJyB2YXIgdmFsaWRhdGUgPSAnO1xuICAgIGlmICgkYXN5bmMpIHtcbiAgICAgIGl0LmFzeW5jID0gdHJ1ZTtcbiAgICAgIG91dCArPSAnYXN5bmMgJztcbiAgICB9XG4gICAgb3V0ICs9ICdmdW5jdGlvbihkYXRhLCBkYXRhUGF0aCwgcGFyZW50RGF0YSwgcGFyZW50RGF0YVByb3BlcnR5LCByb290RGF0YSkgeyBcXCd1c2Ugc3RyaWN0XFwnOyAnO1xuICAgIGlmICgkaWQgJiYgKGl0Lm9wdHMuc291cmNlQ29kZSB8fCBpdC5vcHRzLnByb2Nlc3NDb2RlKSkge1xuICAgICAgb3V0ICs9ICcgJyArICgnL1xcKiMgc291cmNlVVJMPScgKyAkaWQgKyAnICovJykgKyAnICc7XG4gICAgfVxuICB9XG4gIGlmICh0eXBlb2YgaXQuc2NoZW1hID09ICdib29sZWFuJyB8fCAhKCRyZWZLZXl3b3JkcyB8fCBpdC5zY2hlbWEuJHJlZikpIHtcbiAgICB2YXIgJGtleXdvcmQgPSAnZmFsc2Ugc2NoZW1hJztcbiAgICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICAgIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gICAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICAgIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgICB2YXIgJGVycm9yS2V5d29yZDtcbiAgICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICAgIHZhciAkdmFsaWQgPSAndmFsaWQnICsgJGx2bDtcbiAgICBpZiAoaXQuc2NoZW1hID09PSBmYWxzZSkge1xuICAgICAgaWYgKGl0LmlzVG9wKSB7XG4gICAgICAgICRicmVha09uRXJyb3IgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZTsgJztcbiAgICAgIH1cbiAgICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAgICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICAgICAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJGVycm9yS2V5d29yZCB8fCAnZmFsc2Ugc2NoZW1hJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczoge30gJztcbiAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdib29sZWFuIHNjaGVtYSBpcyBmYWxzZVxcJyAnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogZmFsc2UgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgIH1cbiAgICAgIHZhciBfX2VyciA9IG91dDtcbiAgICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaXQuaXNUb3ApIHtcbiAgICAgICAgaWYgKCRhc3luYykge1xuICAgICAgICAgIG91dCArPSAnIHJldHVybiBkYXRhOyAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IG51bGw7IHJldHVybiB0cnVlOyAnO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJyB2YXIgJyArICgkdmFsaWQpICsgJyA9IHRydWU7ICc7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpdC5pc1RvcCkge1xuICAgICAgb3V0ICs9ICcgfTsgcmV0dXJuIHZhbGlkYXRlOyAnO1xuICAgIH1cbiAgICByZXR1cm4gb3V0O1xuICB9XG4gIGlmIChpdC5pc1RvcCkge1xuICAgIHZhciAkdG9wID0gaXQuaXNUb3AsXG4gICAgICAkbHZsID0gaXQubGV2ZWwgPSAwLFxuICAgICAgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWwgPSAwLFxuICAgICAgJGRhdGEgPSAnZGF0YSc7XG4gICAgaXQucm9vdElkID0gaXQucmVzb2x2ZS5mdWxsUGF0aChpdC5zZWxmLl9nZXRJZChpdC5yb290LnNjaGVtYSkpO1xuICAgIGl0LmJhc2VJZCA9IGl0LmJhc2VJZCB8fCBpdC5yb290SWQ7XG4gICAgZGVsZXRlIGl0LmlzVG9wO1xuICAgIGl0LmRhdGFQYXRoQXJyID0gW3VuZGVmaW5lZF07XG4gICAgaWYgKGl0LnNjaGVtYS5kZWZhdWx0ICE9PSB1bmRlZmluZWQgJiYgaXQub3B0cy51c2VEZWZhdWx0cyAmJiBpdC5vcHRzLnN0cmljdERlZmF1bHRzKSB7XG4gICAgICB2YXIgJGRlZmF1bHRNc2cgPSAnZGVmYXVsdCBpcyBpZ25vcmVkIGluIHRoZSBzY2hlbWEgcm9vdCc7XG4gICAgICBpZiAoaXQub3B0cy5zdHJpY3REZWZhdWx0cyA9PT0gJ2xvZycpIGl0LmxvZ2dlci53YXJuKCRkZWZhdWx0TXNnKTtcbiAgICAgIGVsc2UgdGhyb3cgbmV3IEVycm9yKCRkZWZhdWx0TXNnKTtcbiAgICB9XG4gICAgb3V0ICs9ICcgdmFyIHZFcnJvcnMgPSBudWxsOyAnO1xuICAgIG91dCArPSAnIHZhciBlcnJvcnMgPSAwOyAgICAgJztcbiAgICBvdXQgKz0gJyBpZiAocm9vdERhdGEgPT09IHVuZGVmaW5lZCkgcm9vdERhdGEgPSBkYXRhOyAnO1xuICB9IGVsc2Uge1xuICAgIHZhciAkbHZsID0gaXQubGV2ZWwsXG4gICAgICAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbCxcbiAgICAgICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgICBpZiAoJGlkKSBpdC5iYXNlSWQgPSBpdC5yZXNvbHZlLnVybChpdC5iYXNlSWQsICRpZCk7XG4gICAgaWYgKCRhc3luYyAmJiAhaXQuYXN5bmMpIHRocm93IG5ldyBFcnJvcignYXN5bmMgc2NoZW1hIGluIHN5bmMgc2NoZW1hJyk7XG4gICAgb3V0ICs9ICcgdmFyIGVycnNfJyArICgkbHZsKSArICcgPSBlcnJvcnM7JztcbiAgfVxuICB2YXIgJHZhbGlkID0gJ3ZhbGlkJyArICRsdmwsXG4gICAgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycyxcbiAgICAkY2xvc2luZ0JyYWNlczEgPSAnJyxcbiAgICAkY2xvc2luZ0JyYWNlczIgPSAnJztcbiAgdmFyICRlcnJvcktleXdvcmQ7XG4gIHZhciAkdHlwZVNjaGVtYSA9IGl0LnNjaGVtYS50eXBlLFxuICAgICR0eXBlSXNBcnJheSA9IEFycmF5LmlzQXJyYXkoJHR5cGVTY2hlbWEpO1xuICBpZiAoJHR5cGVTY2hlbWEgJiYgaXQub3B0cy5udWxsYWJsZSAmJiBpdC5zY2hlbWEubnVsbGFibGUgPT09IHRydWUpIHtcbiAgICBpZiAoJHR5cGVJc0FycmF5KSB7XG4gICAgICBpZiAoJHR5cGVTY2hlbWEuaW5kZXhPZignbnVsbCcpID09IC0xKSAkdHlwZVNjaGVtYSA9ICR0eXBlU2NoZW1hLmNvbmNhdCgnbnVsbCcpO1xuICAgIH0gZWxzZSBpZiAoJHR5cGVTY2hlbWEgIT0gJ251bGwnKSB7XG4gICAgICAkdHlwZVNjaGVtYSA9IFskdHlwZVNjaGVtYSwgJ251bGwnXTtcbiAgICAgICR0eXBlSXNBcnJheSA9IHRydWU7XG4gICAgfVxuICB9XG4gIGlmICgkdHlwZUlzQXJyYXkgJiYgJHR5cGVTY2hlbWEubGVuZ3RoID09IDEpIHtcbiAgICAkdHlwZVNjaGVtYSA9ICR0eXBlU2NoZW1hWzBdO1xuICAgICR0eXBlSXNBcnJheSA9IGZhbHNlO1xuICB9XG4gIGlmIChpdC5zY2hlbWEuJHJlZiAmJiAkcmVmS2V5d29yZHMpIHtcbiAgICBpZiAoaXQub3B0cy5leHRlbmRSZWZzID09ICdmYWlsJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCckcmVmOiB2YWxpZGF0aW9uIGtleXdvcmRzIHVzZWQgaW4gc2NoZW1hIGF0IHBhdGggXCInICsgaXQuZXJyU2NoZW1hUGF0aCArICdcIiAoc2VlIG9wdGlvbiBleHRlbmRSZWZzKScpO1xuICAgIH0gZWxzZSBpZiAoaXQub3B0cy5leHRlbmRSZWZzICE9PSB0cnVlKSB7XG4gICAgICAkcmVmS2V5d29yZHMgPSBmYWxzZTtcbiAgICAgIGl0LmxvZ2dlci53YXJuKCckcmVmOiBrZXl3b3JkcyBpZ25vcmVkIGluIHNjaGVtYSBhdCBwYXRoIFwiJyArIGl0LmVyclNjaGVtYVBhdGggKyAnXCInKTtcbiAgICB9XG4gIH1cbiAgaWYgKGl0LnNjaGVtYS4kY29tbWVudCAmJiBpdC5vcHRzLiRjb21tZW50KSB7XG4gICAgb3V0ICs9ICcgJyArIChpdC5SVUxFUy5hbGwuJGNvbW1lbnQuY29kZShpdCwgJyRjb21tZW50JykpO1xuICB9XG4gIGlmICgkdHlwZVNjaGVtYSkge1xuICAgIGlmIChpdC5vcHRzLmNvZXJjZVR5cGVzKSB7XG4gICAgICB2YXIgJGNvZXJjZVRvVHlwZXMgPSBpdC51dGlsLmNvZXJjZVRvVHlwZXMoaXQub3B0cy5jb2VyY2VUeXBlcywgJHR5cGVTY2hlbWEpO1xuICAgIH1cbiAgICB2YXIgJHJ1bGVzR3JvdXAgPSBpdC5SVUxFUy50eXBlc1skdHlwZVNjaGVtYV07XG4gICAgaWYgKCRjb2VyY2VUb1R5cGVzIHx8ICR0eXBlSXNBcnJheSB8fCAkcnVsZXNHcm91cCA9PT0gdHJ1ZSB8fCAoJHJ1bGVzR3JvdXAgJiYgISRzaG91bGRVc2VHcm91cCgkcnVsZXNHcm91cCkpKSB7XG4gICAgICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgJy50eXBlJyxcbiAgICAgICAgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy90eXBlJztcbiAgICAgIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyAnLnR5cGUnLFxuICAgICAgICAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnL3R5cGUnLFxuICAgICAgICAkbWV0aG9kID0gJHR5cGVJc0FycmF5ID8gJ2NoZWNrRGF0YVR5cGVzJyA6ICdjaGVja0RhdGFUeXBlJztcbiAgICAgIG91dCArPSAnIGlmICgnICsgKGl0LnV0aWxbJG1ldGhvZF0oJHR5cGVTY2hlbWEsICRkYXRhLCB0cnVlKSkgKyAnKSB7ICc7XG4gICAgICBpZiAoJGNvZXJjZVRvVHlwZXMpIHtcbiAgICAgICAgdmFyICRkYXRhVHlwZSA9ICdkYXRhVHlwZScgKyAkbHZsLFxuICAgICAgICAgICRjb2VyY2VkID0gJ2NvZXJjZWQnICsgJGx2bDtcbiAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJGRhdGFUeXBlKSArICcgPSB0eXBlb2YgJyArICgkZGF0YSkgKyAnOyAnO1xuICAgICAgICBpZiAoaXQub3B0cy5jb2VyY2VUeXBlcyA9PSAnYXJyYXknKSB7XG4gICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJGRhdGFUeXBlKSArICcgPT0gXFwnb2JqZWN0XFwnICYmIEFycmF5LmlzQXJyYXkoJyArICgkZGF0YSkgKyAnKSkgJyArICgkZGF0YVR5cGUpICsgJyA9IFxcJ2FycmF5XFwnOyAnO1xuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnIHZhciAnICsgKCRjb2VyY2VkKSArICcgPSB1bmRlZmluZWQ7ICc7XG4gICAgICAgIHZhciAkYnJhY2VzQ29lcmNpb24gPSAnJztcbiAgICAgICAgdmFyIGFycjEgPSAkY29lcmNlVG9UeXBlcztcbiAgICAgICAgaWYgKGFycjEpIHtcbiAgICAgICAgICB2YXIgJHR5cGUsICRpID0gLTEsXG4gICAgICAgICAgICBsMSA9IGFycjEubGVuZ3RoIC0gMTtcbiAgICAgICAgICB3aGlsZSAoJGkgPCBsMSkge1xuICAgICAgICAgICAgJHR5cGUgPSBhcnIxWyRpICs9IDFdO1xuICAgICAgICAgICAgaWYgKCRpKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIGlmICgnICsgKCRjb2VyY2VkKSArICcgPT09IHVuZGVmaW5lZCkgeyAnO1xuICAgICAgICAgICAgICAkYnJhY2VzQ29lcmNpb24gKz0gJ30nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0Lm9wdHMuY29lcmNlVHlwZXMgPT0gJ2FycmF5JyAmJiAkdHlwZSAhPSAnYXJyYXknKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIGlmICgnICsgKCRkYXRhVHlwZSkgKyAnID09IFxcJ2FycmF5XFwnICYmICcgKyAoJGRhdGEpICsgJy5sZW5ndGggPT0gMSkgeyAnICsgKCRjb2VyY2VkKSArICcgPSAnICsgKCRkYXRhKSArICcgPSAnICsgKCRkYXRhKSArICdbMF07ICcgKyAoJGRhdGFUeXBlKSArICcgPSB0eXBlb2YgJyArICgkZGF0YSkgKyAnOyAgfSAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCR0eXBlID09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIGlmICgnICsgKCRkYXRhVHlwZSkgKyAnID09IFxcJ251bWJlclxcJyB8fCAnICsgKCRkYXRhVHlwZSkgKyAnID09IFxcJ2Jvb2xlYW5cXCcpICcgKyAoJGNvZXJjZWQpICsgJyA9IFxcJ1xcJyArICcgKyAoJGRhdGEpICsgJzsgZWxzZSBpZiAoJyArICgkZGF0YSkgKyAnID09PSBudWxsKSAnICsgKCRjb2VyY2VkKSArICcgPSBcXCdcXCc7ICc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCR0eXBlID09ICdudW1iZXInIHx8ICR0eXBlID09ICdpbnRlZ2VyJykge1xuICAgICAgICAgICAgICBvdXQgKz0gJyBpZiAoJyArICgkZGF0YVR5cGUpICsgJyA9PSBcXCdib29sZWFuXFwnIHx8ICcgKyAoJGRhdGEpICsgJyA9PT0gbnVsbCB8fCAoJyArICgkZGF0YVR5cGUpICsgJyA9PSBcXCdzdHJpbmdcXCcgJiYgJyArICgkZGF0YSkgKyAnICYmICcgKyAoJGRhdGEpICsgJyA9PSArJyArICgkZGF0YSkgKyAnICc7XG4gICAgICAgICAgICAgIGlmICgkdHlwZSA9PSAnaW50ZWdlcicpIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyAmJiAhKCcgKyAoJGRhdGEpICsgJyAlIDEpJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBvdXQgKz0gJykpICcgKyAoJGNvZXJjZWQpICsgJyA9ICsnICsgKCRkYXRhKSArICc7ICc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCR0eXBlID09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICBvdXQgKz0gJyBpZiAoJyArICgkZGF0YSkgKyAnID09PSBcXCdmYWxzZVxcJyB8fCAnICsgKCRkYXRhKSArICcgPT09IDAgfHwgJyArICgkZGF0YSkgKyAnID09PSBudWxsKSAnICsgKCRjb2VyY2VkKSArICcgPSBmYWxzZTsgZWxzZSBpZiAoJyArICgkZGF0YSkgKyAnID09PSBcXCd0cnVlXFwnIHx8ICcgKyAoJGRhdGEpICsgJyA9PT0gMSkgJyArICgkY29lcmNlZCkgKyAnID0gdHJ1ZTsgJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJHR5cGUgPT0gJ251bGwnKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIGlmICgnICsgKCRkYXRhKSArICcgPT09IFxcJ1xcJyB8fCAnICsgKCRkYXRhKSArICcgPT09IDAgfHwgJyArICgkZGF0YSkgKyAnID09PSBmYWxzZSkgJyArICgkY29lcmNlZCkgKyAnID0gbnVsbDsgJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXQub3B0cy5jb2VyY2VUeXBlcyA9PSAnYXJyYXknICYmICR0eXBlID09ICdhcnJheScpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJGRhdGFUeXBlKSArICcgPT0gXFwnc3RyaW5nXFwnIHx8ICcgKyAoJGRhdGFUeXBlKSArICcgPT0gXFwnbnVtYmVyXFwnIHx8ICcgKyAoJGRhdGFUeXBlKSArICcgPT0gXFwnYm9vbGVhblxcJyB8fCAnICsgKCRkYXRhKSArICcgPT0gbnVsbCkgJyArICgkY29lcmNlZCkgKyAnID0gWycgKyAoJGRhdGEpICsgJ107ICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnICcgKyAoJGJyYWNlc0NvZXJjaW9uKSArICcgaWYgKCcgKyAoJGNvZXJjZWQpICsgJyA9PT0gdW5kZWZpbmVkKSB7ICAgJztcbiAgICAgICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICAgICAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCRlcnJvcktleXdvcmQgfHwgJ3R5cGUnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IHR5cGU6IFxcJyc7XG4gICAgICAgICAgaWYgKCR0eXBlSXNBcnJheSkge1xuICAgICAgICAgICAgb3V0ICs9ICcnICsgKCR0eXBlU2NoZW1hLmpvaW4oXCIsXCIpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ICs9ICcnICsgKCR0eXBlU2NoZW1hKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICdcXCcgfSAnO1xuICAgICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgYmUgJztcbiAgICAgICAgICAgIGlmICgkdHlwZUlzQXJyYXkpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcnICsgKCR0eXBlU2NoZW1hLmpvaW4oXCIsXCIpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG91dCArPSAnJyArICgkdHlwZVNjaGVtYSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXQgKz0gJ1xcJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnIH0gZWxzZSB7ICAnO1xuICAgICAgICB2YXIgJHBhcmVudERhdGEgPSAkZGF0YUx2bCA/ICdkYXRhJyArICgoJGRhdGFMdmwgLSAxKSB8fCAnJykgOiAncGFyZW50RGF0YScsXG4gICAgICAgICAgJHBhcmVudERhdGFQcm9wZXJ0eSA9ICRkYXRhTHZsID8gaXQuZGF0YVBhdGhBcnJbJGRhdGFMdmxdIDogJ3BhcmVudERhdGFQcm9wZXJ0eSc7XG4gICAgICAgIG91dCArPSAnICcgKyAoJGRhdGEpICsgJyA9ICcgKyAoJGNvZXJjZWQpICsgJzsgJztcbiAgICAgICAgaWYgKCEkZGF0YUx2bCkge1xuICAgICAgICAgIG91dCArPSAnaWYgKCcgKyAoJHBhcmVudERhdGEpICsgJyAhPT0gdW5kZWZpbmVkKSc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgJyArICgkcGFyZW50RGF0YSkgKyAnWycgKyAoJHBhcmVudERhdGFQcm9wZXJ0eSkgKyAnXSA9ICcgKyAoJGNvZXJjZWQpICsgJzsgfSAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICAgICAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCRlcnJvcktleXdvcmQgfHwgJ3R5cGUnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IHR5cGU6IFxcJyc7XG4gICAgICAgICAgaWYgKCR0eXBlSXNBcnJheSkge1xuICAgICAgICAgICAgb3V0ICs9ICcnICsgKCR0eXBlU2NoZW1hLmpvaW4oXCIsXCIpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ICs9ICcnICsgKCR0eXBlU2NoZW1hKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICdcXCcgfSAnO1xuICAgICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgYmUgJztcbiAgICAgICAgICAgIGlmICgkdHlwZUlzQXJyYXkpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcnICsgKCR0eXBlU2NoZW1hLmpvaW4oXCIsXCIpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG91dCArPSAnJyArICgkdHlwZVNjaGVtYSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXQgKz0gJ1xcJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyB9ICc7XG4gICAgfVxuICB9XG4gIGlmIChpdC5zY2hlbWEuJHJlZiAmJiAhJHJlZktleXdvcmRzKSB7XG4gICAgb3V0ICs9ICcgJyArIChpdC5SVUxFUy5hbGwuJHJlZi5jb2RlKGl0LCAnJHJlZicpKSArICcgJztcbiAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgb3V0ICs9ICcgfSBpZiAoZXJyb3JzID09PSAnO1xuICAgICAgaWYgKCR0b3ApIHtcbiAgICAgICAgb3V0ICs9ICcwJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnZXJyc18nICsgKCRsdmwpO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcpIHsgJztcbiAgICAgICRjbG9zaW5nQnJhY2VzMiArPSAnfSc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBhcnIyID0gaXQuUlVMRVM7XG4gICAgaWYgKGFycjIpIHtcbiAgICAgIHZhciAkcnVsZXNHcm91cCwgaTIgPSAtMSxcbiAgICAgICAgbDIgPSBhcnIyLmxlbmd0aCAtIDE7XG4gICAgICB3aGlsZSAoaTIgPCBsMikge1xuICAgICAgICAkcnVsZXNHcm91cCA9IGFycjJbaTIgKz0gMV07XG4gICAgICAgIGlmICgkc2hvdWxkVXNlR3JvdXAoJHJ1bGVzR3JvdXApKSB7XG4gICAgICAgICAgaWYgKCRydWxlc0dyb3VwLnR5cGUpIHtcbiAgICAgICAgICAgIG91dCArPSAnIGlmICgnICsgKGl0LnV0aWwuY2hlY2tEYXRhVHlwZSgkcnVsZXNHcm91cC50eXBlLCAkZGF0YSkpICsgJykgeyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXQub3B0cy51c2VEZWZhdWx0cykge1xuICAgICAgICAgICAgaWYgKCRydWxlc0dyb3VwLnR5cGUgPT0gJ29iamVjdCcgJiYgaXQuc2NoZW1hLnByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWEucHJvcGVydGllcyxcbiAgICAgICAgICAgICAgICAkc2NoZW1hS2V5cyA9IE9iamVjdC5rZXlzKCRzY2hlbWEpO1xuICAgICAgICAgICAgICB2YXIgYXJyMyA9ICRzY2hlbWFLZXlzO1xuICAgICAgICAgICAgICBpZiAoYXJyMykge1xuICAgICAgICAgICAgICAgIHZhciAkcHJvcGVydHlLZXksIGkzID0gLTEsXG4gICAgICAgICAgICAgICAgICBsMyA9IGFycjMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICB3aGlsZSAoaTMgPCBsMykge1xuICAgICAgICAgICAgICAgICAgJHByb3BlcnR5S2V5ID0gYXJyM1tpMyArPSAxXTtcbiAgICAgICAgICAgICAgICAgIHZhciAkc2NoID0gJHNjaGVtYVskcHJvcGVydHlLZXldO1xuICAgICAgICAgICAgICAgICAgaWYgKCRzY2guZGVmYXVsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciAkcGFzc0RhdGEgPSAkZGF0YSArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJHByb3BlcnR5S2V5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0LmNvbXBvc2l0ZVJ1bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoaXQub3B0cy5zdHJpY3REZWZhdWx0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyICRkZWZhdWx0TXNnID0gJ2RlZmF1bHQgaXMgaWdub3JlZCBmb3I6ICcgKyAkcGFzc0RhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXQub3B0cy5zdHJpY3REZWZhdWx0cyA9PT0gJ2xvZycpIGl0LmxvZ2dlci53YXJuKCRkZWZhdWx0TXNnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgdGhyb3cgbmV3IEVycm9yKCRkZWZhdWx0TXNnKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJHBhc3NEYXRhKSArICcgPT09IHVuZGVmaW5lZCAnO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChpdC5vcHRzLnVzZURlZmF1bHRzID09ICdlbXB0eScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dCArPSAnIHx8ICcgKyAoJHBhc3NEYXRhKSArICcgPT09IG51bGwgfHwgJyArICgkcGFzc0RhdGEpICsgJyA9PT0gXFwnXFwnICc7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIG91dCArPSAnICkgJyArICgkcGFzc0RhdGEpICsgJyA9ICc7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMudXNlRGVmYXVsdHMgPT0gJ3NoYXJlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dCArPSAnICcgKyAoaXQudXNlRGVmYXVsdCgkc2NoLmRlZmF1bHQpKSArICcgJztcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgJyArIChKU09OLnN0cmluZ2lmeSgkc2NoLmRlZmF1bHQpKSArICcgJztcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICc7ICc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJHJ1bGVzR3JvdXAudHlwZSA9PSAnYXJyYXknICYmIEFycmF5LmlzQXJyYXkoaXQuc2NoZW1hLml0ZW1zKSkge1xuICAgICAgICAgICAgICB2YXIgYXJyNCA9IGl0LnNjaGVtYS5pdGVtcztcbiAgICAgICAgICAgICAgaWYgKGFycjQpIHtcbiAgICAgICAgICAgICAgICB2YXIgJHNjaCwgJGkgPSAtMSxcbiAgICAgICAgICAgICAgICAgIGw0ID0gYXJyNC5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgIHdoaWxlICgkaSA8IGw0KSB7XG4gICAgICAgICAgICAgICAgICAkc2NoID0gYXJyNFskaSArPSAxXTtcbiAgICAgICAgICAgICAgICAgIGlmICgkc2NoLmRlZmF1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgJHBhc3NEYXRhID0gJGRhdGEgKyAnWycgKyAkaSArICddJztcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0LmNvbXBvc2l0ZVJ1bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoaXQub3B0cy5zdHJpY3REZWZhdWx0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyICRkZWZhdWx0TXNnID0gJ2RlZmF1bHQgaXMgaWdub3JlZCBmb3I6ICcgKyAkcGFzc0RhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXQub3B0cy5zdHJpY3REZWZhdWx0cyA9PT0gJ2xvZycpIGl0LmxvZ2dlci53YXJuKCRkZWZhdWx0TXNnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgdGhyb3cgbmV3IEVycm9yKCRkZWZhdWx0TXNnKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJHBhc3NEYXRhKSArICcgPT09IHVuZGVmaW5lZCAnO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChpdC5vcHRzLnVzZURlZmF1bHRzID09ICdlbXB0eScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dCArPSAnIHx8ICcgKyAoJHBhc3NEYXRhKSArICcgPT09IG51bGwgfHwgJyArICgkcGFzc0RhdGEpICsgJyA9PT0gXFwnXFwnICc7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIG91dCArPSAnICkgJyArICgkcGFzc0RhdGEpICsgJyA9ICc7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMudXNlRGVmYXVsdHMgPT0gJ3NoYXJlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dCArPSAnICcgKyAoaXQudXNlRGVmYXVsdCgkc2NoLmRlZmF1bHQpKSArICcgJztcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgJyArIChKU09OLnN0cmluZ2lmeSgkc2NoLmRlZmF1bHQpKSArICcgJztcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICc7ICc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIGFycjUgPSAkcnVsZXNHcm91cC5ydWxlcztcbiAgICAgICAgICBpZiAoYXJyNSkge1xuICAgICAgICAgICAgdmFyICRydWxlLCBpNSA9IC0xLFxuICAgICAgICAgICAgICBsNSA9IGFycjUubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHdoaWxlIChpNSA8IGw1KSB7XG4gICAgICAgICAgICAgICRydWxlID0gYXJyNVtpNSArPSAxXTtcbiAgICAgICAgICAgICAgaWYgKCRzaG91bGRVc2VSdWxlKCRydWxlKSkge1xuICAgICAgICAgICAgICAgIHZhciAkY29kZSA9ICRydWxlLmNvZGUoaXQsICRydWxlLmtleXdvcmQsICRydWxlc0dyb3VwLnR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICgkY29kZSkge1xuICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgJyArICgkY29kZSkgKyAnICc7XG4gICAgICAgICAgICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAkY2xvc2luZ0JyYWNlczEgKz0gJ30nO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgICAgb3V0ICs9ICcgJyArICgkY2xvc2luZ0JyYWNlczEpICsgJyAnO1xuICAgICAgICAgICAgJGNsb3NpbmdCcmFjZXMxID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgkcnVsZXNHcm91cC50eXBlKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgICAgICBpZiAoJHR5cGVTY2hlbWEgJiYgJHR5cGVTY2hlbWEgPT09ICRydWxlc0dyb3VwLnR5cGUgJiYgISRjb2VyY2VUb1R5cGVzKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICAgICAgICAgICAgICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgJy50eXBlJyxcbiAgICAgICAgICAgICAgICAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnL3R5cGUnO1xuICAgICAgICAgICAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgICAgICAgICAgICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICAgICAgICAgICAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJGVycm9yS2V5d29yZCB8fCAndHlwZScpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgdHlwZTogXFwnJztcbiAgICAgICAgICAgICAgICBpZiAoJHR5cGVJc0FycmF5KSB7XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJycgKyAoJHR5cGVTY2hlbWEuam9pbihcIixcIikpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJycgKyAoJHR5cGVTY2hlbWEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvdXQgKz0gJ1xcJyB9ICc7XG4gICAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBiZSAnO1xuICAgICAgICAgICAgICAgICAgaWYgKCR0eXBlSXNBcnJheSkge1xuICAgICAgICAgICAgICAgICAgICBvdXQgKz0gJycgKyAoJHR5cGVTY2hlbWEuam9pbihcIixcIikpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICcnICsgKCR0eXBlU2NoZW1hKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIG91dCArPSAnXFwnICc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyB7fSAnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHZhciBfX2VyciA9IG91dDtcbiAgICAgICAgICAgICAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgICAgICAgICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgICAgb3V0ICs9ICcgaWYgKGVycm9ycyA9PT0gJztcbiAgICAgICAgICAgIGlmICgkdG9wKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnMCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvdXQgKz0gJ2VycnNfJyArICgkbHZsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dCArPSAnKSB7ICc7XG4gICAgICAgICAgICAkY2xvc2luZ0JyYWNlczIgKz0gJ30nO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgIG91dCArPSAnICcgKyAoJGNsb3NpbmdCcmFjZXMyKSArICcgJztcbiAgfVxuICBpZiAoJHRvcCkge1xuICAgIGlmICgkYXN5bmMpIHtcbiAgICAgIG91dCArPSAnIGlmIChlcnJvcnMgPT09IDApIHJldHVybiBkYXRhOyAgICAgICAgICAgJztcbiAgICAgIG91dCArPSAnIGVsc2UgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcih2RXJyb3JzKTsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gdkVycm9yczsgJztcbiAgICAgIG91dCArPSAnIHJldHVybiBlcnJvcnMgPT09IDA7ICAgICAgICc7XG4gICAgfVxuICAgIG91dCArPSAnIH07IHJldHVybiB2YWxpZGF0ZTsnO1xuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIHZhciAnICsgKCR2YWxpZCkgKyAnID0gZXJyb3JzID09PSBlcnJzXycgKyAoJGx2bCkgKyAnOyc7XG4gIH1cbiAgb3V0ID0gaXQudXRpbC5jbGVhblVwQ29kZShvdXQpO1xuICBpZiAoJHRvcCkge1xuICAgIG91dCA9IGl0LnV0aWwuZmluYWxDbGVhblVwQ29kZShvdXQsICRhc3luYyk7XG4gIH1cblxuICBmdW5jdGlvbiAkc2hvdWxkVXNlR3JvdXAoJHJ1bGVzR3JvdXApIHtcbiAgICB2YXIgcnVsZXMgPSAkcnVsZXNHcm91cC5ydWxlcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKVxuICAgICAgaWYgKCRzaG91bGRVc2VSdWxlKHJ1bGVzW2ldKSkgcmV0dXJuIHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiAkc2hvdWxkVXNlUnVsZSgkcnVsZSkge1xuICAgIHJldHVybiBpdC5zY2hlbWFbJHJ1bGUua2V5d29yZF0gIT09IHVuZGVmaW5lZCB8fCAoJHJ1bGUuaW1wbGVtZW50cyAmJiAkcnVsZUltcGxlbWVudHNTb21lS2V5d29yZCgkcnVsZSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gJHJ1bGVJbXBsZW1lbnRzU29tZUtleXdvcmQoJHJ1bGUpIHtcbiAgICB2YXIgaW1wbCA9ICRydWxlLmltcGxlbWVudHM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbXBsLmxlbmd0aDsgaSsrKVxuICAgICAgaWYgKGl0LnNjaGVtYVtpbXBsW2ldXSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVzb2x2ZSA9IHJlcXVpcmUoJy4vcmVzb2x2ZScpXG4gICwgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpXG4gICwgZXJyb3JDbGFzc2VzID0gcmVxdWlyZSgnLi9lcnJvcl9jbGFzc2VzJylcbiAgLCBzdGFibGVTdHJpbmdpZnkgPSByZXF1aXJlKCdmYXN0LWpzb24tc3RhYmxlLXN0cmluZ2lmeScpO1xuXG52YXIgdmFsaWRhdGVHZW5lcmF0b3IgPSByZXF1aXJlKCcuLi9kb3Rqcy92YWxpZGF0ZScpO1xuXG4vKipcbiAqIEZ1bmN0aW9ucyBiZWxvdyBhcmUgdXNlZCBpbnNpZGUgY29tcGlsZWQgdmFsaWRhdGlvbnMgZnVuY3Rpb25cbiAqL1xuXG52YXIgdWNzMmxlbmd0aCA9IHV0aWwudWNzMmxlbmd0aDtcbnZhciBlcXVhbCA9IHJlcXVpcmUoJ2Zhc3QtZGVlcC1lcXVhbCcpO1xuXG4vLyB0aGlzIGVycm9yIGlzIHRocm93biBieSBhc3luYyBzY2hlbWFzIHRvIHJldHVybiB2YWxpZGF0aW9uIGVycm9ycyB2aWEgZXhjZXB0aW9uXG52YXIgVmFsaWRhdGlvbkVycm9yID0gZXJyb3JDbGFzc2VzLlZhbGlkYXRpb247XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcGlsZTtcblxuXG4vKipcbiAqIENvbXBpbGVzIHNjaGVtYSB0byB2YWxpZGF0aW9uIGZ1bmN0aW9uXG4gKiBAdGhpcyAgIEFqdlxuICogQHBhcmFtICB7T2JqZWN0fSBzY2hlbWEgc2NoZW1hIG9iamVjdFxuICogQHBhcmFtICB7T2JqZWN0fSByb290IG9iamVjdCB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSByb290IHNjaGVtYSBmb3IgdGhpcyBzY2hlbWFcbiAqIEBwYXJhbSAge09iamVjdH0gbG9jYWxSZWZzIHRoZSBoYXNoIG9mIGxvY2FsIHJlZmVyZW5jZXMgaW5zaWRlIHRoZSBzY2hlbWEgKGNyZWF0ZWQgYnkgcmVzb2x2ZS5pZCksIHVzZWQgZm9yIGlubGluZSByZXNvbHV0aW9uXG4gKiBAcGFyYW0gIHtTdHJpbmd9IGJhc2VJZCBiYXNlIElEIGZvciBJRHMgaW4gdGhlIHNjaGVtYVxuICogQHJldHVybiB7RnVuY3Rpb259IHZhbGlkYXRpb24gZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gY29tcGlsZShzY2hlbWEsIHJvb3QsIGxvY2FsUmVmcywgYmFzZUlkKSB7XG4gIC8qIGpzaGludCB2YWxpZHRoaXM6IHRydWUsIGV2aWw6IHRydWUgKi9cbiAgLyogZXNsaW50IG5vLXNoYWRvdzogMCAqL1xuICB2YXIgc2VsZiA9IHRoaXNcbiAgICAsIG9wdHMgPSB0aGlzLl9vcHRzXG4gICAgLCByZWZWYWwgPSBbIHVuZGVmaW5lZCBdXG4gICAgLCByZWZzID0ge31cbiAgICAsIHBhdHRlcm5zID0gW11cbiAgICAsIHBhdHRlcm5zSGFzaCA9IHt9XG4gICAgLCBkZWZhdWx0cyA9IFtdXG4gICAgLCBkZWZhdWx0c0hhc2ggPSB7fVxuICAgICwgY3VzdG9tUnVsZXMgPSBbXTtcblxuICByb290ID0gcm9vdCB8fCB7IHNjaGVtYTogc2NoZW1hLCByZWZWYWw6IHJlZlZhbCwgcmVmczogcmVmcyB9O1xuXG4gIHZhciBjID0gY2hlY2tDb21waWxpbmcuY2FsbCh0aGlzLCBzY2hlbWEsIHJvb3QsIGJhc2VJZCk7XG4gIHZhciBjb21waWxhdGlvbiA9IHRoaXMuX2NvbXBpbGF0aW9uc1tjLmluZGV4XTtcbiAgaWYgKGMuY29tcGlsaW5nKSByZXR1cm4gKGNvbXBpbGF0aW9uLmNhbGxWYWxpZGF0ZSA9IGNhbGxWYWxpZGF0ZSk7XG5cbiAgdmFyIGZvcm1hdHMgPSB0aGlzLl9mb3JtYXRzO1xuICB2YXIgUlVMRVMgPSB0aGlzLlJVTEVTO1xuXG4gIHRyeSB7XG4gICAgdmFyIHYgPSBsb2NhbENvbXBpbGUoc2NoZW1hLCByb290LCBsb2NhbFJlZnMsIGJhc2VJZCk7XG4gICAgY29tcGlsYXRpb24udmFsaWRhdGUgPSB2O1xuICAgIHZhciBjdiA9IGNvbXBpbGF0aW9uLmNhbGxWYWxpZGF0ZTtcbiAgICBpZiAoY3YpIHtcbiAgICAgIGN2LnNjaGVtYSA9IHYuc2NoZW1hO1xuICAgICAgY3YuZXJyb3JzID0gbnVsbDtcbiAgICAgIGN2LnJlZnMgPSB2LnJlZnM7XG4gICAgICBjdi5yZWZWYWwgPSB2LnJlZlZhbDtcbiAgICAgIGN2LnJvb3QgPSB2LnJvb3Q7XG4gICAgICBjdi4kYXN5bmMgPSB2LiRhc3luYztcbiAgICAgIGlmIChvcHRzLnNvdXJjZUNvZGUpIGN2LnNvdXJjZSA9IHYuc291cmNlO1xuICAgIH1cbiAgICByZXR1cm4gdjtcbiAgfSBmaW5hbGx5IHtcbiAgICBlbmRDb21waWxpbmcuY2FsbCh0aGlzLCBzY2hlbWEsIHJvb3QsIGJhc2VJZCk7XG4gIH1cblxuICAvKiBAdGhpcyAgIHsqfSAtIGN1c3RvbSBjb250ZXh0LCBzZWUgcGFzc0NvbnRleHQgb3B0aW9uICovXG4gIGZ1bmN0aW9uIGNhbGxWYWxpZGF0ZSgpIHtcbiAgICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlICovXG4gICAgdmFyIHZhbGlkYXRlID0gY29tcGlsYXRpb24udmFsaWRhdGU7XG4gICAgdmFyIHJlc3VsdCA9IHZhbGlkYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgY2FsbFZhbGlkYXRlLmVycm9ycyA9IHZhbGlkYXRlLmVycm9ycztcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gbG9jYWxDb21waWxlKF9zY2hlbWEsIF9yb290LCBsb2NhbFJlZnMsIGJhc2VJZCkge1xuICAgIHZhciBpc1Jvb3QgPSAhX3Jvb3QgfHwgKF9yb290ICYmIF9yb290LnNjaGVtYSA9PSBfc2NoZW1hKTtcbiAgICBpZiAoX3Jvb3Quc2NoZW1hICE9IHJvb3Quc2NoZW1hKVxuICAgICAgcmV0dXJuIGNvbXBpbGUuY2FsbChzZWxmLCBfc2NoZW1hLCBfcm9vdCwgbG9jYWxSZWZzLCBiYXNlSWQpO1xuXG4gICAgdmFyICRhc3luYyA9IF9zY2hlbWEuJGFzeW5jID09PSB0cnVlO1xuXG4gICAgdmFyIHNvdXJjZUNvZGUgPSB2YWxpZGF0ZUdlbmVyYXRvcih7XG4gICAgICBpc1RvcDogdHJ1ZSxcbiAgICAgIHNjaGVtYTogX3NjaGVtYSxcbiAgICAgIGlzUm9vdDogaXNSb290LFxuICAgICAgYmFzZUlkOiBiYXNlSWQsXG4gICAgICByb290OiBfcm9vdCxcbiAgICAgIHNjaGVtYVBhdGg6ICcnLFxuICAgICAgZXJyU2NoZW1hUGF0aDogJyMnLFxuICAgICAgZXJyb3JQYXRoOiAnXCJcIicsXG4gICAgICBNaXNzaW5nUmVmRXJyb3I6IGVycm9yQ2xhc3Nlcy5NaXNzaW5nUmVmLFxuICAgICAgUlVMRVM6IFJVTEVTLFxuICAgICAgdmFsaWRhdGU6IHZhbGlkYXRlR2VuZXJhdG9yLFxuICAgICAgdXRpbDogdXRpbCxcbiAgICAgIHJlc29sdmU6IHJlc29sdmUsXG4gICAgICByZXNvbHZlUmVmOiByZXNvbHZlUmVmLFxuICAgICAgdXNlUGF0dGVybjogdXNlUGF0dGVybixcbiAgICAgIHVzZURlZmF1bHQ6IHVzZURlZmF1bHQsXG4gICAgICB1c2VDdXN0b21SdWxlOiB1c2VDdXN0b21SdWxlLFxuICAgICAgb3B0czogb3B0cyxcbiAgICAgIGZvcm1hdHM6IGZvcm1hdHMsXG4gICAgICBsb2dnZXI6IHNlbGYubG9nZ2VyLFxuICAgICAgc2VsZjogc2VsZlxuICAgIH0pO1xuXG4gICAgc291cmNlQ29kZSA9IHZhcnMocmVmVmFsLCByZWZWYWxDb2RlKSArIHZhcnMocGF0dGVybnMsIHBhdHRlcm5Db2RlKVxuICAgICAgICAgICAgICAgICAgICsgdmFycyhkZWZhdWx0cywgZGVmYXVsdENvZGUpICsgdmFycyhjdXN0b21SdWxlcywgY3VzdG9tUnVsZUNvZGUpXG4gICAgICAgICAgICAgICAgICAgKyBzb3VyY2VDb2RlO1xuXG4gICAgaWYgKG9wdHMucHJvY2Vzc0NvZGUpIHNvdXJjZUNvZGUgPSBvcHRzLnByb2Nlc3NDb2RlKHNvdXJjZUNvZGUpO1xuICAgIC8vIGNvbnNvbGUubG9nKCdcXG5cXG5cXG4gKioqIFxcbicsIEpTT04uc3RyaW5naWZ5KHNvdXJjZUNvZGUpKTtcbiAgICB2YXIgdmFsaWRhdGU7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBtYWtlVmFsaWRhdGUgPSBuZXcgRnVuY3Rpb24oXG4gICAgICAgICdzZWxmJyxcbiAgICAgICAgJ1JVTEVTJyxcbiAgICAgICAgJ2Zvcm1hdHMnLFxuICAgICAgICAncm9vdCcsXG4gICAgICAgICdyZWZWYWwnLFxuICAgICAgICAnZGVmYXVsdHMnLFxuICAgICAgICAnY3VzdG9tUnVsZXMnLFxuICAgICAgICAnZXF1YWwnLFxuICAgICAgICAndWNzMmxlbmd0aCcsXG4gICAgICAgICdWYWxpZGF0aW9uRXJyb3InLFxuICAgICAgICBzb3VyY2VDb2RlXG4gICAgICApO1xuXG4gICAgICB2YWxpZGF0ZSA9IG1ha2VWYWxpZGF0ZShcbiAgICAgICAgc2VsZixcbiAgICAgICAgUlVMRVMsXG4gICAgICAgIGZvcm1hdHMsXG4gICAgICAgIHJvb3QsXG4gICAgICAgIHJlZlZhbCxcbiAgICAgICAgZGVmYXVsdHMsXG4gICAgICAgIGN1c3RvbVJ1bGVzLFxuICAgICAgICBlcXVhbCxcbiAgICAgICAgdWNzMmxlbmd0aCxcbiAgICAgICAgVmFsaWRhdGlvbkVycm9yXG4gICAgICApO1xuXG4gICAgICByZWZWYWxbMF0gPSB2YWxpZGF0ZTtcbiAgICB9IGNhdGNoKGUpIHtcbiAgICAgIHNlbGYubG9nZ2VyLmVycm9yKCdFcnJvciBjb21waWxpbmcgc2NoZW1hLCBmdW5jdGlvbiBjb2RlOicsIHNvdXJjZUNvZGUpO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZS5zY2hlbWEgPSBfc2NoZW1hO1xuICAgIHZhbGlkYXRlLmVycm9ycyA9IG51bGw7XG4gICAgdmFsaWRhdGUucmVmcyA9IHJlZnM7XG4gICAgdmFsaWRhdGUucmVmVmFsID0gcmVmVmFsO1xuICAgIHZhbGlkYXRlLnJvb3QgPSBpc1Jvb3QgPyB2YWxpZGF0ZSA6IF9yb290O1xuICAgIGlmICgkYXN5bmMpIHZhbGlkYXRlLiRhc3luYyA9IHRydWU7XG4gICAgaWYgKG9wdHMuc291cmNlQ29kZSA9PT0gdHJ1ZSkge1xuICAgICAgdmFsaWRhdGUuc291cmNlID0ge1xuICAgICAgICBjb2RlOiBzb3VyY2VDb2RlLFxuICAgICAgICBwYXR0ZXJuczogcGF0dGVybnMsXG4gICAgICAgIGRlZmF1bHRzOiBkZWZhdWx0c1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGU7XG4gIH1cblxuICBmdW5jdGlvbiByZXNvbHZlUmVmKGJhc2VJZCwgcmVmLCBpc1Jvb3QpIHtcbiAgICByZWYgPSByZXNvbHZlLnVybChiYXNlSWQsIHJlZik7XG4gICAgdmFyIHJlZkluZGV4ID0gcmVmc1tyZWZdO1xuICAgIHZhciBfcmVmVmFsLCByZWZDb2RlO1xuICAgIGlmIChyZWZJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBfcmVmVmFsID0gcmVmVmFsW3JlZkluZGV4XTtcbiAgICAgIHJlZkNvZGUgPSAncmVmVmFsWycgKyByZWZJbmRleCArICddJztcbiAgICAgIHJldHVybiByZXNvbHZlZFJlZihfcmVmVmFsLCByZWZDb2RlKTtcbiAgICB9XG4gICAgaWYgKCFpc1Jvb3QgJiYgcm9vdC5yZWZzKSB7XG4gICAgICB2YXIgcm9vdFJlZklkID0gcm9vdC5yZWZzW3JlZl07XG4gICAgICBpZiAocm9vdFJlZklkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgX3JlZlZhbCA9IHJvb3QucmVmVmFsW3Jvb3RSZWZJZF07XG4gICAgICAgIHJlZkNvZGUgPSBhZGRMb2NhbFJlZihyZWYsIF9yZWZWYWwpO1xuICAgICAgICByZXR1cm4gcmVzb2x2ZWRSZWYoX3JlZlZhbCwgcmVmQ29kZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVmQ29kZSA9IGFkZExvY2FsUmVmKHJlZik7XG4gICAgdmFyIHYgPSByZXNvbHZlLmNhbGwoc2VsZiwgbG9jYWxDb21waWxlLCByb290LCByZWYpO1xuICAgIGlmICh2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciBsb2NhbFNjaGVtYSA9IGxvY2FsUmVmcyAmJiBsb2NhbFJlZnNbcmVmXTtcbiAgICAgIGlmIChsb2NhbFNjaGVtYSkge1xuICAgICAgICB2ID0gcmVzb2x2ZS5pbmxpbmVSZWYobG9jYWxTY2hlbWEsIG9wdHMuaW5saW5lUmVmcylcbiAgICAgICAgICAgID8gbG9jYWxTY2hlbWFcbiAgICAgICAgICAgIDogY29tcGlsZS5jYWxsKHNlbGYsIGxvY2FsU2NoZW1hLCByb290LCBsb2NhbFJlZnMsIGJhc2VJZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVtb3ZlTG9jYWxSZWYocmVmKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVwbGFjZUxvY2FsUmVmKHJlZiwgdik7XG4gICAgICByZXR1cm4gcmVzb2x2ZWRSZWYodiwgcmVmQ29kZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYWRkTG9jYWxSZWYocmVmLCB2KSB7XG4gICAgdmFyIHJlZklkID0gcmVmVmFsLmxlbmd0aDtcbiAgICByZWZWYWxbcmVmSWRdID0gdjtcbiAgICByZWZzW3JlZl0gPSByZWZJZDtcbiAgICByZXR1cm4gJ3JlZlZhbCcgKyByZWZJZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZUxvY2FsUmVmKHJlZikge1xuICAgIGRlbGV0ZSByZWZzW3JlZl07XG4gIH1cblxuICBmdW5jdGlvbiByZXBsYWNlTG9jYWxSZWYocmVmLCB2KSB7XG4gICAgdmFyIHJlZklkID0gcmVmc1tyZWZdO1xuICAgIHJlZlZhbFtyZWZJZF0gPSB2O1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzb2x2ZWRSZWYocmVmVmFsLCBjb2RlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiByZWZWYWwgPT0gJ29iamVjdCcgfHwgdHlwZW9mIHJlZlZhbCA9PSAnYm9vbGVhbidcbiAgICAgICAgICAgID8geyBjb2RlOiBjb2RlLCBzY2hlbWE6IHJlZlZhbCwgaW5saW5lOiB0cnVlIH1cbiAgICAgICAgICAgIDogeyBjb2RlOiBjb2RlLCAkYXN5bmM6IHJlZlZhbCAmJiAhIXJlZlZhbC4kYXN5bmMgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVzZVBhdHRlcm4ocmVnZXhTdHIpIHtcbiAgICB2YXIgaW5kZXggPSBwYXR0ZXJuc0hhc2hbcmVnZXhTdHJdO1xuICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpbmRleCA9IHBhdHRlcm5zSGFzaFtyZWdleFN0cl0gPSBwYXR0ZXJucy5sZW5ndGg7XG4gICAgICBwYXR0ZXJuc1tpbmRleF0gPSByZWdleFN0cjtcbiAgICB9XG4gICAgcmV0dXJuICdwYXR0ZXJuJyArIGluZGV4O1xuICB9XG5cbiAgZnVuY3Rpb24gdXNlRGVmYXVsdCh2YWx1ZSkge1xuICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgIHJldHVybiAnJyArIHZhbHVlO1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgcmV0dXJuIHV0aWwudG9RdW90ZWRTdHJpbmcodmFsdWUpO1xuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gJ251bGwnO1xuICAgICAgICB2YXIgdmFsdWVTdHIgPSBzdGFibGVTdHJpbmdpZnkodmFsdWUpO1xuICAgICAgICB2YXIgaW5kZXggPSBkZWZhdWx0c0hhc2hbdmFsdWVTdHJdO1xuICAgICAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGluZGV4ID0gZGVmYXVsdHNIYXNoW3ZhbHVlU3RyXSA9IGRlZmF1bHRzLmxlbmd0aDtcbiAgICAgICAgICBkZWZhdWx0c1tpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ2RlZmF1bHQnICsgaW5kZXg7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXNlQ3VzdG9tUnVsZShydWxlLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgaXQpIHtcbiAgICBpZiAoc2VsZi5fb3B0cy52YWxpZGF0ZVNjaGVtYSAhPT0gZmFsc2UpIHtcbiAgICAgIHZhciBkZXBzID0gcnVsZS5kZWZpbml0aW9uLmRlcGVuZGVuY2llcztcbiAgICAgIGlmIChkZXBzICYmICFkZXBzLmV2ZXJ5KGZ1bmN0aW9uKGtleXdvcmQpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJlbnRTY2hlbWEsIGtleXdvcmQpO1xuICAgICAgfSkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncGFyZW50IHNjaGVtYSBtdXN0IGhhdmUgYWxsIHJlcXVpcmVkIGtleXdvcmRzOiAnICsgZGVwcy5qb2luKCcsJykpO1xuXG4gICAgICB2YXIgdmFsaWRhdGVTY2hlbWEgPSBydWxlLmRlZmluaXRpb24udmFsaWRhdGVTY2hlbWE7XG4gICAgICBpZiAodmFsaWRhdGVTY2hlbWEpIHtcbiAgICAgICAgdmFyIHZhbGlkID0gdmFsaWRhdGVTY2hlbWEoc2NoZW1hKTtcbiAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgIHZhciBtZXNzYWdlID0gJ2tleXdvcmQgc2NoZW1hIGlzIGludmFsaWQ6ICcgKyBzZWxmLmVycm9yc1RleHQodmFsaWRhdGVTY2hlbWEuZXJyb3JzKTtcbiAgICAgICAgICBpZiAoc2VsZi5fb3B0cy52YWxpZGF0ZVNjaGVtYSA9PSAnbG9nJykgc2VsZi5sb2dnZXIuZXJyb3IobWVzc2FnZSk7XG4gICAgICAgICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgY29tcGlsZSA9IHJ1bGUuZGVmaW5pdGlvbi5jb21waWxlXG4gICAgICAsIGlubGluZSA9IHJ1bGUuZGVmaW5pdGlvbi5pbmxpbmVcbiAgICAgICwgbWFjcm8gPSBydWxlLmRlZmluaXRpb24ubWFjcm87XG5cbiAgICB2YXIgdmFsaWRhdGU7XG4gICAgaWYgKGNvbXBpbGUpIHtcbiAgICAgIHZhbGlkYXRlID0gY29tcGlsZS5jYWxsKHNlbGYsIHNjaGVtYSwgcGFyZW50U2NoZW1hLCBpdCk7XG4gICAgfSBlbHNlIGlmIChtYWNybykge1xuICAgICAgdmFsaWRhdGUgPSBtYWNyby5jYWxsKHNlbGYsIHNjaGVtYSwgcGFyZW50U2NoZW1hLCBpdCk7XG4gICAgICBpZiAob3B0cy52YWxpZGF0ZVNjaGVtYSAhPT0gZmFsc2UpIHNlbGYudmFsaWRhdGVTY2hlbWEodmFsaWRhdGUsIHRydWUpO1xuICAgIH0gZWxzZSBpZiAoaW5saW5lKSB7XG4gICAgICB2YWxpZGF0ZSA9IGlubGluZS5jYWxsKHNlbGYsIGl0LCBydWxlLmtleXdvcmQsIHNjaGVtYSwgcGFyZW50U2NoZW1hKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsaWRhdGUgPSBydWxlLmRlZmluaXRpb24udmFsaWRhdGU7XG4gICAgICBpZiAoIXZhbGlkYXRlKSByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlID09PSB1bmRlZmluZWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2N1c3RvbSBrZXl3b3JkIFwiJyArIHJ1bGUua2V5d29yZCArICdcImZhaWxlZCB0byBjb21waWxlJyk7XG5cbiAgICB2YXIgaW5kZXggPSBjdXN0b21SdWxlcy5sZW5ndGg7XG4gICAgY3VzdG9tUnVsZXNbaW5kZXhdID0gdmFsaWRhdGU7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29kZTogJ2N1c3RvbVJ1bGUnICsgaW5kZXgsXG4gICAgICB2YWxpZGF0ZTogdmFsaWRhdGVcbiAgICB9O1xuICB9XG59XG5cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIHNjaGVtYSBpcyBjdXJyZW50bHkgY29tcGlsZWRcbiAqIEB0aGlzICAgQWp2XG4gKiBAcGFyYW0gIHtPYmplY3R9IHNjaGVtYSBzY2hlbWEgdG8gY29tcGlsZVxuICogQHBhcmFtICB7T2JqZWN0fSByb290IHJvb3Qgb2JqZWN0XG4gKiBAcGFyYW0gIHtTdHJpbmd9IGJhc2VJZCBiYXNlIHNjaGVtYSBJRFxuICogQHJldHVybiB7T2JqZWN0fSBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIFwiaW5kZXhcIiAoY29tcGlsYXRpb24gaW5kZXgpIGFuZCBcImNvbXBpbGluZ1wiIChib29sZWFuKVxuICovXG5mdW5jdGlvbiBjaGVja0NvbXBpbGluZyhzY2hlbWEsIHJvb3QsIGJhc2VJZCkge1xuICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlICovXG4gIHZhciBpbmRleCA9IGNvbXBJbmRleC5jYWxsKHRoaXMsIHNjaGVtYSwgcm9vdCwgYmFzZUlkKTtcbiAgaWYgKGluZGV4ID49IDApIHJldHVybiB7IGluZGV4OiBpbmRleCwgY29tcGlsaW5nOiB0cnVlIH07XG4gIGluZGV4ID0gdGhpcy5fY29tcGlsYXRpb25zLmxlbmd0aDtcbiAgdGhpcy5fY29tcGlsYXRpb25zW2luZGV4XSA9IHtcbiAgICBzY2hlbWE6IHNjaGVtYSxcbiAgICByb290OiByb290LFxuICAgIGJhc2VJZDogYmFzZUlkXG4gIH07XG4gIHJldHVybiB7IGluZGV4OiBpbmRleCwgY29tcGlsaW5nOiBmYWxzZSB9O1xufVxuXG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgc2NoZW1hIGZyb20gdGhlIGN1cnJlbnRseSBjb21waWxlZCBsaXN0XG4gKiBAdGhpcyAgIEFqdlxuICogQHBhcmFtICB7T2JqZWN0fSBzY2hlbWEgc2NoZW1hIHRvIGNvbXBpbGVcbiAqIEBwYXJhbSAge09iamVjdH0gcm9vdCByb290IG9iamVjdFxuICogQHBhcmFtICB7U3RyaW5nfSBiYXNlSWQgYmFzZSBzY2hlbWEgSURcbiAqL1xuZnVuY3Rpb24gZW5kQ29tcGlsaW5nKHNjaGVtYSwgcm9vdCwgYmFzZUlkKSB7XG4gIC8qIGpzaGludCB2YWxpZHRoaXM6IHRydWUgKi9cbiAgdmFyIGkgPSBjb21wSW5kZXguY2FsbCh0aGlzLCBzY2hlbWEsIHJvb3QsIGJhc2VJZCk7XG4gIGlmIChpID49IDApIHRoaXMuX2NvbXBpbGF0aW9ucy5zcGxpY2UoaSwgMSk7XG59XG5cblxuLyoqXG4gKiBJbmRleCBvZiBzY2hlbWEgY29tcGlsYXRpb24gaW4gdGhlIGN1cnJlbnRseSBjb21waWxlZCBsaXN0XG4gKiBAdGhpcyAgIEFqdlxuICogQHBhcmFtICB7T2JqZWN0fSBzY2hlbWEgc2NoZW1hIHRvIGNvbXBpbGVcbiAqIEBwYXJhbSAge09iamVjdH0gcm9vdCByb290IG9iamVjdFxuICogQHBhcmFtICB7U3RyaW5nfSBiYXNlSWQgYmFzZSBzY2hlbWEgSURcbiAqIEByZXR1cm4ge0ludGVnZXJ9IGNvbXBpbGF0aW9uIGluZGV4XG4gKi9cbmZ1bmN0aW9uIGNvbXBJbmRleChzY2hlbWEsIHJvb3QsIGJhc2VJZCkge1xuICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlICovXG4gIGZvciAodmFyIGk9MDsgaTx0aGlzLl9jb21waWxhdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgYyA9IHRoaXMuX2NvbXBpbGF0aW9uc1tpXTtcbiAgICBpZiAoYy5zY2hlbWEgPT0gc2NoZW1hICYmIGMucm9vdCA9PSByb290ICYmIGMuYmFzZUlkID09IGJhc2VJZCkgcmV0dXJuIGk7XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5cbmZ1bmN0aW9uIHBhdHRlcm5Db2RlKGksIHBhdHRlcm5zKSB7XG4gIHJldHVybiAndmFyIHBhdHRlcm4nICsgaSArICcgPSBuZXcgUmVnRXhwKCcgKyB1dGlsLnRvUXVvdGVkU3RyaW5nKHBhdHRlcm5zW2ldKSArICcpOyc7XG59XG5cblxuZnVuY3Rpb24gZGVmYXVsdENvZGUoaSkge1xuICByZXR1cm4gJ3ZhciBkZWZhdWx0JyArIGkgKyAnID0gZGVmYXVsdHNbJyArIGkgKyAnXTsnO1xufVxuXG5cbmZ1bmN0aW9uIHJlZlZhbENvZGUoaSwgcmVmVmFsKSB7XG4gIHJldHVybiByZWZWYWxbaV0gPT09IHVuZGVmaW5lZCA/ICcnIDogJ3ZhciByZWZWYWwnICsgaSArICcgPSByZWZWYWxbJyArIGkgKyAnXTsnO1xufVxuXG5cbmZ1bmN0aW9uIGN1c3RvbVJ1bGVDb2RlKGkpIHtcbiAgcmV0dXJuICd2YXIgY3VzdG9tUnVsZScgKyBpICsgJyA9IGN1c3RvbVJ1bGVzWycgKyBpICsgJ107Jztcbn1cblxuXG5mdW5jdGlvbiB2YXJzKGFyciwgc3RhdGVtZW50KSB7XG4gIGlmICghYXJyLmxlbmd0aCkgcmV0dXJuICcnO1xuICB2YXIgY29kZSA9ICcnO1xuICBmb3IgKHZhciBpPTA7IGk8YXJyLmxlbmd0aDsgaSsrKVxuICAgIGNvZGUgKz0gc3RhdGVtZW50KGksIGFycik7XG4gIHJldHVybiBjb2RlO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5cbnZhciBDYWNoZSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQ2FjaGUoKSB7XG4gIHRoaXMuX2NhY2hlID0ge307XG59O1xuXG5cbkNhY2hlLnByb3RvdHlwZS5wdXQgPSBmdW5jdGlvbiBDYWNoZV9wdXQoa2V5LCB2YWx1ZSkge1xuICB0aGlzLl9jYWNoZVtrZXldID0gdmFsdWU7XG59O1xuXG5cbkNhY2hlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiBDYWNoZV9nZXQoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9jYWNoZVtrZXldO1xufTtcblxuXG5DYWNoZS5wcm90b3R5cGUuZGVsID0gZnVuY3Rpb24gQ2FjaGVfZGVsKGtleSkge1xuICBkZWxldGUgdGhpcy5fY2FjaGVba2V5XTtcbn07XG5cblxuQ2FjaGUucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gQ2FjaGVfY2xlYXIoKSB7XG4gIHRoaXMuX2NhY2hlID0ge307XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuXG52YXIgREFURSA9IC9eKFxcZFxcZFxcZFxcZCktKFxcZFxcZCktKFxcZFxcZCkkLztcbnZhciBEQVlTID0gWzAsMzEsMjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdO1xudmFyIFRJTUUgPSAvXihcXGRcXGQpOihcXGRcXGQpOihcXGRcXGQpKFxcLlxcZCspPyh6fFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/KT8kL2k7XG52YXIgSE9TVE5BTUUgPSAvXig/PS57MSwyNTN9XFwuPyQpW2EtejAtOV0oPzpbYS16MC05LV17MCw2MX1bYS16MC05XSk/KD86XFwuW2EtejAtOV0oPzpbLTAtOWEtel17MCw2MX1bMC05YS16XSk/KSpcXC4/JC9pO1xudmFyIFVSSSA9IC9eKD86W2Etel1bYS16MC05K1xcLS5dKjopKD86XFwvP1xcLyg/Oig/OlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpdfCVbMC05YS1mXXsyfSkqQCk/KD86XFxbKD86KD86KD86KD86WzAtOWEtZl17MSw0fTopezZ9fDo6KD86WzAtOWEtZl17MSw0fTopezV9fCg/OlswLTlhLWZdezEsNH0pPzo6KD86WzAtOWEtZl17MSw0fTopezR9fCg/Oig/OlswLTlhLWZdezEsNH06KXswLDF9WzAtOWEtZl17MSw0fSk/OjooPzpbMC05YS1mXXsxLDR9Oil7M318KD86KD86WzAtOWEtZl17MSw0fTopezAsMn1bMC05YS1mXXsxLDR9KT86Oig/OlswLTlhLWZdezEsNH06KXsyfXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCwzfVswLTlhLWZdezEsNH0pPzo6WzAtOWEtZl17MSw0fTp8KD86KD86WzAtOWEtZl17MSw0fTopezAsNH1bMC05YS1mXXsxLDR9KT86OikoPzpbMC05YS1mXXsxLDR9OlswLTlhLWZdezEsNH18KD86KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KVxcLil7M30oPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCw1fVswLTlhLWZdezEsNH0pPzo6WzAtOWEtZl17MSw0fXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCw2fVswLTlhLWZdezEsNH0pPzo6KXxbVnZdWzAtOWEtZl0rXFwuW2EtejAtOVxcLS5ffiEkJicoKSorLDs9Ol0rKVxcXXwoPzooPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pXFwuKXszfSg/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPyl8KD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9XXwlWzAtOWEtZl17Mn0pKikoPzo6XFxkKik/KD86XFwvKD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkqKSp8XFwvKD86KD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkrKD86XFwvKD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkqKSopP3woPzpbYS16MC05XFwtLl9+ISQmJygpKissOz06QF18JVswLTlhLWZdezJ9KSsoPzpcXC8oPzpbYS16MC05XFwtLl9+ISQmJygpKissOz06QF18JVswLTlhLWZdezJ9KSopKikoPzpcXD8oPzpbYS16MC05XFwtLl9+ISQmJygpKissOz06QC8/XXwlWzAtOWEtZl17Mn0pKik/KD86Iyg/OlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpALz9dfCVbMC05YS1mXXsyfSkqKT8kL2k7XG52YXIgVVJJUkVGID0gL14oPzpbYS16XVthLXowLTkrXFwtLl0qOik/KD86XFwvP1xcLyg/Oig/OlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpdfCVbMC05YS1mXXsyfSkqQCk/KD86XFxbKD86KD86KD86KD86WzAtOWEtZl17MSw0fTopezZ9fDo6KD86WzAtOWEtZl17MSw0fTopezV9fCg/OlswLTlhLWZdezEsNH0pPzo6KD86WzAtOWEtZl17MSw0fTopezR9fCg/Oig/OlswLTlhLWZdezEsNH06KXswLDF9WzAtOWEtZl17MSw0fSk/OjooPzpbMC05YS1mXXsxLDR9Oil7M318KD86KD86WzAtOWEtZl17MSw0fTopezAsMn1bMC05YS1mXXsxLDR9KT86Oig/OlswLTlhLWZdezEsNH06KXsyfXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCwzfVswLTlhLWZdezEsNH0pPzo6WzAtOWEtZl17MSw0fTp8KD86KD86WzAtOWEtZl17MSw0fTopezAsNH1bMC05YS1mXXsxLDR9KT86OikoPzpbMC05YS1mXXsxLDR9OlswLTlhLWZdezEsNH18KD86KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KVxcLil7M30oPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCw1fVswLTlhLWZdezEsNH0pPzo6WzAtOWEtZl17MSw0fXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCw2fVswLTlhLWZdezEsNH0pPzo6KXxbVnZdWzAtOWEtZl0rXFwuW2EtejAtOVxcLS5ffiEkJicoKSorLDs9Ol0rKVxcXXwoPzooPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pXFwuKXszfSg/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPyl8KD86W2EtejAtOVxcLS5ffiEkJidcIigpKissOz1dfCVbMC05YS1mXXsyfSkqKSg/OjpcXGQqKT8oPzpcXC8oPzpbYS16MC05XFwtLl9+ISQmJ1wiKCkqKyw7PTpAXXwlWzAtOWEtZl17Mn0pKikqfFxcLyg/Oig/OlthLXowLTlcXC0uX34hJCYnXCIoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkrKD86XFwvKD86W2EtejAtOVxcLS5ffiEkJidcIigpKissOz06QF18JVswLTlhLWZdezJ9KSopKik/fCg/OlthLXowLTlcXC0uX34hJCYnXCIoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkrKD86XFwvKD86W2EtejAtOVxcLS5ffiEkJidcIigpKissOz06QF18JVswLTlhLWZdezJ9KSopKik/KD86XFw/KD86W2EtejAtOVxcLS5ffiEkJidcIigpKissOz06QC8/XXwlWzAtOWEtZl17Mn0pKik/KD86Iyg/OlthLXowLTlcXC0uX34hJCYnXCIoKSorLDs9OkAvP118JVswLTlhLWZdezJ9KSopPyQvaTtcbi8vIHVyaS10ZW1wbGF0ZTogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY1NzBcbnZhciBVUklURU1QTEFURSA9IC9eKD86KD86W15cXHgwMC1cXHgyMFwiJzw+JVxcXFxeYHt8fV18JVswLTlhLWZdezJ9KXxcXHtbKyMuLzs/Jj0sIUB8XT8oPzpbYS16MC05X118JVswLTlhLWZdezJ9KSsoPzo6WzEtOV1bMC05XXswLDN9fFxcKik/KD86LCg/OlthLXowLTlfXXwlWzAtOWEtZl17Mn0pKyg/OjpbMS05XVswLTldezAsM318XFwqKT8pKlxcfSkqJC9pO1xuLy8gRm9yIHRoZSBzb3VyY2U6IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2RwZXJpbmkvNzI5Mjk0XG4vLyBGb3IgdGVzdCBjYXNlczogaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL2RlbW8vdXJsLXJlZ2V4XG4vLyBAdG9kbyBEZWxldGUgY3VycmVudCBVUkwgaW4gZmF2b3VyIG9mIHRoZSBjb21tZW50ZWQgb3V0IFVSTCBydWxlIHdoZW4gdGhpcyBpc3N1ZSBpcyBmaXhlZCBodHRwczovL2dpdGh1Yi5jb20vZXNsaW50L2VzbGludC9pc3N1ZXMvNzk4My5cbi8vIHZhciBVUkwgPSAvXig/Oig/Omh0dHBzP3xmdHApOlxcL1xcLykoPzpcXFMrKD86OlxcUyopP0ApPyg/Oig/ITEwKD86XFwuXFxkezEsM30pezN9KSg/ITEyNyg/OlxcLlxcZHsxLDN9KXszfSkoPyExNjlcXC4yNTQoPzpcXC5cXGR7MSwzfSl7Mn0pKD8hMTkyXFwuMTY4KD86XFwuXFxkezEsM30pezJ9KSg/ITE3MlxcLig/OjFbNi05XXwyXFxkfDNbMC0xXSkoPzpcXC5cXGR7MSwzfSl7Mn0pKD86WzEtOV1cXGQ/fDFcXGRcXGR8MlswMV1cXGR8MjJbMC0zXSkoPzpcXC4oPzoxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSl7Mn0oPzpcXC4oPzpbMS05XVxcZD98MVxcZFxcZHwyWzAtNF1cXGR8MjVbMC00XSkpfCg/Oig/OlthLXpcXHV7MDBhMX0tXFx1e2ZmZmZ9MC05XSstPykqW2EtelxcdXswMGExfS1cXHV7ZmZmZn0wLTldKykoPzpcXC4oPzpbYS16XFx1ezAwYTF9LVxcdXtmZmZmfTAtOV0rLT8pKlthLXpcXHV7MDBhMX0tXFx1e2ZmZmZ9MC05XSspKig/OlxcLig/OlthLXpcXHV7MDBhMX0tXFx1e2ZmZmZ9XXsyLH0pKSkoPzo6XFxkezIsNX0pPyg/OlxcL1teXFxzXSopPyQvaXU7XG52YXIgVVJMID0gL14oPzooPzpodHRwW3NcXHUwMTdGXT98ZnRwKTpcXC9cXC8pKD86KD86W1xcMC1cXHgwOFxceDBFLVxceDFGIS1cXHg5RlxceEExLVxcdTE2N0ZcXHUxNjgxLVxcdTFGRkZcXHUyMDBCLVxcdTIwMjdcXHUyMDJBLVxcdTIwMkVcXHUyMDMwLVxcdTIwNUVcXHUyMDYwLVxcdTJGRkZcXHUzMDAxLVxcdUQ3RkZcXHVFMDAwLVxcdUZFRkVcXHVGRjAwLVxcdUZGRkZdfFtcXHVEODAwLVxcdURCRkZdW1xcdURDMDAtXFx1REZGRl18W1xcdUQ4MDAtXFx1REJGRl0oPyFbXFx1REMwMC1cXHVERkZGXSl8KD86W15cXHVEODAwLVxcdURCRkZdfF4pW1xcdURDMDAtXFx1REZGRl0pKyg/OjooPzpbXFwwLVxceDA4XFx4MEUtXFx4MUYhLVxceDlGXFx4QTEtXFx1MTY3RlxcdTE2ODEtXFx1MUZGRlxcdTIwMEItXFx1MjAyN1xcdTIwMkEtXFx1MjAyRVxcdTIwMzAtXFx1MjA1RVxcdTIwNjAtXFx1MkZGRlxcdTMwMDEtXFx1RDdGRlxcdUUwMDAtXFx1RkVGRVxcdUZGMDAtXFx1RkZGRl18W1xcdUQ4MDAtXFx1REJGRl1bXFx1REMwMC1cXHVERkZGXXxbXFx1RDgwMC1cXHVEQkZGXSg/IVtcXHVEQzAwLVxcdURGRkZdKXwoPzpbXlxcdUQ4MDAtXFx1REJGRl18XilbXFx1REMwMC1cXHVERkZGXSkqKT9AKT8oPzooPyExMCg/OlxcLlswLTldezEsM30pezN9KSg/ITEyNyg/OlxcLlswLTldezEsM30pezN9KSg/ITE2OVxcLjI1NCg/OlxcLlswLTldezEsM30pezJ9KSg/ITE5MlxcLjE2OCg/OlxcLlswLTldezEsM30pezJ9KSg/ITE3MlxcLig/OjFbNi05XXwyWzAtOV18M1swMV0pKD86XFwuWzAtOV17MSwzfSl7Mn0pKD86WzEtOV1bMC05XT98MVswLTldWzAtOV18MlswMV1bMC05XXwyMlswLTNdKSg/OlxcLig/OjE/WzAtOV17MSwyfXwyWzAtNF1bMC05XXwyNVswLTVdKSl7Mn0oPzpcXC4oPzpbMS05XVswLTldP3wxWzAtOV1bMC05XXwyWzAtNF1bMC05XXwyNVswLTRdKSl8KD86KD86KD86WzAtOUtTYS16XFx4QTEtXFx1RDdGRlxcdUUwMDAtXFx1RkZGRl18W1xcdUQ4MDAtXFx1REJGRl0oPyFbXFx1REMwMC1cXHVERkZGXSl8KD86W15cXHVEODAwLVxcdURCRkZdfF4pW1xcdURDMDAtXFx1REZGRl0pKy0/KSooPzpbMC05S1NhLXpcXHhBMS1cXHVEN0ZGXFx1RTAwMC1cXHVGRkZGXXxbXFx1RDgwMC1cXHVEQkZGXSg/IVtcXHVEQzAwLVxcdURGRkZdKXwoPzpbXlxcdUQ4MDAtXFx1REJGRl18XilbXFx1REMwMC1cXHVERkZGXSkrKSg/OlxcLig/Oig/OlswLTlLU2EtelxceEExLVxcdUQ3RkZcXHVFMDAwLVxcdUZGRkZdfFtcXHVEODAwLVxcdURCRkZdKD8hW1xcdURDMDAtXFx1REZGRl0pfCg/OlteXFx1RDgwMC1cXHVEQkZGXXxeKVtcXHVEQzAwLVxcdURGRkZdKSstPykqKD86WzAtOUtTYS16XFx4QTEtXFx1RDdGRlxcdUUwMDAtXFx1RkZGRl18W1xcdUQ4MDAtXFx1REJGRl0oPyFbXFx1REMwMC1cXHVERkZGXSl8KD86W15cXHVEODAwLVxcdURCRkZdfF4pW1xcdURDMDAtXFx1REZGRl0pKykqKD86XFwuKD86KD86W0tTYS16XFx4QTEtXFx1RDdGRlxcdUUwMDAtXFx1RkZGRl18W1xcdUQ4MDAtXFx1REJGRl0oPyFbXFx1REMwMC1cXHVERkZGXSl8KD86W15cXHVEODAwLVxcdURCRkZdfF4pW1xcdURDMDAtXFx1REZGRl0pezIsfSkpKSg/OjpbMC05XXsyLDV9KT8oPzpcXC8oPzpbXFwwLVxceDA4XFx4MEUtXFx4MUYhLVxceDlGXFx4QTEtXFx1MTY3RlxcdTE2ODEtXFx1MUZGRlxcdTIwMEItXFx1MjAyN1xcdTIwMkEtXFx1MjAyRVxcdTIwMzAtXFx1MjA1RVxcdTIwNjAtXFx1MkZGRlxcdTMwMDEtXFx1RDdGRlxcdUUwMDAtXFx1RkVGRVxcdUZGMDAtXFx1RkZGRl18W1xcdUQ4MDAtXFx1REJGRl1bXFx1REMwMC1cXHVERkZGXXxbXFx1RDgwMC1cXHVEQkZGXSg/IVtcXHVEQzAwLVxcdURGRkZdKXwoPzpbXlxcdUQ4MDAtXFx1REJGRl18XilbXFx1REMwMC1cXHVERkZGXSkqKT8kL2k7XG52YXIgVVVJRCA9IC9eKD86dXJuOnV1aWQ6KT9bMC05YS1mXXs4fS0oPzpbMC05YS1mXXs0fS0pezN9WzAtOWEtZl17MTJ9JC9pO1xudmFyIEpTT05fUE9JTlRFUiA9IC9eKD86XFwvKD86W15+L118fjB8fjEpKikqJC87XG52YXIgSlNPTl9QT0lOVEVSX1VSSV9GUkFHTUVOVCA9IC9eIyg/OlxcLyg/OlthLXowLTlfXFwtLiEkJicoKSorLDs6PUBdfCVbMC05YS1mXXsyfXx+MHx+MSkqKSokL2k7XG52YXIgUkVMQVRJVkVfSlNPTl9QT0lOVEVSID0gL14oPzowfFsxLTldWzAtOV0qKSg/OiN8KD86XFwvKD86W15+L118fjB8fjEpKikqKSQvO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gZm9ybWF0cztcblxuZnVuY3Rpb24gZm9ybWF0cyhtb2RlKSB7XG4gIG1vZGUgPSBtb2RlID09ICdmdWxsJyA/ICdmdWxsJyA6ICdmYXN0JztcbiAgcmV0dXJuIHV0aWwuY29weShmb3JtYXRzW21vZGVdKTtcbn1cblxuXG5mb3JtYXRzLmZhc3QgPSB7XG4gIC8vIGRhdGU6IGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzMzMzkjc2VjdGlvbi01LjZcbiAgZGF0ZTogL15cXGRcXGRcXGRcXGQtWzAtMV1cXGQtWzAtM11cXGQkLyxcbiAgLy8gZGF0ZS10aW1lOiBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzMzM5I3NlY3Rpb24tNS42XG4gIHRpbWU6IC9eKD86WzAtMl1cXGQ6WzAtNV1cXGQ6WzAtNV1cXGR8MjM6NTk6NjApKD86XFwuXFxkKyk/KD86enxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPyk/JC9pLFxuICAnZGF0ZS10aW1lJzogL15cXGRcXGRcXGRcXGQtWzAtMV1cXGQtWzAtM11cXGRbdFxcc10oPzpbMC0yXVxcZDpbMC01XVxcZDpbMC01XVxcZHwyMzo1OTo2MCkoPzpcXC5cXGQrKT8oPzp6fFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/KSQvaSxcbiAgLy8gdXJpOiBodHRwczovL2dpdGh1Yi5jb20vbWFmaW50b3NoL2lzLW15LWpzb24tdmFsaWQvYmxvYi9tYXN0ZXIvZm9ybWF0cy5qc1xuICB1cmk6IC9eKD86W2Etel1bYS16MC05Ky0uXSo6KSg/OlxcLz9cXC8pP1teXFxzXSokL2ksXG4gICd1cmktcmVmZXJlbmNlJzogL14oPzooPzpbYS16XVthLXowLTkrLS5dKjopP1xcLz9cXC8pPyg/OlteXFxcXFxccyNdW15cXHMjXSopPyg/OiNbXlxcXFxcXHNdKik/JC9pLFxuICAndXJpLXRlbXBsYXRlJzogVVJJVEVNUExBVEUsXG4gIHVybDogVVJMLFxuICAvLyBlbWFpbCAoc291cmNlcyBmcm9tIGpzZW4gdmFsaWRhdG9yKTpcbiAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMDEzMjMvdXNpbmctYS1yZWd1bGFyLWV4cHJlc3Npb24tdG8tdmFsaWRhdGUtYW4tZW1haWwtYWRkcmVzcyNhbnN3ZXItODgyOTM2M1xuICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNS9mb3Jtcy5odG1sI3ZhbGlkLWUtbWFpbC1hZGRyZXNzIChzZWFyY2ggZm9yICd3aWxsZnVsIHZpb2xhdGlvbicpXG4gIGVtYWlsOiAvXlthLXowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rQFthLXowLTldKD86W2EtejAtOS1dezAsNjF9W2EtejAtOV0pPyg/OlxcLlthLXowLTldKD86W2EtejAtOS1dezAsNjF9W2EtejAtOV0pPykqJC9pLFxuICBob3N0bmFtZTogSE9TVE5BTUUsXG4gIC8vIG9wdGltaXplZCBodHRwczovL3d3dy5zYWZhcmlib29rc29ubGluZS5jb20vbGlicmFyeS92aWV3L3JlZ3VsYXItZXhwcmVzc2lvbnMtY29va2Jvb2svOTc4MDU5NjgwMjgzNy9jaDA3czE2Lmh0bWxcbiAgaXB2NDogL14oPzooPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pXFwuKXszfSg/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPykkLyxcbiAgLy8gb3B0aW1pemVkIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTM0OTcvcmVndWxhci1leHByZXNzaW9uLXRoYXQtbWF0Y2hlcy12YWxpZC1pcHY2LWFkZHJlc3Nlc1xuICBpcHY2OiAvXlxccyooPzooPzooPzpbMC05YS1mXXsxLDR9Oil7N30oPzpbMC05YS1mXXsxLDR9fDopKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7Nn0oPzo6WzAtOWEtZl17MSw0fXwoPzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KXw6KSl8KD86KD86WzAtOWEtZl17MSw0fTopezV9KD86KD86KD86OlswLTlhLWZdezEsNH0pezEsMn0pfDooPzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KXw6KSl8KD86KD86WzAtOWEtZl17MSw0fTopezR9KD86KD86KD86OlswLTlhLWZdezEsNH0pezEsM30pfCg/Oig/OjpbMC05YS1mXXsxLDR9KT86KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7M30oPzooPzooPzo6WzAtOWEtZl17MSw0fSl7MSw0fSl8KD86KD86OlswLTlhLWZdezEsNH0pezAsMn06KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7Mn0oPzooPzooPzo6WzAtOWEtZl17MSw0fSl7MSw1fSl8KD86KD86OlswLTlhLWZdezEsNH0pezAsM306KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MX0oPzooPzooPzo6WzAtOWEtZl17MSw0fSl7MSw2fSl8KD86KD86OlswLTlhLWZdezEsNH0pezAsNH06KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoPzo6KD86KD86KD86OlswLTlhLWZdezEsNH0pezEsN30pfCg/Oig/OjpbMC05YS1mXXsxLDR9KXswLDV9Oig/Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pKXw6KSkpKD86JS4rKT9cXHMqJC9pLFxuICByZWdleDogcmVnZXgsXG4gIC8vIHV1aWQ6IGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQxMjJcbiAgdXVpZDogVVVJRCxcbiAgLy8gSlNPTi1wb2ludGVyOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjkwMVxuICAvLyB1cmkgZnJhZ21lbnQ6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I2FwcGVuZGl4LUFcbiAgJ2pzb24tcG9pbnRlcic6IEpTT05fUE9JTlRFUixcbiAgJ2pzb24tcG9pbnRlci11cmktZnJhZ21lbnQnOiBKU09OX1BPSU5URVJfVVJJX0ZSQUdNRU5ULFxuICAvLyByZWxhdGl2ZSBKU09OLXBvaW50ZXI6IGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWx1ZmYtcmVsYXRpdmUtanNvbi1wb2ludGVyLTAwXG4gICdyZWxhdGl2ZS1qc29uLXBvaW50ZXInOiBSRUxBVElWRV9KU09OX1BPSU5URVJcbn07XG5cblxuZm9ybWF0cy5mdWxsID0ge1xuICBkYXRlOiBkYXRlLFxuICB0aW1lOiB0aW1lLFxuICAnZGF0ZS10aW1lJzogZGF0ZV90aW1lLFxuICB1cmk6IHVyaSxcbiAgJ3VyaS1yZWZlcmVuY2UnOiBVUklSRUYsXG4gICd1cmktdGVtcGxhdGUnOiBVUklURU1QTEFURSxcbiAgdXJsOiBVUkwsXG4gIGVtYWlsOiAvXlthLXowLTkhIyQlJicqKy89P15fYHt8fX4tXSsoPzpcXC5bYS16MC05ISMkJSYnKisvPT9eX2B7fH1+LV0rKSpAKD86W2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pP1xcLikrW2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pPyQvaSxcbiAgaG9zdG5hbWU6IEhPU1ROQU1FLFxuICBpcHY0OiAvXig/Oig/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPylcXC4pezN9KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KSQvLFxuICBpcHY2OiAvXlxccyooPzooPzooPzpbMC05YS1mXXsxLDR9Oil7N30oPzpbMC05YS1mXXsxLDR9fDopKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7Nn0oPzo6WzAtOWEtZl17MSw0fXwoPzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KXw6KSl8KD86KD86WzAtOWEtZl17MSw0fTopezV9KD86KD86KD86OlswLTlhLWZdezEsNH0pezEsMn0pfDooPzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KXw6KSl8KD86KD86WzAtOWEtZl17MSw0fTopezR9KD86KD86KD86OlswLTlhLWZdezEsNH0pezEsM30pfCg/Oig/OjpbMC05YS1mXXsxLDR9KT86KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7M30oPzooPzooPzo6WzAtOWEtZl17MSw0fSl7MSw0fSl8KD86KD86OlswLTlhLWZdezEsNH0pezAsMn06KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7Mn0oPzooPzooPzo6WzAtOWEtZl17MSw0fSl7MSw1fSl8KD86KD86OlswLTlhLWZdezEsNH0pezAsM306KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MX0oPzooPzooPzo6WzAtOWEtZl17MSw0fSl7MSw2fSl8KD86KD86OlswLTlhLWZdezEsNH0pezAsNH06KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoPzo6KD86KD86KD86OlswLTlhLWZdezEsNH0pezEsN30pfCg/Oig/OjpbMC05YS1mXXsxLDR9KXswLDV9Oig/Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pKXw6KSkpKD86JS4rKT9cXHMqJC9pLFxuICByZWdleDogcmVnZXgsXG4gIHV1aWQ6IFVVSUQsXG4gICdqc29uLXBvaW50ZXInOiBKU09OX1BPSU5URVIsXG4gICdqc29uLXBvaW50ZXItdXJpLWZyYWdtZW50JzogSlNPTl9QT0lOVEVSX1VSSV9GUkFHTUVOVCxcbiAgJ3JlbGF0aXZlLWpzb24tcG9pbnRlcic6IFJFTEFUSVZFX0pTT05fUE9JTlRFUlxufTtcblxuXG5mdW5jdGlvbiBpc0xlYXBZZWFyKHllYXIpIHtcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzMzMzkjYXBwZW5kaXgtQ1xuICByZXR1cm4geWVhciAlIDQgPT09IDAgJiYgKHllYXIgJSAxMDAgIT09IDAgfHwgeWVhciAlIDQwMCA9PT0gMCk7XG59XG5cblxuZnVuY3Rpb24gZGF0ZShzdHIpIHtcbiAgLy8gZnVsbC1kYXRlIGZyb20gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzMzOSNzZWN0aW9uLTUuNlxuICB2YXIgbWF0Y2hlcyA9IHN0ci5tYXRjaChEQVRFKTtcbiAgaWYgKCFtYXRjaGVzKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIHllYXIgPSArbWF0Y2hlc1sxXTtcbiAgdmFyIG1vbnRoID0gK21hdGNoZXNbMl07XG4gIHZhciBkYXkgPSArbWF0Y2hlc1szXTtcblxuICByZXR1cm4gbW9udGggPj0gMSAmJiBtb250aCA8PSAxMiAmJiBkYXkgPj0gMSAmJlxuICAgICAgICAgIGRheSA8PSAobW9udGggPT0gMiAmJiBpc0xlYXBZZWFyKHllYXIpID8gMjkgOiBEQVlTW21vbnRoXSk7XG59XG5cblxuZnVuY3Rpb24gdGltZShzdHIsIGZ1bGwpIHtcbiAgdmFyIG1hdGNoZXMgPSBzdHIubWF0Y2goVElNRSk7XG4gIGlmICghbWF0Y2hlcykgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBob3VyID0gbWF0Y2hlc1sxXTtcbiAgdmFyIG1pbnV0ZSA9IG1hdGNoZXNbMl07XG4gIHZhciBzZWNvbmQgPSBtYXRjaGVzWzNdO1xuICB2YXIgdGltZVpvbmUgPSBtYXRjaGVzWzVdO1xuICByZXR1cm4gKChob3VyIDw9IDIzICYmIG1pbnV0ZSA8PSA1OSAmJiBzZWNvbmQgPD0gNTkpIHx8XG4gICAgICAgICAgKGhvdXIgPT0gMjMgJiYgbWludXRlID09IDU5ICYmIHNlY29uZCA9PSA2MCkpICYmXG4gICAgICAgICAoIWZ1bGwgfHwgdGltZVpvbmUpO1xufVxuXG5cbnZhciBEQVRFX1RJTUVfU0VQQVJBVE9SID0gL3R8XFxzL2k7XG5mdW5jdGlvbiBkYXRlX3RpbWUoc3RyKSB7XG4gIC8vIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzMzMzkjc2VjdGlvbi01LjZcbiAgdmFyIGRhdGVUaW1lID0gc3RyLnNwbGl0KERBVEVfVElNRV9TRVBBUkFUT1IpO1xuICByZXR1cm4gZGF0ZVRpbWUubGVuZ3RoID09IDIgJiYgZGF0ZShkYXRlVGltZVswXSkgJiYgdGltZShkYXRlVGltZVsxXSwgdHJ1ZSk7XG59XG5cblxudmFyIE5PVF9VUklfRlJBR01FTlQgPSAvXFwvfDovO1xuZnVuY3Rpb24gdXJpKHN0cikge1xuICAvLyBodHRwOi8vam1yd2FyZS5jb20vYXJ0aWNsZXMvMjAwOS91cmlfcmVnZXhwL1VSSV9yZWdleC5odG1sICsgb3B0aW9uYWwgcHJvdG9jb2wgKyByZXF1aXJlZCBcIi5cIlxuICByZXR1cm4gTk9UX1VSSV9GUkFHTUVOVC50ZXN0KHN0cikgJiYgVVJJLnRlc3Qoc3RyKTtcbn1cblxuXG52YXIgWl9BTkNIT1IgPSAvW15cXFxcXVxcXFxaLztcbmZ1bmN0aW9uIHJlZ2V4KHN0cikge1xuICBpZiAoWl9BTkNIT1IudGVzdChzdHIpKSByZXR1cm4gZmFsc2U7XG4gIHRyeSB7XG4gICAgbmV3IFJlZ0V4cChzdHIpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfcmVmKGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJHZhbGlkID0gJ3ZhbGlkJyArICRsdmw7XG4gIHZhciAkYXN5bmMsICRyZWZDb2RlO1xuICBpZiAoJHNjaGVtYSA9PSAnIycgfHwgJHNjaGVtYSA9PSAnIy8nKSB7XG4gICAgaWYgKGl0LmlzUm9vdCkge1xuICAgICAgJGFzeW5jID0gaXQuYXN5bmM7XG4gICAgICAkcmVmQ29kZSA9ICd2YWxpZGF0ZSc7XG4gICAgfSBlbHNlIHtcbiAgICAgICRhc3luYyA9IGl0LnJvb3Quc2NoZW1hLiRhc3luYyA9PT0gdHJ1ZTtcbiAgICAgICRyZWZDb2RlID0gJ3Jvb3QucmVmVmFsWzBdJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyICRyZWZWYWwgPSBpdC5yZXNvbHZlUmVmKGl0LmJhc2VJZCwgJHNjaGVtYSwgaXQuaXNSb290KTtcbiAgICBpZiAoJHJlZlZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgJG1lc3NhZ2UgPSBpdC5NaXNzaW5nUmVmRXJyb3IubWVzc2FnZShpdC5iYXNlSWQsICRzY2hlbWEpO1xuICAgICAgaWYgKGl0Lm9wdHMubWlzc2luZ1JlZnMgPT0gJ2ZhaWwnKSB7XG4gICAgICAgIGl0LmxvZ2dlci5lcnJvcigkbWVzc2FnZSk7XG4gICAgICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAgICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgICAgIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgnJHJlZicpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgcmVmOiBcXCcnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRzY2hlbWEpKSArICdcXCcgfSAnO1xuICAgICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdjYW5cXFxcXFwndCByZXNvbHZlIHJlZmVyZW5jZSAnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRzY2hlbWEpKSArICdcXCcgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkc2NoZW1hKSkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgb3V0ICs9ICcgaWYgKGZhbHNlKSB7ICc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXQub3B0cy5taXNzaW5nUmVmcyA9PSAnaWdub3JlJykge1xuICAgICAgICBpdC5sb2dnZXIud2FybigkbWVzc2FnZSk7XG4gICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgb3V0ICs9ICcgaWYgKHRydWUpIHsgJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IGl0Lk1pc3NpbmdSZWZFcnJvcihpdC5iYXNlSWQsICRzY2hlbWEsICRtZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCRyZWZWYWwuaW5saW5lKSB7XG4gICAgICB2YXIgJGl0ID0gaXQudXRpbC5jb3B5KGl0KTtcbiAgICAgICRpdC5sZXZlbCsrO1xuICAgICAgdmFyICRuZXh0VmFsaWQgPSAndmFsaWQnICsgJGl0LmxldmVsO1xuICAgICAgJGl0LnNjaGVtYSA9ICRyZWZWYWwuc2NoZW1hO1xuICAgICAgJGl0LnNjaGVtYVBhdGggPSAnJztcbiAgICAgICRpdC5lcnJTY2hlbWFQYXRoID0gJHNjaGVtYTtcbiAgICAgIHZhciAkY29kZSA9IGl0LnZhbGlkYXRlKCRpdCkucmVwbGFjZSgvdmFsaWRhdGVcXC5zY2hlbWEvZywgJHJlZlZhbC5jb2RlKTtcbiAgICAgIG91dCArPSAnICcgKyAoJGNvZGUpICsgJyAnO1xuICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJG5leHRWYWxpZCkgKyAnKSB7ICc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICRhc3luYyA9ICRyZWZWYWwuJGFzeW5jID09PSB0cnVlIHx8IChpdC5hc3luYyAmJiAkcmVmVmFsLiRhc3luYyAhPT0gZmFsc2UpO1xuICAgICAgJHJlZkNvZGUgPSAkcmVmVmFsLmNvZGU7XG4gICAgfVxuICB9XG4gIGlmICgkcmVmQ29kZSkge1xuICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICBvdXQgPSAnJztcbiAgICBpZiAoaXQub3B0cy5wYXNzQ29udGV4dCkge1xuICAgICAgb3V0ICs9ICcgJyArICgkcmVmQ29kZSkgKyAnLmNhbGwodGhpcywgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgJyArICgkcmVmQ29kZSkgKyAnKCAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyAnICsgKCRkYXRhKSArICcsIChkYXRhUGF0aCB8fCBcXCdcXCcpJztcbiAgICBpZiAoaXQuZXJyb3JQYXRoICE9ICdcIlwiJykge1xuICAgICAgb3V0ICs9ICcgKyAnICsgKGl0LmVycm9yUGF0aCk7XG4gICAgfVxuICAgIHZhciAkcGFyZW50RGF0YSA9ICRkYXRhTHZsID8gJ2RhdGEnICsgKCgkZGF0YUx2bCAtIDEpIHx8ICcnKSA6ICdwYXJlbnREYXRhJyxcbiAgICAgICRwYXJlbnREYXRhUHJvcGVydHkgPSAkZGF0YUx2bCA/IGl0LmRhdGFQYXRoQXJyWyRkYXRhTHZsXSA6ICdwYXJlbnREYXRhUHJvcGVydHknO1xuICAgIG91dCArPSAnICwgJyArICgkcGFyZW50RGF0YSkgKyAnICwgJyArICgkcGFyZW50RGF0YVByb3BlcnR5KSArICcsIHJvb3REYXRhKSAgJztcbiAgICB2YXIgX19jYWxsVmFsaWRhdGUgPSBvdXQ7XG4gICAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgICBpZiAoJGFzeW5jKSB7XG4gICAgICBpZiAoIWl0LmFzeW5jKSB0aHJvdyBuZXcgRXJyb3IoJ2FzeW5jIHNjaGVtYSByZWZlcmVuY2VkIGJ5IHN5bmMgc2NoZW1hJyk7XG4gICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICBvdXQgKz0gJyB2YXIgJyArICgkdmFsaWQpICsgJzsgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIHRyeSB7IGF3YWl0ICcgKyAoX19jYWxsVmFsaWRhdGUpICsgJzsgJztcbiAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgIG91dCArPSAnICcgKyAoJHZhbGlkKSArICcgPSB0cnVlOyAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgfSBjYXRjaCAoZSkgeyBpZiAoIShlIGluc3RhbmNlb2YgVmFsaWRhdGlvbkVycm9yKSkgdGhyb3cgZTsgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBlLmVycm9yczsgZWxzZSB2RXJyb3JzID0gdkVycm9ycy5jb25jYXQoZS5lcnJvcnMpOyBlcnJvcnMgPSB2RXJyb3JzLmxlbmd0aDsgJztcbiAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgIG91dCArPSAnICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZTsgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIH0gJztcbiAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgIG91dCArPSAnIGlmICgnICsgKCR2YWxpZCkgKyAnKSB7ICc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIGlmICghJyArIChfX2NhbGxWYWxpZGF0ZSkgKyAnKSB7IGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gJyArICgkcmVmQ29kZSkgKyAnLmVycm9yczsgZWxzZSB2RXJyb3JzID0gdkVycm9ycy5jb25jYXQoJyArICgkcmVmQ29kZSkgKyAnLmVycm9ycyk7IGVycm9ycyA9IHZFcnJvcnMubGVuZ3RoOyB9ICc7XG4gICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICBvdXQgKz0gJyBlbHNlIHsgJztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfYWxsT2YoaXQsICRrZXl3b3JkLCAkcnVsZVR5cGUpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkaXQgPSBpdC51dGlsLmNvcHkoaXQpO1xuICB2YXIgJGNsb3NpbmdCcmFjZXMgPSAnJztcbiAgJGl0LmxldmVsKys7XG4gIHZhciAkbmV4dFZhbGlkID0gJ3ZhbGlkJyArICRpdC5sZXZlbDtcbiAgdmFyICRjdXJyZW50QmFzZUlkID0gJGl0LmJhc2VJZCxcbiAgICAkYWxsU2NoZW1hc0VtcHR5ID0gdHJ1ZTtcbiAgdmFyIGFycjEgPSAkc2NoZW1hO1xuICBpZiAoYXJyMSkge1xuICAgIHZhciAkc2NoLCAkaSA9IC0xLFxuICAgICAgbDEgPSBhcnIxLmxlbmd0aCAtIDE7XG4gICAgd2hpbGUgKCRpIDwgbDEpIHtcbiAgICAgICRzY2ggPSBhcnIxWyRpICs9IDFdO1xuICAgICAgaWYgKChpdC5vcHRzLnN0cmljdEtleXdvcmRzID8gdHlwZW9mICRzY2ggPT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMoJHNjaCkubGVuZ3RoID4gMCA6IGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJHNjaCwgaXQuUlVMRVMuYWxsKSkpIHtcbiAgICAgICAgJGFsbFNjaGVtYXNFbXB0eSA9IGZhbHNlO1xuICAgICAgICAkaXQuc2NoZW1hID0gJHNjaDtcbiAgICAgICAgJGl0LnNjaGVtYVBhdGggPSAkc2NoZW1hUGF0aCArICdbJyArICRpICsgJ10nO1xuICAgICAgICAkaXQuZXJyU2NoZW1hUGF0aCA9ICRlcnJTY2hlbWFQYXRoICsgJy8nICsgJGk7XG4gICAgICAgIG91dCArPSAnICAnICsgKGl0LnZhbGlkYXRlKCRpdCkpICsgJyAnO1xuICAgICAgICAkaXQuYmFzZUlkID0gJGN1cnJlbnRCYXNlSWQ7XG4gICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJG5leHRWYWxpZCkgKyAnKSB7ICc7XG4gICAgICAgICAgJGNsb3NpbmdCcmFjZXMgKz0gJ30nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgaWYgKCRhbGxTY2hlbWFzRW1wdHkpIHtcbiAgICAgIG91dCArPSAnIGlmICh0cnVlKSB7ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnICcgKyAoJGNsb3NpbmdCcmFjZXMuc2xpY2UoMCwgLTEpKSArICcgJztcbiAgICB9XG4gIH1cbiAgb3V0ID0gaXQudXRpbC5jbGVhblVwQ29kZShvdXQpO1xuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9hbnlPZihpdCwgJGtleXdvcmQsICRydWxlVHlwZSkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJHZhbGlkID0gJ3ZhbGlkJyArICRsdmw7XG4gIHZhciAkZXJycyA9ICdlcnJzX18nICsgJGx2bDtcbiAgdmFyICRpdCA9IGl0LnV0aWwuY29weShpdCk7XG4gIHZhciAkY2xvc2luZ0JyYWNlcyA9ICcnO1xuICAkaXQubGV2ZWwrKztcbiAgdmFyICRuZXh0VmFsaWQgPSAndmFsaWQnICsgJGl0LmxldmVsO1xuICB2YXIgJG5vRW1wdHlTY2hlbWEgPSAkc2NoZW1hLmV2ZXJ5KGZ1bmN0aW9uKCRzY2gpIHtcbiAgICByZXR1cm4gKGl0Lm9wdHMuc3RyaWN0S2V5d29yZHMgPyB0eXBlb2YgJHNjaCA9PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cygkc2NoKS5sZW5ndGggPiAwIDogaXQudXRpbC5zY2hlbWFIYXNSdWxlcygkc2NoLCBpdC5SVUxFUy5hbGwpKTtcbiAgfSk7XG4gIGlmICgkbm9FbXB0eVNjaGVtYSkge1xuICAgIHZhciAkY3VycmVudEJhc2VJZCA9ICRpdC5iYXNlSWQ7XG4gICAgb3V0ICs9ICcgdmFyICcgKyAoJGVycnMpICsgJyA9IGVycm9yczsgdmFyICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZTsgICc7XG4gICAgdmFyICR3YXNDb21wb3NpdGUgPSBpdC5jb21wb3NpdGVSdWxlO1xuICAgIGl0LmNvbXBvc2l0ZVJ1bGUgPSAkaXQuY29tcG9zaXRlUnVsZSA9IHRydWU7XG4gICAgdmFyIGFycjEgPSAkc2NoZW1hO1xuICAgIGlmIChhcnIxKSB7XG4gICAgICB2YXIgJHNjaCwgJGkgPSAtMSxcbiAgICAgICAgbDEgPSBhcnIxLmxlbmd0aCAtIDE7XG4gICAgICB3aGlsZSAoJGkgPCBsMSkge1xuICAgICAgICAkc2NoID0gYXJyMVskaSArPSAxXTtcbiAgICAgICAgJGl0LnNjaGVtYSA9ICRzY2g7XG4gICAgICAgICRpdC5zY2hlbWFQYXRoID0gJHNjaGVtYVBhdGggKyAnWycgKyAkaSArICddJztcbiAgICAgICAgJGl0LmVyclNjaGVtYVBhdGggPSAkZXJyU2NoZW1hUGF0aCArICcvJyArICRpO1xuICAgICAgICBvdXQgKz0gJyAgJyArIChpdC52YWxpZGF0ZSgkaXQpKSArICcgJztcbiAgICAgICAgJGl0LmJhc2VJZCA9ICRjdXJyZW50QmFzZUlkO1xuICAgICAgICBvdXQgKz0gJyAnICsgKCR2YWxpZCkgKyAnID0gJyArICgkdmFsaWQpICsgJyB8fCAnICsgKCRuZXh0VmFsaWQpICsgJzsgaWYgKCEnICsgKCR2YWxpZCkgKyAnKSB7ICc7XG4gICAgICAgICRjbG9zaW5nQnJhY2VzICs9ICd9JztcbiAgICAgIH1cbiAgICB9XG4gICAgaXQuY29tcG9zaXRlUnVsZSA9ICRpdC5jb21wb3NpdGVSdWxlID0gJHdhc0NvbXBvc2l0ZTtcbiAgICBvdXQgKz0gJyAnICsgKCRjbG9zaW5nQnJhY2VzKSArICcgaWYgKCEnICsgKCR2YWxpZCkgKyAnKSB7ICAgdmFyIGVyciA9ICAgJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdhbnlPZicpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHt9ICc7XG4gICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgbWF0Y2ggc29tZSBzY2hlbWEgaW4gYW55T2ZcXCcgJztcbiAgICAgIH1cbiAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIH0gJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcge30gJztcbiAgICB9XG4gICAgb3V0ICs9ICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcih2RXJyb3JzKTsgJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IHZFcnJvcnM7IHJldHVybiBmYWxzZTsgJztcbiAgICAgIH1cbiAgICB9XG4gICAgb3V0ICs9ICcgfSBlbHNlIHsgIGVycm9ycyA9ICcgKyAoJGVycnMpICsgJzsgaWYgKHZFcnJvcnMgIT09IG51bGwpIHsgaWYgKCcgKyAoJGVycnMpICsgJykgdkVycm9ycy5sZW5ndGggPSAnICsgKCRlcnJzKSArICc7IGVsc2UgdkVycm9ycyA9IG51bGw7IH0gJztcbiAgICBpZiAoaXQub3B0cy5hbGxFcnJvcnMpIHtcbiAgICAgIG91dCArPSAnIH0gJztcbiAgICB9XG4gICAgb3V0ID0gaXQudXRpbC5jbGVhblVwQ29kZShvdXQpO1xuICB9IGVsc2Uge1xuICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICBvdXQgKz0gJyBpZiAodHJ1ZSkgeyAnO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9jb21tZW50KGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRjb21tZW50ID0gaXQudXRpbC50b1F1b3RlZFN0cmluZygkc2NoZW1hKTtcbiAgaWYgKGl0Lm9wdHMuJGNvbW1lbnQgPT09IHRydWUpIHtcbiAgICBvdXQgKz0gJyBjb25zb2xlLmxvZygnICsgKCRjb21tZW50KSArICcpOyc7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGl0Lm9wdHMuJGNvbW1lbnQgPT0gJ2Z1bmN0aW9uJykge1xuICAgIG91dCArPSAnIHNlbGYuX29wdHMuJGNvbW1lbnQoJyArICgkY29tbWVudCkgKyAnLCAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcsIHZhbGlkYXRlLnJvb3Quc2NoZW1hKTsnO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX2NvbnN0KGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkdmFsaWQgPSAndmFsaWQnICsgJGx2bDtcbiAgdmFyICRpc0RhdGEgPSBpdC5vcHRzLiRkYXRhICYmICRzY2hlbWEgJiYgJHNjaGVtYS4kZGF0YSxcbiAgICAkc2NoZW1hVmFsdWU7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgdmFyIHNjaGVtYScgKyAoJGx2bCkgKyAnID0gJyArIChpdC51dGlsLmdldERhdGEoJHNjaGVtYS4kZGF0YSwgJGRhdGFMdmwsIGl0LmRhdGFQYXRoQXJyKSkgKyAnOyAnO1xuICAgICRzY2hlbWFWYWx1ZSA9ICdzY2hlbWEnICsgJGx2bDtcbiAgfSBlbHNlIHtcbiAgICAkc2NoZW1hVmFsdWUgPSAkc2NoZW1hO1xuICB9XG4gIGlmICghJGlzRGF0YSkge1xuICAgIG91dCArPSAnIHZhciBzY2hlbWEnICsgKCRsdmwpICsgJyA9IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJzsnO1xuICB9XG4gIG91dCArPSAndmFyICcgKyAoJHZhbGlkKSArICcgPSBlcXVhbCgnICsgKCRkYXRhKSArICcsIHNjaGVtYScgKyAoJGx2bCkgKyAnKTsgaWYgKCEnICsgKCR2YWxpZCkgKyAnKSB7ICAgJztcbiAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdjb25zdCcpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgYWxsb3dlZFZhbHVlOiBzY2hlbWEnICsgKCRsdmwpICsgJyB9ICc7XG4gICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBiZSBlcXVhbCB0byBjb25zdGFudFxcJyAnO1xuICAgIH1cbiAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9ICc7XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcge30gJztcbiAgfVxuICB2YXIgX19lcnIgPSBvdXQ7XG4gIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICB9XG4gIG91dCArPSAnIH0nO1xuICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX2NvbnRhaW5zKGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkdmFsaWQgPSAndmFsaWQnICsgJGx2bDtcbiAgdmFyICRlcnJzID0gJ2VycnNfXycgKyAkbHZsO1xuICB2YXIgJGl0ID0gaXQudXRpbC5jb3B5KGl0KTtcbiAgdmFyICRjbG9zaW5nQnJhY2VzID0gJyc7XG4gICRpdC5sZXZlbCsrO1xuICB2YXIgJG5leHRWYWxpZCA9ICd2YWxpZCcgKyAkaXQubGV2ZWw7XG4gIHZhciAkaWR4ID0gJ2knICsgJGx2bCxcbiAgICAkZGF0YU54dCA9ICRpdC5kYXRhTGV2ZWwgPSBpdC5kYXRhTGV2ZWwgKyAxLFxuICAgICRuZXh0RGF0YSA9ICdkYXRhJyArICRkYXRhTnh0LFxuICAgICRjdXJyZW50QmFzZUlkID0gaXQuYmFzZUlkLFxuICAgICRub25FbXB0eVNjaGVtYSA9IChpdC5vcHRzLnN0cmljdEtleXdvcmRzID8gdHlwZW9mICRzY2hlbWEgPT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMoJHNjaGVtYSkubGVuZ3RoID4gMCA6IGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJHNjaGVtYSwgaXQuUlVMRVMuYWxsKSk7XG4gIG91dCArPSAndmFyICcgKyAoJGVycnMpICsgJyA9IGVycm9yczt2YXIgJyArICgkdmFsaWQpICsgJzsnO1xuICBpZiAoJG5vbkVtcHR5U2NoZW1hKSB7XG4gICAgdmFyICR3YXNDb21wb3NpdGUgPSBpdC5jb21wb3NpdGVSdWxlO1xuICAgIGl0LmNvbXBvc2l0ZVJ1bGUgPSAkaXQuY29tcG9zaXRlUnVsZSA9IHRydWU7XG4gICAgJGl0LnNjaGVtYSA9ICRzY2hlbWE7XG4gICAgJGl0LnNjaGVtYVBhdGggPSAkc2NoZW1hUGF0aDtcbiAgICAkaXQuZXJyU2NoZW1hUGF0aCA9ICRlcnJTY2hlbWFQYXRoO1xuICAgIG91dCArPSAnIHZhciAnICsgKCRuZXh0VmFsaWQpICsgJyA9IGZhbHNlOyBmb3IgKHZhciAnICsgKCRpZHgpICsgJyA9IDA7ICcgKyAoJGlkeCkgKyAnIDwgJyArICgkZGF0YSkgKyAnLmxlbmd0aDsgJyArICgkaWR4KSArICcrKykgeyAnO1xuICAgICRpdC5lcnJvclBhdGggPSBpdC51dGlsLmdldFBhdGhFeHByKGl0LmVycm9yUGF0aCwgJGlkeCwgaXQub3B0cy5qc29uUG9pbnRlcnMsIHRydWUpO1xuICAgIHZhciAkcGFzc0RhdGEgPSAkZGF0YSArICdbJyArICRpZHggKyAnXSc7XG4gICAgJGl0LmRhdGFQYXRoQXJyWyRkYXRhTnh0XSA9ICRpZHg7XG4gICAgdmFyICRjb2RlID0gaXQudmFsaWRhdGUoJGl0KTtcbiAgICAkaXQuYmFzZUlkID0gJGN1cnJlbnRCYXNlSWQ7XG4gICAgaWYgKGl0LnV0aWwudmFyT2NjdXJlbmNlcygkY29kZSwgJG5leHREYXRhKSA8IDIpIHtcbiAgICAgIG91dCArPSAnICcgKyAoaXQudXRpbC52YXJSZXBsYWNlKCRjb2RlLCAkbmV4dERhdGEsICRwYXNzRGF0YSkpICsgJyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YXIgJyArICgkbmV4dERhdGEpICsgJyA9ICcgKyAoJHBhc3NEYXRhKSArICc7ICcgKyAoJGNvZGUpICsgJyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyBpZiAoJyArICgkbmV4dFZhbGlkKSArICcpIGJyZWFrOyB9ICAnO1xuICAgIGl0LmNvbXBvc2l0ZVJ1bGUgPSAkaXQuY29tcG9zaXRlUnVsZSA9ICR3YXNDb21wb3NpdGU7XG4gICAgb3V0ICs9ICcgJyArICgkY2xvc2luZ0JyYWNlcykgKyAnIGlmICghJyArICgkbmV4dFZhbGlkKSArICcpIHsnO1xuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIGlmICgnICsgKCRkYXRhKSArICcubGVuZ3RoID09IDApIHsnO1xuICB9XG4gIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgnY29udGFpbnMnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7fSAnO1xuICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgY29udGFpbiBhIHZhbGlkIGl0ZW1cXCcgJztcbiAgICB9XG4gICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgfSAnO1xuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIHt9ICc7XG4gIH1cbiAgdmFyIF9fZXJyID0gb3V0O1xuICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChpdC5hc3luYykge1xuICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgfVxuICBvdXQgKz0gJyB9IGVsc2UgeyAnO1xuICBpZiAoJG5vbkVtcHR5U2NoZW1hKSB7XG4gICAgb3V0ICs9ICcgIGVycm9ycyA9ICcgKyAoJGVycnMpICsgJzsgaWYgKHZFcnJvcnMgIT09IG51bGwpIHsgaWYgKCcgKyAoJGVycnMpICsgJykgdkVycm9ycy5sZW5ndGggPSAnICsgKCRlcnJzKSArICc7IGVsc2UgdkVycm9ycyA9IG51bGw7IH0gJztcbiAgfVxuICBpZiAoaXQub3B0cy5hbGxFcnJvcnMpIHtcbiAgICBvdXQgKz0gJyB9ICc7XG4gIH1cbiAgb3V0ID0gaXQudXRpbC5jbGVhblVwQ29kZShvdXQpO1xuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9kZXBlbmRlbmNpZXMoaXQsICRrZXl3b3JkLCAkcnVsZVR5cGUpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICRlcnJzID0gJ2VycnNfXycgKyAkbHZsO1xuICB2YXIgJGl0ID0gaXQudXRpbC5jb3B5KGl0KTtcbiAgdmFyICRjbG9zaW5nQnJhY2VzID0gJyc7XG4gICRpdC5sZXZlbCsrO1xuICB2YXIgJG5leHRWYWxpZCA9ICd2YWxpZCcgKyAkaXQubGV2ZWw7XG4gIHZhciAkc2NoZW1hRGVwcyA9IHt9LFxuICAgICRwcm9wZXJ0eURlcHMgPSB7fSxcbiAgICAkb3duUHJvcGVydGllcyA9IGl0Lm9wdHMub3duUHJvcGVydGllcztcbiAgZm9yICgkcHJvcGVydHkgaW4gJHNjaGVtYSkge1xuICAgIHZhciAkc2NoID0gJHNjaGVtYVskcHJvcGVydHldO1xuICAgIHZhciAkZGVwcyA9IEFycmF5LmlzQXJyYXkoJHNjaCkgPyAkcHJvcGVydHlEZXBzIDogJHNjaGVtYURlcHM7XG4gICAgJGRlcHNbJHByb3BlcnR5XSA9ICRzY2g7XG4gIH1cbiAgb3V0ICs9ICd2YXIgJyArICgkZXJycykgKyAnID0gZXJyb3JzOyc7XG4gIHZhciAkY3VycmVudEVycm9yUGF0aCA9IGl0LmVycm9yUGF0aDtcbiAgb3V0ICs9ICd2YXIgbWlzc2luZycgKyAoJGx2bCkgKyAnOyc7XG4gIGZvciAodmFyICRwcm9wZXJ0eSBpbiAkcHJvcGVydHlEZXBzKSB7XG4gICAgJGRlcHMgPSAkcHJvcGVydHlEZXBzWyRwcm9wZXJ0eV07XG4gICAgaWYgKCRkZXBzLmxlbmd0aCkge1xuICAgICAgb3V0ICs9ICcgaWYgKCAnICsgKCRkYXRhKSArIChpdC51dGlsLmdldFByb3BlcnR5KCRwcm9wZXJ0eSkpICsgJyAhPT0gdW5kZWZpbmVkICc7XG4gICAgICBpZiAoJG93blByb3BlcnRpZXMpIHtcbiAgICAgICAgb3V0ICs9ICcgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCcgKyAoJGRhdGEpICsgJywgXFwnJyArIChpdC51dGlsLmVzY2FwZVF1b3RlcygkcHJvcGVydHkpKSArICdcXCcpICc7XG4gICAgICB9XG4gICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICBvdXQgKz0gJyAmJiAoICc7XG4gICAgICAgIHZhciBhcnIxID0gJGRlcHM7XG4gICAgICAgIGlmIChhcnIxKSB7XG4gICAgICAgICAgdmFyICRwcm9wZXJ0eUtleSwgJGkgPSAtMSxcbiAgICAgICAgICAgIGwxID0gYXJyMS5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlICgkaSA8IGwxKSB7XG4gICAgICAgICAgICAkcHJvcGVydHlLZXkgPSBhcnIxWyRpICs9IDFdO1xuICAgICAgICAgICAgaWYgKCRpKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHx8ICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgJHByb3AgPSBpdC51dGlsLmdldFByb3BlcnR5KCRwcm9wZXJ0eUtleSksXG4gICAgICAgICAgICAgICR1c2VEYXRhID0gJGRhdGEgKyAkcHJvcDtcbiAgICAgICAgICAgIG91dCArPSAnICggKCAnICsgKCR1c2VEYXRhKSArICcgPT09IHVuZGVmaW5lZCAnO1xuICAgICAgICAgICAgaWYgKCRvd25Qcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHx8ICEgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCcgKyAoJGRhdGEpICsgJywgXFwnJyArIChpdC51dGlsLmVzY2FwZVF1b3RlcygkcHJvcGVydHlLZXkpKSArICdcXCcpICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXQgKz0gJykgJiYgKG1pc3NpbmcnICsgKCRsdmwpICsgJyA9ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZyhpdC5vcHRzLmpzb25Qb2ludGVycyA/ICRwcm9wZXJ0eUtleSA6ICRwcm9wKSkgKyAnKSApICc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnKSkgeyAgJztcbiAgICAgICAgdmFyICRwcm9wZXJ0eVBhdGggPSAnbWlzc2luZycgKyAkbHZsLFxuICAgICAgICAgICRtaXNzaW5nUHJvcGVydHkgPSAnXFwnICsgJyArICRwcm9wZXJ0eVBhdGggKyAnICsgXFwnJztcbiAgICAgICAgaWYgKGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSkge1xuICAgICAgICAgIGl0LmVycm9yUGF0aCA9IGl0Lm9wdHMuanNvblBvaW50ZXJzID8gaXQudXRpbC5nZXRQYXRoRXhwcigkY3VycmVudEVycm9yUGF0aCwgJHByb3BlcnR5UGF0aCwgdHJ1ZSkgOiAkY3VycmVudEVycm9yUGF0aCArICcgKyAnICsgJHByb3BlcnR5UGF0aDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgICAgICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICAgICAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ2RlcGVuZGVuY2llcycpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgcHJvcGVydHk6IFxcJycgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJHByb3BlcnR5KSkgKyAnXFwnLCBtaXNzaW5nUHJvcGVydHk6IFxcJycgKyAoJG1pc3NpbmdQcm9wZXJ0eSkgKyAnXFwnLCBkZXBzQ291bnQ6ICcgKyAoJGRlcHMubGVuZ3RoKSArICcsIGRlcHM6IFxcJycgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJGRlcHMubGVuZ3RoID09IDEgPyAkZGVwc1swXSA6ICRkZXBzLmpvaW4oXCIsIFwiKSkpICsgJ1xcJyB9ICc7XG4gICAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBoYXZlICc7XG4gICAgICAgICAgICBpZiAoJGRlcHMubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICdwcm9wZXJ0eSAnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRkZXBzWzBdKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvdXQgKz0gJ3Byb3BlcnRpZXMgJyArIChpdC51dGlsLmVzY2FwZVF1b3RlcygkZGVwcy5qb2luKFwiLCBcIikpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dCArPSAnIHdoZW4gcHJvcGVydHkgJyArIChpdC51dGlsLmVzY2FwZVF1b3RlcygkcHJvcGVydHkpKSArICcgaXMgcHJlc2VudFxcJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJyApIHsgJztcbiAgICAgICAgdmFyIGFycjIgPSAkZGVwcztcbiAgICAgICAgaWYgKGFycjIpIHtcbiAgICAgICAgICB2YXIgJHByb3BlcnR5S2V5LCBpMiA9IC0xLFxuICAgICAgICAgICAgbDIgPSBhcnIyLmxlbmd0aCAtIDE7XG4gICAgICAgICAgd2hpbGUgKGkyIDwgbDIpIHtcbiAgICAgICAgICAgICRwcm9wZXJ0eUtleSA9IGFycjJbaTIgKz0gMV07XG4gICAgICAgICAgICB2YXIgJHByb3AgPSBpdC51dGlsLmdldFByb3BlcnR5KCRwcm9wZXJ0eUtleSksXG4gICAgICAgICAgICAgICRtaXNzaW5nUHJvcGVydHkgPSBpdC51dGlsLmVzY2FwZVF1b3RlcygkcHJvcGVydHlLZXkpLFxuICAgICAgICAgICAgICAkdXNlRGF0YSA9ICRkYXRhICsgJHByb3A7XG4gICAgICAgICAgICBpZiAoaXQub3B0cy5fZXJyb3JEYXRhUGF0aFByb3BlcnR5KSB7XG4gICAgICAgICAgICAgIGl0LmVycm9yUGF0aCA9IGl0LnV0aWwuZ2V0UGF0aCgkY3VycmVudEVycm9yUGF0aCwgJHByb3BlcnR5S2V5LCBpdC5vcHRzLmpzb25Qb2ludGVycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXQgKz0gJyBpZiAoICcgKyAoJHVzZURhdGEpICsgJyA9PT0gdW5kZWZpbmVkICc7XG4gICAgICAgICAgICBpZiAoJG93blByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcgfHwgISBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoJyArICgkZGF0YSkgKyAnLCBcXCcnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRwcm9wZXJ0eUtleSkpICsgJ1xcJykgJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dCArPSAnKSB7ICB2YXIgZXJyID0gICAnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdkZXBlbmRlbmNpZXMnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IHByb3BlcnR5OiBcXCcnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRwcm9wZXJ0eSkpICsgJ1xcJywgbWlzc2luZ1Byb3BlcnR5OiBcXCcnICsgKCRtaXNzaW5nUHJvcGVydHkpICsgJ1xcJywgZGVwc0NvdW50OiAnICsgKCRkZXBzLmxlbmd0aCkgKyAnLCBkZXBzOiBcXCcnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRkZXBzLmxlbmd0aCA9PSAxID8gJGRlcHNbMF0gOiAkZGVwcy5qb2luKFwiLCBcIikpKSArICdcXCcgfSAnO1xuICAgICAgICAgICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBoYXZlICc7XG4gICAgICAgICAgICAgICAgaWYgKCRkZXBzLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJ3Byb3BlcnR5ICcgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJGRlcHNbMF0pKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgb3V0ICs9ICdwcm9wZXJ0aWVzICcgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJGRlcHMuam9pbihcIiwgXCIpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG91dCArPSAnIHdoZW4gcHJvcGVydHkgJyArIChpdC51dGlsLmVzY2FwZVF1b3RlcygkcHJvcGVydHkpKSArICcgaXMgcHJlc2VudFxcJyAnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXQgKz0gJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyB9ICc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyB9ICAgJztcbiAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICRjbG9zaW5nQnJhY2VzICs9ICd9JztcbiAgICAgICAgb3V0ICs9ICcgZWxzZSB7ICc7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGl0LmVycm9yUGF0aCA9ICRjdXJyZW50RXJyb3JQYXRoO1xuICB2YXIgJGN1cnJlbnRCYXNlSWQgPSAkaXQuYmFzZUlkO1xuICBmb3IgKHZhciAkcHJvcGVydHkgaW4gJHNjaGVtYURlcHMpIHtcbiAgICB2YXIgJHNjaCA9ICRzY2hlbWFEZXBzWyRwcm9wZXJ0eV07XG4gICAgaWYgKChpdC5vcHRzLnN0cmljdEtleXdvcmRzID8gdHlwZW9mICRzY2ggPT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMoJHNjaCkubGVuZ3RoID4gMCA6IGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJHNjaCwgaXQuUlVMRVMuYWxsKSkpIHtcbiAgICAgIG91dCArPSAnICcgKyAoJG5leHRWYWxpZCkgKyAnID0gdHJ1ZTsgaWYgKCAnICsgKCRkYXRhKSArIChpdC51dGlsLmdldFByb3BlcnR5KCRwcm9wZXJ0eSkpICsgJyAhPT0gdW5kZWZpbmVkICc7XG4gICAgICBpZiAoJG93blByb3BlcnRpZXMpIHtcbiAgICAgICAgb3V0ICs9ICcgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCcgKyAoJGRhdGEpICsgJywgXFwnJyArIChpdC51dGlsLmVzY2FwZVF1b3RlcygkcHJvcGVydHkpKSArICdcXCcpICc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJykgeyAnO1xuICAgICAgJGl0LnNjaGVtYSA9ICRzY2g7XG4gICAgICAkaXQuc2NoZW1hUGF0aCA9ICRzY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgkcHJvcGVydHkpO1xuICAgICAgJGl0LmVyclNjaGVtYVBhdGggPSAkZXJyU2NoZW1hUGF0aCArICcvJyArIGl0LnV0aWwuZXNjYXBlRnJhZ21lbnQoJHByb3BlcnR5KTtcbiAgICAgIG91dCArPSAnICAnICsgKGl0LnZhbGlkYXRlKCRpdCkpICsgJyAnO1xuICAgICAgJGl0LmJhc2VJZCA9ICRjdXJyZW50QmFzZUlkO1xuICAgICAgb3V0ICs9ICcgfSAgJztcbiAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgIG91dCArPSAnIGlmICgnICsgKCRuZXh0VmFsaWQpICsgJykgeyAnO1xuICAgICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgb3V0ICs9ICcgICAnICsgKCRjbG9zaW5nQnJhY2VzKSArICcgaWYgKCcgKyAoJGVycnMpICsgJyA9PSBlcnJvcnMpIHsnO1xuICB9XG4gIG91dCA9IGl0LnV0aWwuY2xlYW5VcENvZGUob3V0KTtcbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfZW51bShpdCwgJGtleXdvcmQsICRydWxlVHlwZSkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJHZhbGlkID0gJ3ZhbGlkJyArICRsdmw7XG4gIHZhciAkaXNEYXRhID0gaXQub3B0cy4kZGF0YSAmJiAkc2NoZW1hICYmICRzY2hlbWEuJGRhdGEsXG4gICAgJHNjaGVtYVZhbHVlO1xuICBpZiAoJGlzRGF0YSkge1xuICAgIG91dCArPSAnIHZhciBzY2hlbWEnICsgKCRsdmwpICsgJyA9ICcgKyAoaXQudXRpbC5nZXREYXRhKCRzY2hlbWEuJGRhdGEsICRkYXRhTHZsLCBpdC5kYXRhUGF0aEFycikpICsgJzsgJztcbiAgICAkc2NoZW1hVmFsdWUgPSAnc2NoZW1hJyArICRsdmw7XG4gIH0gZWxzZSB7XG4gICAgJHNjaGVtYVZhbHVlID0gJHNjaGVtYTtcbiAgfVxuICB2YXIgJGkgPSAnaScgKyAkbHZsLFxuICAgICR2U2NoZW1hID0gJ3NjaGVtYScgKyAkbHZsO1xuICBpZiAoISRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyB2YXIgJyArICgkdlNjaGVtYSkgKyAnID0gdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnOyc7XG4gIH1cbiAgb3V0ICs9ICd2YXIgJyArICgkdmFsaWQpICsgJzsnO1xuICBpZiAoJGlzRGF0YSkge1xuICAgIG91dCArPSAnIGlmIChzY2hlbWEnICsgKCRsdmwpICsgJyA9PT0gdW5kZWZpbmVkKSAnICsgKCR2YWxpZCkgKyAnID0gdHJ1ZTsgZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkoc2NoZW1hJyArICgkbHZsKSArICcpKSAnICsgKCR2YWxpZCkgKyAnID0gZmFsc2U7IGVsc2Ugeyc7XG4gIH1cbiAgb3V0ICs9ICcnICsgKCR2YWxpZCkgKyAnID0gZmFsc2U7Zm9yICh2YXIgJyArICgkaSkgKyAnPTA7ICcgKyAoJGkpICsgJzwnICsgKCR2U2NoZW1hKSArICcubGVuZ3RoOyAnICsgKCRpKSArICcrKykgaWYgKGVxdWFsKCcgKyAoJGRhdGEpICsgJywgJyArICgkdlNjaGVtYSkgKyAnWycgKyAoJGkpICsgJ10pKSB7ICcgKyAoJHZhbGlkKSArICcgPSB0cnVlOyBicmVhazsgfSc7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgIH0gICc7XG4gIH1cbiAgb3V0ICs9ICcgaWYgKCEnICsgKCR2YWxpZCkgKyAnKSB7ICAgJztcbiAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdlbnVtJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBhbGxvd2VkVmFsdWVzOiBzY2hlbWEnICsgKCRsdmwpICsgJyB9ICc7XG4gICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBiZSBlcXVhbCB0byBvbmUgb2YgdGhlIGFsbG93ZWQgdmFsdWVzXFwnICc7XG4gICAgfVxuICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gJztcbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB7fSAnO1xuICB9XG4gIHZhciBfX2VyciA9IG91dDtcbiAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gIH1cbiAgb3V0ICs9ICcgfSc7XG4gIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgb3V0ICs9ICcgZWxzZSB7ICc7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfZm9ybWF0KGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIGlmIChpdC5vcHRzLmZvcm1hdCA9PT0gZmFsc2UpIHtcbiAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgb3V0ICs9ICcgaWYgKHRydWUpIHsgJztcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuICB2YXIgJGlzRGF0YSA9IGl0Lm9wdHMuJGRhdGEgJiYgJHNjaGVtYSAmJiAkc2NoZW1hLiRkYXRhLFxuICAgICRzY2hlbWFWYWx1ZTtcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyB2YXIgc2NoZW1hJyArICgkbHZsKSArICcgPSAnICsgKGl0LnV0aWwuZ2V0RGF0YSgkc2NoZW1hLiRkYXRhLCAkZGF0YUx2bCwgaXQuZGF0YVBhdGhBcnIpKSArICc7ICc7XG4gICAgJHNjaGVtYVZhbHVlID0gJ3NjaGVtYScgKyAkbHZsO1xuICB9IGVsc2Uge1xuICAgICRzY2hlbWFWYWx1ZSA9ICRzY2hlbWE7XG4gIH1cbiAgdmFyICR1bmtub3duRm9ybWF0cyA9IGl0Lm9wdHMudW5rbm93bkZvcm1hdHMsXG4gICAgJGFsbG93VW5rbm93biA9IEFycmF5LmlzQXJyYXkoJHVua25vd25Gb3JtYXRzKTtcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICB2YXIgJGZvcm1hdCA9ICdmb3JtYXQnICsgJGx2bCxcbiAgICAgICRpc09iamVjdCA9ICdpc09iamVjdCcgKyAkbHZsLFxuICAgICAgJGZvcm1hdFR5cGUgPSAnZm9ybWF0VHlwZScgKyAkbHZsO1xuICAgIG91dCArPSAnIHZhciAnICsgKCRmb3JtYXQpICsgJyA9IGZvcm1hdHNbJyArICgkc2NoZW1hVmFsdWUpICsgJ107IHZhciAnICsgKCRpc09iamVjdCkgKyAnID0gdHlwZW9mICcgKyAoJGZvcm1hdCkgKyAnID09IFxcJ29iamVjdFxcJyAmJiAhKCcgKyAoJGZvcm1hdCkgKyAnIGluc3RhbmNlb2YgUmVnRXhwKSAmJiAnICsgKCRmb3JtYXQpICsgJy52YWxpZGF0ZTsgdmFyICcgKyAoJGZvcm1hdFR5cGUpICsgJyA9ICcgKyAoJGlzT2JqZWN0KSArICcgJiYgJyArICgkZm9ybWF0KSArICcudHlwZSB8fCBcXCdzdHJpbmdcXCc7IGlmICgnICsgKCRpc09iamVjdCkgKyAnKSB7ICc7XG4gICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyB2YXIgYXN5bmMnICsgKCRsdmwpICsgJyA9ICcgKyAoJGZvcm1hdCkgKyAnLmFzeW5jOyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyAnICsgKCRmb3JtYXQpICsgJyA9ICcgKyAoJGZvcm1hdCkgKyAnLnZhbGlkYXRlOyB9IGlmICggICc7XG4gICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgIG91dCArPSAnICgnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mICcgKyAoJHNjaGVtYVZhbHVlKSArICcgIT0gXFwnc3RyaW5nXFwnKSB8fCAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyAoJztcbiAgICBpZiAoJHVua25vd25Gb3JtYXRzICE9ICdpZ25vcmUnKSB7XG4gICAgICBvdXQgKz0gJyAoJyArICgkc2NoZW1hVmFsdWUpICsgJyAmJiAhJyArICgkZm9ybWF0KSArICcgJztcbiAgICAgIGlmICgkYWxsb3dVbmtub3duKSB7XG4gICAgICAgIG91dCArPSAnICYmIHNlbGYuX29wdHMudW5rbm93bkZvcm1hdHMuaW5kZXhPZignICsgKCRzY2hlbWFWYWx1ZSkgKyAnKSA9PSAtMSAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcpIHx8ICc7XG4gICAgfVxuICAgIG91dCArPSAnICgnICsgKCRmb3JtYXQpICsgJyAmJiAnICsgKCRmb3JtYXRUeXBlKSArICcgPT0gXFwnJyArICgkcnVsZVR5cGUpICsgJ1xcJyAmJiAhKHR5cGVvZiAnICsgKCRmb3JtYXQpICsgJyA9PSBcXCdmdW5jdGlvblxcJyA/ICc7XG4gICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyAoYXN5bmMnICsgKCRsdmwpICsgJyA/IGF3YWl0ICcgKyAoJGZvcm1hdCkgKyAnKCcgKyAoJGRhdGEpICsgJykgOiAnICsgKCRmb3JtYXQpICsgJygnICsgKCRkYXRhKSArICcpKSAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyAnICsgKCRmb3JtYXQpICsgJygnICsgKCRkYXRhKSArICcpICc7XG4gICAgfVxuICAgIG91dCArPSAnIDogJyArICgkZm9ybWF0KSArICcudGVzdCgnICsgKCRkYXRhKSArICcpKSkpKSB7JztcbiAgfSBlbHNlIHtcbiAgICB2YXIgJGZvcm1hdCA9IGl0LmZvcm1hdHNbJHNjaGVtYV07XG4gICAgaWYgKCEkZm9ybWF0KSB7XG4gICAgICBpZiAoJHVua25vd25Gb3JtYXRzID09ICdpZ25vcmUnKSB7XG4gICAgICAgIGl0LmxvZ2dlci53YXJuKCd1bmtub3duIGZvcm1hdCBcIicgKyAkc2NoZW1hICsgJ1wiIGlnbm9yZWQgaW4gc2NoZW1hIGF0IHBhdGggXCInICsgaXQuZXJyU2NoZW1hUGF0aCArICdcIicpO1xuICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgIG91dCArPSAnIGlmICh0cnVlKSB7ICc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgIH0gZWxzZSBpZiAoJGFsbG93VW5rbm93biAmJiAkdW5rbm93bkZvcm1hdHMuaW5kZXhPZigkc2NoZW1hKSA+PSAwKSB7XG4gICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgb3V0ICs9ICcgaWYgKHRydWUpIHsgJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIGZvcm1hdCBcIicgKyAkc2NoZW1hICsgJ1wiIGlzIHVzZWQgaW4gc2NoZW1hIGF0IHBhdGggXCInICsgaXQuZXJyU2NoZW1hUGF0aCArICdcIicpO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgJGlzT2JqZWN0ID0gdHlwZW9mICRmb3JtYXQgPT0gJ29iamVjdCcgJiYgISgkZm9ybWF0IGluc3RhbmNlb2YgUmVnRXhwKSAmJiAkZm9ybWF0LnZhbGlkYXRlO1xuICAgIHZhciAkZm9ybWF0VHlwZSA9ICRpc09iamVjdCAmJiAkZm9ybWF0LnR5cGUgfHwgJ3N0cmluZyc7XG4gICAgaWYgKCRpc09iamVjdCkge1xuICAgICAgdmFyICRhc3luYyA9ICRmb3JtYXQuYXN5bmMgPT09IHRydWU7XG4gICAgICAkZm9ybWF0ID0gJGZvcm1hdC52YWxpZGF0ZTtcbiAgICB9XG4gICAgaWYgKCRmb3JtYXRUeXBlICE9ICRydWxlVHlwZSkge1xuICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgb3V0ICs9ICcgaWYgKHRydWUpIHsgJztcbiAgICAgIH1cbiAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuICAgIGlmICgkYXN5bmMpIHtcbiAgICAgIGlmICghaXQuYXN5bmMpIHRocm93IG5ldyBFcnJvcignYXN5bmMgZm9ybWF0IGluIHN5bmMgc2NoZW1hJyk7XG4gICAgICB2YXIgJGZvcm1hdFJlZiA9ICdmb3JtYXRzJyArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJHNjaGVtYSkgKyAnLnZhbGlkYXRlJztcbiAgICAgIG91dCArPSAnIGlmICghKGF3YWl0ICcgKyAoJGZvcm1hdFJlZikgKyAnKCcgKyAoJGRhdGEpICsgJykpKSB7ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIGlmICghICc7XG4gICAgICB2YXIgJGZvcm1hdFJlZiA9ICdmb3JtYXRzJyArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJHNjaGVtYSk7XG4gICAgICBpZiAoJGlzT2JqZWN0KSAkZm9ybWF0UmVmICs9ICcudmFsaWRhdGUnO1xuICAgICAgaWYgKHR5cGVvZiAkZm9ybWF0ID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb3V0ICs9ICcgJyArICgkZm9ybWF0UmVmKSArICcoJyArICgkZGF0YSkgKyAnKSAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgJyArICgkZm9ybWF0UmVmKSArICcudGVzdCgnICsgKCRkYXRhKSArICcpICc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJykgeyAnO1xuICAgIH1cbiAgfVxuICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ2Zvcm1hdCcpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgZm9ybWF0OiAgJztcbiAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgb3V0ICs9ICcnICsgKCRzY2hlbWFWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRzY2hlbWEpKTtcbiAgICB9XG4gICAgb3V0ICs9ICcgIH0gJztcbiAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIG1hdGNoIGZvcm1hdCBcIic7XG4gICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICBvdXQgKz0gJ1xcJyArICcgKyAoJHNjaGVtYVZhbHVlKSArICcgKyBcXCcnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRzY2hlbWEpKTtcbiAgICAgIH1cbiAgICAgIG91dCArPSAnXCJcXCcgJztcbiAgICB9XG4gICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6ICAnO1xuICAgICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgICAgb3V0ICs9ICd2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRzY2hlbWEpKTtcbiAgICAgIH1cbiAgICAgIG91dCArPSAnICAgICAgICAgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gJztcbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB7fSAnO1xuICB9XG4gIHZhciBfX2VyciA9IG91dDtcbiAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gIH1cbiAgb3V0ICs9ICcgfSAnO1xuICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX2lmKGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkdmFsaWQgPSAndmFsaWQnICsgJGx2bDtcbiAgdmFyICRlcnJzID0gJ2VycnNfXycgKyAkbHZsO1xuICB2YXIgJGl0ID0gaXQudXRpbC5jb3B5KGl0KTtcbiAgJGl0LmxldmVsKys7XG4gIHZhciAkbmV4dFZhbGlkID0gJ3ZhbGlkJyArICRpdC5sZXZlbDtcbiAgdmFyICR0aGVuU2NoID0gaXQuc2NoZW1hWyd0aGVuJ10sXG4gICAgJGVsc2VTY2ggPSBpdC5zY2hlbWFbJ2Vsc2UnXSxcbiAgICAkdGhlblByZXNlbnQgPSAkdGhlblNjaCAhPT0gdW5kZWZpbmVkICYmIChpdC5vcHRzLnN0cmljdEtleXdvcmRzID8gdHlwZW9mICR0aGVuU2NoID09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKCR0aGVuU2NoKS5sZW5ndGggPiAwIDogaXQudXRpbC5zY2hlbWFIYXNSdWxlcygkdGhlblNjaCwgaXQuUlVMRVMuYWxsKSksXG4gICAgJGVsc2VQcmVzZW50ID0gJGVsc2VTY2ggIT09IHVuZGVmaW5lZCAmJiAoaXQub3B0cy5zdHJpY3RLZXl3b3JkcyA/IHR5cGVvZiAkZWxzZVNjaCA9PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cygkZWxzZVNjaCkubGVuZ3RoID4gMCA6IGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJGVsc2VTY2gsIGl0LlJVTEVTLmFsbCkpLFxuICAgICRjdXJyZW50QmFzZUlkID0gJGl0LmJhc2VJZDtcbiAgaWYgKCR0aGVuUHJlc2VudCB8fCAkZWxzZVByZXNlbnQpIHtcbiAgICB2YXIgJGlmQ2xhdXNlO1xuICAgICRpdC5jcmVhdGVFcnJvcnMgPSBmYWxzZTtcbiAgICAkaXQuc2NoZW1hID0gJHNjaGVtYTtcbiAgICAkaXQuc2NoZW1hUGF0aCA9ICRzY2hlbWFQYXRoO1xuICAgICRpdC5lcnJTY2hlbWFQYXRoID0gJGVyclNjaGVtYVBhdGg7XG4gICAgb3V0ICs9ICcgdmFyICcgKyAoJGVycnMpICsgJyA9IGVycm9yczsgdmFyICcgKyAoJHZhbGlkKSArICcgPSB0cnVlOyAgJztcbiAgICB2YXIgJHdhc0NvbXBvc2l0ZSA9IGl0LmNvbXBvc2l0ZVJ1bGU7XG4gICAgaXQuY29tcG9zaXRlUnVsZSA9ICRpdC5jb21wb3NpdGVSdWxlID0gdHJ1ZTtcbiAgICBvdXQgKz0gJyAgJyArIChpdC52YWxpZGF0ZSgkaXQpKSArICcgJztcbiAgICAkaXQuYmFzZUlkID0gJGN1cnJlbnRCYXNlSWQ7XG4gICAgJGl0LmNyZWF0ZUVycm9ycyA9IHRydWU7XG4gICAgb3V0ICs9ICcgIGVycm9ycyA9ICcgKyAoJGVycnMpICsgJzsgaWYgKHZFcnJvcnMgIT09IG51bGwpIHsgaWYgKCcgKyAoJGVycnMpICsgJykgdkVycm9ycy5sZW5ndGggPSAnICsgKCRlcnJzKSArICc7IGVsc2UgdkVycm9ycyA9IG51bGw7IH0gICc7XG4gICAgaXQuY29tcG9zaXRlUnVsZSA9ICRpdC5jb21wb3NpdGVSdWxlID0gJHdhc0NvbXBvc2l0ZTtcbiAgICBpZiAoJHRoZW5QcmVzZW50KSB7XG4gICAgICBvdXQgKz0gJyBpZiAoJyArICgkbmV4dFZhbGlkKSArICcpIHsgICc7XG4gICAgICAkaXQuc2NoZW1hID0gaXQuc2NoZW1hWyd0aGVuJ107XG4gICAgICAkaXQuc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyAnLnRoZW4nO1xuICAgICAgJGl0LmVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy90aGVuJztcbiAgICAgIG91dCArPSAnICAnICsgKGl0LnZhbGlkYXRlKCRpdCkpICsgJyAnO1xuICAgICAgJGl0LmJhc2VJZCA9ICRjdXJyZW50QmFzZUlkO1xuICAgICAgb3V0ICs9ICcgJyArICgkdmFsaWQpICsgJyA9ICcgKyAoJG5leHRWYWxpZCkgKyAnOyAnO1xuICAgICAgaWYgKCR0aGVuUHJlc2VudCAmJiAkZWxzZVByZXNlbnQpIHtcbiAgICAgICAgJGlmQ2xhdXNlID0gJ2lmQ2xhdXNlJyArICRsdmw7XG4gICAgICAgIG91dCArPSAnIHZhciAnICsgKCRpZkNsYXVzZSkgKyAnID0gXFwndGhlblxcJzsgJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICRpZkNsYXVzZSA9ICdcXCd0aGVuXFwnJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIH0gJztcbiAgICAgIGlmICgkZWxzZVByZXNlbnQpIHtcbiAgICAgICAgb3V0ICs9ICcgZWxzZSB7ICc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIGlmICghJyArICgkbmV4dFZhbGlkKSArICcpIHsgJztcbiAgICB9XG4gICAgaWYgKCRlbHNlUHJlc2VudCkge1xuICAgICAgJGl0LnNjaGVtYSA9IGl0LnNjaGVtYVsnZWxzZSddO1xuICAgICAgJGl0LnNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgJy5lbHNlJztcbiAgICAgICRpdC5lcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvZWxzZSc7XG4gICAgICBvdXQgKz0gJyAgJyArIChpdC52YWxpZGF0ZSgkaXQpKSArICcgJztcbiAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgIG91dCArPSAnICcgKyAoJHZhbGlkKSArICcgPSAnICsgKCRuZXh0VmFsaWQpICsgJzsgJztcbiAgICAgIGlmICgkdGhlblByZXNlbnQgJiYgJGVsc2VQcmVzZW50KSB7XG4gICAgICAgICRpZkNsYXVzZSA9ICdpZkNsYXVzZScgKyAkbHZsO1xuICAgICAgICBvdXQgKz0gJyB2YXIgJyArICgkaWZDbGF1c2UpICsgJyA9IFxcJ2Vsc2VcXCc7ICc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkaWZDbGF1c2UgPSAnXFwnZWxzZVxcJyc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyB9ICc7XG4gICAgfVxuICAgIG91dCArPSAnIGlmICghJyArICgkdmFsaWQpICsgJykgeyAgIHZhciBlcnIgPSAgICc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgnaWYnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IGZhaWxpbmdLZXl3b3JkOiAnICsgKCRpZkNsYXVzZSkgKyAnIH0gJztcbiAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBtYXRjaCBcIlxcJyArICcgKyAoJGlmQ2xhdXNlKSArICcgKyBcXCdcIiBzY2hlbWFcXCcgJztcbiAgICAgIH1cbiAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIH0gJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcge30gJztcbiAgICB9XG4gICAgb3V0ICs9ICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcih2RXJyb3JzKTsgJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IHZFcnJvcnM7IHJldHVybiBmYWxzZTsgJztcbiAgICAgIH1cbiAgICB9XG4gICAgb3V0ICs9ICcgfSAgICc7XG4gICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICAgIH1cbiAgICBvdXQgPSBpdC51dGlsLmNsZWFuVXBDb2RlKG91dCk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgIG91dCArPSAnIGlmICh0cnVlKSB7ICc7XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX2l0ZW1zKGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkdmFsaWQgPSAndmFsaWQnICsgJGx2bDtcbiAgdmFyICRlcnJzID0gJ2VycnNfXycgKyAkbHZsO1xuICB2YXIgJGl0ID0gaXQudXRpbC5jb3B5KGl0KTtcbiAgdmFyICRjbG9zaW5nQnJhY2VzID0gJyc7XG4gICRpdC5sZXZlbCsrO1xuICB2YXIgJG5leHRWYWxpZCA9ICd2YWxpZCcgKyAkaXQubGV2ZWw7XG4gIHZhciAkaWR4ID0gJ2knICsgJGx2bCxcbiAgICAkZGF0YU54dCA9ICRpdC5kYXRhTGV2ZWwgPSBpdC5kYXRhTGV2ZWwgKyAxLFxuICAgICRuZXh0RGF0YSA9ICdkYXRhJyArICRkYXRhTnh0LFxuICAgICRjdXJyZW50QmFzZUlkID0gaXQuYmFzZUlkO1xuICBvdXQgKz0gJ3ZhciAnICsgKCRlcnJzKSArICcgPSBlcnJvcnM7dmFyICcgKyAoJHZhbGlkKSArICc7JztcbiAgaWYgKEFycmF5LmlzQXJyYXkoJHNjaGVtYSkpIHtcbiAgICB2YXIgJGFkZGl0aW9uYWxJdGVtcyA9IGl0LnNjaGVtYS5hZGRpdGlvbmFsSXRlbXM7XG4gICAgaWYgKCRhZGRpdGlvbmFsSXRlbXMgPT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAnICsgKCR2YWxpZCkgKyAnID0gJyArICgkZGF0YSkgKyAnLmxlbmd0aCA8PSAnICsgKCRzY2hlbWEubGVuZ3RoKSArICc7ICc7XG4gICAgICB2YXIgJGN1cnJFcnJTY2hlbWFQYXRoID0gJGVyclNjaGVtYVBhdGg7XG4gICAgICAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnL2FkZGl0aW9uYWxJdGVtcyc7XG4gICAgICBvdXQgKz0gJyAgaWYgKCEnICsgKCR2YWxpZCkgKyAnKSB7ICAgJztcbiAgICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAgICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICAgICAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ2FkZGl0aW9uYWxJdGVtcycpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgbGltaXQ6ICcgKyAoJHNjaGVtYS5sZW5ndGgpICsgJyB9ICc7XG4gICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIE5PVCBoYXZlIG1vcmUgdGhhbiAnICsgKCRzY2hlbWEubGVuZ3RoKSArICcgaXRlbXNcXCcgJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IGZhbHNlICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICB9XG4gICAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIH0gJztcbiAgICAgICRlcnJTY2hlbWFQYXRoID0gJGN1cnJFcnJTY2hlbWFQYXRoO1xuICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgJGNsb3NpbmdCcmFjZXMgKz0gJ30nO1xuICAgICAgICBvdXQgKz0gJyBlbHNlIHsgJztcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIGFycjEgPSAkc2NoZW1hO1xuICAgIGlmIChhcnIxKSB7XG4gICAgICB2YXIgJHNjaCwgJGkgPSAtMSxcbiAgICAgICAgbDEgPSBhcnIxLmxlbmd0aCAtIDE7XG4gICAgICB3aGlsZSAoJGkgPCBsMSkge1xuICAgICAgICAkc2NoID0gYXJyMVskaSArPSAxXTtcbiAgICAgICAgaWYgKChpdC5vcHRzLnN0cmljdEtleXdvcmRzID8gdHlwZW9mICRzY2ggPT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMoJHNjaCkubGVuZ3RoID4gMCA6IGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJHNjaCwgaXQuUlVMRVMuYWxsKSkpIHtcbiAgICAgICAgICBvdXQgKz0gJyAnICsgKCRuZXh0VmFsaWQpICsgJyA9IHRydWU7IGlmICgnICsgKCRkYXRhKSArICcubGVuZ3RoID4gJyArICgkaSkgKyAnKSB7ICc7XG4gICAgICAgICAgdmFyICRwYXNzRGF0YSA9ICRkYXRhICsgJ1snICsgJGkgKyAnXSc7XG4gICAgICAgICAgJGl0LnNjaGVtYSA9ICRzY2g7XG4gICAgICAgICAgJGl0LnNjaGVtYVBhdGggPSAkc2NoZW1hUGF0aCArICdbJyArICRpICsgJ10nO1xuICAgICAgICAgICRpdC5lcnJTY2hlbWFQYXRoID0gJGVyclNjaGVtYVBhdGggKyAnLycgKyAkaTtcbiAgICAgICAgICAkaXQuZXJyb3JQYXRoID0gaXQudXRpbC5nZXRQYXRoRXhwcihpdC5lcnJvclBhdGgsICRpLCBpdC5vcHRzLmpzb25Qb2ludGVycywgdHJ1ZSk7XG4gICAgICAgICAgJGl0LmRhdGFQYXRoQXJyWyRkYXRhTnh0XSA9ICRpO1xuICAgICAgICAgIHZhciAkY29kZSA9IGl0LnZhbGlkYXRlKCRpdCk7XG4gICAgICAgICAgJGl0LmJhc2VJZCA9ICRjdXJyZW50QmFzZUlkO1xuICAgICAgICAgIGlmIChpdC51dGlsLnZhck9jY3VyZW5jZXMoJGNvZGUsICRuZXh0RGF0YSkgPCAyKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAnICsgKGl0LnV0aWwudmFyUmVwbGFjZSgkY29kZSwgJG5leHREYXRhLCAkcGFzc0RhdGEpKSArICcgJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJG5leHREYXRhKSArICcgPSAnICsgKCRwYXNzRGF0YSkgKyAnOyAnICsgKCRjb2RlKSArICcgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgfSAgJztcbiAgICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJG5leHRWYWxpZCkgKyAnKSB7ICc7XG4gICAgICAgICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgJGFkZGl0aW9uYWxJdGVtcyA9PSAnb2JqZWN0JyAmJiAoaXQub3B0cy5zdHJpY3RLZXl3b3JkcyA/IHR5cGVvZiAkYWRkaXRpb25hbEl0ZW1zID09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKCRhZGRpdGlvbmFsSXRlbXMpLmxlbmd0aCA+IDAgOiBpdC51dGlsLnNjaGVtYUhhc1J1bGVzKCRhZGRpdGlvbmFsSXRlbXMsIGl0LlJVTEVTLmFsbCkpKSB7XG4gICAgICAkaXQuc2NoZW1hID0gJGFkZGl0aW9uYWxJdGVtcztcbiAgICAgICRpdC5zY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArICcuYWRkaXRpb25hbEl0ZW1zJztcbiAgICAgICRpdC5lcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvYWRkaXRpb25hbEl0ZW1zJztcbiAgICAgIG91dCArPSAnICcgKyAoJG5leHRWYWxpZCkgKyAnID0gdHJ1ZTsgaWYgKCcgKyAoJGRhdGEpICsgJy5sZW5ndGggPiAnICsgKCRzY2hlbWEubGVuZ3RoKSArICcpIHsgIGZvciAodmFyICcgKyAoJGlkeCkgKyAnID0gJyArICgkc2NoZW1hLmxlbmd0aCkgKyAnOyAnICsgKCRpZHgpICsgJyA8ICcgKyAoJGRhdGEpICsgJy5sZW5ndGg7ICcgKyAoJGlkeCkgKyAnKyspIHsgJztcbiAgICAgICRpdC5lcnJvclBhdGggPSBpdC51dGlsLmdldFBhdGhFeHByKGl0LmVycm9yUGF0aCwgJGlkeCwgaXQub3B0cy5qc29uUG9pbnRlcnMsIHRydWUpO1xuICAgICAgdmFyICRwYXNzRGF0YSA9ICRkYXRhICsgJ1snICsgJGlkeCArICddJztcbiAgICAgICRpdC5kYXRhUGF0aEFyclskZGF0YU54dF0gPSAkaWR4O1xuICAgICAgdmFyICRjb2RlID0gaXQudmFsaWRhdGUoJGl0KTtcbiAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgIGlmIChpdC51dGlsLnZhck9jY3VyZW5jZXMoJGNvZGUsICRuZXh0RGF0YSkgPCAyKSB7XG4gICAgICAgIG91dCArPSAnICcgKyAoaXQudXRpbC52YXJSZXBsYWNlKCRjb2RlLCAkbmV4dERhdGEsICRwYXNzRGF0YSkpICsgJyAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJG5leHREYXRhKSArICcgPSAnICsgKCRwYXNzRGF0YSkgKyAnOyAnICsgKCRjb2RlKSArICcgJztcbiAgICAgIH1cbiAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgIG91dCArPSAnIGlmICghJyArICgkbmV4dFZhbGlkKSArICcpIGJyZWFrOyAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgfSB9ICAnO1xuICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJG5leHRWYWxpZCkgKyAnKSB7ICc7XG4gICAgICAgICRjbG9zaW5nQnJhY2VzICs9ICd9JztcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoKGl0Lm9wdHMuc3RyaWN0S2V5d29yZHMgPyB0eXBlb2YgJHNjaGVtYSA9PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cygkc2NoZW1hKS5sZW5ndGggPiAwIDogaXQudXRpbC5zY2hlbWFIYXNSdWxlcygkc2NoZW1hLCBpdC5SVUxFUy5hbGwpKSkge1xuICAgICRpdC5zY2hlbWEgPSAkc2NoZW1hO1xuICAgICRpdC5zY2hlbWFQYXRoID0gJHNjaGVtYVBhdGg7XG4gICAgJGl0LmVyclNjaGVtYVBhdGggPSAkZXJyU2NoZW1hUGF0aDtcbiAgICBvdXQgKz0gJyAgZm9yICh2YXIgJyArICgkaWR4KSArICcgPSAnICsgKDApICsgJzsgJyArICgkaWR4KSArICcgPCAnICsgKCRkYXRhKSArICcubGVuZ3RoOyAnICsgKCRpZHgpICsgJysrKSB7ICc7XG4gICAgJGl0LmVycm9yUGF0aCA9IGl0LnV0aWwuZ2V0UGF0aEV4cHIoaXQuZXJyb3JQYXRoLCAkaWR4LCBpdC5vcHRzLmpzb25Qb2ludGVycywgdHJ1ZSk7XG4gICAgdmFyICRwYXNzRGF0YSA9ICRkYXRhICsgJ1snICsgJGlkeCArICddJztcbiAgICAkaXQuZGF0YVBhdGhBcnJbJGRhdGFOeHRdID0gJGlkeDtcbiAgICB2YXIgJGNvZGUgPSBpdC52YWxpZGF0ZSgkaXQpO1xuICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICBpZiAoaXQudXRpbC52YXJPY2N1cmVuY2VzKCRjb2RlLCAkbmV4dERhdGEpIDwgMikge1xuICAgICAgb3V0ICs9ICcgJyArIChpdC51dGlsLnZhclJlcGxhY2UoJGNvZGUsICRuZXh0RGF0YSwgJHBhc3NEYXRhKSkgKyAnICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHZhciAnICsgKCRuZXh0RGF0YSkgKyAnID0gJyArICgkcGFzc0RhdGEpICsgJzsgJyArICgkY29kZSkgKyAnICc7XG4gICAgfVxuICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICBvdXQgKz0gJyBpZiAoIScgKyAoJG5leHRWYWxpZCkgKyAnKSBicmVhazsgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgfSc7XG4gIH1cbiAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICBvdXQgKz0gJyAnICsgKCRjbG9zaW5nQnJhY2VzKSArICcgaWYgKCcgKyAoJGVycnMpICsgJyA9PSBlcnJvcnMpIHsnO1xuICB9XG4gIG91dCA9IGl0LnV0aWwuY2xlYW5VcENvZGUob3V0KTtcbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfX2xpbWl0KGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZXJyb3JLZXl3b3JkO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJGlzRGF0YSA9IGl0Lm9wdHMuJGRhdGEgJiYgJHNjaGVtYSAmJiAkc2NoZW1hLiRkYXRhLFxuICAgICRzY2hlbWFWYWx1ZTtcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyB2YXIgc2NoZW1hJyArICgkbHZsKSArICcgPSAnICsgKGl0LnV0aWwuZ2V0RGF0YSgkc2NoZW1hLiRkYXRhLCAkZGF0YUx2bCwgaXQuZGF0YVBhdGhBcnIpKSArICc7ICc7XG4gICAgJHNjaGVtYVZhbHVlID0gJ3NjaGVtYScgKyAkbHZsO1xuICB9IGVsc2Uge1xuICAgICRzY2hlbWFWYWx1ZSA9ICRzY2hlbWE7XG4gIH1cbiAgdmFyICRpc01heCA9ICRrZXl3b3JkID09ICdtYXhpbXVtJyxcbiAgICAkZXhjbHVzaXZlS2V5d29yZCA9ICRpc01heCA/ICdleGNsdXNpdmVNYXhpbXVtJyA6ICdleGNsdXNpdmVNaW5pbXVtJyxcbiAgICAkc2NoZW1hRXhjbCA9IGl0LnNjaGVtYVskZXhjbHVzaXZlS2V5d29yZF0sXG4gICAgJGlzRGF0YUV4Y2wgPSBpdC5vcHRzLiRkYXRhICYmICRzY2hlbWFFeGNsICYmICRzY2hlbWFFeGNsLiRkYXRhLFxuICAgICRvcCA9ICRpc01heCA/ICc8JyA6ICc+JyxcbiAgICAkbm90T3AgPSAkaXNNYXggPyAnPicgOiAnPCcsXG4gICAgJGVycm9yS2V5d29yZCA9IHVuZGVmaW5lZDtcbiAgaWYgKCRpc0RhdGFFeGNsKSB7XG4gICAgdmFyICRzY2hlbWFWYWx1ZUV4Y2wgPSBpdC51dGlsLmdldERhdGEoJHNjaGVtYUV4Y2wuJGRhdGEsICRkYXRhTHZsLCBpdC5kYXRhUGF0aEFyciksXG4gICAgICAkZXhjbHVzaXZlID0gJ2V4Y2x1c2l2ZScgKyAkbHZsLFxuICAgICAgJGV4Y2xUeXBlID0gJ2V4Y2xUeXBlJyArICRsdmwsXG4gICAgICAkZXhjbElzTnVtYmVyID0gJ2V4Y2xJc051bWJlcicgKyAkbHZsLFxuICAgICAgJG9wRXhwciA9ICdvcCcgKyAkbHZsLFxuICAgICAgJG9wU3RyID0gJ1xcJyArICcgKyAkb3BFeHByICsgJyArIFxcJyc7XG4gICAgb3V0ICs9ICcgdmFyIHNjaGVtYUV4Y2wnICsgKCRsdmwpICsgJyA9ICcgKyAoJHNjaGVtYVZhbHVlRXhjbCkgKyAnOyAnO1xuICAgICRzY2hlbWFWYWx1ZUV4Y2wgPSAnc2NoZW1hRXhjbCcgKyAkbHZsO1xuICAgIG91dCArPSAnIHZhciAnICsgKCRleGNsdXNpdmUpICsgJzsgdmFyICcgKyAoJGV4Y2xUeXBlKSArICcgPSB0eXBlb2YgJyArICgkc2NoZW1hVmFsdWVFeGNsKSArICc7IGlmICgnICsgKCRleGNsVHlwZSkgKyAnICE9IFxcJ2Jvb2xlYW5cXCcgJiYgJyArICgkZXhjbFR5cGUpICsgJyAhPSBcXCd1bmRlZmluZWRcXCcgJiYgJyArICgkZXhjbFR5cGUpICsgJyAhPSBcXCdudW1iZXJcXCcpIHsgJztcbiAgICB2YXIgJGVycm9yS2V5d29yZCA9ICRleGNsdXNpdmVLZXl3b3JkO1xuICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCRlcnJvcktleXdvcmQgfHwgJ19leGNsdXNpdmVMaW1pdCcpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHt9ICc7XG4gICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCcnICsgKCRleGNsdXNpdmVLZXl3b3JkKSArICcgc2hvdWxkIGJlIGJvb2xlYW5cXCcgJztcbiAgICAgIH1cbiAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIH0gJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcge30gJztcbiAgICB9XG4gICAgdmFyIF9fZXJyID0gb3V0O1xuICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9IGVsc2UgaWYgKCAnO1xuICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICBvdXQgKz0gJyAoJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9IFxcJ251bWJlclxcJykgfHwgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgJyArICgkZXhjbFR5cGUpICsgJyA9PSBcXCdudW1iZXJcXCcgPyAoICgnICsgKCRleGNsdXNpdmUpICsgJyA9ICcgKyAoJHNjaGVtYVZhbHVlKSArICcgPT09IHVuZGVmaW5lZCB8fCAnICsgKCRzY2hlbWFWYWx1ZUV4Y2wpICsgJyAnICsgKCRvcCkgKyAnPSAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnKSA/ICcgKyAoJGRhdGEpICsgJyAnICsgKCRub3RPcCkgKyAnPSAnICsgKCRzY2hlbWFWYWx1ZUV4Y2wpICsgJyA6ICcgKyAoJGRhdGEpICsgJyAnICsgKCRub3RPcCkgKyAnICcgKyAoJHNjaGVtYVZhbHVlKSArICcgKSA6ICggKCcgKyAoJGV4Y2x1c2l2ZSkgKyAnID0gJyArICgkc2NoZW1hVmFsdWVFeGNsKSArICcgPT09IHRydWUpID8gJyArICgkZGF0YSkgKyAnICcgKyAoJG5vdE9wKSArICc9ICcgKyAoJHNjaGVtYVZhbHVlKSArICcgOiAnICsgKCRkYXRhKSArICcgJyArICgkbm90T3ApICsgJyAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICkgfHwgJyArICgkZGF0YSkgKyAnICE9PSAnICsgKCRkYXRhKSArICcpIHsgdmFyIG9wJyArICgkbHZsKSArICcgPSAnICsgKCRleGNsdXNpdmUpICsgJyA/IFxcJycgKyAoJG9wKSArICdcXCcgOiBcXCcnICsgKCRvcCkgKyAnPVxcJzsgJztcbiAgICBpZiAoJHNjaGVtYSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAkZXJyb3JLZXl3b3JkID0gJGV4Y2x1c2l2ZUtleXdvcmQ7XG4gICAgICAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAkZXhjbHVzaXZlS2V5d29yZDtcbiAgICAgICRzY2hlbWFWYWx1ZSA9ICRzY2hlbWFWYWx1ZUV4Y2w7XG4gICAgICAkaXNEYXRhID0gJGlzRGF0YUV4Y2w7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciAkZXhjbElzTnVtYmVyID0gdHlwZW9mICRzY2hlbWFFeGNsID09ICdudW1iZXInLFxuICAgICAgJG9wU3RyID0gJG9wO1xuICAgIGlmICgkZXhjbElzTnVtYmVyICYmICRpc0RhdGEpIHtcbiAgICAgIHZhciAkb3BFeHByID0gJ1xcJycgKyAkb3BTdHIgKyAnXFwnJztcbiAgICAgIG91dCArPSAnIGlmICggJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAnICgnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mICcgKyAoJHNjaGVtYVZhbHVlKSArICcgIT0gXFwnbnVtYmVyXFwnKSB8fCAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgKCAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnID09PSB1bmRlZmluZWQgfHwgJyArICgkc2NoZW1hRXhjbCkgKyAnICcgKyAoJG9wKSArICc9ICcgKyAoJHNjaGVtYVZhbHVlKSArICcgPyAnICsgKCRkYXRhKSArICcgJyArICgkbm90T3ApICsgJz0gJyArICgkc2NoZW1hRXhjbCkgKyAnIDogJyArICgkZGF0YSkgKyAnICcgKyAoJG5vdE9wKSArICcgJyArICgkc2NoZW1hVmFsdWUpICsgJyApIHx8ICcgKyAoJGRhdGEpICsgJyAhPT0gJyArICgkZGF0YSkgKyAnKSB7ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICgkZXhjbElzTnVtYmVyICYmICRzY2hlbWEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAkZXhjbHVzaXZlID0gdHJ1ZTtcbiAgICAgICAgJGVycm9yS2V5d29yZCA9ICRleGNsdXNpdmVLZXl3b3JkO1xuICAgICAgICAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAkZXhjbHVzaXZlS2V5d29yZDtcbiAgICAgICAgJHNjaGVtYVZhbHVlID0gJHNjaGVtYUV4Y2w7XG4gICAgICAgICRub3RPcCArPSAnPSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoJGV4Y2xJc051bWJlcikgJHNjaGVtYVZhbHVlID0gTWF0aFskaXNNYXggPyAnbWluJyA6ICdtYXgnXSgkc2NoZW1hRXhjbCwgJHNjaGVtYSk7XG4gICAgICAgIGlmICgkc2NoZW1hRXhjbCA9PT0gKCRleGNsSXNOdW1iZXIgPyAkc2NoZW1hVmFsdWUgOiB0cnVlKSkge1xuICAgICAgICAgICRleGNsdXNpdmUgPSB0cnVlO1xuICAgICAgICAgICRlcnJvcktleXdvcmQgPSAkZXhjbHVzaXZlS2V5d29yZDtcbiAgICAgICAgICAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAkZXhjbHVzaXZlS2V5d29yZDtcbiAgICAgICAgICAkbm90T3AgKz0gJz0nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICRleGNsdXNpdmUgPSBmYWxzZTtcbiAgICAgICAgICAkb3BTdHIgKz0gJz0nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgJG9wRXhwciA9ICdcXCcnICsgJG9wU3RyICsgJ1xcJyc7XG4gICAgICBvdXQgKz0gJyBpZiAoICc7XG4gICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICBvdXQgKz0gJyAoJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9IFxcJ251bWJlclxcJykgfHwgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnICcgKyAoJGRhdGEpICsgJyAnICsgKCRub3RPcCkgKyAnICcgKyAoJHNjaGVtYVZhbHVlKSArICcgfHwgJyArICgkZGF0YSkgKyAnICE9PSAnICsgKCRkYXRhKSArICcpIHsgJztcbiAgICB9XG4gIH1cbiAgJGVycm9yS2V5d29yZCA9ICRlcnJvcktleXdvcmQgfHwgJGtleXdvcmQ7XG4gIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgkZXJyb3JLZXl3b3JkIHx8ICdfbGltaXQnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IGNvbXBhcmlzb246ICcgKyAoJG9wRXhwcikgKyAnLCBsaW1pdDogJyArICgkc2NoZW1hVmFsdWUpICsgJywgZXhjbHVzaXZlOiAnICsgKCRleGNsdXNpdmUpICsgJyB9ICc7XG4gICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBiZSAnICsgKCRvcFN0cikgKyAnICc7XG4gICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICBvdXQgKz0gJ1xcJyArICcgKyAoJHNjaGVtYVZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnJyArICgkc2NoZW1hVmFsdWUpICsgJ1xcJyc7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgIG91dCArPSAnICwgc2NoZW1hOiAgJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAndmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoJHNjaGVtYSk7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyAgICAgICAgICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9ICc7XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcge30gJztcbiAgfVxuICB2YXIgX19lcnIgPSBvdXQ7XG4gIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICB9XG4gIG91dCArPSAnIH0gJztcbiAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICBvdXQgKz0gJyBlbHNlIHsgJztcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9fbGltaXRJdGVtcyhpdCwgJGtleXdvcmQsICRydWxlVHlwZSkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGVycm9yS2V5d29yZDtcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICRpc0RhdGEgPSBpdC5vcHRzLiRkYXRhICYmICRzY2hlbWEgJiYgJHNjaGVtYS4kZGF0YSxcbiAgICAkc2NoZW1hVmFsdWU7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgdmFyIHNjaGVtYScgKyAoJGx2bCkgKyAnID0gJyArIChpdC51dGlsLmdldERhdGEoJHNjaGVtYS4kZGF0YSwgJGRhdGFMdmwsIGl0LmRhdGFQYXRoQXJyKSkgKyAnOyAnO1xuICAgICRzY2hlbWFWYWx1ZSA9ICdzY2hlbWEnICsgJGx2bDtcbiAgfSBlbHNlIHtcbiAgICAkc2NoZW1hVmFsdWUgPSAkc2NoZW1hO1xuICB9XG4gIHZhciAkb3AgPSAka2V5d29yZCA9PSAnbWF4SXRlbXMnID8gJz4nIDogJzwnO1xuICBvdXQgKz0gJ2lmICggJztcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyAoJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9IFxcJ251bWJlclxcJykgfHwgJztcbiAgfVxuICBvdXQgKz0gJyAnICsgKCRkYXRhKSArICcubGVuZ3RoICcgKyAoJG9wKSArICcgJyArICgkc2NoZW1hVmFsdWUpICsgJykgeyAnO1xuICB2YXIgJGVycm9yS2V5d29yZCA9ICRrZXl3b3JkO1xuICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJGVycm9yS2V5d29yZCB8fCAnX2xpbWl0SXRlbXMnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IGxpbWl0OiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnIH0gJztcbiAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIE5PVCBoYXZlICc7XG4gICAgICBpZiAoJGtleXdvcmQgPT0gJ21heEl0ZW1zJykge1xuICAgICAgICBvdXQgKz0gJ21vcmUnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICdmZXdlcic7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyB0aGFuICc7XG4gICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICBvdXQgKz0gJ1xcJyArICcgKyAoJHNjaGVtYVZhbHVlKSArICcgKyBcXCcnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcnICsgKCRzY2hlbWEpO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgaXRlbXNcXCcgJztcbiAgICB9XG4gICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6ICAnO1xuICAgICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgICAgb3V0ICs9ICd2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnJyArICgkc2NoZW1hKTtcbiAgICAgIH1cbiAgICAgIG91dCArPSAnICAgICAgICAgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gJztcbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB7fSAnO1xuICB9XG4gIHZhciBfX2VyciA9IG91dDtcbiAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gIH1cbiAgb3V0ICs9ICd9ICc7XG4gIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgb3V0ICs9ICcgZWxzZSB7ICc7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfX2xpbWl0TGVuZ3RoKGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZXJyb3JLZXl3b3JkO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJGlzRGF0YSA9IGl0Lm9wdHMuJGRhdGEgJiYgJHNjaGVtYSAmJiAkc2NoZW1hLiRkYXRhLFxuICAgICRzY2hlbWFWYWx1ZTtcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyB2YXIgc2NoZW1hJyArICgkbHZsKSArICcgPSAnICsgKGl0LnV0aWwuZ2V0RGF0YSgkc2NoZW1hLiRkYXRhLCAkZGF0YUx2bCwgaXQuZGF0YVBhdGhBcnIpKSArICc7ICc7XG4gICAgJHNjaGVtYVZhbHVlID0gJ3NjaGVtYScgKyAkbHZsO1xuICB9IGVsc2Uge1xuICAgICRzY2hlbWFWYWx1ZSA9ICRzY2hlbWE7XG4gIH1cbiAgdmFyICRvcCA9ICRrZXl3b3JkID09ICdtYXhMZW5ndGgnID8gJz4nIDogJzwnO1xuICBvdXQgKz0gJ2lmICggJztcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyAoJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9IFxcJ251bWJlclxcJykgfHwgJztcbiAgfVxuICBpZiAoaXQub3B0cy51bmljb2RlID09PSBmYWxzZSkge1xuICAgIG91dCArPSAnICcgKyAoJGRhdGEpICsgJy5sZW5ndGggJztcbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB1Y3MybGVuZ3RoKCcgKyAoJGRhdGEpICsgJykgJztcbiAgfVxuICBvdXQgKz0gJyAnICsgKCRvcCkgKyAnICcgKyAoJHNjaGVtYVZhbHVlKSArICcpIHsgJztcbiAgdmFyICRlcnJvcktleXdvcmQgPSAka2V5d29yZDtcbiAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCRlcnJvcktleXdvcmQgfHwgJ19saW1pdExlbmd0aCcpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgbGltaXQ6ICcgKyAoJHNjaGVtYVZhbHVlKSArICcgfSAnO1xuICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgTk9UIGJlICc7XG4gICAgICBpZiAoJGtleXdvcmQgPT0gJ21heExlbmd0aCcpIHtcbiAgICAgICAgb3V0ICs9ICdsb25nZXInO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICdzaG9ydGVyJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIHRoYW4gJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAnXFwnICsgJyArICgkc2NoZW1hVmFsdWUpICsgJyArIFxcJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoJHNjaGVtYSk7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyBjaGFyYWN0ZXJzXFwnICc7XG4gICAgfVxuICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgIG91dCArPSAnICwgc2NoZW1hOiAgJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAndmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoJHNjaGVtYSk7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyAgICAgICAgICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9ICc7XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcge30gJztcbiAgfVxuICB2YXIgX19lcnIgPSBvdXQ7XG4gIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICB9XG4gIG91dCArPSAnfSAnO1xuICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX19saW1pdFByb3BlcnRpZXMoaXQsICRrZXl3b3JkLCAkcnVsZVR5cGUpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRlcnJvcktleXdvcmQ7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkaXNEYXRhID0gaXQub3B0cy4kZGF0YSAmJiAkc2NoZW1hICYmICRzY2hlbWEuJGRhdGEsXG4gICAgJHNjaGVtYVZhbHVlO1xuICBpZiAoJGlzRGF0YSkge1xuICAgIG91dCArPSAnIHZhciBzY2hlbWEnICsgKCRsdmwpICsgJyA9ICcgKyAoaXQudXRpbC5nZXREYXRhKCRzY2hlbWEuJGRhdGEsICRkYXRhTHZsLCBpdC5kYXRhUGF0aEFycikpICsgJzsgJztcbiAgICAkc2NoZW1hVmFsdWUgPSAnc2NoZW1hJyArICRsdmw7XG4gIH0gZWxzZSB7XG4gICAgJHNjaGVtYVZhbHVlID0gJHNjaGVtYTtcbiAgfVxuICB2YXIgJG9wID0gJGtleXdvcmQgPT0gJ21heFByb3BlcnRpZXMnID8gJz4nIDogJzwnO1xuICBvdXQgKz0gJ2lmICggJztcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyAoJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9IFxcJ251bWJlclxcJykgfHwgJztcbiAgfVxuICBvdXQgKz0gJyBPYmplY3Qua2V5cygnICsgKCRkYXRhKSArICcpLmxlbmd0aCAnICsgKCRvcCkgKyAnICcgKyAoJHNjaGVtYVZhbHVlKSArICcpIHsgJztcbiAgdmFyICRlcnJvcktleXdvcmQgPSAka2V5d29yZDtcbiAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCRlcnJvcktleXdvcmQgfHwgJ19saW1pdFByb3BlcnRpZXMnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IGxpbWl0OiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnIH0gJztcbiAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIE5PVCBoYXZlICc7XG4gICAgICBpZiAoJGtleXdvcmQgPT0gJ21heFByb3BlcnRpZXMnKSB7XG4gICAgICAgIG91dCArPSAnbW9yZSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJ2Zld2VyJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIHRoYW4gJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAnXFwnICsgJyArICgkc2NoZW1hVmFsdWUpICsgJyArIFxcJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoJHNjaGVtYSk7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyBwcm9wZXJ0aWVzXFwnICc7XG4gICAgfVxuICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgIG91dCArPSAnICwgc2NoZW1hOiAgJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAndmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoJHNjaGVtYSk7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyAgICAgICAgICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9ICc7XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcge30gJztcbiAgfVxuICB2YXIgX19lcnIgPSBvdXQ7XG4gIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICB9XG4gIG91dCArPSAnfSAnO1xuICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX211bHRpcGxlT2YoaXQsICRrZXl3b3JkLCAkcnVsZVR5cGUpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICRpc0RhdGEgPSBpdC5vcHRzLiRkYXRhICYmICRzY2hlbWEgJiYgJHNjaGVtYS4kZGF0YSxcbiAgICAkc2NoZW1hVmFsdWU7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgdmFyIHNjaGVtYScgKyAoJGx2bCkgKyAnID0gJyArIChpdC51dGlsLmdldERhdGEoJHNjaGVtYS4kZGF0YSwgJGRhdGFMdmwsIGl0LmRhdGFQYXRoQXJyKSkgKyAnOyAnO1xuICAgICRzY2hlbWFWYWx1ZSA9ICdzY2hlbWEnICsgJGx2bDtcbiAgfSBlbHNlIHtcbiAgICAkc2NoZW1hVmFsdWUgPSAkc2NoZW1hO1xuICB9XG4gIG91dCArPSAndmFyIGRpdmlzaW9uJyArICgkbHZsKSArICc7aWYgKCc7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPT0gdW5kZWZpbmVkICYmICggdHlwZW9mICcgKyAoJHNjaGVtYVZhbHVlKSArICcgIT0gXFwnbnVtYmVyXFwnIHx8ICc7XG4gIH1cbiAgb3V0ICs9ICcgKGRpdmlzaW9uJyArICgkbHZsKSArICcgPSAnICsgKCRkYXRhKSArICcgLyAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnLCAnO1xuICBpZiAoaXQub3B0cy5tdWx0aXBsZU9mUHJlY2lzaW9uKSB7XG4gICAgb3V0ICs9ICcgTWF0aC5hYnMoTWF0aC5yb3VuZChkaXZpc2lvbicgKyAoJGx2bCkgKyAnKSAtIGRpdmlzaW9uJyArICgkbHZsKSArICcpID4gMWUtJyArIChpdC5vcHRzLm11bHRpcGxlT2ZQcmVjaXNpb24pICsgJyAnO1xuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIGRpdmlzaW9uJyArICgkbHZsKSArICcgIT09IHBhcnNlSW50KGRpdmlzaW9uJyArICgkbHZsKSArICcpICc7XG4gIH1cbiAgb3V0ICs9ICcgKSAnO1xuICBpZiAoJGlzRGF0YSkge1xuICAgIG91dCArPSAnICApICAnO1xuICB9XG4gIG91dCArPSAnICkgeyAgICc7XG4gIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgnbXVsdGlwbGVPZicpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgbXVsdGlwbGVPZjogJyArICgkc2NoZW1hVmFsdWUpICsgJyB9ICc7XG4gICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBiZSBtdWx0aXBsZSBvZiAnO1xuICAgICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgICAgb3V0ICs9ICdcXCcgKyAnICsgKCRzY2hlbWFWYWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoJHNjaGVtYVZhbHVlKSArICdcXCcnO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICBvdXQgKz0gJyAsIHNjaGVtYTogICc7XG4gICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICBvdXQgKz0gJ3ZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcnICsgKCRzY2hlbWEpO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgICAgICAgICAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgfSAnO1xuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIHt9ICc7XG4gIH1cbiAgdmFyIF9fZXJyID0gb3V0O1xuICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChpdC5hc3luYykge1xuICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgfVxuICBvdXQgKz0gJ30gJztcbiAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICBvdXQgKz0gJyBlbHNlIHsgJztcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9ub3QoaXQsICRrZXl3b3JkLCAkcnVsZVR5cGUpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICRlcnJzID0gJ2VycnNfXycgKyAkbHZsO1xuICB2YXIgJGl0ID0gaXQudXRpbC5jb3B5KGl0KTtcbiAgJGl0LmxldmVsKys7XG4gIHZhciAkbmV4dFZhbGlkID0gJ3ZhbGlkJyArICRpdC5sZXZlbDtcbiAgaWYgKChpdC5vcHRzLnN0cmljdEtleXdvcmRzID8gdHlwZW9mICRzY2hlbWEgPT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMoJHNjaGVtYSkubGVuZ3RoID4gMCA6IGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJHNjaGVtYSwgaXQuUlVMRVMuYWxsKSkpIHtcbiAgICAkaXQuc2NoZW1hID0gJHNjaGVtYTtcbiAgICAkaXQuc2NoZW1hUGF0aCA9ICRzY2hlbWFQYXRoO1xuICAgICRpdC5lcnJTY2hlbWFQYXRoID0gJGVyclNjaGVtYVBhdGg7XG4gICAgb3V0ICs9ICcgdmFyICcgKyAoJGVycnMpICsgJyA9IGVycm9yczsgICc7XG4gICAgdmFyICR3YXNDb21wb3NpdGUgPSBpdC5jb21wb3NpdGVSdWxlO1xuICAgIGl0LmNvbXBvc2l0ZVJ1bGUgPSAkaXQuY29tcG9zaXRlUnVsZSA9IHRydWU7XG4gICAgJGl0LmNyZWF0ZUVycm9ycyA9IGZhbHNlO1xuICAgIHZhciAkYWxsRXJyb3JzT3B0aW9uO1xuICAgIGlmICgkaXQub3B0cy5hbGxFcnJvcnMpIHtcbiAgICAgICRhbGxFcnJvcnNPcHRpb24gPSAkaXQub3B0cy5hbGxFcnJvcnM7XG4gICAgICAkaXQub3B0cy5hbGxFcnJvcnMgPSBmYWxzZTtcbiAgICB9XG4gICAgb3V0ICs9ICcgJyArIChpdC52YWxpZGF0ZSgkaXQpKSArICcgJztcbiAgICAkaXQuY3JlYXRlRXJyb3JzID0gdHJ1ZTtcbiAgICBpZiAoJGFsbEVycm9yc09wdGlvbikgJGl0Lm9wdHMuYWxsRXJyb3JzID0gJGFsbEVycm9yc09wdGlvbjtcbiAgICBpdC5jb21wb3NpdGVSdWxlID0gJGl0LmNvbXBvc2l0ZVJ1bGUgPSAkd2FzQ29tcG9zaXRlO1xuICAgIG91dCArPSAnIGlmICgnICsgKCRuZXh0VmFsaWQpICsgJykgeyAgICc7XG4gICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICAgIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ25vdCcpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHt9ICc7XG4gICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgTk9UIGJlIHZhbGlkXFwnICc7XG4gICAgICB9XG4gICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyB9ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgfVxuICAgIHZhciBfX2VyciA9IG91dDtcbiAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgfSBlbHNlIHsgIGVycm9ycyA9ICcgKyAoJGVycnMpICsgJzsgaWYgKHZFcnJvcnMgIT09IG51bGwpIHsgaWYgKCcgKyAoJGVycnMpICsgJykgdkVycm9ycy5sZW5ndGggPSAnICsgKCRlcnJzKSArICc7IGVsc2UgdkVycm9ycyA9IG51bGw7IH0gJztcbiAgICBpZiAoaXQub3B0cy5hbGxFcnJvcnMpIHtcbiAgICAgIG91dCArPSAnIH0gJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgIHZhciBlcnIgPSAgICc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgnbm90JykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczoge30gJztcbiAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBOT1QgYmUgdmFsaWRcXCcgJztcbiAgICAgIH1cbiAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIH0gJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcge30gJztcbiAgICB9XG4gICAgb3V0ICs9ICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgb3V0ICs9ICcgaWYgKGZhbHNlKSB7ICc7XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX29uZU9mKGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkdmFsaWQgPSAndmFsaWQnICsgJGx2bDtcbiAgdmFyICRlcnJzID0gJ2VycnNfXycgKyAkbHZsO1xuICB2YXIgJGl0ID0gaXQudXRpbC5jb3B5KGl0KTtcbiAgdmFyICRjbG9zaW5nQnJhY2VzID0gJyc7XG4gICRpdC5sZXZlbCsrO1xuICB2YXIgJG5leHRWYWxpZCA9ICd2YWxpZCcgKyAkaXQubGV2ZWw7XG4gIHZhciAkY3VycmVudEJhc2VJZCA9ICRpdC5iYXNlSWQsXG4gICAgJHByZXZWYWxpZCA9ICdwcmV2VmFsaWQnICsgJGx2bCxcbiAgICAkcGFzc2luZ1NjaGVtYXMgPSAncGFzc2luZ1NjaGVtYXMnICsgJGx2bDtcbiAgb3V0ICs9ICd2YXIgJyArICgkZXJycykgKyAnID0gZXJyb3JzICwgJyArICgkcHJldlZhbGlkKSArICcgPSBmYWxzZSAsICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZSAsICcgKyAoJHBhc3NpbmdTY2hlbWFzKSArICcgPSBudWxsOyAnO1xuICB2YXIgJHdhc0NvbXBvc2l0ZSA9IGl0LmNvbXBvc2l0ZVJ1bGU7XG4gIGl0LmNvbXBvc2l0ZVJ1bGUgPSAkaXQuY29tcG9zaXRlUnVsZSA9IHRydWU7XG4gIHZhciBhcnIxID0gJHNjaGVtYTtcbiAgaWYgKGFycjEpIHtcbiAgICB2YXIgJHNjaCwgJGkgPSAtMSxcbiAgICAgIGwxID0gYXJyMS5sZW5ndGggLSAxO1xuICAgIHdoaWxlICgkaSA8IGwxKSB7XG4gICAgICAkc2NoID0gYXJyMVskaSArPSAxXTtcbiAgICAgIGlmICgoaXQub3B0cy5zdHJpY3RLZXl3b3JkcyA/IHR5cGVvZiAkc2NoID09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKCRzY2gpLmxlbmd0aCA+IDAgOiBpdC51dGlsLnNjaGVtYUhhc1J1bGVzKCRzY2gsIGl0LlJVTEVTLmFsbCkpKSB7XG4gICAgICAgICRpdC5zY2hlbWEgPSAkc2NoO1xuICAgICAgICAkaXQuc2NoZW1hUGF0aCA9ICRzY2hlbWFQYXRoICsgJ1snICsgJGkgKyAnXSc7XG4gICAgICAgICRpdC5lcnJTY2hlbWFQYXRoID0gJGVyclNjaGVtYVBhdGggKyAnLycgKyAkaTtcbiAgICAgICAgb3V0ICs9ICcgICcgKyAoaXQudmFsaWRhdGUoJGl0KSkgKyAnICc7XG4gICAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnIHZhciAnICsgKCRuZXh0VmFsaWQpICsgJyA9IHRydWU7ICc7XG4gICAgICB9XG4gICAgICBpZiAoJGkpIHtcbiAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJG5leHRWYWxpZCkgKyAnICYmICcgKyAoJHByZXZWYWxpZCkgKyAnKSB7ICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZTsgJyArICgkcGFzc2luZ1NjaGVtYXMpICsgJyA9IFsnICsgKCRwYXNzaW5nU2NoZW1hcykgKyAnLCAnICsgKCRpKSArICddOyB9IGVsc2UgeyAnO1xuICAgICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyBpZiAoJyArICgkbmV4dFZhbGlkKSArICcpIHsgJyArICgkdmFsaWQpICsgJyA9ICcgKyAoJHByZXZWYWxpZCkgKyAnID0gdHJ1ZTsgJyArICgkcGFzc2luZ1NjaGVtYXMpICsgJyA9ICcgKyAoJGkpICsgJzsgfSc7XG4gICAgfVxuICB9XG4gIGl0LmNvbXBvc2l0ZVJ1bGUgPSAkaXQuY29tcG9zaXRlUnVsZSA9ICR3YXNDb21wb3NpdGU7XG4gIG91dCArPSAnJyArICgkY2xvc2luZ0JyYWNlcykgKyAnaWYgKCEnICsgKCR2YWxpZCkgKyAnKSB7ICAgdmFyIGVyciA9ICAgJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ29uZU9mJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBwYXNzaW5nU2NoZW1hczogJyArICgkcGFzc2luZ1NjaGVtYXMpICsgJyB9ICc7XG4gICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBtYXRjaCBleGFjdGx5IG9uZSBzY2hlbWEgaW4gb25lT2ZcXCcgJztcbiAgICB9XG4gICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgfSAnO1xuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIHt9ICc7XG4gIH1cbiAgb3V0ICs9ICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IodkVycm9ycyk7ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IHZFcnJvcnM7IHJldHVybiBmYWxzZTsgJztcbiAgICB9XG4gIH1cbiAgb3V0ICs9ICd9IGVsc2UgeyAgZXJyb3JzID0gJyArICgkZXJycykgKyAnOyBpZiAodkVycm9ycyAhPT0gbnVsbCkgeyBpZiAoJyArICgkZXJycykgKyAnKSB2RXJyb3JzLmxlbmd0aCA9ICcgKyAoJGVycnMpICsgJzsgZWxzZSB2RXJyb3JzID0gbnVsbDsgfSc7XG4gIGlmIChpdC5vcHRzLmFsbEVycm9ycykge1xuICAgIG91dCArPSAnIH0gJztcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9wYXR0ZXJuKGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkaXNEYXRhID0gaXQub3B0cy4kZGF0YSAmJiAkc2NoZW1hICYmICRzY2hlbWEuJGRhdGEsXG4gICAgJHNjaGVtYVZhbHVlO1xuICBpZiAoJGlzRGF0YSkge1xuICAgIG91dCArPSAnIHZhciBzY2hlbWEnICsgKCRsdmwpICsgJyA9ICcgKyAoaXQudXRpbC5nZXREYXRhKCRzY2hlbWEuJGRhdGEsICRkYXRhTHZsLCBpdC5kYXRhUGF0aEFycikpICsgJzsgJztcbiAgICAkc2NoZW1hVmFsdWUgPSAnc2NoZW1hJyArICRsdmw7XG4gIH0gZWxzZSB7XG4gICAgJHNjaGVtYVZhbHVlID0gJHNjaGVtYTtcbiAgfVxuICB2YXIgJHJlZ2V4cCA9ICRpc0RhdGEgPyAnKG5ldyBSZWdFeHAoJyArICRzY2hlbWFWYWx1ZSArICcpKScgOiBpdC51c2VQYXR0ZXJuKCRzY2hlbWEpO1xuICBvdXQgKz0gJ2lmICggJztcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyAoJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9IFxcJ3N0cmluZ1xcJykgfHwgJztcbiAgfVxuICBvdXQgKz0gJyAhJyArICgkcmVnZXhwKSArICcudGVzdCgnICsgKCRkYXRhKSArICcpICkgeyAgICc7XG4gIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgncGF0dGVybicpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgcGF0dGVybjogICc7XG4gICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgIG91dCArPSAnJyArICgkc2NoZW1hVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJycgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkc2NoZW1hKSk7XG4gICAgfVxuICAgIG91dCArPSAnICB9ICc7XG4gICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBtYXRjaCBwYXR0ZXJuIFwiJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAnXFwnICsgJyArICgkc2NoZW1hVmFsdWUpICsgJyArIFxcJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJHNjaGVtYSkpO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICdcIlxcJyAnO1xuICAgIH1cbiAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICBvdXQgKz0gJyAsIHNjaGVtYTogICc7XG4gICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICBvdXQgKz0gJ3ZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJHNjaGVtYSkpO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgICAgICAgICAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgfSAnO1xuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIHt9ICc7XG4gIH1cbiAgdmFyIF9fZXJyID0gb3V0O1xuICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChpdC5hc3luYykge1xuICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgfVxuICBvdXQgKz0gJ30gJztcbiAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICBvdXQgKz0gJyBlbHNlIHsgJztcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9wcm9wZXJ0aWVzKGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkZXJycyA9ICdlcnJzX18nICsgJGx2bDtcbiAgdmFyICRpdCA9IGl0LnV0aWwuY29weShpdCk7XG4gIHZhciAkY2xvc2luZ0JyYWNlcyA9ICcnO1xuICAkaXQubGV2ZWwrKztcbiAgdmFyICRuZXh0VmFsaWQgPSAndmFsaWQnICsgJGl0LmxldmVsO1xuICB2YXIgJGtleSA9ICdrZXknICsgJGx2bCxcbiAgICAkaWR4ID0gJ2lkeCcgKyAkbHZsLFxuICAgICRkYXRhTnh0ID0gJGl0LmRhdGFMZXZlbCA9IGl0LmRhdGFMZXZlbCArIDEsXG4gICAgJG5leHREYXRhID0gJ2RhdGEnICsgJGRhdGFOeHQsXG4gICAgJGRhdGFQcm9wZXJ0aWVzID0gJ2RhdGFQcm9wZXJ0aWVzJyArICRsdmw7XG4gIHZhciAkc2NoZW1hS2V5cyA9IE9iamVjdC5rZXlzKCRzY2hlbWEgfHwge30pLFxuICAgICRwUHJvcGVydGllcyA9IGl0LnNjaGVtYS5wYXR0ZXJuUHJvcGVydGllcyB8fCB7fSxcbiAgICAkcFByb3BlcnR5S2V5cyA9IE9iamVjdC5rZXlzKCRwUHJvcGVydGllcyksXG4gICAgJGFQcm9wZXJ0aWVzID0gaXQuc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLFxuICAgICRzb21lUHJvcGVydGllcyA9ICRzY2hlbWFLZXlzLmxlbmd0aCB8fCAkcFByb3BlcnR5S2V5cy5sZW5ndGgsXG4gICAgJG5vQWRkaXRpb25hbCA9ICRhUHJvcGVydGllcyA9PT0gZmFsc2UsXG4gICAgJGFkZGl0aW9uYWxJc1NjaGVtYSA9IHR5cGVvZiAkYVByb3BlcnRpZXMgPT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMoJGFQcm9wZXJ0aWVzKS5sZW5ndGgsXG4gICAgJHJlbW92ZUFkZGl0aW9uYWwgPSBpdC5vcHRzLnJlbW92ZUFkZGl0aW9uYWwsXG4gICAgJGNoZWNrQWRkaXRpb25hbCA9ICRub0FkZGl0aW9uYWwgfHwgJGFkZGl0aW9uYWxJc1NjaGVtYSB8fCAkcmVtb3ZlQWRkaXRpb25hbCxcbiAgICAkb3duUHJvcGVydGllcyA9IGl0Lm9wdHMub3duUHJvcGVydGllcyxcbiAgICAkY3VycmVudEJhc2VJZCA9IGl0LmJhc2VJZDtcbiAgdmFyICRyZXF1aXJlZCA9IGl0LnNjaGVtYS5yZXF1aXJlZDtcbiAgaWYgKCRyZXF1aXJlZCAmJiAhKGl0Lm9wdHMuJGRhdGEgJiYgJHJlcXVpcmVkLiRkYXRhKSAmJiAkcmVxdWlyZWQubGVuZ3RoIDwgaXQub3B0cy5sb29wUmVxdWlyZWQpIHZhciAkcmVxdWlyZWRIYXNoID0gaXQudXRpbC50b0hhc2goJHJlcXVpcmVkKTtcbiAgb3V0ICs9ICd2YXIgJyArICgkZXJycykgKyAnID0gZXJyb3JzO3ZhciAnICsgKCRuZXh0VmFsaWQpICsgJyA9IHRydWU7JztcbiAgaWYgKCRvd25Qcm9wZXJ0aWVzKSB7XG4gICAgb3V0ICs9ICcgdmFyICcgKyAoJGRhdGFQcm9wZXJ0aWVzKSArICcgPSB1bmRlZmluZWQ7JztcbiAgfVxuICBpZiAoJGNoZWNrQWRkaXRpb25hbCkge1xuICAgIGlmICgkb3duUHJvcGVydGllcykge1xuICAgICAgb3V0ICs9ICcgJyArICgkZGF0YVByb3BlcnRpZXMpICsgJyA9ICcgKyAoJGRhdGFQcm9wZXJ0aWVzKSArICcgfHwgT2JqZWN0LmtleXMoJyArICgkZGF0YSkgKyAnKTsgZm9yICh2YXIgJyArICgkaWR4KSArICc9MDsgJyArICgkaWR4KSArICc8JyArICgkZGF0YVByb3BlcnRpZXMpICsgJy5sZW5ndGg7ICcgKyAoJGlkeCkgKyAnKyspIHsgdmFyICcgKyAoJGtleSkgKyAnID0gJyArICgkZGF0YVByb3BlcnRpZXMpICsgJ1snICsgKCRpZHgpICsgJ107ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIGZvciAodmFyICcgKyAoJGtleSkgKyAnIGluICcgKyAoJGRhdGEpICsgJykgeyAnO1xuICAgIH1cbiAgICBpZiAoJHNvbWVQcm9wZXJ0aWVzKSB7XG4gICAgICBvdXQgKz0gJyB2YXIgaXNBZGRpdGlvbmFsJyArICgkbHZsKSArICcgPSAhKGZhbHNlICc7XG4gICAgICBpZiAoJHNjaGVtYUtleXMubGVuZ3RoKSB7XG4gICAgICAgIGlmICgkc2NoZW1hS2V5cy5sZW5ndGggPiA4KSB7XG4gICAgICAgICAgb3V0ICs9ICcgfHwgdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnLmhhc093blByb3BlcnR5KCcgKyAoJGtleSkgKyAnKSAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBhcnIxID0gJHNjaGVtYUtleXM7XG4gICAgICAgICAgaWYgKGFycjEpIHtcbiAgICAgICAgICAgIHZhciAkcHJvcGVydHlLZXksIGkxID0gLTEsXG4gICAgICAgICAgICAgIGwxID0gYXJyMS5sZW5ndGggLSAxO1xuICAgICAgICAgICAgd2hpbGUgKGkxIDwgbDEpIHtcbiAgICAgICAgICAgICAgJHByb3BlcnR5S2V5ID0gYXJyMVtpMSArPSAxXTtcbiAgICAgICAgICAgICAgb3V0ICs9ICcgfHwgJyArICgka2V5KSArICcgPT0gJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRwcm9wZXJ0eUtleSkpICsgJyAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCRwUHJvcGVydHlLZXlzLmxlbmd0aCkge1xuICAgICAgICB2YXIgYXJyMiA9ICRwUHJvcGVydHlLZXlzO1xuICAgICAgICBpZiAoYXJyMikge1xuICAgICAgICAgIHZhciAkcFByb3BlcnR5LCAkaSA9IC0xLFxuICAgICAgICAgICAgbDIgPSBhcnIyLmxlbmd0aCAtIDE7XG4gICAgICAgICAgd2hpbGUgKCRpIDwgbDIpIHtcbiAgICAgICAgICAgICRwUHJvcGVydHkgPSBhcnIyWyRpICs9IDFdO1xuICAgICAgICAgICAgb3V0ICs9ICcgfHwgJyArIChpdC51c2VQYXR0ZXJuKCRwUHJvcGVydHkpKSArICcudGVzdCgnICsgKCRrZXkpICsgJykgJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG91dCArPSAnICk7IGlmIChpc0FkZGl0aW9uYWwnICsgKCRsdmwpICsgJykgeyAnO1xuICAgIH1cbiAgICBpZiAoJHJlbW92ZUFkZGl0aW9uYWwgPT0gJ2FsbCcpIHtcbiAgICAgIG91dCArPSAnIGRlbGV0ZSAnICsgKCRkYXRhKSArICdbJyArICgka2V5KSArICddOyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgJGN1cnJlbnRFcnJvclBhdGggPSBpdC5lcnJvclBhdGg7XG4gICAgICB2YXIgJGFkZGl0aW9uYWxQcm9wZXJ0eSA9ICdcXCcgKyAnICsgJGtleSArICcgKyBcXCcnO1xuICAgICAgaWYgKGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSkge1xuICAgICAgICBpdC5lcnJvclBhdGggPSBpdC51dGlsLmdldFBhdGhFeHByKGl0LmVycm9yUGF0aCwgJGtleSwgaXQub3B0cy5qc29uUG9pbnRlcnMpO1xuICAgICAgfVxuICAgICAgaWYgKCRub0FkZGl0aW9uYWwpIHtcbiAgICAgICAgaWYgKCRyZW1vdmVBZGRpdGlvbmFsKSB7XG4gICAgICAgICAgb3V0ICs9ICcgZGVsZXRlICcgKyAoJGRhdGEpICsgJ1snICsgKCRrZXkpICsgJ107ICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcgJyArICgkbmV4dFZhbGlkKSArICcgPSBmYWxzZTsgJztcbiAgICAgICAgICB2YXIgJGN1cnJFcnJTY2hlbWFQYXRoID0gJGVyclNjaGVtYVBhdGg7XG4gICAgICAgICAgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy9hZGRpdGlvbmFsUHJvcGVydGllcyc7XG4gICAgICAgICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICAgICAgICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICAgICAgICAgIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ2FkZGl0aW9uYWxQcm9wZXJ0aWVzJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBhZGRpdGlvbmFsUHJvcGVydHk6IFxcJycgKyAoJGFkZGl0aW9uYWxQcm9wZXJ0eSkgKyAnXFwnIH0gJztcbiAgICAgICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJyc7XG4gICAgICAgICAgICAgIGlmIChpdC5vcHRzLl9lcnJvckRhdGFQYXRoUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJ2lzIGFuIGludmFsaWQgYWRkaXRpb25hbCBwcm9wZXJ0eSc7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICdzaG91bGQgTk9UIGhhdmUgYWRkaXRpb25hbCBwcm9wZXJ0aWVzJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBvdXQgKz0gJ1xcJyAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogZmFsc2UgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBfX2VyciA9IG91dDtcbiAgICAgICAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgICAgICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICAgICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgJGVyclNjaGVtYVBhdGggPSAkY3VyckVyclNjaGVtYVBhdGg7XG4gICAgICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgICAgIG91dCArPSAnIGJyZWFrOyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICgkYWRkaXRpb25hbElzU2NoZW1hKSB7XG4gICAgICAgIGlmICgkcmVtb3ZlQWRkaXRpb25hbCA9PSAnZmFpbGluZycpIHtcbiAgICAgICAgICBvdXQgKz0gJyB2YXIgJyArICgkZXJycykgKyAnID0gZXJyb3JzOyAgJztcbiAgICAgICAgICB2YXIgJHdhc0NvbXBvc2l0ZSA9IGl0LmNvbXBvc2l0ZVJ1bGU7XG4gICAgICAgICAgaXQuY29tcG9zaXRlUnVsZSA9ICRpdC5jb21wb3NpdGVSdWxlID0gdHJ1ZTtcbiAgICAgICAgICAkaXQuc2NoZW1hID0gJGFQcm9wZXJ0aWVzO1xuICAgICAgICAgICRpdC5zY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArICcuYWRkaXRpb25hbFByb3BlcnRpZXMnO1xuICAgICAgICAgICRpdC5lcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvYWRkaXRpb25hbFByb3BlcnRpZXMnO1xuICAgICAgICAgICRpdC5lcnJvclBhdGggPSBpdC5vcHRzLl9lcnJvckRhdGFQYXRoUHJvcGVydHkgPyBpdC5lcnJvclBhdGggOiBpdC51dGlsLmdldFBhdGhFeHByKGl0LmVycm9yUGF0aCwgJGtleSwgaXQub3B0cy5qc29uUG9pbnRlcnMpO1xuICAgICAgICAgIHZhciAkcGFzc0RhdGEgPSAkZGF0YSArICdbJyArICRrZXkgKyAnXSc7XG4gICAgICAgICAgJGl0LmRhdGFQYXRoQXJyWyRkYXRhTnh0XSA9ICRrZXk7XG4gICAgICAgICAgdmFyICRjb2RlID0gaXQudmFsaWRhdGUoJGl0KTtcbiAgICAgICAgICAkaXQuYmFzZUlkID0gJGN1cnJlbnRCYXNlSWQ7XG4gICAgICAgICAgaWYgKGl0LnV0aWwudmFyT2NjdXJlbmNlcygkY29kZSwgJG5leHREYXRhKSA8IDIpIHtcbiAgICAgICAgICAgIG91dCArPSAnICcgKyAoaXQudXRpbC52YXJSZXBsYWNlKCRjb2RlLCAkbmV4dERhdGEsICRwYXNzRGF0YSkpICsgJyAnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvdXQgKz0gJyB2YXIgJyArICgkbmV4dERhdGEpICsgJyA9ICcgKyAoJHBhc3NEYXRhKSArICc7ICcgKyAoJGNvZGUpICsgJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdXQgKz0gJyBpZiAoIScgKyAoJG5leHRWYWxpZCkgKyAnKSB7IGVycm9ycyA9ICcgKyAoJGVycnMpICsgJzsgaWYgKHZhbGlkYXRlLmVycm9ycyAhPT0gbnVsbCkgeyBpZiAoZXJyb3JzKSB2YWxpZGF0ZS5lcnJvcnMubGVuZ3RoID0gZXJyb3JzOyBlbHNlIHZhbGlkYXRlLmVycm9ycyA9IG51bGw7IH0gZGVsZXRlICcgKyAoJGRhdGEpICsgJ1snICsgKCRrZXkpICsgJ107IH0gICc7XG4gICAgICAgICAgaXQuY29tcG9zaXRlUnVsZSA9ICRpdC5jb21wb3NpdGVSdWxlID0gJHdhc0NvbXBvc2l0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAkaXQuc2NoZW1hID0gJGFQcm9wZXJ0aWVzO1xuICAgICAgICAgICRpdC5zY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArICcuYWRkaXRpb25hbFByb3BlcnRpZXMnO1xuICAgICAgICAgICRpdC5lcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvYWRkaXRpb25hbFByb3BlcnRpZXMnO1xuICAgICAgICAgICRpdC5lcnJvclBhdGggPSBpdC5vcHRzLl9lcnJvckRhdGFQYXRoUHJvcGVydHkgPyBpdC5lcnJvclBhdGggOiBpdC51dGlsLmdldFBhdGhFeHByKGl0LmVycm9yUGF0aCwgJGtleSwgaXQub3B0cy5qc29uUG9pbnRlcnMpO1xuICAgICAgICAgIHZhciAkcGFzc0RhdGEgPSAkZGF0YSArICdbJyArICRrZXkgKyAnXSc7XG4gICAgICAgICAgJGl0LmRhdGFQYXRoQXJyWyRkYXRhTnh0XSA9ICRrZXk7XG4gICAgICAgICAgdmFyICRjb2RlID0gaXQudmFsaWRhdGUoJGl0KTtcbiAgICAgICAgICAkaXQuYmFzZUlkID0gJGN1cnJlbnRCYXNlSWQ7XG4gICAgICAgICAgaWYgKGl0LnV0aWwudmFyT2NjdXJlbmNlcygkY29kZSwgJG5leHREYXRhKSA8IDIpIHtcbiAgICAgICAgICAgIG91dCArPSAnICcgKyAoaXQudXRpbC52YXJSZXBsYWNlKCRjb2RlLCAkbmV4dERhdGEsICRwYXNzRGF0YSkpICsgJyAnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvdXQgKz0gJyB2YXIgJyArICgkbmV4dERhdGEpICsgJyA9ICcgKyAoJHBhc3NEYXRhKSArICc7ICcgKyAoJGNvZGUpICsgJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgICAgb3V0ICs9ICcgaWYgKCEnICsgKCRuZXh0VmFsaWQpICsgJykgYnJlYWs7ICc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpdC5lcnJvclBhdGggPSAkY3VycmVudEVycm9yUGF0aDtcbiAgICB9XG4gICAgaWYgKCRzb21lUHJvcGVydGllcykge1xuICAgICAgb3V0ICs9ICcgfSAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9ICAnO1xuICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICBvdXQgKz0gJyBpZiAoJyArICgkbmV4dFZhbGlkKSArICcpIHsgJztcbiAgICAgICRjbG9zaW5nQnJhY2VzICs9ICd9JztcbiAgICB9XG4gIH1cbiAgdmFyICR1c2VEZWZhdWx0cyA9IGl0Lm9wdHMudXNlRGVmYXVsdHMgJiYgIWl0LmNvbXBvc2l0ZVJ1bGU7XG4gIGlmICgkc2NoZW1hS2V5cy5sZW5ndGgpIHtcbiAgICB2YXIgYXJyMyA9ICRzY2hlbWFLZXlzO1xuICAgIGlmIChhcnIzKSB7XG4gICAgICB2YXIgJHByb3BlcnR5S2V5LCBpMyA9IC0xLFxuICAgICAgICBsMyA9IGFycjMubGVuZ3RoIC0gMTtcbiAgICAgIHdoaWxlIChpMyA8IGwzKSB7XG4gICAgICAgICRwcm9wZXJ0eUtleSA9IGFycjNbaTMgKz0gMV07XG4gICAgICAgIHZhciAkc2NoID0gJHNjaGVtYVskcHJvcGVydHlLZXldO1xuICAgICAgICBpZiAoKGl0Lm9wdHMuc3RyaWN0S2V5d29yZHMgPyB0eXBlb2YgJHNjaCA9PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cygkc2NoKS5sZW5ndGggPiAwIDogaXQudXRpbC5zY2hlbWFIYXNSdWxlcygkc2NoLCBpdC5SVUxFUy5hbGwpKSkge1xuICAgICAgICAgIHZhciAkcHJvcCA9IGl0LnV0aWwuZ2V0UHJvcGVydHkoJHByb3BlcnR5S2V5KSxcbiAgICAgICAgICAgICRwYXNzRGF0YSA9ICRkYXRhICsgJHByb3AsXG4gICAgICAgICAgICAkaGFzRGVmYXVsdCA9ICR1c2VEZWZhdWx0cyAmJiAkc2NoLmRlZmF1bHQgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAkaXQuc2NoZW1hID0gJHNjaDtcbiAgICAgICAgICAkaXQuc2NoZW1hUGF0aCA9ICRzY2hlbWFQYXRoICsgJHByb3A7XG4gICAgICAgICAgJGl0LmVyclNjaGVtYVBhdGggPSAkZXJyU2NoZW1hUGF0aCArICcvJyArIGl0LnV0aWwuZXNjYXBlRnJhZ21lbnQoJHByb3BlcnR5S2V5KTtcbiAgICAgICAgICAkaXQuZXJyb3JQYXRoID0gaXQudXRpbC5nZXRQYXRoKGl0LmVycm9yUGF0aCwgJHByb3BlcnR5S2V5LCBpdC5vcHRzLmpzb25Qb2ludGVycyk7XG4gICAgICAgICAgJGl0LmRhdGFQYXRoQXJyWyRkYXRhTnh0XSA9IGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJHByb3BlcnR5S2V5KTtcbiAgICAgICAgICB2YXIgJGNvZGUgPSBpdC52YWxpZGF0ZSgkaXQpO1xuICAgICAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgICAgICBpZiAoaXQudXRpbC52YXJPY2N1cmVuY2VzKCRjb2RlLCAkbmV4dERhdGEpIDwgMikge1xuICAgICAgICAgICAgJGNvZGUgPSBpdC51dGlsLnZhclJlcGxhY2UoJGNvZGUsICRuZXh0RGF0YSwgJHBhc3NEYXRhKTtcbiAgICAgICAgICAgIHZhciAkdXNlRGF0YSA9ICRwYXNzRGF0YTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyICR1c2VEYXRhID0gJG5leHREYXRhO1xuICAgICAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJG5leHREYXRhKSArICcgPSAnICsgKCRwYXNzRGF0YSkgKyAnOyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoJGhhc0RlZmF1bHQpIHtcbiAgICAgICAgICAgIG91dCArPSAnICcgKyAoJGNvZGUpICsgJyAnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoJHJlcXVpcmVkSGFzaCAmJiAkcmVxdWlyZWRIYXNoWyRwcm9wZXJ0eUtleV0pIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcgaWYgKCAnICsgKCR1c2VEYXRhKSArICcgPT09IHVuZGVmaW5lZCAnO1xuICAgICAgICAgICAgICBpZiAoJG93blByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyB8fCAhIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCgnICsgKCRkYXRhKSArICcsIFxcJycgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJHByb3BlcnR5S2V5KSkgKyAnXFwnKSAnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG91dCArPSAnKSB7ICcgKyAoJG5leHRWYWxpZCkgKyAnID0gZmFsc2U7ICc7XG4gICAgICAgICAgICAgIHZhciAkY3VycmVudEVycm9yUGF0aCA9IGl0LmVycm9yUGF0aCxcbiAgICAgICAgICAgICAgICAkY3VyckVyclNjaGVtYVBhdGggPSAkZXJyU2NoZW1hUGF0aCxcbiAgICAgICAgICAgICAgICAkbWlzc2luZ1Byb3BlcnR5ID0gaXQudXRpbC5lc2NhcGVRdW90ZXMoJHByb3BlcnR5S2V5KTtcbiAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIGl0LmVycm9yUGF0aCA9IGl0LnV0aWwuZ2V0UGF0aCgkY3VycmVudEVycm9yUGF0aCwgJHByb3BlcnR5S2V5LCBpdC5vcHRzLmpzb25Qb2ludGVycyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy9yZXF1aXJlZCc7XG4gICAgICAgICAgICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAgICAgICAgICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgICAgICAgICAgIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgncmVxdWlyZWQnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IG1pc3NpbmdQcm9wZXJ0eTogXFwnJyArICgkbWlzc2luZ1Byb3BlcnR5KSArICdcXCcgfSAnO1xuICAgICAgICAgICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCcnO1xuICAgICAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgICAgICBvdXQgKz0gJ2lzIGEgcmVxdWlyZWQgcHJvcGVydHknO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICdzaG91bGQgaGF2ZSByZXF1aXJlZCBwcm9wZXJ0eSBcXFxcXFwnJyArICgkbWlzc2luZ1Byb3BlcnR5KSArICdcXFxcXFwnJztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIG91dCArPSAnXFwnICc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyB7fSAnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHZhciBfX2VyciA9IG91dDtcbiAgICAgICAgICAgICAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgICAgICAgICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgJGVyclNjaGVtYVBhdGggPSAkY3VyckVyclNjaGVtYVBhdGg7XG4gICAgICAgICAgICAgIGl0LmVycm9yUGF0aCA9ICRjdXJyZW50RXJyb3JQYXRoO1xuICAgICAgICAgICAgICBvdXQgKz0gJyB9IGVsc2UgeyAnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyBpZiAoICcgKyAoJHVzZURhdGEpICsgJyA9PT0gdW5kZWZpbmVkICc7XG4gICAgICAgICAgICAgICAgaWYgKCRvd25Qcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJyB8fCAhIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCgnICsgKCRkYXRhKSArICcsIFxcJycgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJHByb3BlcnR5S2V5KSkgKyAnXFwnKSAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvdXQgKz0gJykgeyAnICsgKCRuZXh0VmFsaWQpICsgJyA9IHRydWU7IH0gZWxzZSB7ICc7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJHVzZURhdGEpICsgJyAhPT0gdW5kZWZpbmVkICc7XG4gICAgICAgICAgICAgICAgaWYgKCRvd25Qcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJyAmJiAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCgnICsgKCRkYXRhKSArICcsIFxcJycgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJHByb3BlcnR5S2V5KSkgKyAnXFwnKSAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvdXQgKz0gJyApIHsgJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0ICs9ICcgJyArICgkY29kZSkgKyAnIH0gJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgICBvdXQgKz0gJyBpZiAoJyArICgkbmV4dFZhbGlkKSArICcpIHsgJztcbiAgICAgICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKCRwUHJvcGVydHlLZXlzLmxlbmd0aCkge1xuICAgIHZhciBhcnI0ID0gJHBQcm9wZXJ0eUtleXM7XG4gICAgaWYgKGFycjQpIHtcbiAgICAgIHZhciAkcFByb3BlcnR5LCBpNCA9IC0xLFxuICAgICAgICBsNCA9IGFycjQubGVuZ3RoIC0gMTtcbiAgICAgIHdoaWxlIChpNCA8IGw0KSB7XG4gICAgICAgICRwUHJvcGVydHkgPSBhcnI0W2k0ICs9IDFdO1xuICAgICAgICB2YXIgJHNjaCA9ICRwUHJvcGVydGllc1skcFByb3BlcnR5XTtcbiAgICAgICAgaWYgKChpdC5vcHRzLnN0cmljdEtleXdvcmRzID8gdHlwZW9mICRzY2ggPT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMoJHNjaCkubGVuZ3RoID4gMCA6IGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJHNjaCwgaXQuUlVMRVMuYWxsKSkpIHtcbiAgICAgICAgICAkaXQuc2NoZW1hID0gJHNjaDtcbiAgICAgICAgICAkaXQuc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyAnLnBhdHRlcm5Qcm9wZXJ0aWVzJyArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJHBQcm9wZXJ0eSk7XG4gICAgICAgICAgJGl0LmVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy9wYXR0ZXJuUHJvcGVydGllcy8nICsgaXQudXRpbC5lc2NhcGVGcmFnbWVudCgkcFByb3BlcnR5KTtcbiAgICAgICAgICBpZiAoJG93blByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIG91dCArPSAnICcgKyAoJGRhdGFQcm9wZXJ0aWVzKSArICcgPSAnICsgKCRkYXRhUHJvcGVydGllcykgKyAnIHx8IE9iamVjdC5rZXlzKCcgKyAoJGRhdGEpICsgJyk7IGZvciAodmFyICcgKyAoJGlkeCkgKyAnPTA7ICcgKyAoJGlkeCkgKyAnPCcgKyAoJGRhdGFQcm9wZXJ0aWVzKSArICcubGVuZ3RoOyAnICsgKCRpZHgpICsgJysrKSB7IHZhciAnICsgKCRrZXkpICsgJyA9ICcgKyAoJGRhdGFQcm9wZXJ0aWVzKSArICdbJyArICgkaWR4KSArICddOyAnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvdXQgKz0gJyBmb3IgKHZhciAnICsgKCRrZXkpICsgJyBpbiAnICsgKCRkYXRhKSArICcpIHsgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoaXQudXNlUGF0dGVybigkcFByb3BlcnR5KSkgKyAnLnRlc3QoJyArICgka2V5KSArICcpKSB7ICc7XG4gICAgICAgICAgJGl0LmVycm9yUGF0aCA9IGl0LnV0aWwuZ2V0UGF0aEV4cHIoaXQuZXJyb3JQYXRoLCAka2V5LCBpdC5vcHRzLmpzb25Qb2ludGVycyk7XG4gICAgICAgICAgdmFyICRwYXNzRGF0YSA9ICRkYXRhICsgJ1snICsgJGtleSArICddJztcbiAgICAgICAgICAkaXQuZGF0YVBhdGhBcnJbJGRhdGFOeHRdID0gJGtleTtcbiAgICAgICAgICB2YXIgJGNvZGUgPSBpdC52YWxpZGF0ZSgkaXQpO1xuICAgICAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgICAgICBpZiAoaXQudXRpbC52YXJPY2N1cmVuY2VzKCRjb2RlLCAkbmV4dERhdGEpIDwgMikge1xuICAgICAgICAgICAgb3V0ICs9ICcgJyArIChpdC51dGlsLnZhclJlcGxhY2UoJGNvZGUsICRuZXh0RGF0YSwgJHBhc3NEYXRhKSkgKyAnICc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnIHZhciAnICsgKCRuZXh0RGF0YSkgKyAnID0gJyArICgkcGFzc0RhdGEpICsgJzsgJyArICgkY29kZSkgKyAnICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyBpZiAoIScgKyAoJG5leHRWYWxpZCkgKyAnKSBicmVhazsgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyBlbHNlICcgKyAoJG5leHRWYWxpZCkgKyAnID0gdHJ1ZTsgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgfSAgJztcbiAgICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJG5leHRWYWxpZCkgKyAnKSB7ICc7XG4gICAgICAgICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgb3V0ICs9ICcgJyArICgkY2xvc2luZ0JyYWNlcykgKyAnIGlmICgnICsgKCRlcnJzKSArICcgPT0gZXJyb3JzKSB7JztcbiAgfVxuICBvdXQgPSBpdC51dGlsLmNsZWFuVXBDb2RlKG91dCk7XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX3Byb3BlcnR5TmFtZXMoaXQsICRrZXl3b3JkLCAkcnVsZVR5cGUpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICRlcnJzID0gJ2VycnNfXycgKyAkbHZsO1xuICB2YXIgJGl0ID0gaXQudXRpbC5jb3B5KGl0KTtcbiAgdmFyICRjbG9zaW5nQnJhY2VzID0gJyc7XG4gICRpdC5sZXZlbCsrO1xuICB2YXIgJG5leHRWYWxpZCA9ICd2YWxpZCcgKyAkaXQubGV2ZWw7XG4gIG91dCArPSAndmFyICcgKyAoJGVycnMpICsgJyA9IGVycm9yczsnO1xuICBpZiAoKGl0Lm9wdHMuc3RyaWN0S2V5d29yZHMgPyB0eXBlb2YgJHNjaGVtYSA9PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cygkc2NoZW1hKS5sZW5ndGggPiAwIDogaXQudXRpbC5zY2hlbWFIYXNSdWxlcygkc2NoZW1hLCBpdC5SVUxFUy5hbGwpKSkge1xuICAgICRpdC5zY2hlbWEgPSAkc2NoZW1hO1xuICAgICRpdC5zY2hlbWFQYXRoID0gJHNjaGVtYVBhdGg7XG4gICAgJGl0LmVyclNjaGVtYVBhdGggPSAkZXJyU2NoZW1hUGF0aDtcbiAgICB2YXIgJGtleSA9ICdrZXknICsgJGx2bCxcbiAgICAgICRpZHggPSAnaWR4JyArICRsdmwsXG4gICAgICAkaSA9ICdpJyArICRsdmwsXG4gICAgICAkaW52YWxpZE5hbWUgPSAnXFwnICsgJyArICRrZXkgKyAnICsgXFwnJyxcbiAgICAgICRkYXRhTnh0ID0gJGl0LmRhdGFMZXZlbCA9IGl0LmRhdGFMZXZlbCArIDEsXG4gICAgICAkbmV4dERhdGEgPSAnZGF0YScgKyAkZGF0YU54dCxcbiAgICAgICRkYXRhUHJvcGVydGllcyA9ICdkYXRhUHJvcGVydGllcycgKyAkbHZsLFxuICAgICAgJG93blByb3BlcnRpZXMgPSBpdC5vcHRzLm93blByb3BlcnRpZXMsXG4gICAgICAkY3VycmVudEJhc2VJZCA9IGl0LmJhc2VJZDtcbiAgICBpZiAoJG93blByb3BlcnRpZXMpIHtcbiAgICAgIG91dCArPSAnIHZhciAnICsgKCRkYXRhUHJvcGVydGllcykgKyAnID0gdW5kZWZpbmVkOyAnO1xuICAgIH1cbiAgICBpZiAoJG93blByb3BlcnRpZXMpIHtcbiAgICAgIG91dCArPSAnICcgKyAoJGRhdGFQcm9wZXJ0aWVzKSArICcgPSAnICsgKCRkYXRhUHJvcGVydGllcykgKyAnIHx8IE9iamVjdC5rZXlzKCcgKyAoJGRhdGEpICsgJyk7IGZvciAodmFyICcgKyAoJGlkeCkgKyAnPTA7ICcgKyAoJGlkeCkgKyAnPCcgKyAoJGRhdGFQcm9wZXJ0aWVzKSArICcubGVuZ3RoOyAnICsgKCRpZHgpICsgJysrKSB7IHZhciAnICsgKCRrZXkpICsgJyA9ICcgKyAoJGRhdGFQcm9wZXJ0aWVzKSArICdbJyArICgkaWR4KSArICddOyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyBmb3IgKHZhciAnICsgKCRrZXkpICsgJyBpbiAnICsgKCRkYXRhKSArICcpIHsgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgdmFyIHN0YXJ0RXJycycgKyAoJGx2bCkgKyAnID0gZXJyb3JzOyAnO1xuICAgIHZhciAkcGFzc0RhdGEgPSAka2V5O1xuICAgIHZhciAkd2FzQ29tcG9zaXRlID0gaXQuY29tcG9zaXRlUnVsZTtcbiAgICBpdC5jb21wb3NpdGVSdWxlID0gJGl0LmNvbXBvc2l0ZVJ1bGUgPSB0cnVlO1xuICAgIHZhciAkY29kZSA9IGl0LnZhbGlkYXRlKCRpdCk7XG4gICAgJGl0LmJhc2VJZCA9ICRjdXJyZW50QmFzZUlkO1xuICAgIGlmIChpdC51dGlsLnZhck9jY3VyZW5jZXMoJGNvZGUsICRuZXh0RGF0YSkgPCAyKSB7XG4gICAgICBvdXQgKz0gJyAnICsgKGl0LnV0aWwudmFyUmVwbGFjZSgkY29kZSwgJG5leHREYXRhLCAkcGFzc0RhdGEpKSArICcgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJG5leHREYXRhKSArICcgPSAnICsgKCRwYXNzRGF0YSkgKyAnOyAnICsgKCRjb2RlKSArICcgJztcbiAgICB9XG4gICAgaXQuY29tcG9zaXRlUnVsZSA9ICRpdC5jb21wb3NpdGVSdWxlID0gJHdhc0NvbXBvc2l0ZTtcbiAgICBvdXQgKz0gJyBpZiAoIScgKyAoJG5leHRWYWxpZCkgKyAnKSB7IGZvciAodmFyICcgKyAoJGkpICsgJz1zdGFydEVycnMnICsgKCRsdmwpICsgJzsgJyArICgkaSkgKyAnPGVycm9yczsgJyArICgkaSkgKyAnKyspIHsgdkVycm9yc1snICsgKCRpKSArICddLnByb3BlcnR5TmFtZSA9ICcgKyAoJGtleSkgKyAnOyB9ICAgdmFyIGVyciA9ICAgJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdwcm9wZXJ0eU5hbWVzJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBwcm9wZXJ0eU5hbWU6IFxcJycgKyAoJGludmFsaWROYW1lKSArICdcXCcgfSAnO1xuICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwncHJvcGVydHkgbmFtZSBcXFxcXFwnJyArICgkaW52YWxpZE5hbWUpICsgJ1xcXFxcXCcgaXMgaW52YWxpZFxcJyAnO1xuICAgICAgfVxuICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgfSAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB7fSAnO1xuICAgIH1cbiAgICBvdXQgKz0gJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKHZFcnJvcnMpOyAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gdkVycm9yczsgcmV0dXJuIGZhbHNlOyAnO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgb3V0ICs9ICcgYnJlYWs7ICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gfSc7XG4gIH1cbiAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICBvdXQgKz0gJyAnICsgKCRjbG9zaW5nQnJhY2VzKSArICcgaWYgKCcgKyAoJGVycnMpICsgJyA9PSBlcnJvcnMpIHsnO1xuICB9XG4gIG91dCA9IGl0LnV0aWwuY2xlYW5VcENvZGUob3V0KTtcbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfcmVxdWlyZWQoaXQsICRrZXl3b3JkLCAkcnVsZVR5cGUpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICR2YWxpZCA9ICd2YWxpZCcgKyAkbHZsO1xuICB2YXIgJGlzRGF0YSA9IGl0Lm9wdHMuJGRhdGEgJiYgJHNjaGVtYSAmJiAkc2NoZW1hLiRkYXRhLFxuICAgICRzY2hlbWFWYWx1ZTtcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyB2YXIgc2NoZW1hJyArICgkbHZsKSArICcgPSAnICsgKGl0LnV0aWwuZ2V0RGF0YSgkc2NoZW1hLiRkYXRhLCAkZGF0YUx2bCwgaXQuZGF0YVBhdGhBcnIpKSArICc7ICc7XG4gICAgJHNjaGVtYVZhbHVlID0gJ3NjaGVtYScgKyAkbHZsO1xuICB9IGVsc2Uge1xuICAgICRzY2hlbWFWYWx1ZSA9ICRzY2hlbWE7XG4gIH1cbiAgdmFyICR2U2NoZW1hID0gJ3NjaGVtYScgKyAkbHZsO1xuICBpZiAoISRpc0RhdGEpIHtcbiAgICBpZiAoJHNjaGVtYS5sZW5ndGggPCBpdC5vcHRzLmxvb3BSZXF1aXJlZCAmJiBpdC5zY2hlbWEucHJvcGVydGllcyAmJiBPYmplY3Qua2V5cyhpdC5zY2hlbWEucHJvcGVydGllcykubGVuZ3RoKSB7XG4gICAgICB2YXIgJHJlcXVpcmVkID0gW107XG4gICAgICB2YXIgYXJyMSA9ICRzY2hlbWE7XG4gICAgICBpZiAoYXJyMSkge1xuICAgICAgICB2YXIgJHByb3BlcnR5LCBpMSA9IC0xLFxuICAgICAgICAgIGwxID0gYXJyMS5sZW5ndGggLSAxO1xuICAgICAgICB3aGlsZSAoaTEgPCBsMSkge1xuICAgICAgICAgICRwcm9wZXJ0eSA9IGFycjFbaTEgKz0gMV07XG4gICAgICAgICAgdmFyICRwcm9wZXJ0eVNjaCA9IGl0LnNjaGVtYS5wcm9wZXJ0aWVzWyRwcm9wZXJ0eV07XG4gICAgICAgICAgaWYgKCEoJHByb3BlcnR5U2NoICYmIChpdC5vcHRzLnN0cmljdEtleXdvcmRzID8gdHlwZW9mICRwcm9wZXJ0eVNjaCA9PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cygkcHJvcGVydHlTY2gpLmxlbmd0aCA+IDAgOiBpdC51dGlsLnNjaGVtYUhhc1J1bGVzKCRwcm9wZXJ0eVNjaCwgaXQuUlVMRVMuYWxsKSkpKSB7XG4gICAgICAgICAgICAkcmVxdWlyZWRbJHJlcXVpcmVkLmxlbmd0aF0gPSAkcHJvcGVydHk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciAkcmVxdWlyZWQgPSAkc2NoZW1hO1xuICAgIH1cbiAgfVxuICBpZiAoJGlzRGF0YSB8fCAkcmVxdWlyZWQubGVuZ3RoKSB7XG4gICAgdmFyICRjdXJyZW50RXJyb3JQYXRoID0gaXQuZXJyb3JQYXRoLFxuICAgICAgJGxvb3BSZXF1aXJlZCA9ICRpc0RhdGEgfHwgJHJlcXVpcmVkLmxlbmd0aCA+PSBpdC5vcHRzLmxvb3BSZXF1aXJlZCxcbiAgICAgICRvd25Qcm9wZXJ0aWVzID0gaXQub3B0cy5vd25Qcm9wZXJ0aWVzO1xuICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICBvdXQgKz0gJyB2YXIgbWlzc2luZycgKyAoJGx2bCkgKyAnOyAnO1xuICAgICAgaWYgKCRsb29wUmVxdWlyZWQpIHtcbiAgICAgICAgaWYgKCEkaXNEYXRhKSB7XG4gICAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJHZTY2hlbWEpICsgJyA9IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJzsgJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgJGkgPSAnaScgKyAkbHZsLFxuICAgICAgICAgICRwcm9wZXJ0eVBhdGggPSAnc2NoZW1hJyArICRsdmwgKyAnWycgKyAkaSArICddJyxcbiAgICAgICAgICAkbWlzc2luZ1Byb3BlcnR5ID0gJ1xcJyArICcgKyAkcHJvcGVydHlQYXRoICsgJyArIFxcJyc7XG4gICAgICAgIGlmIChpdC5vcHRzLl9lcnJvckRhdGFQYXRoUHJvcGVydHkpIHtcbiAgICAgICAgICBpdC5lcnJvclBhdGggPSBpdC51dGlsLmdldFBhdGhFeHByKCRjdXJyZW50RXJyb3JQYXRoLCAkcHJvcGVydHlQYXRoLCBpdC5vcHRzLmpzb25Qb2ludGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJHZhbGlkKSArICcgPSB0cnVlOyAnO1xuICAgICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICAgIG91dCArPSAnIGlmIChzY2hlbWEnICsgKCRsdmwpICsgJyA9PT0gdW5kZWZpbmVkKSAnICsgKCR2YWxpZCkgKyAnID0gdHJ1ZTsgZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkoc2NoZW1hJyArICgkbHZsKSArICcpKSAnICsgKCR2YWxpZCkgKyAnID0gZmFsc2U7IGVsc2Ugeyc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgZm9yICh2YXIgJyArICgkaSkgKyAnID0gMDsgJyArICgkaSkgKyAnIDwgJyArICgkdlNjaGVtYSkgKyAnLmxlbmd0aDsgJyArICgkaSkgKyAnKyspIHsgJyArICgkdmFsaWQpICsgJyA9ICcgKyAoJGRhdGEpICsgJ1snICsgKCR2U2NoZW1hKSArICdbJyArICgkaSkgKyAnXV0gIT09IHVuZGVmaW5lZCAnO1xuICAgICAgICBpZiAoJG93blByb3BlcnRpZXMpIHtcbiAgICAgICAgICBvdXQgKz0gJyAmJiAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCgnICsgKCRkYXRhKSArICcsICcgKyAoJHZTY2hlbWEpICsgJ1snICsgKCRpKSArICddKSAnO1xuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnOyBpZiAoIScgKyAoJHZhbGlkKSArICcpIGJyZWFrOyB9ICc7XG4gICAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgICAgb3V0ICs9ICcgIH0gICc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgIGlmICghJyArICgkdmFsaWQpICsgJykgeyAgICc7XG4gICAgICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAgICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgICAgIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgncmVxdWlyZWQnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IG1pc3NpbmdQcm9wZXJ0eTogXFwnJyArICgkbWlzc2luZ1Byb3BlcnR5KSArICdcXCcgfSAnO1xuICAgICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCcnO1xuICAgICAgICAgICAgaWYgKGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICBvdXQgKz0gJ2lzIGEgcmVxdWlyZWQgcHJvcGVydHknO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICdzaG91bGQgaGF2ZSByZXF1aXJlZCBwcm9wZXJ0eSBcXFxcXFwnJyArICgkbWlzc2luZ1Byb3BlcnR5KSArICdcXFxcXFwnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dCArPSAnXFwnICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXQgKz0gJyB7fSAnO1xuICAgICAgICB9XG4gICAgICAgIHZhciBfX2VyciA9IG91dDtcbiAgICAgICAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgICAgICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgfSBlbHNlIHsgJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnIGlmICggJztcbiAgICAgICAgdmFyIGFycjIgPSAkcmVxdWlyZWQ7XG4gICAgICAgIGlmIChhcnIyKSB7XG4gICAgICAgICAgdmFyICRwcm9wZXJ0eUtleSwgJGkgPSAtMSxcbiAgICAgICAgICAgIGwyID0gYXJyMi5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlICgkaSA8IGwyKSB7XG4gICAgICAgICAgICAkcHJvcGVydHlLZXkgPSBhcnIyWyRpICs9IDFdO1xuICAgICAgICAgICAgaWYgKCRpKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHx8ICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgJHByb3AgPSBpdC51dGlsLmdldFByb3BlcnR5KCRwcm9wZXJ0eUtleSksXG4gICAgICAgICAgICAgICR1c2VEYXRhID0gJGRhdGEgKyAkcHJvcDtcbiAgICAgICAgICAgIG91dCArPSAnICggKCAnICsgKCR1c2VEYXRhKSArICcgPT09IHVuZGVmaW5lZCAnO1xuICAgICAgICAgICAgaWYgKCRvd25Qcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHx8ICEgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCcgKyAoJGRhdGEpICsgJywgXFwnJyArIChpdC51dGlsLmVzY2FwZVF1b3RlcygkcHJvcGVydHlLZXkpKSArICdcXCcpICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXQgKz0gJykgJiYgKG1pc3NpbmcnICsgKCRsdmwpICsgJyA9ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZyhpdC5vcHRzLmpzb25Qb2ludGVycyA/ICRwcm9wZXJ0eUtleSA6ICRwcm9wKSkgKyAnKSApICc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnKSB7ICAnO1xuICAgICAgICB2YXIgJHByb3BlcnR5UGF0aCA9ICdtaXNzaW5nJyArICRsdmwsXG4gICAgICAgICAgJG1pc3NpbmdQcm9wZXJ0eSA9ICdcXCcgKyAnICsgJHByb3BlcnR5UGF0aCArICcgKyBcXCcnO1xuICAgICAgICBpZiAoaXQub3B0cy5fZXJyb3JEYXRhUGF0aFByb3BlcnR5KSB7XG4gICAgICAgICAgaXQuZXJyb3JQYXRoID0gaXQub3B0cy5qc29uUG9pbnRlcnMgPyBpdC51dGlsLmdldFBhdGhFeHByKCRjdXJyZW50RXJyb3JQYXRoLCAkcHJvcGVydHlQYXRoLCB0cnVlKSA6ICRjdXJyZW50RXJyb3JQYXRoICsgJyArICcgKyAkcHJvcGVydHlQYXRoO1xuICAgICAgICB9XG4gICAgICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAgICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgICAgIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgncmVxdWlyZWQnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IG1pc3NpbmdQcm9wZXJ0eTogXFwnJyArICgkbWlzc2luZ1Byb3BlcnR5KSArICdcXCcgfSAnO1xuICAgICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCcnO1xuICAgICAgICAgICAgaWYgKGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICBvdXQgKz0gJ2lzIGEgcmVxdWlyZWQgcHJvcGVydHknO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICdzaG91bGQgaGF2ZSByZXF1aXJlZCBwcm9wZXJ0eSBcXFxcXFwnJyArICgkbWlzc2luZ1Byb3BlcnR5KSArICdcXFxcXFwnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dCArPSAnXFwnICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXQgKz0gJyB7fSAnO1xuICAgICAgICB9XG4gICAgICAgIHZhciBfX2VyciA9IG91dDtcbiAgICAgICAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgICAgICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgfSBlbHNlIHsgJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCRsb29wUmVxdWlyZWQpIHtcbiAgICAgICAgaWYgKCEkaXNEYXRhKSB7XG4gICAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJHZTY2hlbWEpICsgJyA9IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJzsgJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgJGkgPSAnaScgKyAkbHZsLFxuICAgICAgICAgICRwcm9wZXJ0eVBhdGggPSAnc2NoZW1hJyArICRsdmwgKyAnWycgKyAkaSArICddJyxcbiAgICAgICAgICAkbWlzc2luZ1Byb3BlcnR5ID0gJ1xcJyArICcgKyAkcHJvcGVydHlQYXRoICsgJyArIFxcJyc7XG4gICAgICAgIGlmIChpdC5vcHRzLl9lcnJvckRhdGFQYXRoUHJvcGVydHkpIHtcbiAgICAgICAgICBpdC5lcnJvclBhdGggPSBpdC51dGlsLmdldFBhdGhFeHByKCRjdXJyZW50RXJyb3JQYXRoLCAkcHJvcGVydHlQYXRoLCBpdC5vcHRzLmpzb25Qb2ludGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgICAgICBvdXQgKz0gJyBpZiAoJyArICgkdlNjaGVtYSkgKyAnICYmICFBcnJheS5pc0FycmF5KCcgKyAoJHZTY2hlbWEpICsgJykpIHsgIHZhciBlcnIgPSAgICc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgncmVxdWlyZWQnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IG1pc3NpbmdQcm9wZXJ0eTogXFwnJyArICgkbWlzc2luZ1Byb3BlcnR5KSArICdcXCcgfSAnO1xuICAgICAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnJztcbiAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIG91dCArPSAnaXMgYSByZXF1aXJlZCBwcm9wZXJ0eSc7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICdzaG91bGQgaGF2ZSByZXF1aXJlZCBwcm9wZXJ0eSBcXFxcXFwnJyArICgkbWlzc2luZ1Byb3BlcnR5KSArICdcXFxcXFwnJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBvdXQgKz0gJ1xcJyAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvdXQgKz0gJyB7fSAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdXQgKz0gJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyB9IGVsc2UgaWYgKCcgKyAoJHZTY2hlbWEpICsgJyAhPT0gdW5kZWZpbmVkKSB7ICc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgZm9yICh2YXIgJyArICgkaSkgKyAnID0gMDsgJyArICgkaSkgKyAnIDwgJyArICgkdlNjaGVtYSkgKyAnLmxlbmd0aDsgJyArICgkaSkgKyAnKyspIHsgaWYgKCcgKyAoJGRhdGEpICsgJ1snICsgKCR2U2NoZW1hKSArICdbJyArICgkaSkgKyAnXV0gPT09IHVuZGVmaW5lZCAnO1xuICAgICAgICBpZiAoJG93blByb3BlcnRpZXMpIHtcbiAgICAgICAgICBvdXQgKz0gJyB8fCAhIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCgnICsgKCRkYXRhKSArICcsICcgKyAoJHZTY2hlbWEpICsgJ1snICsgKCRpKSArICddKSAnO1xuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnKSB7ICB2YXIgZXJyID0gICAnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgncmVxdWlyZWQnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IG1pc3NpbmdQcm9wZXJ0eTogXFwnJyArICgkbWlzc2luZ1Byb3BlcnR5KSArICdcXCcgfSAnO1xuICAgICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCcnO1xuICAgICAgICAgICAgaWYgKGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICBvdXQgKz0gJ2lzIGEgcmVxdWlyZWQgcHJvcGVydHknO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICdzaG91bGQgaGF2ZSByZXF1aXJlZCBwcm9wZXJ0eSBcXFxcXFwnJyArICgkbWlzc2luZ1Byb3BlcnR5KSArICdcXFxcXFwnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dCArPSAnXFwnICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXQgKz0gJyB7fSAnO1xuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7IH0gfSAnO1xuICAgICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICAgIG91dCArPSAnICB9ICAnO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgYXJyMyA9ICRyZXF1aXJlZDtcbiAgICAgICAgaWYgKGFycjMpIHtcbiAgICAgICAgICB2YXIgJHByb3BlcnR5S2V5LCBpMyA9IC0xLFxuICAgICAgICAgICAgbDMgPSBhcnIzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgd2hpbGUgKGkzIDwgbDMpIHtcbiAgICAgICAgICAgICRwcm9wZXJ0eUtleSA9IGFycjNbaTMgKz0gMV07XG4gICAgICAgICAgICB2YXIgJHByb3AgPSBpdC51dGlsLmdldFByb3BlcnR5KCRwcm9wZXJ0eUtleSksXG4gICAgICAgICAgICAgICRtaXNzaW5nUHJvcGVydHkgPSBpdC51dGlsLmVzY2FwZVF1b3RlcygkcHJvcGVydHlLZXkpLFxuICAgICAgICAgICAgICAkdXNlRGF0YSA9ICRkYXRhICsgJHByb3A7XG4gICAgICAgICAgICBpZiAoaXQub3B0cy5fZXJyb3JEYXRhUGF0aFByb3BlcnR5KSB7XG4gICAgICAgICAgICAgIGl0LmVycm9yUGF0aCA9IGl0LnV0aWwuZ2V0UGF0aCgkY3VycmVudEVycm9yUGF0aCwgJHByb3BlcnR5S2V5LCBpdC5vcHRzLmpzb25Qb2ludGVycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXQgKz0gJyBpZiAoICcgKyAoJHVzZURhdGEpICsgJyA9PT0gdW5kZWZpbmVkICc7XG4gICAgICAgICAgICBpZiAoJG93blByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcgfHwgISBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoJyArICgkZGF0YSkgKyAnLCBcXCcnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRwcm9wZXJ0eUtleSkpICsgJ1xcJykgJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dCArPSAnKSB7ICB2YXIgZXJyID0gICAnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdyZXF1aXJlZCcpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgbWlzc2luZ1Byb3BlcnR5OiBcXCcnICsgKCRtaXNzaW5nUHJvcGVydHkpICsgJ1xcJyB9ICc7XG4gICAgICAgICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnJztcbiAgICAgICAgICAgICAgICBpZiAoaXQub3B0cy5fZXJyb3JEYXRhUGF0aFByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJ2lzIGEgcmVxdWlyZWQgcHJvcGVydHknO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJ3Nob3VsZCBoYXZlIHJlcXVpcmVkIHByb3BlcnR5IFxcXFxcXCcnICsgKCRtaXNzaW5nUHJvcGVydHkpICsgJ1xcXFxcXCcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvdXQgKz0gJ1xcJyAnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXQgKz0gJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyB9ICc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGl0LmVycm9yUGF0aCA9ICRjdXJyZW50RXJyb3JQYXRoO1xuICB9IGVsc2UgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICBvdXQgKz0gJyBpZiAodHJ1ZSkgeyc7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfdW5pcXVlSXRlbXMoaXQsICRrZXl3b3JkLCAkcnVsZVR5cGUpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICR2YWxpZCA9ICd2YWxpZCcgKyAkbHZsO1xuICB2YXIgJGlzRGF0YSA9IGl0Lm9wdHMuJGRhdGEgJiYgJHNjaGVtYSAmJiAkc2NoZW1hLiRkYXRhLFxuICAgICRzY2hlbWFWYWx1ZTtcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyB2YXIgc2NoZW1hJyArICgkbHZsKSArICcgPSAnICsgKGl0LnV0aWwuZ2V0RGF0YSgkc2NoZW1hLiRkYXRhLCAkZGF0YUx2bCwgaXQuZGF0YVBhdGhBcnIpKSArICc7ICc7XG4gICAgJHNjaGVtYVZhbHVlID0gJ3NjaGVtYScgKyAkbHZsO1xuICB9IGVsc2Uge1xuICAgICRzY2hlbWFWYWx1ZSA9ICRzY2hlbWE7XG4gIH1cbiAgaWYgKCgkc2NoZW1hIHx8ICRpc0RhdGEpICYmIGl0Lm9wdHMudW5pcXVlSXRlbXMgIT09IGZhbHNlKSB7XG4gICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgIG91dCArPSAnIHZhciAnICsgKCR2YWxpZCkgKyAnOyBpZiAoJyArICgkc2NoZW1hVmFsdWUpICsgJyA9PT0gZmFsc2UgfHwgJyArICgkc2NoZW1hVmFsdWUpICsgJyA9PT0gdW5kZWZpbmVkKSAnICsgKCR2YWxpZCkgKyAnID0gdHJ1ZTsgZWxzZSBpZiAodHlwZW9mICcgKyAoJHNjaGVtYVZhbHVlKSArICcgIT0gXFwnYm9vbGVhblxcJykgJyArICgkdmFsaWQpICsgJyA9IGZhbHNlOyBlbHNlIHsgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgdmFyIGkgPSAnICsgKCRkYXRhKSArICcubGVuZ3RoICwgJyArICgkdmFsaWQpICsgJyA9IHRydWUgLCBqOyBpZiAoaSA+IDEpIHsgJztcbiAgICB2YXIgJGl0ZW1UeXBlID0gaXQuc2NoZW1hLml0ZW1zICYmIGl0LnNjaGVtYS5pdGVtcy50eXBlLFxuICAgICAgJHR5cGVJc0FycmF5ID0gQXJyYXkuaXNBcnJheSgkaXRlbVR5cGUpO1xuICAgIGlmICghJGl0ZW1UeXBlIHx8ICRpdGVtVHlwZSA9PSAnb2JqZWN0JyB8fCAkaXRlbVR5cGUgPT0gJ2FycmF5JyB8fCAoJHR5cGVJc0FycmF5ICYmICgkaXRlbVR5cGUuaW5kZXhPZignb2JqZWN0JykgPj0gMCB8fCAkaXRlbVR5cGUuaW5kZXhPZignYXJyYXknKSA+PSAwKSkpIHtcbiAgICAgIG91dCArPSAnIG91dGVyOiBmb3IgKDtpLS07KSB7IGZvciAoaiA9IGk7IGotLTspIHsgaWYgKGVxdWFsKCcgKyAoJGRhdGEpICsgJ1tpXSwgJyArICgkZGF0YSkgKyAnW2pdKSkgeyAnICsgKCR2YWxpZCkgKyAnID0gZmFsc2U7IGJyZWFrIG91dGVyOyB9IH0gfSAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YXIgaXRlbUluZGljZXMgPSB7fSwgaXRlbTsgZm9yICg7aS0tOykgeyB2YXIgaXRlbSA9ICcgKyAoJGRhdGEpICsgJ1tpXTsgJztcbiAgICAgIHZhciAkbWV0aG9kID0gJ2NoZWNrRGF0YVR5cGUnICsgKCR0eXBlSXNBcnJheSA/ICdzJyA6ICcnKTtcbiAgICAgIG91dCArPSAnIGlmICgnICsgKGl0LnV0aWxbJG1ldGhvZF0oJGl0ZW1UeXBlLCAnaXRlbScsIHRydWUpKSArICcpIGNvbnRpbnVlOyAnO1xuICAgICAgaWYgKCR0eXBlSXNBcnJheSkge1xuICAgICAgICBvdXQgKz0gJyBpZiAodHlwZW9mIGl0ZW0gPT0gXFwnc3RyaW5nXFwnKSBpdGVtID0gXFwnXCJcXCcgKyBpdGVtOyAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgaWYgKHR5cGVvZiBpdGVtSW5kaWNlc1tpdGVtXSA9PSBcXCdudW1iZXJcXCcpIHsgJyArICgkdmFsaWQpICsgJyA9IGZhbHNlOyBqID0gaXRlbUluZGljZXNbaXRlbV07IGJyZWFrOyB9IGl0ZW1JbmRpY2VzW2l0ZW1dID0gaTsgfSAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9ICc7XG4gICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgIG91dCArPSAnICB9ICAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyBpZiAoIScgKyAoJHZhbGlkKSArICcpIHsgICAnO1xuICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCd1bmlxdWVJdGVtcycpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgaTogaSwgajogaiB9ICc7XG4gICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgTk9UIGhhdmUgZHVwbGljYXRlIGl0ZW1zIChpdGVtcyAjIyBcXCcgKyBqICsgXFwnIGFuZCBcXCcgKyBpICsgXFwnIGFyZSBpZGVudGljYWwpXFwnICc7XG4gICAgICB9XG4gICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgIG91dCArPSAnICwgc2NoZW1hOiAgJztcbiAgICAgICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgICAgICBvdXQgKz0gJ3ZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnJyArICgkc2NoZW1hKTtcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJyAgICAgICAgICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgfSAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB7fSAnO1xuICAgIH1cbiAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gJztcbiAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgb3V0ICs9ICcgZWxzZSB7ICc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICBvdXQgKz0gJyBpZiAodHJ1ZSkgeyAnO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vL2FsbCByZXF1aXJlcyBtdXN0IGJlIGV4cGxpY2l0IGJlY2F1c2UgYnJvd3NlcmlmeSB3b24ndCB3b3JrIHdpdGggZHluYW1pYyByZXF1aXJlc1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICckcmVmJzogcmVxdWlyZSgnLi9yZWYnKSxcbiAgYWxsT2Y6IHJlcXVpcmUoJy4vYWxsT2YnKSxcbiAgYW55T2Y6IHJlcXVpcmUoJy4vYW55T2YnKSxcbiAgJyRjb21tZW50JzogcmVxdWlyZSgnLi9jb21tZW50JyksXG4gIGNvbnN0OiByZXF1aXJlKCcuL2NvbnN0JyksXG4gIGNvbnRhaW5zOiByZXF1aXJlKCcuL2NvbnRhaW5zJyksXG4gIGRlcGVuZGVuY2llczogcmVxdWlyZSgnLi9kZXBlbmRlbmNpZXMnKSxcbiAgJ2VudW0nOiByZXF1aXJlKCcuL2VudW0nKSxcbiAgZm9ybWF0OiByZXF1aXJlKCcuL2Zvcm1hdCcpLFxuICAnaWYnOiByZXF1aXJlKCcuL2lmJyksXG4gIGl0ZW1zOiByZXF1aXJlKCcuL2l0ZW1zJyksXG4gIG1heGltdW06IHJlcXVpcmUoJy4vX2xpbWl0JyksXG4gIG1pbmltdW06IHJlcXVpcmUoJy4vX2xpbWl0JyksXG4gIG1heEl0ZW1zOiByZXF1aXJlKCcuL19saW1pdEl0ZW1zJyksXG4gIG1pbkl0ZW1zOiByZXF1aXJlKCcuL19saW1pdEl0ZW1zJyksXG4gIG1heExlbmd0aDogcmVxdWlyZSgnLi9fbGltaXRMZW5ndGgnKSxcbiAgbWluTGVuZ3RoOiByZXF1aXJlKCcuL19saW1pdExlbmd0aCcpLFxuICBtYXhQcm9wZXJ0aWVzOiByZXF1aXJlKCcuL19saW1pdFByb3BlcnRpZXMnKSxcbiAgbWluUHJvcGVydGllczogcmVxdWlyZSgnLi9fbGltaXRQcm9wZXJ0aWVzJyksXG4gIG11bHRpcGxlT2Y6IHJlcXVpcmUoJy4vbXVsdGlwbGVPZicpLFxuICBub3Q6IHJlcXVpcmUoJy4vbm90JyksXG4gIG9uZU9mOiByZXF1aXJlKCcuL29uZU9mJyksXG4gIHBhdHRlcm46IHJlcXVpcmUoJy4vcGF0dGVybicpLFxuICBwcm9wZXJ0aWVzOiByZXF1aXJlKCcuL3Byb3BlcnRpZXMnKSxcbiAgcHJvcGVydHlOYW1lczogcmVxdWlyZSgnLi9wcm9wZXJ0eU5hbWVzJyksXG4gIHJlcXVpcmVkOiByZXF1aXJlKCcuL3JlcXVpcmVkJyksXG4gIHVuaXF1ZUl0ZW1zOiByZXF1aXJlKCcuL3VuaXF1ZUl0ZW1zJyksXG4gIHZhbGlkYXRlOiByZXF1aXJlKCcuL3ZhbGlkYXRlJylcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBydWxlTW9kdWxlcyA9IHJlcXVpcmUoJy4uL2RvdGpzJylcbiAgLCB0b0hhc2ggPSByZXF1aXJlKCcuL3V0aWwnKS50b0hhc2g7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcnVsZXMoKSB7XG4gIHZhciBSVUxFUyA9IFtcbiAgICB7IHR5cGU6ICdudW1iZXInLFxuICAgICAgcnVsZXM6IFsgeyAnbWF4aW11bSc6IFsnZXhjbHVzaXZlTWF4aW11bSddIH0sXG4gICAgICAgICAgICAgICB7ICdtaW5pbXVtJzogWydleGNsdXNpdmVNaW5pbXVtJ10gfSwgJ211bHRpcGxlT2YnLCAnZm9ybWF0J10gfSxcbiAgICB7IHR5cGU6ICdzdHJpbmcnLFxuICAgICAgcnVsZXM6IFsgJ21heExlbmd0aCcsICdtaW5MZW5ndGgnLCAncGF0dGVybicsICdmb3JtYXQnIF0gfSxcbiAgICB7IHR5cGU6ICdhcnJheScsXG4gICAgICBydWxlczogWyAnbWF4SXRlbXMnLCAnbWluSXRlbXMnLCAnaXRlbXMnLCAnY29udGFpbnMnLCAndW5pcXVlSXRlbXMnIF0gfSxcbiAgICB7IHR5cGU6ICdvYmplY3QnLFxuICAgICAgcnVsZXM6IFsgJ21heFByb3BlcnRpZXMnLCAnbWluUHJvcGVydGllcycsICdyZXF1aXJlZCcsICdkZXBlbmRlbmNpZXMnLCAncHJvcGVydHlOYW1lcycsXG4gICAgICAgICAgICAgICB7ICdwcm9wZXJ0aWVzJzogWydhZGRpdGlvbmFsUHJvcGVydGllcycsICdwYXR0ZXJuUHJvcGVydGllcyddIH0gXSB9LFxuICAgIHsgcnVsZXM6IFsgJyRyZWYnLCAnY29uc3QnLCAnZW51bScsICdub3QnLCAnYW55T2YnLCAnb25lT2YnLCAnYWxsT2YnLCAnaWYnIF0gfVxuICBdO1xuXG4gIHZhciBBTEwgPSBbICd0eXBlJywgJyRjb21tZW50JyBdO1xuICB2YXIgS0VZV09SRFMgPSBbXG4gICAgJyRzY2hlbWEnLCAnJGlkJywgJ2lkJywgJyRkYXRhJywgJyRhc3luYycsICd0aXRsZScsXG4gICAgJ2Rlc2NyaXB0aW9uJywgJ2RlZmF1bHQnLCAnZGVmaW5pdGlvbnMnLFxuICAgICdleGFtcGxlcycsICdyZWFkT25seScsICd3cml0ZU9ubHknLFxuICAgICdjb250ZW50TWVkaWFUeXBlJywgJ2NvbnRlbnRFbmNvZGluZycsXG4gICAgJ2FkZGl0aW9uYWxJdGVtcycsICd0aGVuJywgJ2Vsc2UnXG4gIF07XG4gIHZhciBUWVBFUyA9IFsgJ251bWJlcicsICdpbnRlZ2VyJywgJ3N0cmluZycsICdhcnJheScsICdvYmplY3QnLCAnYm9vbGVhbicsICdudWxsJyBdO1xuICBSVUxFUy5hbGwgPSB0b0hhc2goQUxMKTtcbiAgUlVMRVMudHlwZXMgPSB0b0hhc2goVFlQRVMpO1xuXG4gIFJVTEVTLmZvckVhY2goZnVuY3Rpb24gKGdyb3VwKSB7XG4gICAgZ3JvdXAucnVsZXMgPSBncm91cC5ydWxlcy5tYXAoZnVuY3Rpb24gKGtleXdvcmQpIHtcbiAgICAgIHZhciBpbXBsS2V5d29yZHM7XG4gICAgICBpZiAodHlwZW9mIGtleXdvcmQgPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdmFyIGtleSA9IE9iamVjdC5rZXlzKGtleXdvcmQpWzBdO1xuICAgICAgICBpbXBsS2V5d29yZHMgPSBrZXl3b3JkW2tleV07XG4gICAgICAgIGtleXdvcmQgPSBrZXk7XG4gICAgICAgIGltcGxLZXl3b3Jkcy5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgQUxMLnB1c2goayk7XG4gICAgICAgICAgUlVMRVMuYWxsW2tdID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBBTEwucHVzaChrZXl3b3JkKTtcbiAgICAgIHZhciBydWxlID0gUlVMRVMuYWxsW2tleXdvcmRdID0ge1xuICAgICAgICBrZXl3b3JkOiBrZXl3b3JkLFxuICAgICAgICBjb2RlOiBydWxlTW9kdWxlc1trZXl3b3JkXSxcbiAgICAgICAgaW1wbGVtZW50czogaW1wbEtleXdvcmRzXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHJ1bGU7XG4gICAgfSk7XG5cbiAgICBSVUxFUy5hbGwuJGNvbW1lbnQgPSB7XG4gICAgICBrZXl3b3JkOiAnJGNvbW1lbnQnLFxuICAgICAgY29kZTogcnVsZU1vZHVsZXMuJGNvbW1lbnRcbiAgICB9O1xuXG4gICAgaWYgKGdyb3VwLnR5cGUpIFJVTEVTLnR5cGVzW2dyb3VwLnR5cGVdID0gZ3JvdXA7XG4gIH0pO1xuXG4gIFJVTEVTLmtleXdvcmRzID0gdG9IYXNoKEFMTC5jb25jYXQoS0VZV09SRFMpKTtcbiAgUlVMRVMuY3VzdG9tID0ge307XG5cbiAgcmV0dXJuIFJVTEVTO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEtFWVdPUkRTID0gW1xuICAnbXVsdGlwbGVPZicsXG4gICdtYXhpbXVtJyxcbiAgJ2V4Y2x1c2l2ZU1heGltdW0nLFxuICAnbWluaW11bScsXG4gICdleGNsdXNpdmVNaW5pbXVtJyxcbiAgJ21heExlbmd0aCcsXG4gICdtaW5MZW5ndGgnLFxuICAncGF0dGVybicsXG4gICdhZGRpdGlvbmFsSXRlbXMnLFxuICAnbWF4SXRlbXMnLFxuICAnbWluSXRlbXMnLFxuICAndW5pcXVlSXRlbXMnLFxuICAnbWF4UHJvcGVydGllcycsXG4gICdtaW5Qcm9wZXJ0aWVzJyxcbiAgJ3JlcXVpcmVkJyxcbiAgJ2FkZGl0aW9uYWxQcm9wZXJ0aWVzJyxcbiAgJ2VudW0nLFxuICAnZm9ybWF0JyxcbiAgJ2NvbnN0J1xuXTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobWV0YVNjaGVtYSwga2V5d29yZHNKc29uUG9pbnRlcnMpIHtcbiAgZm9yICh2YXIgaT0wOyBpPGtleXdvcmRzSnNvblBvaW50ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgbWV0YVNjaGVtYSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobWV0YVNjaGVtYSkpO1xuICAgIHZhciBzZWdtZW50cyA9IGtleXdvcmRzSnNvblBvaW50ZXJzW2ldLnNwbGl0KCcvJyk7XG4gICAgdmFyIGtleXdvcmRzID0gbWV0YVNjaGVtYTtcbiAgICB2YXIgajtcbiAgICBmb3IgKGo9MTsgajxzZWdtZW50cy5sZW5ndGg7IGorKylcbiAgICAgIGtleXdvcmRzID0ga2V5d29yZHNbc2VnbWVudHNbal1dO1xuXG4gICAgZm9yIChqPTA7IGo8S0VZV09SRFMubGVuZ3RoOyBqKyspIHtcbiAgICAgIHZhciBrZXkgPSBLRVlXT1JEU1tqXTtcbiAgICAgIHZhciBzY2hlbWEgPSBrZXl3b3Jkc1trZXldO1xuICAgICAgaWYgKHNjaGVtYSkge1xuICAgICAgICBrZXl3b3Jkc1trZXldID0ge1xuICAgICAgICAgIGFueU9mOiBbXG4gICAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgICB7ICRyZWY6ICdodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZXBvYmVyZXpraW4vYWp2L21hc3Rlci9saWIvcmVmcy9kYXRhLmpzb24jJyB9XG4gICAgICAgICAgXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXRhU2NoZW1hO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIE1pc3NpbmdSZWZFcnJvciA9IHJlcXVpcmUoJy4vZXJyb3JfY2xhc3NlcycpLk1pc3NpbmdSZWY7XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcGlsZUFzeW5jO1xuXG5cbi8qKlxuICogQ3JlYXRlcyB2YWxpZGF0aW5nIGZ1bmN0aW9uIGZvciBwYXNzZWQgc2NoZW1hIHdpdGggYXN5bmNocm9ub3VzIGxvYWRpbmcgb2YgbWlzc2luZyBzY2hlbWFzLlxuICogYGxvYWRTY2hlbWFgIG9wdGlvbiBzaG91bGQgYmUgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgc2NoZW1hIHVyaSBhbmQgcmV0dXJucyBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgc2NoZW1hLlxuICogQHRoaXMgIEFqdlxuICogQHBhcmFtIHtPYmplY3R9ICAgc2NoZW1hIHNjaGVtYSBvYmplY3RcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gIG1ldGEgb3B0aW9uYWwgdHJ1ZSB0byBjb21waWxlIG1ldGEtc2NoZW1hOyB0aGlzIHBhcmFtZXRlciBjYW4gYmUgc2tpcHBlZFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgYW4gb3B0aW9uYWwgbm9kZS1zdHlsZSBjYWxsYmFjaywgaXQgaXMgY2FsbGVkIHdpdGggMiBwYXJhbWV0ZXJzOiBlcnJvciAob3IgbnVsbCkgYW5kIHZhbGlkYXRpbmcgZnVuY3Rpb24uXG4gKiBAcmV0dXJuIHtQcm9taXNlfSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhIHZhbGlkYXRpbmcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGVBc3luYyhzY2hlbWEsIG1ldGEsIGNhbGxiYWNrKSB7XG4gIC8qIGVzbGludCBuby1zaGFkb3c6IDAgKi9cbiAgLyogZ2xvYmFsIFByb21pc2UgKi9cbiAgLyoganNoaW50IHZhbGlkdGhpczogdHJ1ZSAqL1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIGlmICh0eXBlb2YgdGhpcy5fb3B0cy5sb2FkU2NoZW1hICE9ICdmdW5jdGlvbicpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdvcHRpb25zLmxvYWRTY2hlbWEgc2hvdWxkIGJlIGEgZnVuY3Rpb24nKTtcblxuICBpZiAodHlwZW9mIG1ldGEgPT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gbWV0YTtcbiAgICBtZXRhID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgdmFyIHAgPSBsb2FkTWV0YVNjaGVtYU9mKHNjaGVtYSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNjaGVtYU9iaiA9IHNlbGYuX2FkZFNjaGVtYShzY2hlbWEsIHVuZGVmaW5lZCwgbWV0YSk7XG4gICAgcmV0dXJuIHNjaGVtYU9iai52YWxpZGF0ZSB8fCBfY29tcGlsZUFzeW5jKHNjaGVtYU9iaik7XG4gIH0pO1xuXG4gIGlmIChjYWxsYmFjaykge1xuICAgIHAudGhlbihcbiAgICAgIGZ1bmN0aW9uKHYpIHsgY2FsbGJhY2sobnVsbCwgdik7IH0sXG4gICAgICBjYWxsYmFja1xuICAgICk7XG4gIH1cblxuICByZXR1cm4gcDtcblxuXG4gIGZ1bmN0aW9uIGxvYWRNZXRhU2NoZW1hT2Yoc2NoKSB7XG4gICAgdmFyICRzY2hlbWEgPSBzY2guJHNjaGVtYTtcbiAgICByZXR1cm4gJHNjaGVtYSAmJiAhc2VsZi5nZXRTY2hlbWEoJHNjaGVtYSlcbiAgICAgICAgICAgID8gY29tcGlsZUFzeW5jLmNhbGwoc2VsZiwgeyAkcmVmOiAkc2NoZW1hIH0sIHRydWUpXG4gICAgICAgICAgICA6IFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cblxuICBmdW5jdGlvbiBfY29tcGlsZUFzeW5jKHNjaGVtYU9iaikge1xuICAgIHRyeSB7IHJldHVybiBzZWxmLl9jb21waWxlKHNjaGVtYU9iaik7IH1cbiAgICBjYXRjaChlKSB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIE1pc3NpbmdSZWZFcnJvcikgcmV0dXJuIGxvYWRNaXNzaW5nU2NoZW1hKGUpO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGxvYWRNaXNzaW5nU2NoZW1hKGUpIHtcbiAgICAgIHZhciByZWYgPSBlLm1pc3NpbmdTY2hlbWE7XG4gICAgICBpZiAoYWRkZWQocmVmKSkgdGhyb3cgbmV3IEVycm9yKCdTY2hlbWEgJyArIHJlZiArICcgaXMgbG9hZGVkIGJ1dCAnICsgZS5taXNzaW5nUmVmICsgJyBjYW5ub3QgYmUgcmVzb2x2ZWQnKTtcblxuICAgICAgdmFyIHNjaGVtYVByb21pc2UgPSBzZWxmLl9sb2FkaW5nU2NoZW1hc1tyZWZdO1xuICAgICAgaWYgKCFzY2hlbWFQcm9taXNlKSB7XG4gICAgICAgIHNjaGVtYVByb21pc2UgPSBzZWxmLl9sb2FkaW5nU2NoZW1hc1tyZWZdID0gc2VsZi5fb3B0cy5sb2FkU2NoZW1hKHJlZik7XG4gICAgICAgIHNjaGVtYVByb21pc2UudGhlbihyZW1vdmVQcm9taXNlLCByZW1vdmVQcm9taXNlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNjaGVtYVByb21pc2UudGhlbihmdW5jdGlvbiAoc2NoKSB7XG4gICAgICAgIGlmICghYWRkZWQocmVmKSkge1xuICAgICAgICAgIHJldHVybiBsb2FkTWV0YVNjaGVtYU9mKHNjaCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIWFkZGVkKHJlZikpIHNlbGYuYWRkU2NoZW1hKHNjaCwgcmVmLCB1bmRlZmluZWQsIG1ldGEpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX2NvbXBpbGVBc3luYyhzY2hlbWFPYmopO1xuICAgICAgfSk7XG5cbiAgICAgIGZ1bmN0aW9uIHJlbW92ZVByb21pc2UoKSB7XG4gICAgICAgIGRlbGV0ZSBzZWxmLl9sb2FkaW5nU2NoZW1hc1tyZWZdO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBhZGRlZChyZWYpIHtcbiAgICAgICAgcmV0dXJuIHNlbGYuX3JlZnNbcmVmXSB8fCBzZWxmLl9zY2hlbWFzW3JlZl07XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX2N1c3RvbShpdCwgJGtleXdvcmQsICRydWxlVHlwZSkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGVycm9yS2V5d29yZDtcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICR2YWxpZCA9ICd2YWxpZCcgKyAkbHZsO1xuICB2YXIgJGVycnMgPSAnZXJyc19fJyArICRsdmw7XG4gIHZhciAkaXNEYXRhID0gaXQub3B0cy4kZGF0YSAmJiAkc2NoZW1hICYmICRzY2hlbWEuJGRhdGEsXG4gICAgJHNjaGVtYVZhbHVlO1xuICBpZiAoJGlzRGF0YSkge1xuICAgIG91dCArPSAnIHZhciBzY2hlbWEnICsgKCRsdmwpICsgJyA9ICcgKyAoaXQudXRpbC5nZXREYXRhKCRzY2hlbWEuJGRhdGEsICRkYXRhTHZsLCBpdC5kYXRhUGF0aEFycikpICsgJzsgJztcbiAgICAkc2NoZW1hVmFsdWUgPSAnc2NoZW1hJyArICRsdmw7XG4gIH0gZWxzZSB7XG4gICAgJHNjaGVtYVZhbHVlID0gJHNjaGVtYTtcbiAgfVxuICB2YXIgJHJ1bGUgPSB0aGlzLFxuICAgICRkZWZpbml0aW9uID0gJ2RlZmluaXRpb24nICsgJGx2bCxcbiAgICAkckRlZiA9ICRydWxlLmRlZmluaXRpb24sXG4gICAgJGNsb3NpbmdCcmFjZXMgPSAnJztcbiAgdmFyICRjb21waWxlLCAkaW5saW5lLCAkbWFjcm8sICRydWxlVmFsaWRhdGUsICR2YWxpZGF0ZUNvZGU7XG4gIGlmICgkaXNEYXRhICYmICRyRGVmLiRkYXRhKSB7XG4gICAgJHZhbGlkYXRlQ29kZSA9ICdrZXl3b3JkVmFsaWRhdGUnICsgJGx2bDtcbiAgICB2YXIgJHZhbGlkYXRlU2NoZW1hID0gJHJEZWYudmFsaWRhdGVTY2hlbWE7XG4gICAgb3V0ICs9ICcgdmFyICcgKyAoJGRlZmluaXRpb24pICsgJyA9IFJVTEVTLmN1c3RvbVtcXCcnICsgKCRrZXl3b3JkKSArICdcXCddLmRlZmluaXRpb247IHZhciAnICsgKCR2YWxpZGF0ZUNvZGUpICsgJyA9ICcgKyAoJGRlZmluaXRpb24pICsgJy52YWxpZGF0ZTsnO1xuICB9IGVsc2Uge1xuICAgICRydWxlVmFsaWRhdGUgPSBpdC51c2VDdXN0b21SdWxlKCRydWxlLCAkc2NoZW1hLCBpdC5zY2hlbWEsIGl0KTtcbiAgICBpZiAoISRydWxlVmFsaWRhdGUpIHJldHVybjtcbiAgICAkc2NoZW1hVmFsdWUgPSAndmFsaWRhdGUuc2NoZW1hJyArICRzY2hlbWFQYXRoO1xuICAgICR2YWxpZGF0ZUNvZGUgPSAkcnVsZVZhbGlkYXRlLmNvZGU7XG4gICAgJGNvbXBpbGUgPSAkckRlZi5jb21waWxlO1xuICAgICRpbmxpbmUgPSAkckRlZi5pbmxpbmU7XG4gICAgJG1hY3JvID0gJHJEZWYubWFjcm87XG4gIH1cbiAgdmFyICRydWxlRXJycyA9ICR2YWxpZGF0ZUNvZGUgKyAnLmVycm9ycycsXG4gICAgJGkgPSAnaScgKyAkbHZsLFxuICAgICRydWxlRXJyID0gJ3J1bGVFcnInICsgJGx2bCxcbiAgICAkYXN5bmNLZXl3b3JkID0gJHJEZWYuYXN5bmM7XG4gIGlmICgkYXN5bmNLZXl3b3JkICYmICFpdC5hc3luYykgdGhyb3cgbmV3IEVycm9yKCdhc3luYyBrZXl3b3JkIGluIHN5bmMgc2NoZW1hJyk7XG4gIGlmICghKCRpbmxpbmUgfHwgJG1hY3JvKSkge1xuICAgIG91dCArPSAnJyArICgkcnVsZUVycnMpICsgJyA9IG51bGw7JztcbiAgfVxuICBvdXQgKz0gJ3ZhciAnICsgKCRlcnJzKSArICcgPSBlcnJvcnM7dmFyICcgKyAoJHZhbGlkKSArICc7JztcbiAgaWYgKCRpc0RhdGEgJiYgJHJEZWYuJGRhdGEpIHtcbiAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgb3V0ICs9ICcgaWYgKCcgKyAoJHNjaGVtYVZhbHVlKSArICcgPT09IHVuZGVmaW5lZCkgeyAnICsgKCR2YWxpZCkgKyAnID0gdHJ1ZTsgfSBlbHNlIHsgJztcbiAgICBpZiAoJHZhbGlkYXRlU2NoZW1hKSB7XG4gICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgICBvdXQgKz0gJyAnICsgKCR2YWxpZCkgKyAnID0gJyArICgkZGVmaW5pdGlvbikgKyAnLnZhbGlkYXRlU2NoZW1hKCcgKyAoJHNjaGVtYVZhbHVlKSArICcpOyBpZiAoJyArICgkdmFsaWQpICsgJykgeyAnO1xuICAgIH1cbiAgfVxuICBpZiAoJGlubGluZSkge1xuICAgIGlmICgkckRlZi5zdGF0ZW1lbnRzKSB7XG4gICAgICBvdXQgKz0gJyAnICsgKCRydWxlVmFsaWRhdGUudmFsaWRhdGUpICsgJyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyAnICsgKCR2YWxpZCkgKyAnID0gJyArICgkcnVsZVZhbGlkYXRlLnZhbGlkYXRlKSArICc7ICc7XG4gICAgfVxuICB9IGVsc2UgaWYgKCRtYWNybykge1xuICAgIHZhciAkaXQgPSBpdC51dGlsLmNvcHkoaXQpO1xuICAgIHZhciAkY2xvc2luZ0JyYWNlcyA9ICcnO1xuICAgICRpdC5sZXZlbCsrO1xuICAgIHZhciAkbmV4dFZhbGlkID0gJ3ZhbGlkJyArICRpdC5sZXZlbDtcbiAgICAkaXQuc2NoZW1hID0gJHJ1bGVWYWxpZGF0ZS52YWxpZGF0ZTtcbiAgICAkaXQuc2NoZW1hUGF0aCA9ICcnO1xuICAgIHZhciAkd2FzQ29tcG9zaXRlID0gaXQuY29tcG9zaXRlUnVsZTtcbiAgICBpdC5jb21wb3NpdGVSdWxlID0gJGl0LmNvbXBvc2l0ZVJ1bGUgPSB0cnVlO1xuICAgIHZhciAkY29kZSA9IGl0LnZhbGlkYXRlKCRpdCkucmVwbGFjZSgvdmFsaWRhdGVcXC5zY2hlbWEvZywgJHZhbGlkYXRlQ29kZSk7XG4gICAgaXQuY29tcG9zaXRlUnVsZSA9ICRpdC5jb21wb3NpdGVSdWxlID0gJHdhc0NvbXBvc2l0ZTtcbiAgICBvdXQgKz0gJyAnICsgKCRjb2RlKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgb3V0ID0gJyc7XG4gICAgb3V0ICs9ICcgICcgKyAoJHZhbGlkYXRlQ29kZSkgKyAnLmNhbGwoICc7XG4gICAgaWYgKGl0Lm9wdHMucGFzc0NvbnRleHQpIHtcbiAgICAgIG91dCArPSAndGhpcyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnc2VsZic7XG4gICAgfVxuICAgIGlmICgkY29tcGlsZSB8fCAkckRlZi5zY2hlbWEgPT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAsICcgKyAoJGRhdGEpICsgJyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyAsICcgKyAoJHNjaGVtYVZhbHVlKSArICcgLCAnICsgKCRkYXRhKSArICcgLCB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyAsIChkYXRhUGF0aCB8fCBcXCdcXCcpJztcbiAgICBpZiAoaXQuZXJyb3JQYXRoICE9ICdcIlwiJykge1xuICAgICAgb3V0ICs9ICcgKyAnICsgKGl0LmVycm9yUGF0aCk7XG4gICAgfVxuICAgIHZhciAkcGFyZW50RGF0YSA9ICRkYXRhTHZsID8gJ2RhdGEnICsgKCgkZGF0YUx2bCAtIDEpIHx8ICcnKSA6ICdwYXJlbnREYXRhJyxcbiAgICAgICRwYXJlbnREYXRhUHJvcGVydHkgPSAkZGF0YUx2bCA/IGl0LmRhdGFQYXRoQXJyWyRkYXRhTHZsXSA6ICdwYXJlbnREYXRhUHJvcGVydHknO1xuICAgIG91dCArPSAnICwgJyArICgkcGFyZW50RGF0YSkgKyAnICwgJyArICgkcGFyZW50RGF0YVByb3BlcnR5KSArICcgLCByb290RGF0YSApICAnO1xuICAgIHZhciBkZWZfY2FsbFJ1bGVWYWxpZGF0ZSA9IG91dDtcbiAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgIGlmICgkckRlZi5lcnJvcnMgPT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAnICsgKCR2YWxpZCkgKyAnID0gJztcbiAgICAgIGlmICgkYXN5bmNLZXl3b3JkKSB7XG4gICAgICAgIG91dCArPSAnYXdhaXQgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnJyArIChkZWZfY2FsbFJ1bGVWYWxpZGF0ZSkgKyAnOyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoJGFzeW5jS2V5d29yZCkge1xuICAgICAgICAkcnVsZUVycnMgPSAnY3VzdG9tRXJyb3JzJyArICRsdmw7XG4gICAgICAgIG91dCArPSAnIHZhciAnICsgKCRydWxlRXJycykgKyAnID0gbnVsbDsgdHJ5IHsgJyArICgkdmFsaWQpICsgJyA9IGF3YWl0ICcgKyAoZGVmX2NhbGxSdWxlVmFsaWRhdGUpICsgJzsgfSBjYXRjaCAoZSkgeyAnICsgKCR2YWxpZCkgKyAnID0gZmFsc2U7IGlmIChlIGluc3RhbmNlb2YgVmFsaWRhdGlvbkVycm9yKSAnICsgKCRydWxlRXJycykgKyAnID0gZS5lcnJvcnM7IGVsc2UgdGhyb3cgZTsgfSAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgJyArICgkcnVsZUVycnMpICsgJyA9IG51bGw7ICcgKyAoJHZhbGlkKSArICcgPSAnICsgKGRlZl9jYWxsUnVsZVZhbGlkYXRlKSArICc7ICc7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICgkckRlZi5tb2RpZnlpbmcpIHtcbiAgICBvdXQgKz0gJyBpZiAoJyArICgkcGFyZW50RGF0YSkgKyAnKSAnICsgKCRkYXRhKSArICcgPSAnICsgKCRwYXJlbnREYXRhKSArICdbJyArICgkcGFyZW50RGF0YVByb3BlcnR5KSArICddOyc7XG4gIH1cbiAgb3V0ICs9ICcnICsgKCRjbG9zaW5nQnJhY2VzKTtcbiAgaWYgKCRyRGVmLnZhbGlkKSB7XG4gICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgIG91dCArPSAnIGlmICh0cnVlKSB7ICc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIGlmICggJztcbiAgICBpZiAoJHJEZWYudmFsaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgb3V0ICs9ICcgISc7XG4gICAgICBpZiAoJG1hY3JvKSB7XG4gICAgICAgIG91dCArPSAnJyArICgkbmV4dFZhbGlkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnJyArICgkdmFsaWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyAnICsgKCEkckRlZi52YWxpZCkgKyAnICc7XG4gICAgfVxuICAgIG91dCArPSAnKSB7ICc7XG4gICAgJGVycm9yS2V5d29yZCA9ICRydWxlLmtleXdvcmQ7XG4gICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICAgIG91dCA9ICcnO1xuICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCRlcnJvcktleXdvcmQgfHwgJ2N1c3RvbScpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsga2V5d29yZDogXFwnJyArICgkcnVsZS5rZXl3b3JkKSArICdcXCcgfSAnO1xuICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIHBhc3MgXCInICsgKCRydWxlLmtleXdvcmQpICsgJ1wiIGtleXdvcmQgdmFsaWRhdGlvblxcJyAnO1xuICAgICAgfVxuICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgfSAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB7fSAnO1xuICAgIH1cbiAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgfVxuICAgIHZhciBkZWZfY3VzdG9tRXJyb3IgPSBvdXQ7XG4gICAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgICBpZiAoJGlubGluZSkge1xuICAgICAgaWYgKCRyRGVmLmVycm9ycykge1xuICAgICAgICBpZiAoJHJEZWYuZXJyb3JzICE9ICdmdWxsJykge1xuICAgICAgICAgIG91dCArPSAnICBmb3IgKHZhciAnICsgKCRpKSArICc9JyArICgkZXJycykgKyAnOyAnICsgKCRpKSArICc8ZXJyb3JzOyAnICsgKCRpKSArICcrKykgeyB2YXIgJyArICgkcnVsZUVycikgKyAnID0gdkVycm9yc1snICsgKCRpKSArICddOyBpZiAoJyArICgkcnVsZUVycikgKyAnLmRhdGFQYXRoID09PSB1bmRlZmluZWQpICcgKyAoJHJ1bGVFcnIpICsgJy5kYXRhUGF0aCA9IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJzsgaWYgKCcgKyAoJHJ1bGVFcnIpICsgJy5zY2hlbWFQYXRoID09PSB1bmRlZmluZWQpIHsgJyArICgkcnVsZUVycikgKyAnLnNjaGVtYVBhdGggPSBcIicgKyAoJGVyclNjaGVtYVBhdGgpICsgJ1wiOyB9ICc7XG4gICAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgJyArICgkcnVsZUVycikgKyAnLnNjaGVtYSA9ICcgKyAoJHNjaGVtYVZhbHVlKSArICc7ICcgKyAoJHJ1bGVFcnIpICsgJy5kYXRhID0gJyArICgkZGF0YSkgKyAnOyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICgkckRlZi5lcnJvcnMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgJyArIChkZWZfY3VzdG9tRXJyb3IpICsgJyAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIGlmICgnICsgKCRlcnJzKSArICcgPT0gZXJyb3JzKSB7ICcgKyAoZGVmX2N1c3RvbUVycm9yKSArICcgfSBlbHNlIHsgIGZvciAodmFyICcgKyAoJGkpICsgJz0nICsgKCRlcnJzKSArICc7ICcgKyAoJGkpICsgJzxlcnJvcnM7ICcgKyAoJGkpICsgJysrKSB7IHZhciAnICsgKCRydWxlRXJyKSArICcgPSB2RXJyb3JzWycgKyAoJGkpICsgJ107IGlmICgnICsgKCRydWxlRXJyKSArICcuZGF0YVBhdGggPT09IHVuZGVmaW5lZCkgJyArICgkcnVsZUVycikgKyAnLmRhdGFQYXRoID0gKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnOyBpZiAoJyArICgkcnVsZUVycikgKyAnLnNjaGVtYVBhdGggPT09IHVuZGVmaW5lZCkgeyAnICsgKCRydWxlRXJyKSArICcuc2NoZW1hUGF0aCA9IFwiJyArICgkZXJyU2NoZW1hUGF0aCkgKyAnXCI7IH0gJztcbiAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAnICsgKCRydWxlRXJyKSArICcuc2NoZW1hID0gJyArICgkc2NoZW1hVmFsdWUpICsgJzsgJyArICgkcnVsZUVycikgKyAnLmRhdGEgPSAnICsgKCRkYXRhKSArICc7ICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dCArPSAnIH0gfSAnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgkbWFjcm8pIHtcbiAgICAgIG91dCArPSAnICAgdmFyIGVyciA9ICAgJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgkZXJyb3JLZXl3b3JkIHx8ICdjdXN0b20nKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IGtleXdvcmQ6IFxcJycgKyAoJHJ1bGUua2V5d29yZCkgKyAnXFwnIH0gJztcbiAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgcGFzcyBcIicgKyAoJHJ1bGUua2V5d29yZCkgKyAnXCIga2V5d29yZCB2YWxpZGF0aW9uXFwnICc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcih2RXJyb3JzKTsgJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSB2RXJyb3JzOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCRyRGVmLmVycm9ycyA9PT0gZmFsc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgJyArIChkZWZfY3VzdG9tRXJyb3IpICsgJyAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgaWYgKEFycmF5LmlzQXJyYXkoJyArICgkcnVsZUVycnMpICsgJykpIHsgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSAnICsgKCRydWxlRXJycykgKyAnOyBlbHNlIHZFcnJvcnMgPSB2RXJyb3JzLmNvbmNhdCgnICsgKCRydWxlRXJycykgKyAnKTsgZXJyb3JzID0gdkVycm9ycy5sZW5ndGg7ICBmb3IgKHZhciAnICsgKCRpKSArICc9JyArICgkZXJycykgKyAnOyAnICsgKCRpKSArICc8ZXJyb3JzOyAnICsgKCRpKSArICcrKykgeyB2YXIgJyArICgkcnVsZUVycikgKyAnID0gdkVycm9yc1snICsgKCRpKSArICddOyBpZiAoJyArICgkcnVsZUVycikgKyAnLmRhdGFQYXRoID09PSB1bmRlZmluZWQpICcgKyAoJHJ1bGVFcnIpICsgJy5kYXRhUGF0aCA9IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJzsgICcgKyAoJHJ1bGVFcnIpICsgJy5zY2hlbWFQYXRoID0gXCInICsgKCRlcnJTY2hlbWFQYXRoKSArICdcIjsgICc7XG4gICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICBvdXQgKz0gJyAnICsgKCRydWxlRXJyKSArICcuc2NoZW1hID0gJyArICgkc2NoZW1hVmFsdWUpICsgJzsgJyArICgkcnVsZUVycikgKyAnLmRhdGEgPSAnICsgKCRkYXRhKSArICc7ICc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgfSB9IGVsc2UgeyAnICsgKGRlZl9jdXN0b21FcnJvcikgKyAnIH0gJztcbiAgICAgIH1cbiAgICB9XG4gICAgb3V0ICs9ICcgfSAnO1xuICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICBvdXQgKz0gJyBlbHNlIHsgJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIG1ldGFTY2hlbWEgPSByZXF1aXJlKCcuL3JlZnMvanNvbi1zY2hlbWEtZHJhZnQtMDcuanNvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgJGlkOiAnaHR0cHM6Ly9naXRodWIuY29tL2Vwb2JlcmV6a2luL2Fqdi9ibG9iL21hc3Rlci9saWIvZGVmaW5pdGlvbl9zY2hlbWEuanMnLFxuICBkZWZpbml0aW9uczoge1xuICAgIHNpbXBsZVR5cGVzOiBtZXRhU2NoZW1hLmRlZmluaXRpb25zLnNpbXBsZVR5cGVzXG4gIH0sXG4gIHR5cGU6ICdvYmplY3QnLFxuICBkZXBlbmRlbmNpZXM6IHtcbiAgICBzY2hlbWE6IFsndmFsaWRhdGUnXSxcbiAgICAkZGF0YTogWyd2YWxpZGF0ZSddLFxuICAgIHN0YXRlbWVudHM6IFsnaW5saW5lJ10sXG4gICAgdmFsaWQ6IHtub3Q6IHtyZXF1aXJlZDogWydtYWNybyddfX1cbiAgfSxcbiAgcHJvcGVydGllczoge1xuICAgIHR5cGU6IG1ldGFTY2hlbWEucHJvcGVydGllcy50eXBlLFxuICAgIHNjaGVtYToge3R5cGU6ICdib29sZWFuJ30sXG4gICAgc3RhdGVtZW50czoge3R5cGU6ICdib29sZWFuJ30sXG4gICAgZGVwZW5kZW5jaWVzOiB7XG4gICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgaXRlbXM6IHt0eXBlOiAnc3RyaW5nJ31cbiAgICB9LFxuICAgIG1ldGFTY2hlbWE6IHt0eXBlOiAnb2JqZWN0J30sXG4gICAgbW9kaWZ5aW5nOiB7dHlwZTogJ2Jvb2xlYW4nfSxcbiAgICB2YWxpZDoge3R5cGU6ICdib29sZWFuJ30sXG4gICAgJGRhdGE6IHt0eXBlOiAnYm9vbGVhbid9LFxuICAgIGFzeW5jOiB7dHlwZTogJ2Jvb2xlYW4nfSxcbiAgICBlcnJvcnM6IHtcbiAgICAgIGFueU9mOiBbXG4gICAgICAgIHt0eXBlOiAnYm9vbGVhbid9LFxuICAgICAgICB7Y29uc3Q6ICdmdWxsJ31cbiAgICAgIF1cbiAgICB9XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBJREVOVElGSUVSID0gL15bYS16XyRdW2EtejAtOV8kLV0qJC9pO1xudmFyIGN1c3RvbVJ1bGVDb2RlID0gcmVxdWlyZSgnLi9kb3Rqcy9jdXN0b20nKTtcbnZhciBkZWZpbml0aW9uU2NoZW1hID0gcmVxdWlyZSgnLi9kZWZpbml0aW9uX3NjaGVtYScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYWRkOiBhZGRLZXl3b3JkLFxuICBnZXQ6IGdldEtleXdvcmQsXG4gIHJlbW92ZTogcmVtb3ZlS2V5d29yZCxcbiAgdmFsaWRhdGU6IHZhbGlkYXRlS2V5d29yZFxufTtcblxuXG4vKipcbiAqIERlZmluZSBjdXN0b20ga2V5d29yZFxuICogQHRoaXMgIEFqdlxuICogQHBhcmFtIHtTdHJpbmd9IGtleXdvcmQgY3VzdG9tIGtleXdvcmQsIHNob3VsZCBiZSB1bmlxdWUgKGluY2x1ZGluZyBkaWZmZXJlbnQgZnJvbSBhbGwgc3RhbmRhcmQsIGN1c3RvbSBhbmQgbWFjcm8ga2V5d29yZHMpLlxuICogQHBhcmFtIHtPYmplY3R9IGRlZmluaXRpb24ga2V5d29yZCBkZWZpbml0aW9uIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgYHR5cGVgICh0eXBlKHMpIHdoaWNoIHRoZSBrZXl3b3JkIGFwcGxpZXMgdG8pLCBgdmFsaWRhdGVgIG9yIGBjb21waWxlYC5cbiAqIEByZXR1cm4ge0Fqdn0gdGhpcyBmb3IgbWV0aG9kIGNoYWluaW5nXG4gKi9cbmZ1bmN0aW9uIGFkZEtleXdvcmQoa2V5d29yZCwgZGVmaW5pdGlvbikge1xuICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlICovXG4gIC8qIGVzbGludCBuby1zaGFkb3c6IDAgKi9cbiAgdmFyIFJVTEVTID0gdGhpcy5SVUxFUztcbiAgaWYgKFJVTEVTLmtleXdvcmRzW2tleXdvcmRdKVxuICAgIHRocm93IG5ldyBFcnJvcignS2V5d29yZCAnICsga2V5d29yZCArICcgaXMgYWxyZWFkeSBkZWZpbmVkJyk7XG5cbiAgaWYgKCFJREVOVElGSUVSLnRlc3Qoa2V5d29yZCkpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdLZXl3b3JkICcgKyBrZXl3b3JkICsgJyBpcyBub3QgYSB2YWxpZCBpZGVudGlmaWVyJyk7XG5cbiAgaWYgKGRlZmluaXRpb24pIHtcbiAgICB0aGlzLnZhbGlkYXRlS2V5d29yZChkZWZpbml0aW9uLCB0cnVlKTtcblxuICAgIHZhciBkYXRhVHlwZSA9IGRlZmluaXRpb24udHlwZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhVHlwZSkpIHtcbiAgICAgIGZvciAodmFyIGk9MDsgaTxkYXRhVHlwZS5sZW5ndGg7IGkrKylcbiAgICAgICAgX2FkZFJ1bGUoa2V5d29yZCwgZGF0YVR5cGVbaV0sIGRlZmluaXRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBfYWRkUnVsZShrZXl3b3JkLCBkYXRhVHlwZSwgZGVmaW5pdGlvbik7XG4gICAgfVxuXG4gICAgdmFyIG1ldGFTY2hlbWEgPSBkZWZpbml0aW9uLm1ldGFTY2hlbWE7XG4gICAgaWYgKG1ldGFTY2hlbWEpIHtcbiAgICAgIGlmIChkZWZpbml0aW9uLiRkYXRhICYmIHRoaXMuX29wdHMuJGRhdGEpIHtcbiAgICAgICAgbWV0YVNjaGVtYSA9IHtcbiAgICAgICAgICBhbnlPZjogW1xuICAgICAgICAgICAgbWV0YVNjaGVtYSxcbiAgICAgICAgICAgIHsgJyRyZWYnOiAnaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Vwb2JlcmV6a2luL2Fqdi9tYXN0ZXIvbGliL3JlZnMvZGF0YS5qc29uIycgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGRlZmluaXRpb24udmFsaWRhdGVTY2hlbWEgPSB0aGlzLmNvbXBpbGUobWV0YVNjaGVtYSwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgUlVMRVMua2V5d29yZHNba2V5d29yZF0gPSBSVUxFUy5hbGxba2V5d29yZF0gPSB0cnVlO1xuXG5cbiAgZnVuY3Rpb24gX2FkZFJ1bGUoa2V5d29yZCwgZGF0YVR5cGUsIGRlZmluaXRpb24pIHtcbiAgICB2YXIgcnVsZUdyb3VwO1xuICAgIGZvciAodmFyIGk9MDsgaTxSVUxFUy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJnID0gUlVMRVNbaV07XG4gICAgICBpZiAocmcudHlwZSA9PSBkYXRhVHlwZSkge1xuICAgICAgICBydWxlR3JvdXAgPSByZztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFydWxlR3JvdXApIHtcbiAgICAgIHJ1bGVHcm91cCA9IHsgdHlwZTogZGF0YVR5cGUsIHJ1bGVzOiBbXSB9O1xuICAgICAgUlVMRVMucHVzaChydWxlR3JvdXApO1xuICAgIH1cblxuICAgIHZhciBydWxlID0ge1xuICAgICAga2V5d29yZDoga2V5d29yZCxcbiAgICAgIGRlZmluaXRpb246IGRlZmluaXRpb24sXG4gICAgICBjdXN0b206IHRydWUsXG4gICAgICBjb2RlOiBjdXN0b21SdWxlQ29kZSxcbiAgICAgIGltcGxlbWVudHM6IGRlZmluaXRpb24uaW1wbGVtZW50c1xuICAgIH07XG4gICAgcnVsZUdyb3VwLnJ1bGVzLnB1c2gocnVsZSk7XG4gICAgUlVMRVMuY3VzdG9tW2tleXdvcmRdID0gcnVsZTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuXG5cbi8qKlxuICogR2V0IGtleXdvcmRcbiAqIEB0aGlzICBBanZcbiAqIEBwYXJhbSB7U3RyaW5nfSBrZXl3b3JkIHByZS1kZWZpbmVkIG9yIGN1c3RvbSBrZXl3b3JkLlxuICogQHJldHVybiB7T2JqZWN0fEJvb2xlYW59IGN1c3RvbSBrZXl3b3JkIGRlZmluaXRpb24sIGB0cnVlYCBpZiBpdCBpcyBhIHByZWRlZmluZWQga2V5d29yZCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmZ1bmN0aW9uIGdldEtleXdvcmQoa2V5d29yZCkge1xuICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlICovXG4gIHZhciBydWxlID0gdGhpcy5SVUxFUy5jdXN0b21ba2V5d29yZF07XG4gIHJldHVybiBydWxlID8gcnVsZS5kZWZpbml0aW9uIDogdGhpcy5SVUxFUy5rZXl3b3Jkc1trZXl3b3JkXSB8fCBmYWxzZTtcbn1cblxuXG4vKipcbiAqIFJlbW92ZSBrZXl3b3JkXG4gKiBAdGhpcyAgQWp2XG4gKiBAcGFyYW0ge1N0cmluZ30ga2V5d29yZCBwcmUtZGVmaW5lZCBvciBjdXN0b20ga2V5d29yZC5cbiAqIEByZXR1cm4ge0Fqdn0gdGhpcyBmb3IgbWV0aG9kIGNoYWluaW5nXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUtleXdvcmQoa2V5d29yZCkge1xuICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlICovXG4gIHZhciBSVUxFUyA9IHRoaXMuUlVMRVM7XG4gIGRlbGV0ZSBSVUxFUy5rZXl3b3Jkc1trZXl3b3JkXTtcbiAgZGVsZXRlIFJVTEVTLmFsbFtrZXl3b3JkXTtcbiAgZGVsZXRlIFJVTEVTLmN1c3RvbVtrZXl3b3JkXTtcbiAgZm9yICh2YXIgaT0wOyBpPFJVTEVTLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHJ1bGVzID0gUlVMRVNbaV0ucnVsZXM7XG4gICAgZm9yICh2YXIgaj0wOyBqPHJ1bGVzLmxlbmd0aDsgaisrKSB7XG4gICAgICBpZiAocnVsZXNbal0ua2V5d29yZCA9PSBrZXl3b3JkKSB7XG4gICAgICAgIHJ1bGVzLnNwbGljZShqLCAxKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5cbi8qKlxuICogVmFsaWRhdGUga2V5d29yZCBkZWZpbml0aW9uXG4gKiBAdGhpcyAgQWp2XG4gKiBAcGFyYW0ge09iamVjdH0gZGVmaW5pdGlvbiBrZXl3b3JkIGRlZmluaXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHtCb29sZWFufSB0aHJvd0Vycm9yIHRydWUgdG8gdGhyb3cgZXhjZXB0aW9uIGlmIGRlZmluaXRpb24gaXMgaW52YWxpZFxuICogQHJldHVybiB7Ym9vbGVhbn0gdmFsaWRhdGlvbiByZXN1bHRcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVLZXl3b3JkKGRlZmluaXRpb24sIHRocm93RXJyb3IpIHtcbiAgdmFsaWRhdGVLZXl3b3JkLmVycm9ycyA9IG51bGw7XG4gIHZhciB2ID0gdGhpcy5fdmFsaWRhdGVLZXl3b3JkID0gdGhpcy5fdmFsaWRhdGVLZXl3b3JkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgdGhpcy5jb21waWxlKGRlZmluaXRpb25TY2hlbWEsIHRydWUpO1xuXG4gIGlmICh2KGRlZmluaXRpb24pKSByZXR1cm4gdHJ1ZTtcbiAgdmFsaWRhdGVLZXl3b3JkLmVycm9ycyA9IHYuZXJyb3JzO1xuICBpZiAodGhyb3dFcnJvcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2N1c3RvbSBrZXl3b3JkIGRlZmluaXRpb24gaXMgaW52YWxpZDogJyAgKyB0aGlzLmVycm9yc1RleHQodi5lcnJvcnMpKTtcbiAgZWxzZVxuICAgIHJldHVybiBmYWxzZTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGNvbXBpbGVTY2hlbWEgPSByZXF1aXJlKCcuL2NvbXBpbGUnKVxuICAsIHJlc29sdmUgPSByZXF1aXJlKCcuL2NvbXBpbGUvcmVzb2x2ZScpXG4gICwgQ2FjaGUgPSByZXF1aXJlKCcuL2NhY2hlJylcbiAgLCBTY2hlbWFPYmplY3QgPSByZXF1aXJlKCcuL2NvbXBpbGUvc2NoZW1hX29iaicpXG4gICwgc3RhYmxlU3RyaW5naWZ5ID0gcmVxdWlyZSgnZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnknKVxuICAsIGZvcm1hdHMgPSByZXF1aXJlKCcuL2NvbXBpbGUvZm9ybWF0cycpXG4gICwgcnVsZXMgPSByZXF1aXJlKCcuL2NvbXBpbGUvcnVsZXMnKVxuICAsICRkYXRhTWV0YVNjaGVtYSA9IHJlcXVpcmUoJy4vZGF0YScpXG4gICwgdXRpbCA9IHJlcXVpcmUoJy4vY29tcGlsZS91dGlsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gQWp2O1xuXG5BanYucHJvdG90eXBlLnZhbGlkYXRlID0gdmFsaWRhdGU7XG5BanYucHJvdG90eXBlLmNvbXBpbGUgPSBjb21waWxlO1xuQWp2LnByb3RvdHlwZS5hZGRTY2hlbWEgPSBhZGRTY2hlbWE7XG5BanYucHJvdG90eXBlLmFkZE1ldGFTY2hlbWEgPSBhZGRNZXRhU2NoZW1hO1xuQWp2LnByb3RvdHlwZS52YWxpZGF0ZVNjaGVtYSA9IHZhbGlkYXRlU2NoZW1hO1xuQWp2LnByb3RvdHlwZS5nZXRTY2hlbWEgPSBnZXRTY2hlbWE7XG5BanYucHJvdG90eXBlLnJlbW92ZVNjaGVtYSA9IHJlbW92ZVNjaGVtYTtcbkFqdi5wcm90b3R5cGUuYWRkRm9ybWF0ID0gYWRkRm9ybWF0O1xuQWp2LnByb3RvdHlwZS5lcnJvcnNUZXh0ID0gZXJyb3JzVGV4dDtcblxuQWp2LnByb3RvdHlwZS5fYWRkU2NoZW1hID0gX2FkZFNjaGVtYTtcbkFqdi5wcm90b3R5cGUuX2NvbXBpbGUgPSBfY29tcGlsZTtcblxuQWp2LnByb3RvdHlwZS5jb21waWxlQXN5bmMgPSByZXF1aXJlKCcuL2NvbXBpbGUvYXN5bmMnKTtcbnZhciBjdXN0b21LZXl3b3JkID0gcmVxdWlyZSgnLi9rZXl3b3JkJyk7XG5BanYucHJvdG90eXBlLmFkZEtleXdvcmQgPSBjdXN0b21LZXl3b3JkLmFkZDtcbkFqdi5wcm90b3R5cGUuZ2V0S2V5d29yZCA9IGN1c3RvbUtleXdvcmQuZ2V0O1xuQWp2LnByb3RvdHlwZS5yZW1vdmVLZXl3b3JkID0gY3VzdG9tS2V5d29yZC5yZW1vdmU7XG5BanYucHJvdG90eXBlLnZhbGlkYXRlS2V5d29yZCA9IGN1c3RvbUtleXdvcmQudmFsaWRhdGU7XG5cbnZhciBlcnJvckNsYXNzZXMgPSByZXF1aXJlKCcuL2NvbXBpbGUvZXJyb3JfY2xhc3NlcycpO1xuQWp2LlZhbGlkYXRpb25FcnJvciA9IGVycm9yQ2xhc3Nlcy5WYWxpZGF0aW9uO1xuQWp2Lk1pc3NpbmdSZWZFcnJvciA9IGVycm9yQ2xhc3Nlcy5NaXNzaW5nUmVmO1xuQWp2LiRkYXRhTWV0YVNjaGVtYSA9ICRkYXRhTWV0YVNjaGVtYTtcblxudmFyIE1FVEFfU0NIRU1BX0lEID0gJ2h0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hJztcblxudmFyIE1FVEFfSUdOT1JFX09QVElPTlMgPSBbICdyZW1vdmVBZGRpdGlvbmFsJywgJ3VzZURlZmF1bHRzJywgJ2NvZXJjZVR5cGVzJywgJ3N0cmljdERlZmF1bHRzJyBdO1xudmFyIE1FVEFfU1VQUE9SVF9EQVRBID0gWycvcHJvcGVydGllcyddO1xuXG4vKipcbiAqIENyZWF0ZXMgdmFsaWRhdG9yIGluc3RhbmNlLlxuICogVXNhZ2U6IGBBanYob3B0cylgXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBvcHRpb25hbCBvcHRpb25zXG4gKiBAcmV0dXJuIHtPYmplY3R9IGFqdiBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBBanYob3B0cykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQWp2KSkgcmV0dXJuIG5ldyBBanYob3B0cyk7XG4gIG9wdHMgPSB0aGlzLl9vcHRzID0gdXRpbC5jb3B5KG9wdHMpIHx8IHt9O1xuICBzZXRMb2dnZXIodGhpcyk7XG4gIHRoaXMuX3NjaGVtYXMgPSB7fTtcbiAgdGhpcy5fcmVmcyA9IHt9O1xuICB0aGlzLl9mcmFnbWVudHMgPSB7fTtcbiAgdGhpcy5fZm9ybWF0cyA9IGZvcm1hdHMob3B0cy5mb3JtYXQpO1xuXG4gIHRoaXMuX2NhY2hlID0gb3B0cy5jYWNoZSB8fCBuZXcgQ2FjaGU7XG4gIHRoaXMuX2xvYWRpbmdTY2hlbWFzID0ge307XG4gIHRoaXMuX2NvbXBpbGF0aW9ucyA9IFtdO1xuICB0aGlzLlJVTEVTID0gcnVsZXMoKTtcbiAgdGhpcy5fZ2V0SWQgPSBjaG9vc2VHZXRJZChvcHRzKTtcblxuICBvcHRzLmxvb3BSZXF1aXJlZCA9IG9wdHMubG9vcFJlcXVpcmVkIHx8IEluZmluaXR5O1xuICBpZiAob3B0cy5lcnJvckRhdGFQYXRoID09ICdwcm9wZXJ0eScpIG9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSA9IHRydWU7XG4gIGlmIChvcHRzLnNlcmlhbGl6ZSA9PT0gdW5kZWZpbmVkKSBvcHRzLnNlcmlhbGl6ZSA9IHN0YWJsZVN0cmluZ2lmeTtcbiAgdGhpcy5fbWV0YU9wdHMgPSBnZXRNZXRhU2NoZW1hT3B0aW9ucyh0aGlzKTtcblxuICBpZiAob3B0cy5mb3JtYXRzKSBhZGRJbml0aWFsRm9ybWF0cyh0aGlzKTtcbiAgaWYgKG9wdHMua2V5d29yZHMpIGFkZEluaXRpYWxLZXl3b3Jkcyh0aGlzKTtcbiAgYWRkRGVmYXVsdE1ldGFTY2hlbWEodGhpcyk7XG4gIGlmICh0eXBlb2Ygb3B0cy5tZXRhID09ICdvYmplY3QnKSB0aGlzLmFkZE1ldGFTY2hlbWEob3B0cy5tZXRhKTtcbiAgaWYgKG9wdHMubnVsbGFibGUpIHRoaXMuYWRkS2V5d29yZCgnbnVsbGFibGUnLCB7bWV0YVNjaGVtYToge3R5cGU6ICdib29sZWFuJ319KTtcbiAgYWRkSW5pdGlhbFNjaGVtYXModGhpcyk7XG59XG5cblxuXG4vKipcbiAqIFZhbGlkYXRlIGRhdGEgdXNpbmcgc2NoZW1hXG4gKiBTY2hlbWEgd2lsbCBiZSBjb21waWxlZCBhbmQgY2FjaGVkICh1c2luZyBzZXJpYWxpemVkIEpTT04gYXMga2V5LiBbZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnldKGh0dHBzOi8vZ2l0aHViLmNvbS9lcG9iZXJlemtpbi9mYXN0LWpzb24tc3RhYmxlLXN0cmluZ2lmeSkgaXMgdXNlZCB0byBzZXJpYWxpemUuXG4gKiBAdGhpcyAgIEFqdlxuICogQHBhcmFtICB7U3RyaW5nfE9iamVjdH0gc2NoZW1hS2V5UmVmIGtleSwgcmVmIG9yIHNjaGVtYSBvYmplY3RcbiAqIEBwYXJhbSAge0FueX0gZGF0YSB0byBiZSB2YWxpZGF0ZWRcbiAqIEByZXR1cm4ge0Jvb2xlYW59IHZhbGlkYXRpb24gcmVzdWx0LiBFcnJvcnMgZnJvbSB0aGUgbGFzdCB2YWxpZGF0aW9uIHdpbGwgYmUgYXZhaWxhYmxlIGluIGBhanYuZXJyb3JzYCAoYW5kIGFsc28gaW4gY29tcGlsZWQgc2NoZW1hOiBgc2NoZW1hLmVycm9yc2ApLlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZShzY2hlbWFLZXlSZWYsIGRhdGEpIHtcbiAgdmFyIHY7XG4gIGlmICh0eXBlb2Ygc2NoZW1hS2V5UmVmID09ICdzdHJpbmcnKSB7XG4gICAgdiA9IHRoaXMuZ2V0U2NoZW1hKHNjaGVtYUtleVJlZik7XG4gICAgaWYgKCF2KSB0aHJvdyBuZXcgRXJyb3IoJ25vIHNjaGVtYSB3aXRoIGtleSBvciByZWYgXCInICsgc2NoZW1hS2V5UmVmICsgJ1wiJyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHNjaGVtYU9iaiA9IHRoaXMuX2FkZFNjaGVtYShzY2hlbWFLZXlSZWYpO1xuICAgIHYgPSBzY2hlbWFPYmoudmFsaWRhdGUgfHwgdGhpcy5fY29tcGlsZShzY2hlbWFPYmopO1xuICB9XG5cbiAgdmFyIHZhbGlkID0gdihkYXRhKTtcbiAgaWYgKHYuJGFzeW5jICE9PSB0cnVlKSB0aGlzLmVycm9ycyA9IHYuZXJyb3JzO1xuICByZXR1cm4gdmFsaWQ7XG59XG5cblxuLyoqXG4gKiBDcmVhdGUgdmFsaWRhdGluZyBmdW5jdGlvbiBmb3IgcGFzc2VkIHNjaGVtYS5cbiAqIEB0aGlzICAgQWp2XG4gKiBAcGFyYW0gIHtPYmplY3R9IHNjaGVtYSBzY2hlbWEgb2JqZWN0XG4gKiBAcGFyYW0gIHtCb29sZWFufSBfbWV0YSB0cnVlIGlmIHNjaGVtYSBpcyBhIG1ldGEtc2NoZW1hLiBVc2VkIGludGVybmFsbHkgdG8gY29tcGlsZSBtZXRhIHNjaGVtYXMgb2YgY3VzdG9tIGtleXdvcmRzLlxuICogQHJldHVybiB7RnVuY3Rpb259IHZhbGlkYXRpbmcgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gY29tcGlsZShzY2hlbWEsIF9tZXRhKSB7XG4gIHZhciBzY2hlbWFPYmogPSB0aGlzLl9hZGRTY2hlbWEoc2NoZW1hLCB1bmRlZmluZWQsIF9tZXRhKTtcbiAgcmV0dXJuIHNjaGVtYU9iai52YWxpZGF0ZSB8fCB0aGlzLl9jb21waWxlKHNjaGVtYU9iaik7XG59XG5cblxuLyoqXG4gKiBBZGRzIHNjaGVtYSB0byB0aGUgaW5zdGFuY2UuXG4gKiBAdGhpcyAgIEFqdlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IHNjaGVtYSBzY2hlbWEgb3IgYXJyYXkgb2Ygc2NoZW1hcy4gSWYgYXJyYXkgaXMgcGFzc2VkLCBga2V5YCBhbmQgb3RoZXIgcGFyYW1ldGVycyB3aWxsIGJlIGlnbm9yZWQuXG4gKiBAcGFyYW0ge1N0cmluZ30ga2V5IE9wdGlvbmFsIHNjaGVtYSBrZXkuIENhbiBiZSBwYXNzZWQgdG8gYHZhbGlkYXRlYCBtZXRob2QgaW5zdGVhZCBvZiBzY2hlbWEgb2JqZWN0IG9yIGlkL3JlZi4gT25lIHNjaGVtYSBwZXIgaW5zdGFuY2UgY2FuIGhhdmUgZW1wdHkgYGlkYCBhbmQgYGtleWAuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IF9za2lwVmFsaWRhdGlvbiB0cnVlIHRvIHNraXAgc2NoZW1hIHZhbGlkYXRpb24uIFVzZWQgaW50ZXJuYWxseSwgb3B0aW9uIHZhbGlkYXRlU2NoZW1hIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IF9tZXRhIHRydWUgaWYgc2NoZW1hIGlzIGEgbWV0YS1zY2hlbWEuIFVzZWQgaW50ZXJuYWxseSwgYWRkTWV0YVNjaGVtYSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLlxuICogQHJldHVybiB7QWp2fSB0aGlzIGZvciBtZXRob2QgY2hhaW5pbmdcbiAqL1xuZnVuY3Rpb24gYWRkU2NoZW1hKHNjaGVtYSwga2V5LCBfc2tpcFZhbGlkYXRpb24sIF9tZXRhKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYSkpe1xuICAgIGZvciAodmFyIGk9MDsgaTxzY2hlbWEubGVuZ3RoOyBpKyspIHRoaXMuYWRkU2NoZW1hKHNjaGVtYVtpXSwgdW5kZWZpbmVkLCBfc2tpcFZhbGlkYXRpb24sIF9tZXRhKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICB2YXIgaWQgPSB0aGlzLl9nZXRJZChzY2hlbWEpO1xuICBpZiAoaWQgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgaWQgIT0gJ3N0cmluZycpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdzY2hlbWEgaWQgbXVzdCBiZSBzdHJpbmcnKTtcbiAga2V5ID0gcmVzb2x2ZS5ub3JtYWxpemVJZChrZXkgfHwgaWQpO1xuICBjaGVja1VuaXF1ZSh0aGlzLCBrZXkpO1xuICB0aGlzLl9zY2hlbWFzW2tleV0gPSB0aGlzLl9hZGRTY2hlbWEoc2NoZW1hLCBfc2tpcFZhbGlkYXRpb24sIF9tZXRhLCB0cnVlKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cblxuLyoqXG4gKiBBZGQgc2NoZW1hIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHZhbGlkYXRlIG90aGVyIHNjaGVtYXNcbiAqIG9wdGlvbnMgaW4gTUVUQV9JR05PUkVfT1BUSU9OUyBhcmUgYWx3YXkgc2V0IHRvIGZhbHNlXG4gKiBAdGhpcyAgIEFqdlxuICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYSBzY2hlbWEgb2JqZWN0XG4gKiBAcGFyYW0ge1N0cmluZ30ga2V5IG9wdGlvbmFsIHNjaGVtYSBrZXlcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gc2tpcFZhbGlkYXRpb24gdHJ1ZSB0byBza2lwIHNjaGVtYSB2YWxpZGF0aW9uLCBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSB2YWxpZGF0ZVNjaGVtYSBvcHRpb24gZm9yIG1ldGEtc2NoZW1hXG4gKiBAcmV0dXJuIHtBanZ9IHRoaXMgZm9yIG1ldGhvZCBjaGFpbmluZ1xuICovXG5mdW5jdGlvbiBhZGRNZXRhU2NoZW1hKHNjaGVtYSwga2V5LCBza2lwVmFsaWRhdGlvbikge1xuICB0aGlzLmFkZFNjaGVtYShzY2hlbWEsIGtleSwgc2tpcFZhbGlkYXRpb24sIHRydWUpO1xuICByZXR1cm4gdGhpcztcbn1cblxuXG4vKipcbiAqIFZhbGlkYXRlIHNjaGVtYVxuICogQHRoaXMgICBBanZcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWEgc2NoZW1hIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHRocm93T3JMb2dFcnJvciBwYXNzIHRydWUgdG8gdGhyb3cgKG9yIGxvZykgYW4gZXJyb3IgaWYgaW52YWxpZFxuICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSBpZiBzY2hlbWEgaXMgdmFsaWRcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVTY2hlbWEoc2NoZW1hLCB0aHJvd09yTG9nRXJyb3IpIHtcbiAgdmFyICRzY2hlbWEgPSBzY2hlbWEuJHNjaGVtYTtcbiAgaWYgKCRzY2hlbWEgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgJHNjaGVtYSAhPSAnc3RyaW5nJylcbiAgICB0aHJvdyBuZXcgRXJyb3IoJyRzY2hlbWEgbXVzdCBiZSBhIHN0cmluZycpO1xuICAkc2NoZW1hID0gJHNjaGVtYSB8fCB0aGlzLl9vcHRzLmRlZmF1bHRNZXRhIHx8IGRlZmF1bHRNZXRhKHRoaXMpO1xuICBpZiAoISRzY2hlbWEpIHtcbiAgICB0aGlzLmxvZ2dlci53YXJuKCdtZXRhLXNjaGVtYSBub3QgYXZhaWxhYmxlJyk7XG4gICAgdGhpcy5lcnJvcnMgPSBudWxsO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHZhciB2YWxpZCA9IHRoaXMudmFsaWRhdGUoJHNjaGVtYSwgc2NoZW1hKTtcbiAgaWYgKCF2YWxpZCAmJiB0aHJvd09yTG9nRXJyb3IpIHtcbiAgICB2YXIgbWVzc2FnZSA9ICdzY2hlbWEgaXMgaW52YWxpZDogJyArIHRoaXMuZXJyb3JzVGV4dCgpO1xuICAgIGlmICh0aGlzLl9vcHRzLnZhbGlkYXRlU2NoZW1hID09ICdsb2cnKSB0aGlzLmxvZ2dlci5lcnJvcihtZXNzYWdlKTtcbiAgICBlbHNlIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgfVxuICByZXR1cm4gdmFsaWQ7XG59XG5cblxuZnVuY3Rpb24gZGVmYXVsdE1ldGEoc2VsZikge1xuICB2YXIgbWV0YSA9IHNlbGYuX29wdHMubWV0YTtcbiAgc2VsZi5fb3B0cy5kZWZhdWx0TWV0YSA9IHR5cGVvZiBtZXRhID09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLl9nZXRJZChtZXRhKSB8fCBtZXRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmdldFNjaGVtYShNRVRBX1NDSEVNQV9JRClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTUVUQV9TQ0hFTUFfSURcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICByZXR1cm4gc2VsZi5fb3B0cy5kZWZhdWx0TWV0YTtcbn1cblxuXG4vKipcbiAqIEdldCBjb21waWxlZCBzY2hlbWEgZnJvbSB0aGUgaW5zdGFuY2UgYnkgYGtleWAgb3IgYHJlZmAuXG4gKiBAdGhpcyAgIEFqdlxuICogQHBhcmFtICB7U3RyaW5nfSBrZXlSZWYgYGtleWAgdGhhdCB3YXMgcGFzc2VkIHRvIGBhZGRTY2hlbWFgIG9yIGZ1bGwgc2NoZW1hIHJlZmVyZW5jZSAoYHNjaGVtYS5pZGAgb3IgcmVzb2x2ZWQgaWQpLlxuICogQHJldHVybiB7RnVuY3Rpb259IHNjaGVtYSB2YWxpZGF0aW5nIGZ1bmN0aW9uICh3aXRoIHByb3BlcnR5IGBzY2hlbWFgKS5cbiAqL1xuZnVuY3Rpb24gZ2V0U2NoZW1hKGtleVJlZikge1xuICB2YXIgc2NoZW1hT2JqID0gX2dldFNjaGVtYU9iaih0aGlzLCBrZXlSZWYpO1xuICBzd2l0Y2ggKHR5cGVvZiBzY2hlbWFPYmopIHtcbiAgICBjYXNlICdvYmplY3QnOiByZXR1cm4gc2NoZW1hT2JqLnZhbGlkYXRlIHx8IHRoaXMuX2NvbXBpbGUoc2NoZW1hT2JqKTtcbiAgICBjYXNlICdzdHJpbmcnOiByZXR1cm4gdGhpcy5nZXRTY2hlbWEoc2NoZW1hT2JqKTtcbiAgICBjYXNlICd1bmRlZmluZWQnOiByZXR1cm4gX2dldFNjaGVtYUZyYWdtZW50KHRoaXMsIGtleVJlZik7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBfZ2V0U2NoZW1hRnJhZ21lbnQoc2VsZiwgcmVmKSB7XG4gIHZhciByZXMgPSByZXNvbHZlLnNjaGVtYS5jYWxsKHNlbGYsIHsgc2NoZW1hOiB7fSB9LCByZWYpO1xuICBpZiAocmVzKSB7XG4gICAgdmFyIHNjaGVtYSA9IHJlcy5zY2hlbWFcbiAgICAgICwgcm9vdCA9IHJlcy5yb290XG4gICAgICAsIGJhc2VJZCA9IHJlcy5iYXNlSWQ7XG4gICAgdmFyIHYgPSBjb21waWxlU2NoZW1hLmNhbGwoc2VsZiwgc2NoZW1hLCByb290LCB1bmRlZmluZWQsIGJhc2VJZCk7XG4gICAgc2VsZi5fZnJhZ21lbnRzW3JlZl0gPSBuZXcgU2NoZW1hT2JqZWN0KHtcbiAgICAgIHJlZjogcmVmLFxuICAgICAgZnJhZ21lbnQ6IHRydWUsXG4gICAgICBzY2hlbWE6IHNjaGVtYSxcbiAgICAgIHJvb3Q6IHJvb3QsXG4gICAgICBiYXNlSWQ6IGJhc2VJZCxcbiAgICAgIHZhbGlkYXRlOiB2XG4gICAgfSk7XG4gICAgcmV0dXJuIHY7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBfZ2V0U2NoZW1hT2JqKHNlbGYsIGtleVJlZikge1xuICBrZXlSZWYgPSByZXNvbHZlLm5vcm1hbGl6ZUlkKGtleVJlZik7XG4gIHJldHVybiBzZWxmLl9zY2hlbWFzW2tleVJlZl0gfHwgc2VsZi5fcmVmc1trZXlSZWZdIHx8IHNlbGYuX2ZyYWdtZW50c1trZXlSZWZdO1xufVxuXG5cbi8qKlxuICogUmVtb3ZlIGNhY2hlZCBzY2hlbWEocykuXG4gKiBJZiBubyBwYXJhbWV0ZXIgaXMgcGFzc2VkIGFsbCBzY2hlbWFzIGJ1dCBtZXRhLXNjaGVtYXMgYXJlIHJlbW92ZWQuXG4gKiBJZiBSZWdFeHAgaXMgcGFzc2VkIGFsbCBzY2hlbWFzIHdpdGgga2V5L2lkIG1hdGNoaW5nIHBhdHRlcm4gYnV0IG1ldGEtc2NoZW1hcyBhcmUgcmVtb3ZlZC5cbiAqIEV2ZW4gaWYgc2NoZW1hIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgc2NoZW1hcyBpdCBzdGlsbCBjYW4gYmUgcmVtb3ZlZCBhcyBvdGhlciBzY2hlbWFzIGhhdmUgbG9jYWwgcmVmZXJlbmNlcy5cbiAqIEB0aGlzICAgQWp2XG4gKiBAcGFyYW0gIHtTdHJpbmd8T2JqZWN0fFJlZ0V4cH0gc2NoZW1hS2V5UmVmIGtleSwgcmVmLCBwYXR0ZXJuIHRvIG1hdGNoIGtleS9yZWYgb3Igc2NoZW1hIG9iamVjdFxuICogQHJldHVybiB7QWp2fSB0aGlzIGZvciBtZXRob2QgY2hhaW5pbmdcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlU2NoZW1hKHNjaGVtYUtleVJlZikge1xuICBpZiAoc2NoZW1hS2V5UmVmIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgX3JlbW92ZUFsbFNjaGVtYXModGhpcywgdGhpcy5fc2NoZW1hcywgc2NoZW1hS2V5UmVmKTtcbiAgICBfcmVtb3ZlQWxsU2NoZW1hcyh0aGlzLCB0aGlzLl9yZWZzLCBzY2hlbWFLZXlSZWYpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIHN3aXRjaCAodHlwZW9mIHNjaGVtYUtleVJlZikge1xuICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICBfcmVtb3ZlQWxsU2NoZW1hcyh0aGlzLCB0aGlzLl9zY2hlbWFzKTtcbiAgICAgIF9yZW1vdmVBbGxTY2hlbWFzKHRoaXMsIHRoaXMuX3JlZnMpO1xuICAgICAgdGhpcy5fY2FjaGUuY2xlYXIoKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICB2YXIgc2NoZW1hT2JqID0gX2dldFNjaGVtYU9iaih0aGlzLCBzY2hlbWFLZXlSZWYpO1xuICAgICAgaWYgKHNjaGVtYU9iaikgdGhpcy5fY2FjaGUuZGVsKHNjaGVtYU9iai5jYWNoZUtleSk7XG4gICAgICBkZWxldGUgdGhpcy5fc2NoZW1hc1tzY2hlbWFLZXlSZWZdO1xuICAgICAgZGVsZXRlIHRoaXMuX3JlZnNbc2NoZW1hS2V5UmVmXTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICB2YXIgc2VyaWFsaXplID0gdGhpcy5fb3B0cy5zZXJpYWxpemU7XG4gICAgICB2YXIgY2FjaGVLZXkgPSBzZXJpYWxpemUgPyBzZXJpYWxpemUoc2NoZW1hS2V5UmVmKSA6IHNjaGVtYUtleVJlZjtcbiAgICAgIHRoaXMuX2NhY2hlLmRlbChjYWNoZUtleSk7XG4gICAgICB2YXIgaWQgPSB0aGlzLl9nZXRJZChzY2hlbWFLZXlSZWYpO1xuICAgICAgaWYgKGlkKSB7XG4gICAgICAgIGlkID0gcmVzb2x2ZS5ub3JtYWxpemVJZChpZCk7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9zY2hlbWFzW2lkXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3JlZnNbaWRdO1xuICAgICAgfVxuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5cbmZ1bmN0aW9uIF9yZW1vdmVBbGxTY2hlbWFzKHNlbGYsIHNjaGVtYXMsIHJlZ2V4KSB7XG4gIGZvciAodmFyIGtleVJlZiBpbiBzY2hlbWFzKSB7XG4gICAgdmFyIHNjaGVtYU9iaiA9IHNjaGVtYXNba2V5UmVmXTtcbiAgICBpZiAoIXNjaGVtYU9iai5tZXRhICYmICghcmVnZXggfHwgcmVnZXgudGVzdChrZXlSZWYpKSkge1xuICAgICAgc2VsZi5fY2FjaGUuZGVsKHNjaGVtYU9iai5jYWNoZUtleSk7XG4gICAgICBkZWxldGUgc2NoZW1hc1trZXlSZWZdO1xuICAgIH1cbiAgfVxufVxuXG5cbi8qIEB0aGlzICAgQWp2ICovXG5mdW5jdGlvbiBfYWRkU2NoZW1hKHNjaGVtYSwgc2tpcFZhbGlkYXRpb24sIG1ldGEsIHNob3VsZEFkZFNjaGVtYSkge1xuICBpZiAodHlwZW9mIHNjaGVtYSAhPSAnb2JqZWN0JyAmJiB0eXBlb2Ygc2NoZW1hICE9ICdib29sZWFuJylcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NjaGVtYSBzaG91bGQgYmUgb2JqZWN0IG9yIGJvb2xlYW4nKTtcbiAgdmFyIHNlcmlhbGl6ZSA9IHRoaXMuX29wdHMuc2VyaWFsaXplO1xuICB2YXIgY2FjaGVLZXkgPSBzZXJpYWxpemUgPyBzZXJpYWxpemUoc2NoZW1hKSA6IHNjaGVtYTtcbiAgdmFyIGNhY2hlZCA9IHRoaXMuX2NhY2hlLmdldChjYWNoZUtleSk7XG4gIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQ7XG5cbiAgc2hvdWxkQWRkU2NoZW1hID0gc2hvdWxkQWRkU2NoZW1hIHx8IHRoaXMuX29wdHMuYWRkVXNlZFNjaGVtYSAhPT0gZmFsc2U7XG5cbiAgdmFyIGlkID0gcmVzb2x2ZS5ub3JtYWxpemVJZCh0aGlzLl9nZXRJZChzY2hlbWEpKTtcbiAgaWYgKGlkICYmIHNob3VsZEFkZFNjaGVtYSkgY2hlY2tVbmlxdWUodGhpcywgaWQpO1xuXG4gIHZhciB3aWxsVmFsaWRhdGUgPSB0aGlzLl9vcHRzLnZhbGlkYXRlU2NoZW1hICE9PSBmYWxzZSAmJiAhc2tpcFZhbGlkYXRpb247XG4gIHZhciByZWN1cnNpdmVNZXRhO1xuICBpZiAod2lsbFZhbGlkYXRlICYmICEocmVjdXJzaXZlTWV0YSA9IGlkICYmIGlkID09IHJlc29sdmUubm9ybWFsaXplSWQoc2NoZW1hLiRzY2hlbWEpKSlcbiAgICB0aGlzLnZhbGlkYXRlU2NoZW1hKHNjaGVtYSwgdHJ1ZSk7XG5cbiAgdmFyIGxvY2FsUmVmcyA9IHJlc29sdmUuaWRzLmNhbGwodGhpcywgc2NoZW1hKTtcblxuICB2YXIgc2NoZW1hT2JqID0gbmV3IFNjaGVtYU9iamVjdCh7XG4gICAgaWQ6IGlkLFxuICAgIHNjaGVtYTogc2NoZW1hLFxuICAgIGxvY2FsUmVmczogbG9jYWxSZWZzLFxuICAgIGNhY2hlS2V5OiBjYWNoZUtleSxcbiAgICBtZXRhOiBtZXRhXG4gIH0pO1xuXG4gIGlmIChpZFswXSAhPSAnIycgJiYgc2hvdWxkQWRkU2NoZW1hKSB0aGlzLl9yZWZzW2lkXSA9IHNjaGVtYU9iajtcbiAgdGhpcy5fY2FjaGUucHV0KGNhY2hlS2V5LCBzY2hlbWFPYmopO1xuXG4gIGlmICh3aWxsVmFsaWRhdGUgJiYgcmVjdXJzaXZlTWV0YSkgdGhpcy52YWxpZGF0ZVNjaGVtYShzY2hlbWEsIHRydWUpO1xuXG4gIHJldHVybiBzY2hlbWFPYmo7XG59XG5cblxuLyogQHRoaXMgICBBanYgKi9cbmZ1bmN0aW9uIF9jb21waWxlKHNjaGVtYU9iaiwgcm9vdCkge1xuICBpZiAoc2NoZW1hT2JqLmNvbXBpbGluZykge1xuICAgIHNjaGVtYU9iai52YWxpZGF0ZSA9IGNhbGxWYWxpZGF0ZTtcbiAgICBjYWxsVmFsaWRhdGUuc2NoZW1hID0gc2NoZW1hT2JqLnNjaGVtYTtcbiAgICBjYWxsVmFsaWRhdGUuZXJyb3JzID0gbnVsbDtcbiAgICBjYWxsVmFsaWRhdGUucm9vdCA9IHJvb3QgPyByb290IDogY2FsbFZhbGlkYXRlO1xuICAgIGlmIChzY2hlbWFPYmouc2NoZW1hLiRhc3luYyA9PT0gdHJ1ZSlcbiAgICAgIGNhbGxWYWxpZGF0ZS4kYXN5bmMgPSB0cnVlO1xuICAgIHJldHVybiBjYWxsVmFsaWRhdGU7XG4gIH1cbiAgc2NoZW1hT2JqLmNvbXBpbGluZyA9IHRydWU7XG5cbiAgdmFyIGN1cnJlbnRPcHRzO1xuICBpZiAoc2NoZW1hT2JqLm1ldGEpIHtcbiAgICBjdXJyZW50T3B0cyA9IHRoaXMuX29wdHM7XG4gICAgdGhpcy5fb3B0cyA9IHRoaXMuX21ldGFPcHRzO1xuICB9XG5cbiAgdmFyIHY7XG4gIHRyeSB7IHYgPSBjb21waWxlU2NoZW1hLmNhbGwodGhpcywgc2NoZW1hT2JqLnNjaGVtYSwgcm9vdCwgc2NoZW1hT2JqLmxvY2FsUmVmcyk7IH1cbiAgY2F0Y2goZSkge1xuICAgIGRlbGV0ZSBzY2hlbWFPYmoudmFsaWRhdGU7XG4gICAgdGhyb3cgZTtcbiAgfVxuICBmaW5hbGx5IHtcbiAgICBzY2hlbWFPYmouY29tcGlsaW5nID0gZmFsc2U7XG4gICAgaWYgKHNjaGVtYU9iai5tZXRhKSB0aGlzLl9vcHRzID0gY3VycmVudE9wdHM7XG4gIH1cblxuICBzY2hlbWFPYmoudmFsaWRhdGUgPSB2O1xuICBzY2hlbWFPYmoucmVmcyA9IHYucmVmcztcbiAgc2NoZW1hT2JqLnJlZlZhbCA9IHYucmVmVmFsO1xuICBzY2hlbWFPYmoucm9vdCA9IHYucm9vdDtcbiAgcmV0dXJuIHY7XG5cblxuICAvKiBAdGhpcyAgIHsqfSAtIGN1c3RvbSBjb250ZXh0LCBzZWUgcGFzc0NvbnRleHQgb3B0aW9uICovXG4gIGZ1bmN0aW9uIGNhbGxWYWxpZGF0ZSgpIHtcbiAgICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlICovXG4gICAgdmFyIF92YWxpZGF0ZSA9IHNjaGVtYU9iai52YWxpZGF0ZTtcbiAgICB2YXIgcmVzdWx0ID0gX3ZhbGlkYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgY2FsbFZhbGlkYXRlLmVycm9ycyA9IF92YWxpZGF0ZS5lcnJvcnM7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIGNob29zZUdldElkKG9wdHMpIHtcbiAgc3dpdGNoIChvcHRzLnNjaGVtYUlkKSB7XG4gICAgY2FzZSAnYXV0byc6IHJldHVybiBfZ2V0JElkT3JJZDtcbiAgICBjYXNlICdpZCc6IHJldHVybiBfZ2V0SWQ7XG4gICAgZGVmYXVsdDogcmV0dXJuIF9nZXQkSWQ7XG4gIH1cbn1cblxuLyogQHRoaXMgICBBanYgKi9cbmZ1bmN0aW9uIF9nZXRJZChzY2hlbWEpIHtcbiAgaWYgKHNjaGVtYS4kaWQpIHRoaXMubG9nZ2VyLndhcm4oJ3NjaGVtYSAkaWQgaWdub3JlZCcsIHNjaGVtYS4kaWQpO1xuICByZXR1cm4gc2NoZW1hLmlkO1xufVxuXG4vKiBAdGhpcyAgIEFqdiAqL1xuZnVuY3Rpb24gX2dldCRJZChzY2hlbWEpIHtcbiAgaWYgKHNjaGVtYS5pZCkgdGhpcy5sb2dnZXIud2Fybignc2NoZW1hIGlkIGlnbm9yZWQnLCBzY2hlbWEuaWQpO1xuICByZXR1cm4gc2NoZW1hLiRpZDtcbn1cblxuXG5mdW5jdGlvbiBfZ2V0JElkT3JJZChzY2hlbWEpIHtcbiAgaWYgKHNjaGVtYS4kaWQgJiYgc2NoZW1hLmlkICYmIHNjaGVtYS4kaWQgIT0gc2NoZW1hLmlkKVxuICAgIHRocm93IG5ldyBFcnJvcignc2NoZW1hICRpZCBpcyBkaWZmZXJlbnQgZnJvbSBpZCcpO1xuICByZXR1cm4gc2NoZW1hLiRpZCB8fCBzY2hlbWEuaWQ7XG59XG5cblxuLyoqXG4gKiBDb252ZXJ0IGFycmF5IG9mIGVycm9yIG1lc3NhZ2Ugb2JqZWN0cyB0byBzdHJpbmdcbiAqIEB0aGlzICAgQWp2XG4gKiBAcGFyYW0gIHtBcnJheTxPYmplY3Q+fSBlcnJvcnMgb3B0aW9uYWwgYXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvcnMsIGlmIG5vdCBwYXNzZWQgZXJyb3JzIGZyb20gdGhlIGluc3RhbmNlIGFyZSB1c2VkLlxuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zIG9wdGlvbmFsIG9wdGlvbnMgd2l0aCBwcm9wZXJ0aWVzIGBzZXBhcmF0b3JgIGFuZCBgZGF0YVZhcmAuXG4gKiBAcmV0dXJuIHtTdHJpbmd9IGh1bWFuIHJlYWRhYmxlIHN0cmluZyB3aXRoIGFsbCBlcnJvcnMgZGVzY3JpcHRpb25zXG4gKi9cbmZ1bmN0aW9uIGVycm9yc1RleHQoZXJyb3JzLCBvcHRpb25zKSB7XG4gIGVycm9ycyA9IGVycm9ycyB8fCB0aGlzLmVycm9ycztcbiAgaWYgKCFlcnJvcnMpIHJldHVybiAnTm8gZXJyb3JzJztcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIHZhciBzZXBhcmF0b3IgPSBvcHRpb25zLnNlcGFyYXRvciA9PT0gdW5kZWZpbmVkID8gJywgJyA6IG9wdGlvbnMuc2VwYXJhdG9yO1xuICB2YXIgZGF0YVZhciA9IG9wdGlvbnMuZGF0YVZhciA9PT0gdW5kZWZpbmVkID8gJ2RhdGEnIDogb3B0aW9ucy5kYXRhVmFyO1xuXG4gIHZhciB0ZXh0ID0gJyc7XG4gIGZvciAodmFyIGk9MDsgaTxlcnJvcnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZSA9IGVycm9yc1tpXTtcbiAgICBpZiAoZSkgdGV4dCArPSBkYXRhVmFyICsgZS5kYXRhUGF0aCArICcgJyArIGUubWVzc2FnZSArIHNlcGFyYXRvcjtcbiAgfVxuICByZXR1cm4gdGV4dC5zbGljZSgwLCAtc2VwYXJhdG9yLmxlbmd0aCk7XG59XG5cblxuLyoqXG4gKiBBZGQgY3VzdG9tIGZvcm1hdFxuICogQHRoaXMgICBBanZcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIGZvcm1hdCBuYW1lXG4gKiBAcGFyYW0ge1N0cmluZ3xSZWdFeHB8RnVuY3Rpb259IGZvcm1hdCBzdHJpbmcgaXMgY29udmVydGVkIHRvIFJlZ0V4cDsgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBib29sZWFuICh0cnVlIHdoZW4gdmFsaWQpXG4gKiBAcmV0dXJuIHtBanZ9IHRoaXMgZm9yIG1ldGhvZCBjaGFpbmluZ1xuICovXG5mdW5jdGlvbiBhZGRGb3JtYXQobmFtZSwgZm9ybWF0KSB7XG4gIGlmICh0eXBlb2YgZm9ybWF0ID09ICdzdHJpbmcnKSBmb3JtYXQgPSBuZXcgUmVnRXhwKGZvcm1hdCk7XG4gIHRoaXMuX2Zvcm1hdHNbbmFtZV0gPSBmb3JtYXQ7XG4gIHJldHVybiB0aGlzO1xufVxuXG5cbmZ1bmN0aW9uIGFkZERlZmF1bHRNZXRhU2NoZW1hKHNlbGYpIHtcbiAgdmFyICRkYXRhU2NoZW1hO1xuICBpZiAoc2VsZi5fb3B0cy4kZGF0YSkge1xuICAgICRkYXRhU2NoZW1hID0gcmVxdWlyZSgnLi9yZWZzL2RhdGEuanNvbicpO1xuICAgIHNlbGYuYWRkTWV0YVNjaGVtYSgkZGF0YVNjaGVtYSwgJGRhdGFTY2hlbWEuJGlkLCB0cnVlKTtcbiAgfVxuICBpZiAoc2VsZi5fb3B0cy5tZXRhID09PSBmYWxzZSkgcmV0dXJuO1xuICB2YXIgbWV0YVNjaGVtYSA9IHJlcXVpcmUoJy4vcmVmcy9qc29uLXNjaGVtYS1kcmFmdC0wNy5qc29uJyk7XG4gIGlmIChzZWxmLl9vcHRzLiRkYXRhKSBtZXRhU2NoZW1hID0gJGRhdGFNZXRhU2NoZW1hKG1ldGFTY2hlbWEsIE1FVEFfU1VQUE9SVF9EQVRBKTtcbiAgc2VsZi5hZGRNZXRhU2NoZW1hKG1ldGFTY2hlbWEsIE1FVEFfU0NIRU1BX0lELCB0cnVlKTtcbiAgc2VsZi5fcmVmc1snaHR0cDovL2pzb24tc2NoZW1hLm9yZy9zY2hlbWEnXSA9IE1FVEFfU0NIRU1BX0lEO1xufVxuXG5cbmZ1bmN0aW9uIGFkZEluaXRpYWxTY2hlbWFzKHNlbGYpIHtcbiAgdmFyIG9wdHNTY2hlbWFzID0gc2VsZi5fb3B0cy5zY2hlbWFzO1xuICBpZiAoIW9wdHNTY2hlbWFzKSByZXR1cm47XG4gIGlmIChBcnJheS5pc0FycmF5KG9wdHNTY2hlbWFzKSkgc2VsZi5hZGRTY2hlbWEob3B0c1NjaGVtYXMpO1xuICBlbHNlIGZvciAodmFyIGtleSBpbiBvcHRzU2NoZW1hcykgc2VsZi5hZGRTY2hlbWEob3B0c1NjaGVtYXNba2V5XSwga2V5KTtcbn1cblxuXG5mdW5jdGlvbiBhZGRJbml0aWFsRm9ybWF0cyhzZWxmKSB7XG4gIGZvciAodmFyIG5hbWUgaW4gc2VsZi5fb3B0cy5mb3JtYXRzKSB7XG4gICAgdmFyIGZvcm1hdCA9IHNlbGYuX29wdHMuZm9ybWF0c1tuYW1lXTtcbiAgICBzZWxmLmFkZEZvcm1hdChuYW1lLCBmb3JtYXQpO1xuICB9XG59XG5cblxuZnVuY3Rpb24gYWRkSW5pdGlhbEtleXdvcmRzKHNlbGYpIHtcbiAgZm9yICh2YXIgbmFtZSBpbiBzZWxmLl9vcHRzLmtleXdvcmRzKSB7XG4gICAgdmFyIGtleXdvcmQgPSBzZWxmLl9vcHRzLmtleXdvcmRzW25hbWVdO1xuICAgIHNlbGYuYWRkS2V5d29yZChuYW1lLCBrZXl3b3JkKTtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIGNoZWNrVW5pcXVlKHNlbGYsIGlkKSB7XG4gIGlmIChzZWxmLl9zY2hlbWFzW2lkXSB8fCBzZWxmLl9yZWZzW2lkXSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NjaGVtYSB3aXRoIGtleSBvciBpZCBcIicgKyBpZCArICdcIiBhbHJlYWR5IGV4aXN0cycpO1xufVxuXG5cbmZ1bmN0aW9uIGdldE1ldGFTY2hlbWFPcHRpb25zKHNlbGYpIHtcbiAgdmFyIG1ldGFPcHRzID0gdXRpbC5jb3B5KHNlbGYuX29wdHMpO1xuICBmb3IgKHZhciBpPTA7IGk8TUVUQV9JR05PUkVfT1BUSU9OUy5sZW5ndGg7IGkrKylcbiAgICBkZWxldGUgbWV0YU9wdHNbTUVUQV9JR05PUkVfT1BUSU9OU1tpXV07XG4gIHJldHVybiBtZXRhT3B0cztcbn1cblxuXG5mdW5jdGlvbiBzZXRMb2dnZXIoc2VsZikge1xuICB2YXIgbG9nZ2VyID0gc2VsZi5fb3B0cy5sb2dnZXI7XG4gIGlmIChsb2dnZXIgPT09IGZhbHNlKSB7XG4gICAgc2VsZi5sb2dnZXIgPSB7bG9nOiBub29wLCB3YXJuOiBub29wLCBlcnJvcjogbm9vcH07XG4gIH0gZWxzZSB7XG4gICAgaWYgKGxvZ2dlciA9PT0gdW5kZWZpbmVkKSBsb2dnZXIgPSBjb25zb2xlO1xuICAgIGlmICghKHR5cGVvZiBsb2dnZXIgPT0gJ29iamVjdCcgJiYgbG9nZ2VyLmxvZyAmJiBsb2dnZXIud2FybiAmJiBsb2dnZXIuZXJyb3IpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdsb2dnZXIgbXVzdCBpbXBsZW1lbnQgbG9nLCB3YXJuIGFuZCBlcnJvciBtZXRob2RzJyk7XG4gICAgc2VsZi5sb2dnZXIgPSBsb2dnZXI7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBub29wKCkge31cbiIsImltcG9ydCBBanYgZnJvbSBcImFqdlwiO1xuLyogZ2xvYmFsIGdsb2JhbFRoaXMgKi9cbi8qIGVzbGludCBuby1yZXN0cmljdGVkLWdsb2JhbHM6IDEgKi9cbmZ1bmN0aW9uIHNjaGVtYSgpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIHRpbWVsaW5lOiB7ICRyZWY6IFwiIy9kZWZzL2Jsb2NrXCIgfSxcbiAgICAgIHRvdGFsRHVyYXRpb246IHsgdHlwZTogXCJudW1iZXJcIiwgbWluaW11bTogMCB9LFxuICAgICAgc3RhZ2dlcmluZ3M6IHsgdHlwZTogXCJhcnJheVwiLCBpdGVtczogeyAkcmVmOiBcIiMvZGVmcy9zdGFnZ2VyaW5nXCIgfSB9LFxuICAgICAgZW51bWVyYXRvcnM6IHsgdHlwZTogXCJhcnJheVwiLCBpdGVtczogeyAkcmVmOiBcIiMvZGVmcy9lbnVtZXJhdG9yXCIgfSB9LFxuICAgICAgbWV0YTogeyB0eXBlOiBcIm9iamVjdFwiIH1cbiAgICB9LFxuICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICBkZWZzOiB7XG4gICAgICBlbnVtZXJhdG9yOiB7XG4gICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBuYW1lOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICBmaWx0ZXI6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgIHN0ZXBTaXplOiB7IHR5cGU6IFwibnVtYmVyXCIgfSxcbiAgICAgICAgICB2YWx1ZXM6IHsgdHlwZTogXCJhcnJheVwiIH1cbiAgICAgICAgfSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICBvbmVPZjogW1xuICAgICAgICAgIHsgcmVxdWlyZWQ6IFtcIm5hbWVcIiwgXCJmaWx0ZXJcIiwgXCJzdGVwU2l6ZVwiXSB9LFxuICAgICAgICAgIHsgcmVxdWlyZWQ6IFtcIm5hbWVcIiwgXCJmaWx0ZXJcIiwgXCJ2YWx1ZXNcIl0gfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgc3RhZ2dlcmluZzoge1xuICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgbmFtZTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgYnk6IHtcbiAgICAgICAgICAgIG9uZU9mOiBbXG4gICAgICAgICAgICAgIHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICBpbml0aWFsOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgICAgICAgIGZpbmFsOiB7IHR5cGU6IFwic3RyaW5nXCIgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIG92ZXJsYXA6IHsgdHlwZTogXCJudW1iZXJcIiB9LFxuICAgICAgICAgIG9yZGVyOiB7IHR5cGU6IFwic3RyaW5nXCIsIGVudW06IFtcImFzY2VuZGluZ1wiLCBcImRlc2NlbmRpbmdcIl0gfSxcbiAgICAgICAgICBzdGFnZ2VyaW5nOiB7ICRyZWY6IFwiIy9kZWZzL3N1YlN0YWdnZXJpbmdcIiB9XG4gICAgICAgIH0sXG4gICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgb25lT2Y6IFt7IHJlcXVpcmVkOiBbXCJuYW1lXCIsIFwib3ZlcmxhcFwiLCBcImJ5XCJdIH1dXG4gICAgICB9LFxuICAgICAgc3ViU3RhZ2dlcmluZzoge1xuICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgbmFtZTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgYnk6IHsgb25lT2Y6IFt7IHR5cGU6IFwic3RyaW5nXCIgfSwgeyB0eXBlOiBcIm9iamVjdFwiIH1dIH0sXG4gICAgICAgICAgb3ZlcmxhcDogeyB0eXBlOiBcIm51bWJlclwiIH0sXG4gICAgICAgICAgb3JkZXI6IHsgdHlwZTogXCJzdHJpbmdcIiwgZW51bTogW1wiYXNjZW5kaW5nXCIsIFwiZGVzY2VuZGluZ1wiXSB9LFxuICAgICAgICAgIHN0YWdnZXJpbmc6IHsgJHJlZjogXCIjL2RlZnMvc3ViU3RhZ2dlcmluZ1wiIH1cbiAgICAgICAgfSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICBvbmVPZjogW3sgcmVxdWlyZWQ6IFtcIm92ZXJsYXBcIiwgXCJieVwiXSB9XVxuICAgICAgfSxcbiAgICAgIGJsb2NrOiB7XG4gICAgICAgIGFueU9mOiBbXG4gICAgICAgICAgeyAkcmVmOiBcIiMvZGVmcy9zeW5jXCIgfSxcbiAgICAgICAgICB7ICRyZWY6IFwiIy9kZWZzL2NvbmNhdFwiIH0sXG4gICAgICAgICAgeyAkcmVmOiBcIiMvZGVmcy9tYXJrU3RlcFwiIH0sXG4gICAgICAgICAgeyAkcmVmOiBcIiMvZGVmcy9heGlzU3RlcFwiIH0sXG4gICAgICAgICAgeyAkcmVmOiBcIiMvZGVmcy9sZWdlbmRTdGVwXCIgfSxcbiAgICAgICAgICB7ICRyZWY6IFwiIy9kZWZzL3BhdXNlU3RlcFwiIH0sXG4gICAgICAgICAgeyAkcmVmOiBcIiMvZGVmcy92aWV3U3RlcFwiIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIGNvbmNhdDoge1xuICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgY29uY2F0OiB7IHR5cGU6IFwiYXJyYXlcIiwgaXRlbXM6IHsgJHJlZjogXCIjL2RlZnMvYmxvY2tcIiB9IH0sXG4gICAgICAgICAgYXV0b1NjYWxlT3JkZXI6IHsgdHlwZTogXCJhcnJheVwiLCBpdGVtczogeyB0eXBlOiBcInN0cmluZ1wiIH0gfSxcbiAgICAgICAgICBlbnVtZXJhdG9yOiB7IHR5cGU6IFwic3RyaW5nXCIgfVxuICAgICAgICB9LFxuICAgICAgICByZXF1aXJlZDogW1wiY29uY2F0XCJdLFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcbiAgICAgIH0sXG4gICAgICBzeW5jOiB7XG4gICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBzeW5jOiB7IHR5cGU6IFwiYXJyYXlcIiwgaXRlbXM6IHsgJHJlZjogXCIjL2RlZnMvYmxvY2tcIiB9IH0sXG4gICAgICAgICAgYW5jaG9yOiB7IHR5cGU6IFwic3RyaW5nXCIsIGVudW06IFtcInN0YXJ0XCIsIFwiZW5kXCJdIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWlyZWQ6IFtcInN5bmNcIl0sXG4gICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIG1hcmtTdGVwOiB7XG4gICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBjb21wb25lbnQ6IHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7IG1hcms6IHsgdHlwZTogXCJzdHJpbmdcIiB9IH0sXG4gICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICByZXF1aXJlZDogW1wibWFya1wiXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgY2hhbmdlOiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgb25lT2Y6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgICAgICAgIGtleXM6IHsgdHlwZTogXCJhcnJheVwiLCBpdGVtczogeyB0eXBlOiBcInN0cmluZ1wiIH0gfSxcbiAgICAgICAgICAgICAgICAgICAgICBlbnRlcjogeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgICAgICAgICAgIGV4aXQ6IHsgdHlwZTogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICB1cGRhdGU6IHsgdHlwZTogXCJib29sZWFuXCIgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB7IHR5cGU6IFwiYXJyYXlcIiwgaXRlbXM6IHsgdHlwZTogXCJzdHJpbmdcIiB9IH0sXG4gICAgICAgICAgICAgICAgICB7IHR5cGU6IFwiYm9vbGVhblwiIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHNjYWxlOiB7XG4gICAgICAgICAgICAgICAgb25lT2Y6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHsgZGF0YTogeyB0eXBlOiBcImJvb2xlYW5cIiB9IH0sXG4gICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB7IHR5cGU6IFwiYm9vbGVhblwiIH0sXG4gICAgICAgICAgICAgICAgICB7IHR5cGU6IFwiYXJyYXlcIiwgaXRlbXM6IHsgdHlwZTogXCJzdHJpbmdcIiB9IH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHNpZ25hbDoge1xuICAgICAgICAgICAgICAgIG9uZU9mOiBbXG4gICAgICAgICAgICAgICAgICB7IHR5cGU6IFwiYXJyYXlcIiwgaXRlbXM6IHsgdHlwZTogXCJzdHJpbmdcIiB9IH0sXG4gICAgICAgICAgICAgICAgICB7IHR5cGU6IFwiYm9vbGVhblwiIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG1hcmt0eXBlOiB7IHR5cGU6IFwiYm9vbGVhblwiIH0sXG4gICAgICAgICAgICAgIGVuY29kZTogeyAkcmVmOiBcIiMvZGVmcy9lbmNvZGVcIiB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aW1pbmc6IHsgJHJlZjogXCIjL2RlZnMvdGltaW5nXCIgfSxcbiAgICAgICAgICBlbnVtZXJhdG9yOiB7IHR5cGU6IFwic3RyaW5nXCIgfVxuICAgICAgICB9LFxuICAgICAgICByZXF1aXJlZDogW1widGltaW5nXCIsIFwiY29tcG9uZW50XCJdLFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcbiAgICAgIH0sXG4gICAgICBheGlzU3RlcDoge1xuICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgY29tcG9uZW50OiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgcHJvcGVydGllczogeyBheGlzOiB7IHR5cGU6IFwic3RyaW5nXCIgfSB9LFxuICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IFtcImF4aXNcIl1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGNoYW5nZToge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgc2NhbGU6IHtcbiAgICAgICAgICAgICAgICBvbmVPZjogW1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgZG9tYWluRGltZW5zaW9uOiB7IHR5cGU6IFwic3RyaW5nXCIsIGVudW06IFtcInNhbWVcIiwgXCJkaWZmXCJdIH0sXG4gICAgICAgICAgICAgICAgICAgICAgZGF0YTogeyB0eXBlOiBcImJvb2xlYW5cIiB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHsgdHlwZTogXCJib29sZWFuXCIgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgc2lnbmFsOiB7XG4gICAgICAgICAgICAgICAgb25lT2Y6IFtcbiAgICAgICAgICAgICAgICAgIHsgdHlwZTogXCJhcnJheVwiLCBpdGVtczogeyB0eXBlOiBcInN0cmluZ1wiIH0gfSxcbiAgICAgICAgICAgICAgICAgIHsgdHlwZTogXCJib29sZWFuXCIgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbWFya3R5cGU6IHsgdHlwZTogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgICAgZW5jb2RlOiB7XG4gICAgICAgICAgICAgICAgb25lT2Y6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgICAgICAgIGF4aXM6IHsgJHJlZjogXCIjL2RlZnMvZW5jb2RlXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogeyAkcmVmOiBcIiMvZGVmcy9lbmNvZGVcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgIHRpY2tzOiB7ICRyZWY6IFwiIy9kZWZzL2VuY29kZVwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgbGFiZWxzOiB7ICRyZWY6IFwiIy9kZWZzL2VuY29kZVwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgZ3JpZDogeyAkcmVmOiBcIiMvZGVmcy9lbmNvZGVcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbjogeyAkcmVmOiBcIiMvZGVmcy9lbmNvZGVcIiB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHsgdHlwZTogXCJib29sZWFuXCIgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGltaW5nOiB7ICRyZWY6IFwiIy9kZWZzL3RpbWluZ1wiIH0sXG4gICAgICAgICAgZW51bWVyYXRvcjogeyB0eXBlOiBcInN0cmluZ1wiIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWlyZWQ6IFtcInRpbWluZ1wiLCBcImNvbXBvbmVudFwiXSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXG4gICAgICB9LFxuICAgICAgbGVnZW5kU3RlcDoge1xuICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgY29tcG9uZW50OiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgcHJvcGVydGllczogeyBsZWdlbmQ6IHsgdHlwZTogXCJzdHJpbmdcIiB9IH0sXG4gICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICByZXF1aXJlZDogW1wibGVnZW5kXCJdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjaGFuZ2U6IHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIHNjYWxlOiB7XG4gICAgICAgICAgICAgICAgb25lT2Y6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbkRpbWVuc2lvbjogeyB0eXBlOiBcInN0cmluZ1wiLCBlbnVtOiBbXCJzYW1lXCIsIFwiZGlmZlwiXSB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7IGRhdGE6IHsgdHlwZTogXCJib29sZWFuXCIgfSB9LFxuICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgICAgICAgeyB0eXBlOiBcImFycmF5XCIsIGl0ZW1zOiB7IHR5cGU6IFwic3RyaW5nXCIgfSB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBzaWduYWw6IHtcbiAgICAgICAgICAgICAgICBvbmVPZjogW1xuICAgICAgICAgICAgICAgICAgeyB0eXBlOiBcImFycmF5XCIsIGl0ZW1zOiB7IHR5cGU6IFwic3RyaW5nXCIgfSB9LFxuICAgICAgICAgICAgICAgICAgeyB0eXBlOiBcImJvb2xlYW5cIiB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBlbmNvZGU6IHtcbiAgICAgICAgICAgICAgICBvbmVPZjogW1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgc3ltYm9sczogeyAkcmVmOiBcIiMvZGVmcy9lbmNvZGVcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB7ICRyZWY6IFwiIy9kZWZzL2VuY29kZVwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgbGFiZWxzOiB7ICRyZWY6IFwiIy9kZWZzL2VuY29kZVwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgZW50cmllczogeyAkcmVmOiBcIiMvZGVmcy9lbmNvZGVcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgIGdyYWRpZW50OiB7ICRyZWY6IFwiIy9kZWZzL2VuY29kZVwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgbGVnZW5kOiB7ICRyZWY6IFwiIy9kZWZzL2VuY29kZVwiIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgeyB0eXBlOiBcImJvb2xlYW5cIiB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aW1pbmc6IHsgJHJlZjogXCIjL2RlZnMvdGltaW5nXCIgfSxcbiAgICAgICAgICBlbnVtZXJhdG9yOiB7IHR5cGU6IFwic3RyaW5nXCIgfVxuICAgICAgICB9LFxuICAgICAgICByZXF1aXJlZDogW1widGltaW5nXCIsIFwiY29tcG9uZW50XCJdLFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcbiAgICAgIH0sXG4gICAgICBwYXVzZVN0ZXA6IHtcbiAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGNvbXBvbmVudDogeyBjb25zdDogXCJwYXVzZVwiIH0sXG4gICAgICAgICAgdGltaW5nOiB7ICRyZWY6IFwiIy9kZWZzL3RpbWluZ1wiIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWlyZWQ6IFtcInRpbWluZ1wiLCBcImNvbXBvbmVudFwiXSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXG4gICAgICB9LFxuICAgICAgdmlld1N0ZXA6IHtcbiAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGNvbXBvbmVudDogeyBjb25zdDogXCJ2aWV3XCIgfSxcbiAgICAgICAgICBjaGFuZ2U6IHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIHNpZ25hbDoge1xuICAgICAgICAgICAgICAgIG9uZU9mOiBbXG4gICAgICAgICAgICAgICAgICB7IHR5cGU6IFwiYXJyYXlcIiwgaXRlbXM6IHsgdHlwZTogXCJzdHJpbmdcIiB9IH0sXG4gICAgICAgICAgICAgICAgICB7IHR5cGU6IFwiYm9vbGVhblwiIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGltaW5nOiB7ICRyZWY6IFwiIy9kZWZzL3RpbWluZ1wiIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWlyZWQ6IFtcInRpbWluZ1wiLCBcImNvbXBvbmVudFwiXSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXG4gICAgICB9LFxuICAgICAgdGltaW5nOiB7XG4gICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBkdXJhdGlvbjoge1xuICAgICAgICAgICAgb25lT2Y6IFtcbiAgICAgICAgICAgICAgeyB0eXBlOiBcIm51bWJlclwiLCBtaW5pbXVtOiAwIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHsgcmF0aW86IHsgdHlwZTogXCJudW1iZXJcIiwgbWluaW11bTogMCB9IH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZGVsYXk6IHtcbiAgICAgICAgICAgIG9uZU9mOiBbXG4gICAgICAgICAgICAgIHsgdHlwZTogXCJudW1iZXJcIiB9LFxuICAgICAgICAgICAgICB7IHR5cGU6IFwib2JqZWN0XCIsIHByb3BlcnRpZXM6IHsgcmF0aW86IHsgdHlwZTogXCJudW1iZXJcIiB9IH0gfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgc3RhZ2dlcmluZzogeyB0eXBlOiBcInN0cmluZ1wiIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGVuY29kZToge1xuICAgICAgICBvbmVPZjogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIHVwZGF0ZTogeyBvbmVPZjogW3sgdHlwZTogXCJvYmplY3RcIiB9LCB7IHR5cGU6IFwiYm9vbGVhblwiIH1dIH0sXG4gICAgICAgICAgICAgIGVudGVyOiB7IG9uZU9mOiBbeyB0eXBlOiBcIm9iamVjdFwiIH0sIHsgdHlwZTogXCJib29sZWFuXCIgfV0gfSxcbiAgICAgICAgICAgICAgZXhpdDogeyBvbmVPZjogW3sgdHlwZTogXCJvYmplY3RcIiB9LCB7IHR5cGU6IFwiYm9vbGVhblwiIH1dIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgdHlwZTogXCJib29sZWFuXCIgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBzcGVjQ2hlY2tlcihzcGVjKSB7XG4gIGNvbnN0IGFqdiA9IG5ldyBBanYoKTtcbiAgY29uc3QgdmFsaWRhdGUgPSBhanYuY29tcGlsZShzY2hlbWEoKSk7XG5cbiAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZShzcGVjKTtcbiAgaWYgKCF2YWxpZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgU3BlY1wiLCB2YWxpZGF0ZS5lcnJvcnMpO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQge1xuICAvLyBzY2hlbWEsXG4gIHNwZWNDaGVja2VyXG59OyIsImV4cG9ydCB2YXIgUmF3Q29kZSA9ICdSYXdDb2RlJztcbmV4cG9ydCB2YXIgTGl0ZXJhbCA9ICdMaXRlcmFsJztcbmV4cG9ydCB2YXIgUHJvcGVydHkgPSAnUHJvcGVydHknO1xuZXhwb3J0IHZhciBJZGVudGlmaWVyID0gJ0lkZW50aWZpZXInO1xuXG5leHBvcnQgdmFyIEFycmF5RXhwcmVzc2lvbiA9ICdBcnJheUV4cHJlc3Npb24nO1xuZXhwb3J0IHZhciBCaW5hcnlFeHByZXNzaW9uID0gJ0JpbmFyeUV4cHJlc3Npb24nO1xuZXhwb3J0IHZhciBDYWxsRXhwcmVzc2lvbiA9ICdDYWxsRXhwcmVzc2lvbic7XG5leHBvcnQgdmFyIENvbmRpdGlvbmFsRXhwcmVzc2lvbiA9ICdDb25kaXRpb25hbEV4cHJlc3Npb24nO1xuZXhwb3J0IHZhciBMb2dpY2FsRXhwcmVzc2lvbiA9ICdMb2dpY2FsRXhwcmVzc2lvbic7XG5leHBvcnQgdmFyIE1lbWJlckV4cHJlc3Npb24gPSAnTWVtYmVyRXhwcmVzc2lvbic7XG5leHBvcnQgdmFyIE9iamVjdEV4cHJlc3Npb24gPSAnT2JqZWN0RXhwcmVzc2lvbic7XG5leHBvcnQgdmFyIFVuYXJ5RXhwcmVzc2lvbiA9ICdVbmFyeUV4cHJlc3Npb24nO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBBU1ROb2RlKHR5cGUpIHtcbiAgdGhpcy50eXBlID0gdHlwZTtcbn1cblxuQVNUTm9kZS5wcm90b3R5cGUudmlzaXQgPSBmdW5jdGlvbih2aXNpdG9yKSB7XG4gIHZhciBub2RlID0gdGhpcywgYywgaSwgbjtcblxuICBpZiAodmlzaXRvcihub2RlKSkgcmV0dXJuIDE7XG5cbiAgZm9yIChjPWNoaWxkcmVuKG5vZGUpLCBpPTAsIG49Yy5sZW5ndGg7IGk8bjsgKytpKSB7XG4gICAgaWYgKGNbaV0udmlzaXQodmlzaXRvcikpIHJldHVybiAxO1xuICB9XG59O1xuXG5mdW5jdGlvbiBjaGlsZHJlbihub2RlKSB7XG4gIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgY2FzZSBBcnJheUV4cHJlc3Npb246XG4gICAgICByZXR1cm4gbm9kZS5lbGVtZW50cztcbiAgICBjYXNlIEJpbmFyeUV4cHJlc3Npb246XG4gICAgY2FzZSBMb2dpY2FsRXhwcmVzc2lvbjpcbiAgICAgIHJldHVybiBbbm9kZS5sZWZ0LCBub2RlLnJpZ2h0XTtcbiAgICBjYXNlIENhbGxFeHByZXNzaW9uOlxuICAgICAgdmFyIGFyZ3MgPSBub2RlLmFyZ3VtZW50cy5zbGljZSgpO1xuICAgICAgYXJncy51bnNoaWZ0KG5vZGUuY2FsbGVlKTtcbiAgICAgIHJldHVybiBhcmdzO1xuICAgIGNhc2UgQ29uZGl0aW9uYWxFeHByZXNzaW9uOlxuICAgICAgcmV0dXJuIFtub2RlLnRlc3QsIG5vZGUuY29uc2VxdWVudCwgbm9kZS5hbHRlcm5hdGVdO1xuICAgIGNhc2UgTWVtYmVyRXhwcmVzc2lvbjpcbiAgICAgIHJldHVybiBbbm9kZS5vYmplY3QsIG5vZGUucHJvcGVydHldO1xuICAgIGNhc2UgT2JqZWN0RXhwcmVzc2lvbjpcbiAgICAgIHJldHVybiBub2RlLnByb3BlcnRpZXM7XG4gICAgY2FzZSBQcm9wZXJ0eTpcbiAgICAgIHJldHVybiBbbm9kZS5rZXksIG5vZGUudmFsdWVdO1xuICAgIGNhc2UgVW5hcnlFeHByZXNzaW9uOlxuICAgICAgcmV0dXJuIFtub2RlLmFyZ3VtZW50XTtcbiAgICBjYXNlIElkZW50aWZpZXI6XG4gICAgY2FzZSBMaXRlcmFsOlxuICAgIGNhc2UgUmF3Q29kZTpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFtdO1xuICB9XG59XG4iLCIvKlxuICBUaGUgZm9sbG93aW5nIGV4cHJlc3Npb24gcGFyc2VyIGlzIGJhc2VkIG9uIEVzcHJpbWEgKGh0dHA6Ly9lc3ByaW1hLm9yZy8pLlxuICBPcmlnaW5hbCBoZWFkZXIgY29tbWVudCBhbmQgbGljZW5zZSBmb3IgRXNwcmltYSBpcyBpbmNsdWRlZCBoZXJlOlxuXG4gIENvcHlyaWdodCAoQykgMjAxMyBBcml5YSBIaWRheWF0IDxhcml5YS5oaWRheWF0QGdtYWlsLmNvbT5cbiAgQ29weXJpZ2h0IChDKSAyMDEzIFRoYWRkZWUgVHlsIDx0aGFkZGVlLnR5bEBnbWFpbC5jb20+XG4gIENvcHlyaWdodCAoQykgMjAxMyBNYXRoaWFzIEJ5bmVucyA8bWF0aGlhc0BxaXdpLmJlPlxuICBDb3B5cmlnaHQgKEMpIDIwMTIgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+XG4gIENvcHlyaWdodCAoQykgMjAxMiBNYXRoaWFzIEJ5bmVucyA8bWF0aGlhc0BxaXdpLmJlPlxuICBDb3B5cmlnaHQgKEMpIDIwMTIgSm9vc3QtV2ltIEJvZWtlc3RlaWpuIDxqb29zdC13aW1AYm9la2VzdGVpam4ubmw+XG4gIENvcHlyaWdodCAoQykgMjAxMiBLcmlzIEtvd2FsIDxrcmlzLmtvd2FsQGNpeGFyLmNvbT5cbiAgQ29weXJpZ2h0IChDKSAyMDEyIFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT5cbiAgQ29weXJpZ2h0IChDKSAyMDEyIEFycGFkIEJvcnNvcyA8YXJwYWQuYm9yc29zQGdvb2dsZW1haWwuY29tPlxuICBDb3B5cmlnaHQgKEMpIDIwMTEgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+XG5cbiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4gIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4gIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cbmltcG9ydCBBU1ROb2RlIGZyb20gJy4vYXN0JztcblxudmFyIFRva2VuTmFtZSxcbiAgICBzb3VyY2UsXG4gICAgaW5kZXgsXG4gICAgbGVuZ3RoLFxuICAgIGxvb2thaGVhZDtcblxudmFyIFRva2VuQm9vbGVhbkxpdGVyYWwgPSAxLFxuICAgIFRva2VuRU9GID0gMixcbiAgICBUb2tlbklkZW50aWZpZXIgPSAzLFxuICAgIFRva2VuS2V5d29yZCA9IDQsXG4gICAgVG9rZW5OdWxsTGl0ZXJhbCA9IDUsXG4gICAgVG9rZW5OdW1lcmljTGl0ZXJhbCA9IDYsXG4gICAgVG9rZW5QdW5jdHVhdG9yID0gNyxcbiAgICBUb2tlblN0cmluZ0xpdGVyYWwgPSA4LFxuICAgIFRva2VuUmVndWxhckV4cHJlc3Npb24gPSA5O1xuXG5Ub2tlbk5hbWUgPSB7fTtcblRva2VuTmFtZVtUb2tlbkJvb2xlYW5MaXRlcmFsXSA9ICdCb29sZWFuJztcblRva2VuTmFtZVtUb2tlbkVPRl0gPSAnPGVuZD4nO1xuVG9rZW5OYW1lW1Rva2VuSWRlbnRpZmllcl0gPSAnSWRlbnRpZmllcic7XG5Ub2tlbk5hbWVbVG9rZW5LZXl3b3JkXSA9ICdLZXl3b3JkJztcblRva2VuTmFtZVtUb2tlbk51bGxMaXRlcmFsXSA9ICdOdWxsJztcblRva2VuTmFtZVtUb2tlbk51bWVyaWNMaXRlcmFsXSA9ICdOdW1lcmljJztcblRva2VuTmFtZVtUb2tlblB1bmN0dWF0b3JdID0gJ1B1bmN0dWF0b3InO1xuVG9rZW5OYW1lW1Rva2VuU3RyaW5nTGl0ZXJhbF0gPSAnU3RyaW5nJztcblRva2VuTmFtZVtUb2tlblJlZ3VsYXJFeHByZXNzaW9uXSA9ICdSZWd1bGFyRXhwcmVzc2lvbic7XG5cbnZhciBTeW50YXhBcnJheUV4cHJlc3Npb24gPSAnQXJyYXlFeHByZXNzaW9uJyxcbiAgICBTeW50YXhCaW5hcnlFeHByZXNzaW9uID0gJ0JpbmFyeUV4cHJlc3Npb24nLFxuICAgIFN5bnRheENhbGxFeHByZXNzaW9uID0gJ0NhbGxFeHByZXNzaW9uJyxcbiAgICBTeW50YXhDb25kaXRpb25hbEV4cHJlc3Npb24gPSAnQ29uZGl0aW9uYWxFeHByZXNzaW9uJyxcbiAgICBTeW50YXhJZGVudGlmaWVyID0gJ0lkZW50aWZpZXInLFxuICAgIFN5bnRheExpdGVyYWwgPSAnTGl0ZXJhbCcsXG4gICAgU3ludGF4TG9naWNhbEV4cHJlc3Npb24gPSAnTG9naWNhbEV4cHJlc3Npb24nLFxuICAgIFN5bnRheE1lbWJlckV4cHJlc3Npb24gPSAnTWVtYmVyRXhwcmVzc2lvbicsXG4gICAgU3ludGF4T2JqZWN0RXhwcmVzc2lvbiA9ICdPYmplY3RFeHByZXNzaW9uJyxcbiAgICBTeW50YXhQcm9wZXJ0eSA9ICdQcm9wZXJ0eScsXG4gICAgU3ludGF4VW5hcnlFeHByZXNzaW9uID0gJ1VuYXJ5RXhwcmVzc2lvbic7XG5cbi8vIEVycm9yIG1lc3NhZ2VzIHNob3VsZCBiZSBpZGVudGljYWwgdG8gVjguXG52YXIgTWVzc2FnZVVuZXhwZWN0ZWRUb2tlbiA9ICdVbmV4cGVjdGVkIHRva2VuICUwJyxcbiAgICBNZXNzYWdlVW5leHBlY3RlZE51bWJlciA9ICdVbmV4cGVjdGVkIG51bWJlcicsXG4gICAgTWVzc2FnZVVuZXhwZWN0ZWRTdHJpbmcgPSAnVW5leHBlY3RlZCBzdHJpbmcnLFxuICAgIE1lc3NhZ2VVbmV4cGVjdGVkSWRlbnRpZmllciA9ICdVbmV4cGVjdGVkIGlkZW50aWZpZXInLFxuICAgIE1lc3NhZ2VVbmV4cGVjdGVkUmVzZXJ2ZWQgPSAnVW5leHBlY3RlZCByZXNlcnZlZCB3b3JkJyxcbiAgICBNZXNzYWdlVW5leHBlY3RlZEVPUyA9ICdVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dCcsXG4gICAgTWVzc2FnZUludmFsaWRSZWdFeHAgPSAnSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24nLFxuICAgIE1lc3NhZ2VVbnRlcm1pbmF0ZWRSZWdFeHAgPSAnSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb246IG1pc3NpbmcgLycsXG4gICAgTWVzc2FnZVN0cmljdE9jdGFsTGl0ZXJhbCA9ICdPY3RhbCBsaXRlcmFscyBhcmUgbm90IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGUuJyxcbiAgICBNZXNzYWdlU3RyaWN0RHVwbGljYXRlUHJvcGVydHkgPSAnRHVwbGljYXRlIGRhdGEgcHJvcGVydHkgaW4gb2JqZWN0IGxpdGVyYWwgbm90IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGUnO1xuXG52YXIgSUxMRUdBTCA9ICdJTExFR0FMJyxcbiAgICBESVNBQkxFRCA9ICdEaXNhYmxlZC4nO1xuXG4vLyBTZWUgYWxzbyB0b29scy9nZW5lcmF0ZS11bmljb2RlLXJlZ2V4LnB5LlxudmFyIFJlZ2V4Tm9uQXNjaWlJZGVudGlmaWVyU3RhcnQgPSBuZXcgUmVnRXhwKFwiW1xcXFx4QUFcXFxceEI1XFxcXHhCQVxcXFx4QzAtXFxcXHhENlxcXFx4RDgtXFxcXHhGNlxcXFx4RjgtXFxcXHUwMkMxXFxcXHUwMkM2LVxcXFx1MDJEMVxcXFx1MDJFMC1cXFxcdTAyRTRcXFxcdTAyRUNcXFxcdTAyRUVcXFxcdTAzNzAtXFxcXHUwMzc0XFxcXHUwMzc2XFxcXHUwMzc3XFxcXHUwMzdBLVxcXFx1MDM3RFxcXFx1MDM3RlxcXFx1MDM4NlxcXFx1MDM4OC1cXFxcdTAzOEFcXFxcdTAzOENcXFxcdTAzOEUtXFxcXHUwM0ExXFxcXHUwM0EzLVxcXFx1MDNGNVxcXFx1MDNGNy1cXFxcdTA0ODFcXFxcdTA0OEEtXFxcXHUwNTJGXFxcXHUwNTMxLVxcXFx1MDU1NlxcXFx1MDU1OVxcXFx1MDU2MS1cXFxcdTA1ODdcXFxcdTA1RDAtXFxcXHUwNUVBXFxcXHUwNUYwLVxcXFx1MDVGMlxcXFx1MDYyMC1cXFxcdTA2NEFcXFxcdTA2NkVcXFxcdTA2NkZcXFxcdTA2NzEtXFxcXHUwNkQzXFxcXHUwNkQ1XFxcXHUwNkU1XFxcXHUwNkU2XFxcXHUwNkVFXFxcXHUwNkVGXFxcXHUwNkZBLVxcXFx1MDZGQ1xcXFx1MDZGRlxcXFx1MDcxMFxcXFx1MDcxMi1cXFxcdTA3MkZcXFxcdTA3NEQtXFxcXHUwN0E1XFxcXHUwN0IxXFxcXHUwN0NBLVxcXFx1MDdFQVxcXFx1MDdGNFxcXFx1MDdGNVxcXFx1MDdGQVxcXFx1MDgwMC1cXFxcdTA4MTVcXFxcdTA4MUFcXFxcdTA4MjRcXFxcdTA4MjhcXFxcdTA4NDAtXFxcXHUwODU4XFxcXHUwOEEwLVxcXFx1MDhCMlxcXFx1MDkwNC1cXFxcdTA5MzlcXFxcdTA5M0RcXFxcdTA5NTBcXFxcdTA5NTgtXFxcXHUwOTYxXFxcXHUwOTcxLVxcXFx1MDk4MFxcXFx1MDk4NS1cXFxcdTA5OENcXFxcdTA5OEZcXFxcdTA5OTBcXFxcdTA5OTMtXFxcXHUwOUE4XFxcXHUwOUFBLVxcXFx1MDlCMFxcXFx1MDlCMlxcXFx1MDlCNi1cXFxcdTA5QjlcXFxcdTA5QkRcXFxcdTA5Q0VcXFxcdTA5RENcXFxcdTA5RERcXFxcdTA5REYtXFxcXHUwOUUxXFxcXHUwOUYwXFxcXHUwOUYxXFxcXHUwQTA1LVxcXFx1MEEwQVxcXFx1MEEwRlxcXFx1MEExMFxcXFx1MEExMy1cXFxcdTBBMjhcXFxcdTBBMkEtXFxcXHUwQTMwXFxcXHUwQTMyXFxcXHUwQTMzXFxcXHUwQTM1XFxcXHUwQTM2XFxcXHUwQTM4XFxcXHUwQTM5XFxcXHUwQTU5LVxcXFx1MEE1Q1xcXFx1MEE1RVxcXFx1MEE3Mi1cXFxcdTBBNzRcXFxcdTBBODUtXFxcXHUwQThEXFxcXHUwQThGLVxcXFx1MEE5MVxcXFx1MEE5My1cXFxcdTBBQThcXFxcdTBBQUEtXFxcXHUwQUIwXFxcXHUwQUIyXFxcXHUwQUIzXFxcXHUwQUI1LVxcXFx1MEFCOVxcXFx1MEFCRFxcXFx1MEFEMFxcXFx1MEFFMFxcXFx1MEFFMVxcXFx1MEIwNS1cXFxcdTBCMENcXFxcdTBCMEZcXFxcdTBCMTBcXFxcdTBCMTMtXFxcXHUwQjI4XFxcXHUwQjJBLVxcXFx1MEIzMFxcXFx1MEIzMlxcXFx1MEIzM1xcXFx1MEIzNS1cXFxcdTBCMzlcXFxcdTBCM0RcXFxcdTBCNUNcXFxcdTBCNURcXFxcdTBCNUYtXFxcXHUwQjYxXFxcXHUwQjcxXFxcXHUwQjgzXFxcXHUwQjg1LVxcXFx1MEI4QVxcXFx1MEI4RS1cXFxcdTBCOTBcXFxcdTBCOTItXFxcXHUwQjk1XFxcXHUwQjk5XFxcXHUwQjlBXFxcXHUwQjlDXFxcXHUwQjlFXFxcXHUwQjlGXFxcXHUwQkEzXFxcXHUwQkE0XFxcXHUwQkE4LVxcXFx1MEJBQVxcXFx1MEJBRS1cXFxcdTBCQjlcXFxcdTBCRDBcXFxcdTBDMDUtXFxcXHUwQzBDXFxcXHUwQzBFLVxcXFx1MEMxMFxcXFx1MEMxMi1cXFxcdTBDMjhcXFxcdTBDMkEtXFxcXHUwQzM5XFxcXHUwQzNEXFxcXHUwQzU4XFxcXHUwQzU5XFxcXHUwQzYwXFxcXHUwQzYxXFxcXHUwQzg1LVxcXFx1MEM4Q1xcXFx1MEM4RS1cXFxcdTBDOTBcXFxcdTBDOTItXFxcXHUwQ0E4XFxcXHUwQ0FBLVxcXFx1MENCM1xcXFx1MENCNS1cXFxcdTBDQjlcXFxcdTBDQkRcXFxcdTBDREVcXFxcdTBDRTBcXFxcdTBDRTFcXFxcdTBDRjFcXFxcdTBDRjJcXFxcdTBEMDUtXFxcXHUwRDBDXFxcXHUwRDBFLVxcXFx1MEQxMFxcXFx1MEQxMi1cXFxcdTBEM0FcXFxcdTBEM0RcXFxcdTBENEVcXFxcdTBENjBcXFxcdTBENjFcXFxcdTBEN0EtXFxcXHUwRDdGXFxcXHUwRDg1LVxcXFx1MEQ5NlxcXFx1MEQ5QS1cXFxcdTBEQjFcXFxcdTBEQjMtXFxcXHUwREJCXFxcXHUwREJEXFxcXHUwREMwLVxcXFx1MERDNlxcXFx1MEUwMS1cXFxcdTBFMzBcXFxcdTBFMzJcXFxcdTBFMzNcXFxcdTBFNDAtXFxcXHUwRTQ2XFxcXHUwRTgxXFxcXHUwRTgyXFxcXHUwRTg0XFxcXHUwRTg3XFxcXHUwRTg4XFxcXHUwRThBXFxcXHUwRThEXFxcXHUwRTk0LVxcXFx1MEU5N1xcXFx1MEU5OS1cXFxcdTBFOUZcXFxcdTBFQTEtXFxcXHUwRUEzXFxcXHUwRUE1XFxcXHUwRUE3XFxcXHUwRUFBXFxcXHUwRUFCXFxcXHUwRUFELVxcXFx1MEVCMFxcXFx1MEVCMlxcXFx1MEVCM1xcXFx1MEVCRFxcXFx1MEVDMC1cXFxcdTBFQzRcXFxcdTBFQzZcXFxcdTBFREMtXFxcXHUwRURGXFxcXHUwRjAwXFxcXHUwRjQwLVxcXFx1MEY0N1xcXFx1MEY0OS1cXFxcdTBGNkNcXFxcdTBGODgtXFxcXHUwRjhDXFxcXHUxMDAwLVxcXFx1MTAyQVxcXFx1MTAzRlxcXFx1MTA1MC1cXFxcdTEwNTVcXFxcdTEwNUEtXFxcXHUxMDVEXFxcXHUxMDYxXFxcXHUxMDY1XFxcXHUxMDY2XFxcXHUxMDZFLVxcXFx1MTA3MFxcXFx1MTA3NS1cXFxcdTEwODFcXFxcdTEwOEVcXFxcdTEwQTAtXFxcXHUxMEM1XFxcXHUxMEM3XFxcXHUxMENEXFxcXHUxMEQwLVxcXFx1MTBGQVxcXFx1MTBGQy1cXFxcdTEyNDhcXFxcdTEyNEEtXFxcXHUxMjREXFxcXHUxMjUwLVxcXFx1MTI1NlxcXFx1MTI1OFxcXFx1MTI1QS1cXFxcdTEyNURcXFxcdTEyNjAtXFxcXHUxMjg4XFxcXHUxMjhBLVxcXFx1MTI4RFxcXFx1MTI5MC1cXFxcdTEyQjBcXFxcdTEyQjItXFxcXHUxMkI1XFxcXHUxMkI4LVxcXFx1MTJCRVxcXFx1MTJDMFxcXFx1MTJDMi1cXFxcdTEyQzVcXFxcdTEyQzgtXFxcXHUxMkQ2XFxcXHUxMkQ4LVxcXFx1MTMxMFxcXFx1MTMxMi1cXFxcdTEzMTVcXFxcdTEzMTgtXFxcXHUxMzVBXFxcXHUxMzgwLVxcXFx1MTM4RlxcXFx1MTNBMC1cXFxcdTEzRjRcXFxcdTE0MDEtXFxcXHUxNjZDXFxcXHUxNjZGLVxcXFx1MTY3RlxcXFx1MTY4MS1cXFxcdTE2OUFcXFxcdTE2QTAtXFxcXHUxNkVBXFxcXHUxNkVFLVxcXFx1MTZGOFxcXFx1MTcwMC1cXFxcdTE3MENcXFxcdTE3MEUtXFxcXHUxNzExXFxcXHUxNzIwLVxcXFx1MTczMVxcXFx1MTc0MC1cXFxcdTE3NTFcXFxcdTE3NjAtXFxcXHUxNzZDXFxcXHUxNzZFLVxcXFx1MTc3MFxcXFx1MTc4MC1cXFxcdTE3QjNcXFxcdTE3RDdcXFxcdTE3RENcXFxcdTE4MjAtXFxcXHUxODc3XFxcXHUxODgwLVxcXFx1MThBOFxcXFx1MThBQVxcXFx1MThCMC1cXFxcdTE4RjVcXFxcdTE5MDAtXFxcXHUxOTFFXFxcXHUxOTUwLVxcXFx1MTk2RFxcXFx1MTk3MC1cXFxcdTE5NzRcXFxcdTE5ODAtXFxcXHUxOUFCXFxcXHUxOUMxLVxcXFx1MTlDN1xcXFx1MUEwMC1cXFxcdTFBMTZcXFxcdTFBMjAtXFxcXHUxQTU0XFxcXHUxQUE3XFxcXHUxQjA1LVxcXFx1MUIzM1xcXFx1MUI0NS1cXFxcdTFCNEJcXFxcdTFCODMtXFxcXHUxQkEwXFxcXHUxQkFFXFxcXHUxQkFGXFxcXHUxQkJBLVxcXFx1MUJFNVxcXFx1MUMwMC1cXFxcdTFDMjNcXFxcdTFDNEQtXFxcXHUxQzRGXFxcXHUxQzVBLVxcXFx1MUM3RFxcXFx1MUNFOS1cXFxcdTFDRUNcXFxcdTFDRUUtXFxcXHUxQ0YxXFxcXHUxQ0Y1XFxcXHUxQ0Y2XFxcXHUxRDAwLVxcXFx1MURCRlxcXFx1MUUwMC1cXFxcdTFGMTVcXFxcdTFGMTgtXFxcXHUxRjFEXFxcXHUxRjIwLVxcXFx1MUY0NVxcXFx1MUY0OC1cXFxcdTFGNERcXFxcdTFGNTAtXFxcXHUxRjU3XFxcXHUxRjU5XFxcXHUxRjVCXFxcXHUxRjVEXFxcXHUxRjVGLVxcXFx1MUY3RFxcXFx1MUY4MC1cXFxcdTFGQjRcXFxcdTFGQjYtXFxcXHUxRkJDXFxcXHUxRkJFXFxcXHUxRkMyLVxcXFx1MUZDNFxcXFx1MUZDNi1cXFxcdTFGQ0NcXFxcdTFGRDAtXFxcXHUxRkQzXFxcXHUxRkQ2LVxcXFx1MUZEQlxcXFx1MUZFMC1cXFxcdTFGRUNcXFxcdTFGRjItXFxcXHUxRkY0XFxcXHUxRkY2LVxcXFx1MUZGQ1xcXFx1MjA3MVxcXFx1MjA3RlxcXFx1MjA5MC1cXFxcdTIwOUNcXFxcdTIxMDJcXFxcdTIxMDdcXFxcdTIxMEEtXFxcXHUyMTEzXFxcXHUyMTE1XFxcXHUyMTE5LVxcXFx1MjExRFxcXFx1MjEyNFxcXFx1MjEyNlxcXFx1MjEyOFxcXFx1MjEyQS1cXFxcdTIxMkRcXFxcdTIxMkYtXFxcXHUyMTM5XFxcXHUyMTNDLVxcXFx1MjEzRlxcXFx1MjE0NS1cXFxcdTIxNDlcXFxcdTIxNEVcXFxcdTIxNjAtXFxcXHUyMTg4XFxcXHUyQzAwLVxcXFx1MkMyRVxcXFx1MkMzMC1cXFxcdTJDNUVcXFxcdTJDNjAtXFxcXHUyQ0U0XFxcXHUyQ0VCLVxcXFx1MkNFRVxcXFx1MkNGMlxcXFx1MkNGM1xcXFx1MkQwMC1cXFxcdTJEMjVcXFxcdTJEMjdcXFxcdTJEMkRcXFxcdTJEMzAtXFxcXHUyRDY3XFxcXHUyRDZGXFxcXHUyRDgwLVxcXFx1MkQ5NlxcXFx1MkRBMC1cXFxcdTJEQTZcXFxcdTJEQTgtXFxcXHUyREFFXFxcXHUyREIwLVxcXFx1MkRCNlxcXFx1MkRCOC1cXFxcdTJEQkVcXFxcdTJEQzAtXFxcXHUyREM2XFxcXHUyREM4LVxcXFx1MkRDRVxcXFx1MkREMC1cXFxcdTJERDZcXFxcdTJERDgtXFxcXHUyRERFXFxcXHUyRTJGXFxcXHUzMDA1LVxcXFx1MzAwN1xcXFx1MzAyMS1cXFxcdTMwMjlcXFxcdTMwMzEtXFxcXHUzMDM1XFxcXHUzMDM4LVxcXFx1MzAzQ1xcXFx1MzA0MS1cXFxcdTMwOTZcXFxcdTMwOUQtXFxcXHUzMDlGXFxcXHUzMEExLVxcXFx1MzBGQVxcXFx1MzBGQy1cXFxcdTMwRkZcXFxcdTMxMDUtXFxcXHUzMTJEXFxcXHUzMTMxLVxcXFx1MzE4RVxcXFx1MzFBMC1cXFxcdTMxQkFcXFxcdTMxRjAtXFxcXHUzMUZGXFxcXHUzNDAwLVxcXFx1NERCNVxcXFx1NEUwMC1cXFxcdTlGQ0NcXFxcdUEwMDAtXFxcXHVBNDhDXFxcXHVBNEQwLVxcXFx1QTRGRFxcXFx1QTUwMC1cXFxcdUE2MENcXFxcdUE2MTAtXFxcXHVBNjFGXFxcXHVBNjJBXFxcXHVBNjJCXFxcXHVBNjQwLVxcXFx1QTY2RVxcXFx1QTY3Ri1cXFxcdUE2OURcXFxcdUE2QTAtXFxcXHVBNkVGXFxcXHVBNzE3LVxcXFx1QTcxRlxcXFx1QTcyMi1cXFxcdUE3ODhcXFxcdUE3OEItXFxcXHVBNzhFXFxcXHVBNzkwLVxcXFx1QTdBRFxcXFx1QTdCMFxcXFx1QTdCMVxcXFx1QTdGNy1cXFxcdUE4MDFcXFxcdUE4MDMtXFxcXHVBODA1XFxcXHVBODA3LVxcXFx1QTgwQVxcXFx1QTgwQy1cXFxcdUE4MjJcXFxcdUE4NDAtXFxcXHVBODczXFxcXHVBODgyLVxcXFx1QThCM1xcXFx1QThGMi1cXFxcdUE4RjdcXFxcdUE4RkJcXFxcdUE5MEEtXFxcXHVBOTI1XFxcXHVBOTMwLVxcXFx1QTk0NlxcXFx1QTk2MC1cXFxcdUE5N0NcXFxcdUE5ODQtXFxcXHVBOUIyXFxcXHVBOUNGXFxcXHVBOUUwLVxcXFx1QTlFNFxcXFx1QTlFNi1cXFxcdUE5RUZcXFxcdUE5RkEtXFxcXHVBOUZFXFxcXHVBQTAwLVxcXFx1QUEyOFxcXFx1QUE0MC1cXFxcdUFBNDJcXFxcdUFBNDQtXFxcXHVBQTRCXFxcXHVBQTYwLVxcXFx1QUE3NlxcXFx1QUE3QVxcXFx1QUE3RS1cXFxcdUFBQUZcXFxcdUFBQjFcXFxcdUFBQjVcXFxcdUFBQjZcXFxcdUFBQjktXFxcXHVBQUJEXFxcXHVBQUMwXFxcXHVBQUMyXFxcXHVBQURCLVxcXFx1QUFERFxcXFx1QUFFMC1cXFxcdUFBRUFcXFxcdUFBRjItXFxcXHVBQUY0XFxcXHVBQjAxLVxcXFx1QUIwNlxcXFx1QUIwOS1cXFxcdUFCMEVcXFxcdUFCMTEtXFxcXHVBQjE2XFxcXHVBQjIwLVxcXFx1QUIyNlxcXFx1QUIyOC1cXFxcdUFCMkVcXFxcdUFCMzAtXFxcXHVBQjVBXFxcXHVBQjVDLVxcXFx1QUI1RlxcXFx1QUI2NFxcXFx1QUI2NVxcXFx1QUJDMC1cXFxcdUFCRTJcXFxcdUFDMDAtXFxcXHVEN0EzXFxcXHVEN0IwLVxcXFx1RDdDNlxcXFx1RDdDQi1cXFxcdUQ3RkJcXFxcdUY5MDAtXFxcXHVGQTZEXFxcXHVGQTcwLVxcXFx1RkFEOVxcXFx1RkIwMC1cXFxcdUZCMDZcXFxcdUZCMTMtXFxcXHVGQjE3XFxcXHVGQjFEXFxcXHVGQjFGLVxcXFx1RkIyOFxcXFx1RkIyQS1cXFxcdUZCMzZcXFxcdUZCMzgtXFxcXHVGQjNDXFxcXHVGQjNFXFxcXHVGQjQwXFxcXHVGQjQxXFxcXHVGQjQzXFxcXHVGQjQ0XFxcXHVGQjQ2LVxcXFx1RkJCMVxcXFx1RkJEMy1cXFxcdUZEM0RcXFxcdUZENTAtXFxcXHVGRDhGXFxcXHVGRDkyLVxcXFx1RkRDN1xcXFx1RkRGMC1cXFxcdUZERkJcXFxcdUZFNzAtXFxcXHVGRTc0XFxcXHVGRTc2LVxcXFx1RkVGQ1xcXFx1RkYyMS1cXFxcdUZGM0FcXFxcdUZGNDEtXFxcXHVGRjVBXFxcXHVGRjY2LVxcXFx1RkZCRVxcXFx1RkZDMi1cXFxcdUZGQzdcXFxcdUZGQ0EtXFxcXHVGRkNGXFxcXHVGRkQyLVxcXFx1RkZEN1xcXFx1RkZEQS1cXFxcdUZGRENdXCIpLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1taXNsZWFkaW5nLWNoYXJhY3Rlci1jbGFzc1xuICAgIFJlZ2V4Tm9uQXNjaWlJZGVudGlmaWVyUGFydCA9IG5ldyBSZWdFeHAoXCJbXFxcXHhBQVxcXFx4QjVcXFxceEJBXFxcXHhDMC1cXFxceEQ2XFxcXHhEOC1cXFxceEY2XFxcXHhGOC1cXFxcdTAyQzFcXFxcdTAyQzYtXFxcXHUwMkQxXFxcXHUwMkUwLVxcXFx1MDJFNFxcXFx1MDJFQ1xcXFx1MDJFRVxcXFx1MDMwMC1cXFxcdTAzNzRcXFxcdTAzNzZcXFxcdTAzNzdcXFxcdTAzN0EtXFxcXHUwMzdEXFxcXHUwMzdGXFxcXHUwMzg2XFxcXHUwMzg4LVxcXFx1MDM4QVxcXFx1MDM4Q1xcXFx1MDM4RS1cXFxcdTAzQTFcXFxcdTAzQTMtXFxcXHUwM0Y1XFxcXHUwM0Y3LVxcXFx1MDQ4MVxcXFx1MDQ4My1cXFxcdTA0ODdcXFxcdTA0OEEtXFxcXHUwNTJGXFxcXHUwNTMxLVxcXFx1MDU1NlxcXFx1MDU1OVxcXFx1MDU2MS1cXFxcdTA1ODdcXFxcdTA1OTEtXFxcXHUwNUJEXFxcXHUwNUJGXFxcXHUwNUMxXFxcXHUwNUMyXFxcXHUwNUM0XFxcXHUwNUM1XFxcXHUwNUM3XFxcXHUwNUQwLVxcXFx1MDVFQVxcXFx1MDVGMC1cXFxcdTA1RjJcXFxcdTA2MTAtXFxcXHUwNjFBXFxcXHUwNjIwLVxcXFx1MDY2OVxcXFx1MDY2RS1cXFxcdTA2RDNcXFxcdTA2RDUtXFxcXHUwNkRDXFxcXHUwNkRGLVxcXFx1MDZFOFxcXFx1MDZFQS1cXFxcdTA2RkNcXFxcdTA2RkZcXFxcdTA3MTAtXFxcXHUwNzRBXFxcXHUwNzRELVxcXFx1MDdCMVxcXFx1MDdDMC1cXFxcdTA3RjVcXFxcdTA3RkFcXFxcdTA4MDAtXFxcXHUwODJEXFxcXHUwODQwLVxcXFx1MDg1QlxcXFx1MDhBMC1cXFxcdTA4QjJcXFxcdTA4RTQtXFxcXHUwOTYzXFxcXHUwOTY2LVxcXFx1MDk2RlxcXFx1MDk3MS1cXFxcdTA5ODNcXFxcdTA5ODUtXFxcXHUwOThDXFxcXHUwOThGXFxcXHUwOTkwXFxcXHUwOTkzLVxcXFx1MDlBOFxcXFx1MDlBQS1cXFxcdTA5QjBcXFxcdTA5QjJcXFxcdTA5QjYtXFxcXHUwOUI5XFxcXHUwOUJDLVxcXFx1MDlDNFxcXFx1MDlDN1xcXFx1MDlDOFxcXFx1MDlDQi1cXFxcdTA5Q0VcXFxcdTA5RDdcXFxcdTA5RENcXFxcdTA5RERcXFxcdTA5REYtXFxcXHUwOUUzXFxcXHUwOUU2LVxcXFx1MDlGMVxcXFx1MEEwMS1cXFxcdTBBMDNcXFxcdTBBMDUtXFxcXHUwQTBBXFxcXHUwQTBGXFxcXHUwQTEwXFxcXHUwQTEzLVxcXFx1MEEyOFxcXFx1MEEyQS1cXFxcdTBBMzBcXFxcdTBBMzJcXFxcdTBBMzNcXFxcdTBBMzVcXFxcdTBBMzZcXFxcdTBBMzhcXFxcdTBBMzlcXFxcdTBBM0NcXFxcdTBBM0UtXFxcXHUwQTQyXFxcXHUwQTQ3XFxcXHUwQTQ4XFxcXHUwQTRCLVxcXFx1MEE0RFxcXFx1MEE1MVxcXFx1MEE1OS1cXFxcdTBBNUNcXFxcdTBBNUVcXFxcdTBBNjYtXFxcXHUwQTc1XFxcXHUwQTgxLVxcXFx1MEE4M1xcXFx1MEE4NS1cXFxcdTBBOERcXFxcdTBBOEYtXFxcXHUwQTkxXFxcXHUwQTkzLVxcXFx1MEFBOFxcXFx1MEFBQS1cXFxcdTBBQjBcXFxcdTBBQjJcXFxcdTBBQjNcXFxcdTBBQjUtXFxcXHUwQUI5XFxcXHUwQUJDLVxcXFx1MEFDNVxcXFx1MEFDNy1cXFxcdTBBQzlcXFxcdTBBQ0ItXFxcXHUwQUNEXFxcXHUwQUQwXFxcXHUwQUUwLVxcXFx1MEFFM1xcXFx1MEFFNi1cXFxcdTBBRUZcXFxcdTBCMDEtXFxcXHUwQjAzXFxcXHUwQjA1LVxcXFx1MEIwQ1xcXFx1MEIwRlxcXFx1MEIxMFxcXFx1MEIxMy1cXFxcdTBCMjhcXFxcdTBCMkEtXFxcXHUwQjMwXFxcXHUwQjMyXFxcXHUwQjMzXFxcXHUwQjM1LVxcXFx1MEIzOVxcXFx1MEIzQy1cXFxcdTBCNDRcXFxcdTBCNDdcXFxcdTBCNDhcXFxcdTBCNEItXFxcXHUwQjREXFxcXHUwQjU2XFxcXHUwQjU3XFxcXHUwQjVDXFxcXHUwQjVEXFxcXHUwQjVGLVxcXFx1MEI2M1xcXFx1MEI2Ni1cXFxcdTBCNkZcXFxcdTBCNzFcXFxcdTBCODJcXFxcdTBCODNcXFxcdTBCODUtXFxcXHUwQjhBXFxcXHUwQjhFLVxcXFx1MEI5MFxcXFx1MEI5Mi1cXFxcdTBCOTVcXFxcdTBCOTlcXFxcdTBCOUFcXFxcdTBCOUNcXFxcdTBCOUVcXFxcdTBCOUZcXFxcdTBCQTNcXFxcdTBCQTRcXFxcdTBCQTgtXFxcXHUwQkFBXFxcXHUwQkFFLVxcXFx1MEJCOVxcXFx1MEJCRS1cXFxcdTBCQzJcXFxcdTBCQzYtXFxcXHUwQkM4XFxcXHUwQkNBLVxcXFx1MEJDRFxcXFx1MEJEMFxcXFx1MEJEN1xcXFx1MEJFNi1cXFxcdTBCRUZcXFxcdTBDMDAtXFxcXHUwQzAzXFxcXHUwQzA1LVxcXFx1MEMwQ1xcXFx1MEMwRS1cXFxcdTBDMTBcXFxcdTBDMTItXFxcXHUwQzI4XFxcXHUwQzJBLVxcXFx1MEMzOVxcXFx1MEMzRC1cXFxcdTBDNDRcXFxcdTBDNDYtXFxcXHUwQzQ4XFxcXHUwQzRBLVxcXFx1MEM0RFxcXFx1MEM1NVxcXFx1MEM1NlxcXFx1MEM1OFxcXFx1MEM1OVxcXFx1MEM2MC1cXFxcdTBDNjNcXFxcdTBDNjYtXFxcXHUwQzZGXFxcXHUwQzgxLVxcXFx1MEM4M1xcXFx1MEM4NS1cXFxcdTBDOENcXFxcdTBDOEUtXFxcXHUwQzkwXFxcXHUwQzkyLVxcXFx1MENBOFxcXFx1MENBQS1cXFxcdTBDQjNcXFxcdTBDQjUtXFxcXHUwQ0I5XFxcXHUwQ0JDLVxcXFx1MENDNFxcXFx1MENDNi1cXFxcdTBDQzhcXFxcdTBDQ0EtXFxcXHUwQ0NEXFxcXHUwQ0Q1XFxcXHUwQ0Q2XFxcXHUwQ0RFXFxcXHUwQ0UwLVxcXFx1MENFM1xcXFx1MENFNi1cXFxcdTBDRUZcXFxcdTBDRjFcXFxcdTBDRjJcXFxcdTBEMDEtXFxcXHUwRDAzXFxcXHUwRDA1LVxcXFx1MEQwQ1xcXFx1MEQwRS1cXFxcdTBEMTBcXFxcdTBEMTItXFxcXHUwRDNBXFxcXHUwRDNELVxcXFx1MEQ0NFxcXFx1MEQ0Ni1cXFxcdTBENDhcXFxcdTBENEEtXFxcXHUwRDRFXFxcXHUwRDU3XFxcXHUwRDYwLVxcXFx1MEQ2M1xcXFx1MEQ2Ni1cXFxcdTBENkZcXFxcdTBEN0EtXFxcXHUwRDdGXFxcXHUwRDgyXFxcXHUwRDgzXFxcXHUwRDg1LVxcXFx1MEQ5NlxcXFx1MEQ5QS1cXFxcdTBEQjFcXFxcdTBEQjMtXFxcXHUwREJCXFxcXHUwREJEXFxcXHUwREMwLVxcXFx1MERDNlxcXFx1MERDQVxcXFx1MERDRi1cXFxcdTBERDRcXFxcdTBERDZcXFxcdTBERDgtXFxcXHUwRERGXFxcXHUwREU2LVxcXFx1MERFRlxcXFx1MERGMlxcXFx1MERGM1xcXFx1MEUwMS1cXFxcdTBFM0FcXFxcdTBFNDAtXFxcXHUwRTRFXFxcXHUwRTUwLVxcXFx1MEU1OVxcXFx1MEU4MVxcXFx1MEU4MlxcXFx1MEU4NFxcXFx1MEU4N1xcXFx1MEU4OFxcXFx1MEU4QVxcXFx1MEU4RFxcXFx1MEU5NC1cXFxcdTBFOTdcXFxcdTBFOTktXFxcXHUwRTlGXFxcXHUwRUExLVxcXFx1MEVBM1xcXFx1MEVBNVxcXFx1MEVBN1xcXFx1MEVBQVxcXFx1MEVBQlxcXFx1MEVBRC1cXFxcdTBFQjlcXFxcdTBFQkItXFxcXHUwRUJEXFxcXHUwRUMwLVxcXFx1MEVDNFxcXFx1MEVDNlxcXFx1MEVDOC1cXFxcdTBFQ0RcXFxcdTBFRDAtXFxcXHUwRUQ5XFxcXHUwRURDLVxcXFx1MEVERlxcXFx1MEYwMFxcXFx1MEYxOFxcXFx1MEYxOVxcXFx1MEYyMC1cXFxcdTBGMjlcXFxcdTBGMzVcXFxcdTBGMzdcXFxcdTBGMzlcXFxcdTBGM0UtXFxcXHUwRjQ3XFxcXHUwRjQ5LVxcXFx1MEY2Q1xcXFx1MEY3MS1cXFxcdTBGODRcXFxcdTBGODYtXFxcXHUwRjk3XFxcXHUwRjk5LVxcXFx1MEZCQ1xcXFx1MEZDNlxcXFx1MTAwMC1cXFxcdTEwNDlcXFxcdTEwNTAtXFxcXHUxMDlEXFxcXHUxMEEwLVxcXFx1MTBDNVxcXFx1MTBDN1xcXFx1MTBDRFxcXFx1MTBEMC1cXFxcdTEwRkFcXFxcdTEwRkMtXFxcXHUxMjQ4XFxcXHUxMjRBLVxcXFx1MTI0RFxcXFx1MTI1MC1cXFxcdTEyNTZcXFxcdTEyNThcXFxcdTEyNUEtXFxcXHUxMjVEXFxcXHUxMjYwLVxcXFx1MTI4OFxcXFx1MTI4QS1cXFxcdTEyOERcXFxcdTEyOTAtXFxcXHUxMkIwXFxcXHUxMkIyLVxcXFx1MTJCNVxcXFx1MTJCOC1cXFxcdTEyQkVcXFxcdTEyQzBcXFxcdTEyQzItXFxcXHUxMkM1XFxcXHUxMkM4LVxcXFx1MTJENlxcXFx1MTJEOC1cXFxcdTEzMTBcXFxcdTEzMTItXFxcXHUxMzE1XFxcXHUxMzE4LVxcXFx1MTM1QVxcXFx1MTM1RC1cXFxcdTEzNUZcXFxcdTEzODAtXFxcXHUxMzhGXFxcXHUxM0EwLVxcXFx1MTNGNFxcXFx1MTQwMS1cXFxcdTE2NkNcXFxcdTE2NkYtXFxcXHUxNjdGXFxcXHUxNjgxLVxcXFx1MTY5QVxcXFx1MTZBMC1cXFxcdTE2RUFcXFxcdTE2RUUtXFxcXHUxNkY4XFxcXHUxNzAwLVxcXFx1MTcwQ1xcXFx1MTcwRS1cXFxcdTE3MTRcXFxcdTE3MjAtXFxcXHUxNzM0XFxcXHUxNzQwLVxcXFx1MTc1M1xcXFx1MTc2MC1cXFxcdTE3NkNcXFxcdTE3NkUtXFxcXHUxNzcwXFxcXHUxNzcyXFxcXHUxNzczXFxcXHUxNzgwLVxcXFx1MTdEM1xcXFx1MTdEN1xcXFx1MTdEQ1xcXFx1MTdERFxcXFx1MTdFMC1cXFxcdTE3RTlcXFxcdTE4MEItXFxcXHUxODBEXFxcXHUxODEwLVxcXFx1MTgxOVxcXFx1MTgyMC1cXFxcdTE4NzdcXFxcdTE4ODAtXFxcXHUxOEFBXFxcXHUxOEIwLVxcXFx1MThGNVxcXFx1MTkwMC1cXFxcdTE5MUVcXFxcdTE5MjAtXFxcXHUxOTJCXFxcXHUxOTMwLVxcXFx1MTkzQlxcXFx1MTk0Ni1cXFxcdTE5NkRcXFxcdTE5NzAtXFxcXHUxOTc0XFxcXHUxOTgwLVxcXFx1MTlBQlxcXFx1MTlCMC1cXFxcdTE5QzlcXFxcdTE5RDAtXFxcXHUxOUQ5XFxcXHUxQTAwLVxcXFx1MUExQlxcXFx1MUEyMC1cXFxcdTFBNUVcXFxcdTFBNjAtXFxcXHUxQTdDXFxcXHUxQTdGLVxcXFx1MUE4OVxcXFx1MUE5MC1cXFxcdTFBOTlcXFxcdTFBQTdcXFxcdTFBQjAtXFxcXHUxQUJEXFxcXHUxQjAwLVxcXFx1MUI0QlxcXFx1MUI1MC1cXFxcdTFCNTlcXFxcdTFCNkItXFxcXHUxQjczXFxcXHUxQjgwLVxcXFx1MUJGM1xcXFx1MUMwMC1cXFxcdTFDMzdcXFxcdTFDNDAtXFxcXHUxQzQ5XFxcXHUxQzRELVxcXFx1MUM3RFxcXFx1MUNEMC1cXFxcdTFDRDJcXFxcdTFDRDQtXFxcXHUxQ0Y2XFxcXHUxQ0Y4XFxcXHUxQ0Y5XFxcXHUxRDAwLVxcXFx1MURGNVxcXFx1MURGQy1cXFxcdTFGMTVcXFxcdTFGMTgtXFxcXHUxRjFEXFxcXHUxRjIwLVxcXFx1MUY0NVxcXFx1MUY0OC1cXFxcdTFGNERcXFxcdTFGNTAtXFxcXHUxRjU3XFxcXHUxRjU5XFxcXHUxRjVCXFxcXHUxRjVEXFxcXHUxRjVGLVxcXFx1MUY3RFxcXFx1MUY4MC1cXFxcdTFGQjRcXFxcdTFGQjYtXFxcXHUxRkJDXFxcXHUxRkJFXFxcXHUxRkMyLVxcXFx1MUZDNFxcXFx1MUZDNi1cXFxcdTFGQ0NcXFxcdTFGRDAtXFxcXHUxRkQzXFxcXHUxRkQ2LVxcXFx1MUZEQlxcXFx1MUZFMC1cXFxcdTFGRUNcXFxcdTFGRjItXFxcXHUxRkY0XFxcXHUxRkY2LVxcXFx1MUZGQ1xcXFx1MjAwQ1xcXFx1MjAwRFxcXFx1MjAzRlxcXFx1MjA0MFxcXFx1MjA1NFxcXFx1MjA3MVxcXFx1MjA3RlxcXFx1MjA5MC1cXFxcdTIwOUNcXFxcdTIwRDAtXFxcXHUyMERDXFxcXHUyMEUxXFxcXHUyMEU1LVxcXFx1MjBGMFxcXFx1MjEwMlxcXFx1MjEwN1xcXFx1MjEwQS1cXFxcdTIxMTNcXFxcdTIxMTVcXFxcdTIxMTktXFxcXHUyMTFEXFxcXHUyMTI0XFxcXHUyMTI2XFxcXHUyMTI4XFxcXHUyMTJBLVxcXFx1MjEyRFxcXFx1MjEyRi1cXFxcdTIxMzlcXFxcdTIxM0MtXFxcXHUyMTNGXFxcXHUyMTQ1LVxcXFx1MjE0OVxcXFx1MjE0RVxcXFx1MjE2MC1cXFxcdTIxODhcXFxcdTJDMDAtXFxcXHUyQzJFXFxcXHUyQzMwLVxcXFx1MkM1RVxcXFx1MkM2MC1cXFxcdTJDRTRcXFxcdTJDRUItXFxcXHUyQ0YzXFxcXHUyRDAwLVxcXFx1MkQyNVxcXFx1MkQyN1xcXFx1MkQyRFxcXFx1MkQzMC1cXFxcdTJENjdcXFxcdTJENkZcXFxcdTJEN0YtXFxcXHUyRDk2XFxcXHUyREEwLVxcXFx1MkRBNlxcXFx1MkRBOC1cXFxcdTJEQUVcXFxcdTJEQjAtXFxcXHUyREI2XFxcXHUyREI4LVxcXFx1MkRCRVxcXFx1MkRDMC1cXFxcdTJEQzZcXFxcdTJEQzgtXFxcXHUyRENFXFxcXHUyREQwLVxcXFx1MkRENlxcXFx1MkREOC1cXFxcdTJEREVcXFxcdTJERTAtXFxcXHUyREZGXFxcXHUyRTJGXFxcXHUzMDA1LVxcXFx1MzAwN1xcXFx1MzAyMS1cXFxcdTMwMkZcXFxcdTMwMzEtXFxcXHUzMDM1XFxcXHUzMDM4LVxcXFx1MzAzQ1xcXFx1MzA0MS1cXFxcdTMwOTZcXFxcdTMwOTlcXFxcdTMwOUFcXFxcdTMwOUQtXFxcXHUzMDlGXFxcXHUzMEExLVxcXFx1MzBGQVxcXFx1MzBGQy1cXFxcdTMwRkZcXFxcdTMxMDUtXFxcXHUzMTJEXFxcXHUzMTMxLVxcXFx1MzE4RVxcXFx1MzFBMC1cXFxcdTMxQkFcXFxcdTMxRjAtXFxcXHUzMUZGXFxcXHUzNDAwLVxcXFx1NERCNVxcXFx1NEUwMC1cXFxcdTlGQ0NcXFxcdUEwMDAtXFxcXHVBNDhDXFxcXHVBNEQwLVxcXFx1QTRGRFxcXFx1QTUwMC1cXFxcdUE2MENcXFxcdUE2MTAtXFxcXHVBNjJCXFxcXHVBNjQwLVxcXFx1QTY2RlxcXFx1QTY3NC1cXFxcdUE2N0RcXFxcdUE2N0YtXFxcXHVBNjlEXFxcXHVBNjlGLVxcXFx1QTZGMVxcXFx1QTcxNy1cXFxcdUE3MUZcXFxcdUE3MjItXFxcXHVBNzg4XFxcXHVBNzhCLVxcXFx1QTc4RVxcXFx1QTc5MC1cXFxcdUE3QURcXFxcdUE3QjBcXFxcdUE3QjFcXFxcdUE3RjctXFxcXHVBODI3XFxcXHVBODQwLVxcXFx1QTg3M1xcXFx1QTg4MC1cXFxcdUE4QzRcXFxcdUE4RDAtXFxcXHVBOEQ5XFxcXHVBOEUwLVxcXFx1QThGN1xcXFx1QThGQlxcXFx1QTkwMC1cXFxcdUE5MkRcXFxcdUE5MzAtXFxcXHVBOTUzXFxcXHVBOTYwLVxcXFx1QTk3Q1xcXFx1QTk4MC1cXFxcdUE5QzBcXFxcdUE5Q0YtXFxcXHVBOUQ5XFxcXHVBOUUwLVxcXFx1QTlGRVxcXFx1QUEwMC1cXFxcdUFBMzZcXFxcdUFBNDAtXFxcXHVBQTREXFxcXHVBQTUwLVxcXFx1QUE1OVxcXFx1QUE2MC1cXFxcdUFBNzZcXFxcdUFBN0EtXFxcXHVBQUMyXFxcXHVBQURCLVxcXFx1QUFERFxcXFx1QUFFMC1cXFxcdUFBRUZcXFxcdUFBRjItXFxcXHVBQUY2XFxcXHVBQjAxLVxcXFx1QUIwNlxcXFx1QUIwOS1cXFxcdUFCMEVcXFxcdUFCMTEtXFxcXHVBQjE2XFxcXHVBQjIwLVxcXFx1QUIyNlxcXFx1QUIyOC1cXFxcdUFCMkVcXFxcdUFCMzAtXFxcXHVBQjVBXFxcXHVBQjVDLVxcXFx1QUI1RlxcXFx1QUI2NFxcXFx1QUI2NVxcXFx1QUJDMC1cXFxcdUFCRUFcXFxcdUFCRUNcXFxcdUFCRURcXFxcdUFCRjAtXFxcXHVBQkY5XFxcXHVBQzAwLVxcXFx1RDdBM1xcXFx1RDdCMC1cXFxcdUQ3QzZcXFxcdUQ3Q0ItXFxcXHVEN0ZCXFxcXHVGOTAwLVxcXFx1RkE2RFxcXFx1RkE3MC1cXFxcdUZBRDlcXFxcdUZCMDAtXFxcXHVGQjA2XFxcXHVGQjEzLVxcXFx1RkIxN1xcXFx1RkIxRC1cXFxcdUZCMjhcXFxcdUZCMkEtXFxcXHVGQjM2XFxcXHVGQjM4LVxcXFx1RkIzQ1xcXFx1RkIzRVxcXFx1RkI0MFxcXFx1RkI0MVxcXFx1RkI0M1xcXFx1RkI0NFxcXFx1RkI0Ni1cXFxcdUZCQjFcXFxcdUZCRDMtXFxcXHVGRDNEXFxcXHVGRDUwLVxcXFx1RkQ4RlxcXFx1RkQ5Mi1cXFxcdUZEQzdcXFxcdUZERjAtXFxcXHVGREZCXFxcXHVGRTAwLVxcXFx1RkUwRlxcXFx1RkUyMC1cXFxcdUZFMkRcXFxcdUZFMzNcXFxcdUZFMzRcXFxcdUZFNEQtXFxcXHVGRTRGXFxcXHVGRTcwLVxcXFx1RkU3NFxcXFx1RkU3Ni1cXFxcdUZFRkNcXFxcdUZGMTAtXFxcXHVGRjE5XFxcXHVGRjIxLVxcXFx1RkYzQVxcXFx1RkYzRlxcXFx1RkY0MS1cXFxcdUZGNUFcXFxcdUZGNjYtXFxcXHVGRkJFXFxcXHVGRkMyLVxcXFx1RkZDN1xcXFx1RkZDQS1cXFxcdUZGQ0ZcXFxcdUZGRDItXFxcXHVGRkQ3XFxcXHVGRkRBLVxcXFx1RkZEQ11cIik7XG5cbi8vIEVuc3VyZSB0aGUgY29uZGl0aW9uIGlzIHRydWUsIG90aGVyd2lzZSB0aHJvdyBhbiBlcnJvci5cbi8vIFRoaXMgaXMgb25seSB0byBoYXZlIGEgYmV0dGVyIGNvbnRyYWN0IHNlbWFudGljLCBpLmUuIGFub3RoZXIgc2FmZXR5IG5ldFxuLy8gdG8gY2F0Y2ggYSBsb2dpYyBlcnJvci4gVGhlIGNvbmRpdGlvbiBzaGFsbCBiZSBmdWxmaWxsZWQgaW4gbm9ybWFsIGNhc2UuXG4vLyBEbyBOT1QgdXNlIHRoaXMgdG8gZW5mb3JjZSBhIGNlcnRhaW4gY29uZGl0aW9uIG9uIGFueSB1c2VyIGlucHV0LlxuXG5mdW5jdGlvbiBhc3NlcnQoY29uZGl0aW9uLCBtZXNzYWdlKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGlmICghY29uZGl0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdBU1NFUlQ6ICcgKyBtZXNzYWdlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0RlY2ltYWxEaWdpdChjaCkge1xuICByZXR1cm4gKGNoID49IDB4MzAgJiYgY2ggPD0gMHgzOSk7IC8vIDAuLjlcbn1cblxuZnVuY3Rpb24gaXNIZXhEaWdpdChjaCkge1xuICByZXR1cm4gJzAxMjM0NTY3ODlhYmNkZWZBQkNERUYnLmluZGV4T2YoY2gpID49IDA7XG59XG5cbmZ1bmN0aW9uIGlzT2N0YWxEaWdpdChjaCkge1xuICByZXR1cm4gJzAxMjM0NTY3Jy5pbmRleE9mKGNoKSA+PSAwO1xufVxuXG4vLyA3LjIgV2hpdGUgU3BhY2VcblxuZnVuY3Rpb24gaXNXaGl0ZVNwYWNlKGNoKSB7XG4gIHJldHVybiAoY2ggPT09IDB4MjApIHx8IChjaCA9PT0gMHgwOSkgfHwgKGNoID09PSAweDBCKSB8fCAoY2ggPT09IDB4MEMpIHx8IChjaCA9PT0gMHhBMCkgfHxcbiAgICAoY2ggPj0gMHgxNjgwICYmIFsweDE2ODAsIDB4MTgwRSwgMHgyMDAwLCAweDIwMDEsIDB4MjAwMiwgMHgyMDAzLCAweDIwMDQsIDB4MjAwNSwgMHgyMDA2LCAweDIwMDcsIDB4MjAwOCwgMHgyMDA5LCAweDIwMEEsIDB4MjAyRiwgMHgyMDVGLCAweDMwMDAsIDB4RkVGRl0uaW5kZXhPZihjaCkgPj0gMCk7XG59XG5cbi8vIDcuMyBMaW5lIFRlcm1pbmF0b3JzXG5cbmZ1bmN0aW9uIGlzTGluZVRlcm1pbmF0b3IoY2gpIHtcbiAgcmV0dXJuIChjaCA9PT0gMHgwQSkgfHwgKGNoID09PSAweDBEKSB8fCAoY2ggPT09IDB4MjAyOCkgfHwgKGNoID09PSAweDIwMjkpO1xufVxuXG4vLyA3LjYgSWRlbnRpZmllciBOYW1lcyBhbmQgSWRlbnRpZmllcnNcblxuZnVuY3Rpb24gaXNJZGVudGlmaWVyU3RhcnQoY2gpIHtcbiAgcmV0dXJuIChjaCA9PT0gMHgyNCkgfHwgKGNoID09PSAweDVGKSB8fCAvLyAkIChkb2xsYXIpIGFuZCBfICh1bmRlcnNjb3JlKVxuICAgIChjaCA+PSAweDQxICYmIGNoIDw9IDB4NUEpIHx8IC8vIEEuLlpcbiAgICAoY2ggPj0gMHg2MSAmJiBjaCA8PSAweDdBKSB8fCAvLyBhLi56XG4gICAgKGNoID09PSAweDVDKSB8fCAvLyBcXCAoYmFja3NsYXNoKVxuICAgICgoY2ggPj0gMHg4MCkgJiYgUmVnZXhOb25Bc2NpaUlkZW50aWZpZXJTdGFydC50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpKSk7XG59XG5cbmZ1bmN0aW9uIGlzSWRlbnRpZmllclBhcnQoY2gpIHtcbiAgcmV0dXJuIChjaCA9PT0gMHgyNCkgfHwgKGNoID09PSAweDVGKSB8fCAvLyAkIChkb2xsYXIpIGFuZCBfICh1bmRlcnNjb3JlKVxuICAgIChjaCA+PSAweDQxICYmIGNoIDw9IDB4NUEpIHx8IC8vIEEuLlpcbiAgICAoY2ggPj0gMHg2MSAmJiBjaCA8PSAweDdBKSB8fCAvLyBhLi56XG4gICAgKGNoID49IDB4MzAgJiYgY2ggPD0gMHgzOSkgfHwgLy8gMC4uOVxuICAgIChjaCA9PT0gMHg1QykgfHwgLy8gXFwgKGJhY2tzbGFzaClcbiAgICAoKGNoID49IDB4ODApICYmIFJlZ2V4Tm9uQXNjaWlJZGVudGlmaWVyUGFydC50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpKSk7XG59XG5cbi8vIDcuNi4xLjEgS2V5d29yZHNcblxudmFyIGtleXdvcmRzID0ge1xuICAnaWYnOjEsICdpbic6MSwgJ2RvJzoxLFxuICAndmFyJzoxLCAnZm9yJzoxLCAnbmV3JzoxLCAndHJ5JzoxLCAnbGV0JzoxLFxuICAndGhpcyc6MSwgJ2Vsc2UnOjEsICdjYXNlJzoxLCAndm9pZCc6MSwgJ3dpdGgnOjEsICdlbnVtJzoxLFxuICAnd2hpbGUnOjEsICdicmVhayc6MSwgJ2NhdGNoJzoxLCAndGhyb3cnOjEsICdjb25zdCc6MSwgJ3lpZWxkJzoxLCAnY2xhc3MnOjEsICdzdXBlcic6MSxcbiAgJ3JldHVybic6MSwgJ3R5cGVvZic6MSwgJ2RlbGV0ZSc6MSwgJ3N3aXRjaCc6MSwgJ2V4cG9ydCc6MSwgJ2ltcG9ydCc6MSwgJ3B1YmxpYyc6MSwgJ3N0YXRpYyc6MSxcbiAgJ2RlZmF1bHQnOjEsICdmaW5hbGx5JzoxLCAnZXh0ZW5kcyc6MSwgJ3BhY2thZ2UnOjEsICdwcml2YXRlJzoxLFxuICAnZnVuY3Rpb24nOjEsICdjb250aW51ZSc6MSwgJ2RlYnVnZ2VyJzoxLFxuICAnaW50ZXJmYWNlJzoxLCAncHJvdGVjdGVkJzoxLFxuICAnaW5zdGFuY2VvZic6MSwgJ2ltcGxlbWVudHMnOjFcbn07XG5cbmZ1bmN0aW9uIHNraXBDb21tZW50KCkge1xuICB2YXIgY2g7XG5cbiAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG5cbiAgICBpZiAoaXNXaGl0ZVNwYWNlKGNoKSB8fCBpc0xpbmVUZXJtaW5hdG9yKGNoKSkge1xuICAgICAgKytpbmRleDtcbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNjYW5IZXhFc2NhcGUocHJlZml4KSB7XG4gIHZhciBpLCBsZW4sIGNoLCBjb2RlID0gMDtcblxuICBsZW4gPSAocHJlZml4ID09PSAndScpID8gNCA6IDI7XG4gIGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIGlmIChpbmRleCA8IGxlbmd0aCAmJiBpc0hleERpZ2l0KHNvdXJjZVtpbmRleF0pKSB7XG4gICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTtcbiAgICAgIGNvZGUgPSBjb2RlICogMTYgKyAnMDEyMzQ1Njc4OWFiY2RlZicuaW5kZXhPZihjaC50b0xvd2VyQ2FzZSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZVVuZXhwZWN0ZWRUb2tlbiwgSUxMRUdBTCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xufVxuXG5mdW5jdGlvbiBzY2FuVW5pY29kZUNvZGVQb2ludEVzY2FwZSgpIHtcbiAgdmFyIGNoLCBjb2RlLCBjdTEsIGN1MjtcblxuICBjaCA9IHNvdXJjZVtpbmRleF07XG4gIGNvZGUgPSAwO1xuXG4gIC8vIEF0IGxlYXN0LCBvbmUgaGV4IGRpZ2l0IGlzIHJlcXVpcmVkLlxuICBpZiAoY2ggPT09ICd9Jykge1xuICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VVbmV4cGVjdGVkVG9rZW4sIElMTEVHQUwpO1xuICB9XG5cbiAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgY2ggPSBzb3VyY2VbaW5kZXgrK107XG4gICAgaWYgKCFpc0hleERpZ2l0KGNoKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvZGUgPSBjb2RlICogMTYgKyAnMDEyMzQ1Njc4OWFiY2RlZicuaW5kZXhPZihjaC50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuXG4gIGlmIChjb2RlID4gMHgxMEZGRkYgfHwgY2ggIT09ICd9Jykge1xuICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VVbmV4cGVjdGVkVG9rZW4sIElMTEVHQUwpO1xuICB9XG5cbiAgLy8gVVRGLTE2IEVuY29kaW5nXG4gIGlmIChjb2RlIDw9IDB4RkZGRikge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xuICB9XG4gIGN1MSA9ICgoY29kZSAtIDB4MTAwMDApID4+IDEwKSArIDB4RDgwMDtcbiAgY3UyID0gKChjb2RlIC0gMHgxMDAwMCkgJiAxMDIzKSArIDB4REMwMDtcbiAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY3UxLCBjdTIpO1xufVxuXG5mdW5jdGlvbiBnZXRFc2NhcGVkSWRlbnRpZmllcigpIHtcbiAgdmFyIGNoLCBpZDtcblxuICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KyspO1xuICBpZCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpO1xuXG4gIC8vICdcXHUnIChVKzAwNUMsIFUrMDA3NSkgZGVub3RlcyBhbiBlc2NhcGVkIGNoYXJhY3Rlci5cbiAgaWYgKGNoID09PSAweDVDKSB7XG4gICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSAhPT0gMHg3NSkge1xuICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZVVuZXhwZWN0ZWRUb2tlbiwgSUxMRUdBTCk7XG4gICAgfVxuICAgICsraW5kZXg7XG4gICAgY2ggPSBzY2FuSGV4RXNjYXBlKCd1Jyk7XG4gICAgaWYgKCFjaCB8fCBjaCA9PT0gJ1xcXFwnIHx8ICFpc0lkZW50aWZpZXJTdGFydChjaC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZVVuZXhwZWN0ZWRUb2tlbiwgSUxMRUdBTCk7XG4gICAgfVxuICAgIGlkID0gY2g7XG4gIH1cblxuICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICBpZiAoIWlzSWRlbnRpZmllclBhcnQoY2gpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgKytpbmRleDtcbiAgICBpZCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTtcblxuICAgIC8vICdcXHUnIChVKzAwNUMsIFUrMDA3NSkgZGVub3RlcyBhbiBlc2NhcGVkIGNoYXJhY3Rlci5cbiAgICBpZiAoY2ggPT09IDB4NUMpIHtcbiAgICAgIGlkID0gaWQuc3Vic3RyKDAsIGlkLmxlbmd0aCAtIDEpO1xuICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSAhPT0gMHg3NSkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlVW5leHBlY3RlZFRva2VuLCBJTExFR0FMKTtcbiAgICAgIH1cbiAgICAgICsraW5kZXg7XG4gICAgICBjaCA9IHNjYW5IZXhFc2NhcGUoJ3UnKTtcbiAgICAgIGlmICghY2ggfHwgY2ggPT09ICdcXFxcJyB8fCAhaXNJZGVudGlmaWVyUGFydChjaC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlVW5leHBlY3RlZFRva2VuLCBJTExFR0FMKTtcbiAgICAgIH1cbiAgICAgIGlkICs9IGNoO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpZDtcbn1cblxuZnVuY3Rpb24gZ2V0SWRlbnRpZmllcigpIHtcbiAgdmFyIHN0YXJ0LCBjaDtcblxuICBzdGFydCA9IGluZGV4Kys7XG4gIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgIGlmIChjaCA9PT0gMHg1Qykge1xuICAgICAgLy8gQmxhY2tzbGFzaCAoVSswMDVDKSBtYXJrcyBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZS5cbiAgICAgIGluZGV4ID0gc3RhcnQ7XG4gICAgICByZXR1cm4gZ2V0RXNjYXBlZElkZW50aWZpZXIoKTtcbiAgICB9XG4gICAgaWYgKGlzSWRlbnRpZmllclBhcnQoY2gpKSB7XG4gICAgICArK2luZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc291cmNlLnNsaWNlKHN0YXJ0LCBpbmRleCk7XG59XG5cbmZ1bmN0aW9uIHNjYW5JZGVudGlmaWVyKCkge1xuICB2YXIgc3RhcnQsIGlkLCB0eXBlO1xuXG4gIHN0YXJ0ID0gaW5kZXg7XG5cbiAgLy8gQmFja3NsYXNoIChVKzAwNUMpIHN0YXJ0cyBhbiBlc2NhcGVkIGNoYXJhY3Rlci5cbiAgaWQgPSAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDVDKSA/IGdldEVzY2FwZWRJZGVudGlmaWVyKCkgOiBnZXRJZGVudGlmaWVyKCk7XG5cbiAgLy8gVGhlcmUgaXMgbm8ga2V5d29yZCBvciBsaXRlcmFsIHdpdGggb25seSBvbmUgY2hhcmFjdGVyLlxuICAvLyBUaHVzLCBpdCBtdXN0IGJlIGFuIGlkZW50aWZpZXIuXG4gIGlmIChpZC5sZW5ndGggPT09IDEpIHtcbiAgICB0eXBlID0gVG9rZW5JZGVudGlmaWVyO1xuICB9IGVsc2UgaWYgKGtleXdvcmRzLmhhc093blByb3BlcnR5KGlkKSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgIHR5cGUgPSBUb2tlbktleXdvcmQ7XG4gIH0gZWxzZSBpZiAoaWQgPT09ICdudWxsJykge1xuICAgIHR5cGUgPSBUb2tlbk51bGxMaXRlcmFsO1xuICB9IGVsc2UgaWYgKGlkID09PSAndHJ1ZScgfHwgaWQgPT09ICdmYWxzZScpIHtcbiAgICB0eXBlID0gVG9rZW5Cb29sZWFuTGl0ZXJhbDtcbiAgfSBlbHNlIHtcbiAgICB0eXBlID0gVG9rZW5JZGVudGlmaWVyO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiB0eXBlLFxuICAgIHZhbHVlOiBpZCxcbiAgICBzdGFydDogc3RhcnQsXG4gICAgZW5kOiBpbmRleFxuICB9O1xufVxuXG4vLyA3LjcgUHVuY3R1YXRvcnNcblxuZnVuY3Rpb24gc2NhblB1bmN0dWF0b3IoKSB7XG4gIHZhciBzdGFydCA9IGluZGV4LFxuICAgIGNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCksXG4gICAgY29kZTIsXG4gICAgY2gxID0gc291cmNlW2luZGV4XSxcbiAgICBjaDIsXG4gICAgY2gzLFxuICAgIGNoNDtcblxuICBzd2l0Y2ggKGNvZGUpIHtcblxuICAgIC8vIENoZWNrIGZvciBtb3N0IGNvbW1vbiBzaW5nbGUtY2hhcmFjdGVyIHB1bmN0dWF0b3JzLlxuICAgIGNhc2UgMHgyRTogLy8gLiBkb3RcbiAgICBjYXNlIDB4Mjg6IC8vICggb3BlbiBicmFja2V0XG4gICAgY2FzZSAweDI5OiAvLyApIGNsb3NlIGJyYWNrZXRcbiAgICBjYXNlIDB4M0I6IC8vIDsgc2VtaWNvbG9uXG4gICAgY2FzZSAweDJDOiAvLyAsIGNvbW1hXG4gICAgY2FzZSAweDdCOiAvLyB7IG9wZW4gY3VybHkgYnJhY2VcbiAgICBjYXNlIDB4N0Q6IC8vIH0gY2xvc2UgY3VybHkgYnJhY2VcbiAgICBjYXNlIDB4NUI6IC8vIFtcbiAgICBjYXNlIDB4NUQ6IC8vIF1cbiAgICBjYXNlIDB4M0E6IC8vIDpcbiAgICBjYXNlIDB4M0Y6IC8vID9cbiAgICBjYXNlIDB4N0U6IC8vIH5cbiAgICAgICsraW5kZXg7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBUb2tlblB1bmN0dWF0b3IsXG4gICAgICAgIHZhbHVlOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpLFxuICAgICAgICBzdGFydDogc3RhcnQsXG4gICAgICAgIGVuZDogaW5kZXhcbiAgICAgIH07XG5cbiAgICBkZWZhdWx0OlxuICAgICAgY29kZTIgPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDEpO1xuXG4gICAgICAvLyAnPScgKFUrMDAzRCkgbWFya3MgYW4gYXNzaWdubWVudCBvciBjb21wYXJpc29uIG9wZXJhdG9yLlxuICAgICAgaWYgKGNvZGUyID09PSAweDNEKSB7XG4gICAgICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgICAgIGNhc2UgMHgyQjogLy8gK1xuICAgICAgICAgIGNhc2UgMHgyRDogLy8gLVxuICAgICAgICAgIGNhc2UgMHgyRjogLy8gL1xuICAgICAgICAgIGNhc2UgMHgzQzogLy8gPFxuICAgICAgICAgIGNhc2UgMHgzRTogLy8gPlxuICAgICAgICAgIGNhc2UgMHg1RTogLy8gXlxuICAgICAgICAgIGNhc2UgMHg3QzogLy8gfFxuICAgICAgICAgIGNhc2UgMHgyNTogLy8gJVxuICAgICAgICAgIGNhc2UgMHgyNjogLy8gJlxuICAgICAgICAgIGNhc2UgMHgyQTogLy8gKlxuICAgICAgICAgICAgaW5kZXggKz0gMjtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHR5cGU6IFRva2VuUHVuY3R1YXRvcixcbiAgICAgICAgICAgICAgdmFsdWU6IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSkgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUyKSxcbiAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LFxuICAgICAgICAgICAgICBlbmQ6IGluZGV4XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgY2FzZSAweDIxOiAvLyAhXG4gICAgICAgICAgY2FzZSAweDNEOiAvLyA9XG4gICAgICAgICAgICBpbmRleCArPSAyO1xuXG4gICAgICAgICAgICAvLyAhPT0gYW5kID09PVxuICAgICAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMHgzRCkge1xuICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdHlwZTogVG9rZW5QdW5jdHVhdG9yLFxuICAgICAgICAgICAgICB2YWx1ZTogc291cmNlLnNsaWNlKHN0YXJ0LCBpbmRleCksXG4gICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgICAgICAgZW5kOiBpbmRleFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICB9XG5cbiAgLy8gNC1jaGFyYWN0ZXIgcHVuY3R1YXRvcjogPj4+PVxuXG4gIGNoNCA9IHNvdXJjZS5zdWJzdHIoaW5kZXgsIDQpO1xuXG4gIGlmIChjaDQgPT09ICc+Pj49Jykge1xuICAgIGluZGV4ICs9IDQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFRva2VuUHVuY3R1YXRvcixcbiAgICAgIHZhbHVlOiBjaDQsXG4gICAgICBzdGFydDogc3RhcnQsXG4gICAgICBlbmQ6IGluZGV4XG4gICAgfTtcbiAgfVxuXG4gIC8vIDMtY2hhcmFjdGVyIHB1bmN0dWF0b3JzOiA9PT0gIT09ID4+PiA8PD0gPj49XG5cbiAgY2gzID0gY2g0LnN1YnN0cigwLCAzKTtcblxuICBpZiAoY2gzID09PSAnPj4+JyB8fCBjaDMgPT09ICc8PD0nIHx8IGNoMyA9PT0gJz4+PScpIHtcbiAgICBpbmRleCArPSAzO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBUb2tlblB1bmN0dWF0b3IsXG4gICAgICB2YWx1ZTogY2gzLFxuICAgICAgc3RhcnQ6IHN0YXJ0LFxuICAgICAgZW5kOiBpbmRleFxuICAgIH07XG4gIH1cblxuICAvLyBPdGhlciAyLWNoYXJhY3RlciBwdW5jdHVhdG9yczogKysgLS0gPDwgPj4gJiYgfHxcbiAgY2gyID0gY2gzLnN1YnN0cigwLCAyKTtcblxuICBpZiAoKGNoMSA9PT0gY2gyWzFdICYmICgnKy08PiZ8Jy5pbmRleE9mKGNoMSkgPj0gMCkpIHx8IGNoMiA9PT0gJz0+Jykge1xuICAgIGluZGV4ICs9IDI7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFRva2VuUHVuY3R1YXRvcixcbiAgICAgIHZhbHVlOiBjaDIsXG4gICAgICBzdGFydDogc3RhcnQsXG4gICAgICBlbmQ6IGluZGV4XG4gICAgfTtcbiAgfVxuXG4gIC8vIDEtY2hhcmFjdGVyIHB1bmN0dWF0b3JzOiA8ID4gPSAhICsgLSAqICUgJiB8IF4gL1xuXG4gIGlmICgnPD49ISstKiUmfF4vJy5pbmRleE9mKGNoMSkgPj0gMCkge1xuICAgICsraW5kZXg7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFRva2VuUHVuY3R1YXRvcixcbiAgICAgIHZhbHVlOiBjaDEsXG4gICAgICBzdGFydDogc3RhcnQsXG4gICAgICBlbmQ6IGluZGV4XG4gICAgfTtcbiAgfVxuXG4gIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VVbmV4cGVjdGVkVG9rZW4sIElMTEVHQUwpO1xufVxuXG4vLyA3LjguMyBOdW1lcmljIExpdGVyYWxzXG5cbmZ1bmN0aW9uIHNjYW5IZXhMaXRlcmFsKHN0YXJ0KSB7XG4gIHZhciBudW1iZXIgPSAnJztcblxuICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAoIWlzSGV4RGlnaXQoc291cmNlW2luZGV4XSkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdO1xuICB9XG5cbiAgaWYgKG51bWJlci5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlVW5leHBlY3RlZFRva2VuLCBJTExFR0FMKTtcbiAgfVxuXG4gIGlmIChpc0lkZW50aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZVVuZXhwZWN0ZWRUb2tlbiwgSUxMRUdBTCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHR5cGU6IFRva2VuTnVtZXJpY0xpdGVyYWwsXG4gICAgdmFsdWU6IHBhcnNlSW50KCcweCcgKyBudW1iZXIsIDE2KSxcbiAgICBzdGFydDogc3RhcnQsXG4gICAgZW5kOiBpbmRleFxuICB9O1xufVxuXG5mdW5jdGlvbiBzY2FuT2N0YWxMaXRlcmFsKHN0YXJ0KSB7XG4gIHZhciBudW1iZXIgPSAnMCcgKyBzb3VyY2VbaW5kZXgrK107XG4gIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmICghaXNPY3RhbERpZ2l0KHNvdXJjZVtpbmRleF0pKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTtcbiAgfVxuXG4gIGlmIChpc0lkZW50aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpIHx8IGlzRGVjaW1hbERpZ2l0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHtcbiAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlVW5leHBlY3RlZFRva2VuLCBJTExFR0FMKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogVG9rZW5OdW1lcmljTGl0ZXJhbCxcbiAgICB2YWx1ZTogcGFyc2VJbnQobnVtYmVyLCA4KSxcbiAgICBvY3RhbDogdHJ1ZSxcbiAgICBzdGFydDogc3RhcnQsXG4gICAgZW5kOiBpbmRleFxuICB9O1xufVxuXG5mdW5jdGlvbiBzY2FuTnVtZXJpY0xpdGVyYWwoKSB7XG4gIHZhciBudW1iZXIsIHN0YXJ0LCBjaDtcblxuICBjaCA9IHNvdXJjZVtpbmRleF07XG4gIGFzc2VydChpc0RlY2ltYWxEaWdpdChjaC5jaGFyQ29kZUF0KDApKSB8fCAoY2ggPT09ICcuJyksXG4gICAgJ051bWVyaWMgbGl0ZXJhbCBtdXN0IHN0YXJ0IHdpdGggYSBkZWNpbWFsIGRpZ2l0IG9yIGEgZGVjaW1hbCBwb2ludCcpO1xuXG4gIHN0YXJ0ID0gaW5kZXg7XG4gIG51bWJlciA9ICcnO1xuICBpZiAoY2ggIT09ICcuJykge1xuICAgIG51bWJlciA9IHNvdXJjZVtpbmRleCsrXTtcbiAgICBjaCA9IHNvdXJjZVtpbmRleF07XG5cbiAgICAvLyBIZXggbnVtYmVyIHN0YXJ0cyB3aXRoICcweCcuXG4gICAgLy8gT2N0YWwgbnVtYmVyIHN0YXJ0cyB3aXRoICcwJy5cbiAgICBpZiAobnVtYmVyID09PSAnMCcpIHtcbiAgICAgIGlmIChjaCA9PT0gJ3gnIHx8IGNoID09PSAnWCcpIHtcbiAgICAgICAgKytpbmRleDtcbiAgICAgICAgcmV0dXJuIHNjYW5IZXhMaXRlcmFsKHN0YXJ0KTtcbiAgICAgIH1cbiAgICAgIGlmIChpc09jdGFsRGlnaXQoY2gpKSB7XG4gICAgICAgIHJldHVybiBzY2FuT2N0YWxMaXRlcmFsKHN0YXJ0KTtcbiAgICAgIH1cblxuICAgICAgLy8gZGVjaW1hbCBudW1iZXIgc3RhcnRzIHdpdGggJzAnIHN1Y2ggYXMgJzA5JyBpcyBpbGxlZ2FsLlxuICAgICAgaWYgKGNoICYmIGlzRGVjaW1hbERpZ2l0KGNoLmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VVbmV4cGVjdGVkVG9rZW4sIElMTEVHQUwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHdoaWxlIChpc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdO1xuICAgIH1cbiAgICBjaCA9IHNvdXJjZVtpbmRleF07XG4gIH1cblxuICBpZiAoY2ggPT09ICcuJykge1xuICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107XG4gICAgd2hpbGUgKGlzRGVjaW1hbERpZ2l0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHtcbiAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107XG4gICAgfVxuICAgIGNoID0gc291cmNlW2luZGV4XTtcbiAgfVxuXG4gIGlmIChjaCA9PT0gJ2UnIHx8IGNoID09PSAnRScpIHtcbiAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdO1xuXG4gICAgY2ggPSBzb3VyY2VbaW5kZXhdO1xuICAgIGlmIChjaCA9PT0gJysnIHx8IGNoID09PSAnLScpIHtcbiAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107XG4gICAgfVxuICAgIGlmIChpc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICB3aGlsZSAoaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkge1xuICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlVW5leHBlY3RlZFRva2VuLCBJTExFR0FMKTtcbiAgICB9XG4gIH1cblxuICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkge1xuICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VVbmV4cGVjdGVkVG9rZW4sIElMTEVHQUwpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBUb2tlbk51bWVyaWNMaXRlcmFsLFxuICAgIHZhbHVlOiBwYXJzZUZsb2F0KG51bWJlciksXG4gICAgc3RhcnQ6IHN0YXJ0LFxuICAgIGVuZDogaW5kZXhcbiAgfTtcbn1cblxuLy8gNy44LjQgU3RyaW5nIExpdGVyYWxzXG5cbmZ1bmN0aW9uIHNjYW5TdHJpbmdMaXRlcmFsKCkge1xuICB2YXIgc3RyID0gJycsXG4gICAgcXVvdGUsIHN0YXJ0LCBjaCwgY29kZSwgb2N0YWwgPSBmYWxzZTtcblxuICBxdW90ZSA9IHNvdXJjZVtpbmRleF07XG4gIGFzc2VydCgocXVvdGUgPT09ICdcXCcnIHx8IHF1b3RlID09PSAnXCInKSxcbiAgICAnU3RyaW5nIGxpdGVyYWwgbXVzdCBzdGFydHMgd2l0aCBhIHF1b3RlJyk7XG5cbiAgc3RhcnQgPSBpbmRleDtcbiAgKytpbmRleDtcblxuICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTtcblxuICAgIGlmIChjaCA9PT0gcXVvdGUpIHtcbiAgICAgIHF1b3RlID0gJyc7XG4gICAgICBicmVhaztcbiAgICB9IGVsc2UgaWYgKGNoID09PSAnXFxcXCcpIHtcbiAgICAgIGNoID0gc291cmNlW2luZGV4KytdO1xuICAgICAgaWYgKCFjaCB8fCAhaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgICBzd2l0Y2ggKGNoKSB7XG4gICAgICAgICAgY2FzZSAndSc6XG4gICAgICAgICAgY2FzZSAneCc6XG4gICAgICAgICAgICBpZiAoc291cmNlW2luZGV4XSA9PT0gJ3snKSB7XG4gICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgIHN0ciArPSBzY2FuVW5pY29kZUNvZGVQb2ludEVzY2FwZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3RyICs9IHNjYW5IZXhFc2NhcGUoY2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnbic6XG4gICAgICAgICAgICBzdHIgKz0gJ1xcbic7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdyJzpcbiAgICAgICAgICAgIHN0ciArPSAnXFxyJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3QnOlxuICAgICAgICAgICAgc3RyICs9ICdcXHQnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnYic6XG4gICAgICAgICAgICBzdHIgKz0gJ1xcYic7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdmJzpcbiAgICAgICAgICAgIHN0ciArPSAnXFxmJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3YnOlxuICAgICAgICAgICAgc3RyICs9ICdcXHgwQic7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAoaXNPY3RhbERpZ2l0KGNoKSkge1xuICAgICAgICAgICAgICBjb2RlID0gJzAxMjM0NTY3Jy5pbmRleE9mKGNoKTtcblxuICAgICAgICAgICAgICAvLyBcXDAgaXMgbm90IG9jdGFsIGVzY2FwZSBzZXF1ZW5jZVxuICAgICAgICAgICAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgICAgICAgICAgIG9jdGFsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCAmJiBpc09jdGFsRGlnaXQoc291cmNlW2luZGV4XSkpIHtcbiAgICAgICAgICAgICAgICBvY3RhbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29kZSA9IGNvZGUgKiA4ICsgJzAxMjM0NTY3Jy5pbmRleE9mKHNvdXJjZVtpbmRleCsrXSk7XG5cbiAgICAgICAgICAgICAgICAvLyAzIGRpZ2l0cyBhcmUgb25seSBhbGxvd2VkIHdoZW4gc3RyaW5nIHN0YXJ0c1xuICAgICAgICAgICAgICAgIC8vIHdpdGggMCwgMSwgMiwgM1xuICAgICAgICAgICAgICAgIGlmICgnMDEyMycuaW5kZXhPZihjaCkgPj0gMCAmJlxuICAgICAgICAgICAgICAgICAgaW5kZXggPCBsZW5ndGggJiZcbiAgICAgICAgICAgICAgICAgIGlzT2N0YWxEaWdpdChzb3VyY2VbaW5kZXhdKSkge1xuICAgICAgICAgICAgICAgICAgY29kZSA9IGNvZGUgKiA4ICsgJzAxMjM0NTY3Jy5pbmRleE9mKHNvdXJjZVtpbmRleCsrXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3RyICs9IGNoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChjaCA9PT0gJ1xccicgJiYgc291cmNlW2luZGV4XSA9PT0gJ1xcbicpIHtcbiAgICAgICAgICArK2luZGV4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICBicmVhaztcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyICs9IGNoO1xuICAgIH1cbiAgfVxuXG4gIGlmIChxdW90ZSAhPT0gJycpIHtcbiAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlVW5leHBlY3RlZFRva2VuLCBJTExFR0FMKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogVG9rZW5TdHJpbmdMaXRlcmFsLFxuICAgIHZhbHVlOiBzdHIsXG4gICAgb2N0YWw6IG9jdGFsLFxuICAgIHN0YXJ0OiBzdGFydCxcbiAgICBlbmQ6IGluZGV4XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRlc3RSZWdFeHAocGF0dGVybiwgZmxhZ3MpIHtcbiAgdmFyIHRtcCA9IHBhdHRlcm47XG5cbiAgaWYgKGZsYWdzLmluZGV4T2YoJ3UnKSA+PSAwKSB7XG4gICAgLy8gUmVwbGFjZSBlYWNoIGFzdHJhbCBzeW1ib2wgYW5kIGV2ZXJ5IFVuaWNvZGUgY29kZSBwb2ludFxuICAgIC8vIGVzY2FwZSBzZXF1ZW5jZSB3aXRoIGEgc2luZ2xlIEFTQ0lJIHN5bWJvbCB0byBhdm9pZCB0aHJvd2luZyBvblxuICAgIC8vIHJlZ3VsYXIgZXhwcmVzc2lvbnMgdGhhdCBhcmUgb25seSB2YWxpZCBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZVxuICAgIC8vIGAvdWAgZmxhZy5cbiAgICAvLyBOb3RlOiByZXBsYWNpbmcgd2l0aCB0aGUgQVNDSUkgc3ltYm9sIGB4YCBtaWdodCBjYXVzZSBmYWxzZVxuICAgIC8vIG5lZ2F0aXZlcyBpbiB1bmxpa2VseSBzY2VuYXJpb3MuIEZvciBleGFtcGxlLCBgW1xcdXs2MX0tYl1gIGlzIGFcbiAgICAvLyBwZXJmZWN0bHkgdmFsaWQgcGF0dGVybiB0aGF0IGlzIGVxdWl2YWxlbnQgdG8gYFthLWJdYCwgYnV0IGl0XG4gICAgLy8gd291bGQgYmUgcmVwbGFjZWQgYnkgYFt4LWJdYCB3aGljaCB0aHJvd3MgYW4gZXJyb3IuXG4gICAgdG1wID0gdG1wXG4gICAgICAucmVwbGFjZSgvXFxcXHVcXHsoWzAtOWEtZkEtRl0rKVxcfS9nLCBmdW5jdGlvbigkMCwgJDEpIHtcbiAgICAgICAgaWYgKHBhcnNlSW50KCQxLCAxNikgPD0gMHgxMEZGRkYpIHtcbiAgICAgICAgICByZXR1cm4gJ3gnO1xuICAgICAgICB9XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VJbnZhbGlkUmVnRXhwKTtcbiAgICAgIH0pXG4gICAgICAucmVwbGFjZSgvW1xcdUQ4MDAtXFx1REJGRl1bXFx1REMwMC1cXHVERkZGXS9nLCAneCcpO1xuICB9XG5cbiAgLy8gRmlyc3QsIGRldGVjdCBpbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbnMuXG4gIHRyeSB7XG4gICAgbmV3IFJlZ0V4cCh0bXApO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZUludmFsaWRSZWdFeHApO1xuICB9XG5cbiAgLy8gUmV0dXJuIGEgcmVndWxhciBleHByZXNzaW9uIG9iamVjdCBmb3IgdGhpcyBwYXR0ZXJuLWZsYWcgcGFpciwgb3JcbiAgLy8gYG51bGxgIGluIGNhc2UgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgZG9lc24ndCBzdXBwb3J0IHRoZSBmbGFncyBpdFxuICAvLyB1c2VzLlxuICB0cnkge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKHBhdHRlcm4sIGZsYWdzKTtcbiAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2NhblJlZ0V4cEJvZHkoKSB7XG4gIHZhciBjaCwgc3RyLCBjbGFzc01hcmtlciwgdGVybWluYXRlZCwgYm9keTtcblxuICBjaCA9IHNvdXJjZVtpbmRleF07XG4gIGFzc2VydChjaCA9PT0gJy8nLCAnUmVndWxhciBleHByZXNzaW9uIGxpdGVyYWwgbXVzdCBzdGFydCB3aXRoIGEgc2xhc2gnKTtcbiAgc3RyID0gc291cmNlW2luZGV4KytdO1xuXG4gIGNsYXNzTWFya2VyID0gZmFsc2U7XG4gIHRlcm1pbmF0ZWQgPSBmYWxzZTtcbiAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgY2ggPSBzb3VyY2VbaW5kZXgrK107XG4gICAgc3RyICs9IGNoO1xuICAgIGlmIChjaCA9PT0gJ1xcXFwnKSB7XG4gICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTtcbiAgICAgIC8vIEVDTUEtMjYyIDcuOC41XG4gICAgICBpZiAoaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlVW50ZXJtaW5hdGVkUmVnRXhwKTtcbiAgICAgIH1cbiAgICAgIHN0ciArPSBjaDtcbiAgICB9IGVsc2UgaWYgKGlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHtcbiAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VVbnRlcm1pbmF0ZWRSZWdFeHApO1xuICAgIH0gZWxzZSBpZiAoY2xhc3NNYXJrZXIpIHtcbiAgICAgIGlmIChjaCA9PT0gJ10nKSB7XG4gICAgICAgIGNsYXNzTWFya2VyID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjaCA9PT0gJy8nKSB7XG4gICAgICAgIHRlcm1pbmF0ZWQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSBpZiAoY2ggPT09ICdbJykge1xuICAgICAgICBjbGFzc01hcmtlciA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKCF0ZXJtaW5hdGVkKSB7XG4gICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZVVudGVybWluYXRlZFJlZ0V4cCk7XG4gIH1cblxuICAvLyBFeGNsdWRlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoLlxuICBib2R5ID0gc3RyLnN1YnN0cigxLCBzdHIubGVuZ3RoIC0gMik7XG4gIHJldHVybiB7XG4gICAgdmFsdWU6IGJvZHksXG4gICAgbGl0ZXJhbDogc3RyXG4gIH07XG59XG5cbmZ1bmN0aW9uIHNjYW5SZWdFeHBGbGFncygpIHtcbiAgdmFyIGNoLCBzdHIsIGZsYWdzO1xuXG4gIHN0ciA9ICcnO1xuICBmbGFncyA9ICcnO1xuICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICBjaCA9IHNvdXJjZVtpbmRleF07XG4gICAgaWYgKCFpc0lkZW50aWZpZXJQYXJ0KGNoLmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICArK2luZGV4O1xuICAgIGlmIChjaCA9PT0gJ1xcXFwnICYmIGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlVW5leHBlY3RlZFRva2VuLCBJTExFR0FMKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmxhZ3MgKz0gY2g7XG4gICAgICBzdHIgKz0gY2g7XG4gICAgfVxuICB9XG5cbiAgaWYgKGZsYWdzLnNlYXJjaCgvW15naW11eV0vZykgPj0gMCkge1xuICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VJbnZhbGlkUmVnRXhwLCBmbGFncyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHZhbHVlOiBmbGFncyxcbiAgICBsaXRlcmFsOiBzdHJcbiAgfTtcbn1cblxuZnVuY3Rpb24gc2NhblJlZ0V4cCgpIHtcbiAgdmFyIHN0YXJ0LCBib2R5LCBmbGFncywgdmFsdWU7XG5cbiAgbG9va2FoZWFkID0gbnVsbDtcbiAgc2tpcENvbW1lbnQoKTtcbiAgc3RhcnQgPSBpbmRleDtcblxuICBib2R5ID0gc2NhblJlZ0V4cEJvZHkoKTtcbiAgZmxhZ3MgPSBzY2FuUmVnRXhwRmxhZ3MoKTtcbiAgdmFsdWUgPSB0ZXN0UmVnRXhwKGJvZHkudmFsdWUsIGZsYWdzLnZhbHVlKTtcblxuICByZXR1cm4ge1xuICAgIGxpdGVyYWw6IGJvZHkubGl0ZXJhbCArIGZsYWdzLmxpdGVyYWwsXG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIHJlZ2V4OiB7XG4gICAgICBwYXR0ZXJuOiBib2R5LnZhbHVlLFxuICAgICAgZmxhZ3M6IGZsYWdzLnZhbHVlXG4gICAgfSxcbiAgICBzdGFydDogc3RhcnQsXG4gICAgZW5kOiBpbmRleFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc0lkZW50aWZpZXJOYW1lKHRva2VuKSB7XG4gIHJldHVybiB0b2tlbi50eXBlID09PSBUb2tlbklkZW50aWZpZXIgfHxcbiAgICB0b2tlbi50eXBlID09PSBUb2tlbktleXdvcmQgfHxcbiAgICB0b2tlbi50eXBlID09PSBUb2tlbkJvb2xlYW5MaXRlcmFsIHx8XG4gICAgdG9rZW4udHlwZSA9PT0gVG9rZW5OdWxsTGl0ZXJhbDtcbn1cblxuZnVuY3Rpb24gYWR2YW5jZSgpIHtcbiAgdmFyIGNoO1xuXG4gIHNraXBDb21tZW50KCk7XG5cbiAgaWYgKGluZGV4ID49IGxlbmd0aCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBUb2tlbkVPRixcbiAgICAgIHN0YXJ0OiBpbmRleCxcbiAgICAgIGVuZDogaW5kZXhcbiAgICB9O1xuICB9XG5cbiAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG5cbiAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KGNoKSkge1xuICAgIHJldHVybiBzY2FuSWRlbnRpZmllcigpO1xuICB9XG5cbiAgLy8gVmVyeSBjb21tb246ICggYW5kICkgYW5kIDtcbiAgaWYgKGNoID09PSAweDI4IHx8IGNoID09PSAweDI5IHx8IGNoID09PSAweDNCKSB7XG4gICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7XG4gIH1cblxuICAvLyBTdHJpbmcgbGl0ZXJhbCBzdGFydHMgd2l0aCBzaW5nbGUgcXVvdGUgKFUrMDAyNykgb3IgZG91YmxlIHF1b3RlIChVKzAwMjIpLlxuICBpZiAoY2ggPT09IDB4MjcgfHwgY2ggPT09IDB4MjIpIHtcbiAgICByZXR1cm4gc2NhblN0cmluZ0xpdGVyYWwoKTtcbiAgfVxuXG5cbiAgLy8gRG90ICguKSBVKzAwMkUgY2FuIGFsc28gc3RhcnQgYSBmbG9hdGluZy1wb2ludCBudW1iZXIsIGhlbmNlIHRoZSBuZWVkXG4gIC8vIHRvIGNoZWNrIHRoZSBuZXh0IGNoYXJhY3Rlci5cbiAgaWYgKGNoID09PSAweDJFKSB7XG4gICAgaWYgKGlzRGVjaW1hbERpZ2l0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSkpKSB7XG4gICAgICByZXR1cm4gc2Nhbk51bWVyaWNMaXRlcmFsKCk7XG4gICAgfVxuICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpO1xuICB9XG5cbiAgaWYgKGlzRGVjaW1hbERpZ2l0KGNoKSkge1xuICAgIHJldHVybiBzY2FuTnVtZXJpY0xpdGVyYWwoKTtcbiAgfVxuXG4gIHJldHVybiBzY2FuUHVuY3R1YXRvcigpO1xufVxuXG5mdW5jdGlvbiBsZXgoKSB7XG4gIHZhciB0b2tlbjtcblxuICB0b2tlbiA9IGxvb2thaGVhZDtcbiAgaW5kZXggPSB0b2tlbi5lbmQ7XG5cbiAgbG9va2FoZWFkID0gYWR2YW5jZSgpO1xuXG4gIGluZGV4ID0gdG9rZW4uZW5kO1xuXG4gIHJldHVybiB0b2tlbjtcbn1cblxuZnVuY3Rpb24gcGVlaygpIHtcbiAgdmFyIHBvcztcblxuICBwb3MgPSBpbmRleDtcblxuICBsb29rYWhlYWQgPSBhZHZhbmNlKCk7XG4gIGluZGV4ID0gcG9zO1xufVxuXG5mdW5jdGlvbiBmaW5pc2hBcnJheUV4cHJlc3Npb24oZWxlbWVudHMpIHtcbiAgdmFyIG5vZGUgPSBuZXcgQVNUTm9kZShTeW50YXhBcnJheUV4cHJlc3Npb24pO1xuICBub2RlLmVsZW1lbnRzID0gZWxlbWVudHM7XG4gIHJldHVybiBub2RlO1xufVxuXG5mdW5jdGlvbiBmaW5pc2hCaW5hcnlFeHByZXNzaW9uKG9wZXJhdG9yLCBsZWZ0LCByaWdodCkge1xuICB2YXIgbm9kZSA9IG5ldyBBU1ROb2RlKChvcGVyYXRvciA9PT0gJ3x8JyB8fCBvcGVyYXRvciA9PT0gJyYmJykgPyBTeW50YXhMb2dpY2FsRXhwcmVzc2lvbiA6IFN5bnRheEJpbmFyeUV4cHJlc3Npb24pO1xuICBub2RlLm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gIG5vZGUubGVmdCA9IGxlZnQ7XG4gIG5vZGUucmlnaHQgPSByaWdodDtcbiAgcmV0dXJuIG5vZGU7XG59XG5cbmZ1bmN0aW9uIGZpbmlzaENhbGxFeHByZXNzaW9uKGNhbGxlZSwgYXJncykge1xuICB2YXIgbm9kZSA9IG5ldyBBU1ROb2RlKFN5bnRheENhbGxFeHByZXNzaW9uKTtcbiAgbm9kZS5jYWxsZWUgPSBjYWxsZWU7XG4gIG5vZGUuYXJndW1lbnRzID0gYXJncztcbiAgcmV0dXJuIG5vZGU7XG59XG5cbmZ1bmN0aW9uIGZpbmlzaENvbmRpdGlvbmFsRXhwcmVzc2lvbih0ZXN0LCBjb25zZXF1ZW50LCBhbHRlcm5hdGUpIHtcbiAgdmFyIG5vZGUgPSBuZXcgQVNUTm9kZShTeW50YXhDb25kaXRpb25hbEV4cHJlc3Npb24pO1xuICBub2RlLnRlc3QgPSB0ZXN0O1xuICBub2RlLmNvbnNlcXVlbnQgPSBjb25zZXF1ZW50O1xuICBub2RlLmFsdGVybmF0ZSA9IGFsdGVybmF0ZTtcbiAgcmV0dXJuIG5vZGU7XG59XG5cbmZ1bmN0aW9uIGZpbmlzaElkZW50aWZpZXIobmFtZSkge1xuICB2YXIgbm9kZSA9IG5ldyBBU1ROb2RlKFN5bnRheElkZW50aWZpZXIpO1xuICBub2RlLm5hbWUgPSBuYW1lO1xuICByZXR1cm4gbm9kZTtcbn1cblxuZnVuY3Rpb24gZmluaXNoTGl0ZXJhbCh0b2tlbikge1xuICB2YXIgbm9kZSA9IG5ldyBBU1ROb2RlKFN5bnRheExpdGVyYWwpO1xuICBub2RlLnZhbHVlID0gdG9rZW4udmFsdWU7XG4gIG5vZGUucmF3ID0gc291cmNlLnNsaWNlKHRva2VuLnN0YXJ0LCB0b2tlbi5lbmQpO1xuICBpZiAodG9rZW4ucmVnZXgpIHtcbiAgICBpZiAobm9kZS5yYXcgPT09ICcvLycpIHtcbiAgICAgIG5vZGUucmF3ID0gJy8oPzopLyc7XG4gICAgfVxuICAgIG5vZGUucmVnZXggPSB0b2tlbi5yZWdleDtcbiAgfVxuICByZXR1cm4gbm9kZTtcbn1cblxuZnVuY3Rpb24gZmluaXNoTWVtYmVyRXhwcmVzc2lvbihhY2Nlc3Nvciwgb2JqZWN0LCBwcm9wZXJ0eSkge1xuICB2YXIgbm9kZSA9IG5ldyBBU1ROb2RlKFN5bnRheE1lbWJlckV4cHJlc3Npb24pO1xuICBub2RlLmNvbXB1dGVkID0gYWNjZXNzb3IgPT09ICdbJztcbiAgbm9kZS5vYmplY3QgPSBvYmplY3Q7XG4gIG5vZGUucHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgaWYgKCFub2RlLmNvbXB1dGVkKSBwcm9wZXJ0eS5tZW1iZXIgPSB0cnVlO1xuICByZXR1cm4gbm9kZTtcbn1cblxuZnVuY3Rpb24gZmluaXNoT2JqZWN0RXhwcmVzc2lvbihwcm9wZXJ0aWVzKSB7XG4gIHZhciBub2RlID0gbmV3IEFTVE5vZGUoU3ludGF4T2JqZWN0RXhwcmVzc2lvbik7XG4gIG5vZGUucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gIHJldHVybiBub2RlO1xufVxuXG5mdW5jdGlvbiBmaW5pc2hQcm9wZXJ0eShraW5kLCBrZXksIHZhbHVlKSB7XG4gIHZhciBub2RlID0gbmV3IEFTVE5vZGUoU3ludGF4UHJvcGVydHkpO1xuICBub2RlLmtleSA9IGtleTtcbiAgbm9kZS52YWx1ZSA9IHZhbHVlO1xuICBub2RlLmtpbmQgPSBraW5kO1xuICByZXR1cm4gbm9kZTtcbn1cblxuZnVuY3Rpb24gZmluaXNoVW5hcnlFeHByZXNzaW9uKG9wZXJhdG9yLCBhcmd1bWVudCkge1xuICB2YXIgbm9kZSA9IG5ldyBBU1ROb2RlKFN5bnRheFVuYXJ5RXhwcmVzc2lvbik7XG4gIG5vZGUub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgbm9kZS5hcmd1bWVudCA9IGFyZ3VtZW50O1xuICBub2RlLnByZWZpeCA9IHRydWU7XG4gIHJldHVybiBub2RlO1xufVxuXG4vLyBUaHJvdyBhbiBleGNlcHRpb25cblxuZnVuY3Rpb24gdGhyb3dFcnJvcih0b2tlbiwgbWVzc2FnZUZvcm1hdCkge1xuICB2YXIgZXJyb3IsXG4gICAgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMiksXG4gICAgbXNnID0gbWVzc2FnZUZvcm1hdC5yZXBsYWNlKFxuICAgICAgLyUoXFxkKS9nLFxuICAgICAgZnVuY3Rpb24od2hvbGUsIGluZGV4KSB7XG4gICAgICAgIGFzc2VydChpbmRleCA8IGFyZ3MubGVuZ3RoLCAnTWVzc2FnZSByZWZlcmVuY2UgbXVzdCBiZSBpbiByYW5nZScpO1xuICAgICAgICByZXR1cm4gYXJnc1tpbmRleF07XG4gICAgICB9XG4gICAgKTtcblxuXG4gIGVycm9yID0gbmV3IEVycm9yKG1zZyk7XG4gIGVycm9yLmluZGV4ID0gaW5kZXg7XG4gIGVycm9yLmRlc2NyaXB0aW9uID0gbXNnO1xuICB0aHJvdyBlcnJvcjtcbn1cblxuLy8gVGhyb3cgYW4gZXhjZXB0aW9uIGJlY2F1c2Ugb2YgdGhlIHRva2VuLlxuXG5mdW5jdGlvbiB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pIHtcbiAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuRU9GKSB7XG4gICAgdGhyb3dFcnJvcih0b2tlbiwgTWVzc2FnZVVuZXhwZWN0ZWRFT1MpO1xuICB9XG5cbiAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuTnVtZXJpY0xpdGVyYWwpIHtcbiAgICB0aHJvd0Vycm9yKHRva2VuLCBNZXNzYWdlVW5leHBlY3RlZE51bWJlcik7XG4gIH1cblxuICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5TdHJpbmdMaXRlcmFsKSB7XG4gICAgdGhyb3dFcnJvcih0b2tlbiwgTWVzc2FnZVVuZXhwZWN0ZWRTdHJpbmcpO1xuICB9XG5cbiAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuSWRlbnRpZmllcikge1xuICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VVbmV4cGVjdGVkSWRlbnRpZmllcik7XG4gIH1cblxuICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5LZXl3b3JkKSB7XG4gICAgdGhyb3dFcnJvcih0b2tlbiwgTWVzc2FnZVVuZXhwZWN0ZWRSZXNlcnZlZCk7XG4gIH1cblxuICAvLyBCb29sZWFuTGl0ZXJhbCwgTnVsbExpdGVyYWwsIG9yIFB1bmN0dWF0b3IuXG4gIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VVbmV4cGVjdGVkVG9rZW4sIHRva2VuLnZhbHVlKTtcbn1cblxuLy8gRXhwZWN0IHRoZSBuZXh0IHRva2VuIHRvIG1hdGNoIHRoZSBzcGVjaWZpZWQgcHVuY3R1YXRvci5cbi8vIElmIG5vdCwgYW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duLlxuXG5mdW5jdGlvbiBleHBlY3QodmFsdWUpIHtcbiAgdmFyIHRva2VuID0gbGV4KCk7XG4gIGlmICh0b2tlbi50eXBlICE9PSBUb2tlblB1bmN0dWF0b3IgfHwgdG9rZW4udmFsdWUgIT09IHZhbHVlKSB7XG4gICAgdGhyb3dVbmV4cGVjdGVkKHRva2VuKTtcbiAgfVxufVxuXG4vLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgbmV4dCB0b2tlbiBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgcHVuY3R1YXRvci5cblxuZnVuY3Rpb24gbWF0Y2godmFsdWUpIHtcbiAgcmV0dXJuIGxvb2thaGVhZC50eXBlID09PSBUb2tlblB1bmN0dWF0b3IgJiYgbG9va2FoZWFkLnZhbHVlID09PSB2YWx1ZTtcbn1cblxuLy8gUmV0dXJuIHRydWUgaWYgdGhlIG5leHQgdG9rZW4gbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIGtleXdvcmRcblxuZnVuY3Rpb24gbWF0Y2hLZXl3b3JkKGtleXdvcmQpIHtcbiAgcmV0dXJuIGxvb2thaGVhZC50eXBlID09PSBUb2tlbktleXdvcmQgJiYgbG9va2FoZWFkLnZhbHVlID09PSBrZXl3b3JkO1xufVxuXG4vLyAxMS4xLjQgQXJyYXkgSW5pdGlhbGlzZXJcblxuZnVuY3Rpb24gcGFyc2VBcnJheUluaXRpYWxpc2VyKCkge1xuICB2YXIgZWxlbWVudHMgPSBbXTtcblxuICBpbmRleCA9IGxvb2thaGVhZC5zdGFydDtcbiAgZXhwZWN0KCdbJyk7XG5cbiAgd2hpbGUgKCFtYXRjaCgnXScpKSB7XG4gICAgaWYgKG1hdGNoKCcsJykpIHtcbiAgICAgIGxleCgpO1xuICAgICAgZWxlbWVudHMucHVzaChudWxsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbWVudHMucHVzaChwYXJzZUNvbmRpdGlvbmFsRXhwcmVzc2lvbigpKTtcblxuICAgICAgaWYgKCFtYXRjaCgnXScpKSB7XG4gICAgICAgIGV4cGVjdCgnLCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxleCgpO1xuXG4gIHJldHVybiBmaW5pc2hBcnJheUV4cHJlc3Npb24oZWxlbWVudHMpO1xufVxuXG4vLyAxMS4xLjUgT2JqZWN0IEluaXRpYWxpc2VyXG5cbmZ1bmN0aW9uIHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKSB7XG4gIHZhciB0b2tlbjtcblxuICBpbmRleCA9IGxvb2thaGVhZC5zdGFydDtcbiAgdG9rZW4gPSBsZXgoKTtcblxuICAvLyBOb3RlOiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5IGZyb20gcGFyc2VPYmplY3RQcm9wZXJ0eSgpLCB3aGVyZVxuICAvLyBFT0YgYW5kIFB1bmN0dWF0b3IgdG9rZW5zIGFyZSBhbHJlYWR5IGZpbHRlcmVkIG91dC5cblxuICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5TdHJpbmdMaXRlcmFsIHx8IHRva2VuLnR5cGUgPT09IFRva2VuTnVtZXJpY0xpdGVyYWwpIHtcbiAgICBpZiAodG9rZW4ub2N0YWwpIHtcbiAgICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VTdHJpY3RPY3RhbExpdGVyYWwpO1xuICAgIH1cbiAgICByZXR1cm4gZmluaXNoTGl0ZXJhbCh0b2tlbik7XG4gIH1cblxuICByZXR1cm4gZmluaXNoSWRlbnRpZmllcih0b2tlbi52YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlT2JqZWN0UHJvcGVydHkoKSB7XG4gIHZhciB0b2tlbiwga2V5LCBpZCwgdmFsdWU7XG5cbiAgaW5kZXggPSBsb29rYWhlYWQuc3RhcnQ7XG4gIHRva2VuID0gbG9va2FoZWFkO1xuXG4gIGlmICh0b2tlbi50eXBlID09PSBUb2tlbklkZW50aWZpZXIpIHtcbiAgICBpZCA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTtcbiAgICBleHBlY3QoJzonKTtcbiAgICB2YWx1ZSA9IHBhcnNlQ29uZGl0aW9uYWxFeHByZXNzaW9uKCk7XG4gICAgcmV0dXJuIGZpbmlzaFByb3BlcnR5KCdpbml0JywgaWQsIHZhbHVlKTtcbiAgfVxuICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5FT0YgfHwgdG9rZW4udHlwZSA9PT0gVG9rZW5QdW5jdHVhdG9yKSB7XG4gICAgdGhyb3dVbmV4cGVjdGVkKHRva2VuKTtcbiAgfSBlbHNlIHtcbiAgICBrZXkgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7XG4gICAgZXhwZWN0KCc6Jyk7XG4gICAgdmFsdWUgPSBwYXJzZUNvbmRpdGlvbmFsRXhwcmVzc2lvbigpO1xuICAgIHJldHVybiBmaW5pc2hQcm9wZXJ0eSgnaW5pdCcsIGtleSwgdmFsdWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlT2JqZWN0SW5pdGlhbGlzZXIoKSB7XG4gIHZhciBwcm9wZXJ0aWVzID0gW10sXG4gICAgcHJvcGVydHksIG5hbWUsIGtleSwgbWFwID0ge30sXG4gICAgdG9TdHJpbmcgPSBTdHJpbmc7XG5cbiAgaW5kZXggPSBsb29rYWhlYWQuc3RhcnQ7XG4gIGV4cGVjdCgneycpO1xuXG4gIHdoaWxlICghbWF0Y2goJ30nKSkge1xuICAgIHByb3BlcnR5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eSgpO1xuXG4gICAgaWYgKHByb3BlcnR5LmtleS50eXBlID09PSBTeW50YXhJZGVudGlmaWVyKSB7XG4gICAgICBuYW1lID0gcHJvcGVydHkua2V5Lm5hbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5hbWUgPSB0b1N0cmluZyhwcm9wZXJ0eS5rZXkudmFsdWUpO1xuICAgIH1cblxuICAgIGtleSA9ICckJyArIG5hbWU7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtYXAsIGtleSkpIHtcbiAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VTdHJpY3REdXBsaWNhdGVQcm9wZXJ0eSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1hcFtrZXldID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xuXG4gICAgaWYgKCFtYXRjaCgnfScpKSB7XG4gICAgICBleHBlY3QoJywnKTtcbiAgICB9XG4gIH1cblxuICBleHBlY3QoJ30nKTtcblxuICByZXR1cm4gZmluaXNoT2JqZWN0RXhwcmVzc2lvbihwcm9wZXJ0aWVzKTtcbn1cblxuLy8gMTEuMS42IFRoZSBHcm91cGluZyBPcGVyYXRvclxuXG5mdW5jdGlvbiBwYXJzZUdyb3VwRXhwcmVzc2lvbigpIHtcbiAgdmFyIGV4cHI7XG5cbiAgZXhwZWN0KCcoJyk7XG5cbiAgZXhwciA9IHBhcnNlRXhwcmVzc2lvbigpO1xuXG4gIGV4cGVjdCgnKScpO1xuXG4gIHJldHVybiBleHByO1xufVxuXG5cbi8vIDExLjEgUHJpbWFyeSBFeHByZXNzaW9uc1xuXG52YXIgbGVnYWxLZXl3b3JkcyA9IHtcbiAgXCJpZlwiOiAxLFxuICBcInRoaXNcIjogMVxufTtcblxuZnVuY3Rpb24gcGFyc2VQcmltYXJ5RXhwcmVzc2lvbigpIHtcbiAgdmFyIHR5cGUsIHRva2VuLCBleHByO1xuXG4gIGlmIChtYXRjaCgnKCcpKSB7XG4gICAgcmV0dXJuIHBhcnNlR3JvdXBFeHByZXNzaW9uKCk7XG4gIH1cblxuICBpZiAobWF0Y2goJ1snKSkge1xuICAgIHJldHVybiBwYXJzZUFycmF5SW5pdGlhbGlzZXIoKTtcbiAgfVxuXG4gIGlmIChtYXRjaCgneycpKSB7XG4gICAgcmV0dXJuIHBhcnNlT2JqZWN0SW5pdGlhbGlzZXIoKTtcbiAgfVxuXG4gIHR5cGUgPSBsb29rYWhlYWQudHlwZTtcbiAgaW5kZXggPSBsb29rYWhlYWQuc3RhcnQ7XG5cblxuICBpZiAodHlwZSA9PT0gVG9rZW5JZGVudGlmaWVyIHx8IGxlZ2FsS2V5d29yZHNbbG9va2FoZWFkLnZhbHVlXSkge1xuICAgIGV4cHIgPSBmaW5pc2hJZGVudGlmaWVyKGxleCgpLnZhbHVlKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSBUb2tlblN0cmluZ0xpdGVyYWwgfHwgdHlwZSA9PT0gVG9rZW5OdW1lcmljTGl0ZXJhbCkge1xuICAgIGlmIChsb29rYWhlYWQub2N0YWwpIHtcbiAgICAgIHRocm93RXJyb3IobG9va2FoZWFkLCBNZXNzYWdlU3RyaWN0T2N0YWxMaXRlcmFsKTtcbiAgICB9XG4gICAgZXhwciA9IGZpbmlzaExpdGVyYWwobGV4KCkpO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IFRva2VuS2V5d29yZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihESVNBQkxFRCk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9rZW5Cb29sZWFuTGl0ZXJhbCkge1xuICAgIHRva2VuID0gbGV4KCk7XG4gICAgdG9rZW4udmFsdWUgPSAodG9rZW4udmFsdWUgPT09ICd0cnVlJyk7XG4gICAgZXhwciA9IGZpbmlzaExpdGVyYWwodG9rZW4pO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IFRva2VuTnVsbExpdGVyYWwpIHtcbiAgICB0b2tlbiA9IGxleCgpO1xuICAgIHRva2VuLnZhbHVlID0gbnVsbDtcbiAgICBleHByID0gZmluaXNoTGl0ZXJhbCh0b2tlbik7XG4gIH0gZWxzZSBpZiAobWF0Y2goJy8nKSB8fCBtYXRjaCgnLz0nKSkge1xuICAgIGV4cHIgPSBmaW5pc2hMaXRlcmFsKHNjYW5SZWdFeHAoKSk7XG4gICAgcGVlaygpO1xuICB9IGVsc2Uge1xuICAgIHRocm93VW5leHBlY3RlZChsZXgoKSk7XG4gIH1cblxuICByZXR1cm4gZXhwcjtcbn1cblxuLy8gMTEuMiBMZWZ0LUhhbmQtU2lkZSBFeHByZXNzaW9uc1xuXG5mdW5jdGlvbiBwYXJzZUFyZ3VtZW50cygpIHtcbiAgdmFyIGFyZ3MgPSBbXTtcblxuICBleHBlY3QoJygnKTtcblxuICBpZiAoIW1hdGNoKCcpJykpIHtcbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGFyZ3MucHVzaChwYXJzZUNvbmRpdGlvbmFsRXhwcmVzc2lvbigpKTtcbiAgICAgIGlmIChtYXRjaCgnKScpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZXhwZWN0KCcsJyk7XG4gICAgfVxuICB9XG5cbiAgZXhwZWN0KCcpJyk7XG5cbiAgcmV0dXJuIGFyZ3M7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTm9uQ29tcHV0ZWRQcm9wZXJ0eSgpIHtcbiAgdmFyIHRva2VuO1xuICBpbmRleCA9IGxvb2thaGVhZC5zdGFydDtcbiAgdG9rZW4gPSBsZXgoKTtcblxuICBpZiAoIWlzSWRlbnRpZmllck5hbWUodG9rZW4pKSB7XG4gICAgdGhyb3dVbmV4cGVjdGVkKHRva2VuKTtcbiAgfVxuXG4gIHJldHVybiBmaW5pc2hJZGVudGlmaWVyKHRva2VuLnZhbHVlKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VOb25Db21wdXRlZE1lbWJlcigpIHtcbiAgZXhwZWN0KCcuJyk7XG5cbiAgcmV0dXJuIHBhcnNlTm9uQ29tcHV0ZWRQcm9wZXJ0eSgpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUNvbXB1dGVkTWVtYmVyKCkge1xuICB2YXIgZXhwcjtcblxuICBleHBlY3QoJ1snKTtcblxuICBleHByID0gcGFyc2VFeHByZXNzaW9uKCk7XG5cbiAgZXhwZWN0KCddJyk7XG5cbiAgcmV0dXJuIGV4cHI7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbkFsbG93Q2FsbCgpIHtcbiAgdmFyIGV4cHIsIGFyZ3MsIHByb3BlcnR5O1xuXG4gIGV4cHIgPSBwYXJzZVByaW1hcnlFeHByZXNzaW9uKCk7XG5cbiAgZm9yICg7Oykge1xuICAgIGlmIChtYXRjaCgnLicpKSB7XG4gICAgICBwcm9wZXJ0eSA9IHBhcnNlTm9uQ29tcHV0ZWRNZW1iZXIoKTtcbiAgICAgIGV4cHIgPSBmaW5pc2hNZW1iZXJFeHByZXNzaW9uKCcuJywgZXhwciwgcHJvcGVydHkpO1xuICAgIH0gZWxzZSBpZiAobWF0Y2goJygnKSkge1xuICAgICAgYXJncyA9IHBhcnNlQXJndW1lbnRzKCk7XG4gICAgICBleHByID0gZmluaXNoQ2FsbEV4cHJlc3Npb24oZXhwciwgYXJncyk7XG4gICAgfSBlbHNlIGlmIChtYXRjaCgnWycpKSB7XG4gICAgICBwcm9wZXJ0eSA9IHBhcnNlQ29tcHV0ZWRNZW1iZXIoKTtcbiAgICAgIGV4cHIgPSBmaW5pc2hNZW1iZXJFeHByZXNzaW9uKCdbJywgZXhwciwgcHJvcGVydHkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXhwcjtcbn1cblxuLy8gMTEuMyBQb3N0Zml4IEV4cHJlc3Npb25zXG5cbmZ1bmN0aW9uIHBhcnNlUG9zdGZpeEV4cHJlc3Npb24oKSB7XG4gIHZhciBleHByID0gcGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uQWxsb3dDYWxsKCk7XG5cbiAgaWYgKGxvb2thaGVhZC50eXBlID09PSBUb2tlblB1bmN0dWF0b3IpIHtcbiAgICBpZiAoKG1hdGNoKCcrKycpIHx8IG1hdGNoKCctLScpKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKERJU0FCTEVEKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXhwcjtcbn1cblxuLy8gMTEuNCBVbmFyeSBPcGVyYXRvcnNcblxuZnVuY3Rpb24gcGFyc2VVbmFyeUV4cHJlc3Npb24oKSB7XG4gIHZhciB0b2tlbiwgZXhwcjtcblxuICBpZiAobG9va2FoZWFkLnR5cGUgIT09IFRva2VuUHVuY3R1YXRvciAmJiBsb29rYWhlYWQudHlwZSAhPT0gVG9rZW5LZXl3b3JkKSB7XG4gICAgZXhwciA9IHBhcnNlUG9zdGZpeEV4cHJlc3Npb24oKTtcbiAgfSBlbHNlIGlmIChtYXRjaCgnKysnKSB8fCBtYXRjaCgnLS0nKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihESVNBQkxFRCk7XG4gIH0gZWxzZSBpZiAobWF0Y2goJysnKSB8fCBtYXRjaCgnLScpIHx8IG1hdGNoKCd+JykgfHwgbWF0Y2goJyEnKSkge1xuICAgIHRva2VuID0gbGV4KCk7XG4gICAgZXhwciA9IHBhcnNlVW5hcnlFeHByZXNzaW9uKCk7XG4gICAgZXhwciA9IGZpbmlzaFVuYXJ5RXhwcmVzc2lvbih0b2tlbi52YWx1ZSwgZXhwcik7XG4gIH0gZWxzZSBpZiAobWF0Y2hLZXl3b3JkKCdkZWxldGUnKSB8fCBtYXRjaEtleXdvcmQoJ3ZvaWQnKSB8fCBtYXRjaEtleXdvcmQoJ3R5cGVvZicpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKERJU0FCTEVEKTtcbiAgfSBlbHNlIHtcbiAgICBleHByID0gcGFyc2VQb3N0Zml4RXhwcmVzc2lvbigpO1xuICB9XG5cbiAgcmV0dXJuIGV4cHI7XG59XG5cbmZ1bmN0aW9uIGJpbmFyeVByZWNlZGVuY2UodG9rZW4pIHtcbiAgdmFyIHByZWMgPSAwO1xuXG4gIGlmICh0b2tlbi50eXBlICE9PSBUb2tlblB1bmN0dWF0b3IgJiYgdG9rZW4udHlwZSAhPT0gVG9rZW5LZXl3b3JkKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBzd2l0Y2ggKHRva2VuLnZhbHVlKSB7XG4gICAgY2FzZSAnfHwnOlxuICAgICAgcHJlYyA9IDE7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJyYmJzpcbiAgICAgIHByZWMgPSAyO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd8JzpcbiAgICAgIHByZWMgPSAzO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdeJzpcbiAgICAgIHByZWMgPSA0O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICcmJzpcbiAgICAgIHByZWMgPSA1O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICc9PSc6XG4gICAgY2FzZSAnIT0nOlxuICAgIGNhc2UgJz09PSc6XG4gICAgY2FzZSAnIT09JzpcbiAgICAgIHByZWMgPSA2O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICc8JzpcbiAgICBjYXNlICc+JzpcbiAgICBjYXNlICc8PSc6XG4gICAgY2FzZSAnPj0nOlxuICAgIGNhc2UgJ2luc3RhbmNlb2YnOlxuICAgIGNhc2UgJ2luJzpcbiAgICAgIHByZWMgPSA3O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICc8PCc6XG4gICAgY2FzZSAnPj4nOlxuICAgIGNhc2UgJz4+Pic6XG4gICAgICBwcmVjID0gODtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnKyc6XG4gICAgY2FzZSAnLSc6XG4gICAgICBwcmVjID0gOTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnKic6XG4gICAgY2FzZSAnLyc6XG4gICAgY2FzZSAnJSc6XG4gICAgICBwcmVjID0gMTE7XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBwcmVjO1xufVxuXG4vLyAxMS41IE11bHRpcGxpY2F0aXZlIE9wZXJhdG9yc1xuLy8gMTEuNiBBZGRpdGl2ZSBPcGVyYXRvcnNcbi8vIDExLjcgQml0d2lzZSBTaGlmdCBPcGVyYXRvcnNcbi8vIDExLjggUmVsYXRpb25hbCBPcGVyYXRvcnNcbi8vIDExLjkgRXF1YWxpdHkgT3BlcmF0b3JzXG4vLyAxMS4xMCBCaW5hcnkgQml0d2lzZSBPcGVyYXRvcnNcbi8vIDExLjExIEJpbmFyeSBMb2dpY2FsIE9wZXJhdG9yc1xuXG5mdW5jdGlvbiBwYXJzZUJpbmFyeUV4cHJlc3Npb24oKSB7XG4gIHZhciBtYXJrZXIsIG1hcmtlcnMsIGV4cHIsIHRva2VuLCBwcmVjLCBzdGFjaywgcmlnaHQsIG9wZXJhdG9yLCBsZWZ0LCBpO1xuXG4gIG1hcmtlciA9IGxvb2thaGVhZDtcbiAgbGVmdCA9IHBhcnNlVW5hcnlFeHByZXNzaW9uKCk7XG5cbiAgdG9rZW4gPSBsb29rYWhlYWQ7XG4gIHByZWMgPSBiaW5hcnlQcmVjZWRlbmNlKHRva2VuKTtcbiAgaWYgKHByZWMgPT09IDApIHtcbiAgICByZXR1cm4gbGVmdDtcbiAgfVxuICB0b2tlbi5wcmVjID0gcHJlYztcbiAgbGV4KCk7XG5cbiAgbWFya2VycyA9IFttYXJrZXIsIGxvb2thaGVhZF07XG4gIHJpZ2h0ID0gcGFyc2VVbmFyeUV4cHJlc3Npb24oKTtcblxuICBzdGFjayA9IFtsZWZ0LCB0b2tlbiwgcmlnaHRdO1xuXG4gIHdoaWxlICgocHJlYyA9IGJpbmFyeVByZWNlZGVuY2UobG9va2FoZWFkKSkgPiAwKSB7XG5cbiAgICAvLyBSZWR1Y2U6IG1ha2UgYSBiaW5hcnkgZXhwcmVzc2lvbiBmcm9tIHRoZSB0aHJlZSB0b3Btb3N0IGVudHJpZXMuXG4gICAgd2hpbGUgKChzdGFjay5sZW5ndGggPiAyKSAmJiAocHJlYyA8PSBzdGFja1tzdGFjay5sZW5ndGggLSAyXS5wcmVjKSkge1xuICAgICAgcmlnaHQgPSBzdGFjay5wb3AoKTtcbiAgICAgIG9wZXJhdG9yID0gc3RhY2sucG9wKCkudmFsdWU7XG4gICAgICBsZWZ0ID0gc3RhY2sucG9wKCk7XG4gICAgICBtYXJrZXJzLnBvcCgpO1xuICAgICAgZXhwciA9IGZpbmlzaEJpbmFyeUV4cHJlc3Npb24ob3BlcmF0b3IsIGxlZnQsIHJpZ2h0KTtcbiAgICAgIHN0YWNrLnB1c2goZXhwcik7XG4gICAgfVxuXG4gICAgLy8gU2hpZnQuXG4gICAgdG9rZW4gPSBsZXgoKTtcbiAgICB0b2tlbi5wcmVjID0gcHJlYztcbiAgICBzdGFjay5wdXNoKHRva2VuKTtcbiAgICBtYXJrZXJzLnB1c2gobG9va2FoZWFkKTtcbiAgICBleHByID0gcGFyc2VVbmFyeUV4cHJlc3Npb24oKTtcbiAgICBzdGFjay5wdXNoKGV4cHIpO1xuICB9XG5cbiAgLy8gRmluYWwgcmVkdWNlIHRvIGNsZWFuLXVwIHRoZSBzdGFjay5cbiAgaSA9IHN0YWNrLmxlbmd0aCAtIDE7XG4gIGV4cHIgPSBzdGFja1tpXTtcbiAgbWFya2Vycy5wb3AoKTtcbiAgd2hpbGUgKGkgPiAxKSB7XG4gICAgbWFya2Vycy5wb3AoKVxuICAgIGV4cHIgPSBmaW5pc2hCaW5hcnlFeHByZXNzaW9uKHN0YWNrW2kgLSAxXS52YWx1ZSwgc3RhY2tbaSAtIDJdLCBleHByKTtcbiAgICBpIC09IDI7XG4gIH1cblxuICByZXR1cm4gZXhwcjtcbn1cblxuLy8gMTEuMTIgQ29uZGl0aW9uYWwgT3BlcmF0b3JcblxuZnVuY3Rpb24gcGFyc2VDb25kaXRpb25hbEV4cHJlc3Npb24oKSB7XG4gIHZhciBleHByLCBjb25zZXF1ZW50LCBhbHRlcm5hdGU7XG5cbiAgZXhwciA9IHBhcnNlQmluYXJ5RXhwcmVzc2lvbigpO1xuXG4gIGlmIChtYXRjaCgnPycpKSB7XG4gICAgbGV4KCk7XG4gICAgY29uc2VxdWVudCA9IHBhcnNlQ29uZGl0aW9uYWxFeHByZXNzaW9uKCk7XG4gICAgZXhwZWN0KCc6Jyk7XG4gICAgYWx0ZXJuYXRlID0gcGFyc2VDb25kaXRpb25hbEV4cHJlc3Npb24oKTtcblxuICAgIGV4cHIgPSBmaW5pc2hDb25kaXRpb25hbEV4cHJlc3Npb24oZXhwciwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKTtcbiAgfVxuXG4gIHJldHVybiBleHByO1xufVxuXG4vLyAxMS4xNCBDb21tYSBPcGVyYXRvclxuXG5mdW5jdGlvbiBwYXJzZUV4cHJlc3Npb24oKSB7XG4gIHZhciBleHByID0gcGFyc2VDb25kaXRpb25hbEV4cHJlc3Npb24oKTtcblxuICBpZiAobWF0Y2goJywnKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihESVNBQkxFRCk7IC8vIG5vIHNlcXVlbmNlIGV4cHJlc3Npb25zXG4gIH1cblxuICByZXR1cm4gZXhwcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29kZSkge1xuICBzb3VyY2UgPSBjb2RlO1xuICBpbmRleCA9IDA7XG4gIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG4gIGxvb2thaGVhZCA9IG51bGw7XG5cbiAgcGVlaygpO1xuXG4gIHZhciBleHByID0gcGFyc2VFeHByZXNzaW9uKCk7XG5cbiAgaWYgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbkVPRikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0IHRva2VuIGFmdGVyIGV4cHJlc3Npb24uXCIpO1xuICB9XG4gIHJldHVybiBleHByO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQge1xuICBOYU46ICAgICAgICdOYU4nLFxuICBFOiAgICAgICAgICdNYXRoLkUnLFxuICBMTjI6ICAgICAgICdNYXRoLkxOMicsXG4gIExOMTA6ICAgICAgJ01hdGguTE4xMCcsXG4gIExPRzJFOiAgICAgJ01hdGguTE9HMkUnLFxuICBMT0cxMEU6ICAgICdNYXRoLkxPRzEwRScsXG4gIFBJOiAgICAgICAgJ01hdGguUEknLFxuICBTUVJUMV8yOiAgICdNYXRoLlNRUlQxXzInLFxuICBTUVJUMjogICAgICdNYXRoLlNRUlQyJyxcbiAgTUlOX1ZBTFVFOiAnTnVtYmVyLk1JTl9WQUxVRScsXG4gIE1BWF9WQUxVRTogJ051bWJlci5NQVhfVkFMVUUnXG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZm4sIGZpZWxkcywgbmFtZSkge1xuICBmbi5maWVsZHMgPSBmaWVsZHMgfHwgW107XG4gIGZuLmZuYW1lID0gbmFtZTtcbiAgcmV0dXJuIGZuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWNjZXNzb3JOYW1lKGZuKSB7XG4gIHJldHVybiBmbiA9PSBudWxsID8gbnVsbCA6IGZuLmZuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWNjZXNzb3JGaWVsZHMoZm4pIHtcbiAgcmV0dXJuIGZuID09IG51bGwgPyBudWxsIDogZm4uZmllbGRzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obWVzc2FnZSkge1xuICB0aHJvdyBFcnJvcihtZXNzYWdlKTtcbn1cbiIsImltcG9ydCBlcnJvciBmcm9tICcuL2Vycm9yJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocCkge1xuICB2YXIgcGF0aCA9IFtdLFxuICAgICAgcSA9IG51bGwsXG4gICAgICBiID0gMCxcbiAgICAgIG4gPSBwLmxlbmd0aCxcbiAgICAgIHMgPSAnJyxcbiAgICAgIGksIGosIGM7XG5cbiAgcCA9IHAgKyAnJztcblxuICBmdW5jdGlvbiBwdXNoKCkge1xuICAgIHBhdGgucHVzaChzICsgcC5zdWJzdHJpbmcoaSwgaikpO1xuICAgIHMgPSAnJztcbiAgICBpID0gaiArIDE7XG4gIH1cblxuICBmb3IgKGk9aj0wOyBqPG47ICsraikge1xuICAgIGMgPSBwW2pdO1xuICAgIGlmIChjID09PSAnXFxcXCcpIHtcbiAgICAgIHMgKz0gcC5zdWJzdHJpbmcoaSwgaik7XG4gICAgICBzICs9IHAuc3Vic3RyaW5nKCsraiwgKytqKTtcbiAgICAgIGkgPSBqO1xuICAgIH0gZWxzZSBpZiAoYyA9PT0gcSkge1xuICAgICAgcHVzaCgpO1xuICAgICAgcSA9IG51bGw7XG4gICAgICBiID0gLTE7XG4gICAgfSBlbHNlIGlmIChxKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9IGVsc2UgaWYgKGkgPT09IGIgJiYgYyA9PT0gJ1wiJykge1xuICAgICAgaSA9IGogKyAxO1xuICAgICAgcSA9IGM7XG4gICAgfSBlbHNlIGlmIChpID09PSBiICYmIGMgPT09IFwiJ1wiKSB7XG4gICAgICBpID0gaiArIDE7XG4gICAgICBxID0gYztcbiAgICB9IGVsc2UgaWYgKGMgPT09ICcuJyAmJiAhYikge1xuICAgICAgaWYgKGogPiBpKSB7XG4gICAgICAgIHB1c2goKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGkgPSBqICsgMTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGMgPT09ICdbJykge1xuICAgICAgaWYgKGogPiBpKSBwdXNoKCk7XG4gICAgICBiID0gaSA9IGogKyAxO1xuICAgIH0gZWxzZSBpZiAoYyA9PT0gJ10nKSB7XG4gICAgICBpZiAoIWIpIGVycm9yKCdBY2Nlc3MgcGF0aCBtaXNzaW5nIG9wZW4gYnJhY2tldDogJyArIHApO1xuICAgICAgaWYgKGIgPiAwKSBwdXNoKCk7XG4gICAgICBiID0gMDtcbiAgICAgIGkgPSBqICsgMTtcbiAgICB9XG4gIH1cblxuICBpZiAoYikgZXJyb3IoJ0FjY2VzcyBwYXRoIG1pc3NpbmcgY2xvc2luZyBicmFja2V0OiAnICsgcCk7XG4gIGlmIChxKSBlcnJvcignQWNjZXNzIHBhdGggbWlzc2luZyBjbG9zaW5nIHF1b3RlOiAnICsgcCk7XG5cbiAgaWYgKGogPiBpKSB7XG4gICAgaisrO1xuICAgIHB1c2goKTtcbiAgfVxuXG4gIHJldHVybiBwYXRoO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgQXJyYXkuaXNBcnJheTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKF8pIHtcbiAgcmV0dXJuIF8gPT09IE9iamVjdChfKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKF8pIHtcbiAgcmV0dXJuIHR5cGVvZiBfID09PSAnc3RyaW5nJztcbn1cbiIsImltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheSc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdCc7XG5pbXBvcnQgaXNTdHJpbmcgZnJvbSAnLi9pc1N0cmluZyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICQoeCkge1xuICByZXR1cm4gaXNBcnJheSh4KSA/ICdbJyArIHgubWFwKCQpICsgJ10nXG4gICAgOiBpc09iamVjdCh4KSB8fCBpc1N0cmluZyh4KSA/XG4gICAgICAvLyBPdXRwdXQgdmFsaWQgSlNPTiBhbmQgSlMgc291cmNlIHN0cmluZ3MuXG4gICAgICAvLyBTZWUgaHR0cDovL3RpbWVsZXNzcmVwby5jb20vanNvbi1pc250LWEtamF2YXNjcmlwdC1zdWJzZXRcbiAgICAgIEpTT04uc3RyaW5naWZ5KHgpLnJlcGxhY2UoJ1xcdTIwMjgnLCdcXFxcdTIwMjgnKS5yZXBsYWNlKCdcXHUyMDI5JywgJ1xcXFx1MjAyOScpXG4gICAgOiB4O1xufVxuIiwiaW1wb3J0IGFjY2Vzc29yIGZyb20gJy4vYWNjZXNzb3InO1xuaW1wb3J0IHNwbGl0QWNjZXNzUGF0aCBmcm9tICcuL3NwbGl0QWNjZXNzUGF0aCc7XG5pbXBvcnQgc3RyaW5nVmFsdWUgZnJvbSAnLi9zdHJpbmdWYWx1ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGZpZWxkLCBuYW1lKSB7XG4gIHZhciBwYXRoID0gc3BsaXRBY2Nlc3NQYXRoKGZpZWxkKSxcbiAgICAgIGNvZGUgPSAncmV0dXJuIF9bJyArIHBhdGgubWFwKHN0cmluZ1ZhbHVlKS5qb2luKCddWycpICsgJ107JztcblxuICByZXR1cm4gYWNjZXNzb3IoXG4gICAgRnVuY3Rpb24oJ18nLCBjb2RlKSxcbiAgICBbKGZpZWxkID0gcGF0aC5sZW5ndGg9PT0xID8gcGF0aFswXSA6IGZpZWxkKV0sXG4gICAgbmFtZSB8fCBmaWVsZFxuICApO1xufVxuIiwiaW1wb3J0IGFjY2Vzc29yIGZyb20gJy4vYWNjZXNzb3InO1xuaW1wb3J0IGZpZWxkIGZyb20gJy4vZmllbGQnO1xuXG52YXIgZW1wdHkgPSBbXTtcblxuZXhwb3J0IHZhciBpZCA9IGZpZWxkKCdpZCcpO1xuXG5leHBvcnQgdmFyIGlkZW50aXR5ID0gYWNjZXNzb3IoZnVuY3Rpb24oXykgeyByZXR1cm4gXzsgfSwgZW1wdHksICdpZGVudGl0eScpO1xuXG5leHBvcnQgdmFyIHplcm8gPSBhY2Nlc3NvcihmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH0sIGVtcHR5LCAnemVybycpO1xuXG5leHBvcnQgdmFyIG9uZSA9IGFjY2Vzc29yKGZ1bmN0aW9uKCkgeyByZXR1cm4gMTsgfSwgZW1wdHksICdvbmUnKTtcblxuZXhwb3J0IHZhciB0cnV0aHkgPSBhY2Nlc3NvcihmdW5jdGlvbigpIHsgcmV0dXJuIHRydWU7IH0sIGVtcHR5LCAndHJ1ZScpO1xuXG5leHBvcnQgdmFyIGZhbHN5ID0gYWNjZXNzb3IoZnVuY3Rpb24oKSB7IHJldHVybiBmYWxzZTsgfSwgZW1wdHksICdmYWxzZScpO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oXykge1xuICByZXR1cm4gdHlwZW9mIF8gPT09ICdmdW5jdGlvbic7XG59XG4iLCJjb25zdCBob3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7XG4gIHJldHVybiBob3AuY2FsbChvYmplY3QsIHByb3BlcnR5KTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKF8pIHtcbiAgZm9yICh2YXIgcz17fSwgaT0wLCBuPV8ubGVuZ3RoOyBpPG47ICsraSkgc1tfW2ldXSA9IHRydWU7XG4gIHJldHVybiBzO1xufVxuIiwiaW1wb3J0IHtlcnJvcn0gZnJvbSAndmVnYS11dGlsJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29kZWdlbikge1xuXG4gIGZ1bmN0aW9uIGZuY2FsbChuYW1lLCBhcmdzLCBjYXN0LCB0eXBlKSB7XG4gICAgdmFyIG9iaiA9IGNvZGVnZW4oYXJnc1swXSk7XG4gICAgaWYgKGNhc3QpIHtcbiAgICAgIG9iaiA9IGNhc3QgKyAnKCcgKyBvYmogKyAnKSc7XG4gICAgICBpZiAoY2FzdC5sYXN0SW5kZXhPZignbmV3ICcsIDApID09PSAwKSBvYmogPSAnKCcgKyBvYmogKyAnKSc7XG4gICAgfVxuICAgIHJldHVybiBvYmogKyAnLicgKyBuYW1lICsgKHR5cGUgPCAwID8gJycgOiB0eXBlID09PSAwID9cbiAgICAgICcoKScgOlxuICAgICAgJygnICsgYXJncy5zbGljZSgxKS5tYXAoY29kZWdlbikuam9pbignLCcpICsgJyknKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZuKG5hbWUsIGNhc3QsIHR5cGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oYXJncykge1xuICAgICAgcmV0dXJuIGZuY2FsbChuYW1lLCBhcmdzLCBjYXN0LCB0eXBlKTtcbiAgICB9O1xuICB9XG5cbiAgdmFyIERBVEUgPSAnbmV3IERhdGUnLFxuICAgICAgU1RSSU5HID0gJ1N0cmluZycsXG4gICAgICBSRUdFWFAgPSAnUmVnRXhwJztcblxuICByZXR1cm4ge1xuICAgIC8vIE1BVEggZnVuY3Rpb25zXG4gICAgaXNOYU46ICAgICdOdW1iZXIuaXNOYU4nLFxuICAgIGlzRmluaXRlOiAnTnVtYmVyLmlzRmluaXRlJyxcbiAgICBhYnM6ICAgICAgJ01hdGguYWJzJyxcbiAgICBhY29zOiAgICAgJ01hdGguYWNvcycsXG4gICAgYXNpbjogICAgICdNYXRoLmFzaW4nLFxuICAgIGF0YW46ICAgICAnTWF0aC5hdGFuJyxcbiAgICBhdGFuMjogICAgJ01hdGguYXRhbjInLFxuICAgIGNlaWw6ICAgICAnTWF0aC5jZWlsJyxcbiAgICBjb3M6ICAgICAgJ01hdGguY29zJyxcbiAgICBleHA6ICAgICAgJ01hdGguZXhwJyxcbiAgICBmbG9vcjogICAgJ01hdGguZmxvb3InLFxuICAgIGxvZzogICAgICAnTWF0aC5sb2cnLFxuICAgIG1heDogICAgICAnTWF0aC5tYXgnLFxuICAgIG1pbjogICAgICAnTWF0aC5taW4nLFxuICAgIHBvdzogICAgICAnTWF0aC5wb3cnLFxuICAgIHJhbmRvbTogICAnTWF0aC5yYW5kb20nLFxuICAgIHJvdW5kOiAgICAnTWF0aC5yb3VuZCcsXG4gICAgc2luOiAgICAgICdNYXRoLnNpbicsXG4gICAgc3FydDogICAgICdNYXRoLnNxcnQnLFxuICAgIHRhbjogICAgICAnTWF0aC50YW4nLFxuXG4gICAgY2xhbXA6IGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDMpIGVycm9yKCdNaXNzaW5nIGFyZ3VtZW50cyB0byBjbGFtcCBmdW5jdGlvbi4nKTtcbiAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDMpIGVycm9yKCdUb28gbWFueSBhcmd1bWVudHMgdG8gY2xhbXAgZnVuY3Rpb24uJyk7XG4gICAgICB2YXIgYSA9IGFyZ3MubWFwKGNvZGVnZW4pO1xuICAgICAgcmV0dXJuICdNYXRoLm1heCgnK2FbMV0rJywgTWF0aC5taW4oJythWzJdKycsJythWzBdKycpKSc7XG4gICAgfSxcblxuICAgIC8vIERBVEUgZnVuY3Rpb25zXG4gICAgbm93OiAgICAgICAgICAgICAnRGF0ZS5ub3cnLFxuICAgIHV0YzogICAgICAgICAgICAgJ0RhdGUuVVRDJyxcbiAgICBkYXRldGltZTogICAgICAgIERBVEUsXG4gICAgZGF0ZTogICAgICAgICAgICBmbignZ2V0RGF0ZScsIERBVEUsIDApLFxuICAgIGRheTogICAgICAgICAgICAgZm4oJ2dldERheScsIERBVEUsIDApLFxuICAgIHllYXI6ICAgICAgICAgICAgZm4oJ2dldEZ1bGxZZWFyJywgREFURSwgMCksXG4gICAgbW9udGg6ICAgICAgICAgICBmbignZ2V0TW9udGgnLCBEQVRFLCAwKSxcbiAgICBob3VyczogICAgICAgICAgIGZuKCdnZXRIb3VycycsIERBVEUsIDApLFxuICAgIG1pbnV0ZXM6ICAgICAgICAgZm4oJ2dldE1pbnV0ZXMnLCBEQVRFLCAwKSxcbiAgICBzZWNvbmRzOiAgICAgICAgIGZuKCdnZXRTZWNvbmRzJywgREFURSwgMCksXG4gICAgbWlsbGlzZWNvbmRzOiAgICBmbignZ2V0TWlsbGlzZWNvbmRzJywgREFURSwgMCksXG4gICAgdGltZTogICAgICAgICAgICBmbignZ2V0VGltZScsIERBVEUsIDApLFxuICAgIHRpbWV6b25lb2Zmc2V0OiAgZm4oJ2dldFRpbWV6b25lT2Zmc2V0JywgREFURSwgMCksXG4gICAgdXRjZGF0ZTogICAgICAgICBmbignZ2V0VVRDRGF0ZScsIERBVEUsIDApLFxuICAgIHV0Y2RheTogICAgICAgICAgZm4oJ2dldFVUQ0RheScsIERBVEUsIDApLFxuICAgIHV0Y3llYXI6ICAgICAgICAgZm4oJ2dldFVUQ0Z1bGxZZWFyJywgREFURSwgMCksXG4gICAgdXRjbW9udGg6ICAgICAgICBmbignZ2V0VVRDTW9udGgnLCBEQVRFLCAwKSxcbiAgICB1dGNob3VyczogICAgICAgIGZuKCdnZXRVVENIb3VycycsIERBVEUsIDApLFxuICAgIHV0Y21pbnV0ZXM6ICAgICAgZm4oJ2dldFVUQ01pbnV0ZXMnLCBEQVRFLCAwKSxcbiAgICB1dGNzZWNvbmRzOiAgICAgIGZuKCdnZXRVVENTZWNvbmRzJywgREFURSwgMCksXG4gICAgdXRjbWlsbGlzZWNvbmRzOiBmbignZ2V0VVRDTWlsbGlzZWNvbmRzJywgREFURSwgMCksXG5cbiAgICAvLyBzZXF1ZW5jZSBmdW5jdGlvbnNcbiAgICBsZW5ndGg6ICAgICAgZm4oJ2xlbmd0aCcsIG51bGwsIC0xKSxcbiAgICBqb2luOiAgICAgICAgZm4oJ2pvaW4nLCBudWxsKSxcbiAgICBpbmRleG9mOiAgICAgZm4oJ2luZGV4T2YnLCBudWxsKSxcbiAgICBsYXN0aW5kZXhvZjogZm4oJ2xhc3RJbmRleE9mJywgbnVsbCksXG4gICAgc2xpY2U6ICAgICAgIGZuKCdzbGljZScsIG51bGwpLFxuXG4gICAgcmV2ZXJzZTogZnVuY3Rpb24oYXJncykge1xuICAgICAgcmV0dXJuICcoJytjb2RlZ2VuKGFyZ3NbMF0pKycpLnNsaWNlKCkucmV2ZXJzZSgpJztcbiAgICB9LFxuXG4gICAgLy8gU1RSSU5HIGZ1bmN0aW9uc1xuICAgIHBhcnNlRmxvYXQ6ICAncGFyc2VGbG9hdCcsXG4gICAgcGFyc2VJbnQ6ICAgICdwYXJzZUludCcsXG4gICAgdXBwZXI6ICAgICAgIGZuKCd0b1VwcGVyQ2FzZScsIFNUUklORywgMCksXG4gICAgbG93ZXI6ICAgICAgIGZuKCd0b0xvd2VyQ2FzZScsIFNUUklORywgMCksXG4gICAgc3Vic3RyaW5nOiAgIGZuKCdzdWJzdHJpbmcnLCBTVFJJTkcpLFxuICAgIHNwbGl0OiAgICAgICBmbignc3BsaXQnLCBTVFJJTkcpLFxuICAgIHJlcGxhY2U6ICAgICBmbigncmVwbGFjZScsIFNUUklORyksXG4gICAgdHJpbTogICAgICAgIGZuKCd0cmltJywgU1RSSU5HLCAwKSxcblxuICAgIC8vIFJFR0VYUCBmdW5jdGlvbnNcbiAgICByZWdleHA6ICBSRUdFWFAsXG4gICAgdGVzdDogICAgZm4oJ3Rlc3QnLCBSRUdFWFApLFxuXG4gICAgLy8gQ29udHJvbCBGbG93IGZ1bmN0aW9uc1xuICAgIGlmOiBmdW5jdGlvbihhcmdzKSB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDMpIGVycm9yKCdNaXNzaW5nIGFyZ3VtZW50cyB0byBpZiBmdW5jdGlvbi4nKTtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMykgZXJyb3IoJ1RvbyBtYW55IGFyZ3VtZW50cyB0byBpZiBmdW5jdGlvbi4nKTtcbiAgICAgICAgdmFyIGEgPSBhcmdzLm1hcChjb2RlZ2VuKTtcbiAgICAgICAgcmV0dXJuICcoJythWzBdKyc/JythWzFdKyc6JythWzJdKycpJztcbiAgICAgIH1cbiAgfTtcbn1cbiIsImltcG9ydCBDb25zdGFudHMgZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IEZ1bmN0aW9ucyBmcm9tICcuL2Z1bmN0aW9ucyc7XG5pbXBvcnQge2Vycm9yLCBoYXNPd25Qcm9wZXJ0eSwgaXNGdW5jdGlvbiwgaXNTdHJpbmcsIHRvU2V0fSBmcm9tICd2ZWdhLXV0aWwnO1xuXG5mdW5jdGlvbiBzdHJpcFF1b3RlcyhzKSB7XG4gIHZhciBuID0gcyAmJiBzLmxlbmd0aCAtIDE7XG4gIHJldHVybiBuICYmIChcbiAgICAgIChzWzBdPT09J1wiJyAmJiBzW25dPT09J1wiJykgfHxcbiAgICAgIChzWzBdPT09J1xcJycgJiYgc1tuXT09PSdcXCcnKVxuICAgICkgPyBzLnNsaWNlKDEsIC0xKSA6IHM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG9wdCkge1xuICBvcHQgPSBvcHQgfHwge307XG5cbiAgdmFyIHdoaXRlbGlzdCA9IG9wdC53aGl0ZWxpc3QgPyB0b1NldChvcHQud2hpdGVsaXN0KSA6IHt9LFxuICAgICAgYmxhY2tsaXN0ID0gb3B0LmJsYWNrbGlzdCA/IHRvU2V0KG9wdC5ibGFja2xpc3QpIDoge30sXG4gICAgICBjb25zdGFudHMgPSBvcHQuY29uc3RhbnRzIHx8IENvbnN0YW50cyxcbiAgICAgIGZ1bmN0aW9ucyA9IChvcHQuZnVuY3Rpb25zIHx8IEZ1bmN0aW9ucykodmlzaXQpLFxuICAgICAgZ2xvYmFsdmFyID0gb3B0Lmdsb2JhbHZhcixcbiAgICAgIGZpZWxkdmFyID0gb3B0LmZpZWxkdmFyLFxuICAgICAgZ2xvYmFscyA9IHt9LFxuICAgICAgZmllbGRzID0ge30sXG4gICAgICBtZW1iZXJEZXB0aCA9IDA7XG5cbiAgdmFyIG91dHB1dEdsb2JhbCA9IGlzRnVuY3Rpb24oZ2xvYmFsdmFyKVxuICAgID8gZ2xvYmFsdmFyXG4gICAgOiBmdW5jdGlvbiAoaWQpIHsgcmV0dXJuIGdsb2JhbHZhciArICdbXCInICsgaWQgKyAnXCJdJzsgfTtcblxuICBmdW5jdGlvbiB2aXNpdChhc3QpIHtcbiAgICBpZiAoaXNTdHJpbmcoYXN0KSkgcmV0dXJuIGFzdDtcbiAgICB2YXIgZ2VuZXJhdG9yID0gR2VuZXJhdG9yc1thc3QudHlwZV07XG4gICAgaWYgKGdlbmVyYXRvciA9PSBudWxsKSBlcnJvcignVW5zdXBwb3J0ZWQgdHlwZTogJyArIGFzdC50eXBlKTtcbiAgICByZXR1cm4gZ2VuZXJhdG9yKGFzdCk7XG4gIH1cblxuICB2YXIgR2VuZXJhdG9ycyA9IHtcbiAgICBMaXRlcmFsOiBmdW5jdGlvbihuKSB7XG4gICAgICAgIHJldHVybiBuLnJhdztcbiAgICAgIH0sXG5cbiAgICBJZGVudGlmaWVyOiBmdW5jdGlvbihuKSB7XG4gICAgICB2YXIgaWQgPSBuLm5hbWU7XG4gICAgICBpZiAobWVtYmVyRGVwdGggPiAwKSB7XG4gICAgICAgIHJldHVybiBpZDtcbiAgICAgIH0gZWxzZSBpZiAoaGFzT3duUHJvcGVydHkoYmxhY2tsaXN0LCBpZCkpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yKCdJbGxlZ2FsIGlkZW50aWZpZXI6ICcgKyBpZCk7XG4gICAgICB9IGVsc2UgaWYgKGhhc093blByb3BlcnR5KGNvbnN0YW50cywgaWQpKSB7XG4gICAgICAgIHJldHVybiBjb25zdGFudHNbaWRdO1xuICAgICAgfSBlbHNlIGlmIChoYXNPd25Qcm9wZXJ0eSh3aGl0ZWxpc3QsIGlkKSkge1xuICAgICAgICByZXR1cm4gaWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnbG9iYWxzW2lkXSA9IDE7XG4gICAgICAgIHJldHVybiBvdXRwdXRHbG9iYWwoaWQpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBNZW1iZXJFeHByZXNzaW9uOiBmdW5jdGlvbihuKSB7XG4gICAgICAgIHZhciBkID0gIW4uY29tcHV0ZWQ7XG4gICAgICAgIHZhciBvID0gdmlzaXQobi5vYmplY3QpO1xuICAgICAgICBpZiAoZCkgbWVtYmVyRGVwdGggKz0gMTtcbiAgICAgICAgdmFyIHAgPSB2aXNpdChuLnByb3BlcnR5KTtcbiAgICAgICAgaWYgKG8gPT09IGZpZWxkdmFyKSB7XG4gICAgICAgICAgLy8gc3RyaXAgcXVvdGVzIHRvIHNhbml0aXplIGZpZWxkIG5hbWUgKCMxNjUzKVxuICAgICAgICAgIGZpZWxkc1tzdHJpcFF1b3RlcyhwKV0gPSAxO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkKSBtZW1iZXJEZXB0aCAtPSAxO1xuICAgICAgICByZXR1cm4gbyArIChkID8gJy4nK3AgOiAnWycrcCsnXScpO1xuICAgICAgfSxcblxuICAgIENhbGxFeHByZXNzaW9uOiBmdW5jdGlvbihuKSB7XG4gICAgICAgIGlmIChuLmNhbGxlZS50eXBlICE9PSAnSWRlbnRpZmllcicpIHtcbiAgICAgICAgICBlcnJvcignSWxsZWdhbCBjYWxsZWUgdHlwZTogJyArIG4uY2FsbGVlLnR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjYWxsZWUgPSBuLmNhbGxlZS5uYW1lO1xuICAgICAgICB2YXIgYXJncyA9IG4uYXJndW1lbnRzO1xuICAgICAgICB2YXIgZm4gPSBoYXNPd25Qcm9wZXJ0eShmdW5jdGlvbnMsIGNhbGxlZSkgJiYgZnVuY3Rpb25zW2NhbGxlZV07XG4gICAgICAgIGlmICghZm4pIGVycm9yKCdVbnJlY29nbml6ZWQgZnVuY3Rpb246ICcgKyBjYWxsZWUpO1xuICAgICAgICByZXR1cm4gaXNGdW5jdGlvbihmbilcbiAgICAgICAgICA/IGZuKGFyZ3MpXG4gICAgICAgICAgOiBmbiArICcoJyArIGFyZ3MubWFwKHZpc2l0KS5qb2luKCcsJykgKyAnKSc7XG4gICAgICB9LFxuXG4gICAgQXJyYXlFeHByZXNzaW9uOiBmdW5jdGlvbihuKSB7XG4gICAgICAgIHJldHVybiAnWycgKyBuLmVsZW1lbnRzLm1hcCh2aXNpdCkuam9pbignLCcpICsgJ10nO1xuICAgICAgfSxcblxuICAgIEJpbmFyeUV4cHJlc3Npb246IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgcmV0dXJuICcoJyArIHZpc2l0KG4ubGVmdCkgKyBuLm9wZXJhdG9yICsgdmlzaXQobi5yaWdodCkgKyAnKSc7XG4gICAgICB9LFxuXG4gICAgVW5hcnlFeHByZXNzaW9uOiBmdW5jdGlvbihuKSB7XG4gICAgICAgIHJldHVybiAnKCcgKyBuLm9wZXJhdG9yICsgdmlzaXQobi5hcmd1bWVudCkgKyAnKSc7XG4gICAgICB9LFxuXG4gICAgQ29uZGl0aW9uYWxFeHByZXNzaW9uOiBmdW5jdGlvbihuKSB7XG4gICAgICAgIHJldHVybiAnKCcgKyB2aXNpdChuLnRlc3QpICtcbiAgICAgICAgICAnPycgKyB2aXNpdChuLmNvbnNlcXVlbnQpICtcbiAgICAgICAgICAnOicgKyB2aXNpdChuLmFsdGVybmF0ZSkgK1xuICAgICAgICAgICcpJztcbiAgICAgIH0sXG5cbiAgICBMb2dpY2FsRXhwcmVzc2lvbjogZnVuY3Rpb24obikge1xuICAgICAgICByZXR1cm4gJygnICsgdmlzaXQobi5sZWZ0KSArIG4ub3BlcmF0b3IgKyB2aXNpdChuLnJpZ2h0KSArICcpJztcbiAgICAgIH0sXG5cbiAgICBPYmplY3RFeHByZXNzaW9uOiBmdW5jdGlvbihuKSB7XG4gICAgICAgIHJldHVybiAneycgKyBuLnByb3BlcnRpZXMubWFwKHZpc2l0KS5qb2luKCcsJykgKyAnfSc7XG4gICAgICB9LFxuXG4gICAgUHJvcGVydHk6IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgbWVtYmVyRGVwdGggKz0gMTtcbiAgICAgICAgdmFyIGsgPSB2aXNpdChuLmtleSk7XG4gICAgICAgIG1lbWJlckRlcHRoIC09IDE7XG4gICAgICAgIHJldHVybiBrICsgJzonICsgdmlzaXQobi52YWx1ZSk7XG4gICAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gY29kZWdlbihhc3QpIHtcbiAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgY29kZTogICAgdmlzaXQoYXN0KSxcbiAgICAgIGdsb2JhbHM6IE9iamVjdC5rZXlzKGdsb2JhbHMpLFxuICAgICAgZmllbGRzOiAgT2JqZWN0LmtleXMoZmllbGRzKVxuICAgIH07XG4gICAgZ2xvYmFscyA9IHt9O1xuICAgIGZpZWxkcyA9IHt9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBjb2RlZ2VuLmZ1bmN0aW9ucyA9IGZ1bmN0aW9ucztcbiAgY29kZWdlbi5jb25zdGFudHMgPSBjb25zdGFudHM7XG5cbiAgcmV0dXJuIGNvZGVnZW47XG59XG4iLCJjb25zdCB0ZXh0RGVmYXVsdCA9IHtcbiAgZmlsbDogXCIjMDAwXCIsXG4gIGZvbnQ6IFwic2Fucy1zZXJpZlwiLFxuICBmb250U2l6ZTogMTEsXG4gIG9wYWNpdHk6IDEsXG4gIGJhc2VsaW5lOiBcImFscGhhYmV0aWNcIlxufTtcbi8vIHRoZSBicm93c2VycycgZGVmYXVsdFxuZXhwb3J0IGNvbnN0IEJSX1BST1BfREVGQVVMVCA9IHtcbiAgbm9uZToge30sXG4gIHJlY3Q6IHsgb3BhY2l0eTogMSB9LFxuICBncmFkaWVudDogeyBvcGFjaXR5OiAxIH0sXG4gIGdyb3VwOiB7IG9wYWNpdHk6IDEgfSxcbiAgdGljazogeyBvcGFjaXR5OiAxIH0sXG4gIGdyaWQ6IHsgb3BhY2l0eTogMSB9LFxuICBkb21haW46IHsgb3BhY2l0eTogMSB9LFxuICBzeW1ib2w6IHsgb3BhY2l0eTogMSwgc3Ryb2tlOiBcInRyYW5zcGFyZW50XCIgfSxcbiAgbGluZTogeyBvcGFjaXR5OiAxLCBmaWxsOiBcIm5vbmVcIiB9LFxuICAvLyBhcmVhOiB7IG9wYWNpdHk6IDEsIHN0cm9rZVdpZHRoOiBcIjFweFwiLCBzdHJva2U6IFwibm9uZVwiIH0sXG4gIGFyZWE6IHsgb3BhY2l0eTogMSwgc3Ryb2tlV2lkdGg6IFwiMHB4XCIgfSxcbiAgdHJhaWw6IHsgb3BhY2l0eTogMSwgc3Ryb2tlV2lkdGg6IFwiMHB4XCIgfSxcbiAgcnVsZTogeyBvcGFjaXR5OiAxIH0sXG4gIHRleHQ6IHRleHREZWZhdWx0LFxuICB0aXRsZTogdGV4dERlZmF1bHRcbn07XG4iLCJleHBvcnQgY29uc3QgREVGQVVMVF9FQVNFID0ge1xuICBtYXJrOiBcImN1YmljXCIsXG4gIGxpbmU6IFwiY3ViaWNcIixcbiAgYXhpczogXCJjdWJpY1wiLFxuICBsZWdlbmQ6IFwiY3ViaWNcIixcbiAgdmlldzogXCJjdWJpY1wiXG59OyIsIi8vIEZyb20gaHR0cHM6Ly9naXRodWIuY29tL3ZlZ2EvdmVnYS9ibG9iL21hc3Rlci9wYWNrYWdlcy92ZWdhLXBhcnNlci9zcmMvY29uZmlnLmpzXG4vKipcbiAqIFN0YW5kYXJkIGNvbmZpZ3VyYXRpb24gZGVmYXVsdHMgZm9yIFZlZ2Egc3BlY2lmaWNhdGlvbiBwYXJzaW5nLlxuICogVXNlcnMgY2FuIHByb3ZpZGUgdGhlaXIgb3duIChzdWItKXNldCBvZiB0aGVzZSBkZWZhdWx0IHZhbHVlc1xuICogYnkgcGFzc2luZyBpbiBhIGNvbmZpZyBvYmplY3QgdG8gdGhlIHRvcC1sZXZlbCBwYXJzZSBtZXRob2QuXG4gKi9cbmNvbnN0IGRlZmF1bHRGb250ID0gXCJzYW5zLXNlcmlmXCIsXG4gIGRlZmF1bHRTeW1ib2xTaXplID0gMzAsXG4gIGRlZmF1bHRTdHJva2VXaWR0aCA9IDIsXG4gIGRlZmF1bHRDb2xvciA9IFwiIzRjNzhhOFwiLFxuICBibGFjayA9IFwiIzAwMFwiLFxuICBncmF5ID0gXCIjODg4XCIsXG4gIGxpZ2h0R3JheSA9IFwiI2RkZFwiO1xuZXhwb3J0IGNvbnN0IHZlZ2FDb25maWcgPSB7XG4gIC8vIGRlZmF1bHQgdmlzdWFsaXphdGlvbiBkZXNjcmlwdGlvblxuICBkZXNjcmlwdGlvbjogXCJWZWdhIHZpc3VhbGl6YXRpb25cIixcblxuICAvLyBkZWZhdWx0IHBhZGRpbmcgYXJvdW5kIHZpc3VhbGl6YXRpb25cbiAgcGFkZGluZzogMCxcblxuICAvLyBkZWZhdWx0IGZvciBhdXRvbWF0aWMgc2l6aW5nOyBvcHRpb25zOiAnbm9uZScsICdwYWQnLCAnZml0J1xuICAvLyBvciBwcm92aWRlIGFuIG9iamVjdCAoZS5nLiwgeyd0eXBlJzogJ3BhZCcsICdyZXNpemUnOiB0cnVlfSlcbiAgYXV0b3NpemU6IFwicGFkXCIsXG5cbiAgLy8gZGVmYXVsdCB2aWV3IGJhY2tncm91bmQgY29sb3JcbiAgLy8gY292ZXJzIHRoZSBlbnRpcmUgdmlldyBjb21wb25lbnRcbiAgYmFja2dyb3VuZDogbnVsbCxcblxuICAvLyBkZWZhdWx0IGV2ZW50IGhhbmRsaW5nIGNvbmZpZ3VyYXRpb25cbiAgLy8gcHJldmVudERlZmF1bHQgZm9yIHZpZXctc291cmNlZCBldmVudCB0eXBlcyBleGNlcHQgJ3doZWVsJ1xuICBldmVudHM6IHtcbiAgICBkZWZhdWx0czoge2FsbG93OiBbXCJ3aGVlbFwiXX1cbiAgfSxcblxuICAvLyBkZWZhdWx0cyBmb3IgdG9wLWxldmVsIGdyb3VwIG1hcmtzXG4gIC8vIGFjY2VwdHMgbWFyayBwcm9wZXJ0aWVzIChmaWxsLCBzdHJva2UsIGV0YylcbiAgLy8gY292ZXJzIHRoZSBkYXRhIHJlY3RhbmdsZSB3aXRoaW4gZ3JvdXAgd2lkdGgvaGVpZ2h0XG4gIGdyb3VwOiBudWxsLFxuXG4gIC8vIGRlZmF1bHRzIGZvciBiYXNpYyBtYXJrIHR5cGVzXG4gIC8vIGVhY2ggc3Vic2V0IGFjY2VwdHMgbWFyayBwcm9wZXJ0aWVzIChmaWxsLCBzdHJva2UsIGV0YylcbiAgbWFyazogbnVsbCxcbiAgYXJjOiB7IGZpbGw6IGRlZmF1bHRDb2xvciB9LFxuICBhcmVhOiB7IGZpbGw6IGRlZmF1bHRDb2xvciB9LFxuICBpbWFnZTogbnVsbCxcbiAgbGluZToge1xuICAgIHN0cm9rZTogZGVmYXVsdENvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBkZWZhdWx0U3Ryb2tlV2lkdGhcbiAgfSxcbiAgcGF0aDogeyBzdHJva2U6IGRlZmF1bHRDb2xvciB9LFxuICByZWN0OiB7IGZpbGw6IGRlZmF1bHRDb2xvciB9LFxuICBydWxlOiB7IHN0cm9rZTogYmxhY2sgfSxcbiAgc2hhcGU6IHsgc3Ryb2tlOiBkZWZhdWx0Q29sb3IgfSxcbiAgc3ltYm9sOiB7XG4gICAgZmlsbDogZGVmYXVsdENvbG9yLFxuICAgIHNpemU6IDY0XG4gIH0sXG4gIHRleHQ6IHtcbiAgICBmaWxsOiBibGFjayxcbiAgICBmb250OiBkZWZhdWx0Rm9udCxcbiAgICBmb250U2l6ZTogMTFcbiAgfSxcbiAgdHJhaWw6IHtcbiAgICBmaWxsOiBkZWZhdWx0Q29sb3IsXG4gICAgc2l6ZTogZGVmYXVsdFN0cm9rZVdpZHRoXG4gIH0sXG5cbiAgLy8gc3R5bGUgZGVmaW5pdGlvbnNcbiAgc3R5bGU6IHtcbiAgICAvLyBheGlzICYgbGVnZW5kIGxhYmVsc1xuICAgIFwiZ3VpZGUtbGFiZWxcIjoge1xuICAgICAgZmlsbDogYmxhY2ssXG4gICAgICBmb250OiBkZWZhdWx0Rm9udCxcbiAgICAgIGZvbnRTaXplOiAxMFxuICAgIH0sXG4gICAgLy8gYXhpcyAmIGxlZ2VuZCB0aXRsZXNcbiAgICBcImd1aWRlLXRpdGxlXCI6IHtcbiAgICAgIGZpbGw6IGJsYWNrLFxuICAgICAgZm9udDogZGVmYXVsdEZvbnQsXG4gICAgICBmb250U2l6ZTogMTEsXG4gICAgICBmb250V2VpZ2h0OiBcImJvbGRcIlxuICAgIH0sXG4gICAgLy8gaGVhZGVycywgaW5jbHVkaW5nIGNoYXJ0IHRpdGxlXG4gICAgXCJncm91cC10aXRsZVwiOiB7XG4gICAgICBmaWxsOiBibGFjayxcbiAgICAgIGZvbnQ6IGRlZmF1bHRGb250LFxuICAgICAgZm9udFNpemU6IDEzLFxuICAgICAgZm9udFdlaWdodDogXCJib2xkXCJcbiAgICB9LFxuICAgIC8vIGNoYXJ0IHN1YnRpdGxlXG4gICAgXCJncm91cC1zdWJ0aXRsZVwiOiB7XG4gICAgICBmaWxsOiBibGFjayxcbiAgICAgIGZvbnQ6IGRlZmF1bHRGb250LFxuICAgICAgZm9udFNpemU6IDEyXG4gICAgfSxcbiAgICAvLyBkZWZhdWx0cyBmb3Igc3R5bGVkIHBvaW50IG1hcmtzIGluIFZlZ2EtTGl0ZVxuICAgIHBvaW50OiB7XG4gICAgICBzaXplOiBkZWZhdWx0U3ltYm9sU2l6ZSxcbiAgICAgIHN0cm9rZVdpZHRoOiBkZWZhdWx0U3Ryb2tlV2lkdGgsXG4gICAgICBzaGFwZTogXCJjaXJjbGVcIlxuICAgIH0sXG4gICAgY2lyY2xlOiB7XG4gICAgICBzaXplOiBkZWZhdWx0U3ltYm9sU2l6ZSxcbiAgICAgIHN0cm9rZVdpZHRoOiBkZWZhdWx0U3Ryb2tlV2lkdGhcbiAgICB9LFxuICAgIHNxdWFyZToge1xuICAgICAgc2l6ZTogZGVmYXVsdFN5bWJvbFNpemUsXG4gICAgICBzdHJva2VXaWR0aDogZGVmYXVsdFN0cm9rZVdpZHRoLFxuICAgICAgc2hhcGU6IFwic3F1YXJlXCJcbiAgICB9LFxuICAgIC8vIGRlZmF1bHRzIGZvciBzdHlsZWQgZ3JvdXAgbWFya3MgaW4gVmVnYS1MaXRlXG4gICAgY2VsbDoge1xuICAgICAgZmlsbDogXCJ0cmFuc3BhcmVudFwiLFxuICAgICAgc3Ryb2tlOiBsaWdodEdyYXlcbiAgICB9XG4gIH0sXG5cbiAgLy8gZGVmYXVsdHMgZm9yIHRpdGxlXG4gIHRpdGxlOiB7XG4gICAgb3JpZW50OiBcInRvcFwiLFxuICAgIGFuY2hvcjogXCJtaWRkbGVcIixcbiAgICBvZmZzZXQ6IDQsXG4gICAgc3VidGl0bGVQYWRkaW5nOiAzXG4gIH0sXG5cbiAgLy8gZGVmYXVsdHMgZm9yIGF4ZXNcbiAgYXhpczoge1xuICAgIG1pbkV4dGVudDogMCxcbiAgICBtYXhFeHRlbnQ6IDIwMCxcbiAgICBiYW5kUG9zaXRpb246IDAuNSxcbiAgICBkb21haW46IHRydWUsXG4gICAgZG9tYWluV2lkdGg6IDEsXG4gICAgZG9tYWluQ29sb3I6IGdyYXksXG4gICAgZ3JpZDogZmFsc2UsXG4gICAgZ3JpZFdpZHRoOiAxLFxuICAgIGdyaWRDb2xvcjogbGlnaHRHcmF5LFxuICAgIGxhYmVsczogdHJ1ZSxcbiAgICBsYWJlbEFuZ2xlOiAwLFxuICAgIGxhYmVsTGltaXQ6IDE4MCxcbiAgICBsYWJlbE9mZnNldDogMCxcbiAgICBsYWJlbFBhZGRpbmc6IDIsXG4gICAgdGlja3M6IHRydWUsXG4gICAgdGlja0NvbG9yOiBncmF5LFxuICAgIHRpY2tPZmZzZXQ6IDAsXG4gICAgdGlja1JvdW5kOiB0cnVlLFxuICAgIHRpY2tTaXplOiA1LFxuICAgIHRpY2tXaWR0aDogMSxcbiAgICB0aXRsZVBhZGRpbmc6IDRcbiAgfSxcblxuICAvLyBjb3JyZWN0aW9uIGZvciBjZW50ZXJpbmcgYmlhc1xuICBheGlzQmFuZDoge1xuICAgIHRpY2tPZmZzZXQ6IC0wLjVcbiAgfSxcblxuICAvLyBkZWZhdWx0cyBmb3IgY2FydG9ncmFwaGljIHByb2plY3Rpb25cbiAgcHJvamVjdGlvbjoge1xuICAgIHR5cGU6IFwibWVyY2F0b3JcIlxuICB9LFxuXG4gIC8vIGRlZmF1bHRzIGZvciBsZWdlbmRzXG4gIGxlZ2VuZDoge1xuICAgIG9yaWVudDogXCJyaWdodFwiLFxuICAgIHBhZGRpbmc6IDAsXG4gICAgZ3JpZEFsaWduOiBcImVhY2hcIixcbiAgICBjb2x1bW5QYWRkaW5nOiAxMCxcbiAgICByb3dQYWRkaW5nOiAyLFxuICAgIHN5bWJvbERpcmVjdGlvbjogXCJ2ZXJ0aWNhbFwiLFxuICAgIGdyYWRpZW50RGlyZWN0aW9uOiBcInZlcnRpY2FsXCIsXG4gICAgZ3JhZGllbnRMZW5ndGg6IDIwMCxcbiAgICBncmFkaWVudFRoaWNrbmVzczogMTYsXG4gICAgZ3JhZGllbnRTdHJva2VDb2xvcjogbGlnaHRHcmF5LFxuICAgIGdyYWRpZW50U3Ryb2tlV2lkdGg6IDAsXG4gICAgZ3JhZGllbnRMYWJlbE9mZnNldDogMixcbiAgICBsYWJlbEFsaWduOiBcImxlZnRcIixcbiAgICBsYWJlbEJhc2VsaW5lOiBcIm1pZGRsZVwiLFxuICAgIGxhYmVsTGltaXQ6IDE2MCxcbiAgICBsYWJlbE9mZnNldDogNCxcbiAgICBsYWJlbE92ZXJsYXA6IHRydWUsXG4gICAgc3ltYm9sTGltaXQ6IDMwLFxuICAgIHN5bWJvbFR5cGU6IFwiY2lyY2xlXCIsXG4gICAgc3ltYm9sU2l6ZTogMTAwLFxuICAgIHN5bWJvbE9mZnNldDogMCxcbiAgICBzeW1ib2xTdHJva2VXaWR0aDogMS41LFxuICAgIHN5bWJvbEJhc2VGaWxsQ29sb3I6IFwidHJhbnNwYXJlbnRcIixcbiAgICBzeW1ib2xCYXNlU3Ryb2tlQ29sb3I6IGdyYXksXG4gICAgdGl0bGVMaW1pdDogMTgwLFxuICAgIHRpdGxlT3JpZW50OiBcInRvcFwiLFxuICAgIHRpdGxlUGFkZGluZzogNSxcbiAgICBsYXlvdXQ6IHtcbiAgICAgIG9mZnNldDogMTgsXG4gICAgICBkaXJlY3Rpb246IFwiaG9yaXpvbnRhbFwiLFxuICAgICAgbGVmdDogICB7IGRpcmVjdGlvbjogXCJ2ZXJ0aWNhbFwiIH0sXG4gICAgICByaWdodDogIHsgZGlyZWN0aW9uOiBcInZlcnRpY2FsXCIgfVxuICAgIH1cbiAgfSxcblxuICAvLyBkZWZhdWx0cyBmb3Igc2NhbGUgcmFuZ2VzXG4gIHJhbmdlOiB7XG4gICAgY2F0ZWdvcnk6IHtcbiAgICAgIHNjaGVtZTogXCJ0YWJsZWF1MTBcIlxuICAgIH0sXG4gICAgb3JkaW5hbDoge1xuICAgICAgc2NoZW1lOiBcImJsdWVzXCJcbiAgICB9LFxuICAgIGhlYXRtYXA6IHtcbiAgICAgIHNjaGVtZTogXCJ5ZWxsb3dncmVlbmJsdWVcIlxuICAgIH0sXG4gICAgcmFtcDoge1xuICAgICAgc2NoZW1lOiBcImJsdWVzXCJcbiAgICB9LFxuICAgIGRpdmVyZ2luZzoge1xuICAgICAgc2NoZW1lOiBcImJsdWVvcmFuZ2VcIixcbiAgICAgIGV4dGVudDogWzEsIDBdXG4gICAgfSxcbiAgICBzeW1ib2w6IFtcbiAgICAgIFwiY2lyY2xlXCIsXG4gICAgICBcInNxdWFyZVwiLFxuICAgICAgXCJ0cmlhbmdsZS11cFwiLFxuICAgICAgXCJjcm9zc1wiLFxuICAgICAgXCJkaWFtb25kXCIsXG4gICAgICBcInRyaWFuZ2xlLXJpZ2h0XCIsXG4gICAgICBcInRyaWFuZ2xlLWRvd25cIixcbiAgICAgIFwidHJpYW5nbGUtbGVmdFwiXG4gICAgXVxuICB9XG59O1xuXG4iLCJleHBvcnQgZnVuY3Rpb24gZW5jb2RpZnkob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLnJlZHVjZSgoZW5jb2RlLCBrZXkpID0+IHtcbiAgICBlbmNvZGVba2V5XSA9IHsgdmFsdWU6IG9ialtrZXldIH07XG4gICAgcmV0dXJuIGVuY29kZTtcbiAgfSwge30pO1xufVxuIiwiaW1wb3J0IHsgdmVnYUNvbmZpZyB9IGZyb20gXCIuL3ZlZ2FDb25maWdcIjtcbmltcG9ydCB7IGVuY29kaWZ5IH0gZnJvbSBcIi4vdXRpbFwiO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfU1RZTEUgPSBPYmplY3Qua2V5cyh2ZWdhQ29uZmlnLnN0eWxlKS5yZWR1Y2UoXG4gIChzdHlsZXMsIGtleSkgPT4ge1xuICAgIHN0eWxlc1trZXldID0gZW5jb2RpZnkodmVnYUNvbmZpZy5zdHlsZVtrZXldKTtcbiAgICByZXR1cm4gc3R5bGVzO1xuICB9LFxuICB7fVxuKTtcbiIsImltcG9ydCB7IHZlZ2FDb25maWcgYXMgdmdDb25maWcgfSBmcm9tIFwiLi4vdmVnYUNvbmZpZ1wiO1xuXG5jb25zdCBFTVBUWV9FTkNPREUgPSB7XG4gIGVudGVyOiB7IG9wYWNpdHk6IHsgdmFsdWU6IDAgfSB9LFxuICBleGl0OiB7IG9wYWNpdHk6IHsgdmFsdWU6IDAgfSB9LFxuICB1cGRhdGU6IHsgfVxufTtcblxuXG5mdW5jdGlvbiBheGlzQ29tcFBvcyhzcGVjKSB7XG4gIGlmICghc3BlYykge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICBjb25zdCBzY05hbWUgPSBzcGVjLnNjYWxlO1xuICBpZiAoc3BlYy5vcmllbnQgPT09IFwibGVmdFwiIHx8IHNwZWMub3JpZW50ID09PSBcInJpZ2h0XCIpIHtcbiAgICByZXR1cm4geyB5OiB7IHNjYWxlOiBzY05hbWUsIGZpZWxkOiBcInZhbHVlXCIsIGJhbmQ6IDAuNSB9IH07XG4gIH1cbiAgcmV0dXJuIHsgeDogeyBzY2FsZTogc2NOYW1lLCBmaWVsZDogXCJ2YWx1ZVwiLCBiYW5kOiAwLjUgfSB9O1xufVxuZnVuY3Rpb24gbGVnZW5kQmFuZFBvcyhzcGVjKSB7XG4gIGxldCBnckxlbmd0aCA9IHNwZWMgPyBzcGVjLmdyYWRpZW50TGVuZ3RoIDogdW5kZWZpbmVkO1xuICBsZXQgZ3JUaGlja25lc3MgPSBzcGVjID8gc3BlYy5ncmFkaWVudFRoaWNrbmVzcyA6IHVuZGVmaW5lZDtcbiAgZ3JMZW5ndGggPSBnckxlbmd0aCB8fCB2Z0NvbmZpZy5sZWdlbmQuZ3JhZGllbnRMZW5ndGg7XG4gIGdyVGhpY2tuZXNzID0gZ3JUaGlja25lc3MgfHwgdmdDb25maWcubGVnZW5kLmdyYWRpZW50VGhpY2tuZXNzO1xuXG4gIGlmIChzcGVjICYmIHNwZWMuZGlyZWN0aW9uID09PSBcImhvcml6b250YWxcIikge1xuICAgIHJldHVybiB7XG4gICAgICB4OiB7IHNpZ25hbDogXCIoMS1kYXR1bS5wZXJjKVwiLCBtdWx0OiBnckxlbmd0aCB9LFxuICAgICAgeDI6IHsgc2lnbmFsOiBcIigxLWRhdHVtLnBlcmMyKVwiLCBtdWx0OiBnckxlbmd0aCB9LFxuICAgICAgeTogeyB2YWx1ZTogMCB9LFxuICAgICAgaGVpZ2h0OiB7IHZhbHVlOiBnclRoaWNrbmVzcyB9XG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHk6IHsgc2lnbmFsOiBcIigxLWRhdHVtLnBlcmMpXCIsIG11bHQ6IGdyTGVuZ3RoIH0sXG4gICAgeTI6IHsgc2lnbmFsOiBcIigxLWRhdHVtLnBlcmMyKVwiLCBtdWx0OiBnckxlbmd0aCB9LFxuICAgIHg6IHsgdmFsdWU6IDAgfSxcbiAgICB3aWR0aDogeyB2YWx1ZTogZ3JUaGlja25lc3MgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBsZWdlbmRMYWJsZVBvcyhzcGVjKSB7XG4gIGxldCBnckxlbmd0aCA9IHNwZWMgPyBzcGVjLmdyYWRpZW50TGVuZ3RoIDogdW5kZWZpbmVkO1xuICBnckxlbmd0aCA9IGlzTmFOKGdyTGVuZ3RoKSA/IHZnQ29uZmlnLmxlZ2VuZC5ncmFkaWVudExlbmd0aCA6IGdyTGVuZ3RoO1xuICBsZXQgZ3JUaGlja25lc3MgPSBzcGVjID8gc3BlYy5ncmFkaWVudFRoaWNrbmVzcyA6IHVuZGVmaW5lZDtcbiAgZ3JUaGlja25lc3MgPSBpc05hTihnclRoaWNrbmVzcykgPyB2Z0NvbmZpZy5sZWdlbmQuZ3JhZGllbnRUaGlja25lc3MgOiBnclRoaWNrbmVzcztcbiAgbGV0IGdyTGFiZWxPZmZzZXQgPSBzcGVjID8gc3BlYy5ncmFkaWVudExhYmVsT2Zmc2V0IDogdW5kZWZpbmVkO1xuICBnckxhYmVsT2Zmc2V0ID0gaXNOYU4oZ3JMYWJlbE9mZnNldCkgPyB2Z0NvbmZpZy5sZWdlbmQuZ3JhZGllbnRMYWJlbE9mZnNldCA6IGdyTGFiZWxPZmZzZXQ7XG5cbiAgaWYgKHNwZWMudHlwZSA9PT0gXCJzeW1ib2xcIikge1xuICAgIHJldHVybiB7XG4gICAgICB4OiB7IHZhbHVlOiAwIH0sXG4gICAgICB5OiB7IHZhbHVlOiAwIH0sXG4gICAgICBkeDogeyB2YWx1ZTogMTYgfSxcbiAgICAgIGR5OiB7IHZhbHVlOiA2IH1cbiAgICB9O1xuICB9XG4gIGlmIChzcGVjLmRpcmVjdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHsgdmFsdWU6IDAsIH0sXG4gICAgICB5OiB7IHNpZ25hbDogYCgxLWRhdHVtLnBlcmMpICogY2xhbXAoaGVpZ2h0LCA2NCwgJHtnckxlbmd0aH0pYCB9LFxuICAgICAgZHg6IHsgdmFsdWU6IGdyVGhpY2tuZXNzICsgZ3JMYWJlbE9mZnNldCB9XG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHg6IHsgc2lnbmFsOiBgKGRhdHVtLnBlcmMpICogY2xhbXAod2lkdGgsIDY0LCAke2dyTGVuZ3RofSlgIH0sXG4gICAgeTogeyB2YWx1ZTogMCwgfSxcbiAgICBkeTogeyB2YWx1ZTogZ3JUaGlja25lc3MgKyBnckxhYmVsT2Zmc2V0IH1cbiAgfTtcbn1cblxuXG5mdW5jdGlvbiB0aXRsZVBvcyhvcmllbnQpIHtcbiAgaWYgKG9yaWVudCA9PT0gXCJ0b3BcIikge1xuICAgIHJldHVybiB7eDogeyBzaWduYWw6IFwid2lkdGhcIiwgbXVsdDogMC41fSwgeToge3ZhbHVlOiAtMjJ9fTtcbiAgfSBpZiAob3JpZW50ID09PSBcImJvdHRvbVwiKSB7XG4gICAgcmV0dXJuIHt4OiB7IHNpZ25hbDogXCJ3aWR0aFwiLCBtdWx0OiAwLjV9LCB5OiB7dmFsdWU6IDIyfX07XG4gIH0gaWYgKG9yaWVudCA9PT0gXCJyaWdodFwiKSB7XG4gICAgcmV0dXJuIHt5OiB7IHNpZ25hbDogXCJoZWlnaHRcIiwgbXVsdDogMC41fSwgeDoge3ZhbHVlOiAyMn19O1xuICB9XG4gIHJldHVybiB7eTogeyBzaWduYWw6IFwiaGVpZ2h0XCIsIG11bHQ6IDAuNX0sIHg6IHt2YWx1ZTogLTIyfX07XG5cbn1cbmZ1bmN0aW9uIHRpdGxlQW5nbGUob3JpZW50KSB7XG4gIGlmIChvcmllbnQgPT09IFwibGVmdFwiKSB7XG4gICAgcmV0dXJuIDI3MDtcbiAgfVxuICBpZiAob3JpZW50ID09PSBcInJpZ2h0XCIpIHtcbiAgICByZXR1cm4gOTA7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5mdW5jdGlvbiBiYXNlbGluZShvcmllbnQpIHtcbiAgaWYgKG9yaWVudCA9PT0gXCJ0b3BcIikge1xuICAgIHJldHVybiBcImJvdHRvbVwiO1xuICB9XG4gIGlmIChvcmllbnQgPT09IFwiYm90dG9tXCIpIHtcbiAgICByZXR1cm4gXCJ0b3BcIjtcbiAgfVxuICByZXR1cm4gXCJtaWRkbGVcIjtcbn1cbmZ1bmN0aW9uIHRpY2tMZW5ndGgoYXR0ciwgb3JpZW50KSB7XG4gIGlmIChhdHRyID09PSBcIngyXCIpIHtcbiAgICBpZiAob3JpZW50ID09PSBcInJpZ2h0XCIpIHtcbiAgICAgIHJldHVybiB2Z0NvbmZpZy5heGlzLnRpY2tTaXplO1xuICAgIH1cbiAgICBpZiAob3JpZW50ID09PSBcImxlZnRcIikge1xuICAgICAgcmV0dXJuIC12Z0NvbmZpZy5heGlzLnRpY2tTaXplO1xuICAgIH1cbiAgfSBlbHNlIGlmIChhdHRyID09PSBcInkyXCIpIHtcbiAgICBpZiAob3JpZW50ID09PSBcImJvdHRvbVwiKSB7XG4gICAgICByZXR1cm4gdmdDb25maWcuYXhpcy50aWNrU2l6ZTtcbiAgICB9XG4gICAgaWYgKG9yaWVudCA9PT0gXCJ0b3BcIikge1xuICAgICAgcmV0dXJuIC12Z0NvbmZpZy5heGlzLnRpY2tTaXplO1xuICAgIH1cbiAgfVxuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gYXhpc0xhYmVsQWxpZ24oc3BlYykge1xuICBpZiAoc3BlYyAmJiBzcGVjLmxhYmVsQWxpZ24pIHtcbiAgICByZXR1cm4gc3BlYy5sYWJlbEFsaWduO1xuICB9XG5cbiAgaWYgKHNwZWMgJiYgc3BlYy5vcmllbnQgPT09IFwicmlnaHRcIikge1xuICAgIHJldHVybiBcImxlZnRcIjtcbiAgfVxuICBpZiAoc3BlYyAmJiBzcGVjLm9yaWVudCA9PT0gXCJsZWZ0XCIpIHtcbiAgICByZXR1cm4gXCJyaWdodFwiO1xuICB9XG4gIHJldHVybiBcImNlbnRlclwiO1xufVxuXG5mdW5jdGlvbiBsZWdlbmRMYWJlbEFsaWduKHNwZWMpIHtcbiAgaWYgKHNwZWMgJiYgc3BlYy5sYWJlbEFsaWduKSB7XG4gICAgcmV0dXJuIHNwZWMubGFiZWxBbGlnbjtcbiAgfVxuXG4gIGlmIChzcGVjICYmIHNwZWMub3JpZW50ID09PSBcInJpZ2h0XCIpIHtcbiAgICByZXR1cm4gXCJsZWZ0XCI7XG4gIH1cbiAgaWYgKHNwZWMgJiYgc3BlYy5vcmllbnQgPT09IFwibGVmdFwiKSB7XG4gICAgcmV0dXJuIFwicmlnaHRcIjtcbiAgfVxuICByZXR1cm4gXCJjZW50ZXJcIjtcbn1cblxuZnVuY3Rpb24gbGFibGVBbmdsZShvcmllbnQsIHNjYWxlVHlwZSkge1xuICBpZiAob3JpZW50ID09PSBcInRvcFwiIHx8IG9yaWVudCA9PT0gXCJib3R0b21cIikge1xuICAgIGlmIChbXCJiYW5kXCIsIFwicG9pbnRcIl0uaW5kZXhPZihzY2FsZVR5cGUpID49IDApIHtcbiAgICAgIHJldHVybiAyNzA7XG4gICAgfVxuICB9XG4gIHJldHVybiAwO1xufVxuZnVuY3Rpb24gYXhpc1RleHREcG9zKGF0dHIsIHNwZWMpIHtcbiAgY29uc3Qgb3JpZW50ID0gc3BlYyA/IHNwZWMub3JpZW50IDogdW5kZWZpbmVkO1xuXG4gIGlmIChzcGVjLnRpY2tzID09PSBmYWxzZSkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIGlmIChhdHRyID09PSBcImR4XCIpIHtcbiAgICBpZiAob3JpZW50ID09PSBcInJpZ2h0XCIpIHtcbiAgICAgIHJldHVybiA3O1xuICAgIH1cbiAgICBpZiAob3JpZW50ID09PSBcImxlZnRcIikge1xuICAgICAgcmV0dXJuIC03O1xuICAgIH1cbiAgfSBlbHNlIGlmIChhdHRyID09PSBcImR5XCIpIHtcbiAgICBpZiAob3JpZW50ID09PSBcImJvdHRvbVwiKSB7XG4gICAgICByZXR1cm4gNztcbiAgICB9XG4gICAgaWYgKG9yaWVudCA9PT0gXCJ0b3BcIikge1xuICAgICAgcmV0dXJuIC03O1xuICAgIH1cbiAgfVxuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gZ3JpZExlbmd0aChvcmllbnQsIGdyaWRTY2FsZSl7XG4gIGlmIChvcmllbnQgPT09IFwiYm90dG9tXCIgfHwgb3JpZW50ID09PSBcInRvcFwiKSB7XG4gICAgaWYgKCFncmlkU2NhbGUpe1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeTI6IHtzaWduYWw6IFwiaGVpZ2h0XCIsIG11bHQ6IC0xfSxcbiAgICAgICAgeToge3ZhbHVlOiAwfSxcbiAgICAgICAgeDI6IHt2YWx1ZTogMH1cbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAvLyB5Mjoge3NpZ25hbDogXCJoZWlnaHRcIn0sXG4gICAgICAvLyB5OiB7c2lnbmFsOiBcImhlaWdodFwiLCBtdWx0OiAtMX0sXG4gICAgICB5Mjoge3NpZ25hbDogXCJoZWlnaHRcIiwgbXVsdDogLTF9LFxuICAgICAgeToge3ZhbHVlOiAwfSxcbiAgICAgIHgyOiB7dmFsdWU6IDB9XG4gICAgfTtcblxuICB9XG5cbiAgaWYgKG9yaWVudCA9PT0gXCJyaWdodFwiIHx8IG9yaWVudCA9PT0gXCJsZWZ0XCIpIHtcbiAgICBpZiAoIWdyaWRTY2FsZSl7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4Mjoge3NpZ25hbDogXCJ3aWR0aFwifSxcbiAgICAgICAgeDoge3ZhbHVlOiAwfSxcbiAgICAgICAgeTI6IHt2YWx1ZTogMH1cbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB4Mjoge3NpZ25hbDogXCJ3aWR0aFwifSxcbiAgICAgIHg6IHt2YWx1ZTogMH0sXG4gICAgICB5Mjoge3ZhbHVlOiAwfVxuICAgIH07XG5cbiAgfVxuXG59XG5cbmZ1bmN0aW9uIGRvbWFpbkxlbmd0aChvcmllbnQpIHtcbiAgaWYgKG9yaWVudCA9PT0gXCJib3R0b21cIiB8fCBvcmllbnQgPT09IFwidG9wXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgeTI6IHsgdmFsdWU6IDAgfSxcbiAgICAgIHgyOiB7IHNpZ25hbDogXCJ3aWR0aFwiIH0sXG4gICAgICB5OiB7IHZhbHVlOiAwIH0sXG4gICAgICB4OiB7IHZhbHVlOiAwIH1cbiAgICB9O1xuICB9XG4gIGlmIChvcmllbnQgPT09IFwicmlnaHRcIiB8fCBvcmllbnQgPT09IFwibGVmdFwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHkyOiB7IHNpZ25hbDogXCJoZWlnaHRcIiwgbXVsdDogMSB9LFxuICAgICAgeDI6IHsgdmFsdWU6IDAgfSxcbiAgICAgIHk6IHsgdmFsdWU6IDAgfSxcbiAgICAgIHg6IHsgdmFsdWU6IDAgfVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB5MjogeyB2YWx1ZTogMCB9LFxuICAgIHgyOiB7IHZhbHVlOiAwIH1cbiAgfTtcbn1cblxuZXhwb3J0IHtcblxuICBsZWdlbmRCYW5kUG9zLFxuICBsZWdlbmRMYWJsZVBvcyxcbiAgbGVnZW5kTGFiZWxBbGlnbixcblxuICB0aXRsZVBvcyxcbiAgdGl0bGVBbmdsZSxcbiAgYmFzZWxpbmUsXG5cbiAgYXhpc0NvbXBQb3MsXG4gIGxhYmxlQW5nbGUsXG4gIHRpY2tMZW5ndGgsXG4gIGF4aXNMYWJlbEFsaWduLFxuICBheGlzVGV4dERwb3MsXG4gIGdyaWRMZW5ndGgsXG4gIGRvbWFpbkxlbmd0aCxcblxuICBFTVBUWV9FTkNPREVcbn07IiwiaW1wb3J0IHsgdmVnYUNvbmZpZyBhcyB2Z0NvbmZpZyB9IGZyb20gXCIuLi92ZWdhQ29uZmlnXCI7XG5pbXBvcnQgKiBhcyB2ZyBmcm9tIFwiLi92ZWdhRGVmYXVsdFwiO1xuaW1wb3J0IHsgY29weSB9IGZyb20gXCIuLi8uLi91dGlsL3V0aWxcIjtcbmNvbnN0IExFR0VORF9TWU1CT0xfQ0hBTk5FTCA9IFtcbiAgXCJmaWxsXCIsXG4gIFwib3BhY2l0eVwiLFxuICBcInNoYXBlXCIsXG4gIFwic2l6ZVwiLFxuICBcInN0cm9rZVwiLFxuICBcInN0cm9rZURhc2hcIixcbiAgXCJzdHJva2VXaWR0aFwiXG5dO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9FTkNPREVfTEVHRU5EID0ge1xuXG4gIHRpdGxlOiAoKSA9PiB7XG4gICAgY29uc3QgZGVmYXVsdFRpdGxlRW5jb2RlID0ge1xuICAgICAgZm9udFNpemU6IHsgdmFsdWU6IHZnQ29uZmlnLnN0eWxlW1wiZ3VpZGUtdGl0bGVcIl0uZm9udFNpemUgfSxcbiAgICAgIGZvbnRXZWlnaHQ6IHsgdmFsdWU6IFwiYm9sZFwiIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHVwZGF0ZTogZGVmYXVsdFRpdGxlRW5jb2RlLFxuICAgICAgZW50ZXI6IHsuLi5kZWZhdWx0VGl0bGVFbmNvZGUsIG9wYWNpdHk6IHt2YWx1ZTogMH19LFxuICAgICAgZXhpdDogey4uLmRlZmF1bHRUaXRsZUVuY29kZSwgb3BhY2l0eToge3ZhbHVlOiAwfX0sXG4gICAgfTtcbiAgfSxcbiAgbGFiZWxzOiBzcGVjID0+IHtcbiAgICBpZiAoIXNwZWMpIHtcbiAgICAgIHJldHVybiBjb3B5KHZnLkVNUFRZX0VOQ09ERSk7XG4gICAgfVxuXG4gICAgbGV0IGRlZmF1bHRFbmNvZGUgPSB7XG4gICAgICAuLi52Zy5sZWdlbmRMYWJsZVBvcyhzcGVjKSxcbiAgICAgIHRleHQ6IHsgZmllbGQ6IFwibGFiZWxcIiB9LFxuICAgICAgZm9udFNpemU6IHsgdmFsdWU6IHZnQ29uZmlnLnN0eWxlW1wiZ3VpZGUtbGFiZWxcIl0uZm9udFNpemUgfSxcbiAgICAgIGFsaWduOiB7IHZhbHVlOiB2Zy5sZWdlbmRMYWJlbEFsaWduKHNwZWMpIH0sXG4gICAgICBiYXNlbGluZToge1xuICAgICAgICB2YWx1ZTogc3BlYy5iYXNlbGluZSB8fCB2Zy5iYXNlbGluZShzcGVjLm9yaWVudClcbiAgICAgIH0sXG4gICAgICBhbmdsZToge1xuICAgICAgICB2YWx1ZTogc3BlYy5sYWJlbEFuZ2xlIHx8IHZnLmxhYmxlQW5nbGUoc3BlYy5vcmllbnQsIHNwZWMuc2NhbGVUeXBlKVxuICAgICAgfVxuICAgIH07XG5cblxuICAgIHJldHVybiB7XG4gICAgICBlbnRlcjogey4uLmRlZmF1bHRFbmNvZGUsIG9wYWNpdHk6IHsgdmFsdWU6IDAgfSB9LFxuICAgICAgZXhpdDogey4uLmRlZmF1bHRFbmNvZGUsIG9wYWNpdHk6IHsgdmFsdWU6IDAgfSB9LFxuICAgICAgdXBkYXRlOiBkZWZhdWx0RW5jb2RlXG4gICAgfTtcbiAgfSxcbiAgc3ltYm9sczogc3BlYyA9PiB7XG4gICAgY29uc3QgZGVmYXVsdEVuY29kZSA9IHtcbiAgICAgIHk6IHsgdmFsdWU6IDYgfSxcbiAgICAgIHg6IHsgdmFsdWU6IDYgfSxcbiAgICAgIHNoYXBlOiB7IHZhbHVlOiB2Z0NvbmZpZy5sZWdlbmQuc3ltYm9sVHlwZSB9LFxuICAgICAgc2l6ZTogeyB2YWx1ZTogdmdDb25maWcubGVnZW5kLnN5bWJvbFNpemUgfSxcbiAgICAgIHN0cm9rZVdpZHRoOiB7IHZhbHVlOiB2Z0NvbmZpZy5sZWdlbmQuc3ltYm9sU3Ryb2tlV2lkdGggfVxuICAgIH07XG5cbiAgICBpZiAoc3BlYykge1xuICAgICAgaWYgKCFzcGVjLmZpbGwpIHtcbiAgICAgICAgZGVmYXVsdEVuY29kZS5zdHJva2UgPSB7XG4gICAgICAgICAgdmFsdWU6IHZnQ29uZmlnLmxlZ2VuZC5zeW1ib2xCYXNlU3Ryb2tlQ29sb3JcbiAgICAgICAgfTtcbiAgICAgICAgZGVmYXVsdEVuY29kZS5maWxsID0ge1xuICAgICAgICAgIHZhbHVlOiB2Z0NvbmZpZy5sZWdlbmQuc3ltYm9sQmFzZUZpbGxDb2xvclxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBMRUdFTkRfU1lNQk9MX0NIQU5ORUwuZm9yRWFjaChjaGFubmVsID0+IHtcbiAgICAgICAgaWYgKGNoYW5uZWwgPT09IFwic2hhcGVcIikge1xuICAgICAgICAgIGRlZmF1bHRFbmNvZGVbY2hhbm5lbF0gPSB7IHZhbHVlOiBzcGVjLnN5bWJvbFR5cGUgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3BlY1tjaGFubmVsXSkge1xuICAgICAgICAgIGRlZmF1bHRFbmNvZGVbY2hhbm5lbF0gPSB7IHNjYWxlOiBzcGVjW2NoYW5uZWxdLCBmaWVsZDogXCJ2YWx1ZVwiIH07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB1cGRhdGU6IGRlZmF1bHRFbmNvZGUsXG4gICAgICBlbnRlcjogT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdEVuY29kZSwgeyBvcGFjaXR5OiB7IHZhbHVlOiAwIH0gfSksXG4gICAgICBleGl0OiBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0RW5jb2RlLCB7IG9wYWNpdHk6IHsgdmFsdWU6IDAgfSB9KVxuICAgIH07XG4gIH0sXG4gIGdyYWRpZW50OiBzcGVjID0+IHtcbiAgICBpZiAoIXNwZWMpIHtcbiAgICAgIHJldHVybiBjb3B5KHZnLkVNUFRZX0VOQ09ERSk7XG4gICAgfVxuXG4gICAgbGV0IGdyTGVuZ3RoID0gc3BlYy5ncmFkaWVudExlbmd0aCB8fFxuICAgICAge1xuICAgICAgICBzaWduYWw6IGBjbGFtcCgke3NwZWMuZGlyZWN0aW9uID09PSBcInZlcnRpY2FsXCIgPyBcImhlaWdodFwiIDogXCJ3aWR0aFwifSwgNjQsICR7dmdDb25maWcubGVnZW5kLmdyYWRpZW50TGVuZ3RofSlgXG4gICAgICB9LFxuICAgICAgZ3JUaGlja25lc3MgPSBzcGVjLmdyYWRpZW50VGhpY2tuZXNzIHx8IHZnQ29uZmlnLmxlZ2VuZC5ncmFkaWVudFRoaWNrbmVzcztcbiAgICBpZiAodHlwZW9mIGdyTGVuZ3RoID09PSBcIm51bWJlclwiKSB7XG4gICAgICBnckxlbmd0aD0ge1xuICAgICAgICBzaWduYWw6IGBjbGFtcCgke3NwZWMuZGlyZWN0aW9uID09PSBcInZlcnRpY2FsXCIgPyBcImhlaWdodFwiIDogXCJ3aWR0aFwifSwgNjQsICR7Z3JMZW5ndGh9KWBcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGRlZmF1bHRFbmNvZGUgPSB7XG4gICAgICB4OiB7IHZhbHVlOiAwIH0sXG4gICAgICB5OiB7IHZhbHVlOiAwIH0sXG4gICAgICB3aWR0aDpcbiAgICAgICAgc3BlYy5kaXJlY3Rpb24gPT09IFwidmVydGljYWxcIlxuICAgICAgICAgID8geyB2YWx1ZTogZ3JUaGlja25lc3MgfVxuICAgICAgICAgIDogZ3JMZW5ndGgsXG4gICAgICBoZWlnaHQ6XG4gICAgICAgIHNwZWMuZGlyZWN0aW9uID09PSBcInZlcnRpY2FsXCJcbiAgICAgICAgICA/IGdyTGVuZ3RoXG4gICAgICAgICAgOiB7IHZhbHVlOiBnclRoaWNrbmVzcyB9XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICB1cGRhdGU6IGRlZmF1bHRFbmNvZGUsXG4gICAgICBlbnRlcjogT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdEVuY29kZSwgeyBvcGFjaXR5OiB7IHZhbHVlOiAwIH0gfSksXG4gICAgICBleGl0OiBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0RW5jb2RlLCB7IG9wYWNpdHk6IHsgdmFsdWU6IDAgfSB9KVxuICAgIH07XG4gIH0sXG4gIGVudHJpZXM6ICgpID0+IHtcbiAgICByZXR1cm4gY29weSh2Zy5FTVBUWV9FTkNPREUpO1xuICB9LFxuICBsZWdlbmQ6ICgpID0+IHtcbiAgICByZXR1cm4gY29weSh2Zy5FTVBUWV9FTkNPREUpO1xuICB9LFxuICBwYWlyczogc3BlYyA9PiB7XG4gICAgbGV0IGRlZmF1bHRFbmNvZGUgPSB7IHk6IHsgc2lnbmFsOiBcImRhdHVtLmluZGV4ICogMTNcIiB9IH07XG4gICAgaWYgKHNwZWMgJiYgc3BlYy5kaXJlY3Rpb24gPT09IFwiaG9yaXpvbnRhbFwiKSB7XG4gICAgICBkZWZhdWx0RW5jb2RlID0geyB4OiB7IHNpZ25hbDogXCJkYXR1bS5pbmRleCAqIDUwXCIgfSB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB1cGRhdGU6IGRlZmF1bHRFbmNvZGUsXG4gICAgICBlbnRlcjogT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdEVuY29kZSwgeyBvcGFjaXR5OiB7IHZhbHVlOiAwIH0gfSksXG4gICAgICBleGl0OiBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0RW5jb2RlLCB7IG9wYWNpdHk6IHsgdmFsdWU6IDAgfSB9KVxuICAgIH07XG4gIH0sXG4gIGJhbmRzOiBzcGVjID0+IHtcbiAgICBsZXQgZGVmYXVsdEVuY29kZSA9IHtcbiAgICAgIC4uLnZnLmxlZ2VuZEJhbmRQb3Moc3BlYyksXG4gICAgICBmaWxsOiB7XG4gICAgICAgIHZhbHVlOiB2Z0NvbmZpZy5sZWdlbmQuc3ltYm9sQmFzZUZpbGxDb2xvclxuICAgICAgfVxuICAgIH07XG4gICAgaWYgKHNwZWMgJiYgKHNwZWMuZmlsbCB8fCBzcGVjLnN0cm9rZSkpIHtcbiAgICAgIGRlZmF1bHRFbmNvZGUuZmlsbCA9IHsgc2NhbGU6IHNwZWMuZmlsbCB8fCBzcGVjLnN0cm9rZSwgZmllbGQ6IFwidmFsdWVcIiB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB1cGRhdGU6IGRlZmF1bHRFbmNvZGUsXG4gICAgICBlbnRlcjoge1xuICAgICAgICAuLi5kZWZhdWx0RW5jb2RlLFxuICAgICAgICBvcGFjaXR5OiB7IHZhbHVlOiAwIH1cbiAgICAgIH0sXG4gICAgICBleGl0OiB7XG4gICAgICAgIC4uLmRlZmF1bHRFbmNvZGUsXG4gICAgICAgIG9wYWNpdHk6IHsgdmFsdWU6IDAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cbn07IiwiaW1wb3J0IHsgZW5jb2RpZnkgfSBmcm9tIFwiLi4vdXRpbFwiO1xuaW1wb3J0IHsgdmVnYUNvbmZpZyBhcyB2Z0NvbmZpZyB9IGZyb20gXCIuLi92ZWdhQ29uZmlnXCI7XG5leHBvcnQgY29uc3QgREVGQVVMVF9FTkNPREVfTUFSSyA9IHtcbiAgZW50ZXI6IHsgb3BhY2l0eTogeyB2YWx1ZTogMCB9IH0sXG4gIGV4aXQ6IHsgb3BhY2l0eTogeyB2YWx1ZTogMCB9IH0sXG4gIGxpbmU6IHtcbiAgICB1cGRhdGU6IHtcbiAgICAgIC4uLmVuY29kaWZ5KHZnQ29uZmlnLmxpbmUpLFxuICAgICAgZmlsbDogeyB2YWx1ZTogXCJub25lXCIgfVxuICAgIH1cbiAgfSxcbiAgYXJlYToge3VwZGF0ZTogZW5jb2RpZnkodmdDb25maWcuYXJlYSl9LFxuICB0cmFpbDoge3VwZGF0ZTogZW5jb2RpZnkodmdDb25maWcudHJhaWwpfSxcbiAgc3ltYm9sOiB7IHVwZGF0ZTogZW5jb2RpZnkodmdDb25maWcuc3ltYm9sKSAgfSxcbiAgcmVjdDogeyAgICB1cGRhdGU6IGVuY29kaWZ5KHZnQ29uZmlnLnJlY3QpIH0sXG4gIHJ1bGU6IHsgICAgdXBkYXRlOiBlbmNvZGlmeSh2Z0NvbmZpZy5ydWxlKSAgfSxcbiAgdGV4dDogeyAgICB1cGRhdGU6IGVuY29kaWZ5KHZnQ29uZmlnLnRleHQpICB9XG59OyIsImltcG9ydCB7IHZlZ2FDb25maWcgYXMgdmdDb25maWcgfSBmcm9tIFwiLi4vdmVnYUNvbmZpZ1wiO1xuaW1wb3J0ICogYXMgdmcgZnJvbSBcIi4vdmVnYURlZmF1bHRcIjtcbmltcG9ydCB7IGlzTnVtYmVyLCBjb3B5IH0gZnJvbSBcIi4uLy4uL3V0aWwvdXRpbFwiO1xuXG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VOQ09ERV9BWElTID0ge1xuICBheGlzOiAoKSA9PiB7XG4gICAgcmV0dXJuIGNvcHkodmcuRU1QVFlfRU5DT0RFKTtcbiAgfSxcbiAgbGFiZWxzOiBzcGVjID0+IHtcbiAgICBpZiAoIXNwZWMpIHtcbiAgICAgIHJldHVybiBjb3B5KHZnLkVNUFRZX0VOQ09ERSk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZW50ID0gc3BlYyA/IHNwZWMub3JpZW50IDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHNjYWxlVHlwZSA9IHNwZWMgPyBzcGVjLnNjYWxlVHlwZSA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGRlZmF1bHRFbmNvZGUgPSB7XG4gICAgICAuLi52Zy5heGlzQ29tcFBvcyhzcGVjKSxcbiAgICAgIHRleHQ6IHsgZmllbGQ6IFwibGFiZWxcIiB9LFxuICAgICAgZm9udFNpemU6IHtcbiAgICAgICAgdmFsdWU6IHNwZWMgJiYgc3BlYy5sYWJlbEZvbnRTaXplID8gc3BlYy5sYWJlbEZvbnRTaXplIDogdmdDb25maWcuc3R5bGVbXCJndWlkZS1sYWJlbFwiXS5mb250U2l6ZVxuICAgICAgfSxcbiAgICAgIGR4OiB7IHZhbHVlOiB2Zy5heGlzVGV4dERwb3MoXCJkeFwiLCBzcGVjKSB9LFxuICAgICAgZHk6IHsgdmFsdWU6IHZnLmF4aXNUZXh0RHBvcyhcImR5XCIsIHNwZWMpIH0sXG4gICAgICBhbGlnbjogeyB2YWx1ZTogdmcuYXhpc0xhYmVsQWxpZ24oc3BlYykgfSxcbiAgICAgIGJhc2VsaW5lOiB7XG4gICAgICAgIHZhbHVlOiBzcGVjICYmIHNwZWMuYmFzZWxpbmUgPyBzcGVjLmJhc2VsaW5lIDogdmcuYmFzZWxpbmUob3JpZW50KVxuICAgICAgfSxcbiAgICAgIGFuZ2xlOiB7XG4gICAgICAgIHZhbHVlOlxuICAgICAgICAgIHNwZWMgJiYgaXNOdW1iZXIoc3BlYy5sYWJlbEFuZ2xlKVxuICAgICAgICAgICAgPyBzcGVjLmxhYmVsQW5nbGVcbiAgICAgICAgICAgIDogdmcubGFibGVBbmdsZShvcmllbnQsIHNjYWxlVHlwZSlcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGVudGVyOiB7IC4uLmRlZmF1bHRFbmNvZGUsIG9wYWNpdHk6IHsgdmFsdWU6IDAgfSB9LFxuICAgICAgZXhpdDogeyAuLi5kZWZhdWx0RW5jb2RlLCBvcGFjaXR5OiB7IHZhbHVlOiAwIH0gfSxcbiAgICAgIHVwZGF0ZTogZGVmYXVsdEVuY29kZVxuICAgIH07XG4gIH0sXG4gIHRpY2tzOiBzcGVjID0+IHtcbiAgICBpZiAoIXNwZWMpIHtcbiAgICAgIHJldHVybiBjb3B5KHZnLkVNUFRZX0VOQ09ERSk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZW50ID0gc3BlYyA/IHNwZWMub3JpZW50IDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGRlZmF1bHRFbmNvZGUgPSBPYmplY3QuYXNzaWduKHt9LCB2Zy5heGlzQ29tcFBvcyhzcGVjKSwge1xuICAgICAgeDI6IHsgdmFsdWU6IHZnLnRpY2tMZW5ndGgoXCJ4MlwiLCBvcmllbnQpIH0sXG4gICAgICB5MjogeyB2YWx1ZTogdmcudGlja0xlbmd0aChcInkyXCIsIG9yaWVudCkgfSxcbiAgICAgIHN0cm9rZVdpZHRoOiB7IHZhbHVlOiB2Z0NvbmZpZy5heGlzLnRpY2tXaWR0aCB9LFxuICAgICAgc3Ryb2tlOiB7IHZhbHVlOiB2Z0NvbmZpZy5heGlzLnRpY2tDb2xvciB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudGVyOiB7IC4uLmRlZmF1bHRFbmNvZGUsIG9wYWNpdHk6IHsgdmFsdWU6IDAgfSB9LFxuICAgICAgZXhpdDogeyAuLi5kZWZhdWx0RW5jb2RlLCBvcGFjaXR5OiB7IHZhbHVlOiAwIH0gfSxcbiAgICAgIHVwZGF0ZTogZGVmYXVsdEVuY29kZVxuICAgIH07XG4gIH0sXG4gIGdyaWQ6IHNwZWMgPT4ge1xuXG4gICAgY29uc3Qgb3JpZW50ID0gc3BlYyA/IHNwZWMub3JpZW50IDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGdyaWRTY2FsZSA9IHNwZWMgPyBzcGVjLmdyaWRTY2FsZSA6IHVuZGVmaW5lZDtcbiAgICBsZXQgZGVmYXVsdEVuY29kZSA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIHZnLmF4aXNDb21wUG9zKHNwZWMpLFxuICAgICAgdmcuZ3JpZExlbmd0aChvcmllbnQsIGdyaWRTY2FsZSksXG4gICAgICB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiB7IHZhbHVlOiB2Z0NvbmZpZy5heGlzLmdyaWRXaWR0aCB9LFxuICAgICAgICBzdHJva2U6IHsgdmFsdWU6IHZnQ29uZmlnLmF4aXMuZ3JpZENvbG9yIH1cbiAgICAgIH1cbiAgICApO1xuICAgIGlmIChzcGVjICYmIHNwZWMuZ3JpZERhc2gpIHtcbiAgICAgIGRlZmF1bHRFbmNvZGUuc3Ryb2tlRGFzaGFycmF5ID0ge1widmFsdWVcIjogc3BlYy5ncmlkRGFzaC5qb2luKFwiLFwiKX07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGVudGVyOiB7IC4uLmRlZmF1bHRFbmNvZGUsIG9wYWNpdHk6IHsgdmFsdWU6IDAgfSB9LFxuICAgICAgZXhpdDogeyAuLi5kZWZhdWx0RW5jb2RlLCBvcGFjaXR5OiB7IHZhbHVlOiAwIH0gfSxcbiAgICAgIHVwZGF0ZTogZGVmYXVsdEVuY29kZVxuICAgIH07XG4gIH0sXG4gIHRpdGxlOiBzcGVjID0+IHtcblxuXG4gICAgY29uc3Qgb3JpZW50ID0gc3BlYyA/IHNwZWMub3JpZW50IDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGRlZmF1bHRFbmNvZGUgPSBPYmplY3QuYXNzaWduKFxuICAgICAge1xuICAgICAgICBiYXNlbGluZTogeyB2YWx1ZTogdmcuYmFzZWxpbmUob3JpZW50KSB9LFxuICAgICAgICBhbGlnbjogeyB2YWx1ZTogXCJjZW50ZXJcIiB9LFxuICAgICAgICBhbmdsZTogeyB2YWx1ZTogdmcudGl0bGVBbmdsZShvcmllbnQpIH0sXG4gICAgICAgIGZvbnRTaXplOiB7IHZhbHVlOiB2Z0NvbmZpZy5zdHlsZVtcImd1aWRlLXRpdGxlXCJdLmZvbnRTaXplIH0sXG4gICAgICAgIGZvbnRXZWlnaHQ6IHsgdmFsdWU6IFwiYm9sZFwiIH1cbiAgICAgIH0sXG4gICAgICB2Zy50aXRsZVBvcyhvcmllbnQpXG4gICAgKTtcbiAgICByZXR1cm4ge1xuICAgICAgZW50ZXI6IHsgLi4uZGVmYXVsdEVuY29kZSwgb3BhY2l0eTogeyB2YWx1ZTogMCB9IH0sXG4gICAgICBleGl0OiB7IC4uLmRlZmF1bHRFbmNvZGUsIG9wYWNpdHk6IHsgdmFsdWU6IDAgfSB9LFxuICAgICAgdXBkYXRlOiBkZWZhdWx0RW5jb2RlXG4gICAgfTtcbiAgfSxcbiAgZG9tYWluOiBzcGVjID0+IHtcblxuICAgIGNvbnN0IGRlZmF1bHRFbmNvZGUgPSB7XG4gICAgICAuLi4oc3BlYyA/IHZnLmRvbWFpbkxlbmd0aChzcGVjLm9yaWVudCkgOiB7fSksXG4gICAgICBzdHJva2VXaWR0aDogeyB2YWx1ZTogdmdDb25maWcuYXhpcy5kb21haW5XaWR0aCB9LFxuICAgICAgc3Ryb2tlOiB7IHZhbHVlOiB2Z0NvbmZpZy5heGlzLmRvbWFpbkNvbG9yIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGVudGVyOiB7IC4uLmRlZmF1bHRFbmNvZGUsIG9wYWNpdHk6IHsgdmFsdWU6IDAgfSB9LFxuICAgICAgZXhpdDogeyAuLi5kZWZhdWx0RW5jb2RlLCBvcGFjaXR5OiB7IHZhbHVlOiAwIH0gfSxcbiAgICAgIHVwZGF0ZTogZGVmYXVsdEVuY29kZVxuICAgIH07XG4gIH1cbn07XG4iLCJpbXBvcnQgeyBERUZBVUxUX0VOQ09ERV9MRUdFTkQgfSBmcm9tIFwiLi9sZWdlbmRcIjtcbmltcG9ydCB7IERFRkFVTFRfRU5DT0RFX01BUksgfSBmcm9tIFwiLi9tYXJrXCI7XG5pbXBvcnQgeyBERUZBVUxUX0VOQ09ERV9BWElTIH0gZnJvbSBcIi4vYXhpc1wiO1xuXG4vLyBERUZBVUxUIGVudGVyIG1lYW5zIGluaXRpYWxzIG9mIHRoZSBlbnRlclxuZXhwb3J0IGNvbnN0IERFRkFVTFRfRU5DT0RFID0ge1xuICBtYXJrOiBERUZBVUxUX0VOQ09ERV9NQVJLLFxuICBheGlzOiBERUZBVUxUX0VOQ09ERV9BWElTLFxuICBsZWdlbmQ6IERFRkFVTFRfRU5DT0RFX0xFR0VORFxufTtcbiIsIi8qIGVzbGludC1kaXNhYmxlIHByZWZlci1kZXN0cnVjdHVyaW5nICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVzZS1iZWZvcmUtZGVmaW5lICovXG4vKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbmltcG9ydCAqIGFzIHZlZ2EgZnJvbSBcInZlZ2FcIjtcbmltcG9ydCAqIGFzIGQzIGZyb20gXCJkM1wiO1xuaW1wb3J0IHsgREVGQVVMVF9FQVNFIH0gZnJvbSBcIi4uL2RlZmF1bHRcIjtcblxuZnVuY3Rpb24gZ2V0RWFzZUZuKGVhc2VGbk5hbWUpIHtcbiAgY29uc3QgbmFtZSA9IGVhc2VGbk5hbWUgfHwgREVGQVVMVF9FQVNFLm1hcms7XG4gIHJldHVybiBkM1tgZWFzZSR7bmFtZS5zbGljZSgwLCAxKS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zbGljZSgxKX1gXTtcbn1cblxuXG5mdW5jdGlvbiBmaW5kQWZ0ZXJTaWJsaW5nKHNjZW5lLCBuYW1lKSB7XG4gIGxldCByZXN1bHQ7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2NlbmUuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBzID0gc2NlbmUuaXRlbXNbaV07XG4gICAgaWYgKHMubmFtZSA9PT0gbmFtZSkge1xuICAgICAgcmV0dXJuIHNjZW5lLml0ZW1zW2kgKyAxXTtcbiAgICB9XG4gICAgaWYgKHMuaXRlbXMpIHtcbiAgICAgIHJlc3VsdCA9IGZpbmRBZnRlclNpYmxpbmcocywgbmFtZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGdldEpvaW5JbmZvKGQsIGksIHN0ZXAsIHByb3ApIHtcbiAgcmV0dXJuIGQuX19nZW1pbmlfX1tzdGVwLnN0ZXBJZF1cbiAgICA/IGQuX19nZW1pbmlfX1tzdGVwLnN0ZXBJZF1bcHJvcF1cbiAgICA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZmluZENvbXAoc2NlbmUsIG5hbWUsIHJvbGUpIHtcbiAgbGV0IHJlc3VsdCA9IFtdO1xuICBzY2VuZS5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgIGlmIChpdGVtLml0ZW1zKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KGZpbmRDb21wKGl0ZW0sIG5hbWUsIHJvbGUpKTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbS5yb2xlID09PSByb2xlICYmIGl0ZW0ubmFtZSA9PT0gbmFtZSkge1xuICAgICAgcmVzdWx0LnB1c2goaXRlbSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDsgLy8gcmV0dXJuIHRoZSBmaXJzdCBpdGVtLlxufVxuZnVuY3Rpb24gc3ZnUmVuZGVyKHZlZ2FTY2VuZSkge1xuICBjb25zdCBzdmcgPSBuZXcgdmVnYS5TVkdSZW5kZXJlcigpXG4gICAgLmluaXRpYWxpemUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSwgMSwgMSlcbiAgICAucmVuZGVyKHZlZ2FTY2VuZSlcbiAgICAuc3ZnKCk7XG4gIGNvbnN0IHAgPSBuZXcgRE9NUGFyc2VyKCk7XG4gIGNvbnN0IGRvbSA9IHAucGFyc2VGcm9tU3RyaW5nKHN2ZywgXCJpbWFnZS9zdmcreG1sXCIpO1xuICByZXR1cm4gZG9tLmRvY3VtZW50RWxlbWVudDtcbn1cblxuZnVuY3Rpb24gZ3JhZGllbnRSZW5kZXIoZDNSb290U2VsZWN0aW9uLCBkKSB7XG4gIGNvbnN0IHMgPSB2ZWdhLnNjZW5lRnJvbUpTT04odmVnYS5zY2VuZVRvSlNPTihkLm1hcmspKTtcbiAgcy5pdGVtc1swXS5maWxsID0gZC5maWxsO1xuICBjb25zdCBkb20gPSBzdmdSZW5kZXIocyk7XG4gIGNvbnN0IGdyYWRpZW50RG9tID0gZG9tLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiZGVmc1wiKVswXS5maXJzdEVsZW1lbnRDaGlsZDtcbiAgbGV0IGQzRGVmc1NlbGVjdGlvbiA9IGQzUm9vdFNlbGVjdGlvbi5zZWxlY3QoXCJkZWZzXCIpO1xuICBpZiAoZDNEZWZzU2VsZWN0aW9uLmVtcHR5KCkpIHtcbiAgICBkM0RlZnNTZWxlY3Rpb24gPSBkM1Jvb3RTZWxlY3Rpb24uYXBwZW5kKFwiZGVmc1wiKTtcbiAgfVxuICBkM0RlZnNTZWxlY3Rpb24ubm9kZSgpLmFwcGVuZENoaWxkKGdyYWRpZW50RG9tKTtcbiAgcmV0dXJuIGAke3dpbmRvdy5sb2NhdGlvbi5vcmlnaW4gKyB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWV9IyR7XG4gICAgZ3JhZGllbnREb20uaWRcbiAgfWA7XG59XG5cblxuZnVuY3Rpb24gcHJvcE1hcChwcm9wKSB7XG4gIGxldCBwcm9wTmFtZSA9IHByb3A7XG4gIGxldCB0d2Vha3M7XG4gIGlmICh0eXBlb2YgcHJvcCA9PT0gXCJvYmplY3RcIikge1xuICAgIHByb3BOYW1lID0gcHJvcC5uYW1lO1xuICAgIHR3ZWFrcyA9IHByb3AudHdlYWtzO1xuICB9XG4gIGxldCByZXN1bHQgPSBbXTtcbiAgc3dpdGNoIChwcm9wTmFtZSkge1xuICBjYXNlIFwidGV4dFwiOlxuICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoW1xuICAgICAgeyB0eXBlOiBcInRleHRcIiwgdmFsOiBcInRleHRcIiB9LFxuICAgICAgeyB0eXBlOiBcImF0dHJcIiwgdmFsOiBcInRyYW5zZm9ybVwiIH0sXG4gICAgICB7IHR5cGU6IFwic3R5bGVcIiwgdmFsOiBcIm9wYWNpdHlcIiB9LFxuICAgICAgeyB0eXBlOiBcInN0eWxlXCIsIHZhbDogXCJmb250XCIgfSxcbiAgICAgIHsgdHlwZTogXCJzdHlsZVwiLCB2YWw6IFwiZm9udFNpemVcIiB9LFxuICAgICAgeyB0eXBlOiBcInN0eWxlXCIsIHZhbDogXCJmb250V2VpZ2h0XCIgfSxcbiAgICAgIHsgdHlwZTogXCJzdHlsZVwiLCB2YWw6IFwiZmlsbFwiIH1cbiAgICBdKTtcbiAgICBicmVhaztcbiAgY2FzZSBcInRpdGxlXCI6XG4gICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChbXG4gICAgICB7IHR5cGU6IFwidGV4dFwiLCB2YWw6IFwidGV4dFwiIH0sXG4gICAgICB7IHR5cGU6IFwiYXR0clwiLCB2YWw6IFwidHJhbnNmb3JtXCIgfSxcbiAgICAgIHsgdHlwZTogXCJzdHlsZVwiLCB2YWw6IFwib3BhY2l0eVwiIH0sXG4gICAgICB7IHR5cGU6IFwic3R5bGVcIiwgdmFsOiBcImZvbnRcIiB9LFxuICAgICAgeyB0eXBlOiBcInN0eWxlXCIsIHZhbDogXCJmb250U2l6ZVwiIH0sXG4gICAgICB7IHR5cGU6IFwic3R5bGVcIiwgdmFsOiBcImZvbnRXZWlnaHRcIiB9LFxuICAgICAgeyB0eXBlOiBcInN0eWxlXCIsIHZhbDogXCJmaWxsXCIgfVxuICAgIF0pO1xuICAgIGJyZWFrO1xuICBjYXNlIFwidGlja1wiOlxuICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoW1xuICAgICAgeyB0eXBlOiBcImF0dHJcIiwgdmFsOiBcInRyYW5zZm9ybVwiIH0sXG4gICAgICB7IHR5cGU6IFwiYXR0clwiLCB2YWw6IFwieDJcIiB9LFxuICAgICAgeyB0eXBlOiBcImF0dHJcIiwgdmFsOiBcInkyXCIgfSxcbiAgICAgIHsgdHlwZTogXCJzdHlsZVwiLCB2YWw6IFwic3Ryb2tlV2lkdGhcIiB9LFxuICAgICAgeyB0eXBlOiBcInN0eWxlXCIsIHZhbDogXCJzdHJva2VcIiB9LFxuICAgICAgeyB0eXBlOiBcInN0eWxlXCIsIHZhbDogXCJvcGFjaXR5XCIgfVxuICAgIF0pO1xuICAgIGJyZWFrO1xuICBjYXNlIFwiZ3JpZFwiOlxuICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoW1xuICAgICAgeyB0eXBlOiBcImF0dHJcIiwgdmFsOiBcInRyYW5zZm9ybVwiIH0sXG4gICAgICB7IHR5cGU6IFwiYXR0clwiLCB2YWw6IFwieDJcIiB9LFxuICAgICAgeyB0eXBlOiBcImF0dHJcIiwgdmFsOiBcInkyXCIgfSxcbiAgICAgIHsgdHlwZTogXCJzdHlsZVwiLCB2YWw6IFwic3Ryb2tlV2lkdGhcIiB9LFxuICAgICAgeyB0eXBlOiBcInN0eWxlXCIsIHZhbDogXCJzdHJva2VcIiB9LFxuICAgICAgeyB0eXBlOiBcInN0eWxlXCIsIHZhbDogXCJzdHJva2VEYXNoYXJyYXlcIiB9LFxuICAgICAgeyB0eXBlOiBcInN0eWxlXCIsIHZhbDogXCJvcGFjaXR5XCIgfVxuICAgIF0pO1xuICAgIGJyZWFrO1xuICBjYXNlIFwiZG9tYWluXCI6XG4gICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChbXG4gICAgICB7IHR5cGU6IFwiYXR0clwiLCB2YWw6IFwidHJhbnNmb3JtXCIgfSxcbiAgICAgIHsgdHlwZTogXCJhdHRyXCIsIHZhbDogXCJ4MlwiIH0sXG4gICAgICB7IHR5cGU6IFwiYXR0clwiLCB2YWw6IFwieTJcIiB9LFxuICAgICAgeyB0eXBlOiBcInN0eWxlXCIsIHZhbDogXCJzdHJva2VXaWR0aFwiIH0sXG4gICAgICB7IHR5cGU6IFwic3R5bGVcIiwgdmFsOiBcInN0cm9rZVwiIH0sXG4gICAgICB7IHR5cGU6IFwic3R5bGVcIiwgdmFsOiBcIm9wYWNpdHlcIiB9XG4gICAgXSk7XG4gICAgYnJlYWs7XG4gIGNhc2UgXCJyZWN0XCI6XG4gICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChbXG4gICAgICB7IHR5cGU6IFwiYXR0clR3ZWVuXCIsIHZhbDogXCJkXCIgfSxcbiAgICAgIHsgdHlwZTogXCJhdHRyXCIsIHZhbDogXCJ0cmFuc2Zvcm1cIiB9LFxuICAgICAgeyB0eXBlOiBcInN0eWxlXCIsIHZhbDogXCJvcGFjaXR5XCIgfSxcbiAgICAgIHsgdHlwZTogXCJzdHlsZVwiLCB2YWw6IFwiZmlsbFwiIH0sXG4gICAgICB7IHR5cGU6IFwic3R5bGVcIiwgdmFsOiBcInN0cm9rZVdpZHRoXCIgfSxcbiAgICAgIHsgdHlwZTogXCJzdHlsZVwiLCB2YWw6IFwic3Ryb2tlXCIgfVxuICAgIF0pO1xuICAgIGJyZWFrO1xuICBjYXNlIFwiZ3JhZGllbnRcIjpcbiAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KFtcbiAgICAgIHsgdHlwZTogXCJhdHRyXCIsIHZhbDogXCJkXCIgfSxcbiAgICAgIHsgdHlwZTogXCJzdHlsZVwiLCB2YWw6IFwib3BhY2l0eVwiIH0sXG4gICAgICB7IHR5cGU6IFwic3R5bGVcIiwgdmFsOiBcImZpbGxcIiwgZGVmczogZ3JhZGllbnRSZW5kZXIgfSxcbiAgICAgIHsgdHlwZTogXCJzdHlsZVwiLCB2YWw6IFwic3Ryb2tlV2lkdGhcIiB9LFxuICAgICAgeyB0eXBlOiBcInN0eWxlXCIsIHZhbDogXCJzdHJva2VcIiB9XG4gICAgXSk7XG4gICAgYnJlYWs7XG4gIGNhc2UgXCJydWxlXCI6XG4gICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChbXG4gICAgICB7IHR5cGU6IFwiYXR0clwiLCB2YWw6IFwidHJhbnNmb3JtXCIgfSxcbiAgICAgIHsgdHlwZTogXCJhdHRyXCIsIHZhbDogXCJ4MlwiIH0sXG4gICAgICB7IHR5cGU6IFwiYXR0clwiLCB2YWw6IFwieTJcIiB9LFxuICAgICAgeyB0eXBlOiBcInN0eWxlXCIsIHZhbDogXCJzdHJva2VXaWR0aFwiIH0sXG4gICAgICB7IHR5cGU6IFwic3R5bGVcIiwgdmFsOiBcInN0cm9rZVwiIH0sXG4gICAgICB7IHR5cGU6IFwic3R5bGVcIiwgdmFsOiBcIm9wYWNpdHlcIiB9XG4gICAgXSk7XG4gICAgYnJlYWs7XG4gIGNhc2UgXCJzeW1ib2xcIjpcbiAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KFtcbiAgICAgIHsgdHlwZTogXCJhdHRyVHdlZW5cIiwgdmFsOiBcImRcIiB9LFxuICAgICAgeyB0eXBlOiBcImF0dHJcIiwgdmFsOiBcInNpemVcIiB9LFxuICAgICAgeyB0eXBlOiBcImF0dHJcIiwgdmFsOiBcInRyYW5zZm9ybVwiIH0sXG4gICAgICB7IHR5cGU6IFwic3R5bGVcIiwgdmFsOiBcInN0cm9rZVdpZHRoXCIgfSxcbiAgICAgIHsgdHlwZTogXCJzdHlsZVwiLCB2YWw6IFwic3Ryb2tlXCIgfSxcbiAgICAgIHsgdHlwZTogXCJzdHlsZVwiLCB2YWw6IFwib3BhY2l0eVwiIH0sXG4gICAgICB7IHR5cGU6IFwic3R5bGVcIiwgdmFsOiBcImZpbGxcIiB9XG4gICAgXSk7XG4gICAgYnJlYWs7XG4gIGNhc2UgXCJncm91cFwiOlxuICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoW1xuICAgICAgeyB0eXBlOiBcImF0dHJcIiwgdmFsOiBcInRyYW5zZm9ybVwiIH0sXG4gICAgICB7IHR5cGU6IFwic3R5bGVcIiwgdmFsOiBcIm9wYWNpdHlcIiB9XG4gICAgXSk7XG4gICAgYnJlYWs7XG4gIGNhc2UgXCJiYWNrZ3JvdW5kXCI6XG4gICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChbeyB0eXBlOiBcImF0dHJcIiwgdmFsOiBcImRcIiB9XSk7XG4gICAgYnJlYWs7XG4gIGNhc2UgXCJsaW5lXCI6XG4gICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChbXG4gICAgICB7IHR5cGU6IFwiYXR0clR3ZWVuXCIsIHZhbDogXCJkXCIgfSxcbiAgICAgIHsgdHlwZTogXCJzdHlsZVwiLCB2YWw6IFwic3Ryb2tlV2lkdGhcIiB9LFxuICAgICAgeyB0eXBlOiBcInN0eWxlXCIsIHZhbDogXCJzdHJva2VcIiB9LFxuICAgICAgeyB0eXBlOiBcInN0eWxlXCIsIHZhbDogXCJvcGFjaXR5XCIgfSxcbiAgICAgIHsgdHlwZTogXCJzdHlsZVwiLCB2YWw6IFwiZmlsbFwiIH1cbiAgICBdKTtcbiAgICBicmVhaztcbiAgY2FzZSBcInRyYWlsXCI6XG4gIGNhc2UgXCJhcmVhXCI6XG4gICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChbXG4gICAgICB7IHR5cGU6IFwiYXR0clR3ZWVuXCIsIHZhbDogXCJkXCIgfSxcbiAgICAgIHsgdHlwZTogXCJzdHlsZVwiLCB2YWw6IFwic3Ryb2tlV2lkdGhcIiB9LFxuICAgICAgeyB0eXBlOiBcInN0eWxlXCIsIHZhbDogXCJzdHJva2VcIiB9LFxuICAgICAgeyB0eXBlOiBcInN0eWxlXCIsIHZhbDogXCJvcGFjaXR5XCIgfSxcbiAgICAgIHsgdHlwZTogXCJzdHlsZVwiLCB2YWw6IFwiZmlsbFwiIH1cbiAgICBdKTtcbiAgICBicmVhaztcbiAgY2FzZSBcImxlZ2VuZC1wYWlyXCI6XG4gICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChbeyB0eXBlOiBcImF0dHJcIiwgdmFsOiBcInRyYW5zZm9ybVwiIH1dKTtcbiAgICBicmVhaztcbiAgZGVmYXVsdDpcbiAgICBicmVhaztcbiAgfVxuICBpZiAocHJvcC5leGNsdWRlcykge1xuICAgIHByb3AuZXhjbHVkZXMuZm9yRWFjaChleGNsdWRlID0+IHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5maWx0ZXIoXG4gICAgICAgIHIgPT4gIShyLnR5cGUgPT09IGV4Y2x1ZGUudHlwZSAmJiByLnZhbCA9PT0gZXhjbHVkZS52YWwpXG4gICAgICApO1xuICAgIH0pO1xuICB9XG4gIGlmIChyZXN1bHQubGVuZ3RoID4gMCkge1xuICAgIHJlc3VsdC5mb3JFYWNoKHAgPT4ge1xuICAgICAgcC5lbG1UeXBlID0gcHJvcE5hbWU7XG4gICAgICBpZiAodHdlYWtzKSB7XG4gICAgICAgIHR3ZWFrc1xuICAgICAgICAgIC5maWx0ZXIodHdrID0+IHR3ay50eXBlID09PSBwLnR5cGUgJiYgdHdrLnZhbCA9PT0gcC52YWwpXG4gICAgICAgICAgLmZvckVhY2godHdrID0+IHtcbiAgICAgICAgICAgIHAgPSBPYmplY3QuYXNzaWduKHAsIHR3ayk7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAocHJvcE5hbWUgPT09IFwiYWxpZ25cIikge1xuICAgIHJldHVybiBbeyB0eXBlOiBcImF0dHJcIiwgdmFsOiBcInRleHQtYW5jaG9yXCIsIGVsbVR5cGU6IFwibm9uZVwiIH1dO1xuICB9XG4gIHJldHVybiBbeyB0eXBlOiBcInN0eWxlXCIsIHZhbDogcHJvcE5hbWUsIGVsbVR5cGU6IFwibm9uZVwiIH1dO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlU2NhbGUoc2NhbGVzLCBzY05hbWVzLCBnZXRTY2FsZXMpIHtcbiAgY29uc3QgY29tcHV0ZWQgPSBPYmplY3QuYXNzaWduKHt9LCBzY2FsZXMpO1xuXG4gIHNjTmFtZXMuZm9yRWFjaChzY05hbWUgPT4ge1xuICAgIGNvbXB1dGVkLmluaXRpYWxbc2NOYW1lXSA9IGdldFNjYWxlcy5pbml0aWFsKHNjTmFtZSk7XG4gICAgY29tcHV0ZWQuZmluYWxbc2NOYW1lXSA9IGdldFNjYWxlcy5maW5hbChzY05hbWUpO1xuICB9KTtcbiAgcmV0dXJuIGNvbXB1dGVkO1xufVxuXG5mdW5jdGlvbiBpc0xpbmVhck1hcmt0eXBlKG10eXBlKSB7XG4gIHJldHVybiBbXCJhcmVhXCIsIFwibGluZVwiLCBcInRyYWlsXCJdLmluZGV4T2YobXR5cGUpID49IDA7XG59XG5cbmV4cG9ydCB7XG4gIHByb3BNYXAsXG4gIGdldEVhc2VGbixcbiAgZmluZEFmdGVyU2libGluZyxcbiAgZ2V0Sm9pbkluZm8sXG4gIGZpbmRDb21wLFxuICBzdmdSZW5kZXIsXG4gIGNvbXB1dGVTY2FsZSxcbiAgaXNMaW5lYXJNYXJrdHlwZVxufTtcbiIsImZ1bmN0aW9uIGNvbXB1dGVIYXNGYWNldChjb21wU3BlYykge1xuICBpZiAoXG4gICAgY29tcFNwZWMgJiZcbiAgICBjb21wU3BlYy5wYXJlbnQgJiZcbiAgICBjb21wU3BlYy5wYXJlbnQuZnJvbSAmJlxuICAgIGNvbXBTcGVjLnBhcmVudC5mcm9tLmZhY2V0ICYmXG4gICAgY29tcFNwZWMucGFyZW50LmZyb20uZmFjZXQuZGF0YSAmJlxuICAgIGNvbXBTcGVjLnBhcmVudC5mcm9tLmZhY2V0Lm5hbWUgPT09IGNvbXBTcGVjLmZyb20uZGF0YVxuICApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldEZhY2V0KGNvbXBTcGVjKSB7XG4gIHJldHVybiBjb21wdXRlSGFzRmFjZXQoY29tcFNwZWMpID8gY29tcFNwZWMucGFyZW50LmZyb20uZmFjZXQgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGlzR3JvdXBpbmdNYXJrdHlwZShtYXJrdHlwZSkge1xuICByZXR1cm4gbWFya3R5cGUgPT09IFwibGluZVwiIHx8IG1hcmt0eXBlID09PSBcImFyZWFcIiB8fCBtYXJrdHlwZSA9PT0gXCJ0cmFpbFwiO1xufVxuXG5mdW5jdGlvbiBmaW5kTWFyayhtYXJrcywgbWFya05hbWUpIHtcbiAgbGV0IHJlc3VsdDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXJrcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IG0gPSBtYXJrc1tpXTtcbiAgICBpZiAobS5uYW1lID09PSBtYXJrTmFtZSkge1xuICAgICAgcmV0dXJuIG07XG4gICAgfVxuICAgIGlmIChtLm1hcmtzKSB7XG4gICAgICByZXN1bHQgPSBmaW5kTWFyayhtLm1hcmtzLCBtYXJrTmFtZSk7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBmaW5kRGF0YShzcGVjLCBkYXRhTmFtZSkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNwZWMuZGF0YS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChzcGVjLmRhdGFbaV0ubmFtZSA9PT0gZGF0YU5hbWUpIHtcbiAgICAgIHJldHVybiBzcGVjLmRhdGFbaV07XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBmaW5kRmlsdGVyKHNwZWMsIG5hbWUpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcGVjLmRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBkID0gc3BlYy5kYXRhW2ldO1xuICAgIGlmIChkLnRyYW5zZm9ybSkge1xuICAgICAgY29uc3QgZmlsdGVyID0gZC50cmFuc2Zvcm0uZmluZChmaWx0ZXIgPT4gZmlsdGVyLm5hbWUgPT09IG5hbWUpO1xuICAgICAgaWYgKGZpbHRlcikge1xuICAgICAgICByZXR1cm4gZmlsdGVyO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQge1xuICBjb21wdXRlSGFzRmFjZXQsXG4gIGdldEZhY2V0LFxuICBpc0dyb3VwaW5nTWFya3R5cGUsXG4gIGZpbmRNYXJrLFxuICBmaW5kRGF0YSxcbiAgZmluZEZpbHRlclxufTtcbiIsImltcG9ydCB7IHBhcnNlLCBjb2RlZ2VuIGFzIHZnQ29kZWdlbiB9IGZyb20gXCJ2ZWdhLWV4cHJlc3Npb25cIjtcbmltcG9ydCAqIGFzIGQzIGZyb20gXCJkM1wiO1xuaW1wb3J0ICogYXMgdmVnYSBmcm9tIFwidmVnYVwiO1xuaW1wb3J0IHtjb3B5LCBmbGF0dGVufSBmcm9tIFwiLi91dGlsL3V0aWwuanNcIjtcbmltcG9ydCB7IGdldEVhc2VGbiB9IGZyb20gXCIuL2FjdHVhdG9yL3V0aWxcIjtcbmltcG9ydCB7IGZpbmRGaWx0ZXIgfSBmcm9tIFwiLi9jaGFuZ2VGZXRjaGVyL3N0YXRlL3V0aWxcIjtcblxuXG5jbGFzcyBFbnVtZXJhdG9yIHtcbiAgY29uc3RydWN0b3IoZW51bURlZiwgc3BlYywgcmF3SW5mbykge1xuICAgIHRoaXMudmlld3MgPSBnZXRTdG9wcyhlbnVtRGVmLCBzcGVjLCByYXdJbmZvKTtcbiAgICB0aGlzLnN0b3BOID0gdGhpcy52aWV3cy5sZW5ndGg7XG4gICAgdGhpcy5lbnVtRGVmID0gZW51bURlZjtcbiAgICB0aGlzLmN1cnJTcGVjID0gc3BlYztcbiAgICB0aGlzLmVhc2VGbiA9IGdldEVhc2VGbihlbnVtRGVmLmVhc2UpO1xuICAgIHRoaXMuZGVsYXkgPSBlbnVtRGVmLmRlbGF5IHx8IDA7XG4gICAgdGhpcy5zdGFnZ2VyaW5nID0gZW51bURlZi5zdGFnZ2VyaW5nO1xuICAgIHRoaXMucmF3SW5mbyA9IHJhd0luZm87XG4gIH1cblxuICBfZ2V0U2NhbGVzKHN0b3Bfbikge1xuICAgIHJldHVybiBzY05hbWUgPT4ge1xuICAgICAgY29uc3QgdmlldyA9IHRoaXMudmlld3Nbc3RvcF9uXTtcbiAgICAgIHJldHVybiB2aWV3Ll9ydW50aW1lLnNjYWxlc1tzY05hbWVdXG4gICAgICAgID8gdmlldy5fcnVudGltZS5zY2FsZXNbc2NOYW1lXS52YWx1ZVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9O1xuICB9XG5cbiAgZ2V0RGF0YShzdG9wX24pIHtcbiAgICBpZiAodGhpcy5leHRyYWN0RGF0YSAmJiB0aGlzLmdldElkKSB7XG4gICAgICByZXR1cm4gdGhpcy5leHRyYWN0RGF0YSh0aGlzLnZpZXdzW3N0b3Bfbl0pO1xuICAgIH1cbiAgICB0aHJvdyBFcnJvcihcIkNhbm5vdCByZXR1cm4gZGF0YSB3aXRob3V0IGpvaW5pbmcgZGF0YS5cIik7XG4gIH1cblxuICBnZXREYXR1bShpZCwgc3RvcF9uKSB7XG4gICAgaWYgKHRoaXMuZXh0cmFjdERhdGEgJiYgdGhpcy5nZXRJZCkge1xuICAgICAgY29uc3QgZm91bmQgPSB0aGlzLmV4dHJhY3REYXRhKHRoaXMudmlld3Nbc3RvcF9uXSkuZmluZChcbiAgICAgICAgKGQsIGkpID0+IHRoaXMuZ2V0SWQoZCwgaSkgPT09IGlkXG4gICAgICApO1xuICAgICAgcmV0dXJuIGZvdW5kICYmIGZvdW5kLmRhdHVtID8gZm91bmQuZGF0dW0gOiBmb3VuZDtcbiAgICB9XG4gICAgdGhyb3cgRXJyb3IoXCJDYW5ub3QgcmV0dXJuIGRhdGEgd2l0aG91dCBqb2luaW5nIGRhdGEuXCIpO1xuICB9XG5cbiAgam9pbkRhdGEoZXh0cmFjdERhdGEsIGlkZW50aWZ5RGF0YSkge1xuICAgIHRoaXMuZXh0cmFjdERhdGEgPSBleHRyYWN0RGF0YTtcbiAgICB0aGlzLmdldElkID0gaWRlbnRpZnlEYXRhO1xuICAgIGxldCBjdXJyRGF0YUtleXMgPSB0aGlzLmV4dHJhY3REYXRhKHRoaXMudmlld3NbMF0pLm1hcCh0aGlzLmdldElkKTtcblxuICAgIHRoaXMuam9pbkRhdGFJbmZvID0gdGhpcy52aWV3cy5zbGljZSgxKS5tYXAodmlldyA9PiB7XG4gICAgICBjb25zdCBqb2luID0ge1xuICAgICAgICB1cGRhdGU6IFtdLFxuICAgICAgICBlbnRlcjogW10sXG4gICAgICAgIGV4aXQ6IFtdXG4gICAgICB9O1xuICAgICAgY29uc3QgbmV3RGF0YUtleXMgPSBleHRyYWN0RGF0YSh2aWV3KS5tYXAodGhpcy5nZXRJZCk7XG4gICAgICBjdXJyRGF0YUtleXMuZm9yRWFjaChjS2V5ID0+IHtcbiAgICAgICAgY29uc3QgZm91bmRJbmRleCA9IG5ld0RhdGFLZXlzLmluZGV4T2YoY0tleSk7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ID49IDApIHtcbiAgICAgICAgICBqb2luLnVwZGF0ZS5wdXNoKGNLZXkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGpvaW4uZXhpdC5wdXNoKGNLZXkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGpvaW4uZW50ZXIgPSBuZXdEYXRhS2V5cy5maWx0ZXIobktleSA9PiBjdXJyRGF0YUtleXMuaW5kZXhPZihuS2V5KSA8IDApO1xuXG4gICAgICBjdXJyRGF0YUtleXMgPSBuZXdEYXRhS2V5cztcblxuICAgICAgcmV0dXJuIFtcInVwZGF0ZVwiLCBcImVudGVyXCIsIFwiZXhpdFwiXS5yZWR1Y2UoKGFjY01hcCwgc2V0KSA9PiB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKFxuICAgICAgICAgIGFjY01hcCxcbiAgICAgICAgICBqb2luW3NldF0ucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgICAgICAgYWNjW2tleV0gPSBzZXQ7XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgIH0sIHt9KVxuICAgICAgICApO1xuICAgICAgfSwge30pO1xuICAgIH0pO1xuICAgIHRoaXMuYWxsS2V5cyA9IGZsYXR0ZW4odGhpcy5qb2luRGF0YUluZm8ubWFwKE9iamVjdC5rZXlzKSkudW5pcXVlKCk7XG4gICAgdGhpcy5zZXQgPSAoaWQsIHN0b3BfbikgPT4gdGhpcy5qb2luRGF0YUluZm9bc3RvcF9uXVtpZF07XG4gIH1cblxuICBnZXRQcm9wVmFsKHByb3AsIGVuY29kZXMsIHN0b3BfbiwgaWQpIHtcbiAgICBjb25zdCBkID0gdGhpcy5leHRyYWN0RGF0YSh0aGlzLnZpZXdzW3N0b3Bfbl0pLmZpbmQoXG4gICAgICAoeCwgaSkgPT4gdGhpcy5nZXRJZCh4LCBpKSA9PT0gaWRcbiAgICApO1xuICAgIGNvbnN0IGRTZXQgPSB0aGlzLnNldChpZCwgc3RvcF9uKTtcbiAgICBpZiAoIWRTZXQpIHtcbiAgICAgIHJldHVybiBbXCJ4MlwiLCBcInkyXCJdLmluZGV4T2YocHJvcC52YWwpID49IDAgPyAwIDogXCJcIjtcbiAgICB9XG4gICAgY29uc3QgZ2V0U2NhbGVzID0ge1xuICAgICAgaW5pdGlhbDogdGhpcy5fZ2V0U2NhbGVzKHN0b3BfbiksXG4gICAgICBmaW5hbDogdGhpcy5fZ2V0U2NhbGVzKHN0b3BfbiArIDEpXG4gICAgfTtcbiAgICByZXR1cm4gZW5jb2Rlc1tkU2V0XS5pbml0aWFsKHByb3AsIGdldFNjYWxlcywgZCk7XG4gIH1cblxuICBpbnRlcnBvbGF0ZUFsb25nRW51bU1ha2VyKHByb3AsIGVuY29kZXMsIGVsZW0pIHtcbiAgICByZXR1cm4gaWQgPT4ge1xuICAgICAgcmV0dXJuIHQgPT4ge1xuICAgICAgICBjb25zdCBzdG9wX24gPSBNYXRoLm1pbihNYXRoLmZsb29yKHQgKiAodGhpcy5zdG9wTiAtIDEpKSwgdGhpcy5zdG9wTiAtIDIpO1xuICAgICAgICBsZXQgZF9pID0gdGhpcy5leHRyYWN0RGF0YSh0aGlzLnZpZXdzW3N0b3Bfbl0pLmZpbmQoXG4gICAgICAgICAgKHgsIGkpID0+IHRoaXMuZ2V0SWQoeCwgaSkgPT09IGlkXG4gICAgICAgICk7XG4gICAgICAgIGxldCBkX2YgPSB0aGlzLmV4dHJhY3REYXRhKHRoaXMudmlld3Nbc3RvcF9uICsgMV0pLmZpbmQoXG4gICAgICAgICAgKHgsIGkpID0+IHRoaXMuZ2V0SWQoeCwgaSkgPT09IGlkXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgZFNldCA9IHRoaXMuc2V0KGlkLCBzdG9wX24pO1xuICAgICAgICBzd2l0Y2ggKGRTZXQpIHtcbiAgICAgICAgY2FzZSBcImVudGVyXCI6XG4gICAgICAgICAgZF9pID0gZF9mO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiZXhpdFwiOlxuICAgICAgICAgIGRfZiA9IGRfaTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInVwZGF0ZVwiOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBbXCJ4MlwiLCBcInkyXCJdLmluZGV4T2YocHJvcC52YWwpID49IDAgPyAwIDogXCJcIjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBnZXRTY2FsZXMgPSB7XG4gICAgICAgICAgaW5pdGlhbDogdGhpcy5fZ2V0U2NhbGVzKHN0b3BfbiksXG4gICAgICAgICAgZmluYWw6IHRoaXMuX2dldFNjYWxlcyhzdG9wX24gKyAxKVxuICAgICAgICB9O1xuICAgICAgICBpZiAocHJvcC50eXBlID09PSBcImF0dHJUd2VlblwiKSB7XG4gICAgICAgICAgcmV0dXJuIGVuY29kZXNbZFNldF0uY3VzdG9tLmJpbmQoZWxlbSkocHJvcCwgZ2V0U2NhbGVzLCBkX2ksIGRfZikoXG4gICAgICAgICAgICB0ICogKHRoaXMuc3RvcE4gLSAxKSAtIHN0b3BfblxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsSSA9IGVuY29kZXNbZFNldF0uaW5pdGlhbC5iaW5kKGVsZW0pKHByb3AsIGdldFNjYWxlcywgZF9pKTtcbiAgICAgICAgY29uc3QgdmFsRiA9IGVuY29kZXNbZFNldF0uZmluYWwuYmluZChlbGVtKShwcm9wLCBnZXRTY2FsZXMsIGRfZik7XG5cbiAgICAgICAgcmV0dXJuIGQzLmludGVycG9sYXRlKHZhbEksIHZhbEYpKHQgKiAodGhpcy5zdG9wTiAtIDEpIC0gc3RvcF9uKTtcbiAgICAgICAgLy8gYXBwbHkgb25lIG9mIGNvcnJlc3BvbmRpbmcgaW50ZXJwb2xhdGlvblxuICAgICAgfTtcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVGaWx0ZXJpbmdWYWx1ZXMoZW51bURlZiwgcmF3SW5mbykge1xuICBjb25zdCBmaWx0ZXJpbmdWYWx1ZXMgPSBlbnVtRGVmLnZhbHVlcyB8fCBbXTtcbiAgaWYgKGZpbHRlcmluZ1ZhbHVlcy5sZW5ndGggPT09IDAgJiYgZW51bURlZi5zdGVwU2l6ZSkge1xuICAgIC8vIGZpbmQgaW5pdGlhbCB2YWx1ZVxuICAgIGNvbnN0IGlGaWx0ZXIgPSBmaW5kRmlsdGVyKHJhd0luZm8uc1Zpcy5zcGVjLCBlbnVtRGVmLmZpbHRlcik7XG4gICAgY29uc3QgaVZhbCA9IHBhcnNlKGlGaWx0ZXIuZXhwcikucmlnaHQudmFsdWU7XG5cbiAgICAvLyBmaW5kIGVuZCB2YWx1ZVxuICAgIGNvbnN0IGZGaWx0ZXIgPSBmaW5kRmlsdGVyKHJhd0luZm8uZVZpcy5zcGVjLCBlbnVtRGVmLmZpbHRlcik7XG4gICAgY29uc3QgZlZhbCA9IHBhcnNlKGZGaWx0ZXIuZXhwcikucmlnaHQudmFsdWU7XG5cbiAgICBmb3IgKGxldCB2ID0gaVZhbDsgdiA8IGZWYWw7IHYgKz0gZW51bURlZi5zdGVwU2l6ZSkge1xuICAgICAgZmlsdGVyaW5nVmFsdWVzLnB1c2godik7XG4gICAgfVxuXG4gICAgZmlsdGVyaW5nVmFsdWVzLnB1c2goZlZhbCk7XG4gIH1cbiAgcmV0dXJuIGZpbHRlcmluZ1ZhbHVlcztcbn1cblxuXG5mdW5jdGlvbiBjb21wdXRlTmV3U3BlYyh3b3JraW5nU3BlYywgZmlsdGVyLCBmVmFsKSB7XG4gIGNvbnN0IGNvZGVnZW4gPSB2Z0NvZGVnZW4oe1xuICAgIHdoaXRlbGlzdDogW1wiZGF0dW1cIiwgXCJldmVudFwiLCBcInNpZ25hbHNcIl0sXG4gICAgZ2xvYmFsdmFyOiBcImdsb2JhbFwiXG4gIH0pO1xuXG4gIGNvbnN0IHBhcnNlZEFTVE5vZGUgPSBwYXJzZShmaWx0ZXIuZXhwcik7XG5cbiAgcGFyc2VkQVNUTm9kZS5yaWdodC52YWx1ZSA9IGZWYWw7XG4gIHBhcnNlZEFTVE5vZGUucmlnaHQucmF3ID0gZlZhbC50b1N0cmluZygpO1xuICBjb25zdCBuZXdGaWx0ZXJFeHByID0gY29kZWdlbihwYXJzZWRBU1ROb2RlKS5jb2RlO1xuICBmaWx0ZXIuZXhwciA9IG5ld0ZpbHRlckV4cHI7XG5cbiAgcmV0dXJuIGNvcHkod29ya2luZ1NwZWMpO1xufVxuZnVuY3Rpb24gZ2V0U3RvcHMoZW51bURlZiwgc3BlYywgcmF3SW5mbykge1xuICBjb25zdCB3b3JraW5nU3BlYyA9IGNvcHkoc3BlYyk7XG5cbiAgY29uc3QgZW51bVZhbHMgPSBjb21wdXRlRmlsdGVyaW5nVmFsdWVzKGVudW1EZWYsIHJhd0luZm8pO1xuICBjb25zdCBmaWx0ZXIgPSBmaW5kRmlsdGVyKHdvcmtpbmdTcGVjLCBlbnVtRGVmLmZpbHRlcik7XG5cbiAgY29uc3Qgdmlld3MgPSBlbnVtVmFscy5tYXAodiA9PiB7XG4gICAgcmV0dXJuIG5ldyB2ZWdhLlZpZXcodmVnYS5wYXJzZShjb21wdXRlTmV3U3BlYyh3b3JraW5nU3BlYywgZmlsdGVyLCB2KSksIHtcbiAgICAgIHJlbmRlcmVyOiBcIm5vbmVcIlxuICAgIH0pLnJ1bigpO1xuICB9KTtcblxuICByZXR1cm4gdmlld3M7XG59XG5cblxuZXhwb3J0IHsgRW51bWVyYXRvciwgY29tcHV0ZUZpbHRlcmluZ1ZhbHVlcywgY29tcHV0ZU5ld1NwZWMgfTtcbiIsImltcG9ydCB7IGNvcHkgfSBmcm9tIFwiLi4vdXRpbC91dGlsXCI7XG5pbXBvcnQge2NvbXB1dGVGaWx0ZXJpbmdWYWx1ZXN9IGZyb20gXCIuLi9lbnVtZXJhdG9yXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBlbnVtZXJhdGVTdGVwcyhibG9jaywgcmF3SW5mbywgZW51bURlZnMpIHtcbiAgaWYgKGJsb2NrLnN5bmMpIHtcbiAgICBibG9jay5zeW5jID0gYmxvY2suc3luYy5tYXAoYmxrID0+IGVudW1lcmF0ZVN0ZXBzKGJsaywgcmF3SW5mbywgZW51bURlZnMpKTtcbiAgfSBlbHNlIGlmIChibG9jay5jb25jYXQpIHtcbiAgICBibG9jay5jb25jYXQgPSBibG9jay5jb25jYXQubWFwKGJsayA9PlxuICAgICAgZW51bWVyYXRlU3RlcHMoYmxrLCByYXdJbmZvLCBlbnVtRGVmcylcbiAgICApO1xuXG4gICAgaWYgKGJsb2NrLmVudW1lcmF0b3IpIHtcbiAgICAgIGNvbnN0IGZvdW5kRW51bURlZiA9IGVudW1EZWZzLmZpbmQoXG4gICAgICAgIGVudW1EZWYgPT4gZW51bURlZi5uYW1lID09PSBibG9jay5lbnVtZXJhdG9yXG4gICAgICApO1xuXG4gICAgICBpZiAoZm91bmRFbnVtRGVmKSB7XG4gICAgICAgIGNvbnN0IGZpbHRlcmluZ1ZhbHVlcyA9IGNvbXB1dGVGaWx0ZXJpbmdWYWx1ZXMoZm91bmRFbnVtRGVmLCByYXdJbmZvKTtcbiAgICAgICAgcmV0dXJuIGZpbHRlcmluZ1ZhbHVlcy5zbGljZSgxKS5yZWR1Y2UoXG4gICAgICAgICAgKGFjYywgZlZhbCwgaSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZW51bWVkQ29uY2F0QmxvY2sgPSBjb3B5KGJsb2NrKTtcbiAgICAgICAgICAgIGVudW1lZENvbmNhdEJsb2NrLmNvbmNhdC5mb3JFYWNoKGJsayA9PiB7XG4gICAgICAgICAgICAgIGZldGNoRW51bVZhbChibGssIGZvdW5kRW51bURlZiwgZlZhbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGVudW1lZENvbmNhdEJsb2NrLmVudW1lcmF0ZWQgPSBjb3B5KGZvdW5kRW51bURlZik7XG4gICAgICAgICAgICBlbnVtZWRDb25jYXRCbG9jay5lbnVtZXJhdGVkLnZhbCA9IGZWYWw7XG4gICAgICAgICAgICBlbnVtZWRDb25jYXRCbG9jay5lbnVtZXJhdGVkLk4gPSBmaWx0ZXJpbmdWYWx1ZXMubGVuZ3RoO1xuICAgICAgICAgICAgZW51bWVkQ29uY2F0QmxvY2suZW51bWVyYXRlZC5sYXN0ID1cbiAgICAgICAgICAgICAgaSA9PT0gZmlsdGVyaW5nVmFsdWVzLmxlbmd0aCAtIDI7XG5cbiAgICAgICAgICAgIGFjYy5jb25jYXQucHVzaChlbnVtZWRDb25jYXRCbG9jayk7XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgeyBjb25jYXQ6IFtdIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGJsb2NrO1xufVxuXG5mdW5jdGlvbiBmZXRjaEVudW1WYWwoYmxvY2ssIGVudW1EZWYsIHZhbCkge1xuICBpZiAoYmxvY2suc3luYyB8fCBibG9jay5jb25jYXQpIHtcbiAgICAoYmxvY2suc3luYyB8fCBibG9jay5jb25jYXQpLmZvckVhY2goYmxrID0+IHtcbiAgICAgIGZldGNoRW51bVZhbChibGssIGVudW1EZWYsIHZhbCk7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShibG9jay5lbnVtVmFscykpIHtcbiAgICBibG9jay5lbnVtZXJhdGVkLnB1c2goe2RlZjogZW51bURlZiwgdmFsOiB2YWx9KTtcbiAgfSBlbHNlIHtcbiAgICBibG9jay5lbnVtZXJhdGVkID0gW3tkZWY6IGVudW1EZWYsIHZhbDogdmFsfV07XG4gIH1cbn0iLCJpbXBvcnQgeyBpc051bWJlciwgY29weSwgcGVybXV0YXRlfSBmcm9tIFwiLi4vdXRpbC91dGlsXCI7XG5pbXBvcnQge2RlZmF1bHQgYXMgY29sbGVjdFJlc29sdmVzfSBmcm9tIFwiLi9yZXNvbHZlQ29sbGVjdG9yXCI7XG5pbXBvcnQge1NjaGVkdWxlfSBmcm9tIFwiLi4vc2NoZWR1bGVcIjtcbmltcG9ydCB7ZGVmYXVsdCBhcyBjaGVja0NvbmZsaWN0fSBmcm9tIFwiLi9jb25mbGljdENoZWNrZXJcIjtcbmltcG9ydCB7c3BlY0NoZWNrZXJ9IGZyb20gXCIuL3NwZWNDaGVja2VyXCI7XG5pbXBvcnQge2RlZmF1bHQgYXMgZW51bWVyYXRlU3RlcHN9IGZyb20gXCIuL3N0ZXBFbnVtZXJhdG9yXCI7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2Uoc3BlYywgcmF3SW5mbyl7XG4gIC8vIGNvbnN0IHNwZWNrQ2hlY2tSZXN1bHQgPSB0cnVlOyAvL3NwZWNDaGVja2VyKHNwZWMpOyBUT0RPOiB3aGVuIHNwZWNDaGVja2VyIGlzIGluY2x1ZGVkLCBpdCBibG9ja2VkIGxvYWRpbmcgdGhlIHNvdXJjZSBtYXAuXG4gIGNvbnN0IHNwZWNrQ2hlY2tSZXN1bHQgPSBzcGVjQ2hlY2tlcihzcGVjKTtcbiAgaWYgKCFzcGVja0NoZWNrUmVzdWx0KSB7XG4gICAgLy8gVG9kbzogZ2l2ZSBtb3JlIHNwZWNpZmljIHJlYXNvbnMgdGhyb3VnaCBzcGVja0NoZWNrUmVzdWx0LlxuICAgIHJldHVybiBjb25zb2xlLmVycm9yKFwiVGhlIHNwZWMgaXMgaW52YWxpZC5cIik7XG4gIH1cblxuICAvLyBFbnVtZXJhdG9yIGFyZ3VtZW50IHRoZSBjb25jYXRCbG9jayB3aXRoIGVudW1lcmF0b3JcbiAgbGV0IG5ld1NwZWMgPSBjb3B5KHNwZWMpO1xuICBuZXdTcGVjLnRpbWVsaW5lID0gZW51bWVyYXRlU3RlcHMobmV3U3BlYy50aW1lbGluZSwgcmF3SW5mbywgbmV3U3BlYy5lbnVtZXJhdG9ycyk7XG5cblxuICAvLyAxLiByZWZvcm0gdGhlIHRpbWxpbmUgc3VjaCB0aGF0IGFsbCBibG9ja3MgaGF2ZSBkdXJhdGlvbi5cbiAgbGV0IHBhcnNlZFRpbWVsaW5lQmxvY2sgPSByZWFkQmxvY2sobmV3U3BlYy50aW1lbGluZSwgbmV3U3BlYy50b3RhbER1cmF0aW9uKTtcbiAgbGV0IHBhcnNlZFN0ZXBzID0gYXNzaWduVGltaW5nKHBhcnNlZFRpbWVsaW5lQmxvY2ssIHsgc1RpbWU6IDAgfSwgdHJ1ZSk7XG5cbiAgLy8gMi4gYXR0YWNoIHN0YWdnZXJpbmcgZGVmaW5pdGlvbnNcbiAgcGFyc2VkU3RlcHMuZm9yRWFjaChzdGVwID0+IHtcbiAgICBpZiAoW1wiYXhpc1wiLCBcIm1hcmtcIiwgXCJsZWdlbmRcIl0uaW5kZXhPZihzdGVwLmNvbXBUeXBlKSA+PSAwKSB7XG4gICAgICBzdGVwLnRpbWluZyA9IGF0dGFjaFN0YWdnZXJpbmcoc3RlcC50aW1pbmcsIG5ld1NwZWMuc3RhZ2dlcmluZ3MpO1xuICAgIH1cbiAgfSk7XG4gIC8vIDMuIGVudW1lcmF0b3IgZGVmaW5pdGlvbnNcbiAgaWYgKG5ld1NwZWMuZW51bWVyYXRvcnMpIHtcbiAgICBuZXdTcGVjLmVudW1lcmF0b3JzID0gbmV3U3BlYy5lbnVtZXJhdG9ycy5tYXAoZW51bWVyYXRvciA9PiB7XG4gICAgICByZXR1cm4gYXR0YWNoU3RhZ2dlcmluZyhlbnVtZXJhdG9yLCBuZXdTcGVjLnN0YWdnZXJpbmdzKTtcbiAgICB9KTtcblxuICAgIHBhcnNlZFN0ZXBzLmZvckVhY2goKHN0ZXAsIGkpID0+IHtcbiAgICAgIGlmIChbXCJheGlzXCIsIFwibWFya1wiLCBcImxlZ2VuZFwiXS5pbmRleE9mKHN0ZXAuY29tcFR5cGUpID49IDApIHtcbiAgICAgICAgc3RlcCA9IGF0dGFjaEVudW1lcmF0b3JzKHN0ZXAsIG5ld1NwZWMuZW51bWVyYXRvcnMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cblxuICBjb25zdCBzY2hlZHVsZSA9IG5ldyBTY2hlZHVsZShwYXJzZWRTdGVwcyk7XG4gIGNvbnN0IHJlc29sdmVzID0gY29sbGVjdFJlc29sdmVzKHBhcnNlZFRpbWVsaW5lQmxvY2ssIHBhcnNlZFN0ZXBzKTtcblxuICBjb25zdCB7IGNvbmZsaWN0c1BlckFsdGVySWQgfSA9IGNoZWNrQ29uZmxpY3Qoc2NoZWR1bGUsIHJlc29sdmVzKTtcblxuXG4gIHJldHVybiB7IHNjaGVkdWxlLCByZXNvbHZlcywgY29uZmxpY3RzUGVyQWx0ZXJJZCB9O1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkQmxvY2soYmxvY2ssIHRvdGFsRHVyYXRpb24sIG11bHRpcGxpZXIgPSAxKSB7XG4gIGlmIChibG9jay5zeW5jKSB7XG4gICAgcmV0dXJuIHJlYWRTeW5jQmxvY2soYmxvY2ssIHRvdGFsRHVyYXRpb24sIG11bHRpcGxpZXIpO1xuICB9XG4gIGlmIChibG9jay5jb25jYXQpIHtcbiAgICByZXR1cm4gcmVhZENvbmNhdEJsb2NrKGJsb2NrLCB0b3RhbER1cmF0aW9uLCBtdWx0aXBsaWVyKTtcbiAgfVxuICBjb25zdCBkZWxheSA9XG4gICAgKGJsb2NrLmRlbGF5XG4gICAgICA/IGlzTnVtYmVyKGJsb2NrLnRpbWluZy5kZWxheS5yYXRpbylcbiAgICAgICAgPyBibG9jay50aW1pbmcuZGVsYXkucmF0aW8gKiB0b3RhbER1cmF0aW9uXG4gICAgICAgIDogYmxvY2sudGltaW5nLmRlbGF5XG4gICAgICA6IDApICogbXVsdGlwbGllcjtcblxuICBjb25zdCBkdXJhdGlvbiA9XG4gICAgKGlzTnVtYmVyKGJsb2NrLnRpbWluZy5kdXJhdGlvbi5yYXRpbylcbiAgICAgID8gYmxvY2sudGltaW5nLmR1cmF0aW9uLnJhdGlvICogdG90YWxEdXJhdGlvblxuICAgICAgOiBibG9jay50aW1pbmcuZHVyYXRpb24pICogbXVsdGlwbGllcjtcbiAgY29uc3QgY29tcFR5cGUgPVxuICAgIHR5cGVvZiBibG9jay5jb21wb25lbnQgPT09IFwib2JqZWN0XCJcbiAgICAgID8gT2JqZWN0LmtleXMoYmxvY2suY29tcG9uZW50KVswXVxuICAgICAgOiBibG9jay5jb21wb25lbnQ7XG4gIGNvbnN0IGNvbXBOYW1lID1cbiAgICB0eXBlb2YgYmxvY2suY29tcG9uZW50ID09PSBcIm9iamVjdFwiID8gYmxvY2suY29tcG9uZW50W2NvbXBUeXBlXSA6IHVuZGVmaW5lZDtcblxuICByZXR1cm4ge1xuICAgIGR1cmF0aW9uLFxuICAgIGRlbGF5LFxuICAgIHRpbWluZzogT2JqZWN0LmFzc2lnbih7fSwgYmxvY2sudGltaW5nLCB7IGR1cmF0aW9uLCBkZWxheSB9KSxcbiAgICBjaGFuZ2U6IGJsb2NrLmNoYW5nZSxcbiAgICBlbnVtZXJhdGVkOiBibG9jay5lbnVtZXJhdGVkLFxuICAgIGVudW1lcmF0b3I6IGJsb2NrLmVudW1lcmF0b3IsIC8vIHN0ZXAgZW51bWVyYXRvclxuICAgIGNvbXBUeXBlLFxuICAgIGNvbXBOYW1lXG4gIH07XG59XG5leHBvcnQgZnVuY3Rpb24gcmVhZENvbmNhdEJsb2NrKGNvbmNhdEJsb2NrLCB0b3RhbER1cmF0aW9uLCBtdWx0aXBsaWVyID0gMSkge1xuICBjb25zdCBjb25jYXRlbmF0ZWQgPSBjb25jYXRCbG9jay5jb25jYXQ7XG4gIGxldCBkdXJhdGlvbiA9IDA7XG4gIGxldCBhbHRlcm5hdGVDb25jYXRzID0ge307XG5cbiAgY29uc3QgbmV3TXVsdCA9IGNvbmNhdEJsb2NrLmVudW1lcmF0ZWQgPyAxIC8gY29uY2F0QmxvY2suZW51bWVyYXRlZC5OIDogMTtcblxuICBjb25zdCByZWZvcm1lZEJsb2NrcyA9IGNvbmNhdGVuYXRlZC5tYXAoYmxvY2sgPT4ge1xuICAgIGNvbnN0IG5ld0Jsb2NrID0gcmVhZEJsb2NrKGJsb2NrLCB0b3RhbER1cmF0aW9uLCBtdWx0aXBsaWVyICogbmV3TXVsdCk7XG4gICAgZHVyYXRpb24gPSBkdXJhdGlvbiArIG5ld0Jsb2NrLnRpbWluZy5kdXJhdGlvbiArIG5ld0Jsb2NrLnRpbWluZy5kZWxheTtcbiAgICByZXR1cm4gbmV3QmxvY2s7XG4gIH0pO1xuXG4gIGlmIChjb25jYXRCbG9jay5hdXRvU2NhbGVPcmRlcikge1xuICAgIC8vIHBlcm11dGF0ZSB0aGUgY29uY2F0J3Mgb3JkZXJcbiAgICBjb25jYXRCbG9jay5yZXNvbHZlID0ge1xuICAgICAgYXV0b1NjYWxlT3JkZXI6IGNvbmNhdEJsb2NrLmF1dG9TY2FsZU9yZGVyLFxuICAgICAgYWx0ZXJOYW1lOlxuICAgICAgICBjb25jYXRCbG9jay5hdXRvU2NhbGVPcmRlci5qb2luKFwiLVwiKSArXG4gICAgICAgIChjb25jYXRCbG9jay5lbnVtZXJhdGVkID8gYF8ke2NvbmNhdEJsb2NrLmVudW1lcmF0ZWQudmFsfWAgOiBcIlwiKVxuICAgIH07XG4gICAgbGV0IGFsdGVybmF0ZXMgPSBwZXJtdXRhdGVPbmx5Q29udGFpbk5hbWVzKFxuICAgICAgY29uY2F0ZW5hdGVkLFxuICAgICAgY29uY2F0QmxvY2sucmVzb2x2ZS5hdXRvU2NhbGVPcmRlclxuICAgICk7XG5cbiAgICBhbHRlcm5hdGVzLnNwbGljZSgwLCAxKTtcbiAgICBhbHRlcm5hdGVzID0gYWx0ZXJuYXRlcy5tYXAoY29uY2F0ZW5hdGVkX2kgPT4ge1xuICAgICAgcmV0dXJuIGNvbmNhdGVuYXRlZF9pLm1hcChibG9jayA9PiByZWFkQmxvY2soYmxvY2ssIHRvdGFsRHVyYXRpb24sIG11bHRpcGxpZXIgKiBuZXdNdWx0KSk7XG4gICAgfSk7XG4gICAgYWx0ZXJuYXRlQ29uY2F0cyA9IHtcbiAgICAgIGFsdGVyTmFtZTogY29uY2F0QmxvY2sucmVzb2x2ZS5hbHRlck5hbWUsXG4gICAgICBhbHRlcm5hdGVzXG4gICAgfTtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmFzc2lnbihcbiAgICB7XG4gICAgICBkZWxheTogMCxcbiAgICAgIGR1cmF0aW9uLFxuICAgICAgdGltaW5nOiB7IGRlbGF5OiAwLCBkdXJhdGlvbiB9LFxuICAgICAgY29uY2F0OiByZWZvcm1lZEJsb2NrcyxcbiAgICAgIHJlc29sdmU6IGNvbmNhdEJsb2NrLnJlc29sdmUsXG4gICAgICBlbnVtZXJhdGVkOiBjb25jYXRCbG9jay5lbnVtZXJhdGVkXG4gICAgfSxcbiAgICBhbHRlcm5hdGVDb25jYXRzXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwZXJtdXRhdGVPbmx5Q29udGFpbk5hbWVzKGJsb2NrcywgbmFtZXMpIHtcbiAgY29uc3QgZmlsdGVyZWQgPSBbXTtcbiAgY29uc3QgaW5kaWNlcyA9IFtdO1xuICBibG9ja3MuZm9yRWFjaCgoYmxrLCBpKSA9PiB7XG4gICAgaWYgKGNvbnRhaW5OYW1lcyhibGspKSB7XG4gICAgICBmaWx0ZXJlZC5wdXNoKGJsayk7XG4gICAgICBpbmRpY2VzLnB1c2goaSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcGVybXV0YXRlKGZpbHRlcmVkKS5tYXAocGVybXV0YXRlZE9uZSA9PiB7XG4gICAgcmV0dXJuIGluZGljZXMucmVkdWNlKChhY2MsIGluZGV4LCBpKSA9PiB7XG4gICAgICBhY2Muc3BsaWNlKGluZGV4LCAxLCBwZXJtdXRhdGVkT25lW2ldKTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgY29weShibG9ja3MpKTtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gY29udGFpbk5hbWVzKGJsb2NrKSB7XG4gICAgaWYgKGJsb2NrLnN5bmMgfHwgYmxvY2suY29uY2F0KSB7XG4gICAgICByZXR1cm4gKGJsb2NrLnN5bmMgfHwgYmxvY2suY29uY2F0KS5yZWR1Y2UoKGFjYywgYmxrKSA9PiB7XG4gICAgICAgIGFjYyA9IGFjYyB8fCBjb250YWluTmFtZXMoYmxrLCBuYW1lcyk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCBmYWxzZSk7XG4gICAgfVxuICAgIGNvbnN0IGNvbXBUeXBlID0gT2JqZWN0LmtleXMoYmxvY2suY29tcG9uZW50KVswXTtcbiAgICByZXR1cm4gbmFtZXMuaW5kZXhPZihibG9jay5jb21wb25lbnRbY29tcFR5cGVdKSA+PSAwO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkU3luY0Jsb2NrKHN5bmNCbG9jaywgdG90YWxEdXJhdGlvbiwgbXVsdGlwbGllciA9IDEpIHtcbiAgY29uc3QgYW5jaG9yID0gc3luY0Jsb2NrLmFuY2hvciB8fCBcInN0YXJ0XCI7XG4gIGxldCBkdXJhdGlvbiA9IDA7XG4gIGNvbnN0IG5ld0Jsb2NrcyA9IHN5bmNCbG9jay5zeW5jLm1hcChibG9jayA9PiB7XG4gICAgY29uc3QgbmV3QmxvY2sgPSByZWFkQmxvY2soYmxvY2ssIHRvdGFsRHVyYXRpb24sIG11bHRpcGxpZXIpO1xuICAgIGR1cmF0aW9uID1cbiAgICAgIGR1cmF0aW9uID4gbmV3QmxvY2sudGltaW5nLmR1cmF0aW9uICsgbmV3QmxvY2sudGltaW5nLmRlbGF5XG4gICAgICAgID8gZHVyYXRpb25cbiAgICAgICAgOiBuZXdCbG9jay50aW1pbmcuZHVyYXRpb24gKyBuZXdCbG9jay50aW1pbmcuZGVsYXk7XG4gICAgcmV0dXJuIG5ld0Jsb2NrO1xuICB9KTtcblxuICByZXR1cm4ge1xuICAgIGRlbGF5OiAwLFxuICAgIGR1cmF0aW9uLFxuICAgIHRpbWluZzogeyBkZWxheTogMCwgZHVyYXRpb24gfSxcbiAgICBhbmNob3IsXG4gICAgc3luYzogbmV3QmxvY2tzXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2hTdGFnZ2VyaW5nKGl0ZW0sIHN0YWdnZXJpbmdzKSB7XG4gIGlmICghc3RhZ2dlcmluZ3MgfHwgc3RhZ2dlcmluZ3MubGVuZ3RoIDw9IDAgfHwgIWl0ZW0pIHtcbiAgICByZXR1cm4gaXRlbTtcbiAgfVxuXG4gIGNvbnN0IGZvdW5kID0gc3RhZ2dlcmluZ3MuZmluZChzdGdEZWYgPT4gaXRlbS5zdGFnZ2VyaW5nID09PSBzdGdEZWYubmFtZSk7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKGl0ZW0sIHsgc3RhZ2dlcmluZzogZm91bmQgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2hFbnVtZXJhdG9ycyhpdGVtLCBlbnVtZXJhdG9ycykge1xuICBpZiAoIWVudW1lcmF0b3JzIHx8IGVudW1lcmF0b3JzLmxlbmd0aCA8PSAwIHx8ICFpdGVtKSB7XG4gICAgcmV0dXJuIGl0ZW07XG4gIH1cblxuICBjb25zdCBmb3VuZCA9IGVudW1lcmF0b3JzLmZpbmQoXG4gICAgZW51bWVyYXRvckRlZiA9PiBpdGVtLmVudW1lcmF0b3IgPT09IGVudW1lcmF0b3JEZWYubmFtZVxuICApO1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihpdGVtLCB7IGVudW1lcmF0b3I6IGZvdW5kIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzaWduVGltaW5nKGJsb2NrLCB0aW1lUG9pbnRlcikge1xuICBsZXQgc3RlcHMgPSBbXTtcbiAgY29uc3QgYW5jaG9yID0gaXNOdW1iZXIodGltZVBvaW50ZXIuc1RpbWUpID8gXCJzXCIgOiBcImVcIjtcbiAgbGV0IHRpbWVzdGFtcCA9IGFuY2hvciA9PT0gXCJzXCIgPyB0aW1lUG9pbnRlci5zVGltZSA6IHRpbWVQb2ludGVyLmVUaW1lO1xuICBpZiAoYmxvY2suc3luYyAmJiBibG9jay5hbmNob3IgPT09IFwic3RhcnRcIikge1xuICAgIGJsb2NrLnN5bmMuZm9yRWFjaChibGsgPT4ge1xuICAgICAgc3RlcHMgPSBzdGVwcy5jb25jYXQoXG4gICAgICAgIGFzc2lnblRpbWluZyhibGssIHtcbiAgICAgICAgICBzVGltZTogYW5jaG9yID09PSBcInNcIiA/IHRpbWVzdGFtcCA6IHRpbWVzdGFtcCAtIGJsb2NrLmR1cmF0aW9uXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKGJsb2NrLnN5bmMgJiYgYmxvY2suYW5jaG9yID09PSBcImVuZFwiKSB7XG4gICAgYmxvY2suc3luYy5mb3JFYWNoKGJsayA9PiB7XG4gICAgICBzdGVwcyA9IHN0ZXBzLmNvbmNhdChcbiAgICAgICAgYXNzaWduVGltaW5nKGJsaywge1xuICAgICAgICAgIGVUaW1lOiBhbmNob3IgPT09IFwiZVwiID8gdGltZXN0YW1wIDogdGltZXN0YW1wICsgYmxvY2suZHVyYXRpb25cbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoYmxvY2suY29uY2F0KSB7XG4gICAgaWYgKGFuY2hvciA9PT0gXCJlXCIpIHtcbiAgICAgIHRpbWVzdGFtcCAtPSBibG9jay5kdXJhdGlvbjtcbiAgICB9XG5cbiAgICBpZiAoYmxvY2suYWx0ZXJuYXRlcykge1xuICAgICAgYmxvY2suYWx0ZXJuYXRlcy5mb3JFYWNoKChhbHRlcm5hdGUsIGkpID0+IHtcbiAgICAgICAgbGV0IGFsdGVyVGltZVN0YW1wID0gdGltZXN0YW1wO1xuICAgICAgICBhbHRlcm5hdGUuZm9yRWFjaChibGsgPT4ge1xuICAgICAgICAgIGNvbnN0IGFsdGVyID0gYXNzaWduVGltaW5nKGNvcHkoYmxrKSwge1xuICAgICAgICAgICAgc1RpbWU6IGFsdGVyVGltZVN0YW1wXG4gICAgICAgICAgfSkubWFwKHN0ZXAgPT4ge1xuICAgICAgICAgICAgc3RlcC5hbHRlcklkID0gYCR7c3RlcC5hbHRlcklkIHx8IFwiXCJ9JHtibG9jay5hbHRlck5hbWV9OiR7aX1gO1xuICAgICAgICAgICAgcmV0dXJuIHN0ZXA7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBzdGVwcyA9IHN0ZXBzLmNvbmNhdChhbHRlcik7XG4gICAgICAgICAgYWx0ZXJUaW1lU3RhbXAgKz0gYmxrLmR1cmF0aW9uICsgYmxrLmRlbGF5O1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGJsb2NrLmNvbmNhdC5mb3JFYWNoKGJsayA9PiB7XG4gICAgICBjb25zdCBtYWluU3RlcHMgPSBhc3NpZ25UaW1pbmcoYmxrLCB7IHNUaW1lOiB0aW1lc3RhbXAgfSkubWFwKHN0ZXAgPT4ge1xuICAgICAgICBzdGVwLmFsdGVySWQgPSBzdGVwLmFsdGVySWQgfHwgYCR7YmxvY2suYWx0ZXJOYW1lIHx8IFwiXCJ9Om1haW5gO1xuICAgICAgICByZXR1cm4gY29weShzdGVwKTtcbiAgICAgIH0pO1xuICAgICAgc3RlcHMgPSBzdGVwcy5jb25jYXQobWFpblN0ZXBzKTtcbiAgICAgIHRpbWVzdGFtcCArPSBibGsuZHVyYXRpb24gKyBibGsuZGVsYXk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGFuY2hvciA9PT0gXCJzXCIpIHtcbiAgICAgIGJsb2NrLnNUaW1lID0gdGltZXN0YW1wO1xuICAgICAgYmxvY2suZVRpbWUgPSB0aW1lc3RhbXAgKyBibG9jay5kdXJhdGlvbiArIGJsb2NrLmRlbGF5O1xuICAgIH0gZWxzZSB7XG4gICAgICBibG9jay5lVGltZSA9IHRpbWVzdGFtcDtcbiAgICAgIGJsb2NrLnNUaW1lID0gdGltZXN0YW1wIC0gYmxvY2suZHVyYXRpb24gLSBibG9jay5kZWxheTtcbiAgICB9XG4gICAgc3RlcHMgPSBzdGVwcy5jb25jYXQoW2Jsb2NrXSk7XG4gIH1cbiAgcmV0dXJuIHN0ZXBzO1xufSIsImltcG9ydCAqIGFzIGQzIGZyb20gXCJkM1wiO1xuaW1wb3J0IHsgY29tcHV0ZUhhc0ZhY2V0LCBpc0dyb3VwaW5nTWFya3R5cGUgfSBmcm9tIFwiLi4vY2hhbmdlRmV0Y2hlci9zdGF0ZS91dGlsXCI7XG4vLyBKb2luIGFuZCByZXR1cm4gbmV4dERhdGFcbmZ1bmN0aW9uIGZhY2V0RGF0YShkYXRhLCBmYWNldERlZikge1xuICBpZiAoIWZhY2V0RGVmKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgZGF0dW06IHt9LFxuICAgICAgICBtYXJrOiB7IHJvbGU6IFwiZ3JvdXBcIiwgbWFya3R5cGU6IFwiZ3JvdXBcIiB9LFxuICAgICAgICBpdGVtczogW3sgaXRlbXM6IGRhdGEgfV1cbiAgICAgIH1cbiAgICBdO1xuICB9XG5cbiAgbGV0IHtncm91cGJ5fSA9IGZhY2V0RGVmO1xuICBpZiAodHlwZW9mIGdyb3VwYnkgPT09IFwic3RyaW5nXCIpIHtcbiAgICBncm91cGJ5ID0gW2dyb3VwYnldO1xuICB9XG4gIHJldHVybiBkMy5ncm91cHMoZGF0YSwgZCA9PiBncm91cGJ5Lm1hcChmID0+IGQuZGF0dW1bZl0pLmpvaW4oXCJAQF9AQFwiKSlcbiAgICAubWFwKGdyb3VwID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlcyAgPSBncm91cFsxXVxuICAgICAgbGV0IGRhdHVtID0gZ3JvdXBieS5yZWR1Y2UoKGRhdHVtLCBmKSA9PiB7XG4gICAgICAgIGRhdHVtW2ZdID0gdmFsdWVzWzBdLmRhdHVtW2ZdO1xuICAgICAgICByZXR1cm4gZGF0dW07XG4gICAgICB9LCB7IGNvdW50OiB2YWx1ZXMubGVuZ3RoIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0dW06IGRhdHVtLFxuICAgICAgICBtYXJrOiB7cm9sZTogXCJncm91cFwiLCBtYXJrdHlwZTogXCJncm91cFwifSxcbiAgICAgICAgaXRlbXM6IFt7aXRlbXM6IHZhbHVlcyB9XVxuICAgICAgfTtcbiAgICB9KTtcblxufVxuZnVuY3Rpb24gdW5wYWNrRGF0YShkYXRhKSB7XG4gIGlmIChkYXRhWzBdLm1hcmsubWFya3R5cGUgIT09IFwiZ3JvdXBcIikge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgcmV0dXJuIGRhdGEucmVkdWNlKCh1bnBhY2tlZCwgZ3JvdXApID0+IHtcbiAgICByZXR1cm4gdW5wYWNrZWQuY29uY2F0KGdyb3VwLml0ZW1zWzBdLml0ZW1zKTtcbiAgfSwgW10pO1xufVxuXG5mdW5jdGlvbiBnZXRNYXJrRGF0YSh2aWV3LCBjb21wU3BlYywgY29tcE5hbWUsIG1hcmt0eXBlLCBmYWNldCkge1xuICBsZXQgZGF0YU5hbWUgPSBjb21wdXRlSGFzRmFjZXQoY29tcFNwZWMpID8gY29tcFNwZWMucGFyZW50Lm5hbWUgOiBjb21wTmFtZTtcbiAgbGV0IGRhdGEgPSB2aWV3Ll9ydW50aW1lLmRhdGFbZGF0YU5hbWVdID8gKHZpZXcuX3J1bnRpbWUuZGF0YVtkYXRhTmFtZV0udmFsdWVzLnZhbHVlKSB8fCBbXSA6IFtdO1xuICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuICBsZXQgaXNHcm91cGluZ010eXBlID0gaXNHcm91cGluZ01hcmt0eXBlKG1hcmt0eXBlIHx8IGNvbXBTcGVjLnR5cGUpLFxuICAgIGhhc0ZhY2V0ID0gY29tcHV0ZUhhc0ZhY2V0KGNvbXBTcGVjKTtcblxuICBpZiAoIGlzR3JvdXBpbmdNdHlwZSAmJiAhaGFzRmFjZXQgKSB7XG4gICAgcmV0dXJuIGZhY2V0RGF0YShkYXRhLCBmYWNldCB8fCAoY29tcFNwZWMucGFyZW50LmZyb20gPyBjb21wU3BlYy5wYXJlbnQuZnJvbS5mYWNldCA6IHVuZGVmaW5lZCkpO1xuICB9IGlmICghaXNHcm91cGluZ010eXBlICYmIGhhc0ZhY2V0KSB7XG4gICAgZGF0YSA9IHVucGFja0RhdGEoZGF0YSk7XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIGdldEVtcHR5TGVnZW5kRGF0YShjb21wU3BlYykge1xuICBpZiAoY29tcFNwZWMudHlwZSA9PT0gXCJzeW1ib2xcIikge1xuICAgIHJldHVybiB7XG4gICAgICBsYWJlbHM6IFtdLFxuICAgICAgc3ltYm9sczogW10sXG4gICAgICBwYWlyczogW10sXG4gICAgICB0aXRsZTogW11cbiAgICB9O1xuICB9IGlmIChjb21wU3BlYy50eXBlID09PSBcImdyYWRpZW50XCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWxzOiBbXSxcbiAgICAgIGdyYWRpZW50OiBbXSxcbiAgICAgIGJhbmRzOiBbXSxcbiAgICAgIHRpdGxlOiBbXVxuICAgIH07XG4gIH1cbn1cbmZ1bmN0aW9uIGdldExlZ2VuZERhdGEodmlldywgY29tcE5hbWUsIGNvbXBTcGVjKSB7XG4gIGNvbnN0IHRpdGxlRGF0dW0gPSB2aWV3Ll9ydW50aW1lLmRhdGFbY29tcE5hbWVdLnZhbHVlcy52YWx1ZVswXS5pdGVtcy5maW5kKFxuICAgIGl0ZW0gPT4gaXRlbS5yb2xlID09PSBcImxlZ2VuZC10aXRsZVwiXG4gICkuaXRlbXNbMF07XG4gIGxldCByZXR1cm5EYXRhID0geyB0aXRsZTogW3RpdGxlRGF0dW1dIH07XG4gIGlmIChjb21wU3BlYy50eXBlID09PSBcInN5bWJvbFwiKSB7XG4gICAgcmV0dXJuRGF0YSA9IE9iamVjdC5hc3NpZ24ocmV0dXJuRGF0YSwge1xuICAgICAgbGFiZWxzOiBbXSxcbiAgICAgIHN5bWJvbHM6IFtdLFxuICAgICAgcGFpcnM6IFtdXG4gICAgfSk7XG4gICAgY29uc3QgZlBhaXJzID0gdmlldy5fcnVudGltZS5kYXRhW2NvbXBOYW1lXS52YWx1ZXMudmFsdWVbMF0uaXRlbXMuZmluZChcbiAgICAgIGl0ZW0gPT4gaXRlbS5yb2xlID09PSBcImxlZ2VuZC1lbnRyeVwiXG4gICAgKS5pdGVtc1swXS5pdGVtc1swXS5pdGVtcztcbiAgICBmUGFpcnMuZm9yRWFjaChwYWlyID0+IHtcbiAgICAgIHJldHVybkRhdGEucGFpcnMucHVzaChwYWlyKTtcbiAgICAgIHJldHVybkRhdGEubGFiZWxzLnB1c2goXG4gICAgICAgIHBhaXIuaXRlbXMuZmluZChpdGVtID0+IGl0ZW0ucm9sZSA9PT0gXCJsZWdlbmQtbGFiZWxcIikuaXRlbXNbMF1cbiAgICAgICk7XG4gICAgICByZXR1cm5EYXRhLnN5bWJvbHMucHVzaChcbiAgICAgICAgcGFpci5pdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS5yb2xlID09PSBcImxlZ2VuZC1zeW1ib2xcIikuaXRlbXNbMF1cbiAgICAgICk7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoY29tcFNwZWMudHlwZSA9PT0gXCJncmFkaWVudFwiKSB7XG4gICAgcmV0dXJuRGF0YSA9IE9iamVjdC5hc3NpZ24ocmV0dXJuRGF0YSwge1xuICAgICAgbGFiZWxzOiBbXSxcbiAgICAgIGdyYWRpZW50OiBbXSxcbiAgICAgIGJhbmRzOiBbXVxuICAgIH0pO1xuICAgIGNvbnN0IGVudHJ5RyA9IHZpZXcuX3J1bnRpbWUuZGF0YVtjb21wTmFtZV0udmFsdWVzLnZhbHVlWzBdLml0ZW1zLmZpbmQoXG4gICAgICBpdGVtID0+IGl0ZW0ucm9sZSA9PT0gXCJsZWdlbmQtZW50cnlcIlxuICAgICkuaXRlbXNbMF07XG4gICAgbGV0IGxhYmVsRzsgbGV0IGJhbmRHOyBsZXQgZ3JhZGllbnRHO1xuICAgIGlmICgobGFiZWxHID0gZW50cnlHLml0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnJvbGUgPT09IFwibGVnZW5kLWxhYmVsXCIpKSkge1xuICAgICAgcmV0dXJuRGF0YS5sYWJlbHMgPSByZXR1cm5EYXRhLmxhYmVscy5jb25jYXQobGFiZWxHLml0ZW1zKTtcbiAgICB9XG4gICAgaWYgKChiYW5kRyA9IGVudHJ5Ry5pdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS5yb2xlID09PSBcImxlZ2VuZC1iYW5kXCIpKSkge1xuICAgICAgcmV0dXJuRGF0YS5iYW5kcyA9IHJldHVybkRhdGEuYmFuZHMuY29uY2F0KGJhbmRHLml0ZW1zKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgKGdyYWRpZW50RyA9IGVudHJ5Ry5pdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS5yb2xlID09PSBcImxlZ2VuZC1ncmFkaWVudFwiKSlcbiAgICApIHtcbiAgICAgIHJldHVybkRhdGEuZ3JhZGllbnQucHVzaChncmFkaWVudEcuaXRlbXNbMF0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmV0dXJuRGF0YTtcbn1cblxuZnVuY3Rpb24gZ2V0RW1wdHlBeGlzRGF0YSgpIHtcbiAgcmV0dXJuIHtcbiAgICB0aWNrOiBbXSxcbiAgICBsYWJlbDogW10sXG4gICAgZ3JpZDogW11cbiAgfTtcbn1cbmZ1bmN0aW9uIGdldEF4aXNEYXRhKHZpZXcsIGNvbXBOYW1lKSB7XG4gIHJldHVybiBbXCJ0aWNrXCIsIFwibGFiZWxcIiwgXCJncmlkXCJdLnJlZHVjZSgoYWNjLCBzdWJDb21wKSA9PiB7XG4gICAgbGV0IGRhdGEgPSB2aWV3Ll9ydW50aW1lLmRhdGFbY29tcE5hbWVdLnZhbHVlcy52YWx1ZVswXS5pdGVtc1xuICAgICAgLmZpbmQoaXRlbSA9PiBpdGVtLnJvbGUgPT09IGBheGlzLSR7c3ViQ29tcH1gKTtcblxuICAgIGRhdGEgPSBkYXRhICYmIGRhdGEuaXRlbXMgPyBkYXRhLml0ZW1zIDogW107XG4gICAgYWNjW3N1YkNvbXBdID0gZGF0YTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG59XG5cbmV4cG9ydCB7XG4gIGZhY2V0RGF0YSxcbiAgdW5wYWNrRGF0YSxcbiAgZ2V0TWFya0RhdGEsXG4gIGdldEVtcHR5TGVnZW5kRGF0YSxcbiAgZ2V0TGVnZW5kRGF0YSxcbiAgZ2V0RW1wdHlBeGlzRGF0YSxcbiAgZ2V0QXhpc0RhdGFcbn07XG4iLCJpbXBvcnQgeyBjb21wdXRlSGFzRmFjZXQsIGlzR3JvdXBpbmdNYXJrdHlwZSwgZ2V0RmFjZXQgfSBmcm9tIFwiLi91dGlsXCI7XG5pbXBvcnQgeyBzdHJpbmdpZnlEYXR1bVZhbHVlIH0gZnJvbSBcIi4uLy4uL3V0aWwvdXRpbFwiO1xuaW1wb3J0IHtcbiAgZmFjZXREYXRhLFxuICB1bnBhY2tEYXRhLFxuICBnZXRBeGlzRGF0YSxcbiAgZ2V0RW1wdHlBeGlzRGF0YSxcbiAgZ2V0RW1wdHlMZWdlbmREYXRhLFxuICBnZXRMZWdlbmREYXRhLFxuICBnZXRNYXJrRGF0YVxufSBmcm9tIFwiLi4vLi4vdXRpbC92Z0RhdGFIZWxwZXJcIjtcblxuZnVuY3Rpb24gY29tcHV0ZUlkTWFrZXIoa2V5KSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGtleSkpIHtcbiAgICByZXR1cm4gKGQpID0+IHtcbiAgICAgIHJldHVybiBrZXlcbiAgICAgICAgLm1hcChmaWVsZCA9PiB7XG4gICAgICAgICAgcmV0dXJuIGQuZGF0dW1bZmllbGRdO1xuICAgICAgICB9KVxuICAgICAgICAuam9pbihcIi1cIik7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gKGQsIGkpID0+IHN0cmluZ2lmeURhdHVtVmFsdWUoaSk7XG59XG5cbmZ1bmN0aW9uIGluaXRpYWxEYXRhKHN0ZXAsIHJhd0luZm8pIHtcbiAgY29uc3Qgc1ZpZXcgPSByYXdJbmZvLnNWaXMudmlldztcbiAgY29uc3QgeyBjaGFuZ2UgfSA9IHN0ZXA7XG4gIGNvbnN0IGlzQWRkID0gIWNoYW5nZS5pbml0aWFsICYmICEhY2hhbmdlLmZpbmFsO1xuICBpZiAoY2hhbmdlLmNvbXBUeXBlID09PSBcImF4aXNcIikge1xuICAgIGlmIChpc0FkZCkge1xuICAgICAgcmV0dXJuIGdldEVtcHR5QXhpc0RhdGEoKTtcbiAgICB9XG4gICAgcmV0dXJuIGdldEF4aXNEYXRhKHNWaWV3LCBjaGFuZ2UuY29tcE5hbWUpO1xuICB9XG4gIGlmIChjaGFuZ2UuY29tcFR5cGUgPT09IFwibGVnZW5kXCIpIHtcbiAgICBpZiAoaXNBZGQpIHtcbiAgICAgIHJldHVybiBnZXRFbXB0eUxlZ2VuZERhdGEoY2hhbmdlLmZpbmFsKTtcbiAgICB9XG4gICAgcmV0dXJuIGdldExlZ2VuZERhdGEoc1ZpZXcsIGNoYW5nZS5jb21wTmFtZSwgY2hhbmdlLmluaXRpYWwpO1xuICB9XG4gIGlmIChjaGFuZ2UuY29tcFR5cGUgPT09IFwibWFya1wiKSB7XG4gICAgaWYgKGlzQWRkKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IG10eXBlID0gc3RlcC5tYXJrdHlwZXMgPyBzdGVwLm1hcmt0eXBlcy5pbml0aWFsIDogY2hhbmdlLmluaXRpYWwudHlwZTtcbiAgICByZXR1cm4gZ2V0TWFya0RhdGEoc1ZpZXcsIGNoYW5nZS5pbml0aWFsLCBjaGFuZ2UuY29tcE5hbWUsIG10eXBlKTtcbiAgfVxuICBpZiAoY2hhbmdlLmNvbXBUeXBlID09PSBcInZpZXdcIikge1xuICAgIHJldHVybiBzVmlldy5fcnVudGltZS5kYXRhLnJvb3QudmFsdWVzLnZhbHVlWzBdO1xuICB9XG59XG5cbmZ1bmN0aW9uIGpvaW5EYXRhKHN0ZXAsIHJhd0luZm8sIGluaXRpYWxEYXRhKSB7XG4gIGNvbnN0IGlEYXRhID0gaW5pdGlhbERhdGE7XG4gIGNvbnN0IGVWaWV3ID0gcmF3SW5mby5lVmlzLnZpZXc7XG4gIGNvbnN0IHtjaGFuZ2V9ID0gc3RlcDtcbiAgY29uc3QgaXNBZGQgPSAhY2hhbmdlLmluaXRpYWwgJiYgISFjaGFuZ2UuZmluYWw7XG4gIGNvbnN0IGlzUmVtb3ZlID0gISFjaGFuZ2UuaW5pdGlhbCAmJiAhY2hhbmdlLmZpbmFsO1xuICBjb25zdCB7aGFzRmFjZXR9ID0gc3RlcDtcbiAgbGV0IHByZUZldGNoQ3VyckRhdGEgPSBmYWxzZTtcbiAgbGV0IGNvbXB1dGVJZCA9IHt9O1xuXG4gIGlmIChjaGFuZ2UuY29tcFR5cGUgPT09IFwiYXhpc1wiKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgbmV4dERhdGE6IHt9LFxuICAgICAgY3VyckRhdGE6IHt9LFxuICAgICAgY29tcHV0ZURhdHVtSWQ6IHt9XG4gICAgfTtcblxuICAgIHJlc3VsdC5uZXh0RGF0YS5heGlzID0gaXNSZW1vdmVcbiAgICAgID8gaURhdGEuYXhpc1xuICAgICAgOiBbZVZpZXcuX3J1bnRpbWUuZGF0YVtjaGFuZ2UuY29tcE5hbWVdLnZhbHVlcy52YWx1ZVswXS5kYXR1bV07XG4gICAgcmVzdWx0LmN1cnJEYXRhLmF4aXMgPSBpRGF0YS5heGlzO1xuICAgIHJlc3VsdC5jb21wdXRlRGF0dW1JZC5heGlzID0gKGQsIGkpID0+IGk7XG5cbiAgICBpZiAoXG4gICAgICBjaGFuZ2Uuc2NhbGUgPT09IGZhbHNlIHx8XG4gICAgICAoY2hhbmdlLnNjYWxlICYmIGNoYW5nZS5zY2FsZS5kYXRhID09PSBmYWxzZSlcbiAgICApIHtcbiAgICAgIGNvbnN0IGNvbXB1dGVJZCA9IGQgPT4gc3RyaW5naWZ5RGF0dW1WYWx1ZShkLmRhdHVtLnZhbHVlKTtcbiAgICAgIHJldHVybiBbXCJ0aWNrXCIsIFwibGFiZWxcIiwgXCJncmlkXCJdLnJlZHVjZSgoYWNjLCBzdWJDb21wKSA9PiB7XG4gICAgICAgIGNvbnN0IG5leHREYXRhID0gaURhdGFbc3ViQ29tcF0ubWFwKChkLCBpKSA9PiB7XG4gICAgICAgICAgc2V0Sm9pbkluZm8oZCwgc3RlcCwgeyBhbmltU2V0OiBcInVwZGF0ZVwiLCBqb2luS2V5OiBjb21wdXRlSWQoZCwgaSkgfSk7XG4gICAgICAgICAgcmV0dXJuIGQ7XG4gICAgICAgIH0pO1xuICAgICAgICBhY2MubmV4dERhdGFbc3ViQ29tcF0gPSBuZXh0RGF0YTtcbiAgICAgICAgYWNjLmN1cnJEYXRhW3N1YkNvbXBdID0gbmV4dERhdGE7XG4gICAgICAgIGFjYy5jb21wdXRlRGF0dW1JZFtzdWJDb21wXSA9IGNvbXB1dGVJZDtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIHJlc3VsdCk7XG4gICAgfVxuXG4gICAgbGV0IGZEYXRhID0gZ2V0RW1wdHlBeGlzRGF0YSgpO1xuICAgIGlmICghaXNSZW1vdmUpIHtcbiAgICAgIGZEYXRhID0gZ2V0QXhpc0RhdGEoZVZpZXcsIGNoYW5nZS5jb21wTmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtcInRpY2tcIiwgXCJsYWJlbFwiLCBcImdyaWRcIl0ucmVkdWNlKChhY2MsIHN1YkNvbXApID0+IHtcbiAgICAgIGxldCBzdWJDb21wRW5jTmFtZSA9IHN1YkNvbXAgPT09IFwidGlja1wiID8gXCJ0aWNrc1wiIDogc3ViQ29tcDtcbiAgICAgIHN1YkNvbXBFbmNOYW1lID0gc3ViQ29tcEVuY05hbWUgPT09IFwibGFiZWxcIiA/IFwibGFiZWxzXCIgOiBzdWJDb21wRW5jTmFtZTtcbiAgICAgIGxldCBjb21wdXRlSWQgPSBkID0+IHN0cmluZ2lmeURhdHVtVmFsdWUoZC5kYXR1bS52YWx1ZSk7XG5cbiAgICAgIGlmIChjaGFuZ2UuZW5jb2RlICYmIGNoYW5nZS5lbmNvZGVbc3ViQ29tcEVuY05hbWVdID09PSBmYWxzZSkge1xuICAgICAgICBhY2MubmV4dERhdGFbc3ViQ29tcF0gPSBpRGF0YVtzdWJDb21wXTtcbiAgICAgICAgYWNjLmN1cnJEYXRhW3N1YkNvbXBdID0gaURhdGFbc3ViQ29tcF07XG4gICAgICAgIGFjYy5jb21wdXRlRGF0dW1JZFtzdWJDb21wXSA9IGNvbXB1dGVJZDtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cblxuICAgICAgY29uc3QgaURhdGFTdWJDb21wID0gaURhdGFbc3ViQ29tcF0gfHwgW107XG4gICAgICBsZXQgZkRhdGFTdWJDb21wID0gZkRhdGFbc3ViQ29tcF0gfHwgW107XG4gICAgICBpZiAoIXN0ZXAuc2FtZURvbWFpbkRpbWVuc2lvbikge1xuICAgICAgICBjb25zdCBjaSA9IGFwcGVuZFBvc3RmaXgoY29tcHV0ZUlkLCBcIl9leGl0XCIpO1xuICAgICAgICBsZXQgY2YgPSBhcHBlbmRQb3N0Zml4KGNvbXB1dGVJZCwgXCJfZW50ZXJcIik7XG4gICAgICAgIGNvbXB1dGVJZCA9IHsgaW5pdGlhbDogY2ksIGZpbmFsOiBjZiB9O1xuXG4gICAgICAgIGlEYXRhU3ViQ29tcC5mb3JFYWNoKChpRGF0dW0sIGkpID0+IHtcbiAgICAgICAgICBzZXRKb2luSW5mbyhpRGF0dW0sIHN0ZXAsIHtcbiAgICAgICAgICAgIGFuaW1TZXQ6IFwiZXhpdFwiLFxuICAgICAgICAgICAgam9pbktleTogY29tcHV0ZUlkLmluaXRpYWwoaURhdHVtLCBpKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBmRGF0YVN1YkNvbXAuZm9yRWFjaCgoZkRhdHVtLCBpKSA9PiB7XG4gICAgICAgICAgc2V0Sm9pbkluZm8oZkRhdHVtLCBzdGVwLCB7XG4gICAgICAgICAgICBhbmltU2V0OiBcImVudGVyXCIsXG4gICAgICAgICAgICBqb2luS2V5OiBjb21wdXRlSWQuZmluYWwoZkRhdHVtLCBpKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGpvaW5UaGVtKGlEYXRhU3ViQ29tcCwgZkRhdGFTdWJDb21wLCBjb21wdXRlSWQsIHN0ZXApO1xuICAgICAgfVxuXG4gICAgICAvLyBsZXQgaXNBbmltU2V0ID0gZ2V0SXNBbmltU2V0KHN1YkNvbXBFbmNOYW1lLCBjaGFuZ2UuZW5jb2RlKTtcbiAgICAgIC8vIGxldCBpRGF0YUFuaW1TZXRzID0gKGlzQW5pbVNldC5leGl0ID8gW10gOiBbXCJleGl0XCJdKS5jb25jYXQoaXNBbmltU2V0LnVwZGF0ZSA/IFtdIDogW1widXBkYXRlXCJdKSxcbiAgICAgIC8vICAgZkRhdGFBbmltU2V0cyA9IChpc0FuaW1TZXQuZW50ZXIgPyBbXCJlbnRlclwiXSA6IFtdKS5jb25jYXQoaXNBbmltU2V0LnVwZGF0ZSA/IFtcInVwZGF0ZVwiXSA6IFtdKVxuICAgICAgY29uc3QgaURhdGFBbmltU2V0cyA9IFtdOyBsZXQgZkRhdGFBbmltU2V0cyA9IFtcImVudGVyXCIsIFwidXBkYXRlXCJdO1xuICAgICAgY29uc3QgbmV4dERhdGEgPSBpRGF0YVN1YkNvbXBcbiAgICAgICAgLmZpbHRlcihkID0+IGlEYXRhQW5pbVNldHMuaW5kZXhPZihnZXRKb2luSW5mbyhkLCBzdGVwLCBcImFuaW1TZXRcIikpID49IDApXG4gICAgICAgIC5jb25jYXQoZkRhdGFTdWJDb21wLmZpbHRlcihkID0+IGZEYXRhQW5pbVNldHMuaW5kZXhPZihnZXRKb2luSW5mbyhkLCBzdGVwLCBcImFuaW1TZXRcIikpID49IDApKTtcblxuICAgICAgLy8gbGV0IG5leHREYXRhID0gW107XG5cbiAgICAgIC8vIG5leHREYXRhID0gbmV4dERhdGEuY29uY2F0KGlzQW5pbVNldC51cGRhdGUgPyBqb2luZWREYXRhLnVwZGF0ZS5maW5hbCA6IGpvaW5lZERhdGEudXBkYXRlLmluaXRpYWwpXG4gICAgICAvLyBuZXh0RGF0YSA9IGlzQW5pbVNldC5lbnRlciA/IG5leHREYXRhLmNvbmNhdChqb2luZWREYXRhLmVudGVyKSA6IG5leHREYXRhO1xuICAgICAgLy8gbmV4dERhdGEgPSAhaXNBbmltU2V0LmV4aXQgPyBuZXh0RGF0YS5jb25jYXQoam9pbmVkRGF0YS5leGl0KSA6IG5leHREYXRhO1xuXG4gICAgICBhY2MubmV4dERhdGFbc3ViQ29tcF0gPSBuZXh0RGF0YTtcbiAgICAgIGFjYy5jdXJyRGF0YVtzdWJDb21wXSA9IGlEYXRhU3ViQ29tcDtcbiAgICAgIGFjYy5jb21wdXRlRGF0dW1JZFtzdWJDb21wXSA9IGNvbXB1dGVJZDtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgcmVzdWx0KTtcblxuICB9XG4gIGlmIChjaGFuZ2UuY29tcFR5cGUgPT09IFwibGVnZW5kXCIpIHtcbiAgICBjb25zdCBnZXRDb21wdXRlSWQgPSBzdWJDb21wID0+IHtcbiAgICAgIGlmIChzdWJDb21wID09PSBcInBhaXJzXCIpIHtcbiAgICAgICAgcmV0dXJuIGQgPT4ge1xuICAgICAgICAgIGNvbnN0IHtkYXR1bX0gPSBkLml0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnJvbGUgPT09IFwibGVnZW5kLWxhYmVsXCIpLml0ZW1zWzBdO1xuICAgICAgICAgIHJldHVybiBzdHJpbmdpZnlEYXR1bVZhbHVlKGRhdHVtLnZhbHVlKTtcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoc3ViQ29tcCA9PT0gXCJ0aXRsZVwiKSB7XG4gICAgICAgIHJldHVybiBkID0+IGQudGV4dDtcbiAgICAgIH0gZWxzZSBpZiAoc3ViQ29tcCA9PT0gXCJncmFkaWVudFwiKSB7XG4gICAgICAgIHJldHVybiBkID0+IEpTT04uc3RyaW5naWZ5KGQuZmlsbC5zdG9wcyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZCA9PiBzdHJpbmdpZnlEYXR1bVZhbHVlKGQuZGF0dW0udmFsdWUpO1xuICAgIH07XG5cbiAgICBjb25zdCByZXN1bHQgPSBPYmplY3Qua2V5cyhpRGF0YSkucmVkdWNlKFxuICAgICAgKGFjYywgc3ViQ29tcCkgPT4ge1xuICAgICAgICBjb21wdXRlSWQgPSBnZXRDb21wdXRlSWQoc3ViQ29tcCk7XG4gICAgICAgIGNvbnN0IG5leHREYXRhID0gaURhdGFbc3ViQ29tcF0ubWFwKChkLCBpKSA9PiB7XG4gICAgICAgICAgc2V0Sm9pbkluZm8oZCwgc3RlcCwgeyBhbmltU2V0OiBcInVwZGF0ZVwiLCBqb2luS2V5OiBjb21wdXRlSWQoZCwgaSkgfSk7XG4gICAgICAgICAgcmV0dXJuIGQ7XG4gICAgICAgIH0pO1xuICAgICAgICBhY2MubmV4dERhdGFbc3ViQ29tcF0gPSBuZXh0RGF0YTtcbiAgICAgICAgYWNjLmN1cnJEYXRhW3N1YkNvbXBdID0gbmV4dERhdGE7XG4gICAgICAgIGFjYy5jb21wdXRlRGF0dW1JZFtzdWJDb21wXSA9IGNvbXB1dGVJZDtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5leHREYXRhOiB7fSxcbiAgICAgICAgY3VyckRhdGE6IHt9LFxuICAgICAgICBjb21wdXRlRGF0dW1JZDoge31cbiAgICAgIH1cbiAgICApO1xuXG4gICAgaWYgKFxuICAgICAgY2hhbmdlLnNjYWxlID09PSBmYWxzZSB8fFxuICAgICAgKGNoYW5nZS5zY2FsZSAmJiBjaGFuZ2Uuc2NhbGUuZGF0YSA9PT0gZmFsc2UpXG4gICAgKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGlmIChpc1JlbW92ZSkge1xuICAgICAgcmVzdWx0Lm5leHREYXRhID0gZ2V0RW1wdHlMZWdlbmREYXRhKGNoYW5nZS5pbml0aWFsKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IGZEYXRhID0gZ2V0TGVnZW5kRGF0YShlVmlldywgY2hhbmdlLmNvbXBOYW1lLCBjaGFuZ2UuZmluYWwpO1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhmRGF0YSlcbiAgICAgIC5jb25jYXQoT2JqZWN0LmtleXMoaURhdGEpKVxuICAgICAgLnVuaXF1ZSgpO1xuICAgIHJldHVybiBrZXlzLnJlZHVjZSgoYWNjLCBzdWJDb21wKSA9PiB7XG4gICAgICBjb25zdCBzdWJDb21wRW5jTmFtZSA9IHN1YkNvbXA7XG4gICAgICBpZiAoY2hhbmdlLmVuY29kZSAmJiBjaGFuZ2UuZW5jb2RlW3N1YkNvbXBFbmNOYW1lXSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cbiAgICAgIGNvbXB1dGVJZCA9IGdldENvbXB1dGVJZChzdWJDb21wKTtcbiAgICAgIGNvbnN0IGlEYXRhU3ViQ29tcCA9IGlEYXRhW3N1YkNvbXBdIHx8IFtdO1xuICAgICAgbGV0IGZEYXRhU3ViQ29tcCA9IGZEYXRhW3N1YkNvbXBdfHwgW107XG4gICAgICBpZiAoXG4gICAgICAgIChzdWJDb21wID09PSBcImxhYmVsc1wiICYmXG4gICAgICAgICAgc3RlcC5sZWdlbmRUeXBlcy5pbml0aWFsICE9PSBzdGVwLmxlZ2VuZFR5cGVzLmZpbmFsKSB8fFxuICAgICAgICAhc3RlcC5zYW1lRG9tYWluRGltZW5zaW9uXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgY2kgPSBhcHBlbmRQb3N0Zml4KGNvbXB1dGVJZCwgXCJfZXhpdFwiKTtcbiAgICAgICAgbGV0IGNmID0gYXBwZW5kUG9zdGZpeChjb21wdXRlSWQsIFwiX2VudGVyXCIpO1xuICAgICAgICBjb21wdXRlSWQgPSB7IGluaXRpYWw6IGNpLCBmaW5hbDogY2YgfTtcblxuICAgICAgICBpRGF0YVN1YkNvbXAuZm9yRWFjaCgoaURhdHVtLCBpKSA9PiB7XG4gICAgICAgICAgc2V0Sm9pbkluZm8oaURhdHVtLCBzdGVwLCB7XG4gICAgICAgICAgICBhbmltU2V0OiBcImV4aXRcIixcbiAgICAgICAgICAgIGpvaW5LZXk6IGNvbXB1dGVJZC5pbml0aWFsKGlEYXR1bSwgaSlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZkRhdGFTdWJDb21wLmZvckVhY2goKGZEYXR1bSwgaSkgPT4ge1xuICAgICAgICAgIHNldEpvaW5JbmZvKGZEYXR1bSwgc3RlcCwge1xuICAgICAgICAgICAgYW5pbVNldDogXCJlbnRlclwiLFxuICAgICAgICAgICAgam9pbktleTogY29tcHV0ZUlkLmZpbmFsKGZEYXR1bSwgaSlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBqb2luVGhlbShpRGF0YVN1YkNvbXAsIGZEYXRhU3ViQ29tcCwgY29tcHV0ZUlkLCBzdGVwKTtcbiAgICAgIH1cblxuICAgICAgLy8gbGV0IGlzQW5pbVNldCA9IGdldElzQW5pbVNldChzdWJDb21wRW5jTmFtZSwgY2hhbmdlLmVuY29kZSk7XG5cbiAgICAgIC8vIGxldCBpRGF0YUFuaW1TZXRzID0gKGlzQW5pbVNldC5leGl0ID8gW10gOiBbXCJleGl0XCJdKS5jb25jYXQoaXNBbmltU2V0LnVwZGF0ZSA/IFtdIDogW1widXBkYXRlXCJdKSxcbiAgICAgIC8vICAgZkRhdGFBbmltU2V0cyA9IChpc0FuaW1TZXQuZW50ZXIgPyBbXCJlbnRlclwiXSA6IFtdKS5jb25jYXQoaXNBbmltU2V0LnVwZGF0ZSA/IFtcInVwZGF0ZVwiXSA6IFtdKVxuICAgICAgY29uc3QgaURhdGFBbmltU2V0cyA9IFtdOyBsZXQgZkRhdGFBbmltU2V0cyA9IFtcImVudGVyXCIsIFwidXBkYXRlXCJdO1xuICAgICAgY29uc3QgbmV4dERhdGEgPSBpRGF0YVN1YkNvbXBcbiAgICAgICAgLmZpbHRlcihkID0+IGlEYXRhQW5pbVNldHMuaW5kZXhPZihnZXRKb2luSW5mbyhkLCBzdGVwLCBcImFuaW1TZXRcIikpID49IDApXG4gICAgICAgIC5jb25jYXQoZkRhdGFTdWJDb21wLmZpbHRlcihkID0+IGZEYXRhQW5pbVNldHMuaW5kZXhPZihnZXRKb2luSW5mbyhkLCBzdGVwLCBcImFuaW1TZXRcIikpID49IDApKTtcblxuICAgICAgYWNjLm5leHREYXRhW3N1YkNvbXBdID0gbmV4dERhdGEgfHwgW107XG4gICAgICBhY2MuY3VyckRhdGFbc3ViQ29tcF0gPSBpRGF0YVN1YkNvbXA7XG4gICAgICBhY2MuY29tcHV0ZURhdHVtSWRbc3ViQ29tcF0gPSBjb21wdXRlSWQ7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHJlc3VsdCk7XG4gIH1cbiAgaWYgKGNoYW5nZS5jb21wVHlwZSA9PT0gXCJtYXJrXCIpIHtcbiAgICBjb25zdCB7bWFya3R5cGVzfSA9IHN0ZXA7XG5cbiAgICBsZXQgZG9VcGRhdGUgPSAhaXNSZW1vdmUgJiYgIWlzQWRkICYmIGNoYW5nZS5kYXRhICE9PSBmYWxzZSxcbiAgICAgIGRvRW50ZXIgPSAhaXNSZW1vdmUgJiYgKGlzQWRkIHx8IGNoYW5nZS5kYXRhICE9PSBmYWxzZSksXG4gICAgICBkb0V4aXQgPSAhaXNBZGQgJiYgKGlzUmVtb3ZlIHx8IGNoYW5nZS5kYXRhICE9PSBmYWxzZSk7XG4gICAgbGV0IGpvaW5GaWVsZHMgPSBudWxsO1xuICAgIGlmIChjaGFuZ2UuZGF0YSkge1xuICAgICAgZG9VcGRhdGUgPSBjaGFuZ2UuZGF0YS51cGRhdGUgPT09IGZhbHNlID8gZmFsc2UgOiBkb1VwZGF0ZTtcbiAgICAgIGRvRW50ZXIgPSBjaGFuZ2UuZGF0YS5lbnRlciA9PT0gZmFsc2UgPyBmYWxzZSA6IGRvRW50ZXI7XG4gICAgICBkb0V4aXQgPSBjaGFuZ2UuZGF0YS5leGl0ID09PSBmYWxzZSA/IGZhbHNlIDogZG9FeGl0O1xuICAgICAgam9pbkZpZWxkcyA9IEFycmF5LmlzQXJyYXkoY2hhbmdlLmRhdGEpID8gY2hhbmdlLmRhdGEgOiBjaGFuZ2UuZGF0YS5rZXlzO1xuICAgIH1cblxuXG4gICAgY29uc3QgYWdncmVnYXRlID0gc3RlcC5hZ2dyZWdhdGVzO1xuICAgIGNvbnN0IGlzR3JvdXBpbmdNYXJrdHlwZXMgPSB7XG4gICAgICBpbml0aWFsOiBpc0dyb3VwaW5nTWFya3R5cGUobWFya3R5cGVzLmluaXRpYWwgfHwgbWFya3R5cGVzLmZpbmFsKSxcbiAgICAgIGZpbmFsOiBpc0dyb3VwaW5nTWFya3R5cGUobWFya3R5cGVzLmZpbmFsIHx8IG1hcmt0eXBlcy5pbml0aWFsKVxuICAgIH07XG5cbiAgICBjb25zdCBmYWNldHMgPSB7XG4gICAgICBpbml0aWFsOiBoYXNGYWNldC5pbml0aWFsXG4gICAgICAgID8gZ2V0RmFjZXQoY2hhbmdlLmluaXRpYWwpIHx8IGdldEZhY2V0KGNoYW5nZS5maW5hbClcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBmaW5hbDogaGFzRmFjZXQuZmluYWxcbiAgICAgICAgPyBnZXRGYWNldChjaGFuZ2UuZmluYWwpIHx8IGdldEZhY2V0KGNoYW5nZS5pbml0aWFsKVxuICAgICAgICA6IHVuZGVmaW5lZFxuICAgIH07XG4gICAgaWYgKGNoYW5nZS5tYXJrdHlwZSA9PT0gZmFsc2UpIHtcbiAgICAgIGlzR3JvdXBpbmdNYXJrdHlwZXMuZmluYWwgPSBpc0dyb3VwaW5nTWFya3R5cGVzLmluaXRpYWw7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZS5kYXRhIHx8IGlzQWRkIHx8IGlzUmVtb3ZlKSB7XG4gICAgICBzdGVwLmNoYW5nZS5hZ2dyZWdhdGUgPSBhZ2dyZWdhdGU7XG5cbiAgICAgIGxldCBmRGF0YSA9IFtdO1xuICAgICAgaWYgKCFpc1JlbW92ZSkge1xuICAgICAgICBjb25zdCBtdHlwZSA9IG1hcmt0eXBlcy5maW5hbCB8fCBtYXJrdHlwZXMuaW5pdGlhbDtcbiAgICAgICAgY29uc3QgZmFjZXQgPVxuICAgICAgICAgIGNoYW5nZS5tYXJrdHlwZSA9PT0gZmFsc2VcbiAgICAgICAgICAgID8gY2hhbmdlLmluaXRpYWwucGFyZW50LmZyb21cbiAgICAgICAgICAgICAgPyBjaGFuZ2UuaW5pdGlhbC5wYXJlbnQuZnJvbS5mYWNldFxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgOiBjaGFuZ2UuZmluYWwucGFyZW50LmZyb21cbiAgICAgICAgICAgICAgPyBjaGFuZ2UuZmluYWwucGFyZW50LmZyb20uZmFjZXRcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgZkRhdGEgPSBnZXRNYXJrRGF0YShlVmlldywgY2hhbmdlLmZpbmFsLCBjaGFuZ2UuY29tcE5hbWUsIG10eXBlLCBmYWNldCk7XG4gICAgICB9XG4gICAgICAvLyAgIC8vIERhdGEgc2hvdWxkIGJlIGZyb20gY2hhbmdlLmZpbmFsIVxuICAgICAgLy8gICBsZXQgZE5hbWUgPSBjb21wdXRlSGFzRmFjZXQoY2hhbmdlLmZpbmFsKSA/IGNoYW5nZS5maW5hbC5wYXJlbnQubmFtZSA6IGRhdGFOYW1lO1xuICAgICAgLy8gICBsZXQgX2ZEYXRhID0gZVZpZXcuX3J1bnRpbWUuZGF0YVtkTmFtZV0gPyAoZVZpZXcuX3J1bnRpbWUuZGF0YVtkTmFtZV0udmFsdWVzLnZhbHVlKSA6IFtdO1xuXG4gICAgICAvLyAgIC8vIHdoZW4gdGhlIGZpbmFsIGRhdGEgc2hvdWxkIGJlIGZhY2V0dGVkIGJ1dCBhcmUgbm90IGZhY2V0dGVkIHlldDpcbiAgICAgIC8vICAgaWYgKGlzR3JvdXBpbmdNYXJrdHlwZXMuZmluYWwgJiYgIWNvbXB1dGVIYXNGYWNldChjaGFuZ2UuZmluYWwpKXtcbiAgICAgIC8vICAgICBpZiAoY2hhbmdlLm1hcmt0eXBlID09PSBmYWxzZSkge1xuICAgICAgLy8gICAgICAgZkRhdGEgPSBmYWNldERhdGEoX2ZEYXRhLCBjaGFuZ2UuaW5pdGlhbC5wYXJlbnQuZnJvbSA/IGNoYW5nZS5pbml0aWFsLnBhcmVudC5mcm9tLmZhY2V0IDogdW5kZWZpbmVkKTtcbiAgICAgIC8vICAgICB9IGVsc2Uge1xuICAgICAgLy8gICAgICAgZkRhdGEgPSBmYWNldERhdGEoX2ZEYXRhLCBjaGFuZ2UuZmluYWwucGFyZW50LmZyb20gPyBjaGFuZ2UuZmluYWwucGFyZW50LmZyb20uZmFjZXQgOiB1bmRlZmluZWQpO1xuICAgICAgLy8gICAgIH1cbiAgICAgIC8vICAgfSBlbHNlIGlmICghaXNHcm91cGluZ01hcmt0eXBlcy5maW5hbCAmJiBjb21wdXRlSGFzRmFjZXQoY2hhbmdlLmZpbmFsKSkge1xuICAgICAgLy8gICAgIGZEYXRhID0gdW5wYWNrRGF0YShfZkRhdGEpO1xuICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgLy8gICAgIGZEYXRhID0gX2ZEYXRhO1xuICAgICAgLy8gICB9XG4gICAgICAvLyB9XG5cbiAgICAgIFtcImluaXRpYWxcIiwgXCJmaW5hbFwiXS5mb3JFYWNoKHdoaWNoID0+IHtcbiAgICAgICAgaWYgKGNoYW5nZVt3aGljaF0gJiYgZmFjZXRzW3doaWNoXSkge1xuICAgICAgICAgIGNvbXB1dGVJZFt3aGljaF0gPSBjb21wdXRlSWRNYWtlcihmYWNldHNbd2hpY2hdLmdyb3VwYnkpO1xuICAgICAgICB9IGVsc2UgaWYgKGFnZ3JlZ2F0ZVt3aGljaF0pIHtcbiAgICAgICAgICBjb21wdXRlSWRbd2hpY2hdID0gY29tcHV0ZUlkTWFrZXIoYWdncmVnYXRlW3doaWNoXS5ncm91cGJ5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb21wdXRlSWRbd2hpY2hdID0gY29tcHV0ZUlkTWFrZXIoam9pbkZpZWxkcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG5cbiAgICAgIGlmIChpc0dyb3VwaW5nTWFya3R5cGVzLmluaXRpYWwgJiYgaXNHcm91cGluZ01hcmt0eXBlcy5maW5hbCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY2hhbmdlLmZpbmFsICYmXG4gICAgICAgICAgY2hhbmdlLmluaXRpYWwgJiZcbiAgICAgICAgICBmYWNldHMuZmluYWwgJiZcbiAgICAgICAgICBmYWNldHMuaW5pdGlhbCAmJlxuICAgICAgICAgIGZhY2V0cy5pbml0aWFsLmdyb3VwYnkuc29ydCgpLnRvU3RyaW5nKCkgPT09XG4gICAgICAgICAgICBmYWNldHMuZmluYWwuZ3JvdXBieS5zb3J0KCkudG9TdHJpbmcoKVxuICAgICAgICApIHtcbiAgICAgICAgICBjb21wdXRlSWQgPSBjb21wdXRlSWQuaW5pdGlhbDtcbiAgICAgICAgICBqb2luVGhlbShpRGF0YSwgZkRhdGEsIGNvbXB1dGVJZCwgc3RlcCk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgY2hhbmdlLmZpbmFsICYmXG4gICAgICAgICAgY2hhbmdlLmluaXRpYWwgJiZcbiAgICAgICAgICAhZmFjZXRzLmZpbmFsICYmXG4gICAgICAgICAgIWZhY2V0cy5pbml0aWFsXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbXB1dGVJZCA9IGNvbXB1dGVJZC5pbml0aWFsO1xuICAgICAgICAgIGpvaW5UaGVtKGlEYXRhLCBmRGF0YSwgY29tcHV0ZUlkLCBzdGVwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjaSA9IGFwcGVuZFBvc3RmaXgoY29tcHV0ZUlkLmluaXRpYWwsIFwiX2V4aXRcIik7XG4gICAgICAgICAgbGV0IGNmID0gYXBwZW5kUG9zdGZpeChjb21wdXRlSWQuZmluYWwsIFwiX2VudGVyXCIpO1xuXG4gICAgICAgICAgY29tcHV0ZUlkID0geyBpbml0aWFsOiBjaSwgZmluYWw6IGNmIH07XG4gICAgICAgICAgaURhdGEuZm9yRWFjaCgoaURhdHVtLCBpKSA9PiB7XG4gICAgICAgICAgICBzZXRKb2luSW5mbyhpRGF0dW0sIHN0ZXAsIHtcbiAgICAgICAgICAgICAgYW5pbVNldDogXCJleGl0XCIsXG4gICAgICAgICAgICAgIGpvaW5LZXk6IGNvbXB1dGVJZC5pbml0aWFsKGlEYXR1bSwgaSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGZEYXRhLmZvckVhY2goKGZEYXR1bSwgaSkgPT4ge1xuICAgICAgICAgICAgc2V0Sm9pbkluZm8oZkRhdHVtLCBzdGVwLCB7XG4gICAgICAgICAgICAgIGFuaW1TZXQ6IFwiZW50ZXJcIixcbiAgICAgICAgICAgICAgam9pbktleTogY29tcHV0ZUlkLmZpbmFsKGZEYXR1bSwgaSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFpc0dyb3VwaW5nTWFya3R5cGVzLmluaXRpYWwgJiYgIWlzR3JvdXBpbmdNYXJrdHlwZXMuZmluYWwpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGFnZ3JlZ2F0ZS5pbml0aWFsICYmXG4gICAgICAgICAgYWdncmVnYXRlLmZpbmFsICYmXG4gICAgICAgICAgYWdncmVnYXRlLmluaXRpYWwuZ3JvdXBieS5zb3J0KCkudG9TdHJpbmcoKSA9PT1cbiAgICAgICAgICAgIGFnZ3JlZ2F0ZS5maW5hbC5ncm91cGJ5LnNvcnQoKS50b1N0cmluZygpXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbXB1dGVJZCA9IGNvbXB1dGVJZC5pbml0aWFsO1xuICAgICAgICAgIGpvaW5UaGVtKGlEYXRhLCBmRGF0YSwgY29tcHV0ZUlkLCBzdGVwKTtcbiAgICAgICAgfSBlbHNlIGlmICghYWdncmVnYXRlLmluaXRpYWwgJiYgIWFnZ3JlZ2F0ZS5maW5hbCkge1xuICAgICAgICAgIGNvbXB1dGVJZCA9IGNvbXB1dGVJZC5pbml0aWFsO1xuICAgICAgICAgIGpvaW5UaGVtKGlEYXRhLCBmRGF0YSwgY29tcHV0ZUlkLCBzdGVwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQgY2kgPSBhcHBlbmRQb3N0Zml4KGNvbXB1dGVJZC5pbml0aWFsLCBcIl9leGl0XCIpO1xuICAgICAgICAgIGxldCBjZiA9IGFwcGVuZFBvc3RmaXgoY29tcHV0ZUlkLmZpbmFsLCBcIl9lbnRlclwiKTtcbiAgICAgICAgICBjb21wdXRlSWQgPSB7IGluaXRpYWw6IGNpLCBmaW5hbDogY2YgfTtcblxuICAgICAgICAgIGlEYXRhLmZvckVhY2goKGlEYXR1bSwgaSkgPT4ge1xuICAgICAgICAgICAgc2V0Sm9pbkluZm8oaURhdHVtLCBzdGVwLCB7XG4gICAgICAgICAgICAgIGFuaW1TZXQ6IFwiZXhpdFwiLFxuICAgICAgICAgICAgICBqb2luS2V5OiBjb21wdXRlSWQuaW5pdGlhbChpRGF0dW0sIGkpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGZEYXRhLmZvckVhY2goKGZEYXR1bSwgaSkgPT4ge1xuICAgICAgICAgICAgc2V0Sm9pbkluZm8oZkRhdHVtLCBzdGVwLCB7XG4gICAgICAgICAgICAgIGFuaW1TZXQ6IFwiZW50ZXJcIixcbiAgICAgICAgICAgICAgam9pbktleTogY29tcHV0ZUlkLmZpbmFsKGZEYXR1bSwgaSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKCFhZ2dyZWdhdGUuaW5pdGlhbCAmJiBhZ2dyZWdhdGUuZmluYWwpIHtcbiAgICAgICAgICAgIGF0dGFjaEFnZ0RhdGEoZkRhdGEsIGlEYXRhLCBjb21wdXRlSWQuZmluYWwsIGFnZ3JlZ2F0ZS5maW5hbCk7XG4gICAgICAgICAgICBwcmVGZXRjaEN1cnJEYXRhID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGFnZ3JlZ2F0ZS5pbml0aWFsICYmICFhZ2dyZWdhdGUuZmluYWwpIHtcbiAgICAgICAgICAgIGF0dGFjaEFnZ0RhdGEoaURhdGEsIGZEYXRhLCBjb21wdXRlSWQuaW5pdGlhbCwgYWdncmVnYXRlLmluaXRpYWwpO1xuICAgICAgICAgICAgcHJlRmV0Y2hDdXJyRGF0YSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBXaGVuIHRoZSBtYXJrdHlwZSBjaGFuZ2VzIGJldHdlZW4gYXJlYS9saW5lIHRvIHRoZSBvdGhlcnMuXG4gICAgICAgIGxldCBncm91cGVkRGF0YTsgbGV0IHVucGFja2VkRGF0YTtcbiAgICAgICAgaWYgKGlzR3JvdXBpbmdNYXJrdHlwZXMuaW5pdGlhbCkge1xuICAgICAgICAgIGNvbXB1dGVJZC5pbml0aWFsID0gY29tcHV0ZUlkTWFrZXIoXG4gICAgICAgICAgICBmYWNldHMuaW5pdGlhbCA/IGNoYW5nZS5pbml0aWFsLnBhcmVudC5mcm9tLmZhY2V0Lmdyb3VwYnkgOiBudWxsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb21wdXRlSWQuZmluYWwgPSBjb21wdXRlSWRNYWtlcihqb2luRmllbGRzIHx8IG51bGwpO1xuICAgICAgICAgIHVucGFja2VkRGF0YSA9IHVucGFja0RhdGEoaURhdGEpO1xuICAgICAgICAgIGpvaW5UaGVtKHVucGFja2VkRGF0YSwgZkRhdGEsIGNvbXB1dGVJZC5maW5hbCwgc3RlcCk7XG5cbiAgICAgICAgICBncm91cGVkRGF0YSA9IGZhY2V0RGF0YShcbiAgICAgICAgICAgIGZEYXRhLFxuICAgICAgICAgICAgY2hhbmdlLmluaXRpYWwucGFyZW50LmZyb21cbiAgICAgICAgICAgICAgPyBjaGFuZ2UuaW5pdGlhbC5wYXJlbnQuZnJvbS5mYWNldFxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgICk7XG4gICAgICAgICAgam9pblRoZW0oaURhdGEsIGdyb3VwZWREYXRhLCBjb21wdXRlSWQuaW5pdGlhbCwgc3RlcCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29tcHV0ZUlkLmluaXRpYWwgPSBjb21wdXRlSWRNYWtlcihqb2luRmllbGRzIHx8IG51bGwpO1xuICAgICAgICAgIGNvbXB1dGVJZC5maW5hbCA9IGNvbXB1dGVJZE1ha2VyKFxuICAgICAgICAgICAgZmFjZXRzLmZpbmFsID8gY2hhbmdlLmZpbmFsLnBhcmVudC5mcm9tLmZhY2V0Lmdyb3VwYnkgOiBudWxsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHVucGFja2VkRGF0YSA9IHVucGFja0RhdGEoZkRhdGEpO1xuICAgICAgICAgIGpvaW5UaGVtKGlEYXRhLCB1bnBhY2tlZERhdGEsIGNvbXB1dGVJZC5pbml0aWFsLCBzdGVwKTtcblxuICAgICAgICAgIGdyb3VwZWREYXRhID0gZmFjZXREYXRhKFxuICAgICAgICAgICAgaURhdGEsXG4gICAgICAgICAgICBjaGFuZ2UuZmluYWwucGFyZW50LmZyb21cbiAgICAgICAgICAgICAgPyBjaGFuZ2UuZmluYWwucGFyZW50LmZyb20uZmFjZXRcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICApO1xuICAgICAgICAgIGpvaW5UaGVtKGdyb3VwZWREYXRhLCBmRGF0YSwgY29tcHV0ZUlkLmZpbmFsLCBzdGVwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmV4dERhdGE6IGZEYXRhLFxuICAgICAgICAgIGN1cnJEYXRhOiBpRGF0YSxcbiAgICAgICAgICBjb21wdXRlRGF0dW1JZDogY29tcHV0ZUlkLFxuICAgICAgICAgIGdyb3VwZWREYXRhLFxuICAgICAgICAgIHVucGFja2VkRGF0YVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpRGF0YUFuaW1TZXRzID0gKGRvRXhpdCA/IFtdIDogW1wiZXhpdFwiXSkuY29uY2F0KFxuICAgICAgICBkb1VwZGF0ZSA/IFtdIDogW1widXBkYXRlXCJdXG4gICAgICApO1xuICAgICAgbGV0IGZEYXRhQW5pbVNldHMgPSAoZG9FbnRlciA/IFtcImVudGVyXCJdIDogW10pLmNvbmNhdChcbiAgICAgICAgZG9VcGRhdGUgPyBbXCJ1cGRhdGVcIl0gOiBbXVxuICAgICAgKTtcbiAgICAgIGxldCBuZXh0RGF0YSA9IGlEYXRhLmZpbHRlcihcbiAgICAgICAgZCA9PiBpRGF0YUFuaW1TZXRzLmluZGV4T2YoZ2V0Sm9pbkluZm8oZCwgc3RlcCwgXCJhbmltU2V0XCIpKSA+PSAwXG4gICAgICApO1xuICAgICAgaWYgKCFkb0V4aXQpIHtcbiAgICAgICAgLy8gd2UgaW5jbHVkZWQgdGhlIGV4aXQgZGF0YSBhcyB3ZSBkbyBub3QgbWFrZSB0aGVtIGV4aXQuXG4gICAgICAgIG5leHREYXRhLmZvckVhY2goKGRhdHVtKSA9PiB7XG4gICAgICAgICAgc2V0Sm9pbkluZm8oZGF0dW0sIHN0ZXAsIHsgYW5pbVNldDogXCJ1cGRhdGVcIiB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIG5leHREYXRhID0gbmV4dERhdGEuY29uY2F0KFxuICAgICAgICBmRGF0YS5maWx0ZXIoXG4gICAgICAgICAgZCA9PiBmRGF0YUFuaW1TZXRzLmluZGV4T2YoZ2V0Sm9pbkluZm8oZCwgc3RlcCwgXCJhbmltU2V0XCIpKSA+PSAwXG4gICAgICAgIClcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5leHREYXRhLFxuICAgICAgICBjdXJyRGF0YTogaURhdGEsXG4gICAgICAgIGNvbXB1dGVEYXR1bUlkOiBjb21wdXRlSWQsXG4gICAgICAgIHByZUZldGNoQ3VyckRhdGFcbiAgICAgIH07XG4gICAgfVxuICAgIC8vIFdoZW4gdGhlcmUgaXMgbm8gZGF0YSBjaGFuZ2VcbiAgICBjb21wdXRlSWQgPSBjb21wdXRlSWRNYWtlcihudWxsKTtcbiAgICBjb25zdCBzYW1lRGF0YSA9IGlEYXRhLm1hcCgoZCwgaSkgPT4ge1xuICAgICAgc2V0Sm9pbkluZm8oZCwgc3RlcCwgeyBhbmltU2V0OiBcInVwZGF0ZVwiLCBqb2luS2V5OiBjb21wdXRlSWQoZCxpKSB9KTtcbiAgICAgIHJldHVybiBkO1xuICAgIH0pO1xuXG4gICAgaWYgKGlzR3JvdXBpbmdNYXJrdHlwZXMuaW5pdGlhbCAhPT0gaXNHcm91cGluZ01hcmt0eXBlcy5maW5hbCkge1xuICAgICAgLy8gV2hlbiB0aGUgbWFya3R5cGUgY2hhbmdlcyBiZXR3ZWVuIGFyZWEvbGluZSB0byB0aGUgb3RoZXJzLlxuICAgICAgbGV0IGdyb3VwZWREYXRhOyBsZXQgdW5wYWNrZWREYXRhO1xuICAgICAgaWYgKGlzR3JvdXBpbmdNYXJrdHlwZXMuaW5pdGlhbCkge1xuICAgICAgICB1bnBhY2tlZERhdGEgPSB1bnBhY2tEYXRhKGlEYXRhKTtcbiAgICAgICAgdW5wYWNrZWREYXRhLm1hcCgoZCwgaSkgPT4ge1xuICAgICAgICAgIHNldEpvaW5JbmZvKGQsIHN0ZXAsIHsgYW5pbVNldDogXCJ1cGRhdGVcIiwgam9pbktleTogY29tcHV0ZUlkKGQsaSkgfSk7XG4gICAgICAgICAgcmV0dXJuIGQ7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5leHREYXRhOiB1bnBhY2tlZERhdGEsIGN1cnJEYXRhOiBpRGF0YSxcbiAgICAgICAgICBjb21wdXRlRGF0dW1JZDogY29tcHV0ZUlkLFxuICAgICAgICAgIGdyb3VwZWREYXRhOiBpRGF0YSxcbiAgICAgICAgICB1bnBhY2tlZERhdGE6IHVucGFja2VkRGF0YVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgZ3JvdXBlZERhdGEgPSBmYWNldERhdGEoaURhdGEsIGNoYW5nZS5maW5hbC5wYXJlbnQuZnJvbSA/IGNoYW5nZS5maW5hbC5wYXJlbnQuZnJvbS5mYWNldCA6IHVuZGVmaW5lZCk7XG4gICAgICBncm91cGVkRGF0YS5tYXAoKGQsIGkpID0+IHtcbiAgICAgICAgc2V0Sm9pbkluZm8oZCwgc3RlcCwgeyBhbmltU2V0OiBcInVwZGF0ZVwiLCBqb2luS2V5OiBjb21wdXRlSWQoZCxpKSB9KTtcbiAgICAgICAgcmV0dXJuIGQ7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5leHREYXRhOiBncm91cGVkRGF0YSwgY3VyckRhdGE6IGlEYXRhLFxuICAgICAgICBjb21wdXRlRGF0dW1JZDogY29tcHV0ZUlkLFxuICAgICAgICBncm91cGVkRGF0YSxcbiAgICAgICAgdW5wYWNrZWREYXRhOiBpRGF0YVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbmV4dERhdGE6IHNhbWVEYXRhLFxuICAgICAgY3VyckRhdGE6IHNhbWVEYXRhLFxuICAgICAgY29tcHV0ZURhdHVtSWQ6IGNvbXB1dGVJZFxuICAgIH07XG4gIH1cbiAgaWYgKGNoYW5nZS5jb21wVHlwZSA9PT0gXCJ2aWV3XCIpIHtcbiAgICByZXR1cm4geyBuZXh0RGF0YTogZVZpZXcuX3J1bnRpbWUuZGF0YS5yb290LnZhbHVlcy52YWx1ZVswXSB9O1xuICB9XG4gIHJldHVybiBpRGF0YTtcbn1cbmZ1bmN0aW9uIGpvaW5UaGVtKGlEYXRhLCBmRGF0YSwgY29tcHV0ZUlkLCBzdGVwKSB7XG4gIGNvbnN0IHVwZGF0ZURhdGEgPSB7IGluaXRpYWw6IFtdLCBmaW5hbDogW10gfTtcbiAgY29uc3QgZW50ZXJEYXRhID0gW107XG4gIGNvbnN0IGV4aXREYXRhID0gW107XG5cbiAgY29uc3QgdGFrZW5DaGVja2VyID0gbmV3IEFycmF5KGZEYXRhLmxlbmd0aCk7XG4gIHRha2VuQ2hlY2tlci5maWxsKGZhbHNlKTtcbiAgaURhdGEuZm9yRWFjaCgoaURhdHVtLCBpKSA9PiB7XG4gICAgY29uc3QgaWQgPSBjb21wdXRlSWQoaURhdHVtLCBpKTtcbiAgICBjb25zdCBmb3VuZEluZGV4ID0gZkRhdGEuZmluZEluZGV4KFxuICAgICAgKGZEYXR1bSwgaikgPT4gY29tcHV0ZUlkKGZEYXR1bSwgaikgPT09IGlkXG4gICAgKTtcbiAgICBjb25zdCBmb3VuZCA9IGZvdW5kSW5kZXggPj0gMCA/IGZEYXRhW2ZvdW5kSW5kZXhdIDogbnVsbDtcblxuICAgIGlmIChmb3VuZCkge1xuICAgICAgY29uc3QgaW5mbyA9IHsgYW5pbVNldDogXCJ1cGRhdGVcIiwgam9pbktleTogaWQgfTtcbiAgICAgIHNldEpvaW5JbmZvKGZvdW5kLCBzdGVwLCBpbmZvKTtcbiAgICAgIHNldEpvaW5JbmZvKGlEYXR1bSwgc3RlcCwgaW5mbyk7XG4gICAgICBjb25zdCBleHRlbmRlZElEYXR1bSA9IHsgLi4uZm91bmQuZGF0dW0sIC4uLmlEYXR1bS5kYXR1bSB9O1xuICAgICAgY29uc3QgZXh0ZW5kZWRGRGF0dW0gPSB7IC4uLmlEYXR1bS5kYXR1bSwgLi4uZm91bmQuZGF0dW0gfTtcbiAgICAgIGlEYXR1bS5kYXR1bSA9IGV4dGVuZGVkSURhdHVtO1xuICAgICAgZm91bmQuZGF0dW0gPSBleHRlbmRlZEZEYXR1bTtcbiAgICAgIHVwZGF0ZURhdGEuZmluYWwucHVzaChmb3VuZCk7XG4gICAgICB1cGRhdGVEYXRhLmluaXRpYWwucHVzaChpRGF0dW0pO1xuXG4gICAgICB0YWtlbkNoZWNrZXJbZm91bmRJbmRleF0gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRKb2luSW5mbyhpRGF0dW0sIHN0ZXAsIHsgYW5pbVNldDogXCJleGl0XCIsIGpvaW5LZXk6IGlkIH0pO1xuICAgICAgZXhpdERhdGEucHVzaChpRGF0dW0pO1xuICAgIH1cbiAgfSk7XG4gIHRha2VuQ2hlY2tlci5mb3JFYWNoKCh0YWtlbiwgaSkgPT4ge1xuICAgIGlmICghdGFrZW4pIHtcbiAgICAgIHNldEpvaW5JbmZvKGZEYXRhW2ldLCBzdGVwLCB7XG4gICAgICAgIGFuaW1TZXQ6IFwiZW50ZXJcIixcbiAgICAgICAgam9pbktleTogY29tcHV0ZUlkKGZEYXRhW2ldLCBpKVxuICAgICAgfSk7XG4gICAgICBlbnRlckRhdGEucHVzaChmRGF0YVtpXSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIGVudGVyOiBlbnRlckRhdGEsXG4gICAgdXBkYXRlOiB1cGRhdGVEYXRhLFxuICAgIGV4aXQ6IGV4aXREYXRhXG4gIH07XG59XG5mdW5jdGlvbiBhdHRhY2hBZ2dEYXRhKGFnZ0RhdGEsIHJhd0RhdGEsIGFnZ0lkLCBhZ2cpIHtcbiAgcmF3RGF0YS5mb3JFYWNoKChyYXdEYXR1bSwgaSkgPT4ge1xuICAgIGFnZ0RhdGEuZm9yRWFjaCgoYWdnRGF0dW0sIGopID0+IHtcbiAgICAgIGlmIChhZ2dJZChyYXdEYXR1bSwgaSkgPT09IGFnZ0lkKGFnZ0RhdHVtLCBqKSkge1xuICAgICAgICBhZ2cuZmllbGRzLmZvckVhY2goKGYsIGZfaSkgPT4ge1xuICAgICAgICAgIHJhd0RhdHVtLmRhdHVtW2FnZy5hc1tmX2ldXSA9IGFnZ0RhdHVtLmRhdHVtW2FnZy5hc1tmX2ldXTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRKb2luSW5mbyhkLCBzdGVwLCBwcm9wKSB7XG4gIHJldHVybiBkLl9fZ2VtaW5pX19bc3RlcC5zdGVwSWRdXG4gICAgPyBkLl9fZ2VtaW5pX19bc3RlcC5zdGVwSWRdW3Byb3BdXG4gICAgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGFwcGVuZFBvc3RmaXgoY29tcHV0ZUlkLCBwb3N0Rml4KSB7XG4gIHJldHVybiAoZCwgaSkgPT4ge1xuICAgIHJldHVybiBjb21wdXRlSWQoZCwgaSkgKyBwb3N0Rml4O1xuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRBZ2dyZWdhdGUoY2hhbmdlLCByYXdJbmZvKSB7XG4gIGNvbnN0IGFnZ3JlZ2F0ZSA9IHt9O1xuICBpZiAoIWNoYW5nZS5pbml0aWFsIHx8ICFjaGFuZ2UuZmluYWwpIHtcbiAgICByZXR1cm4gYWdncmVnYXRlO1xuICB9XG4gIGNvbnN0IHNTcGVjID0gcmF3SW5mby5zVmlzLnNwZWM7XG4gIGNvbnN0IGVTcGVjID0gcmF3SW5mby5lVmlzLnNwZWM7XG5cbiAgY29uc3QgZGF0YU5hbWUgPSBjb21wU3BlYyA9PiB7XG4gICAgcmV0dXJuIGNvbXB1dGVIYXNGYWNldChjb21wU3BlYylcbiAgICAgID8gY29tcFNwZWMucGFyZW50LmZyb20uZmFjZXQuZGF0YVxuICAgICAgOiBjb21wU3BlYy5mcm9tLmRhdGE7XG4gIH07XG5cbiAgY29uc3QgZGF0YVNvdXJjZV9mID0gZVNwZWMuZGF0YS5maW5kKFxuICAgIGRzZXQgPT4gZHNldC5uYW1lID09PSBkYXRhTmFtZShjaGFuZ2UuZmluYWwpXG4gICk7XG4gIGlmIChkYXRhU291cmNlX2YudHJhbnNmb3JtKSB7XG4gICAgYWdncmVnYXRlLmZpbmFsID0gZGF0YVNvdXJjZV9mLnRyYW5zZm9ybS5maW5kKFxuICAgICAgdHJzZm0gPT4gdHJzZm0udHlwZSA9PT0gXCJhZ2dyZWdhdGVcIlxuICAgICk7XG4gIH1cbiAgY29uc3QgZGF0YVNvdXJjZV9pID0gc1NwZWMuZGF0YS5maW5kKFxuICAgIGRzZXQgPT4gZHNldC5uYW1lID09PSBkYXRhTmFtZShjaGFuZ2UuaW5pdGlhbClcbiAgKTtcbiAgaWYgKGRhdGFTb3VyY2VfaS50cmFuc2Zvcm0pIHtcbiAgICBhZ2dyZWdhdGUuaW5pdGlhbCA9IGRhdGFTb3VyY2VfaS50cmFuc2Zvcm0uZmluZChcbiAgICAgIHRyc2ZtID0+IHRyc2ZtLnR5cGUgPT09IFwiYWdncmVnYXRlXCJcbiAgICApO1xuICB9XG4gIHJldHVybiBhZ2dyZWdhdGU7XG59XG5cbmZ1bmN0aW9uIHNldEpvaW5JbmZvKGRhdHVtLCBzdGVwLCBpbmZvKSB7XG4gIGRhdHVtLl9fZ2VtaW5pX18gPSBkYXR1bS5fX2dlbWluaV9fIHx8IHt9O1xuICBkYXR1bS5fX2dlbWluaV9fW3N0ZXAuc3RlcElkXSA9IGRhdHVtLl9fZ2VtaW5pX19bc3RlcC5zdGVwSWRdIHx8IHt9O1xuICBPYmplY3QuYXNzaWduKGRhdHVtLl9fZ2VtaW5pX19bc3RlcC5zdGVwSWRdLCBpbmZvKTtcbn1cblxuZXhwb3J0IHsgam9pbkRhdGEsIGluaXRpYWxEYXRhLCBnZXRBZ2dyZWdhdGUgfTtcbiIsImltcG9ydCB7IGNvcHkgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC91dGlsXCI7XG5pbXBvcnQgKiBhcyB2ZWdhIGZyb20gXCJ2ZWdhXCI7XG5mdW5jdGlvbiBkYXRhUHJlc2VydmVkU2NhbGUoc1NwZWMsIGVTcGVjLCBzY05hbWUpIHtcbiAgY29uc3QgdGVtcFNwZWMgPSBjb3B5KGVTcGVjKTtcbiAgY29uc3Qgc2NhbGVTcGVjID0gdGVtcFNwZWMuc2NhbGVzLmZpbmQoc2MgPT4gc2MubmFtZSA9PT0gc2NOYW1lKTtcbiAgaWYgKHNjYWxlU3BlYy5kb21haW4uZGF0YSkge1xuICAgIGNvbnN0IGluZGV4ID0gdGVtcFNwZWMuZGF0YS5maW5kSW5kZXgoXG4gICAgICBkID0+IGQubmFtZSA9PT0gc2NhbGVTcGVjLmRvbWFpbi5kYXRhXG4gICAgKTtcbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdGVtcFNwZWMuZGF0YS5zcGxpY2UoXG4gICAgICAgIGluZGV4LFxuICAgICAgICAxLFxuICAgICAgICBzU3BlYy5kYXRhLmZpbmQoZCA9PiBkLm5hbWUgPT09IHNjYWxlU3BlYy5kb21haW4uZGF0YSlcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHRlbXBWaWV3ID0gbmV3IHZlZ2EuVmlldyh2ZWdhLnBhcnNlKHRlbXBTcGVjKSwge1xuICAgIHJlbmRlcmVyOiBcIm5vbmVcIlxuICB9KS5ydW4oKTtcbiAgcmV0dXJuIHRlbXBWaWV3Ll9ydW50aW1lLnNjYWxlc1tzY05hbWVdLnZhbHVlO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlS2VwdEVuY29kZShtYW51YWxFbmNvZGUsIHJlZmVyZW5jZUVuY29kZSwgc2V0KSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhtYW51YWxFbmNvZGUgJiYgbWFudWFsRW5jb2RlW3NldF0gPyBtYW51YWxFbmNvZGVbc2V0XSA6IHt9KVxuICAgIC5maWx0ZXIoYXR0ciA9PiBtYW51YWxFbmNvZGVbc2V0XVthdHRyXSA9PT0gZmFsc2UpXG4gICAgLnJlZHVjZSgoa2VwdEVuY29kZSwgYXR0cikgPT4ge1xuICAgICAga2VwdEVuY29kZVthdHRyXSA9IHJlZmVyZW5jZUVuY29kZVtzZXRdW2F0dHJdO1xuICAgICAgcmV0dXJuIGtlcHRFbmNvZGU7XG4gICAgfSwge30pO1xufVxuXG5cbmZ1bmN0aW9uIHJlcGxhY2VQb3NpdGlvbkF0dHJzKHRhcmdldE1hcmt0eXBlLCB0YXJnZXRFbmNvZGUsIHJlZmVyZW5jZUVuY29kZSkge1xuICBjb25zdCBlbmNvZGUgPSBPYmplY3QuYXNzaWduKHt9LCB0YXJnZXRFbmNvZGUpO1xuICBjb25zdCBQT1NJVElPTl9BVFRSUyA9IFtcInhcIiwgXCJ4MlwiLCBcInhjXCIsIFwid2lkdGhcIiwgXCJ5XCIsIFwieTJcIiwgXCJ5Y1wiLCBcImhlaWdodFwiXTtcbiAgY29uc3QgcmVwbGFjZVJ1bGVzID0ge1xuICAgIHJlY3Q6IFtcbiAgICAgIHtyZXBsYWNlQnk6IFtcInhcIiwgXCJ4MlwiXSwgfSxcbiAgICAgIHtyZXBsYWNlQnk6IFtcInhcIiwgXCJ3aWR0aFwiXSwgfSxcbiAgICAgIHtyZXBsYWNlQnk6IFtcInhjXCIsIFwid2lkdGhcIl0sIHJlbW92ZTogW1wieFwiXSB9LFxuICAgICAge3JlcGxhY2VCeTogW1wieVwiLCBcInkyXCJdLCB9LFxuICAgICAge3JlcGxhY2VCeTogW1wieVwiLCBcImhlaWdodFwiXSwgfSxcbiAgICAgIHtyZXBsYWNlQnk6IFtcInljXCIsIFwiaGVpZ2h0XCJdLCByZW1vdmU6IFtcInlcIl0gfVxuICAgIF0sXG4gICAgYXJlYTogW1xuICAgICAge3JlcGxhY2VCeTogW1wieFwiLCBcIngyXCIsIFwieVwiXSwgcmVtb3ZlOiBcIipcIiB9LFxuICAgICAge3JlcGxhY2VCeTogW1wieFwiLCBcIndpZHRoXCIsIFwieVwiXSwgcmVtb3ZlOiBcIipcIiB9LFxuICAgICAge3JlcGxhY2VCeTogW1wieGNcIiwgXCJ3aWR0aFwiLCBcInlcIl0sIHJlbW92ZTogXCIqXCIgfSxcbiAgICAgIHtyZXBsYWNlQnk6IFtcInlcIiwgXCJ5MlwiLCBcInhcIl0sIHJlbW92ZTogXCIqXCIgfSxcbiAgICAgIHtyZXBsYWNlQnk6IFtcInlcIiwgXCJoZWlnaHRcIiwgXCJ4XCJdLCByZW1vdmU6IFwiKlwiIH0sXG4gICAgICB7cmVwbGFjZUJ5OiBbXCJ5Y1wiLCBcImhlaWdodFwiLCBcInhcIl0sIHJlbW92ZTogXCIqXCIgfSxcbiAgICAgIHtyZXBsYWNlQnk6IFtcInhcIiwgXCJ4MlwiLCBcInljXCJdLCByZW1vdmU6IFwiKlwiIH0sXG4gICAgICB7cmVwbGFjZUJ5OiBbXCJ4XCIsIFwid2lkdGhcIiwgXCJ5Y1wiXSwgcmVtb3ZlOiBcIipcIiB9LFxuICAgICAge3JlcGxhY2VCeTogW1wieGNcIiwgXCJ3aWR0aFwiLCBcInljXCJdLCByZW1vdmU6IFwiKlwiIH0sXG4gICAgICB7cmVwbGFjZUJ5OiBbXCJ5XCIsIFwieTJcIiwgXCJ4Y1wiXSwgcmVtb3ZlOiBcIipcIiB9LFxuICAgICAge3JlcGxhY2VCeTogW1wieVwiLCBcImhlaWdodFwiLCBcInhjXCJdLCByZW1vdmU6IFwiKlwiIH0sXG4gICAgICB7cmVwbGFjZUJ5OiBbXCJ5Y1wiLCBcImhlaWdodFwiLCBcInhjXCJdLCByZW1vdmU6IFwiKlwiIH1cbiAgICBdLFxuICAgIGRlZmF1bHQ6IFtcbiAgICAgIHtyZXBsYWNlQnk6IFtcInhcIl0gfSxcbiAgICAgIHtyZXBsYWNlQnk6IFtcInhjXCJdLCByZW1vdmU6IFtcInhcIl0gfSxcbiAgICAgIHtyZXBsYWNlQnk6IFtcInlcIl0gfSxcbiAgICAgIHtyZXBsYWNlQnk6IFtcInljXCJdLCByZW1vdmU6IFtcInlcIl0gfVxuICAgIF1cbiAgfTtcbiAgbGV0IHJ1bGVzID0gcmVwbGFjZVJ1bGVzW3RhcmdldE1hcmt0eXBlXSB8fCByZXBsYWNlUnVsZXMuZGVmYXVsdDtcblxuICBydWxlcy5mb3JFYWNoKHJ1bGUgPT4ge1xuICAgIGNvbnN0IGhhc0FsbCA9IHJ1bGUucmVwbGFjZUJ5LnJlZHVjZSgoaGFzQWxsLCBhdHRyKSA9PiB7XG4gICAgICByZXR1cm4gaGFzQWxsICYmIHJlZmVyZW5jZUVuY29kZVthdHRyXTtcbiAgICB9LCB0cnVlKTtcbiAgICBpZiAoaGFzQWxsKSB7XG4gICAgICBydWxlLnJlcGxhY2VCeS5mb3JFYWNoKGF0dHIgPT4ge1xuICAgICAgICBlbmNvZGVbYXR0cl0gPSByZWZlcmVuY2VFbmNvZGVbYXR0cl07XG4gICAgICB9KTtcbiAgICAgIGxldCByZW1vdmVkQXR0cnMgPSBydWxlLnJlbW92ZSB8fCBbXTtcbiAgICAgIGlmIChydWxlLnJlbW92ZSA9PT0gXCIqXCIpIHtcbiAgICAgICAgcmVtb3ZlZEF0dHJzID0gUE9TSVRJT05fQVRUUlMuZmlsdGVyKGF0dHIgPT4gcnVsZS5yZXBsYWNlQnkuaW5kZXhPZihhdHRyKSA8IDApO1xuICAgICAgfVxuICAgICAgcmVtb3ZlZEF0dHJzLmZvckVhY2goYXR0ciA9PiB7XG4gICAgICAgIGRlbGV0ZSBlbmNvZGVbYXR0cl07XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG5cbiAgcmV0dXJuIGVuY29kZTtcbn1cblxuZXhwb3J0IHsgZGF0YVByZXNlcnZlZFNjYWxlLCBjb21wdXRlS2VwdEVuY29kZSwgcmVwbGFjZVBvc2l0aW9uQXR0cnMgfTsiLCJpbXBvcnQgeyBkYXRhUHJlc2VydmVkU2NhbGUsIGNvbXB1dGVLZXB0RW5jb2RlLCByZXBsYWNlUG9zaXRpb25BdHRycyB9IGZyb20gXCIuL3V0aWxcIjtcbmltcG9ydCB7IGNvcHkyLCBjb3B5LCBnZXQgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC91dGlsXCI7XG5pbXBvcnQgeyBERUZBVUxUX0VOQ09ERSwgREVGQVVMVF9TVFlMRSB9IGZyb20gXCIuLi8uLi8uLi9kZWZhdWx0XCI7XG5pbXBvcnQgeyBjb21wdXRlSGFzRmFjZXQgfSBmcm9tIFwiLi4vdXRpbFwiO1xuaW1wb3J0IHsgZ2V0QWdncmVnYXRlIH0gZnJvbSBcIi4uL2RhdGFKb2luXCI7XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGUocmF3SW5mbywgc3RlcCwgbGFzdFN0YXRlKSB7XG4gIGNvbnN0IGVWaWV3ID0gcmF3SW5mby5lVmlzLnZpZXc7XG4gIGNvbnN0IHsgY2hhbmdlIH0gPSBzdGVwO1xuICBjb25zdCBpc0FkZCA9ICFjaGFuZ2UuaW5pdGlhbCAmJiAhIWNoYW5nZS5maW5hbDtcbiAgY29uc3QgaXNSZW1vdmUgPSAhIWNoYW5nZS5pbml0aWFsICYmICFjaGFuZ2UuZmluYWw7XG5cbiAgY29uc3QgbWFudWFsRW5jb2RlID0gY2hhbmdlLmVuY29kZTtcbiAgbGV0IGRvRW50ZXIgPSAhaXNSZW1vdmUgJiYgKGlzQWRkIHx8IGNoYW5nZS5kYXRhICE9PSBmYWxzZSk7XG4gIGxldCBkb0V4aXQgPSAhaXNBZGQgJiYgKGlzUmVtb3ZlIHx8IGNoYW5nZS5kYXRhICE9PSBmYWxzZSk7XG5cbiAgaWYgKGNoYW5nZS5kYXRhKSB7XG4gICAgZG9FbnRlciA9IGNoYW5nZS5kYXRhLmVudGVyID09PSBmYWxzZSA/IGZhbHNlIDogZG9FbnRlcjtcbiAgICBkb0V4aXQgPSBjaGFuZ2UuZGF0YS5leGl0ID09PSBmYWxzZSA/IGZhbHNlIDogZG9FeGl0O1xuICB9XG5cbiAgaWYgKFxuICAgICFpc0FkZCAmJlxuICAgICFpc1JlbW92ZSAmJlxuICAgIGNoYW5nZS5pbml0aWFsLmZyb20uZGF0YSAhPT0gY2hhbmdlLmZpbmFsLmZyb20uZGF0YVxuICApIHtcbiAgICBpZiAoIWNvbXB1dGVIYXNGYWNldChjaGFuZ2UuZmluYWwpICYmICFjb21wdXRlSGFzRmFjZXQoY2hhbmdlLmluaXRpYWwpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgRGF0YSBzb3VyY2Ugb2YgdGhpcyBtYXJrICgke2NoYW5nZS5jb21wTmFtZX0pIGhhcyBjaGFuZ2VkIHVuZXhwZWN0ZWRseSFgXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGFnZ3JlZ2F0ZXMgPSB7XG4gICAgaW5pdGlhbDogbGFzdFN0YXRlLmFnZ3JlZ2F0ZSxcbiAgICBmaW5hbDogbGFzdFN0YXRlLmFnZ3JlZ2F0ZVxuICB9O1xuXG4gIGlmIChjaGFuZ2UuZGF0YSkge1xuICAgIC8vIGFnZ3JlZ2F0ZXMuZG9uZSA9IHRydWU7XG4gICAgYWdncmVnYXRlcy5maW5hbCA9IGdldEFnZ3JlZ2F0ZShjaGFuZ2UsIHJhd0luZm8pLmZpbmFsO1xuICB9XG5cbiAgY29uc3QgbWFya3R5cGVzID0ge1xuICAgIGluaXRpYWw6IGxhc3RTdGF0ZS5tYXJrdHlwZSwgLy8gY2hhbmdlLmluaXRpYWwgPyBjaGFuZ2UuaW5pdGlhbC50eXBlIDogdW5kZWZpbmVkLFxuICAgIGZpbmFsOiBjaGFuZ2UuZmluYWwgPyBjaGFuZ2UuZmluYWwudHlwZSA6IHVuZGVmaW5lZFxuICB9O1xuXG4gIGlmIChcbiAgICBtYXJrdHlwZXMuaW5pdGlhbCAmJlxuICAgIG1hcmt0eXBlcy5maW5hbCAmJlxuICAgIG1hcmt0eXBlcy5pbml0aWFsICE9PSBtYXJrdHlwZXMuZmluYWxcbiAgKSB7XG4gICAgY29uc29sZS5sb2coXCJtYXJrIHRyYW5zZm9ybSBjaGFuZ2UhXCIpO1xuICAgIGlmIChjaGFuZ2UubWFya3R5cGUgPT09IGZhbHNlKSB7XG4gICAgICBtYXJrdHlwZXMuZmluYWwgPSBtYXJrdHlwZXMuaW5pdGlhbDtcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYXNGYWNldCA9IHtcbiAgICBpbml0aWFsOiBsYXN0U3RhdGUuaGFzRmFjZXQsXG4gICAgZmluYWw6IGxhc3RTdGF0ZS5oYXNGYWNldFxuICB9O1xuICBpZiAoKGNoYW5nZS5kYXRhIHx8IGlzQWRkIHx8IGlzUmVtb3ZlKSAmJiBjaGFuZ2UubWFya3R5cGUgIT09IGZhbHNlKSB7XG4gICAgaGFzRmFjZXQuZmluYWwgPSBjb21wdXRlSGFzRmFjZXQoY2hhbmdlLmZpbmFsKTtcbiAgfVxuXG4gIGNvbnN0IHNjYWxlcyA9IHtcbiAgICBpbml0aWFsOiBsYXN0U3RhdGUuc2NhbGUsXG4gICAgZmluYWw6IGNvcHkyKGxhc3RTdGF0ZS5zY2FsZSlcbiAgfTtcbiAgY29uc3QgZW5jb2RlcyA9IHtcbiAgICBpbml0aWFsOiBPYmplY3QuYXNzaWduKHsgdXBkYXRlOiB7fSB9LCBjb3B5KGxhc3RTdGF0ZS5lbmNvZGUpKSxcbiAgICBmaW5hbDogT2JqZWN0LmFzc2lnbih7IHVwZGF0ZToge30gfSwgY29weShsYXN0U3RhdGUuZW5jb2RlKSlcbiAgfTtcbiAgY29uc3Qgc2lnbmFscyA9IHtcbiAgICBpbml0aWFsOiBsYXN0U3RhdGUuc2lnbmFsXG4gIH07XG4gIGNvbnN0IHNpZ25hbHNGaW5hbCA9IFtcIndpZHRoXCIsIFwiaGVpZ2h0XCIsIFwicGFkZGluZ1wiXS5yZWR1Y2UoKGFjYywgc2dOYW1lKSA9PiB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY2hhbmdlLnNpZ25hbCkpIHtcbiAgICAgIGlmIChjaGFuZ2Uuc2lnbmFsLmluZGV4T2Yoc2dOYW1lKSA+PSAwKSB7XG4gICAgICAgIGFjY1tzZ05hbWVdID0gZVZpZXcuc2lnbmFsKHNnTmFtZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlLnNpZ25hbCA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuICAgIGFjY1tzZ05hbWVdID0gZVZpZXcuc2lnbmFsKHNnTmFtZSk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuICBzaWduYWxzLmZpbmFsID0gT2JqZWN0LmFzc2lnbih7fSwgc2lnbmFscy5pbml0aWFsLCBzaWduYWxzRmluYWwpO1xuXG4gIGlmIChjaGFuZ2Uuc2NhbGUgIT09IGZhbHNlKSB7XG4gICAgbGV0IGZpbmFsU2NhbGVOYW1lcyA9IFtdO1xuICAgIGlmIChjaGFuZ2Uuc2NhbGUgPT09IHRydWUgfHwgaXNBZGQpIHtcbiAgICAgIGZpbmFsU2NhbGVOYW1lcyA9IE9iamVjdC5rZXlzKGVWaWV3Ll9ydW50aW1lLnNjYWxlcyk7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGNoYW5nZS5zY2FsZSkpIHtcbiAgICAgIGZpbmFsU2NhbGVOYW1lcyA9IGNoYW5nZS5zY2FsZTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjaGFuZ2Uuc2NhbGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGZpbmFsU2NhbGVOYW1lcyA9IE9iamVjdC5rZXlzKGNoYW5nZS5zY2FsZSk7XG4gICAgfVxuICAgIGZpbmFsU2NhbGVOYW1lcy5mb3JFYWNoKHNjTmFtZSA9PiB7XG4gICAgICBpZiAoY2hhbmdlLnNjYWxlW3NjTmFtZV0gJiYgY2hhbmdlLnNjYWxlW3NjTmFtZV0uZGF0YSA9PT0gZmFsc2UpIHtcbiAgICAgICAgc2NhbGVzLmZpbmFsW3NjTmFtZV0gPSBkYXRhUHJlc2VydmVkU2NhbGUoXG4gICAgICAgICAgcmF3SW5mby5zVmlzLnNwZWMsXG4gICAgICAgICAgcmF3SW5mby5lVmlzLnNwZWMsXG4gICAgICAgICAgc2NOYW1lXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzY2FsZXMuZmluYWxbc2NOYW1lXSA9IGVWaWV3Ll9ydW50aW1lLnNjYWxlc1tzY05hbWVdXG4gICAgICAgICAgPyBlVmlldy5fcnVudGltZS5zY2FsZXNbc2NOYW1lXS52YWx1ZVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjaGFubmVsID0gT2JqZWN0LmtleXMoZW5jb2Rlcy5maW5hbC51cGRhdGUpLmZpbmQoXG4gICAgICAgIGtleSA9PiBrZXkuc2NhbGUgPT09IHNjTmFtZVxuICAgICAgKTtcbiAgICAgIGVuY29kZXMuZmluYWwudXBkYXRlW2NoYW5uZWxdID0gY2hhbmdlLmZpbmFsXG4gICAgICAgID8gY29weShjaGFuZ2UuZmluYWwuZW5jb2RlLnVwZGF0ZVtjaGFubmVsXSlcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfSk7XG4gIH1cblxuICBpZiAobWFudWFsRW5jb2RlID09PSBmYWxzZSkge1xuICAgIHRocm93IEVycm9yKFwiSW50ZXJwb2xhdGluZyBkYXRhIHJlcXVpcmVzIHRvIGludGVycG9sYXRlIGVuY29kZS5cIik7XG4gIH1cblxuICBjb25zdCBzdHlsZUVuY29kZXMgPSB7XG4gICAgaW5pdGlhbDogY29weShsYXN0U3RhdGUuc3R5bGVFbmNvZGUpLFxuICAgIGZpbmFsOiBjb3B5KGxhc3RTdGF0ZS5zdHlsZUVuY29kZSlcbiAgfTtcbiAgaWYgKGNoYW5nZS5tYXJrdHlwZSkge1xuICAgIHN0eWxlRW5jb2Rlcy5maW5hbCA9IGNoYW5nZS5maW5hbCAmJiBjaGFuZ2UuZmluYWwuc3R5bGVcbiAgICAgID8gREVGQVVMVF9TVFlMRVtjaGFuZ2UuZmluYWwuc3R5bGVdIHx8IHt9XG4gICAgICA6IHt9O1xuICB9XG5cbiAgY29uc3QgbWFudWFsRW5jb2RlRW50ZXJXaXRob3V0SW5pdGlhbCA9IG1hbnVhbEVuY29kZVxuICAgID8gY29weShtYW51YWxFbmNvZGUuZW50ZXIgfHwge30pXG4gICAgOiB7fTtcbiAgZGVsZXRlIG1hbnVhbEVuY29kZUVudGVyV2l0aG91dEluaXRpYWwuaW5pdGlhbDtcblxuICBlbmNvZGVzLmluaXRpYWwuZW50ZXIgPSBPYmplY3QuYXNzaWduKFxuICAgIHt9LFxuICAgIGxhc3RTdGF0ZS5lbmNvZGUudXBkYXRlLFxuICAgIERFRkFVTFRfRU5DT0RFLm1hcmsuZW50ZXIsXG4gICAgbWFudWFsRW5jb2RlICYmIG1hbnVhbEVuY29kZS5lbnRlciA/IG1hbnVhbEVuY29kZS5lbnRlci5pbml0aWFsIDoge31cbiAgKTtcblxuICBpZiAoZ2V0KGNoYW5nZSwgXCJlbmNvZGVcIiwgXCJlbnRlclwiKSA9PT0gZmFsc2UpIHtcbiAgICBlbmNvZGVzLmZpbmFsLmVudGVyID0gZW5jb2Rlcy5pbml0aWFsLmVudGVyO1xuICB9IGVsc2Uge1xuICAgIGVuY29kZXMuZmluYWwuZW50ZXIgPSBPYmplY3QuYXNzaWduKFxuICAgICAge30sXG4gICAgICBERUZBVUxUX0VOQ09ERS5tYXJrW21hcmt0eXBlcy5maW5hbCB8fCBtYXJrdHlwZXMuaW5pdGlhbF0udXBkYXRlLFxuICAgICAgc3R5bGVFbmNvZGVzLmZpbmFsLFxuICAgICAgY29weShnZXQoY2hhbmdlLCBcImZpbmFsXCIsIFwiZW5jb2RlXCIsIFwidXBkYXRlXCIpIHx8IHt9KSxcbiAgICAgIG1hbnVhbEVuY29kZSA/IG1hbnVhbEVuY29kZUVudGVyV2l0aG91dEluaXRpYWwgOiB7fSxcbiAgICAgIGNvbXB1dGVLZXB0RW5jb2RlKG1hbnVhbEVuY29kZSwgZW5jb2Rlcy5pbml0aWFsLCBcImVudGVyXCIpXG4gICAgKTtcbiAgfVxuXG4gIGVuY29kZXMuaW5pdGlhbC5leGl0ID0gT2JqZWN0LmFzc2lnbih7fSwgbGFzdFN0YXRlLmVuY29kZS51cGRhdGUpO1xuICBpZiAoY2hhbmdlLmVuY29kZSAmJiBjaGFuZ2UuZW5jb2RlLmV4aXQgPT09IGZhbHNlKSB7XG4gICAgZW5jb2Rlcy5maW5hbC5leGl0ID0gZW5jb2Rlcy5pbml0aWFsLmV4aXQ7XG4gIH0gZWxzZSB7XG4gICAgZW5jb2Rlcy5maW5hbC5leGl0ID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHt9LFxuICAgICAgREVGQVVMVF9FTkNPREUubWFya1ttYXJrdHlwZXMuaW5pdGlhbCB8fCBtYXJrdHlwZXMuZmluYWxdLnVwZGF0ZSxcbiAgICAgIHN0eWxlRW5jb2Rlcy5maW5hbCxcbiAgICAgIGRvRXhpdFxuICAgICAgICA/IGNvcHkoXG4gICAgICAgICAgZ2V0KGNoYW5nZSwgXCJmaW5hbFwiLCBcImVuY29kZVwiLCBcInVwZGF0ZVwiKSB8fFxuICAgICAgICAgICAgICBnZXQoY2hhbmdlLCBcImluaXRpYWxcIiwgXCJlbmNvZGVcIiwgXCJ1cGRhdGVcIilcbiAgICAgICAgKVxuICAgICAgICA6IGNvcHkoXG4gICAgICAgICAgZ2V0KGNoYW5nZSwgXCJpbml0aWFsXCIsIFwiZW5jb2RlXCIsIFwidXBkYXRlXCIpIHx8XG4gICAgICAgICAgICAgIGdldChjaGFuZ2UsIFwiZmluYWxcIiwgXCJlbmNvZGVcIiwgXCJ1cGRhdGVcIilcbiAgICAgICAgKSxcbiAgICAgIERFRkFVTFRfRU5DT0RFLm1hcmsuZXhpdCxcbiAgICAgIG1hbnVhbEVuY29kZSA/IG1hbnVhbEVuY29kZS5leGl0IDoge30sXG4gICAgICBjb21wdXRlS2VwdEVuY29kZShtYW51YWxFbmNvZGUsIGVuY29kZXMuaW5pdGlhbCwgXCJleGl0XCIpXG4gICAgKTtcbiAgfVxuXG4gIGlmIChjaGFuZ2UuZW5jb2RlICYmIGNoYW5nZS5lbmNvZGUudXBkYXRlID09PSBmYWxzZSkge1xuICAgIGVuY29kZXMuZmluYWwudXBkYXRlID0gZW5jb2Rlcy5pbml0aWFsLnVwZGF0ZTtcbiAgfSBlbHNlIHtcbiAgICBlbmNvZGVzLmZpbmFsLnVwZGF0ZSA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIERFRkFVTFRfRU5DT0RFLm1hcmtbbWFya3R5cGVzLmZpbmFsIHx8IG1hcmt0eXBlcy5pbml0aWFsXS51cGRhdGUsXG4gICAgICBzdHlsZUVuY29kZXMuZmluYWwsXG4gICAgICBjb3B5KGdldChjaGFuZ2UsIFwiZmluYWxcIiwgXCJlbmNvZGVcIiwgXCJ1cGRhdGVcIikgfHwge30pLFxuICAgICAgbWFudWFsRW5jb2RlID8gbWFudWFsRW5jb2RlLnVwZGF0ZSA6IHt9LFxuICAgICAgY29tcHV0ZUtlcHRFbmNvZGUobWFudWFsRW5jb2RlLCBlbmNvZGVzLmluaXRpYWwsIFwidXBkYXRlXCIpXG4gICAgKTtcbiAgfVxuXG4gIC8vIFdoZW4gbWFya3R5cGUgY2hhbmdlc1xuICAvLyB8U19leGl0ICB8IC0+IHwgICAgICAgICAgfCBleGl0ISAgICAgICAgICAgICAgICAgKGluaXRpYWwuZXhpdCAgLT4gZmluYWwuZXhpdClcbiAgLy8gfFNfdXBkYXRlfCAtPiB8ICAgICAgICAgIHwgdXBkYXRlIHZpYSBmYWRpbmcgb3V0IChpbml0aWFsLnVwZGF0ZSAtPiBpbml0aWFsLmludGVybWVkaWF0ZSlcbiAgLy8gfCAgICAgICAgfCAtPiB8IEVfdXBkYXRlIHwgJiBmYWRpbmcgaW4gICAgICAgICAgIChmaW5hbC5pbnRlcm1lZGlhdGUgLT4gZmluYWwudXBkYXRlKVxuICAvLyB8ICAgICAgICB8IC0+IHwgRV9lbnRlciAgfCBlbnRlciEgICAgICAgICAgICAgICAgKGluaXRpYWwuZW50ZXIgIC0+IGZpbmFsLmVudGVyKVxuICBpZiAobWFya3R5cGVzLmZpbmFsICE9PSBtYXJrdHlwZXMuaW5pdGlhbCkge1xuICAgIGVuY29kZXMuaW5pdGlhbC5pbnRlcm1lZGlhdGUgPSBPYmplY3QuYXNzaWduKFxuICAgICAge30sXG4gICAgICByZXBsYWNlUG9zaXRpb25BdHRycyhtYXJrdHlwZXMuaW5pdGlhbCwgZW5jb2Rlcy5pbml0aWFsLnVwZGF0ZSwgZW5jb2Rlcy5maW5hbC51cGRhdGUpLFxuICAgICAgeyBvcGFjaXR5OiB7IHZhbHVlOiAwIH0gfVxuICAgICk7XG5cbiAgICBlbmNvZGVzLmZpbmFsLmludGVybWVkaWF0ZSA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIHJlcGxhY2VQb3NpdGlvbkF0dHJzKG1hcmt0eXBlcy5maW5hbCwgZW5jb2Rlcy5maW5hbC51cGRhdGUsIGVuY29kZXMuaW5pdGlhbC51cGRhdGUpLFxuICAgICAgeyBvcGFjaXR5OiB7IHZhbHVlOiAwIH0gfVxuICAgICk7XG5cbiAgICBpZiAoZG9FbnRlcikge1xuICAgICAgZW5jb2Rlcy5pbml0aWFsLmVudGVyID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAge30sXG4gICAgICAgIHJlcGxhY2VQb3NpdGlvbkF0dHJzKG1hcmt0eXBlcy5maW5hbCwgZW5jb2Rlcy5maW5hbC5lbnRlciwgZW5jb2Rlcy5pbml0aWFsLmVudGVyKSxcbiAgICAgICAgeyBvcGFjaXR5OiB7IHZhbHVlOiAwIH0gfSxcbiAgICAgICAgbWFudWFsRW5jb2RlICYmIG1hbnVhbEVuY29kZS5lbnRlciA/IG1hbnVhbEVuY29kZS5lbnRlci5pbml0aWFsIDoge31cbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChkb0V4aXQpIHtcbiAgICAgIGVuY29kZXMuZmluYWwuZXhpdCA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgIHt9LFxuICAgICAgICByZXBsYWNlUG9zaXRpb25BdHRycyhtYXJrdHlwZXMuaW5pdGlhbCwgZW5jb2Rlcy5pbml0aWFsLmV4aXQsIGVuY29kZXMuZmluYWwuZXhpdCksXG4gICAgICAgIHsgb3BhY2l0eTogeyB2YWx1ZTogMCB9IH0sXG4gICAgICAgIG1hbnVhbEVuY29kZSA/IG1hbnVhbEVuY29kZS5leGl0IDoge30sXG4gICAgICAgIGNvbXB1dGVLZXB0RW5jb2RlKG1hbnVhbEVuY29kZSwgZW5jb2Rlcy5pbml0aWFsLCBcImV4aXRcIiksXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBpZiAoIWFnZ3JlZ2F0ZXMuaW5pdGlhbCAmJiBhZ2dyZWdhdGVzLmZpbmFsICYmIGNoYW5nZS5kYXRhICkge1xuICAgIC8vIHdoZW4gYWdncmVnYXRlXG4gICAgZW5jb2Rlcy5maW5hbC5leGl0ID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICFjaGFuZ2UubWFya3R5cGUgPyBlbmNvZGVzLmZpbmFsLnVwZGF0ZSA6IHJlcGxhY2VQb3NpdGlvbkF0dHJzKG1hcmt0eXBlcy5pbml0aWFsLCBlbmNvZGVzLmZpbmFsLmV4aXQsIGVuY29kZXMuZmluYWwudXBkYXRlKSxcbiAgICAgIHsgb3BhY2l0eTogeyB2YWx1ZTogMCB9IH0sXG4gICAgICBtYW51YWxFbmNvZGUgPyBtYW51YWxFbmNvZGUuZXhpdCA6IHt9LFxuICAgICAgY29tcHV0ZUtlcHRFbmNvZGUobWFudWFsRW5jb2RlLCBlbmNvZGVzLmluaXRpYWwsIFwiZXhpdFwiKSxcbiAgICApO1xuXG4gICAgZW5jb2Rlcy5maW5hbC51cGRhdGUgPSBjb3B5KGVuY29kZXMuZmluYWwuZW50ZXIpO1xuICB9IGVsc2UgaWYgKGFnZ3JlZ2F0ZXMuaW5pdGlhbCAmJiAhYWdncmVnYXRlcy5maW5hbCAmJiBjaGFuZ2UuZGF0YSApIHtcbiAgICAvLyB3aGVuIGRpc2FnZ3JlZ2F0ZVxuXG4gICAgZW5jb2Rlcy5pbml0aWFsLmVudGVyID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHt9LFxuICAgICAgIWNoYW5nZS5tYXJrdHlwZSA/IGVuY29kZXMuaW5pdGlhbC51cGRhdGUgOiByZXBsYWNlUG9zaXRpb25BdHRycyhtYXJrdHlwZXMuZmluYWwsIGVuY29kZXMuaW5pdGlhbC5lbnRlciwgZW5jb2Rlcy5pbml0aWFsLnVwZGF0ZSksXG4gICAgICB7IG9wYWNpdHk6IHsgdmFsdWU6IDAgfSB9LFxuICAgICAgbWFudWFsRW5jb2RlICYmIG1hbnVhbEVuY29kZS5lbnRlciA/IG1hbnVhbEVuY29kZS5lbnRlci5pbml0aWFsIDoge31cbiAgICApO1xuXG4gICAgZW5jb2Rlcy5maW5hbC51cGRhdGUgPSBjb3B5KGVuY29kZXMuZmluYWwuZW50ZXIpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBlbmNvZGVzLFxuICAgIHNjYWxlcyxcbiAgICBzaWduYWxzLFxuICAgIG1hcmt0eXBlcyxcbiAgICBoYXNGYWNldCxcbiAgICBhZ2dyZWdhdGVzLFxuICAgIHN0eWxlRW5jb2Rlc1xuICB9O1xufSIsImltcG9ydCB7IGRhdGFQcmVzZXJ2ZWRTY2FsZSwgY29tcHV0ZUtlcHRFbmNvZGUgfSBmcm9tIFwiLi91dGlsXCI7XG5pbXBvcnQgeyBjb3B5MiwgY29weSwgZ2V0LCBkZWVwRXF1YWwgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC91dGlsXCI7XG5pbXBvcnQgeyBERUZBVUxUX0VOQ09ERSB9IGZyb20gXCIuLi8uLi8uLi9kZWZhdWx0XCI7XG5pbXBvcnQgeyBmaW5kQ29tcCB9IGZyb20gXCIuLi8uLi8uLi9hY3R1YXRvci91dGlsXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlKHJhd0luZm8sIHN0ZXAsIGxhc3RTdGF0ZSkge1xuICBjb25zdCB7IGNoYW5nZSB9ID0gc3RlcDtcbiAgY29uc3QgY29tcFN0YXRlID0gbGFzdFN0YXRlO1xuICBjb25zdCBlVmlldyA9IHJhd0luZm8uZVZpcy52aWV3O1xuICBjb25zdCBpc1JlbW92ZSA9ICFjaGFuZ2UuZmluYWw7XG4gIGNvbnN0IGlzQWRkID0gIWNoYW5nZS5pbml0aWFsO1xuICBsZXQgZG9UaWNrcztcbiAgbGV0IGRvTGFiZWxzO1xuICBsZXQgZG9BeGlzRztcbiAgbGV0IGRvVGl0bGU7XG4gIGxldCBkb0RvbWFpbjtcbiAgbGV0IGRvR3JpZDtcbiAgZG9UaWNrcyA9IGRvTGFiZWxzID0gZG9BeGlzRyA9IGRvVGl0bGUgPSBkb0RvbWFpbiA9IGRvR3JpZCA9IHRydWU7XG5cbiAgaWYgKGNoYW5nZS5lbmNvZGUgPT09IGZhbHNlKSB7XG4gICAgZG9UaWNrcyA9IGRvTGFiZWxzID0gZG9BeGlzRyA9IGRvVGl0bGUgPSBkb0RvbWFpbiA9IGRvR3JpZCA9IGZhbHNlO1xuICB9IGVsc2UgaWYgKGNoYW5nZS5lbmNvZGUpIHtcbiAgICBkb1RpY2tzID0gIShjaGFuZ2UuZW5jb2RlLnRpY2tzID09PSBmYWxzZSk7XG4gICAgZG9MYWJlbHMgPSAhKGNoYW5nZS5lbmNvZGUubGFiZWxzID09PSBmYWxzZSk7XG4gICAgZG9BeGlzRyA9ICEoY2hhbmdlLmVuY29kZS5heGlzID09PSBmYWxzZSk7XG4gICAgZG9UaXRsZSA9ICEoY2hhbmdlLmVuY29kZS50aXRsZSA9PT0gZmFsc2UpO1xuICAgIGRvR3JpZCA9ICEoY2hhbmdlLmVuY29kZS5ncmlkID09PSBmYWxzZSk7XG4gICAgZG9Eb21haW4gPSAhKGNoYW5nZS5lbmNvZGUuZG9tYWluID09PSBmYWxzZSk7XG4gIH1cblxuICBjb25zdCBzY05hbWVzID0ge1xuICAgIGluaXRpYWw6IGNoYW5nZS5pbml0aWFsID8gY2hhbmdlLmluaXRpYWwuc2NhbGUgOiB1bmRlZmluZWQsXG4gICAgZmluYWw6IGNoYW5nZS5maW5hbCA/IGNoYW5nZS5maW5hbC5zY2FsZSA6IHVuZGVmaW5lZFxuICB9O1xuXG4gIC8vIGNvbGxlY3QgdGhlIHNjYWxlIG9iamVjdHMgdG8gc2NhbGUgdGhlIGluaXRpYWwvZmluYWwgdmFsdWVzXG4gIGNvbnN0IHNjYWxlcyA9IHtcbiAgICBpbml0aWFsOiBjb21wU3RhdGUuc2NhbGUsXG4gICAgZmluYWw6IGNvcHkyKGNvbXBTdGF0ZS5zY2FsZSlcbiAgfTtcblxuICBpZiAoIShjaGFuZ2Uuc2NhbGUgPT09IGZhbHNlKSkge1xuICAgIGlmICghc2NOYW1lcy5maW5hbCkge1xuICAgICAgc2NhbGVzLmZpbmFsID0ge307XG4gICAgfSBlbHNlIGlmIChjaGFuZ2Uuc2NhbGUgJiYgY2hhbmdlLnNjYWxlLmRhdGEgPT09IGZhbHNlKSB7XG4gICAgICBzY2FsZXMuZmluYWxbc2NOYW1lcy5maW5hbF0gPSBkYXRhUHJlc2VydmVkU2NhbGUoXG4gICAgICAgIHJhd0luZm8uc1Zpcy5zcGVjLFxuICAgICAgICByYXdJbmZvLmVWaXMuc3BlYyxcbiAgICAgICAgc2NOYW1lcy5maW5hbFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2NhbGVzLmZpbmFsW3NjTmFtZXMuZmluYWxdID0gZVZpZXcuX3J1bnRpbWUuc2NhbGVzW3NjTmFtZXMuZmluYWxdXG4gICAgICAgID8gZVZpZXcuX3J1bnRpbWUuc2NhbGVzW3NjTmFtZXMuZmluYWxdLnZhbHVlXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIGxldCBzYW1lRG9tYWluRGltZW5zaW9uID0gZ2V0KGNoYW5nZSwgXCJzY2FsZVwiLCBcImRvbWFpbkRpbWVuc2lvblwiKTtcbiAgaWYgKHR5cGVvZiBzYW1lRG9tYWluRGltZW5zaW9uID09PSBcInN0cmluZ1wiKSB7XG4gICAgc2FtZURvbWFpbkRpbWVuc2lvbiA9XG4gICAgICBzYW1lRG9tYWluRGltZW5zaW9uID09PSBcInNhbWVcIlxuICAgICAgICA/IHRydWVcbiAgICAgICAgOiBzYW1lRG9tYWluRGltZW5zaW9uID09PSBcImRpZmZcIlxuICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoaXNSZW1vdmUgfHwgaXNBZGQpIHtcbiAgICBzYW1lRG9tYWluRGltZW5zaW9uID0gZmFsc2U7XG4gIH0gZWxzZSBpZiAoc2FtZURvbWFpbkRpbWVuc2lvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKGNoYW5nZS5zY2FsZSA9PT0gZmFsc2UpIHtcbiAgICAgIHNhbWVEb21haW5EaW1lbnNpb24gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzY2FsZURlZnMgPSB7XG4gICAgICAgIGluaXRpYWw6IHJhd0luZm8uc1Zpcy5zcGVjLnNjYWxlcy5maW5kKFxuICAgICAgICAgIHNjYWxlRGVmID0+IHNjYWxlRGVmLm5hbWUgPT09IHNjTmFtZXMuaW5pdGlhbFxuICAgICAgICApLFxuICAgICAgICBmaW5hbDogcmF3SW5mby5lVmlzLnNwZWMuc2NhbGVzLmZpbmQoXG4gICAgICAgICAgc2NhbGVEZWYgPT4gc2NhbGVEZWYubmFtZSA9PT0gc2NOYW1lcy5maW5hbFxuICAgICAgICApXG4gICAgICB9O1xuICAgICAgc2FtZURvbWFpbkRpbWVuc2lvbiA9IGRlZXBFcXVhbChcbiAgICAgICAgc2NhbGVEZWZzLmluaXRpYWwuZG9tYWluLFxuICAgICAgICBzY2FsZURlZnMuZmluYWwuZG9tYWluXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNpZ25hbHMgPSB7XG4gICAgaW5pdGlhbDogY29tcFN0YXRlLnNpZ25hbFxuICB9O1xuICBjb25zdCBzaWduYWxzRmluYWwgPSBbXCJ3aWR0aFwiLCBcImhlaWdodFwiLCBcInBhZGRpbmdcIl0ucmVkdWNlKChhY2MsIHNnTmFtZSkgPT4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGNoYW5nZS5zaWduYWwpKSB7XG4gICAgICBpZiAoY2hhbmdlLnNpZ25hbC5pbmRleE9mKHNnTmFtZSkgPj0gMCkge1xuICAgICAgICBhY2Nbc2dOYW1lXSA9IGVWaWV3LnNpZ25hbChzZ05hbWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG4gICAgaWYgKGNoYW5nZS5zaWduYWwgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cbiAgICBhY2Nbc2dOYW1lXSA9IGVWaWV3LnNpZ25hbChzZ05hbWUpO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbiAgc2lnbmFscy5maW5hbCA9IE9iamVjdC5hc3NpZ24oe30sIHNpZ25hbHMuaW5pdGlhbCwgc2lnbmFsc0ZpbmFsKTtcblxuICBjb25zdCBhbGxFbmNvZGVzID0ge307XG5cbiAgY29uc3Qgc3ViQ29tcHMgPSB7XG4gICAgdGlja3M6IGRvVGlja3MsXG4gICAgbGFiZWxzOiBkb0xhYmVscyxcbiAgICB0aXRsZTogZG9UaXRsZSxcbiAgICBheGlzOiBkb0F4aXNHLFxuICAgIGdyaWQ6IGRvR3JpZCxcbiAgICBkb21haW46IGRvRG9tYWluXG4gIH07XG4gIGNvbnN0IGF4aXNHRGF0dW1GaW5hbCA9IGNoYW5nZS5maW5hbFxuICAgID8gZmluZENvbXAoZVZpZXcuc2NlbmVncmFwaCgpLnJvb3QsIGNoYW5nZS5jb21wTmFtZSwgXCJheGlzXCIpWzBdLml0ZW1zWzBdXG4gICAgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGF4aXNHRW5jb2RlQmFzZUZpbmFsID0gYXhpc0dEYXR1bUZpbmFsXG4gICAgPyB7XG4gICAgICB4OiB7IHZhbHVlOiBheGlzR0RhdHVtRmluYWwueCB9LFxuICAgICAgeTogeyB2YWx1ZTogYXhpc0dEYXR1bUZpbmFsLnkgfVxuICAgIH1cbiAgICA6IHt9O1xuXG4gIE9iamVjdC5rZXlzKHN1YkNvbXBzKS5mb3JFYWNoKHN1YkNvbXAgPT4ge1xuICAgIGNvbnN0IG1hbnVhbEVuY29kZSA9XG4gICAgICBjaGFuZ2UuZW5jb2RlICYmIGNoYW5nZS5lbmNvZGVbc3ViQ29tcF0gPyBjaGFuZ2UuZW5jb2RlW3N1YkNvbXBdIDoge307XG4gICAgYWxsRW5jb2Rlc1tzdWJDb21wXSA9IGdldEF4aXNTdWJDb21wRW5jb2RlcyhzdWJDb21wLCBtYW51YWxFbmNvZGUpO1xuICB9KTtcblxuICBmdW5jdGlvbiBnZXRBeGlzU3ViQ29tcEVuY29kZXMoc3ViQ29tcG9uZW50LCBtYW51YWxFbmNvZGUpIHtcbiAgICBjb25zdCBlbmNvZGVzID0ge1xuICAgICAgaW5pdGlhbDogY29weShjb21wU3RhdGUuZW5jb2RlW3N1YkNvbXBvbmVudF0gfHwge30pLFxuICAgICAgZmluYWw6IGNvcHkoY29tcFN0YXRlLmVuY29kZVtzdWJDb21wb25lbnRdIHx8IHt9KVxuICAgIH07XG5cbiAgICBpZiAoc3ViQ29tcHNbc3ViQ29tcG9uZW50XSAhPT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIGVuY29kZXM7XG4gICAgfVxuXG4gICAgY29uc3Qgc3ViQ29tcEVuY29kZSA9IHtcbiAgICAgIGluaXRpYWw6XG4gICAgICAgIGNoYW5nZS5pbml0aWFsICYmXG4gICAgICAgIGNoYW5nZS5pbml0aWFsLmVuY29kZSAmJlxuICAgICAgICBjaGFuZ2UuaW5pdGlhbC5lbmNvZGVbc3ViQ29tcG9uZW50XVxuICAgICAgICAgID8gY2hhbmdlLmluaXRpYWwuZW5jb2RlW3N1YkNvbXBvbmVudF0udXBkYXRlXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBmaW5hbDpcbiAgICAgICAgY2hhbmdlLmZpbmFsICYmIGNoYW5nZS5maW5hbC5lbmNvZGUgJiYgY2hhbmdlLmZpbmFsLmVuY29kZVtzdWJDb21wb25lbnRdXG4gICAgICAgICAgPyBjaGFuZ2UuZmluYWwuZW5jb2RlW3N1YkNvbXBvbmVudF0udXBkYXRlXG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICB9O1xuXG4gICAgZW5jb2Rlcy5pbml0aWFsLmVudGVyID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHt9LFxuICAgICAgLy8gZGVmYXVsdEF4aXNFbmNvZGUuaW5pdGlhbCxcbiAgICAgIERFRkFVTFRfRU5DT0RFLmF4aXNbc3ViQ29tcG9uZW50XShzYW1lRG9tYWluRGltZW5zaW9uID8gY2hhbmdlLmluaXRpYWwgOiBjaGFuZ2UuZmluYWwpXG4gICAgICAgIC51cGRhdGUsXG4gICAgICBzYW1lRG9tYWluRGltZW5zaW9uID8gc3ViQ29tcEVuY29kZS5pbml0aWFsIDogc3ViQ29tcEVuY29kZS5maW5hbCB8fCB7fSxcbiAgICAgIERFRkFVTFRfRU5DT0RFLm1hcmsuZW50ZXIsXG4gICAgICBjb21wU3RhdGUuZW5jb2RlLmVudGVyLFxuICAgICAgbWFudWFsRW5jb2RlICYmIG1hbnVhbEVuY29kZS5lbnRlciA/IG1hbnVhbEVuY29kZS5lbnRlci5pbml0aWFsIDoge31cbiAgICApO1xuICAgIGlmIChtYW51YWxFbmNvZGUgJiYgbWFudWFsRW5jb2RlLmVudGVyID09PSBmYWxzZSkge1xuICAgICAgZW5jb2Rlcy5maW5hbC5lbnRlciA9IGVuY29kZXMuaW5pdGlhbC5lbnRlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgZW5jb2Rlcy5maW5hbC5lbnRlciA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgIHt9LFxuICAgICAgICAvLyBkZWZhdWx0QXhpc0VuY29kZS5maW5hbCxcbiAgICAgICAgREVGQVVMVF9FTkNPREUuYXhpc1tzdWJDb21wb25lbnRdKGNoYW5nZS5maW5hbCkudXBkYXRlLFxuICAgICAgICBzdWJDb21wRW5jb2RlLmZpbmFsID8gc3ViQ29tcEVuY29kZS5maW5hbCA6IHt9LFxuICAgICAgICBtYW51YWxFbmNvZGUgPyBtYW51YWxFbmNvZGUuZW50ZXIgOiB7fSxcbiAgICAgICAgY29tcHV0ZUtlcHRFbmNvZGUobWFudWFsRW5jb2RlLCBlbmNvZGVzLmluaXRpYWwsIFwiZW50ZXJcIilcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZW5jb2Rlcy5pbml0aWFsLmV4aXQgPSBPYmplY3QuYXNzaWduKFxuICAgICAge30sXG4gICAgICAvLyBkZWZhdWx0QXhpc0VuY29kZS5pbml0aWFsLFxuICAgICAgREVGQVVMVF9FTkNPREUuYXhpc1tzdWJDb21wb25lbnRdKGNoYW5nZS5pbml0aWFsKS51cGRhdGUsXG4gICAgICBzdWJDb21wRW5jb2RlLmluaXRpYWwgPyBzdWJDb21wRW5jb2RlLmluaXRpYWwgOiB7fSxcbiAgICAgIGNvbXBTdGF0ZS5lbmNvZGUuZXhpdCB8fCBjb21wU3RhdGUuZW5jb2RlLnVwZGF0ZVxuICAgICk7XG4gICAgaWYgKG1hbnVhbEVuY29kZSAmJiBtYW51YWxFbmNvZGUuZXhpdCA9PT0gZmFsc2UpIHtcbiAgICAgIGVuY29kZXMuZmluYWwuZXhpdCA9IGVuY29kZXMuaW5pdGlhbC5leGl0O1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmNvZGVzLmZpbmFsLmV4aXQgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICB7fSxcbiAgICAgICAgLy8gZGVmYXVsdEF4aXNFbmNvZGUuZmluYWwsXG4gICAgICAgIERFRkFVTFRfRU5DT0RFLmF4aXNbc3ViQ29tcG9uZW50XShcbiAgICAgICAgICBzYW1lRG9tYWluRGltZW5zaW9uID8gY2hhbmdlLmZpbmFsIDogY2hhbmdlLmluaXRpYWxcbiAgICAgICAgKS51cGRhdGUsXG4gICAgICAgIHNhbWVEb21haW5EaW1lbnNpb24gPyBzdWJDb21wRW5jb2RlLmZpbmFsIDogc3ViQ29tcEVuY29kZS5pbml0aWFsIHx8IHt9LFxuICAgICAgICBERUZBVUxUX0VOQ09ERS5tYXJrLmV4aXQsXG4gICAgICAgIG1hbnVhbEVuY29kZSA/IG1hbnVhbEVuY29kZS5leGl0IDoge30sXG4gICAgICAgIGNvbXB1dGVLZXB0RW5jb2RlKG1hbnVhbEVuY29kZSwgZW5jb2Rlcy5pbml0aWFsLCBcImV4aXRcIilcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZW5jb2Rlcy5pbml0aWFsLnVwZGF0ZSA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIC8vIGRlZmF1bHRBeGlzRW5jb2RlLmluaXRpYWwsXG4gICAgICBERUZBVUxUX0VOQ09ERS5heGlzW3N1YkNvbXBvbmVudF0oY2hhbmdlLmluaXRpYWwpLnVwZGF0ZSxcbiAgICAgIHN1YkNvbXBFbmNvZGUuaW5pdGlhbCB8fCB7fSxcbiAgICAgIGVuY29kZXMuaW5pdGlhbC51cGRhdGVcbiAgICApO1xuXG4gICAgaWYgKG1hbnVhbEVuY29kZSAmJiBtYW51YWxFbmNvZGUudXBkYXRlID09PSBmYWxzZSkge1xuICAgICAgZW5jb2Rlcy5maW5hbC51cGRhdGUgPSBlbmNvZGVzLmluaXRpYWwudXBkYXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmNvZGVzLmZpbmFsLnVwZGF0ZSA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgIHt9LFxuICAgICAgICAvLyBkZWZhdWx0QXhpc0VuY29kZS5maW5hbCxcbiAgICAgICAgc3ViQ29tcG9uZW50ID09PSBcImF4aXNcIiA/IGF4aXNHRW5jb2RlQmFzZUZpbmFsIDoge30sXG4gICAgICAgIERFRkFVTFRfRU5DT0RFLmF4aXNbc3ViQ29tcG9uZW50XShjaGFuZ2UuZmluYWwpLnVwZGF0ZSxcbiAgICAgICAgc3ViQ29tcEVuY29kZS5maW5hbCB8fCB7fSxcbiAgICAgICAgbWFudWFsRW5jb2RlID8gbWFudWFsRW5jb2RlLnVwZGF0ZSA6IHt9LFxuICAgICAgICBjb21wdXRlS2VwdEVuY29kZShtYW51YWxFbmNvZGUsIGVuY29kZXMuaW5pdGlhbCwgXCJ1cGRhdGVcIilcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBlbmNvZGVzO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBlbmNvZGVzOiBhbGxFbmNvZGVzLFxuICAgIHNjYWxlcyxcbiAgICBzaWduYWxzLFxuICAgIHNhbWVEb21haW5EaW1lbnNpb25cbiAgfTtcbn0iLCJpbXBvcnQgeyBkYXRhUHJlc2VydmVkU2NhbGUsIGNvbXB1dGVLZXB0RW5jb2RlIH0gZnJvbSBcIi4vdXRpbFwiO1xuaW1wb3J0IHsgY29weTIsIGdldCwgZGVlcEVxdWFsIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvdXRpbFwiO1xuaW1wb3J0IHsgREVGQVVMVF9FTkNPREUgfSBmcm9tIFwiLi4vLi4vLi4vZGVmYXVsdFwiO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlKHJhd0luZm8sIHN0ZXAsIGxhc3RTdGF0ZSkge1xuICBjb25zdCBMRUdFTkRfQ0hBTk5FTFMgPSBbXG4gICAgXCJmaWxsXCIsXG4gICAgXCJvcGFjaXR5XCIsXG4gICAgXCJzaGFwZVwiLFxuICAgIFwic2l6ZVwiLFxuICAgIFwic3Ryb2tlXCIsXG4gICAgXCJzdHJva2VEYXNoXCIsXG4gICAgXCJzdHJva2VXaWR0aFwiXG4gIF07XG4gIGNvbnN0IHsgY2hhbmdlIH0gPSBzdGVwO1xuICBjb25zdCBlVmlldyA9IHJhd0luZm8uZVZpcy52aWV3O1xuXG4gIGxldCBkb1RpdGxlO1xuICBsZXQgZG9TeW1ib2xzO1xuICBsZXQgZG9MYWJlbHM7XG4gIGxldCBkb0VudHJpZXM7XG4gIGxldCBkb0dyYWRpZW50O1xuICBsZXQgZG9MZWdlbmRHO1xuICBkb1RpdGxlID0gZG9TeW1ib2xzID0gZG9MYWJlbHMgPSBkb0VudHJpZXMgPSBkb0dyYWRpZW50ID0gZG9MZWdlbmRHID0gdHJ1ZTtcbiAgY29uc3QgaXNSZW1vdmUgPSAhbGFzdFN0YXRlLmlzUmVtb3ZlICYmICFjaGFuZ2UuZmluYWw7XG4gIGNvbnN0IGlzQWRkID0gIWxhc3RTdGF0ZS5pc0FkZCAmJiAhY2hhbmdlLmluaXRpYWw7XG4gIGlmIChjaGFuZ2UuZW5jb2RlID09PSBmYWxzZSkge1xuICAgIGRvVGl0bGUgPSBkb1N5bWJvbHMgPSBkb0xhYmVscyA9IGRvRW50cmllcyA9IGRvR3JhZGllbnQgPSBkb0xlZ2VuZEcgPSBmYWxzZTtcbiAgfSBlbHNlIGlmIChjaGFuZ2UuZW5jb2RlKSB7XG4gICAgZG9UaXRsZSA9ICEoY2hhbmdlLmVuY29kZS50aXRsZSA9PT0gZmFsc2UpO1xuICAgIGRvU3ltYm9scyA9ICEoY2hhbmdlLmVuY29kZS5zeW1ib2xzID09PSBmYWxzZSk7XG4gICAgZG9MYWJlbHMgPSAhKGNoYW5nZS5lbmNvZGUubGFiZWxzID09PSBmYWxzZSk7XG4gICAgZG9FbnRyaWVzID0gIShjaGFuZ2UuZW5jb2RlLmVudHJpZXMgPT09IGZhbHNlKTtcbiAgICBkb0dyYWRpZW50ID0gIShjaGFuZ2UuZW5jb2RlLmdyYWRpZW50ID09PSBmYWxzZSk7XG4gICAgZG9MZWdlbmRHID0gIShjaGFuZ2UuZW5jb2RlLmxlZ2VuZCA9PT0gZmFsc2UpO1xuICB9XG5cbiAgY29uc3QgbGVnZW5kVHlwZXMgPSB7XG4gICAgaW5pdGlhbDogbGFzdFN0YXRlLmxlZ2VuZFR5cGUsXG4gICAgZmluYWw6XG4gICAgICBjaGFuZ2Uuc2NhbGUgPT09IGZhbHNlXG4gICAgICAgID8gbGFzdFN0YXRlLmxlZ2VuZFR5cGVcbiAgICAgICAgOiBjaGFuZ2UuZmluYWxcbiAgICAgICAgICA/IGNoYW5nZS5maW5hbC50eXBlXG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgfTtcblxuICBjb25zdCBzY05hbWVzID0ge1xuICAgIGluaXRpYWw6IFtdLFxuICAgIGZpbmFsOiBbXVxuICB9O1xuICBMRUdFTkRfQ0hBTk5FTFMuZm9yRWFjaChjaGFubmVsID0+IHtcbiAgICBpZiAoY2hhbmdlLmluaXRpYWwgJiYgY2hhbmdlLmluaXRpYWxbY2hhbm5lbF0pIHtcbiAgICAgIHNjTmFtZXMuaW5pdGlhbC5wdXNoKGNoYW5nZS5pbml0aWFsW2NoYW5uZWxdKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZS5maW5hbCAmJiBjaGFuZ2UuZmluYWxbY2hhbm5lbF0pIHtcbiAgICAgIHNjTmFtZXMuZmluYWwucHVzaChjaGFuZ2UuZmluYWxbY2hhbm5lbF0pO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gY29sbGVjdCB0aGUgc2NhbGUgb2JqZWN0cyB0byBzY2FsZSB0aGUgaW5pdGlhbC9maW5hbCB2YWx1ZXNcbiAgY29uc3Qgc2NhbGVzID0ge1xuICAgIGluaXRpYWw6IGxhc3RTdGF0ZS5zY2FsZSxcbiAgICBmaW5hbDogY29weTIobGFzdFN0YXRlLnNjYWxlKVxuICB9O1xuXG4gIGlmIChjaGFuZ2Uuc2NhbGUgIT09IGZhbHNlKSB7XG4gICAgbGV0IGZpbmFsU2NhbGVOYW1lcyA9IFtdO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGNoYW5nZS5zY2FsZSkpIHtcbiAgICAgIGZpbmFsU2NhbGVOYW1lcyA9IGNoYW5nZS5zY2FsZTtcbiAgICB9IGVsc2UgaWYgKGNoYW5nZS5zY2FsZSA9PT0gdHJ1ZSB8fCBpc0FkZCkge1xuICAgICAgZmluYWxTY2FsZU5hbWVzID0gc2NOYW1lcy5maW5hbDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjaGFuZ2Uuc2NhbGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGZpbmFsU2NhbGVOYW1lcyA9IHNjTmFtZXMuZmluYWwuZmlsdGVyKFxuICAgICAgICBzY05hbWUgPT4gY2hhbmdlLnNjYWxlW3NjTmFtZV0gIT09IGZhbHNlXG4gICAgICApO1xuICAgIH1cbiAgICBmaW5hbFNjYWxlTmFtZXMuZm9yRWFjaChzY05hbWUgPT4ge1xuICAgICAgaWYgKGNoYW5nZS5zY2FsZVtzY05hbWVdICYmIGNoYW5nZS5zY2FsZVtzY05hbWVdLmRhdGEgPT09IGZhbHNlKSB7XG4gICAgICAgIHNjYWxlcy5maW5hbFtzY05hbWVdID0gZGF0YVByZXNlcnZlZFNjYWxlKFxuICAgICAgICAgIHJhd0luZm8uc1Zpcy5zcGVjLFxuICAgICAgICAgIHJhd0luZm8uZVZpcy5zcGVjLFxuICAgICAgICAgIHNjTmFtZVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2NhbGVzLmZpbmFsW3NjTmFtZV0gPSBlVmlldy5fcnVudGltZS5zY2FsZXNbc2NOYW1lXVxuICAgICAgICAgID8gZVZpZXcuX3J1bnRpbWUuc2NhbGVzW3NjTmFtZV0udmFsdWVcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGxldCBzYW1lRG9tYWluRGltZW5zaW9uID0gZ2V0KGNoYW5nZSwgXCJzY2FsZVwiLCBcImRvbWFpbkRpbWVuc2lvblwiKTtcbiAgaWYgKHR5cGVvZiBzYW1lRG9tYWluRGltZW5zaW9uID09PSBcInN0cmluZ1wiKSB7XG4gICAgc2FtZURvbWFpbkRpbWVuc2lvbiA9XG4gICAgICBzYW1lRG9tYWluRGltZW5zaW9uID09PSBcInNhbWVcIlxuICAgICAgICA/IHRydWVcbiAgICAgICAgOiBzYW1lRG9tYWluRGltZW5zaW9uID09PSBcImRpZmZcIlxuICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoc2FtZURvbWFpbkRpbWVuc2lvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKGNoYW5nZS5zY2FsZSA9PT0gZmFsc2UpIHtcbiAgICAgIHNhbWVEb21haW5EaW1lbnNpb24gPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoaXNSZW1vdmUgfHwgaXNBZGQpIHtcbiAgICAgIHNhbWVEb21haW5EaW1lbnNpb24gPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRmFjdDogRWFjaCBsZWdlbmQgY2FuIGJlIGFzc29jaWF0ZWQgd2l0aCBtdWx0aXBsZSBzY2FsZXMgYnV0IHRoZWlyIGRvbWFpbnMgYXJlIGVxdWFsLlxuICAgICAgY29uc3Qgc2NhbGVEZWZzID0ge1xuICAgICAgICBpbml0aWFsOiByYXdJbmZvLnNWaXMuc3BlYy5zY2FsZXMuZmluZChcbiAgICAgICAgICBzY2FsZURlZiA9PiBzY2FsZURlZi5uYW1lID09PSBzY05hbWVzLmluaXRpYWxbMF1cbiAgICAgICAgKSxcbiAgICAgICAgZmluYWw6IHJhd0luZm8uZVZpcy5zcGVjLnNjYWxlcy5maW5kKFxuICAgICAgICAgIHNjYWxlRGVmID0+IHNjYWxlRGVmLm5hbWUgPT09IHNjTmFtZXMuZmluYWxbMF1cbiAgICAgICAgKVxuICAgICAgfTtcbiAgICAgIHNhbWVEb21haW5EaW1lbnNpb24gPSBkZWVwRXF1YWwoXG4gICAgICAgIHNjYWxlRGVmcy5pbml0aWFsLmRvbWFpbixcbiAgICAgICAgc2NhbGVEZWZzLmZpbmFsLmRvbWFpblxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzaWduYWxzID0ge1xuICAgIGluaXRpYWw6IGxhc3RTdGF0ZS5zaWduYWxcbiAgfTtcbiAgY29uc3Qgc2lnbmFsc0ZpbmFsID0gW1wid2lkdGhcIiwgXCJoZWlnaHRcIiwgXCJwYWRkaW5nXCJdLnJlZHVjZSgoYWNjLCBzZ05hbWUpID0+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGFuZ2Uuc2lnbmFsKSkge1xuICAgICAgaWYgKGNoYW5nZS5zaWduYWwuaW5kZXhPZihzZ05hbWUpID49IDApIHtcbiAgICAgICAgYWNjW3NnTmFtZV0gPSBlVmlldy5zaWduYWwoc2dOYW1lKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuICAgIGlmIChjaGFuZ2Uuc2lnbmFsID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG4gICAgYWNjW3NnTmFtZV0gPSBlVmlldy5zaWduYWwoc2dOYW1lKTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIHNpZ25hbHMuZmluYWwgPSBPYmplY3QuYXNzaWduKHt9LCBzaWduYWxzLmluaXRpYWwsIHNpZ25hbHNGaW5hbCk7XG5cbiAgY29uc3QgYWxsRW5jb2RlcyA9IHt9O1xuXG4gIGNvbnN0IHN1YkNvbXBzID0ge1xuICAgIGdyYWRpZW50OiBkb0dyYWRpZW50LFxuICAgIGJhbmRzOiBkb0dyYWRpZW50LFxuICAgIHBhaXJzOiBkb1N5bWJvbHMgfHwgZG9MYWJlbHMsXG4gICAgbGFiZWxzOiBkb0xhYmVscyxcbiAgICB0aXRsZTogZG9UaXRsZSxcbiAgICBsZWdlbmQ6IGRvTGVnZW5kRyxcbiAgICBlbnRyaWVzOiBkb0VudHJpZXMsXG4gICAgc3ltYm9sczogZG9TeW1ib2xzXG4gIH07XG4gIE9iamVjdC5rZXlzKHN1YkNvbXBzKS5mb3JFYWNoKHN1YkNvbXAgPT4ge1xuICAgIGlmIChzdWJDb21wc1tzdWJDb21wXSkge1xuICAgICAgY29uc3QgbWFudWFsRW5jb2RlID1cbiAgICAgICAgY2hhbmdlLmVuY29kZSAmJiBjaGFuZ2UuZW5jb2RlW3N1YkNvbXBdID8gY2hhbmdlLmVuY29kZVtzdWJDb21wXSA6IHt9O1xuICAgICAgYWxsRW5jb2Rlc1tzdWJDb21wXSA9IGdldExlZ2VuZFN1YkNvbXBFbmNvZGVzKFxuICAgICAgICBzdWJDb21wLFxuICAgICAgICBtYW51YWxFbmNvZGVcbiAgICAgICk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBnZXRMZWdlbmRTdWJDb21wRW5jb2RlcyhzdWJDb21wb25lbnQsIG1hbnVhbEVuY29kZSkge1xuICAgIGNvbnN0IGRlZmF1bHRTdWJjb21wRW5jb2RlID0ge1xuICAgICAgaW5pdGlhbDogREVGQVVMVF9FTkNPREUubGVnZW5kW3N1YkNvbXBvbmVudF0oY2hhbmdlLmluaXRpYWwpLnVwZGF0ZSxcbiAgICAgIGZpbmFsOiBERUZBVUxUX0VOQ09ERS5sZWdlbmRbc3ViQ29tcG9uZW50XShjaGFuZ2UuZmluYWwpLnVwZGF0ZVxuICAgIH07XG4gICAgY29uc3QgY29tcHMgPSBjaGFuZ2U7XG4gICAgY29uc3QgY29tcEVuY29kZSA9IHt9O1xuICAgIFtcImluaXRpYWxcIiwgXCJmaW5hbFwiXS5mb3JFYWNoKHdoaWNoID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgY29tcHNbd2hpY2hdICYmXG4gICAgICAgIGNvbXBzW3doaWNoXS5lbmNvZGUgJiZcbiAgICAgICAgY29tcHNbd2hpY2hdLmVuY29kZVtzdWJDb21wb25lbnRdXG4gICAgICApIHtcbiAgICAgICAgY29tcEVuY29kZVt3aGljaF0gPSBjb21wc1t3aGljaF0uZW5jb2RlW3N1YkNvbXBvbmVudF0udXBkYXRlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgZW5jb2RlcyA9IHtcbiAgICAgIGluaXRpYWw6IGNvcHkyKFxuICAgICAgICBsYXN0U3RhdGUuZW5jb2RlICYmIGxhc3RTdGF0ZS5lbmNvZGVbc3ViQ29tcG9uZW50XVxuICAgICAgICAgID8gbGFzdFN0YXRlLmVuY29kZVtzdWJDb21wb25lbnRdXG4gICAgICAgICAgOiB7IHVwZGF0ZTogZGVmYXVsdFN1YmNvbXBFbmNvZGUuaW5pdGlhbCB9XG4gICAgICApLFxuICAgICAgZmluYWw6IGNvcHkyKFxuICAgICAgICBsYXN0U3RhdGUuZW5jb2RlICYmIGxhc3RTdGF0ZS5lbmNvZGVbc3ViQ29tcG9uZW50XVxuICAgICAgICAgID8gbGFzdFN0YXRlLmVuY29kZVtzdWJDb21wb25lbnRdXG4gICAgICAgICAgOiB7IHVwZGF0ZTogZGVmYXVsdFN1YmNvbXBFbmNvZGUuZmluYWwgfVxuICAgICAgKVxuICAgIH07XG5cbiAgICBlbmNvZGVzLmluaXRpYWwuZW50ZXIgPSBPYmplY3QuYXNzaWduKFxuICAgICAge30sXG4gICAgICBzYW1lRG9tYWluRGltZW5zaW9uXG4gICAgICAgID8gZGVmYXVsdFN1YmNvbXBFbmNvZGUuaW5pdGlhbFxuICAgICAgICA6IGRlZmF1bHRTdWJjb21wRW5jb2RlLmZpbmFsLFxuICAgICAgc2FtZURvbWFpbkRpbWVuc2lvbiA/IGNvbXBFbmNvZGUuaW5pdGlhbCA6IGNvbXBFbmNvZGUuZmluYWwsXG4gICAgICBERUZBVUxUX0VOQ09ERS5tYXJrLmVudGVyLFxuICAgICAgbGFzdFN0YXRlLmVuY29kZS5lbnRlcixcbiAgICAgIG1hbnVhbEVuY29kZSAmJiBtYW51YWxFbmNvZGUuZW50ZXIgPyBtYW51YWxFbmNvZGUuZW50ZXIuaW5pdGlhbCA6IHt9XG4gICAgKTtcbiAgICBpZiAobWFudWFsRW5jb2RlICYmIG1hbnVhbEVuY29kZS5lbnRlciA9PT0gZmFsc2UpIHtcbiAgICAgIGVuY29kZXMuZmluYWwuZW50ZXIgPSBlbmNvZGVzLmluaXRpYWwuZW50ZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVuY29kZXMuZmluYWwuZW50ZXIgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICB7fSxcbiAgICAgICAgZGVmYXVsdFN1YmNvbXBFbmNvZGUuZmluYWwsXG4gICAgICAgIGNvbXBFbmNvZGUuZmluYWwsXG4gICAgICAgIG1hbnVhbEVuY29kZSA/IG1hbnVhbEVuY29kZS5lbnRlciA6IHt9LFxuICAgICAgICBjb21wdXRlS2VwdEVuY29kZShtYW51YWxFbmNvZGUsIGVuY29kZXMuaW5pdGlhbCwgXCJlbnRlclwiKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBlbmNvZGVzLmluaXRpYWwuZXhpdCA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIGRlZmF1bHRTdWJjb21wRW5jb2RlLmluaXRpYWwsXG4gICAgICBjb21wRW5jb2RlLmluaXRpYWwsXG4gICAgICBsYXN0U3RhdGUuZW5jb2RlLmV4aXQgfHwgbGFzdFN0YXRlLmVuY29kZS51cGRhdGVcbiAgICApO1xuXG4gICAgaWYgKG1hbnVhbEVuY29kZSAmJiBtYW51YWxFbmNvZGUuZXhpdCA9PT0gZmFsc2UpIHtcbiAgICAgIGVuY29kZXMuZmluYWwuZXhpdCA9IGVuY29kZXMuaW5pdGlhbC5leGl0O1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmNvZGVzLmZpbmFsLmV4aXQgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICB7fSxcbiAgICAgICAgc2FtZURvbWFpbkRpbWVuc2lvblxuICAgICAgICAgID8gZGVmYXVsdFN1YmNvbXBFbmNvZGUuZmluYWxcbiAgICAgICAgICA6IGRlZmF1bHRTdWJjb21wRW5jb2RlLmluaXRpYWwsXG4gICAgICAgIHNhbWVEb21haW5EaW1lbnNpb24gPyBjb21wRW5jb2RlLmZpbmFsIDogY29tcEVuY29kZS5pbml0aWFsLFxuICAgICAgICBERUZBVUxUX0VOQ09ERS5tYXJrLmV4aXQsXG4gICAgICAgIG1hbnVhbEVuY29kZSA/IG1hbnVhbEVuY29kZS5leGl0IDoge30sXG4gICAgICAgIGNvbXB1dGVLZXB0RW5jb2RlKG1hbnVhbEVuY29kZSwgZW5jb2Rlcy5pbml0aWFsLCBcImV4aXRcIilcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZW5jb2Rlcy5pbml0aWFsLnVwZGF0ZSA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIGRlZmF1bHRTdWJjb21wRW5jb2RlLmluaXRpYWwsXG4gICAgICBjb21wRW5jb2RlLmluaXRpYWwsXG4gICAgICBlbmNvZGVzLmluaXRpYWwudXBkYXRlXG4gICAgKTtcblxuICAgIGlmIChtYW51YWxFbmNvZGUgJiYgbWFudWFsRW5jb2RlLnVwZGF0ZSA9PT0gZmFsc2UpIHtcbiAgICAgIGVuY29kZXMuZmluYWwudXBkYXRlID0gZW5jb2Rlcy5pbml0aWFsLnVwZGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW5jb2Rlcy5maW5hbC51cGRhdGUgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICB7fSxcbiAgICAgICAgZGVmYXVsdFN1YmNvbXBFbmNvZGUuZmluYWwsXG4gICAgICAgIGNvbXBFbmNvZGUuZmluYWwsXG4gICAgICAgIG1hbnVhbEVuY29kZSA/IG1hbnVhbEVuY29kZS51cGRhdGUgOiB7fSxcbiAgICAgICAgY29tcHV0ZUtlcHRFbmNvZGUobWFudWFsRW5jb2RlLCBlbmNvZGVzLmluaXRpYWwsIFwidXBkYXRlXCIpXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBlbmNvZGVzO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBlbmNvZGVzOiBhbGxFbmNvZGVzLFxuICAgIHNjYWxlcyxcbiAgICBzaWduYWxzLFxuICAgIGxlZ2VuZFR5cGVzLFxuICAgIHNhbWVEb21haW5EaW1lbnNpb24sXG4gICAgaXNBZGQsXG4gICAgaXNSZW1vdmVcbiAgfTtcbn0iLCJpbXBvcnQgeyBjb3B5IH0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvdXRpbFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZShyYXdJbmZvLCBzdGVwLCBsYXN0U3RhdGUpIHtcbiAgY29uc3QgeyBjaGFuZ2UgfSA9IHN0ZXA7XG4gIGNvbnN0IHNpZ25hbHMgPSB7XG4gICAgaW5pdGlhbDogbGFzdFN0YXRlLnNpZ25hbFxuICB9O1xuICBjb25zdCBlbmNvZGVzID0ge1xuICAgIGluaXRpYWw6IGNvcHkobGFzdFN0YXRlLmVuY29kZSksXG4gICAgZmluYWw6IGNvcHkobGFzdFN0YXRlLmVuY29kZSlcbiAgfTtcblxuICBjb25zdCBzaWduYWxzRmluYWwgPSB7fTtcbiAgY29uc3QgZmluYWxTaWduYWxOYW1lcyA9IEFycmF5LmlzQXJyYXkoY2hhbmdlLnNpZ25hbClcbiAgICA/IGNoYW5nZS5zaWduYWxcbiAgICA6IFtcIndpZHRoXCIsIFwiaGVpZ2h0XCIsIFwicGFkZGluZ1wiXTtcblxuICBmaW5hbFNpZ25hbE5hbWVzLmZvckVhY2goc2dOYW1lID0+IHtcbiAgICBzaWduYWxzRmluYWxbc2dOYW1lXSA9IHJhd0luZm8uZVZpcy52aWV3LnNpZ25hbChzZ05hbWUpO1xuICB9KTtcblxuICBzaWduYWxzLmZpbmFsID0geyAuLi5zaWduYWxzLmluaXRpYWwsIC4uLnNpZ25hbHNGaW5hbCB9O1xuXG4gIGlmIChzdGVwLmNoYW5nZS5zaWduYWwgIT09IGZhbHNlKSB7XG4gICAgaWYgKGZpbmFsU2lnbmFsTmFtZXMuaW5kZXhPZihcImhlaWdodFwiKSA+PSAwKSB7XG4gICAgICBlbmNvZGVzLmZpbmFsLnN2Zy55ID0geyB2YWx1ZTogY2hhbmdlLmZpbmFsLnkgKyBjaGFuZ2UuZmluYWwucGFkZGluZyB9O1xuICAgICAgZW5jb2Rlcy5maW5hbC5zdmcuaGVpZ2h0ID0ge1xuICAgICAgICB2YWx1ZTogY2hhbmdlLmZpbmFsLnZpZXdIZWlnaHQgKyBjaGFuZ2UuZmluYWwucGFkZGluZyAqIDJcbiAgICAgIH07XG4gICAgICBlbmNvZGVzLmZpbmFsLnJvb3QuaGVpZ2h0ID0geyB2YWx1ZTogc2lnbmFscy5maW5hbC5oZWlnaHQgfTtcbiAgICB9XG4gICAgaWYgKGZpbmFsU2lnbmFsTmFtZXMuaW5kZXhPZihcIndpZHRoXCIpID49IDApIHtcbiAgICAgIGVuY29kZXMuZmluYWwuc3ZnLnggPSB7IHZhbHVlOiBjaGFuZ2UuZmluYWwueCArIGNoYW5nZS5maW5hbC5wYWRkaW5nIH07XG4gICAgICBlbmNvZGVzLmZpbmFsLnN2Zy53aWR0aCA9IHtcbiAgICAgICAgdmFsdWU6IGNoYW5nZS5maW5hbC52aWV3V2lkdGggKyBjaGFuZ2UuZmluYWwucGFkZGluZyAqIDJcbiAgICAgIH07XG4gICAgICBlbmNvZGVzLmZpbmFsLnJvb3Qud2lkdGggPSB7IHZhbHVlOiBzaWduYWxzLmZpbmFsLndpZHRoIH07XG4gICAgfVxuICB9XG5cbiAgLy8gVG9kbyBFbmNvZGVzIGZvciB2aWV3IGNvbXBcbiAgY29uc3QgZlJvb3REYXR1bSA9IHJhd0luZm8uZVZpcy52aWV3Ll9ydW50aW1lLmRhdGEucm9vdC52YWx1ZXMudmFsdWVbMF07XG4gIGVuY29kZXMuZmluYWwucm9vdC5maWxsID0geyB2YWx1ZTogZlJvb3REYXR1bS5maWxsIH07XG4gIGVuY29kZXMuZmluYWwucm9vdC5zdHJva2UgPSB7IHZhbHVlOiBmUm9vdERhdHVtLnN0cm9rZSB9O1xuXG4gIHJldHVybiB7XG4gICAgc2lnbmFscyxcbiAgICBlbmNvZGVzXG4gIH07XG5cbn0iLCJmdW5jdGlvbiBnZXRMZWdlbmRUeXBlKGxlZ2VuZENvbXBTcGVjLCB2aWV3KSB7XG4gIGlmIChsZWdlbmRDb21wU3BlYy5maWxsKSB7XG4gICAgY29uc3Qgc2NhbGUgPSB2aWV3Ll9ydW50aW1lLnNjYWxlc1tsZWdlbmRDb21wU3BlYy5maWxsXS52YWx1ZTtcbiAgICBpZiAoXG4gICAgICBbXG4gICAgICAgIFwic2VxdWVudGlhbC1saW5lYXJcIixcbiAgICAgICAgXCJsaW5lYXJcIixcbiAgICAgICAgXCJsb2dcIixcbiAgICAgICAgXCJwb3dcIixcbiAgICAgICAgXCJzcXJ0XCIsXG4gICAgICAgIFwic3ltbG9nXCIsXG4gICAgICAgIFwiYmluLW9yZGluYWxcIlxuICAgICAgXS5pbmRleE9mKHNjYWxlLnR5cGUpID49IDBcbiAgICApIHtcbiAgICAgIGlmIChzY2FsZS50eXBlID09PSBcImJpbi1vcmRpbmFsXCIpIHtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJncmFkaWVudFwiLCBpc0JhbmQ6IHRydWUgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IHR5cGU6IFwiZ3JhZGllbnRcIiB9O1xuICAgIH1cbiAgfVxuXG4gIGlmIChsZWdlbmRDb21wU3BlYy5zdHJva2UpIHtcbiAgICBjb25zdCBzY2FsZSA9IHZpZXcuX3J1bnRpbWUuc2NhbGVzW2xlZ2VuZENvbXBTcGVjLnN0cm9rZV0udmFsdWU7XG4gICAgaWYgKFxuICAgICAgW1xuICAgICAgICBcInNlcXVlbnRpYWwtbGluZWFyXCIsXG4gICAgICAgIFwibGluZWFyXCIsXG4gICAgICAgIFwibG9nXCIsXG4gICAgICAgIFwicG93XCIsXG4gICAgICAgIFwic3FydFwiLFxuICAgICAgICBcInN5bWxvZ1wiLFxuICAgICAgICBcImJpbi1vcmRpbmFsXCJcbiAgICAgIF0uaW5kZXhPZihzY2FsZS50eXBlKSA+PSAwXG4gICAgKSB7XG4gICAgICBpZiAoc2NhbGUudHlwZSA9PT0gXCJiaW4tb3JkaW5hbFwiKSB7XG4gICAgICAgIHJldHVybiB7IHR5cGU6IFwiZ3JhZGllbnRcIiwgaXNCYW5kOiB0cnVlIH07XG4gICAgICB9XG4gICAgICByZXR1cm4geyB0eXBlOiBcImdyYWRpZW50XCIgfTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgdHlwZTogXCJzeW1ib2xcIiB9O1xufVxuXG5leHBvcnQgeyBnZXRMZWdlbmRUeXBlIH07XG4iLCJpbXBvcnQgeyBjb3B5IH0gZnJvbSBcIi4uL3V0aWwvdXRpbFwiO1xuaW1wb3J0IHsgZ2V0TGVnZW5kVHlwZSB9IGZyb20gXCIuLi91dGlsL3ZnU3BlY0hlbHBlclwiO1xuXG5mdW5jdGlvbiBnZXRDb21wb25lbnRzKHZnU3BlYykge1xuICAvLyBCeSB0cmF2ZWxpbmcgdmdTcGVjLCBjb2xsZWN0IHRoZSBtYXJrcywgYXhlcywgbGVnZW5kcywgYW5kIHNjYWxlcyB3aXRoIHRoZWlyIGJvdW5kIGRhdGEgYW5kIGVuY29kaW5nLlxuICBjb25zdCBjb21wb25lbnRzID0gW107XG4gIGZ1bmN0aW9uIGNvbGxlY3RDb21wKG1hcmssIGN1cnJDb21wLCBpc1Jvb3QgPSBmYWxzZSkge1xuICAgIGlmIChpc1Jvb3QpIHtcbiAgICAgIG1hcmsubmFtZSA9IFwicm9vdFwiO1xuICAgIH1cbiAgICBsZXQgbmV3Q29tcCA9IGN1cnJDb21wO1xuICAgIGlmIChtYXJrLmF4ZXMpIHtcbiAgICAgIG5ld0NvbXAgPSBuZXdDb21wLmNvbmNhdChcbiAgICAgICAgbWFyay5heGVzLm1hcChkID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uY29weShkKSxcbiAgICAgICAgICAgIGNvbXBUeXBlOiBcImF4aXNcIlxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChtYXJrLmxlZ2VuZHMpIHtcbiAgICAgIG5ld0NvbXAgPSBuZXdDb21wLmNvbmNhdChcbiAgICAgICAgbWFyay5sZWdlbmRzLm1hcChkID0+IHsgcmV0dXJuIHsgLi4uY29weShkKSwgIGNvbXBUeXBlOiBcImxlZ2VuZFwiIH07IH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChtYXJrLnNjYWxlcykge1xuICAgICAgbmV3Q29tcCA9IG5ld0NvbXAuY29uY2F0KFxuICAgICAgICBtYXJrLnNjYWxlcy5tYXAoZCA9PiB7IHJldHVybiB7IC4uLmNvcHkoZCksICBjb21wVHlwZTogXCJzY2FsZVwiIH07IH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghaXNSb290KSB7XG4gICAgICBjb25zdCBuZXdNYXJrID0geyAuLi5jb3B5KG1hcmspLCAgY29tcFR5cGU6IFwibWFya1wiIH07XG4gICAgICBkZWxldGUgbmV3TWFyay5tYXJrcztcbiAgICAgIG5ld0NvbXAucHVzaChuZXdNYXJrKTtcbiAgICB9XG5cbiAgICBpZiAobWFyay5tYXJrcykge1xuICAgICAgbmV3Q29tcCA9IG1hcmsubWFya3MucmVkdWNlKChhY2MsIGN1cnIpID0+IHtcbiAgICAgICAgY29uc3Qgc3ViQ29tcHMgPSBjb2xsZWN0Q29tcChcbiAgICAgICAgICB7IC4uLmN1cnIsIHBhcmVudDogKG1hcmsgfHwgXCJyb290XCIpIH0sXG4gICAgICAgICAgW11cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQoc3ViQ29tcHMpO1xuICAgICAgfSwgbmV3Q29tcCk7XG4gICAgfVxuICAgIHJldHVybiBuZXdDb21wO1xuICB9XG5cbiAgcmV0dXJuIGNvbGxlY3RDb21wKHZnU3BlYywgY29tcG9uZW50cywgdHJ1ZSk7XG59XG5mdW5jdGlvbiBnZXRDaGFuZ2VzKHNDb21wb25lbnRzLCBlQ29tcG9uZW50cykge1xuICBjb25zdCBJREVOVElGSUVSUyA9IHtcbiAgICBheGlzOiBjb21wID0+XG4gICAgICBjb21wLmVuY29kZSAmJiBjb21wLmVuY29kZS5heGlzID8gY29tcC5lbmNvZGUuYXhpcy5uYW1lIDogY29tcC5zY2FsZSxcbiAgICBsZWdlbmQ6IGNvbXAgPT5cbiAgICAgIGNvbXAuZW5jb2RlICYmIGNvbXAuZW5jb2RlLmxlZ2VuZCA/IGNvbXAuZW5jb2RlLmxlZ2VuZC5uYW1lIDogY29tcC5zY2FsZSxcbiAgICBtYXJrOiBjb21wID0+IGNvbXAubmFtZSxcbiAgICBzY2FsZTogY29tcCA9PiBjb21wLm5hbWVcbiAgfTtcbiAgY29uc3QgbWVyZ2VkID0gW107XG4gIHNDb21wb25lbnRzLmZvckVhY2goc0NvbXAgPT4ge1xuICAgIGNvbnN0IGlkID0gSURFTlRJRklFUlNbc0NvbXAuY29tcFR5cGVdO1xuICAgIGNvbnN0IG1hdGNoZWRJZCA9IGVDb21wb25lbnRzLmZpbmRJbmRleChcbiAgICAgIGVDb21wID0+IHNDb21wLmNvbXBUeXBlID09PSBlQ29tcC5jb21wVHlwZSAmJiBpZChzQ29tcCkgPT09IGlkKGVDb21wKVxuICAgICk7XG4gICAgaWYgKG1hdGNoZWRJZCA+PSAwKSB7XG4gICAgICBtZXJnZWQucHVzaCh7XG4gICAgICAgIGNvbXBUeXBlOiBzQ29tcC5jb21wVHlwZSxcbiAgICAgICAgY29tcE5hbWU6IGlkKHNDb21wKSxcbiAgICAgICAgcGFyZW50OiBzQ29tcC5wYXJlbnQsXG4gICAgICAgIGluaXRpYWw6IHNDb21wLFxuICAgICAgICBmaW5hbDogZUNvbXBvbmVudHMuc3BsaWNlKG1hdGNoZWRJZCwgMSlbMF1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBtZXJnZWQucHVzaCh7XG4gICAgICAgIGNvbXBUeXBlOiBzQ29tcC5jb21wVHlwZSxcbiAgICAgICAgY29tcE5hbWU6IGlkKHNDb21wKSxcbiAgICAgICAgcGFyZW50OiBzQ29tcC5wYXJlbnQsXG4gICAgICAgIGluaXRpYWw6IHNDb21wLFxuICAgICAgICBmaW5hbDogbnVsbFxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gbWVyZ2VkLmNvbmNhdChcbiAgICBlQ29tcG9uZW50cy5tYXAoZUNvbXAgPT4ge1xuICAgICAgY29uc3QgaWQgPSBJREVOVElGSUVSU1tlQ29tcC5jb21wVHlwZV07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb21wVHlwZTogZUNvbXAuY29tcFR5cGUsXG4gICAgICAgIGNvbXBOYW1lOiBpZChlQ29tcCksXG4gICAgICAgIHBhcmVudDogZUNvbXAucGFyZW50LFxuICAgICAgICBpbml0aWFsOiBudWxsLFxuICAgICAgICBmaW5hbDogZUNvbXBcbiAgICAgIH07XG4gICAgfSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0Vmlld0NoYW5nZShyYXdJbmZvKSB7XG4gIHJldHVybiB7XG4gICAgY29tcFR5cGU6IFwidmlld1wiLFxuICAgIGNvbXBOYW1lOiBcImdsb2JhbFwiLFxuXG4gICAgaW5pdGlhbDoge1xuICAgICAgdmlld1dpZHRoOiByYXdJbmZvLnNWaXMudmlldy5fdmlld1dpZHRoLFxuICAgICAgdmlld0hlaWdodDogcmF3SW5mby5zVmlzLnZpZXcuX3ZpZXdIZWlnaHQsXG4gICAgICB3aWR0aDogcmF3SW5mby5zVmlzLnZpZXcud2lkdGgoKSxcbiAgICAgIGhlaWdodDogcmF3SW5mby5zVmlzLnZpZXcuaGVpZ2h0KCksXG4gICAgICB4OiByYXdJbmZvLnNWaXMudmlldy5fb3JpZ2luWzBdLFxuICAgICAgeTogcmF3SW5mby5zVmlzLnZpZXcuX29yaWdpblsxXSxcbiAgICAgIHBhZGRpbmc6IHJhd0luZm8uc1Zpcy5zcGVjLnBhZGRpbmdcbiAgICB9LFxuICAgIGZpbmFsOiB7XG4gICAgICB2aWV3V2lkdGg6IHJhd0luZm8uZVZpcy52aWV3Ll92aWV3V2lkdGgsXG4gICAgICB2aWV3SGVpZ2h0OiByYXdJbmZvLmVWaXMudmlldy5fdmlld0hlaWdodCxcbiAgICAgIHdpZHRoOiByYXdJbmZvLmVWaXMudmlldy53aWR0aCgpLFxuICAgICAgaGVpZ2h0OiByYXdJbmZvLmVWaXMudmlldy5oZWlnaHQoKSxcbiAgICAgIHg6IHJhd0luZm8uZVZpcy52aWV3Ll9vcmlnaW5bMF0sXG4gICAgICB5OiByYXdJbmZvLmVWaXMudmlldy5fb3JpZ2luWzFdLFxuICAgICAgcGFkZGluZzogcmF3SW5mby5lVmlzLnNwZWMucGFkZGluZ1xuICAgIH1cbiAgfTtcbn1cblxuXG5mdW5jdGlvbiBnZXREZWZhdWx0Q2hhbmdlKHN0ZXAsIHJhd0luZm8pIHtcbiAgY29uc3QgY2hhbmdlID0gY29weShzdGVwLmNoYW5nZSB8fCB7fSk7XG4gIGlmIChzdGVwLmNvbXBUeXBlID09PSBcIm1hcmtcIikge1xuICAgIGNoYW5nZS5kYXRhID0gY2hhbmdlLmRhdGEgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBjaGFuZ2UuZGF0YTtcbiAgICBpZiAoXG4gICAgICBjaGFuZ2UuZGF0YS51cGRhdGUgPT09IGZhbHNlICYmXG4gICAgICBjaGFuZ2UuZGF0YS5lbnRlciA9PT0gZmFsc2UgJiZcbiAgICAgIGNoYW5nZS5kYXRhLmV4aXQgPT09IGZhbHNlXG4gICAgKSB7XG4gICAgICBjaGFuZ2UuZGF0YSA9IGZhbHNlO1xuICAgIH1cbiAgICBjaGFuZ2UubWFya3R5cGUgPSBjaGFuZ2UubWFya3R5cGUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBjaGFuZ2UubWFya3R5cGU7XG4gICAgY2hhbmdlLnNjYWxlID0gY2hhbmdlLnNjYWxlID09PSB1bmRlZmluZWQgPyB0cnVlIDogY2hhbmdlLnNjYWxlO1xuICAgIGNoYW5nZS5zaWduYWwgPSBjaGFuZ2Uuc2lnbmFsID09PSB1bmRlZmluZWQgPyB0cnVlIDogY2hhbmdlLnNpZ25hbDtcbiAgICBjaGFuZ2UuZW5jb2RlID0gY2hhbmdlLmVuY29kZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGNoYW5nZS5lbmNvZGU7XG4gIH0gZWxzZSBpZiAoc3RlcC5jb21wVHlwZSA9PT0gXCJheGlzXCIgfHwgc3RlcC5jb21wVHlwZSA9PT0gXCJsZWdlbmRcIikge1xuICAgIGNoYW5nZS5zaWduYWwgPSBjaGFuZ2Uuc2lnbmFsID09PSB1bmRlZmluZWQgPyB0cnVlIDogY2hhbmdlLnNpZ25hbDtcbiAgICBjaGFuZ2Uuc2NhbGUgPSBjaGFuZ2Uuc2NhbGUgPT09IHVuZGVmaW5lZCA/IHt9IDogY2hhbmdlLnNjYWxlO1xuXG4gICAgaWYgKHN0ZXAuY29tcFR5cGUgPT09IFwibGVnZW5kXCIpIHtcbiAgICAgIGNoYW5nZS5zY2FsZSA9IGNoYW5nZS5zY2FsZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGNoYW5nZS5zY2FsZTtcbiAgICAgIGNoYW5nZS5zaWduYWwgPSBjaGFuZ2Uuc2lnbmFsID09PSB1bmRlZmluZWQgPyB0cnVlIDogY2hhbmdlLnNpZ25hbDtcbiAgICAgIC8vIHNwZWNpZnkgdGhlIHR5cGUgb2YgdGhlIGxlZ2VuZFxuICAgICAgaWYgKGNoYW5nZS5pbml0aWFsKSB7XG4gICAgICAgIGNoYW5nZS5pbml0aWFsID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICBjaGFuZ2UuaW5pdGlhbCxcbiAgICAgICAgICBnZXRMZWdlbmRUeXBlKGNoYW5nZS5pbml0aWFsLCByYXdJbmZvLnNWaXMudmlldylcbiAgICAgICAgKTtcblxuICAgICAgICBjaGFuZ2UuaW5pdGlhbC5kaXJlY3Rpb24gPSBjaGFuZ2UuaW5pdGlhbC5kaXJlY3Rpb24gfHwgXCJ2ZXJ0aWNhbFwiO1xuICAgICAgICBjaGFuZ2UuaW5pdGlhbC5vcmllbnQgPSBjaGFuZ2UuaW5pdGlhbC5vcmllbnQgfHwgXCJyaWdodFwiO1xuICAgICAgfVxuICAgICAgaWYgKGNoYW5nZS5maW5hbCkge1xuICAgICAgICBjaGFuZ2UuZmluYWwgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICAgIGNoYW5nZS5maW5hbCxcbiAgICAgICAgICBnZXRMZWdlbmRUeXBlKGNoYW5nZS5maW5hbCwgcmF3SW5mby5lVmlzLnZpZXcpXG4gICAgICAgICk7XG4gICAgICAgIGNoYW5nZS5maW5hbC5kaXJlY3Rpb24gPSBjaGFuZ2UuZmluYWwuZGlyZWN0aW9uIHx8IFwidmVydGljYWxcIjtcbiAgICAgICAgY2hhbmdlLmZpbmFsLm9yaWVudCA9IGNoYW5nZS5maW5hbC5vcmllbnQgfHwgXCJyaWdodFwiO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChzdGVwLmNvbXBUeXBlID09PSBcInZpZXdcIikge1xuICAgIGNoYW5nZS5zaWduYWwgPSBjaGFuZ2Uuc2lnbmFsID09PSB1bmRlZmluZWQgPyB0cnVlIDogY2hhbmdlLnNpZ25hbDtcbiAgfVxuICByZXR1cm4gY2hhbmdlO1xufVxuXG5cbmZ1bmN0aW9uIGF0dGFjaENoYW5nZXMocmF3SW5mbywgc2NoZWR1bGUpIHtcbiAgY29uc3QgY2hhbmdlcyA9IGdldENoYW5nZXMoXG4gICAgZ2V0Q29tcG9uZW50cyhyYXdJbmZvLnNWaXMuc3BlYyksXG4gICAgZ2V0Q29tcG9uZW50cyhyYXdJbmZvLmVWaXMuc3BlYylcbiAgKTtcblxuICAvLyBhdHRhY2ggdGhlIHZpZXcgY2hhbmdlXG4gIGNoYW5nZXMucHVzaChnZXRWaWV3Q2hhbmdlKHJhd0luZm8pKTtcblxuICBzY2hlZHVsZS5mb3JFYWNoKHRyYWNrID0+IHtcbiAgICB0cmFjay5zdGVwcyA9IHRyYWNrLnN0ZXBzLm1hcChzdGVwID0+IHtcbiAgICAgIGlmIChzdGVwLmNvbXBUeXBlID09PSBcInBhdXNlXCIpIHtcbiAgICAgICAgcmV0dXJuIHN0ZXA7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvdW5kID0gY2hhbmdlcy5maW5kKGNoYW5nZSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgY2hhbmdlLmNvbXBUeXBlID09PSBzdGVwLmNvbXBUeXBlICYmXG4gICAgICAgICAgKGNoYW5nZS5jb21wTmFtZSA9PT0gc3RlcC5jb21wTmFtZSB8fCBzdGVwLmNvbXBUeXBlID09PSBcInZpZXdcIilcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBjYW5ub3QgZm91bmQgdGhlIGNoYW5nZXMgb2YgJHtzdGVwLmNvbXBOYW1lfS5gKTtcbiAgICAgIH1cblxuICAgICAgc3RlcC5jaGFuZ2UgPSB7XG4gICAgICAgIC4uLnN0ZXAuY2hhbmdlLFxuICAgICAgICAuLi5mb3VuZFxuICAgICAgfTtcbiAgICAgIHN0ZXAuY2hhbmdlID0ge1xuICAgICAgICAuLi5zdGVwLmNoYW5nZSxcbiAgICAgICAgLi4uZ2V0RGVmYXVsdENoYW5nZShzdGVwLCByYXdJbmZvKVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHN0ZXA7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiBzY2hlZHVsZTtcbn1cblxuZXhwb3J0IHsgZ2V0Q29tcG9uZW50cywgZ2V0Q2hhbmdlcywgZ2V0Vmlld0NoYW5nZSwgZ2V0RGVmYXVsdENoYW5nZSwgYXR0YWNoQ2hhbmdlcyB9O1xuIiwiaW1wb3J0ICogYXMgdmVnYSBmcm9tIFwidmVnYVwiO1xuaW1wb3J0IHsgam9pbkRhdGEsIGluaXRpYWxEYXRhLCBnZXRBZ2dyZWdhdGUgfSBmcm9tIFwiLi9kYXRhSm9pblwiO1xuaW1wb3J0IHsgZmluZENvbXAgfSBmcm9tIFwiLi4vLi4vYWN0dWF0b3IvdXRpbFwiO1xuaW1wb3J0IHsgREVGQVVMVF9FTkNPREUsIERFRkFVTFRfU1RZTEUgfSBmcm9tIFwiLi4vLi4vZGVmYXVsdFwiO1xuaW1wb3J0ICogYXMgY29tcHV0ZVN0YXRlcyBmcm9tIFwiLi9jb21wdXRlXCI7XG5pbXBvcnQgeyBjb21wdXRlTmV3U3BlYywgRW51bWVyYXRvciB9IGZyb20gXCIuLi8uLi9lbnVtZXJhdG9yXCI7XG5pbXBvcnQgeyBjb3B5LCBnZXQgfSBmcm9tIFwiLi4vLi4vdXRpbC91dGlsXCI7XG5pbXBvcnQge1xuICBnZXRDb21wb25lbnRzLFxuICBnZXRWaWV3Q2hhbmdlLFxufSBmcm9tIFwiLi4vY2hhbmdlXCI7XG5pbXBvcnQge1xuICBjb21wdXRlSGFzRmFjZXQsXG4gIGlzR3JvdXBpbmdNYXJrdHlwZSxcbiAgZmluZE1hcmssXG4gIGZpbmRGaWx0ZXIsXG4gIGZpbmREYXRhXG59IGZyb20gXCIuL3V0aWxcIjtcblxuXG4vL1RvZG8gbWFrZSBzY2hlZHVsZSBjbGFzcyBhbmQgcHV0IHRoaXMgYXMgaXRzIG1ldGhvZFxuZnVuY3Rpb24gZ2V0TW9tZW50cyhzY2hlZHVsZSkge1xuICBjb25zdCBtb21lbnRzID0gW107XG4gIHNjaGVkdWxlLmZvckVhY2godHJhY2sgPT4ge1xuICAgIHRyYWNrLnN0ZXBzLmZvckVhY2goc3RlcCA9PiB7XG4gICAgICBsZXQgbSA9IG1vbWVudHMuZmluZChtID0+IG0udGltZSA9PT0gc3RlcC5zVGltZSk7XG4gICAgICBpZiAoIW0pIHtcbiAgICAgICAgbW9tZW50cy5wdXNoKHtcbiAgICAgICAgICB0aW1lOiBzdGVwLnNUaW1lLFxuICAgICAgICAgIHN0YXJ0aW5nOiBbc3RlcF0sXG4gICAgICAgICAgZW5kaW5nOiBbXVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG0uc3RhcnRpbmcucHVzaChzdGVwKTtcbiAgICAgIH1cbiAgICAgIG0gPSBtb21lbnRzLmZpbmQobSA9PiBtLnRpbWUgPT09IHN0ZXAuZVRpbWUpO1xuICAgICAgaWYgKCFtKSB7XG4gICAgICAgIG1vbWVudHMucHVzaCh7XG4gICAgICAgICAgdGltZTogc3RlcC5lVGltZSxcbiAgICAgICAgICBzdGFydGluZzogW10sXG4gICAgICAgICAgZW5kaW5nOiBbc3RlcF1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtLmVuZGluZy5wdXNoKHN0ZXApO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIG1vbWVudHMuc29ydCgoYSwgYikgPT4gYS50aW1lIC0gYi50aW1lKTtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNoU3RhdGVzKHNjaGVkdWxlLCByYXdJbmZvKSB7XG4gIGNvbnN0IHN0YXRlID0gaW5pdGlhbGl6ZVN0YXRlKHNjaGVkdWxlLCByYXdJbmZvKTtcbiAgY29uc3QgbW9tZW50cyA9IGdldE1vbWVudHMoc2NoZWR1bGUpO1xuICBzY2hlZHVsZS5tb21lbnRzID0gbW9tZW50cztcblxuICBtb21lbnRzLmZvckVhY2gobW9tZW50ID0+IHtcbiAgICBtb21lbnQuZW5kaW5nLmZvckVhY2goc3RlcCA9PiB7XG4gICAgICBjb25zdCBsYXN0U3RhdGUgPSBzdGF0ZVtzdGVwLnRyYWNrTmFtZV07XG4gICAgICBpZiAoc3RlcC5jb21wVHlwZSA9PT0gXCJwYXVzZVwiKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGFzdFN0YXRlLmRhdGEgPSBsYXN0U3RhdGUuZGF0YSB8fCBpbml0aWFsRGF0YShzdGVwLCByYXdJbmZvKTtcblxuICAgICAgLy8gV2hlbiB0aGUgc3RlcHMgYXJlIGVudW1lcmF0ZWQgYnkgXCJlbnVtZXJhdG9yXCJcbiAgICAgIGxldCBlVmlldztcbiAgICAgIGlmIChzdGVwLmVudW1lcmF0ZWQpIHtcbiAgICAgICAgc3RlcC5lbnVtZXJhdGVkLmZvckVhY2goZW51bWVkID0+IHtcbiAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBmaW5kRmlsdGVyKHN0YXRlLnNwZWMsIGVudW1lZC5kZWYuZmlsdGVyKTtcbiAgICAgICAgICBzdGF0ZS5zcGVjID0gY29tcHV0ZU5ld1NwZWMoc3RhdGUuc3BlYywgZmlsdGVyLCBlbnVtZWQudmFsKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVWaWV3ID0gbmV3IHZlZ2EuVmlldyh2ZWdhLnBhcnNlKHN0YXRlLnNwZWMpLCB7XG4gICAgICAgICAgcmVuZGVyZXI6IFwibm9uZVwiXG4gICAgICAgIH0pLnJ1bigpO1xuICAgICAgfVxuICAgICAgY29uc3QgbmV3UmF3SW5mbyA9IHtcbiAgICAgICAgc1ZpczogcmF3SW5mby5zVmlzLFxuICAgICAgICBlVmlzOiBPYmplY3QuYXNzaWduKFxuICAgICAgICAgIHt9LFxuICAgICAgICAgIHJhd0luZm8uZVZpcyxcbiAgICAgICAgICBlVmlldyA/IHsgdmlldzogZVZpZXcgfSA6IHVuZGVmaW5lZFxuICAgICAgICApXG4gICAgICB9O1xuICAgICAgaWYgKHN0ZXAuY29tcFR5cGUgPT09IFwidmlld1wiKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oc3RlcC5jaGFuZ2UsIGdldFZpZXdDaGFuZ2UobmV3UmF3SW5mbykpO1xuICAgICAgfVxuXG4gICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICBzdGVwLFxuICAgICAgICBjb21wdXRlU3RhdGVzW3N0ZXAuY29tcFR5cGVdKG5ld1Jhd0luZm8sIHN0ZXAsIGxhc3RTdGF0ZSlcbiAgICAgICk7XG4gICAgICBPYmplY3QuYXNzaWduKHN0ZXAsIGpvaW5EYXRhKHN0ZXAsIG5ld1Jhd0luZm8sIGxhc3RTdGF0ZS5kYXRhKSk7XG4gICAgICBsYXN0U3RhdGUuZGF0YSA9IHN0ZXAubmV4dERhdGE7XG5cbiAgICAgIGlmIChzdGVwLmVuY29kZXMpIHtcbiAgICAgICAgbGFzdFN0YXRlLmVuY29kZSA9XG4gICAgICAgICAgY29weShzdGVwLmVuY29kZXMuZmluYWwpIHx8XG4gICAgICAgICAgT2JqZWN0LmtleXMoc3RlcC5lbmNvZGVzKS5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICAgICAgICBhY2Nba2V5XSA9IHN0ZXAuZW5jb2Rlc1trZXldLmZpbmFsO1xuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICB9LCB7fSk7XG4gICAgICB9XG4gICAgICBsYXN0U3RhdGUuc3R5bGVFbmNvZGUgPSBzdGVwLnN0eWxlRW5jb2RlcyA/IHN0ZXAuc3R5bGVFbmNvZGVzLmZpbmFsIDogdW5kZWZpbmVkO1xuICAgICAgbGFzdFN0YXRlLnNpZ25hbCA9IHN0ZXAuc2lnbmFscyA/IHN0ZXAuc2lnbmFscy5maW5hbCA6IHVuZGVmaW5lZDtcbiAgICAgIGxhc3RTdGF0ZS5zY2FsZSA9IHN0ZXAuc2NhbGVzID8gc3RlcC5zY2FsZXMuZmluYWwgOiB1bmRlZmluZWQ7XG4gICAgICBsYXN0U3RhdGUubWFya3R5cGUgPSBzdGVwLm1hcmt0eXBlcyA/IHN0ZXAubWFya3R5cGVzLmZpbmFsIDogdW5kZWZpbmVkO1xuICAgICAgbGFzdFN0YXRlLmhhc0ZhY2V0ID0gc3RlcC5oYXNGYWNldCA/IHN0ZXAuaGFzRmFjZXQuZmluYWwgOiB1bmRlZmluZWQ7XG4gICAgICBsYXN0U3RhdGUuYWdncmVnYXRlID0gc3RlcC5hZ2dyZWdhdGVzID8gc3RlcC5hZ2dyZWdhdGVzLmZpbmFsIDogdW5kZWZpbmVkO1xuICAgICAgbGFzdFN0YXRlLmlzQWRkID0gc3RlcC5pc0FkZDtcbiAgICAgIGxhc3RTdGF0ZS5pc1JlbW92ZSA9IHN0ZXAuaXNSZW1vdmU7XG4gICAgICBsYXN0U3RhdGUuc2FtZURvbWFpbkRpbWVuc2lvbiA9IHN0ZXAuc2FtZURvbWFpbkRpbWVuc2lvbjtcblxuICAgICAgc3RhdGUuc3BlYyA9IHVwZGF0ZVNwZWMoc3RhdGUsIHN0ZXAsIG5ld1Jhd0luZm8uZVZpcy5zcGVjKTtcblxuICAgICAgLy8gQ2F0Y2ggaWYgc2NhbGUgPCBkYXRhIGZvciBlbmNvZGVzIHVzaW5nIHNjYWxlc1xuXG4gICAgICBpZiAoc3RlcC5jb21wVHlwZSA9PT0gXCJtYXJrXCIpIHtcbiAgICAgICAgbGV0IHZhbGlkID0gc2NoZWR1bGUuZmluZCh0cmFjayA9PiB0cmFjay5uYW1lID09PSBzdGVwLnRyYWNrTmFtZSlcbiAgICAgICAgICAuc2NhbGVPcmRlclZhbGlkO1xuICAgICAgICB2YWxpZCA9IHZhbGlkID09PSB1bmRlZmluZWQgPyB0cnVlIDogdmFsaWQ7XG5cbiAgICAgICAgT2JqZWN0LmtleXMobGFzdFN0YXRlLmVuY29kZS51cGRhdGUpLm1hcChwcm9wID0+IHtcbiAgICAgICAgICBjb25zdCBmb3VuZFNjYWxlID1cbiAgICAgICAgICAgIGxhc3RTdGF0ZS5zY2FsZVtsYXN0U3RhdGUuZW5jb2RlLnVwZGF0ZVtwcm9wXS5zY2FsZV07XG5cbiAgICAgICAgICBpZiAoZm91bmRTY2FsZSAmJiBsYXN0U3RhdGUuZW5jb2RlLnVwZGF0ZVtwcm9wXS5maWVsZCkge1xuICAgICAgICAgICAgY29uc3QgeyBmaWVsZCB9ID0gbGFzdFN0YXRlLmVuY29kZS51cGRhdGVbcHJvcF07XG4gICAgICAgICAgICBsZXQgdmFscyA9IGxhc3RTdGF0ZS5kYXRhLm1hcChkID0+IGQuZGF0dW1bZmllbGRdKTtcblxuICAgICAgICAgICAgaWYgKGxhc3RTdGF0ZS5kYXRhWzBdLm1hcmsubWFya3R5cGUgPT09IFwiZ3JvdXBcIikge1xuICAgICAgICAgICAgICB2YWxzID0gbGFzdFN0YXRlLmRhdGEucmVkdWNlKCh2YWxzLCBkKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHMuY29uY2F0KGQuaXRlbXNbMF0uaXRlbXMubWFwKGQyID0+IGQyLmRhdHVtW2ZpZWxkXSkpO1xuICAgICAgICAgICAgICB9LCBbXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNjYWxlRG9tYWluID0gZm91bmRTY2FsZS5kb21haW4oKTtcbiAgICAgICAgICAgIGlmIChmb3VuZFNjYWxlLnR5cGUgPT09IFwiYmFuZFwiIHx8IGZvdW5kU2NhbGUudHlwZSA9PT0gXCJwb2ludFwiKSB7XG4gICAgICAgICAgICAgIHZhbGlkID1cbiAgICAgICAgICAgICAgICB2YWxpZCAmJlxuICAgICAgICAgICAgICAgIHZhbHMucmVkdWNlKFxuICAgICAgICAgICAgICAgICAgKGFjYywgdikgPT4gKGFjYyA9IGFjYyAmJiBzY2FsZURvbWFpbi5pbmRleE9mKHYpID49IDApLFxuICAgICAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZvdW5kU2NhbGUudHlwZSA9PT0gXCJsaW5lYXJcIikge1xuICAgICAgICAgICAgICBjb25zdCBtYXggPSBNYXRoLm1heCguLi52YWxzKTtcbiAgICAgICAgICAgICAgY29uc3QgbWluID0gTWF0aC5taW4oLi4udmFscyk7XG4gICAgICAgICAgICAgIHZhbGlkID0gdmFsaWQgJiYgc2NhbGVEb21haW5bMF0gPD0gbWluICYmIHNjYWxlRG9tYWluWzFdID49IG1heDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBzY2hlZHVsZS5maW5kKFxuICAgICAgICAgIHRyYWNrID0+IHRyYWNrLm5hbWUgPT09IHN0ZXAudHJhY2tOYW1lXG4gICAgICAgICkuc2NhbGVPcmRlclZhbGlkID0gdmFsaWQ7XG4gICAgICB9XG4gICAgfSk7XG4gICAgbW9tZW50LnN0YXJ0aW5nLmZvckVhY2goc3RlcCA9PiB7XG4gICAgICBjb25zdCBsYXN0U3RhdGUgPSBzdGF0ZVtzdGVwLnRyYWNrTmFtZV07XG4gICAgICBpZiAoZ2V0KHN0ZXAsIFwiZW51bWVyYXRvclwiKSkge1xuICAgICAgICBpZiAoc3RlcC5jb21wVHlwZSA9PT0gXCJtYXJrXCIpIHtcbiAgICAgICAgICAvLyBmZXRjaCBlbnVtZXJhdG9yXG4gICAgICAgICAgc3RlcC5lbnVtZXJhdG9yRGVmID0gc3RlcC5lbnVtZXJhdG9yO1xuICAgICAgICAgIGNvbnN0IGVudW1lcmF0b3IgPSAoc3RlcC5lbnVtZXJhdG9yID0gbmV3IEVudW1lcmF0b3IoXG4gICAgICAgICAgICBzdGVwLmVudW1lcmF0b3IsXG4gICAgICAgICAgICBzdGF0ZS5zcGVjLFxuICAgICAgICAgICAgcmF3SW5mb1xuICAgICAgICAgICkpO1xuICAgICAgICAgIC8vIGxldCBkYXRhTmFtZSA9IChzdGVwLmNoYW5nZS5maW5hbCB8fCBzdGVwLmNoYW5nZS5maW5hbCkuZnJvbS5kYXRhO1xuICAgICAgICAgIGxldCBkYXRhTmFtZSA9IHN0ZXAuY29tcE5hbWU7XG5cbiAgICAgICAgICBsZXQga2V5ID1cbiAgICAgICAgICAgIChBcnJheS5pc0FycmF5KHN0ZXAuY2hhbmdlLmRhdGEpXG4gICAgICAgICAgICAgID8gc3RlcC5jaGFuZ2UuZGF0YVxuICAgICAgICAgICAgICA6IHN0ZXAuY2hhbmdlLmRhdGEua2V5cykgfHwgbnVsbDtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb21wdXRlSGFzRmFjZXQoc3RlcC5jaGFuZ2UuaW5pdGlhbCkgJiZcbiAgICAgICAgICAgIGNvbXB1dGVIYXNGYWNldChzdGVwLmNoYW5nZS5maW5hbClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGtleSA9IChzdGVwLmNoYW5nZS5maW5hbCB8fCBzdGVwLmNoYW5nZS5maW5hbCkucGFyZW50LmZyb20uZmFjZXRcbiAgICAgICAgICAgICAgLmdyb3VwYnk7XG4gICAgICAgICAgICBkYXRhTmFtZSA9IChzdGVwLmNoYW5nZS5maW5hbCB8fCBzdGVwLmNoYW5nZS5maW5hbCkucGFyZW50Lm5hbWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCBleHRyYWN0RGF0YSA9IHZpZXcgPT4gdmlldy5kYXRhKGRhdGFOYW1lKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhY29tcHV0ZUhhc0ZhY2V0KHN0ZXAuY2hhbmdlLmluaXRpYWwpICYmXG4gICAgICAgICAgICAhY29tcHV0ZUhhc0ZhY2V0KHN0ZXAuY2hhbmdlLmZpbmFsKSAmJlxuICAgICAgICAgICAgaXNHcm91cGluZ01hcmt0eXBlKHN0ZXAuY2hhbmdlLmluaXRpYWwpICYmXG4gICAgICAgICAgICBpc0dyb3VwaW5nTWFya3R5cGUoc3RlcC5jaGFuZ2UuZmluYWwpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBleHRyYWN0RGF0YSA9IHZpZXcgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBkYXRhID0gdmlldy5fcnVudGltZS5kYXRhW2RhdGFOYW1lXS52YWx1ZXMudmFsdWU7XG4gICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZGF0dW06IHt9LFxuICAgICAgICAgICAgICAgICAgbWFyazogeyByb2xlOiBcImdyb3VwXCIsIG1hcmt0eXBlOiBcImdyb3VwXCIgfSxcbiAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbeyBpdGVtczogZGF0YSB9XVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGVudW1lcmF0b3Iuam9pbkRhdGEoZXh0cmFjdERhdGEsIChkLCBpKSA9PiB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShrZXkpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBrZXlcbiAgICAgICAgICAgICAgICAubWFwKGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBkLmRhdHVtW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5qb2luKFwiLVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBDaGVjayBpZiBzY2FsZSA8IGRhdGFcbiAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGVudW1lcmF0b3Iuc3RvcE4gLSAxOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBzY2FsZSA9IHNjTmFtZSA9PiBsYXN0U3RhdGUuc2NhbGVbc2NOYW1lXTtcbiAgICAgICAgICAgIGlmIChzdGVwLmNoYW5nZS5zY2FsZSkge1xuICAgICAgICAgICAgICBzY2FsZSA9IGVudW1lcmF0b3IuX2dldFNjYWxlcyhpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBlbnVtZXJhdG9yLmdldERhdGEoaSk7XG4gICAgICAgICAgICBsZXQgdmFsaWQgPSBzY2hlZHVsZS5maW5kKHRyYWNrID0+IHRyYWNrLm5hbWUgPT09IHN0ZXAudHJhY2tOYW1lKVxuICAgICAgICAgICAgICAuc2NhbGVPcmRlclZhbGlkO1xuICAgICAgICAgICAgdmFsaWQgPSB2YWxpZCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHZhbGlkO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMobGFzdFN0YXRlLmVuY29kZS51cGRhdGUpLm1hcChwcm9wID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZm91bmRTY2FsZSA9IHNjYWxlKGxhc3RTdGF0ZS5lbmNvZGUudXBkYXRlW3Byb3BdLnNjYWxlKTtcblxuICAgICAgICAgICAgICBpZiAoZm91bmRTY2FsZSAmJiBsYXN0U3RhdGUuZW5jb2RlLnVwZGF0ZVtwcm9wXS5maWVsZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgZmllbGQgfSA9IGxhc3RTdGF0ZS5lbmNvZGUudXBkYXRlW3Byb3BdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjYWxlRG9tYWluID0gZm91bmRTY2FsZS5kb21haW4oKTtcbiAgICAgICAgICAgICAgICBsZXQgdmFscyA9IGRhdGEubWFwKGQgPT4gZFtmaWVsZF0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKGRhdGFbMF0ubWFyay5tYXJrdHlwZSA9PT0gXCJncm91cFwiKSB7XG4gICAgICAgICAgICAgICAgICB2YWxzID0gZGF0YS5yZWR1Y2UoKHZhbHMsIGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHMuY29uY2F0KFxuICAgICAgICAgICAgICAgICAgICAgIGQuaXRlbXNbMF0uaXRlbXMubWFwKGQyID0+IGQyLmRhdHVtW2ZpZWxkXSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH0sIFtdKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZm91bmRTY2FsZS50eXBlID09PSBcImJhbmRcIiB8fCBmb3VuZFNjYWxlLnR5cGUgPT09IFwicG9pbnRcIikge1xuICAgICAgICAgICAgICAgICAgdmFsaWQgPVxuICAgICAgICAgICAgICAgICAgICB2YWxpZCAmJlxuICAgICAgICAgICAgICAgICAgICB2YWxzLnJlZHVjZShcbiAgICAgICAgICAgICAgICAgICAgICAoYWNjLCB2KSA9PiAoYWNjID0gYWNjICYmIHNjYWxlRG9tYWluLmluZGV4T2YodikgPj0gMCksXG4gICAgICAgICAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm91bmRTY2FsZS50eXBlID09PSBcImxpbmVhclwiKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBtYXggPSBNYXRoLm1heCguLi52YWxzKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG1pbiA9IE1hdGgubWluKC4uLnZhbHMpO1xuICAgICAgICAgICAgICAgICAgdmFsaWQgPVxuICAgICAgICAgICAgICAgICAgICB2YWxpZCAmJiBzY2FsZURvbWFpblswXSA8PSBtaW4gJiYgc2NhbGVEb21haW5bMV0gPj0gbWF4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzY2hlZHVsZS5maW5kKFxuICAgICAgICAgICAgICB0cmFjayA9PiB0cmFjay5uYW1lID09PSBzdGVwLnRyYWNrTmFtZVxuICAgICAgICAgICAgKS5zY2FsZU9yZGVyVmFsaWQgPSB2YWxpZDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoc3RlcC5jb21wVHlwZSA9PT0gXCJheGlzXCIpIHtcbiAgICAgICAgICBzdGVwLmVudW1lcmF0b3JEZWYgPSBzdGVwLmVudW1lcmF0b3I7XG4gICAgICAgICAgc3RlcC5lbnVtZXJhdG9yID0gW1widGlja1wiLCBcImxhYmVsXCIsIFwiZ3JpZFwiXS5yZWR1Y2UoKGFjYywgc3ViQ29tcCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZW51bWVyYXRvciA9IG5ldyBFbnVtZXJhdG9yKFxuICAgICAgICAgICAgICBzdGVwLmVudW1lcmF0b3IsXG4gICAgICAgICAgICAgIHN0YXRlLnNwZWMsXG4gICAgICAgICAgICAgIHJhd0luZm9cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBzY05hbWUgPSBzdGVwLmNvbXBOYW1lO1xuICAgICAgICAgICAgZW51bWVyYXRvci5qb2luRGF0YShcbiAgICAgICAgICAgICAgdmlldyA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZpZXdcbiAgICAgICAgICAgICAgICAgIC5kYXRhKHNjTmFtZSlbMF1cbiAgICAgICAgICAgICAgICAgIC5pdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtLnJvbGUgPT09IGBheGlzLSR7c3ViQ29tcH1gKVswXVxuICAgICAgICAgICAgICAgICAgLml0ZW1zO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBkID0+IGQuZGF0dW0udmFsdWUudG9TdHJpbmcoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGFjY1tzdWJDb21wXSA9IGVudW1lcmF0b3I7XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGVwLmNvbXBUeXBlID09PSBcImxlZ2VuZFwiKSB7XG4gICAgICAgICAgc3RlcC5lbnVtZXJhdG9yRGVmID0gc3RlcC5lbnVtZXJhdG9yO1xuICAgICAgICAgIGxldCBsZWdlbmRFbnVtRGVmcyA9IFtdO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHN0ZXAuY2hhbmdlLmluaXRpYWwudHlwZSA9PT0gXCJncmFkaWVudFwiICYmXG4gICAgICAgICAgICBzdGVwLmNoYW5nZS5pbml0aWFsLnR5cGUgPT09IFwiZ3JhZGllbnRcIlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc3Qgc3ViQ29tcHMgPSBzdGVwLmNoYW5nZS5pbml0aWFsLmlzQmFuZFxuICAgICAgICAgICAgICA/IFtcImJhbmRzXCIsIFwibGFiZWxzXCJdXG4gICAgICAgICAgICAgIDogW1wibGFiZWxzXCJdO1xuICAgICAgICAgICAgbGVnZW5kRW51bURlZnMgPSBzdWJDb21wcy5tYXAoc3ViQ29tcCA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc3ViQ29tcCxcbiAgICAgICAgICAgICAgICBleHRyYWN0RGF0YTogdmlldyA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBlbnRyeUcgPSB2aWV3Ll9ydW50aW1lLmRhdGFbXG4gICAgICAgICAgICAgICAgICAgIHN0ZXAuY29tcE5hbWVcbiAgICAgICAgICAgICAgICAgIF0udmFsdWVzLnZhbHVlWzBdLml0ZW1zLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0gPT4gaXRlbS5yb2xlID09PSBcImxlZ2VuZC1lbnRyeVwiXG4gICAgICAgICAgICAgICAgICApLml0ZW1zWzBdO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5Ry5pdGVtcy5maW5kKFxuICAgICAgICAgICAgICAgICAgICBpdGVtID0+IGl0ZW0ucm9sZSA9PT0gYGxlZ2VuZC0ke3N1YkNvbXAucmVwbGFjZSgvcyQvZywgXCJcIil9YFxuICAgICAgICAgICAgICAgICAgKS5pdGVtcztcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGlkZW50aWZ5RGF0dW06IGQgPT4gZC5kYXR1bS52YWx1ZS50b1N0cmluZygpXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgc3RlcC5jaGFuZ2UuaW5pdGlhbC50eXBlID09PSBcInN5bWJvbFwiICYmXG4gICAgICAgICAgICBzdGVwLmNoYW5nZS5pbml0aWFsLnR5cGUgPT09IFwic3ltYm9sXCJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGxlZ2VuZEVudW1EZWZzLnB1c2goe1xuICAgICAgICAgICAgICBzdWJDb21wOiBcInBhaXJzXCIsXG4gICAgICAgICAgICAgIGV4dHJhY3REYXRhOiB2aWV3ID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmlldy5fcnVudGltZS5kYXRhW1xuICAgICAgICAgICAgICAgICAgc3RlcC5jb21wTmFtZVxuICAgICAgICAgICAgICAgIF0udmFsdWVzLnZhbHVlWzBdLml0ZW1zLmZpbmQoXG4gICAgICAgICAgICAgICAgICBpdGVtID0+IGl0ZW0ucm9sZSA9PT0gXCJsZWdlbmQtZW50cnlcIlxuICAgICAgICAgICAgICAgICkuaXRlbXNbMF0uaXRlbXNbMF0uaXRlbXM7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGlkZW50aWZ5RGF0dW06IGQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0dW0gfSA9IGQuaXRlbXMuZmluZChcbiAgICAgICAgICAgICAgICAgIGl0ZW0gPT4gaXRlbS5yb2xlID09PSBcImxlZ2VuZC1sYWJlbFwiXG4gICAgICAgICAgICAgICAgKS5pdGVtc1swXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0dW0udmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGxlZ2VuZEVudW1EZWZzLnB1c2goe1xuICAgICAgICAgICAgICBzdWJDb21wOiBcImxhYmVsc1wiLFxuICAgICAgICAgICAgICBleHRyYWN0RGF0YTogdmlldyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFpcnMgPSB2aWV3Ll9ydW50aW1lLmRhdGFbXG4gICAgICAgICAgICAgICAgICBzdGVwLmNvbXBOYW1lXG4gICAgICAgICAgICAgICAgXS52YWx1ZXMudmFsdWVbMF0uaXRlbXMuZmluZChcbiAgICAgICAgICAgICAgICAgIGl0ZW0gPT4gaXRlbS5yb2xlID09PSBcImxlZ2VuZC1lbnRyeVwiXG4gICAgICAgICAgICAgICAgKS5pdGVtc1swXS5pdGVtc1swXS5pdGVtcztcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFpcnMubWFwKHBhaXIgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhaXIuaXRlbXMuZmluZChpdGVtID0+IGl0ZW0ucm9sZSA9PT0gXCJsZWdlbmQtbGFiZWxcIilcbiAgICAgICAgICAgICAgICAgICAgLml0ZW1zWzBdO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBpZGVudGlmeURhdHVtOiBkID0+IGQuZGF0dW0udmFsdWUudG9TdHJpbmcoKVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGxlZ2VuZEVudW1EZWZzLnB1c2goe1xuICAgICAgICAgICAgICBzdWJDb21wOiBcInN5bWJvbHNcIixcbiAgICAgICAgICAgICAgZXh0cmFjdERhdGE6IHZpZXcgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhaXJzID0gdmlldy5fcnVudGltZS5kYXRhW1xuICAgICAgICAgICAgICAgICAgc3RlcC5jb21wTmFtZVxuICAgICAgICAgICAgICAgIF0udmFsdWVzLnZhbHVlWzBdLml0ZW1zLmZpbmQoXG4gICAgICAgICAgICAgICAgICBpdGVtID0+IGl0ZW0ucm9sZSA9PT0gXCJsZWdlbmQtZW50cnlcIlxuICAgICAgICAgICAgICAgICkuaXRlbXNbMF0uaXRlbXNbMF0uaXRlbXM7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhaXJzLm1hcChwYWlyID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBwYWlyLml0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnJvbGUgPT09IFwibGVnZW5kLXN5bWJvbFwiKVxuICAgICAgICAgICAgICAgICAgICAuaXRlbXNbMF07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGlkZW50aWZ5RGF0dW06IGQgPT4gZC5kYXR1bS52YWx1ZS50b1N0cmluZygpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJDYW5ub3QgZW51bWVyYXRlIHRoZSBjaGFuZ2VzIHdoZW4gdGhlIGxlZ2VuZCB0eXBlIGNoYW5nZXMuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHN0ZXAuZW51bWVyYXRvciA9IGxlZ2VuZEVudW1EZWZzLnJlZHVjZSgoYWNjLCBlbnVtRGVmKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbnVtZXJhdG9yID0gbmV3IEVudW1lcmF0b3IoXG4gICAgICAgICAgICAgIHN0ZXAuZW51bWVyYXRvcixcbiAgICAgICAgICAgICAgc3RhdGUuc3BlYyxcbiAgICAgICAgICAgICAgcmF3SW5mb1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGVudW1lcmF0b3Iuam9pbkRhdGEoZW51bURlZi5leHRyYWN0RGF0YSwgZW51bURlZi5pZGVudGlmeURhdHVtKTtcbiAgICAgICAgICAgIGFjY1tlbnVtRGVmLnN1YkNvbXBdID0gZW51bWVyYXRvcjtcbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgfSwge30pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiBzY2hlZHVsZTtcbn1cblxuZnVuY3Rpb24gaW5pdGlhbGl6ZVN0YXRlKHNjaGVkdWxlLCByYXdJbmZvKSB7XG4gIGNvbnN0IHNWaWV3ID0gcmF3SW5mby5zVmlzLnZpZXc7XG4gIGNvbnN0IHNTcGVjID0gcmF3SW5mby5zVmlzLnNwZWM7XG4gIGNvbnN0IHNDb21wcyA9IGdldENvbXBvbmVudHMoc1NwZWMpO1xuICBjb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gICAgc3BlYzogY29weShzU3BlYylcbiAgfTtcbiAgcmV0dXJuIHNjaGVkdWxlLnJlZHVjZSgoaW5pdGlhbFN0YXRlLCB0cmFjaykgPT4ge1xuICAgIC8vIFRvZG86IHNvbWUgc2NhbGVzIGNhbiBiZSBoaWRkZW4gaW4gX3J1bnRpbWUuX3N1YmNvbnRleHRcbiAgICBjb25zdCBjb21wU3RhdGUgPSB7XG4gICAgICBzY2FsZToge30sXG4gICAgICBzaWduYWw6IHtcbiAgICAgICAgd2lkdGg6IHNWaWV3LnNpZ25hbChcIndpZHRoXCIpLFxuICAgICAgICBoZWlnaHQ6IHNWaWV3LnNpZ25hbChcImhlaWdodFwiKSxcbiAgICAgICAgcGFkZGluZzogc1ZpZXcuc2lnbmFsKFwicGFkZGluZ1wiKVxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAodHJhY2suY29tcFR5cGUgPT09IFwibWFya1wiKSB7XG4gICAgICBjb25zdCBzQ29tcCA9IHNDb21wcy5maW5kKGMgPT4gYy5uYW1lID09PSB0cmFjay5jb21wTmFtZSk7XG5cbiAgICAgIGlmIChzQ29tcCkge1xuICAgICAgICBjb21wU3RhdGUubWFya3R5cGUgPSBzQ29tcC50eXBlO1xuICAgICAgICBjb21wU3RhdGUuaGFzRmFjZXQgPSBjb21wdXRlSGFzRmFjZXQoc0NvbXApO1xuICAgICAgICBjb21wU3RhdGUuc3R5bGVFbmNvZGUgPSBzQ29tcC5zdHlsZSA/IERFRkFVTFRfU1RZTEVbc0NvbXAuc3R5bGVdIDoge307XG5cbiAgICAgICAgY29tcFN0YXRlLmVuY29kZSA9IGNvcHkoc0NvbXAuZW5jb2RlIHx8IHt9KTtcbiAgICAgICAgY29uc3QgYmFzZUVuY29kZSA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAge30sXG4gICAgICAgICAgREVGQVVMVF9FTkNPREUubWFya1tjb21wU3RhdGUubWFya3R5cGVdLnVwZGF0ZSxcbiAgICAgICAgICBzQ29tcC5zdHlsZSA/IERFRkFVTFRfU1RZTEVbc0NvbXAuc3R5bGVdIDoge31cbiAgICAgICAgKTtcbiAgICAgICAgY29tcFN0YXRlLmVuY29kZS51cGRhdGUgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICAgIGJhc2VFbmNvZGUsXG4gICAgICAgICAgY29tcFN0YXRlLmVuY29kZS51cGRhdGVcbiAgICAgICAgKTtcbiAgICAgICAgY29tcFN0YXRlLmVuY29kZS5leGl0ID0gY29weShjb21wU3RhdGUuZW5jb2RlLnVwZGF0ZSk7XG4gICAgICAgIGNvbXBTdGF0ZS5lbmNvZGUuZW50ZXIgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICAgIHt9LFxuICAgICAgICAgIGNvbXBTdGF0ZS5lbmNvZGUudXBkYXRlLFxuICAgICAgICAgIERFRkFVTFRfRU5DT0RFLm1hcmsuZW50ZXJcbiAgICAgICAgKTtcblxuICAgICAgICBzQ29tcHNcbiAgICAgICAgICAuZmlsdGVyKGNvbXAgPT4gY29tcC5jb21wVHlwZSA9PT0gXCJzY2FsZVwiKVxuICAgICAgICAgIC5mb3JFYWNoKHNjYWxlID0+IHtcbiAgICAgICAgICAgIGNvbXBTdGF0ZS5zY2FsZVtzY2FsZS5uYW1lXSA9IHNWaWV3LnNjYWxlKHNjYWxlLm5hbWUpO1xuICAgICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29tcFN0YXRlLmVuY29kZSA9IHt9O1xuICAgICAgICBjb21wU3RhdGUuc3R5bGVFbmNvZGUgPSB7fTtcbiAgICAgIH1cbiAgICAgIGNvbXBTdGF0ZS5hZ2dyZWdhdGUgPSBnZXRBZ2dyZWdhdGUoXG4gICAgICAgIHRyYWNrLnN0ZXBzWzBdLmNoYW5nZSxcbiAgICAgICAgcmF3SW5mb1xuICAgICAgKS5pbml0aWFsO1xuICAgICAgLy8gY29tcFN0YXRlLmFnZ3JlZ2F0ZS5kb25lID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmICh0cmFjay5jb21wVHlwZSA9PT0gXCJheGlzXCIpIHtcbiAgICAgIC8vIGZvciBheGlzIGNvbXBcbiAgICAgIGNvbnN0IHNDb21wID0gc0NvbXBzLmZpbmQoXG4gICAgICAgIGMgPT4gYy5jb21wVHlwZSA9PT0gXCJheGlzXCIgJiYgYy5lbmNvZGUuYXhpcy5uYW1lID09PSB0cmFjay5jb21wTmFtZVxuICAgICAgKTtcblxuICAgICAgaWYgKHRyYWNrLnN0ZXBzWzBdLmNoYW5nZS5pbml0aWFsKSB7XG4gICAgICAgIGNvbXBTdGF0ZS5zY2FsZVtzQ29tcC5zY2FsZV0gPSBzVmlldy5zY2FsZShzQ29tcC5zY2FsZSk7XG4gICAgICB9XG5cbiAgICAgIGNvbXBTdGF0ZS5lbmNvZGUgPSBzQ29tcCA/IGNvcHkoc0NvbXAuZW5jb2RlIHx8IHt9KSA6IHt9O1xuICAgICAgY29uc3QgYXhpc0dEYXR1bUluaXRpYWwgPSBzQ29tcFxuICAgICAgICA/IGZpbmRDb21wKHNWaWV3LnNjZW5lZ3JhcGgoKS5yb290LCB0cmFjay5jb21wTmFtZSwgXCJheGlzXCIpWzBdLml0ZW1zWzBdXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgY29tcFN0YXRlLmVuY29kZS5heGlzID0gYXhpc0dEYXR1bUluaXRpYWxcbiAgICAgICAgPyB7XG4gICAgICAgICAgdXBkYXRlOiB7XG4gICAgICAgICAgICB4OiB7IHZhbHVlOiBheGlzR0RhdHVtSW5pdGlhbC54IH0sXG4gICAgICAgICAgICB5OiB7IHZhbHVlOiBheGlzR0RhdHVtSW5pdGlhbC55IH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgOiB7fTtcbiAgICB9IGVsc2UgaWYgKHRyYWNrLmNvbXBUeXBlID09PSBcImxlZ2VuZFwiKSB7XG4gICAgICAvLyBmb3IgYXhpcyBjb21wXG5cbiAgICAgIGNvbnN0IHNDb21wID0gc0NvbXBzLmZpbmQoXG4gICAgICAgIGMgPT4gYy5jb21wVHlwZSA9PT0gXCJsZWdlbmRcIiAmJiBjLmVuY29kZS5sZWdlbmQubmFtZSA9PT0gdHJhY2suY29tcE5hbWVcbiAgICAgICk7XG4gICAgICBjb21wU3RhdGUubGVnZW5kVHlwZSA9IHVuZGVmaW5lZDtcbiAgICAgIGlmICh0cmFjay5zdGVwc1swXS5jaGFuZ2UuaW5pdGlhbCkge1xuICAgICAgICBjb21wU3RhdGUubGVnZW5kVHlwZSA9IHRyYWNrLnN0ZXBzWzBdLmNoYW5nZS5pbml0aWFsLnR5cGU7XG4gICAgICAgIFtcbiAgICAgICAgICBcImZpbGxcIixcbiAgICAgICAgICBcIm9wYWNpdHlcIixcbiAgICAgICAgICBcInNoYXBlXCIsXG4gICAgICAgICAgXCJzaXplXCIsXG4gICAgICAgICAgXCJzdHJva2VcIixcbiAgICAgICAgICBcInN0cm9rZURhc2hcIixcbiAgICAgICAgICBcInN0cm9rZVdpZHRoXCJcbiAgICAgICAgXS5mb3JFYWNoKGNoYW5uZWwgPT4ge1xuICAgICAgICAgIGNvbnN0IHNjTmFtZSA9IHRyYWNrLnN0ZXBzWzBdLmNoYW5nZS5pbml0aWFsW2NoYW5uZWxdO1xuICAgICAgICAgIGlmIChzY05hbWUpIHtcbiAgICAgICAgICAgIGNvbXBTdGF0ZS5zY2FsZVtzY05hbWVdID0gc1ZpZXcuc2NhbGUoc2NOYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBjb21wU3RhdGUuZW5jb2RlID0gc0NvbXAgPyBjb3B5KHNDb21wLmVuY29kZSB8fCB7fSkgOiB7fTtcbiAgICB9IGVsc2UgaWYgKHRyYWNrLmNvbXBUeXBlID09PSBcInZpZXdcIikge1xuICAgICAgY29uc3QgaVJvb3REYXR1bSA9IHNWaWV3Ll9ydW50aW1lLmRhdGEucm9vdC52YWx1ZXMudmFsdWVbMF07XG4gICAgICBjb25zdCB7IGluaXRpYWwgfSA9IHRyYWNrLnN0ZXBzWzBdLmNoYW5nZTtcbiAgICAgIGNvbXBTdGF0ZS5lbmNvZGUgPSB7XG4gICAgICAgIHN2Zzoge1xuICAgICAgICAgIHg6IHsgdmFsdWU6IGluaXRpYWwueCArIGluaXRpYWwucGFkZGluZyB9LFxuICAgICAgICAgIHk6IHsgdmFsdWU6IGluaXRpYWwueSArIGluaXRpYWwucGFkZGluZyB9LFxuICAgICAgICAgIHdpZHRoOiB7IHZhbHVlOiBpbml0aWFsLnZpZXdXaWR0aCArIGluaXRpYWwucGFkZGluZyAqIDIgfSxcbiAgICAgICAgICBoZWlnaHQ6IHsgdmFsdWU6IGluaXRpYWwudmlld0hlaWdodCArIGluaXRpYWwucGFkZGluZyAqIDIgfVxuICAgICAgICB9LFxuICAgICAgICByb290OiB7XG4gICAgICAgICAgd2lkdGg6IHsgdmFsdWU6IGluaXRpYWwud2lkdGggfSxcbiAgICAgICAgICBoZWlnaHQ6IHsgdmFsdWU6IGluaXRpYWwuaGVpZ2h0IH0sXG4gICAgICAgICAgZmlsbDogeyB2YWx1ZTogaVJvb3REYXR1bS5maWxsIH0sXG4gICAgICAgICAgc3Ryb2tlOiB7IHZhbHVlOiBpUm9vdERhdHVtLnN0cm9rZSB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIGluaXRpYWxTdGF0ZVt0cmFjay5uYW1lXSA9IGNvbXBTdGF0ZTtcbiAgICByZXR1cm4gaW5pdGlhbFN0YXRlO1xuICB9LCBpbml0aWFsU3RhdGUpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTcGVjKGxhc3RTdGF0ZSwgbGFzdFN0ZXAsIGVTcGVjKSB7XG4gIGNvbnN0IHVwZGF0ZWRTcGVjID0gY29weShsYXN0U3RhdGUuc3BlYyk7XG4gIGlmIChsYXN0U3RlcC5jb21wVHlwZSA9PT0gXCJtYXJrXCIpIHtcbiAgICBjb25zdCBsYXN0TWFya0NvbXAgPSBsYXN0U3RlcC5jaGFuZ2UuZmluYWw7XG4gICAgLy8gSWYgdGhlIG1hcmtDb21wIGlzIGZhY2V0dGVkLCBpdHMgcGFyZW50IG1hcmsgc2hvdWxkIGJlIHVwZGF0ZWQuXG4gICAgY29uc3QgY29tcE5hbWUgPSBjb21wdXRlSGFzRmFjZXQobGFzdE1hcmtDb21wKVxuICAgICAgPyBsYXN0TWFya0NvbXAucGFyZW50Lm5hbWVcbiAgICAgIDogbGFzdFN0ZXAuY29tcE5hbWU7XG4gICAgaWYgKCFsYXN0TWFya0NvbXAgJiYgY29tcE5hbWUgJiYgbGFzdFN0ZXAuY2hhbmdlLmRhdGEpIHtcbiAgICAgIC8vIFJlbW92ZSB0aGUgbWFya1xuICAgICAgY29uc3Qgb2xkID0gdXBkYXRlZFNwZWMubWFya3MuZmluZEluZGV4KG1hcmsgPT4gbWFyay5uYW1lID09PSBjb21wTmFtZSk7XG4gICAgICB1cGRhdGVkU3BlYy5tYXJrcy5zcGxpY2Uob2xkLCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgb2xkID0gZmluZE1hcmsodXBkYXRlZFNwZWMubWFya3MsIGNvbXBOYW1lKTtcbiAgICAgIGlmICghb2xkKSB7XG4gICAgICAgIHVwZGF0ZWRTcGVjLm1hcmtzLnB1c2goZmluZE1hcmsoZVNwZWMubWFya3MsIGNvbXBOYW1lKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBkYXRhTmFtZSA9IGNvbXB1dGVIYXNGYWNldChsYXN0TWFya0NvbXApXG4gICAgICAgICAgPyBsYXN0TWFya0NvbXAucGFyZW50LmZyb20uZmFjZXQuZGF0YVxuICAgICAgICAgIDogbGFzdE1hcmtDb21wLmZyb20uZGF0YTtcbiAgICAgICAgaWYgKGxhc3RTdGVwLmNoYW5nZS5kYXRhKSB7XG4gICAgICAgICAgLy8gdXBkYXRlIGRhdGEgc291cmNlXG4gICAgICAgICAgY29uc3Qgb2xkID0gdXBkYXRlZFNwZWMuZGF0YS5maW5kSW5kZXgoXG4gICAgICAgICAgICBkYXRhID0+IGRhdGEubmFtZSA9PT0gZGF0YU5hbWVcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChvbGQgPj0gMCkge1xuICAgICAgICAgICAgdXBkYXRlZFNwZWMuZGF0YS5zcGxpY2Uob2xkLCAxLCBjb3B5KGZpbmREYXRhKGVTcGVjLCBkYXRhTmFtZSkpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbmV3SSA9IGVTcGVjLmRhdGEuZmluZEluZGV4KGRhdGEgPT4gZGF0YS5uYW1lID09PSBkYXRhTmFtZSk7XG4gICAgICAgICAgICB1cGRhdGVkU3BlYy5kYXRhLnNwbGljZShuZXdJLCAwLCBjb3B5KGZpbmREYXRhKGVTcGVjLCBkYXRhTmFtZSkpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb2xkLmVuY29kZS51cGRhdGUgPSBsYXN0U3RhdGVbbGFzdFN0ZXAudHJhY2tOYW1lXS5lbmNvZGUudXBkYXRlO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChsYXN0U3RlcC5jb21wVHlwZSA9PT0gXCJheGlzXCIpIHtcbiAgICAvLyBjb25zb2xlLmxvZyhsYXN0U3RlcC5jb21wTmFtZSk7XG4gICAgY29uc3Qgb2xkID0gdXBkYXRlZFNwZWMuYXhlcy5maW5kSW5kZXgoXG4gICAgICBheGlzID0+XG4gICAgICAgIGF4aXMuZW5jb2RlICYmXG4gICAgICAgIGF4aXMuZW5jb2RlLmF4aXMgJiZcbiAgICAgICAgYXhpcy5lbmNvZGUuYXhpcy5uYW1lID09PSBsYXN0U3RlcC5jb21wTmFtZVxuICAgICk7XG4gICAgaWYgKG9sZCA+PSAwKSB7XG4gICAgICB1cGRhdGVkU3BlYy5heGVzLnNwbGljZShvbGQsIDEpO1xuICAgIH1cbiAgICBsZXQgbmV3QXhpcztcbiAgICBpZiAoXG4gICAgICAobmV3QXhpcyA9IGVTcGVjLmF4ZXMuZmluZChcbiAgICAgICAgYXhpcyA9PlxuICAgICAgICAgIGF4aXMuZW5jb2RlICYmXG4gICAgICAgICAgYXhpcy5lbmNvZGUuYXhpcyAmJlxuICAgICAgICAgIGF4aXMuZW5jb2RlLmF4aXMubmFtZSA9PT0gbGFzdFN0ZXAuY29tcE5hbWVcbiAgICAgICkpXG4gICAgKSB7XG4gICAgICB1cGRhdGVkU3BlYy5heGVzLnB1c2gobmV3QXhpcyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGxhc3RTdGVwLmNvbXBUeXBlID09PSBcImxlZ2VuZFwiKSB7XG4gICAgY29uc3Qgb2xkID0gdXBkYXRlZFNwZWMubGVnZW5kc1xuICAgICAgPyB1cGRhdGVkU3BlYy5sZWdlbmRzLmZpbmRJbmRleChcbiAgICAgICAgbGVnZW5kID0+XG4gICAgICAgICAgbGVnZW5kLmVuY29kZSAmJlxuICAgICAgICAgICAgbGVnZW5kLmVuY29kZS5sZWdlbmQgJiZcbiAgICAgICAgICAgIGxlZ2VuZC5lbmNvZGUubGVnZW5kLm5hbWUgPT09IGxhc3RTdGVwLmNvbXBOYW1lXG4gICAgICApXG4gICAgICA6IC0xO1xuICAgIGlmIChvbGQgPj0gMCkge1xuICAgICAgdXBkYXRlZFNwZWMubGVnZW5kcy5zcGxpY2Uob2xkLCAxKTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdMZWdlbmQgPSBlU3BlYy5sZWdlbmRzXG4gICAgICA/IGVTcGVjLmxlZ2VuZHMuZmluZChcbiAgICAgICAgbGVnZW5kID0+XG4gICAgICAgICAgbGVnZW5kLmVuY29kZSAmJlxuICAgICAgICAgICAgbGVnZW5kLmVuY29kZS5sZWdlbmQgJiZcbiAgICAgICAgICAgIGxlZ2VuZC5lbmNvZGUubGVnZW5kLm5hbWUgPT09IGxhc3RTdGVwLmNvbXBOYW1lXG4gICAgICApXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBpZiAobmV3TGVnZW5kKSB7XG4gICAgICBpZiAodXBkYXRlZFNwZWMubGVnZW5kcykge1xuICAgICAgICB1cGRhdGVkU3BlYy5sZWdlbmRzLnB1c2gobmV3TGVnZW5kKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVwZGF0ZWRTcGVjLmxlZ2VuZHMgPSBbbmV3TGVnZW5kXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVwZGF0ZWRTcGVjO1xufSIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS92ZWdhL3ZlZ2EvYmxvYi9tYXN0ZXIvcGFja2FnZXMvdmVnYS1zY2VuZWdyYXBoL3NyYy91dGlsL3RleHQuanNcbmZ1bmN0aW9uIHRleHRPZmZzZXQoaXRlbSkge1xuICAvLyBwZXJmb3JtIG91ciBvd24gZm9udCBiYXNlbGluZSBjYWxjdWxhdGlvblxuICAvLyB3aHk/IG5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCBTVkcgMS4xICdhbGlnbm1lbnQtYmFzZWxpbmUnIDooXG4gIGNvbnN0IHsgYmFzZWxpbmUgfSA9IGl0ZW07XG4gIGNvbnN0IGggPSBmb250U2l6ZShpdGVtKTtcbiAgc3dpdGNoIChiYXNlbGluZSkge1xuICBjYXNlIFwidG9wXCI6XG4gICAgcmV0dXJuIDAuNzkgKiBoO1xuICBjYXNlIFwibWlkZGxlXCI6XG4gICAgcmV0dXJuIDAuMyAqIGg7XG4gIGNhc2UgXCJib3R0b21cIjpcbiAgICByZXR1cm4gLTAuMjEgKiBoO1xuICBjYXNlIFwibGluZS10b3BcIjpcbiAgICByZXR1cm4gMC4yOSAqIGggKyAwLjUgKiBsaW5lSGVpZ2h0KGl0ZW0pO1xuICBjYXNlIFwibGluZS1ib3R0b21cIjpcbiAgICByZXR1cm4gMC4yOSAqIGggLSAwLjUgKiBsaW5lSGVpZ2h0KGl0ZW0pO1xuICBkZWZhdWx0OlxuICAgIHJldHVybiAwO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvbnRTaXplKGl0ZW0pIHtcbiAgcmV0dXJuIGl0ZW0uZm9udFNpemUgIT0gbnVsbCA/ICtpdGVtLmZvbnRTaXplIHx8IDAgOiAxMTtcbn1cblxuZnVuY3Rpb24gbGluZUhlaWdodChpdGVtKSB7XG4gIHJldHVybiBpdGVtLmxpbmVIZWlnaHQgIT0gbnVsbCA/IGl0ZW0ubGluZUhlaWdodCA6IGZvbnRTaXplKGl0ZW0pICsgMjtcbn1cblxuZnVuY3Rpb24gZ2V0U3R5bGUoYXR0cikge1xuICBzd2l0Y2ggKGF0dHIpIHtcbiAgY2FzZSBcImZvbnRcIjpcbiAgICByZXR1cm4gXCJmb250LWZhbWlseVwiO1xuICBjYXNlIFwiZm9udFNpemVcIjpcbiAgICByZXR1cm4gXCJmb250LXNpemVcIjtcbiAgY2FzZSBcImZvbnRTdHlsZVwiOlxuICAgIHJldHVybiBcImZvbnQtc3R5bGVcIjtcbiAgY2FzZSBcImZvbnRWYXJpYW50XCI6XG4gICAgcmV0dXJuIFwiZm9udC12YXJpYW50XCI7XG4gIGNhc2UgXCJmb250V2VpZ2h0XCI6XG4gICAgcmV0dXJuIFwiZm9udC13ZWlnaHRcIjtcbiAgY2FzZSBcInN0cm9rZVdpZHRoXCI6XG4gICAgcmV0dXJuIFwic3Ryb2tlLXdpZHRoXCI7XG4gIGNhc2UgXCJzdHJva2VEYXNoYXJyYXlcIjpcbiAgICByZXR1cm4gXCJzdHJva2UtZGFzaGFycmF5XCI7XG4gIH1cbiAgcmV0dXJuIGF0dHI7XG59XG5cbmZ1bmN0aW9uIHNldFRleHRBbmNob3IoZDNTZWxlY3Rpb24sIGZuKSB7XG4gIGNvbnN0IHRleHRBbmNob3IgPSB7XG4gICAgbGVmdDogXCJzdGFydFwiLFxuICAgIGNlbnRlcjogXCJtaWRkbGVcIixcbiAgICByaWdodDogXCJlbmRcIlxuICB9O1xuICBkM1NlbGVjdGlvbi5hdHRyKFwidGV4dC1hbmNob3JcIiwgZCA9PiB0ZXh0QW5jaG9yW2ZuKGQpXSk7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybUl0ZW0oaXRlbSkge1xuICByZXR1cm4gYHRyYW5zbGF0ZSgke2l0ZW0ueCB8fCAwfSwgJHtpdGVtLnkgfHwgMH0pJHtcbiAgICBpdGVtLmFuZ2xlID8gYCByb3RhdGUoJHtpdGVtLmFuZ2xlfSlgIDogXCJcIlxuICB9YDtcbn1cblxuZXhwb3J0IHsgdGV4dE9mZnNldCwgZ2V0U3R5bGUsIHNldFRleHRBbmNob3IsIHRyYW5zZm9ybUl0ZW0gfTtcbiIsImltcG9ydCAqIGFzIGQzIGZyb20gXCJkM1wiO1xuLy8gTW9kaWZ5IGQzLWludGVycG9sYXRlLXBhdGggKGh0dHBzOi8vZ2l0aHViLmNvbS9wYmVzaGFpL2QzLWludGVycG9sYXRlLXBhdGgpIHBhY2thZ2UgYnkgKiouXG5cbi8qKlxuICogTGlzdCBvZiBwYXJhbXMgZm9yIGVhY2ggY29tbWFuZCB0eXBlIGluIGEgcGF0aCBgZGAgYXR0cmlidXRlXG4gKi9cbmNvbnN0IHR5cGVNYXAgPSB7XG4gIE06IFtcInhcIiwgXCJ5XCJdLFxuICBMOiBbXCJ4XCIsIFwieVwiXSxcbiAgSDogW1wieFwiXSxcbiAgVjogW1wieVwiXSxcbiAgQzogW1wieDFcIiwgXCJ5MVwiLCBcIngyXCIsIFwieTJcIiwgXCJ4XCIsIFwieVwiXSxcbiAgUzogW1wieDJcIiwgXCJ5MlwiLCBcInhcIiwgXCJ5XCJdLFxuICBROiBbXCJ4MVwiLCBcInkxXCIsIFwieFwiLCBcInlcIl0sXG4gIFQ6IFtcInhcIiwgXCJ5XCJdLFxuICBBOiBbXCJyeFwiLCBcInJ5XCIsIFwieEF4aXNSb3RhdGlvblwiLCBcImxhcmdlQXJjRmxhZ1wiLCBcInN3ZWVwRmxhZ1wiLCBcInhcIiwgXCJ5XCJdXG59O1xuXG4vKipcbiAqIENvbnZlcnQgdG8gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb21tYW5kIGZyb20gYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gY29tbWFuZFN0cmluZyBUb2tlbiBzdHJpbmcgZnJvbSB0aGUgYGRgIGF0dHJpYnV0ZSAoZS5nLiwgTDAsMClcbiAqIEByZXR1cm4ge09iamVjdH0gQW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIGNvbW1hbmQuXG4gKi9cbmZ1bmN0aW9uIGNvbW1hbmRPYmplY3QoY29tbWFuZFN0cmluZykge1xuICAvLyBjb252ZXJ0IGFsbCBzcGFjZXMgdG8gY29tbWFzXG4gIGNvbW1hbmRTdHJpbmcgPSBjb21tYW5kU3RyaW5nLnRyaW0oKS5yZXBsYWNlKC8gL2csIFwiLFwiKTtcblxuICBjb25zdCB0eXBlID0gY29tbWFuZFN0cmluZ1swXTtcbiAgY29uc3QgYXJncyA9IGNvbW1hbmRTdHJpbmcuc3Vic3RyaW5nKDEpLnNwbGl0KFwiLFwiKTtcbiAgcmV0dXJuIHR5cGVNYXBbdHlwZS50b1VwcGVyQ2FzZSgpXS5yZWR1Y2UoXG4gICAgKG9iaiwgcGFyYW0sIGkpID0+IHtcbiAgICAgIC8vIHBhcnNlIFggYXMgZmxvYXQgc2luY2Ugd2UgbmVlZCBpdCB0byBkbyBkaXN0YW5jZSBjaGVja3MgZm9yIGV4dGVuZGluZyBwb2ludHNcbiAgICAgIG9ialtwYXJhbV0gPSBbXCJ4XCIsIFwieVwiXS5pbmRleE9mKHBhcmFtKSA+PSAwID8gcGFyc2VGbG9hdChhcmdzW2ldKSA6IGFyZ3NbaV07XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0sXG4gICAgeyB0eXBlIH1cbiAgKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGNvbW1hbmQgb2JqZWN0IHRvIGEgc3RyaW5nIHRvIGJlIHVzZWQgaW4gYSBgZGAgYXR0cmlidXRlXG4gKiBAcGFyYW0ge09iamVjdH0gY29tbWFuZCBBIGNvbW1hbmQgb2JqZWN0XG4gKiBAcmV0dXJuIHtTdHJpbmd9IFRoZSBzdHJpbmcgZm9yIHRoZSBgZGAgYXR0cmlidXRlXG4gKi9cbmZ1bmN0aW9uIGNvbW1hbmRUb1N0cmluZyhjb21tYW5kKSB7XG4gIGNvbnN0IHsgdHlwZSB9ID0gY29tbWFuZDtcbiAgY29uc3QgcGFyYW1zID0gdHlwZU1hcFt0eXBlLnRvVXBwZXJDYXNlKCldO1xuICByZXR1cm4gYCR7dHlwZX0ke3BhcmFtcy5tYXAocCA9PiBjb21tYW5kW3BdKS5qb2luKFwiLFwiKX1gO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGNvbW1hbmQgQSB0byBoYXZlIHRoZSBzYW1lIHR5cGUgYXMgY29tbWFuZCBCLlxuICpcbiAqIGUuZy4sIEwwLDUgLT4gQzAsNSwwLDUsMCw1XG4gKlxuICogVXNlcyB0aGVzZSBydWxlczpcbiAqIHgxIDwtIHhcbiAqIHgyIDwtIHhcbiAqIHkxIDwtIHlcbiAqIHkyIDwtIHlcbiAqIHJ4IDwtIDBcbiAqIHJ5IDwtIDBcbiAqIHhBeGlzUm90YXRpb24gPC0gcmVhZCBmcm9tIEJcbiAqIGxhcmdlQXJjRmxhZyA8LSByZWFkIGZyb20gQlxuICogc3dlZXBmbGFnIDwtIHJlYWQgZnJvbSBCXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGFDb21tYW5kIENvbW1hbmQgb2JqZWN0IGZyb20gcGF0aCBgZGAgYXR0cmlidXRlXG4gKiBAcGFyYW0ge09iamVjdH0gYkNvbW1hbmQgQ29tbWFuZCBvYmplY3QgZnJvbSBwYXRoIGBkYCBhdHRyaWJ1dGUgdG8gbWF0Y2ggYWdhaW5zdFxuICogQHJldHVybiB7T2JqZWN0fSBhQ29tbWFuZCBjb252ZXJ0ZWQgdG8gdHlwZSBvZiBiQ29tbWFuZFxuICovXG5mdW5jdGlvbiBjb252ZXJ0VG9TYW1lVHlwZShhQ29tbWFuZCwgYkNvbW1hbmQpIHtcbiAgY29uc3QgY29udmVyc2lvbk1hcCA9IHtcbiAgICB4MTogXCJ4XCIsXG4gICAgeTE6IFwieVwiLFxuICAgIHgyOiBcInhcIixcbiAgICB5MjogXCJ5XCJcbiAgfTtcblxuICBjb25zdCByZWFkRnJvbUJLZXlzID0gW1wieEF4aXNSb3RhdGlvblwiLCBcImxhcmdlQXJjRmxhZ1wiLCBcInN3ZWVwRmxhZ1wiXTtcblxuICAvLyBjb252ZXJ0IChidXQgaWdub3JlIE0gdHlwZXMpXG4gIGlmIChhQ29tbWFuZC50eXBlICE9PSBiQ29tbWFuZC50eXBlICYmIGJDb21tYW5kLnR5cGUudG9VcHBlckNhc2UoKSAhPT0gXCJNXCIpIHtcbiAgICBjb25zdCBhQ29udmVydGVkID0ge307XG4gICAgT2JqZWN0LmtleXMoYkNvbW1hbmQpLmZvckVhY2goYktleSA9PiB7XG4gICAgICBjb25zdCBiVmFsdWUgPSBiQ29tbWFuZFtiS2V5XTtcbiAgICAgIC8vIGZpcnN0IHJlYWQgZnJvbSB0aGUgQSBjb21tYW5kXG4gICAgICBsZXQgYVZhbHVlID0gYUNvbW1hbmRbYktleV07XG5cbiAgICAgIC8vIGlmIGl0IGlzIG9uZSBvZiB0aGVzZSB2YWx1ZXMsIHJlYWQgZnJvbSBCIG5vIG1hdHRlciB3aGF0XG4gICAgICBpZiAoYVZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHJlYWRGcm9tQktleXMuaW5jbHVkZXMoYktleSkpIHtcbiAgICAgICAgICBhVmFsdWUgPSBiVmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gaWYgaXQgd2Fzbid0IGluIHRoZSBBIGNvbW1hbmQsIHNlZSBpZiBhbiBlcXVpdmFsZW50IHdhc1xuICAgICAgICAgIGlmIChhVmFsdWUgPT09IHVuZGVmaW5lZCAmJiBjb252ZXJzaW9uTWFwW2JLZXldKSB7XG4gICAgICAgICAgICBhVmFsdWUgPSBhQ29tbWFuZFtjb252ZXJzaW9uTWFwW2JLZXldXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBpZiBpdCBkb2Vzbid0IGhhdmUgYSBjb252ZXJ0ZWQgdmFsdWUsIHVzZSAwXG4gICAgICAgICAgaWYgKGFWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhVmFsdWUgPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhQ29udmVydGVkW2JLZXldID0gYVZhbHVlO1xuICAgIH0pO1xuXG4gICAgLy8gdXBkYXRlIHRoZSB0eXBlIHRvIG1hdGNoIEJcbiAgICBhQ29udmVydGVkLnR5cGUgPSBiQ29tbWFuZC50eXBlO1xuICAgIGFDb21tYW5kID0gYUNvbnZlcnRlZDtcbiAgfVxuXG4gIHJldHVybiBhQ29tbWFuZDtcbn1cblxuLyoqXG4gKiBFeHRlbmRzIGFuIGFycmF5IG9mIGNvbW1hbmRzIHRvIHRoZSBsZW5ndGggb2YgdGhlIHNlY29uZCBhcnJheVxuICogaW5zZXJ0aW5nIHBvaW50cyBhdCB0aGUgc3BvdCB0aGF0IGlzIGNsb3Nlc3QgYnkgWCB2YWx1ZS4gRW5zdXJlc1xuICogYWxsIHRoZSBwb2ludHMgb2YgY29tbWFuZHNUb0V4dGVuZCBhcmUgaW4gdGhlIGV4dGVuZGVkIGFycmF5IGFuZCB0aGF0XG4gKiBvbmx5IG51bVBvaW50c1RvRXh0ZW5kIHBvaW50cyBhcmUgYWRkZWQuXG4gKlxuICogQHBhcmFtIHtPYmplY3RbXX0gY29tbWFuZHNUb0V4dGVuZCBUaGUgY29tbWFuZHMgYXJyYXkgdG8gZXh0ZW5kXG4gKiBAcGFyYW0ge09iamVjdFtdfSByZWZlcmVuY2VDb21tYW5kcyBUaGUgY29tbWFuZHMgYXJyYXkgdG8gbWF0Y2hcbiAqIEByZXR1cm4ge09iamVjdFtdfSBUaGUgZXh0ZW5kZWQgY29tbWFuZHMxIGFycmF5XG4gKi9cbmZ1bmN0aW9uIGV4dGVuZChjb21tYW5kc1RvRXh0ZW5kLCByZWZlcmVuY2VDb21tYW5kcywgbnVtUG9pbnRzVG9FeHRlbmQpIHtcbiAgLy8gbWFwIGVhY2ggY29tbWFuZCBpbiBCIHRvIGEgY29tbWFuZCBpbiBBIGJ5IGNvdW50aW5nIGhvdyBtYW55IHRpbWVzIGlkZWFsbHlcbiAgLy8gYSBjb21tYW5kIGluIEEgd2FzIGluIHRoZSBpbml0aWFsIHBhdGggKHNlZSBodHRwczovL2dpdGh1Yi5jb20vcGJlc2hhaS9kMy1pbnRlcnBvbGF0ZS1wYXRoL2lzc3Vlcy84KVxuICBsZXQgaW5pdGlhbENvbW1hbmRJbmRleDtcbiAgaWYgKGNvbW1hbmRzVG9FeHRlbmQubGVuZ3RoID4gMSAmJiBjb21tYW5kc1RvRXh0ZW5kWzBdLnR5cGUgPT09IFwiTVwiKSB7XG4gICAgaW5pdGlhbENvbW1hbmRJbmRleCA9IDE7XG4gIH0gZWxzZSB7XG4gICAgaW5pdGlhbENvbW1hbmRJbmRleCA9IDA7XG4gIH1cblxuICBjb25zdCBjb3VudHMgPSByZWZlcmVuY2VDb21tYW5kcy5yZWR1Y2UoKGNvdW50cywgcmVmQ29tbWFuZCwgaSkgPT4ge1xuICAgIC8vIHNraXAgZmlyc3QgTVxuICAgIGlmIChpID09PSAwICYmIHJlZkNvbW1hbmQudHlwZSA9PT0gXCJNXCIpIHtcbiAgICAgIGNvdW50c1swXSA9IDE7XG4gICAgICByZXR1cm4gY291bnRzO1xuICAgIH1cblxuICAgIGxldCBtaW5EaXN0YW5jZSA9IE1hdGguYWJzKFxuICAgICAgY29tbWFuZHNUb0V4dGVuZFtpbml0aWFsQ29tbWFuZEluZGV4XS54IC0gcmVmQ29tbWFuZC54XG4gICAgKTtcbiAgICBsZXQgbWluQ29tbWFuZCA9IGluaXRpYWxDb21tYW5kSW5kZXg7XG5cbiAgICAvLyBmaW5kIHRoZSBjbG9zZXN0IHBvaW50IGJ5IFggcG9zaXRpb24gaW4gQVxuICAgIGZvciAobGV0IGogPSBpbml0aWFsQ29tbWFuZEluZGV4ICsgMTsgaiA8IGNvbW1hbmRzVG9FeHRlbmQubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IGRpc3RhbmNlID0gTWF0aC5hYnMoY29tbWFuZHNUb0V4dGVuZFtqXS54IC0gcmVmQ29tbWFuZC54KTtcbiAgICAgIGlmIChkaXN0YW5jZSA8IG1pbkRpc3RhbmNlKSB7XG4gICAgICAgIG1pbkRpc3RhbmNlID0gZGlzdGFuY2U7XG4gICAgICAgIG1pbkNvbW1hbmQgPSBqO1xuICAgICAgICAvLyBzaW5jZSB3ZSBhc3N1bWUgc29ydGVkIGJ5IFgsIG9uY2Ugd2UgZmluZCBhIHZhbHVlIGZhcnRoZXIsIHdlIGNhbiByZXR1cm4gdGhlIG1pbi5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvdW50c1ttaW5Db21tYW5kXSA9IChjb3VudHNbbWluQ29tbWFuZF0gfHwgMCkgKyAxO1xuICAgIHJldHVybiBjb3VudHM7XG4gIH0sIHt9KTtcblxuICAvLyBub3cgZXh0ZW5kIHRoZSBhcnJheSBhZGRpbmcgaW4gYXQgdGhlIGFwcHJvcHJpYXRlIHBsYWNlIGFzIG5lZWRlZFxuICBjb25zdCBleHRlbmRlZCA9IFtdO1xuICBsZXQgbnVtRXh0ZW5kZWQgPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbW1hbmRzVG9FeHRlbmQubGVuZ3RoOyBpKyspIHtcbiAgICAvLyBhZGQgaW4gdGhlIGluaXRpYWwgcG9pbnQgZm9yIHRoaXMgQSBjb21tYW5kXG4gICAgZXh0ZW5kZWQucHVzaChjb21tYW5kc1RvRXh0ZW5kW2ldKTtcblxuICAgIGZvciAobGV0IGogPSAxOyBqIDwgY291bnRzW2ldICYmIG51bUV4dGVuZGVkIDwgbnVtUG9pbnRzVG9FeHRlbmQ7IGorKykge1xuICAgICAgY29uc3QgY29tbWFuZFRvQWRkID0gT2JqZWN0LmFzc2lnbih7fSwgY29tbWFuZHNUb0V4dGVuZFtpXSk7XG4gICAgICAvLyBkb24ndCBhbGxvdyBtdWx0aXBsZSBNc1xuICAgICAgaWYgKGNvbW1hbmRUb0FkZC50eXBlID09PSBcIk1cIikge1xuICAgICAgICBjb21tYW5kVG9BZGQudHlwZSA9IFwiTFwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdHJ5IHRvIHNldCBjb250cm9sIHBvaW50cyB0byB4IGFuZCB5XG4gICAgICAgIGlmIChjb21tYW5kVG9BZGQueDEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbW1hbmRUb0FkZC54MSA9IGNvbW1hbmRUb0FkZC54O1xuICAgICAgICAgIGNvbW1hbmRUb0FkZC55MSA9IGNvbW1hbmRUb0FkZC55O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbW1hbmRUb0FkZC54MiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29tbWFuZFRvQWRkLngyID0gY29tbWFuZFRvQWRkLng7XG4gICAgICAgICAgY29tbWFuZFRvQWRkLnkyID0gY29tbWFuZFRvQWRkLnk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGV4dGVuZGVkLnB1c2goY29tbWFuZFRvQWRkKTtcbiAgICAgIG51bUV4dGVuZGVkICs9IDE7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGV4dGVuZGVkO1xufVxuXG4vKipcbiAqIEV4dGVuZHMgYW4gYXJyYXkgb2YgY29tbWFuZHMgdG8gdGhlIGxlbmd0aCBvZiB0aGUgc2Vjb25kIGFycmF5XG4gKiBpbnNlcnRpbmcgcG9pbnRzIGF0IHRoZSBzcG90IHRoYXQgaXMgY2xvc2VzdCBieSBYIHZhbHVlLiBFbnN1cmVzXG4gKiBhbGwgdGhlIHBvaW50cyBvZiBjb21tYW5kc1RvRXh0ZW5kIGFyZSBpbiB0aGUgZXh0ZW5kZWQgYXJyYXkgYW5kIHRoYXRcbiAqIG9ubHkgbnVtUG9pbnRzVG9FeHRlbmQgcG9pbnRzIGFyZSBhZGRlZC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdFtdfSBjb21tYW5kc1RvRXh0ZW5kIFRoZSBjb21tYW5kcyBhcnJheSB0byBleHRlbmRcbiAqIEBwYXJhbSB7T2JqZWN0W119IHJlZmVyZW5jZUNvbW1hbmRzIFRoZSBjb21tYW5kcyBhcnJheSB0byBtYXRjaFxuICogQHJldHVybiB7T2JqZWN0W119IFRoZSBleHRlbmRlZCBjb21tYW5kczEgYXJyYXlcbiAqL1xuZnVuY3Rpb24gZXh0ZW5kMihjb21tYW5kc1RvRXh0ZW5kLCByZWZlcmVuY2VDb21tYW5kcywgbnVtUG9pbnRzVG9FeHRlbmQsIGFsb25nVG89XCJ4XCIpIHtcbiAgLy8gbWFwIGVhY2ggY29tbWFuZCBpbiBCIHRvIGEgY29tbWFuZCBpbiBBIGJ5IGNvdW50aW5nIGhvdyBtYW55IHRpbWVzIGlkZWFsbHlcbiAgLy8gYSBjb21tYW5kIGluIEEgd2FzIGluIHRoZSBpbml0aWFsIHBhdGggKHNlZSBodHRwczovL2dpdGh1Yi5jb20vcGJlc2hhaS9kMy1pbnRlcnBvbGF0ZS1wYXRoL2lzc3Vlcy84KVxuICBsZXQgaW5pdGlhbENvbW1hbmRJbmRleDtcbiAgaWYgKGNvbW1hbmRzVG9FeHRlbmQubGVuZ3RoID4gMSAmJiBjb21tYW5kc1RvRXh0ZW5kWzBdLnR5cGUgPT09IFwiTVwiKSB7XG4gICAgaW5pdGlhbENvbW1hbmRJbmRleCA9IDE7XG4gIH0gZWxzZSB7XG4gICAgaW5pdGlhbENvbW1hbmRJbmRleCA9IDA7XG4gIH1cbiAgbGV0IFttLCBzdWJNXSA9IGFsb25nVG8gPT09IFwieFwiID8gW1wieFwiLCBcInlcIl0gOiBbXCJ5XCIsIFwieFwiXTtcblxuXG4gIGNvbnN0IGNvdW50cyA9IHJlZmVyZW5jZUNvbW1hbmRzLnJlZHVjZSgoY291bnRzLCByZWZDb21tYW5kLCBpKSA9PiB7XG4gICAgLy8gc2tpcCBmaXJzdCBNXG4gICAgaWYgKGkgPT09IDAgJiYgcmVmQ29tbWFuZC50eXBlID09PSBcIk1cIikge1xuICAgICAgY291bnRzWzBdID0gMTtcbiAgICAgIHJldHVybiBjb3VudHM7XG4gICAgfVxuXG4gICAgbGV0IG1pbkRpc3RhbmNlID0gTWF0aC5hYnMoXG4gICAgICBjb21tYW5kc1RvRXh0ZW5kW2luaXRpYWxDb21tYW5kSW5kZXhdW21dIC0gcmVmQ29tbWFuZFttXVxuICAgICk7XG4gICAgbGV0IHN1Yk1pbkRpc3RhbmNlID0gTWF0aC5hYnMoXG4gICAgICBjb21tYW5kc1RvRXh0ZW5kW2luaXRpYWxDb21tYW5kSW5kZXhdW3N1Yk1dIC0gcmVmQ29tbWFuZFtzdWJNXVxuICAgICk7XG4gICAgbGV0IG1pbkNvbW1hbmQgPSBpbml0aWFsQ29tbWFuZEluZGV4O1xuXG4gICAgLy8gZmluZCB0aGUgY2xvc2VzdCBwb2ludCBieSBYIHBvc2l0aW9uIGluIEFcbiAgICBmb3IgKGxldCBqID0gaW5pdGlhbENvbW1hbmRJbmRleCArIDE7IGogPCBjb21tYW5kc1RvRXh0ZW5kLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCBkaXN0YW5jZSA9IE1hdGguYWJzKGNvbW1hbmRzVG9FeHRlbmRbal1bbV0gLSByZWZDb21tYW5kW21dKTtcbiAgICAgIGNvbnN0IHN1YkRpc3RhbmNlID0gTWF0aC5hYnMoY29tbWFuZHNUb0V4dGVuZFtqXVtzdWJNXSAtIHJlZkNvbW1hbmRbc3ViTV0pO1xuICAgICAgaWYgKGRpc3RhbmNlIDwgbWluRGlzdGFuY2UpIHtcbiAgICAgICAgbWluRGlzdGFuY2UgPSBkaXN0YW5jZTtcbiAgICAgICAgbWluQ29tbWFuZCA9IGo7XG4gICAgICAgIHN1Yk1pbkRpc3RhbmNlID0gc3ViRGlzdGFuY2U7XG4gICAgICAgIC8vIHNpbmNlIHdlIGFzc3VtZSBzb3J0ZWQgYnkgWCwgb25jZSB3ZSBmaW5kIGEgdmFsdWUgZmFydGhlciwgd2UgY2FuIHJldHVybiB0aGUgbWluLlxuICAgICAgfSBlbHNlIGlmIChkaXN0YW5jZSA9PT0gbWluRGlzdGFuY2UpIHtcbiAgICAgICAgaWYgKHN1YkRpc3RhbmNlIDwgc3ViTWluRGlzdGFuY2UpIHtcbiAgICAgICAgICBtaW5Db21tYW5kID0gajtcbiAgICAgICAgICBzdWJNaW5EaXN0YW5jZSA9IHN1YkRpc3RhbmNlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb3VudHNbbWluQ29tbWFuZF0gPSAoY291bnRzW21pbkNvbW1hbmRdIHx8IDApICsgMTtcbiAgICByZXR1cm4gY291bnRzO1xuICB9LCB7fSk7XG5cbiAgLy8gbm93IGV4dGVuZCB0aGUgYXJyYXkgYWRkaW5nIGluIGF0IHRoZSBhcHByb3ByaWF0ZSBwbGFjZSBhcyBuZWVkZWRcbiAgY29uc3QgZXh0ZW5kZWQgPSBbXTtcbiAgbGV0IG51bUV4dGVuZGVkID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb21tYW5kc1RvRXh0ZW5kLmxlbmd0aDsgaSsrKSB7XG4gICAgLy8gYWRkIGluIHRoZSBpbml0aWFsIHBvaW50IGZvciB0aGlzIEEgY29tbWFuZFxuICAgIGV4dGVuZGVkLnB1c2goY29tbWFuZHNUb0V4dGVuZFtpXSk7XG5cbiAgICBmb3IgKGxldCBqID0gMTsgaiA8IGNvdW50c1tpXSAmJiBudW1FeHRlbmRlZCA8IG51bVBvaW50c1RvRXh0ZW5kOyBqKyspIHtcbiAgICAgIGNvbnN0IGNvbW1hbmRUb0FkZCA9IE9iamVjdC5hc3NpZ24oe30sIGNvbW1hbmRzVG9FeHRlbmRbaV0pO1xuICAgICAgLy8gZG9uJ3QgYWxsb3cgbXVsdGlwbGUgTXNcbiAgICAgIGlmIChjb21tYW5kVG9BZGQudHlwZSA9PT0gXCJNXCIpIHtcbiAgICAgICAgY29tbWFuZFRvQWRkLnR5cGUgPSBcIkxcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHRyeSB0byBzZXQgY29udHJvbCBwb2ludHMgdG8geCBhbmQgeVxuICAgICAgICBpZiAoY29tbWFuZFRvQWRkLngxICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb21tYW5kVG9BZGQueDEgPSBjb21tYW5kVG9BZGQueDtcbiAgICAgICAgICBjb21tYW5kVG9BZGQueTEgPSBjb21tYW5kVG9BZGQueTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb21tYW5kVG9BZGQueDIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbW1hbmRUb0FkZC54MiA9IGNvbW1hbmRUb0FkZC54O1xuICAgICAgICAgIGNvbW1hbmRUb0FkZC55MiA9IGNvbW1hbmRUb0FkZC55O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBleHRlbmRlZC5wdXNoKGNvbW1hbmRUb0FkZCk7XG4gICAgICBudW1FeHRlbmRlZCArPSAxO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBleHRlbmRlZDtcbn1cblxuLyoqXG4gKiBJbnRlcnBvbGF0ZSBmcm9tIEEgdG8gQiBieSBleHRlbmRpbmcgQSBhbmQgQiBkdXJpbmcgaW50ZXJwb2xhdGlvbiB0byBoYXZlXG4gKiB0aGUgc2FtZSBudW1iZXIgb2YgcG9pbnRzLiBUaGlzIGFsbG93cyBmb3IgYSBzbW9vdGggdHJhbnNpdGlvbiB3aGVuIHRoZXlcbiAqIGhhdmUgYSBkaWZmZXJlbnQgbnVtYmVyIG9mIHBvaW50cy5cbiAqXG4gKiBJZ25vcmVzIHRoZSBgWmAgY2hhcmFjdGVyIGluIHBhdGhzIHVubGVzcyBib3RoIEEgYW5kIEIgZW5kIHdpdGggaXQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGEgVGhlIGBkYCBhdHRyaWJ1dGUgZm9yIGEgcGF0aFxuICogQHBhcmFtIHtTdHJpbmd9IGIgVGhlIGBkYCBhdHRyaWJ1dGUgZm9yIGEgcGF0aFxuICovXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZVBhdGgoYSwgYiwgYWxvbmdUbyA9IFwieFwiKSB7XG4gIC8vIHJlbW92ZSBaLCByZW1vdmUgc3BhY2VzIGFmdGVyIGxldHRlcnMgYXMgc2VlbiBpbiBJRVxuICBjb25zdCBhTm9ybWFsaXplZCA9XG4gICAgYSA9PSBudWxsID8gXCJcIiA6IGEucmVwbGFjZSgvW1pdL2dpLCBcIlwiKS5yZXBsYWNlKC8oW01MQ1NUUUFIVl0pXFxzKi9naSwgXCIkMVwiKTtcbiAgY29uc3QgYk5vcm1hbGl6ZWQgPVxuICAgIGIgPT0gbnVsbCA/IFwiXCIgOiBiLnJlcGxhY2UoL1taXS9naSwgXCJcIikucmVwbGFjZSgvKFtNTENTVFFBSFZdKVxccyovZ2ksIFwiJDFcIik7XG4gIGNvbnN0IGFQb2ludHMgPVxuICAgIGFOb3JtYWxpemVkID09PSBcIlwiID8gW10gOiBhTm9ybWFsaXplZC5zcGxpdCgvKD89W01MQ1NUUUFIVl0pL2dpKTtcbiAgY29uc3QgYlBvaW50cyA9XG4gICAgYk5vcm1hbGl6ZWQgPT09IFwiXCIgPyBbXSA6IGJOb3JtYWxpemVkLnNwbGl0KC8oPz1bTUxDU1RRQUhWXSkvZ2kpO1xuXG4gIC8vIGlmIGJvdGggYXJlIGVtcHR5LCBpbnRlcnBvbGF0aW9uIGlzIGFsd2F5cyB0aGUgZW1wdHkgc3RyaW5nLlxuICBpZiAoIWFQb2ludHMubGVuZ3RoICYmICFiUG9pbnRzLmxlbmd0aCkge1xuICAgIHJldHVybiBmdW5jdGlvbiBudWxsSW50ZXJwb2xhdG9yKCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfTtcbiAgfVxuXG4gIC8vIGlmIEEgaXMgZW1wdHksIHRyZWF0IGl0IGFzIGlmIGl0IHVzZWQgdG8gY29udGFpbiBqdXN0IHRoZSBmaXJzdCBwb2ludFxuICAvLyBvZiBCLiBUaGlzIG1ha2VzIGl0IHNvIHRoZSBsaW5lIGV4dGVuZHMgb3V0IG9mIGZyb20gdGhhdCBmaXJzdCBwb2ludC5cbiAgaWYgKCFhUG9pbnRzLmxlbmd0aCkge1xuICAgIGFQb2ludHMucHVzaChiUG9pbnRzWzBdKTtcblxuICAgIC8vIG90aGVyd2lzZSBpZiBCIGlzIGVtcHR5LCB0cmVhdCBpdCBhcyBpZiBpdCBjb250YWlucyB0aGUgZmlyc3QgcG9pbnRcbiAgICAvLyBvZiBBLiBUaGlzIG1ha2VzIGl0IHNvIHRoZSBsaW5lIHJldHJhY3RzIGludG8gdGhlIGZpcnN0IHBvaW50LlxuICB9IGVsc2UgaWYgKCFiUG9pbnRzLmxlbmd0aCkge1xuICAgIGJQb2ludHMucHVzaChhUG9pbnRzWzBdKTtcbiAgfVxuXG4gIC8vIGNvbnZlcnQgdG8gY29tbWFuZCBvYmplY3RzIHNvIHdlIGNhbiBtYXRjaCB0eXBlc1xuICBsZXQgYUNvbW1hbmRzID0gYVBvaW50cy5tYXAoY29tbWFuZE9iamVjdCk7XG4gIGxldCBiQ29tbWFuZHMgPSBiUG9pbnRzLm1hcChjb21tYW5kT2JqZWN0KTtcblxuICAvLyBleHRlbmQgdG8gbWF0Y2ggZXF1YWwgc2l6ZVxuICBjb25zdCBudW1Qb2ludHNUb0V4dGVuZCA9IE1hdGguYWJzKGJQb2ludHMubGVuZ3RoIC0gYVBvaW50cy5sZW5ndGgpO1xuXG4gIGlmIChudW1Qb2ludHNUb0V4dGVuZCAhPT0gMCkge1xuICAgIC8vIEIgaGFzIG1vcmUgcG9pbnRzIHRoYW4gQSwgc28gYWRkIHBvaW50cyB0byBBIGJlZm9yZSBpbnRlcnBvbGF0aW5nXG4gICAgaWYgKGJDb21tYW5kcy5sZW5ndGggPiBhQ29tbWFuZHMubGVuZ3RoKSB7XG4gICAgICBhQ29tbWFuZHMgPSBleHRlbmQyKGFDb21tYW5kcywgYkNvbW1hbmRzLCBudW1Qb2ludHNUb0V4dGVuZCwgYWxvbmdUbyk7XG5cbiAgICAgIC8vIGVsc2UgaWYgQSBoYXMgbW9yZSBwb2ludHMgdGhhbiBCLCBhZGQgbW9yZSBwb2ludHMgdG8gQlxuICAgIH0gZWxzZSBpZiAoYkNvbW1hbmRzLmxlbmd0aCA8IGFDb21tYW5kcy5sZW5ndGgpIHtcbiAgICAgIGJDb21tYW5kcyA9IGV4dGVuZDIoYkNvbW1hbmRzLCBhQ29tbWFuZHMsIG51bVBvaW50c1RvRXh0ZW5kLCBhbG9uZ1RvKTtcbiAgICB9XG4gIH1cblxuICAvLyBjb21tYW5kcyBoYXZlIHNhbWUgbGVuZ3RoIG5vdy5cbiAgLy8gY29udmVydCBBIHRvIHRoZSBzYW1lIHR5cGUgb2YgQlxuICBhQ29tbWFuZHMgPSBhQ29tbWFuZHMubWFwKChhQ29tbWFuZCwgaSkgPT5cbiAgICBjb252ZXJ0VG9TYW1lVHlwZShhQ29tbWFuZCwgYkNvbW1hbmRzW2ldKVxuICApO1xuXG4gIGxldCBhUHJvY2Vzc2VkID0gYUNvbW1hbmRzLm1hcChjb21tYW5kVG9TdHJpbmcpLmpvaW4oXCJcIik7XG4gIGxldCBiUHJvY2Vzc2VkID0gYkNvbW1hbmRzLm1hcChjb21tYW5kVG9TdHJpbmcpLmpvaW4oXCJcIik7XG5cbiAgLy8gaWYgYm90aCBBIGFuZCBCIGVuZCB3aXRoIFogYWRkIGl0IGJhY2sgaW5cbiAgaWYgKFxuICAgIChhID09IG51bGwgfHwgYVthLmxlbmd0aCAtIDFdID09PSBcIlpcIikgJiZcbiAgICAoYiA9PSBudWxsIHx8IGJbYi5sZW5ndGggLSAxXSA9PT0gXCJaXCIpXG4gICkge1xuICAgIGFQcm9jZXNzZWQgKz0gXCJaXCI7XG4gICAgYlByb2Nlc3NlZCArPSBcIlpcIjtcbiAgfVxuXG4gIGNvbnN0IHN0cmluZ0ludGVycG9sYXRvciA9IGQzLmludGVycG9sYXRlU3RyaW5nKGFQcm9jZXNzZWQsIGJQcm9jZXNzZWQpO1xuXG4gIHJldHVybiBmdW5jdGlvbiBwYXRoSW50ZXJwb2xhdG9yKHQpIHtcbiAgICAvLyBhdCAxIHJldHVybiB0aGUgZmluYWwgdmFsdWUgd2l0aG91dCB0aGUgZXh0ZW5zaW9ucyB1c2VkIGR1cmluZyBpbnRlcnBvbGF0aW9uXG4gICAgaWYgKHQgPT09IDEpIHtcbiAgICAgIHJldHVybiBiID09IG51bGwgPyBcIlwiIDogYjtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyaW5nSW50ZXJwb2xhdG9yKHQpO1xuICB9O1xufVxuXG4vLyBhIC0+IGEgKyByZXZlcnNlKGEpIHNvIHRoYXQgdGhlIGxpbmUgaXMgY2xvc2VkLlxuZnVuY3Rpb24gbGluZVRvQXJlYShhKSB7XG4gIGNvbnN0IGFOb3JtYWxpemVkID1cbiAgICBhID09IG51bGwgPyBcIlwiIDogYS5yZXBsYWNlKC9bWl0vZ2ksIFwiXCIpLnJlcGxhY2UoLyhbTUxDU1RRQUhWXSlcXHMqL2dpLCBcIiQxXCIpO1xuICBjb25zdCBhUG9pbnRzID1cbiAgICBhTm9ybWFsaXplZCA9PT0gXCJcIiA/IFtdIDogYU5vcm1hbGl6ZWQuc3BsaXQoLyg/PVtNTENTVFFBSFZdKS9naSk7XG5cbiAgaWYgKGFQb2ludHMubGVuZ3RoIDw9IDApIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIC8vIGNvbnZlcnQgdG8gY29tbWFuZCBvYmplY3RzIHNvIHdlIGNhbiBtYXRjaCB0eXBlc1xuICBjb25zdCBhQ29tbWFuZHMgPSBhUG9pbnRzLm1hcChjb21tYW5kT2JqZWN0KTtcbiAgY29uc3QgcmV2ZXJzZWQgPSBhUG9pbnRzLm1hcChjb21tYW5kT2JqZWN0KS5yZXZlcnNlKCk7XG4gIGlmIChyZXZlcnNlZFtyZXZlcnNlZC5sZW5ndGggLSAxXS50eXBlID09IFwiTVwiKSB7XG4gICAgcmV2ZXJzZWRbcmV2ZXJzZWQubGVuZ3RoIC0gMV0udHlwZSA9IHJldmVyc2VkW3JldmVyc2VkLmxlbmd0aCAtIDJdLnR5cGU7XG4gIH1cbiAgcmV0dXJuIGAke2FDb21tYW5kc1xuICAgIC5jb25jYXQocmV2ZXJzZWQpXG4gICAgLm1hcChjb21tYW5kVG9TdHJpbmcpXG4gICAgLmpvaW4oXCJcIil9WmA7XG59XG4vKipcbiAqIEludGVycG9sYXRlIGZyb20gQSB0byBCIGJ5IGV4dGVuZGluZyBBIGFuZCBCIGR1cmluZyBpbnRlcnBvbGF0aW9uIHRvIGhhdmVcbiAqIHRoZSBzYW1lIG51bWJlciBvZiBwb2ludHMuIFRoaXMgYWxsb3dzIGZvciBhIHNtb290aCB0cmFuc2l0aW9uIHdoZW4gdGhleVxuICogaGF2ZSBhIGRpZmZlcmVudCBudW1iZXIgb2YgcG9pbnRzLlxuICpcbiAqIElnbm9yZXMgdGhlIGBaYCBjaGFyYWN0ZXIgaW4gcGF0aHMgdW5sZXNzIGJvdGggQSBhbmQgQiBlbmQgd2l0aCBpdC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYSBUaGUgYGRgIGF0dHJpYnV0ZSBmb3IgYSBwYXRoXG4gKiBAcGFyYW0ge1N0cmluZ30gYiBUaGUgYGRgIGF0dHJpYnV0ZSBmb3IgYSBwYXRoXG4gKi9cbmZ1bmN0aW9uIGludGVycG9sYXRlUGF0aDIoYSwgYiwgYWxvbmdUbyA9IFwieFwiKSB7XG4gIC8vIHJlbW92ZSBaLCByZW1vdmUgc3BhY2VzIGFmdGVyIGxldHRlcnMgYXMgc2VlbiBpbiBJRVxuICBjb25zdCBhTm9ybWFsaXplZCA9XG4gICAgYSA9PSBudWxsID8gXCJcIiA6IGEucmVwbGFjZSgvW1pdL2dpLCBcIlwiKS5yZXBsYWNlKC8oW01MQ1NUUUFIVl0pXFxzKi9naSwgXCIkMVwiKTtcbiAgY29uc3QgYk5vcm1hbGl6ZWQgPVxuICAgIGIgPT0gbnVsbCA/IFwiXCIgOiBiLnJlcGxhY2UoL1taXS9naSwgXCJcIikucmVwbGFjZSgvKFtNTENTVFFBSFZdKVxccyovZ2ksIFwiJDFcIik7XG4gIGNvbnN0IGFQb2ludHMgPVxuICAgIGFOb3JtYWxpemVkID09PSBcIlwiID8gW10gOiBhTm9ybWFsaXplZC5zcGxpdCgvKD89W01MQ1NUUUFIVl0pL2dpKTtcbiAgY29uc3QgYlBvaW50cyA9XG4gICAgYk5vcm1hbGl6ZWQgPT09IFwiXCIgPyBbXSA6IGJOb3JtYWxpemVkLnNwbGl0KC8oPz1bTUxDU1RRQUhWXSkvZ2kpO1xuXG4gIC8vIGlmIGJvdGggYXJlIGVtcHR5LCBpbnRlcnBvbGF0aW9uIGlzIGFsd2F5cyB0aGUgZW1wdHkgc3RyaW5nLlxuICBpZiAoIWFQb2ludHMubGVuZ3RoICYmICFiUG9pbnRzLmxlbmd0aCkge1xuICAgIHJldHVybiBmdW5jdGlvbiBudWxsSW50ZXJwb2xhdG9yKCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfTtcbiAgfVxuXG4gIC8vIGlmIEEgaXMgZW1wdHksIHRyZWF0IGl0IGFzIGlmIGl0IHVzZWQgdG8gY29udGFpbiBqdXN0IHRoZSBmaXJzdCBwb2ludFxuICAvLyBvZiBCLiBUaGlzIG1ha2VzIGl0IHNvIHRoZSBsaW5lIGV4dGVuZHMgb3V0IG9mIGZyb20gdGhhdCBmaXJzdCBwb2ludC5cbiAgaWYgKCFhUG9pbnRzLmxlbmd0aCkge1xuICAgIGFQb2ludHMucHVzaChiUG9pbnRzWzBdKTtcblxuICAgIC8vIG90aGVyd2lzZSBpZiBCIGlzIGVtcHR5LCB0cmVhdCBpdCBhcyBpZiBpdCBjb250YWlucyB0aGUgZmlyc3QgcG9pbnRcbiAgICAvLyBvZiBBLiBUaGlzIG1ha2VzIGl0IHNvIHRoZSBsaW5lIHJldHJhY3RzIGludG8gdGhlIGZpcnN0IHBvaW50LlxuICB9IGVsc2UgaWYgKCFiUG9pbnRzLmxlbmd0aCkge1xuICAgIGJQb2ludHMucHVzaChhUG9pbnRzWzBdKTtcbiAgfVxuXG4gIC8vIGNvbnZlcnQgdG8gY29tbWFuZCBvYmplY3RzIHNvIHdlIGNhbiBtYXRjaCB0eXBlc1xuICBjb25zdCBhQ29tbWFuZHMgPSBhUG9pbnRzLm1hcChjb21tYW5kT2JqZWN0KTtcbiAgY29uc3QgYkNvbW1hbmRzID0gYlBvaW50cy5tYXAoY29tbWFuZE9iamVjdCk7XG4gIGxldCBoYXNaID0gZmFsc2U7XG4gIGlmIChcbiAgICAoYSA9PSBudWxsIHx8IGFbYS5sZW5ndGggLSAxXSA9PT0gXCJaXCIpICYmXG4gICAgKGIgPT0gbnVsbCB8fCBiW2IubGVuZ3RoIC0gMV0gPT09IFwiWlwiKVxuICApIHtcbiAgICBoYXNaID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIGdldCB0YWlsXG4gIC8vIGdldCBoZWFkXG4gIC8vIGNvbmNhdCB0YWlsICsgYm9keSArIGhlYWRcbiAgY29uc3QgYUV4dGVudCA9IGQzLmV4dGVudChhQ29tbWFuZHMsIGMgPT4gY1thbG9uZ1RvXSk7XG4gIGNvbnN0IGJFeHRlbnQgPSBkMy5leHRlbnQoYkNvbW1hbmRzLCBjID0+IGNbYWxvbmdUb10pO1xuICBpZiAoYWxvbmdUbyA9PT0gXCJ4XCIpIHtcbiAgICBjb25zdCBhSGVhZEkgPSBhQ29tbWFuZHMuZmluZEluZGV4KGMgPT4gY1thbG9uZ1RvXSA9PT0gYUV4dGVudFsxXSk7XG4gICAgY29uc3QgYkhlYWRJID0gYkNvbW1hbmRzLmZpbmRJbmRleChjID0+IGNbYWxvbmdUb10gPT09IGJFeHRlbnRbMV0pO1xuXG4gICAgY29uc3QgYVRvcCA9IGFDb21tYW5kcy5zbGljZSgwLCBhSGVhZEkgKyAxKTtcbiAgICBjb25zdCBiVG9wID0gYkNvbW1hbmRzLnNsaWNlKDAsIGJIZWFkSSArIDEpO1xuICAgIGNvbnN0IGFCb3R0b20gPSBhQ29tbWFuZHMuc2xpY2UoYUhlYWRJICsgMSkucmV2ZXJzZSgpO1xuICAgIGNvbnN0IGJCb3R0b20gPSBiQ29tbWFuZHMuc2xpY2UoYkhlYWRJICsgMSkucmV2ZXJzZSgpO1xuICAgIGNvbnN0IGhhc0JvdHRvbSA9IGFCb3R0b20ubGVuZ3RoID4gMCAmJiBiQm90dG9tLmxlbmd0aCA+IDA7XG5cbiAgICByZXR1cm4gdCA9PiB7XG4gICAgICBpZiAodCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gYiA9PT0gbnVsbCA/IFwiXCIgOiBiO1xuICAgICAgfVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgaW50ZXJwb2xhdGVPdXRsaW5lKGFUb3AsIGJUb3AsIGFFeHRlbnQsIGJFeHRlbnQpKHQpICtcbiAgICAgICAgKGhhc0JvdHRvbVxuICAgICAgICAgID8gaW50ZXJwb2xhdGVPdXRsaW5lKGFCb3R0b20sIGJCb3R0b20sIGFFeHRlbnQsIGJFeHRlbnQsIHRydWUsIHRydWUpKHQpXG4gICAgICAgICAgOiBcIlwiKSArXG4gICAgICAgIChoYXNaID8gXCJaXCIgOiBcIlwiKVxuICAgICAgKTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGFIZWFkSSA9IGFDb21tYW5kcy5maW5kSW5kZXgoYyA9PiBjW2Fsb25nVG9dID09PSBhRXh0ZW50WzBdKTtcbiAgICBjb25zdCBiSGVhZEkgPSBiQ29tbWFuZHMuZmluZEluZGV4KGMgPT4gY1thbG9uZ1RvXSA9PT0gYkV4dGVudFswXSk7XG5cbiAgICBjb25zdCBhVG9wID0gYUNvbW1hbmRzLnNsaWNlKDAsIGFIZWFkSSArIDEpLnJldmVyc2UoKTtcbiAgICBjb25zdCBiVG9wID0gYkNvbW1hbmRzLnNsaWNlKDAsIGJIZWFkSSArIDEpLnJldmVyc2UoKTtcbiAgICBjb25zdCBhQm90dG9tID0gYUNvbW1hbmRzLnNsaWNlKGFIZWFkSSArIDEpO1xuICAgIGNvbnN0IGJCb3R0b20gPSBiQ29tbWFuZHMuc2xpY2UoYkhlYWRJICsgMSk7XG4gICAgY29uc3QgaGFzQm90dG9tID0gYUJvdHRvbS5sZW5ndGggPiAwICYmIGJCb3R0b20ubGVuZ3RoID4gMDtcblxuICAgIHJldHVybiB0ID0+IHtcbiAgICAgIGlmICh0ID09PSAxKSB7XG4gICAgICAgIHJldHVybiBiID09PSBudWxsID8gXCJcIiA6IGI7XG4gICAgICB9XG4gICAgICByZXR1cm4gKFxuICAgICAgICBpbnRlcnBvbGF0ZU91dGxpbmUoYVRvcCwgYlRvcCwgYUV4dGVudCwgYkV4dGVudCwgdHJ1ZSkodCkgK1xuICAgICAgICAoaGFzQm90dG9tXG4gICAgICAgICAgPyBpbnRlcnBvbGF0ZU91dGxpbmUoYUJvdHRvbSwgYkJvdHRvbSwgYUV4dGVudCwgYkV4dGVudCwgZmFsc2UsIHRydWUpKHQpXG4gICAgICAgICAgOiBcIlwiKSArXG4gICAgICAgIChoYXNaID8gXCJaXCIgOiBcIlwiKVxuICAgICAgKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gaW50ZXJwb2xhdGVPdXRsaW5lKFxuICAgIGFDb21tYW5kcyxcbiAgICBiQ29tbWFuZHMsXG4gICAgYUV4dGVudCxcbiAgICBiRXh0ZW50LFxuICAgIHJldmVyc2UsXG4gICAgaXNCb3R0b20gPSBmYWxzZVxuICApIHtcbiAgICBsZXQgaGVhZDtcbiAgICBsZXQgdGFpbDtcbiAgICBsZXQgYm9keTtcbiAgICBpZiAoYUV4dGVudFsxXSA8IGJFeHRlbnRbMF0gfHwgYUV4dGVudFswXSA+IGJFeHRlbnRbMV0pIHtcbiAgICAgIC8vIGp1c3QgaW50ZXJwb2xhdGVcbiAgICAgIGJvZHkgPSBnZXRCb2R5KGFDb21tYW5kcywgYkNvbW1hbmRzLCByZXZlcnNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGFFeHRlbnRbMV0gPiBiRXh0ZW50WzFdKSB7XG4gICAgICAgIC8vIHNocmluayBoZWFkXG4gICAgICAgIGNvbnN0IGkgPSBhQ29tbWFuZHMuZmluZEluZGV4KGMgPT4gY1thbG9uZ1RvXSA+IGJFeHRlbnRbMV0pO1xuICAgICAgICBoZWFkID0gZ2V0SGVhZChhQ29tbWFuZHMuc2xpY2UoaSAtIDEpLCByZXZlcnNlLCB0cnVlLCBpc0JvdHRvbSk7XG4gICAgICB9IGVsc2UgaWYgKGFFeHRlbnRbMV0gPCBiRXh0ZW50WzFdKSB7XG4gICAgICAgIC8vIGV4dGVuZCBoZWFkXG4gICAgICAgIGNvbnN0IGkgPSBiQ29tbWFuZHMuZmluZEluZGV4KGMgPT4gY1thbG9uZ1RvXSA+IGFFeHRlbnRbMV0pO1xuICAgICAgICBoZWFkID0gZ2V0SGVhZChiQ29tbWFuZHMuc2xpY2UoaSAtIDEpLCByZXZlcnNlLCBmYWxzZSwgaXNCb3R0b20pO1xuICAgICAgfVxuXG4gICAgICBpZiAoYUV4dGVudFswXSA8IGJFeHRlbnRbMF0pIHtcbiAgICAgICAgLy8gc2hyaW5rIHRhaWxcbiAgICAgICAgY29uc3QgaSA9IGFDb21tYW5kcy5maW5kSW5kZXgoYyA9PiBjW2Fsb25nVG9dID49IGJFeHRlbnRbMF0pO1xuICAgICAgICB0YWlsID0gZ2V0VGFpbChhQ29tbWFuZHMuc2xpY2UoMCwgaSArIDEpLCByZXZlcnNlLCB0cnVlLCBpc0JvdHRvbSk7XG4gICAgICB9IGVsc2UgaWYgKGFFeHRlbnRbMF0gPiBiRXh0ZW50WzBdKSB7XG4gICAgICAgIC8vIGV4dGVuZCB0YWlsXG4gICAgICAgIGNvbnN0IGkgPSBiQ29tbWFuZHMuZmluZEluZGV4KGMgPT4gY1thbG9uZ1RvXSA+PSBhRXh0ZW50WzBdKTtcbiAgICAgICAgdGFpbCA9IGdldFRhaWwoYkNvbW1hbmRzLnNsaWNlKDAsIGkgKyAxKSwgcmV2ZXJzZSwgZmFsc2UsIGlzQm90dG9tKTtcbiAgICAgICAgLy8gdGFpbCA9IGdldFRhaWwoYkNvbW1hbmRzLmZpbHRlcihjID0+IGNbYWxvbmdUb10gPCBhRXh0ZW50WzBdKSwgZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBib2R5TWluID0gTWF0aC5tYXgoYUV4dGVudFswXSwgYkV4dGVudFswXSk7XG4gICAgICBjb25zdCBib2R5TWF4ID0gTWF0aC5taW4oYUV4dGVudFsxXSwgYkV4dGVudFsxXSk7XG4gICAgICAvLyBnZXQgYm9keVxuICAgICAgYm9keSA9IGdldEJvZHkoXG4gICAgICAgIGFDb21tYW5kcy5maWx0ZXIoYyA9PiBjW2Fsb25nVG9dID49IGJvZHlNaW4gJiYgY1thbG9uZ1RvXSA8PSBib2R5TWF4ICApLFxuICAgICAgICBiQ29tbWFuZHMuZmlsdGVyKGMgPT4gY1thbG9uZ1RvXSA+PSBib2R5TWluICYmIGNbYWxvbmdUb10gPD0gYm9keU1heCAgKSxcbiAgICAgICAgcmV2ZXJzZSxcbiAgICAgICAgIWlzQm90dG9tICYmICgocmV2ZXJzZSAmJiAhaGVhZCkgfHwgKCFyZXZlcnNlICYmICF0YWlsKSlcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChyZXZlcnNlKSB7XG4gICAgICByZXR1cm4gdCA9PiB7XG4gICAgICAgIHJldHVybiAoaGVhZCA/IGhlYWQodCkgOiBcIlwiKSArIGJvZHkodCkgKyAodGFpbCA/IHRhaWwodCkgOiBcIlwiKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0ID0+IHtcbiAgICAgICAgcmV0dXJuICh0YWlsID8gdGFpbCh0KSA6IFwiXCIpICsgYm9keSh0KSArIChoZWFkID8gaGVhZCh0KSA6IFwiXCIpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEJvZHkoYUNvbW1hbmRzLCBiQ29tbWFuZHMsIHJldmVyc2UgPSBmYWxzZSwgaXNUYWlsID0gZmFsc2UpIHtcbiAgICAvLyBleHRlbmQgdG8gbWF0Y2ggZXF1YWwgc2l6ZVxuICAgIGNvbnN0IG51bVBvaW50c1RvRXh0ZW5kID0gTWF0aC5hYnMoYkNvbW1hbmRzLmxlbmd0aCAtIGFDb21tYW5kcy5sZW5ndGgpO1xuICAgIGlmIChhQ29tbWFuZHMubGVuZ3RoIDw9IDEgJiYgYkNvbW1hbmRzLmxlbmd0aCA8PSAxKSB7XG4gICAgICByZXR1cm4gdCA9PiBcIlwiO1xuICAgIH1cbiAgICBpZiAobnVtUG9pbnRzVG9FeHRlbmQgIT09IDApIHtcbiAgICAgIC8vIEIgaGFzIG1vcmUgcG9pbnRzIHRoYW4gQSwgc28gYWRkIHBvaW50cyB0byBBIGJlZm9yZSBpbnRlcnBvbGF0aW5nXG4gICAgICBpZiAoYkNvbW1hbmRzLmxlbmd0aCA+IGFDb21tYW5kcy5sZW5ndGgpIHtcbiAgICAgICAgYUNvbW1hbmRzID0gZXh0ZW5kKGFDb21tYW5kcywgYkNvbW1hbmRzLCBudW1Qb2ludHNUb0V4dGVuZCk7XG5cbiAgICAgICAgLy8gZWxzZSBpZiBBIGhhcyBtb3JlIHBvaW50cyB0aGFuIEIsIGFkZCBtb3JlIHBvaW50cyB0byBCXG4gICAgICB9IGVsc2UgaWYgKGJDb21tYW5kcy5sZW5ndGggPCBhQ29tbWFuZHMubGVuZ3RoKSB7XG4gICAgICAgIGJDb21tYW5kcyA9IGV4dGVuZChiQ29tbWFuZHMsIGFDb21tYW5kcywgbnVtUG9pbnRzVG9FeHRlbmQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbW1hbmRzIGhhdmUgc2FtZSBsZW5ndGggbm93LlxuICAgIC8vIGNvbnZlcnQgQSB0byB0aGUgc2FtZSB0eXBlIG9mIEJcbiAgICBhQ29tbWFuZHMgPSBhQ29tbWFuZHMubWFwKChhQ29tbWFuZCwgaSkgPT5cbiAgICAgIGNvbnZlcnRUb1NhbWVUeXBlKGFDb21tYW5kLCBiQ29tbWFuZHNbaV0pXG4gICAgKTtcbiAgICBhQ29tbWFuZHMgPSAocmV2ZXJzZSA/IGFDb21tYW5kcy5yZXZlcnNlKCkgOiBhQ29tbWFuZHMpO1xuICAgIGJDb21tYW5kcyA9IChyZXZlcnNlID8gYkNvbW1hbmRzLnJldmVyc2UoKSA6IGJDb21tYW5kcyk7XG4gICAgaWYgKGlzVGFpbCkge1xuICAgICAgYUNvbW1hbmRzWzBdID0gT2JqZWN0LmFzc2lnbih7fSwgYUNvbW1hbmRzWzBdLCB7IHR5cGU6IFwiTVwiIH0pO1xuICAgICAgYkNvbW1hbmRzWzBdID0gT2JqZWN0LmFzc2lnbih7fSwgYkNvbW1hbmRzWzBdLCB7IHR5cGU6IFwiTVwiIH0pO1xuICAgIH1cbiAgICBjb25zdCBhUHJvY2Vzc2VkID0gYUNvbW1hbmRzXG4gICAgICAubWFwKGNvbW1hbmRUb1N0cmluZylcbiAgICAgIC5qb2luKFwiXCIpO1xuICAgIGNvbnN0IGJQcm9jZXNzZWQgPSBiQ29tbWFuZHNcbiAgICAgIC5tYXAoY29tbWFuZFRvU3RyaW5nKVxuICAgICAgLmpvaW4oXCJcIik7XG5cbiAgICBjb25zdCBzdHJpbmdJbnRlcnBvbGF0b3IgPSBkMy5pbnRlcnBvbGF0ZVN0cmluZyhhUHJvY2Vzc2VkLCBiUHJvY2Vzc2VkKTtcblxuICAgIHJldHVybiBmdW5jdGlvbiBwYXRoSW50ZXJwb2xhdG9yKHQpIHtcbiAgICAgIC8vIGF0IDEgcmV0dXJuIHRoZSBmaW5hbCB2YWx1ZSB3aXRob3V0IHRoZSBleHRlbnNpb25zIHVzZWQgZHVyaW5nIGludGVycG9sYXRpb25cbiAgICAgIGlmICh0ID09PSAxKSB7XG4gICAgICAgIHJldHVybiBiUHJvY2Vzc2VkID09IG51bGwgPyBcIlwiIDogYlByb2Nlc3NlZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0cmluZ0ludGVycG9sYXRvcih0KTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0SGVhZChjb21tYW5kcywgcmV2ZXJzZSA9IGZhbHNlLCBpc1NocmluayA9IGZhbHNlLCBpc0JvdHRvbT1mYWxzZSkge1xuICAgIGNvbnN0IGQgPSBjb21tYW5kcy5tYXAoY29tbWFuZFRvU3RyaW5nKS5qb2luKFwiXCIpO1xuICAgIGNvbnN0IEwgPSBjb21tYW5kcy5sZW5ndGg7XG4gICAgY29uc3QgcGhhc2VzID0gW107XG4gICAgY29uc3QgZGVidWcgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBMIC0gMTsgaSsrKSB7XG4gICAgICBsZXQgYUNvbW1hbmRzID0gY29tbWFuZHMuc2xpY2UoMCwgaSkuY29uY2F0KFtjb21tYW5kc1tpIC0gMV1dKTtcbiAgICAgIGxldCBiQ29tbWFuZHMgPSBjb21tYW5kcy5zbGljZSgwLCBpICsgMSk7XG4gICAgICBhQ29tbWFuZHMgPSAocmV2ZXJzZSA/IGFDb21tYW5kcy5yZXZlcnNlKCkgOiBhQ29tbWFuZHMpO1xuICAgICAgYkNvbW1hbmRzID0gKHJldmVyc2UgPyBiQ29tbWFuZHMucmV2ZXJzZSgpIDogYkNvbW1hbmRzKTtcbiAgICAgIGNvbnN0IGFQcm9jZXNzZWQgPSBhQ29tbWFuZHNcbiAgICAgICAgLm1hcChjb21tYW5kVG9TdHJpbmcpXG4gICAgICAgIC5qb2luKFwiXCIpO1xuICAgICAgY29uc3QgYlByb2Nlc3NlZCA9IGJDb21tYW5kc1xuICAgICAgICAubWFwKGNvbW1hbmRUb1N0cmluZylcbiAgICAgICAgLmpvaW4oXCJcIik7XG4gICAgICBpZiAocmV2ZXJzZSAmJiAhaXNCb3R0b20pIHtcbiAgICAgICAgYUNvbW1hbmRzWzBdID0gT2JqZWN0LmFzc2lnbih7fSwgYUNvbW1hbmRzWzBdLCB7IHR5cGU6IFwiTVwiIH0pO1xuICAgICAgICBiQ29tbWFuZHNbMF0gPSBPYmplY3QuYXNzaWduKHt9LCBiQ29tbWFuZHNbMF0sIHsgdHlwZTogXCJNXCIgfSk7XG4gICAgICB9XG4gICAgICBkZWJ1Zy5wdXNoKHsgYVByb2Nlc3NlZCwgYlByb2Nlc3NlZCB9KTtcbiAgICAgIHBoYXNlcy5wdXNoKGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgcmV0dXJuIGQzLmludGVycG9sYXRlU3RyaW5nKGFQcm9jZXNzZWQsIGJQcm9jZXNzZWQpKHQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIGlmIChpc1Nocmluaykge1xuICAgICAgICB0ID0gMSAtIHQ7XG4gICAgICB9XG4gICAgICBpZiAodCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gZCA9PSBudWxsID8gXCJcIiA6IGQ7XG4gICAgICB9XG4gICAgICBjb25zdCBwaGFzZSA9IE1hdGguZmxvb3IodCAqIChMIC0gMSkpO1xuXG4gICAgICByZXR1cm4gcGhhc2VzW3BoYXNlXSh0ICogKEwgLSAxKSAtIHBoYXNlKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0VGFpbChjb21tYW5kcywgcmV2ZXJzZSA9IGZhbHNlLCBpc1NocmluayA9IGZhbHNlLCBpc0JvdHRvbT1mYWxzZSkge1xuICAgIGNvbnN0IGQgPSBjb21tYW5kcy5tYXAoY29tbWFuZFRvU3RyaW5nKS5qb2luKFwiXCIpO1xuICAgIGNvbnN0IEwgPSBjb21tYW5kcy5sZW5ndGg7XG4gICAgY29uc3QgcGhhc2VzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBMOyBpKyspIHtcbiAgICAgIGxldCBhQ29tbWFuZHMgPSBbY29tbWFuZHNbTCAtIGldXS5jb25jYXQoY29tbWFuZHMuc2xpY2UoTCAtIGksIEwpKTtcbiAgICAgIGxldCBiQ29tbWFuZHMgPSBjb21tYW5kcy5zbGljZShMIC0gaSAtIDEsIEwpO1xuXG4gICAgICBhQ29tbWFuZHMgPSAocmV2ZXJzZSA/IGFDb21tYW5kcy5yZXZlcnNlKCkgOiBhQ29tbWFuZHMpO1xuICAgICAgYkNvbW1hbmRzID0gKHJldmVyc2UgPyBiQ29tbWFuZHMucmV2ZXJzZSgpIDogYkNvbW1hbmRzKTtcblxuICAgICAgaWYgKCFyZXZlcnNlICYmICFpc0JvdHRvbSkge1xuICAgICAgICBhQ29tbWFuZHNbMF0gPSBPYmplY3QuYXNzaWduKHt9LCBhQ29tbWFuZHNbMF0sIHsgdHlwZTogXCJNXCIgfSk7XG4gICAgICAgIGJDb21tYW5kc1swXSA9IE9iamVjdC5hc3NpZ24oe30sIGJDb21tYW5kc1swXSwgeyB0eXBlOiBcIk1cIiB9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYVByb2Nlc3NlZCA9IGFDb21tYW5kc1xuICAgICAgICAubWFwKGNvbW1hbmRUb1N0cmluZylcbiAgICAgICAgLmpvaW4oXCJcIik7XG4gICAgICBjb25zdCBiUHJvY2Vzc2VkID0gYkNvbW1hbmRzXG4gICAgICAgIC5tYXAoY29tbWFuZFRvU3RyaW5nKVxuICAgICAgICAuam9pbihcIlwiKTtcblxuICAgICAgcGhhc2VzLnB1c2goZnVuY3Rpb24odCkge1xuICAgICAgICByZXR1cm4gZDMuaW50ZXJwb2xhdGVTdHJpbmcoYVByb2Nlc3NlZCwgYlByb2Nlc3NlZCkodCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIGlmIChpc1Nocmluaykge1xuICAgICAgICB0ID0gMSAtIHQ7XG4gICAgICB9XG4gICAgICBpZiAodCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gZCA9PSBudWxsID8gXCJcIiA6IGQ7XG4gICAgICB9XG4gICAgICBjb25zdCBwaGFzZSA9IE1hdGguZmxvb3IodCAqIChMIC0gMSkpO1xuICAgICAgcmV0dXJuIHBoYXNlc1twaGFzZV0odCAqIChMIC0gMSkgLSBwaGFzZSk7XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgeyBpbnRlcnBvbGF0ZVBhdGgsIGludGVycG9sYXRlUGF0aDIsIGxpbmVUb0FyZWEgfTtcbiIsIi8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuaW1wb3J0ICogYXMgZDMgZnJvbSBcImQzXCI7XG5pbXBvcnQgeyBpbnRlcnBvbGF0ZVBhdGgsIGludGVycG9sYXRlUGF0aDIgfSBmcm9tIFwiLi9pbnRlcnBvbGF0ZVBhdGhZSFwiO1xuaW1wb3J0IHtnZXR9IGZyb20gXCIuLi8uLi91dGlsL3V0aWxcIjtcblxuXG5cblxuZnVuY3Rpb24gcmVjdEludGVycG9sYXRvcihzY2FsZXMsIGVuY29kZXMsIHNpZ25hbHMsIGQsIG9sZEQsIGdldFJlY3QpIHtcbiAgbGV0IHBhdGhfaTtcbiAgbGV0IHBhdGhfZjtcbiAgY29uc3QgZF9pID0gZC5pbml0aWFsIHx8IG9sZEQgfHwgZDMuc2VsZWN0KHRoaXMpLmRhdHVtKCk7XG4gIGNvbnN0IGRfZiA9IGQuZmluYWwgfHwgZDtcbiAgY29uc3QgZW5jb2RlX2kgPSBlbmNvZGVzLmluaXRpYWwgfHwgZW5jb2RlcztcbiAgY29uc3QgZW5jb2RlX2YgPSBlbmNvZGVzLmZpbmFsIHx8IGVuY29kZXM7XG4gIGNvbnN0IHNjYWxlX2kgPSB7XG4gICAgcHJpbWFyeTogc2NhbGVzLmluaXRpYWwgfHwgc2NhbGVzLFxuICAgIHNlY29uZGFyeTogc2NhbGVzLmZpbmFsIHx8IHNjYWxlc1xuICB9O1xuICBjb25zdCBzY2FsZV9mID0ge1xuICAgIHByaW1hcnk6IHNjYWxlcy5maW5hbCB8fCBzY2FsZXMsXG4gICAgc2Vjb25kYXJ5OiBzY2FsZXMuaW5pdGlhbCB8fCBzY2FsZXNcbiAgfTtcbiAgY29uc3Qgc2lnbmFsX2kgPSBzaWduYWxzLmluaXRpYWwgfHwgc2lnbmFscztcbiAgY29uc3Qgc2lnbmFsX2YgPSBzaWduYWxzLmZpbmFsIHx8IHNpZ25hbHM7XG5cbiAgcGF0aF9pID0gZ2V0UmVjdChkX2ksIHNjYWxlX2ksIGVuY29kZV9pLCBzaWduYWxfaSkucGF0aDtcbiAgcGF0aF9mID0gZ2V0UmVjdChkX2YsIHNjYWxlX2YsIGVuY29kZV9mLCBzaWduYWxfZikucGF0aDtcblxuICByZXR1cm4gaW50ZXJwb2xhdGVQYXRoKHBhdGhfaSwgcGF0aF9mKTtcbn1cbmZ1bmN0aW9uIHN5bWJvbEludGVycG9sYXRvcihzY2FsZXMsIGVuY29kZXMsIHNpZ25hbHMsIGQsIG9sZEQsIGdldFNoYXBlKSB7XG4gIGxldCBzaGFwZV9pO1xuICBsZXQgc2hhcGVfZjtcbiAgbGV0IHNoYXBlX2lfZGltaW5pc2hlZDtcbiAgbGV0IHNoYXBlX2ZfZGltaW5pc2hlZDtcbiAgY29uc3QgZF9pID0gZC5pbml0aWFsIHx8IG9sZEQgfHwgZDMuc2VsZWN0KHRoaXMpLmRhdHVtKCk7XG4gIGNvbnN0IGRfZiA9IGQuZmluYWwgfHwgZDtcbiAgY29uc3QgZW5jb2RlX2kgPSBlbmNvZGVzLmluaXRpYWwgfHwgZW5jb2RlcztcbiAgY29uc3QgZW5jb2RlX2YgPSBlbmNvZGVzLmZpbmFsIHx8IGVuY29kZXM7XG4gIGNvbnN0IHNjYWxlX2kgPSBzY2FsZXMuaW5pdGlhbCB8fCBzY2FsZXM7XG4gIGNvbnN0IHNjYWxlX2YgPSBzY2FsZXMuZmluYWwgfHwgc2NhbGVzO1xuICBjb25zdCBzaWduYWxfaSA9IHNpZ25hbHMuaW5pdGlhbCB8fCBzaWduYWxzO1xuICBjb25zdCBzaWduYWxfZiA9IHNpZ25hbHMuZmluYWwgfHwgc2lnbmFscztcbiAgbGV0IGlzTW9ycGggPSBmYWxzZTtcblxuICBzaGFwZV9pID0gZ2V0U2hhcGUoZF9pLCBzY2FsZV9pLCBlbmNvZGVfaSwgc2lnbmFsX2kpO1xuICBzaGFwZV9mID0gZ2V0U2hhcGUoZF9mLCBzY2FsZV9mLCBlbmNvZGVfZiwgc2lnbmFsX2YpO1xuICBpZiAoc2hhcGVfaS5tZXRhLnNoYXBlICE9PSBzaGFwZV9mLm1ldGEuc2hhcGUpIHtcbiAgICBpc01vcnBoID0gdHJ1ZTtcbiAgICBzaGFwZV9pX2RpbWluaXNoZWQgPSBnZXRTaGFwZShkX2ksIHNjYWxlX2ksIGVuY29kZV9pLCBzaWduYWxfaSwgdHJ1ZSk7XG4gICAgc2hhcGVfZl9kaW1pbmlzaGVkID0gZ2V0U2hhcGUoZF9mLCBzY2FsZV9mLCBlbmNvZGVfZiwgc2lnbmFsX2YsIHRydWUpO1xuICB9XG5cbiAgaWYgKGlzTW9ycGgpIHtcbiAgICByZXR1cm4gdCA9PiB7XG4gICAgICBpZiAodCA8IDAuNSkge1xuICAgICAgICByZXR1cm4gaW50ZXJwb2xhdGVQYXRoKHNoYXBlX2kucGF0aCwgc2hhcGVfaV9kaW1pbmlzaGVkLnBhdGgpKHQgKiAyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpbnRlcnBvbGF0ZVBhdGgoXG4gICAgICAgIHNoYXBlX2ZfZGltaW5pc2hlZC5wYXRoLFxuICAgICAgICBzaGFwZV9mLnBhdGhcbiAgICAgICkoKHQgLSAwLjUpICogMik7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gaW50ZXJwb2xhdGVQYXRoKHNoYXBlX2kucGF0aCwgc2hhcGVfZi5wYXRoKTtcbn1cblxuZnVuY3Rpb24gYXJlYUxpbmVJbnRlcnBvbGF0b3JXaXRoU2NhbGVzKFxuICBzY2FsZXMsXG4gIGVuY29kZXMsXG4gIG1hcmt0eXBlcyxcbiAgZCxcbiAgb2xkRCxcbiAgc2lnbmFscyxcbiAgZ2V0UGF0aCxcbiAgaW50ZXJwb2xhdGVTdHlsZSxcbiAgYWxvbmdUb3Ncbikge1xuICBjb25zdCBlbmNvZGVfaSA9IGVuY29kZXMuaW5pdGlhbCB8fCBlbmNvZGVzO1xuICBjb25zdCBlbmNvZGVfZiA9IGVuY29kZXMuZmluYWwgfHwgZW5jb2RlcztcbiAgY29uc3QgbWFya3R5cGVfaSA9IG1hcmt0eXBlcy5pbml0aWFsIHx8IG1hcmt0eXBlcztcbiAgLy8gY29uc3QgbWFya3R5cGVfaSA9IFwiYXJlYVwiO1xuICBjb25zdCBtYXJrdHlwZV9mID0gbWFya3R5cGVzLmZpbmFsIHx8IG1hcmt0eXBlcztcbiAgY29uc3Qgc2NhbGVfaSA9IHNjYWxlcy5pbml0aWFsIHx8IHNjYWxlcztcbiAgY29uc3Qgc2NhbGVfZiA9IHNjYWxlcy5maW5hbCB8fCBzY2FsZXM7XG4gIGNvbnN0IHNpZ25hbF9pID0gc2lnbmFscy5pbml0aWFsIHx8IHNpZ25hbHM7XG4gIGNvbnN0IHNpZ25hbF9mID0gc2lnbmFscy5maW5hbCB8fCBzaWduYWxzO1xuICBjb25zdCBkX2kgPSBkLmluaXRpYWwgfHwgb2xkRDtcbiAgY29uc3QgZF9mID0gZC5maW5hbCB8fCBkO1xuICBjb25zdCBhbG9uZ1RvX2kgPSBhbG9uZ1Rvcy5pbml0aWFsIHx8IGFsb25nVG9zO1xuICBjb25zdCBhbG9uZ1RvX2YgPSBhbG9uZ1Rvcy5maW5hbCB8fCBhbG9uZ1RvcztcbiAgY29uc3QgcGF0aHNfMTEgPSBnZXRQYXRoKGFyZWFMaW5lRFRvRGF0YShkX2kpLCBzY2FsZV9pLCBlbmNvZGVfaSwgc2lnbmFsX2ksIG1hcmt0eXBlX2ksIGFsb25nVG9faSk7XG4gIGNvbnN0IHBhdGhzXzEyID0gZ2V0UGF0aChhcmVhTGluZURUb0RhdGEoZF9pKSwgc2NhbGVfZiwgZW5jb2RlX2ksIHNpZ25hbF9pLCBtYXJrdHlwZV9pLCBhbG9uZ1RvX2kpO1xuICBjb25zdCBwYXRoc18yMSA9IGdldFBhdGgoYXJlYUxpbmVEVG9EYXRhKGRfZiksIHNjYWxlX2ksIGVuY29kZV9mLCBzaWduYWxfZiwgbWFya3R5cGVfZiwgYWxvbmdUb19mKTtcbiAgY29uc3QgcGF0aHNfMjIgPSBnZXRQYXRoKGFyZWFMaW5lRFRvRGF0YShkX2YpLCBzY2FsZV9mLCBlbmNvZGVfZiwgc2lnbmFsX2YsIG1hcmt0eXBlX2YsIGFsb25nVG9fZik7XG5cbiAgaWYgKFxuICAgIGlzVmFsaWRQYXRoKHBhdGhzXzExKSAmJlxuICAgIGlzVmFsaWRQYXRoKHBhdGhzXzEyKSAmJlxuICAgIGlzVmFsaWRQYXRoKHBhdGhzXzIxKSAmJlxuICAgIGlzVmFsaWRQYXRoKHBhdGhzXzIyKVxuICApIHtcbiAgICBjb25zdCBpbnRlcnBvbGF0b3Jfc2NhbGUxID0gaW50ZXJwb2xhdGVQYXRoKHBhdGhzXzExLCBwYXRoc18xMiwgYWxvbmdUb19pKTtcbiAgICBjb25zdCBpbnRlcnBvbGF0b3Jfc2NhbGUyID0gaW50ZXJwb2xhdGVQYXRoKHBhdGhzXzIxLCBwYXRoc18yMiwgYWxvbmdUb19mKTtcbiAgICBjb25zdCBpbnRlcnBvbGF0b3JfZGF0YSA9XG4gICAgICBpbnRlcnBvbGF0ZVN0eWxlID09PSBcInVwZGF0ZVwiID8gaW50ZXJwb2xhdGVQYXRoMiA6IGludGVycG9sYXRlUGF0aDtcbiAgICAgIC8vIGludGVycG9sYXRlU3R5bGUgPT09IFwidXBkYXRlXCIgPyBpbnRlcnBvbGF0ZVBhdGgzIDogaW50ZXJwb2xhdGVQYXRoO1xuICAgIHJldHVybiB0ID0+IHtcbiAgICAgIHJldHVybiBpbnRlcnBvbGF0b3JfZGF0YShcbiAgICAgICAgaW50ZXJwb2xhdG9yX3NjYWxlMSh0KSxcbiAgICAgICAgaW50ZXJwb2xhdG9yX3NjYWxlMih0KSxcbiAgICAgICAgYWxvbmdUb19pXG4gICAgICApKHQpO1xuICAgIH07XG4gIH1cbiAgY29uc3QgaW50ZXJwb2xhdG9yX2RhdGEgPVxuICAgIGludGVycG9sYXRlU3R5bGUgPT09IFwidXBkYXRlXCIgPyBpbnRlcnBvbGF0ZVBhdGgyIDogaW50ZXJwb2xhdGVQYXRoO1xuICAgIC8vIGludGVycG9sYXRlU3R5bGUgPT09IFwidXBkYXRlXCIgPyBpbnRlcnBvbGF0ZVBhdGgzIDogaW50ZXJwb2xhdGVQYXRoO1xuXG4gIHJldHVybiBpbnRlcnBvbGF0b3JfZGF0YShwYXRoc18xMSwgcGF0aHNfMjIsIGFsb25nVG9faSk7XG59XG5cbmZ1bmN0aW9uIGFyZWFMaW5lSW50ZXJwb2xhdG9yKFxuICBzY2FsZXMsXG4gIGVuY29kZXMsXG4gIG1hcmt0eXBlcyxcbiAgZCxcbiAgb2xkRCxcbiAgc2lnbmFscyxcbiAgZ2V0UGF0aCxcbiAgaW50ZXJwb2xhdGVTdHlsZVxuKSB7XG4gIGNvbnN0IG1hcmt0eXBlID0gdHlwZW9mIG1hcmt0eXBlcyA9PT0gXCJzdHJpbmdcIiA/IG1hcmt0eXBlcyA6IHVuZGVmaW5lZDtcblxuICBpZiAobWFya3R5cGUgPT09IFwibGluZVwiKSB7XG4gICAgY29uc3QgZGF0YVRvUGF0aCA9IChkYXRhLCBzY2FsZSwgZW5jb2RlLCBzaWduYWwpID0+IHtcbiAgICAgIHJldHVybiBnZXRQYXRoKGRhdGEsIHNjYWxlLCBlbmNvZGUsIHNpZ25hbCwgXCJsaW5lXCIpO1xuICAgIH07XG4gICAgY29uc3QgY29tcHV0SWQgPSAoZW5jb2RlLCBkKSA9PiB7XG4gICAgICByZXR1cm4gIWRcbiAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgOiBbZC5kYXR1bVtlbmNvZGUueC5maWVsZF0sIGQuZGF0dW1bZW5jb2RlLnkuZmllbGRdXS5qb2luKFwiLFwiKTtcbiAgICB9O1xuICAgIHJldHVybiBjb21wdXRlTGluZUludGVycG9sYXRvcihcbiAgICAgIGFyZWFMaW5lRFRvRGF0YShkLmluaXRpYWwgfHwgb2xkRCksXG4gICAgICBhcmVhTGluZURUb0RhdGEoZC5maW5hbCB8fCBkKSxcbiAgICAgIHNjYWxlcyxcbiAgICAgIGVuY29kZXMsXG4gICAgICBzaWduYWxzLFxuICAgICAgY29tcHV0SWQsXG4gICAgICBkYXRhVG9QYXRoXG4gICAgKTtcbiAgICAvLyBpZiAoaW50ZXJwb2xhdGVTdHlsZSA9PT0gXCJ1cGRhdGVcIikge1xuICAgIC8vICAgY29uc3QgZGF0YVRvUGF0aCA9IChkYXRhLCBzY2FsZSwgZW5jb2RlLCBzaWduYWwpID0+IHtcbiAgICAvLyAgICAgcmV0dXJuIGdldFBhdGgoZGF0YSwgc2NhbGUsIGVuY29kZSwgc2lnbmFsLCBcImxpbmVcIik7XG4gICAgLy8gICB9O1xuICAgIC8vICAgY29uc3QgY29tcHV0SWQgPSAoZW5jb2RlLCBkKSA9PiB7XG4gICAgLy8gICAgIHJldHVybiAhZFxuICAgIC8vICAgICAgID8gdW5kZWZpbmVkXG4gICAgLy8gICAgICAgOiBbZC5kYXR1bVtlbmNvZGUueC5maWVsZF0sIGQuZGF0dW1bZW5jb2RlLnkuZmllbGRdXS5qb2luKFwiLFwiKTtcbiAgICAvLyAgIH07XG4gICAgLy8gICByZXR1cm4gY29tcHV0ZUxpbmVJbnRlcnBvbGF0b3IoXG4gICAgLy8gICAgIGFyZWFMaW5lRFRvRGF0YShvbGREKSxcbiAgICAvLyAgICAgYXJlYUxpbmVEVG9EYXRhKGQpLFxuICAgIC8vICAgICBzY2FsZXMsXG4gICAgLy8gICAgIGVuY29kZXMsXG4gICAgLy8gICAgIHNpZ25hbHMsXG4gICAgLy8gICAgIGNvbXB1dElkLFxuICAgIC8vICAgICBkYXRhVG9QYXRoXG4gICAgLy8gICApO1xuICAgIC8vIH1cblxuICAgIC8vIHJldHVybiBhcmVhTGluZUludGVycG9sYXRvcldpdGhTY2FsZXMuYmluZCh0aGlzKShcbiAgICAvLyAgIHNjYWxlcyxcbiAgICAvLyAgIGVuY29kZXMsXG4gICAgLy8gICBcImxpbmVcIixcbiAgICAvLyAgIGQsXG4gICAgLy8gICBvbGRELFxuICAgIC8vICAgc2lnbmFscyxcbiAgICAvLyAgIGdldFBhdGgsXG4gICAgLy8gICBpbnRlcnBvbGF0ZVN0eWxlXG4gICAgLy8gKTtcbiAgfVxuICBpZiAobWFya3R5cGUgPT09IFwiYXJlYVwiIHx8IG1hcmt0eXBlID09PSBcInRyYWlsXCIpIHtcbiAgICBjb25zdCBhbG9uZ1RvcyA9IHtcbiAgICAgIGluaXRpYWw6IGdldChlbmNvZGVzLCBcImluaXRpYWxcIiwgXCJvcmllbnRcIiwgXCJ2YWx1ZVwiKSA9PT0gXCJob3Jpem9udGFsXCIgPyBcInlcIjogXCJ4XCIsXG4gICAgICBmaW5hbDogZ2V0KGVuY29kZXMsIFwiZmluYWxcIiwgXCJvcmllbnRcIiwgXCJ2YWx1ZVwiKSA9PT0gXCJob3Jpem9udGFsXCIgPyBcInlcIjogXCJ4XCJcbiAgICB9O1xuICAgIHJldHVybiBhcmVhTGluZUludGVycG9sYXRvcldpdGhTY2FsZXMuYmluZCh0aGlzKShcbiAgICAgIHNjYWxlcyxcbiAgICAgIGVuY29kZXMsXG4gICAgICBtYXJrdHlwZSxcbiAgICAgIGQsXG4gICAgICBvbGRELFxuICAgICAgc2lnbmFscyxcbiAgICAgIGdldFBhdGgsXG4gICAgICBpbnRlcnBvbGF0ZVN0eWxlLFxuICAgICAgYWxvbmdUb3NcbiAgICApO1xuICB9XG5cbiAgLy8gd2hlbiB0aGUgbWFya3R5cGUgY2hhbmdlcyBiZXR3ZWVuIFwiYXJlYVwiIGFuZCBcImxpbmVcIiwgYXNzdW1lIHRoZSBsaW5lIGFzIGFyZWEuXG5cbiAgaWYgKG1hcmt0eXBlcy5pbml0aWFsID09PSBcImxpbmVcIiAmJiBtYXJrdHlwZXMuZmluYWwgPT09IFwiYXJlYVwiKSB7XG4gICAgbGV0IGFsb25nVG8gPSBnZXQoZW5jb2RlcywgXCJmaW5hbFwiLCBcIm9yaWVudFwiLCBcInZhbHVlXCIpID09PSBcImhvcml6b250YWxcIiA/IFwieVwiOiBcInhcIjtcbiAgICByZXR1cm4gYXJlYUxpbmVJbnRlcnBvbGF0b3JXaXRoU2NhbGVzLmJpbmQodGhpcykoc2NhbGVzLCBlbmNvZGVzLCBcImFyZWFcIiwgZCwgb2xkRCwgc2lnbmFscywgZ2V0UGF0aCwgaW50ZXJwb2xhdGVTdHlsZSwgYWxvbmdUbyk7XG4gIH0gZWxzZSB7IC8vIGFyZWEgLT4gbGluZVxuICAgIGxldCBhbG9uZ1RvID0gZ2V0KGVuY29kZXMsIFwiaW5pdGlhbFwiLCBcIm9yaWVudFwiLCBcInZhbHVlXCIpID09PSBcImhvcml6b250YWxcIiA/IFwieVwiOiBcInhcIjtcbiAgICBsZXQgbGluZVBhdGhzID0gZ2V0UGF0aChcbiAgICAgIGFyZWFMaW5lRFRvRGF0YShkLmZpbmFsIHx8IGQpLFxuICAgICAgc2NhbGVzLmZpbmFsIHx8IHNjYWxlcyxcbiAgICAgIGVuY29kZXMuZmluYWwgfHwgZW5jb2RlcyxcbiAgICAgIHNpZ25hbHMuZmluYWwgfHwgc2lnbmFscyxcbiAgICAgIFwibGluZVwiKTtcbiAgICBsZXQgaW50cCA9IGFyZWFMaW5lSW50ZXJwb2xhdG9yV2l0aFNjYWxlcy5iaW5kKHRoaXMpKHNjYWxlcywgZW5jb2RlcywgXCJhcmVhXCIsIGQsIG9sZEQsIHNpZ25hbHMsIGdldFBhdGgsIGludGVycG9sYXRlU3R5bGUsIGFsb25nVG8pO1xuICAgIHJldHVybiAodCkgPT4ge1xuICAgICAgcmV0dXJuIHQgPj0gMSA/IGxpbmVQYXRocyA6IGludHAodCk7XG4gICAgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhcmVhTGluZURUb0RhdGEoZCkge1xuICBpZiAoIWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBkLm1hcmsubWFya3R5cGUgIT09IFwiZ3JvdXBcIiA/IGQubWFyay5pdGVtcyA6IGQuaXRlbXNbMF0uaXRlbXM7XG59XG5cbi8vIEludGVycG9sYXRlIHBhdGgoZGF0YUEsIHNjYWxlQSkgLT4gcGF0aChkYXRhQiwgc2NhbGVCKVxuZnVuY3Rpb24gY29tcHV0ZUxpbmVJbnRlcnBvbGF0b3IoXG4gIGRhdGFBLFxuICBkYXRhQixcbiAgc2NhbGVzLFxuICBlbmNvZGVzLFxuICBzaWduYWxzLFxuICBjb21wdXRlSWQsXG4gIGdldFBhdGhcbikge1xuICBjb25zdCB0ID0gRGF0ZS5ub3coKTtcbiAgLy8gMSkgY2FsY3VsYXRlIHR3byBhbmNob3JzIGJldHdlZW4gZGF0YUEgYW5kIGRhdGFCXG4gIGNvbnN0IF9lbmNvZGVzID0gZW5jb2Rlcy5pbml0aWFsICYmIGVuY29kZXMuZmluYWwgPyBlbmNvZGVzIDoge1xuICAgIGluaXRpYWw6IGVuY29kZXMsXG4gICAgZmluYWw6IGVuY29kZXNcbiAgfTtcbiAgY29uc3QgY29tcHV0ZUlkQSA9IGQgPT4gY29tcHV0ZUlkKF9lbmNvZGVzLmluaXRpYWwsIGQpO1xuICBjb25zdCBjb21wdXRlSWRCID0gZCA9PiBjb21wdXRlSWQoX2VuY29kZXMuZmluYWwsIGQpO1xuICBjb25zdCBMYSA9IGRhdGFBLmxlbmd0aDtcbiAgY29uc3QgTGIgPSBkYXRhQi5sZW5ndGg7XG4gIGxldCBpID0gZGF0YUIuZmluZEluZGV4KGQgPT4gY29tcHV0ZUlkQihkKSA9PT0gY29tcHV0ZUlkQShkYXRhQVswXSkpO1xuICBsZXQgaiA9IGRhdGFCLmZpbmRJbmRleChkID0+IGNvbXB1dGVJZEIoZCkgPT09IGNvbXB1dGVJZEEoZGF0YUFbTGEgLSAxXSkpO1xuICBsZXQgaGVhZDtcbiAgbGV0IHRhaWw7XG4gIGxldCBib2R5O1xuXG4gIGlmIChpID49IDApIHtcbiAgICBpZiAoaiA+PSAwKSB7XG4gICAgICBpZiAoaiA8IGkpIHtcbiAgICAgICAgYm9keSA9IGdldEJvZHkoZGF0YUEsIGRhdGFCLCBzY2FsZXMsIF9lbmNvZGVzLCBzaWduYWxzLCBnZXRQYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhaWwgPSBnZXRUYWlsKFxuICAgICAgICAgIGRhdGFCLnNsaWNlKDAsIGkgKyAxKSxcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICBzY2FsZXMsXG4gICAgICAgICAgX2VuY29kZXMsXG4gICAgICAgICAgc2lnbmFscyxcbiAgICAgICAgICBnZXRQYXRoXG4gICAgICAgICk7XG4gICAgICAgIGJvZHkgPSBnZXRCb2R5KFxuICAgICAgICAgIGRhdGFBLFxuICAgICAgICAgIGRhdGFCLnNsaWNlKGksIGogKyAxKSxcbiAgICAgICAgICBzY2FsZXMsXG4gICAgICAgICAgX2VuY29kZXMsXG4gICAgICAgICAgc2lnbmFscyxcbiAgICAgICAgICBnZXRQYXRoLFxuICAgICAgICAgIGZhbHNlXG4gICAgICAgICk7XG4gICAgICAgIGhlYWQgPSBnZXRIZWFkKFxuICAgICAgICAgIGRhdGFCLnNsaWNlKGopLFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIHNjYWxlcyxcbiAgICAgICAgICBfZW5jb2RlcyxcbiAgICAgICAgICBzaWduYWxzLFxuICAgICAgICAgIGdldFBhdGhcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgKGogPSBkYXRhQS5maW5kSW5kZXgoZCA9PiBjb21wdXRlSWRBKGQpID09PSBjb21wdXRlSWRCKGRhdGFCW0xiIC0gMV0pKSkgPj0gMFxuICAgICkge1xuICAgICAgdGFpbCA9IGdldFRhaWwoXG4gICAgICAgIGRhdGFCLnNsaWNlKDAsIGkgKyAxKSxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIHNjYWxlcyxcbiAgICAgICAgX2VuY29kZXMsXG4gICAgICAgIHNpZ25hbHMsXG4gICAgICAgIGdldFBhdGhcbiAgICAgICk7XG4gICAgICBib2R5ID0gZ2V0Qm9keShcbiAgICAgICAgZGF0YUEuc2xpY2UoMCwgaiArIDEpLFxuICAgICAgICBkYXRhQi5zbGljZShpKSxcbiAgICAgICAgc2NhbGVzLFxuICAgICAgICBfZW5jb2RlcyxcbiAgICAgICAgc2lnbmFscyxcbiAgICAgICAgZ2V0UGF0aCxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgICBoZWFkID0gZ2V0SGVhZChkYXRhQS5zbGljZShqKSwgdHJ1ZSwgc2NhbGVzLCBfZW5jb2Rlcywgc2lnbmFscywgZ2V0UGF0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJvZHkgPSBnZXRCb2R5KGRhdGFBLCBkYXRhQiwgc2NhbGVzLCBfZW5jb2Rlcywgc2lnbmFscywgZ2V0UGF0aCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGogPj0gMCkge1xuICAgIGlmIChcbiAgICAgIChpID0gZGF0YUEuZmluZEluZGV4KGQgPT4gY29tcHV0ZUlkQShkKSA9PT0gY29tcHV0ZUlkQihkYXRhQlswXSkpKSA+PSAwXG4gICAgKSB7XG4gICAgICB0YWlsID0gZ2V0VGFpbChcbiAgICAgICAgZGF0YUEuc2xpY2UoMCwgaSArIDEpLFxuICAgICAgICB0cnVlLFxuICAgICAgICBzY2FsZXMsXG4gICAgICAgIF9lbmNvZGVzLFxuICAgICAgICBzaWduYWxzLFxuICAgICAgICBnZXRQYXRoXG4gICAgICApO1xuICAgICAgYm9keSA9IGdldEJvZHkoXG4gICAgICAgIGRhdGFBLnNsaWNlKGkpLFxuICAgICAgICBkYXRhQi5zbGljZSgwLCBqICsgMSksXG4gICAgICAgIHNjYWxlcyxcbiAgICAgICAgX2VuY29kZXMsXG4gICAgICAgIHNpZ25hbHMsXG4gICAgICAgIGdldFBhdGgsXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuICAgICAgaGVhZCA9IGdldEhlYWQoZGF0YUIuc2xpY2UoaiksIGZhbHNlLCBzY2FsZXMsIF9lbmNvZGVzLCBzaWduYWxzLCBnZXRQYXRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYm9keSA9IGdldEJvZHkoZGF0YUEsIGRhdGFCLCBzY2FsZXMsIF9lbmNvZGVzLCBzaWduYWxzLCBnZXRQYXRoKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaSA9IGRhdGFBLmZpbmRJbmRleChkID0+IGNvbXB1dGVJZEEoZCkgPT09IGNvbXB1dGVJZEIoZGF0YUJbMF0pKTtcbiAgICBqID0gZGF0YUEuZmluZEluZGV4KGQgPT4gY29tcHV0ZUlkQShkKSA9PT0gY29tcHV0ZUlkQihkYXRhQltMYiAtIDFdKSk7XG4gICAgaWYgKGkgPj0gMCAmJiBqID49IDApIHtcbiAgICAgIHRhaWwgPSBnZXRUYWlsKFxuICAgICAgICBkYXRhQS5zbGljZSgwLCBpICsgMSksXG4gICAgICAgIHRydWUsXG4gICAgICAgIHNjYWxlcyxcbiAgICAgICAgX2VuY29kZXMsXG4gICAgICAgIHNpZ25hbHMsXG4gICAgICAgIGdldFBhdGhcbiAgICAgICk7XG4gICAgICBib2R5ID0gZ2V0Qm9keShcbiAgICAgICAgZGF0YUEuc2xpY2UoaSwgaiArIDEpLFxuICAgICAgICBkYXRhQixcbiAgICAgICAgc2NhbGVzLFxuICAgICAgICBfZW5jb2RlcyxcbiAgICAgICAgc2lnbmFscyxcbiAgICAgICAgZ2V0UGF0aCxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgICBoZWFkID0gZ2V0SGVhZChkYXRhQS5zbGljZShqKSwgdHJ1ZSwgc2NhbGVzLCBfZW5jb2Rlcywgc2lnbmFscywgZ2V0UGF0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJvZHkgPSBnZXRCb2R5KGRhdGFBLCBkYXRhQiwgc2NhbGVzLCBfZW5jb2Rlcywgc2lnbmFscywgZ2V0UGF0aCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGhlYWQgJiYgdGFpbCAmJiBib2R5KSB7XG4gICAgcmV0dXJuIHQgPT4ge1xuICAgICAgaWYgKHQgPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGdldFBhdGgoZGF0YUIsIHNjYWxlcy5maW5hbCwgX2VuY29kZXMuZmluYWwsIHNpZ25hbHMuZmluYWwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRhaWwodCkgKyBib2R5KHQpICsgaGVhZCh0KTtcbiAgICB9O1xuICB9XG4gIHJldHVybiB0ID0+IHtcbiAgICBpZiAodCA9PT0gMSkge1xuICAgICAgcmV0dXJuIGdldFBhdGgoZGF0YUIsIHNjYWxlcy5maW5hbCwgX2VuY29kZXMuZmluYWwsIHNpZ25hbHMuZmluYWwpO1xuICAgIH1cbiAgICByZXR1cm4gYm9keSh0KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0SGVhZChkYXRhLCBpc1Nocmluaywgc2NhbGVzLCBlbmNvZGVzLCBzaWduYWxzLCBnZXRQYXRoKSB7XG4gIGNvbnN0IEwgPSBkYXRhLmxlbmd0aDtcbiAgaWYgKEwgPD0gMSkge1xuICAgIHJldHVybiB0ID0+IFwiXCI7XG4gIH1cblxuICBjb25zdCBpbnRlcnBvbGF0b3JzID0gW1wiaW5pdGlhbFwiLCBcImZpbmFsXCJdLm1hcCh3aGljaCA9PiB7XG4gICAgY29uc3QgcGhhc2VzID0gW107XG4gICAgY29uc3Qgc2NhbGUgPSBzY2FsZXNbd2hpY2hdO1xuICAgIGNvbnN0IGVuY29kZSA9IGVuY29kZXNbd2hpY2hdO1xuICAgIGNvbnN0IHNpZ25hbCA9IHNpZ25hbHNbd2hpY2hdIHx8IHNpZ25hbHM7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gTCAtIDI7IGkrKykge1xuICAgICAgY29uc3QgZnJvbVBhdGggPSBnZXRQYXRoKFxuICAgICAgICBkYXRhLnNsaWNlKDAsIGkgKyAxKS5jb25jYXQoZGF0YS5zbGljZShpLCBpICsgMSkpLFxuICAgICAgICBzY2FsZSxcbiAgICAgICAgZW5jb2RlLFxuICAgICAgICBzaWduYWxcbiAgICAgICkucmVwbGFjZSgvXk0vZywgXCJMXCIpO1xuICAgICAgY29uc3QgdG9QYXRoID0gZ2V0UGF0aChcbiAgICAgICAgZGF0YS5zbGljZSgwLCBpICsgMiksXG4gICAgICAgIHNjYWxlLFxuICAgICAgICBlbmNvZGUsXG4gICAgICAgIHNpZ25hbFxuICAgICAgKS5yZXBsYWNlKC9eTS9nLCBcIkxcIik7XG4gICAgICBwaGFzZXMucHVzaChmdW5jdGlvbih0KSB7XG4gICAgICAgIHJldHVybiBkMy5pbnRlcnBvbGF0ZVN0cmluZyhmcm9tUGF0aCwgdG9QYXRoKSh0KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgaWYgKGlzU2hyaW5rKSB7XG4gICAgICAgIHQgPSAxIC0gdDtcbiAgICAgIH1cbiAgICAgIGlmICh0ID09PSAxKSB7XG4gICAgICAgIHJldHVybiBnZXRQYXRoKGRhdGEsIHNjYWxlLCBlbmNvZGUsIHNpZ25hbCk7XG4gICAgICB9XG4gICAgICBjb25zdCBwaGFzZSA9IE1hdGguZmxvb3IodCAqIChMIC0gMSkpO1xuXG4gICAgICByZXR1cm4gcGhhc2VzW3BoYXNlXSh0ICogKEwgLSAxKSAtIHBoYXNlKTtcbiAgICB9O1xuICB9KTtcblxuICByZXR1cm4gdCA9PiB7XG4gICAgcmV0dXJuIGQzLmludGVycG9sYXRlU3RyaW5nKGludGVycG9sYXRvcnNbMF0odCksIGludGVycG9sYXRvcnNbMV0odCkpKHQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRUYWlsKGRhdGEsIGlzU2hyaW5rLCBzY2FsZXMsIGVuY29kZXMsIHNpZ25hbHMsIGdldFBhdGgpIHtcbiAgY29uc3QgTCA9IGRhdGEubGVuZ3RoO1xuICBpZiAoTCA8PSAxKSB7XG4gICAgcmV0dXJuIHQgPT4gXCJcIjtcbiAgfVxuICBjb25zdCBpbnRlcnBvbGF0b3JzID0gW1wiaW5pdGlhbFwiLCBcImZpbmFsXCJdLm1hcCh3aGljaCA9PiB7XG4gICAgY29uc3QgcGhhc2VzID0gW107XG4gICAgY29uc3Qgc2NhbGUgPSBzY2FsZXNbd2hpY2hdO1xuICAgIGNvbnN0IGVuY29kZSA9IGVuY29kZXNbd2hpY2hdO1xuICAgIGNvbnN0IHNpZ25hbCA9IHNpZ25hbHNbd2hpY2hdIHx8IHNpZ25hbHM7XG4gICAgZm9yIChsZXQgaSA9IEwgLSAyOyBpID49IDA7IGktLSkge1xuICAgICAgY29uc3QgZnJvbVBhdGggPSBnZXRQYXRoKFxuICAgICAgICBkYXRhLnNsaWNlKGkgKyAxLCBpICsgMikuY29uY2F0KGRhdGEuc2xpY2UoaSArIDEpKSxcbiAgICAgICAgc2NhbGUsXG4gICAgICAgIGVuY29kZSxcbiAgICAgICAgc2lnbmFsXG4gICAgICApLnJlcGxhY2UoL1okL2csIFwiXCIpO1xuICAgICAgY29uc3QgdG9QYXRoID0gZ2V0UGF0aChkYXRhLnNsaWNlKGkpLCBzY2FsZSwgZW5jb2RlLCBzaWduYWwpLnJlcGxhY2UoXG4gICAgICAgIC9aJC9nLFxuICAgICAgICBcIlwiXG4gICAgICApO1xuXG4gICAgICBwaGFzZXMucHVzaChmdW5jdGlvbih0KSB7XG4gICAgICAgIHJldHVybiBkMy5pbnRlcnBvbGF0ZVN0cmluZyhmcm9tUGF0aCwgdG9QYXRoKSh0KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICBpZiAoaXNTaHJpbmspIHtcbiAgICAgICAgdCA9IDEgLSB0O1xuICAgICAgfVxuICAgICAgaWYgKHQgPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGdldFBhdGgoZGF0YSwgc2NhbGUsIGVuY29kZSwgc2lnbmFsKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBoYXNlID0gTWF0aC5mbG9vcih0ICogKEwgLSAxKSk7XG5cbiAgICAgIHJldHVybiBwaGFzZXNbcGhhc2VdKHQgKiAoTCAtIDEpIC0gcGhhc2UpO1xuICAgIH07XG4gIH0pO1xuICByZXR1cm4gdCA9PiB7XG4gICAgcmV0dXJuIGQzLmludGVycG9sYXRlU3RyaW5nKGludGVycG9sYXRvcnNbMF0odCksIGludGVycG9sYXRvcnNbMV0odCkpKHQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRCb2R5KFxuICBmcm9tRGF0YSxcbiAgdG9EYXRhLFxuICBzY2FsZXMsXG4gIGVuY29kZXMsXG4gIHNpZ25hbHMsXG4gIGdldFBhdGgsXG4gIHRvQmVBc3NlbWJsZWRcbikge1xuICBjb25zdCBwYXRoUGFpcnMgPSBbXCJpbml0aWFsXCIsIFwiZmluYWxcIl0ubWFwKHdoaWNoID0+IHtcbiAgICBjb25zdCBzY2FsZSA9IHNjYWxlc1t3aGljaF07XG4gICAgY29uc3QgZW5jb2RlID0gZW5jb2Rlc1t3aGljaF07XG4gICAgY29uc3Qgc2lnbmFsID0gc2lnbmFsc1t3aGljaF0gfHwgc2lnbmFscztcbiAgICBsZXQgZnJvbVBhdGggPSBnZXRQYXRoKGZyb21EYXRhLCBzY2FsZSwgZW5jb2RlLCBzaWduYWwpO1xuICAgIGxldCB0b1BhdGggPSBnZXRQYXRoKHRvRGF0YSwgc2NhbGUsIGVuY29kZSwgc2lnbmFsKTtcblxuICAgIGlmICh0b0JlQXNzZW1ibGVkKSB7XG4gICAgICBmcm9tUGF0aCA9IGZyb21QYXRoLnJlcGxhY2UoL15NL2csIFwiTFwiKS5yZXBsYWNlKC9aJC9nLCBcIlwiKTtcbiAgICAgIHRvUGF0aCA9IHRvUGF0aC5yZXBsYWNlKC9eTS9nLCBcIkxcIikucmVwbGFjZSgvWiQvZywgXCJcIik7XG4gICAgfVxuICAgIHJldHVybiBbZnJvbVBhdGgsIHRvUGF0aF07XG4gIH0pO1xuXG4gIGlmIChcbiAgICBpc1ZhbGlkUGF0aChwYXRoUGFpcnNbMF1bMF0pICYmXG4gICAgaXNWYWxpZFBhdGgocGF0aFBhaXJzWzBdWzFdKSAmJlxuICAgIGlzVmFsaWRQYXRoKHBhdGhQYWlyc1sxXVswXSkgJiZcbiAgICBpc1ZhbGlkUGF0aChwYXRoUGFpcnNbMV1bMF0pXG4gICkge1xuICAgIGNvbnN0IGludGVycG9sYXRvcjEgPSBpbnRlcnBvbGF0ZVBhdGgocGF0aFBhaXJzWzBdWzBdLCBwYXRoUGFpcnNbMF1bMV0pO1xuICAgIGNvbnN0IGludGVycG9sYXRvcjIgPSBpbnRlcnBvbGF0ZVBhdGgocGF0aFBhaXJzWzFdWzBdLCBwYXRoUGFpcnNbMV1bMV0pO1xuICAgIHJldHVybiB0ID0+IHtcbiAgICAgIHJldHVybiBkMy5pbnRlcnBvbGF0ZVN0cmluZyhpbnRlcnBvbGF0b3IxKHQpLCBpbnRlcnBvbGF0b3IyKHQpKSh0KTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBkMy5pbnRlcnBvbGF0ZVN0cmluZyhwYXRoUGFpcnNbMF1bMF0sIHBhdGhQYWlyc1sxXVsxXSk7XG59XG5mdW5jdGlvbiBpc1ZhbGlkUGF0aChwKSB7XG4gIHJldHVybiBwLmluZGV4T2YoXCJOYU5cIikgPCAwO1xufVxuXG5leHBvcnQge1xuICBhcmVhTGluZUludGVycG9sYXRvcldpdGhTY2FsZXMsXG4gIGFyZWFMaW5lSW50ZXJwb2xhdG9yLFxuICBzeW1ib2xJbnRlcnBvbGF0b3IsXG4gIGFyZWFMaW5lRFRvRGF0YSxcbiAgcmVjdEludGVycG9sYXRvclxufTtcbiIsIi8qIGVzbGludC1kaXNhYmxlIHByZWZlci1kZXN0cnVjdHVyaW5nICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVzZS1iZWZvcmUtZGVmaW5lICovXG4vKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbmltcG9ydCAqIGFzIHZlZ2EgZnJvbSBcInZlZ2FcIjtcbmltcG9ydCAqIGFzIHZlZ2FFeHByZXNzaW9uIGZyb20gXCJ2ZWdhLWV4cHJlc3Npb25cIjtcbmltcG9ydCAqIGFzIGQzIGZyb20gXCJkM1wiO1xuaW1wb3J0IHsgcHJvcE1hcCwgaXNMaW5lYXJNYXJrdHlwZSB9IGZyb20gXCIuL3V0aWxcIjtcbmltcG9ydCB7IHRleHRPZmZzZXQsIGdldFN0eWxlLCB0cmFuc2Zvcm1JdGVtIH0gZnJvbSBcIi4vdmVnYS1yZW5kZXItdXRpbFwiO1xuaW1wb3J0IHsgY29weSwgY29weTIsIGlzTnVtYmVyLCBnZXQgfSBmcm9tIFwiLi4vdXRpbC91dGlsXCI7XG5pbXBvcnQge1xuICBhcmVhTGluZUludGVycG9sYXRvcixcbiAgc3ltYm9sSW50ZXJwb2xhdG9yLFxuICBhcmVhTGluZURUb0RhdGEsXG4gIHJlY3RJbnRlcnBvbGF0b3Jcbn0gZnJvbSBcIi4vbWFyay9pbnRlcnBvbGF0ZUhlbHBlclwiO1xuaW1wb3J0IHsgQlJfUFJPUF9ERUZBVUxUIH0gZnJvbSBcIi4uL2RlZmF1bHRcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGZldGNoQXR0cmlidXRlcyhkM1NlbGVjdGlvbiwgcHJvcHMsIHNjYWxlcywgc2lnbmFsLCBlbmNvZGUsIHByZXZEYXRhKSB7XG4gIHByb3BzLmZvckVhY2gocHJvcCA9PiB7XG4gICAgcHJvcE1hcChwcm9wKS5mb3JFYWNoKHAgPT4ge1xuICAgICAgaWYgKHAudHlwZSA9PT0gXCJhdHRyVHdlZW5cIikge1xuICAgICAgICBpZiAoZDNTZWxlY3Rpb24uYXR0clR3ZWVuKSB7XG4gICAgICAgICAgZDNTZWxlY3Rpb24uYXR0clR3ZWVuKGdldFN0eWxlKHAudmFsKSwgZnVuY3Rpb24oZCkge1xuICAgICAgICAgICAgY29uc3Qgb2xkRCA9IHByZXZEYXRhID8gcHJldkRhdGEuZ2V0KHRoaXMpIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmV0dXJuIGdldFByb3BWYWwuYmluZCh0aGlzKShwLCBlbmNvZGUsIHNjYWxlcywgc2lnbmFsLCBkLCBvbGREKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB0ZW1wUCA9IE9iamVjdC5hc3NpZ24oe30sIHAsIHsgdHlwZTogXCJhdHRyXCIgfSk7XG4gICAgICAgICAgZDNTZWxlY3Rpb24uYXR0cih0ZW1wUC52YWwsIGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICAgIGNvbnN0IG9sZEQgPSBwcmV2RGF0YSA/IHByZXZEYXRhLmdldCh0aGlzKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJldHVybiBnZXRQcm9wVmFsLmJpbmQodGhpcykoXG4gICAgICAgICAgICAgIHRlbXBQLFxuICAgICAgICAgICAgICBlbmNvZGUsXG4gICAgICAgICAgICAgIHNjYWxlcyxcbiAgICAgICAgICAgICAgc2lnbmFsLFxuICAgICAgICAgICAgICBkLFxuICAgICAgICAgICAgICBvbGREXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHAudHlwZSA9PT0gXCJhdHRyXCIpIHtcbiAgICAgICAgZDNTZWxlY3Rpb24uYXR0cihnZXRTdHlsZShwLnZhbCksIGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICBjb25zdCBvbGREID0gcHJldkRhdGEgPyBwcmV2RGF0YS5nZXQodGhpcykgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgcmV0dXJuIGdldFByb3BWYWwuYmluZCh0aGlzKShwLCBlbmNvZGUsIHNjYWxlcywgc2lnbmFsLCBkLCBvbGREKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHAudHlwZSA9PT0gXCJ0ZXh0XCIpIHtcbiAgICAgICAgZDNTZWxlY3Rpb24udGV4dChmdW5jdGlvbihkKSB7XG4gICAgICAgICAgY29uc3Qgb2xkRCA9IHByZXZEYXRhID8gcHJldkRhdGEuZ2V0KHRoaXMpIDogdW5kZWZpbmVkO1xuICAgICAgICAgIHJldHVybiBnZXRQcm9wVmFsLmJpbmQodGhpcykocCwgZW5jb2RlLCBzY2FsZXMsIHNpZ25hbCwgZCwgb2xkRCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChwLnR5cGUgPT09IFwic3R5bGVcIikge1xuICAgICAgICBpZiAocC5hc1R3ZWVuKSB7XG4gICAgICAgICAgZDNTZWxlY3Rpb24uc3R5bGVUd2VlbihnZXRTdHlsZShwLnZhbCksIGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICAgIGNvbnN0IG9sZEQgPSBwcmV2RGF0YSA/IHByZXZEYXRhLmdldCh0aGlzKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJldHVybiBnZXRQcm9wVmFsLmJpbmQodGhpcykocCwgZW5jb2RlLCBzY2FsZXMsIHNpZ25hbCwgZCwgb2xkRCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZDNTZWxlY3Rpb24uc3R5bGUoZ2V0U3R5bGUocC52YWwpLCBmdW5jdGlvbihkKSB7XG4gICAgICAgICAgICBjb25zdCBvbGREID0gcHJldkRhdGEgPyBwcmV2RGF0YS5nZXQodGhpcykgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICByZXR1cm4gZ2V0UHJvcFZhbC5iaW5kKHRoaXMpKHAsIGVuY29kZSwgc2NhbGVzLCBzaWduYWwsIGQsIG9sZEQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJvcFZhbChwcm9wSW5mbywgZW5jb2Rlcywgc2NhbGVzLCBzaWduYWxzLCBkLCBvbGREKSB7XG4gIGNvbnN0IHNpZ25hbCA9IHNpZ25hbHMuZmluYWwgfHwgc2lnbmFscztcbiAgY29uc3QgZW5jb2RlID0gZW5jb2Rlcy5maW5hbCB8fCBlbmNvZGVzO1xuXG4gIGlmIChwcm9wSW5mby5lbG1UeXBlID09PSBcInRleHRcIikge1xuICAgIGlmIChwcm9wSW5mby52YWwgPT09IFwidHJhbnNmb3JtXCIpIHtcbiAgICAgIC8vIGdldCB0cmFuc2Zvcm1cbiAgICAgIGNvbnN0IHRyZkQgPSB0cmFuc2Zvcm1ELmJpbmQodGhpcykoZW5jb2RlLCBzY2FsZXMsIHNpZ25hbCwgZCwgZmFsc2UpO1xuICAgICAgY29uc3QgZHggPSBkZWNvZGVFbmNvZGUuYmluZCh0aGlzKShcImR4XCIsIGVuY29kZSwgc2NhbGVzLCBzaWduYWwsIGQpO1xuICAgICAgY29uc3QgZHkgPSBkZWNvZGVFbmNvZGUuYmluZCh0aGlzKShcImR5XCIsIGVuY29kZSwgc2NhbGVzLCBzaWduYWwsIGQpO1xuICAgICAgdHJmRC54ID0gKHRyZkQueCB8fCAwKSArIChkeCB8fCAwKTtcbiAgICAgIHRyZkQueSA9ICh0cmZELnkgfHwgMCkgKyAoZHkgfHwgMCk7XG4gICAgICBjb25zdCBiYXNlbGluZSA9IGRlY29kZUVuY29kZS5iaW5kKHRoaXMpKFxuICAgICAgICBcImJhc2VsaW5lXCIsXG4gICAgICAgIGVuY29kZSxcbiAgICAgICAgc2NhbGVzLFxuICAgICAgICBzaWduYWwsXG4gICAgICAgIGRcbiAgICAgICk7XG4gICAgICBjb25zdCBmb250U2l6ZSA9IGRlY29kZUVuY29kZS5iaW5kKHRoaXMpKFxuICAgICAgICBcImZvbnRTaXplXCIsXG4gICAgICAgIGVuY29kZSxcbiAgICAgICAgc2NhbGVzLFxuICAgICAgICBzaWduYWwsXG4gICAgICAgIGRcbiAgICAgICk7XG4gICAgICBpZiAob2xkRCAmJiBvbGRELmFsaWduICE9PSBkLmFsaWduKSB7XG4gICAgICAgIGNvbnN0IGFsaWduRmFjdG9yID0geyByaWdodDogLTAuNSwgY2VudGVyOiAwLCBsZWZ0OiAwLjUgfTtcbiAgICAgICAgdHJmRC54ICs9XG4gICAgICAgICAgdmVnYS50ZXh0TWV0cmljcy53aWR0aChkLGQudGV4dCkgKlxuICAgICAgICAgIChhbGlnbkZhY3RvcltkLmFsaWduXSAtIGFsaWduRmFjdG9yW29sZEQuYWxpZ25dKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGAke3RyYW5zZm9ybUl0ZW0odHJmRCl9ICR7dHJhbnNmb3JtSXRlbSh7XG4gICAgICAgIHk6IHRleHRPZmZzZXQoT2JqZWN0LmFzc2lnbih7IGJhc2VsaW5lLCBmb250U2l6ZSB9LCBkKSlcbiAgICAgIH0pfWA7XG4gICAgfVxuICAgIGlmIChwcm9wSW5mby52YWwgPT09IFwidGV4dFwiKSB7XG4gICAgICByZXR1cm4gZW5jb2RlLnRleHRcbiAgICAgICAgPyBkZWNvZGVFbmNvZGUuYmluZCh0aGlzKShcInRleHRcIiwgZW5jb2RlLCBzY2FsZXMsIHNpZ25hbCwgZClcbiAgICAgICAgOiBkLnRleHQ7XG4gICAgfVxuICB9IGVsc2UgaWYgKHByb3BJbmZvLmVsbVR5cGUgPT09IFwidGl0bGVcIikge1xuICAgIGlmIChwcm9wSW5mby52YWwgPT09IFwidHJhbnNmb3JtXCIpIHtcbiAgICAgIC8vIGdldCB0cmFuc2Zvcm1cbiAgICAgIGNvbnN0IHRyZkQgPSB0cmFuc2Zvcm1ELmJpbmQodGhpcykoZW5jb2RlLCBzY2FsZXMsIHNpZ25hbCwgZCk7XG4gICAgICAvLyBsZXQgdHJmRCA9IHRyYW5zZm9ybUQuYmluZCh0aGlzKShlbmNvZGUsIHNjYWxlcywgc2lnbmFsLCBkLCBmYWxzZSk7XG4gICAgICBjb25zdCBkeCA9IGRlY29kZUVuY29kZS5iaW5kKHRoaXMpKFwiZHhcIiwgZW5jb2RlLCBzY2FsZXMsIHNpZ25hbCwgZCk7XG4gICAgICBjb25zdCBkeSA9IGRlY29kZUVuY29kZS5iaW5kKHRoaXMpKFwiZHlcIiwgZW5jb2RlLCBzY2FsZXMsIHNpZ25hbCwgZCk7XG4gICAgICB0cmZELnggPSAodHJmRC54IHx8IDApICsgKGR4IHx8IDApO1xuICAgICAgdHJmRC55ID0gKHRyZkQueSB8fCAwKSArIChkeSB8fCAwKTtcbiAgICAgIGNvbnN0IGJhc2VsaW5lID0gZGVjb2RlRW5jb2RlLmJpbmQodGhpcykoXG4gICAgICAgIFwiYmFzZWxpbmVcIixcbiAgICAgICAgZW5jb2RlLFxuICAgICAgICBzY2FsZXMsXG4gICAgICAgIHNpZ25hbCxcbiAgICAgICAgZFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGZvbnRTaXplID0gZGVjb2RlRW5jb2RlLmJpbmQodGhpcykoXG4gICAgICAgIFwiZm9udFNpemVcIixcbiAgICAgICAgZW5jb2RlLFxuICAgICAgICBzY2FsZXMsXG4gICAgICAgIHNpZ25hbCxcbiAgICAgICAgZFxuICAgICAgKTtcbiAgICAgIHJldHVybiBgJHt0cmFuc2Zvcm1JdGVtKHRyZkQpfSAke3RyYW5zZm9ybUl0ZW0oe1xuICAgICAgICB5OiB0ZXh0T2Zmc2V0KE9iamVjdC5hc3NpZ24oeyBiYXNlbGluZSwgZm9udFNpemUgfSwgZCkpXG4gICAgICB9KX1gO1xuICAgIH1cbiAgICBpZiAocHJvcEluZm8udmFsID09PSBcInRleHRcIikge1xuICAgICAgcmV0dXJuIGVuY29kZS50ZXh0XG4gICAgICAgID8gZGVjb2RlRW5jb2RlLmJpbmQodGhpcykoXCJ0ZXh0XCIsIGVuY29kZSwgc2NhbGVzLCBzaWduYWwsIGQpXG4gICAgICAgIDogZC50ZXh0O1xuICAgIH1cbiAgfSBlbHNlIGlmIChcbiAgICBwcm9wSW5mby5lbG1UeXBlID09PSBcInRpY2tcIiB8fFxuICAgIHByb3BJbmZvLmVsbVR5cGUgPT09IFwiZ3JpZFwiIHx8XG4gICAgcHJvcEluZm8uZWxtVHlwZSA9PT0gXCJkb21haW5cIlxuICApIHtcbiAgICAvLyBob3RmaXhcbiAgICBpZiAocHJvcEluZm8udmFsID09PSBcInRyYW5zZm9ybVwiKSB7XG4gICAgICAvLyBnZXQgdHJhbnNmb3JtXG4gICAgICBsZXQgdHJmRCA9IHRyYW5zZm9ybUQuYmluZCh0aGlzKShlbmNvZGUsIHNjYWxlcywgc2lnbmFsLCBkLCBmYWxzZSk7XG4gICAgICB0cmZEID0gT2JqZWN0LmtleXModHJmRCkubGVuZ3RoID09PSAwID8gZCA6IHRyZkQ7XG4gICAgICBjb25zdCB4MiA9IGRlY29kZUVuY29kZS5iaW5kKHRoaXMpKFwieDJcIiwgZW5jb2RlLCBzY2FsZXMsIHNpZ25hbCwgZCk7XG4gICAgICBjb25zdCB5MiA9IGRlY29kZUVuY29kZS5iaW5kKHRoaXMpKFwieTJcIiwgZW5jb2RlLCBzY2FsZXMsIHNpZ25hbCwgZCk7XG4gICAgICBpZiAob2xkRCkge1xuICAgICAgICBpZiAoeDIgPT09IDAgJiYgKG9sZEQueTIgLSBvbGRELnkpICogeTIgPCAwKSB7XG4gICAgICAgICAgdHJmRC55ICs9IHkyO1xuICAgICAgICB9IGVsc2UgaWYgKHkyID09PSAwICYmIChvbGRELngyIC0gb2xkRC54KSAqIHgyIDwgMCkge1xuICAgICAgICAgIHRyZkQueCArPSB4MjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRyYW5zZm9ybUl0ZW0oT2JqZWN0LmtleXModHJmRCkubGVuZ3RoID09PSAwID8gZCA6IHRyZkQpO1xuICAgIH1cbiAgICBpZiAocHJvcEluZm8udmFsID09PSBcIngyXCIpIHtcbiAgICAgIGxldCB4MiA9IGRlY29kZUVuY29kZS5iaW5kKHRoaXMpKFwieDJcIiwgZW5jb2RlLCBzY2FsZXMsIHNpZ25hbCwgZCk7XG4gICAgICBpZiAoaXNOYU4oeDIpKSB7XG4gICAgICAgIHJldHVybiBkLngyIC0gZC54O1xuICAgICAgfVxuICAgICAgaWYgKG9sZEQpIHtcbiAgICAgICAgaWYgKChvbGRELngyIC0gb2xkRC54KSAqIHgyIDwgMCkge1xuICAgICAgICAgIHgyID0gLXgyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gaXNOYU4oeDIpID8gZC54MiAtIGQueCA6IHgyO1xuICAgIH1cbiAgICBpZiAocHJvcEluZm8udmFsID09PSBcInkyXCIpIHtcbiAgICAgIGxldCB5MiA9IGRlY29kZUVuY29kZS5iaW5kKHRoaXMpKFwieTJcIiwgZW5jb2RlLCBzY2FsZXMsIHNpZ25hbCwgZCk7XG4gICAgICBpZiAoaXNOYU4oeTIpKSB7XG4gICAgICAgIHJldHVybiBkLnkyIC0gZC55O1xuICAgICAgfVxuICAgICAgaWYgKG9sZEQpIHtcbiAgICAgICAgaWYgKChvbGRELnkyIC0gb2xkRC55KSAqIHkyIDwgMCkge1xuICAgICAgICAgIHkyID0gLXkyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4geTI7XG4gICAgfVxuICB9IGVsc2UgaWYgKHByb3BJbmZvLmVsbVR5cGUgPT09IFwicmVjdFwiKSB7XG4gICAgaWYgKHByb3BJbmZvLnZhbCA9PT0gXCJ0cmFuc2Zvcm1cIikge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIGlmIChwcm9wSW5mby52YWwgPT09IFwiZFwiKSB7XG4gICAgICBpZiAocHJvcEluZm8udHlwZSA9PT0gXCJhdHRyVHdlZW5cIikge1xuICAgICAgICByZXR1cm4gcmVjdEludGVycG9sYXRvci5iaW5kKHRoaXMpKFxuICAgICAgICAgIHNjYWxlcyxcbiAgICAgICAgICBlbmNvZGVzLFxuICAgICAgICAgIHNpZ25hbHMsXG4gICAgICAgICAgZCxcbiAgICAgICAgICBvbGRELFxuICAgICAgICAgIGdldFJlY3RcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBnZXRSZWN0KGQsIHNjYWxlcywgZW5jb2Rlcywgc2lnbmFsKS5wYXRoO1xuICAgIH1cbiAgfSBlbHNlIGlmIChwcm9wSW5mby5lbG1UeXBlID09PSBcInN5bWJvbFwiKSB7XG4gICAgaWYgKHByb3BJbmZvLnZhbCA9PT0gXCJkXCIpIHtcbiAgICAgIGlmIChwcm9wSW5mby50eXBlID09PSBcImF0dHJUd2VlblwiKSB7XG4gICAgICAgIHJldHVybiBzeW1ib2xJbnRlcnBvbGF0b3IuYmluZCh0aGlzKShcbiAgICAgICAgICBzY2FsZXMsXG4gICAgICAgICAgZW5jb2RlcyxcbiAgICAgICAgICBzaWduYWxzLFxuICAgICAgICAgIGQsXG4gICAgICAgICAgb2xkRCxcbiAgICAgICAgICBnZXRTaGFwZVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGdldFNoYXBlKGQsIHNjYWxlcywgZW5jb2RlLCBzaWduYWwpLnBhdGg7XG4gICAgfVxuICAgIGlmIChwcm9wSW5mby52YWwgPT09IFwidHJhbnNmb3JtXCIpIHtcbiAgICAgIGNvbnN0IHRyZkQgPSB0cmFuc2Zvcm1ELmJpbmQodGhpcykoZW5jb2RlLCBzY2FsZXMsIHNpZ25hbCwgZCwgZmFsc2UpO1xuICAgICAgcmV0dXJuIHRyYW5zZm9ybUl0ZW0oT2JqZWN0LmtleXModHJmRCkubGVuZ3RoID09PSAwID8gZCA6IHRyZkQpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChwcm9wSW5mby5lbG1UeXBlID09PSBcImdyYWRpZW50XCIpIHtcbiAgICBpZiAocHJvcEluZm8udmFsID09PSBcImRcIikge1xuICAgICAgY29uc3QgbmV3RCA9IE9iamVjdC5rZXlzKGVuY29kZS5wcmltYXJ5IHx8IGVuY29kZSlcbiAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICBrZXkgPT5cbiAgICAgICAgICAgIFtcInhcIiwgXCJ4MlwiLCBcInhjXCIsIFwid2lkdGhcIiwgXCJ5XCIsIFwieTJcIiwgXCJ5Y1wiLCBcImhlaWdodFwiXS5pbmRleE9mKFxuICAgICAgICAgICAgICBrZXlcbiAgICAgICAgICAgICkgPj0gMFxuICAgICAgICApXG4gICAgICAgIC5yZWR1Y2UoKGFjYywgY3VycikgPT4ge1xuICAgICAgICAgIGFjY1tjdXJyXSA9IGRlY29kZUVuY29kZS5iaW5kKHRoaXMpKGN1cnIsIGVuY29kZSwgc2NhbGVzLCBzaWduYWwsIGQpO1xuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KTtcbiAgICAgIGxldCB4OyBsZXQgeTsgbGV0IHdpZHRoOyBsZXQgaGVpZ2h0O1xuICAgICAgaWYgKGlzTmFOKG5ld0QueCkpIHtcbiAgICAgICAgeCA9IGlzTmFOKG5ld0QueGMgLSBuZXdELndpZHRoIC8gMilcbiAgICAgICAgICA/IG5ld0QueDJcbiAgICAgICAgICA6IG5ld0QueGMgLSBuZXdELndpZHRoIC8gMjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHggPSBuZXdELng7XG4gICAgICB9XG4gICAgICBpZiAoaXNOYU4obmV3RC53aWR0aCkpIHtcbiAgICAgICAgd2lkdGggPSBpc05hTihuZXdELngyIC0gbmV3RC54KSA/IHVuZGVmaW5lZCA6IG5ld0QueDIgLSBuZXdELng7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aWR0aCA9IG5ld0Qud2lkdGg7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNOYU4obmV3RC55MikgJiYgIWlzTmFOKG5ld0QueSkpIHtcbiAgICAgICAgeSA9IE1hdGgubWluKG5ld0QueTIsIG5ld0QueSk7XG4gICAgICAgIGhlaWdodCA9IE1hdGguYWJzKG5ld0QueTIgLSBuZXdELnkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgeSA9IGlzTmFOKG5ld0QueSkgPyBuZXdELnkyIDogbmV3RC55O1xuICAgICAgICBoZWlnaHQgPSBuZXdELmhlaWdodDtcbiAgICAgIH1cblxuICAgICAgLy8gIGhlaWdodCA9IGlzTmFOKG5ld0QuaGVpZ2h0KSA/ICggaXNOYU4obmV3RC55MiAtIG5ld0QueSkgPyB1bmRlZmluZWQgOiAobmV3RC55MiAtIG5ld0QueSkpIDogbmV3RC5oZWlnaHQ7XG4gICAgICAvLyByZXR1cm4gdmVnYS5wYXRoUmVjdGFuZ2xlKCkueCh4KS55KHkpLndpZHRoKHdpZHRoKS5oZWlnaHQoaGVpZ2h0KSgpO1xuXG4gICAgICByZXR1cm4gdmVnYVxuICAgICAgICAucGF0aFJlY3RhbmdsZSgpXG4gICAgICAgIC54KHgpXG4gICAgICAgIC55KHkpXG4gICAgICAgIC53aWR0aCh3aWR0aClcbiAgICAgICAgLmhlaWdodChoZWlnaHQpKCk7XG4gICAgfVxuICAgIGlmIChwcm9wSW5mby52YWwgPT09IFwidHJhbnNmb3JtXCIpIHtcbiAgICAgIGNvbnN0IHRyZkQgPSB0cmFuc2Zvcm1ELmJpbmQodGhpcykoZW5jb2RlLCBzY2FsZXMsIHNpZ25hbCwgZCwgZmFsc2UpO1xuICAgICAgcmV0dXJuIHRyYW5zZm9ybUl0ZW0oT2JqZWN0LmtleXModHJmRCkubGVuZ3RoID09PSAwID8gZCA6IHRyZkQpO1xuICAgIH1cbiAgICBpZiAocHJvcEluZm8udmFsID09PSBcImZpbGxcIikge1xuICAgICAgaWYgKHByb3BJbmZvLmRlZnMgJiYgIXByb3BJbmZvLmlzVXBkYXRlKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IHByb3BJbmZvLmRlZnMoZDMuc2VsZWN0KHRoaXMuY2xvc2VzdChcInN2Z1wiKSksIGQpO1xuICAgICAgICByZXR1cm4gYHVybChcIiR7dXJsfVwiKWA7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKHByb3BJbmZvLmVsbVR5cGUgPT09IFwicnVsZVwiKSB7XG4gICAgaWYgKHByb3BJbmZvLnZhbCA9PT0gXCJ0cmFuc2Zvcm1cIikge1xuICAgICAgLy8gZ2V0IHRyYW5zZm9ybVxuICAgICAgY29uc3QgdHJmRCA9IHRyYW5zZm9ybUQuYmluZCh0aGlzKShlbmNvZGUsIHNjYWxlcywgc2lnbmFsLCBkLCBmYWxzZSk7XG4gICAgICByZXR1cm4gdHJhbnNmb3JtSXRlbShPYmplY3Qua2V5cyh0cmZEKS5sZW5ndGggPT09IDAgPyBkIDogdHJmRCk7XG4gICAgfVxuICAgIGlmIChwcm9wSW5mby52YWwgPT09IFwieDJcIikge1xuICAgICAgY29uc3QgeDIgPSBkZWNvZGVFbmNvZGUuYmluZCh0aGlzKShcIngyXCIsIGVuY29kZSwgc2NhbGVzLCBzaWduYWwsIGQpO1xuICAgICAgY29uc3QgeCA9IGRlY29kZUVuY29kZS5iaW5kKHRoaXMpKFwieFwiLCBlbmNvZGUsIHNjYWxlcywgc2lnbmFsLCBkKTtcbiAgICAgIHJldHVybiBpc051bWJlcih4MiAtIHgpID8geDIgLSB4IDogZC54MiB8fCAwO1xuICAgIH1cbiAgICBpZiAocHJvcEluZm8udmFsID09PSBcInkyXCIpIHtcbiAgICAgIGNvbnN0IHkyID0gZGVjb2RlRW5jb2RlLmJpbmQodGhpcykoXCJ5MlwiLCBlbmNvZGUsIHNjYWxlcywgc2lnbmFsLCBkKTtcbiAgICAgIGNvbnN0IHkgPSBkZWNvZGVFbmNvZGUuYmluZCh0aGlzKShcInlcIiwgZW5jb2RlLCBzY2FsZXMsIHNpZ25hbCwgZCk7XG4gICAgICByZXR1cm4gaXNOdW1iZXIoeTIgLSB5KSA/IHkyIC0geSA6IGQueTIgfHwgMDtcbiAgICB9XG4gIH0gZWxzZSBpZiAocHJvcEluZm8uZWxtVHlwZSA9PT0gXCJncm91cFwiKSB7XG4gICAgaWYgKHByb3BJbmZvLnZhbCA9PT0gXCJ0cmFuc2Zvcm1cIikge1xuICAgICAgY29uc3QgdHJmRCA9IHRyYW5zZm9ybUQuYmluZCh0aGlzKShlbmNvZGUsIHNjYWxlcywgc2lnbmFsLCBkKTtcbiAgICAgIHJldHVybiB0cmFuc2Zvcm1JdGVtKE9iamVjdC5rZXlzKHRyZkQpLmxlbmd0aCA9PT0gMCA/IGQgOiB0cmZEKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAocHJvcEluZm8uZWxtVHlwZSA9PT0gXCJiYWNrZ3JvdW5kXCIpIHtcbiAgICBpZiAocHJvcEluZm8udmFsID09PSBcImRcIikge1xuICAgICAgY29uc3QgcmVjdEQgPSB7XG4gICAgICAgIHg6IGRlY29kZUVuY29kZS5iaW5kKHRoaXMpKFwieFwiLCBlbmNvZGUsIHNjYWxlcywgc2lnbmFsLCBkKSB8fCAwLFxuICAgICAgICB5OiBkZWNvZGVFbmNvZGUuYmluZCh0aGlzKShcInlcIiwgZW5jb2RlLCBzY2FsZXMsIHNpZ25hbCwgZCkgfHwgMCxcbiAgICAgICAgaGVpZ2h0OiBkZWNvZGVFbmNvZGUuYmluZCh0aGlzKShcImhlaWdodFwiLCBlbmNvZGUsIHNjYWxlcywgc2lnbmFsLCBkKSxcbiAgICAgICAgd2lkdGg6IGRlY29kZUVuY29kZS5iaW5kKHRoaXMpKFwid2lkdGhcIiwgZW5jb2RlLCBzY2FsZXMsIHNpZ25hbCwgZClcbiAgICAgIH07XG4gICAgICByZXR1cm4gdmVnYVxuICAgICAgICAucGF0aFJlY3RhbmdsZSgpXG4gICAgICAgIC54KHJlY3RELngpXG4gICAgICAgIC55KHJlY3RELnkpXG4gICAgICAgIC53aWR0aChyZWN0RC53aWR0aClcbiAgICAgICAgLmhlaWdodChyZWN0RC5oZWlnaHQpKCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzTGluZWFyTWFya3R5cGUocHJvcEluZm8uZWxtVHlwZSkpIHtcbiAgICBpZiAocHJvcEluZm8udmFsID09PSBcImRcIikge1xuICAgICAgaWYgKHByb3BJbmZvLnR5cGUgPT09IFwiYXR0clR3ZWVuXCIpIHtcbiAgICAgICAgY29uc3QgbWFya3R5cGVzID0gcHJvcEluZm8uaW5pdGlhbE1hcmt0eXBlXG4gICAgICAgICAgPyB7IGluaXRpYWw6IHByb3BJbmZvLmluaXRpYWxNYXJrdHlwZSwgZmluYWw6IHByb3BJbmZvLmVsbVR5cGUgfVxuICAgICAgICAgIDogcHJvcEluZm8uZWxtVHlwZTtcbiAgICAgICAgcmV0dXJuIGFyZWFMaW5lSW50ZXJwb2xhdG9yLmJpbmQodGhpcykoXG4gICAgICAgICAgc2NhbGVzLFxuICAgICAgICAgIGVuY29kZXMsXG4gICAgICAgICAgbWFya3R5cGVzLFxuICAgICAgICAgIGQsXG4gICAgICAgICAgb2xkRCxcbiAgICAgICAgICBzaWduYWxzLFxuICAgICAgICAgIGdldFBhdGguYmluZCh0aGlzKSxcbiAgICAgICAgICBwcm9wSW5mby5pbnRlcnBvbGF0ZVN0eWxlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZ2V0UGF0aC5iaW5kKHRoaXMpKFxuICAgICAgICBhcmVhTGluZURUb0RhdGEoZCksXG4gICAgICAgIHNjYWxlcyxcbiAgICAgICAgZW5jb2RlLFxuICAgICAgICBzaWduYWwsXG4gICAgICAgIHByb3BJbmZvLmVsbVR5cGVcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChwcm9wSW5mby52YWwgPT09IFwiZmlsbFwiICYmIHByb3BJbmZvLmFzVHdlZW4pIHtcbiAgICAgIGNvbnN0IGdldEZpbGwgPSBlbmNvZGUgPT5cbiAgICAgICAgZGVjb2RlRW5jb2RlLmJpbmQodGhpcykoXG4gICAgICAgICAgXCJmaWxsXCIsXG4gICAgICAgICAgZW5jb2RlLFxuICAgICAgICAgIHNjYWxlcyxcbiAgICAgICAgICBzaWduYWwsXG4gICAgICAgICAgZC5tYXJrLm1hcmt0eXBlICE9PSBcImdyb3VwXCIgPyB7IGRhdHVtOiB7fSB9IDogZFxuICAgICAgICApO1xuICAgICAgaWYgKHByb3BJbmZvLmluaXRpYWxNYXJrdHlwZSA9PT0gXCJhcmVhXCIgJiYgcHJvcEluZm8uZWxtVHlwZSA9PT0gXCJsaW5lXCIpIHtcbiAgICAgICAgLy8gd2hpbGUgYXJlYSAtPiBsaW5lLCBrZWVwIHRoZSBmaWxsIG9mIHRoZSBwYXRoIGFuZCByZW1vdmUgYXQgdGhlIGVuZC5cbiAgICAgICAgY29uc3QgZGVjb2RlZFZhbHVlID0gZ2V0RmlsbCh7XG4gICAgICAgICAgZmlsbDogKGVuY29kZXMuaW5pdGlhbCB8fCBlbmNvZGUpLmZpbGxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0ID0+ICh0ID49IDEgPyBcIm5vbmVcIiA6IGRlY29kZWRWYWx1ZSk7XG4gICAgICB9XG4gICAgICBjb25zdCBkZWNvZGVkVmFsdWUgPSBnZXRGaWxsKGVuY29kZSk7XG4gICAgICByZXR1cm4gKHQpID0+IGRlY29kZWRWYWx1ZTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgcHJvcEluZm8udmFsID09PSBcInN0cm9rZVwiICYmXG4gICAgICBwcm9wSW5mby5pbml0aWFsTWFya3R5cGUgPT09IFwibGluZVwiICYmXG4gICAgICBwcm9wSW5mby5lbG1UeXBlID09PSBcImFyZWFcIlxuICAgICkge1xuICAgICAgY29uc3QgX2VuY29kZSA9IHsgc3Ryb2tlOiBlbmNvZGUuc3Ryb2tlIHx8IGVuY29kZS5maWxsIH07XG4gICAgICByZXR1cm4gZGVjb2RlRW5jb2RlLmJpbmQodGhpcykoXG4gICAgICAgIFwic3Ryb2tlXCIsXG4gICAgICAgIF9lbmNvZGUsXG4gICAgICAgIHNjYWxlcyxcbiAgICAgICAgc2lnbmFsLFxuICAgICAgICBkLm1hcmsubWFya3R5cGUgIT09IFwiZ3JvdXBcIiA/IHsgZGF0dW06IHt9IH0gOiBkXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoaGFzUHJvcChlbmNvZGUsIHByb3BJbmZvKSkge1xuICAgICAgLy8gc2luY2UgZGF0YSBiaW5kIHRvIHRoZSBncm91cCBvZiB0aGUgbGluZVxuICAgICAgcmV0dXJuIGRlY29kZUVuY29kZS5iaW5kKHRoaXMpKFxuICAgICAgICBwcm9wSW5mby52YWwsXG4gICAgICAgIGVuY29kZSxcbiAgICAgICAgc2NhbGVzLFxuICAgICAgICBzaWduYWwsXG4gICAgICAgIGQubWFyay5tYXJrdHlwZSAhPT0gXCJncm91cFwiID8geyBkYXR1bToge30gfSA6IGRcbiAgICAgICkgKyAocHJvcEluZm8udmFsID09PSBcInN0cm9rZVdpZHRoXCIgPyBcInB4XCIgOiBcIlwiKTtcbiAgICB9XG4gIH1cblxuICBpZiAocHJvcEluZm8udmFsID09PSBcInRleHQtYW5jaG9yXCIpIHtcbiAgICBjb25zdCB0ZXh0QW5jaG9yID0ge1xuICAgICAgbGVmdDogXCJzdGFydFwiLFxuICAgICAgY2VudGVyOiBcIm1pZGRsZVwiLFxuICAgICAgcmlnaHQ6IFwiZW5kXCJcbiAgICB9O1xuICAgIHJldHVybiB0ZXh0QW5jaG9yW1xuICAgICAgKG9sZEQgPyBvbGRELmFsaWduIDogZC5hbGlnbikgfHxcbiAgICAgICAgZGVjb2RlRW5jb2RlLmJpbmQodGhpcykoXCJhbGlnblwiLCBlbmNvZGUsIHNjYWxlcywgc2lnbmFsLCBkKVxuICAgIF07XG4gIH1cbiAgaWYgKGhhc1Byb3AoZW5jb2RlLCBwcm9wSW5mbykpIHtcbiAgICByZXR1cm4gZGVjb2RlRW5jb2RlLmJpbmQodGhpcykocHJvcEluZm8udmFsLCBlbmNvZGVzLCBzY2FsZXMsIHNpZ25hbCwgZCk7XG4gIH1cbiAgLy8gVmVnYSBtYWtlIHNvbWUgbGFibGVzIHRyYW5zcGFyZW50IHRvIGF2b2lkIHRoZSBvdmVybGFwcy5cbiAgLy8gR2VtaW5pIHRha2VzIHRoZSB2ZWdhJ3MgZGVjaXNpb25zLlxuICBpZiAocHJvcEluZm8uZWxtVHlwZSA9PT0gXCJ0ZXh0XCIgJiYgcHJvcEluZm8udmFsID09PSBcIm9wYWNpdHlcIikge1xuICAgIHJldHVybiBkW3Byb3BJbmZvLnZhbF07XG4gIH1cbiAgcmV0dXJuIEJSX1BST1BfREVGQVVMVFtwcm9wSW5mby5lbG1UeXBlXVtwcm9wSW5mby52YWxdO1xuXG4gIGZ1bmN0aW9uIGhhc1Byb3AoZW5jb2RlLCBwcm9wSW5mbykge1xuICAgIHJldHVybiAoXG4gICAgICBnZXQoZW5jb2RlLCBcInByaW1hcnlcIiwgcHJvcEluZm8udmFsKSB8fFxuICAgICAgZ2V0KGVuY29kZSwgXCJzZWNvbmRhcnlcIiwgcHJvcEluZm8udmFsKSB8fFxuICAgICAgZ2V0KGVuY29kZSwgcHJvcEluZm8udmFsKVxuICAgICk7XG4gIH1cbiAgZnVuY3Rpb24gZ2V0UmVjdChkLCBzY2FsZXMsIGVuY29kZXMsIHNpZ25hbCwgaXNEaW1pbmlzaGVkKSB7XG4gICAgY29uc3QgZW5jb2RlID0gZW5jb2Rlcy5wcmltYXJ5IHx8IGVuY29kZXM7XG4gICAgY29uc3Qgc3ViRW5jb2RlID0gZW5jb2Rlcy5zZWNvbmRhcnkgfHwgZW5jb2RlcztcbiAgICBjb25zdCBQT1NJVElPTl9BVFRSUyA9IFtcbiAgICAgIFwieFwiLFxuICAgICAgXCJ4MlwiLFxuICAgICAgXCJ4Y1wiLFxuICAgICAgXCJ3aWR0aFwiLFxuICAgICAgXCJ5XCIsXG4gICAgICBcInkyXCIsXG4gICAgICBcInljXCIsXG4gICAgICBcImhlaWdodFwiLFxuICAgICAgXCJjb3JuZXJSYWRpdXNcIlxuICAgIF07XG4gICAgY29uc3QgbmV3RCA9IFBPU0lUSU9OX0FUVFJTLnJlZHVjZSgoYWNjLCBhdHRyKSA9PiB7XG4gICAgICBpZiAoZW5jb2RlW2F0dHJdIHx8IHN1YkVuY29kZVthdHRyXSkge1xuICAgICAgICBhY2NbYXR0cl0gPSBkZWNvZGVFbmNvZGUuYmluZCh0aGlzKShcbiAgICAgICAgICBhdHRyLFxuICAgICAgICAgIGVuY29kZXMsXG4gICAgICAgICAgc2NhbGVzLFxuICAgICAgICAgIHNpZ25hbCxcbiAgICAgICAgICBkLFxuICAgICAgICAgIGZhbHNlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcblxuICAgIGxldCB4OyBsZXQgeTsgbGV0IHdpZHRoOyBsZXQgaGVpZ2h0OyBsZXQgY29ybmVyUmFkaXVzO1xuICAgIGlmIChpc051bWJlcihuZXdELnhjKSAmJiBpc051bWJlcihuZXdELndpZHRoKSkge1xuICAgICAgeCA9IG5ld0QueGMgLSBuZXdELndpZHRoIC8gMjtcbiAgICAgIHdpZHRoID0gbmV3RC53aWR0aDtcbiAgICB9IGVsc2UgaWYgKGlzTnVtYmVyKG5ld0QueCkgJiYgaXNOdW1iZXIobmV3RC54MikpIHtcbiAgICAgIHggPSBNYXRoLm1pbihuZXdELngsIG5ld0QueDIpO1xuICAgICAgd2lkdGggPSBNYXRoLmFicyhuZXdELnggLSBuZXdELngyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgeCA9IGlzTnVtYmVyKG5ld0QueCkgPyBuZXdELnggOiBuZXdELngyO1xuICAgICAgd2lkdGggPSBuZXdELndpZHRoO1xuICAgIH1cblxuICAgIGlmIChpc051bWJlcihuZXdELnljKSAmJiBpc051bWJlcihuZXdELmhlaWdodCkpIHtcbiAgICAgIHkgPSBuZXdELnljIC0gbmV3RC5oZWlnaHQgLyAyO1xuICAgICAgaGVpZ2h0ID0gbmV3RC5oZWlnaHQ7XG4gICAgfSBlbHNlIGlmIChpc051bWJlcihuZXdELnkyKSAmJiBpc051bWJlcihuZXdELnkpKSB7XG4gICAgICB5ID0gTWF0aC5taW4obmV3RC55MiwgbmV3RC55KTtcbiAgICAgIGhlaWdodCA9IE1hdGguYWJzKG5ld0QueTIgLSBuZXdELnkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB5ID0gaXNOdW1iZXIobmV3RC55KSA/IG5ld0QueSA6IG5ld0QueTI7XG4gICAgICBoZWlnaHQgPSBuZXdELmhlaWdodDtcbiAgICB9XG5cbiAgICBjb3JuZXJSYWRpdXMgPSAhaXNOdW1iZXIobmV3RC5jb3JuZXJSYWRpdXMpID8gMCA6IG5ld0QuY29ybmVyUmFkaXVzO1xuICAgIGlmIChpc0RpbWluaXNoZWQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhdGg6IHZlZ2FcbiAgICAgICAgICAucGF0aFJlY3RhbmdsZSgpXG4gICAgICAgICAgLngoMClcbiAgICAgICAgICAueSgwKVxuICAgICAgICAgIC53aWR0aCgxKVxuICAgICAgICAgIC5oZWlnaHQoMSkoKSxcbiAgICAgICAgbWV0YTogbmV3RFxuICAgICAgfTtcbiAgICB9XG4gICAgLy8gIGhlaWdodCA9IGlzTmFOKG5ld0QuaGVpZ2h0KSA/ICggaXNOYU4obmV3RC55MiAtIG5ld0QueSkgPyB1bmRlZmluZWQgOiAobmV3RC55MiAtIG5ld0QueSkpIDogbmV3RC5oZWlnaHQ7XG4gICAgLy8gcmV0dXJuIHZlZ2EucGF0aFJlY3RhbmdsZSgpLngoeCkueSh5KS53aWR0aCh3aWR0aCkuaGVpZ2h0KGhlaWdodCkoKTtcblxuICAgIHJldHVybiB7XG4gICAgICBwYXRoOiB2ZWdhXG4gICAgICAgIC5wYXRoUmVjdGFuZ2xlKClcbiAgICAgICAgLngoeClcbiAgICAgICAgLnkoeSlcbiAgICAgICAgLndpZHRoKHdpZHRoKVxuICAgICAgICAuaGVpZ2h0KGhlaWdodClcbiAgICAgICAgLmNvcm5lclJhZGl1cyhjb3JuZXJSYWRpdXMpKCksXG4gICAgICBtZXRhOiBuZXdEXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFNoYXBlKGQsIHNjYWxlcywgZW5jb2Rlcywgc2lnbmFsLCBpc0RpbWluaXNoZWQgPSBmYWxzZSkge1xuICAgIGNvbnN0IGVuY29kZSA9IGVuY29kZXMucHJpbWFyeSB8fCBlbmNvZGVzO1xuICAgIGxldCBuZXdEID0gT2JqZWN0LmtleXMoZW5jb2RlKVxuICAgICAgLmZpbHRlcihrZXkgPT4gW1wic2l6ZVwiLCBcInNoYXBlXCJdLmluZGV4T2Yoa2V5KSA+PSAwKVxuICAgICAgLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiB7XG4gICAgICAgIGFjY1tjdXJyXSA9IGRlY29kZUVuY29kZS5iaW5kKHRoaXMpKGN1cnIsIGVuY29kZXMsIHNjYWxlcywgc2lnbmFsLCBkKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIHt9KTtcbiAgICBjb25zdCBjb250ZXh0ID0gZDMucGF0aCgpO1xuICAgIG5ld0QgPSB7XG4gICAgICBzaGFwZTogbmV3RC5zaGFwZSB8fCBcImNpcmNsZVwiLFxuICAgICAgc2l6ZTogaXNOdW1iZXIobmV3RC5zaXplKSA/IG5ld0Quc2l6ZSA6IGlzTnVtYmVyKGQuc2l6ZSkgPyBkLnNpemUgOiAzMFxuICAgIH07XG5cbiAgICB2ZWdhLnBhdGhTeW1ib2xzKG5ld0Quc2hhcGUpLmRyYXcoY29udGV4dCwgaXNEaW1pbmlzaGVkID8gMSA6IG5ld0Quc2l6ZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhdGg6IGNvbnRleHQudG9TdHJpbmcoKSxcbiAgICAgIG1ldGE6IG5ld0RcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0UGF0aChkYXRhLCBzY2FsZXMsIGVuY29kZXMsIHNpZ25hbCwgdHlwZSwgYWxvbmdUbz1cInhcIikge1xuICAgIC8vIGxldCBkYXRhID0gKGQubWFyay5tYXJrdHlwZSAhPT0gXCJncm91cFwiID8gZCA6IGQuaXRlbXNbMF0uaXRlbXNbMF0pLm1hcmsuaXRlbXM7XG4gICAgY29uc3QgZW5jb2RlID0gZW5jb2Rlcy5wcmltYXJ5IHx8IGVuY29kZXM7XG4gICAgY29uc3QgbmV3RGF0YSA9IGRhdGEubWFwKG9sZEQgPT4ge1xuICAgICAgY29uc3QgZGVmYXVsdEQgPSBPYmplY3Qua2V5cyhlbmNvZGUpXG4gICAgICAgIC5maWx0ZXIoa2V5ID0+IFtcInhcIiwgXCJ4MlwiLCBcInhjXCIsIFwid2lkdGhcIiwgXCJ5XCIsIFwieTJcIiwgXCJ5Y1wiLCBcImhlaWdodFwiLCBcInNpemVcIl0uaW5kZXhPZihrZXkpID49IDApIC8vIFwiZGVmaW5lZFwiIGNoYW5uZWwgaXMgaWdub3JlZCBkdWUgdG8gcGVyZm9ybWFuY2UgaXNzdWUuXG4gICAgICAgIC5yZWR1Y2UoKGFjYywgY3VycikgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld1ZhbCA9IGRlY29kZUVuY29kZS5iaW5kKHRoaXMpKFxuICAgICAgICAgICAgY3VycixcbiAgICAgICAgICAgIGVuY29kZXMsXG4gICAgICAgICAgICBzY2FsZXMsXG4gICAgICAgICAgICBzaWduYWwsXG4gICAgICAgICAgICBvbGREXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIWlzTnVtYmVyKG5ld1ZhbCkpIHtcbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFjY1tjdXJyXSA9IG5ld1ZhbDtcbiAgICAgICAgICBpZiAoc2NhbGVzW2N1cnJdICYmIHNjYWxlc1tjdXJyXS50eXBlID09PSBcImJhbmRcIikge1xuICAgICAgICAgICAgYWNjW2N1cnJdICs9IE1hdGgucm91bmQoXG4gICAgICAgICAgICAgIHNjYWxlc1tjdXJyXS5iYW5kd2lkdGgoKSAqIChlbmNvZGUuYmFuZFBvc2l0aW9uIHx8IDAuNSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KTtcbiAgICAgIGRlZmF1bHRELmhlaWdodCA9IGlzTnVtYmVyKGRlZmF1bHRELmhlaWdodClcbiAgICAgICAgPyBkZWZhdWx0RC5oZWlnaHRcbiAgICAgICAgOiBNYXRoLmFicyhkZWZhdWx0RC55MiAtIGRlZmF1bHRELnkpO1xuICAgICAgZGVmYXVsdEQud2lkdGggPSBpc051bWJlcihkZWZhdWx0RC53aWR0aClcbiAgICAgICAgPyBkZWZhdWx0RC53aWR0aFxuICAgICAgICA6IE1hdGguYWJzKGRlZmF1bHRELngyIC0gZGVmYXVsdEQueCk7XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihcbiAgICAgICAgLy8ge1xuICAgICAgICAvLyAgIHg6IG9sZEQueCxcbiAgICAgICAgLy8gICB5OiBvbGRELnksXG4gICAgICAgIC8vICAgd2lkdGg6IG9sZEQud2lkdGgsXG4gICAgICAgIC8vICAgaGVpZ2h0OiBvbGRELmhlaWdodFxuICAgICAgICAvLyB9LFxuICAgICAgICBkZWZhdWx0RFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGlmICh0eXBlID09PSBcImxpbmVcIikge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgZDNcbiAgICAgICAgICAubGluZSgpXG4gICAgICAgICAgLngoZCA9PiBNYXRoLmZsb29yKGQueCAqIDEwMCkgLyAxMDApXG4gICAgICAgICAgLnkoZCA9PiBNYXRoLmZsb29yKGQueSAqIDEwMCkgLyAxMDApKG5ld0RhdGEpIHx8IFwiXCJcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBcImFyZWFcIikge1xuICAgICAgLy8gYXJlYWhTaGFwZSAgPSBkM19hcmVhKCkueSh5KS54MSh4KS54MCh4dykuZGVmaW5lZChkZWYpLFxuICAgICAgaWYgKGFsb25nVG8gPT09IFwieFwiKSB7XG4gICAgICAgIG5ld0RhdGEuZm9yRWFjaChkID0+IHtcbiAgICAgICAgICBkLnkyID0gaXNOdW1iZXIoZC55MikgPyBkLnkyIDogZC55O1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBkM1xuICAgICAgICAgICAgLmFyZWEoKVxuICAgICAgICAgICAgLngoZCA9PiBNYXRoLmZsb29yKGQueCAqIDEwMCkgLyAxMDApXG4gICAgICAgICAgICAueTEoZCA9PiBNYXRoLmZsb29yKE1hdGgubWluKGQueSwgZC55MikgKiAxMDApIC8gMTAwKVxuICAgICAgICAgICAgLnkwKFxuICAgICAgICAgICAgICBkID0+IE1hdGguZmxvb3IoKE1hdGgubWluKGQueSwgZC55MikgKyAoZC5oZWlnaHQgfHwgMCkpICogMTAwKSAvIDEwMFxuICAgICAgICAgICAgKShuZXdEYXRhKSB8fCBcIlwiXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdEYXRhLmZvckVhY2goZCA9PiB7XG4gICAgICAgICAgZC54MiA9IGlzTnVtYmVyKGQueDIpID8gZC54MiA6IGQueDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgZDNcbiAgICAgICAgICAgIC5hcmVhKClcbiAgICAgICAgICAgIC55KGQgPT4gTWF0aC5mbG9vcihkLnkgKiAxMDApIC8gMTAwKVxuICAgICAgICAgICAgLngxKGQgPT4gTWF0aC5mbG9vcihNYXRoLm1pbihkLngsIGQueDIpICogMTAwKSAvIDEwMClcbiAgICAgICAgICAgIC54MChcbiAgICAgICAgICAgICAgZCA9PiBNYXRoLmZsb29yKChNYXRoLm1pbihkLngsIGQueDIpICsgKGQud2lkdGggfHwgMCkpICogMTAwKSAvIDEwMFxuICAgICAgICAgICAgKShuZXdEYXRhKSB8fCBcIlwiXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwidHJhaWxcIikge1xuXG4gICAgICByZXR1cm4gdmVnYS5wYXRoVHJhaWwoKVxuICAgICAgICAueChkID0+IGQueClcbiAgICAgICAgLnkoZD0+IGQueSlcbiAgICAgICAgLnNpemUoZD0+IChpc051bWJlcihkLnNpemUpID8gZC5zaXplIDogMikpIC8vIDIgaXMgZGVmYXVsdCBzaXplIGluIFZlZ2FcbiAgICAgICAgLmRlZmluZWQoZD0+KGQuZGVmaW5lZCB8fCB0cnVlKSkobmV3RGF0YSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1EKGVuY29kZXMsIHNjYWxlcywgc2lnbmFsLCBkLCBpbmhlcml0ID0gdHJ1ZSkge1xuICBjb25zdCBlbmNvZGUgPSBlbmNvZGVzLnByaW1hcnkgfHwgZW5jb2RlcztcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oXG4gICAge30sXG4gICAgT2JqZWN0LmtleXMoZW5jb2RlKVxuICAgICAgLmZpbHRlcihrZXkgPT4gW1wieFwiLCBcInlcIiwgXCJhbmdsZVwiLCBcInljXCIsIFwieGNcIl0uaW5kZXhPZihrZXkpID49IDApXG4gICAgICAucmVkdWNlKChhY2MsIGN1cnIpID0+IHtcbiAgICAgICAgY29uc3QgbmV3VmFsID0gZGVjb2RlRW5jb2RlLmJpbmQodGhpcykoXG4gICAgICAgICAgY3VycixcbiAgICAgICAgICBlbmNvZGVzLFxuICAgICAgICAgIHNjYWxlcyxcbiAgICAgICAgICBzaWduYWwsXG4gICAgICAgICAgZFxuICAgICAgICApO1xuICAgICAgICBsZXQgcHJvcCA9IGN1cnI7XG4gICAgICAgIGlmIChpc05hTihuZXdWYWwpKSB7XG4gICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3VyciA9PT0gXCJ4Y1wiKSB7XG4gICAgICAgICAgcHJvcCA9IFwieFwiO1xuICAgICAgICB9IGVsc2UgaWYgKGN1cnIgPT09IFwieWNcIikge1xuICAgICAgICAgIHByb3AgPSBcInlcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGFjY1twcm9wXSA9IGlzTmFOKGFjY1twcm9wXSkgPyBuZXdWYWwgOiBhY2NbcHJvcF07XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCB7fSksXG4gICAgaW5oZXJpdCA/IGQgOiB7fVxuICApO1xufVxuZXhwb3J0XG5mdW5jdGlvbiBjYWxjdWxhdGVHZXRWYWxldXMoZW5jb2Rlcywgc2NhbGVzLCBzaWduYWxzLCBjb21wdXRlU2NhbGUsIHNjTmFtZXMpIHtcbiAgcmV0dXJuIHtcbiAgICB1cGRhdGU6IHtcbiAgICAgIGluaXRpYWw6IChhdHRyLCBnZXRTY2FsZXMsIGQpID0+IHtcbiAgICAgICAgY29uc3QgY29tcHV0ZWRTY2FsZXMgPSBjb21wdXRlU2NhbGUoc2NhbGVzLCBzY05hbWVzLCBnZXRTY2FsZXMpO1xuICAgICAgICByZXR1cm4gZ2V0UHJvcFZhbChcbiAgICAgICAgICBhdHRyLFxuICAgICAgICAgIGVuY29kZXMuaW5pdGlhbC51cGRhdGUsXG4gICAgICAgICAgY29tcHV0ZWRTY2FsZXMuaW5pdGlhbCxcbiAgICAgICAgICBzaWduYWxzLmluaXRpYWwsXG4gICAgICAgICAgZFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIGZpbmFsOiAoYXR0ciwgZ2V0U2NhbGVzLCBkKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXB1dGVkU2NhbGVzID0gY29tcHV0ZVNjYWxlKHNjYWxlcywgc2NOYW1lcywgZ2V0U2NhbGVzKTtcbiAgICAgICAgcmV0dXJuIGdldFByb3BWYWwoXG4gICAgICAgICAgYXR0cixcbiAgICAgICAgICBlbmNvZGVzLmZpbmFsLnVwZGF0ZSxcbiAgICAgICAgICBjb21wdXRlZFNjYWxlcy5maW5hbCxcbiAgICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICAgIGRcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBjdXN0b20oYXR0ciwgZ2V0U2NhbGVzLCBkX2ksIGRfZikge1xuICAgICAgICBjb25zdCBkYXR1bSA9IHtcbiAgICAgICAgICBpbml0aWFsOiBkX2ksXG4gICAgICAgICAgZmluYWw6IGRfZlxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGNvbXB1dGVkU2NhbGVzID0gY29tcHV0ZVNjYWxlKHNjYWxlcywgc2NOYW1lcywgZ2V0U2NhbGVzKTtcbiAgICAgICAgcmV0dXJuIGdldFByb3BWYWwuYmluZCh0aGlzKShcbiAgICAgICAgICBhdHRyLFxuICAgICAgICAgIGVuY29kZXMuZmluYWwudXBkYXRlLFxuICAgICAgICAgIGNvbXB1dGVkU2NhbGVzLFxuICAgICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgICAgZGF0dW1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGVudGVyOiB7XG4gICAgICBpbml0aWFsOiAoYXR0ciwgZ2V0U2NhbGVzLCBkKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXB1dGVkU2NhbGVzID0gY29tcHV0ZVNjYWxlKHNjYWxlcywgc2NOYW1lcywgZ2V0U2NhbGVzKTtcblxuICAgICAgICByZXR1cm4gZ2V0UHJvcFZhbChcbiAgICAgICAgICBhdHRyLFxuICAgICAgICAgIGVuY29kZXMuaW5pdGlhbC5lbnRlcixcbiAgICAgICAgICB7IHByaW1hcnk6IGNvbXB1dGVkU2NhbGVzLmluaXRpYWwsIHNlY29uZGFyeTogY29tcHV0ZWRTY2FsZXMuZmluYWwgfSxcbiAgICAgICAgICBzaWduYWxzLmluaXRpYWwsXG4gICAgICAgICAgZFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIGZpbmFsOiAoYXR0ciwgZ2V0U2NhbGVzLCBkKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXB1dGVkU2NhbGVzID0gY29tcHV0ZVNjYWxlKHNjYWxlcywgc2NOYW1lcywgZ2V0U2NhbGVzKTtcbiAgICAgICAgcmV0dXJuIGdldFByb3BWYWwoXG4gICAgICAgICAgYXR0cixcbiAgICAgICAgICBlbmNvZGVzLmZpbmFsLmVudGVyLFxuICAgICAgICAgIGNvbXB1dGVkU2NhbGVzLmZpbmFsLFxuICAgICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgICAgZFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIGN1c3RvbShhdHRyLCBnZXRTY2FsZXMsIGRfaSwgZF9mKSB7XG4gICAgICAgIGNvbnN0IGRhdHVtID0ge1xuICAgICAgICAgIGluaXRpYWw6IGRfaSxcbiAgICAgICAgICBmaW5hbDogZF9mXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgY29tcHV0ZWRTY2FsZXMgPSBjb21wdXRlU2NhbGUoc2NhbGVzLCBzY05hbWVzLCBnZXRTY2FsZXMpO1xuICAgICAgICByZXR1cm4gZ2V0UHJvcFZhbC5iaW5kKHRoaXMpKFxuICAgICAgICAgIGF0dHIsXG4gICAgICAgICAgZW5jb2Rlcy5maW5hbC5lbnRlcixcbiAgICAgICAgICBjb21wdXRlZFNjYWxlcyxcbiAgICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICAgIGRhdHVtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSxcbiAgICBleGl0OiB7XG4gICAgICBpbml0aWFsOiAoYXR0ciwgZ2V0U2NhbGVzLCBkKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXB1dGVkU2NhbGVzID0gY29tcHV0ZVNjYWxlKHNjYWxlcywgc2NOYW1lcywgZ2V0U2NhbGVzKTtcbiAgICAgICAgcmV0dXJuIGdldFByb3BWYWwoXG4gICAgICAgICAgYXR0cixcbiAgICAgICAgICBlbmNvZGVzLmluaXRpYWwuZXhpdCxcbiAgICAgICAgICBjb21wdXRlZFNjYWxlcy5pbml0aWFsLFxuICAgICAgICAgIHNpZ25hbHMuaW5pdGlhbCxcbiAgICAgICAgICBkXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgZmluYWw6IChhdHRyLCBnZXRTY2FsZXMsIGQpID0+IHtcbiAgICAgICAgY29uc3QgY29tcHV0ZWRTY2FsZXMgPSBjb21wdXRlU2NhbGUoc2NhbGVzLCBzY05hbWVzLCBnZXRTY2FsZXMpO1xuICAgICAgICByZXR1cm4gZ2V0UHJvcFZhbChcbiAgICAgICAgICBhdHRyLFxuICAgICAgICAgIGVuY29kZXMuZmluYWwuZXhpdCxcbiAgICAgICAgICB7IHByaW1hcnk6IGNvbXB1dGVkU2NhbGVzLmZpbmFsLCBzZWNvbmRhcnk6IGNvbXB1dGVkU2NhbGVzLmluaXRpYWwgfSxcbiAgICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICAgIGRcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBjdXN0b20oYXR0ciwgZ2V0U2NhbGVzLCBkX2ksIGRfZikge1xuICAgICAgICBjb25zdCBkYXR1bSA9IHtcbiAgICAgICAgICBpbml0aWFsOiBkX2ksXG4gICAgICAgICAgZmluYWw6IGRfZlxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGNvbXB1dGVkU2NhbGVzID0gY29tcHV0ZVNjYWxlKHNjYWxlcywgc2NOYW1lcywgZ2V0U2NhbGVzKTtcbiAgICAgICAgcmV0dXJuIGdldFByb3BWYWwuYmluZCh0aGlzKShcbiAgICAgICAgICBhdHRyLFxuICAgICAgICAgIGVuY29kZXMuZmluYWwuZXhpdCxcbiAgICAgICAgICBjb21wdXRlZFNjYWxlcyxcbiAgICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICAgIGRhdHVtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBkZWNvZGVFbmNvZGUocHJvcCwgZW5jb2Rlcywgc2NhbGVzLCBzaWduYWwsIGQpIHtcbiAgbGV0IHN1YlNjYWxlcyA9IGNvcHkyKHNjYWxlcyk7XG4gIGlmIChzY2FsZXMucHJpbWFyeSAmJiBzY2FsZXMuc2Vjb25kYXJ5KSB7XG4gICAgc3ViU2NhbGVzID0gc2NhbGVzLnNlY29uZGFyeTtcbiAgICBzY2FsZXMgPSBzY2FsZXMucHJpbWFyeTtcbiAgfSBlbHNlIGlmIChzY2FsZXMuaW5pdGlhbCAmJiBzY2FsZXMuZmluYWwpIHtcbiAgICBzY2FsZXMgPSBzY2FsZXMuZmluYWw7XG4gIH1cblxuICBsZXQgZW5jb2RlID0gY29weShlbmNvZGVzKTtcbiAgbGV0IHN1YkVuY29kZSA9IGNvcHkoZW5jb2Rlcyk7XG4gIGlmIChlbmNvZGVzLnByaW1hcnkgJiYgZW5jb2Rlcy5zZWNvbmRhcnkpIHtcbiAgICBlbmNvZGUgPSBlbmNvZGVzLnByaW1hcnk7XG4gICAgc3ViRW5jb2RlID0gZW5jb2Rlcy5zZWNvbmRhcnk7XG4gIH0gZWxzZSBpZiAoZW5jb2Rlcy5pbml0aWFsICYmIGVuY29kZXMuZmluYWwpIHtcbiAgICBzdWJFbmNvZGUgPSBlbmNvZGUgPSBlbmNvZGVzLmZpbmFsO1xuICB9XG5cbiAgY29uc3QgZW5BdHRyID0gZW5jb2RlW3Byb3BdO1xuICBjb25zdCBzdWJFbkF0dHIgPSBzdWJFbmNvZGVbcHJvcF07XG5cbiAgZnVuY3Rpb24gZ2V0VmFsKGVuQXR0ciwgc2NhbGVzKSB7XG4gICAgaWYgKCFlbkF0dHIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZW5BdHRyKSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbkF0dHIubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgIC8vIFRoZW4gdGhlIGl0ZW1zIHNob3VsZCBjb250YWluICd0ZXN0JyBwcm9wIHRvIHRlc3QgKGV4Y2VwdCB0aGUgbGFzdClcbiAgICAgICAgaWYgKGV2YWxTaWduYWxWYWwoZW5BdHRyW2ldLnRlc3QsIHNpZ25hbCwgc2NhbGVzLCBkLmRhdHVtKSkge1xuICAgICAgICAgIHJldHVybiBlbkF0dHJbaV0udmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVuQXR0ciA9IGNvcHkoZW5BdHRyW2VuQXR0ci5sZW5ndGggLSAxXSk7XG4gICAgfVxuXG4gICAgbGV0IGZpbmFsVmFsID0gZW5BdHRyLnZhbHVlO1xuICAgIGlmIChlbkF0dHIuZmllbGQpIHtcbiAgICAgIGlmIChlbkF0dHIuc2NhbGUpIHtcbiAgICAgICAgY29uc3Qgc2NOYW1lID0gZW5BdHRyLnNjYWxlO1xuICAgICAgICBmaW5hbFZhbCA9IHNjYWxlc1tzY05hbWVdXG4gICAgICAgICAgPyBzY2FsZXNbc2NOYW1lXShkLmRhdHVtW2VuQXR0ci5maWVsZF0pXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICB9IGVsc2UgaWYgKGVuQXR0ci5maWVsZC5ncm91cCkge1xuICAgICAgICByZXR1cm4gZC5tYXJrLmdyb3VwW2VuQXR0ci5maWVsZC5ncm91cF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaW5hbFZhbCA9IGQuZGF0dW1bZW5BdHRyLmZpZWxkXTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVuQXR0ci5zaWduYWwpIHtcbiAgICAgIGNvbnN0IHZhbCA9IGV2YWxTaWduYWxWYWwoZW5BdHRyLnNpZ25hbCwgc2lnbmFsLCBzY2FsZXMsIGQuZGF0dW0pO1xuXG4gICAgICBpZiAoZW5BdHRyLnNjYWxlKSB7XG4gICAgICAgIGNvbnN0IHNjTmFtZSA9IGVuQXR0ci5zY2FsZTtcbiAgICAgICAgZmluYWxWYWwgPSBzY2FsZXNbc2NOYW1lXSA/IHNjYWxlc1tzY05hbWVdKHZhbCkgOiB1bmRlZmluZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaW5hbFZhbCA9IHZhbDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVuQXR0ci5zY2FsZSkge1xuICAgICAgY29uc3Qgc2NOYW1lID0gZW5BdHRyLnNjYWxlO1xuXG4gICAgICBpZiAoZW5BdHRyLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZmluYWxWYWwgPSBzY2FsZXNbc2NOYW1lXSA/IHNjYWxlc1tzY05hbWVdKGVuQXR0ci52YWx1ZSkgOiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbkF0dHIuYmFuZCkge1xuICAgICAgICBjb25zdCBzYyA9IHNjYWxlc1tzY05hbWVdO1xuICAgICAgICBsZXQgYncgPSBzYyAmJiBzYy50eXBlID09PSBcImJhbmRcIiA/IHNjLmJhbmR3aWR0aCgpIDogMDtcbiAgICAgICAgYncgPSBNYXRoLnJvdW5kKFxuICAgICAgICAgIGJ3ICpcbiAgICAgICAgICAgIChlbkF0dHIuYmFuZCA9PT0gdHJ1ZSB8fCBpc051bWJlcihlbkF0dHIuYmFuZCkgPyBlbkF0dHIuYmFuZCA6IDAuNSlcbiAgICAgICAgKTtcbiAgICAgICAgZmluYWxWYWwgPSBpc051bWJlcihmaW5hbFZhbCkgPyBidyArIGZpbmFsVmFsIDogYnc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVuQXR0ci5leHApIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJUb2RvIGRlY29kZUVuY2RvZSB3aXRoIGV4cC5cIik7XG4gICAgfVxuICAgIGlmIChlbkF0dHIubXVsdCkge1xuICAgICAgaWYgKGlzTnVtYmVyKGVuQXR0ci5tdWx0KSkge1xuICAgICAgICBmaW5hbFZhbCAqPSBlbkF0dHIubXVsdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbmFsVmFsICo9IGRlY29kZUVuY29kZShcbiAgICAgICAgICBcIm11bHRcIixcbiAgICAgICAgICB7IG11bHQ6IGVuQXR0ci5tdWx0IH0sXG4gICAgICAgICAgc2NhbGVzLFxuICAgICAgICAgIHNpZ25hbCxcbiAgICAgICAgICBkXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChlbkF0dHIub2Zmc2V0KSB7XG4gICAgICBpZiAoaXNOdW1iZXIoZW5BdHRyLm9mZnNldCkpIHtcbiAgICAgICAgZmluYWxWYWwgKz0gZW5BdHRyLm9mZnNldDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbmFsVmFsICs9IGRlY29kZUVuY29kZShcbiAgICAgICAgICBcIm9mZnNldFwiLFxuICAgICAgICAgIHsgb2Zmc2V0OiBlbkF0dHIub2Zmc2V0IH0sXG4gICAgICAgICAgc2NhbGVzLFxuICAgICAgICAgIHNpZ25hbCxcbiAgICAgICAgICBkXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmaW5hbFZhbDtcbiAgfVxuICBjb25zdCBmVmFsUHJpbWFyeSA9IGdldFZhbChlbkF0dHIsIHNjYWxlcyk7XG4gIGNvbnN0IGZWYWxTZWNvbmRhcnkgPSBnZXRWYWwoc3ViRW5BdHRyLCBzdWJTY2FsZXMpO1xuICByZXR1cm4gZlZhbFByaW1hcnkgIT09IHVuZGVmaW5lZCA/IGZWYWxQcmltYXJ5IDogZlZhbFNlY29uZGFyeTtcbn1cblxuXG5mdW5jdGlvbiBldmFsU2lnbmFsVmFsKHNpZ25hbFZhbCwgc2lnbmFsLCBzY2FsZXMsIGRhdHVtKSB7XG4gIGNvbnN0IFZFR0FfRlVOQ1RJT05TID0gW1xuICAgIHtcbiAgICAgIG5hbWU6IFwic2NhbGVcIixcbiAgICAgIGZuOiAoc2NOYW1lLCB2YWwpID0+IChzY2FsZXNbc2NOYW1lXSA/IHNjYWxlc1tzY05hbWVdKHZhbCkgOiB1bmRlZmluZWQpXG4gICAgfSxcbiAgICB7IG5hbWU6IFwiaXNWYWxpZFwiLCBmbjogbyA9PiBvICE9PSBudWxsICYmIG8gPT09IG8gfSxcbiAgICB7IG5hbWU6IFwidGltZUZvcm1hdFwiLCBmbjogKGEsIGIpID0+IHZlZ2EudGltZUZvcm1hdChiKShhKSB9LFxuICAgIHsgbmFtZTogXCJ0aW1lVW5pdFNwZWNpZmllclwiLCBmbjogKGEsIGIpID0+IHZlZ2EudGltZVVuaXRTcGVjaWZpZXIoYSwgYikgfVxuICBdO1xuXG4gIGNvbnN0IGNvZGVnZW4gPSB2ZWdhRXhwcmVzc2lvbi5jb2RlZ2VuKHtcbiAgICB3aGl0ZWxpc3Q6IFtcImRhdHVtXCJdLmNvbmNhdChPYmplY3Qua2V5cyhzaWduYWwgfHwge30pKSxcbiAgICBnbG9iYWx2YXI6IFwiZ2xvYmFsXCJcbiAgfSk7XG5cblxuICBWRUdBX0ZVTkNUSU9OUy5mb3JFYWNoKGZuRGVmID0+IHtcbiAgICBjb2RlZ2VuLmZ1bmN0aW9uc1tmbkRlZi5uYW1lXSA9IGZuRGVmLm5hbWU7XG4gIH0pO1xuICBjb25zdCBleHRyYUZ1bmN0aW9ucyA9IFZFR0FfRlVOQ1RJT05TLm1hcChmbkRlZiA9PiBmbkRlZi5mbik7XG4gIGNvbnN0IGV4dHJhRnVuY3Rpb25OYW1lcyA9IFZFR0FfRlVOQ1RJT05TLm1hcChmbkRlZiA9PiBmbkRlZi5uYW1lKTtcblxuICBjb25zdCBjb2RlZ2VuVmFsID0gY29kZWdlbih2ZWdhRXhwcmVzc2lvbi5wYXJzZShzaWduYWxWYWwpKTtcblxuICBjb25zdCBmbiA9IEZ1bmN0aW9uKFxuICAgIFwiZGF0dW1cIixcbiAgICAuLi5PYmplY3Qua2V5cyhzaWduYWwgfHwge30pLFxuICAgIC4uLmV4dHJhRnVuY3Rpb25OYW1lcyxcbiAgICBgcmV0dXJuICgke2NvZGVnZW5WYWwuY29kZX0pYFxuICApO1xuICByZXR1cm4gZm4oXG4gICAgZGF0dW0sXG4gICAgLi4uT2JqZWN0LmtleXMoc2lnbmFsIHx8IHt9KS5tYXAoa2V5ID0+IHNpZ25hbFtrZXldKSxcbiAgICAuLi5leHRyYUZ1bmN0aW9uc1xuICApO1xuXG59IiwiaW1wb3J0ICogYXMgZDMgZnJvbSBcImQzXCI7XG5pbXBvcnQgeyBncm91cCB9IGZyb20gXCJkM1wiO1xuaW1wb3J0IHsgZmxhdHRlbiB9IGZyb20gXCIuLi91dGlsL3V0aWwuanNcIjtcbmltcG9ydCB7IGdldEVhc2VGbiB9IGZyb20gXCIuL3V0aWxcIjtcblxuY29uc3QgT1JERVIgPSB7XG4gIGFzY2VuZGluZzogZDMuYXNjZW5kaW5nLFxuICBkZXNjZW5kaW5nOiBkMy5kZXNjZW5kaW5nXG59O1xuXG5mdW5jdGlvbiBnZXRPcmRlckZuKGlzTnVtYmVyLCBvcmRlcikge1xuICBpZiAoaXNOdW1iZXIgJiYgb3JkZXIpIHtcbiAgICByZXR1cm4gKGEsIGIpID0+IE9SREVSW29yZGVyXShOdW1iZXIoYSksIE51bWJlcihiKSk7XG4gIH1cbiAgcmV0dXJuIE9SREVSW29yZGVyXTtcbn1cblxuZnVuY3Rpb24gc3RhZ2dlcmVkVGltaW5nKHN0YWdnZXJpbmcsIGRhdGEsIGR1cmF0aW9uKSB7XG4gIGxldCBOO1xuICBsZXQgZ3JvdXBlZDtcbiAgY29uc3QgZGF0YVdpdGhUaW1pbmcgPSBkYXRhLm1hcCgoZCwgaSkgPT4ge1xuICAgIHJldHVybiB7IC4uLmQsIF9fc3RhZ2dlcmluZ19pZF9fOiBpIH07XG4gIH0pO1xuICBjb25zdCBzdWJTdGFnZ2VyaW5nID0gc3RhZ2dlcmluZy5zdGFnZ2VyaW5nO1xuXG4gIGNvbnN0IGlzTnVtYmVyID1cbiAgICBzdGFnZ2VyaW5nLmJ5ICYmXG4gICAgZGF0YVdpdGhUaW1pbmcucmVkdWNlKChhY2MsIGQpID0+IHtcbiAgICAgIGxldCB2YWw7XG4gICAgICBpZiAodHlwZW9mIHN0YWdnZXJpbmcuYnkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdmFsID0gKGQuaW5pdGlhbCB8fCBkLmZpbmFsKVtzdGFnZ2VyaW5nLmJ5XTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhZ2dlcmluZy5ieS5pbml0aWFsIHx8IHN0YWdnZXJpbmcuYnkuZmluYWwpIHtcbiAgICAgICAgY29uc3Qgd2hpY2ggPSBzdGFnZ2VyaW5nLmJ5LmluaXRpYWwgPyBcImluaXRpYWxcIiA6IFwiZmluYWxcIjtcbiAgICAgICAgdmFsID0gKHdoaWNoID09PSBcImluaXRpYWxcIlxuICAgICAgICAgID8gZC5pbml0aWFsIHx8IGQuZmluYWxcbiAgICAgICAgICA6IGQuZmluYWwgfHwgZC5pbml0aWFsKVtzdGFnZ2VyaW5nLmJ5W3doaWNoXV07XG4gICAgICB9XG4gICAgICByZXR1cm4gKGFjYyA9IGFjYyAmJiAodmFsICE9PSB1bmRlZmluZWQgPyAhaXNOYU4oTnVtYmVyKHZhbCkpIDogdHJ1ZSkpO1xuICAgIH0sIHRydWUpO1xuICBpZiAoIXN0YWdnZXJpbmcuYnkpIHtcblxuXG4gICAgY29uc3Qgb3JkZXJGbiA9IGdldE9yZGVyRm4odHJ1ZSwgc3RhZ2dlcmluZy5vcmRlcik7XG4gICAgZ3JvdXBlZCA9IGQzLmdyb3VwcyhkYXRhV2l0aFRpbWluZywgZCA9PiB7XG4gICAgICBjb25zdCB2YWwgPSBkLl9fc3RhZ2dlcmluZ19pZF9fO1xuICAgICAgcmV0dXJuIHZhbCA9PT0gdW5kZWZpbmVkID8gXCJfX2VtcHR5X19cIiA6IHZhbDtcbiAgICB9KVxuICAgIGlmICh0eXBlb2Yob3JkZXJGbikgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgZ3JvdXBlZC5zb3J0KChhLGIpID0+IG9yZGVyRm4oYSxiKSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiBzdGFnZ2VyaW5nLmJ5ID09PSBcInN0cmluZ1wiKSB7XG5cblxuICAgIGdyb3VwZWQgPSBkMy5ncm91cHMoZGF0YVdpdGhUaW1pbmcsIGQgPT4ge1xuICAgICAgY29uc3QgdmFsID0gKGQuaW5pdGlhbCB8fCBkLmZpbmFsKVtzdGFnZ2VyaW5nLmJ5XTtcbiAgICAgIHJldHVybiB2YWwgPT09IHVuZGVmaW5lZCA/IFwiX19lbXB0eV9fXCIgOiB2YWw7XG4gICAgfSlcblxuICAgIGNvbnN0IG9yZGVyRm4gPSBnZXRPcmRlckZuKGlzTnVtYmVyLCBzdGFnZ2VyaW5nLm9yZGVyKTtcbiAgICBpZiAodHlwZW9mKG9yZGVyRm4pID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGdyb3VwZWQuc29ydCgoYSxiKSA9PiBvcmRlckZuKGEsYikpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChzdGFnZ2VyaW5nLmJ5LmluaXRpYWwgfHwgc3RhZ2dlcmluZy5ieS5maW5hbCkge1xuICAgIGNvbnN0IHdoaWNoID0gc3RhZ2dlcmluZy5ieS5pbml0aWFsID8gXCJpbml0aWFsXCIgOiBcImZpbmFsXCI7XG5cblxuICAgIGdyb3VwZWQgPSBkMy5ncm91cHMoZGF0YVdpdGhUaW1pbmcsIGQgPT4ge1xuICAgICAgY29uc3QgdmFsID0gKHdoaWNoID09PSBcImluaXRpYWxcIlxuICAgICAgICA/IGQuaW5pdGlhbCB8fCBkLmZpbmFsXG4gICAgICAgIDogZC5maW5hbCB8fCBkLmluaXRpYWwpW3N0YWdnZXJpbmcuYnlbd2hpY2hdXTtcbiAgICAgIHJldHVybiB2YWwgPT09IHVuZGVmaW5lZCA/IFwiX19lbXB0eV9fXCIgOiB2YWw7XG4gICAgfSlcblxuICAgIGNvbnN0IG9yZGVyRm4gPSBnZXRPcmRlckZuKGlzTnVtYmVyLCBzdGFnZ2VyaW5nLm9yZGVyKTtcbiAgICBpZiAodHlwZW9mKG9yZGVyRm4pID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGdyb3VwZWQuc29ydCgoYSxiKSA9PiBvcmRlckZuKGEsYikpO1xuICAgIH1cbiAgfVxuXG4gIE4gPSBncm91cGVkLmxlbmd0aDtcblxuICBjb25zdCBlYXNlID0gZ2V0RWFzZUZuKHN0YWdnZXJpbmcuZWFzZSB8fCBcImxpbmVhclwiKSB8fCBkMy5lYXNlTGluZWFyO1xuICBjb25zdCByID0gc3RhZ2dlcmluZy5vdmVybGFwID09PSB1bmRlZmluZWQgPyAxIDogc3RhZ2dlcmluZy5vdmVybGFwO1xuICBjb25zdCBkZWx0YV9lID0gaSA9PiBlYXNlKChpICsgMSkgLyBOKSAtIGVhc2UoaSAvIE4pO1xuICBjb25zdCBhbHBoYSA9IDEgLyAoZGVsdGFfZSgwKSAqIHIgKyAxIC0gcik7XG5cbiAgbGV0IGR1cmF0aW9ucyA9IG5ldyBBcnJheShOKS5maWxsKDApO1xuICBkdXJhdGlvbnMgPSBkdXJhdGlvbnMubWFwKChkLCBpKSA9PiBkZWx0YV9lKGkpICogYWxwaGEgKiBkdXJhdGlvbik7XG4gIGxldCBkZWxheUFjYyA9IDA7XG4gIGNvbnN0IGRlbGF5cyA9IGR1cmF0aW9ucy5tYXAoKGR1ciwgaSwgZHVyYXRpb25zKSA9PiB7XG4gICAgY29uc3QgY3VyckRlbGF5ID0gZGVsYXlBY2M7XG4gICAgaWYgKGkgPCBOIC0gMSkge1xuICAgICAgZGVsYXlBY2MgPSBkZWxheUFjYyArIGR1ciAtIGR1cmF0aW9uc1tpICsgMV0gKiByO1xuICAgIH1cbiAgICByZXR1cm4gY3VyckRlbGF5O1xuICB9KTtcblxuICBpZiAoc3ViU3RhZ2dlcmluZykge1xuICAgIGNvbnN0IHRpbWluZ3MgPSBkZWxheXMubWFwKChkLCBpKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkZWxheTogZCxcbiAgICAgICAgZHVyYXRpb246IGR1cmF0aW9uc1tpXVxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHRpbWluZ3MuZ3JvdXBzID0gZ3JvdXBlZC5tYXAoKGcsIGkpID0+IHtcbiAgICAgIHJldHVybiBzdGFnZ2VyZWRUaW1pbmcoc3ViU3RhZ2dlcmluZywgZ1sxXSwgZHVyYXRpb25zW2ldKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBnZXRGbGF0dGVuVGltaW5ncyh0aW1pbmdzKTtcbiAgfVxuICBncm91cGVkLmZvckVhY2goKGdyb3VwLCBpKSA9PiB7XG4gICAgZ3JvdXBbMV0uZm9yRWFjaChkYXR1bSA9PiB7XG4gICAgICBkYXR1bS5kZWxheSA9IGRlbGF5c1tpXTtcbiAgICAgIGRhdHVtLmR1cmF0aW9uID0gZHVyYXRpb25zW2ldO1xuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gZGF0YVdpdGhUaW1pbmc7XG59XG5cbmZ1bmN0aW9uIGdldEZsYXR0ZW5UaW1pbmdzKHRpbWluZ3MpIHtcbiAgaWYgKCF0aW1pbmdzLmdyb3Vwcykge1xuICAgIHJldHVybiB0aW1pbmdzO1xuICB9XG4gIHJldHVybiBmbGF0dGVuKFxuICAgIHRpbWluZ3MubWFwKChnX3QsIGkpID0+IHtcbiAgICAgIHJldHVybiBnZXRGbGF0dGVuVGltaW5ncyh0aW1pbmdzLmdyb3Vwc1tpXSkubWFwKHQgPT4ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgdCwgeyBkZWxheTogdC5kZWxheSArIGdfdC5kZWxheSB9KTtcbiAgICAgIH0pO1xuICAgIH0pXG4gICk7XG59XG5cbmV4cG9ydCB7IHN0YWdnZXJlZFRpbWluZyB9O1xuIiwiaW1wb3J0IHsgc3RhZ2dlcmVkVGltaW5nIH0gZnJvbSBcIi4vc3RhZ2dlcmluZ1wiO1xuXG5mdW5jdGlvbiBjb21wdXRlVGltaW5nKGluaXRpYWxEYXRhLCBmaW5hbERhdGEsIHN0ZXBUaW1pbmcsIGpvaW5LZXksIGpvaW5TZXQpIHtcbiAgbGV0IHRpbWluZ3MgPSBpbml0aWFsRGF0YS5tYXAoKGRfaSwgaSkgPT4ge1xuICAgIGNvbnN0IGtleSA9IGpvaW5LZXkoZF9pLCBpLCBcImluaXRpYWxcIik7XG4gICAgY29uc3QgZm91bmQgPSBmaW5hbERhdGEuZmluZCgoZF9mLCBqKSA9PiBrZXkgPT09IGpvaW5LZXkoZF9mLCBqLCBcImZpbmFsXCIpKTtcbiAgICByZXR1cm4ge1xuICAgICAgaW5pdGlhbDogZF9pLmRhdHVtLFxuICAgICAgZmluYWw6IGZvdW5kID8gZm91bmQuZGF0dW0gOiBudWxsLFxuICAgICAgc2V0OiBmb3VuZCA/IFwidXBkYXRlXCIgOiBcImV4aXRcIixcbiAgICAgIGlkOiBrZXksXG4gICAgICBkdXJhdGlvbjogc3RlcFRpbWluZy5kdXJhdGlvbixcbiAgICAgIGRlbGF5OiBzdGVwVGltaW5nLmRlbGF5XG4gICAgfTtcbiAgfSk7XG4gIHRpbWluZ3MgPSB0aW1pbmdzLmNvbmNhdChcbiAgICBmaW5hbERhdGFcbiAgICAgIC5maWx0ZXIoZCA9PiBqb2luU2V0KGQpID09PSBcImVudGVyXCIpXG4gICAgICAubWFwKChkLCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IGtleSA9IGpvaW5LZXkoZCwgaSwgXCJmaW5hbFwiKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpbml0aWFsOiBudWxsLFxuICAgICAgICAgIGZpbmFsOiBkLmRhdHVtLFxuICAgICAgICAgIHNldDogXCJlbnRlclwiLFxuICAgICAgICAgIGlkOiBrZXksXG4gICAgICAgICAgZHVyYXRpb246IHN0ZXBUaW1pbmcuZHVyYXRpb24sXG4gICAgICAgICAgZGVsYXk6IHN0ZXBUaW1pbmcuZGVsYXlcbiAgICAgICAgfTtcbiAgICAgIH0pXG4gICk7XG5cbiAgaWYgKHN0ZXBUaW1pbmcuc3RhZ2dlcmluZykge1xuICAgIHRpbWluZ3MgPSBzdGFnZ2VyZWRUaW1pbmcoXG4gICAgICBzdGVwVGltaW5nLnN0YWdnZXJpbmcsXG4gICAgICB0aW1pbmdzLFxuICAgICAgc3RlcFRpbWluZy5kdXJhdGlvblxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHRpbWluZ3M7XG59XG5cbmZ1bmN0aW9uIGVudW1TdGVwQ29tcHV0ZVRpbWluZyhlbnVtZXJhdG9yLCBzdGVwVGltaW5nKSB7XG4gIC8vIHN0YWdnZXJpbmdcbiAgbGV0IHRpbWluZ3MgPSBlbnVtZXJhdG9yLmFsbEtleXMubWFwKChkLCBpKSA9PiB7XG4gICAgbGV0IGRhdHVtX2kgPSBlbnVtZXJhdG9yLmdldERhdHVtKGQsIDApO1xuICAgIGxldCBkYXR1bV9mID0gZW51bWVyYXRvci5nZXREYXR1bShkLCAwKTtcbiAgICBmb3IgKGxldCBrID0gMTsgayA8IGVudW1lcmF0b3Iuc3RvcE47IGsrKykge1xuICAgICAgZGF0dW1faSA9IGRhdHVtX2kgfHwgZW51bWVyYXRvci5nZXREYXR1bShkLCAwKTtcbiAgICAgIGRhdHVtX2YgPSBlbnVtZXJhdG9yLmdldERhdHVtKGQsIGspIHx8IGRhdHVtX2Y7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGluaXRpYWw6IGRhdHVtX2ksXG4gICAgICBmaW5hbDogZGF0dW1fZixcbiAgICAgIHNldDogXCJ1cGRhdGVcIiwgLy8gVG9kb1xuICAgICAgaWQ6IGksXG4gICAgICBrZXk6IGQsXG4gICAgICBkdXJhdGlvbjogc3RlcFRpbWluZy5kdXJhdGlvbixcbiAgICAgIGRlbGF5OiBzdGVwVGltaW5nLmRlbGF5XG4gICAgfTtcbiAgfSk7XG5cbiAgaWYgKHN0ZXBUaW1pbmcuc3RhZ2dlcmluZykge1xuICAgIHRpbWluZ3MgPSBzdGFnZ2VyZWRUaW1pbmcoXG4gICAgICBzdGVwVGltaW5nLnN0YWdnZXJpbmcsXG4gICAgICB0aW1pbmdzLFxuICAgICAgc3RlcFRpbWluZy5kdXJhdGlvblxuICAgICk7XG4gIH1cbiAgdGltaW5ncyA9IHRpbWluZ3Muc29ydCgoYSwgYikgPT4gYS5pZCAtIGIuaWQpO1xuICByZXR1cm4gdGltaW5ncztcbn1cblxuZXhwb3J0IHsgY29tcHV0ZVRpbWluZywgZW51bVN0ZXBDb21wdXRlVGltaW5nIH07XG4iLCJpbXBvcnQgKiBhcyBkMyBmcm9tIFwiZDNcIjtcbmltcG9ydCB7IGZpbmRBZnRlclNpYmxpbmcsIHByb3BNYXAsIGdldEVhc2VGbiwgZ2V0Sm9pbkluZm8sIGNvbXB1dGVTY2FsZX0gZnJvbSBcIi4uL3V0aWwuanNcIjtcbmltcG9ydCB7IGdldFByb3BWYWwsIGZldGNoQXR0cmlidXRlc30gZnJvbSBcIi4uL2F0dHJpYnV0ZUZldGNoZXJcIjtcbmltcG9ydCB7IGdldFN0eWxlIH0gZnJvbSBcIi4uL3ZlZ2EtcmVuZGVyLXV0aWwuanNcIjtcbmltcG9ydCB7IGNvbXB1dGVUaW1pbmcsIGVudW1TdGVwQ29tcHV0ZVRpbWluZyB9IGZyb20gXCIuLi90aW1pbmdzXCI7XG5cbmZ1bmN0aW9uIG1hcmtJbnRlcnBvbGF0ZShyYXdJbmZvLCBzdGVwLCB0YXJnZXRFbG0pIHtcbiAgY29uc3Qgam9pbktleSA9IChkLCBpLCBpbml0aWFsT3JGaW5hbCkgPT4ge1xuICAgIHJldHVybiBkLl9fZ2VtaW5pX18gP1xuICAgICAgZ2V0Sm9pbkluZm8oZCwgaSwgc3RlcCwgXCJqb2luS2V5XCIpIDpcbiAgICAgIChcbiAgICAgICAgdHlwZW9mKHN0ZXAuY29tcHV0ZURhdHVtSWQpID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IHN0ZXAuY29tcHV0ZURhdHVtSWQoZCwgaSlcbiAgICAgICAgICA6IHN0ZXAuY29tcHV0ZURhdHVtSWRbaW5pdGlhbE9yRmluYWwgfHwgXCJpbml0aWFsXCJdKGQsIGkpXG4gICAgICApO1xuICB9OyBjb25zdCBqb2luU2V0ID0gKGQsIGkpID0+IHtcbiAgICByZXR1cm4gZC5fX2dlbWluaV9fID8gZ2V0Sm9pbkluZm8oZCwgaSwgc3RlcCwgXCJhbmltU2V0XCIpIDogdW5kZWZpbmVkO1xuICB9O1xuXG4gIGNvbnN0IGFuaW1WaXMgPSB0YXJnZXRFbG07XG4gIGNvbnN0IGVWaWV3ID0gcmF3SW5mby5lVmlzLnZpZXc7XG5cbiAgY29uc3QgTUFSS19BVFRSUyA9IHtcbiAgICByZWN0OiBbXCJyZWN0XCJdLFxuICAgIHN5bWJvbDogW1wic3ltYm9sXCJdLFxuICAgIHJ1bGU6IFtcInJ1bGVcIl0sXG4gICAgdGV4dDogW1widGV4dFwiLCBcImFsaWduXCJdXG4gIH07XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3QgZG9uZSA9IGRvbmVNYWtlcigpO1xuICAgIGNvbnN0IHRpbWluZ3MgPSBjb21wdXRlVGltaW5nKFxuICAgICAgc3RlcC5jdXJyRGF0YSxcbiAgICAgIHN0ZXAubmV4dERhdGEsXG4gICAgICBzdGVwLnRpbWluZyxcbiAgICAgIGpvaW5LZXksXG4gICAgICBqb2luU2V0XG4gICAgKTtcbiAgICBjb25zdCB7XG4gICAgICBjaGFuZ2UsXG4gICAgICBtYXJrdHlwZXMsXG4gICAgICBzY2FsZXMsXG4gICAgICBlbmNvZGVzLFxuICAgICAgc2lnbmFsc1xuICAgIH0gPSBzdGVwO1xuXG4gICAgY29uc3QgaXNBZGQgPSAhY2hhbmdlLmluaXRpYWwgJiYgISFjaGFuZ2UuZmluYWwsXG4gICAgICBpc1JlbW92ZSA9ICEhY2hhbmdlLmluaXRpYWwgJiYgIWNoYW5nZS5maW5hbDtcbiAgICAvLyBpZiAoaXNWYWxpZE1hcmt0eXBlKG1hcmt0eXBlcy5pbml0aWFsKSAmJiBpc1ZhbGlkTWFya3R5cGUobWFya3R5cGVzLmZpbmFsKSAmJiBtYXJrdHlwZXMuaW5pdGlhbCAhPT0gbWFya3R5cGVzLmZpbmFsKSB7XG4gICAgLy8gICBpc0FkZCA9IGlzUmVtb3ZlID0gdHJ1ZTtcbiAgICAvLyB9XG4gICAgY29uc3QgZWFzZUZuID0gZ2V0RWFzZUZuKHN0ZXAudGltaW5nLmVhc2UpO1xuXG4gICAgLy8gbGV0IGRvVXBkYXRlID0gICFpc1JlbW92ZSAmJiAhaXNBZGQgJiYgKGNoYW5nZS5lbmNvZGUgIT09IGZhbHNlKSxcbiAgICAvLyAgIGRvRW50ZXIgPSAhaXNSZW1vdmUgJiYgKGlzQWRkIHx8IGNoYW5nZS5lbmNvZGUgIT09IGZhbHNlKSxcbiAgICAvLyAgIGRvRXhpdCA9ICFpc0FkZCAmJiAoaXNSZW1vdmUgfHwgY2hhbmdlLmVuY29kZSAhPT0gZmFsc2UpO1xuXG4gICAgLy8gaWYgKGNoYW5nZS5lbmNvZGUpIHtcbiAgICAvLyAgIGRvVXBkYXRlID0gY2hhbmdlLmVuY29kZS51cGRhdGUgPT09IGZhbHNlID8gZmFsc2UgOiBkb1VwZGF0ZTtcbiAgICAvLyAgIGRvRW50ZXIgPSBjaGFuZ2UuZW5jb2RlLmVudGVyID09PSBmYWxzZSA/IGZhbHNlIDogZG9FbnRlcjtcbiAgICAvLyAgIGRvRXhpdCA9IGNoYW5nZS5lbmNvZGUuZXhpdCA9PT0gZmFsc2UgPyBmYWxzZSA6IGRvRXhpdDtcbiAgICAvLyB9XG4gICAgLy8gZG9FeGl0ID0gdHJ1ZTtcbiAgICAvLyBkb0VudGVyID0gdHJ1ZTtcbiAgICBsZXQgbWFya3R5cGU7XG5cbiAgICBpZiAoaXNSZW1vdmUpIHtcbiAgICAgIG1hcmt0eXBlID0gbWFya3R5cGVzLmluaXRpYWw7XG4gICAgfSBlbHNlIGlmIChpc0FkZCkge1xuICAgICAgbWFya3R5cGUgPSBtYXJrdHlwZXMuZmluYWw7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIG1hcmt0eXBlcy5pbml0aWFsICYmXG4gICAgICBtYXJrdHlwZXMuZmluYWwgJiZcbiAgICAgIG1hcmt0eXBlcy5pbml0aWFsICE9PSBtYXJrdHlwZXMuZmluYWxcbiAgICApIHtcbiAgICAgIGlmIChjaGFuZ2UubWFya3R5cGUgPT09IGZhbHNlKSB7XG4gICAgICAgIG1hcmt0eXBlID0gbWFya3R5cGVzLmluaXRpYWw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtYXJrdHlwZSA9IG1hcmt0eXBlcy5maW5hbDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbWFya3R5cGUgPSBtYXJrdHlwZXMuaW5pdGlhbCB8fCBtYXJrdHlwZXMuZmluYWw7XG4gICAgfVxuXG4gICAgY29uc3Qgc3ZnRWxtVHlwZSA9IGdldFN2Z0VsbVR5cGUobWFya3R5cGUpO1xuICAgIGNvbnN0IHN2Z0VsbVR5cGVzID0ge1xuICAgICAgaW5pdGlhbDogZ2V0U3ZnRWxtVHlwZShtYXJrdHlwZXMuaW5pdGlhbCksXG4gICAgICBmaW5hbDogZ2V0U3ZnRWxtVHlwZShtYXJrdHlwZXMuZmluYWwpXG4gICAgfTtcblxuICAgIGxldCBtYXJrcyA9IGQzLnNlbGVjdChgJHthbmltVmlzICB9IC5tYXJrLSR7bWFya3R5cGV9LnJvbGUtbWFyay4ke2NoYW5nZS5jb21wTmFtZX1gKTtcblxuXG4gICAgaWYgKFxuICAgICAgaXNBZGQgfHxcbiAgICAgIChtYXJrdHlwZXMuaW5pdGlhbCAhPT0gbWFya3R5cGVzLmZpbmFsICYmXG4gICAgICAgIGlzVmFsaWRNYXJrdHlwZShtYXJrdHlwZXMuZmluYWwpKVxuICAgICkge1xuICAgICAgY29uc3Qgc2liID0gZmluZEFmdGVyU2libGluZyhlVmlldy5zY2VuZWdyYXBoKCkucm9vdCwgY2hhbmdlLmNvbXBOYW1lKTtcblxuICAgICAgbWFya3MgPSBhZGRNYXJrKFxuICAgICAgICBkMy5zZWxlY3QoYCR7YW5pbVZpcyAgfSAuJHtjaGFuZ2UuZmluYWwucGFyZW50Lm5hbWV9ID4gZyA+IGdgKSxcbiAgICAgICAgY2hhbmdlLmZpbmFsLFxuICAgICAgICBzaWIgPyBgLiR7c2liLm5hbWV9YCA6IHVuZGVmaW5lZFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoc3RlcC5lbnVtZXJhdG9yKSB7XG4gICAgICBpZiAoIWNoYW5nZS5kYXRhKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJDYW5ub3QgYXBwbHkgZW51bWVyYXRvciBmb3IgYSBtYXJrIGludGVycG9sYXRpb24gd2l0aG91dCBkYXRhIGNoYW5nZSFcIlxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29uc3Qge2VudW1lcmF0b3J9ID0gc3RlcDtcbiAgICAgIGxldCBmaW5hbFNjYWxlTmFtZXMgPSBbXTtcbiAgICAgIGlmIChjaGFuZ2Uuc2NhbGUgPT09IHRydWUpIHtcbiAgICAgICAgZmluYWxTY2FsZU5hbWVzID0gT2JqZWN0LmtleXMoZVZpZXcuX3J1bnRpbWUuc2NhbGVzKTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShjaGFuZ2Uuc2NhbGUpKSB7XG4gICAgICAgIGZpbmFsU2NhbGVOYW1lcyA9IGNoYW5nZS5zY2FsZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZ2V0VmFsdWVzID0ge1xuICAgICAgICB1cGRhdGU6IHtcbiAgICAgICAgICBpbml0aWFsKGF0dHIsIGdldFNjYWxlcywgZCl7XG5cbiAgICAgICAgICAgIGxldCBjb21wdXRlZFNjYWxlcyA9IGNvbXB1dGVTY2FsZShzY2FsZXMsIGZpbmFsU2NhbGVOYW1lcywgZ2V0U2NhbGVzKTtcbiAgICAgICAgICAgIHJldHVybiBnZXRQcm9wVmFsLmJpbmQodGhpcykoXG4gICAgICAgICAgICAgIGF0dHIsXG4gICAgICAgICAgICAgIGVuY29kZXMuaW5pdGlhbC51cGRhdGUsXG4gICAgICAgICAgICAgIGNvbXB1dGVkU2NhbGVzLmluaXRpYWwsXG4gICAgICAgICAgICAgIHNpZ25hbHMuaW5pdGlhbCxcbiAgICAgICAgICAgICAgZCk7XG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGZpbmFsOiBmdW5jdGlvbihhdHRyLCBnZXRTY2FsZXMsIGQpe1xuICAgICAgICAgICAgY29uc3QgY29tcHV0ZWRTY2FsZXMgPSBjb21wdXRlU2NhbGUoc2NhbGVzLCBmaW5hbFNjYWxlTmFtZXMsIGdldFNjYWxlcyk7XG4gICAgICAgICAgICByZXR1cm4gZ2V0UHJvcFZhbC5iaW5kKHRoaXMpKFxuICAgICAgICAgICAgICBhdHRyLFxuICAgICAgICAgICAgICBlbmNvZGVzLmZpbmFsLnVwZGF0ZSxcbiAgICAgICAgICAgICAgY29tcHV0ZWRTY2FsZXMuZmluYWwsXG4gICAgICAgICAgICAgIHNpZ25hbHMuaW5pdGlhbCxcbiAgICAgICAgICAgICAgZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGN1c3RvbShhdHRyLCBnZXRTY2FsZXMsIGRfaSwgZF9mKSB7XG4gICAgICAgICAgICBsZXQgZGF0dW0gPSB7XG4gICAgICAgICAgICAgIGluaXRpYWw6IGRfaSxcbiAgICAgICAgICAgICAgZmluYWw6IGRfZlxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgbGV0IGNvbXB1dGVkU2NhbGVzID0gY29tcHV0ZVNjYWxlKHNjYWxlcywgZmluYWxTY2FsZU5hbWVzLCBnZXRTY2FsZXMpO1xuICAgICAgICAgICAgcmV0dXJuIGdldFByb3BWYWwuYmluZCh0aGlzKShcbiAgICAgICAgICAgICAgYXR0cixcbiAgICAgICAgICAgICAgZW5jb2Rlcy5maW5hbC51cGRhdGUsXG4gICAgICAgICAgICAgIGNvbXB1dGVkU2NhbGVzLFxuICAgICAgICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICAgICAgICBkYXR1bSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlbnRlcjoge1xuICAgICAgICAgIGluaXRpYWwoYXR0ciwgZ2V0U2NhbGVzLCBkKXtcblxuICAgICAgICAgICAgbGV0IGNvbXB1dGVkU2NhbGVzID0gY29tcHV0ZVNjYWxlKHNjYWxlcywgZmluYWxTY2FsZU5hbWVzLCBnZXRTY2FsZXMpO1xuICAgICAgICAgICAgcmV0dXJuIGdldFByb3BWYWwuYmluZCh0aGlzKShcbiAgICAgICAgICAgICAgYXR0cixcbiAgICAgICAgICAgICAgZW5jb2Rlcy5pbml0aWFsLmVudGVyLFxuICAgICAgICAgICAgICB7cHJpbWFyeTogY29tcHV0ZWRTY2FsZXMuaW5pdGlhbCwgc2Vjb25kYXJ5OiBjb21wdXRlZFNjYWxlcy5maW5hbH0sXG4gICAgICAgICAgICAgIHNpZ25hbHMuaW5pdGlhbCxcbiAgICAgICAgICAgICAgZCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBmaW5hbChhdHRyLCBnZXRTY2FsZXMsIGQpe1xuICAgICAgICAgICAgbGV0IGNvbXB1dGVkU2NhbGVzID0gY29tcHV0ZVNjYWxlKHNjYWxlcywgZmluYWxTY2FsZU5hbWVzLCBnZXRTY2FsZXMpO1xuICAgICAgICAgICAgcmV0dXJuIGdldFByb3BWYWwuYmluZCh0aGlzKShcbiAgICAgICAgICAgICAgYXR0cixcbiAgICAgICAgICAgICAgZW5jb2Rlcy5maW5hbC5lbnRlcixcbiAgICAgICAgICAgICAgY29tcHV0ZWRTY2FsZXMuZmluYWwsXG4gICAgICAgICAgICAgIHNpZ25hbHMuaW5pdGlhbCxcbiAgICAgICAgICAgICAgZCk7XG5cbiAgICAgICAgICB9LFxuICAgICAgICAgIGN1c3RvbShhdHRyLCBnZXRTY2FsZXMsIGRfaSwgZF9mKXtcbiAgICAgICAgICAgIGxldCBkYXR1bSA9IHtcbiAgICAgICAgICAgICAgaW5pdGlhbDogZF9pLFxuICAgICAgICAgICAgICBmaW5hbDogZF9mXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBsZXQgY29tcHV0ZWRTY2FsZXMgPSBjb21wdXRlU2NhbGUoc2NhbGVzLCBmaW5hbFNjYWxlTmFtZXMsIGdldFNjYWxlcyk7XG4gICAgICAgICAgICByZXR1cm4gZ2V0UHJvcFZhbC5iaW5kKHRoaXMpKFxuICAgICAgICAgICAgICBhdHRyLFxuICAgICAgICAgICAgICBlbmNvZGVzLmZpbmFsLmVudGVyLFxuICAgICAgICAgICAgICBjb21wdXRlZFNjYWxlcyxcbiAgICAgICAgICAgICAgc2lnbmFscy5maW5hbCxcbiAgICAgICAgICAgICAgZGF0dW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXhpdDoge1xuICAgICAgICAgIGluaXRpYWwoYXR0ciwgZ2V0U2NhbGVzLCBkKXtcblxuICAgICAgICAgICAgbGV0IGNvbXB1dGVkU2NhbGVzID0gY29tcHV0ZVNjYWxlKHNjYWxlcywgZmluYWxTY2FsZU5hbWVzLCBnZXRTY2FsZXMpO1xuICAgICAgICAgICAgcmV0dXJuIGdldFByb3BWYWwuYmluZCh0aGlzKShcbiAgICAgICAgICAgICAgYXR0cixcbiAgICAgICAgICAgICAgZW5jb2Rlcy5pbml0aWFsLmV4aXQsXG4gICAgICAgICAgICAgIGNvbXB1dGVkU2NhbGVzLmluaXRpYWwsXG4gICAgICAgICAgICAgIHNpZ25hbHMuaW5pdGlhbCxcbiAgICAgICAgICAgICAgZCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBmaW5hbChhdHRyLCBnZXRTY2FsZXMsIGQpe1xuICAgICAgICAgICAgbGV0IGNvbXB1dGVkU2NhbGVzID0gY29tcHV0ZVNjYWxlKHNjYWxlcywgZmluYWxTY2FsZU5hbWVzLCBnZXRTY2FsZXMpO1xuICAgICAgICAgICAgcmV0dXJuIGdldFByb3BWYWwuYmluZCh0aGlzKShcbiAgICAgICAgICAgICAgYXR0cixcbiAgICAgICAgICAgICAgZW5jb2Rlcy5maW5hbC5leGl0LFxuICAgICAgICAgICAgICB7cHJpbWFyeTogY29tcHV0ZWRTY2FsZXMuZmluYWwsIHNlY29uZGFyeTogY29tcHV0ZWRTY2FsZXMuaW5pdGlhbH0sXG4gICAgICAgICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgICAgICAgIGQpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgY3VzdG9tKGF0dHIsIGdldFNjYWxlcywgZF9pLCBkX2Ype1xuICAgICAgICAgICAgbGV0IGRhdHVtID0ge1xuICAgICAgICAgICAgICBpbml0aWFsOiBkX2ksXG4gICAgICAgICAgICAgIGZpbmFsOiBkX2ZcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxldCBjb21wdXRlZFNjYWxlcyA9IGNvbXB1dGVTY2FsZShzY2FsZXMsIGZpbmFsU2NhbGVOYW1lcywgZ2V0U2NhbGVzKTtcbiAgICAgICAgICAgIHJldHVybiBnZXRQcm9wVmFsLmJpbmQodGhpcykoXG4gICAgICAgICAgICAgIGF0dHIsXG4gICAgICAgICAgICAgIGVuY29kZXMuZmluYWwuZXhpdCxcbiAgICAgICAgICAgICAgY29tcHV0ZWRTY2FsZXMsXG4gICAgICAgICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgICAgICAgIGRhdHVtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICAvLyBiaW5kIGFsbEtleXNcbiAgICAgIGNvbnN0IG5ld0JvdW5kTWFya3MgPSBtYXJrc1xuICAgICAgICAuc2VsZWN0QWxsKHN2Z0VsbVR5cGUpXG4gICAgICAgIC5kYXRhKGVudW1lcmF0b3IuYWxsS2V5cywgZCA9PiBkKTtcbiAgICAgIG5ld0JvdW5kTWFya3MuZXhpdCgpLnJlbW92ZSgpO1xuICAgICAgbmV3Qm91bmRNYXJrcy5lbnRlcigpLmFwcGVuZChzdmdFbG1UeXBlKTtcblxuICAgICAgY29uc3QgaW5pdGlhbE1hcmtzID0gbWFya3NcbiAgICAgICAgLnNlbGVjdEFsbChzdmdFbG1UeXBlKVxuICAgICAgICAuZmlsdGVyKGlkID0+IFtcInVwZGF0ZVwiLCBcImV4aXRcIl0uaW5kZXhPZihlbnVtZXJhdG9yLnNldChpZCwgMCkpID49IDApO1xuICAgICAgY29uc3QgYWxsUHJvcHMgPSBNQVJLX0FUVFJTW21hcmt0eXBlXS5yZWR1Y2UoKGFjYywgcHJvcCkgPT4ge1xuICAgICAgICByZXR1cm4gYWNjLmNvbmNhdChwcm9wTWFwKHByb3ApKTtcbiAgICAgIH0sIFtdKTtcbiAgICAgIGFsbFByb3BzLmZvckVhY2gocCA9PiB7XG4gICAgICAgIGlmIChwLnR5cGUgPT09IFwiYXR0clR3ZWVuXCIpIHtcbiAgICAgICAgICBjb25zdCB0ZW1wUCA9IE9iamVjdC5hc3NpZ24oe30sIHAsIHsgdHlwZTogXCJhdHRyXCIgfSk7XG4gICAgICAgICAgaW5pdGlhbE1hcmtzW3RlbXBQLnR5cGVdKGdldFN0eWxlKHRlbXBQLnZhbCksIGlkID0+XG4gICAgICAgICAgICBlbnVtZXJhdG9yLmdldFByb3BWYWwodGVtcFAsIGdldFZhbHVlcywgMCwgaWQpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChwLnR5cGUgPT09IFwidGV4dFwiKSB7XG4gICAgICAgICAgaW5pdGlhbE1hcmtzW3AudHlwZV0oaWQgPT5cbiAgICAgICAgICAgIGVudW1lcmF0b3IuZ2V0UHJvcFZhbChwLCBnZXRWYWx1ZXMsIDAsIGlkKVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW5pdGlhbE1hcmtzW3AudHlwZV0oZ2V0U3R5bGUocC52YWwpLCBpZCA9PlxuICAgICAgICAgICAgZW51bWVyYXRvci5nZXRQcm9wVmFsKHAsIGdldFZhbHVlcywgMCwgaWQpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cblxuXG4gICAgICAvLyBzdGFnZ2VyaW5nXG4gICAgICBjb25zdCB0aW1pbmdzID0gZW51bVN0ZXBDb21wdXRlVGltaW5nKGVudW1lcmF0b3IsIHN0ZXAudGltaW5nKTtcblxuICAgICAgY29uc3QgYW5pbU1hcmtzID0gbWFya3Muc2VsZWN0QWxsKHN2Z0VsbVR5cGUpLnRyYW5zaXRpb24oKTtcblxuICAgICAgYWxsUHJvcHMuZm9yRWFjaChwID0+IHtcbiAgICAgICAgaWYgKHAudHlwZSA9PT0gXCJhdHRyXCIpIHtcbiAgICAgICAgICBhbmltTWFya3MuYXR0clR3ZWVuKHAudmFsLCBmdW5jdGlvbihkKSB7XG4gICAgICAgICAgICByZXR1cm4gZW51bWVyYXRvci5pbnRlcnBvbGF0ZUFsb25nRW51bU1ha2VyKHAsIGdldFZhbHVlcywgdGhpcykoZCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAocC50eXBlID09PSBcImF0dHJUd2VlblwiKSB7XG4gICAgICAgICAgYW5pbU1hcmtzLmF0dHJUd2VlbihwLnZhbCwgZnVuY3Rpb24oZCkge1xuICAgICAgICAgICAgcmV0dXJuIGVudW1lcmF0b3IuaW50ZXJwb2xhdGVBbG9uZ0VudW1NYWtlcihwLCBnZXRWYWx1ZXMsIHRoaXMpKGQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHAudHlwZSA9PT0gXCJ0ZXh0XCIpIHtcbiAgICAgICAgICBhbmltTWFya3MudHdlZW4oXCJ0ZXh0XCIsIGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICAgIGNvbnN0IHRleHRJbnRlcnBvbGF0b3IgPSBlbnVtZXJhdG9yLmludGVycG9sYXRlQWxvbmdFbnVtTWFrZXIoXG4gICAgICAgICAgICAgIHAsXG4gICAgICAgICAgICAgIGdldFZhbHVlcyxcbiAgICAgICAgICAgICAgdGhpc1xuICAgICAgICAgICAgKShkKTtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKFwidGV4dFwiLCB0ZXh0SW50ZXJwb2xhdG9yKHQpKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAocC50eXBlID09PSBcInN0eWxlXCIpIHtcbiAgICAgICAgICBhbmltTWFya3Muc3R5bGVUd2VlbihnZXRTdHlsZShwLnZhbCksIGQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGVudW1lcmF0b3IuaW50ZXJwb2xhdGVBbG9uZ0VudW1NYWtlcihwLCBnZXRWYWx1ZXMsIHRoaXMpKGQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gaW50ZXJwb2xhdGUgdGhlbVxuICAgICAgYW5pbU1hcmtzXG4gICAgICAgIC5kdXJhdGlvbigoZCwgaSkgPT4gdGltaW5nc1tpXS5kdXJhdGlvbilcbiAgICAgICAgLmRlbGF5KChkLCBpKSA9PiB0aW1pbmdzW2ldLmRlbGF5KVxuICAgICAgICAuZWFzZShlYXNlRm4pXG4gICAgICAgIC5lbmQoKVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgbWFya3Muc2VsZWN0QWxsKHN2Z0VsbVR5cGUpLmRhdGEoc3RlcC5uZXh0RGF0YSk7XG4gICAgICAgICAgZG9uZShcImFsbFwiLCAoKSA9PiB7cmVzb2x2ZSgpO30pO1xuICAgICAgICB9KTtcblxuXG5cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgdGhlcmUgaXMgYSBtYXJrdHlwZSBjaGFuZ2UgYmV0d2VlbiBkaWZmZXJlbnQgc3ZnRWxtVHlwZXNcbiAgICAgIGlmIChtYXJrdHlwZXMuaW5pdGlhbCAhPT0gbWFya3R5cGVzLmZpbmFsKSB7XG4gICAgICAgIGxldCBhbmltTWFya3NJOyBsZXQgYW5pbU1hcmtzRjtcbiAgICAgICAgaWYgKGlzVmFsaWRNYXJrdHlwZShtYXJrdHlwZXMuaW5pdGlhbCkpIHtcbiAgICAgICAgICBjb25zdCBtYXJrcyA9IGQzLnNlbGVjdChcbiAgICAgICAgICAgIGFuaW1WaXMgKyBgIC5tYXJrLSR7bWFya3R5cGVzLmluaXRpYWx9LnJvbGUtbWFyay4ke2NoYW5nZS5jb21wTmFtZX1gXG4gICAgICAgICAgKTtcbiAgICAgICAgICBhbmltTWFya3NJID0gbWFya3Muc2VsZWN0QWxsKHN2Z0VsbVR5cGVzLmluaXRpYWwpO1xuICAgICAgICAgIGNvbnN0IG5ld1RpbWluZ3MgPVxuICAgICAgICAgICAgbWFya3R5cGVzLmZpbmFsICYmICFpc1ZhbGlkTWFya3R5cGUobWFya3R5cGVzLmZpbmFsKVxuICAgICAgICAgICAgICA/IGNvbXB1dGVUaW1pbmcoXG4gICAgICAgICAgICAgICAgc3RlcC5jdXJyRGF0YSxcbiAgICAgICAgICAgICAgICBzdGVwLnVucGFja2VkRGF0YSxcbiAgICAgICAgICAgICAgICBzdGVwLnRpbWluZyxcbiAgICAgICAgICAgICAgICBqb2luS2V5LFxuICAgICAgICAgICAgICAgIGpvaW5TZXRcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IHRpbWluZ3M7XG4gICAgICAgICAgY29uc3QgcHJldkRhdGEgPSBkMy5sb2NhbCgpO1xuICAgICAgICAgIGxldCBuZXh0RGF0YSA9XG4gICAgICAgICAgICAgIG1hcmt0eXBlcy5maW5hbCAmJiAhaXNWYWxpZE1hcmt0eXBlKG1hcmt0eXBlcy5maW5hbClcbiAgICAgICAgICAgICAgICA/IHN0ZXAudW5wYWNrZWREYXRhXG4gICAgICAgICAgICAgICAgOiBzdGVwLm5leHREYXRhO1xuXG4gICAgICAgICAgaWYgKGNoYW5nZS5kYXRhIHx8IGlzQWRkIHx8IGlzUmVtb3ZlKSB7XG4gICAgICAgICAgICBhbmltTWFya3NJID0gYW5pbU1hcmtzSS5kYXRhKHN0ZXAuY3VyckRhdGEpO1xuICAgICAgICAgICAgYW5pbU1hcmtzSS5lYWNoKGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICAgICAgcHJldkRhdGEuc2V0KHRoaXMsIGQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhbmltTWFya3NJID0gYW5pbU1hcmtzSS5kYXRhKG5leHREYXRhLCAoZCwgaSkgPT5cbiAgICAgICAgICAgICAgam9pbktleShkLCBpLCBcImluaXRpYWxcIilcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFuaW1NYXJrc0kuZWFjaChmdW5jdGlvbihkKSB7XG4gICAgICAgICAgICAgIHByZXZEYXRhLnNldCh0aGlzLCBkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGV4aXQoXG4gICAgICAgICAgICBuZXdUaW1pbmdzLFxuICAgICAgICAgICAgYW5pbU1hcmtzSSxcbiAgICAgICAgICAgIG1hcmt0eXBlcy5pbml0aWFsLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpbml0aWFsOiBlbmNvZGVzLmluaXRpYWwuZXhpdCxcbiAgICAgICAgICAgICAgZmluYWw6IGVuY29kZXMuZmluYWwuZXhpdFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNpZ25hbHMsXG4gICAgICAgICAgICBwcmV2RGF0YVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB1cGRhdGUoXG4gICAgICAgICAgICBuZXdUaW1pbmdzLFxuICAgICAgICAgICAgYW5pbU1hcmtzSSxcbiAgICAgICAgICAgIG1hcmt0eXBlcy5pbml0aWFsLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpbml0aWFsOiBlbmNvZGVzLmluaXRpYWwudXBkYXRlLFxuICAgICAgICAgICAgICBmaW5hbDogZW5jb2Rlcy5pbml0aWFsLmludGVybWVkaWF0ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIGVuY29kZSxcbiAgICAgICAgICAgIHNpZ25hbHMsXG4gICAgICAgICAgICBwcmV2RGF0YSxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRvbmUoXCJleGl0XCIsICgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1ZhbGlkTWFya3R5cGUobWFya3R5cGVzLmZpbmFsKSkge1xuICAgICAgICAgIGNvbnN0IHByZXZEYXRhID0gZDMubG9jYWwoKTtcbiAgICAgICAgICBsZXQgbmV3VGltaW5ncyA9IG1hcmt0eXBlcy5pbml0aWFsICYmICFpc1ZhbGlkTWFya3R5cGUobWFya3R5cGVzLmluaXRpYWwpID8gY29tcHV0ZVRpbWluZyhzdGVwLnVucGFja2VkRGF0YSwgc3RlcC5uZXh0RGF0YSwgc3RlcC50aW1pbmcsIGpvaW5LZXksIGpvaW5TZXQpIDogdGltaW5ncztcbiAgICAgICAgICBsZXQgY3VyckRhdGEgPSAhbWFya3R5cGVzLmluaXRpYWxcbiAgICAgICAgICAgID8gW11cbiAgICAgICAgICAgIDogIWlzVmFsaWRNYXJrdHlwZShtYXJrdHlwZXMuaW5pdGlhbClcbiAgICAgICAgICAgICAgPyBzdGVwLnVucGFja2VkRGF0YVxuICAgICAgICAgICAgICA6IGFuaW1NYXJrc0kuZGF0YSgpO1xuICAgICAgICAgIGNvbnN0IG1hcmtzID0gZDMuc2VsZWN0KFxuICAgICAgICAgICAgYW5pbVZpcyArIGAgLm1hcmstJHttYXJrdHlwZXMuZmluYWx9LnJvbGUtbWFyay4ke2NoYW5nZS5jb21wTmFtZX1gXG4gICAgICAgICAgKTtcbiAgICAgICAgICBhbmltTWFya3NGID0gbWFya3NcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoc3ZnRWxtVHlwZXMuZmluYWwpXG4gICAgICAgICAgICAuZmlsdGVyKGQgPT4gIWQpXG4gICAgICAgICAgICAuZGF0YShjdXJyRGF0YSk7XG5cbiAgICAgICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgICAgICBhbmltTWFya3NGLmVudGVyKCkuYXBwZW5kKHN2Z0VsbVR5cGVzLmZpbmFsKSxcbiAgICAgICAgICAgIE1BUktfQVRUUlNbbWFya3R5cGVzLmZpbmFsXSxcbiAgICAgICAgICAgIHsgcHJpbWFyeTogc2NhbGVzLmluaXRpYWwsIHNlY29uZGFyeTogc2NhbGVzLmZpbmFsIH0sXG4gICAgICAgICAgICBzaWduYWxzLmluaXRpYWwsXG4gICAgICAgICAgICBlbmNvZGVzLmZpbmFsLmludGVybWVkaWF0ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgYW5pbU1hcmtzRiA9IG1hcmtzLnNlbGVjdEFsbChzdmdFbG1UeXBlcy5maW5hbCk7XG4gICAgICAgICAgYW5pbU1hcmtzRi5lYWNoKGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICAgIHByZXZEYXRhLnNldCh0aGlzLCBkKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoY2hhbmdlLmRhdGEgfHwgaXNBZGQgfHwgaXNSZW1vdmUpIHtcbiAgICAgICAgICAgIGFuaW1NYXJrc0YgPSBhbmltTWFya3NGLmRhdGEoc3RlcC5uZXh0RGF0YSwgKGQsIGkpID0+XG4gICAgICAgICAgICAgIGpvaW5LZXkoZCwgaSwgXCJmaW5hbFwiKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlbnRlcihuZXdUaW1pbmdzLCBhbmltTWFya3NGLCBtYXJrdHlwZXMuZmluYWwpO1xuICAgICAgICAgIC8vIGZhZGUtaW4gdGhlIG5ldyBtYXJ0eXBlXG4gICAgICAgICAgdXBkYXRlKFxuICAgICAgICAgICAgbmV3VGltaW5ncyxcbiAgICAgICAgICAgIGFuaW1NYXJrc0YsXG4gICAgICAgICAgICBtYXJrdHlwZXMuZmluYWwsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGluaXRpYWw6IGVuY29kZXMuZmluYWwuaW50ZXJtZWRpYXRlLFxuICAgICAgICAgICAgICBmaW5hbDogZW5jb2Rlcy5maW5hbC51cGRhdGVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzaWduYWxzLFxuICAgICAgICAgICAgcHJldkRhdGEsXG4gICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZG9uZShcInVwZGF0ZVwiLCAoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZG9uZShcImVudGVyXCIsICgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGFuaW1NYXJrcyA9IG1hcmtzLnNlbGVjdEFsbChzdmdFbG1UeXBlKTtcbiAgICAgICAgY29uc3QgcHJldkRhdGEgPSBkMy5sb2NhbCgpO1xuICAgICAgICBhbmltTWFya3MuZWFjaChmdW5jdGlvbihkKSB7XG4gICAgICAgICAgcHJldkRhdGEuc2V0KHRoaXMsIGQpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGNoYW5nZS5kYXRhIHx8IGlzQWRkIHx8IGlzUmVtb3ZlKSB7XG4gICAgICAgICAgLy8gbGV0IG5leHREYXRhID0gY2hhbmdlLm1hcmt0eXBlID09PSBmYWxzZSA/IHN0ZXAudW5wYWNrZWREYXRhIDogc3RlcC5uZXh0RGF0YTtcblxuICAgICAgICAgIGlmIChzdGVwLnByZUZldGNoQ3VyckRhdGEpIHtcbiAgICAgICAgICAgIGFuaW1NYXJrcyA9IGFuaW1NYXJrcy5kYXRhKHN0ZXAuY3VyckRhdGEpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGFuaW1NYXJrcyA9IGFuaW1NYXJrcy5kYXRhKHN0ZXAubmV4dERhdGEsIChkLCBpKSA9PiB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhqb2luS2V5KGQsIGkpKTtcbiAgICAgICAgICAgIHJldHVybiBqb2luS2V5KGQsIGkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZW50ZXJcbiAgICAgICAgZW50ZXIodGltaW5ncywgYW5pbU1hcmtzLCBtYXJrdHlwZSk7XG5cbiAgICAgICAgLy8gZXhpdFxuICAgICAgICBleGl0KFxuICAgICAgICAgIHRpbWluZ3MsXG4gICAgICAgICAgYW5pbU1hcmtzLFxuICAgICAgICAgIG1hcmt0eXBlLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGluaXRpYWw6IGVuY29kZXMuaW5pdGlhbC5leGl0LCAvLyBlbmNvZGVzLmZpbmFsLmV4aXQsXG4gICAgICAgICAgICBmaW5hbDogZW5jb2Rlcy5maW5hbC5leGl0XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzaWduYWxzLFxuICAgICAgICAgIHByZXZEYXRhXG4gICAgICAgICk7XG5cbiAgICAgICAgdXBkYXRlKFxuICAgICAgICAgIHRpbWluZ3MsXG4gICAgICAgICAgYW5pbU1hcmtzLFxuICAgICAgICAgIG1hcmt0eXBlLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGluaXRpYWw6IGVuY29kZXMuaW5pdGlhbC51cGRhdGUsIC8vIGVuY29kZXMuZmluYWwudXBkYXRlLFxuICAgICAgICAgICAgZmluYWw6IGVuY29kZXMuZmluYWwudXBkYXRlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzaWduYWxzLFxuICAgICAgICAgIHByZXZEYXRhXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVudGVyKFxuICAgICAgdGltaW5ncyxcbiAgICAgIGFuaW1NYXJrcyxcbiAgICAgIG1hcmt0eXBlLFxuICAgICAgZW5jb2RlSW5pdGlhbCA9IGVuY29kZXMuaW5pdGlhbC5lbnRlcixcbiAgICAgIGVuY29kZSA9IGVuY29kZXMuZmluYWwuZW50ZXJcbiAgICApIHtcbiAgICAgIC8vIGVudGVyXG4gICAgICBsZXQgZW50ZXJJID0gYW5pbU1hcmtzLmVudGVyKCkuYXBwZW5kKGdldFN2Z0VsbVR5cGUobWFya3R5cGUpKTtcbiAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgZW50ZXJJLFxuICAgICAgICBNQVJLX0FUVFJTW21hcmt0eXBlXSxcbiAgICAgICAgLy8gVG9kbzogV2hlbiB1c2luZyB0aGUgZmluYWwgc2NhbGUsIGl0IHNob3VsZCB1c2UgdGhlIGZpbmFsIGVuY29kZSBhcyB3ZWxsLlxuICAgICAgICB7IHByaW1hcnk6IHNjYWxlcy5pbml0aWFsLCBzZWNvbmRhcnk6IHNjYWxlcy5maW5hbCB9LFxuICAgICAgICBzaWduYWxzLmluaXRpYWwsXG4gICAgICAgIHtcbiAgICAgICAgICBwcmltYXJ5OiBlbmNvZGVJbml0aWFsLFxuICAgICAgICAgIHNlY29uZGFyeTogT2JqZWN0LmFzc2lnbih7fSwgZW5jb2RlLCB7IG9wYWNpdHk6IHsgdmFsdWU6IDAgfSB9KVxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICAvLyBJZiB0aGV5IGFyZSBhbHJlYWR5IGVudGVyZWQsXG4gICAgICBpZiAoZW50ZXJJLmRhdGEoKS5sZW5ndGggPD0gMCkge1xuICAgICAgICBlbnRlckkgPSBhbmltTWFya3MuZmlsdGVyKChkLCBpKSA9PiBqb2luU2V0KGQsIGkpID09PSBcImVudGVyXCIpO1xuICAgICAgfVxuICAgICAgaWYgKGVudGVySS5kYXRhKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBpZiAoZG9FbnRlciAmJiBlbnRlckkuZGF0YSgpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3Qgc2V0VHlwZSA9IFwiZmluYWxcIjtcbiAgICAgICAgY29uc3QgZW50ZXJGID0gZW50ZXJJLnRyYW5zaXRpb24oKTtcblxuICAgICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgICAgZW50ZXJGLFxuICAgICAgICAgIE1BUktfQVRUUlNbbWFya3R5cGVdLFxuICAgICAgICAgIHNjYWxlcy5maW5hbCxcbiAgICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGluaXRpYWw6IHtcbiAgICAgICAgICAgICAgcHJpbWFyeTogZW5jb2RlSW5pdGlhbCxcbiAgICAgICAgICAgICAgc2Vjb25kYXJ5OiBPYmplY3QuYXNzaWduKHt9LCBlbmNvZGUsIHsgb3BhY2l0eTogeyB2YWx1ZTogMCB9IH0pXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmluYWw6IGVuY29kZVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICBlbnRlckZcbiAgICAgICAgICAuZHVyYXRpb24oXG4gICAgICAgICAgICAoZCwgaSkgPT5cbiAgICAgICAgICAgICAgdGltaW5ncy5maW5kKHQgPT4gdC5pZCA9PT0gam9pbktleShkLCBpLCBzZXRUeXBlKSkuZHVyYXRpb25cbiAgICAgICAgICApXG4gICAgICAgICAgLmRlbGF5KFxuICAgICAgICAgICAgKGQsIGkpID0+IHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSwgc2V0VHlwZSkpLmRlbGF5XG4gICAgICAgICAgKVxuICAgICAgICAgIC5lYXNlKGVhc2VGbilcbiAgICAgICAgICAuZW5kKClcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKFwiZW50ZXJcIiwgKCkgPT4ge3Jlc29sdmUoKTt9KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvbmUoXCJlbnRlclwiLCAoKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZXhpdCh0aW1pbmdzLCBhbmltTWFya3MsIG1hcmt0eXBlLCBlbmNvZGUsIHNpZ25hbHMsIHByZXZEYXRhKSB7XG4gICAgICAvLyBleGl0XG4gICAgICAvLyBpbml0aWF0ZSBleGl0XG4gICAgICBsZXQgZXhpdEkgPSBhbmltTWFya3MuZXhpdCgpO1xuICAgICAgLy8gSWYgdGhleSBhcmUgYWxyZWFkeSBlbnRlcmVkLFxuICAgICAgaWYgKGV4aXRJLmRhdGEoKS5sZW5ndGggPD0gMCkge1xuICAgICAgICBleGl0SSA9IGFuaW1NYXJrcy5maWx0ZXIoKGQsIGkpID0+IGpvaW5TZXQoZCwgaSkgPT09IFwiZXhpdFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChleGl0SS5kYXRhKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBpZiAoZG9FeGl0ICYmIGV4aXRJLmRhdGEoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHNldFR5cGUgPSBcImluaXRpYWxcIjtcbiAgICAgICAgY29uc3QgZXhpdEYgPSBleGl0SS50cmFuc2l0aW9uKCk7XG5cbiAgICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICAgIGV4aXRGLFxuICAgICAgICAgIE1BUktfQVRUUlNbbWFya3R5cGVdLFxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oe30sIHNjYWxlcywge1xuICAgICAgICAgICAgcHJpbWFyeTogc2NhbGVzLmZpbmFsLFxuICAgICAgICAgICAgc2Vjb25kYXJ5OiBzY2FsZXMuaW5pdGlhbFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHNpZ25hbHMsXG4gICAgICAgICAgZW5jb2RlIHx8IGVuY29kZXMuZmluYWwuZXhpdCxcbiAgICAgICAgICBwcmV2RGF0YVxuICAgICAgICApO1xuXG4gICAgICAgIGV4aXRGXG4gICAgICAgICAgLmR1cmF0aW9uKFxuICAgICAgICAgICAgKGQsIGkpID0+XG4gICAgICAgICAgICAgIHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSwgc2V0VHlwZSkpLmR1cmF0aW9uXG4gICAgICAgICAgKVxuICAgICAgICAgIC5kZWxheShcbiAgICAgICAgICAgIChkLCBpKSA9PiB0aW1pbmdzLmZpbmQodCA9PiB0LmlkID09PSBqb2luS2V5KGQsIGksIHNldFR5cGUpKS5kZWxheVxuICAgICAgICAgIClcbiAgICAgICAgICAuZWFzZShlYXNlRm4pXG4gICAgICAgICAgLnJlbW92ZSgpXG4gICAgICAgICAgLmVuZCgpXG4gICAgICAgICAgLnRoZW4oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBkb25lKFwiZXhpdFwiLCAoKSA9PiB7cmVzb2x2ZSgpO30pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAvLyBUb2RvOiB3aGVuIHNob3VsZCB3ZSByZW1vdmUgZXhpdC1tYXJrcz9cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvbmUoXCJleGl0XCIsICgpID0+IHtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGUoXG4gICAgICB0aW1pbmdzLFxuICAgICAgYW5pbU1hcmtzLFxuICAgICAgbWFya3R5cGUsXG4gICAgICBlbmNvZGVzLFxuICAgICAgc2lnbmFscyxcbiAgICAgIHByZXZEYXRhLFxuICAgICAgZG9TdGF0dXNVcGRhdGUgPSB0cnVlLFxuICAgICAgZmlsdGVyVXBkYXRlID0gdHJ1ZVxuICAgICkge1xuICAgICAgbGV0IHVwZGF0ZUYgPSBmaWx0ZXJVcGRhdGVcbiAgICAgICAgPyBhbmltTWFya3MuZmlsdGVyKChkLCBpKSA9PiBqb2luU2V0KGQsIGkpID09PSBcInVwZGF0ZVwiKVxuICAgICAgICA6IGFuaW1NYXJrcztcbiAgICAgIGlmIChjaGFuZ2UuZGF0YSA9PT0gZmFsc2UgJiYgdXBkYXRlRi5kYXRhKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHVwZGF0ZUYgPSBhbmltTWFya3M7XG4gICAgICB9XG5cbiAgICAgIGlmICh1cGRhdGVGLmRhdGEoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHNldFR5cGUgPSBcImluaXRpYWxcIjsgLy8gQWN0dWFsbHksIGl0IGFsc28gY2FuIGJlICdmaW5hbCcuXG4gICAgICAgIHVwZGF0ZUYgPSB1cGRhdGVGLnRyYW5zaXRpb24oKTtcblxuICAgICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgICAgdXBkYXRlRixcbiAgICAgICAgICBNQVJLX0FUVFJTW21hcmt0eXBlXSxcbiAgICAgICAgICBzY2FsZXMsXG4gICAgICAgICAgc2lnbmFscyxcbiAgICAgICAgICBlbmNvZGVzLFxuICAgICAgICAgIHByZXZEYXRhXG4gICAgICAgICk7XG4gICAgICAgIHVwZGF0ZUZcbiAgICAgICAgICAuZHVyYXRpb24oXG4gICAgICAgICAgICAoZCwgaSkgPT5cbiAgICAgICAgICAgICAgdGltaW5ncy5maW5kKHQgPT4gdC5pZCA9PT0gam9pbktleShkLCBpLCBzZXRUeXBlKSkuZHVyYXRpb25cbiAgICAgICAgICApXG4gICAgICAgICAgLmRlbGF5KFxuICAgICAgICAgICAgKGQsIGkpID0+IHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSwgc2V0VHlwZSkpLmRlbGF5XG4gICAgICAgICAgKVxuICAgICAgICAgIC5lYXNlKGVhc2VGbilcbiAgICAgICAgICAuZW5kKClcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpZiAoZG9TdGF0dXNVcGRhdGUpIHtcbiAgICAgICAgICAgICAgZG9uZShcInVwZGF0ZVwiLCAoKSA9PiB7cmVzb2x2ZSgpO30pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChkb1N0YXR1c1VwZGF0ZSkge1xuICAgICAgICBkb25lKFwidXBkYXRlXCIsICgpID0+IHtyZXNvbHZlKCk7fSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgZnVuY3Rpb24gaXNWYWxpZE1hcmt0eXBlKG1hcmt0eXBlKSB7XG4gICAgcmV0dXJuICEhTUFSS19BVFRSU1ttYXJrdHlwZV07XG4gIH1cbn1cbmZ1bmN0aW9uIGRvbmVNYWtlcigpIHtcbiAgY29uc3QgdHJhbnNpdGlvblN0YXR1cyA9IHtcbiAgICB1cGRhdGU6IGZhbHNlLFxuICAgIGVudGVyOiBmYWxzZSxcbiAgICBleGl0OiBmYWxzZVxuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbih3aGljaCwgY2IsIGFyZ3MpIHtcbiAgICBpZiAod2hpY2ggPT09IFwiYWxsXCIpIHtcbiAgICAgIHRyYW5zaXRpb25TdGF0dXMudXBkYXRlID0gdHJhbnNpdGlvblN0YXR1cy5lbnRlciA9IHRyYW5zaXRpb25TdGF0dXMuZXhpdCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyYW5zaXRpb25TdGF0dXNbd2hpY2hdID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdHJhbnNpdGlvblN0YXR1cy51cGRhdGUgJiZcbiAgICAgIHRyYW5zaXRpb25TdGF0dXMuZW50ZXIgJiZcbiAgICAgIHRyYW5zaXRpb25TdGF0dXMuZXhpdFxuICAgICkge1xuICAgICAgY2IoYXJncyk7XG4gICAgfVxuICB9O1xufVxuXG5cbmZ1bmN0aW9uIGFkZE1hcmsoZDNTZWxlY3Rpb24sIGNvbXBTcGVjLCBiZWZvcmUpIHtcbiAgcmV0dXJuIGQzU2VsZWN0aW9uXG4gICAgLmluc2VydChcImdcIiwgYmVmb3JlKVxuICAgIC5hdHRyKFwiY2xhc3NcIiwgYG1hcmstJHtjb21wU3BlYy50eXBlfSByb2xlLW1hcmsgJHtjb21wU3BlYy5uYW1lfWApO1xufVxuZnVuY3Rpb24gZ2V0U3ZnRWxtVHlwZShtYXJrVHlwZSl7XG4gIHN3aXRjaCAobWFya1R5cGUpIHtcbiAgY2FzZSBcInJlY3RcIjpcbiAgY2FzZSBcInN5bWJvbFwiOlxuICAgIHJldHVybiBcInBhdGhcIjtcbiAgY2FzZSBcInJ1bGVcIjpcbiAgICByZXR1cm4gXCJsaW5lXCI7XG4gIGNhc2UgXCJ0ZXh0XCI6XG4gICAgcmV0dXJuIFwidGV4dFwiO1xuICBkZWZhdWx0OlxuXG4gIH1cbn1cbmV4cG9ydCB7IG1hcmtJbnRlcnBvbGF0ZSB9O1xuIiwiaW1wb3J0ICogYXMgZDMgZnJvbSBcImQzXCI7XG5pbXBvcnQgeyBwcm9wTWFwLCBnZXRFYXNlRm4sIGZpbmRBZnRlclNpYmxpbmcsIGdldEpvaW5JbmZvLCBjb21wdXRlU2NhbGUsIGlzTGluZWFyTWFya3R5cGUgfSBmcm9tIFwiLi4vdXRpbC5qc1wiO1xuaW1wb3J0IHsgZ2V0UHJvcFZhbCwgZmV0Y2hBdHRyaWJ1dGVzfSBmcm9tIFwiLi4vYXR0cmlidXRlRmV0Y2hlclwiO1xuaW1wb3J0IHsgZ2V0U3R5bGUgfSBmcm9tIFwiLi4vdmVnYS1yZW5kZXItdXRpbC5qc1wiO1xuaW1wb3J0IHsgY29tcHV0ZVRpbWluZywgZW51bVN0ZXBDb21wdXRlVGltaW5nIH0gZnJvbSBcIi4uL3RpbWluZ3NcIjtcblxuZnVuY3Rpb24gYXJlYUxpbmVJbnRlcnBvbGF0ZShyYXdJbmZvLCBzdGVwLCB0YXJnZXRFbG0pIHtcbiAgY29uc3Qgam9pbktleSA9IChkLCBpLCBpbml0aWFsT3JGaW5hbCkgPT4ge1xuICAgIHJldHVybiBkLl9fZ2VtaW5pX18gP1xuICAgICAgZ2V0Sm9pbkluZm8oZCwgaSwgc3RlcCwgXCJqb2luS2V5XCIpIDpcbiAgICAgICggdHlwZW9mKHN0ZXAuY29tcHV0ZURhdHVtSWQpID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgPyBzdGVwLmNvbXB1dGVEYXR1bUlkKGQsIGkpXG4gICAgICAgIDogc3RlcC5jb21wdXRlRGF0dW1JZFtpbml0aWFsT3JGaW5hbCB8fCBcImZpbmFsXCJdKGQsIGkpKTtcbiAgfTsgY29uc3Qgam9pblNldCA9IChkLCBpKSA9PiB7XG4gICAgcmV0dXJuIGQuX19nZW1pbmlfXyA/IGdldEpvaW5JbmZvKGQsIGksIHN0ZXAsIFwiYW5pbVNldFwiKSA6IHVuZGVmaW5lZDtcbiAgfTtcbiAgY29uc3QgTUFSS19BVFRSUyA9IHtcbiAgICBhcmVhOiBbeyBuYW1lOiBcImFyZWFcIiwgdHdlYWtzOiBbXSB9XSxcbiAgICBsaW5lOiBbeyBuYW1lOiBcImxpbmVcIiwgdHdlYWtzOiBbXSB9XSxcbiAgICB0cmFpbDogW3sgbmFtZTogXCJ0cmFpbFwiLCB0d2Vha3M6IFtdIH1dXG4gIH07XG4gIGNvbnN0IHR3ZWFrcyA9IFt7IHR5cGU6IFwiYXR0clR3ZWVuXCIsIHZhbDogXCJkXCIsIGludGVycG9sYXRlU3R5bGU6IFwidXBkYXRlXCIgfV07XG4gIGNvbnN0IE1BUktfQVRUUlNfREFUQV9JTlRFUlBPTEFURSA9IHtcbiAgICBhcmVhOiBbeyBuYW1lOiBcImFyZWFcIiwgdHdlYWtzfV0sXG4gICAgbGluZTogW3sgbmFtZTogXCJsaW5lXCIsIHR3ZWFrc31dLFxuICAgIHRyYWlsOiBbeyBuYW1lOiBcInRyYWlsXCIsIHR3ZWFrc31dXG4gIH07XG5cblxuICAvLyBHZXQgVGltaW5nXG5cbiAgY29uc3QgYW5pbVZpcyA9IHRhcmdldEVsbTtcbiAgY29uc3QgZVZpZXcgPSByYXdJbmZvLmVWaXMudmlldztcbiAgY29uc3QgdHJhbnNpdGlvblN0YXR1cyA9IHtcbiAgICB1cGRhdGU6IGZhbHNlLFxuICAgIGVudGVyOiBmYWxzZSxcbiAgICBleGl0OiBmYWxzZVxuICB9O1xuXG4gIGZ1bmN0aW9uIGRvbmUod2hpY2gsIGNiLCBhcmdzKSB7XG4gICAgaWYgKHdoaWNoID09PSBcImFsbFwiKSB7XG4gICAgICB0cmFuc2l0aW9uU3RhdHVzLnVwZGF0ZSA9IHRyYW5zaXRpb25TdGF0dXMuZW50ZXIgPSB0cmFuc2l0aW9uU3RhdHVzLmV4aXQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0cmFuc2l0aW9uU3RhdHVzW3doaWNoXSA9IHRydWU7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRyYW5zaXRpb25TdGF0dXMudXBkYXRlICYmXG4gICAgICB0cmFuc2l0aW9uU3RhdHVzLmVudGVyICYmXG4gICAgICB0cmFuc2l0aW9uU3RhdHVzLmV4aXRcbiAgICApIHtcbiAgICAgIGNiKGFyZ3MpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBpc0FyZWFMaW5lTWFya3R5cGUobWFya3R5cGUpIHtcbiAgICByZXR1cm4gISFNQVJLX0FUVFJTW21hcmt0eXBlXTtcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IHRpbWluZ3MgPSBjb21wdXRlVGltaW5nKFxuICAgICAgc3RlcC5jdXJyRGF0YSxcbiAgICAgIHN0ZXAubmV4dERhdGEsXG4gICAgICBzdGVwLnRpbWluZyxcbiAgICAgIGpvaW5LZXksXG4gICAgICBqb2luU2V0XG4gICAgKTtcbiAgICBjb25zdCB7Y2hhbmdlfSA9IHN0ZXA7XG4gICAgY29uc3QgZWFzZUZuID0gZ2V0RWFzZUZuKHN0ZXAudGltaW5nLmVhc2UpO1xuICAgIGNvbnN0IHttYXJrdHlwZXN9ID0gc3RlcDtcblxuICAgIGNvbnN0IGlzQWRkID0gIWNoYW5nZS5pbml0aWFsICYmICEhY2hhbmdlLmZpbmFsLFxuICAgICAgaXNSZW1vdmUgPSAhIWNoYW5nZS5pbml0aWFsICYmICFjaGFuZ2UuZmluYWw7XG5cbiAgICBsZXQgbWFya3R5cGU7XG4gICAgaWYgKFxuICAgICAgbWFya3R5cGVzLmluaXRpYWwgJiZcbiAgICAgIG1hcmt0eXBlcy5maW5hbCAmJlxuICAgICAgbWFya3R5cGVzLmluaXRpYWwgIT09IG1hcmt0eXBlcy5maW5hbFxuICAgICkge1xuICAgICAgaWYgKGNoYW5nZS5tYXJrdHlwZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgbWFya3R5cGUgPSBtYXJrdHlwZXMuaW5pdGlhbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1hcmt0eXBlID0gbWFya3R5cGVzLmZpbmFsO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNSZW1vdmUpIHtcbiAgICAgIG1hcmt0eXBlID0gbWFya3R5cGVzLmluaXRpYWw7XG4gICAgfSBlbHNlIGlmIChpc0FkZCkge1xuICAgICAgbWFya3R5cGUgPSBtYXJrdHlwZXMuZmluYWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1hcmt0eXBlID0gbWFya3R5cGVzLmluaXRpYWwgfHwgbWFya3R5cGVzLmZpbmFsO1xuICAgIH1cbiAgICBjb25zdCB7aGFzRmFjZXR9ID0gc3RlcDtcbiAgICAvLyBjb2xsZWN0IHRoZSBzY2FsZSBvYmplY3RzIHRvIHNjYWxlIHRoZSBpbml0aWFsL2ZpbmFsIHZhbHVlc1xuICAgIGNvbnN0IHtzY2FsZXN9ID0gc3RlcDtcbiAgICBjb25zdCB7ZW5jb2Rlc30gPSBzdGVwO1xuICAgIGNvbnN0IHtzaWduYWxzfSA9IHN0ZXA7XG5cbiAgICBpZiAoaXNBZGQgfHwgIWlzQXJlYUxpbmVNYXJrdHlwZShtYXJrdHlwZXMuaW5pdGlhbCkpIHtcbiAgICAgIGlmIChoYXNGYWNldC5maW5hbCkge1xuICAgICAgICBjb25zdCBzaWIgPSBmaW5kQWZ0ZXJTaWJsaW5nKFxuICAgICAgICAgIGVWaWV3LnNjZW5lZ3JhcGgoKS5yb290LFxuICAgICAgICAgIGNoYW5nZS5maW5hbC5wYXJlbnQubmFtZVxuICAgICAgICApO1xuXG4gICAgICAgIGFkZE1hcmsoXG4gICAgICAgICAgZDMuc2VsZWN0KGAke2FuaW1WaXMgIH0gLiR7Y2hhbmdlLmZpbmFsLnBhcmVudC5wYXJlbnQubmFtZX0gPiBnID4gZ2ApLFxuICAgICAgICAgIGNoYW5nZS5maW5hbCxcbiAgICAgICAgICBzaWIgPyBgLiR7c2liLm5hbWV9YCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB7IGhhc0dyb3VwOiB0cnVlIH1cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHNpYiA9IGZpbmRBZnRlclNpYmxpbmcoZVZpZXcuc2NlbmVncmFwaCgpLnJvb3QsIGNoYW5nZS5jb21wTmFtZSk7XG5cbiAgICAgICAgYWRkTWFyayhcbiAgICAgICAgICBkMy5zZWxlY3QoYCR7YW5pbVZpcyAgfSAuJHtjaGFuZ2UuZmluYWwucGFyZW50Lm5hbWV9ID4gZyA+IGdgKSxcbiAgICAgICAgICBjaGFuZ2UuZmluYWwsXG4gICAgICAgICAgc2liID8gYC4ke3NpYi5uYW1lfWAgOiB1bmRlZmluZWRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RlcC5lbnVtZXJhdG9yKSB7XG4gICAgICBsZXQgZmluYWxTY2FsZU5hbWVzID0gW107XG4gICAgICBpZiAoY2hhbmdlLnNjYWxlID09PSB0cnVlKSB7XG4gICAgICAgIGZpbmFsU2NhbGVOYW1lcyA9IE9iamVjdC5rZXlzKGVWaWV3Ll9ydW50aW1lLnNjYWxlcyk7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoY2hhbmdlLnNjYWxlKSkge1xuICAgICAgICBmaW5hbFNjYWxlTmFtZXMgPSBjaGFuZ2Uuc2NhbGU7XG4gICAgICB9XG5cblxuICAgICAgY29uc3Qge2VudW1lcmF0b3J9ID0gc3RlcDtcbiAgICAgIGNvbnN0IGdldFZhbHVlcyA9IHtcbiAgICAgICAgdXBkYXRlOiB7XG4gICAgICAgICAgaW5pdGlhbDogKGF0dHIsIGdldFNjYWxlcywgZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29tcHV0ZWRTY2FsZXMgPSBjb21wdXRlU2NhbGUoc2NhbGVzLCBmaW5hbFNjYWxlTmFtZXMsIGdldFNjYWxlcyk7XG4gICAgICAgICAgICByZXR1cm4gZ2V0UHJvcFZhbChcbiAgICAgICAgICAgICAgYXR0cixcbiAgICAgICAgICAgICAgZW5jb2Rlcy5pbml0aWFsLnVwZGF0ZSxcbiAgICAgICAgICAgICAgY29tcHV0ZWRTY2FsZXMuaW5pdGlhbCxcbiAgICAgICAgICAgICAgc2lnbmFscy5pbml0aWFsLFxuICAgICAgICAgICAgICBkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZmluYWw6IChhdHRyLCBnZXRTY2FsZXMsIGQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXB1dGVkU2NhbGVzID0gY29tcHV0ZVNjYWxlKHNjYWxlcywgZmluYWxTY2FsZU5hbWVzLCBnZXRTY2FsZXMpO1xuICAgICAgICAgICAgcmV0dXJuIGdldFByb3BWYWwoXG4gICAgICAgICAgICAgIGF0dHIsXG4gICAgICAgICAgICAgIGVuY29kZXMuZmluYWwudXBkYXRlLFxuICAgICAgICAgICAgICBjb21wdXRlZFNjYWxlcy5maW5hbCxcbiAgICAgICAgICAgICAgc2lnbmFscy5maW5hbCxcbiAgICAgICAgICAgICAgZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGN1c3RvbTogKGF0dHIsIGdldFNjYWxlcywgZF9pLCBkX2YpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhaHREYXRhID0ge1xuICAgICAgICAgICAgICBpbml0aWFsOiBkX2kuaXRlbXNbMF0uaXRlbXNbMF0sXG4gICAgICAgICAgICAgIGZpbmFsOiBkX2YuaXRlbXNbMF0uaXRlbXNbMF1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBudWFuY2VkQXR0ciA9IE9iamVjdC5hc3NpZ24oe30sIGF0dHIsIHtcbiAgICAgICAgICAgICAgaW50ZXJwb2xhdGVTdHlsZTogXCJ1cGRhdGVcIlxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBjb21wdXRlZFNjYWxlcyA9IGNvbXB1dGVTY2FsZShzY2FsZXMsIGZpbmFsU2NhbGVOYW1lcywgZ2V0U2NhbGVzKTtcblxuICAgICAgICAgICAgcmV0dXJuIGdldFByb3BWYWwuYmluZCh0aGlzKShcbiAgICAgICAgICAgICAgY2hhbmdlLnNjYWxlID8gYXR0ciA6IG51YW5jZWRBdHRyLFxuICAgICAgICAgICAgICBlbmNvZGVzLmZpbmFsLnVwZGF0ZSxcbiAgICAgICAgICAgICAgY2hhbmdlLnNjYWxlID8gY29tcHV0ZWRTY2FsZXMgOiBjb21wdXRlZFNjYWxlcy5maW5hbCxcbiAgICAgICAgICAgICAgc2lnbmFscy5maW5hbCxcbiAgICAgICAgICAgICAgcGFodERhdGFcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlbnRlcjoge1xuICAgICAgICAgIGluaXRpYWw6IChhdHRyLCBnZXRTY2FsZXMsIGQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXB1dGVkU2NhbGVzID0gY29tcHV0ZVNjYWxlKHNjYWxlcywgZmluYWxTY2FsZU5hbWVzLCBnZXRTY2FsZXMpO1xuXG4gICAgICAgICAgICByZXR1cm4gZ2V0UHJvcFZhbChcbiAgICAgICAgICAgICAgYXR0cixcbiAgICAgICAgICAgICAgZW5jb2Rlcy5pbml0aWFsLmVudGVyLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcHJpbWFyeTogY29tcHV0ZWRTY2FsZXMuaW5pdGlhbCxcbiAgICAgICAgICAgICAgICBzZWNvbmRhcnk6IGNvbXB1dGVkU2NhbGVzLmZpbmFsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHNpZ25hbHMuaW5pdGlhbCxcbiAgICAgICAgICAgICAgZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZpbmFsOiAoYXR0ciwgZ2V0U2NhbGVzLCBkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb21wdXRlZFNjYWxlcyA9IGNvbXB1dGVTY2FsZShzY2FsZXMsIGZpbmFsU2NhbGVOYW1lcywgZ2V0U2NhbGVzKTtcbiAgICAgICAgICAgIHJldHVybiBnZXRQcm9wVmFsKFxuICAgICAgICAgICAgICBhdHRyLFxuICAgICAgICAgICAgICBlbmNvZGVzLmZpbmFsLmVudGVyLFxuICAgICAgICAgICAgICBjb21wdXRlZFNjYWxlcy5maW5hbCxcbiAgICAgICAgICAgICAgc2lnbmFscy5maW5hbCxcbiAgICAgICAgICAgICAgZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGN1c3RvbShhdHRyLCBnZXRTY2FsZXMsIGRfaSwgZF9mKXtcbiAgICAgICAgICAgIGxldCBwYWh0RGF0YSA9IHtcbiAgICAgICAgICAgICAgaW5pdGlhbDogY2hhbmdlLnNjYWxlID8gZF9mLml0ZW1zWzBdLml0ZW1zWzBdIDogeyBtYXJrOiB7IGl0ZW1zOltdIH0gfSxcbiAgICAgICAgICAgICAgZmluYWw6IGRfZi5pdGVtc1swXS5pdGVtc1swXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGxldCBudWFuY2VkQXR0ciA9IE9iamVjdC5hc3NpZ24oe30sIGF0dHIsIHtpbnRlcnBvbGF0ZVN0eWxlOiBcInVwZGF0ZVwifSk7XG4gICAgICAgICAgICBsZXQgY29tcHV0ZWRTY2FsZXMgPSBjb21wdXRlU2NhbGUoc2NhbGVzLCBmaW5hbFNjYWxlTmFtZXMsIGdldFNjYWxlcyk7XG5cbiAgICAgICAgICAgIHJldHVybiBnZXRQcm9wVmFsLmJpbmQodGhpcykoXG4gICAgICAgICAgICAgIGNoYW5nZS5zY2FsZSA/IGF0dHIgOiBudWFuY2VkQXR0cixcbiAgICAgICAgICAgICAgZW5jb2Rlcy5maW5hbC51cGRhdGUsXG4gICAgICAgICAgICAgIGNoYW5nZS5zY2FsZSA/IGNvbXB1dGVkU2NhbGVzIDogY29tcHV0ZWRTY2FsZXMuZmluYWwsXG4gICAgICAgICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgICAgICAgIHBhaHREYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGV4aXQ6IHtcbiAgICAgICAgICBpbml0aWFsOiAoYXR0ciwgZ2V0U2NhbGVzLCBkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb21wdXRlZFNjYWxlcyA9IGNvbXB1dGVTY2FsZShzY2FsZXMsIGZpbmFsU2NhbGVOYW1lcywgZ2V0U2NhbGVzKTtcbiAgICAgICAgICAgIHJldHVybiBnZXRQcm9wVmFsKFxuICAgICAgICAgICAgICBhdHRyLFxuICAgICAgICAgICAgICBlbmNvZGVzLmluaXRpYWwuZXhpdCxcbiAgICAgICAgICAgICAgY29tcHV0ZWRTY2FsZXMuaW5pdGlhbCxcbiAgICAgICAgICAgICAgc2lnbmFscy5pbml0aWFsLFxuICAgICAgICAgICAgICBkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZmluYWw6IChhdHRyLCBnZXRTY2FsZXMsIGQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXB1dGVkU2NhbGVzID0gY29tcHV0ZVNjYWxlKHNjYWxlcywgZmluYWxTY2FsZU5hbWVzLCBnZXRTY2FsZXMpO1xuICAgICAgICAgICAgcmV0dXJuIGdldFByb3BWYWwoXG4gICAgICAgICAgICAgIGF0dHIsXG4gICAgICAgICAgICAgIGVuY29kZXMuZmluYWwuZXhpdCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHByaW1hcnk6IGNvbXB1dGVkU2NhbGVzLmZpbmFsLFxuICAgICAgICAgICAgICAgIHNlY29uZGFyeTogY29tcHV0ZWRTY2FsZXMuaW5pdGlhbFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICAgICAgICBkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgY3VzdG9tOiAoYXR0ciwgZ2V0U2NhbGVzLCBkX2kpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhaHREYXRhID0ge1xuICAgICAgICAgICAgICBpbml0aWFsOiBkX2kuaXRlbXNbMF0uaXRlbXNbMF0sXG4gICAgICAgICAgICAgIGZpbmFsOiBjaGFuZ2Uuc2NhbGVcbiAgICAgICAgICAgICAgICA/IGRfaS5pdGVtc1swXS5pdGVtc1swXVxuICAgICAgICAgICAgICAgIDogeyBtYXJrOiB7IGl0ZW1zOiBbXSB9IH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbXB1dGVkU2NhbGVzID0gY29tcHV0ZVNjYWxlKHNjYWxlcywgZmluYWxTY2FsZU5hbWVzLCBnZXRTY2FsZXMpO1xuICAgICAgICAgICAgY29uc3QgbnVhbmNlZEF0dHIgPSBPYmplY3QuYXNzaWduKHt9LCBhdHRyLCB7XG4gICAgICAgICAgICAgIGludGVycG9sYXRlU3R5bGU6IFwidXBkYXRlXCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGdldFByb3BWYWwuYmluZCh0aGlzKShcbiAgICAgICAgICAgICAgY2hhbmdlLnNjYWxlID8gYXR0ciA6IG51YW5jZWRBdHRyLFxuICAgICAgICAgICAgICBlbmNvZGVzLmZpbmFsLmV4aXQsXG4gICAgICAgICAgICAgIGNoYW5nZS5zY2FsZSA/IGNvbXB1dGVkU2NhbGVzIDogY29tcHV0ZWRTY2FsZXMuaW5pdGlhbCxcbiAgICAgICAgICAgICAgc2lnbmFscy5maW5hbCxcbiAgICAgICAgICAgICAgcGFodERhdGFcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgaWYgKGhhc0ZhY2V0LmluaXRpYWwgJiYgaGFzRmFjZXQuZmluYWwpIHtcbiAgICAgICAgLy8gYmluZCBhbGxLZXlzXG4gICAgICAgIGxldCBtYXJrR3MgPSBkM1xuICAgICAgICAgIC5zZWxlY3RBbGwoYW5pbVZpcyArIGAgLnJvbGUtc2NvcGUuJHtjaGFuZ2UuZmluYWwucGFyZW50Lm5hbWV9ID4gZ2ApXG4gICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcIl9fc3ViXCIpO1xuICAgICAgICBtYXJrR3MgPSBkM1xuICAgICAgICAgIC5zZWxlY3QoYW5pbVZpcyArIGAgLnJvbGUtc2NvcGUuJHtjaGFuZ2UuZmluYWwucGFyZW50Lm5hbWV9YClcbiAgICAgICAgICAuc2VsZWN0QWxsKFwiLl9fc3ViXCIpO1xuICAgICAgICBtYXJrR3MgPSBtYXJrR3MuZGF0YShlbnVtZXJhdG9yLmFsbEtleXMsIGQgPT4gZCk7XG4gICAgICAgIG1hcmtHcy5leGl0KCkucmVtb3ZlKCk7XG4gICAgICAgIG1hcmtHcyA9IG1hcmtHcy5lbnRlcigpLmFwcGVuZChcImdcIik7XG4gICAgICAgIG1hcmtHcy5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJjbGFzc1wiLCBcImJhY2tncm91bmRcIik7XG5cbiAgICAgICAgLy8gYXBwZW5kIG1hcmsgbWFya1xuICAgICAgICBsZXQgbWFya3MgPSBtYXJrR3NcbiAgICAgICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBgJHttYXJrdHlwZX0tbWFyayByb2xlLW1hcmsgJHtjaGFuZ2UuY29tcE5hbWV9YClcbiAgICAgICAgICAuYXBwZW5kKFwicGF0aFwiKTtcblxuICAgICAgICBjb25zdCBpbml0aWFsTWFya3MgPSBtYXJrcy5maWx0ZXIoXG4gICAgICAgICAgaWQgPT4gW1widXBkYXRlXCIsIFwiZXhpdFwiXS5pbmRleE9mKGVudW1lcmF0b3Iuc2V0KGlkLCAwKSkgPj0gMFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBhbGxQcm9wcyA9IE1BUktfQVRUUlNbbWFya3R5cGVdLnJlZHVjZSgoYWNjLCBwcm9wKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQocHJvcE1hcChwcm9wKSk7XG4gICAgICAgIH0sIFtdKTtcblxuICAgICAgICAvLyBpbml0XG4gICAgICAgIGFsbFByb3BzLmZvckVhY2gocCA9PiB7XG4gICAgICAgICAgaWYgKHAudHlwZSA9PT0gXCJhdHRyVHdlZW5cIikge1xuICAgICAgICAgICAgY29uc3QgdGVtcFAgPSBPYmplY3QuYXNzaWduKHt9LCBwLCB7IHR5cGU6IFwiYXR0clwiIH0pO1xuICAgICAgICAgICAgaW5pdGlhbE1hcmtzW3RlbXBQLnR5cGVdKGdldFN0eWxlKHRlbXBQLnZhbCksIGlkID0+XG4gICAgICAgICAgICAgIGVudW1lcmF0b3IuZ2V0UHJvcFZhbCh0ZW1wUCwgZ2V0VmFsdWVzLCAwLCBpZClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluaXRpYWxNYXJrc1twLnR5cGVdKGdldFN0eWxlKHAudmFsKSwgaWQgPT5cbiAgICAgICAgICAgICAgZW51bWVyYXRvci5nZXRQcm9wVmFsKHAsIGdldFZhbHVlcywgMCwgaWQpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdGltaW5ncyA9IGVudW1TdGVwQ29tcHV0ZVRpbWluZyhlbnVtZXJhdG9yLCBzdGVwLnRpbWluZyk7XG5cbiAgICAgICAgbWFya3MgPSBtYXJrcy50cmFuc2l0aW9uKCk7XG5cbiAgICAgICAgYWxsUHJvcHMuZm9yRWFjaChwID0+IHtcbiAgICAgICAgICBpZiAocC50eXBlID09PSBcImF0dHJcIikge1xuICAgICAgICAgICAgbWFya3MuYXR0clR3ZWVuKHAudmFsLCBmdW5jdGlvbihkKSB7XG4gICAgICAgICAgICAgIHJldHVybiBlbnVtZXJhdG9yLmludGVycG9sYXRlQWxvbmdFbnVtTWFrZXIoXG4gICAgICAgICAgICAgICAgcCxcbiAgICAgICAgICAgICAgICBnZXRWYWx1ZXMsXG4gICAgICAgICAgICAgICAgdGhpc1xuICAgICAgICAgICAgICApKGQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChwLnR5cGUgPT09IFwiYXR0clR3ZWVuXCIpIHtcbiAgICAgICAgICAgIG1hcmtzLmF0dHJUd2VlbihwLnZhbCwgZnVuY3Rpb24oZCkge1xuICAgICAgICAgICAgICByZXR1cm4gZW51bWVyYXRvci5pbnRlcnBvbGF0ZUFsb25nRW51bU1ha2VyKFxuICAgICAgICAgICAgICAgIHAsXG4gICAgICAgICAgICAgICAgZ2V0VmFsdWVzLFxuICAgICAgICAgICAgICAgIHRoaXNcbiAgICAgICAgICAgICAgKShkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAocC50eXBlID09PSBcInRleHRcIikge1xuICAgICAgICAgICAgbWFya3MudHdlZW4oXCJ0ZXh0XCIsIGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICAgICAgY29uc3QgdGV4dEludGVycG9sYXRvciA9IGVudW1lcmF0b3IuaW50ZXJwb2xhdGVBbG9uZ0VudW1NYWtlcihcbiAgICAgICAgICAgICAgICBwLFxuICAgICAgICAgICAgICAgIGdldFZhbHVlcyxcbiAgICAgICAgICAgICAgICB0aGlzXG4gICAgICAgICAgICAgICkoZCk7XG4gICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbm5lckhUTUwgPSB0ZXh0SW50ZXJwb2xhdG9yKHQpO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChwLnR5cGUgPT09IFwic3R5bGVcIikge1xuICAgICAgICAgICAgbWFya3Muc3R5bGVUd2VlbihnZXRTdHlsZShwLnZhbCksIGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGVudW1lcmF0b3IuaW50ZXJwb2xhdGVBbG9uZ0VudW1NYWtlcihcbiAgICAgICAgICAgICAgICBwLFxuICAgICAgICAgICAgICAgIGdldFZhbHVlcyxcbiAgICAgICAgICAgICAgICB0aGlzXG4gICAgICAgICAgICAgICkoZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGludGVycG9sYXRlIHRoZW1cbiAgICAgICAgbWFya3NcbiAgICAgICAgICAuZHVyYXRpb24oKGQsIGkpID0+IHRpbWluZ3NbaV0uZHVyYXRpb24pXG4gICAgICAgICAgLmRlbGF5KChkLCBpKSA9PiB0aW1pbmdzW2ldLmRlbGF5KVxuICAgICAgICAgIC5lYXNlKGVhc2VGbilcbiAgICAgICAgICAuZW5kKClcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKFwiYWxsXCIsICgpID0+IHtcbiAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKCFoYXNGYWNldC5pbml0aWFsICYmICFoYXNGYWNldC5maW5hbCkge1xuICAgICAgICBsZXQgbWFyayA9IGQzXG4gICAgICAgICAgLnNlbGVjdChhbmltVmlzICsgYCAubWFyay0ke21hcmt0eXBlfS5yb2xlLW1hcmsuJHtjaGFuZ2UuY29tcE5hbWV9YClcbiAgICAgICAgICAuc2VsZWN0QWxsKFwicGF0aFwiKTtcblxuICAgICAgICBtYXJrID0gbWFyay5kYXRhKGVudW1lcmF0b3IuYWxsS2V5cywgZCA9PiBkKTtcbiAgICAgICAgbWFyay5leGl0KCkucmVtb3ZlKCk7XG4gICAgICAgIG1hcmsgPSBtYXJrLmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKTtcblxuICAgICAgICBjb25zdCBhbGxQcm9wcyA9IE1BUktfQVRUUlNbbWFya3R5cGVdLnJlZHVjZSgoYWNjLCBwcm9wKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQocHJvcE1hcChwcm9wKSk7XG4gICAgICAgIH0sIFtdKTtcblxuICAgICAgICAvLyBpbml0XG4gICAgICAgIGFsbFByb3BzLmZvckVhY2gocCA9PiB7XG4gICAgICAgICAgaWYgKHAudHlwZSA9PT0gXCJhdHRyVHdlZW5cIikge1xuICAgICAgICAgICAgY29uc3QgdGVtcFAgPSBPYmplY3QuYXNzaWduKHt9LCBwLCB7IHR5cGU6IFwiYXR0clwiIH0pO1xuICAgICAgICAgICAgbWFya1t0ZW1wUC50eXBlXShnZXRTdHlsZSh0ZW1wUC52YWwpLCBpZCA9PlxuICAgICAgICAgICAgICBlbnVtZXJhdG9yLmdldFByb3BWYWwodGVtcFAsIGdldFZhbHVlcywgMCwgaWQpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtYXJrW3AudHlwZV0oZ2V0U3R5bGUocC52YWwpLCBpZCA9PlxuICAgICAgICAgICAgICBlbnVtZXJhdG9yLmdldFByb3BWYWwocCwgZ2V0VmFsdWVzLCAwLCBpZClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0aW1pbmdzID0gZW51bVN0ZXBDb21wdXRlVGltaW5nKGVudW1lcmF0b3IsIHN0ZXAudGltaW5nKTtcblxuICAgICAgICBtYXJrID0gbWFyay50cmFuc2l0aW9uKCk7XG5cbiAgICAgICAgYWxsUHJvcHMuZm9yRWFjaChwID0+IHtcbiAgICAgICAgICBpZiAocC50eXBlID09PSBcImF0dHJcIikge1xuICAgICAgICAgICAgbWFyay5hdHRyVHdlZW4ocC52YWwsIGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGVudW1lcmF0b3IuaW50ZXJwb2xhdGVBbG9uZ0VudW1NYWtlcihcbiAgICAgICAgICAgICAgICBwLFxuICAgICAgICAgICAgICAgIGdldFZhbHVlcyxcbiAgICAgICAgICAgICAgICB0aGlzXG4gICAgICAgICAgICAgICkoZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHAudHlwZSA9PT0gXCJhdHRyVHdlZW5cIikge1xuICAgICAgICAgICAgbWFyay5hdHRyVHdlZW4ocC52YWwsIGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGVudW1lcmF0b3IuaW50ZXJwb2xhdGVBbG9uZ0VudW1NYWtlcihcbiAgICAgICAgICAgICAgICBwLFxuICAgICAgICAgICAgICAgIGdldFZhbHVlcyxcbiAgICAgICAgICAgICAgICB0aGlzXG4gICAgICAgICAgICAgICkoZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHAudHlwZSA9PT0gXCJ0ZXh0XCIpIHtcbiAgICAgICAgICAgIG1hcmsudHdlZW4oXCJ0ZXh0XCIsIGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICAgICAgY29uc3QgdGV4dEludGVycG9sYXRvciA9IGVudW1lcmF0b3IuaW50ZXJwb2xhdGVBbG9uZ0VudW1NYWtlcihcbiAgICAgICAgICAgICAgICBwLFxuICAgICAgICAgICAgICAgIGdldFZhbHVlcyxcbiAgICAgICAgICAgICAgICB0aGlzXG4gICAgICAgICAgICAgICkoZCk7XG4gICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbm5lckhUTUwgPSB0ZXh0SW50ZXJwb2xhdG9yKHQpO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChwLnR5cGUgPT09IFwic3R5bGVcIikge1xuICAgICAgICAgICAgbWFyay5zdHlsZVR3ZWVuKGdldFN0eWxlKHAudmFsKSwgZnVuY3Rpb24oZCkge1xuICAgICAgICAgICAgICByZXR1cm4gZW51bWVyYXRvci5pbnRlcnBvbGF0ZUFsb25nRW51bU1ha2VyKFxuICAgICAgICAgICAgICAgIHAsXG4gICAgICAgICAgICAgICAgZ2V0VmFsdWVzLFxuICAgICAgICAgICAgICAgIHRoaXNcbiAgICAgICAgICAgICAgKShkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gaW50ZXJwb2xhdGUgdGhlbVxuICAgICAgICBtYXJrXG4gICAgICAgICAgLmR1cmF0aW9uKChkLCBpKSA9PiB0aW1pbmdzW2ldLmR1cmF0aW9uKVxuICAgICAgICAgIC5kZWxheSgoZCwgaSkgPT4gdGltaW5nc1tpXS5kZWxheSlcbiAgICAgICAgICAuZWFzZShlYXNlRm4pXG4gICAgICAgICAgLmVuZCgpXG4gICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZShcImFsbFwiLCAoKSA9PiB7XG4gICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobWFya3R5cGVzLmluaXRpYWwgJiYgIWlzQXJlYUxpbmVNYXJrdHlwZShtYXJrdHlwZXMuaW5pdGlhbCkpIHtcbiAgICAgIC8vIHdoZW4gbWFya3R5cGUgY2hhbmdlcyBmcm9tIG90aGVyIG1hcmtzIHRvIGFyZWEvbGluZSBtYXJrXG5cbiAgICAgIGNvbnN0IHNldFR5cGUgPSBcImZpbmFsXCI7IGNvbnN0IG1hcmt0eXBlID0gbWFya3R5cGVzLmZpbmFsO1xuICAgICAgY29uc3QgcHJldkRhdGEgPSBkMy5sb2NhbCgpO1xuXG4gICAgICBpZiAoaGFzRmFjZXQuZmluYWwpIHtcbiAgICAgICAgY29uc3QgdGltaW5ncyA9IGNvbXB1dGVUaW1pbmcoXG4gICAgICAgICAgc3RlcC5ncm91cGVkRGF0YSxcbiAgICAgICAgICBzdGVwLm5leHREYXRhLFxuICAgICAgICAgIHN0ZXAudGltaW5nLFxuICAgICAgICAgIGpvaW5LZXksXG4gICAgICAgICAgam9pblNldFxuICAgICAgICApO1xuICAgICAgICBsZXQgbWFya0dzID0gZDMuc2VsZWN0QWxsKFxuICAgICAgICAgIGFuaW1WaXMgKyBgIC5yb2xlLXNjb3BlLiR7Y2hhbmdlLmZpbmFsLnBhcmVudC5uYW1lfSA+IGdgXG4gICAgICAgICk7XG4gICAgICAgIG1hcmtHcyA9IGQzXG4gICAgICAgICAgLnNlbGVjdChgJHthbmltVmlzICB9IC5yb2xlLXNjb3BlLiR7Y2hhbmdlLmZpbmFsLnBhcmVudC5uYW1lfWApXG4gICAgICAgICAgLnNlbGVjdEFsbChgLnJvbGUtc2NvcGUuJHtjaGFuZ2UuZmluYWwucGFyZW50Lm5hbWV9ID4gZ2ApXG4gICAgICAgICAgLmRhdGEoc3RlcC5ncm91cGVkRGF0YSwgKGQsIGkpID0+IGpvaW5LZXkoZCwgaSwgc2V0VHlwZSkpO1xuXG4gICAgICAgIC8vIGFwcGVuZCBncm91cCBtYXJrXG4gICAgICAgIGNvbnN0IGVudGVySUcgPSBtYXJrR3MuZW50ZXIoKS5hcHBlbmQoXCJnXCIpO1xuICAgICAgICBlbnRlcklHLmFwcGVuZChcInBhdGhcIikuYXR0cihcImNsYXNzXCIsIFwiYmFja2dyb3VuZFwiKTtcblxuICAgICAgICAvLyBhcHBlbmQgbWFyayBtYXJrXG4gICAgICAgIGNvbnN0IGVudGVySU1hcmsgPSBlbnRlcklHXG4gICAgICAgICAgLmFwcGVuZChcImdcIilcbiAgICAgICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgYG1hcmstJHttYXJrdHlwZX0gcm9sZS1tYXJrICR7Y2hhbmdlLmNvbXBOYW1lfWApXG4gICAgICAgICAgLmFwcGVuZChcInBhdGhcIik7XG5cbiAgICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICAgIGVudGVySU1hcmssXG4gICAgICAgICAgTUFSS19BVFRSU1ttYXJrdHlwZV0sXG4gICAgICAgICAgeyBwcmltYXJ5OiBzY2FsZXMuaW5pdGlhbCwgc2Vjb25kYXJ5OiBzY2FsZXMuZmluYWwgfSxcbiAgICAgICAgICBzaWduYWxzLmluaXRpYWwsXG4gICAgICAgICAgZW5jb2Rlcy5maW5hbC5pbnRlcm1lZGlhdGVcbiAgICAgICAgKTtcblxuICAgICAgICBtYXJrR3MgPSBkM1xuICAgICAgICAgIC5zZWxlY3QoYCR7YW5pbVZpcyAgfSAucm9sZS1zY29wZS4ke2NoYW5nZS5maW5hbC5wYXJlbnQubmFtZX1gKVxuICAgICAgICAgIC5zZWxlY3RBbGwoYC5yb2xlLXNjb3BlLiR7Y2hhbmdlLmZpbmFsLnBhcmVudC5uYW1lfSA+IGdgKTtcblxuICAgICAgICBtYXJrR3MuZWFjaChmdW5jdGlvbihkKSB7XG4gICAgICAgICAgcHJldkRhdGEuc2V0KHRoaXMsIGQpO1xuICAgICAgICB9KTtcbiAgICAgICAgbWFya0dzID0gbWFya0dzLmRhdGEoc3RlcC5uZXh0RGF0YSwgKGQsIGkpID0+IGpvaW5LZXkoZCwgaSwgc2V0VHlwZSkpO1xuXG4gICAgICAgIHVwZGF0ZShcbiAgICAgICAgICB0aW1pbmdzLFxuICAgICAgICAgIG1hcmtHcyxcbiAgICAgICAgICBtYXJrdHlwZSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpbml0aWFsOiBlbmNvZGVzLmZpbmFsLmludGVybWVkaWF0ZSxcbiAgICAgICAgICAgIGZpbmFsOiBlbmNvZGVzLmZpbmFsLnVwZGF0ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJldkRhdGFcbiAgICAgICAgKTtcblxuICAgICAgICBlbnRlcih0aW1pbmdzLCBtYXJrR3MsIG1hcmt0eXBlKTtcblxuICAgICAgICBkb25lKFwiZXhpdFwiLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IG1hcmsgPSBkM1xuICAgICAgICAgIC5zZWxlY3QoYW5pbVZpcyArIGAgLm1hcmstJHttYXJrdHlwZX0ucm9sZS1tYXJrLiR7Y2hhbmdlLmNvbXBOYW1lfWApXG4gICAgICAgICAgLnNlbGVjdEFsbChcInBhdGhcIik7XG4gICAgICAgIG1hcmsgPSBtYXJrLmRhdGEoc3RlcC5ncm91cGVkRGF0YSk7XG5cbiAgICAgICAgY29uc3QgZW50ZXJJID0gbWFyay5lbnRlcigpLmFwcGVuZChcInBhdGhcIik7XG5cbiAgICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICAgIGVudGVySSxcbiAgICAgICAgICBNQVJLX0FUVFJTW21hcmt0eXBlXSxcbiAgICAgICAgICB7IHByaW1hcnk6IHNjYWxlcy5pbml0aWFsLCBzZWNvbmRhcnk6IHNjYWxlcy5maW5hbCB9LFxuICAgICAgICAgIHNpZ25hbHMuaW5pdGlhbCxcbiAgICAgICAgICBlbmNvZGVzLmZpbmFsLmludGVybWVkaWF0ZVxuICAgICAgICApO1xuXG4gICAgICAgIGxldCBlbnRlckYgPSBkM1xuICAgICAgICAgIC5zZWxlY3QoXG4gICAgICAgICAgICBhbmltVmlzICsgYCAubWFyay0ke21hcmt0eXBlcy5maW5hbH0ucm9sZS1tYXJrLiR7Y2hhbmdlLmNvbXBOYW1lfWBcbiAgICAgICAgICApXG4gICAgICAgICAgLnNlbGVjdEFsbChcInBhdGhcIik7XG4gICAgICAgIGVudGVyRi5lYWNoKGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICBwcmV2RGF0YS5zZXQodGhpcywgZCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGVudGVyRiA9IGVudGVyRi5kYXRhKHN0ZXAubmV4dERhdGEpLnRyYW5zaXRpb24oKTtcblxuICAgICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgICAgZW50ZXJGLFxuICAgICAgICAgIE1BUktfQVRUUlNbbWFya3R5cGVzLmZpbmFsXSwgLy8gTUFSS19BVFRSU19EQVRBX0lOVEVSUE9MQVRFW21hcmt0eXBlXSxcbiAgICAgICAgICBzY2FsZXMsXG4gICAgICAgICAgc2lnbmFscy5maW5hbCxcbiAgICAgICAgICBlbmNvZGVzLmZpbmFsLnVwZGF0ZSxcbiAgICAgICAgICBwcmV2RGF0YVxuICAgICAgICApO1xuXG4gICAgICAgIGVudGVyRlxuICAgICAgICAgIC5kdXJhdGlvbihzdGVwLnRpbWluZy5kdXJhdGlvbilcbiAgICAgICAgICAuZGVsYXkoc3RlcC50aW1pbmcuZGVsYXkpXG4gICAgICAgICAgLmVhc2UoZWFzZUZuKVxuICAgICAgICAgIC5lbmQoKVxuICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoXCJhbGxcIiwgKCkgPT4ge3Jlc29sdmUoKTt9KTtcbiAgICAgICAgICB9KTtcblxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobWFya3R5cGVzLmZpbmFsICYmICFpc0FyZWFMaW5lTWFya3R5cGUobWFya3R5cGVzLmZpbmFsKSkge1xuICAgICAgLy8gd2hlbiBtYXJrdHlwZSBjaGFuZ2VzIGZyb20gYXJlYS9saW5lIHRvIHRoZSBvdGhlciBtYXJrdHlwZXNcbiAgICAgIC8vIGV4aXRcbiAgICAgIGNvbnN0IHRpbWluZ3MgPSBjb21wdXRlVGltaW5nKFxuICAgICAgICBzdGVwLmN1cnJEYXRhLFxuICAgICAgICBzdGVwLmdyb3VwZWREYXRhLFxuICAgICAgICBzdGVwLnRpbWluZyxcbiAgICAgICAgam9pbktleSxcbiAgICAgICAgam9pblNldFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHByZXZEYXRhID0gZDMubG9jYWwoKTtcbiAgICAgIGNvbnN0IHNldFR5cGUgPSBcImluaXRpYWxcIjsgY29uc3QgbWFya3R5cGUgPSBtYXJrdHlwZXMuaW5pdGlhbDtcbiAgICAgIGlmIChoYXNGYWNldC5pbml0aWFsKSB7XG4gICAgICAgIGxldCBtYXJrR3MgPSBkMy5zZWxlY3RBbGwoXG4gICAgICAgICAgYW5pbVZpcyArIGAgLnJvbGUtc2NvcGUuJHtjaGFuZ2UuaW5pdGlhbC5wYXJlbnQubmFtZX0gPiBnYFxuICAgICAgICApO1xuICAgICAgICBtYXJrR3MgPSBkM1xuICAgICAgICAgIC5zZWxlY3QoYCR7YW5pbVZpcyAgfSAucm9sZS1zY29wZS4ke2NoYW5nZS5pbml0aWFsLnBhcmVudC5uYW1lfWApXG4gICAgICAgICAgLnNlbGVjdEFsbChgLnJvbGUtc2NvcGUuJHtjaGFuZ2UuaW5pdGlhbC5wYXJlbnQubmFtZX0gPiBnYCk7XG5cbiAgICAgICAgbWFya0dzLmVhY2goZnVuY3Rpb24oZCkge1xuICAgICAgICAgIHByZXZEYXRhLnNldCh0aGlzLCBkKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG1hcmtHcyA9IG1hcmtHcy5kYXRhKHN0ZXAuZ3JvdXBlZERhdGEsIChkLCBpKSA9PlxuICAgICAgICAgIGpvaW5LZXkoZCwgaSwgc2V0VHlwZSlcbiAgICAgICAgKTtcblxuICAgICAgICBleGl0KFxuICAgICAgICAgIHRpbWluZ3MsXG4gICAgICAgICAgbWFya0dzLFxuICAgICAgICAgIG1hcmt0eXBlLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGluaXRpYWw6IGVuY29kZXMuaW5pdGlhbC5leGl0LFxuICAgICAgICAgICAgZmluYWw6IGVuY29kZXMuZmluYWwuZXhpdFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJldkRhdGEsXG4gICAgICAgICAgXCJpbml0aWFsXCJcbiAgICAgICAgKTtcblxuICAgICAgICB1cGRhdGUoXG4gICAgICAgICAgdGltaW5ncyxcbiAgICAgICAgICBtYXJrR3MsXG4gICAgICAgICAgbWFya3R5cGUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaW5pdGlhbDogZW5jb2Rlcy5pbml0aWFsLnVwZGF0ZSxcbiAgICAgICAgICAgIGZpbmFsOiBlbmNvZGVzLmluaXRpYWwuaW50ZXJtZWRpYXRlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwcmV2RGF0YVxuICAgICAgICApO1xuICAgICAgICBkb25lKFwiZW50ZXJcIiwgKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBtYXJrID0gZDNcbiAgICAgICAgICAuc2VsZWN0KGFuaW1WaXMgKyBgIC5tYXJrLSR7bWFya3R5cGV9LnJvbGUtbWFyay4ke2NoYW5nZS5jb21wTmFtZX1gKVxuICAgICAgICAgIC5zZWxlY3RBbGwoXCJwYXRoXCIpO1xuICAgICAgICBtYXJrLmVhY2goZnVuY3Rpb24oZCkge1xuICAgICAgICAgIHByZXZEYXRhLnNldCh0aGlzLCBkKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG1hcmsgPSBtYXJrLmRhdGEoc3RlcC5ncm91cGVkRGF0YSkudHJhbnNpdGlvbigpO1xuICAgICAgICAvLyBmYWRlLW91dCBieSB0aGUgZXhpdCBlbmNvZGluZ1xuXG4gICAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgICBtYXJrLFxuICAgICAgICAgIE1BUktfQVRUUlNbbWFya3R5cGVdLFxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oe30sIHNjYWxlcywge1xuICAgICAgICAgICAgcHJpbWFyeTogc2NhbGVzLmZpbmFsLFxuICAgICAgICAgICAgc2Vjb25kYXJ5OiBzY2FsZXMuaW5pdGlhbFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaW5pdGlhbDogZW5jb2Rlcy5pbml0aWFsLnVwZGF0ZSxcbiAgICAgICAgICAgIGZpbmFsOiBlbmNvZGVzLmluaXRpYWwuaW50ZXJtZWRpYXRlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwcmV2RGF0YVxuICAgICAgICApO1xuXG4gICAgICAgIG1hcmtcbiAgICAgICAgICAuZHVyYXRpb24oc3RlcC5kdXJhdGlvbilcbiAgICAgICAgICAuZGVsYXkoc3RlcC5kZWxheSlcbiAgICAgICAgICAuZWFzZShlYXNlRm4pXG4gICAgICAgICAgLy8gLnJlbW92ZSgpXG4gICAgICAgICAgLmVuZCgpXG4gICAgICAgICAgLnRoZW4oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBkb25lKFwiYWxsXCIsICgpID0+IHtyZXNvbHZlKCk7fSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgoaXNSZW1vdmUgfHwgaGFzRmFjZXQuZmluYWwpICYmIChpc0FkZCB8fCBoYXNGYWNldC5pbml0aWFsKSkge1xuICAgICAgLy8gV2hlbiBhZGRpbmcgb3IgcmVtb3Zpbmcgb3IgY2hhbmdpbmcgbWFya3Mgd2l0aCBwYXRoR3JvdXBcbiAgICAgIGNvbnN0IHBhcmVudE5hbWUgPSBpc0FkZFxuICAgICAgICA/IGNoYW5nZS5maW5hbC5wYXJlbnQubmFtZVxuICAgICAgICA6IGlzUmVtb3ZlXG4gICAgICAgICAgPyBjaGFuZ2UuaW5pdGlhbC5wYXJlbnQubmFtZVxuICAgICAgICAgIDogY2hhbmdlLmluaXRpYWwudHlwZSA9PT0gbWFya3R5cGVzLmluaXRpYWxcbiAgICAgICAgICAgID8gY2hhbmdlLmluaXRpYWwucGFyZW50Lm5hbWVcbiAgICAgICAgICAgIDogY2hhbmdlLmZpbmFsLnBhcmVudC5uYW1lO1xuICAgICAgbGV0IG1hcmtHcyA9IGQzXG4gICAgICAgIC5zZWxlY3RBbGwoYW5pbVZpcyArIGAgLnJvbGUtc2NvcGUuJHtwYXJlbnROYW1lfSA+IGdgKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwiX19zdWJcIik7XG5cbiAgICAgIG1hcmtHcyA9IGQzXG4gICAgICAgIC5zZWxlY3QoYW5pbVZpcyArIGAgLnJvbGUtc2NvcGUuJHtwYXJlbnROYW1lfWApXG4gICAgICAgIC5zZWxlY3RBbGwoXCIuX19zdWJcIik7XG4gICAgICBjb25zdCBwcmV2RGF0YSA9IGQzLmxvY2FsKCk7XG4gICAgICBtYXJrR3MuZWFjaChmdW5jdGlvbihkKSB7XG4gICAgICAgIHByZXZEYXRhLnNldCh0aGlzLCBkKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKGNoYW5nZS5kYXRhIHx8IGlzQWRkIHx8IGlzUmVtb3ZlKSB7XG4gICAgICAgIG1hcmtHcyA9IG1hcmtHcy5kYXRhKHN0ZXAubmV4dERhdGEsIChkLCBpKSA9PiBqb2luS2V5KGQsIGkpKTtcbiAgICAgIH1cblxuICAgICAgLy8gZW50ZXJcbiAgICAgIC8vIGlmIChkb0VudGVyKSB7XG4gICAgICBlbnRlcih0aW1pbmdzLCBtYXJrR3MsIG1hcmt0eXBlcy5maW5hbCk7IC8vICwgZW5jb2Rlcy5pbml0aWFsLmVudGVyLCBlbmNvZGVzLmZpbmFsLmVudGVyLCBcImZpbmFsXCIpXG5cbiAgICAgIC8vIGV4aXRcbiAgICAgIC8vIGlmIChkb0V4aXQpIHtcbiAgICAgIGV4aXQoXG4gICAgICAgIHRpbWluZ3MsXG4gICAgICAgIG1hcmtHcyxcbiAgICAgICAgbWFya3R5cGVzLmluaXRpYWwsXG4gICAgICAgIHtcbiAgICAgICAgICBpbml0aWFsOiBlbmNvZGVzLmluaXRpYWwuZXhpdCxcbiAgICAgICAgICBmaW5hbDogZW5jb2Rlcy5maW5hbC5leGl0XG4gICAgICAgIH0sXG4gICAgICAgIHByZXZEYXRhLFxuICAgICAgICBcImluaXRpYWxcIlxuICAgICAgKTtcblxuICAgICAgLy8gZmluYWxpemUgdXBkYXRlXG4gICAgICAvLyBpZiAoZG9VcGRhdGUpIHtcblxuICAgICAgdXBkYXRlKFxuICAgICAgICB0aW1pbmdzLFxuICAgICAgICBtYXJrR3MsXG4gICAgICAgIG1hcmt0eXBlcyxcbiAgICAgICAge1xuICAgICAgICAgIGluaXRpYWw6IGVuY29kZXMuaW5pdGlhbC51cGRhdGUsXG4gICAgICAgICAgZmluYWw6IGVuY29kZXMuZmluYWwudXBkYXRlXG4gICAgICAgIH0sXG4gICAgICAgIHByZXZEYXRhXG4gICAgICApO1xuXG4gICAgfSBlbHNlIGlmICgoaXNSZW1vdmUgfHwgIWhhc0ZhY2V0LmZpbmFsKSAmJiAoaXNBZGQgfHwgIWhhc0ZhY2V0LmluaXRpYWwpKSB7XG4gICAgICAvLyBXaGVuIGFkZGluZyBvciByZW1vdmluZyBvciB1cGRhdGluZyBhIHNpbmdsZSBtYXJrIHdpdGhvdXQgcGF0aGdyb3VwXG5cbiAgICAgIGNvbnN0IG1hcmtHID0gZDMuc2VsZWN0KFxuICAgICAgICBhbmltVmlzICsgYCAubWFyay0ke21hcmt0eXBlcy5pbml0aWFsfS5yb2xlLW1hcmsuJHtjaGFuZ2UuY29tcE5hbWV9YFxuICAgICAgKTtcbiAgICAgIGxldCBtYXJrID0gbWFya0cuc2VsZWN0QWxsKFwicGF0aFwiKTtcbiAgICAgIGNvbnN0IHByZXZEYXRhID0gZDMubG9jYWwoKTtcbiAgICAgIG1hcmsuZWFjaChmdW5jdGlvbihkKSB7XG4gICAgICAgIHByZXZEYXRhLnNldCh0aGlzLCBkKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKGNoYW5nZS5kYXRhIHx8IGlzQWRkIHx8IGlzUmVtb3ZlKSB7XG4gICAgICAgIG1hcmsgPSBtYXJrLmRhdGEoc3RlcC5uZXh0RGF0YSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGVudGVyXG5cbiAgICAgIGNvbnN0IGVudGVySSA9IG1hcmsuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpO1xuXG4gICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgIGVudGVySSxcbiAgICAgICAgTUFSS19BVFRSU1ttYXJrdHlwZV0sXG4gICAgICAgIHsgcHJpbWFyeTogc2NhbGVzLmluaXRpYWwsIHNlY29uZGFyeTogc2NhbGVzLmZpbmFsIH0sXG4gICAgICAgIHNpZ25hbHMuaW5pdGlhbCxcbiAgICAgICAgZW5jb2Rlcy5pbml0aWFsLmVudGVyXG4gICAgICApO1xuICAgICAgaWYgKGVudGVySS5kYXRhKCkubGVuZ3RoID4gMCkge1xuICAgICAgICBsZXQgZW50ZXJGID0gZW50ZXJJLnRyYW5zaXRpb24oKTtcblxuICAgICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgICAgZW50ZXJGLFxuICAgICAgICAgIE1BUktfQVRUUlNbbWFya3R5cGVdLCAvLyBNQVJLX0FUVFJTX0RBVEFfSU5URVJQT0xBVEVbbWFya3R5cGVdLFxuICAgICAgICAgIHNjYWxlcy5maW5hbCxcbiAgICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICAgIGVuY29kZXMuZmluYWwuZW50ZXJcbiAgICAgICAgKTtcblxuICAgICAgICBlbnRlckZcbiAgICAgICAgICAuZHVyYXRpb24oc3RlcC50aW1pbmcuZHVyYXRpb24pXG4gICAgICAgICAgLmRlbGF5KHN0ZXAudGltaW5nLmRlbGF5KVxuICAgICAgICAgIC5lYXNlKGVhc2VGbilcbiAgICAgICAgICAuZW5kKClcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKFwiZW50ZXJcIiwgKCkgPT4ge3Jlc29sdmUoKTt9KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvbmUoXCJlbnRlclwiLCAoKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuXG4gICAgICAvLyBleGl0XG5cbiAgICAgIC8vIGluaXRpYXRlIGV4aXRcbiAgICAgIGNvbnN0IGV4aXRJID0gbWFyay5leGl0KCk7XG5cbiAgICAgIGlmIChleGl0SS5kYXRhKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBmaW5hbGl6ZSBleGl0XG4gICAgICAgIGNvbnN0IGV4aXRGID0gZXhpdEkudHJhbnNpdGlvbigpO1xuXG4gICAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgICBleGl0RixcbiAgICAgICAgICBNQVJLX0FUVFJTW21hcmt0eXBlXSwgLy8gTUFSS19BVFRSU19EQVRBX0lOVEVSUE9MQVRFW21hcmt0eXBlXSxcbiAgICAgICAgICB7IHByaW1hcnk6IHNjYWxlcy5maW5hbCwgc2Vjb25kYXJ5OiBzY2FsZXMuaW5pdGlhbCB9LFxuICAgICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgICAgZW5jb2Rlcy5maW5hbC5leGl0XG4gICAgICAgICk7XG5cbiAgICAgICAgZXhpdEZcbiAgICAgICAgICAuZHVyYXRpb24oKGQsIGkpID0+IHN0ZXAudGltaW5nLmR1cmF0aW9uKVxuICAgICAgICAgIC5kZWxheSgoZCwgaSkgPT4gc3RlcC50aW1pbmcuZGVsYXkpXG4gICAgICAgICAgLmVhc2UoZWFzZUZuKVxuICAgICAgICAgIC5lbmQoKVxuICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgZG9uZShcImV4aXRcIiwgKCkgPT4ge3Jlc29sdmUoKTt9KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvbmUoXCJleGl0XCIsICgpID0+IHtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG5cbiAgICAgIC8vIGZpbmFsaXplIHVwZGF0ZVxuXG4gICAgICBpZiAobWFyay5kYXRhKCkubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAobWFya3R5cGVzLmluaXRpYWwgIT09IG1hcmt0eXBlcy5maW5hbCkge1xuICAgICAgICAgIG1hcmtHLmNsYXNzZWQoYG1hcmstJHttYXJrdHlwZXMuaW5pdGlhbH1gLCBmYWxzZSk7XG4gICAgICAgICAgbWFya0cuY2xhc3NlZChgbWFyay0ke21hcmt0eXBlcy5maW5hbH1gLCB0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVwZGF0ZUYgPSBtYXJrLnRyYW5zaXRpb24oKTtcblxuICAgICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgICAgdXBkYXRlRixcbiAgICAgICAgICBnZXRQcm9wKG1hcmt0eXBlcyksXG4gICAgICAgICAgc2NhbGVzLFxuICAgICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaW5pdGlhbDogZW5jb2Rlcy5pbml0aWFsLnVwZGF0ZSxcbiAgICAgICAgICAgIGZpbmFsOiBlbmNvZGVzLmZpbmFsLnVwZGF0ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJldkRhdGFcbiAgICAgICAgKTtcbiAgICAgICAgdXBkYXRlRlxuICAgICAgICAgIC5kdXJhdGlvbihzdGVwLnRpbWluZy5kdXJhdGlvbilcbiAgICAgICAgICAuZGVsYXkoc3RlcC50aW1pbmcuZGVsYXkpXG4gICAgICAgICAgLmVhc2UoZWFzZUZuKVxuICAgICAgICAgIC5lbmQoKVxuICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoXCJ1cGRhdGVcIiwgKCkgPT4ge3Jlc29sdmUoKTt9KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvbmUoXCJ1cGRhdGVcIiwgKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cblxuICAgIH0gZWxzZSBpZiAoIWhhc0ZhY2V0LmluaXRpYWwgJiYgaGFzRmFjZXQuZmluYWwpIHtcbiAgICAgIC8vIHNpbmdsZSBtYXJrIHdpdGhvdXQgcGF0aGdyb3VwIC0+IG1hcmtzIHdpdGggcGF0aGdyb3VwXG4gICAgICBjb25zdCBwcmV2RGF0YSA9IGQzLmxvY2FsKCk7XG5cbiAgICAgIC8vIFJlbW92ZSB0aGUgc2luZ2xlIGFyZWFcbiAgICAgIGxldCBleGl0TWFyayA9IGQzXG4gICAgICAgIC5zZWxlY3QoXG4gICAgICAgICAgYW5pbVZpcyArIGAgLm1hcmstJHttYXJrdHlwZXMuaW5pdGlhbH0ucm9sZS1tYXJrLiR7Y2hhbmdlLmNvbXBOYW1lfWBcbiAgICAgICAgKVxuICAgICAgICAuc2VsZWN0QWxsKFwicGF0aFwiKTtcbiAgICAgIGV4aXRNYXJrID0gZXhpdE1hcmtcbiAgICAgICAgLmVhY2goZnVuY3Rpb24oZCkge1xuICAgICAgICAgIHByZXZEYXRhLnNldCh0aGlzLCBkKTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRyYW5zaXRpb24oKTtcblxuICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICBleGl0TWFyayxcbiAgICAgICAgTUFSS19BVFRSU1ttYXJrdHlwZXMuaW5pdGlhbF0sIC8vIE1BUktfQVRUUlNfREFUQV9JTlRFUlBPTEFURVttYXJrdHlwZXMuaW5pdGlhbF0sXG4gICAgICAgIE9iamVjdC5hc3NpZ24oe30sIHNjYWxlcywge1xuICAgICAgICAgIHByaW1hcnk6IHNjYWxlcy5maW5hbCxcbiAgICAgICAgICBzZWNvbmRhcnk6IHNjYWxlcy5pbml0aWFsXG4gICAgICAgIH0pLFxuICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICBPYmplY3QuYXNzaWduKHt9LCBlbmNvZGVzLmluaXRpYWwuZXhpdCwgeyBvcGFjaXR5OiB7IHZhbHVlOiAwIH0gfSksXG4gICAgICAgIHByZXZEYXRhXG4gICAgICApO1xuXG4gICAgICBleGl0TWFya1xuICAgICAgICAuZHVyYXRpb24oKGQsIGkpID0+IHRpbWluZ3MuZmluZCh0ID0+IHQuc2V0ID09PSBcImV4aXRcIikuZHVyYXRpb24pXG4gICAgICAgIC5kZWxheSgoZCwgaSkgPT4gdGltaW5ncy5maW5kKHQgPT4gdC5zZXQgPT09IFwiZXhpdFwiKS5kZWxheSlcbiAgICAgICAgLmVhc2UoZWFzZUZuKVxuICAgICAgICAucmVtb3ZlKClcbiAgICAgICAgLmVuZCgpXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGQzLnNlbGVjdChgJHthbmltVmlzICB9IC5tYXJrLSR7bWFya3R5cGVzLmluaXRpYWx9LnJvbGUtbWFyay4ke2NoYW5nZS5jb21wTmFtZX1gKS5yZW1vdmUoKTtcbiAgICAgICAgICBkb25lKFwiZXhpdFwiLCAoKSA9PiB7cmVzb2x2ZSgpO30pO1xuICAgICAgICB9KTtcblxuICAgICAgLy8gQWRkIHBhdGhncm91cCB3aXRoIG1hcmtzXG4gICAgICBjb25zdCB7cGFyZW50fSA9IGNoYW5nZS5maW5hbDtcbiAgICAgIGNvbnN0IHNpYiA9IGZpbmRBZnRlclNpYmxpbmcoZVZpZXcuc2NlbmVncmFwaCgpLnJvb3QsIHBhcmVudC5uYW1lKTtcblxuICAgICAgYWRkTWFyayhcbiAgICAgICAgZDMuc2VsZWN0KGAke2FuaW1WaXMgIH0gLiR7cGFyZW50LnBhcmVudC5uYW1lfSA+IGcgPiBnYCksXG4gICAgICAgIGNoYW5nZS5maW5hbCxcbiAgICAgICAgc2liID8gYC4ke3NpYi5uYW1lfWAgOiB1bmRlZmluZWQsXG4gICAgICAgIHsgaGFzR3JvdXA6IHRydWUgfVxuICAgICAgKTtcblxuICAgICAgY29uc3QgbWFya0dzID0gZDNcbiAgICAgICAgLnNlbGVjdChhbmltVmlzICsgYCAucm9sZS1zY29wZS4ke3BhcmVudC5uYW1lfWApXG4gICAgICAgIC5zZWxlY3RBbGwoXCJnXCIpXG4gICAgICAgIC5kYXRhKHN0ZXAubmV4dERhdGEpO1xuXG4gICAgICAvLyBhcHBlbmQgZ3JvdXAgbWFya1xuICAgICAgY29uc3QgZW50ZXJJRyA9IG1hcmtHcy5lbnRlcigpLmFwcGVuZChcImdcIik7XG4gICAgICBlbnRlcklHLmFwcGVuZChcInBhdGhcIikuYXR0cihcImNsYXNzXCIsIFwiYmFja2dyb3VuZFwiKTtcbiAgICAgIC8vIGQgKHJlY3QpXG4gICAgICAvLyBmaWxsIChub25lKVxuXG4gICAgICAvLyBhcHBlbmQgbWFyayBtYXJrXG4gICAgICBjb25zdCBlbnRlcklNYXJrID0gZW50ZXJJR1xuICAgICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIGAke21hcmt0eXBlcy5maW5hbH0tbWFyayByb2xlLW1hcmsgJHtjaGFuZ2UuY29tcE5hbWV9YClcbiAgICAgICAgLmFwcGVuZChcInBhdGhcIik7XG5cbiAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgZW50ZXJJTWFyayxcbiAgICAgICAgTUFSS19BVFRSU1ttYXJrdHlwZXMuZmluYWxdLFxuICAgICAgICB7IHByaW1hcnk6IHNjYWxlcy5pbml0aWFsLCBzZWNvbmRhcnk6IHNjYWxlcy5maW5hbCB9LFxuICAgICAgICBzaWduYWxzLmluaXRpYWwsXG4gICAgICAgIE9iamVjdC5hc3NpZ24oe30sIGVuY29kZXMuZmluYWwuZW50ZXIsIHsgb3BhY2l0eTogeyB2YWx1ZTogMCB9IH0pXG4gICAgICAgIC8vIGVuY29kZXMuaW5pdGlhbC5lbnRlclxuICAgICAgKTtcblxuICAgICAgY29uc3QgZW50ZXJGTWFyayA9IGVudGVySU1hcmtcbiAgICAgICAgLmVhY2goZnVuY3Rpb24oZCkge1xuICAgICAgICAgIHByZXZEYXRhLnNldCh0aGlzLCBkKTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRyYW5zaXRpb24oKTtcblxuICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICBlbnRlckZNYXJrLFxuICAgICAgICBNQVJLX0FUVFJTW21hcmt0eXBlcy5maW5hbF0sXG4gICAgICAgIHNjYWxlcyxcbiAgICAgICAgc2lnbmFscy5maW5hbCxcbiAgICAgICAgZW5jb2Rlcy5maW5hbC5lbnRlcixcbiAgICAgICAgcHJldkRhdGFcbiAgICAgICk7XG5cbiAgICAgIGVudGVyRk1hcmtcbiAgICAgICAgLmR1cmF0aW9uKFxuICAgICAgICAgIChkLCBpKSA9PiB0aW1pbmdzLmZpbmQodCA9PiB0LmlkID09PSBqb2luS2V5KGQsIGksIFwiZmluYWxcIikpLmR1cmF0aW9uXG4gICAgICAgIClcbiAgICAgICAgLmRlbGF5KFxuICAgICAgICAgIChkLCBpKSA9PiB0aW1pbmdzLmZpbmQodCA9PiB0LmlkID09PSBqb2luS2V5KGQsIGksIFwiZmluYWxcIikpLmRlbGF5XG4gICAgICAgIClcbiAgICAgICAgLmVhc2UoZWFzZUZuKVxuICAgICAgICAuZW5kKClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGRvbmUoXCJlbnRlclwiLCAoKSA9PiB7cmVzb2x2ZSgpO30pO1xuICAgICAgICB9KTtcbiAgICAgIGRvbmUoXCJ1cGRhdGVcIiwgKCkgPT4ge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGhhc0ZhY2V0LmluaXRpYWwgJiYgIWhhc0ZhY2V0LmZpbmFsKSB7XG4gICAgICAvLyBtYXJrcyB3aXRoIHBhdGhncm91cCAtPiBzaW5nbGUgbWFyayB3aXRob3V0IHBhdGhncm91cFxuXG4gICAgICBjb25zdCB7cGFyZW50fSA9IGNoYW5nZS5pbml0aWFsLFxuICAgICAgICBwcmV2RGF0YSA9IGQzLmxvY2FsKCk7XG4gICAgICAvLyBSZW1vdmUgdGhlIHBhdGhncm91cCBhbmQgdGhlIG1hcmtzXG5cbiAgICAgIGxldCBleGl0TWFya3MgPSBkM1xuICAgICAgICAuc2VsZWN0KGFuaW1WaXMgKyBgIC5yb2xlLXNjb3BlLiR7cGFyZW50Lm5hbWV9YClcbiAgICAgICAgLnNlbGVjdEFsbChgIC5yb2xlLXNjb3BlLiR7cGFyZW50Lm5hbWV9ID4gZ2ApXG4gICAgICAgIC5kYXRhKHN0ZXAuY3VyckRhdGEpXG4gICAgICAgIC5zZWxlY3QoYC4ke2NoYW5nZS5jb21wTmFtZX0gPiBwYXRoYClcbiAgICAgICAgLmVhY2goZnVuY3Rpb24oZCkge1xuICAgICAgICAgIHByZXZEYXRhLnNldCh0aGlzLCBkKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIGV4aXRNYXJrcyA9IGV4aXRNYXJrcy50cmFuc2l0aW9uKCk7XG5cbiAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgZXhpdE1hcmtzLFxuICAgICAgICAvLyBNQVJLX0FUVFJTX0RBVEFfSU5URVJQT0xBVEVbbWFya3R5cGVdLFxuICAgICAgICBNQVJLX0FUVFJTW21hcmt0eXBlcy5pbml0aWFsXSxcbiAgICAgICAgT2JqZWN0LmFzc2lnbih7fSwgc2NhbGVzLCB7XG4gICAgICAgICAgcHJpbWFyeTogc2NhbGVzLmZpbmFsLFxuICAgICAgICAgIHNlY29uZGFyeTogc2NhbGVzLmluaXRpYWxcbiAgICAgICAgfSksXG4gICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgIE9iamVjdC5hc3NpZ24oe30sIGVuY29kZXMuaW5pdGlhbC5leGl0LCB7IG9wYWNpdHk6IHsgdmFsdWU6IDAgfSB9KSxcbiAgICAgICAgcHJldkRhdGFcbiAgICAgICk7XG5cbiAgICAgIGV4aXRNYXJrc1xuICAgICAgICAuZHVyYXRpb24oXG4gICAgICAgICAgKGQsIGkpID0+XG4gICAgICAgICAgICB0aW1pbmdzLmZpbmQodCA9PiB0LmlkID09PSBqb2luS2V5KGQsIGksIFwiaW5pdGlhbFwiKSkuZHVyYXRpb25cbiAgICAgICAgKVxuICAgICAgICAuZGVsYXkoXG4gICAgICAgICAgKGQsIGkpID0+IHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSwgXCJpbml0aWFsXCIpKS5kZWxheVxuICAgICAgICApXG4gICAgICAgIC5lYXNlKGVhc2VGbilcbiAgICAgICAgLnJlbW92ZSgpXG4gICAgICAgIC5lbmQoKVxuICAgICAgICAudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgICBkb25lKFwiZXhpdFwiLCAoKSA9PiB7cmVzb2x2ZSgpO30pO1xuICAgICAgICB9KTtcblxuICAgICAgLy8gQWRkIHRoZSBzaW5nbGUgYXJlYVxuICAgICAgY29uc3Qgc2liID0gZmluZEFmdGVyU2libGluZyhlVmlldy5zY2VuZWdyYXBoKCkucm9vdCwgY2hhbmdlLmNvbXBOYW1lKTtcblxuICAgICAgbGV0IGVudGVySU1hcmsgPSBhZGRNYXJrKFxuICAgICAgICBkMy5zZWxlY3QoYCR7YW5pbVZpcyAgfSAuJHtjaGFuZ2UuZmluYWwucGFyZW50Lm5hbWV9ID4gZyA+IGdgKSxcbiAgICAgICAgY2hhbmdlLmZpbmFsLFxuICAgICAgICBzaWIgPyBgLiR7c2liLm5hbWV9YCA6IHVuZGVmaW5lZFxuICAgICAgKTtcblxuICAgICAgZW50ZXJJTWFyayA9IGVudGVySU1hcmtcbiAgICAgICAgLnNlbGVjdEFsbChcInBhdGhcIilcbiAgICAgICAgLmRhdGEoc3RlcC5uZXh0RGF0YSlcbiAgICAgICAgLmVudGVyKClcbiAgICAgICAgLmFwcGVuZChcInBhdGhcIik7XG5cbiAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgZW50ZXJJTWFyayxcbiAgICAgICAgTUFSS19BVFRSU1ttYXJrdHlwZXMuZmluYWxdLFxuICAgICAgICB7IHByaW1hcnk6IHNjYWxlcy5pbml0aWFsLCBzZWNvbmRhcnk6IHNjYWxlcy5maW5hbCB9LFxuICAgICAgICBzaWduYWxzLmluaXRpYWwsXG4gICAgICAgIE9iamVjdC5hc3NpZ24oe30sIGVuY29kZXMuZmluYWwuZW50ZXIsIHsgb3BhY2l0eTogeyB2YWx1ZTogMCB9IH0pXG4gICAgICApO1xuXG4gICAgICBlbnRlcklNYXJrLmVhY2goZnVuY3Rpb24oZCkge1xuICAgICAgICBwcmV2RGF0YS5zZXQodGhpcywgZCk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGVudGVyRiA9IGVudGVySU1hcmsudHJhbnNpdGlvbigpO1xuXG4gICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgIGVudGVyRixcbiAgICAgICAgTUFSS19BVFRSU1ttYXJrdHlwZXMuZmluYWxdLFxuICAgICAgICBzY2FsZXMsXG4gICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgIGVuY29kZXMuZmluYWwuZW50ZXIsXG4gICAgICAgIHByZXZEYXRhXG4gICAgICApO1xuXG4gICAgICBlbnRlckZcbiAgICAgICAgLmR1cmF0aW9uKChkLCBpKSA9PiB0aW1pbmdzLmZpbmQodCA9PiB0LnNldCA9PT0gXCJlbnRlclwiKS5kdXJhdGlvbilcbiAgICAgICAgLmRlbGF5KChkLCBpKSA9PiB0aW1pbmdzLmZpbmQodCA9PiB0LnNldCA9PT0gXCJlbnRlclwiKS5kZWxheSlcbiAgICAgICAgLmVhc2UoZWFzZUZuKVxuICAgICAgICAuZW5kKClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGRvbmUoXCJlbnRlclwiLCAoKSA9PiB7cmVzb2x2ZSgpO30pO1xuICAgICAgICB9KTtcbiAgICAgIGRvbmUoXCJ1cGRhdGVcIiwgKCkgPT4ge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRQcm9wKG1hcmt0eXBlcykge1xuICAgICAgY29uc3QgbWFya3R5cGUgPVxuICAgICAgICB0eXBlb2YgbWFya3R5cGVzID09PSBcInN0cmluZ1wiID8gbWFya3R5cGVzIDogbWFya3R5cGVzLmZpbmFsO1xuICAgICAgY29uc3QgcHJvcHMgPSBjaGFuZ2UuZGF0YSAmJiAoaXNMaW5lYXJNYXJrdHlwZShtYXJrdHlwZSkpID9cbiAgICAgICAgTUFSS19BVFRSU19EQVRBX0lOVEVSUE9MQVRFW21hcmt0eXBlXSA6XG4gICAgICAgIE1BUktfQVRUUlNbbWFya3R5cGVdO1xuICAgICAgaWYgKFxuICAgICAgICBpc0FyZWFMaW5lTWFya3R5cGUobWFya3R5cGVzLmluaXRpYWwpICYmXG4gICAgICAgIGlzQXJlYUxpbmVNYXJrdHlwZShtYXJrdHlwZXMuZmluYWwpICYmXG4gICAgICAgIG1hcmt0eXBlcy5maW5hbCAhPT0gbWFya3R5cGVzLmluaXRpYWxcbiAgICAgICkge1xuICAgICAgICBwcm9wc1swXS50d2Vha3MucHVzaCh7XG4gICAgICAgICAgdHlwZTogXCJhdHRyVHdlZW5cIixcbiAgICAgICAgICB2YWw6IFwiZFwiLFxuICAgICAgICAgIGluaXRpYWxNYXJrdHlwZTogbWFya3R5cGVzLmluaXRpYWwsXG4gICAgICAgICAgaW50ZXJwb2xhdGVTdHlsZTogXCJ1cGRhdGVcIlxuICAgICAgICB9KTtcbiAgICAgICAgcHJvcHNbMF0udHdlYWtzLnB1c2goe1xuICAgICAgICAgIHR5cGU6IFwic3R5bGVcIixcbiAgICAgICAgICB2YWw6IFwiZmlsbFwiLFxuICAgICAgICAgIGluaXRpYWxNYXJrdHlwZTogbWFya3R5cGVzLmluaXRpYWwsXG4gICAgICAgICAgYXNUd2VlbjogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgcHJvcHNbMF0udHdlYWtzLnB1c2goe1xuICAgICAgICAgIHR5cGU6IFwic3R5bGVcIixcbiAgICAgICAgICB2YWw6IFwic3Ryb2tlXCIsXG4gICAgICAgICAgaW5pdGlhbE1hcmt0eXBlOiBtYXJrdHlwZXMuaW5pdGlhbFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwcm9wcztcbiAgICB9XG4gICAgZnVuY3Rpb24gZXhpdChcbiAgICAgIHRpbWluZ3MsXG4gICAgICBtYXJrR3MsXG4gICAgICBtYXJrdHlwZSxcbiAgICAgIGVuY29kZXMsXG4gICAgICBwcmV2RGF0YSxcbiAgICAgIHNldFR5cGUsXG4gICAgICBpc0FsbERvbmUgPSBmYWxzZVxuICAgICkge1xuICAgICAgLy8gaW5pdGlhdGUgZXhpdFxuICAgICAgbGV0IGV4aXRJID0gbWFya0dzLmV4aXQoKTtcblxuICAgICAgLy8gSWYgdGhleSBhcmUgYWxyZWFkeSBlbnRlcmVkLFxuICAgICAgaWYgKGV4aXRJLmRhdGEoKS5sZW5ndGggPT09IDAgfHwgIShjaGFuZ2UuZGF0YSB8fCBpc0FkZCB8fCBpc1JlbW92ZSkpIHtcbiAgICAgICAgZXhpdEkgPSBtYXJrR3MuZmlsdGVyKGQgPT4gam9pblNldChkKSA9PT0gXCJleGl0XCIpO1xuICAgICAgfVxuICAgICAgaWYgKGV4aXRJLmRhdGEoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGV4aXRJTWFyayA9IGV4aXRJLnNlbGVjdChgLiR7Y2hhbmdlLmNvbXBOYW1lfSA+IHBhdGhgKTtcblxuICAgICAgICAvLyBmaW5hbGl6ZSBleGl0XG4gICAgICAgIGNvbnN0IGV4aXRGTWFyayA9IGV4aXRJTWFyay50cmFuc2l0aW9uKCk7XG5cbiAgICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICAgIGV4aXRGTWFyayxcbiAgICAgICAgICBNQVJLX0FUVFJTW21hcmt0eXBlXSxcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHt9LCBzY2FsZXMsIHtcbiAgICAgICAgICAgIHByaW1hcnk6IHNjYWxlcy5maW5hbCxcbiAgICAgICAgICAgIHNlY29uZGFyeTogc2NhbGVzLmluaXRpYWxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICAgIGVuY29kZXMsXG4gICAgICAgICAgcHJldkRhdGFcbiAgICAgICAgKTtcblxuICAgICAgICBleGl0Rk1hcmtcbiAgICAgICAgICAuZHVyYXRpb24oXG4gICAgICAgICAgICAoZCwgaSkgPT5cbiAgICAgICAgICAgICAgdGltaW5ncy5maW5kKHQgPT4gdC5pZCA9PT0gam9pbktleShkLCBpLCBzZXRUeXBlKSkuZHVyYXRpb25cbiAgICAgICAgICApXG4gICAgICAgICAgLmRlbGF5KFxuICAgICAgICAgICAgKGQsIGkpID0+IHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSwgc2V0VHlwZSkpLmRlbGF5XG4gICAgICAgICAgKVxuICAgICAgICAgIC5lYXNlKGVhc2VGbilcbiAgICAgICAgICAucmVtb3ZlKClcbiAgICAgICAgICAuZW5kKClcbiAgICAgICAgICAudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGV4aXRJLnJlbW92ZSgpO1xuICAgICAgICAgICAgZG9uZShpc0FsbERvbmUgPyBcImFsbFwiIDogXCJleGl0XCIsICgpID0+IHtyZXNvbHZlKCk7fSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkb25lKGlzQWxsRG9uZSA/IFwiYWxsXCIgOiBcImV4aXRcIiwgKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZSh0aW1pbmdzLCBtYXJrR3MsIG1hcmt0eXBlcywgZW5jb2RlcywgcHJldkRhdGEpIHtcbiAgICAgIGxldCB1cGRhdGVGID0gbWFya0dzLmZpbHRlcihkID0+IGpvaW5TZXQoZCkgPT09IFwidXBkYXRlXCIpO1xuXG4gICAgICBpZiAoY2hhbmdlLmRhdGEgPT09IGZhbHNlICYmIHVwZGF0ZUYuZGF0YSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB1cGRhdGVGID0gbWFya0dzO1xuICAgICAgfVxuICAgICAgbGV0IHVwZGF0ZUZNYXJrID0gdXBkYXRlRi5zZWxlY3QoYC4ke2NoYW5nZS5jb21wTmFtZX1gKTtcbiAgICAgIGlmIChtYXJrdHlwZXMuaW5pdGlhbCAhPT0gbWFya3R5cGVzLmZpbmFsKSB7XG4gICAgICAgIHVwZGF0ZUZNYXJrLmNsYXNzZWQoYG1hcmstJHttYXJrdHlwZXMuaW5pdGlhbH1gLCBmYWxzZSk7XG4gICAgICAgIHVwZGF0ZUZNYXJrLmNsYXNzZWQoYG1hcmstJHttYXJrdHlwZXMuZmluYWx9YCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICB1cGRhdGVGTWFyayA9IHVwZGF0ZUZNYXJrLnNlbGVjdChcInBhdGhcIik7XG4gICAgICBpZiAodXBkYXRlRk1hcmsuZGF0YSgpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdXBkYXRlRk1hcmsgPSB1cGRhdGVGTWFyay50cmFuc2l0aW9uKCk7XG4gICAgICAgIGNvbnN0IHByb3BzID0gZ2V0UHJvcChtYXJrdHlwZXMpO1xuICAgICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgICAgdXBkYXRlRk1hcmssXG4gICAgICAgICAgcHJvcHMsXG4gICAgICAgICAgLy8gY2hhbmdlLmRhdGEgPyBNQVJLX0FUVFJTX0RBVEFfSU5URVJQT0xBVEVbbWFya3R5cGVdIDogTUFSS19BVFRSU1ttYXJrdHlwZV0sXG4gICAgICAgICAgc2NhbGVzLFxuICAgICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgICAgZW5jb2RlcyxcbiAgICAgICAgICBwcmV2RGF0YVxuICAgICAgICApO1xuICAgICAgICB1cGRhdGVGTWFya1xuICAgICAgICAgIC5kdXJhdGlvbihcbiAgICAgICAgICAgIChkLCBpKSA9PiB0aW1pbmdzLmZpbmQodCA9PiB0LmlkID09PSBqb2luS2V5KGQsIGkpKS5kdXJhdGlvblxuICAgICAgICAgIClcbiAgICAgICAgICAuZGVsYXkoKGQsIGkpID0+IHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSkpLmRlbGF5KVxuICAgICAgICAgIC5lYXNlKGVhc2VGbilcbiAgICAgICAgICAuZW5kKClcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKFwidXBkYXRlXCIsICgpID0+IHtyZXNvbHZlKCk7fSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkb25lKFwidXBkYXRlXCIsICgpID0+IHtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBlbnRlcihcbiAgICAgIHRpbWluZ3MsXG4gICAgICBtYXJrR3MsXG4gICAgICBtYXJrdHlwZSxcbiAgICAgIGVuY29kZUluaXRpYWwgPSBlbmNvZGVzLmluaXRpYWwuZW50ZXIsXG4gICAgICBlbmNvZGUgPSBlbmNvZGVzLmZpbmFsLmVudGVyXG4gICAgKSB7XG4gICAgICAvLyBhcHBlbmQgZ3JvdXAgbWFya1xuICAgICAgY29uc3QgZW50ZXJJRyA9IG1hcmtHcy5lbnRlcigpLmFwcGVuZChcImdcIik7XG4gICAgICBlbnRlcklHLmFwcGVuZChcInBhdGhcIikuYXR0cihcImNsYXNzXCIsIFwiYmFja2dyb3VuZFwiKTtcblxuICAgICAgLy8gYXBwZW5kIG1hcmsgbWFya1xuICAgICAgbGV0IGVudGVySU1hcmsgPSBlbnRlcklHXG4gICAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgYG1hcmstJHttYXJrdHlwZX0gcm9sZS1tYXJrICR7Y2hhbmdlLmNvbXBOYW1lfWApXG4gICAgICAgIC5hcHBlbmQoXCJwYXRoXCIpO1xuXG4gICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgIGVudGVySU1hcmssXG4gICAgICAgIE1BUktfQVRUUlNbbWFya3R5cGVdLFxuICAgICAgICB7IHByaW1hcnk6IHNjYWxlcy5pbml0aWFsLCBzZWNvbmRhcnk6IHNjYWxlcy5maW5hbCB9LFxuICAgICAgICBzaWduYWxzLmluaXRpYWwsXG4gICAgICAgIGVuY29kZUluaXRpYWxcbiAgICAgICk7XG5cbiAgICAgIC8vIElmIHRoZXkgYXJlIGFscmVhZHkgZW50ZXJlZCxcbiAgICAgIGlmIChlbnRlcklHLmRhdGEoKS5sZW5ndGggPT09IDAgfHwgIShjaGFuZ2UuZGF0YSB8fCBpc0FkZCB8fCBpc1JlbW92ZSkpIHtcbiAgICAgICAgZW50ZXJJTWFyayA9IG1hcmtHc1xuICAgICAgICAgIC5maWx0ZXIoZCA9PiBqb2luU2V0KGQpID09PSBcImVudGVyXCIpXG4gICAgICAgICAgLnNlbGVjdEFsbChgLiR7Y2hhbmdlLmNvbXBOYW1lfSA+IHBhdGhgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVudGVySU1hcmsuZGF0YSgpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgcHJldkRhdGEgPSBkMy5sb2NhbCgpO1xuICAgICAgICBlbnRlcklNYXJrLmVhY2goZnVuY3Rpb24oZCkge1xuICAgICAgICAgIHByZXZEYXRhLnNldCh0aGlzLCBkKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGVudGVyRk1hcmsgPSBlbnRlcklNYXJrLnRyYW5zaXRpb24oKTtcblxuICAgICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgICAgZW50ZXJGTWFyayxcbiAgICAgICAgICAvLyBNQVJLX0FUVFJTX0RBVEFfSU5URVJQT0xBVEVbbWFya3R5cGVdLFxuICAgICAgICAgIE1BUktfQVRUUlNbbWFya3R5cGVdLFxuICAgICAgICAgIHNjYWxlcyxcbiAgICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICAgIGVuY29kZSxcbiAgICAgICAgICBwcmV2RGF0YVxuICAgICAgICApO1xuXG4gICAgICAgIGVudGVyRk1hcmtcbiAgICAgICAgICAuZHVyYXRpb24oXG4gICAgICAgICAgICAoZCwgaSkgPT5cbiAgICAgICAgICAgICAgdGltaW5ncy5maW5kKHQgPT4gdC5pZCA9PT0gam9pbktleShkLCBpLCBcImZpbmFsXCIpKS5kdXJhdGlvblxuICAgICAgICAgIClcbiAgICAgICAgICAuZGVsYXkoXG4gICAgICAgICAgICAoZCwgaSkgPT4gdGltaW5ncy5maW5kKHQgPT4gdC5pZCA9PT0gam9pbktleShkLCBpLCBcImZpbmFsXCIpKS5kZWxheVxuICAgICAgICAgIClcbiAgICAgICAgICAuZWFzZShlYXNlRm4pXG4gICAgICAgICAgLmVuZCgpXG4gICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZShcImVudGVyXCIsICgpID0+IHtyZXNvbHZlKCk7fSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkb25lKFwiZW50ZXJcIiwgKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxufVxuZnVuY3Rpb24gYWRkTWFyayAoZDNTZWxlY3Rpb24sIGNvbXBTcGVjLCBiZWZvcmUsIG9wdCA9IHt9KSB7XG4gIGlmIChvcHQuaGFzR3JvdXApIHtcbiAgICByZXR1cm4gZDNTZWxlY3Rpb24uaW5zZXJ0KFwiZ1wiLCBiZWZvcmUpXG4gICAgICAuYXR0cihcImNsYXNzXCIsIGBtYXJrLWdyb3VwIHJvbGUtc2NvcGUgJHtjb21wU3BlYy5wYXJlbnQubmFtZX1gKTtcbiAgfVxuICByZXR1cm4gZDNTZWxlY3Rpb24uaW5zZXJ0KFwiZ1wiLCBiZWZvcmUpXG4gICAgLmF0dHIoXCJjbGFzc1wiLCBgbWFyay0ke2NvbXBTcGVjLnR5cGV9IHJvbGUtbWFyayAke2NvbXBTcGVjLm5hbWV9YCk7XG5cbn1cblxuZXhwb3J0IHsgYXJlYUxpbmVJbnRlcnBvbGF0ZSB9O1xuIiwiaW1wb3J0ICogYXMgZDMgZnJvbSBcImQzXCI7XG5pbXBvcnQge1xuICBwcm9wTWFwLFxuICBnZXRFYXNlRm4sXG4gIGZpbmRBZnRlclNpYmxpbmcsXG4gIGdldEpvaW5JbmZvLFxuICBmaW5kQ29tcCxcbiAgY29tcHV0ZVNjYWxlXG59IGZyb20gXCIuL3V0aWxcIjtcbmltcG9ydCB7IGZldGNoQXR0cmlidXRlcywgZ2V0UHJvcFZhbCB9IGZyb20gXCIuL2F0dHJpYnV0ZUZldGNoZXJcIjtcbmltcG9ydCB7IGdldFN0eWxlLCB0cmFuc2Zvcm1JdGVtIH0gZnJvbSBcIi4vdmVnYS1yZW5kZXItdXRpbFwiO1xuaW1wb3J0IHsgY29weSB9IGZyb20gXCIuLi91dGlsL3V0aWxcIjtcbmltcG9ydCB7IGNvbXB1dGVUaW1pbmcsIGVudW1TdGVwQ29tcHV0ZVRpbWluZyB9IGZyb20gXCIuL3RpbWluZ3NcIjtcbmltcG9ydCB7IERFRkFVTFRfRU5DT0RFIH0gZnJvbSBcIi4uL2RlZmF1bHRcIjtcblxuY29uc3QgSU5JVElBTF9TVEFUVVMgPSB7XG4gIHVwZGF0ZTogZmFsc2UsXG4gIGVudGVyOiBmYWxzZSxcbiAgZXhpdDogZmFsc2Vcbn07XG5cbmZ1bmN0aW9uIGFkZEF4aXMoZDNTZWxlY3Rpb24sIG5ld0F4aXNTY2VuZSwgcHJpb3IpIHtcbiAgY29uc3Qgc2NOYW1lID0gbmV3QXhpc1NjZW5lLm5hbWU7XG4gIGNvbnN0IGF4aXNTdWJHID0gZDNTZWxlY3Rpb25cbiAgICAuaW5zZXJ0KFwiZ1wiLCBwcmlvcilcbiAgICAuYXR0cihcImNsYXNzXCIsIGBtYXJrLWdyb3VwIHJvbGUtYXhpcyAke3NjTmFtZX1gKVxuICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgdHJhbnNmb3JtSXRlbShuZXdBeGlzU2NlbmUuaXRlbXNbMF0pKTtcblxuICBjb25zdCB7IGRhdHVtIH0gPSBuZXdBeGlzU2NlbmUuaXRlbXNbMF07XG4gIGlmIChkYXR1bS50aWNrcykge1xuICAgIGF4aXNTdWJHLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsIFwibWFyay1ydWxlIHJvbGUtYXhpcy10aWNrXCIpO1xuICB9XG4gIGlmIChkYXR1bS5sYWJlbHMpIHtcbiAgICBheGlzU3ViRy5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1hcmstdGV4dCByb2xlLWF4aXMtbGFiZWxcIik7XG4gIH1cbiAgaWYgKGRhdHVtLmdyaWQpIHtcbiAgICBheGlzU3ViRy5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1hcmstcnVsZSByb2xlLWF4aXMtZ3JpZFwiKTtcbiAgfVxuICBpZiAoZGF0dW0uZG9tYWluKSB7XG4gICAgYXhpc1N1YkcuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJtYXJrLXJ1bGUgcm9sZS1heGlzLWRvbWFpblwiKTtcbiAgfVxuICBpZiAoZGF0dW0udGl0bGUpIHtcbiAgICBheGlzU3ViRy5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1hcmstdGV4dCByb2xlLWF4aXMtdGl0bGVcIik7XG4gIH1cblxuICByZXR1cm4gZDNTZWxlY3Rpb247XG59XG5cbmZ1bmN0aW9uIGRvbmVNYWtlcihzdWJDb21wb25lbnRzKSB7XG4gIGNvbnN0IHRyYW5zaXRpb25TdGF0dXMgPSBzdWJDb21wb25lbnRzLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiB7XG4gICAgYWNjW2N1cnJdID0gY29weShJTklUSUFMX1NUQVRVUyk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuXG4gIHJldHVybiBmdW5jdGlvbih3aGljaCwgY2IpIHtcbiAgICBpZiAod2hpY2gubGVuZ3RoID09PSAyKSB7XG4gICAgICBpZiAod2hpY2hbMV0gPT09IFwiYWxsXCIpIHtcbiAgICAgICAgdHJhbnNpdGlvblN0YXR1c1t3aGljaFswXV0uZXhpdCA9IHRydWU7XG4gICAgICAgIHRyYW5zaXRpb25TdGF0dXNbd2hpY2hbMF1dLmVudGVyID0gdHJ1ZTtcbiAgICAgICAgdHJhbnNpdGlvblN0YXR1c1t3aGljaFswXV0udXBkYXRlID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyYW5zaXRpb25TdGF0dXNbd2hpY2hbMF1dW3doaWNoWzFdXSA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh3aGljaCA9PT0gXCJhbGxcIikge1xuICAgICAgdHJhbnNpdGlvblN0YXR1cy51cGRhdGUgPSB0cnVlO1xuICAgICAgdHJhbnNpdGlvblN0YXR1cy5lbnRlciA9IHRydWU7XG4gICAgICB0cmFuc2l0aW9uU3RhdHVzLmV4aXQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0cmFuc2l0aW9uU3RhdHVzW3doaWNoXSA9IHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgYWxsRG9uZSA9IE9iamVjdC5rZXlzKHRyYW5zaXRpb25TdGF0dXMpLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGFjYyAmJlxuICAgICAgICB0cmFuc2l0aW9uU3RhdHVzW2tleV0udXBkYXRlICYmXG4gICAgICAgIHRyYW5zaXRpb25TdGF0dXNba2V5XS5lbnRlciAmJlxuICAgICAgICB0cmFuc2l0aW9uU3RhdHVzW2tleV0uZXhpdFxuICAgICAgKTtcbiAgICB9LCB0cnVlKTtcbiAgICBpZiAoYWxsRG9uZSkge1xuICAgICAgY2IoKTtcbiAgICB9XG4gIH07XG59XG5mdW5jdGlvbiBheGlzSW50ZXJwb2xhdGUocmF3SW5mbywgc3RlcCwgdGFyZ2V0RWxtKSB7XG4gIGZ1bmN0aW9uIGpvaW5LZXlHZW4oc3ViY29tcCkge1xuICAgIHJldHVybiAoZCwgaSwgaW5pdGlhbE9yRmluYWwgPSBcImluaXRpYWxcIikgPT4ge1xuICAgICAgaWYgKCFkKSB7XG4gICAgICAgIHJldHVybiBpLnRvU3RyaW5nKCk7XG4gICAgICB9XG4gICAgICBpZiAoIWQuX19nZW1pbmlfXykge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHN0ZXAuY29tcHV0ZURhdHVtSWRbc3ViY29tcF0gPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gc3RlcC5jb21wdXRlRGF0dW1JZFtzdWJjb21wXShkLCBpKVxuICAgICAgICAgIDogc3RlcC5jb21wdXRlRGF0dW1JZFtzdWJjb21wXVtpbml0aWFsT3JGaW5hbF0oZCwgaSk7XG4gICAgICAgIC8vIHJldHVybiBzdGVwLmNvbXB1dGVEYXR1bUlkW3N1YmNvbXBdKGQsIGkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGdldEpvaW5JbmZvKGQsIGksIHN0ZXAsIFwiam9pbktleVwiKTtcbiAgICB9O1xuICB9XG4gIGNvbnN0IGpvaW5TZXQgPSAoZCwgaSkgPT4gZ2V0Sm9pbkluZm8oZCwgaSwgc3RlcCwgXCJhbmltU2V0XCIpO1xuICBjb25zdCBhbmltVmlzID0gdGFyZ2V0RWxtO1xuICBjb25zdCBlVmlldyA9IHJhd0luZm8uZVZpcy52aWV3O1xuXG4gIGNvbnN0IGRvbmUgPSBkb25lTWFrZXIoW1widGlja1wiLCBcImxhYmVsXCIsIFwiZ3JpZFwiLCBcInRpdGxlXCIsIFwiZG9tYWluXCJdKTtcblxuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgLy8gTWFyayBJbnRlcnBvbGF0ZSBEYXRhXG5cbiAgICBjb25zdCB7IGNoYW5nZSB9ID0gc3RlcDtcbiAgICBjb25zdCBlYXNlRm4gPSBnZXRFYXNlRm4oc3RlcC50aW1pbmcuZWFzZSk7XG5cbiAgICBsZXQgZGVmYXVsdERvID0gdHJ1ZTtcbiAgICBpZiAoY2hhbmdlLmVuY29kZSA9PT0gZmFsc2UpIHtcbiAgICAgIGRlZmF1bHREbyA9IGZhbHNlO1xuICAgIH1cbiAgICBsZXQgZG9UaWNrcyA9IGRlZmF1bHREbztcbiAgICBsZXQgZG9MYWJlbHMgPSBkZWZhdWx0RG87XG4gICAgbGV0IGRvQXhpc0cgPSBkZWZhdWx0RG87XG4gICAgbGV0IGRvVGl0bGUgPSBkZWZhdWx0RG87XG4gICAgbGV0IGRvRG9tYWluID0gZGVmYXVsdERvO1xuICAgIGxldCBkb0dyaWQgPSBkZWZhdWx0RG87XG5cbiAgICBpZiAoY2hhbmdlLmVuY29kZSkge1xuICAgICAgZG9UaWNrcyA9ICEoY2hhbmdlLmVuY29kZS50aWNrcyA9PT0gZmFsc2UpO1xuICAgICAgZG9MYWJlbHMgPSAhKGNoYW5nZS5lbmNvZGUubGFiZWxzID09PSBmYWxzZSk7XG4gICAgICBkb0F4aXNHID0gIShjaGFuZ2UuZW5jb2RlLmF4aXMgPT09IGZhbHNlKTtcbiAgICAgIGRvVGl0bGUgPSAhKGNoYW5nZS5lbmNvZGUudGl0bGUgPT09IGZhbHNlKTtcbiAgICAgIGRvR3JpZCA9ICEoY2hhbmdlLmVuY29kZS5ncmlkID09PSBmYWxzZSk7XG4gICAgICBkb0RvbWFpbiA9ICEoY2hhbmdlLmVuY29kZS5kb21haW4gPT09IGZhbHNlKTtcbiAgICB9XG5cbiAgICBsZXQgaXNSZW1vdmUgPSBmYWxzZTtcbiAgICBsZXQgYXhpcyA9IGQzLnNlbGVjdEFsbChgJHthbmltVmlzfSAucm9sZS1heGlzLiR7Y2hhbmdlLmNvbXBOYW1lfWApO1xuXG4gICAgY29uc3Qgc2NOYW1lID0gY2hhbmdlLmNvbXBOYW1lO1xuICAgIC8vIGNvbGxlY3QgdGhlIHNjYWxlIG9iamVjdHMgdG8gc2NhbGUgdGhlIGluaXRpYWwvZmluYWwgdmFsdWVzXG4gICAgY29uc3QgeyBzY2FsZXMgfSA9IHN0ZXA7XG4gICAgY29uc3QgeyBzaWduYWxzIH0gPSBzdGVwO1xuXG4gICAgLy8gQWRkIEF4aXNcbiAgICBpZiAoY2hhbmdlLmluaXRpYWwgPT09IG51bGwpIHtcbiAgICAgIC8vIHRvZG86IGZpbmQgd2hlcmUtdG8tYWRkIGQzU2VsZWN0aW9uIGJ5IHNlYXJjaGluZyBlVmlldy5zY2VuZWdyYXBoXG4gICAgICBjb25zdCByb290TWFyayA9IGQzLnNlbGVjdChgJHthbmltVmlzfSAubWFyay1ncm91cC5yb290IGcgZyBgKTtcbiAgICAgIGNvbnN0IHJvb3RTY2VuZSA9IGVWaWV3LnNjZW5lZ3JhcGgoKS5yb290O1xuICAgICAgY29uc3Qgc2liID0gZmluZEFmdGVyU2libGluZyhyb290U2NlbmUsIGNoYW5nZS5jb21wTmFtZSk7XG4gICAgICBhZGRBeGlzKFxuICAgICAgICByb290TWFyayxcbiAgICAgICAgZmluZENvbXAocm9vdFNjZW5lLCBzY05hbWUsIFwiYXhpc1wiKVswXSxcbiAgICAgICAgc2liID8gYC4ke3NpYi5uYW1lfWAgOiB1bmRlZmluZWRcbiAgICAgICk7XG4gICAgICBheGlzID0gZDMuc2VsZWN0QWxsKGAke2FuaW1WaXN9IC5yb2xlLWF4aXMuJHtjaGFuZ2UuY29tcE5hbWV9YCk7XG4gICAgfSBlbHNlIGlmIChjaGFuZ2UuZmluYWwgPT09IG51bGwpIHtcbiAgICAgIC8vIFJlbW92ZSBBeGlzXG4gICAgICBpc1JlbW92ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIGF4aXMgZ3JvdXBcbiAgICBpZiAoaXNSZW1vdmUpIHtcbiAgICAgIGNvbnN0IG1hbnVhbEVuY29kZSA9XG4gICAgICAgIGNoYW5nZS5lbmNvZGUgJiYgY2hhbmdlLmVuY29kZS5heGlzID8gY2hhbmdlLmVuY29kZS5heGlzLmV4aXQgOiB7fTtcbiAgICAgIGNvbnN0IGF4aXNHID0gYXhpcy5zZWxlY3QoXCJnXCIpO1xuICAgICAgY29uc3QgZkF4aXNHID0gYXhpc0cudHJhbnNpdGlvbigpO1xuICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICBmQXhpc0csXG4gICAgICAgIFtcImdyb3VwXCJdLFxuICAgICAgICBzY2FsZXMuZmluYWwsXG4gICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgIE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfRU5DT0RFLmF4aXMuYXhpcy5leGl0LCBtYW51YWxFbmNvZGUpXG4gICAgICApO1xuICAgICAgZkF4aXNHLmR1cmF0aW9uKHN0ZXAuZHVyYXRpb24pO1xuICAgIH0gZWxzZSBpZiAoZG9BeGlzRykge1xuICAgICAgY29uc3QgYXhpc0cgPSBheGlzLnNlbGVjdChcImdcIik7XG4gICAgICBheGlzRy5kYXRhKHN0ZXAubmV4dERhdGEuYXhpcyk7XG4gICAgICBjb25zdCBmQXhpc0cgPSBheGlzRy50cmFuc2l0aW9uKCk7XG4gICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgIGZBeGlzRyxcbiAgICAgICAgW1wiZ3JvdXBcIl0sXG4gICAgICAgIHNjYWxlcy5maW5hbCxcbiAgICAgICAgc2lnbmFscy5maW5hbCxcbiAgICAgICAgc3RlcC5lbmNvZGVzLmF4aXMuZmluYWwudXBkYXRlXG4gICAgICApO1xuICAgICAgZkF4aXNHXG4gICAgICAgIC5kZWxheShzdGVwLmRlbGF5KVxuICAgICAgICAuZHVyYXRpb24oc3RlcC5kdXJhdGlvbilcbiAgICAgICAgLmVhc2UoZWFzZUZuKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYWxjdWxhdGVHZXRWYWx1ZXMoZW5jb2Rlcykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdXBkYXRlOiB7XG4gICAgICAgICAgaW5pdGlhbDogKGF0dHIsIGdldFNjYWxlcywgZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29tcHV0ZWRTY2FsZXMgPSBjb21wdXRlU2NhbGUoc2NhbGVzLCBbc2NOYW1lXSwgZ2V0U2NhbGVzKTtcbiAgICAgICAgICAgIHJldHVybiBnZXRQcm9wVmFsKFxuICAgICAgICAgICAgICBhdHRyLFxuICAgICAgICAgICAgICBlbmNvZGVzLmluaXRpYWwudXBkYXRlLFxuICAgICAgICAgICAgICBjb21wdXRlZFNjYWxlcy5pbml0aWFsLFxuICAgICAgICAgICAgICBzaWduYWxzLmluaXRpYWwsXG4gICAgICAgICAgICAgIGRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBmaW5hbDogKGF0dHIsIGdldFNjYWxlcywgZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29tcHV0ZWRTY2FsZXMgPSBjb21wdXRlU2NhbGUoc2NhbGVzLCBbc2NOYW1lXSwgZ2V0U2NhbGVzKTtcbiAgICAgICAgICAgIHJldHVybiBnZXRQcm9wVmFsKFxuICAgICAgICAgICAgICBhdHRyLFxuICAgICAgICAgICAgICBlbmNvZGVzLmZpbmFsLnVwZGF0ZSxcbiAgICAgICAgICAgICAgY29tcHV0ZWRTY2FsZXMuZmluYWwsXG4gICAgICAgICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgICAgICAgIGRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlbnRlcjoge1xuICAgICAgICAgIGluaXRpYWw6IChhdHRyLCBnZXRTY2FsZXMsIGQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXB1dGVkU2NhbGVzID0gY29tcHV0ZVNjYWxlKHNjYWxlcywgW3NjTmFtZV0sIGdldFNjYWxlcyk7XG5cbiAgICAgICAgICAgIHJldHVybiBnZXRQcm9wVmFsKFxuICAgICAgICAgICAgICBhdHRyLFxuICAgICAgICAgICAgICBlbmNvZGVzLmluaXRpYWwuZW50ZXIsXG4gICAgICAgICAgICAgIGNvbXB1dGVkU2NhbGVzLmluaXRpYWxbc2NOYW1lXVxuICAgICAgICAgICAgICAgID8gY29tcHV0ZWRTY2FsZXMuaW5pdGlhbFxuICAgICAgICAgICAgICAgIDogY29tcHV0ZWRTY2FsZXMuZmluYWwsXG4gICAgICAgICAgICAgIHNpZ25hbHMuaW5pdGlhbCxcbiAgICAgICAgICAgICAgZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZpbmFsOiAoYXR0ciwgZ2V0U2NhbGVzLCBkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb21wdXRlZFNjYWxlcyA9IGNvbXB1dGVTY2FsZShzY2FsZXMsIFtzY05hbWVdLCBnZXRTY2FsZXMpO1xuICAgICAgICAgICAgcmV0dXJuIGdldFByb3BWYWwoXG4gICAgICAgICAgICAgIGF0dHIsXG4gICAgICAgICAgICAgIGVuY29kZXMuZmluYWwuZW50ZXIsXG4gICAgICAgICAgICAgIGNvbXB1dGVkU2NhbGVzLmZpbmFsLFxuICAgICAgICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICAgICAgICBkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXhpdDoge1xuICAgICAgICAgIGluaXRpYWw6IChhdHRyLCBnZXRTY2FsZXMsIGQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXB1dGVkU2NhbGVzID0gY29tcHV0ZVNjYWxlKHNjYWxlcywgW3NjTmFtZV0sIGdldFNjYWxlcyk7XG4gICAgICAgICAgICByZXR1cm4gZ2V0UHJvcFZhbChcbiAgICAgICAgICAgICAgYXR0cixcbiAgICAgICAgICAgICAgZW5jb2Rlcy5pbml0aWFsLmV4aXQsXG4gICAgICAgICAgICAgIGNvbXB1dGVkU2NhbGVzLmluaXRpYWwsXG4gICAgICAgICAgICAgIHNpZ25hbHMuaW5pdGlhbCxcbiAgICAgICAgICAgICAgZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZpbmFsOiAoYXR0ciwgZ2V0U2NhbGVzLCBkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb21wdXRlZFNjYWxlcyA9IGNvbXB1dGVTY2FsZShzY2FsZXMsIFtzY05hbWVdLCBnZXRTY2FsZXMpO1xuICAgICAgICAgICAgcmV0dXJuIGdldFByb3BWYWwoXG4gICAgICAgICAgICAgIGF0dHIsXG4gICAgICAgICAgICAgIGVuY29kZXMuZmluYWwuZXhpdCxcbiAgICAgICAgICAgICAgY29tcHV0ZWRTY2FsZXMuZmluYWwsXG4gICAgICAgICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgICAgICAgIGRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICAvLyB1cGRhdGUgdGlja1xuICAgIGlmIChkb1RpY2tzKSB7XG4gICAgICBjb25zdCB0aWNrRyA9IGF4aXMuc2VsZWN0QWxsKFwiLnJvbGUtYXhpcy10aWNrXCIpO1xuICAgICAgY29uc3QgZW5jb2RlcyA9IHN0ZXAuZW5jb2Rlcy50aWNrcztcblxuICAgICAgY29uc3QgVElDS19BVFRSUyA9IFtcInRpY2tcIl07XG5cbiAgICAgIGlmIChzdGVwLmVudW1lcmF0b3IpIHtcbiAgICAgICAgY29uc3QgZW51bWVyYXRvciA9IHN0ZXAuZW51bWVyYXRvci50aWNrO1xuICAgICAgICBjb25zdCBnZXRWYWx1ZXMgPSBjYWxjdWxhdGVHZXRWYWx1ZXMoZW5jb2Rlcyk7XG4gICAgICAgIC8vIGJpbmQgYWxsS2V5c1xuICAgICAgICBjb25zdCBuZXdCb3VuZFRpY2tzID0gdGlja0dcbiAgICAgICAgICAuc2VsZWN0QWxsKFwibGluZVwiKVxuICAgICAgICAgIC5kYXRhKGVudW1lcmF0b3IuYWxsS2V5cywgZCA9PiBkKTtcbiAgICAgICAgbmV3Qm91bmRUaWNrcy5leGl0KCkucmVtb3ZlKCk7XG4gICAgICAgIG5ld0JvdW5kVGlja3MuZW50ZXIoKS5hcHBlbmQoXCJsaW5lXCIpO1xuICAgICAgICBjb25zdCBhbGxQcm9wcyA9IFRJQ0tfQVRUUlMucmVkdWNlKChhY2MsIHByb3ApID0+IHtcbiAgICAgICAgICByZXR1cm4gYWNjLmNvbmNhdChwcm9wTWFwKHByb3ApKTtcbiAgICAgICAgfSwgW10pO1xuICAgICAgICBjb25zdCBpbml0aWFsVGlja3MgPSB0aWNrR1xuICAgICAgICAgIC5zZWxlY3RBbGwoXCJsaW5lXCIpXG4gICAgICAgICAgLmZpbHRlcihpZCA9PiBbXCJ1cGRhdGVcIiwgXCJleGl0XCJdLmluZGV4T2YoZW51bWVyYXRvci5zZXQoaWQsIDApKSA+PSAwKTtcbiAgICAgICAgYWxsUHJvcHMuZm9yRWFjaChwID0+IHtcbiAgICAgICAgICBpZiAocC50eXBlID09PSBcImF0dHJUd2VlblwiKSB7XG4gICAgICAgICAgICBjb25zdCB0ZW1wUCA9IE9iamVjdC5hc3NpZ24oe30sIHAsIHsgdHlwZTogXCJhdHRyXCIgfSk7XG4gICAgICAgICAgICBpbml0aWFsVGlja3NbdGVtcFAudHlwZV0oZ2V0U3R5bGUodGVtcFAudmFsKSwgaWQgPT5cbiAgICAgICAgICAgICAgZW51bWVyYXRvci5nZXRQcm9wVmFsKHRlbXBQLCBnZXRWYWx1ZXMsIDAsIGlkKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHAudHlwZSA9PT0gXCJ0ZXh0XCIpIHtcbiAgICAgICAgICAgIGluaXRpYWxUaWNrc1twLnR5cGVdKGlkID0+XG4gICAgICAgICAgICAgIGVudW1lcmF0b3IuZ2V0UHJvcFZhbChwLCBnZXRWYWx1ZXMsIDAsIGlkKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5pdGlhbFRpY2tzW3AudHlwZV0oZ2V0U3R5bGUocC52YWwpLCBpZCA9PlxuICAgICAgICAgICAgICBlbnVtZXJhdG9yLmdldFByb3BWYWwocCwgZ2V0VmFsdWVzLCAwLCBpZClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0aW1pbmdzID0gZW51bVN0ZXBDb21wdXRlVGltaW5nKGVudW1lcmF0b3IsIHN0ZXAudGltaW5nKTtcbiAgICAgICAgY29uc3QgdGlja3MgPSB0aWNrRy5zZWxlY3RBbGwoXCJsaW5lXCIpLnRyYW5zaXRpb24oKTtcblxuICAgICAgICBhbGxQcm9wcy5mb3JFYWNoKHAgPT4ge1xuICAgICAgICAgIGlmIChwLnR5cGUgPT09IFwiYXR0clwiKSB7XG4gICAgICAgICAgICB0aWNrcy5hdHRyVHdlZW4ocC52YWwsIGQgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gZW51bWVyYXRvci5pbnRlcnBvbGF0ZUFsb25nRW51bU1ha2VyKHAsIGdldFZhbHVlcykoZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHAudHlwZSA9PT0gXCJ0ZXh0XCIpIHtcbiAgICAgICAgICAgIHRpY2tzLnR3ZWVuKFwidGV4dFwiLCBmdW5jdGlvbihkKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHRleHRJbnRlcnBvbGF0b3IgPSBlbnVtZXJhdG9yLmludGVycG9sYXRlQWxvbmdFbnVtTWFrZXIoXG4gICAgICAgICAgICAgICAgcCxcbiAgICAgICAgICAgICAgICBnZXRWYWx1ZXNcbiAgICAgICAgICAgICAgKShkKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlubmVySFRNTCA9IHRleHRJbnRlcnBvbGF0b3IodCk7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHAudHlwZSA9PT0gXCJzdHlsZVwiKSB7XG4gICAgICAgICAgICB0aWNrcy5zdHlsZVR3ZWVuKGdldFN0eWxlKHAudmFsKSwgZCA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBlbnVtZXJhdG9yLmludGVycG9sYXRlQWxvbmdFbnVtTWFrZXIocCwgZ2V0VmFsdWVzKShkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gaW50ZXJwb2xhdGUgdGhlbVxuICAgICAgICB0aWNrc1xuICAgICAgICAgIC5kdXJhdGlvbigoZCwgaSkgPT4gdGltaW5nc1tpXS5kdXJhdGlvbilcbiAgICAgICAgICAuZGVsYXkoKGQsIGkpID0+IHRpbWluZ3NbaV0uZGVsYXkpXG4gICAgICAgICAgLmVhc2UoZWFzZUZuKVxuICAgICAgICAgIC5lbmQoKVxuICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoW1widGlja1wiLCBcImFsbFwiXSwgKCkgPT4ge1xuICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCB0aWNrcyA9IHRpY2tHLnNlbGVjdEFsbChcImxpbmVcIik7XG4gICAgICAgIGNvbnN0IGN1cnJEYXRhID0gc3RlcC5jdXJyRGF0YS50aWNrO1xuICAgICAgICBjb25zdCBuZXdEYXRhID0gc3RlcC5uZXh0RGF0YS50aWNrO1xuICAgICAgICBjb25zdCBqb2luS2V5ID0gam9pbktleUdlbihcInRpY2tcIik7XG4gICAgICAgIGNvbnN0IHRpbWluZ3MgPSBjb21wdXRlVGltaW5nKFxuICAgICAgICAgIGN1cnJEYXRhLFxuICAgICAgICAgIG5ld0RhdGEsXG4gICAgICAgICAgc3RlcC50aW1pbmcsXG4gICAgICAgICAgam9pbktleSxcbiAgICAgICAgICBqb2luU2V0XG4gICAgICAgICk7XG5cbiAgICAgICAgdGlja3MgPSB0aWNrcy5kYXRhKG5ld0RhdGEsIGQgPT4gam9pbktleShkKSk7XG4gICAgICAgIGxldCBlbnRlclRpY2tzSSA9IHRpY2tzLmVudGVyKCkuYXBwZW5kKFwibGluZVwiKTtcbiAgICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICAgIGVudGVyVGlja3NJLFxuICAgICAgICAgIFRJQ0tfQVRUUlMsXG4gICAgICAgICAgc3RlcC5zYW1lRG9tYWluRGltZW5zaW9uXG4gICAgICAgICAgICA/IHsgcHJpbWFyeTogc2NhbGVzLmluaXRpYWwsIHNlY29uZGFyeTogc2NhbGVzLmZpbmFsIH1cbiAgICAgICAgICAgIDogeyBwcmltYXJ5OiBzY2FsZXMuZmluYWwsIHNlY29uZGFyeTogc2NhbGVzLmluaXRpYWwgfSxcbiAgICAgICAgICBzaWduYWxzLmluaXRpYWwsXG4gICAgICAgICAgZW5jb2Rlcy5pbml0aWFsLmVudGVyXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGVudGVyVGlja3NJLmRhdGEoKS5sZW5ndGggPD0gMCkge1xuICAgICAgICAgIGVudGVyVGlja3NJID0gdGlja3MuZmlsdGVyKGQgPT4gam9pblNldChkKSA9PT0gXCJlbnRlclwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVudGVyVGlja3NGID0gZW50ZXJUaWNrc0kudHJhbnNpdGlvbigpO1xuICAgICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgICAgZW50ZXJUaWNrc0YsXG4gICAgICAgICAgVElDS19BVFRSUyxcbiAgICAgICAgICBzY2FsZXMuZmluYWwsXG4gICAgICAgICAgc2lnbmFscy5maW5hbCxcbiAgICAgICAgICBlbmNvZGVzLmZpbmFsLmVudGVyXG4gICAgICAgICk7XG4gICAgICAgIGVudGVyVGlja3NGXG4gICAgICAgICAgLmR1cmF0aW9uKFxuICAgICAgICAgICAgKGQsIGkpID0+XG4gICAgICAgICAgICAgIHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSwgXCJmaW5hbFwiKSkuZHVyYXRpb25cbiAgICAgICAgICApXG4gICAgICAgICAgLmRlbGF5KFxuICAgICAgICAgICAgKGQsIGkpID0+IHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSwgXCJmaW5hbFwiKSkuZGVsYXlcbiAgICAgICAgICApXG4gICAgICAgICAgLmVhc2UoZWFzZUZuKVxuICAgICAgICAgIC5lbmQoKVxuICAgICAgICAgIC50aGVuKGRvbmUoW1widGlja1wiLCBcImVudGVyXCJdLCAoKSA9PiByZXNvbHZlKCkpKTtcblxuICAgICAgICBsZXQgZXhpdFRpY2tzSSA9IHRpY2tzLmV4aXQoKTtcbiAgICAgICAgaWYgKGV4aXRUaWNrc0kuZGF0YSgpLmxlbmd0aCA8PSAwKSB7XG4gICAgICAgICAgZXhpdFRpY2tzSSA9IHRpY2tzLmZpbHRlcihkID0+IGpvaW5TZXQoZCkgPT09IFwiZXhpdFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV4aXRUaWNrc0YgPSBleGl0VGlja3NJLnRyYW5zaXRpb24oKTtcbiAgICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICAgIGV4aXRUaWNrc0YsXG4gICAgICAgICAgVElDS19BVFRSUyxcbiAgICAgICAgICAvLyBzY2FsZXMuZmluYWxbc2NOYW1lXSA/IHNjYWxlcy5maW5hbCA6IHNjYWxlcy5pbml0aWFsLFxuICAgICAgICAgIHN0ZXAuc2FtZURvbWFpbkRpbWVuc2lvblxuICAgICAgICAgICAgPyB7IHByaW1hcnk6IHNjYWxlcy5maW5hbCwgc2Vjb25kYXJ5OiBzY2FsZXMuaW5pdGlhbCB9XG4gICAgICAgICAgICA6IHsgcHJpbWFyeTogc2NhbGVzLmluaXRpYWwsIHNlY29uZGFyeTogc2NhbGVzLmZpbmFsIH0sIC8vIHsgcHJpbWFyeTogc2NhbGVzLmZpbmFsLCBzZWNvbmRhcnk6IHNjYWxlcy5pbml0aWFsIH0sXG4gICAgICAgICAgc2lnbmFscy5maW5hbCxcbiAgICAgICAgICBlbmNvZGVzLmZpbmFsLmV4aXRcbiAgICAgICAgKTtcbiAgICAgICAgZXhpdFRpY2tzRlxuICAgICAgICAgIC5kdXJhdGlvbihcbiAgICAgICAgICAgIChkLCBpKSA9PlxuICAgICAgICAgICAgICB0aW1pbmdzLmZpbmQodCA9PiB0LmlkID09PSBqb2luS2V5KGQsIGksIFwiaW5pdGlhbFwiKSkuZHVyYXRpb25cbiAgICAgICAgICApXG4gICAgICAgICAgLmRlbGF5KFxuICAgICAgICAgICAgKGQsIGkpID0+IHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSwgXCJpbml0aWFsXCIpKS5kZWxheVxuICAgICAgICAgIClcbiAgICAgICAgICAuZWFzZShlYXNlRm4pXG4gICAgICAgICAgLnJlbW92ZSgpXG4gICAgICAgICAgLmVuZCgpXG4gICAgICAgICAgLnRoZW4oZG9uZShbXCJ0aWNrXCIsIFwiZXhpdFwiXSwgKCkgPT4gcmVzb2x2ZSgpKSk7XG5cbiAgICAgICAgaWYgKHRydWUgJiYgdGlja3MuZGF0YSgpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aWNrcyA9IHRpY2tzLmZpbHRlcihkID0+IGpvaW5TZXQoZCkgPT09IFwidXBkYXRlXCIpLnRyYW5zaXRpb24oKTtcbiAgICAgICAgICAvLyBmaW5hbGl6ZSB0aGUgdXBkYXRlIHNldCBvZiB0aGUgdGlja3NcbiAgICAgICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgICAgICB0aWNrcyxcbiAgICAgICAgICAgIFRJQ0tfQVRUUlMsXG4gICAgICAgICAgICBzY2FsZXMuZmluYWwsXG4gICAgICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICAgICAgZW5jb2Rlcy5maW5hbC51cGRhdGVcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdGlja3NcbiAgICAgICAgICAgIC5kdXJhdGlvbihcbiAgICAgICAgICAgICAgKGQsIGkpID0+IHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSkpLmR1cmF0aW9uXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuZGVsYXkoKGQsIGkpID0+IHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSkpLmRlbGF5KVxuICAgICAgICAgICAgLmVhc2UoZWFzZUZuKVxuICAgICAgICAgICAgLmVuZCgpXG4gICAgICAgICAgICAudGhlbihkb25lKFtcInRpY2tcIiwgXCJ1cGRhdGVcIl0sICgpID0+IHJlc29sdmUoKSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRvbmUoW1widGlja1wiLCBcInVwZGF0ZVwiXSwgKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkb25lKFtcInRpY2tcIiwgXCJlbnRlclwiXSwgKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICAgIGRvbmUoW1widGlja1wiLCBcImV4aXRcIl0sICgpID0+IHJlc29sdmUoKSk7XG4gICAgICBkb25lKFtcInRpY2tcIiwgXCJ1cGRhdGVcIl0sICgpID0+IHJlc29sdmUoKSk7XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIGxhYmVsXG4gICAgY29uc3QgbGFiZWxHID0gYXhpcy5zZWxlY3RBbGwoXCIucm9sZS1heGlzLWxhYmVsXCIpO1xuXG4gICAgY29uc3QgTEFCRUxfQVRUUlMgPSBbXCJ0ZXh0XCIsIFwiYWxpZ25cIl07XG4gICAgLy8gY29uc3QgTEFCRUxfQVRUUlMgPSBbIFwidGV4dFwiIF07XG5cbiAgICBpZiAoIWxhYmVsRy5lbXB0eSgpICYmIGRvTGFiZWxzKSB7XG4gICAgICBjb25zdCBlbmNvZGVzID0gc3RlcC5lbmNvZGVzLmxhYmVscztcblxuICAgICAgaWYgKHN0ZXAuZW51bWVyYXRvcikge1xuICAgICAgICBjb25zdCBlbnVtZXJhdG9yID0gc3RlcC5lbnVtZXJhdG9yLmxhYmVsO1xuXG4gICAgICAgIGNvbnN0IGdldFZhbHVlcyA9IGNhbGN1bGF0ZUdldFZhbHVlcyhlbmNvZGVzKTtcbiAgICAgICAgLy8gYmluZCBhbGxLZXlzXG4gICAgICAgIGNvbnN0IG5ld0JvdW5kTGFiZWxzID0gbGFiZWxHXG4gICAgICAgICAgLnNlbGVjdEFsbChcInRleHRcIilcbiAgICAgICAgICAuZGF0YShlbnVtZXJhdG9yLmFsbEtleXMsIGQgPT4gZCk7XG4gICAgICAgIG5ld0JvdW5kTGFiZWxzLmV4aXQoKS5yZW1vdmUoKTtcbiAgICAgICAgbmV3Qm91bmRMYWJlbHMuZW50ZXIoKS5hcHBlbmQoXCJ0ZXh0XCIpO1xuICAgICAgICBjb25zdCBhbGxQcm9wcyA9IExBQkVMX0FUVFJTLnJlZHVjZSgoYWNjLCBwcm9wKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQocHJvcE1hcChwcm9wKSk7XG4gICAgICAgIH0sIFtdKTtcbiAgICAgICAgY29uc3QgaW5pdGlhbExhYmVscyA9IGxhYmVsR1xuICAgICAgICAgIC5zZWxlY3RBbGwoXCJ0ZXh0XCIpXG4gICAgICAgICAgLmZpbHRlcihpZCA9PiBbXCJ1cGRhdGVcIiwgXCJleGl0XCJdLmluZGV4T2YoZW51bWVyYXRvci5zZXQoaWQsIDApKSA+PSAwKTtcbiAgICAgICAgYWxsUHJvcHMuZm9yRWFjaChwID0+IHtcbiAgICAgICAgICBpZiAocC50eXBlID09PSBcImF0dHJUd2VlblwiKSB7XG4gICAgICAgICAgICBjb25zdCB0ZW1wUCA9IE9iamVjdC5hc3NpZ24oe30sIHAsIHsgdHlwZTogXCJhdHRyXCIgfSk7XG4gICAgICAgICAgICBpbml0aWFsTGFiZWxzW3RlbXBQLnR5cGVdKGdldFN0eWxlKHRlbXBQLnZhbCksIGlkID0+XG4gICAgICAgICAgICAgIGVudW1lcmF0b3IuZ2V0UHJvcFZhbCh0ZW1wUCwgZ2V0VmFsdWVzLCAwLCBpZClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIGlmIChwLnR5cGUgPT09IFwidGV4dFwiKSB7XG4gICAgICAgICAgICBpbml0aWFsTGFiZWxzW3AudHlwZV0oaWQgPT5cbiAgICAgICAgICAgICAgZW51bWVyYXRvci5nZXRQcm9wVmFsKHAsIGdldFZhbHVlcywgMCwgaWQpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbml0aWFsTGFiZWxzW3AudHlwZV0oZ2V0U3R5bGUocC52YWwpLCBpZCA9PlxuICAgICAgICAgICAgICBlbnVtZXJhdG9yLmdldFByb3BWYWwocCwgZ2V0VmFsdWVzLCAwLCBpZClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBsYWJlbHMgPSBsYWJlbEcuc2VsZWN0QWxsKFwidGV4dFwiKS50cmFuc2l0aW9uKCk7XG4gICAgICAgIGNvbnN0IHRpbWluZ3MgPSBlbnVtU3RlcENvbXB1dGVUaW1pbmcoZW51bWVyYXRvciwgc3RlcC50aW1pbmcpO1xuICAgICAgICBhbGxQcm9wcy5mb3JFYWNoKHAgPT4ge1xuICAgICAgICAgIGlmIChwLnR5cGUgPT09IFwiYXR0clwiKSB7XG4gICAgICAgICAgICBsYWJlbHMuYXR0clR3ZWVuKHAudmFsLCBkID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGVudW1lcmF0b3IuaW50ZXJwb2xhdGVBbG9uZ0VudW1NYWtlcihwLCBnZXRWYWx1ZXMpKGQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChwLnR5cGUgPT09IFwidGV4dFwiKSB7XG4gICAgICAgICAgICBsYWJlbHMudHdlZW4oXCJ0ZXh0XCIsIGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICAgICAgY29uc3QgdGV4dEludGVycG9sYXRvciA9IGVudW1lcmF0b3IuaW50ZXJwb2xhdGVBbG9uZ0VudW1NYWtlcihcbiAgICAgICAgICAgICAgICBwLFxuICAgICAgICAgICAgICAgIGdldFZhbHVlc1xuICAgICAgICAgICAgICApKGQpO1xuICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5uZXJIVE1MID0gdGV4dEludGVycG9sYXRvcih0KTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAocC50eXBlID09PSBcInN0eWxlXCIpIHtcbiAgICAgICAgICAgIGxhYmVscy5zdHlsZVR3ZWVuKGdldFN0eWxlKHAudmFsKSwgZCA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBlbnVtZXJhdG9yLmludGVycG9sYXRlQWxvbmdFbnVtTWFrZXIocCwgZ2V0VmFsdWVzKShkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gaW50ZXJwb2xhdGUgdGhlbVxuICAgICAgICBsYWJlbHNcbiAgICAgICAgICAuZHVyYXRpb24oKGQsIGkpID0+IHRpbWluZ3NbaV0uZHVyYXRpb24pXG4gICAgICAgICAgLmRlbGF5KChkLCBpKSA9PiB0aW1pbmdzW2ldLmRlbGF5KVxuICAgICAgICAgIC5lYXNlKGVhc2VGbilcbiAgICAgICAgICAuZW5kKClcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKFtcImxhYmVsXCIsIFwiYWxsXCJdLCAoKSA9PiB7XG4gICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGxhYmVscyA9IGxhYmVsRy5zZWxlY3RBbGwoXCJ0ZXh0XCIpO1xuICAgICAgICBjb25zdCBjdXJyRGF0YSA9IHN0ZXAuY3VyckRhdGEubGFiZWw7XG4gICAgICAgIGNvbnN0IG5ld0RhdGEgPSBzdGVwLm5leHREYXRhLmxhYmVsO1xuICAgICAgICBjb25zdCBqb2luS2V5ID0gam9pbktleUdlbihcImxhYmVsXCIpO1xuICAgICAgICBjb25zdCB0aW1pbmdzID0gY29tcHV0ZVRpbWluZyhcbiAgICAgICAgICBjdXJyRGF0YSxcbiAgICAgICAgICBuZXdEYXRhLFxuICAgICAgICAgIHN0ZXAudGltaW5nLFxuICAgICAgICAgIGpvaW5LZXksXG4gICAgICAgICAgam9pblNldFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBwcmV2RGF0YSA9IGQzLmxvY2FsKCk7XG4gICAgICAgIGxhYmVscy5lYWNoKGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICBwcmV2RGF0YS5zZXQodGhpcywgZCk7XG4gICAgICAgIH0pO1xuICAgICAgICBsYWJlbHMgPSBsYWJlbHMuZGF0YShuZXdEYXRhLCBkID0+IGpvaW5LZXkoZCkpO1xuXG4gICAgICAgIGxldCBlbnRlckxhYmVsSSA9IGxhYmVscy5lbnRlcigpLmFwcGVuZChcInRleHRcIik7XG4gICAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgICBlbnRlckxhYmVsSSxcbiAgICAgICAgICBMQUJFTF9BVFRSUyxcbiAgICAgICAgICBzdGVwLnNhbWVEb21haW5EaW1lbnNpb25cbiAgICAgICAgICAgID8geyBwcmltYXJ5OiBzY2FsZXMuaW5pdGlhbCwgc2Vjb25kYXJ5OiBzY2FsZXMuZmluYWwgfVxuICAgICAgICAgICAgOiB7IHByaW1hcnk6IHNjYWxlcy5maW5hbCwgc2Vjb25kYXJ5OiBzY2FsZXMuaW5pdGlhbCB9LCAvLyB7IHByaW1hcnk6IHNjYWxlcy5maW5hbCwgc2Vjb25kYXJ5OiBzY2FsZXMuaW5pdGlhbCB9LFxuICAgICAgICAgIHNpZ25hbHMuaW5pdGlhbCxcbiAgICAgICAgICBlbmNvZGVzLmluaXRpYWwuZW50ZXJcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBlbnRlcmVkIGxhYmVsc1xuXG4gICAgICAgIGlmIChlbnRlckxhYmVsSS5kYXRhKCkubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICBlbnRlckxhYmVsSSA9IGxhYmVscy5maWx0ZXIoZCA9PiBqb2luU2V0KGQpID09PSBcImVudGVyXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZW50ZXJMYWJlbEYgPSBlbnRlckxhYmVsSS50cmFuc2l0aW9uKCk7XG4gICAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgICBlbnRlckxhYmVsRixcbiAgICAgICAgICBMQUJFTF9BVFRSUyxcbiAgICAgICAgICBzY2FsZXMuZmluYWwsXG4gICAgICAgICAgc2lnbmFscy5maW5hbCxcbiAgICAgICAgICBlbmNvZGVzLmZpbmFsLmVudGVyXG4gICAgICAgICk7XG4gICAgICAgIGVudGVyTGFiZWxGXG4gICAgICAgICAgLmR1cmF0aW9uKFxuICAgICAgICAgICAgKGQsIGkpID0+XG4gICAgICAgICAgICAgIHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSwgXCJmaW5hbFwiKSkuZHVyYXRpb25cbiAgICAgICAgICApXG4gICAgICAgICAgLmRlbGF5KFxuICAgICAgICAgICAgKGQsIGkpID0+IHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSwgXCJmaW5hbFwiKSkuZGVsYXlcbiAgICAgICAgICApXG4gICAgICAgICAgLmVhc2UoZWFzZUZuKVxuICAgICAgICAgIC5lbmQoKVxuICAgICAgICAgIC50aGVuKGRvbmUoW1wibGFiZWxcIiwgXCJlbnRlclwiXSwgKCkgPT4gcmVzb2x2ZSgpKSk7XG5cbiAgICAgICAgLy8gZXhpdCBsYWJlbHNcbiAgICAgICAgbGV0IGV4aXRMYWJlbEkgPSBsYWJlbHMuZXhpdCgpO1xuICAgICAgICBpZiAoZXhpdExhYmVsSS5kYXRhKCkubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICBleGl0TGFiZWxJID0gbGFiZWxzLmZpbHRlcihkID0+IGpvaW5TZXQoZCkgPT09IFwiZXhpdFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV4aXRMYWJlbEYgPSBleGl0TGFiZWxJLnRyYW5zaXRpb24oKTtcbiAgICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICAgIGV4aXRMYWJlbEYsXG4gICAgICAgICAgTEFCRUxfQVRUUlMsXG4gICAgICAgICAgc3RlcC5zYW1lRG9tYWluRGltZW5zaW9uXG4gICAgICAgICAgICA/IHsgcHJpbWFyeTogc2NhbGVzLmZpbmFsLCBzZWNvbmRhcnk6IHNjYWxlcy5pbml0aWFsIH1cbiAgICAgICAgICAgIDogeyBwcmltYXJ5OiBzY2FsZXMuaW5pdGlhbCwgc2Vjb25kYXJ5OiBzY2FsZXMuZmluYWwgfSwgLy8geyBwcmltYXJ5OiBzY2FsZXMuZmluYWwsIHNlY29uZGFyeTogc2NhbGVzLmluaXRpYWwgfSxcbiAgICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICAgIGVuY29kZXMuZmluYWwuZXhpdCxcbiAgICAgICAgICBwcmV2RGF0YVxuICAgICAgICApO1xuICAgICAgICBleGl0TGFiZWxGXG4gICAgICAgICAgLmR1cmF0aW9uKFxuICAgICAgICAgICAgKGQsIGkpID0+XG4gICAgICAgICAgICAgIHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSwgXCJpbml0aWFsXCIpKS5kdXJhdGlvblxuICAgICAgICAgIClcbiAgICAgICAgICAuZGVsYXkoXG4gICAgICAgICAgICAoZCwgaSkgPT4gdGltaW5ncy5maW5kKHQgPT4gdC5pZCA9PT0gam9pbktleShkLCBpLCBcImluaXRpYWxcIikpLmRlbGF5XG4gICAgICAgICAgKVxuICAgICAgICAgIC5lYXNlKGVhc2VGbilcbiAgICAgICAgICAucmVtb3ZlKClcbiAgICAgICAgICAuZW5kKClcbiAgICAgICAgICAudGhlbihkb25lKFtcImxhYmVsXCIsIFwiZXhpdFwiXSwgKCkgPT4gcmVzb2x2ZSgpKSk7XG5cbiAgICAgICAgLy8gVG9kbyB1cGRhdGUgbGFiZWxzISFcbiAgICAgICAgaWYgKHRydWUgJiYgbGFiZWxzLmRhdGEoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgbGFiZWxzID0gbGFiZWxzLmZpbHRlcihkID0+IGpvaW5TZXQoZCkgPT09IFwidXBkYXRlXCIpLnRyYW5zaXRpb24oKTtcbiAgICAgICAgICAvLyBmaW5hbGl6ZSB0aGUgdXBkYXRlIHNldCBvZiB0aGUgbGFiZWxzXG4gICAgICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICAgICAgbGFiZWxzLFxuICAgICAgICAgICAgTEFCRUxfQVRUUlMsXG4gICAgICAgICAgICBzY2FsZXMuZmluYWwsXG4gICAgICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICAgICAgZW5jb2Rlcy5maW5hbC51cGRhdGUsXG4gICAgICAgICAgICBwcmV2RGF0YVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBsYWJlbHNcbiAgICAgICAgICAgIC5kdXJhdGlvbihcbiAgICAgICAgICAgICAgKGQsIGkpID0+IHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSkpLmR1cmF0aW9uXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuZGVsYXkoKGQsIGkpID0+IHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSkpLmRlbGF5KVxuICAgICAgICAgICAgLmVhc2UoZWFzZUZuKVxuICAgICAgICAgICAgLmVuZCgpXG4gICAgICAgICAgICAudGhlbihkb25lKFtcImxhYmVsXCIsIFwidXBkYXRlXCJdLCAoKSA9PiByZXNvbHZlKCkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkb25lKFtcImxhYmVsXCIsIFwidXBkYXRlXCJdLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRvbmUoW1wibGFiZWxcIiwgXCJlbnRlclwiXSwgKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICAgIGRvbmUoW1wibGFiZWxcIiwgXCJleGl0XCJdLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgZG9uZShbXCJsYWJlbFwiLCBcInVwZGF0ZVwiXSwgKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICB9XG5cbiAgICAvLyB1cGRhdGUgZ3JpZFxuICAgIGxldCBncmlkRyA9IGF4aXMuc2VsZWN0QWxsKFwiLnJvbGUtYXhpcy1ncmlkXCIpO1xuICAgIGNvbnN0IEdSSURfQVRUUlMgPSBbXCJncmlkXCJdO1xuXG4gICAgaWYgKFxuICAgICAgKCFzdGVwLmNoYW5nZS5pbml0aWFsIHx8IHN0ZXAuY2hhbmdlLmluaXRpYWwuZ3JpZCA9PT0gZmFsc2UpICYmXG4gICAgICBzdGVwLmNoYW5nZS5maW5hbCAmJlxuICAgICAgc3RlcC5jaGFuZ2UuZmluYWwuZ3JpZCA9PT0gdHJ1ZVxuICAgICkge1xuICAgICAgLy8gYWRkIGdyaWRcbiAgICAgIGdyaWRHID0gYXhpc1xuICAgICAgICAuc2VsZWN0KFwiZ1wiKVxuICAgICAgICAuc2VsZWN0KFwiZ1wiKVxuICAgICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwibWFyay1ydWxlIHJvbGUtYXhpcy1ncmlkXCIpO1xuICAgIH1cbiAgICBpZiAoIWdyaWRHLmVtcHR5KCkgJiYgZG9HcmlkKSB7XG4gICAgICBjb25zdCBlbmNvZGVzID0gc3RlcC5lbmNvZGVzLmdyaWQ7XG5cbiAgICAgIGlmIChzdGVwLmVudW1lcmF0b3IpIHtcbiAgICAgICAgY29uc3QgZW51bWVyYXRvciA9IHN0ZXAuZW51bWVyYXRvci5ncmlkO1xuXG4gICAgICAgIGNvbnN0IGdldFZhbHVlcyA9IGNhbGN1bGF0ZUdldFZhbHVlcyhlbmNvZGVzKTtcblxuICAgICAgICAvLyBiaW5kIGFsbEtleXNcbiAgICAgICAgY29uc3QgbmV3Qm91bmRHcmlkcyA9IGdyaWRHXG4gICAgICAgICAgLnNlbGVjdEFsbChcImxpbmVcIilcbiAgICAgICAgICAuZGF0YShlbnVtZXJhdG9yLmFsbEtleXMsIGQgPT4gZCk7XG4gICAgICAgIG5ld0JvdW5kR3JpZHMuZXhpdCgpLnJlbW92ZSgpO1xuICAgICAgICBuZXdCb3VuZEdyaWRzLmVudGVyKCkuYXBwZW5kKFwibGluZVwiKTtcbiAgICAgICAgY29uc3QgaW5pdGlhbEdyaWRzID0gZ3JpZEdcbiAgICAgICAgICAuc2VsZWN0QWxsKFwibGluZVwiKVxuICAgICAgICAgIC5maWx0ZXIoaWQgPT4gW1widXBkYXRlXCIsIFwiZXhpdFwiXS5pbmRleE9mKGVudW1lcmF0b3Iuc2V0KGlkLCAwKSkgPj0gMCk7XG4gICAgICAgIC8vIGluaXRcbiAgICAgICAgY29uc3QgYWxsUHJvcHMgPSBHUklEX0FUVFJTLnJlZHVjZSgoYWNjLCBwcm9wKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQocHJvcE1hcChwcm9wKSk7XG4gICAgICAgIH0sIFtdKTtcblxuICAgICAgICBhbGxQcm9wcy5mb3JFYWNoKHAgPT4ge1xuICAgICAgICAgIGlmIChwLnR5cGUgPT09IFwiYXR0clR3ZWVuXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHRlbXBQID0gT2JqZWN0LmFzc2lnbih7fSwgcCwgeyB0eXBlOiBcImF0dHJcIiB9KTtcbiAgICAgICAgICAgIGluaXRpYWxHcmlkc1t0ZW1wUC50eXBlXShnZXRTdHlsZSh0ZW1wUC52YWwpLCBpZCA9PlxuICAgICAgICAgICAgICBlbnVtZXJhdG9yLmdldFByb3BWYWwodGVtcFAsIGdldFZhbHVlcywgMCwgaWQpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSBpZiAocC50eXBlID09PSBcInRleHRcIikge1xuICAgICAgICAgICAgaW5pdGlhbEdyaWRzW3AudHlwZV0oaWQgPT5cbiAgICAgICAgICAgICAgZW51bWVyYXRvci5nZXRQcm9wVmFsKHAsIGdldFZhbHVlcywgMCwgaWQpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbml0aWFsR3JpZHNbcC50eXBlXShnZXRTdHlsZShwLnZhbCksIGlkID0+XG4gICAgICAgICAgICAgIGVudW1lcmF0b3IuZ2V0UHJvcFZhbChwLCBnZXRWYWx1ZXMsIDAsIGlkKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGdyaWRzID0gZ3JpZEcuc2VsZWN0QWxsKFwibGluZVwiKS50cmFuc2l0aW9uKCk7XG4gICAgICAgIGNvbnN0IHRpbWluZ3MgPSBlbnVtU3RlcENvbXB1dGVUaW1pbmcoZW51bWVyYXRvciwgc3RlcC50aW1pbmcpO1xuXG4gICAgICAgIGFsbFByb3BzLmZvckVhY2gocCA9PiB7XG4gICAgICAgICAgaWYgKHAudHlwZSA9PT0gXCJhdHRyXCIpIHtcbiAgICAgICAgICAgIGdyaWRzLmF0dHJUd2VlbihwLnZhbCwgZCA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBlbnVtZXJhdG9yLmludGVycG9sYXRlQWxvbmdFbnVtTWFrZXIocCwgZ2V0VmFsdWVzKShkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAocC50eXBlID09PSBcInRleHRcIikge1xuICAgICAgICAgICAgZ3JpZHMudHdlZW4oXCJ0ZXh0XCIsIGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICAgICAgY29uc3QgdGV4dEludGVycG9sYXRvciA9IGVudW1lcmF0b3IuaW50ZXJwb2xhdGVBbG9uZ0VudW1NYWtlcihcbiAgICAgICAgICAgICAgICBwLFxuICAgICAgICAgICAgICAgIGdldFZhbHVlc1xuICAgICAgICAgICAgICApKGQpO1xuICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5uZXJIVE1MID0gdGV4dEludGVycG9sYXRvcih0KTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAocC50eXBlID09PSBcInN0eWxlXCIpIHtcbiAgICAgICAgICAgIGdyaWRzLnN0eWxlVHdlZW4oZ2V0U3R5bGUocC52YWwpLCBkID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGVudW1lcmF0b3IuaW50ZXJwb2xhdGVBbG9uZ0VudW1NYWtlcihwLCBnZXRWYWx1ZXMpKGQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBpbnRlcnBvbGF0ZSB0aGVtXG4gICAgICAgIGdyaWRzXG4gICAgICAgICAgLmR1cmF0aW9uKChkLCBpKSA9PiB0aW1pbmdzW2ldLmR1cmF0aW9uKVxuICAgICAgICAgIC5kZWxheSgoZCwgaSkgPT4gdGltaW5nc1tpXS5kZWxheSlcbiAgICAgICAgICAuZWFzZShlYXNlRm4pXG4gICAgICAgICAgLmVuZCgpXG4gICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZShbXCJncmlkXCIsIFwiYWxsXCJdLCAoKSA9PiB7XG4gICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGdyaWRzID0gZ3JpZEcuc2VsZWN0QWxsKFwibGluZVwiKTtcbiAgICAgICAgY29uc3QgY3VyckRhdGEgPSBzdGVwLmN1cnJEYXRhLmdyaWQ7XG4gICAgICAgIGNvbnN0IG5ld0RhdGEgPSBzdGVwLm5leHREYXRhLmdyaWQ7XG4gICAgICAgIGNvbnN0IGpvaW5LZXkgPSBqb2luS2V5R2VuKFwiZ3JpZFwiKTtcbiAgICAgICAgY29uc3QgdGltaW5ncyA9IGNvbXB1dGVUaW1pbmcoXG4gICAgICAgICAgY3VyckRhdGEsXG4gICAgICAgICAgbmV3RGF0YSxcbiAgICAgICAgICBzdGVwLnRpbWluZyxcbiAgICAgICAgICBqb2luS2V5LFxuICAgICAgICAgIGpvaW5TZXRcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcHJldkRhdGEgPSBkMy5sb2NhbCgpO1xuICAgICAgICBncmlkcy5lYWNoKGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICBwcmV2RGF0YS5zZXQodGhpcywgZCk7XG4gICAgICAgIH0pO1xuICAgICAgICBncmlkcyA9IGdyaWRzLmRhdGEobmV3RGF0YSwgZCA9PiBqb2luS2V5KGQpKTtcbiAgICAgICAgbGV0IGVudGVyR3JpZEkgPSBncmlkcy5lbnRlcigpLmFwcGVuZChcImxpbmVcIik7XG4gICAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgICBlbnRlckdyaWRJLFxuICAgICAgICAgIEdSSURfQVRUUlMsXG4gICAgICAgICAgLy8gc2NhbGVzLmluaXRpYWxbc2NOYW1lXSA/IHNjYWxlcy5pbml0aWFsIDogc2NhbGVzLmZpbmFsLFxuICAgICAgICAgIHN0ZXAuc2FtZURvbWFpbkRpbWVuc2lvblxuICAgICAgICAgICAgPyB7IHByaW1hcnk6IHNjYWxlcy5pbml0aWFsLCBzZWNvbmRhcnk6IHNjYWxlcy5maW5hbCB9XG4gICAgICAgICAgICA6IHsgcHJpbWFyeTogc2NhbGVzLmZpbmFsLCBzZWNvbmRhcnk6IHNjYWxlcy5pbml0aWFsIH0sXG4gICAgICAgICAgc2lnbmFscy5pbml0aWFsLFxuICAgICAgICAgIGVuY29kZXMuaW5pdGlhbC5lbnRlclxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChlbnRlckdyaWRJLmRhdGEoKS5sZW5ndGggPD0gMCkge1xuICAgICAgICAgIGVudGVyR3JpZEkgPSBncmlkcy5maWx0ZXIoZCA9PiBqb2luU2V0KGQpID09PSBcImVudGVyXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZW50ZXJHcmlkRiA9IGVudGVyR3JpZEkudHJhbnNpdGlvbigpO1xuICAgICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgICAgZW50ZXJHcmlkRixcbiAgICAgICAgICBHUklEX0FUVFJTLFxuICAgICAgICAgIHNjYWxlcy5maW5hbCxcbiAgICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICAgIGVuY29kZXMuZmluYWwuZW50ZXJcbiAgICAgICAgKTtcbiAgICAgICAgZW50ZXJHcmlkRlxuICAgICAgICAgIC5kdXJhdGlvbihcbiAgICAgICAgICAgIChkLCBpKSA9PlxuICAgICAgICAgICAgICB0aW1pbmdzLmZpbmQodCA9PiB0LmlkID09PSBqb2luS2V5KGQsIGksIFwiZmluYWxcIikpLmR1cmF0aW9uXG4gICAgICAgICAgKVxuICAgICAgICAgIC5kZWxheShcbiAgICAgICAgICAgIChkLCBpKSA9PiB0aW1pbmdzLmZpbmQodCA9PiB0LmlkID09PSBqb2luS2V5KGQsIGksIFwiZmluYWxcIikpLmRlbGF5XG4gICAgICAgICAgKVxuICAgICAgICAgIC5lYXNlKGVhc2VGbilcbiAgICAgICAgICAuZW5kKClcbiAgICAgICAgICAudGhlbihkb25lKFtcImdyaWRcIiwgXCJlbnRlclwiXSwgKCkgPT4gcmVzb2x2ZSgpKSk7XG5cbiAgICAgICAgbGV0IGV4aXRHcmlkSSA9IGdyaWRzLmV4aXQoKTtcbiAgICAgICAgaWYgKGV4aXRHcmlkSS5kYXRhKCkubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICBleGl0R3JpZEkgPSBncmlkcy5maWx0ZXIoZCA9PiBqb2luU2V0KGQpID09PSBcImV4aXRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBleGl0R3JpZEYgPSBleGl0R3JpZEkudHJhbnNpdGlvbigpO1xuXG4gICAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgICBleGl0R3JpZEYsXG4gICAgICAgICAgR1JJRF9BVFRSUyxcbiAgICAgICAgICBzdGVwLnNhbWVEb21haW5EaW1lbnNpb25cbiAgICAgICAgICAgID8geyBwcmltYXJ5OiBzY2FsZXMuZmluYWwsIHNlY29uZGFyeTogc2NhbGVzLmluaXRpYWwgfVxuICAgICAgICAgICAgOiB7IHByaW1hcnk6IHNjYWxlcy5pbml0aWFsLCBzZWNvbmRhcnk6IHNjYWxlcy5maW5hbCB9LFxuICAgICAgICAgIC8vIHNjYWxlcy5maW5hbFtzY05hbWVdID8gc2NhbGVzLmZpbmFsIDogc2NhbGVzLmluaXRpYWwsXG4gICAgICAgICAgc2lnbmFscy5maW5hbCxcbiAgICAgICAgICBlbmNvZGVzLmZpbmFsLmV4aXQsXG4gICAgICAgICAgcHJldkRhdGFcbiAgICAgICAgKTtcbiAgICAgICAgZXhpdEdyaWRGXG4gICAgICAgICAgLmR1cmF0aW9uKFxuICAgICAgICAgICAgKGQsIGkpID0+XG4gICAgICAgICAgICAgIHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSwgXCJpbml0aWFsXCIpKS5kdXJhdGlvblxuICAgICAgICAgIClcbiAgICAgICAgICAuZGVsYXkoXG4gICAgICAgICAgICAoZCwgaSkgPT4gdGltaW5ncy5maW5kKHQgPT4gdC5pZCA9PT0gam9pbktleShkLCBpLCBcImluaXRpYWxcIikpLmRlbGF5XG4gICAgICAgICAgKVxuICAgICAgICAgIC5lYXNlKGVhc2VGbilcbiAgICAgICAgICAucmVtb3ZlKClcbiAgICAgICAgICAuZW5kKClcbiAgICAgICAgICAudGhlbihkb25lKFtcImdyaWRcIiwgXCJleGl0XCJdLCAoKSA9PiByZXNvbHZlKCkpKTtcblxuICAgICAgICBncmlkcyA9IGdyaWRzLmZpbHRlcihkID0+IGpvaW5TZXQoZCkgPT09IFwidXBkYXRlXCIpLnRyYW5zaXRpb24oKTtcbiAgICAgICAgLy8gZmluYWxpemUgdGhlIHVwZGF0ZSBzZXQgb2YgdGhlIGdyaWRzXG4gICAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgICBncmlkcyxcbiAgICAgICAgICBHUklEX0FUVFJTLFxuICAgICAgICAgIHNjYWxlcy5maW5hbCxcbiAgICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICAgIGVuY29kZXMuZmluYWwudXBkYXRlLFxuICAgICAgICAgIHByZXZEYXRhXG4gICAgICAgICk7XG5cbiAgICAgICAgZ3JpZHNcbiAgICAgICAgICAuZHVyYXRpb24oXG4gICAgICAgICAgICAoZCwgaSkgPT4gdGltaW5ncy5maW5kKHQgPT4gdC5pZCA9PT0gam9pbktleShkLCBpKSkuZHVyYXRpb25cbiAgICAgICAgICApXG4gICAgICAgICAgLmRlbGF5KChkLCBpKSA9PiB0aW1pbmdzLmZpbmQodCA9PiB0LmlkID09PSBqb2luS2V5KGQsIGkpKS5kZWxheSlcbiAgICAgICAgICAuZWFzZShlYXNlRm4pXG4gICAgICAgICAgLmVuZCgpXG4gICAgICAgICAgLnRoZW4oZG9uZShbXCJncmlkXCIsIFwidXBkYXRlXCJdLCAoKSA9PiByZXNvbHZlKCkpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZG9uZShbXCJncmlkXCIsIFwiZW50ZXJcIl0sICgpID0+IHJlc29sdmUoKSk7XG4gICAgICBkb25lKFtcImdyaWRcIiwgXCJleGl0XCJdLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgZG9uZShbXCJncmlkXCIsIFwidXBkYXRlXCJdLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgIH1cbiAgICAvLyB1cGRhdGUgdGl0bGVcbiAgICBjb25zdCBUSVRMRV9BVFRSUyA9IFtcInRpdGxlXCIsIFwiYWxpZ25cIl07XG4gICAgY29uc3QgdGl0bGVHID0gYXhpcy5zZWxlY3RBbGwoXCIucm9sZS1heGlzLXRpdGxlXCIpO1xuICAgIGlmICghdGl0bGVHLmVtcHR5KCkgJiYgZG9UaXRsZSkge1xuICAgICAgLy8gQXNzdW1lIHRoYXQgdGhlcmUgaXMgbm8gZGF0YSBiaW5kaW5nIChubyBlbnRlciBhbmQgZXhpdClcblxuICAgICAgY29uc3QgZW5jb2RlcyA9IHN0ZXAuZW5jb2Rlcy50aXRsZTtcbiAgICAgIGxldCB0aXRsZSA9IHRpdGxlRy5zZWxlY3RBbGwoXCJ0ZXh0XCIpO1xuXG4gICAgICBjb25zdCBpRGF0YSA9IHRpdGxlLmRhdGEoKTtcbiAgICAgIGxldCBmRGF0YSA9IFtdO1xuICAgICAgaWYgKCFpc1JlbW92ZSkge1xuXG4gICAgICAgIGlmIChzdGVwLmNoYW5nZS5zY2FsZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBmRGF0YSA9IGlEYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZEYXRhID0gZVZpZXcuX3J1bnRpbWUuZGF0YVtzY05hbWVdLnZhbHVlcy52YWx1ZVswXS5pdGVtcy5maWx0ZXIoXG4gICAgICAgICAgICBpdGVtID0+IGl0ZW0ucm9sZSA9PT0gXCJheGlzLXRpdGxlXCJcbiAgICAgICAgICApWzBdLml0ZW1zO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRpdGxlLmRhdGEoaURhdGEsIGQgPT4gZC50ZXh0KTtcbiAgICAgIHRpdGxlID0gdGl0bGUuZGF0YShmRGF0YSwgZCA9PiBkLnRleHQpO1xuICAgICAgY29uc3QgZW50ZXJUaXRsZUkgPSB0aXRsZS5lbnRlcigpLmFwcGVuZChcInRleHRcIik7XG5cbiAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgZW50ZXJUaXRsZUksXG4gICAgICAgIFRJVExFX0FUVFJTLFxuICAgICAgICB7fSxcbiAgICAgICAgc2lnbmFscy5pbml0aWFsLFxuICAgICAgICBlbmNvZGVzLmluaXRpYWwuZW50ZXJcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGVudGVyVGl0bGVGID0gZW50ZXJUaXRsZUkudHJhbnNpdGlvbigpO1xuICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICBlbnRlclRpdGxlRixcbiAgICAgICAgVElUTEVfQVRUUlMsXG4gICAgICAgIHt9LFxuICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICBlbmNvZGVzLmZpbmFsLmVudGVyXG4gICAgICApO1xuICAgICAgZW50ZXJUaXRsZUZcbiAgICAgICAgLmR1cmF0aW9uKHN0ZXAuZHVyYXRpb24pXG4gICAgICAgIC5kZWxheShzdGVwLmRlbGF5KVxuICAgICAgICAuZWFzZShlYXNlRm4pXG4gICAgICAgIC5lbmQoKVxuICAgICAgICAudGhlbihkb25lKFtcInRpdGxlXCIsIFwiZW50ZXJcIl0sICgpID0+IHJlc29sdmUoKSkpO1xuXG4gICAgICBjb25zdCBleGl0VGl0bGVJID0gdGl0bGUuZXhpdCgpO1xuICAgICAgY29uc3QgZXhpdFRpdGxlRiA9IGV4aXRUaXRsZUkudHJhbnNpdGlvbigpO1xuICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICBleGl0VGl0bGVGLFxuICAgICAgICBUSVRMRV9BVFRSUyxcbiAgICAgICAge30sXG4gICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgIGVuY29kZXMuZmluYWwuZXhpdFxuICAgICAgKTtcbiAgICAgIGV4aXRUaXRsZUZcbiAgICAgICAgLmR1cmF0aW9uKHN0ZXAuZHVyYXRpb24pXG4gICAgICAgIC5kZWxheShzdGVwLmRlbGF5KVxuICAgICAgICAuZWFzZShlYXNlRm4pXG4gICAgICAgIC5lbmQoKVxuICAgICAgICAudGhlbihkb25lKFtcInRpdGxlXCIsIFwiZXhpdFwiXSwgKCkgPT4gcmVzb2x2ZSgpKSk7XG5cbiAgICAgIHRpdGxlID0gdGl0bGUudHJhbnNpdGlvbigpO1xuICAgICAgLy8gdXBkYXRlIHRoZSB0aXRsZVxuICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICB0aXRsZSxcbiAgICAgICAgVElUTEVfQVRUUlMsXG4gICAgICAgIHt9LFxuICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICBlbmNvZGVzLmZpbmFsLnVwZGF0ZVxuICAgICAgKTtcblxuICAgICAgdGl0bGVcbiAgICAgICAgLmR1cmF0aW9uKHN0ZXAuZHVyYXRpb24pXG4gICAgICAgIC5kZWxheShzdGVwLmRlbGF5KVxuICAgICAgICAuZWFzZShlYXNlRm4pXG4gICAgICAgIC5lbmQoKVxuICAgICAgICAudGhlbihkb25lKFtcInRpdGxlXCIsIFwidXBkYXRlXCJdLCAoKSA9PiByZXNvbHZlKCkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZG9uZShbXCJ0aXRsZVwiLCBcImVudGVyXCJdLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgZG9uZShbXCJ0aXRsZVwiLCBcImV4aXRcIl0sICgpID0+IHJlc29sdmUoKSk7XG4gICAgICBkb25lKFtcInRpdGxlXCIsIFwidXBkYXRlXCJdLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgIH1cblxuICAgIC8vIHVwZGF0ZSBkb21haW5cbiAgICBjb25zdCBET01BSU5fQVRUUlMgPSBbXCJkb21haW5cIl07XG5cbiAgICBjb25zdCBkb21haW5HID0gYXhpcy5zZWxlY3RBbGwoXCIucm9sZS1heGlzLWRvbWFpblwiKTtcbiAgICBpZiAoIWRvbWFpbkcuZW1wdHkoKSAmJiBkb0RvbWFpbikge1xuICAgICAgY29uc3QgZW5jb2RlcyA9IHN0ZXAuZW5jb2Rlcy5kb21haW47XG4gICAgICBsZXQgZkRhdGEgPSBbXTtcbiAgICAgIGlmICghaXNSZW1vdmUpIHtcbiAgICAgICAgZkRhdGEgPSBlVmlldy5fcnVudGltZS5kYXRhW3NjTmFtZV0udmFsdWVzLnZhbHVlWzBdLml0ZW1zLmZpbHRlcihcbiAgICAgICAgICBpdGVtID0+IGl0ZW0ucm9sZSA9PT0gXCJheGlzLWRvbWFpblwiXG4gICAgICAgIClbMF0uaXRlbXM7XG4gICAgICB9XG4gICAgICBsZXQgZG9tYWluID0gZG9tYWluRy5zZWxlY3RBbGwoXCJsaW5lXCIpLmRhdGEoZkRhdGEpO1xuXG4gICAgICBjb25zdCBpRG9tYWluRW50ZXIgPSBkb21haW4uZW50ZXIoKS5hcHBlbmQoXCJsaW5lXCIpO1xuICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICBpRG9tYWluRW50ZXIsXG4gICAgICAgIERPTUFJTl9BVFRSUyxcbiAgICAgICAge30sXG4gICAgICAgIHNpZ25hbHMuaW5pdGlhbCxcbiAgICAgICAgZW5jb2Rlcy5pbml0aWFsLmVudGVyXG4gICAgICApO1xuICAgICAgY29uc3QgZkRvbWFpbkVudGVyID0gaURvbWFpbkVudGVyLnRyYW5zaXRpb24oKTtcbiAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgZkRvbWFpbkVudGVyLFxuICAgICAgICBET01BSU5fQVRUUlMsXG4gICAgICAgIHt9LFxuICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICBlbmNvZGVzLmZpbmFsLmVudGVyXG4gICAgICApO1xuICAgICAgZkRvbWFpbkVudGVyXG4gICAgICAgIC5kdXJhdGlvbihzdGVwLmR1cmF0aW9uKVxuICAgICAgICAuZGVsYXkoc3RlcC5kZWxheSlcbiAgICAgICAgLmVhc2UoZWFzZUZuKVxuICAgICAgICAuZW5kKClcbiAgICAgICAgLnRoZW4oZG9uZShbXCJkb21haW5cIiwgXCJlbnRlclwiXSwgKCkgPT4gcmVzb2x2ZSgpKSk7XG5cbiAgICAgIGNvbnN0IGlEb21haW5FeGl0ID0gZG9tYWluLmV4aXQoKTtcbiAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgaURvbWFpbkV4aXQsXG4gICAgICAgIERPTUFJTl9BVFRSUyxcbiAgICAgICAge30sXG4gICAgICAgIHNpZ25hbHMuaW5pdGlhbCxcbiAgICAgICAgZW5jb2Rlcy5pbml0aWFsLmV4aXRcbiAgICAgICk7XG4gICAgICBjb25zdCBmRG9tYWluRXhpdCA9IGlEb21haW5FeGl0LnRyYW5zaXRpb24oKTtcbiAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgZkRvbWFpbkV4aXQsXG4gICAgICAgIERPTUFJTl9BVFRSUyxcbiAgICAgICAge30sXG4gICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgIGVuY29kZXMuZmluYWwuZXhpdFxuICAgICAgKTtcbiAgICAgIGZEb21haW5FeGl0XG4gICAgICAgIC5kdXJhdGlvbihzdGVwLmR1cmF0aW9uKVxuICAgICAgICAuZGVsYXkoc3RlcC5kZWxheSlcbiAgICAgICAgLmVhc2UoZWFzZUZuKVxuICAgICAgICAuZW5kKClcbiAgICAgICAgLnRoZW4oZG9uZShbXCJkb21haW5cIiwgXCJleGl0XCJdLCAoKSA9PiByZXNvbHZlKCkpKTtcblxuICAgICAgLy8gdXBkYXRlIHRoZSBkb21haW5cblxuICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICBkb21haW4sXG4gICAgICAgIERPTUFJTl9BVFRSUyxcbiAgICAgICAgc2NhbGVzLmluaXRpYWwsXG4gICAgICAgIHNpZ25hbHMuaW5pdGlhbCxcbiAgICAgICAgZW5jb2Rlcy5pbml0aWFsLnVwZGF0ZVxuICAgICAgKTtcbiAgICAgIGRvbWFpbiA9IGRvbWFpbi50cmFuc2l0aW9uKCk7XG5cbiAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgZG9tYWluLFxuICAgICAgICBET01BSU5fQVRUUlMsXG4gICAgICAgIHNjYWxlcy5maW5hbCxcbiAgICAgICAgc2lnbmFscy5maW5hbCxcbiAgICAgICAgZW5jb2Rlcy5maW5hbC51cGRhdGVcbiAgICAgICk7XG5cbiAgICAgIGRvbWFpblxuICAgICAgICAuZHVyYXRpb24oc3RlcC5kdXJhdGlvbilcbiAgICAgICAgLmRlbGF5KHN0ZXAuZGVsYXkpXG4gICAgICAgIC5lYXNlKGVhc2VGbilcbiAgICAgICAgLmVuZCgpXG4gICAgICAgIC50aGVuKGRvbmUoW1wiZG9tYWluXCIsIFwidXBkYXRlXCJdLCAoKSA9PiByZXNvbHZlKCkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZG9uZShbXCJkb21haW5cIiwgXCJlbnRlclwiXSwgKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICAgIGRvbmUoW1wiZG9tYWluXCIsIFwiZXhpdFwiXSwgKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICAgIGRvbmUoW1wiZG9tYWluXCIsIFwidXBkYXRlXCJdLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCB7IGF4aXNJbnRlcnBvbGF0ZSB9O1xuIiwiaW1wb3J0ICogYXMgZDMgZnJvbSBcImQzXCI7XG5pbXBvcnQge1xuICBwcm9wTWFwLFxuICBnZXRFYXNlRm4sXG4gIGZpbmRBZnRlclNpYmxpbmcsXG4gIGdldEpvaW5JbmZvLFxuICBmaW5kQ29tcCxcbiAgc3ZnUmVuZGVyLFxuICBjb21wdXRlU2NhbGVcbn0gZnJvbSBcIi4vdXRpbC5qc1wiO1xuaW1wb3J0IHsgZmV0Y2hBdHRyaWJ1dGVzLCBjYWxjdWxhdGVHZXRWYWxldXMgfSBmcm9tIFwiLi9hdHRyaWJ1dGVGZXRjaGVyXCI7XG5pbXBvcnQgeyBnZXRTdHlsZSB9IGZyb20gXCIuL3ZlZ2EtcmVuZGVyLXV0aWwuanNcIjtcbmltcG9ydCB7IGNvcHkgfSBmcm9tIFwiLi4vdXRpbC91dGlsLmpzXCI7XG5pbXBvcnQgeyBjb21wdXRlVGltaW5nLCBlbnVtU3RlcENvbXB1dGVUaW1pbmcgfSBmcm9tIFwiLi90aW1pbmdzXCI7XG5cbmNvbnN0IExFR0VORF9DSEFOTkVMUyA9IFtcbiAgXCJmaWxsXCIsXG4gIFwib3BhY2l0eVwiLFxuICBcInNoYXBlXCIsXG4gIFwic2l6ZVwiLFxuICBcInN0cm9rZVwiLFxuICBcInN0cm9rZURhc2hcIixcbiAgXCJzdHJva2VXaWR0aFwiXG5dO1xuY29uc3QgSU5JVElBTF9TVEFUVVMgPSB7XG4gIHVwZGF0ZTogZmFsc2UsXG4gIGVudGVyOiBmYWxzZSxcbiAgZXhpdDogZmFsc2Vcbn07XG5cbmZ1bmN0aW9uIGRvbmVNYWtlcihzdWJDb21wb25lbnRzLCBsZWdlbmRUeXBlcywgbGVnZW5kKSB7XG4gIGNvbnN0IHRyYW5zaXRpb25TdGF0dXMgPSBzdWJDb21wb25lbnRzLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiB7XG4gICAgYWNjW2N1cnJdID0gY29weShJTklUSUFMX1NUQVRVUyk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuXG4gIHJldHVybiBmdW5jdGlvbih3aGljaCwgY2IpIHtcbiAgICBpZiAod2hpY2gubGVuZ3RoID09PSAyKSB7XG4gICAgICBpZiAod2hpY2hbMV0gPT09IFwiYWxsXCIpIHtcbiAgICAgICAgdHJhbnNpdGlvblN0YXR1c1t3aGljaFswXV0udXBkYXRlID0gdHJhbnNpdGlvblN0YXR1c1tcbiAgICAgICAgICB3aGljaFswXVxuICAgICAgICBdLmVudGVyID0gdHJhbnNpdGlvblN0YXR1c1t3aGljaFswXV0uZXhpdCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cmFuc2l0aW9uU3RhdHVzW3doaWNoWzBdXVt3aGljaFsxXV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAod2hpY2ggPT09IFwiYWxsXCIpIHtcbiAgICAgIHRyYW5zaXRpb25TdGF0dXMudXBkYXRlID0gdHJhbnNpdGlvblN0YXR1cy5lbnRlciA9IHRyYW5zaXRpb25TdGF0dXMuZXhpdCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyYW5zaXRpb25TdGF0dXNbd2hpY2hdID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBhbGxEb25lID1cbiAgICAgIFtcInRpdGxlXCIsIFwibGFiZWxzXCIsIFwic3ltYm9sc1wiLCBcInBhaXJzXCIsIFwiZW50cmllc1wiLCBcImxlZ2VuZFwiXS5yZWR1Y2UoXG4gICAgICAgIChhY2MsIGtleSkgPT4ge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBhY2MgJiZcbiAgICAgICAgICAgIHRyYW5zaXRpb25TdGF0dXNba2V5XS51cGRhdGUgJiZcbiAgICAgICAgICAgIHRyYW5zaXRpb25TdGF0dXNba2V5XS5lbnRlciAmJlxuICAgICAgICAgICAgdHJhbnNpdGlvblN0YXR1c1trZXldLmV4aXRcbiAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICApIHx8XG4gICAgICBbXCJ0aXRsZVwiLCBcImxhYmVsc1wiLCBcImdyYWRpZW50XCIsIFwiYmFuZHNcIiwgXCJlbnRyaWVzXCIsIFwibGVnZW5kXCJdLnJlZHVjZShcbiAgICAgICAgKGFjYywga2V5KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGFjYyAmJlxuICAgICAgICAgICAgdHJhbnNpdGlvblN0YXR1c1trZXldLnVwZGF0ZSAmJlxuICAgICAgICAgICAgdHJhbnNpdGlvblN0YXR1c1trZXldLmVudGVyICYmXG4gICAgICAgICAgICB0cmFuc2l0aW9uU3RhdHVzW2tleV0uZXhpdFxuICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgaWYgKGFsbERvbmUpIHtcbiAgICAgIGlmIChsZWdlbmRUeXBlcy5maW5hbCkge1xuICAgICAgICBpZiAobGVnZW5kVHlwZXMuZmluYWwgPT09IFwiZ3JhZGllbnRcIikge1xuICAgICAgICAgIGxlZ2VuZC5zZWxlY3RBbGwoXCIubWFyay1ncm91cC5yb2xlLXNjb3BlXCIpLnJlbW92ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGVudHJ5RyA9IGxlZ2VuZC5zZWxlY3QoXCIucm9sZS1sZWdlbmQtZW50cnkgPiBnID4gZ1wiKTtcbiAgICAgICAgICBsZWdlbmRcbiAgICAgICAgICAgIC5zZWxlY3QoXCIucm9sZS1sZWdlbmQtZW50cnkgPiBnID4gZyA+IC5tYXJrLXRleHQucm9sZS1sZWdlbmQtbGFiZWxcIilcbiAgICAgICAgICAgIC5yZW1vdmUoKTtcbiAgICAgICAgICBlbnRyeUcuc2VsZWN0KFwiLm1hcmstdGV4dC5yb2xlLWxlZ2VuZC1iYW5kXCIpLnJlbW92ZSgpO1xuICAgICAgICAgIGVudHJ5Ry5zZWxlY3QoXCIubWFyay10ZXh0LnJvbGUtbGVnZW5kLWdyYWRpZW50XCIpLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjYigpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gbGVnZW5kSW50ZXJwb2xhdGUocmF3SW5mbywgc3RlcCwgdGFyZ2V0RWxtKSB7XG4gIGZ1bmN0aW9uIGpvaW5LZXlHZW4oc3ViY29tcCkge1xuICAgIHJldHVybiAoZCwgaSwgaW5pdGlhbE9yRmluYWwgPSBcImluaXRpYWxcIikgPT4ge1xuICAgICAgaWYgKCFkKSB7XG4gICAgICAgIHJldHVybiBpLnRvU3RyaW5nKCk7XG4gICAgICB9XG4gICAgICBpZiAoIWQuX19nZW1pbmlfXykge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHN0ZXAuY29tcHV0ZURhdHVtSWRbc3ViY29tcF0gPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gc3RlcC5jb21wdXRlRGF0dW1JZFtzdWJjb21wXShkLCBpKVxuICAgICAgICAgIDogc3RlcC5jb21wdXRlRGF0dW1JZFtzdWJjb21wXVtpbml0aWFsT3JGaW5hbF0oZCwgaSk7XG4gICAgICAgIC8vIHJldHVybiBzdGVwLmNvbXB1dGVEYXR1bUlkW3N1YmNvbXBdKGQsIGkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGdldEpvaW5JbmZvKGQsIGksIHN0ZXAsIFwiam9pbktleVwiKTtcbiAgICB9O1xuICB9XG4gIGNvbnN0IGpvaW5TZXQgPSAoZCwgaSkgPT4ge1xuICAgIHJldHVybiBkLl9fZ2VtaW5pX18gPyBnZXRKb2luSW5mbyhkLCBpLCBzdGVwLCBcImFuaW1TZXRcIikgOiB1bmRlZmluZWQ7XG4gIH07XG4gIGNvbnN0IGVWaWV3ID0gcmF3SW5mby5lVmlzLnZpZXc7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgLy8gTWFyayBJbnRlcnBvbGF0ZSBEYXRhXG5cbiAgICBjb25zdCB7IGNoYW5nZSB9ID0gc3RlcDtcbiAgICBjb25zdCBlYXNlRm4gPSBnZXRFYXNlRm4oc3RlcC50aW1pbmcuZWFzZSk7XG5cbiAgICBsZXQgZG9UaXRsZTtcbiAgICBsZXQgZG9TeW1ib2xzO1xuICAgIGxldCBkb0xhYmVscztcbiAgICBsZXQgZG9HcmFkaWVudDtcblxuICAgIGRvVGl0bGUgPSBkb1N5bWJvbHMgPSBkb0xhYmVscyA9IGRvR3JhZGllbnQgPSB0cnVlO1xuXG4gICAgaWYgKGNoYW5nZS5lbmNvZGUgPT09IGZhbHNlKSB7XG4gICAgICBkb1RpdGxlID0gZG9TeW1ib2xzID0gZG9MYWJlbHMgPSBkb0dyYWRpZW50ID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmIChjaGFuZ2UuZW5jb2RlKSB7XG4gICAgICBkb1RpdGxlID0gIShjaGFuZ2UuZW5jb2RlLnRpdGxlID09PSBmYWxzZSk7XG4gICAgICBkb1N5bWJvbHMgPSAhKGNoYW5nZS5lbmNvZGUuc3ltYm9scyA9PT0gZmFsc2UpO1xuICAgICAgZG9MYWJlbHMgPSAhKGNoYW5nZS5lbmNvZGUubGFiZWxzID09PSBmYWxzZSk7XG4gICAgICBkb0dyYWRpZW50ID0gIShjaGFuZ2UuZW5jb2RlLmdyYWRpZW50ID09PSBmYWxzZSk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBpc1JlbW92ZSB9ID0gc3RlcDtcbiAgICBjb25zdCB7IGlzQWRkIH0gPSBzdGVwO1xuICAgIGxldCBsZWdlbmQgPSBkMy5zZWxlY3QoYCR7dGFyZ2V0RWxtfSAucm9sZS1sZWdlbmQuJHtjaGFuZ2UuY29tcE5hbWV9YCk7XG4gICAgY29uc3QgZG9uZSA9IGRvbmVNYWtlcihcbiAgICAgIFtcbiAgICAgICAgXCJlbnRyaWVzXCIsXG4gICAgICAgIFwidGl0bGVcIixcbiAgICAgICAgXCJsYWJlbHNcIixcbiAgICAgICAgXCJncmFkaWVudFwiLFxuICAgICAgICBcInN5bWJvbHNcIixcbiAgICAgICAgXCJsZWdlbmRcIixcbiAgICAgICAgXCJwYWlyc1wiLFxuICAgICAgICBcImJhbmRzXCJcbiAgICAgIF0sXG4gICAgICBzdGVwLmxlZ2VuZFR5cGVzLFxuICAgICAgbGVnZW5kXG4gICAgKTtcbiAgICBjb25zdCB7IGNvbXBOYW1lIH0gPSBjaGFuZ2U7XG4gICAgLy8gY29sbGVjdCB0aGUgc2NhbGUgb2JqZWN0cyB0byBzY2FsZSB0aGUgaW5pdGlhbC9maW5hbCB2YWx1ZXNcbiAgICBjb25zdCB7IHNjYWxlcyB9ID0gc3RlcDtcbiAgICBjb25zdCB7IHNpZ25hbHMgfSA9IHN0ZXA7XG4gICAgY29uc3QgeyBlbmNvZGVzIH0gPSBzdGVwO1xuICAgIGNvbnN0IHsgbGVnZW5kVHlwZXMgfSA9IHN0ZXA7XG5cbiAgICAvLyBhZGQvcmVtb3ZlL3VwZGF0ZSBsZWdlbmRcbiAgICBpZiAoaXNBZGQpIHtcbiAgICAgIGNvbnN0IHJvb3RNYXJrID0gZDMuc2VsZWN0KGAke3RhcmdldEVsbX0gLm1hcmstZ3JvdXAucm9vdCBnIGcgYCk7XG4gICAgICBjb25zdCByb290U2NlbmUgPSBlVmlldy5zY2VuZWdyYXBoKCkucm9vdDtcbiAgICAgIGNvbnN0IHNpYiA9IGZpbmRBZnRlclNpYmxpbmcocm9vdFNjZW5lLCBjaGFuZ2UuY29tcE5hbWUpO1xuICAgICAgYWRkTGVnZW5kKFxuICAgICAgICByb290TWFyayxcbiAgICAgICAgZmluZENvbXAocm9vdFNjZW5lLCBjaGFuZ2UuY29tcE5hbWUsIFwibGVnZW5kXCIpWzBdLFxuICAgICAgICBzaWIgPyBgLiR7c2liLm5hbWV9YCA6IHVuZGVmaW5lZFxuICAgICAgKTtcbiAgICAgIGxlZ2VuZCA9IGQzLnNlbGVjdEFsbChgJHt0YXJnZXRFbG19IC5yb2xlLWxlZ2VuZC4ke2NoYW5nZS5jb21wTmFtZX1gKTtcblxuICAgICAgZG9uZShbXCJsZWdlbmRcIiwgXCJhbGxcIl0sICgpID0+IHJlc29sdmUoKSk7XG4gICAgICBkb25lKFtcImVudHJpZXNcIiwgXCJhbGxcIl0sICgpID0+IHJlc29sdmUoKSk7XG4gICAgfSBlbHNlIGlmIChpc1JlbW92ZSkge1xuICAgICAgY29uc3QgbWFudWFsRW5jb2RlID1cbiAgICAgICAgY2hhbmdlLmVuY29kZSAmJiBjaGFuZ2UuZW5jb2RlLmxlZ2VuZCA/IGNoYW5nZS5lbmNvZGUubGVnZW5kLmV4aXQgOiB7fTtcbiAgICAgIGNvbnN0IGxlZ2VuZEcgPSBsZWdlbmQuc2VsZWN0KFwiZ1wiKTtcbiAgICAgIGNvbnN0IGZMZWdlbmRHID0gbGVnZW5kRy50cmFuc2l0aW9uKCk7XG4gICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgIGZMZWdlbmRHLFxuICAgICAgICBbXCJncm91cFwiXSxcbiAgICAgICAgc2NhbGVzLmZpbmFsLFxuICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICBPYmplY3QuYXNzaWduKHt9LCBzdGVwLmVuY29kZXMubGVnZW5kLmZpbmFsLmV4aXQsIG1hbnVhbEVuY29kZSlcbiAgICAgICk7XG4gICAgICBmTGVnZW5kR1xuICAgICAgICAuZHVyYXRpb24oc3RlcC5kdXJhdGlvbilcbiAgICAgICAgLmVuZCgpXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICBkb25lKFtcImxlZ2VuZFwiLCBcImFsbFwiXSwgKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICAgICAgICBkb25lKFtcImVudHJpZXNcIiwgXCJhbGxcIl0sICgpID0+IHJlc29sdmUoKSk7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1cGRhdGUgbGVnZW5kIEdcbiAgICAgIGNvbnN0IGZMZWdlbmREID0gZmluZENvbXAoZVZpZXcuc2NlbmVncmFwaCgpLnJvb3QsIGNvbXBOYW1lLCBcImxlZ2VuZFwiKVswXVxuICAgICAgICAuaXRlbXNbMF07XG4gICAgICBjb25zdCBlbmNvZGUgPSB7XG4gICAgICAgIHg6IHsgdmFsdWU6IGZMZWdlbmRELnggfSxcbiAgICAgICAgeTogeyB2YWx1ZTogZkxlZ2VuZEQueSB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBsZWdlbmRHID0gbGVnZW5kLnNlbGVjdChcImdcIik7XG4gICAgICBjb25zdCBmRGF0YSA9IFtlVmlldy5fcnVudGltZS5kYXRhW2NvbXBOYW1lXS52YWx1ZXMudmFsdWVbMF0uZGF0dW1dO1xuICAgICAgbGVnZW5kRy5kYXRhKGZEYXRhKTtcbiAgICAgIGNvbnN0IGZMZWdlbmRHID0gbGVnZW5kRy50cmFuc2l0aW9uKCk7XG4gICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgIGZMZWdlbmRHLFxuICAgICAgICBbXCJncm91cFwiXSxcbiAgICAgICAgc2NhbGVzLmZpbmFsLFxuICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICBPYmplY3QuYXNzaWduKHt9LCBzdGVwLmVuY29kZXMubGVnZW5kLnVwZGF0ZSwgZW5jb2RlKVxuICAgICAgKTtcbiAgICAgIGZMZWdlbmRHXG4gICAgICAgIC5kdXJhdGlvbihzdGVwLmR1cmF0aW9uKVxuICAgICAgICAuZW5kKClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGRvbmUoW1wibGVnZW5kXCIsIFwiYWxsXCJdLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgICAgIGRvbmUoW1wiZW50cmllc1wiLCBcImFsbFwiXSwgKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2NOYW1lcyA9IHtcbiAgICAgIGluaXRpYWw6IFtdLFxuICAgICAgZmluYWw6IFtdXG4gICAgfTtcbiAgICBMRUdFTkRfQ0hBTk5FTFMuZm9yRWFjaChjaGFubmVsID0+IHtcbiAgICAgIGlmIChjaGFuZ2UuaW5pdGlhbCAmJiBjaGFuZ2UuaW5pdGlhbFtjaGFubmVsXSkge1xuICAgICAgICBzY05hbWVzLmluaXRpYWwucHVzaChjaGFuZ2UuaW5pdGlhbFtjaGFubmVsXSk7XG4gICAgICB9XG4gICAgICBpZiAoY2hhbmdlLmZpbmFsICYmIGNoYW5nZS5maW5hbFtjaGFubmVsXSkge1xuICAgICAgICBzY05hbWVzLmZpbmFsLnB1c2goY2hhbmdlLmZpbmFsW2NoYW5uZWxdKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGxldCBmaW5hbFNjYWxlTmFtZXMgPSBbXTtcbiAgICBpZiAoY2hhbmdlLnNjYWxlID09PSB0cnVlIHx8IGlzQWRkKSB7XG4gICAgICBmaW5hbFNjYWxlTmFtZXMgPSBzY05hbWVzLmZpbmFsO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShjaGFuZ2Uuc2NhbGUpKSB7XG4gICAgICBmaW5hbFNjYWxlTmFtZXMgPSBjaGFuZ2Uuc2NhbGU7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY2hhbmdlLnNjYWxlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBmaW5hbFNjYWxlTmFtZXMgPSBPYmplY3Qua2V5cyhjaGFuZ2Uuc2NhbGUpLmZpbHRlcihcbiAgICAgICAgc2NOYW1lID0+IGNoYW5nZS5zY2FsZVtzY05hbWVdXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChzdGVwLmVudW1lcmF0b3IpIHtcbiAgICAgIGlmIChsZWdlbmRUeXBlcy5pbml0aWFsICE9PSBsZWdlbmRUeXBlcy5maW5hbCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiQ2Fubm90IGVudW1lcmF0ZSB0aGUgY2hhbmdlIG9mIHRoZSBsZWdlbmQgdHlwZS5cIik7XG4gICAgICB9XG4gICAgICBjb25zdCBsZWdUeXBlID0gbGVnZW5kVHlwZXMuaW5pdGlhbCB8fCBsZWdlbmRUeXBlcy5maW5hbDtcbiAgICAgIGxldCBzdWJDb21wcztcbiAgICAgIGlmIChsZWdUeXBlID09PSBcInN5bWJvbFwiKSB7XG4gICAgICAgIGNvbnN0IHBhaXJzID0gbGVnZW5kXG4gICAgICAgICAgLnNlbGVjdChcIi5yb2xlLWxlZ2VuZC1lbnRyeSAucm9sZS1zY29wZVwiKVxuICAgICAgICAgIC5zZWxlY3RBbGwoXCIucm9sZS1zY29wZSA+IGdcIilcbiAgICAgICAgICAuZGF0YShzdGVwLmVudW1lcmF0b3IucGFpcnMuYWxsS2V5cywgZCA9PiBkKTtcbiAgICAgICAgcGFpcnMuZXhpdCgpLnJlbW92ZSgpO1xuICAgICAgICBjb25zdCBlbnRlclBhaXJTdWJHcyA9IHBhaXJzXG4gICAgICAgICAgLmVudGVyKClcbiAgICAgICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgICAgIC5hcHBlbmQoXCJnXCIpO1xuICAgICAgICBlbnRlclBhaXJTdWJHc1xuICAgICAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcIm1hcmstc3ltYm9sIHJvbGUtbGVnZW5kLXN5bWJvbFwiKVxuICAgICAgICAgIC5hcHBlbmQoXCJwYXRoXCIpXG4gICAgICAgICAgLmRhdHVtKChkLCBpKSA9PiBzdGVwLmVudW1lcmF0b3Iuc3ltYm9scy5hbGxLZXlzW2ldKTtcbiAgICAgICAgZW50ZXJQYWlyU3ViR3NcbiAgICAgICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJtYXJrLXRleHQgcm9sZS1sZWdlbmQtbGFiZWxcIilcbiAgICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAgIC5kYXR1bSgoZCwgaSkgPT4gc3RlcC5lbnVtZXJhdG9yLmxhYmVscy5hbGxLZXlzW2ldKTtcblxuICAgICAgICBzdWJDb21wcyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcInBhaXJzXCIsXG4gICAgICAgICAgICBzZWxlY3Rpb246IGxlZ2VuZFxuICAgICAgICAgICAgICAuc2VsZWN0KFwiLnJvbGUtbGVnZW5kLWVudHJ5IC5yb2xlLXNjb3BlXCIpXG4gICAgICAgICAgICAgIC5zZWxlY3RBbGwoXCIucm9sZS1zY29wZSA+IGdcIiksXG4gICAgICAgICAgICBwcm9wczogW1wiZ3JvdXBcIl1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwic3ltYm9sc1wiLFxuICAgICAgICAgICAgc2VsZWN0aW9uOiBsZWdlbmRcbiAgICAgICAgICAgICAgLnNlbGVjdChcIi5yb2xlLWxlZ2VuZC1lbnRyeSAucm9sZS1zY29wZVwiKVxuICAgICAgICAgICAgICAuc2VsZWN0QWxsKFwiLnJvbGUtbGVnZW5kLXN5bWJvbCA+IHBhdGhcIiksXG4gICAgICAgICAgICBwcm9wczogW1wic3ltYm9sXCJdXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcImxhYmVsc1wiLFxuICAgICAgICAgICAgc2VsZWN0aW9uOiBsZWdlbmRcbiAgICAgICAgICAgICAgLnNlbGVjdChcIi5yb2xlLWxlZ2VuZC1lbnRyeSAucm9sZS1zY29wZVwiKVxuICAgICAgICAgICAgICAuc2VsZWN0QWxsKFwiLnJvbGUtbGVnZW5kLWxhYmVsID4gdGV4dFwiKSxcbiAgICAgICAgICAgIHByb3BzOiBbXCJ0ZXh0XCJdXG4gICAgICAgICAgfVxuICAgICAgICBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYmluZCBhbGxLZXlzXG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGxlZ2VuZFxuICAgICAgICAgIC5zZWxlY3QoXCIucm9sZS1sZWdlbmQtbGFiZWxcIilcbiAgICAgICAgICAuc2VsZWN0QWxsKFwidGV4dFwiKVxuICAgICAgICAgIC5kYXRhKHN0ZXAuZW51bWVyYXRvci5sYWJlbHMuYWxsS2V5cywgZCA9PiBkKTtcbiAgICAgICAgc2VsZWN0aW9uLmV4aXQoKS5yZW1vdmUoKTtcbiAgICAgICAgc2VsZWN0aW9uLmVudGVyKCkuYXBwZW5kKFwidGV4dFwiKTtcblxuICAgICAgICBzdWJDb21wcyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcImxhYmVsc1wiLFxuICAgICAgICAgICAgc2VsZWN0aW9uOiBsZWdlbmQuc2VsZWN0KFwiLnJvbGUtbGVnZW5kLWxhYmVsXCIpLnNlbGVjdEFsbChcInRleHRcIiksXG4gICAgICAgICAgICBzdmdFbG1UeXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHByb3BzOiBbXCJ0ZXh0XCJdXG4gICAgICAgICAgfVxuICAgICAgICBdO1xuICAgICAgICBpZiAoc3RlcC5jaGFuZ2UuaW5pdGlhbC5pc0JhbmQpIHtcbiAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSBsZWdlbmRcbiAgICAgICAgICAgIC5zZWxlY3QoXCIucm9sZS1sZWdlbmQtYmFuZCBcIilcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJwYXRoXCIpXG4gICAgICAgICAgICAuZGF0YShzdGVwLmVudW1lcmF0b3IuYmFuZHMuYWxsS2V5cywgZCA9PiBkKTtcbiAgICAgICAgICBzZWxlY3Rpb24uZXhpdCgpLnJlbW92ZSgpO1xuICAgICAgICAgIHNlbGVjdGlvbi5lbnRlcigpLmFwcGVuZChcInBhdGhcIik7XG5cbiAgICAgICAgICBzdWJDb21wcy5wdXNoKHtcbiAgICAgICAgICAgIG5hbWU6IFwiYmFuZHNcIixcbiAgICAgICAgICAgIHNlbGVjdGlvbjogbGVnZW5kLnNlbGVjdChcIi5yb2xlLWxlZ2VuZC1iYW5kIFwiKS5zZWxlY3RBbGwoXCJwYXRoXCIpLFxuICAgICAgICAgICAgc3ZnRWxtVHlwZTogXCJwYXRoXCIsXG4gICAgICAgICAgICBwcm9wczogW1wicmVjdFwiXVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRvbmUoW1wiYmFuZHNcIiwgXCJhbGxcIl0sICgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBkb25lKFtcImdyYWRpZW50XCIsIFwiYWxsXCJdLCAoKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9KTsgLy8gVGhlIGdyYWRpZW50IGVsbXMgY2Fubm90IGJlIGVudW1lcmF0ZWQuXG4gICAgICB9XG5cbiAgICAgIHN1YkNvbXBzLmZvckVhY2goc3ViQ29tcCA9PiB7XG4gICAgICAgIGNvbnN0IHN1YkNvbXBFbnVtZXJhdG9yID0gc3RlcC5lbnVtZXJhdG9yW3N1YkNvbXAubmFtZV07XG4gICAgICAgIGNvbnN0IGdldFZhbHVlcyA9IGNhbGN1bGF0ZUdldFZhbGV1cyhcbiAgICAgICAgICBlbmNvZGVzW3N1YkNvbXAubmFtZV0sXG4gICAgICAgICAgc2NhbGVzLFxuICAgICAgICAgIHNpZ25hbHMsXG4gICAgICAgICAgY29tcHV0ZVNjYWxlLFxuICAgICAgICAgIGZpbmFsU2NhbGVOYW1lc1xuICAgICAgICApO1xuICAgICAgICBjb25zdCBhbGxQcm9wcyA9IHN1YkNvbXAucHJvcHMucmVkdWNlKChhY2MsIHByb3ApID0+IHtcbiAgICAgICAgICByZXR1cm4gYWNjLmNvbmNhdChwcm9wTWFwKHByb3ApKTtcbiAgICAgICAgfSwgW10pO1xuXG4gICAgICAgIGNvbnN0IGluaXRpYWxzID0gc3ViQ29tcC5zZWxlY3Rpb24uZmlsdGVyKFxuICAgICAgICAgIGlkID0+IFtcInVwZGF0ZVwiLCBcImV4aXRcIl0uaW5kZXhPZihzdWJDb21wRW51bWVyYXRvci5zZXQoaWQsIDApKSA+PSAwXG4gICAgICAgICk7XG4gICAgICAgIGFsbFByb3BzLmZvckVhY2gocCA9PiB7XG4gICAgICAgICAgaWYgKHAudHlwZSA9PT0gXCJhdHRyVHdlZW5cIikge1xuICAgICAgICAgICAgY29uc3QgdGVtcFAgPSBPYmplY3QuYXNzaWduKHt9LCBwLCB7IHR5cGU6IFwiYXR0clwiIH0pO1xuICAgICAgICAgICAgaW5pdGlhbHNbdGVtcFAudHlwZV0oZ2V0U3R5bGUodGVtcFAudmFsKSwgaWQgPT5cbiAgICAgICAgICAgICAgc3ViQ29tcEVudW1lcmF0b3IuZ2V0UHJvcFZhbCh0ZW1wUCwgZ2V0VmFsdWVzLCAwLCBpZClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIGlmIChwLnR5cGUgPT09IFwidGV4dFwiKSB7XG4gICAgICAgICAgICBpbml0aWFsc1twLnR5cGVdKGlkID0+XG4gICAgICAgICAgICAgIHN1YkNvbXBFbnVtZXJhdG9yLmdldFByb3BWYWwocCwgZ2V0VmFsdWVzLCAwLCBpZClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluaXRpYWxzW3AudHlwZV0oZ2V0U3R5bGUocC52YWwpLCBpZCA9PlxuICAgICAgICAgICAgICBzdWJDb21wRW51bWVyYXRvci5nZXRQcm9wVmFsKHAsIGdldFZhbHVlcywgMCwgaWQpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgc3ViQ29tcFRyYW5zaXRpb24gPSBzdWJDb21wLnNlbGVjdGlvbi50cmFuc2l0aW9uKCk7XG4gICAgICAgIGNvbnN0IHRpbWluZ3MgPSBlbnVtU3RlcENvbXB1dGVUaW1pbmcoc3ViQ29tcEVudW1lcmF0b3IsIHN0ZXAudGltaW5nKTtcbiAgICAgICAgYWxsUHJvcHMuZm9yRWFjaChwID0+IHtcbiAgICAgICAgICBpZiAocC50eXBlID09PSBcImF0dHJcIikge1xuICAgICAgICAgICAgc3ViQ29tcFRyYW5zaXRpb24uYXR0clR3ZWVuKHAudmFsLCBkID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHN1YkNvbXBFbnVtZXJhdG9yLmludGVycG9sYXRlQWxvbmdFbnVtTWFrZXIoXG4gICAgICAgICAgICAgICAgcCxcbiAgICAgICAgICAgICAgICBnZXRWYWx1ZXNcbiAgICAgICAgICAgICAgKShkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAocC50eXBlID09PSBcImF0dHJUd2VlblwiKSB7XG4gICAgICAgICAgICBzdWJDb21wVHJhbnNpdGlvbi5hdHRyVHdlZW4ocC52YWwsIGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHN1YkNvbXBFbnVtZXJhdG9yLmludGVycG9sYXRlQWxvbmdFbnVtTWFrZXIoXG4gICAgICAgICAgICAgICAgcCxcbiAgICAgICAgICAgICAgICBnZXRWYWx1ZXMsXG4gICAgICAgICAgICAgICAgdGhpc1xuICAgICAgICAgICAgICApKGQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChwLnR5cGUgPT09IFwidGV4dFwiKSB7XG4gICAgICAgICAgICBzdWJDb21wVHJhbnNpdGlvbi50d2VlbihcInRleHRcIiwgZnVuY3Rpb24oZCkge1xuICAgICAgICAgICAgICBjb25zdCB0ZXh0SW50ZXJwb2xhdG9yID0gc3ViQ29tcEVudW1lcmF0b3IuaW50ZXJwb2xhdGVBbG9uZ0VudW1NYWtlcihcbiAgICAgICAgICAgICAgICBwLFxuICAgICAgICAgICAgICAgIGdldFZhbHVlc1xuICAgICAgICAgICAgICApKGQpO1xuICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5uZXJIVE1MID0gdGV4dEludGVycG9sYXRvcih0KTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAocC50eXBlID09PSBcInN0eWxlXCIpIHtcbiAgICAgICAgICAgIHN1YkNvbXBUcmFuc2l0aW9uLnN0eWxlVHdlZW4oZ2V0U3R5bGUocC52YWwpLCBkID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHN1YkNvbXBFbnVtZXJhdG9yLmludGVycG9sYXRlQWxvbmdFbnVtTWFrZXIoXG4gICAgICAgICAgICAgICAgcCxcbiAgICAgICAgICAgICAgICBnZXRWYWx1ZXNcbiAgICAgICAgICAgICAgKShkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gaW50ZXJwb2xhdGUgdGhlbVxuICAgICAgICBzdWJDb21wVHJhbnNpdGlvblxuICAgICAgICAgIC5kdXJhdGlvbigoZCwgaSkgPT4gdGltaW5nc1tpXS5kdXJhdGlvbilcbiAgICAgICAgICAuZGVsYXkoKGQsIGkpID0+IHRpbWluZ3NbaV0uZGVsYXkpXG4gICAgICAgICAgLmVhc2UoZWFzZUZuKVxuICAgICAgICAgIC5lbmQoKVxuICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoW3N1YkNvbXAubmFtZSwgXCJhbGxcIl0sICgpID0+IHtcbiAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFxuICAgICAgICBbbGVnZW5kVHlwZXMuaW5pdGlhbCwgbGVnZW5kVHlwZXMuZmluYWxdLmluZGV4T2YoXCJzeW1ib2xcIikgPj0gMCAmJlxuICAgICAgICAoZG9TeW1ib2xzIHx8IGRvTGFiZWxzKVxuICAgICAgKSB7XG4gICAgICAgIGlmIChsZWdlbmRUeXBlcy5pbml0aWFsICE9PSBcInN5bWJvbFwiKSB7XG4gICAgICAgICAgLy8gYWRkIHRoZSBmcmFtZSBmb3IgdGhlIHN5bWJvbCBsZWdlbmQuXG4gICAgICAgICAgbGVnZW5kXG4gICAgICAgICAgICAuc2VsZWN0KFwiIC5yb2xlLWxlZ2VuZC1lbnRyeSA+IGcgPiBnXCIpXG4gICAgICAgICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcIm1hcmstZ3JvdXAgcm9sZS1zY29wZVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwYWlycyA9IGxlZ2VuZFxuICAgICAgICAgIC5zZWxlY3QoXCIucm9sZS1sZWdlbmQtZW50cnkgLnJvbGUtc2NvcGVcIilcbiAgICAgICAgICAuc2VsZWN0QWxsKFwiLnJvbGUtc2NvcGUgPiBnXCIpO1xuXG4gICAgICAgIGNvbnN0IGpvaW5LZXkgPSB7XG4gICAgICAgICAgcGFpcnM6IGpvaW5LZXlHZW4oXCJwYWlyc1wiKSxcbiAgICAgICAgICBzeW1ib2xzOiBqb2luS2V5R2VuKFwic3ltYm9sc1wiKSxcbiAgICAgICAgICBsYWJlbHM6IGpvaW5LZXlHZW4oXCJsYWJlbHNcIilcbiAgICAgICAgfTsgLy8gY3VyckRhdGEuc3ltYm9scyA9PT0gY3VyckRhdGEubGFiZWxzXG4gICAgICAgIGNvbnN0IG5leHREYXRhTGFiZWxzID1cbiAgICAgICAgICBsZWdlbmRUeXBlcy5maW5hbCAhPT0gXCJzeW1ib2xcIiA/IFtdIDogc3RlcC5uZXh0RGF0YS5sYWJlbHM7XG4gICAgICAgIGNvbnN0IGN1cnJEYXRhTGFiZWxzID1cbiAgICAgICAgICBsZWdlbmRUeXBlcy5pbml0aWFsICE9PSBcInN5bWJvbFwiID8gW10gOiBzdGVwLmN1cnJEYXRhLmxhYmVscztcbiAgICAgICAgY29uc3QgdGltaW5ncyA9IHtcbiAgICAgICAgICBwYWlyczogY29tcHV0ZVRpbWluZyhcbiAgICAgICAgICAgIHN0ZXAuY3VyckRhdGEucGFpcnMsXG4gICAgICAgICAgICBzdGVwLm5leHREYXRhLnBhaXJzLFxuICAgICAgICAgICAgc3RlcC50aW1pbmcsXG4gICAgICAgICAgICBqb2luS2V5LnBhaXJzLFxuICAgICAgICAgICAgam9pblNldFxuICAgICAgICAgICksXG4gICAgICAgICAgc3ltYm9sczogY29tcHV0ZVRpbWluZyhcbiAgICAgICAgICAgIHN0ZXAuY3VyckRhdGEuc3ltYm9scyxcbiAgICAgICAgICAgIHN0ZXAubmV4dERhdGEuc3ltYm9scyxcbiAgICAgICAgICAgIHN0ZXAudGltaW5nLFxuICAgICAgICAgICAgam9pbktleS5zeW1ib2xzLFxuICAgICAgICAgICAgam9pblNldFxuICAgICAgICAgICksXG4gICAgICAgICAgbGFiZWxzOiBjb21wdXRlVGltaW5nKFxuICAgICAgICAgICAgY3VyckRhdGFMYWJlbHMsXG4gICAgICAgICAgICBuZXh0RGF0YUxhYmVscyxcbiAgICAgICAgICAgIHN0ZXAudGltaW5nLFxuICAgICAgICAgICAgam9pbktleS5sYWJlbHMsXG4gICAgICAgICAgICBqb2luU2V0XG4gICAgICAgICAgKVxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHByZXZEYXRhID0gZDMubG9jYWwoKTtcblxuICAgICAgICBwYWlycy5zZWxlY3RBbGwoXCIucm9sZS1sZWdlbmQtc3ltYm9sID4gcGF0aFwiKS5lYWNoKGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICBwcmV2RGF0YS5zZXQodGhpcywgZCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHBhaXJzID0gcGFpcnMuZGF0YShzdGVwLm5leHREYXRhLnBhaXJzLCBkID0+IGpvaW5LZXkucGFpcnMoZCkpO1xuICAgICAgICAvLyBpZiAoIWlzUmVtb3ZlICYmIChpc0FuaW1TZXRTeW1ib2xzLmVudGVyIHx8IGlzQW5pbVNldExhYmVscy5lbnRlcikpIHtcbiAgICAgICAgaWYgKCFpc1JlbW92ZSAmJiBwYWlycy5lbnRlcigpLmRhdGEoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgbGV0IGVudGVyUGFpcnNJID0gcGFpcnMuZW50ZXIoKS5hcHBlbmQoXCJnXCIpO1xuICAgICAgICAgIGNvbnN0IGVudGVyUGFpcnNJc3ViRyA9IGVudGVyUGFpcnNJLmFwcGVuZChcImdcIik7XG4gICAgICAgICAgbGV0IGVudGVyU3ltYm9sc0kgPSBlbnRlclBhaXJzSXN1YkdcbiAgICAgICAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwibWFyay1zeW1ib2wgcm9sZS1sZWdlbmQtc3ltYm9sXCIpXG4gICAgICAgICAgICAuYXBwZW5kKFwicGF0aFwiKVxuICAgICAgICAgICAgLmRhdHVtKChkLCBpKSA9PiBzdGVwLm5leHREYXRhLnN5bWJvbHNbaV0pO1xuICAgICAgICAgIGxldCBlbnRlckxhYmVsc0kgPSBlbnRlclBhaXJzSXN1YkdcbiAgICAgICAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwibWFyay10ZXh0IHJvbGUtbGVnZW5kLWxhYmVsXCIpXG4gICAgICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAgICAgLmRhdHVtKChkLCBpKSA9PiBzdGVwLm5leHREYXRhLmxhYmVsc1tpXSk7XG5cbiAgICAgICAgICBjb25zdCBhY3RpbmdTY2FsZXMgPSBzdGVwLnNhbWVEb21haW5EaW1lbnNpb25cbiAgICAgICAgICAgID8geyBwcmltYXJ5OiBzY2FsZXMuaW5pdGlhbCwgc2Vjb25kYXJ5OiBzY2FsZXMuZmluYWwgfVxuICAgICAgICAgICAgOiB7IHByaW1hcnk6IHNjYWxlcy5maW5hbCwgc2Vjb25kYXJ5OiBzY2FsZXMuaW5pdGlhbCB9O1xuXG4gICAgICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICAgICAgZW50ZXJQYWlyc0ksXG4gICAgICAgICAgICBbXCJncm91cFwiXSxcbiAgICAgICAgICAgIGFjdGluZ1NjYWxlcyxcbiAgICAgICAgICAgIHNpZ25hbHMuaW5pdGlhbCxcbiAgICAgICAgICAgIGVuY29kZXMucGFpcnMuaW5pdGlhbC5lbnRlclxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgICAgICBlbnRlclN5bWJvbHNJLFxuICAgICAgICAgICAgW1wic3ltYm9sXCJdLFxuICAgICAgICAgICAgYWN0aW5nU2NhbGVzLFxuICAgICAgICAgICAgc2lnbmFscy5pbml0aWFsLFxuICAgICAgICAgICAgZW5jb2Rlcy5zeW1ib2xzLmluaXRpYWwuZW50ZXJcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICAgICAgZW50ZXJMYWJlbHNJLFxuICAgICAgICAgICAgW1widGV4dFwiXSxcbiAgICAgICAgICAgIGFjdGluZ1NjYWxlcyxcbiAgICAgICAgICAgIHNpZ25hbHMuaW5pdGlhbCxcbiAgICAgICAgICAgIGVuY29kZXMubGFiZWxzLmluaXRpYWwuZW50ZXJcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKGVudGVyUGFpcnNJLmRhdGEoKS5sZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgZW50ZXJQYWlyc0kgPSBwYWlycy5maWx0ZXIoZCA9PiBqb2luU2V0KGQpID09PSBcImVudGVyXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGVudGVyUGFpcnNGID0gZW50ZXJQYWlyc0kudHJhbnNpdGlvbigpO1xuICAgICAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgICAgIGVudGVyUGFpcnNGLFxuICAgICAgICAgICAgW1wiZ3JvdXBcIl0sXG4gICAgICAgICAgICBzY2FsZXMuZmluYWwsXG4gICAgICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICAgICAgZW5jb2Rlcy5wYWlycy5maW5hbC5lbnRlclxuICAgICAgICAgICk7XG4gICAgICAgICAgZW50ZXJQYWlyc0ZcbiAgICAgICAgICAgIC5kdXJhdGlvbihcbiAgICAgICAgICAgICAgKGQsIGkpID0+XG4gICAgICAgICAgICAgICAgdGltaW5ncy5wYWlycy5maW5kKHQgPT4gdC5pZCA9PT0gam9pbktleS5wYWlycyhkLCBpLCBcImZpbmFsXCIpKVxuICAgICAgICAgICAgICAgICAgLmR1cmF0aW9uXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuZGVsYXkoXG4gICAgICAgICAgICAgIChkLCBpKSA9PlxuICAgICAgICAgICAgICAgIHRpbWluZ3MucGFpcnMuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkucGFpcnMoZCwgaSwgXCJmaW5hbFwiKSlcbiAgICAgICAgICAgICAgICAgIC5kZWxheVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmVhc2UoZWFzZUZuKVxuICAgICAgICAgICAgLmVuZCgpXG4gICAgICAgICAgICAudGhlbihkb25lKFtcInBhaXJzXCIsIFwiZW50ZXJcIl0sICgpID0+IHJlc29sdmUoKSkpO1xuXG4gICAgICAgICAgaWYgKGVudGVyU3ltYm9sc0kuZGF0YSgpLmxlbmd0aCA8PSAwKSB7XG4gICAgICAgICAgICBlbnRlclN5bWJvbHNJID0gcGFpcnNcbiAgICAgICAgICAgICAgLnNlbGVjdEFsbChcIi5yb2xlLWxlZ2VuZC1zeW1ib2wgPiBwYXRoXCIpXG4gICAgICAgICAgICAgIC5maWx0ZXIoZCA9PiBqb2luU2V0KGQpID09PSBcImVudGVyXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBlbnRlclN5bWJvbHNGID0gZW50ZXJTeW1ib2xzSS50cmFuc2l0aW9uKCk7XG4gICAgICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICAgICAgZW50ZXJTeW1ib2xzRixcbiAgICAgICAgICAgIFtcInN5bWJvbFwiXSxcbiAgICAgICAgICAgIHNjYWxlcyxcbiAgICAgICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgICAgICBlbmNvZGVzLnN5bWJvbHMuZmluYWwuZW50ZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGVudGVyU3ltYm9sc0ZcbiAgICAgICAgICAgIC5kdXJhdGlvbihcbiAgICAgICAgICAgICAgKGQsIGkpID0+XG4gICAgICAgICAgICAgICAgdGltaW5ncy5zeW1ib2xzLmZpbmQoXG4gICAgICAgICAgICAgICAgICB0ID0+IHQuaWQgPT09IGpvaW5LZXkuc3ltYm9scyhkLCBpLCBcImZpbmFsXCIpXG4gICAgICAgICAgICAgICAgKS5kdXJhdGlvblxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmRlbGF5KFxuICAgICAgICAgICAgICAoZCwgaSkgPT5cbiAgICAgICAgICAgICAgICB0aW1pbmdzLnN5bWJvbHMuZmluZChcbiAgICAgICAgICAgICAgICAgIHQgPT4gdC5pZCA9PT0gam9pbktleS5zeW1ib2xzKGQsIGksIFwiZmluYWxcIilcbiAgICAgICAgICAgICAgICApLmRlbGF5XG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuZWFzZShlYXNlRm4pXG4gICAgICAgICAgICAuZW5kKClcbiAgICAgICAgICAgIC50aGVuKGRvbmUoW1wic3ltYm9sc1wiLCBcImVudGVyXCJdLCAoKSA9PiByZXNvbHZlKCkpKTtcblxuICAgICAgICAgIGlmIChlbnRlckxhYmVsc0kuZGF0YSgpLmxlbmd0aCA8PSAwKSB7XG4gICAgICAgICAgICBlbnRlckxhYmVsc0kgPSBwYWlyc1xuICAgICAgICAgICAgICAuc2VsZWN0QWxsKFwiLnJvbGUtbGVnZW5kLWxhYmVsID4gdGV4dFwiKVxuICAgICAgICAgICAgICAuZmlsdGVyKGQgPT4gam9pblNldChkKSA9PT0gXCJlbnRlclwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgZW50ZXJMYWJlbHNGID0gZW50ZXJMYWJlbHNJLnRyYW5zaXRpb24oKTtcbiAgICAgICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgICAgICBlbnRlckxhYmVsc0YsXG4gICAgICAgICAgICBbXCJ0ZXh0XCJdLFxuICAgICAgICAgICAgc2NhbGVzLmZpbmFsLFxuICAgICAgICAgICAgc2lnbmFscy5maW5hbCxcbiAgICAgICAgICAgIGVuY29kZXMubGFiZWxzLmZpbmFsLmVudGVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBlbnRlckxhYmVsc0ZcbiAgICAgICAgICAgIC5kdXJhdGlvbihcbiAgICAgICAgICAgICAgKGQsIGkpID0+XG4gICAgICAgICAgICAgICAgdGltaW5ncy5sYWJlbHMuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkubGFiZWxzKGQsIGksIFwiZmluYWxcIikpXG4gICAgICAgICAgICAgICAgICAuZHVyYXRpb25cbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5kZWxheShcbiAgICAgICAgICAgICAgKGQsIGkpID0+XG4gICAgICAgICAgICAgICAgdGltaW5ncy5sYWJlbHMuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkubGFiZWxzKGQsIGksIFwiZmluYWxcIikpXG4gICAgICAgICAgICAgICAgICAuZGVsYXlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5lYXNlKGVhc2VGbilcbiAgICAgICAgICAgIC5lbmQoKVxuICAgICAgICAgICAgLnRoZW4oZG9uZShbXCJsYWJlbHNcIiwgXCJlbnRlclwiXSwgKCkgPT4gcmVzb2x2ZSgpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZG9uZShbXCJwYWlyc1wiLCBcImVudGVyXCJdLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgICAgIGRvbmUoW1wic3ltYm9sc1wiLCBcImVudGVyXCJdLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgICAgIGRvbmUoW1wibGFiZWxzXCIsIFwiZW50ZXJcIl0sICgpID0+IHJlc29sdmUoKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiAoIWlzQWRkICYmIChpc0FuaW1TZXRTeW1ib2xzLmV4aXQgfHwgaXNBbmltU2V0TGFiZWxzLmV4aXQpKSB7XG4gICAgICAgIGlmICghaXNBZGQgJiYgcGFpcnMuZXhpdCgpLmRhdGEoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgbGV0IGV4aXRQYWlyc0kgPSBwYWlycy5leGl0KCk7XG4gICAgICAgICAgaWYgKGV4aXRQYWlyc0kuZGF0YSgpLmxlbmd0aCA8PSAwKSB7XG4gICAgICAgICAgICBleGl0UGFpcnNJID0gcGFpcnMuZmlsdGVyKGQgPT4gam9pblNldChkKSA9PT0gXCJleGl0XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBhY3RpbmdTY2FsZXMgPSBzdGVwLnNhbWVEb21haW5EaW1lbnNpb25cbiAgICAgICAgICAgID8geyBwcmltYXJ5OiBzY2FsZXMuZmluYWwsIHNlY29uZGFyeTogc2NhbGVzLmluaXRpYWwgfVxuICAgICAgICAgICAgOiB7IHByaW1hcnk6IHNjYWxlcy5pbml0aWFsLCBzZWNvbmRhcnk6IHNjYWxlcy5maW5hbCB9O1xuXG4gICAgICAgICAgY29uc3QgZXhpdFBhaXJzRiA9IGV4aXRQYWlyc0kudHJhbnNpdGlvbigpO1xuICAgICAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgICAgIGV4aXRQYWlyc0YsXG4gICAgICAgICAgICBbXCJncm91cFwiXSxcbiAgICAgICAgICAgIGFjdGluZ1NjYWxlcyxcbiAgICAgICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgICAgICBlbmNvZGVzLnBhaXJzLmZpbmFsLmV4aXRcbiAgICAgICAgICApO1xuICAgICAgICAgIGV4aXRQYWlyc0ZcbiAgICAgICAgICAgIC5kdXJhdGlvbihcbiAgICAgICAgICAgICAgKGQsIGkpID0+XG4gICAgICAgICAgICAgICAgdGltaW5ncy5wYWlycy5maW5kKHQgPT4gdC5pZCA9PT0gam9pbktleS5wYWlycyhkLCBpLCBcImluaXRpYWxcIikpXG4gICAgICAgICAgICAgICAgICAuZHVyYXRpb25cbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5kZWxheShcbiAgICAgICAgICAgICAgKGQsIGkpID0+XG4gICAgICAgICAgICAgICAgdGltaW5ncy5wYWlycy5maW5kKHQgPT4gdC5pZCA9PT0gam9pbktleS5wYWlycyhkLCBpLCBcImluaXRpYWxcIikpXG4gICAgICAgICAgICAgICAgICAuZGVsYXlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5lYXNlKGVhc2VGbilcbiAgICAgICAgICAgIC5yZW1vdmUoKVxuICAgICAgICAgICAgLmVuZCgpXG4gICAgICAgICAgICAudGhlbihkb25lKFtcInBhaXJzXCIsIFwiZXhpdFwiXSwgKCkgPT4gcmVzb2x2ZSgpKSk7XG5cbiAgICAgICAgICBjb25zdCBleGl0U3ltYm9sc0kgPSBleGl0UGFpcnNJLnNlbGVjdEFsbChcbiAgICAgICAgICAgIFwiLnJvbGUtbGVnZW5kLXN5bWJvbCA+IHBhdGhcIlxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgZXhpdFN5bWJvbHNGID0gZXhpdFN5bWJvbHNJLnRyYW5zaXRpb24oKTtcbiAgICAgICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgICAgICBleGl0U3ltYm9sc0YsXG4gICAgICAgICAgICBbXCJzeW1ib2xcIl0sXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHt9LCBzY2FsZXMsIHtcbiAgICAgICAgICAgICAgcHJpbWFyeTogc2NhbGVzLmZpbmFsLFxuICAgICAgICAgICAgICBzZWNvbmRhcnk6IHNjYWxlcy5pbml0aWFsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgICAgICBlbmNvZGVzLnN5bWJvbHMuZmluYWwuZXhpdFxuICAgICAgICAgICk7XG4gICAgICAgICAgZXhpdFN5bWJvbHNGXG4gICAgICAgICAgICAuZHVyYXRpb24oXG4gICAgICAgICAgICAgIChkLCBpKSA9PlxuICAgICAgICAgICAgICAgIHRpbWluZ3Muc3ltYm9scy5maW5kKFxuICAgICAgICAgICAgICAgICAgdCA9PiB0LmlkID09PSBqb2luS2V5LnN5bWJvbHMoZCwgaSwgXCJpbml0aWFsXCIpXG4gICAgICAgICAgICAgICAgKS5kdXJhdGlvblxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmRlbGF5KFxuICAgICAgICAgICAgICAoZCwgaSkgPT5cbiAgICAgICAgICAgICAgICB0aW1pbmdzLnN5bWJvbHMuZmluZChcbiAgICAgICAgICAgICAgICAgIHQgPT4gdC5pZCA9PT0gam9pbktleS5zeW1ib2xzKGQsIGksIFwiaW5pdGlhbFwiKVxuICAgICAgICAgICAgICAgICkuZGVsYXlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5lYXNlKGVhc2VGbilcbiAgICAgICAgICAgIC5yZW1vdmUoKVxuICAgICAgICAgICAgLmVuZCgpXG4gICAgICAgICAgICAudGhlbihkb25lKFtcInN5bWJvbHNcIiwgXCJleGl0XCJdLCAoKSA9PiByZXNvbHZlKCkpKTtcblxuICAgICAgICAgIGNvbnN0IGV4aXRMYWJlbHNJID0gZXhpdFBhaXJzSS5zZWxlY3RBbGwoXCIucm9sZS1sZWdlbmQtbGFiZWwgPiB0ZXh0XCIpO1xuICAgICAgICAgIGNvbnN0IGV4aXRMYWJlbHNGID0gZXhpdExhYmVsc0kudHJhbnNpdGlvbigpO1xuICAgICAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgICAgIGV4aXRMYWJlbHNGLFxuICAgICAgICAgICAgW1widGV4dFwiXSxcbiAgICAgICAgICAgIGFjdGluZ1NjYWxlcyxcbiAgICAgICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgICAgICBlbmNvZGVzLmxhYmVscy5maW5hbC5leGl0XG4gICAgICAgICAgKTtcbiAgICAgICAgICBleGl0TGFiZWxzRlxuICAgICAgICAgICAgLmR1cmF0aW9uKFxuICAgICAgICAgICAgICAoZCwgaSkgPT5cbiAgICAgICAgICAgICAgICB0aW1pbmdzLmxhYmVscy5maW5kKFxuICAgICAgICAgICAgICAgICAgdCA9PiB0LmlkID09PSBqb2luS2V5LmxhYmVscyhkLCBpLCBcImluaXRpYWxcIilcbiAgICAgICAgICAgICAgICApLmR1cmF0aW9uXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuZGVsYXkoXG4gICAgICAgICAgICAgIChkLCBpKSA9PlxuICAgICAgICAgICAgICAgIHRpbWluZ3MubGFiZWxzLmZpbmQoXG4gICAgICAgICAgICAgICAgICB0ID0+IHQuaWQgPT09IGpvaW5LZXkubGFiZWxzKGQsIGksIFwiaW5pdGlhbFwiKVxuICAgICAgICAgICAgICAgICkuZGVsYXlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5lYXNlKGVhc2VGbilcbiAgICAgICAgICAgIC5yZW1vdmUoKVxuICAgICAgICAgICAgLmVuZCgpXG4gICAgICAgICAgICAudGhlbihkb25lKFtcImxhYmVsc1wiLCBcImV4aXRcIl0sICgpID0+IHJlc29sdmUoKSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRvbmUoW1wicGFpcnNcIiwgXCJleGl0XCJdLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgICAgIGRvbmUoW1wibGFiZWxzXCIsIFwiZXhpdFwiXSwgKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICAgICAgICBkb25lKFtcInN5bWJvbHNcIiwgXCJleGl0XCJdLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhaXJzLmRhdGEoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgLy8gaWYgKChpc0FuaW1TZXRTeW1ib2xzLnVwZGF0ZSB8fCBpc0FuaW1TZXRMYWJlbHMudXBkYXRlKSAmJiBwYWlycy5kYXRhKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHVwZGF0ZVBhaXJzRiA9IHBhaXJzXG4gICAgICAgICAgICAuZmlsdGVyKGQgPT4gam9pblNldChkKSA9PT0gXCJ1cGRhdGVcIilcbiAgICAgICAgICAgIC50cmFuc2l0aW9uKCk7XG4gICAgICAgICAgLy8gZmluYWxpemUgdGhlIHVwZGF0ZSBzZXQgb2YgdGhlIHBhaXJzXG4gICAgICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICAgICAgdXBkYXRlUGFpcnNGLFxuICAgICAgICAgICAgW1wiZ3JvdXBcIl0sXG4gICAgICAgICAgICBzY2FsZXMuZmluYWwsXG4gICAgICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICAgICAgZW5jb2Rlcy5wYWlycy5maW5hbC51cGRhdGVcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdXBkYXRlUGFpcnNGXG4gICAgICAgICAgICAuZHVyYXRpb24oXG4gICAgICAgICAgICAgIChkLCBpKSA9PlxuICAgICAgICAgICAgICAgIHRpbWluZ3MucGFpcnMuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkucGFpcnMoZCwgaSkpLmR1cmF0aW9uXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuZGVsYXkoXG4gICAgICAgICAgICAgIChkLCBpKSA9PlxuICAgICAgICAgICAgICAgIHRpbWluZ3MucGFpcnMuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkucGFpcnMoZCwgaSkpLmRlbGF5XG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuZWFzZShlYXNlRm4pXG4gICAgICAgICAgICAuZW5kKClcbiAgICAgICAgICAgIC50aGVuKGRvbmUoW1wicGFpcnNcIiwgXCJ1cGRhdGVcIl0sICgpID0+IHJlc29sdmUoKSkpO1xuXG4gICAgICAgICAgY29uc3QgdXBkYXRlU3ltYm9sc0kgPSBwYWlyc1xuICAgICAgICAgICAgLnNlbGVjdChcIi5yb2xlLWxlZ2VuZC1zeW1ib2wgPiBwYXRoXCIpXG4gICAgICAgICAgICAuZGF0dW0oKGQsIGkpID0+IHN0ZXAubmV4dERhdGEuc3ltYm9sc1tpXSk7XG4gICAgICAgICAgY29uc3QgdXBkYXRlU3ltYm9sc0YgPSB1cGRhdGVTeW1ib2xzSS50cmFuc2l0aW9uKCk7XG4gICAgICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICAgICAgdXBkYXRlU3ltYm9sc0YsXG4gICAgICAgICAgICBbXCJzeW1ib2xcIl0sXG4gICAgICAgICAgICBzY2FsZXMsXG4gICAgICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpbml0aWFsOiBlbmNvZGVzLnN5bWJvbHMuaW5pdGlhbC51cGRhdGUsXG4gICAgICAgICAgICAgIGZpbmFsOiBlbmNvZGVzLnN5bWJvbHMuZmluYWwudXBkYXRlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJldkRhdGFcbiAgICAgICAgICApO1xuICAgICAgICAgIHVwZGF0ZVN5bWJvbHNGXG4gICAgICAgICAgICAuZHVyYXRpb24oXG4gICAgICAgICAgICAgIChkLCBpKSA9PlxuICAgICAgICAgICAgICAgIHRpbWluZ3Muc3ltYm9scy5maW5kKHQgPT4gdC5pZCA9PT0gam9pbktleS5zeW1ib2xzKGQsIGkpKVxuICAgICAgICAgICAgICAgICAgLmR1cmF0aW9uXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuZGVsYXkoXG4gICAgICAgICAgICAgIChkLCBpKSA9PlxuICAgICAgICAgICAgICAgIHRpbWluZ3Muc3ltYm9scy5maW5kKHQgPT4gdC5pZCA9PT0gam9pbktleS5zeW1ib2xzKGQsIGkpKS5kZWxheVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmVhc2UoZWFzZUZuKVxuICAgICAgICAgICAgLmVuZCgpXG4gICAgICAgICAgICAudGhlbihkb25lKFtcInN5bWJvbHNcIiwgXCJ1cGRhdGVcIl0sICgpID0+IHJlc29sdmUoKSkpO1xuXG4gICAgICAgICAgY29uc3QgdXBkYXRlTGFiZWxzSSA9IHBhaXJzXG4gICAgICAgICAgICAuc2VsZWN0KFwiLnJvbGUtbGVnZW5kLWxhYmVsID4gdGV4dFwiKVxuICAgICAgICAgICAgLmRhdHVtKChkLCBpKSA9PiBzdGVwLm5leHREYXRhLmxhYmVsc1tpXSk7XG4gICAgICAgICAgY29uc3QgdXBkYXRlTGFiZWxzRiA9IHVwZGF0ZUxhYmVsc0kudHJhbnNpdGlvbigpO1xuICAgICAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgICAgIHVwZGF0ZUxhYmVsc0YsXG4gICAgICAgICAgICBbXCJ0ZXh0XCJdLFxuICAgICAgICAgICAgc2NhbGVzLmZpbmFsLFxuICAgICAgICAgICAgc2lnbmFscy5maW5hbCxcbiAgICAgICAgICAgIGVuY29kZXMubGFiZWxzLmZpbmFsLnVwZGF0ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgdXBkYXRlTGFiZWxzRlxuICAgICAgICAgICAgLmR1cmF0aW9uKFxuICAgICAgICAgICAgICAoZCwgaSkgPT5cbiAgICAgICAgICAgICAgICB0aW1pbmdzLmxhYmVscy5maW5kKHQgPT4gdC5pZCA9PT0gam9pbktleS5sYWJlbHMoZCwgaSkpLmR1cmF0aW9uXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuZGVsYXkoXG4gICAgICAgICAgICAgIChkLCBpKSA9PlxuICAgICAgICAgICAgICAgIHRpbWluZ3MubGFiZWxzLmZpbmQodCA9PiB0LmlkID09PSBqb2luS2V5LmxhYmVscyhkLCBpKSkuZGVsYXlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5lYXNlKGVhc2VGbilcbiAgICAgICAgICAgIC5lbmQoKVxuICAgICAgICAgICAgLnRoZW4oZG9uZShbXCJsYWJlbHNcIiwgXCJ1cGRhdGVcIl0sICgpID0+IHJlc29sdmUoKSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRvbmUoW1wicGFpcnNcIiwgXCJ1cGRhdGVcIl0sICgpID0+IHJlc29sdmUoKSk7XG4gICAgICAgICAgZG9uZShbXCJzeW1ib2xzXCIsIFwidXBkYXRlXCJdLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgICAgIGRvbmUoW1wibGFiZWxzXCIsIFwidXBkYXRlXCJdLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIFtsZWdlbmRUeXBlcy5pbml0aWFsLCBsZWdlbmRUeXBlcy5maW5hbF0uaW5kZXhPZihcImdyYWRpZW50XCIpID49IDAgJiZcbiAgICAgICAgKGRvR3JhZGllbnQgfHwgZG9MYWJlbHMpXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgZW50cnlHID0gbGVnZW5kLnNlbGVjdChcIiAucm9sZS1sZWdlbmQtZW50cnkgPiBnID4gZ1wiKTtcbiAgICAgICAgaWYgKGxlZ2VuZFR5cGVzLmluaXRpYWwgIT09IFwiZ3JhZGllbnRcIikge1xuICAgICAgICAgIC8vIGFkZCB0aGUgZnJhbWUgZm9yIHRoZSBzeW1ib2wgbGVnZW5kLlxuICAgICAgICAgIGVudHJ5Ry5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1hcmstdGV4dCByb2xlLWxlZ2VuZC1sYWJlbFwiKTtcblxuICAgICAgICAgIGlmIChzdGVwLmNoYW5nZS5maW5hbC5pc0JhbmQpIHtcbiAgICAgICAgICAgIGVudHJ5Ry5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1hcmstcmVjdCByb2xlLWxlZ2VuZC1iYW5kXCIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbnRyeUcuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJtYXJrLXJlY3Qgcm9sZS1sZWdlbmQtZ3JhZGllbnRcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0ZXAuY2hhbmdlLmluaXRpYWwuaXNCYW5kICYmICFzdGVwLmNoYW5nZS5maW5hbC5pc0JhbmQgKSB7XG4gICAgICAgICAgZW50cnlHLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsIFwibWFyay1yZWN0IHJvbGUtbGVnZW5kLWdyYWRpZW50XCIpO1xuICAgICAgICB9IGVsc2UgaWYgKCFzdGVwLmNoYW5nZS5pbml0aWFsLmlzQmFuZCAmJiBzdGVwLmNoYW5nZS5maW5hbC5pc0JhbmQpIHtcbiAgICAgICAgICBlbnRyeUcuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJtYXJrLXJlY3Qgcm9sZS1sZWdlbmQtYmFuZFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxhYmVsRyA9IGxlZ2VuZC5zZWxlY3QoXG4gICAgICAgICAgXCIgLnJvbGUtbGVnZW5kLWVudHJ5ID4gZyA+IGcgPiAucm9sZS1sZWdlbmQtbGFiZWxcIlxuICAgICAgICApO1xuICAgICAgICBpZiAoZG9MYWJlbHMgJiYgIWxhYmVsRy5lbXB0eSgpKSB7XG4gICAgICAgICAgZ3JhZGllbnRTdWJDb21wKFwibGFiZWxzXCIsIGxhYmVsRywgXCJ0ZXh0XCIsIFtcInRleHRcIl0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRvbmUoW1wibGFiZWxzXCIsIFwiYWxsXCJdLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZ3JhZGllbnRHID0gbGVnZW5kLnNlbGVjdChcIi5yb2xlLWxlZ2VuZC1ncmFkaWVudFwiKTtcbiAgICAgICAgaWYgKGRvR3JhZGllbnQgJiYgIWdyYWRpZW50Ry5lbXB0eSgpKSB7XG4gICAgICAgICAgZ3JhZGllbnRTdWJDb21wKFwiZ3JhZGllbnRcIiwgZ3JhZGllbnRHLCBcInBhdGhcIiwgW1wiZ3JhZGllbnRcIl0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRvbmUoW1wiZ3JhZGllbnRcIiwgXCJhbGxcIl0sICgpID0+IHJlc29sdmUoKSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBiYW5kc0cgPSBsZWdlbmQuc2VsZWN0KFwiLnJvbGUtbGVnZW5kLWJhbmRcIik7XG4gICAgICAgIGlmIChkb0dyYWRpZW50ICYmICFiYW5kc0cuZW1wdHkoKSkge1xuICAgICAgICAgIGdyYWRpZW50U3ViQ29tcChcImJhbmRzXCIsIGJhbmRzRywgXCJwYXRoXCIsIFtcInJlY3RcIl0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRvbmUoW1wiYmFuZHNcIiwgXCJhbGxcIl0sICgpID0+IHJlc29sdmUoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaXRsZVxuICAgIGNvbnN0IHRpdGxlRyA9IGxlZ2VuZC5zZWxlY3QoXCIucm9sZS1sZWdlbmQtdGl0bGVcIik7XG4gICAgaWYgKCF0aXRsZUcuZW1wdHkoKSAmJiBkb1RpdGxlKSB7XG4gICAgICBsZXQgdGl0bGUgPSB0aXRsZUcuc2VsZWN0QWxsKFwidGV4dFwiKTtcblxuXG4gICAgICBjb25zdCBqb2luS2V5ID0gam9pbktleUdlbihcInRpdGxlXCIpO1xuICAgICAgY29uc3QgdGltaW5ncyA9IGNvbXB1dGVUaW1pbmcoXG4gICAgICAgIHN0ZXAuY3VyckRhdGEudGl0bGUsXG4gICAgICAgIHN0ZXAubmV4dERhdGEudGl0bGUsXG4gICAgICAgIHN0ZXAudGltaW5nLFxuICAgICAgICBqb2luS2V5LFxuICAgICAgICBqb2luU2V0XG4gICAgICApO1xuXG4gICAgICB0aXRsZSA9IHRpdGxlLmRhdGEoc3RlcC5uZXh0RGF0YS50aXRsZSwgZCA9PiBkLnRleHQpO1xuICAgICAgY29uc3QgZW50ZXJUaXRsZUkgPSB0aXRsZS5lbnRlcigpLmFwcGVuZChcInRleHRcIik7XG5cbiAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgZW50ZXJUaXRsZUksXG4gICAgICAgIFtcInRpdGxlXCIsIFwiYWxpZ25cIl0sXG4gICAgICAgIHt9LFxuICAgICAgICBzaWduYWxzLmluaXRpYWwsXG4gICAgICAgIGVuY29kZXMudGl0bGUuaW5pdGlhbC5lbnRlclxuICAgICAgKTtcblxuXG4gICAgICBjb25zdCBlbnRlclRpdGxlRiA9IGVudGVyVGl0bGVJLnRyYW5zaXRpb24oKTtcbiAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgZW50ZXJUaXRsZUYsXG4gICAgICAgIFtcInRpdGxlXCIsIFwiYWxpZ25cIl0sXG4gICAgICAgIHt9LFxuICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICBlbmNvZGVzLnRpdGxlLmZpbmFsLmVudGVyXG4gICAgICApO1xuICAgICAgZW50ZXJUaXRsZUZcbiAgICAgICAgLmR1cmF0aW9uKFxuICAgICAgICAgIChkLCBpKSA9PlxuICAgICAgICAgICAgdGltaW5ncy5maW5kKHQgPT4gdC5pZCA9PT0gam9pbktleShkLCBpLCBcImZpbmFsXCIpKS5kdXJhdGlvblxuICAgICAgICApXG4gICAgICAgIC5kZWxheShcbiAgICAgICAgICAoZCwgaSkgPT4gdGltaW5ncy5maW5kKHQgPT4gdC5pZCA9PT0gam9pbktleShkLCBpLCBcImZpbmFsXCIpKS5kZWxheVxuICAgICAgICApXG4gICAgICAgIC5lYXNlKGVhc2VGbilcbiAgICAgICAgLmVuZCgpXG4gICAgICAgIC50aGVuKGRvbmUoW1widGl0bGVcIiwgXCJlbnRlclwiXSwgKCkgPT4gcmVzb2x2ZSgpKSk7XG5cblxuXG5cbiAgICAgIGNvbnN0IGV4aXRUaXRsZUkgPSB0aXRsZS5leGl0KCk7XG4gICAgICBjb25zdCBleGl0VGl0bGVGID0gZXhpdFRpdGxlSS50cmFuc2l0aW9uKCk7XG4gICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgIGV4aXRUaXRsZUYsXG4gICAgICAgIFtcInRpdGxlXCIsIFwiYWxpZ25cIl0sXG4gICAgICAgIHt9LFxuICAgICAgICBzaWduYWxzLmZpbmFsLFxuICAgICAgICBlbmNvZGVzLnRpdGxlLmZpbmFsLmV4aXRcbiAgICAgICk7XG4gICAgICBleGl0VGl0bGVGXG4gICAgICAgIC5kdXJhdGlvbihcbiAgICAgICAgICAoZCwgaSkgPT5cbiAgICAgICAgICAgIHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSwgXCJpbml0aWFsXCIpKS5kdXJhdGlvblxuICAgICAgICApXG4gICAgICAgIC5kZWxheShcbiAgICAgICAgICAoZCwgaSkgPT4gdGltaW5ncy5maW5kKHQgPT4gdC5pZCA9PT0gam9pbktleShkLCBpLCBcImluaXRpYWxcIikpLmRlbGF5XG4gICAgICAgIClcbiAgICAgICAgLmVhc2UoZWFzZUZuKVxuICAgICAgICAucmVtb3ZlKClcbiAgICAgICAgLmVuZCgpXG4gICAgICAgIC50aGVuKGRvbmUoW1widGl0bGVcIiwgXCJleGl0XCJdLCAoKSA9PiByZXNvbHZlKCkpKTtcblxuXG5cblxuICAgICAgdGl0bGUgPSB0aXRsZS50cmFuc2l0aW9uKCk7XG4gICAgICAvLyB1cGRhdGUgdGhlIHRpdGxlXG4gICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgIHRpdGxlLFxuICAgICAgICBbXCJ0aXRsZVwiLCBcImFsaWduXCJdLFxuICAgICAgICB7fSxcbiAgICAgICAgc2lnbmFscy5maW5hbCxcbiAgICAgICAgZW5jb2Rlcy50aXRsZS5maW5hbC51cGRhdGVcbiAgICAgICk7XG5cbiAgICAgIHRpdGxlXG4gICAgICAgIC5kdXJhdGlvbihcbiAgICAgICAgICAoZCwgaSkgPT4gdGltaW5ncy5maW5kKHQgPT4gdC5pZCA9PT0gam9pbktleShkLCBpKSkuZHVyYXRpb25cbiAgICAgICAgKVxuICAgICAgICAuZGVsYXkoKGQsIGkpID0+IHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSkpLmRlbGF5KVxuICAgICAgICAuZWFzZShlYXNlRm4pXG4gICAgICAgIC5lbmQoKVxuICAgICAgICAudGhlbihkb25lKFtcInRpdGxlXCIsIFwidXBkYXRlXCJdLCAoKSA9PiByZXNvbHZlKCkpKTtcblxuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gZ3JhZGllbnRTdWJDb21wKFxuICAgICAgc3ViQ29tcE5hbWUsXG4gICAgICBzdWJDb21wRyxcbiAgICAgIHN1YkNvbXBTdmdFbG1UeXBlLFxuICAgICAgc3ViQ29tcFByb3BzXG4gICAgKSB7XG4gICAgICBjb25zdCBwcmV2RGF0YSA9IGQzLmxvY2FsKCk7XG4gICAgICBsZXQgc3ViQ29tcFNlbGVjdGlvbiA9IHN1YkNvbXBHLnNlbGVjdEFsbChzdWJDb21wU3ZnRWxtVHlwZSk7XG5cbiAgICAgIGNvbnN0IGpvaW5LZXkgPSBqb2luS2V5R2VuKHN1YkNvbXBOYW1lKTtcbiAgICAgIGNvbnN0IG5leHREYXRhID1cbiAgICAgICAgc3ViQ29tcE5hbWUgPT09IFwibGFiZWxzXCIgJiYgbGVnZW5kVHlwZXMuZmluYWwgIT09IFwiZ3JhZGllbnRcIlxuICAgICAgICAgID8gW11cbiAgICAgICAgICA6IHN0ZXAubmV4dERhdGFbc3ViQ29tcE5hbWVdO1xuICAgICAgY29uc3QgY3VyckRhdGEgPVxuICAgICAgICBzdWJDb21wTmFtZSA9PT0gXCJsYWJlbHNcIiAmJiBsZWdlbmRUeXBlcy5pbml0aWFsICE9PSBcImdyYWRpZW50XCJcbiAgICAgICAgICA/IFtdXG4gICAgICAgICAgOiBzdGVwLmN1cnJEYXRhW3N1YkNvbXBOYW1lXTtcbiAgICAgIGNvbnN0IHRpbWluZ3MgPSBjb21wdXRlVGltaW5nKFxuICAgICAgICBjdXJyRGF0YSxcbiAgICAgICAgbmV4dERhdGEsXG4gICAgICAgIHN0ZXAudGltaW5nLFxuICAgICAgICBqb2luS2V5LFxuICAgICAgICBqb2luU2V0XG4gICAgICApO1xuICAgICAgc3ViQ29tcFNlbGVjdGlvbi5lYWNoKGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgcHJldkRhdGEuc2V0KHRoaXMsIGQpO1xuICAgICAgfSk7XG4gICAgICBzdWJDb21wU2VsZWN0aW9uID0gc3ViQ29tcFNlbGVjdGlvbi5kYXRhKG5leHREYXRhLCAoZCwgaSkgPT5cbiAgICAgICAgam9pbktleShkLCBpKVxuICAgICAgKTtcblxuICAgICAgLy8gaWYgKCFpc1JlbW92ZSAmJiBpc0FuaW1TZXQuZW50ZXIpIHtcbiAgICAgIGlmICghaXNSZW1vdmUgJiYgc3ViQ29tcFNlbGVjdGlvbi5lbnRlcigpLmRhdGEoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGxldCBlbnRlclN1YkNvbXBJID0gc3ViQ29tcFNlbGVjdGlvbi5lbnRlcigpLmFwcGVuZChzdWJDb21wU3ZnRWxtVHlwZSk7XG5cbiAgICAgICAgZmV0Y2hBdHRyaWJ1dGVzKFxuICAgICAgICAgIGVudGVyU3ViQ29tcEksXG4gICAgICAgICAgc3ViQ29tcFByb3BzLFxuICAgICAgICAgIHN0ZXAuc2FtZURvbWFpbkRpbWVuc2lvblxuICAgICAgICAgICAgPyB7IHByaW1hcnk6IHNjYWxlcy5pbml0aWFsLCBzZWNvbmRhcnk6IHNjYWxlcy5maW5hbCB9XG4gICAgICAgICAgICA6IHsgcHJpbWFyeTogc2NhbGVzLmZpbmFsLCBzZWNvbmRhcnk6IHNjYWxlcy5pbml0aWFsIH0sXG4gICAgICAgICAgc2lnbmFscy5pbml0aWFsLFxuICAgICAgICAgIGVuY29kZXNbc3ViQ29tcE5hbWVdLmluaXRpYWwuZW50ZXJcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoZW50ZXJTdWJDb21wSS5kYXRhKCkubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICBlbnRlclN1YkNvbXBJID0gc3ViQ29tcEdcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoc3ViQ29tcFN2Z0VsbVR5cGUpXG4gICAgICAgICAgICAuZmlsdGVyKGQgPT4gam9pblNldChkKSA9PT0gXCJlbnRlclwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbnRlclN1YkNvbXBGID0gZW50ZXJTdWJDb21wSS50cmFuc2l0aW9uKCk7XG4gICAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgICBlbnRlclN1YkNvbXBGLFxuICAgICAgICAgIHN1YkNvbXBQcm9wcyxcbiAgICAgICAgICBzY2FsZXMsXG4gICAgICAgICAgc2lnbmFscy5maW5hbCxcbiAgICAgICAgICBlbmNvZGVzW3N1YkNvbXBOYW1lXS5maW5hbC5lbnRlcixcbiAgICAgICAgICBwcmV2RGF0YVxuICAgICAgICApO1xuICAgICAgICBlbnRlclN1YkNvbXBGXG4gICAgICAgICAgLmR1cmF0aW9uKFxuICAgICAgICAgICAgKGQsIGkpID0+XG4gICAgICAgICAgICAgIHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSwgXCJmaW5hbFwiKSkuZHVyYXRpb25cbiAgICAgICAgICApXG4gICAgICAgICAgLmRlbGF5KFxuICAgICAgICAgICAgKGQsIGkpID0+IHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSwgXCJmaW5hbFwiKSkuZGVsYXlcbiAgICAgICAgICApXG4gICAgICAgICAgLmVhc2UoZWFzZUZuKVxuICAgICAgICAgIC5lbmQoKVxuICAgICAgICAgIC50aGVuKGRvbmUoW3N1YkNvbXBOYW1lLCBcImVudGVyXCJdLCAoKSA9PiByZXNvbHZlKCkpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvbmUoW3N1YkNvbXBOYW1lLCBcImVudGVyXCJdLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiAoIWlzQWRkICYmIGlzQW5pbVNldC5leGl0KSB7XG4gICAgICBpZiAoIWlzQWRkICYmIHN1YkNvbXBTZWxlY3Rpb24uZXhpdCgpLmRhdGEoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGV4aXRTdWJDb21wSSA9IHN1YkNvbXBTZWxlY3Rpb24uZXhpdCgpO1xuICAgICAgICBjb25zdCBleGl0U3ViQ29tcEYgPSBleGl0U3ViQ29tcEkudHJhbnNpdGlvbigpO1xuICAgICAgICBmZXRjaEF0dHJpYnV0ZXMoXG4gICAgICAgICAgZXhpdFN1YkNvbXBGLFxuICAgICAgICAgIHN1YkNvbXBQcm9wcyxcbiAgICAgICAgICBzdGVwLnNhbWVEb21haW5EaW1lbnNpb25cbiAgICAgICAgICAgID8geyBwcmltYXJ5OiBzY2FsZXMuZmluYWwsIHNlY29uZGFyeTogc2NhbGVzLmluaXRpYWwgfVxuICAgICAgICAgICAgOiB7IHByaW1hcnk6IHNjYWxlcy5pbml0aWFsLCBzZWNvbmRhcnk6IHNjYWxlcy5maW5hbCB9LFxuICAgICAgICAgIHNpZ25hbHMuZmluYWwsXG4gICAgICAgICAgZW5jb2Rlc1tzdWJDb21wTmFtZV0uZmluYWwuZXhpdCxcbiAgICAgICAgICBwcmV2RGF0YVxuICAgICAgICApO1xuICAgICAgICBleGl0U3ViQ29tcEZcbiAgICAgICAgICAuZHVyYXRpb24oXG4gICAgICAgICAgICAoZCwgaSkgPT5cbiAgICAgICAgICAgICAgdGltaW5ncy5maW5kKHQgPT4gdC5pZCA9PT0gam9pbktleShkLCBpLCBcImluaXRpYWxcIikpLmR1cmF0aW9uXG4gICAgICAgICAgKVxuICAgICAgICAgIC5kZWxheShcbiAgICAgICAgICAgIChkLCBpKSA9PiB0aW1pbmdzLmZpbmQodCA9PiB0LmlkID09PSBqb2luS2V5KGQsIGksIFwiaW5pdGlhbFwiKSkuZGVsYXlcbiAgICAgICAgICApXG4gICAgICAgICAgLmVhc2UoZWFzZUZuKVxuICAgICAgICAgIC5yZW1vdmUoKVxuICAgICAgICAgIC5lbmQoKVxuICAgICAgICAgIC50aGVuKGRvbmUoW3N1YkNvbXBOYW1lLCBcImV4aXRcIl0sICgpID0+IHJlc29sdmUoKSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9uZShbc3ViQ29tcE5hbWUsIFwiZXhpdFwiXSwgKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICAgIH1cblxuICAgICAgLy8gaWYgKChpc0FuaW1TZXQudXBkYXRlKSAmJiBzdWJDb21wU2VsZWN0aW9uLmRhdGEoKS5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoc3ViQ29tcFNlbGVjdGlvbi5kYXRhKCkubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCB1cGRhdGVTdWJDb21wRiA9IHN1YkNvbXBTZWxlY3Rpb24udHJhbnNpdGlvbigpO1xuICAgICAgICBsZXQgbW9kaWZpZWRTdWJDb21wUHJvcHMgPSBzdWJDb21wTmFtZSA9PT0gXCJncmFkaWVudFwiXG4gICAgICAgICAgPyBbeyBuYW1lOiBcImdyYWRpZW50XCIsIGV4Y2x1ZGVzOiBbeyB0eXBlOiBcInN0eWxlXCIsIHZhbDogXCJmaWxsXCIgfV0gfV1cbiAgICAgICAgICA6IHN1YkNvbXBQcm9wcztcblxuXG4gICAgICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgICAgICB1cGRhdGVTdWJDb21wRixcbiAgICAgICAgICBtb2RpZmllZFN1YkNvbXBQcm9wcyxcbiAgICAgICAgICBzY2FsZXMsXG4gICAgICAgICAgc2lnbmFscy5maW5hbCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpbml0aWFsOiBlbmNvZGVzW3N1YkNvbXBOYW1lXS5pbml0aWFsLnVwZGF0ZSxcbiAgICAgICAgICAgIGZpbmFsOiBlbmNvZGVzW3N1YkNvbXBOYW1lXS5maW5hbC51cGRhdGVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHByZXZEYXRhXG4gICAgICAgICk7XG4gICAgICAgIGlmIChzdWJDb21wTmFtZSA9PT0gXCJncmFkaWVudFwiKSB7XG4gICAgICAgICAgdXBkYXRlR3JhZGllbnRGaWxsKHN1YkNvbXBTZWxlY3Rpb24sIHN0ZXApO1xuICAgICAgICB9XG5cblxuXG4gICAgICAgIHVwZGF0ZVN1YkNvbXBGXG4gICAgICAgICAgLmR1cmF0aW9uKFxuICAgICAgICAgICAgKGQsIGkpID0+IHRpbWluZ3MuZmluZCh0ID0+IHQuaWQgPT09IGpvaW5LZXkoZCwgaSkpLmR1cmF0aW9uXG4gICAgICAgICAgKVxuICAgICAgICAgIC5kZWxheSgoZCwgaSkgPT4gdGltaW5ncy5maW5kKHQgPT4gdC5pZCA9PT0gam9pbktleShkLCBpKSkuZGVsYXkpXG4gICAgICAgICAgLmVhc2UoZWFzZUZuKVxuICAgICAgICAgIC5lbmQoKVxuICAgICAgICAgIC50aGVuKGRvbmUoW3N1YkNvbXBOYW1lLCBcInVwZGF0ZVwiXSwgKCkgPT4gcmVzb2x2ZSgpKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkb25lKFtzdWJDb21wTmFtZSwgXCJ1cGRhdGVcIl0sICgpID0+IHJlc29sdmUoKSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUdyYWRpZW50RmlsbChncmFkQ29tcFNlbGVjdGlvbiwgc3RlcCkge1xuICBjb25zdCB1cmwgPSBncmFkQ29tcFNlbGVjdGlvbi5ub2RlKCkuc3R5bGUuZmlsbC5yZXBsYWNlKC9edXJsXFwoWydcIl0vLCBcIlwiKS5yZXBsYWNlKC9bJ1wiXVxcKSQvLCBcIlwiKTtcbiAgY29uc3QgdmdEYXR1bSA9IGdyYWRDb21wU2VsZWN0aW9uLmRhdGEoKVswXTtcbiAgY29uc3QgZ3JhZGllbnRJZCA9IHVybC5zcGxpdChcIiNcIikucG9wKCk7XG4gIGNvbnN0IGdyYWRpZW50ID0gZDMuc2VsZWN0KGAjJHtncmFkaWVudElkfWApO1xuICBncmFkaWVudC5zZWxlY3RBbGwoXCJzdG9wXCIpXG4gICAgLmRhdGEodmdEYXR1bS5maWxsLnN0b3BzLCBkID0+IChkIHx8IHt9KS5vZmZzZXQpXG4gICAgLnRyYW5zaXRpb24oKVxuICAgIC5hdHRyKFwic3RvcC1jb2xvclwiLCBkPT4gZC5jb2xvcilcbiAgICAuZHVyYXRpb24oc3RlcC5kdXJhdGlvbilcbiAgICAuZGVsYXkoc3RlcC5kZWxheSk7XG4gIGdyYWRpZW50LnRyYW5zaXRpb24oKVxuICAgIC5hdHRyKFwieDFcIiwgdmdEYXR1bS5maWxsLngxKVxuICAgIC5hdHRyKFwieDJcIiwgdmdEYXR1bS5maWxsLngyKVxuICAgIC5hdHRyKFwieTFcIiwgdmdEYXR1bS5maWxsLnkxKVxuICAgIC5hdHRyKFwieTJcIiwgdmdEYXR1bS5maWxsLnkyKVxuICAgIC5kdXJhdGlvbihzdGVwLmR1cmF0aW9uKVxuICAgIC5kZWxheShzdGVwLmRlbGF5KTtcblxufVxuZnVuY3Rpb24gYWRkTGVnZW5kKGQzU2VsZWN0aW9uLCBuZXdMZWdlbmRTY2VuZSkge1xuICBjb25zdCBjb21wTmFtZSA9IG5ld0xlZ2VuZFNjZW5lLm5hbWU7XG4gIGNvbnN0IGVsZW0gPSBzdmdSZW5kZXIobmV3TGVnZW5kU2NlbmUpLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXG4gICAgXCJyb2xlLWxlZ2VuZFwiXG4gIClbMF07XG4gIGQzU2VsZWN0aW9uLm5vZGUoKS5hcHBlbmRDaGlsZChlbGVtKTtcbiAgY29uc3QgeyBkYXR1bSB9ID0gbmV3TGVnZW5kU2NlbmUuaXRlbXNbMF07XG4gIC8vIGFmdGVyIGFkZGluZyB0aGUgcmVuZGVyZWQgcmVzdWx0LCBkZWxldGUgdGhlIGl0ZW1zIHRvIHJlLWVuY29kZSBhY2NvcmRpbmcgdG8gYGVuY29kZXNgLlxuXG4gIGlmIChkYXR1bS50aXRsZSkge1xuICAgIGQzU2VsZWN0aW9uLnNlbGVjdChgLiR7Y29tcE5hbWV9IC5yb2xlLWxlZ2VuZC10aXRsZSB0ZXh0YCkucmVtb3ZlKCk7XG4gIH1cbiAgaWYgKGRhdHVtLnR5cGUgPT09IFwic3ltYm9sXCIpIHtcbiAgICBkM1NlbGVjdGlvblxuICAgICAgLnNlbGVjdEFsbChgLiR7Y29tcE5hbWV9IC5yb2xlLWxlZ2VuZC1lbnRyeSAucm9sZS1zY29wZSA+IGdgKVxuICAgICAgLnJlbW92ZSgpO1xuICB9IGVsc2Uge1xuICAgIGQzU2VsZWN0aW9uXG4gICAgICAuc2VsZWN0QWxsKGAuJHtjb21wTmFtZX0gLnJvbGUtbGVnZW5kLWVudHJ5IC5yb2xlLWxlZ2VuZC1sYWJlbCA+IHRleHRgKVxuICAgICAgLnJlbW92ZSgpO1xuICAgIGQzU2VsZWN0aW9uXG4gICAgICAuc2VsZWN0QWxsKGAuJHtjb21wTmFtZX0gLnJvbGUtbGVnZW5kLWVudHJ5IC5yb2xlLWxlZ2VuZC1ncmFkaWVudCA+IHBhdGhgKVxuICAgICAgLnJlbW92ZSgpO1xuICAgIGQzU2VsZWN0aW9uXG4gICAgICAuc2VsZWN0QWxsKGAuJHtjb21wTmFtZX0gLnJvbGUtbGVnZW5kLWVudHJ5IC5yb2xlLWxlZ2VuZC1iYW5kID4gcGF0aGApXG4gICAgICAucmVtb3ZlKCk7XG4gIH1cblxuICByZXR1cm4gZDNTZWxlY3Rpb247XG59XG5cbmV4cG9ydCB7IGxlZ2VuZEludGVycG9sYXRlIH07XG4iLCJpbXBvcnQgKiBhcyBkMyBmcm9tIFwiZDNcIjtcbmltcG9ydCB7IHRyYW5zZm9ybUl0ZW0gfSBmcm9tIFwiLi92ZWdhLXJlbmRlci11dGlsXCI7XG5pbXBvcnQgeyBnZXRFYXNlRm4gfSBmcm9tIFwiLi91dGlsLmpzXCI7XG5pbXBvcnQgeyBmZXRjaEF0dHJpYnV0ZXMgfSBmcm9tIFwiLi9hdHRyaWJ1dGVGZXRjaGVyXCI7XG5cbmZ1bmN0aW9uIHZpZXdJbnRlcnBvbGF0ZShyYXdJbmZvLCBzdGVwLCB0YXJnZXRFbG0pIHtcbiAgY29uc3QgYW5pbVZpcyA9IHRhcmdldEVsbTtcblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBlYXNlRm4gPSBnZXRFYXNlRm4oc3RlcC50aW1pbmcuZWFzZSk7XG5cbiAgICBpZiAoc3RlcC5jaGFuZ2Uuc2lnbmFsID09PSBmYWxzZSkge1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIGNvbnN0IHZpZXcgPSBkMy5zZWxlY3QoYCR7YW5pbVZpc30gc3ZnYCk7XG4gICAgY29uc3Qgc3ZnRW5jb2RlID0gc3RlcC5lbmNvZGVzLmZpbmFsLnN2ZztcbiAgICAvLyB1cGRhdGUgc3ZnXG4gICAgLy8gV2hlbiBqdXN0IGFwcGx5aW5nIGF0dHIoXCJ3aWR0aFwiLCAuLi4pLCB0aGUgc2l6ZSBvZiB0aGUgY2hhcnQgaml0dGVycy5cbiAgICB2aWV3XG4gICAgICAudHJhbnNpdGlvbigpXG4gICAgICAudHdlZW4oXCJyZXNpemVcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgIGNvbnN0IHcgPSBkMy5pbnRlcnBvbGF0ZShcbiAgICAgICAgICB0aGlzLmdldEF0dHJpYnV0ZShcIndpZHRoXCIpLFxuICAgICAgICAgIHN2Z0VuY29kZS53aWR0aC52YWx1ZVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBoID0gZDMuaW50ZXJwb2xhdGUoXG4gICAgICAgICAgdGhpcy5nZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiksXG4gICAgICAgICAgc3ZnRW5jb2RlLmhlaWdodC52YWx1ZVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgICAgIGNvbnN0IF93ID0gTWF0aC5yb3VuZCh3KHQpICogMSkgLyAxO1xuICAgICAgICAgIGNvbnN0IF9oID0gTWF0aC5yb3VuZChoKHQpICogMSkgLyAxO1xuICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgX3cpO1xuICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIF9oKTtcbiAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZShcInZpZXdCb3hcIiwgYDAgMCAke193fSAke19ofWApO1xuICAgICAgICB9O1xuICAgICAgfSlcbiAgICAgIC5kdXJhdGlvbihzdGVwLmR1cmF0aW9uKVxuICAgICAgLmRlbGF5KHN0ZXAuZGVsYXkpXG4gICAgICAuZWFzZShlYXNlRm4pXG4gICAgICAuZW5kKClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSk7XG5cbiAgICAvLyB1cGRhdGUgc3ZnID4gZ1xuICAgIHZpZXdcbiAgICAgIC5zZWxlY3QoXCJnXCIpXG4gICAgICAudHJhbnNpdGlvbigpXG4gICAgICAuYXR0cihcbiAgICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgdHJhbnNmb3JtSXRlbSh7IHg6IHN2Z0VuY29kZS54LnZhbHVlLCB5OiBzdmdFbmNvZGUueS52YWx1ZSB9KVxuICAgICAgKVxuICAgICAgLmR1cmF0aW9uKHN0ZXAuZHVyYXRpb24pXG4gICAgICAuZGVsYXkoc3RlcC5kZWxheSlcbiAgICAgIC5lYXNlKGVhc2VGbik7XG5cbiAgICAvLyB1cGRhdGUgYmFja2dyb3VuZFxuICAgIGxldCByb290ID0gdmlldy5zZWxlY3QoXCIucm9vdCBnID4gLmJhY2tncm91bmRcIik7XG4gICAgY29uc3Qgcm9vdEVuY29kZSA9IHN0ZXAuZW5jb2Rlcy5maW5hbC5yb290O1xuICAgIGNvbnN0IGZEYXR1bSA9IE9iamVjdC5rZXlzKHJvb3RFbmNvZGUpLnJlZHVjZSgoZkRhdHVtLCBrZXkpID0+IHtcbiAgICAgIGZEYXR1bVtrZXldID0gcm9vdEVuY29kZVtrZXldLnZhbHVlO1xuICAgICAgcmV0dXJuIGZEYXR1bTtcbiAgICB9LCB7fSk7XG4gICAgcm9vdCA9IHJvb3QuZGF0YShbZkRhdHVtXSkudHJhbnNpdGlvbigpO1xuICAgIGZldGNoQXR0cmlidXRlcyhcbiAgICAgIHJvb3QsXG4gICAgICBbXCJiYWNrZ3JvdW5kXCIsIFwiZmlsbFwiLCBcInN0cm9rZVwiXSxcbiAgICAgIHt9LFxuICAgICAgc3RlcC5zaWduYWxzLmZpbmFsLFxuICAgICAgcm9vdEVuY29kZVxuICAgICk7XG5cbiAgICByb290XG4gICAgICAuZHVyYXRpb24oc3RlcC5kdXJhdGlvbilcbiAgICAgIC5kZWxheShzdGVwLmRlbGF5KVxuICAgICAgLmVhc2UoZWFzZUZuKTtcblxuICAgIC8vIHVwZGF0ZSBmcmFtZVxuICB9KTtcbn1cblxuZXhwb3J0IHsgdmlld0ludGVycG9sYXRlIH07XG4iLCJpbXBvcnQgeyBtYXJrSW50ZXJwb2xhdGUgfSBmcm9tIFwiLi9tYXJrL21hcmtcIjtcbmltcG9ydCB7IGFyZWFMaW5lSW50ZXJwb2xhdGUgfSBmcm9tIFwiLi9tYXJrL2FyZWFMaW5lXCI7XG5pbXBvcnQgeyBheGlzSW50ZXJwb2xhdGUgfSBmcm9tIFwiLi9heGlzXCI7XG5pbXBvcnQgeyBsZWdlbmRJbnRlcnBvbGF0ZSB9IGZyb20gXCIuL2xlZ2VuZFwiO1xuaW1wb3J0IHsgdmlld0ludGVycG9sYXRlIH0gZnJvbSBcIi4vdmlld1wiO1xuaW1wb3J0IHsgaXNMaW5lYXJNYXJrdHlwZX0gZnJvbSBcIi4vdXRpbFwiO1xuXG5jb25zdCBMSUJSQVJZID0ge1xuICBsZWdlbmQ6IGxlZ2VuZEludGVycG9sYXRlLFxuICBheGlzOiBheGlzSW50ZXJwb2xhdGUsXG4gIG1hcms6IHtcbiAgICBpbnRlcnBvbGF0ZToge1xuICAgICAgb3RoZXJzOiBtYXJrSW50ZXJwb2xhdGUsXG4gICAgICBhcmVhTGluZTogYXJlYUxpbmVJbnRlcnBvbGF0ZVxuICAgIH0sXG4gICAgbWFya3R5cGVDaGFuZ2VcbiAgfSxcbiAgdmlldzogdmlld0ludGVycG9sYXRlLFxuICBwYXVzZTogc3RlcCA9PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9LCBzdGVwLmR1cmF0aW9uICsgc3RlcC5kZWxheSk7XG4gICAgfSk7XG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzdGVwKSB7XG4gIGxldCB0ZW1wbGF0ZTtcbiAgY29uc3QgeyBtYXJrdHlwZXMgfSA9IHN0ZXA7XG4gIGlmIChzdGVwLmNvbXBUeXBlID09PSBcIm1hcmtcIikge1xuICAgIGlmIChcbiAgICAgIG1hcmt0eXBlcy5maW5hbCAmJlxuICAgICAgbWFya3R5cGVzLmluaXRpYWwgJiZcbiAgICAgIG1hcmt0eXBlcy5pbml0aWFsICE9PSBzdGVwLm1hcmt0eXBlcy5maW5hbFxuICAgICkge1xuICAgICAgdGVtcGxhdGUgPSBMSUJSQVJZLm1hcmsubWFya3R5cGVDaGFuZ2U7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGlzTGluZWFyTWFya3R5cGUobWFya3R5cGVzLmluaXRpYWwpIHx8IGlzTGluZWFyTWFya3R5cGUobWFya3R5cGVzLmZpbmFsKVxuICAgICkge1xuICAgICAgdGVtcGxhdGUgPSBMSUJSQVJZLm1hcmsuaW50ZXJwb2xhdGUuYXJlYUxpbmU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRlbXBsYXRlID0gTElCUkFSWS5tYXJrLmludGVycG9sYXRlLm90aGVycztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGVtcGxhdGUgPSBMSUJSQVJZW3N0ZXAuY29tcFR5cGVdO1xuICB9XG5cbiAgcmV0dXJuIHRlbXBsYXRlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBtYXJrdHlwZUNoYW5nZShyYXdJbmZvLCBzdGVwLCB0YXJnZXRFbG0pIHtcbiAgY29uc3QgbVR5cGVJID0gc3RlcC5tYXJrdHlwZXMuaW5pdGlhbDtcbiAgY29uc3QgbVR5cGVGID0gc3RlcC5tYXJrdHlwZXMuZmluYWw7XG4gIGlmICggaXNMaW5lYXJNYXJrdHlwZShtVHlwZUYpICYmIGlzTGluZWFyTWFya3R5cGUobVR5cGVJKSkge1xuICAgIHJldHVybiBMSUJSQVJZLm1hcmsuaW50ZXJwb2xhdGUuYXJlYUxpbmUocmF3SW5mbywgc3RlcCwgdGFyZ2V0RWxtKTtcbiAgfVxuICBpZiAoXG4gICAgKCBpc0xpbmVhck1hcmt0eXBlKG1UeXBlSSkgJiYgW1wicnVsZVwiLCBcInJlY3RcIiwgXCJzeW1ib2xcIiwgXCJ0ZXh0XCJdLmluZGV4T2YobVR5cGVGKSA+PSAwKSB8fFxuICAgICggaXNMaW5lYXJNYXJrdHlwZShtVHlwZUYpICYmIFtcInJ1bGVcIiwgXCJyZWN0XCIsIFwic3ltYm9sXCIsIFwidGV4dFwiXS5pbmRleE9mKG1UeXBlSSkgPj0gMClcbiAgKSB7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFtcbiAgICAgIExJQlJBUlkubWFyay5pbnRlcnBvbGF0ZS5vdGhlcnMocmF3SW5mbywgc3RlcCwgdGFyZ2V0RWxtKSxcbiAgICAgIExJQlJBUlkubWFyay5pbnRlcnBvbGF0ZS5hcmVhTGluZShyYXdJbmZvLCBzdGVwLCB0YXJnZXRFbG0pXG4gICAgXSk7XG4gIH1cbiAgcmV0dXJuIExJQlJBUlkubWFyay5pbnRlcnBvbGF0ZS5vdGhlcnMocmF3SW5mbywgc3RlcCwgdGFyZ2V0RWxtKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0ZXN0SW50ZXJwb2xhdG9yKHN0ZXAsIHN0YXRlKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICBjb25zdCBuZXh0U3RhdGUgPSBgJHtzdGF0ZX0gJHtzdGVwLmNvbXBOYW1lfWA7XG4gICAgICByZXNvbHZlKG5leHRTdGF0ZSk7XG4gICAgfSwgc3RlcC5kdXJhdGlvbiArIHN0ZXAuZGVsYXkpO1xuICB9KTtcbn1cbiIsImltcG9ydCB7YXR0YWNoU3RhdGVzfSBmcm9tIFwiLi9jaGFuZ2VGZXRjaGVyXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBhdXRvU2NhbGVPcmRlcihleHRlbmRlZFNjaGVkdWxlLCByZXNvbHZlcywgcmF3SW5mbykge1xuICBjb25zdCBtYWluVGltZWxpbmUgPSBleHRlbmRlZFNjaGVkdWxlLmdldFRpbWVsaW5lKFwiOm1haW5cIik7XG5cbiAgbGV0IGV4dGVuZGVkVGltZWxpbmUgPSBhdHRhY2hTdGF0ZXMobWFpblRpbWVsaW5lLCByYXdJbmZvKTtcbiAgY29uc3Qgc2NhbGVPcmRlclJlc292bGVzID0gcmVzb2x2ZXMuZmlsdGVyKHIgPT4gci5hdXRvU2NhbGVPcmRlciksXG4gICAgc2NoZWR1bGVBbHRlcm5hdG9yID0gZXh0ZW5kZWRTY2hlZHVsZS5nZXRUaW1lbGluZUFsdGVybmF0b3Ioc2NhbGVPcmRlclJlc292bGVzKTtcblxuICB3aGlsZSAoIXZhbGlkYXRlU2NhbGVPcmRlcihzY2FsZU9yZGVyUmVzb3ZsZXMsIGV4dGVuZGVkVGltZWxpbmUpKSB7XG4gICAgY29uc3QgYWx0VGltZWxpbmUgPSBzY2hlZHVsZUFsdGVybmF0b3IoKTtcbiAgICBpZiAoIWFsdFRpbWVsaW5lKSB7XG4gICAgICBleHRlbmRlZFRpbWVsaW5lID0gYXR0YWNoU3RhdGVzKG1haW5UaW1lbGluZSwgcmF3SW5mbyk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgZXh0ZW5kZWRUaW1lbGluZSA9IGF0dGFjaFN0YXRlcyhhbHRUaW1lbGluZSwgcmF3SW5mbyk7XG4gIH1cbiAgcmV0dXJuIGV4dGVuZGVkVGltZWxpbmU7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU2NhbGVPcmRlcihyZXNvbHZlcywgdGltZWxpbmUpIHtcbiAgbGV0IHZhbGlkID0gdHJ1ZTtcbiAgcmVzb2x2ZXMuZm9yRWFjaChyZXNvbHZlID0+IHtcbiAgICByZXNvbHZlLmF1dG9TY2FsZU9yZGVyLmZvckVhY2goY29tcE5hbWUgPT4ge1xuICAgICAgY29uc3QgZm91bmRUcmFjayA9IHRpbWVsaW5lLmZpbmQodHJhY2sgPT4gdHJhY2suY29tcE5hbWUgPT09IGNvbXBOYW1lKTtcbiAgICAgIGlmIChmb3VuZFRyYWNrICYmIGZvdW5kVHJhY2suc2NhbGVPcmRlclZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIHZhbGlkO1xufSIsImltcG9ydCAqIGFzIHZlZ2EgZnJvbSBcInZlZ2FcIjtcbmltcG9ydCB7IEFuaW1hdGlvbiB9IGZyb20gXCIuL2FuaW1hdGlvblwiO1xuaW1wb3J0IHsgcGFyc2UgfSBmcm9tIFwiLi9wYXJzZXJcIjtcbmltcG9ydCB7IGF0dGFjaENoYW5nZXMgfSBmcm9tIFwiLi9jaGFuZ2VGZXRjaGVyXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIEFjdHVhdG9yIH0gZnJvbSBcIi4vYWN0dWF0b3JcIjtcbmltcG9ydCB7IGF1dG9TY2FsZU9yZGVyIH0gZnJvbSBcIi4vcmVzb2x2ZXJcIjtcblxuXG5mdW5jdGlvbiBhdHRhY2hBbmltVGVtcGxhdGVzKHNjaGVkdWxlKSB7XG4gIHNjaGVkdWxlLmZvckVhY2godHJhY2sgPT4ge1xuICAgIHRyYWNrLnN0ZXBzID0gdHJhY2suc3RlcHMubWFwKHN0ZXAgPT4ge1xuICAgICAgY29uc3QgdGVtcGxhdGUgPSBBY3R1YXRvcihzdGVwKTtcbiAgICAgIGlmICghdGVtcGxhdGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBgVGhlcmUgaXMgbm8gc3VjaCBhbmltYXRpb24gdGVtcGxhdGUgZm9yICR7c3RlcC5jb21wVHlwZX0uYFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBzdGVwLnRlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgICByZXR1cm4gc3RlcDtcbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBzY2hlZHVsZTtcbn1cblxuY2xhc3MgR2VtaW5pIHtcbiAgc3RhdGljIGFzeW5jIGFuaW1hdGUoc3RhcnRWaXNTcGVjLCBlbmRWaXNTcGVjLCBzcGVjKSB7XG5cbiAgICBjb25zdCBlVmlldyA9IGF3YWl0IG5ldyB2ZWdhLlZpZXcodmVnYS5wYXJzZShlbmRWaXNTcGVjKSwge1xuICAgICAgcmVuZGVyZXI6IFwic3ZnXCJcbiAgICB9KS5ydW5Bc3luYygpO1xuXG4gICAgY29uc3Qgc1ZpZXcgPSBhd2FpdCBuZXcgdmVnYS5WaWV3KHZlZ2EucGFyc2Uoc3RhcnRWaXNTcGVjKSwge1xuICAgICAgcmVuZGVyZXI6IFwic3ZnXCJcbiAgICB9KS5ydW5Bc3luYygpO1xuXG4gICAgY29uc3QgcmF3SW5mbyA9IHtcbiAgICAgIHNWaXM6IHsgdmlldzogc1ZpZXcsIHNwZWM6IHN0YXJ0VmlzU3BlYyB9LFxuICAgICAgZVZpczogeyB2aWV3OiBlVmlldywgc3BlYzogZW5kVmlzU3BlYyB9XG4gICAgfTtcblxuICAgIGNvbnN0IHsgc2NoZWR1bGUsIHJlc29sdmVzIH0gPSBwYXJzZShzcGVjLCByYXdJbmZvKTtcbiAgICBzY2hlZHVsZS50cmFja3MgPSBhdHRhY2hDaGFuZ2VzKHJhd0luZm8sIHNjaGVkdWxlLnRyYWNrcyk7XG4gICAgY29uc3QgZmluYWxUaW1lbGluZSA9IGF1dG9TY2FsZU9yZGVyKHNjaGVkdWxlLCByZXNvbHZlcywgcmF3SW5mbyk7XG5cbiAgICByZXR1cm4gbmV3IEFuaW1hdGlvbihhdHRhY2hBbmltVGVtcGxhdGVzKGZpbmFsVGltZWxpbmUpLCByYXdJbmZvLCBzcGVjKTtcbiAgfVxufVxuXG5leHBvcnQge1xuICBHZW1pbmksXG4gIGF0dGFjaEFuaW1UZW1wbGF0ZXMgYXMgYXR0YWNoQW5pbVRlbXBsYXRlXG59O1xuIiwiaW1wb3J0IHsgY29weSB9IGZyb20gXCIuLi91dGlsL3V0aWxcIjtcblxuY29uc3QgTUlOX1BPU19ERUxUQSA9IDEwO1xuY29uc3QgQ0hBTk5FTF9UT19BVFRSUyA9IFtcbiAgeyBjaGFubmVsOiBcInhcIiwgYXR0cnM6IFtcInhcIiwgXCJ4MlwiLCBcInhjXCIsIFwid2lkdGhcIl0gfSxcbiAgeyBjaGFubmVsOiBcInlcIiwgYXR0cnM6IFtcInlcIiwgXCJ5MlwiLCBcInljXCIsIFwiaGVpZ2h0XCJdIH0sXG4gIHsgY2hhbm5lbDogXCJjb2xvclwiLCBhdHRyczogW1wic3Ryb2tlXCIsIFwiZmlsbFwiXSB9LFxuICB7IGNoYW5uZWw6IFwic2hhcGVcIiwgYXR0cnM6IFtcInNoYXBlXCJdIH0sXG4gIHsgY2hhbm5lbDogXCJzaXplXCIsIGF0dHJzOiBbXCJzaXplXCJdIH0sXG4gIHsgY2hhbm5lbDogXCJvcGFjaXR5XCIsIGF0dHJzOiBbXCJvcGFjaXR5XCJdIH0sXG4gIHsgY2hhbm5lbDogXCJ0ZXh0XCIsIGF0dHJzOiBbXCJ0ZXh0XCJdIH0sXG4gIHsgY2hhbm5lbDogXCJvdGhlcnNcIiwgYXR0cnM6IFtcInRvb2x0aXBcIiwgXCJkZWZpbmVcIiwgXCJzdHJva2VXaWR0aFwiXSB9XG5dO1xuY29uc3QgQ0hBTk5FTFMgPSBbXCJ4XCIsIFwieVwiLCBcImNvbG9yXCIsIFwic2hhcGVcIiwgXCJzaXplXCIsIFwib3BhY2l0eVwiLCBcInRleHRcIl07XG5cbmNvbnN0IENIQU5ORUxfVE9fQVRUUlNfT0JKID0ge1xuICB4OiBbXCJ4XCIsIFwieDJcIiwgXCJ4Y1wiLCBcIndpZHRoXCJdLFxuICB5OiBbXCJ5XCIsIFwieTJcIiwgXCJ5Y1wiLCBcImhlaWdodFwiXSxcbiAgY29sb3I6IFtcInN0cm9rZVwiLCBcImZpbGxcIl0sXG4gIHNoYXBlOiBbXCJzaGFwZVwiXSxcbiAgc2l6ZTogW1wic2l6ZVwiXSxcbiAgb3BhY2l0eTogW1wib3BhY2l0eVwiXSxcbiAgdGV4dDogW1widGV4dFwiXSxcbiAgb3RoZXJzOiBbXCJ0b29sdGlwXCIsIFwiZGVmaW5lXCIsIFwic3Ryb2tlV2lkdGhcIl1cbn07XG5cbmZ1bmN0aW9uIGdldFN1YkVuY29kZUJ5Q2hhbm5lbChlbmNvZGUsIGNoYW5uZWwpIHtcbiAgY29uc3Qgc3ViRW5jb2RlID0ge307XG4gIGlmIChjaGFubmVsID09PSBcIm90aGVyc1wiKSB7XG4gICAgY29uc3Qgb3RoZXJFbmNvZGUgPSBjb3B5KGVuY29kZSk7XG4gICAgQ0hBTk5FTF9UT19BVFRSUy5yZWR1Y2UoKGNoYW5uZWxSZWxhdGVkQXR0cnMsIGNoMkF0dHJzKSA9PiB7XG4gICAgICByZXR1cm4gKGNoYW5uZWxSZWxhdGVkQXR0cnMgPSBjaGFubmVsUmVsYXRlZEF0dHJzLmNvbmNhdChjaDJBdHRycy5hdHRycykpO1xuICAgIH0sIFtdKS5mb3JFYWNoKGF0dHIgPT4ge1xuICAgICAgZGVsZXRlIG90aGVyRW5jb2RlW2F0dHJdO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG90aGVyRW5jb2RlO1xuICB9XG5cbiAgQ0hBTk5FTF9UT19BVFRSU19PQkpbY2hhbm5lbF1cbiAgICAvLyAuZmlsdGVyKGF0dHIgPT4gZW5jb2RlW2F0dHJdKVxuICAgIC5mb3JFYWNoKGF0dHIgPT4ge1xuICAgICAgc3ViRW5jb2RlW2F0dHJdID0gZW5jb2RlW2F0dHJdO1xuICAgIH0pO1xuICByZXR1cm4gc3ViRW5jb2RlO1xufVxuZnVuY3Rpb24gZ2V0Q29yZUF0dHIoc3ViRW5jb2RlLCBjaGFubmVsLCBtYXJrdHlwZSl7XG4gIGlmICghc3ViRW5jb2RlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChjaGFubmVsID09PSBcImNvbG9yXCIpIHtcbiAgICBsZXQgY29yZUF0dHIgPSBbXCJsaW5lXCIsIFwicnVsZVwiLCBcInN5bWJvbFwiXS5pbmRleE9mKG1hcmt0eXBlKSA+PSAwXG4gICAgICA/IHN1YkVuY29kZS5zdHJva2VcbiAgICAgIDogc3ViRW5jb2RlLmZpbGw7XG5cbiAgICBpZiAoXG4gICAgICBjb3JlQXR0ciA9PT0gXCJzeW1ib2xcIiAmJlxuICAgICAgICBzdWJFbmNvZGUuZmlsbCAmJlxuICAgICAgICBzdWJFbmNvZGUuZmlsbC52YWx1ZSAhPT0gXCJ0cmFuc3BhcmVudFwiXG4gICAgKSB7XG4gICAgICBjb3JlQXR0ciA9IHN1YkVuY29kZS5maWxsO1xuICAgIH1cblxuICAgIHJldHVybiBjb3JlQXR0cjtcbiAgfVxuICBpZiAoY2hhbm5lbD09PVwieFwiKSB7XG4gICAgcmV0dXJuIHN1YkVuY29kZS54ICB8fCBzdWJFbmNvZGUueGM7XG4gIH0gZWxzZSBpZiAoY2hhbm5lbD09PVwieVwiKSB7XG4gICAgcmV0dXJuIHN1YkVuY29kZS55ICB8fCBzdWJFbmNvZGUueWM7XG4gIH1cbiAgcmV0dXJuIHN1YkVuY29kZVtjaGFubmVsXTtcbn1cblxuZXhwb3J0IHsgQ0hBTk5FTFMsIENIQU5ORUxfVE9fQVRUUlNfT0JKLCBNSU5fUE9TX0RFTFRBLCBnZXRTdWJFbmNvZGVCeUNoYW5uZWwsIGdldENvcmVBdHRyIH07XG4iLCJpbXBvcnQgeyBnZXRDb21wb25lbnRzLCBnZXRDaGFuZ2VzLCBnZXRWaWV3Q2hhbmdlIH0gZnJvbSBcIi4uL2NoYW5nZUZldGNoZXIvY2hhbmdlXCI7XG5pbXBvcnQgeyBjb3B5LCBkZWVwRXF1YWwsIGlzTnVtYmVyLCBnZXQgfSBmcm9tIFwiLi4vdXRpbC91dGlsXCI7XG5pbXBvcnQgeyBmaW5kQ29tcCB9IGZyb20gXCIuLi9hY3R1YXRvci91dGlsXCI7XG5pbXBvcnQgeyBjb21wdXRlSGFzRmFjZXQsIGlzR3JvdXBpbmdNYXJrdHlwZSB9IGZyb20gXCIuLi9jaGFuZ2VGZXRjaGVyL3N0YXRlL3V0aWxcIjtcbmltcG9ydCB7IENIQU5ORUxTLCBnZXRTdWJFbmNvZGVCeUNoYW5uZWwsIE1JTl9QT1NfREVMVEEsZ2V0Q29yZUF0dHIgfSBmcm9tIFwiLi91dGlsXCI7XG5pbXBvcnQgeyBnZXRNYXJrRGF0YSwgdW5wYWNrRGF0YSB9IGZyb20gXCIuLi91dGlsL3ZnRGF0YUhlbHBlclwiO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3REaWZmcyhyYXdJbmZvLCB1c2VySW5wdXQgPSB7fSkge1xuICAvLyAwKSBjb21wYXJlIHNpZ25hbHNcbiAgY29uc3Qgc2lnbmFsRGlmZnMgPSBkZXRlY3RTaWduYWxEaWZmcyhyYXdJbmZvKTtcblxuICBjb25zdCBtYXRjaGVzID0gZ2V0Q2hhbmdlcyhcbiAgICBnZXRDb21wb25lbnRzKHJhd0luZm8uc1Zpcy5zcGVjKSxcbiAgICBnZXRDb21wb25lbnRzKHJhd0luZm8uZVZpcy5zcGVjKVxuICApO1xuICBjb25zdCBzY2FsZURpZmZzID0gbWF0Y2hlc1xuICAgIC5maWx0ZXIobWF0Y2ggPT4gbWF0Y2guY29tcFR5cGUgPT09IFwic2NhbGVcIilcbiAgICAucmVkdWNlKChzY2FsZURpZmZzLCBtYXRjaCkgPT4ge1xuICAgICAgc2NhbGVEaWZmc1ttYXRjaC5jb21wTmFtZV0gPSBtYXRjaDtcbiAgICAgIHNjYWxlRGlmZnNbbWF0Y2guY29tcE5hbWVdLm1ldGEgPSBkZXRlY3RTY2FsZURpZmZzKG1hdGNoLCByYXdJbmZvLCB1c2VySW5wdXQuc2NhbGVzKTtcblxuICAgICAgcmV0dXJuIHNjYWxlRGlmZnM7XG4gICAgfSwge30pO1xuXG4gIGNvbnN0IGNvbXBEaWZmcyA9IG1hdGNoZXNcbiAgICAuZmlsdGVyKG1hdGNoID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIFtcInJvb3RcIiwgXCJwYXRoZ3JvdXBcIl0uaW5kZXhPZihtYXRjaC5jb21wTmFtZSkgPCAwICYmXG4gICAgICAgIG1hdGNoLmNvbXBUeXBlICE9PSBcInNjYWxlXCJcbiAgICAgICk7XG4gICAgfSkubWFwKG1hdGNoID0+IHtcbiAgICAgIHN3aXRjaCAobWF0Y2guY29tcFR5cGUpIHtcbiAgICAgIGNhc2UgXCJtYXJrXCI6XG4gICAgICAgIG1hdGNoLm1ldGEgPSBkZXRlY3RNYXJrRGlmZnMobWF0Y2gsIHJhd0luZm8sIHNjYWxlRGlmZnMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJheGlzXCI6XG4gICAgICAgIG1hdGNoLm1ldGEgPSBkZXRlY3RBeGlzRGlmZnMobWF0Y2gsIHJhd0luZm8sIHNjYWxlRGlmZnMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJsZWdlbmRcIjpcbiAgICAgICAgbWF0Y2gubWV0YSA9IGRldGVjdExlZ2VuZERpZmZzKG1hdGNoLCByYXdJbmZvLCBzY2FsZURpZmZzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1hdGNoO1xuICAgIH0pO1xuICBjb25zdCB2aWV3RGlmZnMgPSBkZXRlY3RWaWV3RGlmZihyYXdJbmZvKTtcblxuICAvLyAxKSBzaG91bGQgcmV0dXJuIHRoZSBjb21wb25lbnRzXG4gIHJldHVybiB7XG4gICAgY29tcERpZmZzLFxuICAgIHNjYWxlRGlmZnMsXG4gICAgc2lnbmFsRGlmZnMsXG4gICAgdmlld0RpZmZzXG4gIH07XG59XG5mdW5jdGlvbiBhcHBlbmRDb21wU2NhbGVEaWZmKHVzZWRTY2FsZXMsIHNjYWxlRGlmZnMpIHtcbiAgbGV0IGNvbXBTY2FsZURpZmZEZXRhaWxzID0ge307IGxldCBjb21wU2NhbGVEaWZmID0gZmFsc2U7XG5cbiAgdXNlZFNjYWxlcy5mb3JFYWNoKHNjYWxlTmFtZSA9PiB7XG4gICAgY29tcFNjYWxlRGlmZkRldGFpbHNbc2NhbGVOYW1lXSA9IHNjYWxlRGlmZnNbc2NhbGVOYW1lXS5tZXRhO1xuICAgIGNvbXBTY2FsZURpZmYgPSBjb21wU2NhbGVEaWZmIHx8IHNjYWxlRGlmZnNbc2NhbGVOYW1lXS5tZXRhO1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIGNvbXBTY2FsZURpZmYgPyBjb21wU2NhbGVEaWZmRGV0YWlscyA6IGZhbHNlO1xufVxuZnVuY3Rpb24gZGV0ZWN0TWFya0RpZmZzKG1hdGNoLCByYXdJbmZvLCBzY2FsZURpZmZzKSB7XG4gIGxldCBtYXJrRGlmZnMgPSB7IHZpZXc6IHsgZGVsdGFXOiAwLCBkZWx0YUg6IDAgfSB9O1xuICBpZiAoIW1hdGNoLmluaXRpYWwpIHtcbiAgICBtYXJrRGlmZnMuYWRkID0gdHJ1ZTtcbiAgICBtYXJrRGlmZnMudmlldyA9IHsgZGVsdGFXOiBNSU5fUE9TX0RFTFRBLCBkZWx0YUg6IE1JTl9QT1NfREVMVEEgfTtcbiAgfSBlbHNlIGlmICghbWF0Y2guZmluYWwpIHtcbiAgICBtYXJrRGlmZnMucmVtb3ZlID0gdHJ1ZTtcbiAgICBtYXJrRGlmZnMudmlldyA9IHsgZGVsdGFXOiBNSU5fUE9TX0RFTFRBLCBkZWx0YUg6IE1JTl9QT1NfREVMVEEgfTtcbiAgfVxuXG4gIC8vIG1hcmt0eXBlXG4gIG1hcmtEaWZmcy5tYXJrdHlwZSA9ICFtYXRjaC5pbml0aWFsIHx8ICFtYXRjaC5maW5hbCB8fCAobWF0Y2guaW5pdGlhbC50eXBlICE9PSBtYXRjaC5maW5hbC50eXBlKTtcblxuICAvLyBjb21wYXJlIHRoZSBlbmNvZGVzIHBlciBjaGFubmVsXG4gIGNvbnN0IGVuQXR0cnNfaSA9IE9iamVjdC5rZXlzKGdldChtYXRjaCwgXCJpbml0aWFsXCIsIFwiZW5jb2RlXCIsIFwidXBkYXRlXCIpIHx8IHt9KTtcbiAgbGV0IGVuQXR0cnNfZiA9IE9iamVjdC5rZXlzKGdldChtYXRjaCwgXCJmaW5hbFwiLCBcImVuY29kZVwiLCBcInVwZGF0ZVwiKSB8fCB7fSk7XG4gIG1hcmtEaWZmcy51c2VkRW5BdHRycyA9IGVuQXR0cnNfaS5jb25jYXQoZW5BdHRyc19mKS51bmlxdWUoKTtcblxuICBtYXJrRGlmZnMuZW5jb2RlID0gQ0hBTk5FTFMucmVkdWNlKChlbmNvZGVEaWZmcywgY2hhbm5lbCkgPT4ge1xuICAgIGNvbnN0IHN1YkVuY29kZV9pID0gZ2V0U3ViRW5jb2RlQnlDaGFubmVsKFxuICAgICAgZ2V0KG1hdGNoLCBcImluaXRpYWxcIiwgXCJlbmNvZGVcIiwgXCJ1cGRhdGVcIikgfHwge30sXG4gICAgICBjaGFubmVsXG4gICAgKTtcbiAgICBsZXQgc3ViRW5jb2RlX2YgPSBnZXRTdWJFbmNvZGVCeUNoYW5uZWwoXG4gICAgICBnZXQobWF0Y2gsIFwiZmluYWxcIiwgXCJlbmNvZGVcIiwgXCJ1cGRhdGVcIikgfHwge30sXG4gICAgICBjaGFubmVsXG4gICAgKTtcblxuICAgIGVuY29kZURpZmZzW2NoYW5uZWxdID0gIWRlZXBFcXVhbChzdWJFbmNvZGVfaSwgc3ViRW5jb2RlX2YpO1xuXG4gICAgLy8gaWdub3JlYWJsZSBlbmNvZGUgZGlmZnMgKGQgKG9wYWNpdHkpID4gMC41IClcbiAgICBpZiAoXG4gICAgICBjaGFubmVsID09PSBcIm9wYWNpdHlcIiAmJlxuICAgICAgKGdldChzdWJFbmNvZGVfaSwgXCJvcGFjaXR5XCIsIFwidmFsdWVcIikgfHxcbiAgICAgICAgZ2V0KHN1YkVuY29kZV9pLCBcIm9wYWNpdHlcIikgPT09IHVuZGVmaW5lZCkgJiZcbiAgICAgIChnZXQoc3ViRW5jb2RlX2YsIFwib3BhY2l0eVwiLCBcInZhbHVlXCIpIHx8XG4gICAgICAgIGdldChzdWJFbmNvZGVfZiwgXCJvcGFjaXR5XCIpID09PSB1bmRlZmluZWQpXG4gICAgKSB7XG4gICAgICBjb25zdCBvcGFjaXR5VmFsX2kgPSBnZXQoc3ViRW5jb2RlX2ksIFwib3BhY2l0eVwiLCBcInZhbHVlXCIpIHx8IDEuMDtcbiAgICAgIGxldCBvcGFjaXR5VmFsX2YgPSBnZXQoc3ViRW5jb2RlX2YsIFwib3BhY2l0eVwiLCBcInZhbHVlXCIpIHx8IDEuMDtcbiAgICAgIGlmIChNYXRoLmFicyhvcGFjaXR5VmFsX2kgLSBvcGFjaXR5VmFsX2YpIDwgMC41KSB7XG4gICAgICAgIGVuY29kZURpZmZzLm9wYWNpdHkgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvL1xuICAgIGlmIChtYXJrRGlmZnMubWFya3R5cGUgJiYgZW5jb2RlRGlmZnNbY2hhbm5lbF0pIHtcbiAgICAgIGNvbnN0IG1hcmt0eXBlX2kgPSBnZXQobWF0Y2gsIFwiaW5pdGlhbFwiLCBcInR5cGVcIiksXG4gICAgICAgIG1hcmt0eXBlX2YgPSBnZXQobWF0Y2gsIFwiZmluYWxcIiwgXCJ0eXBlXCIpO1xuICAgICAgbGV0IGNvcmVFbkF0dHJfaSA9IGdldENvcmVBdHRyKHN1YkVuY29kZV9pLCBjaGFubmVsLCBtYXJrdHlwZV9pKTtcbiAgICAgIGxldCBjb3JlRW5BdHRyX2YgPSBnZXRDb3JlQXR0cihzdWJFbmNvZGVfZiwgY2hhbm5lbCwgbWFya3R5cGVfZik7XG5cbiAgICAgIGlmIChkZWVwRXF1YWwoY29yZUVuQXR0cl9pLCBjb3JlRW5BdHRyX2YpKSB7XG4gICAgICAgIGVuY29kZURpZmZzW2NoYW5uZWxdID0gXCJieU1hcmt0eXBlQ2hhbmdlXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy9cbiAgICByZXR1cm4gZW5jb2RlRGlmZnM7XG4gIH0sIHt9KTtcblxuXG5cbiAgLy8gZmluZCB0aGUgdXNlZCBzY2FsZXNcbiAgbGV0IHVzZWRTY2FsZXMgPSBbXTtcbiAgW1widXBkYXRlXCJdLmZvckVhY2goc2V0ID0+IHtcbiAgICBjb25zdCBlbmNvZGVfaSA9IG1hdGNoLmluaXRpYWwgJiYgbWF0Y2guaW5pdGlhbC5lbmNvZGVbc2V0XTtcbiAgICBjb25zdCBlbmNvZGVfZiA9IG1hdGNoLmZpbmFsICYmIG1hdGNoLmZpbmFsLmVuY29kZVtzZXRdO1xuXG4gICAgW2VuY29kZV9pLCBlbmNvZGVfZl0uZm9yRWFjaChlbmNvZGUgPT4ge1xuICAgICAgT2JqZWN0LmtleXMoZW5jb2RlIHx8IHt9KS5tYXAoYXR0ciA9PiB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGVuY29kZVthdHRyXSkpIHtcbiAgICAgICAgICB1c2VkU2NhbGVzID0gdXNlZFNjYWxlcy5jb25jYXQoXG4gICAgICAgICAgICBlbmNvZGVbYXR0cl0uZmlsdGVyKGNoID0+IGNoLnNjYWxlKS5tYXAoY2ggPT4gY2guc2NhbGUpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChlbmNvZGVbYXR0cl0uc2NhbGUpIHtcbiAgICAgICAgICB1c2VkU2NhbGVzLnB1c2goZW5jb2RlW2F0dHJdLnNjYWxlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuICBtYXJrRGlmZnMudXNlZFNjYWxlcyA9IHVzZWRTY2FsZXMudW5pcXVlKCk7XG4gIG1hcmtEaWZmcy5zY2FsZSA9IGFwcGVuZENvbXBTY2FsZURpZmYobWFya0RpZmZzLnVzZWRTY2FsZXMsIHNjYWxlRGlmZnMpO1xuICBtYXJrRGlmZnMuc2NOYW1lcyA9IE9iamVjdC5rZXlzKG1hcmtEaWZmcy5zY2FsZSk7XG4gIG1hcmtEaWZmcy52aWV3ID0ge1xuICAgIGRlbHRhVzogbWFya0RpZmZzLnNjYWxlLnhcbiAgICAgID8gbWFya0RpZmZzLnNjYWxlLngucmFuZ2VEZWx0YVxuICAgICAgOiBtYXJrRGlmZnMudmlldy5kZWx0YVcsXG4gICAgZGVsdGFIOiBtYXJrRGlmZnMuc2NhbGUueVxuICAgICAgPyBtYXJrRGlmZnMuc2NhbGUueS5yYW5nZURlbHRhXG4gICAgICA6IG1hcmtEaWZmcy52aWV3LmRlbHRhSFxuICB9O1xuICBpZiAobWFya0RpZmZzLnNjYWxlLnkgJiYgbWFya0RpZmZzLnNjYWxlLnkuYWRkKSB7XG4gICAgbWFya0RpZmZzLnZpZXcuZGVsdGFIID0gTUlOX1BPU19ERUxUQTtcbiAgfSBlbHNlIGlmIChtYXJrRGlmZnMuc2NhbGUueSAmJiBtYXJrRGlmZnMuc2NhbGUueS5yZW1vdmUpIHtcbiAgICBtYXJrRGlmZnMudmlldy5kZWx0YUggPSAtTUlOX1BPU19ERUxUQTtcbiAgfVxuXG4gIGlmIChtYXJrRGlmZnMuc2NhbGUueCAmJiBtYXJrRGlmZnMuc2NhbGUueC5hZGQpIHtcbiAgICBtYXJrRGlmZnMudmlldy5kZWx0YVcgPSBNSU5fUE9TX0RFTFRBO1xuICB9IGVsc2UgaWYgKG1hcmtEaWZmcy5zY2FsZS54ICYmIG1hcmtEaWZmcy5zY2FsZS54LnJlbW92ZSkge1xuICAgIG1hcmtEaWZmcy52aWV3LmRlbHRhVyA9IC1NSU5fUE9TX0RFTFRBO1xuICB9XG5cbiAgLy8gR2V0IGRhdGEgYW5kIGNvbXBhcmVcbiAgLy8gZ2V0IGRhdGFDb21wIG5hbWVcbiAgLy8gbGV0IGlEYXRhQ29tcE5hbWUgPSBjb21wdXRlSGFzRmFjZXQobWF0Y2guaW5pdGlhbCkgPyBtYXRjaC5pbml0aWFsLnBhcmVudC5mcm9tLmZhY2V0LmRhdGEgOiBtYXRjaC5pbml0aWFsLmZyb20uZGF0YSxcbiAgLy8gICBmRGF0YUNvbXBOYW1lID0gY29tcHV0ZUhhc0ZhY2V0KG1hdGNoLmZpbmFsKSA/IG1hdGNoLmZpbmFsLnBhcmVudC5mcm9tLmZhY2V0LmRhdGEgOiBtYXRjaC5maW5hbC5mcm9tLmRhdGE7XG5cbiAgLy8gbWFya0RpZmZzLmRhdGEgPSBpc0RpZmZEYXRhQ29tcChcbiAgLy8gICBmaW5kRGF0YUNvbXAocmF3SW5mby5zVmlzLnNwZWMsIGlEYXRhQ29tcE5hbWUpLFxuICAvLyAgIGZpbmREYXRhQ29tcChyYXdJbmZvLmVWaXMuc3BlYywgZkRhdGFDb21wTmFtZSksXG4gIC8vICAgcmF3SW5mb1xuICAvLyApO1xuICAvLyBpZiAobWFya0RpZmZzLmRhdGEgfHwgdHJ1ZSkge1xuICBsZXQgaURhdGEgPSBtYXRjaC5pbml0aWFsXG4gICAgPyBnZXRNYXJrRGF0YShyYXdJbmZvLnNWaXMudmlldywgbWF0Y2guaW5pdGlhbCwgbWF0Y2guY29tcE5hbWUpXG4gICAgOiBbXTtcbiAgbGV0IGZEYXRhID0gbWF0Y2guZmluYWxcbiAgICA/IGdldE1hcmtEYXRhKHJhd0luZm8uZVZpcy52aWV3LCBtYXRjaC5maW5hbCwgbWF0Y2guY29tcE5hbWUpXG4gICAgOiBbXTtcblxuICBpZiAobWF0Y2guaW5pdGlhbCAmJiAoY29tcHV0ZUhhc0ZhY2V0KG1hdGNoLmluaXRpYWwpIHx8IGlzR3JvdXBpbmdNYXJrdHlwZShtYXRjaC5pbml0aWFsLnR5cGUpKSkge1xuICAgIGlEYXRhID0gdW5wYWNrRGF0YShpRGF0YSk7XG4gIH1cbiAgaWYgKG1hdGNoLmZpbmFsICYmIChjb21wdXRlSGFzRmFjZXQobWF0Y2guZmluYWwpIHx8IGlzR3JvdXBpbmdNYXJrdHlwZShtYXRjaC5maW5hbC50eXBlKSkpIHtcbiAgICBmRGF0YSA9IHVucGFja0RhdGEoZkRhdGEpO1xuICB9XG4gIGlmICghbWFya0RpZmZzLmRhdGEpIHtcblxuICAgIGlEYXRhID0gY29tcHV0ZUhhc0ZhY2V0KG1hdGNoLmluaXRpYWwpID8gdW5wYWNrRGF0YShpRGF0YSkgOiBpRGF0YTtcbiAgICBmRGF0YSA9IGNvbXB1dGVIYXNGYWNldChtYXRjaC5maW5hbCkgPyB1bnBhY2tEYXRhKGZEYXRhKSA6IGZEYXRhO1xuXG4gICAgbWFya0RpZmZzLmRhdGEgPSBpc0RpZmZEYXRhKGlEYXRhLCBmRGF0YSk7XG4gIH1cblxuICAvLyB9XG5cbiAgcmV0dXJuIG1hcmtEaWZmcztcbn1cblxuZnVuY3Rpb24gZGV0ZWN0U2NhbGVEaWZmcyhtYXRjaCwgcmF3SW5mbywgdXNlcklucHV0U2NhbGVzID0ge30pIHtcbiAgaWYgKCFtYXRjaC5pbml0aWFsKSB7XG4gICAgcmV0dXJuIHthZGQ6IHRydWV9O1xuICB9IGlmICghbWF0Y2guZmluYWwpIHtcbiAgICByZXR1cm4ge3JlbW92ZTogdHJ1ZX07XG4gIH1cbiAgbGV0IHNjYWxlRGlmZiA9IGRlZXBFcXVhbChtYXRjaC5pbml0aWFsLCBtYXRjaC5maW5hbCkgPyBmYWxzZSA6IHt9O1xuXG4gIGxldCByYW5nZVZhbHNfaSA9IHJhd0luZm8uc1Zpcy52aWV3LnNjYWxlKG1hdGNoLmluaXRpYWwubmFtZSkucmFuZ2UoKSxcbiAgICByYW5nZVZhbHNfZiA9IHJhd0luZm8uZVZpcy52aWV3LnNjYWxlKG1hdGNoLmZpbmFsLm5hbWUpLnJhbmdlKCk7XG4gIGxldCByYW5nZURlbHRhID0gMDtcbiAgaWYgKCFkZWVwRXF1YWwocmFuZ2VWYWxzX2ksIHJhbmdlVmFsc19mKSl7XG4gICAgaWYgKChyYW5nZVZhbHNfaS5sZW5ndGggPT09IDIgJiYgaXNOdW1iZXIocmFuZ2VWYWxzX2lbMF0pICYmIGlzTnVtYmVyKHJhbmdlVmFsc19pWzFdKSlcbiAgICAgICYmIChyYW5nZVZhbHNfZi5sZW5ndGggPT09IDIgJiYgaXNOdW1iZXIocmFuZ2VWYWxzX2ZbMF0pICYmIGlzTnVtYmVyKHJhbmdlVmFsc19mWzFdKSkpIHtcbiAgICAgIHJhbmdlRGVsdGEgPSBNYXRoLmFicyhyYW5nZVZhbHNfZlswXS1yYW5nZVZhbHNfZlsxXSkgLSBNYXRoLmFicyhyYW5nZVZhbHNfaVswXS1yYW5nZVZhbHNfaVsxXSk7XG4gICAgfVxuICB9XG5cbiAgbGV0IGRvbWFpblZhbHNfaSA9IHJhd0luZm8uc1Zpcy52aWV3LnNjYWxlKG1hdGNoLmluaXRpYWwubmFtZSkuZG9tYWluKCksXG4gICAgZG9tYWluVmFsc19mID0gcmF3SW5mby5lVmlzLnZpZXcuc2NhbGUobWF0Y2guZmluYWwubmFtZSkuZG9tYWluKCk7XG5cbiAgaWYgKCFzY2FsZURpZmYgJiYgZGVlcEVxdWFsKGRvbWFpblZhbHNfaSwgZG9tYWluVmFsc19mKSAmJiAocmFuZ2VEZWx0YSA9PT0gMCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc2NhbGVEaWZmID0ge1xuICAgIHJhbmdlRGVsdGE6IHJhbmdlRGVsdGEsXG4gICAgZG9tYWluVmFsdWVEaWZmOiAhZGVlcEVxdWFsKGRvbWFpblZhbHNfaSwgZG9tYWluVmFsc19mKVxuICB9O1xuXG4gIGxldCB1c2VySW5wdXREb21haW5EaW1lbnNpb25EaWZmID0gZ2V0KHVzZXJJbnB1dFNjYWxlc1ttYXRjaC5pbml0aWFsLm5hbWVdLCBcImRvbWFpbkRpbWVuc2lvblwiKTtcbiAgc2NhbGVEaWZmLmRvbWFpblNwYWNlRGlmZiA9IHVzZXJJbnB1dERvbWFpbkRpbWVuc2lvbkRpZmYgPT09IFwiZGlmZlwiID8gdHJ1ZSA6IChcbiAgICB1c2VySW5wdXREb21haW5EaW1lbnNpb25EaWZmID09PSBcInNhbWVcIiA/IGZhbHNlIDpcbiAgICAgICFkZWVwRXF1YWwobWF0Y2guaW5pdGlhbC5kb21haW4sIG1hdGNoLmZpbmFsLmRvbWFpbilcbiAgKTtcblxuXG4gIGlmICgoW1wiYmFuZFwiLCBcInBvaW50XCIsIFwib3JkaW5hbFwiXS5pbmRleE9mKG1hdGNoLmluaXRpYWwudHlwZSkgPj0gMCkgJiZcbiAgICAoW1wiYmFuZFwiLCBcInBvaW50XCIsIFwib3JkaW5hbFwiXS5pbmRleE9mKG1hdGNoLmZpbmFsLnR5cGUpID49IDApKSB7XG4gICAgc2NhbGVEaWZmLnN0YXlEaXNjcmV0ZSA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIHNjYWxlRGlmZjtcbn1cblxuZnVuY3Rpb24gZGV0ZWN0TGVnZW5kRGlmZnMobWF0Y2gsIHJhd0luZm8sIHNjYWxlRGlmZnMpIHtcbiAgY29uc3QgbGVnZW5kRGlmZnMgPSB7XG4gICAgdXNlZFNjYWxlczogW10sXG4gICAgdmlldzogeyBkZWx0YVc6IDAsIGRlbHRhSDogMCwgeDogMCwgeTogMCB9XG4gIH07XG4gIGlmICghbWF0Y2guaW5pdGlhbCkge1xuICAgIGxlZ2VuZERpZmZzLmFkZCA9IHRydWU7XG4gICAgbGVnZW5kRGlmZnMudmlldyA9IHtcbiAgICAgIGRlbHRhVzogTUlOX1BPU19ERUxUQSxcbiAgICAgIGRlbHRhSDogTUlOX1BPU19ERUxUQSxcbiAgICAgIHg6IE1JTl9QT1NfREVMVEEsXG4gICAgICB5OiBNSU5fUE9TX0RFTFRBXG4gICAgfTtcbiAgfSBlbHNlIGlmICghbWF0Y2guZmluYWwpIHtcbiAgICBsZWdlbmREaWZmcy5yZW1vdmUgPSB0cnVlO1xuICAgIGxlZ2VuZERpZmZzLnZpZXcgPSB7XG4gICAgICBkZWx0YVc6IC1NSU5fUE9TX0RFTFRBLFxuICAgICAgZGVsdGFIOiAtTUlOX1BPU19ERUxUQSxcbiAgICAgIHg6IC1NSU5fUE9TX0RFTFRBLFxuICAgICAgeTogLU1JTl9QT1NfREVMVEFcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgbGVnZW5kX2kgPSBjb3B5KG1hdGNoLmluaXRpYWwgfHwge30pOyBsZXQgbGVnZW5kX2YgPSBjb3B5KG1hdGNoLmZpbmFsIHx8IHt9KTtcblxuICAvLyAxKSBzY2FsZSBkaWZmXG4gIFtcbiAgICBcImZpbGxcIixcbiAgICBcIm9wYWNpdHlcIixcbiAgICBcInNoYXBlXCIsXG4gICAgXCJzaXplXCIsXG4gICAgXCJzdHJva2VcIixcbiAgICBcInN0cm9rZURhc2hcIixcbiAgICBcInN0cm9rZVdpZHRoXCJcbiAgXS5mb3JFYWNoKHNjYWxlID0+IHtcbiAgICBpZiAobWF0Y2guaW5pdGlhbCAmJiBtYXRjaC5pbml0aWFsW3NjYWxlXSkge1xuICAgICAgbGVnZW5kRGlmZnMudXNlZFNjYWxlcy5wdXNoKG1hdGNoLmluaXRpYWxbc2NhbGVdKTtcbiAgICB9XG4gICAgaWYgKG1hdGNoLmZpbmFsICYmIG1hdGNoLmZpbmFsW3NjYWxlXSkge1xuICAgICAgbGVnZW5kRGlmZnMudXNlZFNjYWxlcy5wdXNoKG1hdGNoLmZpbmFsW3NjYWxlXSk7XG4gICAgfVxuXG4gICAgZGVsZXRlIGxlZ2VuZF9pW3NjYWxlXTtcbiAgICBkZWxldGUgbGVnZW5kX2Zbc2NhbGVdO1xuICB9LCBmYWxzZSk7XG4gIGxlZ2VuZERpZmZzLnVzZWRTY2FsZXMgPSBsZWdlbmREaWZmcy51c2VkU2NhbGVzLnVuaXF1ZSgpO1xuICBsZWdlbmREaWZmcy5zY2FsZSA9IGFwcGVuZENvbXBTY2FsZURpZmYobGVnZW5kRGlmZnMudXNlZFNjYWxlcywgc2NhbGVEaWZmcyk7XG4gIGxlZ2VuZERpZmZzLnNjTmFtZXMgPSBPYmplY3Qua2V5cyhsZWdlbmREaWZmcy5zY2FsZSk7XG4gIC8vIDIpIGVuY29kZSBkaWZmXG4gIGxlZ2VuZERpZmZzLmVuY29kZSA9ICFkZWVwRXF1YWwobGVnZW5kX2ksIGxlZ2VuZF9mKTtcblxuICAvLyAzKSBQb3MgRGlmZlxuICBpZiAobWF0Y2guaW5pdGlhbCAmJiBtYXRjaC5maW5hbCkge1xuICAgIGNvbnN0IGxlZ2VuZEdEYXR1bSA9IHtcbiAgICAgIGluaXRpYWw6IGZpbmRDb21wKFxuICAgICAgICByYXdJbmZvLnNWaXMudmlldy5zY2VuZWdyYXBoKCkucm9vdCxcbiAgICAgICAgbWF0Y2guY29tcE5hbWUsXG4gICAgICAgIFwibGVnZW5kXCJcbiAgICAgIClbMF0uaXRlbXNbMF0sXG4gICAgICBmaW5hbDogZmluZENvbXAoXG4gICAgICAgIHJhd0luZm8uZVZpcy52aWV3LnNjZW5lZ3JhcGgoKS5yb290LFxuICAgICAgICBtYXRjaC5jb21wTmFtZSxcbiAgICAgICAgXCJsZWdlbmRcIlxuICAgICAgKVswXS5pdGVtc1swXVxuICAgIH07XG5cbiAgICBsZWdlbmREaWZmcy52aWV3LnggPSBsZWdlbmRHRGF0dW0uZmluYWwueCAtIGxlZ2VuZEdEYXR1bS5pbml0aWFsLng7XG4gICAgbGVnZW5kRGlmZnMudmlldy55ID0gbGVnZW5kR0RhdHVtLmZpbmFsLnkgLSBsZWdlbmRHRGF0dW0uaW5pdGlhbC55O1xuICB9XG5cbiAgcmV0dXJuIGxlZ2VuZERpZmZzO1xufVxuXG5mdW5jdGlvbiBkZXRlY3RBeGlzRGlmZnMobWF0Y2gsIHJhd0luZm8sIHNjYWxlRGlmZnMpIHtcbiAgY29uc3QgYXhpc0RpZmZzID0ge1xuICAgIHZpZXc6IHsgZGVsdGFXOiAwLCBkZWx0YUg6IDAsIHg6IDAsIHk6IDAgfVxuICB9O1xuICBpZiAoIW1hdGNoLmluaXRpYWwpIHtcbiAgICBheGlzRGlmZnMuYWRkID0gdHJ1ZTtcbiAgICBheGlzRGlmZnMudmlldyA9IHtcbiAgICAgIGRlbHRhVzogTUlOX1BPU19ERUxUQSxcbiAgICAgIGRlbHRhSDogTUlOX1BPU19ERUxUQSxcbiAgICAgIHg6IE1JTl9QT1NfREVMVEEsXG4gICAgICB5OiBNSU5fUE9TX0RFTFRBXG4gICAgfTtcbiAgfSBlbHNlIGlmICghbWF0Y2guZmluYWwpIHtcbiAgICBheGlzRGlmZnMucmVtb3ZlID0gdHJ1ZTtcbiAgICBheGlzRGlmZnMudmlldyA9IHtcbiAgICAgIGRlbHRhVzogLU1JTl9QT1NfREVMVEEsXG4gICAgICBkZWx0YUg6IC1NSU5fUE9TX0RFTFRBLFxuICAgICAgeDogLU1JTl9QT1NfREVMVEEsXG4gICAgICB5OiAtTUlOX1BPU19ERUxUQVxuICAgIH07XG4gIH1cbiAgLy8gMSkgc2NhbGUgZGlmZlxuICBheGlzRGlmZnMudXNlZFNjYWxlcyA9IFtdO1xuICBpZiAobWF0Y2guaW5pdGlhbCkge1xuICAgIGF4aXNEaWZmcy51c2VkU2NhbGVzLnB1c2gobWF0Y2guaW5pdGlhbC5zY2FsZSk7XG4gIH0gZWxzZSBpZiAobWF0Y2guZmluYWwpIHtcbiAgICBheGlzRGlmZnMudXNlZFNjYWxlcy5wdXNoKG1hdGNoLmZpbmFsLnNjYWxlKTtcbiAgfVxuXG4gIGF4aXNEaWZmcy5zY2FsZSA9IGFwcGVuZENvbXBTY2FsZURpZmYoYXhpc0RpZmZzLnVzZWRTY2FsZXMsIHNjYWxlRGlmZnMpO1xuICBheGlzRGlmZnMuc2NOYW1lcyA9IE9iamVjdC5rZXlzKGF4aXNEaWZmcy5zY2FsZSk7XG4gIGlmIChtYXRjaC5maW5hbCAmJiBtYXRjaC5pbml0aWFsKSB7XG4gICAgYXhpc0RpZmZzLnZpZXcgPSB7XG4gICAgICBkZWx0YVc6IGF4aXNEaWZmcy5zY2FsZS54ID8gYXhpc0RpZmZzLnNjYWxlLngucmFuZ2VEZWx0YSA6IDAsXG4gICAgICBkZWx0YUg6IGF4aXNEaWZmcy5zY2FsZS55ID8gYXhpc0RpZmZzLnNjYWxlLnkucmFuZ2VEZWx0YSA6IDBcbiAgICB9O1xuICAgIGlmIChtYXRjaC5pbml0aWFsLnNjYWxlID09PSBtYXRjaC5maW5hbC5zY2FsZSkge1xuICAgICAgaWYgKCEhbWF0Y2guaW5pdGlhbC5ncmlkICE9PSAhIW1hdGNoLmZpbmFsLmdyaWQpIHtcbiAgICAgICAgaWYgKG1hdGNoLmZpbmFsLnNjYWxlID09PSBcInhcIikge1xuICAgICAgICAgIGF4aXNEaWZmcy52aWV3LmRlbHRhSCA9IG1hdGNoLmluaXRpYWwuZ3JpZFxuICAgICAgICAgICAgPyAtTUlOX1BPU19ERUxUQVxuICAgICAgICAgICAgOiBNSU5fUE9TX0RFTFRBO1xuICAgICAgICB9IGVsc2UgaWYgKG1hdGNoLmZpbmFsLnNjYWxlID09PSBcInlcIikge1xuICAgICAgICAgIGF4aXNEaWZmcy52aWV3LmRlbHRhVyA9IG1hdGNoLmluaXRpYWwuZ3JpZFxuICAgICAgICAgICAgPyAtTUlOX1BPU19ERUxUQVxuICAgICAgICAgICAgOiBNSU5fUE9TX0RFTFRBO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCEhbWF0Y2guaW5pdGlhbC5ncmlkICYmICEhbWF0Y2guZmluYWwuZ3JpZCkge1xuICAgICAgICBsZXQgZGVsdGEgPVxuICAgICAgICAgIGdldChzY2FsZURpZmZzLCBtYXRjaC5pbml0aWFsLmdyaWRTY2FsZSwgXCJtZXRhXCIsIFwicmFuZ2VEZWx0YVwiKSB8fCAwO1xuICAgICAgICBpZiAobWF0Y2guZmluYWwub3JpZW50ID09PSBcImxlZnRcIiB8fCBtYXRjaC5maW5hbC5vcmllbnQgPT09IFwicmlnaHRcIikge1xuICAgICAgICAgIGF4aXNEaWZmcy52aWV3LmRlbHRhVyA9IGRlbHRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF4aXNEaWZmcy52aWV3LmRlbHRhSCA9IGRlbHRhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gMikgZW5jb2RlIGRpZmZcbiAgY29uc3QgYXhpc19pID0gY29weShtYXRjaC5pbml0aWFsKSB8fCB7fTsgbGV0IGF4aXNfZiA9IGNvcHkobWF0Y2guZmluYWwgfHwge30pO1xuICBkZWxldGUgYXhpc19pLnNjYWxlO1xuICBkZWxldGUgYXhpc19mLnNjYWxlO1xuICBheGlzRGlmZnMuZW5jb2RlID0gIWRlZXBFcXVhbChheGlzX2ksIGF4aXNfZik7XG5cbiAgLy8gMykgUG9zIERpZmZcbiAgaWYgKG1hdGNoLmluaXRpYWwgJiYgbWF0Y2guZmluYWwpIHtcbiAgICBjb25zdCBheGlzR0RhdHVtID0ge1xuICAgICAgaW5pdGlhbDogZmluZENvbXAoXG4gICAgICAgIHJhd0luZm8uc1Zpcy52aWV3LnNjZW5lZ3JhcGgoKS5yb290LFxuICAgICAgICBtYXRjaC5jb21wTmFtZSxcbiAgICAgICAgXCJheGlzXCJcbiAgICAgIClbMF0uaXRlbXNbMF0sXG4gICAgICBmaW5hbDogZmluZENvbXAoXG4gICAgICAgIHJhd0luZm8uZVZpcy52aWV3LnNjZW5lZ3JhcGgoKS5yb290LFxuICAgICAgICBtYXRjaC5jb21wTmFtZSxcbiAgICAgICAgXCJheGlzXCJcbiAgICAgIClbMF0uaXRlbXNbMF1cbiAgICB9O1xuICAgIGxldCBmV2lkdGggPSBheGlzR0RhdHVtLmZpbmFsLmJvdW5kcy54MiAtIGF4aXNHRGF0dW0uZmluYWwuYm91bmRzLngxLFxuICAgICAgaVdpZHRoID0gYXhpc0dEYXR1bS5pbml0aWFsLmJvdW5kcy54MiAtIGF4aXNHRGF0dW0uaW5pdGlhbC5ib3VuZHMueDEsXG4gICAgICBmSGVpZ2h0ID0gYXhpc0dEYXR1bS5maW5hbC5ib3VuZHMueTIgLSBheGlzR0RhdHVtLmZpbmFsLmJvdW5kcy55MSxcbiAgICAgIGlIZWlnaHQgPSBheGlzR0RhdHVtLmluaXRpYWwuYm91bmRzLnkyIC0gYXhpc0dEYXR1bS5pbml0aWFsLmJvdW5kcy55MTtcblxuICAgIGF4aXNEaWZmcy52aWV3LmRlbHRhVyArPSBmV2lkdGggLSBpV2lkdGg7XG4gICAgYXhpc0RpZmZzLnZpZXcuZGVsdGFIICs9IGZIZWlnaHQgLSBpSGVpZ2h0O1xuXG4gICAgYXhpc0RpZmZzLnZpZXcueCA9IGF4aXNHRGF0dW0uZmluYWwueCAtIGF4aXNHRGF0dW0uaW5pdGlhbC54O1xuICAgIGF4aXNEaWZmcy52aWV3LnkgPSBheGlzR0RhdHVtLmZpbmFsLnkgLSBheGlzR0RhdHVtLmluaXRpYWwueTtcbiAgfVxuXG4gIHJldHVybiBheGlzRGlmZnM7XG59XG5mdW5jdGlvbiBkZXRlY3RWaWV3RGlmZihyYXdJbmZvKSB7XG4gIGNvbnN0IHZpZXdEaWZmcyA9IGdldFZpZXdDaGFuZ2UocmF3SW5mbyk7XG4gIGNvbnN0IHBhZGRpbmdEaWZmID0gdmlld0RpZmZzLmZpbmFsLnBhZGRpbmcgLSB2aWV3RGlmZnMuaW5pdGlhbC5wYWRkaW5nO1xuICB2aWV3RGlmZnMuZGVsdGFXID0gdmlld0RpZmZzLmZpbmFsLnZpZXdXaWR0aCAtIHZpZXdEaWZmcy5pbml0aWFsLnZpZXdXaWR0aCArIHBhZGRpbmdEaWZmO1xuICB2aWV3RGlmZnMuZGVsdGFIID0gdmlld0RpZmZzLmZpbmFsLnZpZXdIZWlnaHQgLSB2aWV3RGlmZnMuaW5pdGlhbC52aWV3SGVpZ2h0ICsgcGFkZGluZ0RpZmY7XG4gIHZpZXdEaWZmcy53aWR0aCA9IHt9O1xuICB2aWV3RGlmZnMuaGVpZ2h0ID0ge307XG4gIGlmIChNYXRoLmFicyh2aWV3RGlmZnMuZGVsdGFXKSA+IE1JTl9QT1NfREVMVEEvMikge1xuICAgIHZpZXdEaWZmcy53aWR0aFt2aWV3RGlmZnMuZGVsdGFXID4gMCA/IFwiaW5jcmVhc2VcIiA6IFwiZGVjcmVhc2VcIl0gPSB0cnVlO1xuICB9XG4gIGlmIChNYXRoLmFicyh2aWV3RGlmZnMuZGVsdGFIKSA+IE1JTl9QT1NfREVMVEEvMikge1xuICAgIHZpZXdEaWZmcy5oZWlnaHRbdmlld0RpZmZzLmRlbHRhSCA+IDAgPyBcImluY3JlYXNlXCIgOiBcImRlY3JlYXNlXCJdID0gdHJ1ZTtcbiAgfVxuICB2aWV3RGlmZnMuc2NOYW1lcyA9IFtdO1xuXG4gIHJldHVybiB2aWV3RGlmZnM7XG59XG5cbmZ1bmN0aW9uIGRldGVjdFNpZ25hbERpZmZzKHJhd0luZm8pIHtcbiAgY29uc3Qgc2lnbmFsRGlmZnMgPSB7XG4gICAgaW5pdGlhbDogcmF3SW5mby5zVmlzLnZpZXcuX3J1bnRpbWUuc2lnbmFscyxcbiAgICBmaW5hbDogcmF3SW5mby5lVmlzLnZpZXcuX3J1bnRpbWUuc2lnbmFscyxcbiAgICBtZXRhOiB7XG4gICAgICB1cGRhdGU6IFtdLFxuICAgICAgZXhpdDogW10sXG4gICAgICBlbnRlcjogW10sXG4gICAgICBzYW1lOiBbXVxuICAgIH1cbiAgfTtcbiAgT2JqZWN0LmtleXMoc2lnbmFsRGlmZnMuaW5pdGlhbClcbiAgICAuY29uY2F0KE9iamVjdC5rZXlzKHNpZ25hbERpZmZzLmZpbmFsKSlcbiAgICAudW5pcXVlKClcbiAgICAuZm9yRWFjaChzZ05hbWUgPT4ge1xuICAgICAgbGV0IHNnX2YgPSBzaWduYWxEaWZmcy5maW5hbFtzZ05hbWVdO1xuICAgICAgbGV0IHNnX2kgPSBzaWduYWxEaWZmcy5pbml0aWFsW3NnTmFtZV07XG4gICAgICBpZiAoIXNnX2YpIHtcbiAgICAgICAgc2lnbmFsRGlmZnMubWV0YS5leGl0LnB1c2goc2dOYW1lKTtcbiAgICAgIH0gZWxzZSBpZiAoIXNnX2kpIHtcbiAgICAgICAgc2lnbmFsRGlmZnMubWV0YS5lbnRlci5wdXNoKHNnTmFtZSk7XG4gICAgICB9IGVsc2UgaWYgKCFkZWVwRXF1YWwoc2dfZi52YWx1ZSwgc2dfaS52YWx1ZSkpIHtcbiAgICAgICAgc2lnbmFsRGlmZnMubWV0YS51cGRhdGUucHVzaChzZ05hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2lnbmFsRGlmZnMubWV0YS5zYW1lLnB1c2goc2dOYW1lKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgcmV0dXJuIHNpZ25hbERpZmZzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEaWZmRGF0YShpRGF0YSwgZkRhdGEpIHtcbiAgY29uc3QgZGlmZiA9IHsgY29sdW1uOiBmYWxzZSwgcm93OiBmYWxzZSB9O1xuXG4gIGxldCBpRmllbGRzID0gaURhdGFbMF0gPyBPYmplY3Qua2V5cyhpRGF0YVswXS5kYXR1bSkgOiBbXTtcbiAgbGV0IGZGaWVsZHMgPSBmRGF0YVswXSA/IE9iamVjdC5rZXlzKGZEYXRhWzBdLmRhdHVtKSA6IFtdO1xuICBsZXQgc2hhcmVkRmllbGRzID0gW107XG4gIGlmICghZGVlcEVxdWFsKGlGaWVsZHMsIGZGaWVsZHMpKSB7XG4gICAgaWYgKGlGaWVsZHMuY29udGFpbkFsbChmRmllbGRzKSkge1xuICAgICAgZGlmZi5jb2x1bW4gPSBcInJlbW92ZWRcIjtcbiAgICAgIHNoYXJlZEZpZWxkcyA9IGZGaWVsZHM7XG4gICAgfSBlbHNlIGlmIChmRmllbGRzLmNvbnRhaW5BbGwoaUZpZWxkcykpIHtcbiAgICAgIGRpZmYuY29sdW1uID0gXCJhZGRlZFwiO1xuICAgICAgc2hhcmVkRmllbGRzID0gaUZpZWxkcztcbiAgICB9IGVsc2Uge1xuICAgICAgZGlmZi5jb2x1bW4gPSBcImNoYW5nZWRcIjtcbiAgICAgIHNoYXJlZEZpZWxkcyA9IGlGaWVsZHMuZmlsdGVyKGYgPT4gZkZpZWxkcy5pbmRleE9mKGYpID49IDApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBzaGFyZWRGaWVsZHMgPSBpRmllbGRzO1xuICB9XG5cbiAgaWYgKHNoYXJlZEZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgbWFwcGVkSURhdGEgPSBpRGF0YS5tYXAoZCA9PlxuICAgICAgc2hhcmVkRmllbGRzLm1hcChmID0+IGQuZGF0dW1bZl0pLmpvaW4oXCIsXCIpXG4gICAgKTtcbiAgICBjb25zdCBtYXBwZWRGRGF0YSA9IGZEYXRhLm1hcChkID0+XG4gICAgICBzaGFyZWRGaWVsZHMubWFwKGYgPT4gZC5kYXR1bVtmXSkuam9pbihcIixcIilcbiAgICApO1xuICAgIGRpZmYucm93ID0gIWRlZXBFcXVhbChtYXBwZWRJRGF0YSwgbWFwcGVkRkRhdGEpO1xuICB9IGVsc2Uge1xuICAgIGRpZmYucm93ID0gaURhdGEubGVuZ3RoICE9PSBmRGF0YS5sZW5ndGg7XG4gIH1cblxuICBpZiAoIWRpZmYuY29sdW1uICYmICFkaWZmLnJvdykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBkaWZmLnNoYXJlZEZpZWxkcyA9IHNoYXJlZEZpZWxkcztcbiAgcmV0dXJuIGRpZmY7XG59XG5cbi8vIGZ1bmN0aW9uIGlzRGlmZkRhdGFDb21wKGlEYXRhQ29tcCwgZkRhdGFDb21wLCByYXdJbmZvKSB7XG4vLyAgIGlmIChpRGF0YUNvbXAuc291cmNlIHx8IGZEYXRhQ29tcC5zb3VyY2UpIHtcbi8vICAgICBsZXQgbmV3SURhdGFDb21wID0gaURhdGFDb21wLFxuLy8gICAgICAgbmV3RkRhdGFDb21wID0gZkRhdGFDb21wO1xuLy8gICAgIGlmIChpRGF0YUNvbXAuc291cmNlICYmIHR5cGVvZihpRGF0YUNvbXAuc291cmNlKSA9PT0gXCJzdHJpbmdcIikge1xuLy8gICAgICAgbmV3SURhdGFDb21wID0gZmluZERhdGFDb21wKHJhd0luZm8uc1Zpcy5zcGVjLCBpRGF0YUNvbXAuc291cmNlKTtcbi8vICAgICAgIG5ld0lEYXRhQ29tcC50cmFuc2Zvcm0gPSAobmV3SURhdGFDb21wLnRyYW5zZm9ybSB8fCBbXSkuY29uY2F0KGlEYXRhQ29tcC50cmFuc2Zvcm0pO1xuLy8gICAgIH1cbi8vICAgICBpZiAoZkRhdGFDb21wLnNvdXJjZSAmJiB0eXBlb2YoZkRhdGFDb21wLnNvdXJjZSkgPT09IFwic3RyaW5nXCIpIHtcbi8vICAgICAgIG5ld0ZEYXRhQ29tcCA9IGZpbmREYXRhQ29tcChyYXdJbmZvLmVWaXMuc3BlYywgZkRhdGFDb21wLnNvdXJjZSk7XG4vLyAgICAgICBuZXdGRGF0YUNvbXAudHJhbnNmb3JtID0gKG5ld0ZEYXRhQ29tcC50cmFuc2Zvcm0gfHwgW10pLmNvbmNhdChmRGF0YUNvbXAudHJhbnNmb3JtKTtcbi8vICAgICB9XG5cbi8vICAgICByZXR1cm4gaXNEaWZmRGF0YUNvbXAobmV3SURhdGFDb21wLCBuZXdGRGF0YUNvbXAsIHJhd0luZm8pXG4vLyAgIH1cblxuLy8gICBsZXQgX2kgPSBjb3B5KGlEYXRhQ29tcCksIF9mID0gY29weShmRGF0YUNvbXApO1xuLy8gICBkZWxldGUgX2kubmFtZTtcbi8vICAgLy8gZGVsZXRlIF9pLnZhbHVlcztcbi8vICAgZGVsZXRlIF9mLm5hbWU7XG4vLyAgIC8vIGRlbGV0ZSBfZi52YWx1ZXM7XG4vLyAgIGlmIChfaS52YWx1ZXMgJiYgX2YudmFsdWVzKSB7XG4vLyAgICAgaWYgKF9pLnZhbHVlcy5sZW5ndGggIT09IF9mLnZhbHVlcy5sZW5ndGgpIHtcbi8vICAgICAgIHJldHVybiB0cnVlXG4vLyAgICAgfVxuLy8gICAgIGlmICggSlNPTi5zdHJpbmdpZnkoX2kudmFsdWVzLnNvcnQoKSkgIT09IEpTT04uc3RyaW5naWZ5KF9mLnZhbHVlcy5zb3J0KCkpKXtcbi8vICAgICAgIHJldHVybiB0cnVlXG4vLyAgICAgfVxuXG4vLyAgIH1cbi8vICAgZGVsZXRlIF9pLnZhbHVlcztcbi8vICAgZGVsZXRlIF9mLnZhbHVlcztcbi8vICAgcmV0dXJuICFkZWVwRXF1YWwoX2ksIF9mKTtcbi8vICAgLy9jb21wYXJlIGFsbCBleGNlcHQgZm9yIFwibmFtZVwiLiAgKFwidmFsdWVzXCIgbWF5IHRha2UgYSBsb3Qgb2YgdGltZXMuLi4pXG4vLyB9XG5cbi8vIGZ1bmN0aW9uIGZpbmREYXRhQ29tcChzcGVjLCBjb21wTmFtZSkge1xuLy8gICByZXR1cm4gc3BlYy5kYXRhLmZpbmQoY29tcCA9PiBjb21wLm5hbWUgPT09IGNvbXBOYW1lKTtcbi8vIH1cbiIsImltcG9ydCB7IGdldE1hcmtEYXRhLCB1bnBhY2tEYXRhIH0gZnJvbSBcIi4uL3V0aWwvdmdEYXRhSGVscGVyXCI7XG5pbXBvcnQgeyBnZXQgfSBmcm9tIFwiLi4vdXRpbC91dGlsXCI7XG5pbXBvcnQgeyBjb21wdXRlSGFzRmFjZXQsIGlzR3JvdXBpbmdNYXJrdHlwZSB9IGZyb20gXCIuLi9jaGFuZ2VGZXRjaGVyL3N0YXRlL3V0aWxcIjtcbmltcG9ydCB7IGdldFN1YkVuY29kZUJ5Q2hhbm5lbCB9IGZyb20gXCIuL3V0aWxcIjtcblxuZnVuY3Rpb24gYXBwbHlNYXJrRGlmZnMoXG4gIG1hcmtEaWZmLFxuICBhcHBseWluZ0RpZmZzLFxuICByYXdJbmZvLFxuICBleHRyYURpZmZzQnlNYXJrdHlwZUNoYW5nZSA9IFtdXG4pIHtcblxuICBjb25zdCBtYXJrQ29tcFN1bW1hcnkgPSBuZXcgTWFya1N1bW1hcnkobWFya0RpZmYsIHJhd0luZm8pO1xuXG4gIGFwcGx5aW5nRGlmZnMuZm9yRWFjaChkaWZmID0+IHtcbiAgICBtYXJrQ29tcFN1bW1hcnkuYXBwbHlEaWZmKGRpZmYsIGV4dHJhRGlmZnNCeU1hcmt0eXBlQ2hhbmdlKTtcbiAgfSk7XG4gIHJldHVybiBtYXJrQ29tcFN1bW1hcnk7XG59XG5cblxuY2xhc3MgTWFya1N1bW1hcnkge1xuICBjb25zdHJ1Y3RvcihtYXJrRGlmZiwgcmF3SW5mbykge1xuICAgIGNvbnN0IHZlZ2FWaWV3ID0gcmF3SW5mby5zVmlzLnZpZXc7XG4gICAgbGV0IGRhdGEgPSBnZXRNYXJrRGF0YShcbiAgICAgIHZlZ2FWaWV3LFxuICAgICAgbWFya0RpZmYuaW5pdGlhbCxcbiAgICAgIG1hcmtEaWZmLmNvbXBOYW1lLFxuXG4gICAgKTtcbiAgICBsZXQgaGFzRmFjZXQgPSBtYXJrRGlmZi5pbml0aWFsID8gY29tcHV0ZUhhc0ZhY2V0KG1hcmtEaWZmLmluaXRpYWwpIDogdW5kZWZpbmVkO1xuICAgIGxldCBpc0dyb3VwaW5nTXR5cGUgPSBtYXJrRGlmZi5pbml0aWFsID8gaXNHcm91cGluZ01hcmt0eXBlKG1hcmtEaWZmLmluaXRpYWwudHlwZSkgOiB1bmRlZmluZWQ7XG4gICAgZGF0YSA9IGhhc0ZhY2V0IHx8IGlzR3JvdXBpbmdNdHlwZSA/IHVucGFja0RhdGEoZGF0YSkgOiBkYXRhO1xuICAgIHRoaXMubWFya0RpZmYgPSBtYXJrRGlmZjtcbiAgICB0aGlzLnJhd0luZm8gPSByYXdJbmZvO1xuICAgIHRoaXMuaXNFbXB0eSA9IG1hcmtEaWZmLmFkZDtcbiAgICB0aGlzLm1hcmt0eXBlID0gZ2V0KG1hcmtEaWZmLCBcImluaXRpYWxcIiwgXCJ0eXBlXCIpO1xuICAgIHRoaXMuZW5jb2RlID0gZ2V0KG1hcmtEaWZmLCBcImluaXRpYWxcIiwgXCJlbmNvZGVcIiwgXCJ1cGRhdGVcIikgfHwge307XG5cbiAgICB0aGlzLmRhdGEgPSB7XG4gICAgICBoYXNGYWNldCxcbiAgICAgIGlzR3JvdXBpbmdNYXJrdHlwZTogaXNHcm91cGluZ010eXBlLFxuICAgICAgZmllbGRzOiBkYXRhWzBdID8gT2JqZWN0LmtleXMoZGF0YVswXS5kYXR1bSkgOiBbXSxcbiAgICAgIHZhbHVlczogZGF0YVxuICAgIH07XG5cbiAgICB0aGlzLnNjYWxlcyA9IG1hcmtEaWZmLm1ldGEudXNlZFNjYWxlcy5yZWR1Y2UoKHNjYWxlcywgc2NOYW1lKSA9PiB7XG4gICAgICBjb25zdCBzY2FsZV9pID0gdmVnYVZpZXcuX3J1bnRpbWUuc2NhbGVzW3NjTmFtZV07XG4gICAgICBpZiAoc2NhbGVfaSkge1xuICAgICAgICBzY2FsZXNbc2NOYW1lXSA9IHNjYWxlX2kudmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2NhbGVzO1xuICAgIH0sIHt9KTtcblxuICAgIHRoaXMuc3R5bGUgPSBnZXQobWFya0RpZmYsIFwiaW5pdGlhbFwiLCBcInN0eWxlXCIpO1xuICB9XG5cbiAgYXBwbHlEaWZmKGRpZmYsIGV4dHJhRGlmZnNCeU1hcmt0eXBlQ2hhbmdlKSB7XG5cbiAgICBpZiAoZGlmZiA9PT0gXCJhZGRcIikge1xuICAgICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGRpZmYgPT09IFwicmVtb3ZlXCIpIHtcbiAgICAgIHRoaXMuaXNFbXB0eSA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoZGlmZiA9PT0gXCJtYXJrdHlwZVwiKSB7XG4gICAgICB0aGlzLm1hcmt0eXBlID0gZ2V0KHRoaXMubWFya0RpZmYsIFwiZmluYWxcIiwgXCJ0eXBlXCIpO1xuICAgICAgZXh0cmFEaWZmc0J5TWFya3R5cGVDaGFuZ2UuZm9yRWFjaChleHRyYURpZmYgPT4ge1xuICAgICAgICB0aGlzLmFwcGx5RGlmZihleHRyYURpZmYpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChkaWZmID09PSBcImRhdGFcIikge1xuICAgICAgdGhpcy5kYXRhID0ge1xuICAgICAgICBpc0dyb3VwaW5nTWFya3R5cGU6IHRoaXMubWFya0RpZmYuZmluYWwgPyBpc0dyb3VwaW5nTWFya3R5cGUodGhpcy5tYXJrRGlmZi5maW5hbC50eXBlKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgaGFzRmFjZXQ6IHRoaXMubWFya0RpZmYuZmluYWwgPyBjb21wdXRlSGFzRmFjZXQodGhpcy5tYXJrRGlmZi5maW5hbCkgOiB1bmRlZmluZWQsXG4gICAgICB9O1xuICAgICAgbGV0IGRhdGEgPSBnZXRNYXJrRGF0YShcbiAgICAgICAgdGhpcy5yYXdJbmZvLmVWaXMudmlldyxcbiAgICAgICAgdGhpcy5tYXJrRGlmZi5maW5hbCxcbiAgICAgICAgdGhpcy5tYXJrRGlmZi5jb21wTmFtZVxuICAgICAgKTtcbiAgICAgIGRhdGEgPSB0aGlzLmRhdGEuaGFzRmFjZXQgfHwgdGhpcy5kYXRhLmlzR3JvdXBpbmdNYXJrdHlwZSA/IHVucGFja0RhdGEoZGF0YSkgOiBkYXRhO1xuICAgICAgdGhpcy5kYXRhLmZpZWxkcyA9IGRhdGFbMF0gPyBPYmplY3Qua2V5cyhkYXRhWzBdLmRhdHVtKSA6IFtdO1xuICAgICAgdGhpcy5kYXRhLnZhbHVlcyA9IGRhdGE7XG4gICAgfSBlbHNlIGlmIChkaWZmLmluZGV4T2YoXCJlbmNvZGUuXCIpID49IDApIHtcbiAgICAgIGNvbnN0IGNoYW5uZWwgPSBkaWZmLnJlcGxhY2UoXCJlbmNvZGUuXCIsIFwiXCIpO1xuICAgICAgdGhpcy5lbmNvZGUgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICB7fSxcbiAgICAgICAgdGhpcy5lbmNvZGUsXG4gICAgICAgIHRoaXMubWFya0RpZmYuZmluYWwgPyBnZXRTdWJFbmNvZGVCeUNoYW5uZWwodGhpcy5tYXJrRGlmZi5maW5hbC5lbmNvZGUudXBkYXRlLCBjaGFubmVsKSA6IHt9XG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoZGlmZi5pbmRleE9mKFwic2NhbGUuXCIpID49IDApIHtcbiAgICAgIGNvbnN0IHNjTmFtZSA9IGRpZmYucmVwbGFjZShcInNjYWxlLlwiLCBcIlwiKTtcbiAgICAgIGNvbnN0IHNjYWxlX2YgPSB0aGlzLnJhd0luZm8uZVZpcy52aWV3Ll9ydW50aW1lLnNjYWxlc1tzY05hbWVdO1xuICAgICAgaWYgKHNjYWxlX2YpIHtcbiAgICAgICAgdGhpcy5zY2FsZXNbc2NOYW1lXSA9IHNjYWxlX2YudmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgdGhpcy5zY2FsZXNbc2NOYW1lXTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRpZmYgPT09IFwic3R5bGVcIikge1xuICAgICAgdGhpcy5zdHlsZSA9IGdldCh0aGlzLm1hcmtEaWZmLCBcImZpbmFsXCIsIFwic3R5bGVcIik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbn1cblxuXG5leHBvcnQgeyBhcHBseU1hcmtEaWZmcyB9O1xuLy8gVG9kb1xuLy8gTWFrZSBUZXN0XG4iLCJmdW5jdGlvbiBjaGVja01hcmtDb21wKG1hcmtDb21wU3VtbWFyeSkge1xuICBjb25zdCB7IGVuY29kZSB9ID0gbWFya0NvbXBTdW1tYXJ5O1xuICBjb25zdCB7IG1hcmt0eXBlIH0gPSBtYXJrQ29tcFN1bW1hcnk7XG4gIGNvbnN0IHsgZGF0YSB9ID0gbWFya0NvbXBTdW1tYXJ5O1xuICBjb25zdCB7IHNjYWxlcyB9ID0gbWFya0NvbXBTdW1tYXJ5O1xuXG4gIGlmIChtYXJrQ29tcFN1bW1hcnkuaXNFbXB0eSkge1xuICAgIHJldHVybiB7IHJlc3VsdDogdHJ1ZSB9O1xuICB9XG5cbiAgLy8gZW5jb2RlIC0gbWFya3R5cGVcbiAgaWYgKG1hcmt0eXBlID09PSBcInJlY3RcIikge1xuICAgIGNvbnN0IGlzWEVuY29kZVZhbGlkID0gY29udGFpbkFueUF0dHJTZXQoXG4gICAgICBbXG4gICAgICAgIFtcInhcIiwgXCJ4MlwiXSxcbiAgICAgICAgW1wieFwiLCBcIndpZHRoXCJdLFxuICAgICAgICBbXCJ4Y1wiLCBcIndpZHRoXCJdXG4gICAgICBdLFxuICAgICAgZW5jb2RlXG4gICAgKTtcbiAgICBjb25zdCBpc1lFbmNvZGVWYWxpZCA9IGNvbnRhaW5BbnlBdHRyU2V0KFxuICAgICAgW1xuICAgICAgICBbXCJ5XCIsIFwieTJcIl0sXG4gICAgICAgIFtcInlcIiwgXCJoZWlnaHRcIl0sXG4gICAgICAgIFtcInljXCIsIFwiaGVpZ2h0XCJdXG4gICAgICBdLFxuICAgICAgZW5jb2RlXG4gICAgKTtcbiAgICBpZiAoIWlzWEVuY29kZVZhbGlkIHx8ICFpc1lFbmNvZGVWYWxpZCkge1xuICAgICAgcmV0dXJuIHsgcmVzdWx0OiBmYWxzZSwgcmVhc29uczogW1wiZW5jb2RlXCIsIFwibWFya3R5cGVcIl0gfTtcbiAgICB9XG4gIH0gZWxzZSBpZiAobWFya3R5cGUgPT09IFwiYXJlYVwiKSB7XG4gICAgY29uc3QgaXNWYWxpZCA9XG4gICAgICBlbmNvZGUub3JpZW50ICYmIGVuY29kZS5vcmllbnQudmFsdWUgPT09IFwiaG9yaXpvbnRhbFwiXG4gICAgICAgID8gY29udGFpbkFueUF0dHJTZXQoXG4gICAgICAgICAgW1xuICAgICAgICAgICAgW1wieFwiLCBcIngyXCIsIFwieVwiXSxcbiAgICAgICAgICAgIFtcInhcIiwgXCJ5XCIsIFwid2lkdGhcIl1cbiAgICAgICAgICBdLFxuICAgICAgICAgIGVuY29kZVxuICAgICAgICApXG4gICAgICAgIDogY29udGFpbkFueUF0dHJTZXQoXG4gICAgICAgICAgW1xuICAgICAgICAgICAgW1wieFwiLCBcInkyXCIsIFwieVwiXSxcbiAgICAgICAgICAgIFtcInhcIiwgXCJ5XCIsIFwiaGVpZ2h0XCJdXG4gICAgICAgICAgXSxcbiAgICAgICAgICBlbmNvZGVcbiAgICAgICAgKTtcblxuICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIHsgcmVzdWx0OiBmYWxzZSwgcmVhc29uczogW1wiZW5jb2RlXCIsIFwibWFya3R5cGVcIl0gfTtcbiAgICB9XG4gIH0gZWxzZSBpZiAobWFya3R5cGUgPT09IFwibGluZVwiKSB7XG4gICAgY29uc3QgaXNJblZhbGlkID0gY29udGFpbkFueUF0dHJTZXQoXG4gICAgICBbIFtcIngyXCIsIFwieFwiXSwgW1wieTJcIiwgXCJ5XCJdLCBbXCJ5XCIsIFwiaGVpZ2h0XCJdLCBbXCJ5Y1wiLCBcImhlaWdodFwiXSwgW1wieFwiLCBcIndpZHRoXCJdLCBbXCJ4Y1wiLCBcIndpZHRoXCJdIF0sXG4gICAgICBlbmNvZGVcbiAgICApO1xuICAgIGlmIChpc0luVmFsaWQpIHtcbiAgICAgIHJldHVybiB7IHJlc3VsdDogZmFsc2UsIHJlYXNvbnM6IFtcImVuY29kZVwiLCBcIm1hcmt0eXBlXCJdIH07XG4gICAgfVxuICB9IGVsc2UgaWYgKG1hcmt0eXBlID09PSBcInRleHRcIikge1xuICAgIGlmICghZW5jb2RlLnRleHQpIHtcbiAgICAgIHJldHVybiB7IHJlc3VsdDogZmFsc2UsIHJlYXNvbnM6IFtcImVuY29kZVwiLCBcIm1hcmt0eXBlXCJdIH07XG4gICAgfVxuICB9IGVsc2UgaWYgKG1hcmt0eXBlID09PSBcInJ1bGVcIikge1xuICAgIGlmIChcbiAgICAgICFjb250YWluQW55QXR0clNldChcbiAgICAgICAgW1xuICAgICAgICAgIFtcInhcIiwgXCJ4MlwiLCBcInlcIl0sXG4gICAgICAgICAgW1wieVwiLCBcInkyXCIsIFwieFwiXVxuICAgICAgICBdLFxuICAgICAgICBlbmNvZGVcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHJldHVybiB7IHJlc3VsdDogZmFsc2UsIHJlYXNvbnM6IFtcImVuY29kZVwiLCBcIm1hcmt0eXBlXCJdIH07XG4gICAgfVxuICB9IGVsc2UgaWYgKCFtYXJrdHlwZSkge1xuICAgIHJldHVybiB7IHJlc3VsdDogZmFsc2UsIHJlYXNvbnM6IFtcIm1hcmt0eXBlXCJdIH07XG4gIH1cblxuICAvLyBlbmNvZGUgLSBkYXRhLCBlbmNvZGUgLSBkYXRhIC0gc2NhbGUsIGVuY29kZSAtIHNjYWxlXG4gIGNvbnN0IGF0dHJzID0gT2JqZWN0LmtleXMoZW5jb2RlKTtcbiAgbGV0IHZhbGlkID0gdHJ1ZTtcbiAgT2JqZWN0LmtleXMoc2NhbGVzIHx8IHt9KS5mb3JFYWNoKHNjTmFtZSA9PiB7XG5cbiAgICBpZiAoIWF0dHJzLmZpbmQoYXR0ciA9PiB7XG4gICAgICBpZiAoIWVuY29kZVthdHRyXSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCBlbkF0dHJzID0gQXJyYXkuaXNBcnJheShlbmNvZGVbYXR0cl0pID8gZW5jb2RlW2F0dHJdIDogWyBlbmNvZGVbYXR0cl0gXTtcbiAgICAgIHJldHVybiBlbkF0dHJzLmZpbmQoZW5BdHRyID0+IGVuQXR0ci5zY2FsZSA9PT0gc2NOYW1lKTtcbiAgICB9KSkge1xuICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICB9XG4gIH0pO1xuICBpZiAoIXZhbGlkKSB7XG4gICAgcmV0dXJuIHsgcmVhc29uczogW1wiZW5jb2RlXCIsIFwic2NhbGVcIl0sIHJlc3VsdDogZmFsc2UgfTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBlbkF0dHJzID0gQXJyYXkuaXNBcnJheShlbmNvZGVbYXR0cnNbaV1dKSA/IGVuY29kZVthdHRyc1tpXV0gOiBbIGVuY29kZVthdHRyc1tpXV0gXTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGVuQXR0cnMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IGVuQXR0ciA9IGVuQXR0cnNbal07XG4gICAgICBpZiAoZW5BdHRyICYmIGVuQXR0ci5zY2FsZSkge1xuICAgICAgICBpZiAoIXNjYWxlc1tlbkF0dHIuc2NhbGVdKSB7XG4gICAgICAgICAgcmV0dXJuIHsgcmVhc29uczogW1wiZW5jb2RlXCIsIFwic2NhbGVcIl0sIHJlc3VsdDogZmFsc2UgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW5BdHRyLmJhbmQgJiYgc2NhbGVzW2VuQXR0ci5zY2FsZV0udHlwZSAhPT0gXCJiYW5kXCIpIHtcbiAgICAgICAgICByZXR1cm4geyByZWFzb25zOiBbXCJlbmNvZGVcIiwgXCJzY2FsZVwiXSwgcmVzdWx0OiBmYWxzZSB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZW5BdHRyICYmIGVuQXR0ci5maWVsZCkge1xuICAgICAgICBpZiAoZGF0YS5maWVsZHMuaW5kZXhPZihlbkF0dHIuZmllbGQpIDwgMCkge1xuICAgICAgICAgIHJldHVybiB7IHJlc3VsdDogZmFsc2UsIHJlYXNvbnM6IFtcImVuY29kZVwiLCBcImRhdGFcIl0gfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW5BdHRyLnNjYWxlKSB7XG4gICAgICAgICAgY29uc3QgZm91bmRTY2FsZSA9IHNjYWxlc1tlbkF0dHIuc2NhbGVdO1xuICAgICAgICAgIGNvbnN0IHZhbHMgPSBkYXRhLnZhbHVlcy5tYXAoZCA9PiBkLmRhdHVtW2VuQXR0ci5maWVsZF0pO1xuICAgICAgICAgIGNvbnN0IHNjYWxlRG9tYWluID0gZm91bmRTY2FsZS5kb21haW4oKTtcbiAgICAgICAgICBsZXQgdmFsaWQgPSB0cnVlO1xuXG4gICAgICAgICAgaWYgKFtcImJhbmRcIiwgXCJvcmRpbmFsXCIsIFwicG9pbnRcIl0uaW5kZXhPZihmb3VuZFNjYWxlLnR5cGUpID49IDApIHtcbiAgICAgICAgICAgIC8vIGZvciBkaXNjcmV0ZSBzY2FsZXNcbiAgICAgICAgICAgIHZhbGlkID1cbiAgICAgICAgICAgICAgdmFsaWQgJiZcbiAgICAgICAgICAgICAgdmFscy5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgKGFjYywgdikgPT4gKGFjYyA9IGFjYyAmJiBzY2FsZURvbWFpbi5pbmRleE9mKHYpID49IDApLFxuICAgICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGZvdW5kU2NhbGUudHlwZSA9PT0gXCJsaW5lYXJcIikge1xuICAgICAgICAgICAgY29uc3QgbWF4ID0gTWF0aC5tYXgoLi4udmFscyk7XG4gICAgICAgICAgICBjb25zdCBtaW4gPSBNYXRoLm1pbiguLi52YWxzKTtcbiAgICAgICAgICAgIHZhbGlkID0gdmFsaWQgJiYgc2NhbGVEb21haW5bMF0gPD0gbWluICYmIHNjYWxlRG9tYWluWzFdID49IG1heDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGZvdW5kU2NhbGUudHlwZSA9PT0gXCJ0aW1lXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IG1heCA9IE1hdGgubWF4KC4uLnZhbHMpO1xuICAgICAgICAgICAgY29uc3QgbWluID0gTWF0aC5taW4oLi4udmFscyk7XG4gICAgICAgICAgICB2YWxpZCA9IHZhbGlkICYmIHNjYWxlRG9tYWluWzBdIDw9IG1pbiAmJiBzY2FsZURvbWFpblsxXSA+PSBtYXg7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgcmVhc29uczogW1wiZW5jb2RlXCIsIFwiZGF0YVwiLCBcInNjYWxlXCJdLCByZXN1bHQ6IGZhbHNlIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB7IHJlc3VsdDogdHJ1ZSB9O1xufVxuXG5mdW5jdGlvbiBjb250YWluQW55QXR0clNldChwb3NzaWJsZUF0dHJTZXRzLCBlbmNvZGUpIHtcbiAgcmV0dXJuIHBvc3NpYmxlQXR0clNldHMucmVkdWNlKCh2YWxpZCwgYXR0cnMpID0+IHtcbiAgICBjb25zdCBoYXNBdHRycyA9IGF0dHJzLnJlZHVjZShcbiAgICAgIChoYXNBdHRycywgYXR0cikgPT4gaGFzQXR0cnMgJiYgZW5jb2RlW2F0dHJdLFxuICAgICAgdHJ1ZVxuICAgICk7XG4gICAgcmV0dXJuIHZhbGlkIHx8IGhhc0F0dHJzO1xuICB9LCBmYWxzZSk7XG59XG5cbi8vIGZ1bmN0aW9uIGNoZWNrVmlld0F4aXNDb25zdHJhaW50KHBzZXVkb1RsKSB7XG4vLyAgIGxldCB5QXhpc1ZpZXdDaGFuZ2UsIG1hcmtWaWV3Q2hhbmdlcyA9IFtdLCB4QXhpc1ZpZXdDaGFuZ2U7XG4vLyAgIHBzZXVkb1RsLmNvbmNhdC5mb3JFYWNoKChzdGFnZSwgaSkgPT4ge1xuLy8gICAgIHN0YWdlLnN5bmMuZm9yRWFjaChwc2V1ZG9TdGVwID0+IHtcbi8vICAgICAgIGxldCBkZWx0YVcgPSBnZXQocHNldWRvU3RlcCwgXCJkaWZmXCIsIFwibWV0YVwiLCBcInZpZXdcIiwgXCJkZWx0YVdcIiksXG4vLyAgICAgICAgIGRlbHRhSCA9IGdldChwc2V1ZG9TdGVwLCBcImRpZmZcIiwgXCJtZXRhXCIsIFwidmlld1wiLCBcImRlbHRhSFwiKTtcblxuLy8gICAgICAgaWYgKHBzZXVkb1N0ZXAuZGlmZi5jb21wVHlwZSA9PT0gXCJheGlzXCIgJiYgcHNldWRvU3RlcC5kaWZmLmNvbXBOYW1lID09PSBcInhcIiAmJiAheEF4aXNWaWV3Q2hhbmdlKSB7XG4vLyAgICAgICAgIHhBeGlzVmlld0NoYW5nZSA9IHtcbi8vICAgICAgICAgICB3aWR0aENoYW5nZTogZGVsdGFXID4gMCA/IFwiaW5jXCIgOiAoZGVsdGFXIDwgMCA/IFwiZGVjXCIgOiBmYWxzZSksXG4vLyAgICAgICAgICAgb3JpZW50OiBwc2V1ZG9TdGVwLmRpZmYuaW5pdGlhbC5vcmllbnQsXG4vLyAgICAgICAgICAgd2hlbjogaVxuLy8gICAgICAgICB9XG4vLyAgICAgICB9XG4vLyAgICAgICBpZiAocHNldWRvU3RlcC5kaWZmLmNvbXBUeXBlID09PSBcImF4aXNcIiAmJiBwc2V1ZG9TdGVwLmRpZmYuY29tcE5hbWUgPT09IFwieVwiICYmICF5QXhpc1ZpZXdDaGFuZ2UpIHtcbi8vICAgICAgICAgeUF4aXNWaWV3Q2hhbmdlID0ge1xuLy8gICAgICAgICAgIGhlaWdodENoYW5nZTogZGVsdGFIID4gMCA/IFwiaW5jXCIgOiAoZGVsdGFIIDwgMCA/IFwiZGVjXCIgOiBmYWxzZSksXG4vLyAgICAgICAgICAgb3JpZW50OiBwc2V1ZG9TdGVwLmRpZmYuaW5pdGlhbC5vcmllbnQsXG4vLyAgICAgICAgICAgd2hlbjogaVxuLy8gICAgICAgICB9XG4vLyAgICAgICB9XG4vLyAgICAgICBpZiAocHNldWRvU3RlcC5kaWZmLmNvbXBUeXBlID09PSBcIm1hcmtcIiApIHtcbi8vICAgICAgICAgbWFya1ZpZXdDaGFuZ2VzLnB1c2goe1xuLy8gICAgICAgICAgIHdpZHRoQ2hhbmdlOiBkZWx0YVcgPiAwID8gXCJpbmNcIiA6IChkZWx0YVcgPCAwID8gXCJkZWNcIiA6IGZhbHNlKSxcbi8vICAgICAgICAgICBoZWlnaHRDaGFuZ2U6IGRlbHRhSCA+IDAgPyBcImluY1wiIDogKGRlbHRhSCA8IDAgPyBcImRlY1wiIDogZmFsc2UpLFxuLy8gICAgICAgICAgIHdoZW46IGlcbi8vICAgICAgICAgfSlcbi8vICAgICAgIH1cbi8vICAgICB9KVxuLy8gICB9KVxuLy8gICBpZiAoeEF4aXNWaWV3Q2hhbmdlLm9yaWVudCA9PT0gXCJib3R0b21cIikge1xuLy8gICAgIGlmICh4QXhpc1ZpZXdDaGFuZ2UuaGVpZ2h0Q2hhbmdlID09PSBcImluY1wiKSB7XG4vLyAgICAgICBpZiAoeEF4aXNWaWV3Q2hhbmdlLndoZW4gPiB5QXhpc1ZpZXdDaGFuZ2Uud2hlbikge1xuLy8gICAgICAgICByZXR1cm4gZmFsc2Vcbi8vICAgICAgIH0gZWxzZSBpZiAoeEF4aXNWaWV3Q2hhbmdlLndoZW4gPiBNYXRoLm1pbiguLi5tYXJrVmlld0NoYW5nZXMubWFwKGMgPT4gYy53aGVuKSkpIHtcbi8vICAgICAgICAgcmV0dXJuIGZhbHNlXG4vLyAgICAgICB9XG4vLyAgICAgfSBlbHNlIGlmICh4QXhpc1ZpZXdDaGFuZ2UuaGVpZ2h0Q2hhbmdlID09PSBcImRlY1wiKSB7XG4vLyAgICAgICBpZiAoeEF4aXNWaWV3Q2hhbmdlLndoZW4gPCB5QXhpc1ZpZXdDaGFuZ2Uud2hlbikge1xuLy8gICAgICAgICByZXR1cm4gZmFsc2Vcbi8vICAgICAgIH0gZWxzZSBpZiAoeEF4aXNWaWV3Q2hhbmdlLndoZW4gPCBNYXRoLm1heCguLi5tYXJrVmlld0NoYW5nZXMubWFwKGMgPT4gYy53aGVuKSkpIHtcbi8vICAgICAgICAgcmV0dXJuIGZhbHNlXG4vLyAgICAgICB9XG4vLyAgICAgfVxuLy8gICB9IGVsc2UgaWYgKHlBeGlzVmlld0NoYW5nZS5vcmllbnQgPT09IFwicmlnaHRcIiAmJlxuLy8gICAgIHlBeGlzVmlld0NoYW5nZS5oZWlnaHRDaGFuZ2UgPT09IFwiaW5jXCIpIHtcbi8vICAgICBjb25zb2xlLmVycm9yKFwiVE9ET1wiKTtcbi8vICAgfVxuLy8gICByZXR1cm4gdHJ1ZTtcbi8vIH1cblxuZXhwb3J0IHtcbiAgY2hlY2tNYXJrQ29tcFxuICAvLyBjaGVja1ZpZXdBeGlzQ29uc3RyYWludCBhcyBjaGVja1ZpZXdBeGlzQ29uc3RyYWludFxufTtcbiIsImltcG9ydCB7IGdldCwgZGVlcEVxdWFsIH0gZnJvbSBcIi4uL3V0aWwvdXRpbFwiO1xuaW1wb3J0IHsgTUlOX1BPU19ERUxUQSB9IGZyb20gXCIuL3V0aWxcIjtcblxuZnVuY3Rpb24gdmFsaWRhdGUocHNldWRvVGltZWxpbmUsIHN0YWdlTikge1xuICByZXR1cm4gKFxuICAgIGNoZWNrVmlld0F4aXNDb25zdHJhaW50KHBzZXVkb1RpbWVsaW5lKSAmJlxuICAgIGNoZWNrVmlld0xlZ2VuZENvbnN0cmFpbnQocHNldWRvVGltZWxpbmUpICYmXG4gICAgY2hlY2tVbmVtcHR5KHBzZXVkb1RpbWVsaW5lKSAmJlxuICAgIHBzZXVkb1RpbWVsaW5lLmNvbmNhdC5sZW5ndGggPT09IHN0YWdlTiAmJlxuICAgIGNoZWNrTWFya0NvbnN0cmFpbnQocHNldWRvVGltZWxpbmUpXG4gICk7XG59XG5mdW5jdGlvbiBjaGVja1VuZW1wdHkocHNldWRvVGwpIHtcbiAgcmV0dXJuICFwc2V1ZG9UbC5jb25jYXQuZmluZChzdGFnZSA9PiBzdGFnZS5zeW5jLmxlbmd0aCA9PT0gMCk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrVmlld0F4aXNDb25zdHJhaW50KHBzZXVkb1RsKSB7XG4gIGxldCB5QXhpc1ZpZXdDaGFuZ2UsIG1hcmtWaWV3Q2hhbmdlcyA9IFtdLCB4QXhpc1ZpZXdDaGFuZ2U7XG4gIHBzZXVkb1RsLmNvbmNhdC5mb3JFYWNoKChzdGFnZSwgaSkgPT4ge1xuICAgIHN0YWdlLnN5bmMuZm9yRWFjaChwc2V1ZG9TdGVwID0+IHtcbiAgICAgIGxldCBkZWx0YVcgPSBnZXQocHNldWRvU3RlcCwgXCJkaWZmXCIsIFwibWV0YVwiLCBcInZpZXdcIiwgXCJ4XCIpLFxuICAgICAgICBkZWx0YUggPSBnZXQocHNldWRvU3RlcCwgXCJkaWZmXCIsIFwibWV0YVwiLCBcInZpZXdcIiwgXCJ5XCIpO1xuXG4gICAgICBpZiAocHNldWRvU3RlcC5kaWZmLmNvbXBUeXBlID09PSBcImF4aXNcIiAmJiBwc2V1ZG9TdGVwLmRpZmYuY29tcE5hbWUgPT09IFwieFwiICYmICF4QXhpc1ZpZXdDaGFuZ2UpIHtcbiAgICAgICAgeEF4aXNWaWV3Q2hhbmdlID0ge1xuICAgICAgICAgIHdpZHRoOiBkZWx0YVcgPj0gTUlOX1BPU19ERUxUQSA/IFwiaW5jXCIgOiAoZGVsdGFXIDw9IC1NSU5fUE9TX0RFTFRBID8gXCJkZWNcIiA6IGZhbHNlKSxcbiAgICAgICAgICBoZWlnaHQ6IGRlbHRhSCA+PSBNSU5fUE9TX0RFTFRBID8gXCJpbmNcIiA6IChkZWx0YUggPD0gLU1JTl9QT1NfREVMVEEgPyBcImRlY1wiIDogZmFsc2UpLFxuICAgICAgICAgIG9yaWVudDogZ2V0KHBzZXVkb1N0ZXAsIFwiZGlmZlwiLCBcImluaXRpYWxcIiwgXCJvcmllbnRcIikgfHwgZ2V0KHBzZXVkb1N0ZXAsIFwiZGlmZlwiLCBcImZpbmFsXCIsIFwib3JpZW50XCIpLFxuICAgICAgICAgIHdoZW46IGlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChwc2V1ZG9TdGVwLmRpZmYuY29tcFR5cGUgPT09IFwiYXhpc1wiICYmIHBzZXVkb1N0ZXAuZGlmZi5jb21wTmFtZSA9PT0gXCJ5XCIgJiYgIXlBeGlzVmlld0NoYW5nZSkge1xuICAgICAgICB5QXhpc1ZpZXdDaGFuZ2UgPSB7XG4gICAgICAgICAgd2lkdGg6IGRlbHRhVyA+PSBNSU5fUE9TX0RFTFRBID8gXCJpbmNcIiA6IChkZWx0YVcgPD0gLU1JTl9QT1NfREVMVEEgPyBcImRlY1wiIDogZmFsc2UpLFxuICAgICAgICAgIGhlaWdodDogZGVsdGFIID49IE1JTl9QT1NfREVMVEEgPyBcImluY1wiIDogKGRlbHRhSCA8PSAtTUlOX1BPU19ERUxUQSA/IFwiZGVjXCIgOiBmYWxzZSksXG4gICAgICAgICAgb3JpZW50OiBnZXQocHNldWRvU3RlcCwgXCJkaWZmXCIsIFwiaW5pdGlhbFwiLCBcIm9yaWVudFwiKSB8fCBnZXQocHNldWRvU3RlcCwgXCJkaWZmXCIsIFwiZmluYWxcIiwgXCJvcmllbnRcIiksXG4gICAgICAgICAgd2hlbjogaVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAocHNldWRvU3RlcC5kaWZmLmNvbXBUeXBlID09PSBcIm1hcmtcIiApIHtcbiAgICAgICAgbWFya1ZpZXdDaGFuZ2VzLnB1c2goe1xuICAgICAgICAgIHdpZHRoOiBkZWx0YVcgPj0gTUlOX1BPU19ERUxUQSA/IFwiaW5jXCIgOiAoZGVsdGFXIDw9IC1NSU5fUE9TX0RFTFRBID8gXCJkZWNcIiA6IGZhbHNlKSxcbiAgICAgICAgICBoZWlnaHQ6IGRlbHRhSCA+PSBNSU5fUE9TX0RFTFRBID8gXCJpbmNcIiA6IChkZWx0YUggPD0gLU1JTl9QT1NfREVMVEEgPyBcImRlY1wiIDogZmFsc2UpLFxuICAgICAgICAgIHdoZW46IGlcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIGZvciAoY29uc3QgY29uZGl0aW9uIG9mIFtbeEF4aXNWaWV3Q2hhbmdlLCB5QXhpc1ZpZXdDaGFuZ2UsIFwiYm90dG9tXCIsIFwiaGVpZ2h0XCJdLCBbeUF4aXNWaWV3Q2hhbmdlLCB4QXhpc1ZpZXdDaGFuZ2UsIFwicmlnaHRcIiwgXCJ3aWR0aFwiXV0pIHtcbiAgICBsZXQgW2F4aXMsIG90aGVyQXhpcywgb3JpZW50LCBzaWRlXSA9IGNvbmRpdGlvbjtcblxuICAgIGlmIChnZXQoYXhpcywgXCJvcmllbnRcIikgPT09IG9yaWVudCkge1xuICAgICAgaWYgKGF4aXNbc2lkZV0gPT09IFwiaW5jXCIpIHtcbiAgICAgICAgaWYgKGF4aXMud2hlbiA+IGdldChvdGhlckF4aXMsIFwid2hlblwiKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBpZiAoKG1hcmtWaWV3Q2hhbmdlcy5sZW5ndGggPiAwKSAmJlxuICAgICAgICAgIChheGlzLndoZW4gPiBNYXRoLm1pbiguLi5tYXJrVmlld0NoYW5nZXMubWFwKGMgPT4gYy53aGVuKSkpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGF4aXNbc2lkZV0gPT09IFwiZGVjXCIpIHtcbiAgICAgICAgaWYgKGF4aXMud2hlbiA8IGdldChvdGhlckF4aXMsIFwid2hlblwiKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmICgobWFya1ZpZXdDaGFuZ2VzLmxlbmd0aCA+IDApICYmXG4gICAgICAgICAgKGF4aXMud2hlbiA8IE1hdGgubWF4KC4uLm1hcmtWaWV3Q2hhbmdlcy5tYXAoYyA9PiBjLndoZW4pKSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY2hlY2tWaWV3TGVnZW5kQ29uc3RyYWludChwc2V1ZG9UbCkge1xuICBjb25zdCB2aWV3Q2hhbmdlcyA9IHtcbiAgICBtYXJrczogW10sXG4gICAgbGVnZW5kczogW11cbiAgfTtcblxuICBwc2V1ZG9UbC5jb25jYXQuZm9yRWFjaCgoc3RhZ2UsIGkpID0+IHtcbiAgICBzdGFnZS5zeW5jLmZvckVhY2gocHNldWRvU3RlcCA9PiB7XG4gICAgICBjb25zdCBkZWx0YSA9IHtcbiAgICAgICAgeDogZ2V0KHBzZXVkb1N0ZXAsIFwiZGlmZlwiLCBcIm1ldGFcIiwgXCJ2aWV3XCIsIFwieFwiKSxcbiAgICAgICAgeTogZ2V0KHBzZXVkb1N0ZXAsIFwiZGlmZlwiLCBcIm1ldGFcIiwgXCJ2aWV3XCIsIFwieVwiKSxcbiAgICAgICAgd2lkdGg6IGdldChwc2V1ZG9TdGVwLCBcImRpZmZcIiwgXCJtZXRhXCIsIFwidmlld1wiLCBcImRlbHRhV1wiKSxcbiAgICAgICAgaGVpZ2h0OiBnZXQocHNldWRvU3RlcCwgXCJkaWZmXCIsIFwibWV0YVwiLCBcInZpZXdcIiwgXCJkZWx0YUhcIilcbiAgICAgIH07XG5cbiAgICAgIGlmIChbXCJsZWdlbmRcIiwgXCJtYXJrXCJdLmluZGV4T2YocHNldWRvU3RlcC5kaWZmLmNvbXBUeXBlKSA+PSAwKSB7XG4gICAgICAgIGNvbnN0IHZjID0ge1xuICAgICAgICAgIHg6XG4gICAgICAgICAgICBkZWx0YS54ID49IE1JTl9QT1NfREVMVEFcbiAgICAgICAgICAgICAgPyBcImluY1wiXG4gICAgICAgICAgICAgIDogZGVsdGEueCA8PSAtTUlOX1BPU19ERUxUQVxuICAgICAgICAgICAgICAgID8gXCJkZWNcIlxuICAgICAgICAgICAgICAgIDogZmFsc2UsXG4gICAgICAgICAgeTpcbiAgICAgICAgICAgIGRlbHRhLnkgPj0gTUlOX1BPU19ERUxUQVxuICAgICAgICAgICAgICA/IFwiaW5jXCJcbiAgICAgICAgICAgICAgOiBkZWx0YS55IDw9IC1NSU5fUE9TX0RFTFRBXG4gICAgICAgICAgICAgICAgPyBcImRlY1wiXG4gICAgICAgICAgICAgICAgOiBmYWxzZSxcbiAgICAgICAgICB3aWR0aDpcbiAgICAgICAgICAgIGRlbHRhLndpZHRoID49IE1JTl9QT1NfREVMVEFcbiAgICAgICAgICAgICAgPyBcImluY1wiXG4gICAgICAgICAgICAgIDogZGVsdGEud2lkdGggPD0gLU1JTl9QT1NfREVMVEFcbiAgICAgICAgICAgICAgICA/IFwiZGVjXCJcbiAgICAgICAgICAgICAgICA6IGZhbHNlLFxuICAgICAgICAgIGhlaWdodDpcbiAgICAgICAgICAgIGRlbHRhLmhlaWdodCA+PSBNSU5fUE9TX0RFTFRBXG4gICAgICAgICAgICAgID8gXCJpbmNcIlxuICAgICAgICAgICAgICA6IGRlbHRhLmhlaWdodCA8PSAtTUlOX1BPU19ERUxUQVxuICAgICAgICAgICAgICAgID8gXCJkZWNcIlxuICAgICAgICAgICAgICAgIDogZmFsc2UsXG4gICAgICAgICAgd2hlbjogaVxuICAgICAgICB9O1xuICAgICAgICBpZiAodmMueCB8fCB2Yy55IHx8IHZjLndpZHRoIHx8IHZjLmhlaWdodCkge1xuICAgICAgICAgIGlmIChwc2V1ZG9TdGVwLmRpZmYuY29tcFR5cGUgPT09IFwibGVnZW5kXCIpIHtcbiAgICAgICAgICAgIHZjLm9yaWVudCA9XG4gICAgICAgICAgICAgIGdldChwc2V1ZG9TdGVwLCBcImRpZmZcIiwgXCJpbml0aWFsXCIsIFwib3JpZW50XCIpIHx8XG4gICAgICAgICAgICAgIGdldChwc2V1ZG9TdGVwLCBcImRpZmZcIiwgXCJmaW5hbFwiLCBcIm9yaWVudFwiKSB8fFxuICAgICAgICAgICAgICBcInJpZ2h0XCI7XG4gICAgICAgICAgICB2aWV3Q2hhbmdlcy5sZWdlbmRzLnB1c2godmMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2aWV3Q2hhbmdlcy5tYXJrcy5wdXNoKHZjKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG4gIGlmICh2aWV3Q2hhbmdlcy5tYXJrcy5sZW5ndGggPT09IDAgfHwgdmlld0NoYW5nZXMubGVnZW5kcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGZvciAoY29uc3QgbWFya1ZpZXdDaGFuZ2Ugb2Ygdmlld0NoYW5nZXMubWFya3MpIHtcbiAgICBjb25zdCByaWdodExlZ2VuZFZDcyA9IHZpZXdDaGFuZ2VzLmxlZ2VuZHMuZmlsdGVyKFxuICAgICAgdmMgPT4gdmMub3JpZW50ID09PSBcInJpZ2h0XCJcbiAgICApO1xuICAgIGlmIChyaWdodExlZ2VuZFZDcy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAobWFya1ZpZXdDaGFuZ2Uud2lkdGggPT09IFwiaW5jXCIpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG1hcmtWaWV3Q2hhbmdlLndoZW4gPFxuICAgICAgICAgIE1hdGgubWluKFxuICAgICAgICAgICAgLi4ucmlnaHRMZWdlbmRWQ3MuZmlsdGVyKHZjID0+IHZjLnggPT09IFwiaW5jXCIpLm1hcChjID0+IGMud2hlbilcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChtYXJrVmlld0NoYW5nZS53aWR0aCA9PT0gXCJkZWNcIikge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbWFya1ZpZXdDaGFuZ2Uud2hlbiA+XG4gICAgICAgICAgTWF0aC5tYXgoXG4gICAgICAgICAgICAuLi5yaWdodExlZ2VuZFZDcy5maWx0ZXIodmMgPT4gdmMueCA9PT0gXCJkZWNcIikubWFwKGMgPT4gYy53aGVuKVxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGJvdHRvbUxlZ2VuZFZDcyA9IHZpZXdDaGFuZ2VzLmxlZ2VuZHMuZmlsdGVyKFxuICAgICAgdmMgPT4gdmMub3JpZW50ID09PSBcImJvdHRvbVwiXG4gICAgKTtcbiAgICBpZiAoYm90dG9tTGVnZW5kVkNzLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmIChtYXJrVmlld0NoYW5nZS5oZWlnaHQgPT09IFwiaW5jXCIpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG1hcmtWaWV3Q2hhbmdlLndoZW4gPFxuICAgICAgICAgIE1hdGgubWluKFxuICAgICAgICAgICAgLi4uYm90dG9tTGVnZW5kVkNzLmZpbHRlcih2YyA9PiB2Yy55ID09PSBcImluY1wiKS5tYXAoYyA9PiBjLndoZW4pXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobWFya1ZpZXdDaGFuZ2UuaGVpZ2h0ID09PSBcImRlY1wiKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBtYXJrVmlld0NoYW5nZS53aGVuID5cbiAgICAgICAgICBNYXRoLm1heChcbiAgICAgICAgICAgIC4uLmJvdHRvbUxlZ2VuZFZDcy5maWx0ZXIodmMgPT4gdmMueSA9PT0gXCJkZWNcIikubWFwKGMgPT4gYy53aGVuKVxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGNoZWNrTWFya0NvbnN0cmFpbnQocHNldWRvVGwpIHtcbiAgZm9yIChjb25zdCBzdGFnZSBvZiBwc2V1ZG9UbC5jb25jYXQpIHtcbiAgICBjb25zdCBtYXJrUHNlZHVvU3RlcHMgPSBzdGFnZS5zeW5jLmZpbHRlcihcbiAgICAgIHBzZXVkb1N0ZXAgPT4gcHNldWRvU3RlcC5kaWZmLmNvbXBUeXBlID09PSBcIm1hcmtcIlxuICAgICk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXJrUHNlZHVvU3RlcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHBzZXVkb1N0ZXAgPSBtYXJrUHNlZHVvU3RlcHNbaV07XG4gICAgICBpZiAoXG4gICAgICAgIChcbiAgICAgICAgICBkZWVwRXF1YWwocHNldWRvU3RlcC5mYWN0b3JTZXRzLmN1cnJlbnQsIFtcImRhdGFcIl0pIHx8XG4gICAgICAgICAgZGVlcEVxdWFsKHBzZXVkb1N0ZXAuZmFjdG9yU2V0cy5jdXJyZW50LCBbXCJkYXRhXCIsIFwibWFya3R5cGVcIl0pXG4gICAgICAgICkgJiZcbiAgICAgICAgcHNldWRvU3RlcC5kaWZmLm1ldGEuZGF0YS5yb3cgPT09IGZhbHNlXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLypcbiAgICAgIGlmIHBzZXVkb1N0ZXAuZmFjdG9yU2V0cy5jdXJyZW50IGhhcyBcImRhdGFcIlxuICAgICAgICYmIHBzZXVkb1N0ZXAuZGlmZi5tZXRhLmRhdGEucm93ID09PSBmYWxzZVxuICAgICAgICYmIHBzZXVkb1N0ZXAuZGlmZi5pbml0aWFsLmVuY29kZS5cbiAgICAgICovXG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgeyBjaGVja1ZpZXdBeGlzQ29uc3RyYWludCwgdmFsaWRhdGUsIGNoZWNrVW5lbXB0eSB9O1xuIiwiaW1wb3J0IHsgYXBwbHlNYXJrRGlmZnMgfSBmcm9tIFwiLi9kaWZmQXBwbGllclwiO1xuaW1wb3J0IHsgY2hlY2tNYXJrQ29tcCB9IGZyb20gXCIuL21hcmtDb21wQ2hlY2tlclwiO1xuaW1wb3J0IHsgdmFsaWRhdGUgfSBmcm9tIFwiLi9wc2V1ZG9UaW1lbGluZVZhbGlkYXRvclwiO1xuaW1wb3J0IHsgY29weSwgZW51bUFycmF5c0J5SXRlbXMgfSBmcm9tIFwiLi4vdXRpbC91dGlsXCI7XG5pbXBvcnQgeyBNSU5fUE9TX0RFTFRBIH0gZnJvbSBcIi4vdXRpbFwiO1xuXG4vLyBFbnVlbWVyYXRlIGEgc2V0IG9mIHN0ZXBzICg8c3RhZ2VOKSBieSBzcGxpdHRpbmcgdGhlIGRpZmZzLlxuZnVuY3Rpb24gZW51bWVyYXRlUHNldWRvVGltZWxpbmVzKGRpZmZzLCBzdGFnZU4sIHJhd0luZm8sIHRpbWluZykge1xuICAvLyBBc3N1bWU6IEF4ZXMgYW5kIGxlZ2VuZHMgY2Fubm90IGJlIHNwbGl0dGVkXG4gIC8vIEFzc3VtZTogVGhlcmUgaXMgb25seSBvbmUgbWFyayBjb21wb25lbnQuIChubyBhZGQvcmVtb3ZlIG9mIHRoZSBtYXJrIGNvbXBvbmVudHMpXG5cbiAgLy8gMC4gZmluZCB0aGUgbWFyayBjb21wb25lbnRzLlxuICBjb25zdCBtYXJrRGlmZnMgPSBkaWZmcy5jb21wRGlmZnMuZmlsdGVyKFxuICAgIGRpZmYgPT4gZGlmZi5jb21wVHlwZSA9PT0gXCJtYXJrXCJcbiAgKTtcblxuICBjb25zdCBlbnVtZWRNYXJrc1B1c2Vkb1N0ZXBzID0gbWFya0RpZmZzLm1hcChtYXJrRGlmZiA9PiB7XG4gICAgLy8gMS4gZmluZCB2YWxpZCBzcGxpdHRpbmcgZmFjdG9ycyBvZiB0aGUgbWFyayBjb21wb25lbnRzLlxuICAgIGNvbnN0IHsgYWxsRmFjdG9ycywgZXh0cmFGYWN0b3JzQnlNYXJrdHlwZSB9ID0gZmluZEFsbEZhY3RvcnMobWFya0RpZmYpO1xuXG4gICAgLy8gMi4gZW51bWVyYXRlIGJ5IGFzc2lnbmluZyBhIHZhbHVlIGFtb25nIFswLCAuLi4sIHN0YWdlTiAtMV0gb24gZWFjaCBmYWN0b3JcbiAgICBjb25zdCBza2lwcGluZ0NvbmRpdGlvbiA9IG5ldyBTa2lwcGluZ0NvbmRpdGlvbnMoKTtcbiAgICBjb25zdCBlbnVtZWQgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTWF0aC5wb3coc3RhZ2VOLCBhbGxGYWN0b3JzLmxlbmd0aCk7IGkrKykge1xuICAgICAgY29uc3QgZmFjdG9yQXNzaWdubWVudCA9IGdldEZhY3RvckFzc2lnbm1lbnQoaSwgYWxsRmFjdG9ycy5sZW5ndGgsIHN0YWdlTik7XG5cbiAgICAgIGxldCB2YWxpZCA9IHRydWU7XG4gICAgICBjb25zdCBmYWN0b3JTZXRzID0gW107XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHN0YWdlTiAtIDE7IGorKykge1xuICAgICAgICBjb25zdCBhcHBseWluZ0ZhY3RvcnMgPSBhbGxGYWN0b3JzLmZpbHRlcigoZmFjdG9yLCBmYWN0b3JJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBmYWN0b3JBc3NpZ25tZW50W2ZhY3RvcklkXSA+PSBzdGFnZU4gLSBqIC0gMTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHNraXBwaW5nQ29uZGl0aW9uLmNoZWNrKGFwcGx5aW5nRmFjdG9ycykpIHtcbiAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWFya0NvbXBTdW1tYXJ5ID0gYXBwbHlNYXJrRGlmZnMoXG4gICAgICAgICAgbWFya0RpZmYsXG4gICAgICAgICAgYXBwbHlpbmdGYWN0b3JzLFxuICAgICAgICAgIHJhd0luZm8sXG4gICAgICAgICAgZXh0cmFGYWN0b3JzQnlNYXJrdHlwZVxuICAgICAgICApO1xuICAgICAgICAvLyAzLiBDaGVjayBpZiB0aGUgaW50ZXJtZWRpYXRlIG1hcmsgY29tcG9uZW50cyBhcmUgdmFsaWQuIElmIG5vdCwgZXhjbHVkZSB0aGUgZW51bWVyYXRlZCBzdGVwcy5cbiAgICAgICAgY29uc3QgeyByZWFzb25zIH0gPSBjaGVja01hcmtDb21wKG1hcmtDb21wU3VtbWFyeSk7XG5cbiAgICAgICAgaWYgKHJlYXNvbnMpIHtcbiAgICAgICAgICAvLyByZWdpc3RlciBhIG5ldyBza2lwcGluZyBjb25kaXRpb25cbiAgICAgICAgICBjb25zdCBuZXdTa2lwcGluZ0NvbmRpdGlvbiA9IGFsbEZhY3RvcnNcbiAgICAgICAgICAgIC5maWx0ZXIoZmFjdG9yID0+XG4gICAgICAgICAgICAgIHJlYXNvbnMuZmluZChyZWFzb24gPT4gZmFjdG9yLmluZGV4T2YocmVhc29uKSA+PSAwKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLm1hcChmYWN0b3IgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4ge2ZhY3RvciwgaW5jbHVkZTogYXBwbHlpbmdGYWN0b3JzLmluZGV4T2YoZmFjdG9yKSA+PSAwfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIHNraXBwaW5nQ29uZGl0aW9uLnJlZ2lzdGVyKG5ld1NraXBwaW5nQ29uZGl0aW9uKTtcblxuICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgIWZhY3RvclNldHMuZmluZChcbiAgICAgICAgICAgIGFwcEZjdHJzID0+IGFwcEZjdHJzLnRvU3RyaW5nKCkgPT09IGFwcGx5aW5nRmFjdG9ycy50b1N0cmluZygpXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICBmYWN0b3JTZXRzLnB1c2goYXBwbHlpbmdGYWN0b3JzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodmFsaWQpIHtcbiAgICAgICAgZmFjdG9yU2V0cy5wdXNoKGFsbEZhY3RvcnMpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWVudW1lZC5maW5kKFxuICAgICAgICAgICAgZmN0clNldHMgPT4gZmN0clNldHMudG9TdHJpbmcoKSA9PT0gZmFjdG9yU2V0cy50b1N0cmluZygpXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICBlbnVtZWQucHVzaChmYWN0b3JTZXRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlbnVtZWQubWFwKGZhY3RvclNldHMgPT4ge1xuICAgICAgbGV0IHByZXZGYWN0b3JTZXQ7XG4gICAgICByZXR1cm4gZmFjdG9yU2V0cy5tYXAoZmFjdG9yU2V0ID0+IHtcbiAgICAgICAgbGV0IG5ld1BzZXVkb1N0ZXAgPSB7XG4gICAgICAgICAgZGlmZjogbWFya0RpZmYsXG4gICAgICAgICAgZmFjdG9yU2V0czoge1xuICAgICAgICAgICAgY3VycmVudDogcHJldkZhY3RvclNldFxuICAgICAgICAgICAgICA/IGZhY3RvclNldC5leGNsdWRlKHByZXZGYWN0b3JTZXQpXG4gICAgICAgICAgICAgIDogZmFjdG9yU2V0LFxuICAgICAgICAgICAgYXBwbGllZDogZmFjdG9yU2V0LFxuICAgICAgICAgICAgYWxsOiBhbGxGYWN0b3JzLFxuICAgICAgICAgICAgZXh0cmFCeU1hcmt0eXBlOiBleHRyYUZhY3RvcnNCeU1hcmt0eXBlXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBwcmV2RmFjdG9yU2V0ID0gZmFjdG9yU2V0O1xuICAgICAgICByZXR1cm4gbmV3UHNldWRvU3RlcDtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gIH0pO1xuXG4gIGNvbnN0IGF4ZXNwc2V1ZG9TdGVwcyA9IGdldEF4aXNQc2V1ZG9TdGVwcyhkaWZmcyk7XG5cbiAgY29uc3QgbGVnZW5kc3BzZXVkb1N0ZXBzID0gZ2V0TGVnZW5kUHNldWRvU3RlcHMoZGlmZnMpO1xuXG4gIGxldCBwc2V1ZG9UaW1lbGluZXM7XG4gIGlmIChlbnVtZWRNYXJrc1B1c2Vkb1N0ZXBzLmxlbmd0aCA9PT0gMSkge1xuICAgIHBzZXVkb1RpbWVsaW5lcyA9IGVudW1BcnJheXNCeUl0ZW1zKFxuICAgICAgZW51bWVkTWFya3NQdXNlZG9TdGVwc1swXSxcbiAgICAgIGxlZ2VuZHNwc2V1ZG9TdGVwcy5jb25jYXQoYXhlc3BzZXVkb1N0ZXBzKSxcbiAgICAgIGVudW1UbEJ5U3RlcFxuICAgICkubWFwKHBzZXVkb1RsID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbmNhdDogcHNldWRvVGwubWFwKHN0YWdlID0+IHtcbiAgICAgICAgICByZXR1cm4geyBzeW5jOiBBcnJheS5pc0FycmF5KHN0YWdlKSA/IHN0YWdlIDogW3N0YWdlXSB9O1xuICAgICAgICB9KVxuICAgICAgfTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgXCJDdXJyZW50bHksIEdlbWluaSBSZWNvbW1lbmRhdGlvbiBvbmx5IHN1cHBvcnRzIGEgc2luZ2xlIG1hcmsgd2l0aG91dCBhZGRpbmcgb3IgcmVtb3ZpbmcuXCJcbiAgICApO1xuICAgIGNvbnNvbGUuZXJyb3IoXCJUT0RPOiBjcm9zcyBqb2luIHRoZSBwc2V1ZG8gdGltZWxpbmVzIG9mIGVhY2ggbWFyay5cIik7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIHBzZXVkb1RpbWVsaW5lc1xuICAgICAgLm1hcChwc2V1ZG9UbCA9PiB7XG4gICAgICAgIHBzZXVkb1RsLmNvbmNhdCA9IHBzZXVkb1RsLmNvbmNhdC5tYXAoc3RhZ2UgPT4ge1xuICAgICAgICAgIGxldCBjdXJyU3luYyA9IHN0YWdlLnN5bmM7XG5cbiAgICAgICAgICAvLyBmaWx0ZXIgZW1wdHkgbWFyayBwU3RlcFxuICAgICAgICAgIGN1cnJTeW5jID0gY3VyclN5bmMuZmlsdGVyKHBTdGVwID0+IHtcbiAgICAgICAgICAgIHJldHVybiAocFN0ZXAuZGlmZi5jb21wVHlwZSAhPT0gXCJtYXJrXCIpIHx8XG4gICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgICAgKHBTdGVwLmZhY3RvclNldHMuYXBwbGllZC5sZW5ndGggPT09IDApIHx8XG4gICAgICAgICAgICAgICAgICAocFN0ZXAuZmFjdG9yU2V0cy5jdXJyZW50Lmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICAgICApICYmXG4gICAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAgIChwU3RlcC5mYWN0b3JTZXRzLmFsbC5pbmRleE9mKFwiYWRkXCIpID49IDApICYmXG4gICAgICAgICAgICAgICAgICAocFN0ZXAuZmFjdG9yU2V0cy5hcHBsaWVkLmluZGV4T2YoXCJhZGRcIikgPCAwKVxuICAgICAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgICAgKHBTdGVwLmZhY3RvclNldHMuYWxsLmluZGV4T2YoXCJyZW1vdmVcIikgPj0gMCkgJiZcbiAgICAgICAgICAgICAgICAgIChwU3RlcC5mYWN0b3JTZXRzLmFwcGxpZWQubGVuZ3RoICE9PSBwU3RlcC5mYWN0b3JTZXRzLmN1cnJlbnQubGVuZ3RoKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgIH0pO1xuXG5cblxuICAgICAgICAgIHJldHVybiB7IHN5bmM6IGN1cnJTeW5jIH07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcHNldWRvVGw7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcihwc2V1ZG9UbCA9PiB2YWxpZGF0ZShwc2V1ZG9UbCwgc3RhZ2VOKSlcbiAgICAgIC8vIC5tYXAoKHBzZXVkb1RsLCBpKSA9PiBhcHBlbmRHdWlkZU1vdmVzKHBzZXVkb1RsLCBheGVzcHNldWRvU3RlcHMsIGxlZ2VuZHNwc2V1ZG9TdGVwcykpXG4gICAgICAubWFwKHBzZXVkb1RsID0+IGFwcGVuZFZpZXdEaWZmKHBzZXVkb1RsLCBkaWZmcy52aWV3RGlmZnMpKVxuICAgICAgLm1hcChwc2V1ZG9UbCA9PiBhcHBlbmRHcmlkQ2hhbmdlcyhwc2V1ZG9UbCkpXG4gICAgICAubWFwKHBzZXVkb1RsID0+IGFwcGVuZFRpbWluZyhwc2V1ZG9UbCwgdGltaW5nKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gYXBwZW5kVGltaW5nKHBzZXVkb1RsLCB0aW1pbmcgPSB7fSkge1xuICBjb25zdCB0b3RhbER1cmF0aW9uID0gdGltaW5nLnRvdGFsRHVyYXRpb24gfHwgMjAwMDtcbiAgcHNldWRvVGwuY29uY2F0LmZvckVhY2goc3RhZ2UgPT4ge1xuICAgIGZvciAoY29uc3QgcHNldWRvU3RlcCBvZiBzdGFnZS5zeW5jKSB7XG4gICAgICBwc2V1ZG9TdGVwLnRpbWluZyA9IHtcbiAgICAgICAgZHVyYXRpb246IHsgcmF0aW86IE1hdGguZmxvb3IoMTAwIC8gcHNldWRvVGwuY29uY2F0Lmxlbmd0aCkgLyAxMDAgfVxuICAgICAgfTtcblxuICAgIH1cbiAgfSk7XG4gIHBzZXVkb1RsLnRvdGFsRHVyYXRpb24gPSB0b3RhbER1cmF0aW9uO1xuICByZXR1cm4gcHNldWRvVGw7XG59XG5mdW5jdGlvbiBnZXRMZWdlbmRQc2V1ZG9TdGVwcyhkaWZmcykge1xuICByZXR1cm4gZGlmZnMuY29tcERpZmZzXG4gICAgLmZpbHRlcihcbiAgICAgIGRpZmYgPT5cbiAgICAgICAgZGlmZi5jb21wVHlwZSA9PT0gXCJsZWdlbmRcIiAmJlxuICAgICAgICAoZGlmZi5tZXRhLnNjYWxlIHx8XG4gICAgICAgICAgZGlmZi5tZXRhLmVuY29kZSB8fFxuICAgICAgICAgIGRpZmYubWV0YS5hZGQgfHxcbiAgICAgICAgICBkaWZmLm1ldGEucmVtb3ZlIHx8XG4gICAgICAgICAgTWF0aC5hYnMoZGlmZi5tZXRhLnZpZXcueCkgLSBNSU5fUE9TX0RFTFRBID4gMCB8fFxuICAgICAgICAgIE1hdGguYWJzKGRpZmYubWV0YS52aWV3LnkpIC0gTUlOX1BPU19ERUxUQSA+IDAgfHxcbiAgICAgICAgICBNYXRoLmFicyhkaWZmLm1ldGEudmlldy5kZWx0YUgpIC0gTUlOX1BPU19ERUxUQSA+IDAgfHxcbiAgICAgICAgICBNYXRoLmFicyhkaWZmLm1ldGEudmlldy5kZWx0YVcpIC0gTUlOX1BPU19ERUxUQSA+IDApXG4gICAgKVxuICAgIC5yZWR1Y2UoKHN0ZXBzLCBkaWZmKSA9PiB7XG4gICAgICBsZXQgZmFjdG9ycyA9IFtdO1xuICAgICAgaWYgKGRpZmYubWV0YS5hZGQpIHtcbiAgICAgICAgZmFjdG9ycyA9IFtgYWRkLiR7ZGlmZi5tZXRhLnVzZWRTY2FsZXMuc29ydCgpLmpvaW4oXCJfXCIpfWBdO1xuICAgICAgfSBlbHNlIGlmIChkaWZmLm1ldGEucmVtb3ZlKSB7XG4gICAgICAgIGZhY3RvcnMgPSBbYHJlbW92ZS4ke2RpZmYubWV0YS51c2VkU2NhbGVzLnNvcnQoKS5qb2luKFwiX1wiKX1gXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChkaWZmLm1ldGEuc2NhbGUpIHtcbiAgICAgICAgICBmYWN0b3JzID0gZmFjdG9ycy5jb25jYXQoT2JqZWN0LmtleXMoZGlmZi5tZXRhLnNjYWxlKS5tYXAoc2NOYW1lID0+IGBzY2FsZS4ke3NjTmFtZX1gKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRpZmYubWV0YS5lbmNvZGUpIHtcbiAgICAgICAgICBmYWN0b3JzLnB1c2goXCJlbmNvZGVcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRpZmYubWV0YS52aWV3LnggIT09IDAgfHwgZGlmZi5tZXRhLnZpZXcueSAhPT0gMCkge1xuICAgICAgICAgIGZhY3RvcnMucHVzaChcImVuY29kZS5wb3NpdGlvblwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyByZXR1cm4gc3RlcHMuY29uY2F0KFxuICAgICAgLy8gICBmYWN0b3JzLm1hcChmY3RyID0+IHtcbiAgICAgIC8vICAgICByZXR1cm4geyBkaWZmOiBkaWZmLCBmYWN0b3JTZXRzOiB7Y3VycmVudDogW2ZjdHJdLCAgYWxsOiBmYWN0b3JzfSB9XG4gICAgICAvLyAgIH0pXG4gICAgICAvLyApO1xuICAgICAgcmV0dXJuIHN0ZXBzLmNvbmNhdCh7IGRpZmYsIGZhY3RvclNldHM6IHtjdXJyZW50OiBmYWN0b3JzLCAgYWxsOiBmYWN0b3JzfSB9KTtcbiAgICB9LCBbXSk7XG59XG5mdW5jdGlvbiBnZXRBeGlzUHNldWRvU3RlcHMoZGlmZnMpIHtcbiAgcmV0dXJuIGRpZmZzLmNvbXBEaWZmc1xuICAgIC5maWx0ZXIoXG4gICAgICBkaWZmID0+XG4gICAgICAgIGRpZmYuY29tcFR5cGUgPT09IFwiYXhpc1wiICYmXG4gICAgICAgIChkaWZmLm1ldGEuc2NhbGUgfHxcbiAgICAgICAgICBkaWZmLm1ldGEuZW5jb2RlIHx8XG4gICAgICAgICAgZGlmZi5tZXRhLmFkZCB8fFxuICAgICAgICAgIGRpZmYubWV0YS5yZW1vdmUgfHxcbiAgICAgICAgICBNYXRoLmFicyhkaWZmLm1ldGEudmlldy54KSAtIE1JTl9QT1NfREVMVEEgPiAwIHx8XG4gICAgICAgICAgTWF0aC5hYnMoZGlmZi5tZXRhLnZpZXcueSkgLSBNSU5fUE9TX0RFTFRBID4gMCB8fFxuICAgICAgICAgIE1hdGguYWJzKGRpZmYubWV0YS52aWV3LmRlbHRhSCkgLSBNSU5fUE9TX0RFTFRBID4gMCB8fFxuICAgICAgICAgIE1hdGguYWJzKGRpZmYubWV0YS52aWV3LmRlbHRhVykgLSBNSU5fUE9TX0RFTFRBID4gMClcbiAgICApXG4gICAgLmZpbHRlcihkaWZmID0+IHtcbiAgICAgIGlmIChkaWZmLm1ldGEuc2NhbGVbZGlmZi5tZXRhLnVzZWRTY2FsZXNbMF1dKSB7XG4gICAgICAgIGNvbnN0IHNjYWxlRGlmZiA9IGRpZmYubWV0YS5zY2FsZVtkaWZmLm1ldGEudXNlZFNjYWxlc1swXV07XG4gICAgICAgIHJldHVybiBzY2FsZURpZmYucmFuZ2VEZWx0YSA9PT0gMCAmJlxuICAgICAgICAgICFzY2FsZURpZmYuZG9tYWluVmFsdWVEaWZmICYmXG4gICAgICAgICAgc2NhbGVEaWZmLnN0YXlEaXNjcmV0ZVxuICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICA6IHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KVxuICAgIC5tYXAoZGlmZiA9PiB7XG4gICAgICBsZXQgZmFjdG9ycyA9IFtdO1xuICAgICAgaWYgKGRpZmYubWV0YS5hZGQpIHtcbiAgICAgICAgZmFjdG9ycyA9IFtgYWRkLiR7ZGlmZi5jb21wTmFtZX1gXTtcbiAgICAgIH0gZWxzZSBpZiAoZGlmZi5tZXRhLnJlbW92ZSkge1xuICAgICAgICBmYWN0b3JzID0gW2ByZW1vdmUuJHtkaWZmLmNvbXBOYW1lfWBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGRpZmYubWV0YS5zY2FsZSkge1xuICAgICAgICAgIGZhY3RvcnMgPSBmYWN0b3JzLmNvbmNhdChPYmplY3Qua2V5cyhkaWZmLm1ldGEuc2NhbGUpLm1hcChzY05hbWUgPT4gYHNjYWxlLiR7c2NOYW1lfWApKTtcbiAgICAgICAgICBmYWN0b3JzLnB1c2goXCJlbmNvZGVcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGlmZi5tZXRhLnZpZXcueCAhPT0gMCB8fCBkaWZmLm1ldGEudmlldy55ICE9PSAwKSB7XG4gICAgICAgICAgZmFjdG9ycy5wdXNoKFwiZW5jb2RlLnBvc2l0aW9uXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4geyBkaWZmLCBmYWN0b3JTZXRzOiB7Y3VycmVudDogZmFjdG9ycywgYXBwbGllZDogZmFjdG9ycywgYWxsOiBmYWN0b3JzfSB9O1xuICAgIH0pO1xufVxuXG5cbmZ1bmN0aW9uIGFwcGVuZFZpZXdEaWZmKHBzZXVkb1RsLCB2aWV3RGlmZnMpIHtcbiAgY29uc3QgZG9uZSA9IHtcbiAgICBpbmNyZWFzZTogeyB3aWR0aDogZmFsc2UsIGhlaWdodDogZmFsc2UgfSxcbiAgICBkZWNyZWFzZTogeyB3aWR0aDogZmFsc2UsIGhlaWdodDogZmFsc2UgfVxuICB9O1xuICBmdW5jdGlvbiBhcHBlbmREaWZmKHN0YWdlLCBpbmNPckRlYykge1xuICAgIGZvciAoY29uc3Qgd2hpY2ggb2YgW1wid2lkdGhcIiwgXCJoZWlnaHRcIl0pIHtcbiAgICAgIGlmIChcbiAgICAgICAgdmlld0RpZmZzW3doaWNoXVtpbmNPckRlY10gJiZcbiAgICAgICAgbmVlZFZpZXdEaWZmKHN0YWdlLnN5bmMsIGluY09yRGVjLCB3aGljaCkgJiZcbiAgICAgICAgIWRvbmVbaW5jT3JEZWNdW3doaWNoXVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGZvdW5kID0gc3RhZ2Uuc3luYy5maW5kKHBTdGVwID0+IHBTdGVwLmRpZmYuY29tcFR5cGUgPT09IFwidmlld1wiKTtcbiAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgZm91bmQuZmFjdG9yU2V0cy5jdXJyZW50LnB1c2god2hpY2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YWdlLnN5bmMucHVzaCh7XG5cbiAgICAgICAgICAgIGRpZmY6IHtcbiAgICAgICAgICAgICAgY29tcE5hbWU6IHZpZXdEaWZmcy5jb21wTmFtZSxcbiAgICAgICAgICAgICAgY29tcFR5cGU6IHZpZXdEaWZmcy5jb21wVHlwZSxcbiAgICAgICAgICAgICAgbWV0YTogdmlld0RpZmZzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmFjdG9yU2V0czogeyBjdXJyZW50OiBbd2hpY2hdIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRvbmVbaW5jT3JEZWNdW3doaWNoXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YWdlO1xuICB9XG4gIHJldHVybiB7XG4gICAgY29uY2F0OiBwc2V1ZG9UbC5jb25jYXRcbiAgICAgIC5tYXAoKHN0YWdlLCBqKSA9PiBhcHBlbmREaWZmKHN0YWdlLCBcImluY3JlYXNlXCIsIGopKVxuICAgICAgLnJldmVyc2UoKVxuICAgICAgLm1hcChzdGFnZSA9PiBhcHBlbmREaWZmKHN0YWdlLCBcImRlY3JlYXNlXCIpKVxuICAgICAgLnJldmVyc2UoKVxuICB9O1xufVxuZnVuY3Rpb24gbmVlZFZpZXdEaWZmKHBzZXVkb1N0ZXBzLCBpbmNPckRlYywgd2hpY2gpIHtcbiAgZm9yIChjb25zdCBwc2V1ZG9TdGVwIG9mIHBzZXVkb1N0ZXBzLmZpbHRlcihcbiAgICBzdGVwID0+IFtcIm1hcmtcIiwgXCJheGlzXCIsIFwibGVnZW5kXCJdLmluZGV4T2Yoc3RlcC5kaWZmLmNvbXBUeXBlKSA+PSAwXG4gICkpIHtcbiAgICBsZXQgZGVsdGFQcm9wID0gd2hpY2ggPT09IFwid2lkdGhcIiA/IFwieFwiIDogXCJ5XCI7XG4gICAgaWYgKHBzZXVkb1N0ZXAuZGlmZi5jb21wVHlwZSA9PT0gXCJtYXJrXCIpIHtcbiAgICAgIGRlbHRhUHJvcCA9IHdoaWNoID09PSBcIndpZHRoXCIgPyBcImRlbHRhV1wiIDogXCJkZWx0YUhcIjtcbiAgICB9IGVsc2UgaWYgKHBzZXVkb1N0ZXAuZGlmZi5jb21wVHlwZSA9PT0gXCJheGlzXCIpIHtcbiAgICAgIGlmIChcbiAgICAgICAgW1wibGVmdFwiLCBcInRvcFwiXS5pbmRleE9mKFxuICAgICAgICAgIChwc2V1ZG9TdGVwLmRpZmYuaW5pdGlhbCB8fCBwc2V1ZG9TdGVwLmRpZmYuZmluYWwpLm9yaWVudFxuICAgICAgICApID49IDBcbiAgICAgICkge1xuICAgICAgICBkZWx0YVByb3AgPSB3aGljaCA9PT0gXCJ3aWR0aFwiID8gXCJkZWx0YVdcIiA6IFwiZGVsdGFIXCI7XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBoYXNWaXdSZWxhdGVkU2NhbGVEaWZmID0gdHJ1ZTtcbiAgICBpZiAocHNldWRvU3RlcC5kaWZmLmNvbXBUeXBlID09PSBcIm1hcmtcIikge1xuICAgICAgaGFzVml3UmVsYXRlZFNjYWxlRGlmZiA9XG4gICAgICAgIHBzZXVkb1N0ZXAuZmFjdG9yU2V0cy5jdXJyZW50LmluZGV4T2YoXG4gICAgICAgICAgd2hpY2ggPT09IFwid2lkdGhcIiA/IFwic2NhbGUueFwiIDogXCJzY2FsZS55XCJcbiAgICAgICAgKSA+PSAwO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHBzZXVkb1N0ZXAuZGlmZi5tZXRhLnZpZXdbZGVsdGFQcm9wXSA+PSBNSU5fUE9TX0RFTFRBICYmXG4gICAgICBpbmNPckRlYyA9PT0gXCJpbmNyZWFzZVwiICYmXG4gICAgICBoYXNWaXdSZWxhdGVkU2NhbGVEaWZmXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgcHNldWRvU3RlcC5kaWZmLm1ldGEudmlld1tkZWx0YVByb3BdIDw9IC1NSU5fUE9TX0RFTFRBICYmXG4gICAgICBpbmNPckRlYyA9PT0gXCJkZWNyZWFzZVwiICYmXG4gICAgICBoYXNWaXdSZWxhdGVkU2NhbGVEaWZmXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBXaGVuIHRoZSBzaXplIG9mIHRoZSBtYXJrIHZpZXcgY2hhbmdlcywgZ3JpZCBsaW5lcyBzaG91bGQgYmUgZXh0ZW5kZWQuXG5mdW5jdGlvbiBhcHBlbmRHcmlkQ2hhbmdlcyhwc2V1ZG9UbCkge1xuICAvLyBDdXJyZW50bHkgb25seSBvbmUgcFN0ZXAgaXMgZ2VuZXJhdGVkLlxuICBsZXQgeEF4aXNQU3RlcCwgeUF4aXNQU3RlcDtcbiAgcHNldWRvVGwuY29uY2F0LmZvckVhY2goc3RhZ2UgPT4ge1xuICAgIHhBeGlzUFN0ZXAgPSB4QXhpc1BTdGVwIHx8IHN0YWdlLnN5bmMuZmluZChhUFN0ZXAgPT5cbiAgICAgICFhUFN0ZXAuZGlmZi5tZXRhLmFkZCAmJlxuICAgICAgIWFQU3RlcC5kaWZmLm1ldGEucmVtb3ZlICYmXG4gICAgICBhUFN0ZXAuZGlmZi5jb21wVHlwZSA9PT0gXCJheGlzXCIgJiZcbiAgICAgIGFQU3RlcC5kaWZmLm1ldGEuc2NOYW1lc1swXSA9PT0gXCJ4XCIpO1xuICAgIHlBeGlzUFN0ZXAgPSB5QXhpc1BTdGVwIHx8IHN0YWdlLnN5bmMuZmluZChhUFN0ZXAgPT5cbiAgICAgICFhUFN0ZXAuZGlmZi5tZXRhLmFkZCAmJlxuICAgICAgIWFQU3RlcC5kaWZmLm1ldGEucmVtb3ZlICYmXG4gICAgICBhUFN0ZXAuZGlmZi5jb21wVHlwZSA9PT0gXCJheGlzXCIgJiZcbiAgICAgIGFQU3RlcC5kaWZmLm1ldGEuc2NOYW1lc1swXSA9PT0gXCJ5XCIpO1xuICB9KTtcblxuICBpZiAoIXhBeGlzUFN0ZXAgJiYgIXlBeGlzUFN0ZXApIHtcbiAgICByZXR1cm4gcHNldWRvVGw7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5wc2V1ZG9UbCxcbiAgICBjb25jYXQ6IHBzZXVkb1RsLmNvbmNhdC5tYXAoc3RhZ2UgPT4ge1xuICAgICAgbGV0IG5ld1N0YWdlID0gY29weShzdGFnZSk7XG4gICAgICAvLyBpZiB0aGVyZSBpcyBhbnkgbWFyay52aWV3IGNoYW5nZVxuICAgICAgaWYgKCBzdGFnZS5zeW5jLmZpbmQocFN0ZXAgPT4gW1wibWFya1wiLCBcImF4aXNcIl0uaW5kZXhPZihwU3RlcC5kaWZmLmNvbXBUeXBlKSA+PSAwICYmIHBTdGVwLmRpZmYubWV0YS52aWV3LmRlbHRhSCAhPT0gMCkgKSB7XG4gICAgICAgIGlmICh4QXhpc1BTdGVwICYmICFzdGFnZS5zeW5jLmZpbmQocFN0ZXAgPT4gcFN0ZXAuZGlmZi5jb21wVHlwZSA9PT0gXCJheGlzXCIgJiYgcFN0ZXAuZGlmZi5tZXRhLnNjTmFtZXNbMF0gPT09IFwieFwiKSkge1xuXG4gICAgICAgICAgeEF4aXNQU3RlcC5mYWN0b3JTZXRzLmFsbC5wdXNoKFwiZW5jb2RlLm9ubHkuZ3JpZFwiKTtcbiAgICAgICAgICBsZXQgZ3JpZENoYW5naW5nQXhpc1BTdGVwID0ge1xuICAgICAgICAgICAgLi4ueEF4aXNQU3RlcCxcbiAgICAgICAgICAgIGZhY3RvclNldHM6IHtcbiAgICAgICAgICAgICAgYWxsOiBjb3B5KHhBeGlzUFN0ZXAuZmFjdG9yU2V0cy5hbGwpLFxuICAgICAgICAgICAgICBhcHBsaWVkOiBbXCJlbmNvZGUub25seS5ncmlkXCJdLFxuICAgICAgICAgICAgICBjdXJyZW50OiBbXCJlbmNvZGUub25seS5ncmlkXCJdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICB4QXhpc1BTdGVwLmZhY3RvclNldHMuYXBwbGllZC5wdXNoKFwiZW5jb2RlLm9ubHkuZ3JpZFwiKTtcbiAgICAgICAgICBuZXdTdGFnZS5zeW5jLnB1c2goZ3JpZENoYW5naW5nQXhpc1BTdGVwKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIHN0YWdlLnN5bmMuZmluZChwU3RlcCA9PiBbXCJtYXJrXCIsIFwiYXhpc1wiXS5pbmRleE9mKHBTdGVwLmRpZmYuY29tcFR5cGUpID49IDAgJiYgcFN0ZXAuZGlmZi5tZXRhLnZpZXcuZGVsdGFXICE9PSAwKSApIHtcbiAgICAgICAgaWYgKHlBeGlzUFN0ZXAgJiYgIXN0YWdlLnN5bmMuZmluZChwU3RlcCA9PiBwU3RlcC5kaWZmLmNvbXBUeXBlID09PSBcImF4aXNcIiAmJiBwU3RlcC5kaWZmLm1ldGEuc2NOYW1lc1swXSA9PT0gXCJ5XCIpKSB7XG4gICAgICAgICAgeUF4aXNQU3RlcC5mYWN0b3JTZXRzLmFsbC5wdXNoKFwiZW5jb2RlLm9ubHkuZ3JpZFwiKTtcbiAgICAgICAgICBsZXQgZ3JpZENoYW5naW5nQXhpc1BTdGVwID0ge1xuICAgICAgICAgICAgLi4ueUF4aXNQU3RlcCxcbiAgICAgICAgICAgIGZhY3RvclNldHM6IHtcbiAgICAgICAgICAgICAgYWxsOiBjb3B5KHlBeGlzUFN0ZXAuZmFjdG9yU2V0cy5hbGwpLFxuICAgICAgICAgICAgICBhcHBsaWVkOiBbXCJlbmNvZGUub25seS5ncmlkXCJdLFxuICAgICAgICAgICAgICBjdXJyZW50OiBbXCJlbmNvZGUub25seS5ncmlkXCJdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICB5QXhpc1BTdGVwLmZhY3RvclNldHMuYXBwbGllZC5wdXNoKFwiZW5jb2RlLm9ubHkuZ3JpZFwiKTtcbiAgICAgICAgICBuZXdTdGFnZS5zeW5jLnB1c2goZ3JpZENoYW5naW5nQXhpc1BTdGVwKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3U3RhZ2U7XG4gICAgfSlcbiAgfTtcblxufVxuZnVuY3Rpb24gZW51bVRsQnlTdGVwKFRsLCBzdGVwKSB7XG4gIGNvbnN0IG5ld1RscyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IFRsLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgbmV3VGwgPSBjb3B5KFRsKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkobmV3VGxbaV0pKSB7XG4gICAgICBuZXdUbFtpXSA9IFtuZXdUbFtpXV07XG4gICAgfVxuICAgIGNvbnN0IGZvdW5kID0gbmV3VGxbaV0uZmluZChzdHAgPT4gc3RwLmRpZmYuY29tcE5hbWUgPT09IHN0ZXAuZGlmZi5jb21wTmFtZSk7XG4gICAgaWYgKGZvdW5kKSB7XG4gICAgICBmb3VuZC5mYWN0b3JTZXRzLmN1cnJlbnQgPSBmb3VuZC5mYWN0b3JTZXRzLmN1cnJlbnQuY29uY2F0KFxuICAgICAgICBzdGVwLmZhY3RvclNldHMuY3VycmVudFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3VGxbaV0ucHVzaChzdGVwKTtcbiAgICB9XG5cbiAgICBuZXdUbHMucHVzaChuZXdUbCk7XG4gIH1cbiAgcmV0dXJuIG5ld1Rscztcbn1cblxuLy8gY2hvb3NlIHRoZSBmYWN0b3JzIGhhdmluZyBkaWZmcyBiZXR3ZWVuIGluaXRpYWwgYW5kIGZpbmFsLlxuZnVuY3Rpb24gZmluZEFsbEZhY3RvcnMobWFya0RpZmYpIHtcbiAgY29uc3QgYWxsRmFjdG9ycyA9IFtdO1xuICBsZXQgZGlmZkluZm8gPSBtYXJrRGlmZi5tZXRhO1xuICBsZXQgZXh0cmFGYWN0b3JzQnlNYXJrdHlwZSA9IFtdO1xuICBpZiAoZGlmZkluZm8uYWRkKSB7XG4gICAgYWxsRmFjdG9ycy5wdXNoKFwiYWRkXCIpO1xuICB9XG5cbiAgaWYgKGRpZmZJbmZvLnJlbW92ZSkge1xuICAgIGFsbEZhY3RvcnMucHVzaChcInJlbW92ZVwiKTtcbiAgICByZXR1cm4geyBhbGxGYWN0b3JzLCBleHRyYUZhY3RvcnNCeU1hcmt0eXBlIH07XG4gIH1cblxuICBpZiAoZGlmZkluZm8ubWFya3R5cGUpIHtcbiAgICBhbGxGYWN0b3JzLnB1c2goXCJtYXJrdHlwZVwiKTtcbiAgICBleHRyYUZhY3RvcnNCeU1hcmt0eXBlLnB1c2goXCJlbmNvZGUub3RoZXJzXCIpO1xuICB9XG4gIGlmIChkaWZmSW5mby5kYXRhKSB7XG4gICAgaWYgKGRpZmZJbmZvLmRhdGEucm93ICE9PSBmYWxzZSB8fCBkaWZmSW5mby5kYXRhLmNvbHVtbiAhPT0gXCJyZW1vdmVkXCIpIHtcbiAgICAgIGFsbEZhY3RvcnMucHVzaChcImRhdGFcIik7XG4gICAgfVxuICB9XG4gIGlmIChkaWZmSW5mby5zY2FsZSkge1xuICAgIE9iamVjdC5rZXlzKGRpZmZJbmZvLnNjYWxlKS5mb3JFYWNoKHNjTmFtZSA9PiB7XG4gICAgICBjb25zdCBzY2FsZURpZmYgPSBkaWZmSW5mby5zY2FsZVtzY05hbWVdO1xuICAgICAgaWYgKHNjYWxlRGlmZikge1xuICAgICAgICBhbGxGYWN0b3JzLnB1c2goYHNjYWxlLiR7c2NOYW1lfWApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIE9iamVjdC5rZXlzKGRpZmZJbmZvLmVuY29kZSkuZm9yRWFjaChjaE5hbWUgPT4ge1xuICAgIGNvbnN0IGNoRGlmZiA9IGRpZmZJbmZvLmVuY29kZVtjaE5hbWVdO1xuICAgIGlmIChjaERpZmYgPT09IHRydWUpIHtcbiAgICAgIGFsbEZhY3RvcnMucHVzaChgZW5jb2RlLiR7Y2hOYW1lfWApO1xuICAgIH0gZWxzZSBpZiAoY2hEaWZmID09PSBcImJ5TWFya3R5cGVDaGFuZ2VcIikge1xuICAgICAgZXh0cmFGYWN0b3JzQnlNYXJrdHlwZS5wdXNoKGBlbmNvZGUuJHtjaE5hbWV9YCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHsgYWxsRmFjdG9ycywgZXh0cmFGYWN0b3JzQnlNYXJrdHlwZSB9O1xufVxuXG5mdW5jdGlvbiBnZXRGYWN0b3JBc3NpZ25tZW50KGksIGZhY3Rvckxlbiwgc3RhZ2VOKSB7XG4gIGxldCBxdW90aWVudCA9IGk7XG4gIGNvbnN0IGFzc2lnbm1lbnQgPSBuZXcgQXJyYXkoZmFjdG9yTGVuKTtcbiAgZm9yIChsZXQgaiA9IDA7IGogPCBmYWN0b3JMZW47IGorKykge1xuICAgIGFzc2lnbm1lbnRbal0gPSBxdW90aWVudCAlIHN0YWdlTjtcbiAgICBxdW90aWVudCA9IE1hdGguZmxvb3IocXVvdGllbnQgLyBzdGFnZU4pO1xuICB9XG4gIHJldHVybiBhc3NpZ25tZW50O1xufVxuXG5jbGFzcyBTa2lwcGluZ0NvbmRpdGlvbnMge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnJlZ2lzdGVyZWQgPSBbXTtcbiAgfVxuXG4gIHJlZ2lzdGVyKGNvbmRpdGlvbikge1xuICAgIHRoaXMucmVnaXN0ZXJlZC5wdXNoKGNvbmRpdGlvbik7XG4gIH1cblxuICBjaGVjayhmYWN0b3JzKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJlZ2lzdGVyZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNvbmRpdGlvbiA9IHRoaXMucmVnaXN0ZXJlZFtpXTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbmRpdGlvbi5yZWR1Y2UoKHNhdGlzZnlpbmcsIGNvbmRGKSA9PiB7XG4gICAgICAgIHJldHVybiAoc2F0aXNmeWluZyA9XG4gICAgICAgICAgc2F0aXNmeWluZyAmJiBmYWN0b3JzLmluZGV4T2YoY29uZEYuZmFjdG9yKSA+PSAwID09PSBjb25kRi5pbmNsdWRlKTtcbiAgICAgIH0sIHRydWUpO1xuXG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IHsgZmluZEFsbEZhY3RvcnMsIFNraXBwaW5nQ29uZGl0aW9ucywgZW51bWVyYXRlUHNldWRvVGltZWxpbmVzIH07XG5cbi8vIGxlZ2VuZHNwc2V1ZG9TdGVwcy5tYXAocFN0ZXAgPT4gcFN0ZXAuZGlmZi5jb21wTmFtZSlcbi8vICAgLnVuaXF1ZSgpXG4vLyAgIC5mb3JFYWNoKGxlZ2VuZE5hbWUgPT4ge1xuLy8gICBsZXQgbWVyZ2VkTGVnZW5kU3RlcCA9IG1lcmdlUHVzZWRvU3RlcHMoY3VyclN5bmMuZmlsdGVyKHBTdGVwID0+IHBTdGVwLmRpZmYuY29tcE5hbWUgPT09IGxlZ2VuZE5hbWUpKVxuLy8gICBpZiAobWVyZ2VkTGVnZW5kU3RlcCl7XG4vLyAgICAgY3VyclN5bmMgPSBjdXJyU3luYy5maWx0ZXIocFN0ZXAgPT4gcFN0ZXAuZGlmZi5jb21wTmFtZSAhPT0gbGVnZW5kTmFtZSkuY29uY2F0KFttZXJnZWRMZWdlbmRTdGVwXSlcbi8vICAgfVxuLy8gfSk7XG4vLyBmdW5jdGlvbiBtZXJnZVB1c2Vkb1N0ZXBzKHBTdGVwcykge1xuLy8gICBpZiAocFN0ZXBzLmxlbmd0aCA9PT0gMCkge1xuLy8gICAgIHJldHVybjtcbi8vICAgfVxuLy8gICBjb25zdCBtZXJnZWQgPSBjb3B5KHBTdGVwc1swXSk7XG4vLyAgIG1lcmdlZC5mYWN0b3JTZXRzID0ge1xuLy8gICAgIGFwcGxpZWQ6IHBTdGVwcy5yZWR1Y2UoKGFwcGxpZWQsIHBTdGVwKSA9PiBhcHBsaWVkLmNvbmNhdChwU3RlcC5mYWN0b3JTZXRzID8gcFN0ZXAuZmFjdG9yU2V0cy5hcHBsaWVkIDogW10pLCBbXSksXG4vLyAgICAgYWxsOiBtZXJnZWQuZmFjdG9yU2V0cyA/IG1lcmdlZC5mYWN0b3JTZXRzLmFsbCA6IFtdLFxuLy8gICAgIGV4dHJhQnlNYXJrdHlwZTogbWVyZ2VkLmZhY3RvclNldHMgPyBtZXJnZWQuZmFjdG9yU2V0cy5leHRyYUJ5TWFya3R5cGUgOiBbXVxuLy8gICB9XG5cbi8vICAgcmV0dXJuIG1lcmdlZDtcbi8vIH1cblxuLy8gZnVuY3Rpb24gYXBwZW5kR3VpZGVNb3Zlcyhwc2V1ZG9UbCwgYXhlc3BzZXVkb1N0ZXBzLCBsZWdlbmRzcHNldWRvU3RlcHMpIHtcbi8vICAgbGV0IGJvdHRvbUF4aXNQU3RlcCA9IGF4ZXNwc2V1ZG9TdGVwcy5maW5kKHBTdGVwID0+XG4vLyAgICAgKHBTdGVwLmRpZmYuaW5pdGlhbCAmJiBwU3RlcC5kaWZmLmluaXRpYWwub3JpZW50ID09PSBcImJvdHRvbVwiKSAmJlxuLy8gICAgIChwU3RlcC5kaWZmLmZpbmFsICYmIHBTdGVwLmRpZmYuZmluYWwub3JpZW50ID09PSBcImJvdHRvbVwiKVxuLy8gICApO1xuLy8gICBsZXQgcmlnaHRMZWdlbmRQU3RlcCA9IGxlZ2VuZHNwc2V1ZG9TdGVwcy5maW5kKHBTdGVwID0+XG4vLyAgICAgKHBTdGVwLmRpZmYuaW5pdGlhbCAmJiBwU3RlcC5kaWZmLmluaXRpYWwub3JpZW50ID09PSBcInJpZ2h0XCIpICYmXG4vLyAgICAgKHBTdGVwLmRpZmYuZmluYWwgJiYgcFN0ZXAuZGlmZi5maW5hbC5vcmllbnQgPT09IFwicmlnaHRcIilcbi8vICAgKTtcbi8vICAgbGV0IGJvdHRvbUF4aXNNb3ZlZCA9IGZhbHNlO1xuLy8gICBwc2V1ZG9UbC5jb25jYXQuZm9yRWFjaChzdGFnZSA9PiB7XG4vLyAgICAgbGV0IG1hcmtQc2V1ZG9TdGVwcyA9IHN0YWdlLnN5bmMuZmlsdGVyKHBTdGVwID0+IHBTdGVwLmRpZmYuY29tcFR5cGUgPT09IFwibWFya1wiKTtcbi8vICAgICBsZXQgd2lkdGhDaGFuZ2UgPSAhIW1hcmtQc2V1ZG9TdGVwcy5maW5kKG1Qc2V1ZG9TdGVwID0+XG4vLyAgICAgICBtUHNldWRvU3RlcC5mYWN0b3JTZXRzLmN1cnJlbnQuaW5kZXhPZihcInNjYWxlLnhcIikgPj0gMCAmJiBtUHNldWRvU3RlcC5kaWZmLm1ldGEudmlldy5kZWx0YVcgIT09IDBcbi8vICAgICApO1xuXG4vLyAgICAgaWYgKGJvdHRvbUF4aXNQU3RlcCkge1xuLy8gICAgICAgbGV0IHRoaXNib3R0b21BeGlzUFN0ZXAgPSBzdGFnZS5zeW5jLmZpbmQocFN0ZXAgPT4gcFN0ZXAuZGlmZi5jb21wTmFtZSA9PT0gYm90dG9tQXhpc1BTdGVwLmRpZmYuY29tcE5hbWUgKTtcbi8vICAgICAgIGlmIChib3R0b21BeGlzTW92ZWQgJiYgdGhpc2JvdHRvbUF4aXNQU3RlcCkge1xuLy8gICAgICAgICB0aGlzYm90dG9tQXhpc1BTdGVwLmZhY3RvclNldHMuY3VycmVudCA9IHRoaXNib3R0b21BeGlzUFN0ZXAuZmFjdG9yU2V0cy5jdXJyZW50LmZpbHRlcihmY3RyID0+IGZjdHIgIT09IFwiZW5jb2RlLnBvc2l0aW9uXCIpO1xuLy8gICAgICAgfVxuXG4vLyAgICAgICBpZiAoKG1hcmtQc2V1ZG9TdGVwcy5sZW5ndGggPiAwKSkge1xuLy8gICAgICAgICBsZXQgaGVpZ2h0Q2hhbmdlID0gISFtYXJrUHNldWRvU3RlcHMuZmluZChtUHNldWRvU3RlcCA9PlxuLy8gICAgICAgICAgIG1Qc2V1ZG9TdGVwLmZhY3RvclNldHMuY3VycmVudC5pbmRleE9mKFwic2NhbGUueVwiKSA+PSAwICYmIG1Qc2V1ZG9TdGVwLmRpZmYubWV0YS52aWV3LmRlbHRhSCAhPT0gMFxuLy8gICAgICAgICApO1xuLy8gICAgICAgICBpZiAoaGVpZ2h0Q2hhbmdlKSB7XG4vLyAgICAgICAgICAgLy8gSWYgbWFya3MgaGVpZ2h0IGNoYW5nZSwgdGhlIGJvdHRvbSBheGlzIHNob3VsZCBtb3ZlXG4vLyAgICAgICAgICAgaWYgKCF0aGlzYm90dG9tQXhpc1BTdGVwICYmICFib3R0b21BeGlzTW92ZWQpIHtcbi8vICAgICAgICAgICAgIC8vIGFkZCBheGlzUFN0ZXAgb25seSBjaGFuZ2luZyBheGlzR1xuLy8gICAgICAgICAgICAgc3RhZ2Uuc3luYy5wdXNoKHtcbi8vICAgICAgICAgICAgICAgZGlmZjogYm90dG9tQXhpc1BTdGVwLmRpZmYsXG4vLyAgICAgICAgICAgICAgIGZhY3RvclNldHM6IHtcbi8vICAgICAgICAgICAgICAgICBjdXJyZW50OiBbXCJlbmNvZGUucG9zaXRpb25cIl0sXG4vLyAgICAgICAgICAgICAgICAgYXBwbGllZDogW1wiZW5jb2RlLnBvc2l0aW9uXCJdLFxuLy8gICAgICAgICAgICAgICAgIGFsbDogYm90dG9tQXhpc1BTdGVwLmZhY3RvclNldHMuYWxsXG4vLyAgICAgICAgICAgICAgIH1cbi8vICAgICAgICAgICAgIH0pXG4vLyAgICAgICAgICAgfVxuLy8gICAgICAgICAgIGJvdHRvbUF4aXNNb3ZlZCA9IHRydWU7XG4vLyAgICAgICAgIH0gZWxzZSB7XG4vLyAgICAgICAgICAgLy8gSWYgbWFya3MgaGVpZ2h0IGRvZXMgbm90IGNoYW5nZSwgdGhlIGJvdHRvbSBheGlzIHNob3VsZCBub3QgbW92ZVxuLy8gICAgICAgICAgIGlmICh0aGlzYm90dG9tQXhpc1BTdGVwICYmICFib3R0b21BeGlzTW92ZWQpIHtcbi8vICAgICAgICAgICAgIC8vIGJvdHRvbUF4aXNQU3RlcCBzaG91bGQgbm90IG1vdmVcbi8vICAgICAgICAgICAgIHRoaXNib3R0b21BeGlzUFN0ZXAuZmFjdG9yU2V0cy5jdXJyZW50ID0gdGhpc2JvdHRvbUF4aXNQU3RlcC5mYWN0b3JTZXRzLmN1cnJlbnQuZmlsdGVyKGZjdHIgPT4gZmN0ciAhPT0gXCJlbmNvZGUucG9zaXRpb25cIilcblxuLy8gICAgICAgICAgIH1cbi8vICAgICAgICAgICBib3R0b21BeGlzTW92ZWQgPSBmYWxzZTtcbi8vICAgICAgICAgfVxuLy8gICAgICAgfSBlbHNlIHtcbi8vICAgICAgICAgaWYgKHRoaXNib3R0b21BeGlzUFN0ZXApIHtcbi8vICAgICAgICAgICBib3R0b21BeGlzTW92ZWQgPSB0cnVlO1xuLy8gICAgICAgICB9XG4vLyAgICAgICB9XG4vLyAgICAgfVxuXG4vLyAgIH0pXG5cbi8vICAgcmV0dXJuIHBzZXVkb1RsO1xuLy8gICAvLyBJZiBtYXJrcyB3aWR0aCBjaGFuZ2UsIHRoZSByaWdodCBheGlzIHNob3VsZCBtb3ZlXG4vLyAgIC8vIElmIG1hcmtzIHdpZHRoIGNoYW5nZSwgdGhlIHJpZ2h0IGxlZ2VuZCBzaG91bGQgbW92ZVxuXG4vLyAgIC8vIElmIG1hcmtzIHdpZHRoIGRvZXMgbm9udCBjaGFuZ2UsIHRoZSByaWdodCBheGlzIHNob3VsZCAgbm90IG1vdmVcbi8vICAgLy8gSWYgbWFya3Mgd2lkdGggZG9lcyBub3QgY2hhbmdlLCB0aGUgcmlnaHQgbGVnZW5kIHNob3VsZCBub3QgbW92ZVxuLy8gfSIsImltcG9ydCB7IGdldCB9IGZyb20gXCIuLi91dGlsL3V0aWxcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIFBFUkNFUFRJT05fQ0FQKGR1cmF0aW9uKSB7XG4gIC8vIGlmIChkdXJhdGlvbiA8IDApIHtcbiAgLy8gICBjb25zb2xlLmVycm9yKFwiRHVyYXRpb24gY2Fubm90IGJlIG5lZ2F0aXZlIVwiKTtcbiAgLy8gfSBlbHNlIGlmIChkdXJhdGlvbiA8PSAwKSB7XG4gIC8vICAgcmV0dXJuIDAuM1xuICAvLyB9IGVsc2UgaWYgKGR1cmF0aW9uIDw9IDY2Nykge1xuICAvLyAgIHJldHVybiAwLjVcbiAgLy8gfSBlbHNlIGlmIChkdXJhdGlvbiA8PSAxMDAwKSB7XG4gIC8vICAgcmV0dXJuIDAuOFxuICAvLyB9IGVsc2UgaWYgKGR1cmF0aW9uIDw9IDIwMDApIHtcbiAgLy8gICByZXR1cm4gMS4wXG4gIC8vIH0gZWxzZVxuICAvLyAgIHJldHVybiAxLjVcbiAgLy8gfVxuICAvLyByZXR1cm4gMS4wMCAvICgxICsgTWF0aC5leHAoLShkdXJhdGlvbi0xMjUwKS8xODApKSArIDAuNFxuICAvLyByZXR1cm4gMS4wMCAvICgxICsgTWF0aC5leHAoLShkdXJhdGlvbi0xMjUwKS8xODApKSArIDAuMzVcbiAgcmV0dXJuIDEuNCAvICgxICsgTWF0aC5leHAoLShkdXJhdGlvbiAtIDEyMDApIC8gMzAwKSk7XG59XG5cbi8vIFR1bmluZyBmb3IgdGhlIG10dXJrIHN0dWR5XG4vLyAvLyBTdGltdWx1cyAxXG4vLyBzdGFnZTEtcmFuazEgPiBzdGFnZTMtcmFuazEsIHN0YWdlMi1yYW5rMiwgc3RhZ2UyLXJhbmszXG4vLyBzdGFnZTItcmFuazEgPiBzdGFnZTMtcmFuazEsIHN0YWdlMi1yYW5rMiwgc3RhZ2UyLXJhbmszXG5cbi8vIC8vIFN0aW11bHVzIDJcbi8vIHMxUjEgPiAqXG5cbi8vIC8vIFN0aW11bHVzIDNcbi8vIHN0YWdlMS1yYW5rMSA+ICpcbi8vIHN0YWdlMi1yYW5rMSA+IHN0YWdlMi1yYW5rMiwgc3RhZ2UzLXJhbmsxXG5cbi8vIC8vIFN0aW11bHVzIDRcbi8vIHN0YWdlMS1yYW5rMSA+IHN0YWdlMi1yYW5rM1xuXG5jb25zdCBzYW1lRG9tYWluID0gKHBzZXVkb1N0ZXAsIGZvdW5kRmFjdG9yKSA9PiB7XG4gIHJldHVybiAoXG4gICAgZ2V0KFxuICAgICAgcHNldWRvU3RlcCxcbiAgICAgIFwiZGlmZlwiLFxuICAgICAgXCJtZXRhXCIsXG4gICAgICBcInNjYWxlXCIsXG4gICAgICBmb3VuZEZhY3Rvci5zcGxpdChcIi5cIilbMV0sXG4gICAgICBcImRvbWFpblNwYWNlRGlmZlwiXG4gICAgKSA9PT0gZmFsc2VcbiAgKTtcbn07XG5jb25zdCBkaWZmRG9tYWluID0gKHBzZXVkb1N0ZXAsIGZvdW5kRmFjdG9yKSA9PiB7XG4gIHJldHVybiAoXG4gICAgZ2V0KFxuICAgICAgcHNldWRvU3RlcCxcbiAgICAgIFwiZGlmZlwiLFxuICAgICAgXCJtZXRhXCIsXG4gICAgICBcInNjYWxlXCIsXG4gICAgICBmb3VuZEZhY3Rvci5zcGxpdChcIi5cIilbMV0sXG4gICAgICBcImRvbWFpblNwYWNlRGlmZlwiXG4gICAgKSA9PT0gdHJ1ZVxuICApO1xufTtcbmNvbnN0IG5vRmFjdG9ycyA9IGZhY3RvcnMgPT4ge1xuICByZXR1cm4gZnVuY3Rpb24ocHNldWRvU3RlcCkge1xuICAgIGZvciAoY29uc3QgZmN0ciBvZiBmYWN0b3JzKSB7XG4gICAgICBpZiAocHNldWRvU3RlcC5mYWN0b3JTZXRzLmN1cnJlbnQuaW5kZXhPZihmY3RyKSA+PSAwKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG59O1xuZXhwb3J0IGNvbnN0IFBFUkNFUFRJT05fQ09TVCA9IHtcbiAgbWFyazogW1xuICAgIHsgZmFjdG9yOiBcIm1hcmt0eXBlXCIsIGNvc3Q6IDAuMyB9LFxuICAgIHsgZmFjdG9yOiBcImRhdGFcIiwgY29zdDogMC41IH0sXG4gICAgeyBmYWN0b3I6IFwic2NhbGUueVwiLCBjb3N0OiAwLjQsIHdpdGg6IFtzYW1lRG9tYWluXSB9LFxuICAgIHsgZmFjdG9yOiBcInNjYWxlLnhcIiwgY29zdDogMC40LCB3aXRoOiBbc2FtZURvbWFpbl0gfSxcbiAgICB7IGZhY3RvcjogXCJzY2FsZS5jb2xvclwiLCBjb3N0OiAwLjQsIHdpdGg6IFtzYW1lRG9tYWluXSB9LFxuICAgIHsgZmFjdG9yOiBcInNjYWxlLnNoYXBlXCIsIGNvc3Q6IDAuNCwgd2l0aDogW3NhbWVEb21haW5dIH0sXG4gICAgeyBmYWN0b3I6IFwic2NhbGUuc2l6ZVwiLCBjb3N0OiAwLjQsIHdpdGg6IFtzYW1lRG9tYWluXSB9LFxuICAgIHsgZmFjdG9yOiBcInNjYWxlLnlcIiwgY29zdDogMC42NSwgd2l0aG91dDogW3NhbWVEb21haW5dIH0sXG4gICAgeyBmYWN0b3I6IFwic2NhbGUueFwiLCBjb3N0OiAwLjY1LCB3aXRob3V0OiBbc2FtZURvbWFpbl0gfSxcbiAgICB7IGZhY3RvcjogXCJzY2FsZS5jb2xvclwiLCBjb3N0OiAwLjY1LCB3aXRob3V0OiBbc2FtZURvbWFpbl0gfSxcbiAgICB7IGZhY3RvcjogXCJzY2FsZS5zaGFwZVwiLCBjb3N0OiAwLjY1LCB3aXRob3V0OiBbc2FtZURvbWFpbl0gfSxcbiAgICB7IGZhY3RvcjogXCJzY2FsZS5zaXplXCIsIGNvc3Q6IDAuNjUsIHdpdGhvdXQ6IFtzYW1lRG9tYWluXSB9LFxuICAgIHsgZmFjdG9yOiBcImVuY29kZS54XCIsIGNvc3Q6IDAuMyB9LFxuICAgIHsgZmFjdG9yOiBcImVuY29kZS55XCIsIGNvc3Q6IDAuMyB9LFxuICAgIHsgZmFjdG9yOiBcImVuY29kZS5jb2xvclwiLCBjb3N0OiAwLjMgfSxcbiAgICB7IGZhY3RvcjogXCJlbmNvZGUuc2hhcGVcIiwgY29zdDogMC4zIH0sXG4gICAgeyBmYWN0b3I6IFwiZW5jb2RlLnNpemVcIiwgY29zdDogMC4zIH0sXG4gICAgeyBmYWN0b3I6IFwiZW5jb2RlLm9wYWNpdHlcIiwgY29zdDogMC4yIH1cbiAgXSxcbiAgYXhpczogW1xuICAgIC8vIHsgZmFjdG9yOiBcInNjYWxlLipcIiwgY29zdDogMC43IH0sXG4gICAgLy8geyBmYWN0b3I6IFwiYWRkLipcIiwgY29zdDogMSB9LFxuICAgIC8vIHsgZmFjdG9yOiBcInJlbW92ZS4qXCIsIGNvc3Q6IDEgfSxcbiAgICB7IGZhY3RvcjogXCJlbmNvZGVcIiwgY29zdDogMC4zIH0sXG4gICAgeyBmYWN0b3I6IFwic2NhbGVcIiwgY29zdDogMC41LCB3aXRoOiBbc2FtZURvbWFpbl0gfSxcbiAgICB7IGZhY3RvcjogXCJhZGRcIiwgY29zdDogMC43IH0sXG4gICAgeyBmYWN0b3I6IFwicmVtb3ZlXCIsIGNvc3Q6IDAuNyB9LFxuICAgIHsgZmFjdG9yOiBcInNjYWxlXCIsIGNvc3Q6IDEsIHdpdGhvdXQ6IFtzYW1lRG9tYWluXSB9XG4gIF0sXG4gIGxlZ2VuZDogW1xuICAgIC8vIHsgZmFjdG9yOiBcInNjYWxlLipcIiwgY29zdDogMC43IH0sXG4gICAgLy8geyBmYWN0b3I6IFwiYWRkLipcIiwgY29zdDogMSB9LFxuICAgIC8vIHsgZmFjdG9yOiBcInJlbW92ZS4qXCIsIGNvc3Q6IDEgfSxcbiAgICB7IGZhY3RvcjogXCJlbmNvZGVcIiwgY29zdDogMC4zIH0sXG4gICAgeyBmYWN0b3I6IFwic2NhbGVcIiwgY29zdDogMC41LCB3aXRoOiBbc2FtZURvbWFpbl0gfSxcbiAgICB7IGZhY3RvcjogXCJhZGRcIiwgY29zdDogMC43IH0sXG4gICAgeyBmYWN0b3I6IFwicmVtb3ZlXCIsIGNvc3Q6IDAuNyB9LFxuICAgIHsgZmFjdG9yOiBcInNjYWxlXCIsIGNvc3Q6IDEsIHdpdGhvdXQ6IFtzYW1lRG9tYWluXSB9XG4gIF1cbn07XG5cbmV4cG9ydCBjb25zdCBQRU5BTFRZX0NPTUJPUyA9IFtcbiAge1xuICAgIGNodW5rczogW1xuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgY29tcFR5cGU6IFwibWFya1wiLFxuICAgICAgICAgIGZhY3RvcjogXCJzY2FsZS55XCIsXG4gICAgICAgICAgd2l0aDogW2RpZmZEb21haW4sIG5vRmFjdG9ycyhbXCJlbmNvZGUueVwiXSldXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICBdLFxuICAgIGNvc3Q6IDEuMFxuICB9LFxuICB7XG4gICAgY2h1bmtzOiBbXG4gICAgICBbXG4gICAgICAgIHtcbiAgICAgICAgICBjb21wVHlwZTogXCJtYXJrXCIsXG4gICAgICAgICAgZmFjdG9yOiBcInNjYWxlLnhcIixcbiAgICAgICAgICB3aXRoOiBbZGlmZkRvbWFpbiwgbm9GYWN0b3JzKFtcImVuY29kZS54XCJdKV1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIF0sXG4gICAgY29zdDogMS4wXG4gIH0sXG4gIHtcbiAgICBjaHVua3M6IFtcbiAgICAgIFtcbiAgICAgICAge1xuICAgICAgICAgIGNvbXBUeXBlOiBcIm1hcmtcIixcbiAgICAgICAgICBmYWN0b3I6IFwic2NhbGUuc2l6ZVwiLFxuICAgICAgICAgIHdpdGg6IFtkaWZmRG9tYWluLCBub0ZhY3RvcnMoW1wiZW5jb2RlLnNpemVcIl0pXVxuICAgICAgICB9XG4gICAgICBdXG4gICAgXSxcbiAgICBjb3N0OiAxLjBcbiAgfSxcbiAge1xuICAgIGNodW5rczogW1xuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgY29tcFR5cGU6IFwibWFya1wiLFxuICAgICAgICAgIGZhY3RvcjogXCJzY2FsZS5jb2xvclwiLFxuICAgICAgICAgIHdpdGg6IFtkaWZmRG9tYWluLCBub0ZhY3RvcnMoW1wiZW5jb2RlLmNvbG9yXCJdKV1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIF0sXG4gICAgY29zdDogMS4wXG4gIH1cbl07XG5cbmV4cG9ydCBjb25zdCBESVNDT1VOVF9DT01CT1MgPSBbXG4gIHtcbiAgICBjaHVua3M6IFtcbiAgICAgIFtcbiAgICAgICAgeyBjb21wVHlwZTogXCJtYXJrXCIsIGZhY3RvcjogXCJzY2FsZS55XCIsIHdpdGg6IFtzYW1lRG9tYWluXSB9LFxuICAgICAgICB7IGNvbXBUeXBlOiBcIm1hcmtcIiwgZmFjdG9yOiBcInNjYWxlLnhcIiwgd2l0aDogW3NhbWVEb21haW5dIH1cbiAgICAgIF1cbiAgICBdLFxuICAgIGNvc3Q6IC0wLjJcbiAgfSxcbiAge1xuICAgIGNodW5rczogW1xuICAgICAgW1xuICAgICAgICB7IGNvbXBUeXBlOiBcIm1hcmtcIiwgZmFjdG9yOiBcInNjYWxlLnNpemVcIiB9LFxuICAgICAgICB7IGNvbXBUeXBlOiBcIm1hcmtcIiwgZmFjdG9yOiBcInNjYWxlLnNoYXBlXCIgfVxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgeyBjb21wVHlwZTogXCJtYXJrXCIsIGZhY3RvcjogXCJzY2FsZS5jb2xvclwiIH0sXG4gICAgICAgIHsgY29tcFR5cGU6IFwibWFya1wiLCBmYWN0b3I6IFwic2NhbGUuc2hhcGVcIiB9XG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICB7IGNvbXBUeXBlOiBcIm1hcmtcIiwgZmFjdG9yOiBcInNjYWxlLmNvbG9yXCIgfSxcbiAgICAgICAgeyBjb21wVHlwZTogXCJtYXJrXCIsIGZhY3RvcjogXCJzY2FsZS5zaXplXCIgfVxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgeyBjb21wVHlwZTogXCJtYXJrXCIsIGZhY3RvcjogXCJzY2FsZS5zaXplXCIgfSxcbiAgICAgICAgeyBjb21wVHlwZTogXCJtYXJrXCIsIGZhY3RvcjogXCJzY2FsZS5vcGFjaXR5XCIgfVxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgeyBjb21wVHlwZTogXCJtYXJrXCIsIGZhY3RvcjogXCJzY2FsZS5vcGFjaXR5XCIgfSxcbiAgICAgICAgeyBjb21wVHlwZTogXCJtYXJrXCIsIGZhY3RvcjogXCJzY2FsZS5zaGFwZVwiIH1cbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgIHsgY29tcFR5cGU6IFwibWFya1wiLCBmYWN0b3I6IFwic2NhbGUuY29sb3JcIiB9LFxuICAgICAgICB7IGNvbXBUeXBlOiBcIm1hcmtcIiwgZmFjdG9yOiBcInNjYWxlLm9wYWNpdHlcIiB9XG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICB7IGNvbXBUeXBlOiBcIm1hcmtcIiwgZmFjdG9yOiBcInNjYWxlLmNvbG9yXCIgfSxcbiAgICAgICAgeyBjb21wVHlwZTogXCJtYXJrXCIsIGZhY3RvcjogXCJzY2FsZS5zaXplXCIgfSxcbiAgICAgICAgeyBjb21wVHlwZTogXCJtYXJrXCIsIGZhY3RvcjogXCJzY2FsZS5zaGFwZVwiIH1cbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgIHsgY29tcFR5cGU6IFwibWFya1wiLCBmYWN0b3I6IFwic2NhbGUuc2l6ZVwiIH0sXG4gICAgICAgIHsgY29tcFR5cGU6IFwibWFya1wiLCBmYWN0b3I6IFwic2NhbGUuc2hhcGVcIiB9LFxuICAgICAgICB7IGNvbXBUeXBlOiBcIm1hcmtcIiwgZmFjdG9yOiBcInNjYWxlLm9wYWNpdHlcIiB9XG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICB7IGNvbXBUeXBlOiBcIm1hcmtcIiwgZmFjdG9yOiBcInNjYWxlLmNvbG9yXCIgfSxcbiAgICAgICAgeyBjb21wVHlwZTogXCJtYXJrXCIsIGZhY3RvcjogXCJzY2FsZS5zaGFwZVwiIH0sXG4gICAgICAgIHsgY29tcFR5cGU6IFwibWFya1wiLCBmYWN0b3I6IFwic2NhbGUub3BhY2l0eVwiIH1cbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgIHsgY29tcFR5cGU6IFwibWFya1wiLCBmYWN0b3I6IFwic2NhbGUuY29sb3JcIiB9LFxuICAgICAgICB7IGNvbXBUeXBlOiBcIm1hcmtcIiwgZmFjdG9yOiBcInNjYWxlLnNpemVcIiB9LFxuICAgICAgICB7IGNvbXBUeXBlOiBcIm1hcmtcIiwgZmFjdG9yOiBcInNjYWxlLm9wYWNpdHlcIiB9XG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICB7IGNvbXBUeXBlOiBcIm1hcmtcIiwgZmFjdG9yOiBcInNjYWxlLmNvbG9yXCIgfSxcbiAgICAgICAgeyBjb21wVHlwZTogXCJtYXJrXCIsIGZhY3RvcjogXCJzY2FsZS5zaXplXCIgfSxcbiAgICAgICAgeyBjb21wVHlwZTogXCJtYXJrXCIsIGZhY3RvcjogXCJzY2FsZS5vcGFjaXR5XCIgfSxcbiAgICAgICAgeyBjb21wVHlwZTogXCJtYXJrXCIsIGZhY3RvcjogXCJzY2FsZS5zaGFwZVwiIH1cbiAgICAgIF1cbiAgICBdLFxuICAgIGNvc3Q6IC0wLjFcbiAgfSxcbiAge1xuICAgIGNodW5rczogW1xuICAgICAgW1xuICAgICAgICB7IGNvbXBUeXBlOiBcIm1hcmtcIiwgZmFjdG9yOiBcInNjYWxlLnlcIiwgd2l0aDogW3NhbWVEb21haW5dIH0sXG4gICAgICAgIHsgY29tcFR5cGU6IFwiYXhpc1wiLCBmYWN0b3I6IFwic2NhbGUueVwiLCB3aXRoOiBbc2FtZURvbWFpbl0gfVxuICAgICAgXVxuICAgIF0sXG4gICAgY29zdDogLTAuNVxuICB9LFxuICB7XG4gICAgY2h1bmtzOiBbXG4gICAgICBbXG4gICAgICAgIHsgY29tcFR5cGU6IFwibWFya1wiLCBmYWN0b3I6IFwic2NhbGUueVwiLCB3aXRoOiBbZGlmZkRvbWFpbl0gfSxcbiAgICAgICAgeyBjb21wVHlwZTogXCJheGlzXCIsIGZhY3RvcjogXCJzY2FsZS55XCIsIHdpdGg6IFtkaWZmRG9tYWluXSB9XG4gICAgICBdXG4gICAgXSxcbiAgICBjb3N0OiAtMVxuICB9LFxuICB7XG4gICAgY2h1bmtzOiBbXG4gICAgICBbXG4gICAgICAgIHsgY29tcFR5cGU6IFwibWFya1wiLCBmYWN0b3I6IFwiZW5jb2RlLnlcIiB9LFxuICAgICAgICB7IGNvbXBUeXBlOiBcImF4aXNcIiwgZmFjdG9yOiBcImFkZC55XCIgfVxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgeyBjb21wVHlwZTogXCJtYXJrXCIsIGZhY3RvcjogXCJlbmNvZGUueVwiIH0sXG4gICAgICAgIHsgY29tcFR5cGU6IFwiYXhpc1wiLCBmYWN0b3I6IFwicmVtb3ZlLnlcIiB9XG4gICAgICBdXG4gICAgXSxcbiAgICBjb3N0OiAtMC43XG4gIH0sXG4gIHtcbiAgICBjaHVua3M6IFtcbiAgICAgIFtcbiAgICAgICAgeyBjb21wVHlwZTogXCJtYXJrXCIsIGZhY3RvcjogXCJzY2FsZS54XCIsIHdpdGg6IFtzYW1lRG9tYWluXSB9LFxuICAgICAgICB7IGNvbXBUeXBlOiBcImF4aXNcIiwgZmFjdG9yOiBcInNjYWxlLnhcIiwgd2l0aDogW3NhbWVEb21haW5dIH1cbiAgICAgIF1cbiAgICBdLFxuICAgIGNvc3Q6IC0wLjVcbiAgfSxcbiAge1xuICAgIGNodW5rczogW1xuICAgICAgW1xuICAgICAgICB7IGNvbXBUeXBlOiBcIm1hcmtcIiwgZmFjdG9yOiBcInNjYWxlLnhcIiwgd2l0aDogW2RpZmZEb21haW5dIH0sXG4gICAgICAgIHsgY29tcFR5cGU6IFwiYXhpc1wiLCBmYWN0b3I6IFwic2NhbGUueFwiLCB3aXRoOiBbZGlmZkRvbWFpbl0gfVxuICAgICAgXVxuICAgIF0sXG4gICAgY29zdDogLTFcbiAgfSxcbiAge1xuICAgIGNodW5rczogW1xuICAgICAgW1xuICAgICAgICB7IGNvbXBUeXBlOiBcIm1hcmtcIiwgZmFjdG9yOiBcImVuY29kZS54XCIgfSxcbiAgICAgICAgeyBjb21wVHlwZTogXCJheGlzXCIsIGZhY3RvcjogXCJhZGQueFwiIH1cbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgIHsgY29tcFR5cGU6IFwibWFya1wiLCBmYWN0b3I6IFwiZW5jb2RlLnhcIiB9LFxuICAgICAgICB7IGNvbXBUeXBlOiBcImF4aXNcIiwgZmFjdG9yOiBcInJlbW92ZS54XCIgfVxuICAgICAgXVxuICAgIF0sXG4gICAgY29zdDogLTAuN1xuICB9LFxuICB7XG4gICAgY2h1bmtzOiBbXG4gICAgICBbXG4gICAgICAgIHsgY29tcFR5cGU6IFwibWFya1wiLCBmYWN0b3I6IFwic2NhbGUuY29sb3JcIiB9LFxuICAgICAgICB7IGNvbXBUeXBlOiBcImxlZ2VuZFwiLCBjb250YWluOiBcImNvbG9yXCIgfVxuICAgICAgXVxuICAgIF0sXG4gICAgY29zdDogLTAuNVxuICB9LFxuICB7XG4gICAgY2h1bmtzOiBbXG4gICAgICBbXG4gICAgICAgIHsgY29tcFR5cGU6IFwibWFya1wiLCBmYWN0b3I6IFwic2NhbGUuc2l6ZVwiIH0sXG4gICAgICAgIHsgY29tcFR5cGU6IFwibGVnZW5kXCIsIGNvbnRhaW46IFwic2l6ZVwiIH1cbiAgICAgIF1cbiAgICBdLFxuICAgIGNvc3Q6IC0wLjVcbiAgfSxcbiAge1xuICAgIGNodW5rczogW1xuICAgICAgW1xuICAgICAgICB7IGNvbXBUeXBlOiBcIm1hcmtcIiwgZmFjdG9yOiBcInNjYWxlLnNoYXBlXCIgfSxcbiAgICAgICAgeyBjb21wVHlwZTogXCJsZWdlbmRcIiwgY29udGFpbjogXCJzaGFwZVwiIH1cbiAgICAgIF1cbiAgICBdLFxuICAgIGNvc3Q6IC0wLjVcbiAgfVxuXTtcbiIsImltcG9ydCB7IHJvdW5kVXAsIHZhcmlhbmNlLCBtZWFuIH0gZnJvbSBcIi4uL3V0aWwvdXRpbFwiO1xuaW1wb3J0ICogYXMgREcgZnJvbSBcIi4vZGVzaWduR3VpZGVsaW5lc1wiO1xuXG5mdW5jdGlvbiBldmFsdWF0ZShwc2V1ZG9UaW1lbGluZSkge1xuICBjb25zdCBzdGFnZUNvc3RzID0gW107XG4gIGNvbnN0IGNhcHBlZFN0YWdlQ29zdHMgPSBbXTtcbiAgY29uc3QgTiA9IHBzZXVkb1RpbWVsaW5lLmNvbmNhdC5sZW5ndGg7XG4gIGNvbnN0IGNvc3QgPSBwc2V1ZG9UaW1lbGluZS5jb25jYXQucmVkdWNlKChjb3N0LCBzdGFnZSwgaSkgPT4ge1xuICAgIGNvbnN0IHRvdGFsQ29zdCA9IHN0YWdlLnN5bmMucmVkdWNlKChzdW0sIHBzZXVkb1N0ZXApID0+IHtcbiAgICAgIHBzZXVkb1N0ZXAubWV0YSA9IHsgY29zdDogZ2V0Q29zdChwc2V1ZG9TdGVwKSB9O1xuICAgICAgcmV0dXJuIHN1bSArIGdldENvc3QocHNldWRvU3RlcCk7XG4gICAgfSwgMCk7XG4gICAgY29uc3QgY29tYm9Db3N0ID0gZ2V0Q29tYm9Db3N0KHN0YWdlLnN5bmMpO1xuICAgIGNvbnN0IGR1ciA9IHBzZXVkb1RpbWVsaW5lLnRvdGFsRHVyYXRpb24gLyBwc2V1ZG9UaW1lbGluZS5jb25jYXQubGVuZ3RoO1xuICAgIGNvbnN0IGNhcCA9IERHLlBFUkNFUFRJT05fQ0FQKGR1cikgKiBNYXRoLnBvdygwLjk5LCBOIC0gMSAtIGkpO1xuICAgIHN0YWdlLm1ldGEgPSB7XG4gICAgICB0b3RhbENvc3Q6IHJvdW5kVXAodG90YWxDb3N0KSxcbiAgICAgIGNvbWJvQ29zdDogcm91bmRVcChjb21ib0Nvc3QpLFxuICAgICAgY2FwLFxuICAgICAgY29zdDogcm91bmRVcChNYXRoLm1heCh0b3RhbENvc3QgKyBjb21ib0Nvc3QgLSBjYXAsIDApKVxuICAgIH07XG4gICAgc3RhZ2VDb3N0cy5wdXNoKE1hdGgubWF4KHRvdGFsQ29zdCArIGNvbWJvQ29zdCkpO1xuICAgIGNhcHBlZFN0YWdlQ29zdHMucHVzaChNYXRoLm1heCh0b3RhbENvc3QgKyBjb21ib0Nvc3QgLSBjYXAsIDApKTtcbiAgICByZXR1cm4gY29zdCArIE1hdGgubWF4KHRvdGFsQ29zdCArIGNvbWJvQ29zdCAtIGNhcCwgMCk7XG4gIH0sIDApO1xuXG4gIHJldHVybiB7XG4gICAgY29zdDogcm91bmRVcChjb3N0KSxcbiAgICB0aWVicmVha2VyOiBtZWFuKHN0YWdlQ29zdHMpLFxuICAgIHRpZWJyZWFrZXIyOiB2YXJpYW5jZShjYXBwZWRTdGFnZUNvc3RzKVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRDb21ib0Nvc3QocHNldWRvU3RlcHMpIHtcbiAgY29uc3QgY2hlY2sgPSAocGllY2UsIGZhY3RvclNldCkgPT4ge1xuICAgIHJldHVybiBmYWN0b3JTZXQuZmluZChcbiAgICAgIGZjdHIgPT4gZmN0ciA9PT0gcGllY2UuZmFjdG9yIHx8IGZjdHIuaW5kZXhPZihwaWVjZS5jb250YWluKSA+PSAwXG4gICAgKTtcbiAgfTtcblxuICByZXR1cm4gREcuRElTQ09VTlRfQ09NQk9TLmNvbmNhdChERy5QRU5BTFRZX0NPTUJPUykucmVkdWNlKFxuICAgICh0b3RhbERpc2NvdW50LCBjb21ibykgPT4ge1xuICAgICAgZm9yIChjb25zdCBjaHVuayBvZiBjb21iby5jaHVua3MpIHtcbiAgICAgICAgY29uc3QgaXNDaHVuayA9IGNodW5rLnJlZHVjZSgoaXNDaHVuaywgcGllY2UpID0+IHtcbiAgICAgICAgICBjb25zdCBmb3VuZCA9IHBzZXVkb1N0ZXBzLmZpbmQocFN0ZXAgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgcFN0ZXAuZGlmZi5jb21wVHlwZSA9PT0gcGllY2UuY29tcFR5cGUgJiZcbiAgICAgICAgICAgICAgY2hlY2socGllY2UsIHBTdGVwLmZhY3RvclNldHMuY3VycmVudClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChwaWVjZS53aXRoKSB7XG4gICAgICAgICAgICBpc0NodW5rID0gcGllY2Uud2l0aC5yZWR1Y2UoKGlzQ2h1bmssIHN1YkNvbmRpdGlvbikgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gaXNDaHVuayAmJiBzdWJDb25kaXRpb24oZm91bmQsIHBpZWNlLmZhY3Rvcik7XG4gICAgICAgICAgICB9LCBpc0NodW5rKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gaXNDaHVuayAmJiAhIWZvdW5kO1xuICAgICAgICB9LCB0cnVlKTtcbiAgICAgICAgaWYgKGlzQ2h1bmspIHtcbiAgICAgICAgICB0b3RhbERpc2NvdW50ICs9IGNvbWJvLmNvc3Q7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0b3RhbERpc2NvdW50O1xuICAgIH0sXG4gICAgMFxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRDb3N0KHBzZXVkb1N0ZXApIHtcbiAgLy8gVG9kb1xuICBpZiAoXG4gICAgcHNldWRvU3RlcC5kaWZmLmNvbXBUeXBlID09PSBcInZpZXdcIiB8fFxuICAgIHBzZXVkb1N0ZXAuZGlmZi5jb21wVHlwZSA9PT0gXCJwYXVzZVwiXG4gICkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIGxldCBzdGVwQ29zdCA9IDA7XG4gIGZvciAoY29uc3QgY29uZGl0aW9uIG9mIERHLlBFUkNFUFRJT05fQ09TVFtwc2V1ZG9TdGVwLmRpZmYuY29tcFR5cGVdKSB7XG4gICAgY29uc3QgZm91bmRGYWN0b3IgPSBwc2V1ZG9TdGVwLmZhY3RvclNldHMuY3VycmVudC5maW5kKFxuICAgICAgZmN0ciA9PiBmY3RyLmluZGV4T2YoY29uZGl0aW9uLmZhY3RvcikgPj0gMFxuICAgICk7XG4gICAgbGV0IHdpdGhfd2l0aG91dCA9IHRydWU7XG4gICAgaWYgKGZvdW5kRmFjdG9yICYmIGNvbmRpdGlvbi53aXRoKSB7XG4gICAgICB3aXRoX3dpdGhvdXQgPSBjb25kaXRpb24ud2l0aC5yZWR1Y2UoKHNhdCwgc3ViQ29uZGl0aW9uKSA9PiB7XG4gICAgICAgIHJldHVybiBzYXQgJiYgc3ViQ29uZGl0aW9uKHBzZXVkb1N0ZXAsIGZvdW5kRmFjdG9yKTtcbiAgICAgIH0sIHRydWUpO1xuICAgIH0gZWxzZSBpZiAoZm91bmRGYWN0b3IgJiYgY29uZGl0aW9uLndpdGhvdXQpIHtcbiAgICAgIHdpdGhfd2l0aG91dCA9IGNvbmRpdGlvbi53aXRob3V0LnJlZHVjZSgoc2F0LCBzdWJDb25kaXRpb24pID0+IHtcbiAgICAgICAgcmV0dXJuIHNhdCAmJiAhc3ViQ29uZGl0aW9uKHBzZXVkb1N0ZXAsIGZvdW5kRmFjdG9yKTtcbiAgICAgIH0sIHRydWUpO1xuICAgIH1cblxuICAgIHN0ZXBDb3N0ICs9IGZvdW5kRmFjdG9yICYmIHdpdGhfd2l0aG91dCA/IGNvbmRpdGlvbi5jb3N0IDogMDtcbiAgfVxuICByZXR1cm4gc3RlcENvc3Q7XG59XG5cbmV4cG9ydCB7IGdldENvbWJvQ29zdCwgZ2V0Q29zdCwgZXZhbHVhdGUgfTtcbiIsImltcG9ydCB7IENIQU5ORUxfVE9fQVRUUlNfT0JKIH0gZnJvbSBcIi4vdXRpbFwiO1xuaW1wb3J0IHsgY29weSwgZ2V0LCBpc0VtcHR5IH0gZnJvbSBcIi4uL3V0aWwvdXRpbFwiO1xuXG5mdW5jdGlvbiBnZW5lcmF0ZVRpbWVsaW5lKHBzZXVkb1RpbWVsaW5lLCB1c2VySW5wdXQsIGluY2x1ZGVNZXRhKSB7XG4gIC8vIEFzc3VtZTogcHNldWRvVGltZWxpbmUgPSB7Y29uY2F0OiBbIHtzeW5jOiBbLi4uXSB9LCB7c3luYzogWy4uLl19LCAuLi5dfVxuICAvLyBBc3N1bWU6IHVzZXJJbnB1dD0ge21hcmtzOiB7Li4ufSwgYXhlczogey4uLn0sIGxlZ2VuZHM6IHsuLi59LCBzY2FsZXM6IHsuLi59fVxuICBsZXQgZGVmYXVsdE9wdCA9IHtcbiAgICB0aW1pbmc6IHtcbiAgICAgIGR1cmF0aW9uOiB7XG4gICAgICAgIHJhdGlvOiBNYXRoLmZsb29yKDEwMCAvIHBzZXVkb1RpbWVsaW5lLmNvbmNhdC5sZW5ndGgpIC8gMTAwXG4gICAgICB9XG4gICAgfVxuICB9O1xuICBpZiAodXNlcklucHV0Lmdsb2JhbCkge1xuICAgIGRlZmF1bHRPcHQgPSBPYmplY3QuYXNzaWduKGRlZmF1bHRPcHQsIHVzZXJJbnB1dC5nbG9iYWwpO1xuICB9XG4gIGxldCBvcHQ7XG5cbiAgY29uc3QgbmV3Q29uY2F0ID0gcHNldWRvVGltZWxpbmUuY29uY2F0Lm1hcChzeW5jQmxvY2sgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBzeW5jOiBzeW5jQmxvY2suc3luYy5tYXAocHNldWRvU3RlcCA9PiB7XG4gICAgICAgIGxldCBzdGVwO1xuICAgICAgICBzd2l0Y2ggKHBzZXVkb1N0ZXAuZGlmZi5jb21wVHlwZSkge1xuICAgICAgICBjYXNlIFwibWFya1wiOlxuICAgICAgICAgIG9wdCA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIGRlZmF1bHRPcHQsXG4gICAgICAgICAgICBnZXQodXNlcklucHV0LCBcIm1hcmtzXCIsIHBzZXVkb1N0ZXAuZGlmZi5jb21wTmFtZSkgfHwge31cbiAgICAgICAgICApO1xuICAgICAgICAgIHN0ZXAgPSBnZW5lcmF0ZU1hcmtDb21wU3RlcChwc2V1ZG9TdGVwLCBvcHQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiYXhpc1wiOlxuICAgICAgICAgIG9wdCA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIGRlZmF1bHRPcHQsXG4gICAgICAgICAgICBnZXQodXNlcklucHV0LCBcImF4ZXNcIiwgcHNldWRvU3RlcC5kaWZmLmNvbXBOYW1lKSB8fCB7fVxuICAgICAgICAgICk7XG4gICAgICAgICAgc3RlcCA9IGdlbmVyYXRlQXhpc0NvbXBTdGVwKHBzZXVkb1N0ZXAsIG9wdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJsZWdlbmRcIjpcbiAgICAgICAgICBvcHQgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICBkZWZhdWx0T3B0LFxuICAgICAgICAgICAgZ2V0KHVzZXJJbnB1dCwgXCJsZWdlbmRzXCIsIHBzZXVkb1N0ZXAuZGlmZi5jb21wTmFtZSkgfHwge31cbiAgICAgICAgICApO1xuICAgICAgICAgIHN0ZXAgPSBnZW5lcmF0ZUxlZ2VuZENvbXBTdGVwKHBzZXVkb1N0ZXAsIG9wdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ2aWV3XCI6XG4gICAgICAgICAgc3RlcCA9IGdlbmVyYXRlVmlld0NvbXBTdGVwKHBzZXVkb1N0ZXAsIG9wdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluY2x1ZGVNZXRhKSB7XG4gICAgICAgICAgc3RlcC5tZXRhID0gcHNldWRvU3RlcC5tZXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN0ZXA7XG4gICAgICB9KSxcbiAgICAgIC4uLihpbmNsdWRlTWV0YSA/IHsgbWV0YTogc3luY0Jsb2NrLm1ldGEgfSA6IHt9KVxuICAgIH07XG4gIH0pO1xuICByZXR1cm4geyBjb25jYXQ6IG5ld0NvbmNhdCB9O1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVZpZXdDb21wU3RlcChwc2V1ZG9WaWV3U3RlcCwgb3B0KSB7XG4gIHJldHVybiB7XG4gICAgY29tcG9uZW50OiBcInZpZXdcIixcbiAgICBjaGFuZ2U6IHtcbiAgICAgIHNpZ25hbDogcHNldWRvVmlld1N0ZXAuZmFjdG9yU2V0cy5jdXJyZW50XG4gICAgfSxcbiAgICB0aW1pbmc6IHBzZXVkb1ZpZXdTdGVwLnRpbWluZyB8fCBjb3B5KG9wdC50aW1pbmcpXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlQXhpc0NvbXBTdGVwKHBzZXVkb1N0ZXAsIG9wdCkge1xuICBjb25zdCBzY2FsZURvbWFpbkRpbWVuc2lvbiA9IGdldChvcHQsIFwiY2hhbmdlXCIsIFwic2NhbGVcIiwgXCJkb21haW5EaW1lbnNpb25cIik7XG4gIGNvbnN0IHsgZmFjdG9yU2V0cyB9ID0gcHNldWRvU3RlcDtcbiAgY29uc3Qgc3RlcCA9IHtcbiAgICBjb21wb25lbnQ6IHsgYXhpczogcHNldWRvU3RlcC5kaWZmLmNvbXBOYW1lIH0sXG4gICAgY2hhbmdlOiB7fSxcbiAgICB0aW1pbmc6IHBzZXVkb1N0ZXAudGltaW5nIHx8IGNvcHkob3B0LnRpbWluZylcbiAgfTtcbiAgaWYgKHNjYWxlRG9tYWluRGltZW5zaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICBzdGVwLmNoYW5nZSA9IHsgc2NhbGU6IHsgZG9tYWluRGltZW5zaW9uOiBzY2FsZURvbWFpbkRpbWVuc2lvbiB9IH07XG4gIH1cbiAgaWYgKFxuICAgIGZhY3RvclNldHMuYWxsLmluZGV4T2YoXCJzY2FsZS55XCIpID49IDAgJiZcbiAgICBmYWN0b3JTZXRzLmFwcGxpZWQuaW5kZXhPZihcInNjYWxlLnlcIikgPCAwXG4gICkge1xuICAgIHN0ZXAuY2hhbmdlLnNjYWxlID0gZmFsc2U7XG4gIH0gZWxzZSBpZiAoXG4gICAgZmFjdG9yU2V0cy5hbGwuaW5kZXhPZihcInNjYWxlLnhcIikgPj0gMCAmJlxuICAgIGZhY3RvclNldHMuYXBwbGllZC5pbmRleE9mKFwic2NhbGUueFwiKSA8IDBcbiAgKSB7XG4gICAgc3RlcC5jaGFuZ2Uuc2NhbGUgPSBmYWxzZTtcbiAgfVxuICBpZiAoXG4gICAgZmFjdG9yU2V0cy5hcHBsaWVkLmluZGV4T2YoXCJlbmNvZGVcIikgPCAwICYmXG4gICAgZmFjdG9yU2V0cy5hbGwuaW5kZXhPZihcImVuY29kZVwiKSA+PSAwXG4gICkge1xuICAgIHN0ZXAuY2hhbmdlLmVuY29kZSA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKFxuICAgIHN0ZXAuY2hhbmdlLmVuY29kZSA9PT0gZmFsc2UgJiZcbiAgICBmYWN0b3JTZXRzLmFwcGxpZWQuaW5kZXhPZihcImVuY29kZS5vbmx5LmdyaWRcIikgPj0gMFxuICApIHtcbiAgICBzdGVwLmNoYW5nZS5lbmNvZGUgPSB7XG4gICAgICBncmlkOiB0cnVlLFxuICAgICAgYXhpczogZmFsc2UsXG4gICAgICBsYWJlbHM6IGZhbHNlLFxuICAgICAgdGl0bGU6IGZhbHNlLFxuICAgICAgdGlja3M6IGZhbHNlLFxuICAgICAgZG9tYWluOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBpZiAoXG4gICAgKCAoc3RlcC5jaGFuZ2UuZW5jb2RlID09PSBmYWxzZSkgfHxcbiAgICAgIChnZXQoc3RlcCwgXCJjaGFuZ2VcIiwgXCJlbmNvZGVcIiwgXCJheGlzXCIpID09PSBmYWxzZSkgKSAmJlxuICAgIGZhY3RvclNldHMuYXBwbGllZC5pbmRleE9mKFwiZW5jb2RlLnBvc2l0aW9uXCIpID49IDBcbiAgKSB7XG4gICAgaWYgKHN0ZXAuY2hhbmdlLmVuY29kZSkge1xuICAgICAgc3RlcC5jaGFuZ2UuZW5jb2RlLmF4aXMgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RlcC5jaGFuZ2UuZW5jb2RlID0ge2F4aXM6IGZhbHNlfTtcbiAgICB9XG4gIH1cblxuICBpZiAoaXNFbXB0eShzdGVwLmNoYW5nZSkpIHtcbiAgICBkZWxldGUgc3RlcC5jaGFuZ2U7XG4gIH1cblxuICByZXR1cm4gc3RlcDtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVMZWdlbmRDb21wU3RlcChwc2V1ZG9TdGVwLCBvcHQpIHtcbiAgY29uc3Qgc3RlcCA9IHtcbiAgICBjb21wb25lbnQ6IHsgbGVnZW5kOiBwc2V1ZG9TdGVwLmRpZmYuY29tcE5hbWUgfSxcbiAgICB0aW1pbmc6IHBzZXVkb1N0ZXAudGltaW5nIHx8IGNvcHkob3B0LnRpbWluZylcbiAgfTtcbiAgLy8gY29uc3QgZmFjdG9yU2V0cyA9IHBzZXVkb1N0ZXAuZmFjdG9yU2V0cztcbiAgLy8gaWYgKGZhY3RvclNldHMgJiYgZmFjdG9yU2V0cy5jdXJyZW50ICYmIGZhY3RvclNldHMuY3VycmVudC5sZW5ndGggPiAwKSB7XG4gIC8vICAgc3RlcC5jaGFuZ2UgPSB7XG4gIC8vICAgICBzY2FsZTogZmFjdG9yU2V0cy5jdXJyZW50Lm1hcChmY3QgPT4gZmN0LnJlcGxhY2UoXCJzY2FsZS5cIiwgXCJcIikpXG4gIC8vICAgfTtcbiAgLy8gfVxuICAvLyBpZiAoZmFjdG9yU2V0cy5jdXJyZW50LmluZGV4T2YoXCJlbmNvZGUucG9zaXRpb25cIikgPCAwICYmIGZhY3RvclNldHMuYWxsLmluZGV4T2YoXCJlbmNvZGUucG9zaXRpb25cIikgPj0gMCkge1xuICAvLyAgIHN0ZXAuY2hhbmdlID0ge1xuICAvLyAgICAgLi4uKHN0ZXAuY2hhbmdlIHx8IHt9KSxcbiAgLy8gICAgIGVuY29kZTogeyBsZWdlbmQ6IGZhbHNlIH1cbiAgLy8gICB9O1xuICAvLyB9XG4gIHJldHVybiBzdGVwO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZU1hcmtDb21wU3RlcChwc2V1ZG9TdGVwLCBvcHQpIHtcbiAgY29uc3QgbWFya0NvbXBEaWZmID0gcHNldWRvU3RlcC5kaWZmO1xuICBjb25zdCB7IGZhY3RvclNldHMgfSA9IHBzZXVkb1N0ZXA7XG4gIGNvbnN0IHN0ZXAgPSB7XG4gICAgY29tcG9uZW50OiB7IG1hcms6IG1hcmtDb21wRGlmZi5jb21wTmFtZSB9LFxuICAgIGNoYW5nZTogZ2V0QmxhbmtDaGFuZ2UoZmFjdG9yU2V0cy5hbGwpLFxuICAgIHRpbWluZzogcHNldWRvU3RlcC50aW1pbmcgfHwgY29weShvcHQudGltaW5nKVxuICB9O1xuICBpZiAoZmFjdG9yU2V0cy5hcHBsaWVkLmluZGV4T2YoXCJyZW1vdmVcIikgPj0gMCkge1xuICAgIGRlbGV0ZSBzdGVwLmNoYW5nZTtcbiAgICByZXR1cm4gc3RlcDtcbiAgfVxuICAvLyBjaGFuZ2Uuc2NhbGVcbiAgY29uc3Qgc2NhbGVGYWN0cm9zID0gZmFjdG9yU2V0cy5hcHBsaWVkLmZpbHRlcihcbiAgICBmY3RyID0+IGZjdHIuaW5kZXhPZihcInNjYWxlXCIpID49IDBcbiAgKTtcbiAgaWYgKHNjYWxlRmFjdHJvcy5sZW5ndGggPiAwKSB7XG4gICAgc3RlcC5jaGFuZ2Uuc2NhbGUgPSBzY2FsZUZhY3Ryb3MubWFwKGZjdHIgPT4gZmN0ci5yZXBsYWNlKFwic2NhbGUuXCIsIFwiXCIpKTtcbiAgfVxuXG4gIC8vIGNoYW5nZS5kYXRhXG4gIGlmIChmYWN0b3JTZXRzLmFwcGxpZWQuaW5kZXhPZihcImRhdGFcIikgPj0gMCkge1xuICAgIHN0ZXAuY2hhbmdlLmRhdGEgPSBnZXQob3B0LCBcImNoYW5nZVwiLCBcImRhdGFcIikgfHwgdHJ1ZTtcbiAgfVxuXG4gIC8vIFRvZG86IEZvciBlbmNvZGUgZmFjdG9ycyBub3QgaW4gdGhlIGZhY3RvclNldCwgdGhlbiBpdCBzaG91bGQgbm90IHNwZWNpZnkgYW55dGhpbmcuXG4gIC8vIGNoYW5nZS5lbmNvZGVcbiAgY29uc3QgZW5jb2RlRmFjdG9ycyA9IGZhY3RvclNldHMuYXBwbGllZC5maWx0ZXIoXG4gICAgZmN0ciA9PiBmY3RyLmluZGV4T2YoXCJlbmNvZGVcIikgPj0gMFxuICApO1xuICBjb25zdCBlbmNvZGVDaGFuZ2UgPSBnZXRCbGFua0VuY29kZUNoYW5nZShcbiAgICBmYWN0b3JTZXRzLmFsbC5jb25jYXQoZmFjdG9yU2V0cy5leHRyYUJ5TWFya3R5cGUpXG4gICk7XG5cbiAgaWYgKGVuY29kZUZhY3RvcnMubGVuZ3RoID4gMCkge1xuICAgIGVuY29kZUZhY3RvcnMuZm9yRWFjaChmY3RyID0+IHtcbiAgICAgIGNvbnN0IGNoYW5uZWwgPSBmY3RyLnJlcGxhY2UoXCJlbmNvZGUuXCIsIFwiXCIpO1xuICAgICAgY29uc3QgYXR0cnMgPSBDSEFOTkVMX1RPX0FUVFJTX09CSltjaGFubmVsXTtcbiAgICAgIGF0dHJzLmZvckVhY2goYXR0ciA9PiB7XG4gICAgICAgIGRlbGV0ZSBlbmNvZGVDaGFuZ2UudXBkYXRlW2F0dHJdO1xuICAgICAgICBkZWxldGUgZW5jb2RlQ2hhbmdlLmV4aXRbYXR0cl07XG4gICAgICAgIGRlbGV0ZSBlbmNvZGVDaGFuZ2UuZW50ZXJbYXR0cl07XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICBzdGVwLmNoYW5nZS5lbmNvZGUgPSBlbmNvZGVDaGFuZ2U7XG5cbiAgLy8gY2hhbmdlLm1hcmt0eXBlXG4gIGlmIChmYWN0b3JTZXRzLmFwcGxpZWQuaW5kZXhPZihcIm1hcmt0eXBlXCIpID49IDApIHtcbiAgICBzdGVwLmNoYW5nZS5tYXJrdHlwZSA9IHRydWU7XG5cbiAgICBmYWN0b3JTZXRzLmV4dHJhQnlNYXJrdHlwZS5mb3JFYWNoKGZjdHIgPT4ge1xuICAgICAgY29uc3QgY2hhbm5lbCA9IGZjdHIucmVwbGFjZShcImVuY29kZS5cIiwgXCJcIik7XG4gICAgICBjb25zdCBhdHRycyA9IENIQU5ORUxfVE9fQVRUUlNfT0JKW2NoYW5uZWxdO1xuICAgICAgYXR0cnMuZm9yRWFjaChhdHRyID0+IHtcbiAgICAgICAgZGVsZXRlIHN0ZXAuY2hhbmdlLmVuY29kZS51cGRhdGVbYXR0cl07XG4gICAgICAgIGRlbGV0ZSBzdGVwLmNoYW5nZS5lbmNvZGUuZXhpdFthdHRyXTtcbiAgICAgICAgZGVsZXRlIHN0ZXAuY2hhbmdlLmVuY29kZS5lbnRlclthdHRyXTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgW1widXBkYXRlXCIsIFwiZW50ZXJcIiwgXCJleGl0XCJdLmZvckVhY2goZGF0YVNldCA9PiB7XG4gICAgaWYgKCFpc0VtcHR5KGdldChzdGVwLCBcImNoYW5nZVwiLCBcImVuY29kZVwiLCBkYXRhU2V0KSkpIHtcbiAgICAgIHN0ZXAuY2hhbmdlLmVuY29kZVtkYXRhU2V0XSA9IE9iamVjdC5rZXlzKHN0ZXAuY2hhbmdlLmVuY29kZVtkYXRhU2V0XSlcbiAgICAgICAgLmZpbHRlcihhdHRyID0+IG1hcmtDb21wRGlmZi5tZXRhLnVzZWRFbkF0dHJzLmluZGV4T2YoYXR0cikgPj0gMClcbiAgICAgICAgLnJlZHVjZSgoYWNjLCBhdHRyKSA9PiB7XG4gICAgICAgICAgYWNjW2F0dHJdID0gc3RlcC5jaGFuZ2UuZW5jb2RlW2RhdGFTZXRdW2F0dHJdO1xuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KTtcbiAgICB9XG5cbiAgICBpZiAoaXNFbXB0eShnZXQoc3RlcCwgXCJjaGFuZ2VcIiwgXCJlbmNvZGVcIiwgZGF0YVNldCkpKSB7XG4gICAgICBzdGVwLmNoYW5nZS5lbmNvZGVbZGF0YVNldF0gPSB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHN0ZXA7XG59XG5cbi8vIEl0IHByb3ZpZGVzIGEgY2hhbmdlLmVuY29kZSB0aGF0IGRvZXMgbm90IGNoYW5nZSBhbnkgYXR0cmlidXRlLlxuLy8gVGhlIGJsYW5rRW5jb2RlQ2hhbmdlcyBhcmUgdG8gYmUgYXNzaWduZWQgYnkgZW5jb2RlIGZhY3RvcnMuXG5mdW5jdGlvbiBnZXRCbGFua0VuY29kZUNoYW5nZShyZWxhdGVkRmFjdG9ycykge1xuICBjb25zdCBibGFua0VuY29kZSA9IHJlbGF0ZWRGYWN0b3JzXG4gICAgLmZpbHRlcihmY3RyID0+IGZjdHIuaW5kZXhPZihcImVuY29kZVwiKSA+PSAwKVxuICAgIC5tYXAoZmN0ciA9PiBDSEFOTkVMX1RPX0FUVFJTX09CSltmY3RyLnJlcGxhY2UoXCJlbmNvZGUuXCIsIFwiXCIpXSlcbiAgICAucmVkdWNlKChibGFua0VuY29kZSwgYXR0cnMpID0+IHtcbiAgICAgIGF0dHJzLmZvckVhY2goYXR0ciA9PiB7XG4gICAgICAgIGJsYW5rRW5jb2RlW2F0dHJdID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBibGFua0VuY29kZTtcbiAgICB9LCB7fSk7XG5cbiAgY29uc3QgYmxhbmtFeGl0RW5jb2RlID0gY29weShibGFua0VuY29kZSk7XG4gIGRlbGV0ZSBibGFua0V4aXRFbmNvZGUub3BhY2l0eTtcblxuICByZXR1cm4ge1xuICAgIHVwZGF0ZTogY29weShibGFua0VuY29kZSksXG4gICAgZW50ZXI6IGJsYW5rRXhpdEVuY29kZSxcbiAgICBleGl0OiBibGFua0V4aXRFbmNvZGVcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldEJsYW5rQ2hhbmdlKGFsbEZhY3RvcnMpIHtcbiAgcmV0dXJuIFtcInNjYWxlXCIsIFwic2lnbmFsXCIsIFwiZGF0YVwiLCBcImVuY29kZVwiLCBcIm1hcmt0eXBlXCJdLnJlZHVjZShcbiAgICAoY2hhbmdlLCBmYWN0b3IpID0+IHtcbiAgICAgIGlmIChhbGxGYWN0b3JzLmZpbmQoZiA9PiBmLmluZGV4T2YoZmFjdG9yKSA+PSAwKSkge1xuICAgICAgICBjaGFuZ2VbZmFjdG9yXSA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNoYW5nZTtcbiAgICB9LFxuICAgIHt9XG4gICk7XG59XG5leHBvcnQgeyBnZW5lcmF0ZVRpbWVsaW5lLCBnZW5lcmF0ZU1hcmtDb21wU3RlcCB9O1xuIiwiaW1wb3J0ICogYXMgdmVnYSBmcm9tIFwidmVnYVwiO1xuaW1wb3J0IHsgZGV0ZWN0RGlmZnMgfSBmcm9tIFwiLi9kaWZmRGV0ZWN0b3JcIjtcbmltcG9ydCB7IGVudW1lcmF0ZVBzZXVkb1RpbWVsaW5lcyB9IGZyb20gXCIuL3BzZXVkb1RpbWVsaW5lRW51bWVyYXRvclwiO1xuaW1wb3J0IHsgZXZhbHVhdGUgfSBmcm9tIFwiLi9wc2V1ZG9UaW1lbGluZUV2YWx1YXRvclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGVUaW1lbGluZSB9IGZyb20gXCIuL3RpbWVsaW5lR2VuZXJhdG9yXCI7XG5pbXBvcnQgeyBjb3B5IH0gZnJvbSBcIi4uL3V0aWwvdXRpbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbihcbiAgc1NwZWMsXG4gIGVTcGVjLFxuICBvcHQgPSB7IG1hcmtzOiB7fSwgYXhlczoge30sIGxlZ2VuZHM6IHt9LCBzY2FsZXM6IHt9IH1cbikge1xuICBjb25zdCB1c2VySW5wdXQgPSBvcHQ7XG4gIGNvbnN0IHN0YWdlTiA9IE51bWJlcihvcHQuc3RhZ2VOKSB8fCAyO1xuICBjb25zdCB7IGluY2x1ZGVNZXRhIH0gPSBvcHQ7XG4gIGNvbnN0IHRpbWluZyA9IHsgdG90YWxEdXJhdGlvbjogdXNlcklucHV0LnRvdGFsRHVyYXRpb24gfHwgMjAwMCB9O1xuXG4gIHVzZXJJbnB1dC5heGVzID0gdXNlcklucHV0LmF4ZXMgfHwge307XG4gIGZvciAoY29uc3Qgc2NhbGVOYW1lIGluIHVzZXJJbnB1dC5zY2FsZXMgfHwge30pIHtcbiAgICB1c2VySW5wdXQuYXhlc1tzY2FsZU5hbWVdID0gdXNlcklucHV0LmF4ZXNbc2NhbGVOYW1lXSB8fCB7fTtcbiAgICB1c2VySW5wdXQuYXhlc1tzY2FsZU5hbWVdLmNoYW5nZSA9IHVzZXJJbnB1dC5heGVzW3NjYWxlTmFtZV0uY2hhbmdlIHx8IHt9O1xuICAgIHVzZXJJbnB1dC5heGVzW3NjYWxlTmFtZV0uY2hhbmdlLnNjYWxlID1cbiAgICAgIHVzZXJJbnB1dC5heGVzW3NjYWxlTmFtZV0uY2hhbmdlLnNjYWxlIHx8IHt9O1xuICAgIGlmICh1c2VySW5wdXQuYXhlc1tzY2FsZU5hbWVdLmNoYW5nZS5zY2FsZSAhPT0gZmFsc2UpIHtcbiAgICAgIHVzZXJJbnB1dC5heGVzW3NjYWxlTmFtZV0uY2hhbmdlLnNjYWxlLmRvbWFpbkRpbWVuc2lvbiA9XG4gICAgICAgIHVzZXJJbnB1dC5zY2FsZXNbc2NhbGVOYW1lXS5kb21haW5EaW1lbnNpb247XG4gICAgfVxuICB9XG4gIGNvbnN0IGVWaWV3ID0gYXdhaXQgbmV3IHZlZ2EuVmlldyh2ZWdhLnBhcnNlKGVTcGVjKSwge1xuICAgIHJlbmRlcmVyOiBcInN2Z1wiXG4gIH0pLnJ1bkFzeW5jKCk7XG5cbiAgY29uc3Qgc1ZpZXcgPSBhd2FpdCBuZXcgdmVnYS5WaWV3KHZlZ2EucGFyc2Uoc1NwZWMpLCB7XG4gICAgcmVuZGVyZXI6IFwic3ZnXCJcbiAgfSkucnVuQXN5bmMoKTtcblxuXG4gIGNvbnN0IHJhd0luZm8gPSB7XG4gICAgc1ZpczogeyBzcGVjOiBjb3B5KHNTcGVjKSwgdmlldzogc1ZpZXcgfSxcbiAgICBlVmlzOiB7IHNwZWM6IGNvcHkoZVNwZWMpLCB2aWV3OiBlVmlldyB9XG4gIH07XG5cbiAgY29uc3QgZGV0ZWN0ZWQgPSBkZXRlY3REaWZmcyhyYXdJbmZvLCB1c2VySW5wdXQpO1xuICAvLyBmb3IgKGxldCBpID0gMTsgaSA8PSBtYXhTdGFnZU47IGkrKykge1xuICAvLyAgIHBzZXVkb1RscyA9IHBzZXVkb1Rscy5jb25jYXQoZW51bWVyYXRlUHNldWRvVGltZWxpbmVzKGRldGVjdGVkLCBpLCByYXdJbmZvKSk7XG4gIC8vIH1cbiAgbGV0IHBzZXVkb1RscyA9IGVudW1lcmF0ZVBzZXVkb1RpbWVsaW5lcyhkZXRlY3RlZCwgc3RhZ2VOLCByYXdJbmZvLCB0aW1pbmcpO1xuICBwc2V1ZG9UbHMgPSBwc2V1ZG9UbHNcbiAgICAubWFwKHBzZXVkb1RsID0+IHtcbiAgICAgIHBzZXVkb1RsLmV2YWwgPSBldmFsdWF0ZShwc2V1ZG9UbCk7XG4gICAgICByZXR1cm4gcHNldWRvVGw7XG4gICAgfSlcbiAgICAuc29ydCgoYSwgYikgPT4gY29tcGFyZUNvc3QoYS5ldmFsLCBiLmV2YWwpKTtcblxuICByZXR1cm4gcHNldWRvVGxzLm1hcChwc2V1ZG9UbCA9PiB7XG4gICAgY29uc3QgbWV0YSA9IGluY2x1ZGVNZXRhID8gcHNldWRvVGwuZXZhbCA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4ge1xuICAgICAgc3BlYzoge1xuICAgICAgICB0aW1lbGluZTogZ2VuZXJhdGVUaW1lbGluZShwc2V1ZG9UbCwgdXNlcklucHV0LCBpbmNsdWRlTWV0YSksXG4gICAgICAgIHRvdGFsRHVyYXRpb246IHRpbWluZy50b3RhbER1cmF0aW9uLFxuICAgICAgICBtZXRhXG4gICAgICB9LFxuICAgICAgcHNldWRvVGltZWxpbmU6IHBzZXVkb1RsXG4gICAgfTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gY29tcGFyZUNvc3QoYSwgYikge1xuICBpZiAoYS5jb3N0ID09PSBiLmNvc3QpIHtcbiAgICBpZiAoYS50aWVicmVha2VyID09PSBiLnRpZWJyZWFrZXIpIHtcbiAgICAgIHJldHVybiBhLnRpZWJyZWFrZXIyIC0gYi50aWVicmVha2VyMjtcbiAgICB9XG4gICAgcmV0dXJuIGEudGllYnJlYWtlciAtIGIudGllYnJlYWtlcjtcbiAgfVxuICByZXR1cm4gYS5jb3N0IC0gYi5jb3N0O1xufVxuIiwiaW1wb3J0ICogYXMgZDMgZnJvbSBcImQzXCI7XG5pbXBvcnQgKiBhcyB2ZWdhTGl0ZSBmcm9tIFwidmVnYS1saXRlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZsMnZnNGdlbWluaSh2bFNwZWMpIHtcbiAgbGV0IHZnU3BlYyA9IHZlZ2FMaXRlLmNvbXBpbGUodmxTcGVjKS5zcGVjO1xuICB2Z1NwZWMuYXhlcyA9IG1lcmdlRHVwbGljYXRlZEF4ZXModmdTcGVjLmF4ZXMpO1xuICBhcHBlbmROYW1lc09uR3VpZGVzKHZnU3BlYyk7XG4gIHJldHVybiB2Z1NwZWM7XG59XG5cblxuZnVuY3Rpb24gYXBwZW5kTmFtZXNPbkd1aWRlcyh2Z1NwZWMpe1xuICBpZiAodmdTcGVjLmF4ZXMpIHtcbiAgICB2Z1NwZWMuYXhlcy5mb3JFYWNoKGF4aXMgPT4ge1xuICAgICAgaWYgKCFheGlzLmVuY29kZSkge1xuICAgICAgICBheGlzLmVuY29kZSA9IHtheGlzOiB7bmFtZTogYXhpcy5zY2FsZX19O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXhpcy5lbmNvZGUuYXhpcyA9IHsgLi4uYXhpcy5lbmNvZGUuYXhpcywgbmFtZTogYXhpcy5zY2FsZSB9O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGlmICh2Z1NwZWMubGVnZW5kcykge1xuICAgIHZnU3BlYy5sZWdlbmRzLmZvckVhY2goKGxlZ2VuZCwgaSkgPT4ge1xuICAgICAgaWYgKCFsZWdlbmQuZW5jb2RlKSB7XG4gICAgICAgIGxlZ2VuZC5lbmNvZGUgPSB7bGVnZW5kOiB7bmFtZTogYGxlZ2VuZCR7aX1gfX07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZWdlbmQuZW5jb2RlLmxlZ2VuZCA9IE9iamVjdC5hc3NpZ24oe30sIGxlZ2VuZC5lbmNvZGUubGVnZW5kLCB7bmFtZTogYGxlZ2VuZCR7aX1gfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBtZXJnZUR1cGxpY2F0ZWRBeGVzKHZlZ2FBeGVzKSB7XG4gIGlmICghdmVnYUF4ZXMgfHwgdmVnYUF4ZXMubGVuZ3RoIDw9IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgbGV0IGF4ZXNTY2FsZXMgPSB2ZWdhQXhlcy5maWx0ZXIoYSA9PiBhLmdyaWQpLm1hcChhID0+IGEuc2NhbGUpO1xuXG4gIHJldHVybiBkMy5yb2xsdXBzKHZlZ2FBeGVzLFxuICAgIGF4ZXMgPT4ge1xuICAgICAgbGV0IGF4aXNXaXRoR3JpZCA9IGF4ZXMuZmluZChhID0+IGEuZ3JpZCk7XG4gICAgICBsZXQgYXhpc1dpdGhvdXRHcmlkID0geyAuLi5heGVzLmZpbmQoYSA9PiAhYS5ncmlkKSB9O1xuXG4gICAgICBpZiAoYXhpc1dpdGhHcmlkKSB7XG4gICAgICAgIGF4aXNXaXRob3V0R3JpZC5ncmlkID0gdHJ1ZTtcbiAgICAgICAgaWYgKGF4aXNXaXRoR3JpZC5ncmlkU2NhbGUpIHtcbiAgICAgICAgICBheGlzV2l0aG91dEdyaWQuZ3JpZFNjYWxlID0gYXhpc1dpdGhHcmlkLmdyaWRTY2FsZTtcbiAgICAgICAgfVxuICAgICAgICBheGlzV2l0aG91dEdyaWQuemluZGV4ID0gMDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBheGlzV2l0aG91dEdyaWQ7XG4gICAgfSxcbiAgICBheGlzID0+IGF4aXMuc2NhbGVcbiAgKS5tYXAoZCA9PiBkWzFdKVxuICAgLnNvcnQoKGEsYikgPT4gKGF4ZXNTY2FsZXMuaW5kZXhPZihhLnNjYWxlKSAtIGF4ZXNTY2FsZXMuaW5kZXhPZihiLnNjYWxlKSkpO1xufVxuXG4iLCJpbXBvcnQgeyBHZW1pbmkgfSBmcm9tIFwiLi9nZW1pbmkuanNcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgcmVjb21tZW5kLCBjb21wYXJlQ29zdCB9IGZyb20gXCIuL3JlY29tbWVuZGVyXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIHZsMnZnNGdlbWluaSB9IGZyb20gXCIuL3V0aWwvdmwydmc0Z2VtaW5pXCI7XG5cbmNvbnN0IHsgYW5pbWF0ZSB9ID0gR2VtaW5pO1xuZXhwb3J0IHsgYW5pbWF0ZSwgcmVjb21tZW5kLCBjb21wYXJlQ29zdCwgdmwydmc0Z2VtaW5pIH07XG4iXSwibmFtZXMiOlsibWVyZ2UiLCJzZXRzIiwibGVuZ3RoIiwic2xpY2UiLCJ4bCIsIngiLCJqb2luIiwic3ViZXhwIiwic3RyIiwidHlwZU9mIiwibyIsInVuZGVmaW5lZCIsIk9iamVjdCIsInByb3RvdHlwZSIsInRvU3RyaW5nIiwiY2FsbCIsInNwbGl0IiwicG9wIiwic2hpZnQiLCJ0b0xvd2VyQ2FzZSIsInRvVXBwZXJDYXNlIiwidG9BcnJheSIsIm9iaiIsIkFycmF5Iiwic2V0SW50ZXJ2YWwiLCJhc3NpZ24iLCJ0YXJnZXQiLCJzb3VyY2UiLCJrZXkiLCJidWlsZEV4cHMiLCJpc0lSSSIsIkFMUEhBJCQiLCJDUiQiLCJESUdJVCQkIiwiRFFVT1RFJCQiLCJIRVhESUckJCIsIlBDVF9FTkNPREVEJCIsIlNVQl9ERUxJTVMkJCIsIlJFU0VSVkVEJCQiLCJHRU5fREVMSU1TJCQiLCJVQ1NDSEFSJCQiLCJTQ0hFTUUkIiwiVVNFUklORk8kIiwiVU5SRVNFUlZFRCQkIiwiREVDX09DVEVUJCIsIkRFQ19PQ1RFVF9SRUxBWEVEJCIsIkgxNiQiLCJMUzMyJCIsIklQVjRBRERSRVNTJCIsIklQVjZBRERSRVNTMSQiLCJJUFY2QUREUkVTUzIkIiwiSVBWNkFERFJFU1MzJCIsIklQVjZBRERSRVNTNCQiLCJJUFY2QUREUkVTUzUkIiwiSVBWNkFERFJFU1M2JCIsIklQVjZBRERSRVNTNyQiLCJJUFY2QUREUkVTUzgkIiwiSVBWNkFERFJFU1M5JCIsIlpPTkVJRCQiLCJJUF9MSVRFUkFMJCIsIkhPU1QkIiwiUENIQVIkIiwiU0VHTUVOVCQiLCJTRUdNRU5UX05aX05DJCIsIlBBVEhfQUJFTVBUWSQiLCJRVUVSWSQiLCJJUFJJVkFURSQkIiwiUmVnRXhwIiwiSVBWNkFERFJFU1MkIiwibWF4SW50IiwiYmFzZSIsInRNaW4iLCJ0TWF4Iiwic2tldyIsImRhbXAiLCJpbml0aWFsQmlhcyIsImluaXRpYWxOIiwiZGVsaW1pdGVyIiwicmVnZXhQdW55Y29kZSIsInJlZ2V4Tm9uQVNDSUkiLCJyZWdleFNlcGFyYXRvcnMiLCJlcnJvcnMiLCJiYXNlTWludXNUTWluIiwiZmxvb3IiLCJNYXRoIiwic3RyaW5nRnJvbUNoYXJDb2RlIiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwiZXJyb3IiLCJ0eXBlIiwiUmFuZ2VFcnJvciIsIm1hcCIsImFycmF5IiwiZm4iLCJyZXN1bHQiLCJtYXBEb21haW4iLCJzdHJpbmciLCJwYXJ0cyIsInJlcGxhY2UiLCJsYWJlbHMiLCJlbmNvZGVkIiwidWNzMmRlY29kZSIsIm91dHB1dCIsImNvdW50ZXIiLCJ2YWx1ZSIsImNoYXJDb2RlQXQiLCJleHRyYSIsInB1c2giLCJ1Y3MyZW5jb2RlIiwiZnJvbUNvZGVQb2ludCIsImJhc2ljVG9EaWdpdCIsImNvZGVQb2ludCIsImRpZ2l0VG9CYXNpYyIsImRpZ2l0IiwiZmxhZyIsImFkYXB0IiwiZGVsdGEiLCJudW1Qb2ludHMiLCJmaXJzdFRpbWUiLCJrIiwiZGVjb2RlIiwiaW5wdXQiLCJpbnB1dExlbmd0aCIsImkiLCJuIiwiYmlhcyIsImJhc2ljIiwibGFzdEluZGV4T2YiLCJqIiwiaW5kZXgiLCJvbGRpIiwidyIsInQiLCJiYXNlTWludXNUIiwib3V0Iiwic3BsaWNlIiwiZW5jb2RlIiwiY3VycmVudFZhbHVlIiwiYmFzaWNMZW5ndGgiLCJoYW5kbGVkQ1BDb3VudCIsIm0iLCJoYW5kbGVkQ1BDb3VudFBsdXNPbmUiLCJxIiwicU1pbnVzVCIsInRvVW5pY29kZSIsInRlc3QiLCJ0b0FTQ0lJIiwicHVueWNvZGUiLCJTQ0hFTUVTIiwicGN0RW5jQ2hhciIsImNociIsImMiLCJlIiwicGN0RGVjQ2hhcnMiLCJuZXdTdHIiLCJpbCIsInBhcnNlSW50Iiwic3Vic3RyIiwiYzIiLCJjMyIsIl9ub3JtYWxpemVDb21wb25lbnRFbmNvZGluZyIsImNvbXBvbmVudHMiLCJwcm90b2NvbCIsImRlY29kZVVucmVzZXJ2ZWQiLCJkZWNTdHIiLCJtYXRjaCIsIlVOUkVTRVJWRUQiLCJzY2hlbWUiLCJQQ1RfRU5DT0RFRCIsIk5PVF9TQ0hFTUUiLCJ1c2VyaW5mbyIsIk5PVF9VU0VSSU5GTyIsImhvc3QiLCJOT1RfSE9TVCIsInBhdGgiLCJOT1RfUEFUSCIsIk5PVF9QQVRIX05PU0NIRU1FIiwicXVlcnkiLCJOT1RfUVVFUlkiLCJmcmFnbWVudCIsIk5PVF9GUkFHTUVOVCIsIl9zdHJpcExlYWRpbmdaZXJvcyIsIl9ub3JtYWxpemVJUHY0IiwibWF0Y2hlcyIsIklQVjRBRERSRVNTIiwiYWRkcmVzcyIsIl9ub3JtYWxpemVJUHY2IiwiSVBWNkFERFJFU1MiLCJ6b25lIiwicmV2ZXJzZSIsImxhc3QiLCJmaXJzdCIsImZpcnN0RmllbGRzIiwibGFzdEZpZWxkcyIsImlzTGFzdEZpZWxkSVB2NEFkZHJlc3MiLCJmaWVsZENvdW50IiwibGFzdEZpZWxkc1N0YXJ0IiwiZmllbGRzIiwiYWxsWmVyb0ZpZWxkcyIsInJlZHVjZSIsImFjYyIsImZpZWxkIiwibGFzdExvbmdlc3QiLCJsb25nZXN0WmVyb0ZpZWxkcyIsInNvcnQiLCJhIiwiYiIsIm5ld0hvc3QiLCJuZXdGaXJzdCIsIm5ld0xhc3QiLCJVUklfUEFSU0UiLCJOT19NQVRDSF9JU19VTkRFRklORUQiLCJwYXJzZSIsInVyaVN0cmluZyIsIm9wdGlvbnMiLCJpcmkiLCJJUklfUFJPVE9DT0wiLCJVUklfUFJPVE9DT0wiLCJyZWZlcmVuY2UiLCJwb3J0IiwiaXNOYU4iLCJpbmRleE9mIiwic2NoZW1lSGFuZGxlciIsInVuaWNvZGVTdXBwb3J0IiwiZG9tYWluSG9zdCIsIl9yZWNvbXBvc2VBdXRob3JpdHkiLCJ1cmlUb2tlbnMiLCJfIiwiJDEiLCIkMiIsIlJEUzEiLCJSRFMyIiwiUkRTMyIsIlJEUzUiLCJyZW1vdmVEb3RTZWdtZW50cyIsImltIiwicyIsIkVycm9yIiwic2VyaWFsaXplIiwiYXV0aG9yaXR5IiwiY2hhckF0IiwiYWJzb2x1dGVQYXRoIiwicmVzb2x2ZUNvbXBvbmVudHMiLCJyZWxhdGl2ZSIsInNraXBOb3JtYWxpemF0aW9uIiwidG9sZXJhbnQiLCJyZXNvbHZlIiwiYmFzZVVSSSIsInJlbGF0aXZlVVJJIiwic2NoZW1lbGVzc09wdGlvbnMiLCJub3JtYWxpemUiLCJ1cmkiLCJlcXVhbCIsInVyaUEiLCJ1cmlCIiwiZXNjYXBlQ29tcG9uZW50IiwiRVNDQVBFIiwidW5lc2NhcGVDb21wb25lbnQiLCJoYW5kbGVyIiwiaHR0cCIsIk8iLCJBVEVYVCQkIiwiUVRFWFQkJCIsIlZDSEFSJCQiLCJTT01FX0RFTElNUyQkIiwiTk9UX0xPQ0FMX1BBUlQiLCJOT1RfSEZOQU1FIiwiTk9UX0hGVkFMVUUiLCJtYWlsdG9Db21wb25lbnRzIiwidG8iLCJ1bmtub3duSGVhZGVycyIsImhlYWRlcnMiLCJoZmllbGRzIiwiaGZpZWxkIiwidG9BZGRycyIsInN1YmplY3QiLCJib2R5IiwiYWRkciIsInRvQWRkciIsImF0SWR4IiwibG9jYWxQYXJ0IiwiZG9tYWluIiwibmFtZSIsIlVSTl9QQVJTRSIsInVybkNvbXBvbmVudHMiLCJuaWQiLCJuc3MiLCJ1cm5TY2hlbWUiLCJ1cmlDb21wb25lbnRzIiwiVVVJRCIsInV1aWRDb21wb25lbnRzIiwidXVpZCIsImh0dHBzIiwibWFpbHRvIiwidXJuIiwiY29weSIsInJlcXVpcmUkJDAiLCJyZXF1aXJlJCQxIiwiU2NoZW1hT2JqZWN0IiwiVVJJIiwidHJhdmVyc2UiLCJ1Y3MybGVuZ3RoIiwiVmFsaWRhdGlvbkVycm9yIiwiZXJyb3JDbGFzc2VzIiwidmFsaWRhdGVHZW5lcmF0b3IiLCJ2YWxpZGF0ZSIsInN0YWJsZVN0cmluZ2lmeSIsIkpTT05fUE9JTlRFUiIsIlJFTEFUSVZFX0pTT05fUE9JTlRFUiIsInJlcXVpcmUkJDIiLCJyZXF1aXJlJCQzIiwicmVxdWlyZSQkNCIsInJlcXVpcmUkJDUiLCJyZXF1aXJlJCQ2IiwicmVxdWlyZSQkNyIsInJlcXVpcmUkJDgiLCJyZXF1aXJlJCQ5IiwicmVxdWlyZSQkMTAiLCJyZXF1aXJlJCQxMSIsInJlcXVpcmUkJDEyIiwicmVxdWlyZSQkMTMiLCJyZXF1aXJlJCQxNCIsInJlcXVpcmUkJDE1IiwicmVxdWlyZSQkMTYiLCJyZXF1aXJlJCQxNyIsInJlcXVpcmUkJDE4IiwicmVxdWlyZSQkMTkiLCJyZXF1aXJlJCQyMCIsInJlcXVpcmUkJDIxIiwicmVxdWlyZSQkMjIiLCJyZXF1aXJlJCQyMyIsInRvSGFzaCIsInJ1bGVNb2R1bGVzIiwiTWlzc2luZ1JlZkVycm9yIiwibWV0YVNjaGVtYSIsIklERU5USUZJRVIiLCJjdXN0b21SdWxlQ29kZSIsImRlZmluaXRpb25TY2hlbWEiLCJjb21waWxlIiwiY3VzdG9tS2V5d29yZCIsIiRkYXRhTWV0YVNjaGVtYSIsImZvcm1hdHMiLCJDYWNoZSIsImNvbXBpbGVTY2hlbWEiLCJhanYiLCJBanYiLCJzdHJpbmdWYWx1ZSIsInZnQ29uZmlnIiwidmcuRU1QVFlfRU5DT0RFIiwidmcubGVnZW5kTGFibGVQb3MiLCJ2Zy5sZWdlbmRMYWJlbEFsaWduIiwidmcuYmFzZWxpbmUiLCJ2Zy5sYWJsZUFuZ2xlIiwidmcubGVnZW5kQmFuZFBvcyIsInZnLmF4aXNDb21wUG9zIiwidmcuYXhpc1RleHREcG9zIiwidmcuYXhpc0xhYmVsQWxpZ24iLCJ2Zy50aWNrTGVuZ3RoIiwidmcuZ3JpZExlbmd0aCIsInZnLnRpdGxlQW5nbGUiLCJ2Zy50aXRsZVBvcyIsInZnLmRvbWFpbkxlbmd0aCIsInZlZ2EuU1ZHUmVuZGVyZXIiLCJ2ZWdhLnNjZW5lRnJvbUpTT04iLCJ2ZWdhLnNjZW5lVG9KU09OIiwiZDMuaW50ZXJwb2xhdGUiLCJ2ZWdhLlZpZXciLCJ2ZWdhLnBhcnNlIiwiY2hlY2tDb25mbGljdCIsImQzLmdyb3VwcyIsImdldEpvaW5JbmZvIiwiY29tcHV0ZSIsImQzLmludGVycG9sYXRlU3RyaW5nIiwiZDMuZXh0ZW50IiwiZDMuc2VsZWN0IiwidmVnYS50ZXh0TWV0cmljcyIsInZlZ2FcbiAgICAgICAgLnBhdGhSZWN0YW5nbGUiLCJ2ZWdhXG4gICAgICAgICAgLnBhdGhSZWN0YW5nbGUiLCJkMy5wYXRoIiwidmVnYS5wYXRoU3ltYm9scyIsImQzXG4gICAgICAgICAgLmxpbmUiLCJkM1xuICAgICAgICAgICAgLmFyZWEiLCJ2ZWdhLnBhdGhUcmFpbCIsInZlZ2EudGltZUZvcm1hdCIsInZlZ2EudGltZVVuaXRTcGVjaWZpZXIiLCJ2ZWdhRXhwcmVzc2lvbi5jb2RlZ2VuIiwidmVnYUV4cHJlc3Npb24ucGFyc2UiLCJkMy5hc2NlbmRpbmciLCJkMy5kZXNjZW5kaW5nIiwiZDMuZWFzZUxpbmVhciIsImQzLmxvY2FsIiwiYWRkTWFyayIsImQzXG4gICAgICAgICAgLnNlbGVjdEFsbCIsImQzXG4gICAgICAgICAgLnNlbGVjdCIsImQzLnNlbGVjdEFsbCIsImQzXG4gICAgICAgIC5zZWxlY3RBbGwiLCJkM1xuICAgICAgICAuc2VsZWN0IiwiZG9uZU1ha2VyIiwiSU5JVElBTF9TVEFUVVMiLCJERy5QRVJDRVBUSU9OX0NBUCIsIkRHLkRJU0NPVU5UX0NPTUJPUyIsIkRHLlBFTkFMVFlfQ09NQk9TIiwiREcuUEVSQ0VQVElPTl9DT1NUIiwidmVnYUxpdGUuY29tcGlsZSIsImQzLnJvbGx1cHMiXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsTUFBTSxTQUFTLENBQUM7RUFDZCxXQUFXLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDekIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztJQUNyQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQztJQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNqQixJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0dBQ3hCOztFQUVELEdBQUcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRTtJQUM1QixJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLEVBQUU7TUFDaEUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDYixTQUFTO1FBQ1QsT0FBTztRQUNQLElBQUk7T0FDTCxDQUFDLENBQUM7S0FDSjtJQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztHQUNsQjs7RUFFRCxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUU7SUFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7O0lBRXhCLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7O0lBRXpCLE1BQU0sV0FBVyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7SUFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzVDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsR0FBRyxXQUFXLEVBQUUsYUFBYSxDQUFDLENBQUM7O0lBRWxELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO01BQ3ZDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzs7TUFFMUIsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNO1FBQ2pDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksRUFBRSxHQUFHLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxJQUFJLFVBQVUsQ0FBQyxNQUFNLE9BQU8sRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7T0FDbkUsQ0FBQyxDQUFDO01BQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO01BQ3hDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsR0FBRyxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDOztNQUVyRCxJQUFJLENBQUMsS0FBSyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUM1QixJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQztRQUN0QixPQUFPO09BQ1I7S0FDRjtHQUNGOztFQUVELE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFO0lBQ3ZCLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJO01BQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ2YsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1FBQ2pCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztRQUNqQixJQUFJO1FBQ0osTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDO09BQ3JELENBQUMsQ0FBQztLQUNKLENBQUMsQ0FBQztHQUNKOztFQUVELE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRTtJQUNqQixNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDOztJQUV4QixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQztJQUNyRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtNQUM1QyxNQUFNLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7S0FDOUI7R0FDRjtDQUNGOztBQ25FRCxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsRUFBRSxRQUFRLEVBQUU7RUFDL0MsUUFBUTtJQUNOLFFBQVE7S0FDUCxDQUFDLElBQUk7TUFDSixPQUFPLENBQUMsQ0FBQztLQUNWLENBQUMsQ0FBQztFQUNMLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ3BDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLElBQUksQ0FBQztHQUNwRDtFQUNELE9BQU8sS0FBSyxDQUFDO0NBQ2QsQ0FBQztBQUNGLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHLFNBQVMsR0FBRyxFQUFFLFFBQVEsRUFBRTtFQUNuRCxRQUFRO0lBQ04sUUFBUTtLQUNQLENBQUMsSUFBSTtNQUNKLE9BQU8sQ0FBQyxDQUFDO0tBQ1YsQ0FBQyxDQUFDO0VBQ0wsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLE9BQU8sS0FBSyxDQUFDO0dBQ3BEO0VBQ0QsT0FBTyxJQUFJLENBQUM7Q0FDYixDQUFDOztBQUVGLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLFNBQVMsUUFBUSxFQUFFO0VBQzFDLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUNmLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ3BDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsRUFBRTtNQUNwQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ25CO0dBQ0Y7RUFDRCxPQUFPLEdBQUcsQ0FBQztDQUNaLENBQUM7O0FBRUYsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLEVBQUU7RUFDbkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQzlCLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztFQUNuQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQzFCLE9BQU8sQ0FBQyxJQUFJO01BQ1YsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNyRSxDQUFDO0dBQ0g7RUFDRCxPQUFPLE9BQU8sQ0FBQztDQUNoQixDQUFDOztBQUVGLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLFdBQVc7RUFDbkMsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUNoQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN4QyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0dBQ2pEO0VBQ0QsT0FBTyxJQUFJLENBQUM7Q0FDYixDQUFDO0FBQ0YsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsV0FBVztFQUNqQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3pDLENBQUM7QUFDRixTQUFTLG1CQUFtQixDQUFDLEtBQUssRUFBRTtFQUNsQyxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUU7SUFDbEIsT0FBTyxVQUFVLENBQUM7R0FDbkI7RUFDRCxPQUFPLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztDQUN6QjtBQUNELFNBQVMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7RUFDN0IsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFO0lBQ2pCLE9BQU8sSUFBSSxDQUFDO0dBQ2I7RUFDRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7SUFDaEMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0dBQ3RDO0VBQ0Q7SUFDRSxPQUFPLElBQUksS0FBSyxRQUFRO0lBQ3hCLElBQUksS0FBSyxTQUFTO0lBQ2xCLE9BQU8sSUFBSSxLQUFLLFFBQVE7SUFDeEIsSUFBSSxLQUFLLFNBQVM7SUFDbEI7SUFDQSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxNQUFNLEVBQUU7TUFDbkMsT0FBTyxLQUFLLENBQUM7S0FDZDs7SUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtNQUN0QyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7O01BRXZCLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtRQUMzRixPQUFPLEtBQUssQ0FBQztPQUNkO0tBQ0Y7SUFDRCxPQUFPLElBQUksQ0FBQztHQUNiO0VBQ0QsT0FBTyxLQUFLLENBQUM7Q0FDZDs7QUFFRCxTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUU7RUFDakIsSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFO0lBQ3JCLE9BQU8sU0FBUyxDQUFDO0dBQ2xCO0VBQ0QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztDQUN4Qzs7QUFFRCxTQUFTLEtBQUssQ0FBQyxHQUFHLEVBQUU7RUFDbEIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEtBQUs7SUFDNUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QixPQUFPLEdBQUcsQ0FBQztHQUNaLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDUjtBQUNELFNBQVMsT0FBTyxDQUFDLE1BQU0sRUFBRTtFQUN2QixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxLQUFLO0lBQ2xDLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZCLE9BQU8sR0FBRyxDQUFDO0dBQ1osRUFBRSxFQUFFLENBQUMsQ0FBQztDQUNSOztBQUVELFNBQVMsU0FBUyxDQUFDLEdBQUcsRUFBRTtFQUN0QixJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0lBQ3BCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztHQUNoQztFQUNELE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxLQUFLO0lBQ3BDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QixVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzs7SUFFeEIsR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNO01BQ2QsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUk7UUFDbEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztPQUNoQyxDQUFDO0tBQ0gsQ0FBQztJQUNGLE9BQU8sR0FBRyxDQUFDO0dBQ1osRUFBRSxFQUFFLENBQUMsQ0FBQztDQUNSO0FBQ0QsU0FBUyxNQUFNLENBQUMsQ0FBQyxFQUFFO0VBQ2pCLE9BQU8sQ0FBQyxLQUFLLFNBQVMsSUFBSSxPQUFPLENBQUMsQ0FBQyxRQUFRLEtBQUssVUFBVSxDQUFDO0NBQzVEOztBQUVELFNBQVMsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUU7RUFDMUIsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDO0VBQ25CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ25DLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7TUFDNUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN0QixNQUFNO01BQ0wsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQy9CO0lBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztHQUN0QjtFQUNELE9BQU8sT0FBTyxDQUFDO0NBQ2hCOztBQUVELFNBQVMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEdBQUcsT0FBTyxFQUFFO0VBQzNELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUN6QixLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSTtJQUNwQixPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxHQUFHLEtBQUs7TUFDekMsUUFBUSxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7S0FDekQsRUFBRSxFQUFFLENBQUMsQ0FBQztHQUNSLENBQUMsQ0FBQztFQUNILE9BQU8sT0FBTyxDQUFDO0NBQ2hCOztBQUVELFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBRTtFQUN4QixPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxLQUFLO0lBQ2pDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzRCxHQUFHLENBQUMsSUFBSSxDQUFDO1FBQ1QsU0FBUyxDQUFDO0dBQ2YsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUNQOztBQUVELFNBQVMsaUJBQWlCLENBQUMsR0FBRyxFQUFFO0VBQzlCLE9BQU8sR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssU0FBUyxDQUFDO0NBQzFDO0FBQ0QsU0FBUyxRQUFRLENBQUMsQ0FBQyxFQUFFO0VBQ25CLE9BQU8sT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzNDO0FBQ0QsU0FBUyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUU7RUFDM0IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQzVEO0FBQ0QsS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsU0FBUyxLQUFLLEVBQUUsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7RUFDM0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQzVCLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFO0lBQ3hCLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNoRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7TUFDVixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUNyQjtHQUNGO0VBQ0QsT0FBTyxNQUFNLENBQUM7Q0FDZixDQUFDO0FBQ0YsU0FBUyxRQUFRLENBQUMsSUFBSSxFQUFFO0VBQ3RCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUN0QjtJQUNFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTTtJQUMxRTtDQUNIO0FBQ0QsU0FBUyxJQUFJLENBQUMsSUFBSSxFQUFFO0VBQ2xCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQzlEOztBQUVELFNBQVMsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUNsQixPQUFPLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7Q0FDN0Q7O0FDbE1jLHdCQUFRLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRTtFQUNoRCxJQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7O0VBRXBDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJO0lBQ3BCLENBQUMsQ0FBQyxRQUFRLEdBQUcsV0FBVztPQUNyQixNQUFNO1FBQ0wsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPO1dBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUM7T0FDL0M7T0FDQSxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUM7T0FDekIsTUFBTSxFQUFFLENBQUM7OztJQUdaLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzdELE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyQyxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0dBQ3RDLENBQUMsQ0FBQztFQUNILE9BQU8sUUFBUSxDQUFDO0NBQ2pCOztBQUVELFNBQVMsT0FBTyxDQUFDLEtBQUssRUFBRTtFQUN0QixJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7O0VBRWxCLElBQUksS0FBSyxDQUFDLElBQUksRUFBRTtJQUNkLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSTtNQUN4QixRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUMxQyxDQUFDLENBQUM7R0FDSixNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRTtJQUN2QixLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUk7TUFDMUIsUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDMUMsQ0FBQyxDQUFDO0dBQ0o7RUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUU7SUFDakIsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7R0FDOUI7RUFDRCxPQUFPLFFBQVEsQ0FBQzs7O0FDbkNsQixNQUFNLFFBQVEsQ0FBQztFQUNiLFdBQVcsQ0FBQyxXQUFXLEVBQUU7OztJQUd2QixJQUFJLGNBQWMsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSztNQUMvQyxPQUFPLEVBQUUsR0FBRyxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0tBQzlCLENBQUMsQ0FBQzs7SUFFSCxJQUFJLENBQUMsTUFBTSxHQUFHLGNBQWM7T0FDekIsR0FBRyxDQUFDLENBQUMsSUFBSTtRQUNSLE1BQU0sU0FBUyxJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFFBQVE7WUFDdkMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM3QixDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7O1FBRWhCLE9BQU87VUFDTCxJQUFJLEVBQUUsU0FBUztVQUNmLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUTtVQUNwQixRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVE7U0FDckIsQ0FBQztPQUNILENBQUM7T0FDRCxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUM7T0FDbkIsR0FBRyxDQUFDLEtBQUssSUFBSTtRQUNaLE9BQU87VUFDTCxHQUFHLEtBQUs7VUFDUixLQUFLLEVBQUUsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUMsSUFBSSxDQUFDO1NBQzlELENBQUM7T0FDSCxDQUFDLENBQUM7R0FDTjs7O0VBR0QsV0FBVyxDQUFDLE9BQU8sRUFBRTtJQUNuQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSTtNQUM5QixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRTtRQUM5QixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNO1VBQ3ZCLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1NBQ3pFO09BQ0YsQ0FBQyxDQUFDO0tBQ0osQ0FBQyxDQUFDO0dBQ0o7O0VBRUQscUJBQXFCLENBQUMsa0JBQWtCLEVBQUU7SUFDeEMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ2hCLElBQUksUUFBUSxHQUFHLGtCQUFrQixDQUFDLE1BQU07TUFDdEMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSztRQUNiLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckMsT0FBTyxHQUFHLENBQUM7T0FDWjtNQUNELENBQUMsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2pELFFBQVEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLE9BQU8sTUFBTTtNQUNYLE9BQU8sSUFBSSxDQUFDLENBQUM7TUFDYixPQUFPLElBQUksVUFBVSxDQUFDO01BQ3RCLElBQUksT0FBTyxLQUFLLENBQUMsRUFBRTtRQUNqQixPQUFPLENBQUMsSUFBSSxDQUFDLDBDQUEwQyxDQUFDLENBQUM7UUFDekQsT0FBTyxLQUFLLENBQUM7T0FDZDtNQUNELE9BQU8sUUFBUSxDQUFDLE1BQU07UUFDcEIsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUMsS0FBSztVQUNuQixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLENBQUM7VUFDOUMsR0FBRyxDQUFDLFNBQVMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDO1VBQzdCLE1BQU0sT0FBTyxHQUFHLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDOztVQUV0QyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDOztVQUVwQyxHQUFHLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSTtZQUNuQyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUk7Y0FDMUMsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRTtnQkFDOUIsT0FBTyxJQUFJLENBQUM7ZUFDYjtjQUNEO2dCQUNFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNwRCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDcEQ7Z0JBQ0EsT0FBTyxLQUFLLENBQUM7ZUFDZDs7Y0FFRCxPQUFPLElBQUksQ0FBQzthQUNiLENBQUMsQ0FBQztZQUNILE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7V0FDdEQsQ0FBQyxDQUFDOztVQUVILE9BQU8sR0FBRyxDQUFDO1NBQ1o7UUFDRCxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUU7T0FDNUMsQ0FBQyxNQUFNLENBQUM7S0FDVixDQUFDO0dBQ0g7OztDQUdGOztBQzNGYyxTQUFTLEtBQUssQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFOztFQUVoRCxJQUFJLGdCQUFnQixHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztFQUN2RSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0lBQ3ZCLGdCQUFnQixHQUFHLFFBQVE7T0FDeEIsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLE9BQU8sS0FBSztRQUNoQyxPQUFPLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO09BQzdDLEVBQUUsRUFBRSxDQUFDO09BQ0wsR0FBRyxDQUFDLE9BQU8sSUFBSTtRQUNkLE9BQU87VUFDTCxNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJO1lBQ25DLE9BQU87Y0FDTCxHQUFHLEtBQUs7Y0FDUixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNO2dCQUN2QixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxJQUFJLE9BQU8sS0FBSyxHQUFHLENBQUMsT0FBTztlQUMvQzthQUNGLENBQUM7V0FDSCxDQUFDO1VBQ0YsT0FBTztTQUNSLENBQUM7T0FDSCxDQUFDLENBQUM7R0FDTjtFQUNELE1BQU0sbUJBQW1CLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0VBQ2hFLE1BQU0sa0JBQWtCLEdBQUcsbUJBQW1CO0tBQzNDLE1BQU0sQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7S0FDekMsR0FBRyxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7O0VBRXZDLElBQUksa0JBQWtCLENBQUMsTUFBTSxLQUFLLGdCQUFnQixDQUFDLE1BQU0sRUFBRTtJQUN6RCxJQUFJLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7TUFDbEMsTUFBTSxJQUFJLEtBQUs7UUFDYixtREFBbUQ7UUFDbkQsbUJBQW1CO09BQ3BCLENBQUM7S0FDSCxNQUFNO01BQ0wsTUFBTSxJQUFJLEtBQUs7UUFDYix3Q0FBd0M7UUFDeEMsbUJBQW1CO09BQ3BCLENBQUM7S0FDSDtHQUNGLE1BQU0sSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0lBQ3hDO01BQ0UsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFNBQVM7UUFDaEMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO09BQzNEO01BQ0Q7TUFDQSxPQUFPLENBQUMsSUFBSTtRQUNWLGtFQUFrRTtRQUNsRSxtQkFBbUI7T0FDcEIsQ0FBQztLQUNILE1BQU07TUFDTCxPQUFPLENBQUMsSUFBSTtRQUNWLG9EQUFvRDtRQUNwRCxtQkFBbUI7T0FDcEIsQ0FBQztLQUNIO0dBQ0Y7RUFDRCxRQUFRLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSTtJQUM3QyxPQUFPO01BQ0wsR0FBRyxLQUFLO01BQ1IsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTTtRQUN2QixHQUFHLElBQUksa0JBQWtCLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO09BQ25EO0tBQ0YsQ0FBQztHQUNILENBQUMsQ0FBQztFQUNILFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sSUFBSTtJQUNqQyxPQUFPO01BQ0wsR0FBRyxPQUFPO01BQ1YsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTTtRQUMvQixFQUFFLElBQUksa0JBQWtCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7T0FDekM7S0FDRixDQUFDO0dBQ0gsQ0FBQyxDQUFDOztFQUVILE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0NBQzlCOzs7QUFHRCxTQUFTLGFBQWEsQ0FBQyxpQkFBaUIsRUFBRTtFQUN4QyxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7RUFDckIsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLGlCQUFpQixDQUFDO0VBQ3JDLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQzs7RUFFdEMsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUU7SUFDMUIsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJO01BQ2xDLENBQUMsSUFBSSxFQUFFLElBQUksS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLO0tBQ3hDLENBQUM7SUFDRixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7TUFDL0MsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFO1FBQ25ELFNBQVMsQ0FBQyxJQUFJLENBQUM7VUFDYixPQUFPO1VBQ1AsZUFBZSxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7VUFDckQsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO1VBQ3hCLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtTQUN6QixDQUFDLENBQUM7T0FDSjtLQUNGO0dBQ0Y7O0VBRUQsT0FBTyxTQUFTLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBQ2xCOzs7OztBQ25HRCxTQUFBQSxLQUFBLEdBQUE7c0NBQXlCQyxJQUF6QjtZQUFBOzs7UUFDS0EsS0FBS0MsTUFBTCxHQUFjLENBQWxCLEVBQXFCO2FBQ2YsQ0FBTCxJQUFVRCxLQUFLLENBQUwsRUFBUUUsS0FBUixDQUFjLENBQWQsRUFBaUIsQ0FBQyxDQUFsQixDQUFWO1lBQ01DLEtBQUtILEtBQUtDLE1BQUwsR0FBYyxDQUF6QjthQUNLLElBQUlHLElBQUksQ0FBYixFQUFnQkEsSUFBSUQsRUFBcEIsRUFBd0IsRUFBRUMsQ0FBMUIsRUFBNkI7aUJBQ3ZCQSxDQUFMLElBQVVKLEtBQUtJLENBQUwsRUFBUUYsS0FBUixDQUFjLENBQWQsRUFBaUIsQ0FBQyxDQUFsQixDQUFWOzthQUVJQyxFQUFMLElBQVdILEtBQUtHLEVBQUwsRUFBU0QsS0FBVCxDQUFlLENBQWYsQ0FBWDtlQUNPRixLQUFLSyxJQUFMLENBQVUsRUFBVixDQUFQO0tBUEQsTUFRTztlQUNDTCxLQUFLLENBQUwsQ0FBUDs7O0FBSUYsU0FBQU0sTUFBQSxDQUF1QkMsR0FBdkIsRUFBQTtXQUNRLFFBQVFBLEdBQVIsR0FBYyxHQUFyQjs7QUFHRCxTQUFBQyxNQUFBLENBQXVCQyxDQUF2QixFQUFBO1dBQ1FBLE1BQU1DLFNBQU4sR0FBa0IsV0FBbEIsR0FBaUNELE1BQU0sSUFBTixHQUFhLE1BQWIsR0FBc0JFLE9BQU9DLFNBQVAsQ0FBaUJDLFFBQWpCLENBQTBCQyxJQUExQixDQUErQkwsQ0FBL0IsRUFBa0NNLEtBQWxDLENBQXdDLEdBQXhDLEVBQTZDQyxHQUE3QyxHQUFtREQsS0FBbkQsQ0FBeUQsR0FBekQsRUFBOERFLEtBQTlELEdBQXNFQyxXQUF0RSxFQUE5RDs7QUFHRCxTQUFBQyxXQUFBLENBQTRCWixHQUE1QixFQUFBO1dBQ1FBLElBQUlZLFdBQUosRUFBUDs7QUFHRCxTQUFBQyxPQUFBLENBQXdCQyxHQUF4QixFQUFBO1dBQ1FBLFFBQVFYLFNBQVIsSUFBcUJXLFFBQVEsSUFBN0IsR0FBcUNBLGVBQWVDLEtBQWYsR0FBdUJELEdBQXZCLEdBQThCLE9BQU9BLElBQUlwQixNQUFYLEtBQXNCLFFBQXRCLElBQWtDb0IsSUFBSU4sS0FBdEMsSUFBK0NNLElBQUlFLFdBQW5ELElBQWtFRixJQUFJUCxJQUF0RSxHQUE2RSxDQUFDTyxHQUFELENBQTdFLEdBQXFGQyxNQUFNVixTQUFOLENBQWdCVixLQUFoQixDQUFzQlksSUFBdEIsQ0FBMkJPLEdBQTNCLENBQXhKLEdBQTRMLEVBQW5NOztBQUlELFNBQUFHLE1BQUEsQ0FBdUJDLE1BQXZCLEVBQXVDQyxNQUF2QyxFQUFBO1FBQ09MLE1BQU1JLE1BQVo7UUFDSUMsTUFBSixFQUFZO2FBQ04sSUFBTUMsR0FBWCxJQUFrQkQsTUFBbEIsRUFBMEI7Z0JBQ3JCQyxHQUFKLElBQVdELE9BQU9DLEdBQVAsQ0FBWDs7O1dBR0tOLEdBQVA7OztBQ25DRCxTQUFBTyxTQUFBLENBQTBCQyxLQUExQixFQUFBO1FBRUVDLFVBQVUsVUFEWDtRQUVDQyxBQUNBQyxVQUFVLE9BSFg7UUFJQ0MsQUFDQUMsV0FBV25DLE1BQU1pQyxPQUFOLEVBQWUsVUFBZixDQUxaO1FBUUNHLGVBQWU3QixPQUFPQSxPQUFPLFlBQVk0QixRQUFaLEdBQXVCLEdBQXZCLEdBQTZCQSxRQUE3QixHQUF3Q0EsUUFBeEMsR0FBbUQsR0FBbkQsR0FBeURBLFFBQXpELEdBQW9FQSxRQUEzRSxJQUF1RixHQUF2RixHQUE2RjVCLE9BQU8sZ0JBQWdCNEIsUUFBaEIsR0FBMkIsR0FBM0IsR0FBaUNBLFFBQWpDLEdBQTRDQSxRQUFuRCxDQUE3RixHQUE0SixHQUE1SixHQUFrSzVCLE9BQU8sTUFBTTRCLFFBQU4sR0FBaUJBLFFBQXhCLENBQXpLLENBUmhCOzttQkFTZ0IseUJBVGhCO1FBVUNFLGVBQWUscUNBVmhCO1FBV0NDLGFBQWF0QyxNQUFNdUMsWUFBTixFQUFvQkYsWUFBcEIsQ0FYZDtRQVlDRyxZQUFZVixRQUFRLDZFQUFSLEdBQXdGLElBWnJHOztpQkFhY0EsUUFBUSxtQkFBUixHQUE4QixJQWI1Qzs7bUJBY2dCOUIsTUFBTStCLE9BQU4sRUFBZUUsT0FBZixFQUF3QixnQkFBeEIsRUFBMENPLFNBQTFDLENBZGhCO1FBZUNDLFVBQVVsQyxPQUFPd0IsVUFBVS9CLE1BQU0rQixPQUFOLEVBQWVFLE9BQWYsRUFBd0IsYUFBeEIsQ0FBVixHQUFtRCxHQUExRCxDQWZYO1FBZ0JDUyxZQUFZbkMsT0FBT0EsT0FBTzZCLGVBQWUsR0FBZixHQUFxQnBDLE1BQU0yQyxZQUFOLEVBQW9CTixZQUFwQixFQUFrQyxPQUFsQyxDQUE1QixJQUEwRSxHQUFqRixDQWhCYjtRQWlCQ08sQUFDQUMscUJBQXFCdEMsT0FBT0EsT0FBTyxTQUFQLElBQW9CLEdBQXBCLEdBQTBCQSxPQUFPLFdBQVcwQixPQUFsQixDQUExQixHQUF1RCxHQUF2RCxHQUE2RDFCLE9BQU8sTUFBTTBCLE9BQU4sR0FBZ0JBLE9BQXZCLENBQTdELEdBQStGLEdBQS9GLEdBQXFHMUIsT0FBTyxZQUFZMEIsT0FBbkIsQ0FBckcsR0FBbUksT0FBbkksR0FBNklBLE9BQXBKLENBbEJ0Qjs7bUJBbUJnQjFCLE9BQU9zQyxxQkFBcUIsS0FBckIsR0FBNkJBLGtCQUE3QixHQUFrRCxLQUFsRCxHQUEwREEsa0JBQTFELEdBQStFLEtBQS9FLEdBQXVGQSxrQkFBOUYsQ0FuQmhCO1FBb0JDQyxPQUFPdkMsT0FBTzRCLFdBQVcsT0FBbEIsQ0FwQlI7UUFxQkNZLFFBQVF4QyxPQUFPQSxPQUFPdUMsT0FBTyxLQUFQLEdBQWVBLElBQXRCLElBQThCLEdBQTlCLEdBQW9DRSxZQUEzQyxDQXJCVDtRQXNCQ0MsZ0JBQWdCMUMsT0FBbUVBLE9BQU91QyxPQUFPLEtBQWQsSUFBdUIsS0FBdkIsR0FBK0JDLEtBQWxHLENBdEJqQjs7b0JBdUJpQnhDLE9BQXdELFdBQVdBLE9BQU91QyxPQUFPLEtBQWQsQ0FBWCxHQUFrQyxLQUFsQyxHQUEwQ0MsS0FBbEcsQ0F2QmpCOztvQkF3QmlCeEMsT0FBT0EsT0FBd0N1QyxJQUF4QyxJQUFnRCxTQUFoRCxHQUE0RHZDLE9BQU91QyxPQUFPLEtBQWQsQ0FBNUQsR0FBbUYsS0FBbkYsR0FBMkZDLEtBQWxHLENBeEJqQjs7b0JBeUJpQnhDLE9BQU9BLE9BQU9BLE9BQU91QyxPQUFPLEtBQWQsSUFBdUIsT0FBdkIsR0FBaUNBLElBQXhDLElBQWdELFNBQWhELEdBQTREdkMsT0FBT3VDLE9BQU8sS0FBZCxDQUE1RCxHQUFtRixLQUFuRixHQUEyRkMsS0FBbEcsQ0F6QmpCOztvQkEwQmlCeEMsT0FBT0EsT0FBT0EsT0FBT3VDLE9BQU8sS0FBZCxJQUF1QixPQUF2QixHQUFpQ0EsSUFBeEMsSUFBZ0QsU0FBaEQsR0FBNER2QyxPQUFPdUMsT0FBTyxLQUFkLENBQTVELEdBQW1GLEtBQW5GLEdBQTJGQyxLQUFsRyxDQTFCakI7O29CQTJCaUJ4QyxPQUFPQSxPQUFPQSxPQUFPdUMsT0FBTyxLQUFkLElBQXVCLE9BQXZCLEdBQWlDQSxJQUF4QyxJQUFnRCxTQUFoRCxHQUFtRUEsSUFBbkUsR0FBMEUsS0FBMUUsR0FBMkZDLEtBQWxHLENBM0JqQjs7b0JBNEJpQnhDLE9BQU9BLE9BQU9BLE9BQU91QyxPQUFPLEtBQWQsSUFBdUIsT0FBdkIsR0FBaUNBLElBQXhDLElBQWdELFNBQWhELEdBQTJGQyxLQUFsRyxDQTVCakI7O29CQTZCaUJ4QyxPQUFPQSxPQUFPQSxPQUFPdUMsT0FBTyxLQUFkLElBQXVCLE9BQXZCLEdBQWlDQSxJQUF4QyxJQUFnRCxTQUFoRCxHQUEyRkEsSUFBbEcsQ0E3QmpCOztvQkE4QmlCdkMsT0FBT0EsT0FBT0EsT0FBT3VDLE9BQU8sS0FBZCxJQUF1QixPQUF2QixHQUFpQ0EsSUFBeEMsSUFBZ0QsU0FBdkQsQ0E5QmpCOzttQkErQmdCdkMsT0FBTyxDQUFDMEMsYUFBRCxFQUFnQkMsYUFBaEIsRUFBK0JDLGFBQS9CLEVBQThDQyxhQUE5QyxFQUE2REMsYUFBN0QsRUFBNEVDLGFBQTVFLEVBQTJGQyxhQUEzRixFQUEwR0MsYUFBMUcsRUFBeUhDLGFBQXpILEVBQXdJbkQsSUFBeEksQ0FBNkksR0FBN0ksQ0FBUCxDQS9CaEI7UUFnQ0NvRCxVQUFVbkQsT0FBT0EsT0FBT29DLGVBQWUsR0FBZixHQUFxQlAsWUFBNUIsSUFBNEMsR0FBbkQsQ0FoQ1g7O2lCQW1DYzdCLE9BQU8sU0FBUzRCLFFBQVQsR0FBb0IsTUFBcEIsR0FBNkJuQyxNQUFNMkMsWUFBTixFQUFvQk4sWUFBcEIsRUFBa0MsT0FBbEMsQ0FBN0IsR0FBMEUsR0FBakYsQ0FuQ2Q7UUFvQ0NzQjtnQkFDWXBELE9BQU9BLE9BQU82QixlQUFlLEdBQWYsR0FBcUJwQyxNQUFNMkMsWUFBTixFQUFvQk4sWUFBcEIsQ0FBNUIsSUFBaUUsR0FBeEUsQ0FyQ2I7UUFzQ0N1QixBQUdBQyxTQUFTdEQsT0FBTzZCLGVBQWUsR0FBZixHQUFxQnBDLE1BQU0yQyxZQUFOLEVBQW9CTixZQUFwQixFQUFrQyxVQUFsQyxDQUE1QixDQXpDVjtRQTBDQ3lCLEFBRUFDLGlCQUFpQnhELE9BQU9BLE9BQU82QixlQUFlLEdBQWYsR0FBcUJwQyxNQUFNMkMsWUFBTixFQUFvQk4sWUFBcEIsRUFBa0MsT0FBbEMsQ0FBNUIsSUFBMEUsR0FBakYsQ0E1Q2xCO1FBNkNDMkIsQUFNQUMsU0FBUzFELE9BQU9BLE9BQU9zRCxTQUFTLEdBQVQsR0FBZTdELE1BQU0sVUFBTixFQUFrQmtFLFVBQWxCLENBQXRCLElBQXVELEdBQTlELENBbkRWO1dBbUVPO29CQUNPLElBQUlDLE1BQUosQ0FBV25FLE1BQU0sS0FBTixFQUFhK0IsT0FBYixFQUFzQkUsT0FBdEIsRUFBK0IsYUFBL0IsQ0FBWCxFQUEwRCxHQUExRCxDQURQO3NCQUVTLElBQUlrQyxNQUFKLENBQVduRSxNQUFNLFdBQU4sRUFBbUIyQyxZQUFuQixFQUFpQ04sWUFBakMsQ0FBWCxFQUEyRCxHQUEzRCxDQUZUO2tCQUdLLElBQUk4QixNQUFKLENBQVduRSxNQUFNLGlCQUFOLEVBQXlCMkMsWUFBekIsRUFBdUNOLFlBQXZDLENBQVgsRUFBaUUsR0FBakUsQ0FITDtrQkFJSyxJQUFJOEIsTUFBSixDQUFXbkUsTUFBTSxpQkFBTixFQUF5QjJDLFlBQXpCLEVBQXVDTixZQUF2QyxDQUFYLEVBQWlFLEdBQWpFLENBSkw7MkJBS2MsSUFBSThCLE1BQUosQ0FBV25FLE1BQU0sY0FBTixFQUFzQjJDLFlBQXRCLEVBQW9DTixZQUFwQyxDQUFYLEVBQThELEdBQTlELENBTGQ7bUJBTU0sSUFBSThCLE1BQUosQ0FBV25FLE1BQU0sUUFBTixFQUFnQjJDLFlBQWhCLEVBQThCTixZQUE5QixFQUE0QyxnQkFBNUMsRUFBOEQ2QixVQUE5RCxDQUFYLEVBQXNGLEdBQXRGLENBTk47c0JBT1MsSUFBSUMsTUFBSixDQUFXbkUsTUFBTSxRQUFOLEVBQWdCMkMsWUFBaEIsRUFBOEJOLFlBQTlCLEVBQTRDLGdCQUE1QyxDQUFYLEVBQTBFLEdBQTFFLENBUFQ7Z0JBUUcsSUFBSThCLE1BQUosQ0FBV25FLE1BQU0sS0FBTixFQUFhMkMsWUFBYixFQUEyQk4sWUFBM0IsQ0FBWCxFQUFxRCxHQUFyRCxDQVJIO29CQVNPLElBQUk4QixNQUFKLENBQVd4QixZQUFYLEVBQXlCLEdBQXpCLENBVFA7cUJBVVEsSUFBSXdCLE1BQUosQ0FBV25FLE1BQU0sUUFBTixFQUFnQjJDLFlBQWhCLEVBQThCTCxVQUE5QixDQUFYLEVBQXNELEdBQXRELENBVlI7cUJBV1EsSUFBSTZCLE1BQUosQ0FBVy9CLFlBQVgsRUFBeUIsR0FBekIsQ0FYUjtxQkFZUSxJQUFJK0IsTUFBSixDQUFXLE9BQU9uQixZQUFQLEdBQXNCLElBQWpDLENBWlI7cUJBYVEsSUFBSW1CLE1BQUosQ0FBVyxXQUFXQyxZQUFYLEdBQTBCLEdBQTFCLEdBQWdDN0QsT0FBT0EsT0FBTyxpQkFBaUI0QixRQUFqQixHQUE0QixNQUFuQyxJQUE2QyxHQUE3QyxHQUFtRHVCLE9BQW5ELEdBQTZELEdBQXBFLENBQWhDLEdBQTJHLFFBQXRILENBYlI7S0FBUDs7QUFpQkQsbUJBQWU3QixVQUFVLEtBQVYsQ0FBZjs7QUNyRkEsbUJBQWVBLFVBQVUsSUFBVixDQUFmOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQUEsSUFBTXdDLFNBQVMsVUFBZjs7O0FBR0EsSUFBTUMsT0FBTyxFQUFiO0FBQ0EsSUFBTUMsT0FBTyxDQUFiO0FBQ0EsSUFBTUMsT0FBTyxFQUFiO0FBQ0EsSUFBTUMsT0FBTyxFQUFiO0FBQ0EsSUFBTUMsT0FBTyxHQUFiO0FBQ0EsSUFBTUMsY0FBYyxFQUFwQjtBQUNBLElBQU1DLFdBQVcsR0FBakI7QUFDQSxJQUFNQyxZQUFZLEdBQWxCOzs7QUFHQSxJQUFNQyxnQkFBZ0IsT0FBdEI7QUFDQSxJQUFNQyxnQkFBZ0IsWUFBdEI7QUFDQSxJQUFNQyxrQkFBa0IsMkJBQXhCOzs7QUFHQSxJQUFNQyxTQUFTO2FBQ0YsaURBREU7Y0FFRCxnREFGQztrQkFHRztDQUhsQjs7O0FBT0EsSUFBTUMsZ0JBQWdCWixPQUFPQyxJQUE3QjtBQUNBLElBQU1ZLFFBQVFDLEtBQUtELEtBQW5CO0FBQ0EsSUFBTUUscUJBQXFCQyxPQUFPQyxZQUFsQzs7Ozs7Ozs7OztBQVVBLFNBQVNDLE9BQVQsQ0FBZUMsSUFBZixFQUFxQjtPQUNkLElBQUlDLFVBQUosQ0FBZVQsT0FBT1EsSUFBUCxDQUFmLENBQU47Ozs7Ozs7Ozs7O0FBV0QsU0FBU0UsR0FBVCxDQUFhQyxLQUFiLEVBQW9CQyxFQUFwQixFQUF3QjtLQUNqQkMsU0FBUyxFQUFmO0tBQ0k1RixTQUFTMEYsTUFBTTFGLE1BQW5CO1FBQ09BLFFBQVAsRUFBaUI7U0FDVEEsTUFBUCxJQUFpQjJGLEdBQUdELE1BQU0xRixNQUFOLENBQUgsQ0FBakI7O1FBRU00RixNQUFQOzs7Ozs7Ozs7Ozs7O0FBYUQsU0FBU0MsU0FBVCxDQUFtQkMsTUFBbkIsRUFBMkJILEVBQTNCLEVBQStCO0tBQ3hCSSxRQUFRRCxPQUFPaEYsS0FBUCxDQUFhLEdBQWIsQ0FBZDtLQUNJOEUsU0FBUyxFQUFiO0tBQ0lHLE1BQU0vRixNQUFOLEdBQWUsQ0FBbkIsRUFBc0I7OztXQUdaK0YsTUFBTSxDQUFOLElBQVcsR0FBcEI7V0FDU0EsTUFBTSxDQUFOLENBQVQ7OztVQUdRRCxPQUFPRSxPQUFQLENBQWVsQixlQUFmLEVBQWdDLE1BQWhDLENBQVQ7S0FDTW1CLFNBQVNILE9BQU9oRixLQUFQLENBQWEsR0FBYixDQUFmO0tBQ01vRixVQUFVVCxJQUFJUSxNQUFKLEVBQVlOLEVBQVosRUFBZ0J2RixJQUFoQixDQUFxQixHQUFyQixDQUFoQjtRQUNPd0YsU0FBU00sT0FBaEI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQkQsU0FBU0MsVUFBVCxDQUFvQkwsTUFBcEIsRUFBNEI7S0FDckJNLFNBQVMsRUFBZjtLQUNJQyxVQUFVLENBQWQ7S0FDTXJHLFNBQVM4RixPQUFPOUYsTUFBdEI7UUFDT3FHLFVBQVVyRyxNQUFqQixFQUF5QjtNQUNsQnNHLFFBQVFSLE9BQU9TLFVBQVAsQ0FBa0JGLFNBQWxCLENBQWQ7TUFDSUMsU0FBUyxNQUFULElBQW1CQSxTQUFTLE1BQTVCLElBQXNDRCxVQUFVckcsTUFBcEQsRUFBNEQ7O09BRXJEd0csUUFBUVYsT0FBT1MsVUFBUCxDQUFrQkYsU0FBbEIsQ0FBZDtPQUNJLENBQUNHLFFBQVEsTUFBVCxLQUFvQixNQUF4QixFQUFnQzs7V0FDeEJDLElBQVAsQ0FBWSxDQUFDLENBQUNILFFBQVEsS0FBVCxLQUFtQixFQUFwQixLQUEyQkUsUUFBUSxLQUFuQyxJQUE0QyxPQUF4RDtJQURELE1BRU87OztXQUdDQyxJQUFQLENBQVlILEtBQVo7OztHQVJGLE1BV087VUFDQ0csSUFBUCxDQUFZSCxLQUFaOzs7UUFHS0YsTUFBUDs7Ozs7Ozs7Ozs7QUFXRCxJQUFNTSxhQUFhLFNBQWJBLFVBQWE7UUFBU3RCLE9BQU91QixhQUFQLGlDQUF3QmpCLEtBQXhCLEVBQVQ7Q0FBbkI7Ozs7Ozs7Ozs7O0FBV0EsSUFBTWtCLGVBQWUsU0FBZkEsWUFBZSxDQUFTQyxTQUFULEVBQW9CO0tBQ3BDQSxZQUFZLElBQVosR0FBbUIsSUFBdkIsRUFBNkI7U0FDckJBLFlBQVksSUFBbkI7O0tBRUdBLFlBQVksSUFBWixHQUFtQixJQUF2QixFQUE2QjtTQUNyQkEsWUFBWSxJQUFuQjs7S0FFR0EsWUFBWSxJQUFaLEdBQW1CLElBQXZCLEVBQTZCO1NBQ3JCQSxZQUFZLElBQW5COztRQUVNekMsSUFBUDtDQVZEOzs7Ozs7Ozs7Ozs7O0FBd0JBLElBQU0wQyxlQUFlLFNBQWZBLFlBQWUsQ0FBU0MsS0FBVCxFQUFnQkMsSUFBaEIsRUFBc0I7OztRQUduQ0QsUUFBUSxFQUFSLEdBQWEsTUFBTUEsUUFBUSxFQUFkLENBQWIsSUFBa0MsQ0FBQ0MsUUFBUSxDQUFULEtBQWUsQ0FBakQsQ0FBUDtDQUhEOzs7Ozs7O0FBV0EsSUFBTUMsUUFBUSxTQUFSQSxLQUFRLENBQVNDLEtBQVQsRUFBZ0JDLFNBQWhCLEVBQTJCQyxTQUEzQixFQUFzQztLQUMvQ0MsSUFBSSxDQUFSO1NBQ1FELFlBQVluQyxNQUFNaUMsUUFBUTFDLElBQWQsQ0FBWixHQUFrQzBDLFNBQVMsQ0FBbkQ7VUFDU2pDLE1BQU1pQyxRQUFRQyxTQUFkLENBQVQ7K0JBQzhCRCxRQUFRbEMsZ0JBQWdCVixJQUFoQixJQUF3QixDQUE5RCxFQUFpRStDLEtBQUtqRCxJQUF0RSxFQUE0RTtVQUNuRWEsTUFBTWlDLFFBQVFsQyxhQUFkLENBQVI7O1FBRU1DLE1BQU1vQyxJQUFJLENBQUNyQyxnQkFBZ0IsQ0FBakIsSUFBc0JrQyxLQUF0QixJQUErQkEsUUFBUTNDLElBQXZDLENBQVYsQ0FBUDtDQVBEOzs7Ozs7Ozs7QUFpQkEsSUFBTStDLFNBQVMsU0FBVEEsTUFBUyxDQUFTQyxLQUFULEVBQWdCOztLQUV4Qm5CLFNBQVMsRUFBZjtLQUNNb0IsY0FBY0QsTUFBTXZILE1BQTFCO0tBQ0l5SCxJQUFJLENBQVI7S0FDSUMsSUFBSWhELFFBQVI7S0FDSWlELE9BQU9sRCxXQUFYOzs7Ozs7S0FNSW1ELFFBQVFMLE1BQU1NLFdBQU4sQ0FBa0JsRCxTQUFsQixDQUFaO0tBQ0lpRCxRQUFRLENBQVosRUFBZTtVQUNOLENBQVI7OztNQUdJLElBQUlFLElBQUksQ0FBYixFQUFnQkEsSUFBSUYsS0FBcEIsRUFBMkIsRUFBRUUsQ0FBN0IsRUFBZ0M7O01BRTNCUCxNQUFNaEIsVUFBTixDQUFpQnVCLENBQWpCLEtBQXVCLElBQTNCLEVBQWlDO1dBQzFCLFdBQU47O1NBRU1yQixJQUFQLENBQVljLE1BQU1oQixVQUFOLENBQWlCdUIsQ0FBakIsQ0FBWjs7Ozs7O01BTUksSUFBSUMsUUFBUUgsUUFBUSxDQUFSLEdBQVlBLFFBQVEsQ0FBcEIsR0FBd0IsQ0FBekMsRUFBNENHLFFBQVFQLFdBQXBELDRCQUE0Rjs7Ozs7OztNQU92RlEsT0FBT1AsQ0FBWDtPQUNLLElBQUlRLElBQUksQ0FBUixFQUFXWixJQUFJakQsSUFBcEIscUJBQThDaUQsS0FBS2pELElBQW5ELEVBQXlEOztPQUVwRDJELFNBQVNQLFdBQWIsRUFBMEI7WUFDbkIsZUFBTjs7O09BR0tULFFBQVFILGFBQWFXLE1BQU1oQixVQUFOLENBQWlCd0IsT0FBakIsQ0FBYixDQUFkOztPQUVJaEIsU0FBUzNDLElBQVQsSUFBaUIyQyxRQUFROUIsTUFBTSxDQUFDZCxTQUFTc0QsQ0FBVixJQUFlUSxDQUFyQixDQUE3QixFQUFzRDtZQUMvQyxVQUFOOzs7UUFHSWxCLFFBQVFrQixDQUFiO09BQ01DLElBQUliLEtBQUtNLElBQUwsR0FBWXRELElBQVosR0FBb0JnRCxLQUFLTSxPQUFPckQsSUFBWixHQUFtQkEsSUFBbkIsR0FBMEIrQyxJQUFJTSxJQUE1RDs7T0FFSVosUUFBUW1CLENBQVosRUFBZTs7OztPQUlUQyxhQUFhL0QsT0FBTzhELENBQTFCO09BQ0lELElBQUloRCxNQUFNZCxTQUFTZ0UsVUFBZixDQUFSLEVBQW9DO1lBQzdCLFVBQU47OztRQUdJQSxVQUFMOzs7TUFJS0MsTUFBTWhDLE9BQU9wRyxNQUFQLEdBQWdCLENBQTVCO1NBQ09pSCxNQUFNUSxJQUFJTyxJQUFWLEVBQWdCSSxHQUFoQixFQUFxQkosUUFBUSxDQUE3QixDQUFQOzs7O01BSUkvQyxNQUFNd0MsSUFBSVcsR0FBVixJQUFpQmpFLFNBQVN1RCxDQUE5QixFQUFpQztXQUMxQixVQUFOOzs7T0FHSXpDLE1BQU13QyxJQUFJVyxHQUFWLENBQUw7T0FDS0EsR0FBTDs7O1NBR09DLE1BQVAsQ0FBY1osR0FBZCxFQUFtQixDQUFuQixFQUFzQkMsQ0FBdEI7OztRQUlNdEMsT0FBT3VCLGFBQVAsZUFBd0JQLE1BQXhCLENBQVA7Q0FqRkQ7Ozs7Ozs7OztBQTJGQSxJQUFNa0MsU0FBUyxTQUFUQSxNQUFTLENBQVNmLEtBQVQsRUFBZ0I7S0FDeEJuQixTQUFTLEVBQWY7OztTQUdRRCxXQUFXb0IsS0FBWCxDQUFSOzs7S0FHSUMsY0FBY0QsTUFBTXZILE1BQXhCOzs7S0FHSTBILElBQUloRCxRQUFSO0tBQ0l3QyxRQUFRLENBQVo7S0FDSVMsT0FBT2xELFdBQVg7Ozs7Ozs7O3VCQUcyQjhDLEtBQTNCLDhIQUFrQztPQUF2QmdCLGNBQXVCOztPQUM3QkEsaUJBQWUsSUFBbkIsRUFBeUI7V0FDakI5QixJQUFQLENBQVl0QixtQkFBbUJvRCxjQUFuQixDQUFaOzs7Ozs7Ozs7Ozs7Ozs7Ozs7S0FJRUMsY0FBY3BDLE9BQU9wRyxNQUF6QjtLQUNJeUksaUJBQWlCRCxXQUFyQjs7Ozs7O0tBTUlBLFdBQUosRUFBaUI7U0FDVC9CLElBQVAsQ0FBWTlCLFNBQVo7Ozs7UUFJTThELGlCQUFpQmpCLFdBQXhCLEVBQXFDOzs7O01BSWhDa0IsSUFBSXZFLE1BQVI7Ozs7Ozt5QkFDMkJvRCxLQUEzQixtSUFBa0M7UUFBdkJnQixZQUF1Qjs7UUFDN0JBLGdCQUFnQmIsQ0FBaEIsSUFBcUJhLGVBQWVHLENBQXhDLEVBQTJDO1NBQ3RDSCxZQUFKOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUFNSUksd0JBQXdCRixpQkFBaUIsQ0FBL0M7TUFDSUMsSUFBSWhCLENBQUosR0FBUXpDLE1BQU0sQ0FBQ2QsU0FBUytDLEtBQVYsSUFBbUJ5QixxQkFBekIsQ0FBWixFQUE2RDtXQUN0RCxVQUFOOzs7V0FHUSxDQUFDRCxJQUFJaEIsQ0FBTCxJQUFVaUIscUJBQW5CO01BQ0lELENBQUo7Ozs7Ozs7eUJBRTJCbkIsS0FBM0IsbUlBQWtDO1FBQXZCZ0IsYUFBdUI7O1FBQzdCQSxnQkFBZWIsQ0FBZixJQUFvQixFQUFFUixLQUFGLEdBQVUvQyxNQUFsQyxFQUEwQzthQUNuQyxVQUFOOztRQUVHb0UsaUJBQWdCYixDQUFwQixFQUF1Qjs7U0FFbEJrQixJQUFJMUIsS0FBUjtVQUNLLElBQUlHLElBQUlqRCxJQUFiLHFCQUF1Q2lELEtBQUtqRCxJQUE1QyxFQUFrRDtVQUMzQzhELElBQUliLEtBQUtNLElBQUwsR0FBWXRELElBQVosR0FBb0JnRCxLQUFLTSxPQUFPckQsSUFBWixHQUFtQkEsSUFBbkIsR0FBMEIrQyxJQUFJTSxJQUE1RDtVQUNJaUIsSUFBSVYsQ0FBUixFQUFXOzs7VUFHTFcsVUFBVUQsSUFBSVYsQ0FBcEI7VUFDTUMsYUFBYS9ELE9BQU84RCxDQUExQjthQUNPekIsSUFBUCxDQUNDdEIsbUJBQW1CMkIsYUFBYW9CLElBQUlXLFVBQVVWLFVBQTNCLEVBQXVDLENBQXZDLENBQW5CLENBREQ7VUFHSWxELE1BQU00RCxVQUFVVixVQUFoQixDQUFKOzs7WUFHTTFCLElBQVAsQ0FBWXRCLG1CQUFtQjJCLGFBQWE4QixDQUFiLEVBQWdCLENBQWhCLENBQW5CLENBQVo7WUFDTzNCLE1BQU1DLEtBQU4sRUFBYXlCLHFCQUFiLEVBQW9DRixrQkFBa0JELFdBQXRELENBQVA7YUFDUSxDQUFSO09BQ0VDLGNBQUY7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUlBdkIsS0FBRjtJQUNFUSxDQUFGOztRQUdNdEIsT0FBT2hHLElBQVAsQ0FBWSxFQUFaLENBQVA7Q0FyRkQ7Ozs7Ozs7Ozs7Ozs7QUFtR0EsSUFBTTBJLFlBQVksU0FBWkEsU0FBWSxDQUFTdkIsS0FBVCxFQUFnQjtRQUMxQjFCLFVBQVUwQixLQUFWLEVBQWlCLFVBQVN6QixNQUFULEVBQWlCO1NBQ2pDbEIsY0FBY21FLElBQWQsQ0FBbUJqRCxNQUFuQixJQUNKd0IsT0FBT3hCLE9BQU83RixLQUFQLENBQWEsQ0FBYixFQUFnQmdCLFdBQWhCLEVBQVAsQ0FESSxHQUVKNkUsTUFGSDtFQURNLENBQVA7Q0FERDs7Ozs7Ozs7Ozs7OztBQW1CQSxJQUFNa0QsVUFBVSxTQUFWQSxPQUFVLENBQVN6QixLQUFULEVBQWdCO1FBQ3hCMUIsVUFBVTBCLEtBQVYsRUFBaUIsVUFBU3pCLE1BQVQsRUFBaUI7U0FDakNqQixjQUFja0UsSUFBZCxDQUFtQmpELE1BQW5CLElBQ0osU0FBU3dDLE9BQU94QyxNQUFQLENBREwsR0FFSkEsTUFGSDtFQURNLENBQVA7Q0FERDs7Ozs7QUFXQSxJQUFNbUQsV0FBVzs7Ozs7O1lBTUwsT0FOSzs7Ozs7Ozs7U0FjUjtZQUNHOUMsVUFESDtZQUVHTztFQWhCSztXQWtCTlksTUFsQk07V0FtQk5nQixNQW5CTTtZQW9CTFUsT0FwQks7Y0FxQkhGO0NBckJkLENBd0JBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMvVkEsSUFBYUksVUFBNkMsRUFBbkQ7QUFFUCxTQUFBQyxVQUFBLENBQTJCQyxHQUEzQixFQUFBO1FBQ09DLElBQUlELElBQUk3QyxVQUFKLENBQWUsQ0FBZixDQUFWO1FBQ0krQyxVQUFKO1FBRUlELElBQUksRUFBUixFQUFZQyxJQUFJLE9BQU9ELEVBQUV6SSxRQUFGLENBQVcsRUFBWCxFQUFlTSxXQUFmLEVBQVgsQ0FBWixLQUNLLElBQUltSSxJQUFJLEdBQVIsRUFBYUMsSUFBSSxNQUFNRCxFQUFFekksUUFBRixDQUFXLEVBQVgsRUFBZU0sV0FBZixFQUFWLENBQWIsS0FDQSxJQUFJbUksSUFBSSxJQUFSLEVBQWNDLElBQUksTUFBTSxDQUFFRCxLQUFLLENBQU4sR0FBVyxHQUFaLEVBQWlCekksUUFBakIsQ0FBMEIsRUFBMUIsRUFBOEJNLFdBQTlCLEVBQU4sR0FBb0QsR0FBcEQsR0FBMEQsQ0FBRW1JLElBQUksRUFBTCxHQUFXLEdBQVosRUFBaUJ6SSxRQUFqQixDQUEwQixFQUExQixFQUE4Qk0sV0FBOUIsRUFBOUQsQ0FBZCxLQUNBb0ksSUFBSSxNQUFNLENBQUVELEtBQUssRUFBTixHQUFZLEdBQWIsRUFBa0J6SSxRQUFsQixDQUEyQixFQUEzQixFQUErQk0sV0FBL0IsRUFBTixHQUFxRCxHQUFyRCxHQUEyRCxDQUFHbUksS0FBSyxDQUFOLEdBQVcsRUFBWixHQUFrQixHQUFuQixFQUF3QnpJLFFBQXhCLENBQWlDLEVBQWpDLEVBQXFDTSxXQUFyQyxFQUEzRCxHQUFnSCxHQUFoSCxHQUFzSCxDQUFFbUksSUFBSSxFQUFMLEdBQVcsR0FBWixFQUFpQnpJLFFBQWpCLENBQTBCLEVBQTFCLEVBQThCTSxXQUE5QixFQUExSDtXQUVFb0ksQ0FBUDs7QUFHRCxTQUFBQyxXQUFBLENBQTRCakosR0FBNUIsRUFBQTtRQUNLa0osU0FBUyxFQUFiO1FBQ0kvQixJQUFJLENBQVI7UUFDTWdDLEtBQUtuSixJQUFJTixNQUFmO1dBRU95SCxJQUFJZ0MsRUFBWCxFQUFlO1lBQ1JKLElBQUlLLFNBQVNwSixJQUFJcUosTUFBSixDQUFXbEMsSUFBSSxDQUFmLEVBQWtCLENBQWxCLENBQVQsRUFBK0IsRUFBL0IsQ0FBVjtZQUVJNEIsSUFBSSxHQUFSLEVBQWE7c0JBQ0ZqRSxPQUFPQyxZQUFQLENBQW9CZ0UsQ0FBcEIsQ0FBVjtpQkFDSyxDQUFMO1NBRkQsTUFJSyxJQUFJQSxLQUFLLEdBQUwsSUFBWUEsSUFBSSxHQUFwQixFQUF5QjtnQkFDeEJJLEtBQUtoQyxDQUFOLElBQVksQ0FBaEIsRUFBbUI7b0JBQ1ptQyxLQUFLRixTQUFTcEosSUFBSXFKLE1BQUosQ0FBV2xDLElBQUksQ0FBZixFQUFrQixDQUFsQixDQUFULEVBQStCLEVBQS9CLENBQVg7MEJBQ1VyQyxPQUFPQyxZQUFQLENBQXFCLENBQUNnRSxJQUFJLEVBQUwsS0FBWSxDQUFiLEdBQW1CTyxLQUFLLEVBQTVDLENBQVY7YUFGRCxNQUdPOzBCQUNJdEosSUFBSXFKLE1BQUosQ0FBV2xDLENBQVgsRUFBYyxDQUFkLENBQVY7O2lCQUVJLENBQUw7U0FQSSxNQVNBLElBQUk0QixLQUFLLEdBQVQsRUFBYztnQkFDYkksS0FBS2hDLENBQU4sSUFBWSxDQUFoQixFQUFtQjtvQkFDWm1DLEtBQUtGLFNBQVNwSixJQUFJcUosTUFBSixDQUFXbEMsSUFBSSxDQUFmLEVBQWtCLENBQWxCLENBQVQsRUFBK0IsRUFBL0IsQ0FBWDtvQkFDTW9DLEtBQUtILFNBQVNwSixJQUFJcUosTUFBSixDQUFXbEMsSUFBSSxDQUFmLEVBQWtCLENBQWxCLENBQVQsRUFBK0IsRUFBL0IsQ0FBWDswQkFDVXJDLE9BQU9DLFlBQVAsQ0FBcUIsQ0FBQ2dFLElBQUksRUFBTCxLQUFZLEVBQWIsR0FBb0IsQ0FBQ08sS0FBSyxFQUFOLEtBQWEsQ0FBakMsR0FBdUNDLEtBQUssRUFBaEUsQ0FBVjthQUhELE1BSU87MEJBQ0l2SixJQUFJcUosTUFBSixDQUFXbEMsQ0FBWCxFQUFjLENBQWQsQ0FBVjs7aUJBRUksQ0FBTDtTQVJJLE1BVUE7c0JBQ01uSCxJQUFJcUosTUFBSixDQUFXbEMsQ0FBWCxFQUFjLENBQWQsQ0FBVjtpQkFDSyxDQUFMOzs7V0FJSytCLE1BQVA7O0FBR0QsU0FBQU0sMkJBQUEsQ0FBcUNDLFVBQXJDLEVBQStEQyxRQUEvRCxFQUFBO2FBQ0FDLGdCQUFDLENBQTBCM0osR0FBMUIsRUFBRDtZQUNRNEosU0FBU1gsWUFBWWpKLEdBQVosQ0FBZjtlQUNRLENBQUM0SixPQUFPQyxLQUFQLENBQWFILFNBQVNJLFVBQXRCLENBQUQsR0FBcUM5SixHQUFyQyxHQUEyQzRKLE1BQW5EOztRQUdHSCxXQUFXTSxNQUFmLEVBQXVCTixXQUFXTSxNQUFYLEdBQW9CakYsT0FBTzJFLFdBQVdNLE1BQWxCLEVBQTBCckUsT0FBMUIsQ0FBa0NnRSxTQUFTTSxXQUEzQyxFQUF3REwsZ0JBQXhELEVBQTBFaEosV0FBMUUsR0FBd0YrRSxPQUF4RixDQUFnR2dFLFNBQVNPLFVBQXpHLEVBQXFILEVBQXJILENBQXBCO1FBQ25CUixXQUFXUyxRQUFYLEtBQXdCL0osU0FBNUIsRUFBdUNzSixXQUFXUyxRQUFYLEdBQXNCcEYsT0FBTzJFLFdBQVdTLFFBQWxCLEVBQTRCeEUsT0FBNUIsQ0FBb0NnRSxTQUFTTSxXQUE3QyxFQUEwREwsZ0JBQTFELEVBQTRFakUsT0FBNUUsQ0FBb0ZnRSxTQUFTUyxZQUE3RixFQUEyR3RCLFVBQTNHLEVBQXVIbkQsT0FBdkgsQ0FBK0hnRSxTQUFTTSxXQUF4SSxFQUFxSnBKLFdBQXJKLENBQXRCO1FBQ25DNkksV0FBV1csSUFBWCxLQUFvQmpLLFNBQXhCLEVBQW1Dc0osV0FBV1csSUFBWCxHQUFrQnRGLE9BQU8yRSxXQUFXVyxJQUFsQixFQUF3QjFFLE9BQXhCLENBQWdDZ0UsU0FBU00sV0FBekMsRUFBc0RMLGdCQUF0RCxFQUF3RWhKLFdBQXhFLEdBQXNGK0UsT0FBdEYsQ0FBOEZnRSxTQUFTVyxRQUF2RyxFQUFpSHhCLFVBQWpILEVBQTZIbkQsT0FBN0gsQ0FBcUlnRSxTQUFTTSxXQUE5SSxFQUEySnBKLFdBQTNKLENBQWxCO1FBQy9CNkksV0FBV2EsSUFBWCxLQUFvQm5LLFNBQXhCLEVBQW1Dc0osV0FBV2EsSUFBWCxHQUFrQnhGLE9BQU8yRSxXQUFXYSxJQUFsQixFQUF3QjVFLE9BQXhCLENBQWdDZ0UsU0FBU00sV0FBekMsRUFBc0RMLGdCQUF0RCxFQUF3RWpFLE9BQXhFLENBQWlGK0QsV0FBV00sTUFBWCxHQUFvQkwsU0FBU2EsUUFBN0IsR0FBd0NiLFNBQVNjLGlCQUFsSSxFQUFzSjNCLFVBQXRKLEVBQWtLbkQsT0FBbEssQ0FBMEtnRSxTQUFTTSxXQUFuTCxFQUFnTXBKLFdBQWhNLENBQWxCO1FBQy9CNkksV0FBV2dCLEtBQVgsS0FBcUJ0SyxTQUF6QixFQUFvQ3NKLFdBQVdnQixLQUFYLEdBQW1CM0YsT0FBTzJFLFdBQVdnQixLQUFsQixFQUF5Qi9FLE9BQXpCLENBQWlDZ0UsU0FBU00sV0FBMUMsRUFBdURMLGdCQUF2RCxFQUF5RWpFLE9BQXpFLENBQWlGZ0UsU0FBU2dCLFNBQTFGLEVBQXFHN0IsVUFBckcsRUFBaUhuRCxPQUFqSCxDQUF5SGdFLFNBQVNNLFdBQWxJLEVBQStJcEosV0FBL0ksQ0FBbkI7UUFDaEM2SSxXQUFXa0IsUUFBWCxLQUF3QnhLLFNBQTVCLEVBQXVDc0osV0FBV2tCLFFBQVgsR0FBc0I3RixPQUFPMkUsV0FBV2tCLFFBQWxCLEVBQTRCakYsT0FBNUIsQ0FBb0NnRSxTQUFTTSxXQUE3QyxFQUEwREwsZ0JBQTFELEVBQTRFakUsT0FBNUUsQ0FBb0ZnRSxTQUFTa0IsWUFBN0YsRUFBMkcvQixVQUEzRyxFQUF1SG5ELE9BQXZILENBQStIZ0UsU0FBU00sV0FBeEksRUFBcUpwSixXQUFySixDQUF0QjtXQUVoQzZJLFVBQVA7OztBQUdELFNBQUFvQixrQkFBQSxDQUE0QjdLLEdBQTVCLEVBQUE7V0FDUUEsSUFBSTBGLE9BQUosQ0FBWSxTQUFaLEVBQXVCLElBQXZCLEtBQWdDLEdBQXZDOztBQUdELFNBQUFvRixjQUFBLENBQXdCVixJQUF4QixFQUFxQ1YsUUFBckMsRUFBQTtRQUNPcUIsVUFBVVgsS0FBS1AsS0FBTCxDQUFXSCxTQUFTc0IsV0FBcEIsS0FBb0MsRUFBcEQ7O2lDQUNvQkQsT0FGckI7UUFFVUUsT0FGVjs7UUFJS0EsT0FBSixFQUFhO2VBQ0xBLFFBQVF6SyxLQUFSLENBQWMsR0FBZCxFQUFtQjJFLEdBQW5CLENBQXVCMEYsa0JBQXZCLEVBQTJDL0ssSUFBM0MsQ0FBZ0QsR0FBaEQsQ0FBUDtLQURELE1BRU87ZUFDQ3NLLElBQVA7OztBQUlGLFNBQUFjLGNBQUEsQ0FBd0JkLElBQXhCLEVBQXFDVixRQUFyQyxFQUFBO1FBQ09xQixVQUFVWCxLQUFLUCxLQUFMLENBQVdILFNBQVN5QixXQUFwQixLQUFvQyxFQUFwRDs7a0NBQzBCSixPQUYzQjtRQUVVRSxPQUZWO1FBRW1CRyxJQUZuQjs7UUFJS0gsT0FBSixFQUFhO29DQUNVQSxRQUFRdEssV0FBUixHQUFzQkgsS0FBdEIsQ0FBNEIsSUFBNUIsRUFBa0M2SyxPQUFsQyxFQURWOztZQUNMQyxJQURLO1lBQ0NDLEtBREQ7O1lBRU5DLGNBQWNELFFBQVFBLE1BQU0vSyxLQUFOLENBQVksR0FBWixFQUFpQjJFLEdBQWpCLENBQXFCMEYsa0JBQXJCLENBQVIsR0FBbUQsRUFBdkU7WUFDTVksYUFBYUgsS0FBSzlLLEtBQUwsQ0FBVyxHQUFYLEVBQWdCMkUsR0FBaEIsQ0FBb0IwRixrQkFBcEIsQ0FBbkI7WUFDTWEseUJBQXlCaEMsU0FBU3NCLFdBQVQsQ0FBcUJ2QyxJQUFyQixDQUEwQmdELFdBQVdBLFdBQVcvTCxNQUFYLEdBQW9CLENBQS9CLENBQTFCLENBQS9CO1lBQ01pTSxhQUFhRCx5QkFBeUIsQ0FBekIsR0FBNkIsQ0FBaEQ7WUFDTUUsa0JBQWtCSCxXQUFXL0wsTUFBWCxHQUFvQmlNLFVBQTVDO1lBQ01FLFNBQVM5SyxNQUFjNEssVUFBZCxDQUFmO2FBRUssSUFBSTlMLElBQUksQ0FBYixFQUFnQkEsSUFBSThMLFVBQXBCLEVBQWdDLEVBQUU5TCxDQUFsQyxFQUFxQzttQkFDN0JBLENBQVAsSUFBWTJMLFlBQVkzTCxDQUFaLEtBQWtCNEwsV0FBV0csa0JBQWtCL0wsQ0FBN0IsQ0FBbEIsSUFBcUQsRUFBakU7O1lBR0c2TCxzQkFBSixFQUE0QjttQkFDcEJDLGFBQWEsQ0FBcEIsSUFBeUJiLGVBQWVlLE9BQU9GLGFBQWEsQ0FBcEIsQ0FBZixFQUF1Q2pDLFFBQXZDLENBQXpCOztZQUdLb0MsZ0JBQWdCRCxPQUFPRSxNQUFQLENBQW1ELFVBQUNDLEdBQUQsRUFBTUMsS0FBTixFQUFheEUsS0FBYixFQUEzRTtnQkFDTyxDQUFDd0UsS0FBRCxJQUFVQSxVQUFVLEdBQXhCLEVBQTZCO29CQUN0QkMsY0FBY0YsSUFBSUEsSUFBSXRNLE1BQUosR0FBYSxDQUFqQixDQUFwQjtvQkFDSXdNLGVBQWVBLFlBQVl6RSxLQUFaLEdBQW9CeUUsWUFBWXhNLE1BQWhDLEtBQTJDK0gsS0FBOUQsRUFBcUU7Z0NBQ3hEL0gsTUFBWjtpQkFERCxNQUVPO3dCQUNGeUcsSUFBSixDQUFTLEVBQUVzQixZQUFGLEVBQVMvSCxRQUFTLENBQWxCLEVBQVQ7OzttQkFHS3NNLEdBQVA7U0FUcUIsRUFVbkIsRUFWbUIsQ0FBdEI7WUFZTUcsb0JBQW9CTCxjQUFjTSxJQUFkLENBQW1CLFVBQUNDLENBQUQsRUFBSUMsQ0FBSjttQkFBVUEsRUFBRTVNLE1BQUYsR0FBVzJNLEVBQUUzTSxNQUF2QjtTQUFuQixFQUFrRCxDQUFsRCxDQUExQjtZQUVJNk0sZ0JBQUo7WUFDSUoscUJBQXFCQSxrQkFBa0J6TSxNQUFsQixHQUEyQixDQUFwRCxFQUF1RDtnQkFDaEQ4TSxXQUFXWCxPQUFPbE0sS0FBUCxDQUFhLENBQWIsRUFBZ0J3TSxrQkFBa0IxRSxLQUFsQyxDQUFqQjtnQkFDTWdGLFVBQVVaLE9BQU9sTSxLQUFQLENBQWF3TSxrQkFBa0IxRSxLQUFsQixHQUEwQjBFLGtCQUFrQnpNLE1BQXpELENBQWhCO3NCQUNVOE0sU0FBUzFNLElBQVQsQ0FBYyxHQUFkLElBQXFCLElBQXJCLEdBQTRCMk0sUUFBUTNNLElBQVIsQ0FBYSxHQUFiLENBQXRDO1NBSEQsTUFJTztzQkFDSStMLE9BQU8vTCxJQUFQLENBQVksR0FBWixDQUFWOztZQUdHc0wsSUFBSixFQUFVO3VCQUNFLE1BQU1BLElBQWpCOztlQUdNbUIsT0FBUDtLQTVDRCxNQTZDTztlQUNDbkMsSUFBUDs7O0FBSUYsSUFBTXNDLFlBQVksaUlBQWxCO0FBQ0EsSUFBTUMsd0JBQTRDLEVBQUQsQ0FBSzlDLEtBQUwsQ0FBVyxPQUFYLEVBQXFCLENBQXJCLE1BQTRCMUosU0FBN0U7QUFFQSxTQUFBeU0sS0FBQSxDQUFzQkMsU0FBdEIsRUFBQTtRQUF3Q0MsT0FBeEMsdUVBQTZELEVBQTdEOztRQUNPckQsYUFBMkIsRUFBakM7UUFDTUMsV0FBWW9ELFFBQVFDLEdBQVIsS0FBZ0IsS0FBaEIsR0FBd0JDLFlBQXhCLEdBQXVDQyxZQUF6RDtRQUVJSCxRQUFRSSxTQUFSLEtBQXNCLFFBQTFCLEVBQW9DTCxZQUFZLENBQUNDLFFBQVEvQyxNQUFSLEdBQWlCK0MsUUFBUS9DLE1BQVIsR0FBaUIsR0FBbEMsR0FBd0MsRUFBekMsSUFBK0MsSUFBL0MsR0FBc0Q4QyxTQUFsRTtRQUU5QjlCLFVBQVU4QixVQUFVaEQsS0FBVixDQUFnQjZDLFNBQWhCLENBQWhCO1FBRUkzQixPQUFKLEVBQWE7WUFDUjRCLHFCQUFKLEVBQTJCOzt1QkFFZjVDLE1BQVgsR0FBb0JnQixRQUFRLENBQVIsQ0FBcEI7dUJBQ1diLFFBQVgsR0FBc0JhLFFBQVEsQ0FBUixDQUF0Qjt1QkFDV1gsSUFBWCxHQUFrQlcsUUFBUSxDQUFSLENBQWxCO3VCQUNXb0MsSUFBWCxHQUFrQi9ELFNBQVMyQixRQUFRLENBQVIsQ0FBVCxFQUFxQixFQUFyQixDQUFsQjt1QkFDV1QsSUFBWCxHQUFrQlMsUUFBUSxDQUFSLEtBQWMsRUFBaEM7dUJBQ1dOLEtBQVgsR0FBbUJNLFFBQVEsQ0FBUixDQUFuQjt1QkFDV0osUUFBWCxHQUFzQkksUUFBUSxDQUFSLENBQXRCOztnQkFHSXFDLE1BQU0zRCxXQUFXMEQsSUFBakIsQ0FBSixFQUE0QjsyQkFDaEJBLElBQVgsR0FBa0JwQyxRQUFRLENBQVIsQ0FBbEI7O1NBWkYsTUFjTzs7O3VCQUVLaEIsTUFBWCxHQUFvQmdCLFFBQVEsQ0FBUixLQUFjNUssU0FBbEM7dUJBQ1crSixRQUFYLEdBQXVCMkMsVUFBVVEsT0FBVixDQUFrQixHQUFsQixNQUEyQixDQUFDLENBQTVCLEdBQWdDdEMsUUFBUSxDQUFSLENBQWhDLEdBQTZDNUssU0FBcEU7dUJBQ1dpSyxJQUFYLEdBQW1CeUMsVUFBVVEsT0FBVixDQUFrQixJQUFsQixNQUE0QixDQUFDLENBQTdCLEdBQWlDdEMsUUFBUSxDQUFSLENBQWpDLEdBQThDNUssU0FBakU7dUJBQ1dnTixJQUFYLEdBQWtCL0QsU0FBUzJCLFFBQVEsQ0FBUixDQUFULEVBQXFCLEVBQXJCLENBQWxCO3VCQUNXVCxJQUFYLEdBQWtCUyxRQUFRLENBQVIsS0FBYyxFQUFoQzt1QkFDV04sS0FBWCxHQUFvQm9DLFVBQVVRLE9BQVYsQ0FBa0IsR0FBbEIsTUFBMkIsQ0FBQyxDQUE1QixHQUFnQ3RDLFFBQVEsQ0FBUixDQUFoQyxHQUE2QzVLLFNBQWpFO3VCQUNXd0ssUUFBWCxHQUF1QmtDLFVBQVVRLE9BQVYsQ0FBa0IsR0FBbEIsTUFBMkIsQ0FBQyxDQUE1QixHQUFnQ3RDLFFBQVEsQ0FBUixDQUFoQyxHQUE2QzVLLFNBQXBFOztnQkFHSWlOLE1BQU0zRCxXQUFXMEQsSUFBakIsQ0FBSixFQUE0QjsyQkFDaEJBLElBQVgsR0FBbUJOLFVBQVVoRCxLQUFWLENBQWdCLCtCQUFoQixJQUFtRGtCLFFBQVEsQ0FBUixDQUFuRCxHQUFnRTVLLFNBQW5GOzs7WUFJRXNKLFdBQVdXLElBQWYsRUFBcUI7O3VCQUVUQSxJQUFYLEdBQWtCYyxlQUFlSixlQUFlckIsV0FBV1csSUFBMUIsRUFBZ0NWLFFBQWhDLENBQWYsRUFBMERBLFFBQTFELENBQWxCOzs7WUFJR0QsV0FBV00sTUFBWCxLQUFzQjVKLFNBQXRCLElBQW1Dc0osV0FBV1MsUUFBWCxLQUF3Qi9KLFNBQTNELElBQXdFc0osV0FBV1csSUFBWCxLQUFvQmpLLFNBQTVGLElBQXlHc0osV0FBVzBELElBQVgsS0FBb0JoTixTQUE3SCxJQUEwSSxDQUFDc0osV0FBV2EsSUFBdEosSUFBOEpiLFdBQVdnQixLQUFYLEtBQXFCdEssU0FBdkwsRUFBa007dUJBQ3RMK00sU0FBWCxHQUF1QixlQUF2QjtTQURELE1BRU8sSUFBSXpELFdBQVdNLE1BQVgsS0FBc0I1SixTQUExQixFQUFxQzt1QkFDaEMrTSxTQUFYLEdBQXVCLFVBQXZCO1NBRE0sTUFFQSxJQUFJekQsV0FBV2tCLFFBQVgsS0FBd0J4SyxTQUE1QixFQUF1Qzt1QkFDbEMrTSxTQUFYLEdBQXVCLFVBQXZCO1NBRE0sTUFFQTt1QkFDS0EsU0FBWCxHQUF1QixLQUF2Qjs7O1lBSUdKLFFBQVFJLFNBQVIsSUFBcUJKLFFBQVFJLFNBQVIsS0FBc0IsUUFBM0MsSUFBdURKLFFBQVFJLFNBQVIsS0FBc0J6RCxXQUFXeUQsU0FBNUYsRUFBdUc7dUJBQzNGbEksS0FBWCxHQUFtQnlFLFdBQVd6RSxLQUFYLElBQW9CLGtCQUFrQjhILFFBQVFJLFNBQTFCLEdBQXNDLGFBQTdFOzs7WUFJS0ksZ0JBQWdCMUUsUUFBUSxDQUFDa0UsUUFBUS9DLE1BQVIsSUFBa0JOLFdBQVdNLE1BQTdCLElBQXVDLEVBQXhDLEVBQTRDcEosV0FBNUMsRUFBUixDQUF0Qjs7WUFHSSxDQUFDbU0sUUFBUVMsY0FBVCxLQUE0QixDQUFDRCxhQUFELElBQWtCLENBQUNBLGNBQWNDLGNBQTdELENBQUosRUFBa0Y7O2dCQUU3RTlELFdBQVdXLElBQVgsS0FBb0IwQyxRQUFRVSxVQUFSLElBQXVCRixpQkFBaUJBLGNBQWNFLFVBQTFFLENBQUosRUFBNEY7O29CQUV2RjsrQkFDUXBELElBQVgsR0FBa0J6QixTQUFTRCxPQUFULENBQWlCZSxXQUFXVyxJQUFYLENBQWdCMUUsT0FBaEIsQ0FBd0JnRSxTQUFTTSxXQUFqQyxFQUE4Q2YsV0FBOUMsRUFBMkR0SSxXQUEzRCxFQUFqQixDQUFsQjtpQkFERCxDQUVFLE9BQU9xSSxDQUFQLEVBQVU7K0JBQ0FoRSxLQUFYLEdBQW1CeUUsV0FBV3pFLEtBQVgsSUFBb0Isb0VBQW9FZ0UsQ0FBM0c7Ozs7d0NBSTBCUyxVQUE1QixFQUF3Q3dELFlBQXhDO1NBWEQsTUFZTzs7d0NBRXNCeEQsVUFBNUIsRUFBd0NDLFFBQXhDOzs7WUFJRzRELGlCQUFpQkEsY0FBY1YsS0FBbkMsRUFBMEM7MEJBQzNCQSxLQUFkLENBQW9CbkQsVUFBcEIsRUFBZ0NxRCxPQUFoQzs7S0EzRUYsTUE2RU87bUJBQ0s5SCxLQUFYLEdBQW1CeUUsV0FBV3pFLEtBQVgsSUFBb0Isd0JBQXZDOztXQUdNeUUsVUFBUDs7O0FBR0QsU0FBQWdFLG1CQUFBLENBQTZCaEUsVUFBN0IsRUFBdURxRCxPQUF2RCxFQUFBO1FBQ09wRCxXQUFZb0QsUUFBUUMsR0FBUixLQUFnQixLQUFoQixHQUF3QkMsWUFBeEIsR0FBdUNDLFlBQXpEO1FBQ01TLFlBQTBCLEVBQWhDO1FBRUlqRSxXQUFXUyxRQUFYLEtBQXdCL0osU0FBNUIsRUFBdUM7a0JBQzVCZ0csSUFBVixDQUFlc0QsV0FBV1MsUUFBMUI7a0JBQ1UvRCxJQUFWLENBQWUsR0FBZjs7UUFHR3NELFdBQVdXLElBQVgsS0FBb0JqSyxTQUF4QixFQUFtQzs7a0JBRXhCZ0csSUFBVixDQUFlK0UsZUFBZUosZUFBZWhHLE9BQU8yRSxXQUFXVyxJQUFsQixDQUFmLEVBQXdDVixRQUF4QyxDQUFmLEVBQWtFQSxRQUFsRSxFQUE0RWhFLE9BQTVFLENBQW9GZ0UsU0FBU3lCLFdBQTdGLEVBQTBHLFVBQUN3QyxDQUFELEVBQUlDLEVBQUosRUFBUUMsRUFBUjttQkFBZSxNQUFNRCxFQUFOLElBQVlDLEtBQUssUUFBUUEsRUFBYixHQUFrQixFQUE5QixJQUFvQyxHQUFuRDtTQUExRyxDQUFmOztRQUdHLE9BQU9wRSxXQUFXMEQsSUFBbEIsS0FBMkIsUUFBL0IsRUFBeUM7a0JBQzlCaEgsSUFBVixDQUFlLEdBQWY7a0JBQ1VBLElBQVYsQ0FBZXNELFdBQVcwRCxJQUFYLENBQWdCN00sUUFBaEIsQ0FBeUIsRUFBekIsQ0FBZjs7V0FHTW9OLFVBQVVoTyxNQUFWLEdBQW1CZ08sVUFBVTVOLElBQVYsQ0FBZSxFQUFmLENBQW5CLEdBQXdDSyxTQUEvQzs7O0FBR0QsSUFBTTJOLE9BQU8sVUFBYjtBQUNBLElBQU1DLE9BQU8sYUFBYjtBQUNBLElBQU1DLE9BQU8sZUFBYjtBQUNBLElBQ01DLE9BQU8sd0JBQWI7QUFFQSxTQUFBQyxpQkFBQSxDQUFrQ2pILEtBQWxDLEVBQUE7UUFDT25CLFNBQXVCLEVBQTdCO1dBRU9tQixNQUFNdkgsTUFBYixFQUFxQjtZQUNoQnVILE1BQU00QyxLQUFOLENBQVlpRSxJQUFaLENBQUosRUFBdUI7b0JBQ2Q3RyxNQUFNdkIsT0FBTixDQUFjb0ksSUFBZCxFQUFvQixFQUFwQixDQUFSO1NBREQsTUFFTyxJQUFJN0csTUFBTTRDLEtBQU4sQ0FBWWtFLElBQVosQ0FBSixFQUF1QjtvQkFDckI5RyxNQUFNdkIsT0FBTixDQUFjcUksSUFBZCxFQUFvQixHQUFwQixDQUFSO1NBRE0sTUFFQSxJQUFJOUcsTUFBTTRDLEtBQU4sQ0FBWW1FLElBQVosQ0FBSixFQUF1QjtvQkFDckIvRyxNQUFNdkIsT0FBTixDQUFjc0ksSUFBZCxFQUFvQixHQUFwQixDQUFSO21CQUNPdk4sR0FBUDtTQUZNLE1BR0EsSUFBSXdHLFVBQVUsR0FBVixJQUFpQkEsVUFBVSxJQUEvQixFQUFxQztvQkFDbkMsRUFBUjtTQURNLE1BRUE7Z0JBQ0FrSCxLQUFLbEgsTUFBTTRDLEtBQU4sQ0FBWW9FLElBQVosQ0FBWDtnQkFDSUUsRUFBSixFQUFRO29CQUNEQyxJQUFJRCxHQUFHLENBQUgsQ0FBVjt3QkFDUWxILE1BQU10SCxLQUFOLENBQVl5TyxFQUFFMU8sTUFBZCxDQUFSO3VCQUNPeUcsSUFBUCxDQUFZaUksQ0FBWjthQUhELE1BSU87c0JBQ0EsSUFBSUMsS0FBSixDQUFVLGtDQUFWLENBQU47Ozs7V0FLSXZJLE9BQU9oRyxJQUFQLENBQVksRUFBWixDQUFQOzs7QUFHRCxTQUFBd08sU0FBQSxDQUEwQjdFLFVBQTFCLEVBQUE7UUFBb0RxRCxPQUFwRCx1RUFBeUUsRUFBekU7O1FBQ09wRCxXQUFZb0QsUUFBUUMsR0FBUixHQUFjQyxZQUFkLEdBQTZCQyxZQUEvQztRQUNNUyxZQUEwQixFQUFoQzs7UUFHTUosZ0JBQWdCMUUsUUFBUSxDQUFDa0UsUUFBUS9DLE1BQVIsSUFBa0JOLFdBQVdNLE1BQTdCLElBQXVDLEVBQXhDLEVBQTRDcEosV0FBNUMsRUFBUixDQUF0Qjs7UUFHSTJNLGlCQUFpQkEsY0FBY2dCLFNBQW5DLEVBQThDaEIsY0FBY2dCLFNBQWQsQ0FBd0I3RSxVQUF4QixFQUFvQ3FELE9BQXBDO1FBRTFDckQsV0FBV1csSUFBZixFQUFxQjs7WUFFaEJWLFNBQVN5QixXQUFULENBQXFCMUMsSUFBckIsQ0FBMEJnQixXQUFXVyxJQUFyQyxDQUFKLEVBQWdEOzs7O2FBSzNDLElBQUkwQyxRQUFRVSxVQUFSLElBQXVCRixpQkFBaUJBLGNBQWNFLFVBQTFELEVBQXVFOztvQkFFdkU7K0JBQ1FwRCxJQUFYLEdBQW1CLENBQUMwQyxRQUFRQyxHQUFULEdBQWVwRSxTQUFTRCxPQUFULENBQWlCZSxXQUFXVyxJQUFYLENBQWdCMUUsT0FBaEIsQ0FBd0JnRSxTQUFTTSxXQUFqQyxFQUE4Q2YsV0FBOUMsRUFBMkR0SSxXQUEzRCxFQUFqQixDQUFmLEdBQTRHZ0ksU0FBU0gsU0FBVCxDQUFtQmlCLFdBQVdXLElBQTlCLENBQS9IO2lCQURELENBRUUsT0FBT3BCLENBQVAsRUFBVTsrQkFDQWhFLEtBQVgsR0FBbUJ5RSxXQUFXekUsS0FBWCxJQUFvQixpREFBaUQsQ0FBQzhILFFBQVFDLEdBQVQsR0FBZSxPQUFmLEdBQXlCLFNBQTFFLElBQXVGLGlCQUF2RixHQUEyRy9ELENBQWxKOzs7OztnQ0FNeUJTLFVBQTVCLEVBQXdDQyxRQUF4QztRQUVJb0QsUUFBUUksU0FBUixLQUFzQixRQUF0QixJQUFrQ3pELFdBQVdNLE1BQWpELEVBQXlEO2tCQUM5QzVELElBQVYsQ0FBZXNELFdBQVdNLE1BQTFCO2tCQUNVNUQsSUFBVixDQUFlLEdBQWY7O1FBR0tvSSxZQUFZZCxvQkFBb0JoRSxVQUFwQixFQUFnQ3FELE9BQWhDLENBQWxCO1FBQ0l5QixjQUFjcE8sU0FBbEIsRUFBNkI7WUFDeEIyTSxRQUFRSSxTQUFSLEtBQXNCLFFBQTFCLEVBQW9DO3NCQUN6Qi9HLElBQVYsQ0FBZSxJQUFmOztrQkFHU0EsSUFBVixDQUFlb0ksU0FBZjtZQUVJOUUsV0FBV2EsSUFBWCxJQUFtQmIsV0FBV2EsSUFBWCxDQUFnQmtFLE1BQWhCLENBQXVCLENBQXZCLE1BQThCLEdBQXJELEVBQTBEO3NCQUMvQ3JJLElBQVYsQ0FBZSxHQUFmOzs7UUFJRXNELFdBQVdhLElBQVgsS0FBb0JuSyxTQUF4QixFQUFtQztZQUM5QmlPLElBQUkzRSxXQUFXYSxJQUFuQjtZQUVJLENBQUN3QyxRQUFRMkIsWUFBVCxLQUEwQixDQUFDbkIsYUFBRCxJQUFrQixDQUFDQSxjQUFjbUIsWUFBM0QsQ0FBSixFQUE4RTtnQkFDekVQLGtCQUFrQkUsQ0FBbEIsQ0FBSjs7WUFHR0csY0FBY3BPLFNBQWxCLEVBQTZCO2dCQUN4QmlPLEVBQUUxSSxPQUFGLENBQVUsT0FBVixFQUFtQixNQUFuQixDQUFKLENBRDRCOztrQkFJbkJTLElBQVYsQ0FBZWlJLENBQWY7O1FBR0czRSxXQUFXZ0IsS0FBWCxLQUFxQnRLLFNBQXpCLEVBQW9DO2tCQUN6QmdHLElBQVYsQ0FBZSxHQUFmO2tCQUNVQSxJQUFWLENBQWVzRCxXQUFXZ0IsS0FBMUI7O1FBR0doQixXQUFXa0IsUUFBWCxLQUF3QnhLLFNBQTVCLEVBQXVDO2tCQUM1QmdHLElBQVYsQ0FBZSxHQUFmO2tCQUNVQSxJQUFWLENBQWVzRCxXQUFXa0IsUUFBMUI7O1dBR00rQyxVQUFVNU4sSUFBVixDQUFlLEVBQWYsQ0FBUCxDQXhFRDs7O0FBMkVBLFNBQUE0TyxpQkFBQSxDQUFrQzVLLElBQWxDLEVBQXNENkssUUFBdEQsRUFBQTtRQUE4RTdCLE9BQTlFLHVFQUFtRyxFQUFuRztRQUF1RzhCLGlCQUF2Rzs7UUFDTzFOLFNBQXVCLEVBQTdCO1FBRUksQ0FBQzBOLGlCQUFMLEVBQXdCO2VBQ2hCaEMsTUFBTTBCLFVBQVV4SyxJQUFWLEVBQWdCZ0osT0FBaEIsQ0FBTixFQUFnQ0EsT0FBaEMsQ0FBUCxDQUR1QjttQkFFWkYsTUFBTTBCLFVBQVVLLFFBQVYsRUFBb0I3QixPQUFwQixDQUFOLEVBQW9DQSxPQUFwQyxDQUFYLENBRnVCOztjQUlkQSxXQUFXLEVBQXJCO1FBRUksQ0FBQ0EsUUFBUStCLFFBQVQsSUFBcUJGLFNBQVM1RSxNQUFsQyxFQUEwQztlQUNsQ0EsTUFBUCxHQUFnQjRFLFNBQVM1RSxNQUF6Qjs7ZUFFT0csUUFBUCxHQUFrQnlFLFNBQVN6RSxRQUEzQjtlQUNPRSxJQUFQLEdBQWN1RSxTQUFTdkUsSUFBdkI7ZUFDTytDLElBQVAsR0FBY3dCLFNBQVN4QixJQUF2QjtlQUNPN0MsSUFBUCxHQUFjNEQsa0JBQWtCUyxTQUFTckUsSUFBVCxJQUFpQixFQUFuQyxDQUFkO2VBQ09HLEtBQVAsR0FBZWtFLFNBQVNsRSxLQUF4QjtLQVBELE1BUU87WUFDRmtFLFNBQVN6RSxRQUFULEtBQXNCL0osU0FBdEIsSUFBbUN3TyxTQUFTdkUsSUFBVCxLQUFrQmpLLFNBQXJELElBQWtFd08sU0FBU3hCLElBQVQsS0FBa0JoTixTQUF4RixFQUFtRzs7bUJBRTNGK0osUUFBUCxHQUFrQnlFLFNBQVN6RSxRQUEzQjttQkFDT0UsSUFBUCxHQUFjdUUsU0FBU3ZFLElBQXZCO21CQUNPK0MsSUFBUCxHQUFjd0IsU0FBU3hCLElBQXZCO21CQUNPN0MsSUFBUCxHQUFjNEQsa0JBQWtCUyxTQUFTckUsSUFBVCxJQUFpQixFQUFuQyxDQUFkO21CQUNPRyxLQUFQLEdBQWVrRSxTQUFTbEUsS0FBeEI7U0FORCxNQU9PO2dCQUNGLENBQUNrRSxTQUFTckUsSUFBZCxFQUFvQjt1QkFDWkEsSUFBUCxHQUFjeEcsS0FBS3dHLElBQW5CO29CQUNJcUUsU0FBU2xFLEtBQVQsS0FBbUJ0SyxTQUF2QixFQUFrQzsyQkFDMUJzSyxLQUFQLEdBQWVrRSxTQUFTbEUsS0FBeEI7aUJBREQsTUFFTzsyQkFDQ0EsS0FBUCxHQUFlM0csS0FBSzJHLEtBQXBCOzthQUxGLE1BT087b0JBQ0ZrRSxTQUFTckUsSUFBVCxDQUFja0UsTUFBZCxDQUFxQixDQUFyQixNQUE0QixHQUFoQyxFQUFxQzsyQkFDN0JsRSxJQUFQLEdBQWM0RCxrQkFBa0JTLFNBQVNyRSxJQUEzQixDQUFkO2lCQURELE1BRU87d0JBQ0YsQ0FBQ3hHLEtBQUtvRyxRQUFMLEtBQWtCL0osU0FBbEIsSUFBK0IyRCxLQUFLc0csSUFBTCxLQUFjakssU0FBN0MsSUFBMEQyRCxLQUFLcUosSUFBTCxLQUFjaE4sU0FBekUsS0FBdUYsQ0FBQzJELEtBQUt3RyxJQUFqRyxFQUF1RzsrQkFDL0ZBLElBQVAsR0FBYyxNQUFNcUUsU0FBU3JFLElBQTdCO3FCQURELE1BRU8sSUFBSSxDQUFDeEcsS0FBS3dHLElBQVYsRUFBZ0I7K0JBQ2ZBLElBQVAsR0FBY3FFLFNBQVNyRSxJQUF2QjtxQkFETSxNQUVBOytCQUNDQSxJQUFQLEdBQWN4RyxLQUFLd0csSUFBTCxDQUFVM0ssS0FBVixDQUFnQixDQUFoQixFQUFtQm1FLEtBQUt3RyxJQUFMLENBQVUvQyxXQUFWLENBQXNCLEdBQXRCLElBQTZCLENBQWhELElBQXFEb0gsU0FBU3JFLElBQTVFOzsyQkFFTUEsSUFBUCxHQUFjNEQsa0JBQWtCaE4sT0FBT29KLElBQXpCLENBQWQ7O3VCQUVNRyxLQUFQLEdBQWVrRSxTQUFTbEUsS0FBeEI7OzttQkFHTVAsUUFBUCxHQUFrQnBHLEtBQUtvRyxRQUF2QjttQkFDT0UsSUFBUCxHQUFjdEcsS0FBS3NHLElBQW5CO21CQUNPK0MsSUFBUCxHQUFjckosS0FBS3FKLElBQW5COztlQUVNcEQsTUFBUCxHQUFnQmpHLEtBQUtpRyxNQUFyQjs7V0FHTVksUUFBUCxHQUFrQmdFLFNBQVNoRSxRQUEzQjtXQUVPekosTUFBUDs7O0FBR0QsU0FBQTROLE9BQUEsQ0FBd0JDLE9BQXhCLEVBQXdDQyxXQUF4QyxFQUE0RGxDLE9BQTVELEVBQUE7UUFDT21DLG9CQUFvQmhPLE9BQU8sRUFBRThJLFFBQVMsTUFBWCxFQUFQLEVBQTRCK0MsT0FBNUIsQ0FBMUI7V0FDT3dCLFVBQVVJLGtCQUFrQjlCLE1BQU1tQyxPQUFOLEVBQWVFLGlCQUFmLENBQWxCLEVBQXFEckMsTUFBTW9DLFdBQU4sRUFBbUJDLGlCQUFuQixDQUFyRCxFQUE0RkEsaUJBQTVGLEVBQStHLElBQS9HLENBQVYsRUFBZ0lBLGlCQUFoSSxDQUFQOzs7QUFLRCxTQUFBQyxTQUFBLENBQTBCQyxHQUExQixFQUFtQ3JDLE9BQW5DLEVBQUE7UUFDSyxPQUFPcUMsR0FBUCxLQUFlLFFBQW5CLEVBQTZCO2NBQ3RCYixVQUFVMUIsTUFBTXVDLEdBQU4sRUFBV3JDLE9BQVgsQ0FBVixFQUErQkEsT0FBL0IsQ0FBTjtLQURELE1BRU8sSUFBSTdNLE9BQU9rUCxHQUFQLE1BQWdCLFFBQXBCLEVBQThCO2NBQzlCdkMsTUFBTTBCLFVBQXlCYSxHQUF6QixFQUE4QnJDLE9BQTlCLENBQU4sRUFBOENBLE9BQTlDLENBQU47O1dBR01xQyxHQUFQOzs7QUFLRCxTQUFBQyxLQUFBLENBQXNCQyxJQUF0QixFQUFnQ0MsSUFBaEMsRUFBMEN4QyxPQUExQyxFQUFBO1FBQ0ssT0FBT3VDLElBQVAsS0FBZ0IsUUFBcEIsRUFBOEI7ZUFDdEJmLFVBQVUxQixNQUFNeUMsSUFBTixFQUFZdkMsT0FBWixDQUFWLEVBQWdDQSxPQUFoQyxDQUFQO0tBREQsTUFFTyxJQUFJN00sT0FBT29QLElBQVAsTUFBaUIsUUFBckIsRUFBK0I7ZUFDOUJmLFVBQXlCZSxJQUF6QixFQUErQnZDLE9BQS9CLENBQVA7O1FBR0csT0FBT3dDLElBQVAsS0FBZ0IsUUFBcEIsRUFBOEI7ZUFDdEJoQixVQUFVMUIsTUFBTTBDLElBQU4sRUFBWXhDLE9BQVosQ0FBVixFQUFnQ0EsT0FBaEMsQ0FBUDtLQURELE1BRU8sSUFBSTdNLE9BQU9xUCxJQUFQLE1BQWlCLFFBQXJCLEVBQStCO2VBQzlCaEIsVUFBeUJnQixJQUF6QixFQUErQnhDLE9BQS9CLENBQVA7O1dBR011QyxTQUFTQyxJQUFoQjs7O0FBR0QsU0FBQUMsZUFBQSxDQUFnQ3ZQLEdBQWhDLEVBQTRDOE0sT0FBNUMsRUFBQTtXQUNROU0sT0FBT0EsSUFBSU0sUUFBSixHQUFlb0YsT0FBZixDQUF3QixDQUFDb0gsT0FBRCxJQUFZLENBQUNBLFFBQVFDLEdBQXJCLEdBQTJCRSxhQUFhdUMsTUFBeEMsR0FBaUR4QyxhQUFhd0MsTUFBdEYsRUFBK0YzRyxVQUEvRixDQUFkOzs7QUFHRCxTQUFBNEcsaUJBQUEsQ0FBa0N6UCxHQUFsQyxFQUE4QzhNLE9BQTlDLEVBQUE7V0FDUTlNLE9BQU9BLElBQUlNLFFBQUosR0FBZW9GLE9BQWYsQ0FBd0IsQ0FBQ29ILE9BQUQsSUFBWSxDQUFDQSxRQUFRQyxHQUFyQixHQUEyQkUsYUFBYWpELFdBQXhDLEdBQXNEZ0QsYUFBYWhELFdBQTNGLEVBQXlHZixXQUF6RyxDQUFkO0NBQ0E7O0FDemlCRCxJQUFNeUcsVUFBMkI7WUFDdkIsTUFEdUI7Z0JBR25CLElBSG1CO1dBS3hCLGVBQVVqRyxVQUFWLEVBQW9DcUQsT0FBcEMsRUFBVDs7WUFFTSxDQUFDckQsV0FBV1csSUFBaEIsRUFBc0I7dUJBQ1ZwRixLQUFYLEdBQW1CeUUsV0FBV3pFLEtBQVgsSUFBb0IsNkJBQXZDOztlQUdNeUUsVUFBUDtLQVgrQjtlQWNwQixtQkFBVUEsVUFBVixFQUFvQ3FELE9BQXBDLEVBQWI7O1lBRU1yRCxXQUFXMEQsSUFBWCxNQUFxQnJJLE9BQU8yRSxXQUFXTSxNQUFsQixFQUEwQnBKLFdBQTFCLE9BQTRDLE9BQTVDLEdBQXNELEVBQXRELEdBQTJELEdBQWhGLEtBQXdGOEksV0FBVzBELElBQVgsS0FBb0IsRUFBaEgsRUFBb0g7dUJBQ3hHQSxJQUFYLEdBQWtCaE4sU0FBbEI7OztZQUlHLENBQUNzSixXQUFXYSxJQUFoQixFQUFzQjt1QkFDVkEsSUFBWCxHQUFrQixHQUFsQjs7Ozs7ZUFPTWIsVUFBUDs7Q0E3QkYsQ0FpQ0E7O0FDaENBLElBQU1pRyxZQUEyQjtZQUN2QixPQUR1QjtnQkFFbkJDLFFBQUtuQyxVQUZjO1dBR3hCbUMsUUFBSy9DLEtBSG1CO2VBSXBCK0MsUUFBS3JCO0NBSmxCLENBT0E7O0FDTUEsSUFBTXNCLElBQWtCLEVBQXhCO0FBQ0E7QUFHQSxJQUFNek4sZUFBZSw0QkFBNEJiLENBQVEsMkVBQVIsQ0FBNUIsSUFBd0gsR0FBN0k7QUFDQSxJQUFNSyxXQUFXLGFBQWpCO0FBQ0EsSUFBTUMsZUFBZTdCLE9BQU9BLE9BQU8sWUFBWTRCLFFBQVosR0FBdUIsR0FBdkIsR0FBNkJBLFFBQTdCLEdBQXdDQSxRQUF4QyxHQUFtRCxHQUFuRCxHQUF5REEsUUFBekQsR0FBb0VBLFFBQTNFLElBQXVGLEdBQXZGLEdBQTZGNUIsT0FBTyxnQkFBZ0I0QixRQUFoQixHQUEyQixHQUEzQixHQUFpQ0EsUUFBakMsR0FBNENBLFFBQW5ELENBQTdGLEdBQTRKLEdBQTVKLEdBQWtLNUIsT0FBTyxNQUFNNEIsUUFBTixHQUFpQkEsUUFBeEIsQ0FBekssQ0FBckI7Ozs7Ozs7Ozs7OztBQWFBLElBQU1rTyxVQUFVLHVEQUFoQjtBQUNBLElBQU1DLFVBQVUsNERBQWhCO0FBQ0EsSUFBTUMsVUFBVXZRLE1BQU1zUSxPQUFOLEVBQWUsWUFBZixDQUFoQjtBQU1BLElBRU1FLGdCQUFnQixxQ0FBdEI7QUFXQSxJQUVNbEcsYUFBYSxJQUFJbkcsTUFBSixDQUFXeEIsWUFBWCxFQUF5QixHQUF6QixDQUFuQjtBQUNBLElBQU02SCxjQUFjLElBQUlyRyxNQUFKLENBQVcvQixZQUFYLEVBQXlCLEdBQXpCLENBQXBCO0FBQ0EsSUFBTXFPLGlCQUFpQixJQUFJdE0sTUFBSixDQUFXbkUsTUFBTSxLQUFOLEVBQWFxUSxPQUFiLEVBQXNCLE9BQXRCLEVBQStCLE9BQS9CLEVBQXdDRSxPQUF4QyxDQUFYLEVBQTZELEdBQTdELENBQXZCO0FBRUEsSUFBTUcsYUFBYSxJQUFJdk0sTUFBSixDQUFXbkUsTUFBTSxLQUFOLEVBQWEyQyxZQUFiLEVBQTJCNk4sYUFBM0IsQ0FBWCxFQUFzRCxHQUF0RCxDQUFuQjtBQUNBLElBQU1HLGNBQWNELFVBQXBCO0FBRUEsU0FFQXZHLGdCQUFBLENBQTBCM0osR0FBMUIsRUFBQTtRQUNPNEosU0FBU1gsWUFBWWpKLEdBQVosQ0FBZjtXQUNRLENBQUM0SixPQUFPQyxLQUFQLENBQWFDLFVBQWIsQ0FBRCxHQUE0QjlKLEdBQTVCLEdBQWtDNEosTUFBMUM7O0FBR0QsSUFBTThGLFlBQThDO1lBQzFDLFFBRDBDO1dBRzNDLGtCQUFVakcsVUFBVixFQUFvQ3FELE9BQXBDLEVBQVQ7WUFDUXNELG1CQUFtQjNHLFVBQXpCO1lBQ000RyxLQUFLRCxpQkFBaUJDLEVBQWpCLEdBQXVCRCxpQkFBaUI5RixJQUFqQixHQUF3QjhGLGlCQUFpQjlGLElBQWpCLENBQXNCOUosS0FBdEIsQ0FBNEIsR0FBNUIsQ0FBeEIsR0FBMkQsRUFBN0Y7eUJBQ2lCOEosSUFBakIsR0FBd0JuSyxTQUF4QjtZQUVJaVEsaUJBQWlCM0YsS0FBckIsRUFBNEI7Z0JBQ3ZCNkYsaUJBQWlCLEtBQXJCO2dCQUNNQyxVQUF3QixFQUE5QjtnQkFDTUMsVUFBVUosaUJBQWlCM0YsS0FBakIsQ0FBdUJqSyxLQUF2QixDQUE2QixHQUE3QixDQUFoQjtpQkFFSyxJQUFJWCxJQUFJLENBQVIsRUFBV0QsS0FBSzRRLFFBQVE5USxNQUE3QixFQUFxQ0csSUFBSUQsRUFBekMsRUFBNkMsRUFBRUMsQ0FBL0MsRUFBa0Q7b0JBQzNDNFEsU0FBU0QsUUFBUTNRLENBQVIsRUFBV1csS0FBWCxDQUFpQixHQUFqQixDQUFmO3dCQUVRaVEsT0FBTyxDQUFQLENBQVI7eUJBQ00sSUFBTDs0QkFDT0MsVUFBVUQsT0FBTyxDQUFQLEVBQVVqUSxLQUFWLENBQWdCLEdBQWhCLENBQWhCOzZCQUNLLElBQUlYLEtBQUksQ0FBUixFQUFXRCxNQUFLOFEsUUFBUWhSLE1BQTdCLEVBQXFDRyxLQUFJRCxHQUF6QyxFQUE2QyxFQUFFQyxFQUEvQyxFQUFrRDsrQkFDOUNzRyxJQUFILENBQVF1SyxRQUFRN1EsRUFBUixDQUFSOzs7eUJBR0csU0FBTDt5Q0FDa0I4USxPQUFqQixHQUEyQmxCLGtCQUFrQmdCLE9BQU8sQ0FBUCxDQUFsQixFQUE2QjNELE9BQTdCLENBQTNCOzt5QkFFSSxNQUFMO3lDQUNrQjhELElBQWpCLEdBQXdCbkIsa0JBQWtCZ0IsT0FBTyxDQUFQLENBQWxCLEVBQTZCM0QsT0FBN0IsQ0FBeEI7Ozt5Q0FHaUIsSUFBakI7Z0NBQ1EyQyxrQkFBa0JnQixPQUFPLENBQVAsQ0FBbEIsRUFBNkIzRCxPQUE3QixDQUFSLElBQWlEMkMsa0JBQWtCZ0IsT0FBTyxDQUFQLENBQWxCLEVBQTZCM0QsT0FBN0IsQ0FBakQ7Ozs7Z0JBS0N3RCxjQUFKLEVBQW9CRixpQkFBaUJHLE9BQWpCLEdBQTJCQSxPQUEzQjs7eUJBR0o5RixLQUFqQixHQUF5QnRLLFNBQXpCO2FBRUssSUFBSU4sTUFBSSxDQUFSLEVBQVdELE9BQUt5USxHQUFHM1EsTUFBeEIsRUFBZ0NHLE1BQUlELElBQXBDLEVBQXdDLEVBQUVDLEdBQTFDLEVBQTZDO2dCQUN0Q2dSLE9BQU9SLEdBQUd4USxHQUFILEVBQU1XLEtBQU4sQ0FBWSxHQUFaLENBQWI7aUJBRUssQ0FBTCxJQUFVaVAsa0JBQWtCb0IsS0FBSyxDQUFMLENBQWxCLENBQVY7Z0JBRUksQ0FBQy9ELFFBQVFTLGNBQWIsRUFBNkI7O29CQUV4Qjt5QkFDRSxDQUFMLElBQVU1RSxTQUFTRCxPQUFULENBQWlCK0csa0JBQWtCb0IsS0FBSyxDQUFMLENBQWxCLEVBQTJCL0QsT0FBM0IsRUFBb0NuTSxXQUFwQyxFQUFqQixDQUFWO2lCQURELENBRUUsT0FBT3FJLENBQVAsRUFBVTtxQ0FDTWhFLEtBQWpCLEdBQXlCb0wsaUJBQWlCcEwsS0FBakIsSUFBMEIsNkVBQTZFZ0UsQ0FBaEk7O2FBTEYsTUFPTztxQkFDRCxDQUFMLElBQVV5RyxrQkFBa0JvQixLQUFLLENBQUwsQ0FBbEIsRUFBMkIvRCxPQUEzQixFQUFvQ25NLFdBQXBDLEVBQVY7O2VBR0VkLEdBQUgsSUFBUWdSLEtBQUsvUSxJQUFMLENBQVUsR0FBVixDQUFSOztlQUdNc1EsZ0JBQVA7S0E1RGtEO2VBK0R2QyxzQkFBVUEsZ0JBQVYsRUFBNkN0RCxPQUE3QyxFQUFiO1lBQ1FyRCxhQUFhMkcsZ0JBQW5CO1lBQ01DLEtBQUt4UCxRQUFRdVAsaUJBQWlCQyxFQUF6QixDQUFYO1lBQ0lBLEVBQUosRUFBUTtpQkFDRixJQUFJeFEsSUFBSSxDQUFSLEVBQVdELEtBQUt5USxHQUFHM1EsTUFBeEIsRUFBZ0NHLElBQUlELEVBQXBDLEVBQXdDLEVBQUVDLENBQTFDLEVBQTZDO29CQUN0Q2lSLFNBQVNoTSxPQUFPdUwsR0FBR3hRLENBQUgsQ0FBUCxDQUFmO29CQUNNa1IsUUFBUUQsT0FBT3ZKLFdBQVAsQ0FBbUIsR0FBbkIsQ0FBZDtvQkFDTXlKLFlBQWFGLE9BQU9uUixLQUFQLENBQWEsQ0FBYixFQUFnQm9SLEtBQWhCLENBQUQsQ0FBeUJyTCxPQUF6QixDQUFpQ3NFLFdBQWpDLEVBQThDTCxnQkFBOUMsRUFBZ0VqRSxPQUFoRSxDQUF3RXNFLFdBQXhFLEVBQXFGcEosV0FBckYsRUFBa0c4RSxPQUFsRyxDQUEwR3VLLGNBQTFHLEVBQTBIcEgsVUFBMUgsQ0FBbEI7b0JBQ0lvSSxTQUFTSCxPQUFPblIsS0FBUCxDQUFhb1IsUUFBUSxDQUFyQixDQUFiOztvQkFHSTs2QkFDTyxDQUFDakUsUUFBUUMsR0FBVCxHQUFlcEUsU0FBU0QsT0FBVCxDQUFpQitHLGtCQUFrQndCLE1BQWxCLEVBQTBCbkUsT0FBMUIsRUFBbUNuTSxXQUFuQyxFQUFqQixDQUFmLEdBQW9GZ0ksU0FBU0gsU0FBVCxDQUFtQnlJLE1BQW5CLENBQTlGO2lCQURELENBRUUsT0FBT2pJLENBQVAsRUFBVTsrQkFDQWhFLEtBQVgsR0FBbUJ5RSxXQUFXekUsS0FBWCxJQUFvQiwwREFBMEQsQ0FBQzhILFFBQVFDLEdBQVQsR0FBZSxPQUFmLEdBQXlCLFNBQW5GLElBQWdHLGlCQUFoRyxHQUFvSC9ELENBQTNKOzttQkFHRW5KLENBQUgsSUFBUW1SLFlBQVksR0FBWixHQUFrQkMsTUFBMUI7O3VCQUdVM0csSUFBWCxHQUFrQitGLEdBQUd2USxJQUFILENBQVEsR0FBUixDQUFsQjs7WUFHS3lRLFVBQVVILGlCQUFpQkcsT0FBakIsR0FBMkJILGlCQUFpQkcsT0FBakIsSUFBNEIsRUFBdkU7WUFFSUgsaUJBQWlCTyxPQUFyQixFQUE4QkosUUFBUSxTQUFSLElBQXFCSCxpQkFBaUJPLE9BQXRDO1lBQzFCUCxpQkFBaUJRLElBQXJCLEVBQTJCTCxRQUFRLE1BQVIsSUFBa0JILGlCQUFpQlEsSUFBbkM7WUFFckIvRSxTQUFTLEVBQWY7YUFDSyxJQUFNcUYsSUFBWCxJQUFtQlgsT0FBbkIsRUFBNEI7Z0JBQ3ZCQSxRQUFRVyxJQUFSLE1BQWtCdEIsRUFBRXNCLElBQUYsQ0FBdEIsRUFBK0I7dUJBQ3ZCL0ssSUFBUCxDQUNDK0ssS0FBS3hMLE9BQUwsQ0FBYXNFLFdBQWIsRUFBMEJMLGdCQUExQixFQUE0Q2pFLE9BQTVDLENBQW9Ec0UsV0FBcEQsRUFBaUVwSixXQUFqRSxFQUE4RThFLE9BQTlFLENBQXNGd0ssVUFBdEYsRUFBa0dySCxVQUFsRyxJQUNBLEdBREEsR0FFQTBILFFBQVFXLElBQVIsRUFBY3hMLE9BQWQsQ0FBc0JzRSxXQUF0QixFQUFtQ0wsZ0JBQW5DLEVBQXFEakUsT0FBckQsQ0FBNkRzRSxXQUE3RCxFQUEwRXBKLFdBQTFFLEVBQXVGOEUsT0FBdkYsQ0FBK0Z5SyxXQUEvRixFQUE0R3RILFVBQTVHLENBSEQ7OztZQU9FZ0QsT0FBT25NLE1BQVgsRUFBbUI7dUJBQ1ArSyxLQUFYLEdBQW1Cb0IsT0FBTy9MLElBQVAsQ0FBWSxHQUFaLENBQW5COztlQUdNMkosVUFBUDs7Q0F6R0YsQ0E2R0E7O0FDbktBLElBQU0wSCxZQUFZLGlCQUFsQjs7QUFJQSxJQUFNekIsWUFBcUQ7WUFDakQsS0FEaUQ7V0FHbEQsa0JBQVVqRyxVQUFWLEVBQW9DcUQsT0FBcEMsRUFBVDtZQUNRL0IsVUFBVXRCLFdBQVdhLElBQVgsSUFBbUJiLFdBQVdhLElBQVgsQ0FBZ0JULEtBQWhCLENBQXNCc0gsU0FBdEIsQ0FBbkM7WUFDSUMsZ0JBQWdCM0gsVUFBcEI7WUFFSXNCLE9BQUosRUFBYTtnQkFDTmhCLFNBQVMrQyxRQUFRL0MsTUFBUixJQUFrQnFILGNBQWNySCxNQUFoQyxJQUEwQyxLQUF6RDtnQkFDTXNILE1BQU10RyxRQUFRLENBQVIsRUFBV3BLLFdBQVgsRUFBWjtnQkFDTTJRLE1BQU12RyxRQUFRLENBQVIsQ0FBWjtnQkFDTXdHLFlBQWV4SCxNQUFmLFVBQXlCK0MsUUFBUXVFLEdBQVIsSUFBZUEsR0FBeEMsQ0FBTjtnQkFDTS9ELGdCQUFnQjFFLFFBQVEySSxTQUFSLENBQXRCOzBCQUVjRixHQUFkLEdBQW9CQSxHQUFwQjswQkFDY0MsR0FBZCxHQUFvQkEsR0FBcEI7MEJBQ2NoSCxJQUFkLEdBQXFCbkssU0FBckI7Z0JBRUltTixhQUFKLEVBQW1CO2dDQUNGQSxjQUFjVixLQUFkLENBQW9Cd0UsYUFBcEIsRUFBbUN0RSxPQUFuQyxDQUFoQjs7U0FaRixNQWNPOzBCQUNROUgsS0FBZCxHQUFzQm9NLGNBQWNwTSxLQUFkLElBQXVCLHdCQUE3Qzs7ZUFHTW9NLGFBQVA7S0F6QnlEO2VBNEI5QyxzQkFBVUEsYUFBVixFQUF1Q3RFLE9BQXZDLEVBQWI7WUFDUS9DLFNBQVMrQyxRQUFRL0MsTUFBUixJQUFrQnFILGNBQWNySCxNQUFoQyxJQUEwQyxLQUF6RDtZQUNNc0gsTUFBTUQsY0FBY0MsR0FBMUI7WUFDTUUsWUFBZXhILE1BQWYsVUFBeUIrQyxRQUFRdUUsR0FBUixJQUFlQSxHQUF4QyxDQUFOO1lBQ00vRCxnQkFBZ0IxRSxRQUFRMkksU0FBUixDQUF0QjtZQUVJakUsYUFBSixFQUFtQjs0QkFDRkEsY0FBY2dCLFNBQWQsQ0FBd0I4QyxhQUF4QixFQUF1Q3RFLE9BQXZDLENBQWhCOztZQUdLMEUsZ0JBQWdCSixhQUF0QjtZQUNNRSxNQUFNRixjQUFjRSxHQUExQjtzQkFDY2hILElBQWQsSUFBd0IrRyxPQUFPdkUsUUFBUXVFLEdBQXZDLFVBQThDQyxHQUE5QztlQUVPRSxhQUFQOztDQTFDRixDQThDQTs7QUM1REEsSUFBTUMsT0FBTywwREFBYjs7QUFJQSxJQUFNL0IsWUFBc0U7WUFDbEUsVUFEa0U7V0FHbkUsZUFBVTBCLGFBQVYsRUFBdUN0RSxPQUF2QyxFQUFUO1lBQ1E0RSxpQkFBaUJOLGFBQXZCO3VCQUNlTyxJQUFmLEdBQXNCRCxlQUFlSixHQUFyQzt1QkFDZUEsR0FBZixHQUFxQm5SLFNBQXJCO1lBRUksQ0FBQzJNLFFBQVErQixRQUFULEtBQXNCLENBQUM2QyxlQUFlQyxJQUFoQixJQUF3QixDQUFDRCxlQUFlQyxJQUFmLENBQW9COUgsS0FBcEIsQ0FBMEI0SCxJQUExQixDQUEvQyxDQUFKLEVBQXFGOzJCQUNyRXpNLEtBQWYsR0FBdUIwTSxlQUFlMU0sS0FBZixJQUF3QixvQkFBL0M7O2VBR00wTSxjQUFQO0tBWjBFO2VBZS9ELG1CQUFVQSxjQUFWLEVBQXlDNUUsT0FBekMsRUFBYjtZQUNRc0UsZ0JBQWdCTSxjQUF0Qjs7c0JBRWNKLEdBQWQsR0FBb0IsQ0FBQ0ksZUFBZUMsSUFBZixJQUF1QixFQUF4QixFQUE0QmhSLFdBQTVCLEVBQXBCO2VBQ095USxhQUFQOztDQW5CRixDQXVCQTs7QUNoQ0F4SSxRQUFRK0csUUFBSzVGLE1BQWIsSUFBdUI0RixPQUF2QjtBQUdBL0csUUFBUWdKLFVBQU03SCxNQUFkLElBQXdCNkgsU0FBeEI7QUFHQWhKLFFBQVFpSixVQUFPOUgsTUFBZixJQUF5QjhILFNBQXpCO0FBR0FqSixRQUFRa0osVUFBSS9ILE1BQVosSUFBc0IrSCxTQUF0QjtBQUdBbEosUUFBUStJLFVBQUs1SCxNQUFiLElBQXVCNEgsU0FBdkIsQ0FFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDWEEsaUJBQWMsR0FBRyxTQUFTLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLElBQUksQ0FBQzs7RUFFekIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLFFBQVEsSUFBSSxPQUFPLENBQUMsSUFBSSxRQUFRLEVBQUU7SUFDMUQsSUFBSSxDQUFDLENBQUMsV0FBVyxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsT0FBTyxLQUFLLENBQUM7O0lBRWxELElBQUksTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUM7SUFDcEIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO01BQ3BCLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO01BQ2xCLElBQUksTUFBTSxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxLQUFLLENBQUM7TUFDckMsS0FBSyxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxLQUFLLENBQUM7TUFDdkMsT0FBTyxJQUFJLENBQUM7S0FDYjs7OztJQUlELElBQUksQ0FBQyxDQUFDLFdBQVcsS0FBSyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ2xGLElBQUksQ0FBQyxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDL0UsSUFBSSxDQUFDLENBQUMsUUFBUSxLQUFLLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQzs7SUFFbkYsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEIsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsSUFBSSxNQUFNLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxLQUFLLENBQUM7O0lBRW5ELEtBQUssQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDO01BQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sS0FBSyxDQUFDOztJQUV0RSxLQUFLLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHO01BQzNCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzs7TUFFbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxLQUFLLENBQUM7S0FDMUM7O0lBRUQsT0FBTyxJQUFJLENBQUM7R0FDYjs7O0VBR0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDdkIsQ0FBQzs7OztBQ3pDRixjQUFjLEdBQUcsU0FBUyxVQUFVLENBQUMsR0FBRyxFQUFFO0VBQ3hDLElBQUksTUFBTSxHQUFHLENBQUM7TUFDVixHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU07TUFDaEIsR0FBRyxHQUFHLENBQUM7TUFDUCxLQUFLLENBQUM7RUFDVixPQUFPLEdBQUcsR0FBRyxHQUFHLEVBQUU7SUFDaEIsTUFBTSxFQUFFLENBQUM7SUFDVCxLQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLElBQUksS0FBSyxJQUFJLE1BQU0sSUFBSSxLQUFLLElBQUksTUFBTSxJQUFJLEdBQUcsR0FBRyxHQUFHLEVBQUU7O01BRW5ELEtBQUssR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQzVCLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxLQUFLLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztLQUN2QztHQUNGO0VBQ0QsT0FBTyxNQUFNLENBQUM7Q0FDZixDQUFDOztBQ2hCRixRQUFjLEdBQUc7RUFDZixJQUFJLEVBQUVJLE1BQUk7RUFDVixhQUFhLEVBQUUsYUFBYTtFQUM1QixjQUFjLEVBQUUsY0FBYztFQUM5QixhQUFhLEVBQUUsYUFBYTtFQUM1QixNQUFNLEVBQUUsTUFBTTtFQUNkLFdBQVcsRUFBRSxXQUFXO0VBQ3hCLFlBQVksRUFBRSxZQUFZO0VBQzFCLEtBQUssRUFBRUMsYUFBMEI7RUFDakMsVUFBVSxFQUFFQyxVQUF1QjtFQUNuQyxhQUFhLEVBQUUsYUFBYTtFQUM1QixVQUFVLEVBQUUsVUFBVTtFQUN0QixXQUFXLEVBQUUsV0FBVztFQUN4QixnQkFBZ0IsRUFBRSxnQkFBZ0I7RUFDbEMsY0FBYyxFQUFFLGNBQWM7RUFDOUIsb0JBQW9CLEVBQUUsb0JBQW9CO0VBQzFDLGtCQUFrQixFQUFFLGtCQUFrQjtFQUN0QyxjQUFjLEVBQUUsY0FBYztFQUM5QixXQUFXLEVBQUUsV0FBVztFQUN4QixPQUFPLEVBQUUsT0FBTztFQUNoQixPQUFPLEVBQUUsT0FBTztFQUNoQixnQkFBZ0IsRUFBRSxnQkFBZ0I7RUFDbEMsbUJBQW1CLEVBQUUsbUJBQW1CO0VBQ3hDLGNBQWMsRUFBRSxjQUFjO0VBQzlCLGlCQUFpQixFQUFFLGlCQUFpQjtDQUNyQyxDQUFDOzs7QUFHRixTQUFTRixNQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTtFQUNuQixFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztFQUNkLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDcEMsT0FBTyxFQUFFLENBQUM7Q0FDWDs7O0FBR0QsU0FBUyxhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7RUFDN0MsSUFBSSxLQUFLLEdBQUcsTUFBTSxHQUFHLE9BQU8sR0FBRyxPQUFPO01BQ2xDLEdBQUcsR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU07TUFDOUIsRUFBRSxHQUFHLE1BQU0sR0FBRyxHQUFHLEdBQUcsRUFBRTtNQUN0QixHQUFHLEdBQUcsTUFBTSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7RUFDNUIsUUFBUSxRQUFRO0lBQ2QsS0FBSyxNQUFNLEVBQUUsT0FBTyxJQUFJLEdBQUcsS0FBSyxHQUFHLE1BQU0sQ0FBQztJQUMxQyxLQUFLLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDO0lBQ3hELEtBQUssUUFBUSxFQUFFLE9BQU8sR0FBRyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRzswQkFDckIsU0FBUyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsVUFBVSxHQUFHLEdBQUc7MEJBQzNDLEdBQUcsR0FBRyxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQzNELEtBQUssU0FBUyxFQUFFLE9BQU8sVUFBVSxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsVUFBVSxHQUFHLEdBQUc7MkJBQzVDLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLE9BQU87MkJBQzFCLEdBQUcsR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxHQUFHLENBQUM7SUFDdkQsU0FBUyxPQUFPLFNBQVMsR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxRQUFRLEdBQUcsR0FBRyxDQUFDO0dBQ2pFO0NBQ0Y7OztBQUdELFNBQVMsY0FBYyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUU7RUFDdkMsUUFBUSxTQUFTLENBQUMsTUFBTTtJQUN0QixLQUFLLENBQUMsRUFBRSxPQUFPLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3ZEO01BQ0UsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO01BQ2QsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO01BQzlCLElBQUksS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO1FBQy9CLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLEdBQUcsSUFBSSxHQUFHLE1BQU0sQ0FBQztRQUM5QyxJQUFJLElBQUksU0FBUyxHQUFHLElBQUksR0FBRyxnQkFBZ0IsQ0FBQztRQUM1QyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDbEIsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ25CLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQztPQUNyQjtNQUNELElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUM7TUFDdkMsS0FBSyxJQUFJLENBQUMsSUFBSSxLQUFLO1FBQ2pCLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLEdBQUcsRUFBRSxLQUFLLGFBQWEsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDOztNQUUvRCxPQUFPLElBQUksQ0FBQztHQUNmO0NBQ0Y7OztBQUdELElBQUksZUFBZSxHQUFHLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQ25GLFNBQVMsYUFBYSxDQUFDLGlCQUFpQixFQUFFLFNBQVMsRUFBRTtFQUNuRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7SUFDNUIsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ2YsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7TUFDckMsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3JCLElBQUksZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1dBQzNDLElBQUksaUJBQWlCLEtBQUssT0FBTyxJQUFJLENBQUMsS0FBSyxPQUFPLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDbEY7SUFDRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsT0FBTyxLQUFLLENBQUM7R0FDaEMsTUFBTSxJQUFJLGVBQWUsQ0FBQyxTQUFTLENBQUMsRUFBRTtJQUNyQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7R0FDcEIsTUFBTSxJQUFJLGlCQUFpQixLQUFLLE9BQU8sSUFBSSxTQUFTLEtBQUssT0FBTyxFQUFFO0lBQ2pFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztHQUNsQjtDQUNGOzs7QUFHRCxTQUFTLE1BQU0sQ0FBQyxHQUFHLEVBQUU7RUFDbkIsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0VBQ2QsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztFQUNyRCxPQUFPLElBQUksQ0FBQztDQUNiOzs7QUFHRCxJQUFJLFVBQVUsR0FBRyx1QkFBdUIsQ0FBQztBQUN6QyxJQUFJLFlBQVksR0FBRyxPQUFPLENBQUM7QUFDM0IsU0FBUyxXQUFXLENBQUMsR0FBRyxFQUFFO0VBQ3hCLE9BQU8sT0FBTyxHQUFHLElBQUksUUFBUTtZQUNuQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7WUFDZixVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztjQUNsQixHQUFHLEdBQUcsR0FBRztjQUNULElBQUksR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQzdDOzs7QUFHRCxTQUFTLFlBQVksQ0FBQyxHQUFHLEVBQUU7RUFDekIsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUM7YUFDN0IsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUM7YUFDckIsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUM7YUFDckIsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUM7YUFDckIsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztDQUNsQzs7O0FBR0QsU0FBUyxhQUFhLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRTtFQUNuQyxPQUFPLElBQUksUUFBUSxDQUFDO0VBQ3BCLElBQUksT0FBTyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDbEQsT0FBTyxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7Q0FDckM7OztBQUdELFNBQVMsVUFBVSxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFO0VBQ3RDLE9BQU8sSUFBSSxVQUFVLENBQUM7RUFDdEIsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0VBQ25DLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO0NBQzNEOzs7QUFHRCxJQUFJLFVBQVUsR0FBRyxlQUFlO0lBQzVCLGdCQUFnQixHQUFHLHNDQUFzQztJQUN6RCxrQkFBa0IsR0FBRyw2Q0FBNkMsQ0FBQztBQUN2RSxTQUFTLFdBQVcsQ0FBQyxHQUFHLEVBQUU7RUFDeEIsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7YUFDdkIsT0FBTyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQzthQUM3QixPQUFPLENBQUMsa0JBQWtCLEVBQUUsWUFBWSxDQUFDLENBQUM7Q0FDdEQ7OztBQUdELElBQUksYUFBYSxHQUFHLGNBQWM7SUFDOUIsYUFBYSxHQUFHLGlFQUFpRTtJQUNqRixtQkFBbUIsR0FBRyxzQ0FBc0M7SUFDNUQsWUFBWSxHQUFHLHNCQUFzQjtJQUNyQyxXQUFXLEdBQUcsc0NBQXNDO0lBQ3BELFlBQVksR0FBRywrRUFBK0U7SUFDOUYsaUJBQWlCLEdBQUcsY0FBYztJQUNsQyxlQUFlLEdBQUcsb0NBQW9DO0lBQ3RELGVBQWUsR0FBRyxnREFBZ0QsQ0FBQzs7QUFFdkUsU0FBUyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFO0VBQ3BDLElBQUksT0FBTyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7RUFDdkMsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7SUFDbEMsR0FBRyxHQUFHLEtBQUs7WUFDSCxHQUFHLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFLEVBQUUsQ0FBQztnQkFDaEMsT0FBTyxDQUFDLFlBQVksRUFBRSxpQkFBaUIsQ0FBQztZQUM1QyxHQUFHLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUM7Z0JBQzFCLE9BQU8sQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUM7R0FDaEQ7O0VBRUQsT0FBTyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7RUFDckMsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxPQUFPLEdBQUcsQ0FBQztFQUNqRCxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ3pDOzs7QUFHRCxTQUFTLGNBQWMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFO0VBQ3JDLElBQUksT0FBTyxNQUFNLElBQUksU0FBUyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUM7RUFDL0MsS0FBSyxJQUFJLEdBQUcsSUFBSSxNQUFNLEVBQUUsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxJQUFJLENBQUM7Q0FDckQ7OztBQUdELFNBQVMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUU7RUFDMUQsSUFBSSxPQUFPLE1BQU0sSUFBSSxTQUFTLEVBQUUsT0FBTyxDQUFDLE1BQU0sSUFBSSxhQUFhLElBQUksS0FBSyxDQUFDO0VBQ3pFLEtBQUssSUFBSSxHQUFHLElBQUksTUFBTSxFQUFFLElBQUksR0FBRyxJQUFJLGFBQWEsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxJQUFJLENBQUM7Q0FDN0U7OztBQUdELFNBQVMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRTtFQUN6QyxJQUFJLE9BQU8sTUFBTSxJQUFJLFNBQVMsRUFBRSxPQUFPO0VBQ3ZDLEtBQUssSUFBSSxHQUFHLElBQUksTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxHQUFHLENBQUM7Q0FDckQ7OztBQUdELFNBQVMsY0FBYyxDQUFDLEdBQUcsRUFBRTtFQUMzQixPQUFPLElBQUksR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ3hDOzs7QUFHRCxTQUFTLFdBQVcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUU7RUFDOUQsSUFBSSxJQUFJLEdBQUcsWUFBWTtnQkFDVCxVQUFVLEdBQUcsSUFBSSxJQUFJLFFBQVEsR0FBRyxFQUFFLEdBQUcsZ0RBQWdELENBQUM7aUJBQ3JGLFFBQVEsR0FBRyxVQUFVLEdBQUcsSUFBSSxHQUFHLFVBQVUsR0FBRyxjQUFjLEdBQUcsSUFBSSxHQUFHLGNBQWMsQ0FBQyxDQUFDO0VBQ25HLE9BQU8sU0FBUyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztDQUNyQzs7O0FBR0QsU0FBUyxPQUFPLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUU7RUFDaEQsSUFBSSxJQUFJLEdBQUcsWUFBWTtnQkFDVCxjQUFjLENBQUMsR0FBRyxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM3QyxjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDaEQsT0FBTyxTQUFTLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO0NBQ3JDOzs7QUFHRCxJQUFJLFlBQVksR0FBRyxxQkFBcUIsQ0FBQztBQUN6QyxJQUFJLHFCQUFxQixHQUFHLGtDQUFrQyxDQUFDO0FBQy9ELFNBQVMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFO0VBQ2xDLElBQUksRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDO0VBQ25DLElBQUksS0FBSyxLQUFLLEVBQUUsRUFBRSxPQUFPLFVBQVUsQ0FBQztFQUNwQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUU7SUFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUNqRixXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLElBQUksR0FBRyxVQUFVLENBQUM7R0FDbkIsTUFBTTtJQUNMLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDN0MsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQ2hFLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQixXQUFXLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLElBQUksV0FBVyxJQUFJLEdBQUcsRUFBRTtNQUN0QixJQUFJLEVBQUUsSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsR0FBRyxFQUFFLEdBQUcsK0JBQStCLEdBQUcsR0FBRyxDQUFDLENBQUM7TUFDN0csT0FBTyxLQUFLLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0tBQ3hCOztJQUVELElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixHQUFHLEVBQUUsR0FBRywrQkFBK0IsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNsRyxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNuQyxJQUFJLENBQUMsV0FBVyxFQUFFLE9BQU8sSUFBSSxDQUFDO0dBQy9COztFQUVELElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztFQUNoQixJQUFJLFFBQVEsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3RDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ3BDLElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQixJQUFJLE9BQU8sRUFBRTtNQUNYLElBQUksSUFBSSxXQUFXLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztNQUNsRCxJQUFJLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztLQUN2QjtHQUNGO0VBQ0QsT0FBTyxJQUFJLENBQUM7Q0FDYjs7O0FBR0QsU0FBUyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUN4QixJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7RUFDeEIsT0FBTyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDL0M7OztBQUdELFNBQVMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFO0VBQzdCLE9BQU8sbUJBQW1CLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztDQUNyRDs7O0FBR0QsU0FBUyxjQUFjLENBQUMsR0FBRyxFQUFFO0VBQzNCLE9BQU8sa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztDQUNuRDs7O0FBR0QsU0FBUyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7RUFDOUIsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0NBQ3JEOzs7QUFHRCxTQUFTLG1CQUFtQixDQUFDLEdBQUcsRUFBRTtFQUNoQyxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDcEQ7O0FDN1FELGNBQWMsR0FBRyxZQUFZLENBQUM7O0FBRTlCLFNBQVMsWUFBWSxDQUFDLEdBQUcsRUFBRTtFQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztDQUN0Qjs7O0FDUkQ7QUFFQSxJQUFJLFFBQVEsR0FBRyxjQUFjLEdBQUcsVUFBVSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRTs7RUFFMUQsSUFBSSxPQUFPLElBQUksSUFBSSxVQUFVLEVBQUU7SUFDN0IsRUFBRSxHQUFHLElBQUksQ0FBQztJQUNWLElBQUksR0FBRyxFQUFFLENBQUM7R0FDWDs7RUFFRCxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUM7RUFDbkIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxVQUFVLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7RUFDbkUsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDLElBQUksSUFBSSxXQUFXLEVBQUUsQ0FBQzs7RUFFcEMsU0FBUyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7Q0FDaEQsQ0FBQzs7O0FBR0YsUUFBUSxDQUFDLFFBQVEsR0FBRztFQUNsQixlQUFlLEVBQUUsSUFBSTtFQUNyQixLQUFLLEVBQUUsSUFBSTtFQUNYLFFBQVEsRUFBRSxJQUFJO0VBQ2Qsb0JBQW9CLEVBQUUsSUFBSTtFQUMxQixhQUFhLEVBQUUsSUFBSTtFQUNuQixHQUFHLEVBQUUsSUFBSTtDQUNWLENBQUM7O0FBRUYsUUFBUSxDQUFDLGFBQWEsR0FBRztFQUN2QixLQUFLLEVBQUUsSUFBSTtFQUNYLEtBQUssRUFBRSxJQUFJO0VBQ1gsS0FBSyxFQUFFLElBQUk7RUFDWCxLQUFLLEVBQUUsSUFBSTtDQUNaLENBQUM7O0FBRUYsUUFBUSxDQUFDLGFBQWEsR0FBRztFQUN2QixXQUFXLEVBQUUsSUFBSTtFQUNqQixVQUFVLEVBQUUsSUFBSTtFQUNoQixpQkFBaUIsRUFBRSxJQUFJO0VBQ3ZCLFlBQVksRUFBRSxJQUFJO0NBQ25CLENBQUM7O0FBRUYsUUFBUSxDQUFDLFlBQVksR0FBRztFQUN0QixPQUFPLEVBQUUsSUFBSTtFQUNiLElBQUksRUFBRSxJQUFJO0VBQ1YsS0FBSyxFQUFFLElBQUk7RUFDWCxRQUFRLEVBQUUsSUFBSTtFQUNkLE9BQU8sRUFBRSxJQUFJO0VBQ2IsT0FBTyxFQUFFLElBQUk7RUFDYixnQkFBZ0IsRUFBRSxJQUFJO0VBQ3RCLGdCQUFnQixFQUFFLElBQUk7RUFDdEIsVUFBVSxFQUFFLElBQUk7RUFDaEIsU0FBUyxFQUFFLElBQUk7RUFDZixTQUFTLEVBQUUsSUFBSTtFQUNmLE9BQU8sRUFBRSxJQUFJO0VBQ2IsTUFBTSxFQUFFLElBQUk7RUFDWixRQUFRLEVBQUUsSUFBSTtFQUNkLFFBQVEsRUFBRSxJQUFJO0VBQ2QsV0FBVyxFQUFFLElBQUk7RUFDakIsYUFBYSxFQUFFLElBQUk7RUFDbkIsYUFBYSxFQUFFLElBQUk7Q0FDcEIsQ0FBQzs7O0FBR0YsU0FBUyxTQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFO0VBQ3JILElBQUksTUFBTSxJQUFJLE9BQU8sTUFBTSxJQUFJLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7SUFDakUsR0FBRyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZGLEtBQUssSUFBSSxHQUFHLElBQUksTUFBTSxFQUFFO01BQ3RCLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUN0QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDdEIsSUFBSSxHQUFHLElBQUksUUFBUSxDQUFDLGFBQWEsRUFBRTtVQUNqQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUU7WUFDN0IsU0FBUyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztTQUMxRztPQUNGLE1BQU0sSUFBSSxHQUFHLElBQUksUUFBUSxDQUFDLGFBQWEsRUFBRTtRQUN4QyxJQUFJLEdBQUcsSUFBSSxPQUFPLEdBQUcsSUFBSSxRQUFRLEVBQUU7VUFDakMsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHO1lBQ2xCLFNBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDbEk7T0FDRixNQUFNLElBQUksR0FBRyxJQUFJLFFBQVEsQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLEdBQUcsSUFBSSxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRTtRQUN4RixTQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE9BQU8sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO09BQ3hGO0tBQ0Y7SUFDRCxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUM7R0FDekY7Q0FDRjs7O0FBR0QsU0FBUyxhQUFhLENBQUMsR0FBRyxFQUFFO0VBQzFCLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztDQUNyRDs7O0FDaEZELGFBQWMsR0FBRyxPQUFPLENBQUM7O0FBRXpCLE9BQU8sQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0FBQ2xDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDO0FBQy9CLE9BQU8sQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDO0FBQ3pCLE9BQU8sQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDO0FBQ3pCLE9BQU8sQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0FBQzlCLE9BQU8sQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDOzs7Ozs7Ozs7O0FBVS9CLFNBQVMsT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFOztFQUVuQyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzdCLElBQUksT0FBTyxNQUFNLElBQUksUUFBUSxFQUFFO0lBQzdCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMvQyxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7R0FDdkQ7O0VBRUQsTUFBTSxHQUFHLE1BQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3RDLElBQUksTUFBTSxZQUFZRyxVQUFZLEVBQUU7SUFDbEMsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztjQUM1QyxNQUFNLENBQUMsTUFBTTtjQUNiLE1BQU0sQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztHQUNwRDs7RUFFRCxJQUFJLEdBQUcsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDOUMsSUFBSSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQztFQUN0QixJQUFJLEdBQUcsRUFBRTtJQUNQLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO0lBQ3BCLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO0lBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO0dBQ3JCOztFQUVELElBQUksTUFBTSxZQUFZQSxVQUFZLEVBQUU7SUFDbEMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0dBQ25GLE1BQU0sSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFO0lBQy9CLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO1VBQ3RDLE1BQU07VUFDTixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztHQUMzRDs7RUFFRCxPQUFPLENBQUMsQ0FBQztDQUNWOzs7Ozs7Ozs7O0FBVUQsU0FBUyxhQUFhLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRTs7RUFFaEMsSUFBSSxDQUFDLEdBQUdDLE9BQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO01BQ2xCLE9BQU8sR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDO01BQ3pCLE1BQU0sR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztFQUNuRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksT0FBTyxLQUFLLE1BQU0sRUFBRTtJQUMvRCxJQUFJLEVBQUUsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1QixJQUFJLE9BQU8sTUFBTSxJQUFJLFFBQVEsRUFBRTtNQUM3QixPQUFPLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztLQUNyRCxNQUFNLElBQUksTUFBTSxZQUFZRCxVQUFZLEVBQUU7TUFDekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUM1QyxJQUFJLEdBQUcsTUFBTSxDQUFDO0tBQ2YsTUFBTTtNQUNMLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO01BQzNCLElBQUksTUFBTSxZQUFZQSxVQUFZLEVBQUU7UUFDbEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1QyxJQUFJLEVBQUUsSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDO1VBQ3hCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3hELElBQUksR0FBRyxNQUFNLENBQUM7T0FDZixNQUFNO1FBQ0wsT0FBTztPQUNSO0tBQ0Y7SUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPO0lBQ3pCLE1BQU0sR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztHQUNoRDtFQUNELE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0NBQ2hFOzs7O0FBSUQsU0FBUyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRTs7RUFFOUMsSUFBSSxHQUFHLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQzlDLElBQUksR0FBRyxFQUFFO0lBQ1AsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztJQUN4QixJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO0lBQ3hCLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO0lBQ2hCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0IsSUFBSSxFQUFFLEVBQUUsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDeEMsT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztHQUNuRTtDQUNGOzs7QUFHRCxJQUFJLG9CQUFvQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDOztBQUVuSCxTQUFTLGNBQWMsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7O0VBRXZELFNBQVMsQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7RUFDOUMsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLE9BQU87RUFDakQsSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7O0VBRTFDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ3JDLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQixJQUFJLElBQUksRUFBRTtNQUNSLElBQUksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDbkMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUN0QixJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUUsTUFBTTtNQUNoQyxJQUFJLEVBQUUsQ0FBQztNQUNQLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUMvQixFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QixJQUFJLEVBQUUsRUFBRSxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN4QyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUU7VUFDZixJQUFJLElBQUksR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztVQUMzQyxJQUFJLEdBQUcsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7VUFDL0MsSUFBSSxHQUFHLEVBQUU7WUFDUCxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztZQUNwQixJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztZQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztXQUNyQjtTQUNGO09BQ0Y7S0FDRjtHQUNGO0VBQ0QsSUFBSSxNQUFNLEtBQUssU0FBUyxJQUFJLE1BQU0sS0FBSyxJQUFJLENBQUMsTUFBTTtJQUNoRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQztDQUN6RDs7O0FBR0QsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztFQUMvQixNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVM7RUFDM0IsV0FBVyxFQUFFLFdBQVc7RUFDeEIsZUFBZSxFQUFFLGVBQWU7RUFDaEMsVUFBVSxFQUFFLFVBQVU7RUFDdEIsU0FBUyxFQUFFLFNBQVM7RUFDcEIsYUFBYSxFQUFFLFlBQVk7RUFDM0IsVUFBVSxFQUFFLE1BQU07Q0FDbkIsQ0FBQyxDQUFDO0FBQ0gsU0FBUyxTQUFTLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRTtFQUNoQyxJQUFJLEtBQUssS0FBSyxLQUFLLEVBQUUsT0FBTyxLQUFLLENBQUM7RUFDbEMsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUUsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7T0FDaEUsSUFBSSxLQUFLLEVBQUUsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDO0NBQ25EOzs7QUFHRCxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUU7RUFDMUIsSUFBSSxJQUFJLENBQUM7RUFDVCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7SUFDekIsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7TUFDbEMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNqQixJQUFJLE9BQU8sSUFBSSxJQUFJLFFBQVEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEtBQUssQ0FBQztLQUNoRTtHQUNGLE1BQU07SUFDTCxLQUFLLElBQUksR0FBRyxJQUFJLE1BQU0sRUFBRTtNQUN0QixJQUFJLEdBQUcsSUFBSSxNQUFNLEVBQUUsT0FBTyxLQUFLLENBQUM7TUFDaEMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUNuQixJQUFJLE9BQU8sSUFBSSxJQUFJLFFBQVEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEtBQUssQ0FBQztLQUNoRTtHQUNGO0VBQ0QsT0FBTyxJQUFJLENBQUM7Q0FDYjs7O0FBR0QsU0FBUyxTQUFTLENBQUMsTUFBTSxFQUFFO0VBQ3pCLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUM7RUFDcEIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0lBQ3pCLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO01BQ2xDLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDakIsSUFBSSxPQUFPLElBQUksSUFBSSxRQUFRLEVBQUUsS0FBSyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUN0RCxJQUFJLEtBQUssSUFBSSxRQUFRLEVBQUUsT0FBTyxRQUFRLENBQUM7S0FDeEM7R0FDRixNQUFNO0lBQ0wsS0FBSyxJQUFJLEdBQUcsSUFBSSxNQUFNLEVBQUU7TUFDdEIsSUFBSSxHQUFHLElBQUksTUFBTSxFQUFFLE9BQU8sUUFBUSxDQUFDO01BQ25DLElBQUksY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ3ZCLEtBQUssRUFBRSxDQUFDO09BQ1QsTUFBTTtRQUNMLElBQUksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkIsSUFBSSxPQUFPLElBQUksSUFBSSxRQUFRLEVBQUUsS0FBSyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUQsSUFBSSxLQUFLLElBQUksUUFBUSxFQUFFLE9BQU8sUUFBUSxDQUFDO09BQ3hDO0tBQ0Y7R0FDRjtFQUNELE9BQU8sS0FBSyxDQUFDO0NBQ2Q7OztBQUdELFNBQVMsV0FBVyxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUU7RUFDbEMsSUFBSSxTQUFTLEtBQUssS0FBSyxFQUFFLEVBQUUsR0FBRyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDOUMsSUFBSSxDQUFDLEdBQUdDLE9BQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDdEIsT0FBTyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDeEI7OztBQUdELFNBQVMsWUFBWSxDQUFDLENBQUMsRUFBRTtFQUN2QixPQUFPQSxPQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7Q0FDN0M7OztBQUdELElBQUksbUJBQW1CLEdBQUcsT0FBTyxDQUFDO0FBQ2xDLFNBQVMsV0FBVyxDQUFDLEVBQUUsRUFBRTtFQUN2QixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUN0RDs7O0FBR0QsU0FBUyxVQUFVLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRTtFQUM5QixFQUFFLEdBQUcsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3JCLE9BQU9BLE9BQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ2hDOzs7O0FBSUQsU0FBUyxVQUFVLENBQUMsTUFBTSxFQUFFO0VBQzFCLElBQUksUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7RUFDaEQsSUFBSSxPQUFPLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7RUFDN0IsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFLEVBQUUsV0FBVyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0VBQ25ELElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztFQUNuQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7O0VBRWhCQyxrQkFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxTQUFTLEdBQUcsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRTtJQUN6SCxJQUFJLE9BQU8sS0FBSyxFQUFFLEVBQUUsT0FBTztJQUMzQixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNwQyxJQUFJLFFBQVEsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxHQUFHLGFBQWEsQ0FBQztJQUM5RCxJQUFJLFFBQVEsS0FBSyxTQUFTO01BQ3hCLFFBQVEsSUFBSSxHQUFHLElBQUksT0FBTyxRQUFRLElBQUksUUFBUSxHQUFHLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7O0lBRTdGLElBQUksT0FBTyxFQUFFLElBQUksUUFBUSxFQUFFO01BQ3pCLEVBQUUsR0FBRyxNQUFNLEdBQUcsV0FBVyxDQUFDLE1BQU0sR0FBR0QsT0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7O01BRWpFLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7TUFDNUIsSUFBSSxPQUFPLE1BQU0sSUFBSSxRQUFRLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDM0QsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRTtRQUMzQixJQUFJLENBQUMvQyxhQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUM7VUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLG9DQUFvQyxDQUFDLENBQUM7T0FDdkUsTUFBTSxJQUFJLEVBQUUsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUU7UUFDdEMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFO1VBQ2hCLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUNBLGFBQUssQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxvQ0FBb0MsQ0FBQyxDQUFDO1VBQ3RFLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7U0FDckIsTUFBTTtVQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDO1NBQzNCO09BQ0Y7S0FDRjtJQUNELE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDMUIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLFFBQVEsQ0FBQztHQUMvQixDQUFDLENBQUM7O0VBRUgsT0FBTyxTQUFTLENBQUM7Q0FDbEI7O0FDelFELGlCQUFjLEdBQUc7RUFDZixVQUFVLEVBQUUsYUFBYSxDQUFDLGVBQWUsQ0FBQztFQUMxQyxVQUFVLEVBQUUsYUFBYSxDQUFDLGVBQWUsQ0FBQztDQUMzQyxDQUFDOzs7QUFHRixTQUFTLGVBQWUsQ0FBQyxNQUFNLEVBQUU7RUFDL0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxtQkFBbUIsQ0FBQztFQUNuQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztFQUNyQixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0NBQ25DOzs7QUFHRCxlQUFlLENBQUMsT0FBTyxHQUFHLFVBQVUsTUFBTSxFQUFFLEdBQUcsRUFBRTtFQUMvQyxPQUFPLDJCQUEyQixHQUFHLEdBQUcsR0FBRyxXQUFXLEdBQUcsTUFBTSxDQUFDO0NBQ2pFLENBQUM7OztBQUdGLFNBQVMsZUFBZSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFO0VBQzdDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxJQUFJLGVBQWUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQy9ELElBQUksQ0FBQyxVQUFVLEdBQUdOLFNBQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQzNDLElBQUksQ0FBQyxhQUFhLEdBQUdBLFNBQU8sQ0FBQyxXQUFXLENBQUNBLFNBQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7Q0FDN0U7OztBQUdELFNBQVMsYUFBYSxDQUFDLFFBQVEsRUFBRTtFQUMvQixRQUFRLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0VBQ3BELFFBQVEsQ0FBQyxTQUFTLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQztFQUMxQyxPQUFPLFFBQVEsQ0FBQztDQUNqQjs7QUMvQkQsMkJBQWMsR0FBRyxVQUFVLElBQUksRUFBRSxJQUFJLEVBQUU7SUFDbkMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLElBQUksT0FBTyxJQUFJLEtBQUssVUFBVSxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUNyRCxJQUFJLE1BQU0sR0FBRyxDQUFDLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7O0lBRXRFLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtRQUNoQyxPQUFPLFVBQVUsSUFBSSxFQUFFO1lBQ25CLE9BQU8sVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFO2dCQUNuQixJQUFJLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN0QyxJQUFJLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN0QyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDeEIsQ0FBQztTQUNMLENBQUM7S0FDTCxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzs7SUFFYixJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7SUFDZCxPQUFPLENBQUMsU0FBUyxTQUFTLEVBQUUsSUFBSSxFQUFFO1FBQzlCLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLFVBQVUsRUFBRTtZQUMxRCxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ3hCOztRQUVELElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRSxPQUFPO1FBQy9CLElBQUksT0FBTyxJQUFJLElBQUksUUFBUSxFQUFFLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsTUFBTSxDQUFDO1FBQ3hFLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7UUFFMUQsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDO1FBQ1gsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3JCLEdBQUcsR0FBRyxHQUFHLENBQUM7WUFDVixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzlCLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUM7Z0JBQ2xCLEdBQUcsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDO2FBQ3ZDO1lBQ0QsT0FBTyxHQUFHLEdBQUcsR0FBRyxDQUFDO1NBQ3BCOztRQUVELElBQUksSUFBSSxLQUFLLElBQUksRUFBRSxPQUFPLE1BQU0sQ0FBQzs7UUFFakMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQzNCLElBQUksTUFBTSxFQUFFLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMvQyxNQUFNLElBQUksU0FBUyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7U0FDaEU7O1FBRUQsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEMsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3BELEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDVCxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDOUIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLElBQUksS0FBSyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzs7WUFFakMsSUFBSSxDQUFDLEtBQUssRUFBRSxTQUFTO1lBQ3JCLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUM7WUFDcEIsR0FBRyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQztTQUM1QztRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFCLE9BQU8sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7S0FDMUIsRUFBRSxJQUFJLENBQUMsQ0FBQztDQUNaLENBQUM7O0FDekRGLFlBQWMsR0FBRyxTQUFTLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFO0VBQ25FLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUNiLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLElBQUk7SUFDcEMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUM7SUFDNUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztFQUNsQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO0lBQzFCLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzNFLElBQUksV0FBVyxFQUFFO01BQ2YsSUFBSSxZQUFZLEdBQUcsbUJBQW1CLEdBQUcsV0FBVyxDQUFDO01BQ3JELElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLEtBQUssS0FBSyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1dBQzlELE1BQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7S0FDcEM7R0FDRjtFQUNELElBQUksRUFBRSxDQUFDLEtBQUssRUFBRTtJQUNaLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQztJQUMxQixJQUFJLE1BQU0sRUFBRTtNQUNWLEVBQUUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO01BQ2hCLEdBQUcsSUFBSSxRQUFRLENBQUM7S0FDakI7SUFDRCxHQUFHLElBQUksdUZBQXVGLENBQUM7SUFDL0YsSUFBSSxHQUFHLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRTtNQUN0RCxHQUFHLElBQUksR0FBRyxJQUFJLGlCQUFpQixHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7S0FDdEQ7R0FDRjtFQUNELElBQUksT0FBTyxFQUFFLENBQUMsTUFBTSxJQUFJLFNBQVMsSUFBSSxFQUFFLFlBQVksSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO0lBQ3RFLElBQUksUUFBUSxHQUFHLGNBQWMsQ0FBQztJQUM5QixJQUFJLElBQUksR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDO0lBQ3BCLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUM7SUFDNUIsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsQyxJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hFLElBQUksY0FBYyxHQUFHLEVBQUUsQ0FBQyxhQUFhLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQztJQUN2RCxJQUFJLGFBQWEsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3ZDLElBQUksYUFBYSxDQUFDO0lBQ2xCLElBQUksS0FBSyxHQUFHLE1BQU0sSUFBSSxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdEMsSUFBSSxNQUFNLEdBQUcsT0FBTyxHQUFHLElBQUksQ0FBQztJQUM1QixJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssS0FBSyxFQUFFO01BQ3ZCLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRTtRQUNaLGFBQWEsR0FBRyxJQUFJLENBQUM7T0FDdEIsTUFBTTtRQUNMLEdBQUcsSUFBSSxPQUFPLElBQUksTUFBTSxDQUFDLEdBQUcsWUFBWSxDQUFDO09BQzFDO01BQ0QsSUFBSSxVQUFVLEdBQUcsVUFBVSxJQUFJLEVBQUUsQ0FBQztNQUNsQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ3JCLEdBQUcsR0FBRyxFQUFFLENBQUM7TUFDVCxJQUFJLEVBQUUsQ0FBQyxZQUFZLEtBQUssS0FBSyxFQUFFO1FBQzdCLEdBQUcsSUFBSSxnQkFBZ0IsSUFBSSxhQUFhLElBQUksY0FBYyxDQUFDLEdBQUcsc0NBQXNDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLGlCQUFpQixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsZ0JBQWdCLENBQUM7UUFDeE0sSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxLQUFLLEVBQUU7VUFDOUIsR0FBRyxJQUFJLDBDQUEwQyxDQUFDO1NBQ25EO1FBQ0QsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtVQUNuQixHQUFHLElBQUksa0RBQWtELElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFdBQVcsSUFBSSxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7U0FDM0c7UUFDRCxHQUFHLElBQUksS0FBSyxDQUFDO09BQ2QsTUFBTTtRQUNMLEdBQUcsSUFBSSxNQUFNLENBQUM7T0FDZjtNQUNELElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQztNQUNoQixHQUFHLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO01BQ3ZCLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxJQUFJLGFBQWEsRUFBRTs7UUFFdEMsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFO1VBQ1osR0FBRyxJQUFJLDhCQUE4QixJQUFJLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQztTQUMxRCxNQUFNO1VBQ0wsR0FBRyxJQUFJLHNCQUFzQixJQUFJLEtBQUssQ0FBQyxHQUFHLG1CQUFtQixDQUFDO1NBQy9EO09BQ0YsTUFBTTtRQUNMLEdBQUcsSUFBSSxhQUFhLElBQUksS0FBSyxDQUFDLEdBQUcsOEVBQThFLENBQUM7T0FDakg7S0FDRixNQUFNO01BQ0wsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFO1FBQ1osSUFBSSxNQUFNLEVBQUU7VUFDVixHQUFHLElBQUksZ0JBQWdCLENBQUM7U0FDekIsTUFBTTtVQUNMLEdBQUcsSUFBSSx3Q0FBd0MsQ0FBQztTQUNqRDtPQUNGLE1BQU07UUFDTCxHQUFHLElBQUksT0FBTyxJQUFJLE1BQU0sQ0FBQyxHQUFHLFdBQVcsQ0FBQztPQUN6QztLQUNGO0lBQ0QsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFO01BQ1osR0FBRyxJQUFJLHVCQUF1QixDQUFDO0tBQ2hDO0lBQ0QsT0FBTyxHQUFHLENBQUM7R0FDWjtFQUNELElBQUksRUFBRSxDQUFDLEtBQUssRUFBRTtJQUNaLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxLQUFLO01BQ2pCLElBQUksR0FBRyxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUM7TUFDbkIsUUFBUSxHQUFHLEVBQUUsQ0FBQyxTQUFTLEdBQUcsQ0FBQztNQUMzQixLQUFLLEdBQUcsTUFBTSxDQUFDO0lBQ2pCLEVBQUUsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLEVBQUUsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDO0lBQ25DLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQztJQUNoQixFQUFFLENBQUMsV0FBVyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDN0IsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sS0FBSyxTQUFTLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7TUFDcEYsSUFBSSxXQUFXLEdBQUcsdUNBQXVDLENBQUM7TUFDMUQsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsS0FBSyxLQUFLLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7V0FDN0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztLQUNuQztJQUNELEdBQUcsSUFBSSx1QkFBdUIsQ0FBQztJQUMvQixHQUFHLElBQUksdUJBQXVCLENBQUM7SUFDL0IsR0FBRyxJQUFJLGdEQUFnRCxDQUFDO0dBQ3pELE1BQU07SUFDTCxJQUFJLElBQUksR0FBRyxFQUFFLENBQUMsS0FBSztNQUNqQixRQUFRLEdBQUcsRUFBRSxDQUFDLFNBQVM7TUFDdkIsS0FBSyxHQUFHLE1BQU0sSUFBSSxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7SUFDcEMsSUFBSSxHQUFHLEVBQUUsRUFBRSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3BELElBQUksTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7SUFDeEUsR0FBRyxJQUFJLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxZQUFZLENBQUM7R0FDN0M7RUFDRCxJQUFJLE1BQU0sR0FBRyxPQUFPLEdBQUcsSUFBSTtJQUN6QixhQUFhLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVM7SUFDbEMsZUFBZSxHQUFHLEVBQUU7SUFDcEIsZUFBZSxHQUFHLEVBQUUsQ0FBQztFQUN2QixJQUFJLGFBQWEsQ0FBQztFQUNsQixJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUk7SUFDOUIsWUFBWSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7RUFDNUMsSUFBSSxXQUFXLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO0lBQ2xFLElBQUksWUFBWSxFQUFFO01BQ2hCLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxXQUFXLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUNqRixNQUFNLElBQUksV0FBVyxJQUFJLE1BQU0sRUFBRTtNQUNoQyxXQUFXLEdBQUcsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7TUFDcEMsWUFBWSxHQUFHLElBQUksQ0FBQztLQUNyQjtHQUNGO0VBQ0QsSUFBSSxZQUFZLElBQUksV0FBVyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7SUFDM0MsV0FBVyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixZQUFZLEdBQUcsS0FBSyxDQUFDO0dBQ3RCO0VBQ0QsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxZQUFZLEVBQUU7SUFDbEMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxNQUFNLEVBQUU7TUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsR0FBRyxFQUFFLENBQUMsYUFBYSxHQUFHLDJCQUEyQixDQUFDLENBQUM7S0FDeEgsTUFBTSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksRUFBRTtNQUN0QyxZQUFZLEdBQUcsS0FBSyxDQUFDO01BQ3JCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDRDQUE0QyxHQUFHLEVBQUUsQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDLENBQUM7S0FDdkY7R0FDRjtFQUNELElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7SUFDMUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0dBQzNEO0VBQ0QsSUFBSSxXQUFXLEVBQUU7SUFDZixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO01BQ3ZCLElBQUksY0FBYyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0tBQzlFO0lBQ0QsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDOUMsSUFBSSxjQUFjLElBQUksWUFBWSxJQUFJLFdBQVcsS0FBSyxJQUFJLEtBQUssV0FBVyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUU7TUFDNUcsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDLFVBQVUsR0FBRyxPQUFPO1FBQ3ZDLGNBQWMsR0FBRyxFQUFFLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQztNQUM5QyxJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUMsVUFBVSxHQUFHLE9BQU87UUFDdkMsY0FBYyxHQUFHLEVBQUUsQ0FBQyxhQUFhLEdBQUcsT0FBTztRQUMzQyxPQUFPLEdBQUcsWUFBWSxHQUFHLGdCQUFnQixHQUFHLGVBQWUsQ0FBQztNQUM5RCxHQUFHLElBQUksT0FBTyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztNQUN2RSxJQUFJLGNBQWMsRUFBRTtRQUNsQixJQUFJLFNBQVMsR0FBRyxVQUFVLEdBQUcsSUFBSTtVQUMvQixRQUFRLEdBQUcsU0FBUyxHQUFHLElBQUksQ0FBQztRQUM5QixHQUFHLElBQUksT0FBTyxJQUFJLFNBQVMsQ0FBQyxHQUFHLFlBQVksSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDN0QsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxPQUFPLEVBQUU7VUFDbEMsR0FBRyxJQUFJLE9BQU8sSUFBSSxTQUFTLENBQUMsR0FBRyxrQ0FBa0MsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLElBQUksU0FBUyxDQUFDLEdBQUcsZ0JBQWdCLENBQUM7U0FDdEg7UUFDRCxHQUFHLElBQUksT0FBTyxJQUFJLFFBQVEsQ0FBQyxHQUFHLGdCQUFnQixDQUFDO1FBQy9DLElBQUksZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLElBQUksR0FBRyxjQUFjLENBQUM7UUFDMUIsSUFBSSxJQUFJLEVBQUU7VUFDUixJQUFJLEtBQUssRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ2hCLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztVQUN2QixPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDZCxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUN0QixJQUFJLEVBQUUsRUFBRTtjQUNOLEdBQUcsSUFBSSxPQUFPLElBQUksUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7Y0FDbkQsZUFBZSxJQUFJLEdBQUcsQ0FBQzthQUN4QjtZQUNELElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksT0FBTyxJQUFJLEtBQUssSUFBSSxPQUFPLEVBQUU7Y0FDdEQsR0FBRyxJQUFJLE9BQU8sSUFBSSxTQUFTLENBQUMsR0FBRyxtQkFBbUIsSUFBSSxLQUFLLENBQUMsR0FBRyxrQkFBa0IsSUFBSSxRQUFRLENBQUMsR0FBRyxLQUFLLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxJQUFJLEtBQUssQ0FBQyxHQUFHLE9BQU8sSUFBSSxTQUFTLENBQUMsR0FBRyxZQUFZLElBQUksS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDO2FBQy9MO1lBQ0QsSUFBSSxLQUFLLElBQUksUUFBUSxFQUFFO2NBQ3JCLEdBQUcsSUFBSSxPQUFPLElBQUksU0FBUyxDQUFDLEdBQUcsb0JBQW9CLElBQUksU0FBUyxDQUFDLEdBQUcsbUJBQW1CLElBQUksUUFBUSxDQUFDLEdBQUcsWUFBWSxJQUFJLEtBQUssQ0FBQyxHQUFHLGFBQWEsSUFBSSxLQUFLLENBQUMsR0FBRyxhQUFhLElBQUksUUFBUSxDQUFDLEdBQUcsV0FBVyxDQUFDO2FBQ3BNLE1BQU0sSUFBSSxLQUFLLElBQUksUUFBUSxJQUFJLEtBQUssSUFBSSxTQUFTLEVBQUU7Y0FDbEQsR0FBRyxJQUFJLE9BQU8sSUFBSSxTQUFTLENBQUMsR0FBRyxxQkFBcUIsSUFBSSxLQUFLLENBQUMsR0FBRyxnQkFBZ0IsSUFBSSxTQUFTLENBQUMsR0FBRyxvQkFBb0IsSUFBSSxLQUFLLENBQUMsR0FBRyxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsT0FBTyxJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztjQUM5SyxJQUFJLEtBQUssSUFBSSxTQUFTLEVBQUU7Z0JBQ3RCLEdBQUcsSUFBSSxRQUFRLElBQUksS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDO2VBQ3JDO2NBQ0QsR0FBRyxJQUFJLEtBQUssSUFBSSxRQUFRLENBQUMsR0FBRyxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDO2FBQ3JELE1BQU0sSUFBSSxLQUFLLElBQUksU0FBUyxFQUFFO2NBQzdCLEdBQUcsSUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLEdBQUcsb0JBQW9CLElBQUksS0FBSyxDQUFDLEdBQUcsWUFBWSxJQUFJLEtBQUssQ0FBQyxHQUFHLGFBQWEsSUFBSSxRQUFRLENBQUMsR0FBRyxxQkFBcUIsSUFBSSxLQUFLLENBQUMsR0FBRyxtQkFBbUIsSUFBSSxLQUFLLENBQUMsR0FBRyxVQUFVLElBQUksUUFBUSxDQUFDLEdBQUcsV0FBVyxDQUFDO2FBQzNOLE1BQU0sSUFBSSxLQUFLLElBQUksTUFBTSxFQUFFO2NBQzFCLEdBQUcsSUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLEdBQUcsZUFBZSxJQUFJLEtBQUssQ0FBQyxHQUFHLFlBQVksSUFBSSxLQUFLLENBQUMsR0FBRyxjQUFjLElBQUksUUFBUSxDQUFDLEdBQUcsV0FBVyxDQUFDO2FBQzNILE1BQU0sSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxPQUFPLElBQUksS0FBSyxJQUFJLE9BQU8sRUFBRTtjQUM3RCxHQUFHLElBQUksT0FBTyxJQUFJLFNBQVMsQ0FBQyxHQUFHLG9CQUFvQixJQUFJLFNBQVMsQ0FBQyxHQUFHLG9CQUFvQixJQUFJLFNBQVMsQ0FBQyxHQUFHLHFCQUFxQixJQUFJLEtBQUssQ0FBQyxHQUFHLFlBQVksSUFBSSxRQUFRLENBQUMsR0FBRyxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO2FBQ2pNO1dBQ0Y7U0FDRjtRQUNELEdBQUcsSUFBSSxHQUFHLElBQUksZUFBZSxDQUFDLEdBQUcsT0FBTyxJQUFJLFFBQVEsQ0FBQyxHQUFHLHNCQUFzQixDQUFDO1FBQy9FLElBQUksVUFBVSxHQUFHLFVBQVUsSUFBSSxFQUFFLENBQUM7UUFDbEMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQixHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ1QsSUFBSSxFQUFFLENBQUMsWUFBWSxLQUFLLEtBQUssRUFBRTtVQUM3QixHQUFHLElBQUksZ0JBQWdCLElBQUksYUFBYSxJQUFJLE1BQU0sQ0FBQyxHQUFHLHNDQUFzQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxpQkFBaUIsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUFHLHVCQUF1QixDQUFDO1VBQ3ZNLElBQUksWUFBWSxFQUFFO1lBQ2hCLEdBQUcsSUFBSSxFQUFFLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1dBQ3JDLE1BQU07WUFDTCxHQUFHLElBQUksRUFBRSxJQUFJLFdBQVcsQ0FBQyxDQUFDO1dBQzNCO1VBQ0QsR0FBRyxJQUFJLE9BQU8sQ0FBQztVQUNmLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssS0FBSyxFQUFFO1lBQzlCLEdBQUcsSUFBSSwwQkFBMEIsQ0FBQztZQUNsQyxJQUFJLFlBQVksRUFBRTtjQUNoQixHQUFHLElBQUksRUFBRSxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUNyQyxNQUFNO2NBQ0wsR0FBRyxJQUFJLEVBQUUsSUFBSSxXQUFXLENBQUMsQ0FBQzthQUMzQjtZQUNELEdBQUcsSUFBSSxLQUFLLENBQUM7V0FDZDtVQUNELElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDbkIsR0FBRyxJQUFJLDRCQUE0QixJQUFJLFdBQVcsQ0FBQyxHQUFHLGtDQUFrQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxXQUFXLElBQUksS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO1dBQzFJO1VBQ0QsR0FBRyxJQUFJLEtBQUssQ0FBQztTQUNkLE1BQU07VUFDTCxHQUFHLElBQUksTUFBTSxDQUFDO1NBQ2Y7UUFDRCxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUM7UUFDaEIsR0FBRyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsSUFBSSxhQUFhLEVBQUU7O1VBRXRDLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRTtZQUNaLEdBQUcsSUFBSSw4QkFBOEIsSUFBSSxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7V0FDMUQsTUFBTTtZQUNMLEdBQUcsSUFBSSxzQkFBc0IsSUFBSSxLQUFLLENBQUMsR0FBRyxtQkFBbUIsQ0FBQztXQUMvRDtTQUNGLE1BQU07VUFDTCxHQUFHLElBQUksYUFBYSxJQUFJLEtBQUssQ0FBQyxHQUFHLDhFQUE4RSxDQUFDO1NBQ2pIO1FBQ0QsR0FBRyxJQUFJLGFBQWEsQ0FBQztRQUNyQixJQUFJLFdBQVcsR0FBRyxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxZQUFZO1VBQ3pFLG1CQUFtQixHQUFHLFFBQVEsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO1FBQ25GLEdBQUcsSUFBSSxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxJQUFJLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUNqRCxJQUFJLENBQUMsUUFBUSxFQUFFO1VBQ2IsR0FBRyxJQUFJLE1BQU0sSUFBSSxXQUFXLENBQUMsR0FBRyxpQkFBaUIsQ0FBQztTQUNuRDtRQUNELEdBQUcsSUFBSSxHQUFHLElBQUksV0FBVyxDQUFDLEdBQUcsR0FBRyxJQUFJLG1CQUFtQixDQUFDLEdBQUcsTUFBTSxJQUFJLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztPQUN6RixNQUFNO1FBQ0wsSUFBSSxVQUFVLEdBQUcsVUFBVSxJQUFJLEVBQUUsQ0FBQztRQUNsQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDVCxJQUFJLEVBQUUsQ0FBQyxZQUFZLEtBQUssS0FBSyxFQUFFO1VBQzdCLEdBQUcsSUFBSSxnQkFBZ0IsSUFBSSxhQUFhLElBQUksTUFBTSxDQUFDLEdBQUcsc0NBQXNDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLGlCQUFpQixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsdUJBQXVCLENBQUM7VUFDdk0sSUFBSSxZQUFZLEVBQUU7WUFDaEIsR0FBRyxJQUFJLEVBQUUsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7V0FDckMsTUFBTTtZQUNMLEdBQUcsSUFBSSxFQUFFLElBQUksV0FBVyxDQUFDLENBQUM7V0FDM0I7VUFDRCxHQUFHLElBQUksT0FBTyxDQUFDO1VBQ2YsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxLQUFLLEVBQUU7WUFDOUIsR0FBRyxJQUFJLDBCQUEwQixDQUFDO1lBQ2xDLElBQUksWUFBWSxFQUFFO2NBQ2hCLEdBQUcsSUFBSSxFQUFFLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQ3JDLE1BQU07Y0FDTCxHQUFHLElBQUksRUFBRSxJQUFJLFdBQVcsQ0FBQyxDQUFDO2FBQzNCO1lBQ0QsR0FBRyxJQUFJLEtBQUssQ0FBQztXQUNkO1VBQ0QsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNuQixHQUFHLElBQUksNEJBQTRCLElBQUksV0FBVyxDQUFDLEdBQUcsa0NBQWtDLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFdBQVcsSUFBSSxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7V0FDMUk7VUFDRCxHQUFHLElBQUksS0FBSyxDQUFDO1NBQ2QsTUFBTTtVQUNMLEdBQUcsSUFBSSxNQUFNLENBQUM7U0FDZjtRQUNELElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQztRQUNoQixHQUFHLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxJQUFJLGFBQWEsRUFBRTs7VUFFdEMsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFO1lBQ1osR0FBRyxJQUFJLDhCQUE4QixJQUFJLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQztXQUMxRCxNQUFNO1lBQ0wsR0FBRyxJQUFJLHNCQUFzQixJQUFJLEtBQUssQ0FBQyxHQUFHLG1CQUFtQixDQUFDO1dBQy9EO1NBQ0YsTUFBTTtVQUNMLEdBQUcsSUFBSSxhQUFhLElBQUksS0FBSyxDQUFDLEdBQUcsOEVBQThFLENBQUM7U0FDakg7T0FDRjtNQUNELEdBQUcsSUFBSSxLQUFLLENBQUM7S0FDZDtHQUNGO0VBQ0QsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtJQUNuQyxHQUFHLElBQUksR0FBRyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ3hELElBQUksYUFBYSxFQUFFO01BQ2pCLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQztNQUM1QixJQUFJLElBQUksRUFBRTtRQUNSLEdBQUcsSUFBSSxHQUFHLENBQUM7T0FDWixNQUFNO1FBQ0wsR0FBRyxJQUFJLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQztPQUN6QjtNQUNELEdBQUcsSUFBSSxNQUFNLENBQUM7TUFDZCxlQUFlLElBQUksR0FBRyxDQUFDO0tBQ3hCO0dBQ0YsTUFBTTtJQUNMLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUM7SUFDcEIsSUFBSSxJQUFJLEVBQUU7TUFDUixJQUFJLFdBQVcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztNQUN2QixPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDZCxXQUFXLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM1QixJQUFJLGVBQWUsQ0FBQyxXQUFXLENBQUMsRUFBRTtVQUNoQyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUU7WUFDcEIsR0FBRyxJQUFJLE9BQU8sSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO1dBQzVFO1VBQ0QsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUN2QixJQUFJLFdBQVcsQ0FBQyxJQUFJLElBQUksUUFBUSxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFO2NBQ3hELElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVTtnQkFDaEMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Y0FDckMsSUFBSSxJQUFJLEdBQUcsV0FBVyxDQUFDO2NBQ3ZCLElBQUksSUFBSSxFQUFFO2dCQUNSLElBQUksWUFBWSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7a0JBQ3ZCLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztnQkFDdkIsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFO2tCQUNkLFlBQVksR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO2tCQUM3QixJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7a0JBQ2pDLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxTQUFTLEVBQUU7b0JBQzlCLElBQUksU0FBUyxHQUFHLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFDMUQsSUFBSSxFQUFFLENBQUMsYUFBYSxFQUFFO3NCQUNwQixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO3dCQUMxQixJQUFJLFdBQVcsR0FBRywwQkFBMEIsR0FBRyxTQUFTLENBQUM7d0JBQ3pELElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLEtBQUssS0FBSyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDOzZCQUM3RCxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO3VCQUNuQztxQkFDRixNQUFNO3NCQUNMLEdBQUcsSUFBSSxPQUFPLElBQUksU0FBUyxDQUFDLEdBQUcsaUJBQWlCLENBQUM7c0JBQ2pELElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksT0FBTyxFQUFFO3dCQUNsQyxHQUFHLElBQUksTUFBTSxJQUFJLFNBQVMsQ0FBQyxHQUFHLGVBQWUsSUFBSSxTQUFTLENBQUMsR0FBRyxZQUFZLENBQUM7dUJBQzVFO3NCQUNELEdBQUcsSUFBSSxLQUFLLElBQUksU0FBUyxDQUFDLEdBQUcsS0FBSyxDQUFDO3NCQUNuQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLFFBQVEsRUFBRTt3QkFDbkMsR0FBRyxJQUFJLEdBQUcsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQzt1QkFDbEQsTUFBTTt3QkFDTCxHQUFHLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO3VCQUNuRDtzQkFDRCxHQUFHLElBQUksSUFBSSxDQUFDO3FCQUNiO21CQUNGO2lCQUNGO2VBQ0Y7YUFDRixNQUFNLElBQUksV0FBVyxDQUFDLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO2NBQ3hFLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO2NBQzNCLElBQUksSUFBSSxFQUFFO2dCQUNSLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7a0JBQ2YsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2dCQUN2QixPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUU7a0JBQ2QsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7a0JBQ3JCLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxTQUFTLEVBQUU7b0JBQzlCLElBQUksU0FBUyxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztvQkFDdkMsSUFBSSxFQUFFLENBQUMsYUFBYSxFQUFFO3NCQUNwQixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO3dCQUMxQixJQUFJLFdBQVcsR0FBRywwQkFBMEIsR0FBRyxTQUFTLENBQUM7d0JBQ3pELElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLEtBQUssS0FBSyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDOzZCQUM3RCxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO3VCQUNuQztxQkFDRixNQUFNO3NCQUNMLEdBQUcsSUFBSSxPQUFPLElBQUksU0FBUyxDQUFDLEdBQUcsaUJBQWlCLENBQUM7c0JBQ2pELElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksT0FBTyxFQUFFO3dCQUNsQyxHQUFHLElBQUksTUFBTSxJQUFJLFNBQVMsQ0FBQyxHQUFHLGVBQWUsSUFBSSxTQUFTLENBQUMsR0FBRyxZQUFZLENBQUM7dUJBQzVFO3NCQUNELEdBQUcsSUFBSSxLQUFLLElBQUksU0FBUyxDQUFDLEdBQUcsS0FBSyxDQUFDO3NCQUNuQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLFFBQVEsRUFBRTt3QkFDbkMsR0FBRyxJQUFJLEdBQUcsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQzt1QkFDbEQsTUFBTTt3QkFDTCxHQUFHLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO3VCQUNuRDtzQkFDRCxHQUFHLElBQUksSUFBSSxDQUFDO3FCQUNiO21CQUNGO2lCQUNGO2VBQ0Y7YUFDRjtXQUNGO1VBQ0QsSUFBSSxJQUFJLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQztVQUM3QixJQUFJLElBQUksRUFBRTtZQUNSLElBQUksS0FBSyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7Y0FDaEIsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRTtjQUNkLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLElBQUksY0FBYyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUN6QixJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDNUQsSUFBSSxLQUFLLEVBQUU7a0JBQ1QsR0FBRyxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7a0JBQzNCLElBQUksYUFBYSxFQUFFO29CQUNqQixlQUFlLElBQUksR0FBRyxDQUFDO21CQUN4QjtpQkFDRjtlQUNGO2FBQ0Y7V0FDRjtVQUNELElBQUksYUFBYSxFQUFFO1lBQ2pCLEdBQUcsSUFBSSxHQUFHLElBQUksZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBQ3JDLGVBQWUsR0FBRyxFQUFFLENBQUM7V0FDdEI7VUFDRCxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUU7WUFDcEIsR0FBRyxJQUFJLEtBQUssQ0FBQztZQUNiLElBQUksV0FBVyxJQUFJLFdBQVcsS0FBSyxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO2NBQ3RFLEdBQUcsSUFBSSxVQUFVLENBQUM7Y0FDbEIsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDLFVBQVUsR0FBRyxPQUFPO2dCQUN2QyxjQUFjLEdBQUcsRUFBRSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUM7Y0FDOUMsSUFBSSxVQUFVLEdBQUcsVUFBVSxJQUFJLEVBQUUsQ0FBQztjQUNsQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2NBQ3JCLEdBQUcsR0FBRyxFQUFFLENBQUM7Y0FDVCxJQUFJLEVBQUUsQ0FBQyxZQUFZLEtBQUssS0FBSyxFQUFFO2dCQUM3QixHQUFHLElBQUksZ0JBQWdCLElBQUksYUFBYSxJQUFJLE1BQU0sQ0FBQyxHQUFHLHNDQUFzQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxpQkFBaUIsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUFHLHVCQUF1QixDQUFDO2dCQUN2TSxJQUFJLFlBQVksRUFBRTtrQkFDaEIsR0FBRyxJQUFJLEVBQUUsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7aUJBQ3JDLE1BQU07a0JBQ0wsR0FBRyxJQUFJLEVBQUUsSUFBSSxXQUFXLENBQUMsQ0FBQztpQkFDM0I7Z0JBQ0QsR0FBRyxJQUFJLE9BQU8sQ0FBQztnQkFDZixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLEtBQUssRUFBRTtrQkFDOUIsR0FBRyxJQUFJLDBCQUEwQixDQUFDO2tCQUNsQyxJQUFJLFlBQVksRUFBRTtvQkFDaEIsR0FBRyxJQUFJLEVBQUUsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7bUJBQ3JDLE1BQU07b0JBQ0wsR0FBRyxJQUFJLEVBQUUsSUFBSSxXQUFXLENBQUMsQ0FBQzttQkFDM0I7a0JBQ0QsR0FBRyxJQUFJLEtBQUssQ0FBQztpQkFDZDtnQkFDRCxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO2tCQUNuQixHQUFHLElBQUksNEJBQTRCLElBQUksV0FBVyxDQUFDLEdBQUcsa0NBQWtDLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFdBQVcsSUFBSSxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7aUJBQzFJO2dCQUNELEdBQUcsSUFBSSxLQUFLLENBQUM7ZUFDZCxNQUFNO2dCQUNMLEdBQUcsSUFBSSxNQUFNLENBQUM7ZUFDZjtjQUNELElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQztjQUNoQixHQUFHLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO2NBQ3ZCLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxJQUFJLGFBQWEsRUFBRTs7Z0JBRXRDLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRTtrQkFDWixHQUFHLElBQUksOEJBQThCLElBQUksS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO2lCQUMxRCxNQUFNO2tCQUNMLEdBQUcsSUFBSSxzQkFBc0IsSUFBSSxLQUFLLENBQUMsR0FBRyxtQkFBbUIsQ0FBQztpQkFDL0Q7ZUFDRixNQUFNO2dCQUNMLEdBQUcsSUFBSSxhQUFhLElBQUksS0FBSyxDQUFDLEdBQUcsOEVBQThFLENBQUM7ZUFDakg7Y0FDRCxHQUFHLElBQUksS0FBSyxDQUFDO2FBQ2Q7V0FDRjtVQUNELElBQUksYUFBYSxFQUFFO1lBQ2pCLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQztZQUMxQixJQUFJLElBQUksRUFBRTtjQUNSLEdBQUcsSUFBSSxHQUFHLENBQUM7YUFDWixNQUFNO2NBQ0wsR0FBRyxJQUFJLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQzthQUN6QjtZQUNELEdBQUcsSUFBSSxNQUFNLENBQUM7WUFDZCxlQUFlLElBQUksR0FBRyxDQUFDO1dBQ3hCO1NBQ0Y7T0FDRjtLQUNGO0dBQ0Y7RUFDRCxJQUFJLGFBQWEsRUFBRTtJQUNqQixHQUFHLElBQUksR0FBRyxJQUFJLGVBQWUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztHQUN0QztFQUNELElBQUksSUFBSSxFQUFFO0lBQ1IsSUFBSSxNQUFNLEVBQUU7TUFDVixHQUFHLElBQUksNENBQTRDLENBQUM7TUFDcEQsR0FBRyxJQUFJLDRDQUE0QyxDQUFDO0tBQ3JELE1BQU07TUFDTCxHQUFHLElBQUksOEJBQThCLENBQUM7TUFDdEMsR0FBRyxJQUFJLDhCQUE4QixDQUFDO0tBQ3ZDO0lBQ0QsR0FBRyxJQUFJLHNCQUFzQixDQUFDO0dBQy9CLE1BQU07SUFDTCxHQUFHLElBQUksT0FBTyxJQUFJLE1BQU0sQ0FBQyxHQUFHLHFCQUFxQixJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztHQUNsRTtFQUNELEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUMvQixJQUFJLElBQUksRUFBRTtJQUNSLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztHQUM3Qzs7RUFFRCxTQUFTLGVBQWUsQ0FBQyxXQUFXLEVBQUU7SUFDcEMsSUFBSSxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQztJQUM5QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUU7TUFDbkMsSUFBSSxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxJQUFJLENBQUM7R0FDN0M7O0VBRUQsU0FBUyxjQUFjLENBQUMsS0FBSyxFQUFFO0lBQzdCLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssU0FBUyxLQUFLLEtBQUssQ0FBQyxVQUFVLElBQUksMEJBQTBCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztHQUMxRzs7RUFFRCxTQUFTLDBCQUEwQixDQUFDLEtBQUssRUFBRTtJQUN6QyxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO0lBQzVCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRTtNQUNsQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLE9BQU8sSUFBSSxDQUFDO0dBQ3JEO0VBQ0QsT0FBTyxHQUFHLENBQUM7Q0FDWjs7Ozs7O0FDaGVELElBQUl1RCxZQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQzs7OztBQUlqQyxJQUFJQyxpQkFBZSxHQUFHQyxhQUFZLENBQUMsVUFBVSxDQUFDOztBQUU5QyxhQUFjLEdBQUcsT0FBTyxDQUFDOzs7Ozs7Ozs7Ozs7QUFZekIsU0FBUyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFOzs7RUFHaEQsSUFBSSxJQUFJLEdBQUcsSUFBSTtNQUNYLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSztNQUNqQixNQUFNLEdBQUcsRUFBRSxTQUFTLEVBQUU7TUFDdEIsSUFBSSxHQUFHLEVBQUU7TUFDVCxRQUFRLEdBQUcsRUFBRTtNQUNiLFlBQVksR0FBRyxFQUFFO01BQ2pCLFFBQVEsR0FBRyxFQUFFO01BQ2IsWUFBWSxHQUFHLEVBQUU7TUFDakIsV0FBVyxHQUFHLEVBQUUsQ0FBQzs7RUFFckIsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7O0VBRTlELElBQUksQ0FBQyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7RUFDeEQsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7RUFDOUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLFFBQVEsV0FBVyxDQUFDLFlBQVksR0FBRyxZQUFZLEVBQUU7O0VBRWxFLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7RUFDNUIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQzs7RUFFdkIsSUFBSTtJQUNGLElBQUksQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN0RCxXQUFXLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUN6QixJQUFJLEVBQUUsR0FBRyxXQUFXLENBQUMsWUFBWSxDQUFDO0lBQ2xDLElBQUksRUFBRSxFQUFFO01BQ04sRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO01BQ3JCLEVBQUUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO01BQ2pCLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztNQUNqQixFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7TUFDckIsRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO01BQ2pCLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztNQUNyQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0tBQzNDO0lBQ0QsT0FBTyxDQUFDLENBQUM7R0FDVixTQUFTO0lBQ1IsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztHQUMvQzs7O0VBR0QsU0FBUyxZQUFZLEdBQUc7O0lBRXRCLElBQUksUUFBUSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUM7SUFDcEMsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDN0MsWUFBWSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO0lBQ3RDLE9BQU8sTUFBTSxDQUFDO0dBQ2Y7O0VBRUQsU0FBUyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFO0lBQ3ZELElBQUksTUFBTSxHQUFHLENBQUMsS0FBSyxLQUFLLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDO0lBQzFELElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTTtNQUM3QixPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDOztJQUUvRCxJQUFJLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQzs7SUFFckMsSUFBSSxVQUFVLEdBQUdDLFFBQWlCLENBQUM7TUFDakMsS0FBSyxFQUFFLElBQUk7TUFDWCxNQUFNLEVBQUUsT0FBTztNQUNmLE1BQU0sRUFBRSxNQUFNO01BQ2QsTUFBTSxFQUFFLE1BQU07TUFDZCxJQUFJLEVBQUUsS0FBSztNQUNYLFVBQVUsRUFBRSxFQUFFO01BQ2QsYUFBYSxFQUFFLEdBQUc7TUFDbEIsU0FBUyxFQUFFLElBQUk7TUFDZixlQUFlLEVBQUVELGFBQVksQ0FBQyxVQUFVO01BQ3hDLEtBQUssRUFBRSxLQUFLO01BQ1osUUFBUSxFQUFFQyxRQUFpQjtNQUMzQixJQUFJLEVBQUUsSUFBSTtNQUNWLE9BQU8sRUFBRTFELFNBQU87TUFDaEIsVUFBVSxFQUFFLFVBQVU7TUFDdEIsVUFBVSxFQUFFLFVBQVU7TUFDdEIsVUFBVSxFQUFFLFVBQVU7TUFDdEIsYUFBYSxFQUFFLGFBQWE7TUFDNUIsSUFBSSxFQUFFLElBQUk7TUFDVixPQUFPLEVBQUUsT0FBTztNQUNoQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07TUFDbkIsSUFBSSxFQUFFLElBQUk7S0FDWCxDQUFDLENBQUM7O0lBRUgsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUM7cUJBQ2xELElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUM7cUJBQy9ELFVBQVUsQ0FBQzs7SUFFNUIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDOztJQUVoRSxJQUFJMkQsVUFBUSxDQUFDO0lBQ2IsSUFBSTtNQUNGLElBQUksWUFBWSxHQUFHLElBQUksUUFBUTtRQUM3QixNQUFNO1FBQ04sT0FBTztRQUNQLFNBQVM7UUFDVCxNQUFNO1FBQ04sUUFBUTtRQUNSLFVBQVU7UUFDVixhQUFhO1FBQ2IsT0FBTztRQUNQLFlBQVk7UUFDWixpQkFBaUI7UUFDakIsVUFBVTtPQUNYLENBQUM7O01BRUZBLFVBQVEsR0FBRyxZQUFZO1FBQ3JCLElBQUk7UUFDSixLQUFLO1FBQ0wsT0FBTztRQUNQLElBQUk7UUFDSixNQUFNO1FBQ04sUUFBUTtRQUNSLFdBQVc7UUFDWHJELGFBQUs7UUFDTGlELFlBQVU7UUFDVkMsaUJBQWU7T0FDaEIsQ0FBQzs7TUFFRixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUdHLFVBQVEsQ0FBQztLQUN0QixDQUFDLE1BQU0sQ0FBQyxFQUFFO01BQ1QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsd0NBQXdDLEVBQUUsVUFBVSxDQUFDLENBQUM7TUFDeEUsTUFBTSxDQUFDLENBQUM7S0FDVDs7SUFFREEsVUFBUSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7SUFDMUJBLFVBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ3ZCQSxVQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNyQkEsVUFBUSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDekJBLFVBQVEsQ0FBQyxJQUFJLEdBQUcsTUFBTSxHQUFHQSxVQUFRLEdBQUcsS0FBSyxDQUFDO0lBQzFDLElBQUksTUFBTSxFQUFFQSxVQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNuQyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFO01BQzVCQSxVQUFRLENBQUMsTUFBTSxHQUFHO1FBQ2hCLElBQUksRUFBRSxVQUFVO1FBQ2hCLFFBQVEsRUFBRSxRQUFRO1FBQ2xCLFFBQVEsRUFBRSxRQUFRO09BQ25CLENBQUM7S0FDSDs7SUFFRCxPQUFPQSxVQUFRLENBQUM7R0FDakI7O0VBRUQsU0FBUyxVQUFVLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUU7SUFDdkMsR0FBRyxHQUFHM0QsU0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDL0IsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLElBQUksT0FBTyxFQUFFLE9BQU8sQ0FBQztJQUNyQixJQUFJLFFBQVEsS0FBSyxTQUFTLEVBQUU7TUFDMUIsT0FBTyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztNQUMzQixPQUFPLEdBQUcsU0FBUyxHQUFHLFFBQVEsR0FBRyxHQUFHLENBQUM7TUFDckMsT0FBTyxXQUFXLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQ3RDO0lBQ0QsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO01BQ3hCLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDL0IsSUFBSSxTQUFTLEtBQUssU0FBUyxFQUFFO1FBQzNCLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sV0FBVyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztPQUN0QztLQUNGOztJQUVELE9BQU8sR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0IsSUFBSSxDQUFDLEdBQUdBLFNBQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDcEQsSUFBSSxDQUFDLEtBQUssU0FBUyxFQUFFO01BQ25CLElBQUksV0FBVyxHQUFHLFNBQVMsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDOUMsSUFBSSxXQUFXLEVBQUU7UUFDZixDQUFDLEdBQUdBLFNBQU8sQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUM7Y0FDN0MsV0FBVztjQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO09BQ2hFO0tBQ0Y7O0lBRUQsSUFBSSxDQUFDLEtBQUssU0FBUyxFQUFFO01BQ25CLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNyQixNQUFNO01BQ0wsZUFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztNQUN4QixPQUFPLFdBQVcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDaEM7R0FDRjs7RUFFRCxTQUFTLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDMUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ2xCLE9BQU8sUUFBUSxHQUFHLEtBQUssQ0FBQztHQUN6Qjs7RUFFRCxTQUFTLGNBQWMsQ0FBQyxHQUFHLEVBQUU7SUFDM0IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7R0FDbEI7O0VBRUQsU0FBUyxlQUFlLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUMvQixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztHQUNuQjs7RUFFRCxTQUFTLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFO0lBQ2pDLE9BQU8sT0FBTyxNQUFNLElBQUksUUFBUSxJQUFJLE9BQU8sTUFBTSxJQUFJLFNBQVM7Y0FDcEQsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtjQUM1QyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0dBQzdEOztFQUVELFNBQVMsVUFBVSxDQUFDLFFBQVEsRUFBRTtJQUM1QixJQUFJLEtBQUssR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkMsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO01BQ3ZCLEtBQUssR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztNQUNqRCxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsUUFBUSxDQUFDO0tBQzVCO0lBQ0QsT0FBTyxTQUFTLEdBQUcsS0FBSyxDQUFDO0dBQzFCOztFQUVELFNBQVMsVUFBVSxDQUFDLEtBQUssRUFBRTtJQUN6QixRQUFRLE9BQU8sS0FBSztNQUNsQixLQUFLLFNBQVMsQ0FBQztNQUNmLEtBQUssUUFBUTtRQUNYLE9BQU8sRUFBRSxHQUFHLEtBQUssQ0FBQztNQUNwQixLQUFLLFFBQVE7UUFDWCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDcEMsS0FBSyxRQUFRO1FBQ1gsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFLE9BQU8sTUFBTSxDQUFDO1FBQ2xDLElBQUksUUFBUSxHQUFHNEQsdUJBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QyxJQUFJLEtBQUssR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkMsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO1VBQ3ZCLEtBQUssR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztVQUNqRCxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO1NBQ3pCO1FBQ0QsT0FBTyxTQUFTLEdBQUcsS0FBSyxDQUFDO0tBQzVCO0dBQ0Y7O0VBRUQsU0FBUyxhQUFhLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFO0lBQ3JELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEtBQUssS0FBSyxFQUFFO01BQ3ZDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDO01BQ3hDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLE9BQU8sRUFBRTtRQUN4QyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7T0FDcEUsQ0FBQztRQUNBLE1BQU0sSUFBSSxLQUFLLENBQUMsaURBQWlELEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDOztNQUV0RixJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQztNQUNwRCxJQUFJLGNBQWMsRUFBRTtRQUNsQixJQUFJLEtBQUssR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLEtBQUssRUFBRTtVQUNWLElBQUksT0FBTyxHQUFHLDZCQUE2QixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1VBQ3JGLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLElBQUksS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2VBQzlELE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDL0I7T0FDRjtLQUNGOztJQUVELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTztRQUNqQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNO1FBQy9CLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQzs7SUFFbEMsSUFBSSxRQUFRLENBQUM7SUFDYixJQUFJLE9BQU8sRUFBRTtNQUNYLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBQ3pELE1BQU0sSUFBSSxLQUFLLEVBQUU7TUFDaEIsUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7TUFDdEQsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLEtBQUssRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUN4RSxNQUFNLElBQUksTUFBTSxFQUFFO01BQ2pCLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7S0FDdEUsTUFBTTtNQUNMLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztNQUNwQyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU87S0FDdkI7O0lBRUQsSUFBSSxRQUFRLEtBQUssU0FBUztNQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsb0JBQW9CLENBQUMsQ0FBQzs7SUFFNUUsSUFBSSxLQUFLLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQztJQUMvQixXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsUUFBUSxDQUFDOztJQUU5QixPQUFPO01BQ0wsSUFBSSxFQUFFLFlBQVksR0FBRyxLQUFLO01BQzFCLFFBQVEsRUFBRSxRQUFRO0tBQ25CLENBQUM7R0FDSDtDQUNGOzs7Ozs7Ozs7OztBQVdELFNBQVMsY0FBYyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFOztFQUU1QyxJQUFJLEtBQUssR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0VBQ3ZELElBQUksS0FBSyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7RUFDekQsS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO0VBQ2xDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUc7SUFDMUIsTUFBTSxFQUFFLE1BQU07SUFDZCxJQUFJLEVBQUUsSUFBSTtJQUNWLE1BQU0sRUFBRSxNQUFNO0dBQ2YsQ0FBQztFQUNGLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQztDQUMzQzs7Ozs7Ozs7OztBQVVELFNBQVMsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFOztFQUUxQyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0VBQ25ELElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDN0M7Ozs7Ozs7Ozs7O0FBV0QsU0FBUyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7O0VBRXZDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUM5QyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxNQUFNLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7R0FDMUU7RUFDRCxPQUFPLENBQUMsQ0FBQyxDQUFDO0NBQ1g7OztBQUdELFNBQVMsV0FBVyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUU7RUFDaEMsT0FBTyxhQUFhLEdBQUcsQ0FBQyxHQUFHLGdCQUFnQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ3ZGOzs7QUFHRCxTQUFTLFdBQVcsQ0FBQyxDQUFDLEVBQUU7RUFDdEIsT0FBTyxhQUFhLEdBQUcsQ0FBQyxHQUFHLGNBQWMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ3REOzs7QUFHRCxTQUFTLFVBQVUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFO0VBQzdCLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxFQUFFLEdBQUcsWUFBWSxHQUFHLENBQUMsR0FBRyxZQUFZLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUNsRjs7O0FBR0QsU0FBUyxjQUFjLENBQUMsQ0FBQyxFQUFFO0VBQ3pCLE9BQU8sZ0JBQWdCLEdBQUcsQ0FBQyxHQUFHLGlCQUFpQixHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDNUQ7OztBQUdELFNBQVMsSUFBSSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUU7RUFDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUM7RUFDM0IsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0VBQ2QsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFO0lBQzdCLElBQUksSUFBSSxTQUFTLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQzVCLE9BQU8sSUFBSSxDQUFDO0NBQ2I7OztBQ2xZRDs7QUFHQSxJQUFJLEtBQUssR0FBRyxjQUFjLEdBQUcsU0FBUyxLQUFLLEdBQUc7RUFDNUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7Q0FDbEIsQ0FBQzs7O0FBR0YsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsU0FBUyxTQUFTLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRTtFQUNuRCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztDQUMxQixDQUFDOzs7QUFHRixLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxTQUFTLFNBQVMsQ0FBQyxHQUFHLEVBQUU7RUFDNUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3pCLENBQUM7OztBQUdGLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLFNBQVMsU0FBUyxDQUFDLEdBQUcsRUFBRTtFQUM1QyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDekIsQ0FBQzs7O0FBR0YsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsU0FBUyxXQUFXLEdBQUc7RUFDN0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7Q0FDbEIsQ0FBQzs7O0FDckJGLElBQUksSUFBSSxHQUFHLDRCQUE0QixDQUFDO0FBQ3hDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbkQsSUFBSSxJQUFJLEdBQUcseURBQXlELENBQUM7QUFDckUsSUFBSSxRQUFRLEdBQUcsdUdBQXVHLENBQUM7QUFDdkgsSUFBSSxHQUFHLEdBQUcsOG5DQUE4bkMsQ0FBQztBQUN6b0MsSUFBSSxNQUFNLEdBQUcsd29DQUF3b0MsQ0FBQzs7QUFFdHBDLElBQUksV0FBVyxHQUFHLG1MQUFtTCxDQUFDOzs7OztBQUt0TSxJQUFJLEdBQUcsR0FBRywyckRBQTJyRCxDQUFDO0FBQ3RzRCxJQUFJLElBQUksR0FBRyw4REFBOEQsQ0FBQztBQUMxRSxJQUFJQyxjQUFZLEdBQUcsMkJBQTJCLENBQUM7QUFDL0MsSUFBSSx5QkFBeUIsR0FBRyw4REFBOEQsQ0FBQztBQUMvRixJQUFJQyx1QkFBcUIsR0FBRyxrREFBa0QsQ0FBQzs7O0FBRy9FLGFBQWMsR0FBRyxPQUFPLENBQUM7O0FBRXpCLFNBQVMsT0FBTyxDQUFDLElBQUksRUFBRTtFQUNyQixJQUFJLEdBQUcsSUFBSSxJQUFJLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO0VBQ3hDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUNqQzs7O0FBR0QsT0FBTyxDQUFDLElBQUksR0FBRzs7RUFFYixJQUFJLEVBQUUsNEJBQTRCOztFQUVsQyxJQUFJLEVBQUUsNkVBQTZFO0VBQ25GLFdBQVcsRUFBRSx5R0FBeUc7O0VBRXRILEdBQUcsRUFBRSwyQ0FBMkM7RUFDaEQsZUFBZSxFQUFFLHdFQUF3RTtFQUN6RixjQUFjLEVBQUUsV0FBVztFQUMzQixHQUFHLEVBQUUsR0FBRzs7OztFQUlSLEtBQUssRUFBRSxrSEFBa0g7RUFDekgsUUFBUSxFQUFFLFFBQVE7O0VBRWxCLElBQUksRUFBRSwyRUFBMkU7O0VBRWpGLElBQUksRUFBRSxvcENBQW9wQztFQUMxcEMsS0FBSyxFQUFFLEtBQUs7O0VBRVosSUFBSSxFQUFFLElBQUk7OztFQUdWLGNBQWMsRUFBRUQsY0FBWTtFQUM1QiwyQkFBMkIsRUFBRSx5QkFBeUI7O0VBRXRELHVCQUF1QixFQUFFQyx1QkFBcUI7Q0FDL0MsQ0FBQzs7O0FBR0YsT0FBTyxDQUFDLElBQUksR0FBRztFQUNiLElBQUksRUFBRSxJQUFJO0VBQ1YsSUFBSSxFQUFFLElBQUk7RUFDVixXQUFXLEVBQUUsU0FBUztFQUN0QixHQUFHLEVBQUUsR0FBRztFQUNSLGVBQWUsRUFBRSxNQUFNO0VBQ3ZCLGNBQWMsRUFBRSxXQUFXO0VBQzNCLEdBQUcsRUFBRSxHQUFHO0VBQ1IsS0FBSyxFQUFFLDBJQUEwSTtFQUNqSixRQUFRLEVBQUUsUUFBUTtFQUNsQixJQUFJLEVBQUUsMkVBQTJFO0VBQ2pGLElBQUksRUFBRSxvcENBQW9wQztFQUMxcEMsS0FBSyxFQUFFLEtBQUs7RUFDWixJQUFJLEVBQUUsSUFBSTtFQUNWLGNBQWMsRUFBRUQsY0FBWTtFQUM1QiwyQkFBMkIsRUFBRSx5QkFBeUI7RUFDdEQsdUJBQXVCLEVBQUVDLHVCQUFxQjtDQUMvQyxDQUFDOzs7QUFHRixTQUFTLFVBQVUsQ0FBQyxJQUFJLEVBQUU7O0VBRXhCLE9BQU8sSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztDQUNqRTs7O0FBR0QsU0FBUyxJQUFJLENBQUMsR0FBRyxFQUFFOztFQUVqQixJQUFJLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQzlCLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxLQUFLLENBQUM7O0VBRTNCLElBQUksSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3ZCLElBQUksS0FBSyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3hCLElBQUksR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDOztFQUV0QixPQUFPLEtBQUssSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUUsSUFBSSxHQUFHLElBQUksQ0FBQztVQUNwQyxHQUFHLEtBQUssS0FBSyxJQUFJLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0NBQ3BFOzs7QUFHRCxTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFO0VBQ3ZCLElBQUksT0FBTyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDOUIsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLEtBQUssQ0FBQzs7RUFFM0IsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3RCLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN4QixJQUFJLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDeEIsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFCLE9BQU8sQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLElBQUksTUFBTSxJQUFJLEVBQUUsSUFBSSxNQUFNLElBQUksRUFBRTtXQUMxQyxJQUFJLElBQUksRUFBRSxJQUFJLE1BQU0sSUFBSSxFQUFFLElBQUksTUFBTSxJQUFJLEVBQUUsQ0FBQztVQUM1QyxDQUFDLElBQUksSUFBSSxRQUFRLENBQUMsQ0FBQztDQUM1Qjs7O0FBR0QsSUFBSSxtQkFBbUIsR0FBRyxPQUFPLENBQUM7QUFDbEMsU0FBUyxTQUFTLENBQUMsR0FBRyxFQUFFOztFQUV0QixJQUFJLFFBQVEsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7RUFDOUMsT0FBTyxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztDQUM3RTs7O0FBR0QsSUFBSSxnQkFBZ0IsR0FBRyxNQUFNLENBQUM7QUFDOUIsU0FBUyxHQUFHLENBQUMsR0FBRyxFQUFFOztFQUVoQixPQUFPLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3BEOzs7QUFHRCxJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUM7QUFDMUIsU0FBUyxLQUFLLENBQUMsR0FBRyxFQUFFO0VBQ2xCLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEtBQUssQ0FBQztFQUNyQyxJQUFJO0lBQ0YsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEIsT0FBTyxJQUFJLENBQUM7R0FDYixDQUFDLE1BQU0sQ0FBQyxFQUFFO0lBQ1QsT0FBTyxLQUFLLENBQUM7R0FDZDtDQUNGOztBQzVJRCxPQUFjLEdBQUcsU0FBUyxZQUFZLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUU7RUFDOUQsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2QsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQztFQUNwQixJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDO0VBQzVCLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7RUFDbEMsSUFBSSxjQUFjLEdBQUcsRUFBRSxDQUFDLGFBQWEsR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDO0VBQ3ZELElBQUksYUFBYSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7RUFDdkMsSUFBSSxLQUFLLEdBQUcsTUFBTSxJQUFJLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQztFQUN0QyxJQUFJLE1BQU0sR0FBRyxPQUFPLEdBQUcsSUFBSSxDQUFDO0VBQzVCLElBQUksTUFBTSxFQUFFLFFBQVEsQ0FBQztFQUNyQixJQUFJLE9BQU8sSUFBSSxHQUFHLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtJQUNyQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUU7TUFDYixNQUFNLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQztNQUNsQixRQUFRLEdBQUcsVUFBVSxDQUFDO0tBQ3ZCLE1BQU07TUFDTCxNQUFNLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQztNQUN4QyxRQUFRLEdBQUcsZ0JBQWdCLENBQUM7S0FDN0I7R0FDRixNQUFNO0lBQ0wsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDM0QsSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFO01BQ3pCLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7TUFDOUQsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxNQUFNLEVBQUU7UUFDakMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUIsSUFBSSxVQUFVLEdBQUcsVUFBVSxJQUFJLEVBQUUsQ0FBQztRQUNsQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDVCxJQUFJLEVBQUUsQ0FBQyxZQUFZLEtBQUssS0FBSyxFQUFFO1VBQzdCLEdBQUcsSUFBSSxnQkFBZ0IsSUFBSSxNQUFNLENBQUMsR0FBRyxzQ0FBc0MsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsaUJBQWlCLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRyxzQkFBc0IsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztVQUNqTyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLEtBQUssRUFBRTtZQUM5QixHQUFHLElBQUksMkNBQTJDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7V0FDOUY7VUFDRCxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ25CLEdBQUcsSUFBSSxhQUFhLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxrQ0FBa0MsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsV0FBVyxJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztXQUMvSTtVQUNELEdBQUcsSUFBSSxLQUFLLENBQUM7U0FDZCxNQUFNO1VBQ0wsR0FBRyxJQUFJLE1BQU0sQ0FBQztTQUNmO1FBQ0QsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDO1FBQ2hCLEdBQUcsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLElBQUksYUFBYSxFQUFFOztVQUV0QyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUU7WUFDWixHQUFHLElBQUksOEJBQThCLElBQUksS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO1dBQzFELE1BQU07WUFDTCxHQUFHLElBQUksc0JBQXNCLElBQUksS0FBSyxDQUFDLEdBQUcsbUJBQW1CLENBQUM7V0FDL0Q7U0FDRixNQUFNO1VBQ0wsR0FBRyxJQUFJLGFBQWEsSUFBSSxLQUFLLENBQUMsR0FBRyw4RUFBOEUsQ0FBQztTQUNqSDtRQUNELElBQUksYUFBYSxFQUFFO1VBQ2pCLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQztTQUN6QjtPQUNGLE1BQU0sSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxRQUFRLEVBQUU7UUFDMUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekIsSUFBSSxhQUFhLEVBQUU7VUFDakIsR0FBRyxJQUFJLGVBQWUsQ0FBQztTQUN4QjtPQUNGLE1BQU07UUFDTCxNQUFNLElBQUksRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztPQUM1RDtLQUNGLE1BQU0sSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFO01BQ3pCLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO01BQzNCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztNQUNaLElBQUksVUFBVSxHQUFHLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO01BQ3JDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztNQUM1QixHQUFHLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztNQUNwQixHQUFHLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQztNQUM1QixJQUFJLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDeEUsR0FBRyxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7TUFDM0IsSUFBSSxhQUFhLEVBQUU7UUFDakIsR0FBRyxJQUFJLE9BQU8sSUFBSSxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7T0FDeEM7S0FDRixNQUFNO01BQ0wsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEtBQUssSUFBSSxLQUFLLEVBQUUsQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsQ0FBQztNQUMzRSxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztLQUN6QjtHQUNGO0VBQ0QsSUFBSSxRQUFRLEVBQUU7SUFDWixJQUFJLFVBQVUsR0FBRyxVQUFVLElBQUksRUFBRSxDQUFDO0lBQ2xDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckIsR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUNULElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7TUFDdkIsR0FBRyxJQUFJLEdBQUcsSUFBSSxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7S0FDMUMsTUFBTTtNQUNMLEdBQUcsSUFBSSxHQUFHLElBQUksUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDO0tBQ2hDO0lBQ0QsR0FBRyxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxzQkFBc0IsQ0FBQztJQUM5QyxJQUFJLEVBQUUsQ0FBQyxTQUFTLElBQUksSUFBSSxFQUFFO01BQ3hCLEdBQUcsSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQy9CO0lBQ0QsSUFBSSxXQUFXLEdBQUcsUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsWUFBWTtNQUN6RSxtQkFBbUIsR0FBRyxRQUFRLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztJQUNuRixHQUFHLElBQUksS0FBSyxJQUFJLFdBQVcsQ0FBQyxHQUFHLEtBQUssSUFBSSxtQkFBbUIsQ0FBQyxHQUFHLGVBQWUsQ0FBQztJQUMvRSxJQUFJLGNBQWMsR0FBRyxHQUFHLENBQUM7SUFDekIsR0FBRyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN2QixJQUFJLE1BQU0sRUFBRTtNQUNWLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0NBQXdDLENBQUMsQ0FBQztNQUN6RSxJQUFJLGFBQWEsRUFBRTtRQUNqQixHQUFHLElBQUksT0FBTyxJQUFJLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQztPQUNsQztNQUNELEdBQUcsSUFBSSxlQUFlLElBQUksY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDO01BQ2pELElBQUksYUFBYSxFQUFFO1FBQ2pCLEdBQUcsSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsV0FBVyxDQUFDO09BQ3JDO01BQ0QsR0FBRyxJQUFJLDJLQUEySyxDQUFDO01BQ25MLElBQUksYUFBYSxFQUFFO1FBQ2pCLEdBQUcsSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsWUFBWSxDQUFDO09BQ3RDO01BQ0QsR0FBRyxJQUFJLEtBQUssQ0FBQztNQUNiLElBQUksYUFBYSxFQUFFO1FBQ2pCLEdBQUcsSUFBSSxPQUFPLElBQUksTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO09BQ3BDO0tBQ0YsTUFBTTtNQUNMLEdBQUcsSUFBSSxRQUFRLElBQUksY0FBYyxDQUFDLEdBQUcsc0NBQXNDLElBQUksUUFBUSxDQUFDLEdBQUcseUNBQXlDLElBQUksUUFBUSxDQUFDLEdBQUcsdUNBQXVDLENBQUM7TUFDNUwsSUFBSSxhQUFhLEVBQUU7UUFDakIsR0FBRyxJQUFJLFVBQVUsQ0FBQztPQUNuQjtLQUNGO0dBQ0Y7RUFDRCxPQUFPLEdBQUcsQ0FBQztDQUNaOztBQzFIRCxTQUFjLEdBQUcsU0FBUyxjQUFjLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUU7RUFDaEUsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2QsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztFQUNsQyxJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0VBQ2hFLElBQUksY0FBYyxHQUFHLEVBQUUsQ0FBQyxhQUFhLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQztFQUN2RCxJQUFJLGFBQWEsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0VBQ3ZDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQzNCLElBQUksY0FBYyxHQUFHLEVBQUUsQ0FBQztFQUN4QixHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDWixJQUFJLFVBQVUsR0FBRyxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztFQUNyQyxJQUFJLGNBQWMsR0FBRyxHQUFHLENBQUMsTUFBTTtJQUM3QixnQkFBZ0IsR0FBRyxJQUFJLENBQUM7RUFDMUIsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDO0VBQ25CLElBQUksSUFBSSxFQUFFO0lBQ1IsSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztNQUNmLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUN2QixPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUU7TUFDZCxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztNQUNyQixLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sSUFBSSxJQUFJLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUc7UUFDbkksZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLEdBQUcsQ0FBQyxVQUFVLEdBQUcsV0FBVyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO1FBQzlDLEdBQUcsQ0FBQyxhQUFhLEdBQUcsY0FBYyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDOUMsR0FBRyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ3ZDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsY0FBYyxDQUFDO1FBQzVCLElBQUksYUFBYSxFQUFFO1VBQ2pCLEdBQUcsSUFBSSxPQUFPLElBQUksVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDO1VBQ3ZDLGNBQWMsSUFBSSxHQUFHLENBQUM7U0FDdkI7T0FDRjtLQUNGO0dBQ0Y7RUFDRCxJQUFJLGFBQWEsRUFBRTtJQUNqQixJQUFJLGdCQUFnQixFQUFFO01BQ3BCLEdBQUcsSUFBSSxlQUFlLENBQUM7S0FDeEIsTUFBTTtNQUNMLEdBQUcsSUFBSSxHQUFHLElBQUksY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUNsRDtHQUNGO0VBQ0QsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQy9CLE9BQU8sR0FBRyxDQUFDO0NBQ1o7O0FDekNELFNBQWMsR0FBRyxTQUFTLGNBQWMsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRTtFQUNoRSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDZCxJQUFJLElBQUksR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDO0VBQ3BCLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUM7RUFDNUIsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztFQUNsQyxJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0VBQ2hFLElBQUksY0FBYyxHQUFHLEVBQUUsQ0FBQyxhQUFhLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQztFQUN2RCxJQUFJLGFBQWEsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0VBQ3ZDLElBQUksS0FBSyxHQUFHLE1BQU0sSUFBSSxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7RUFDdEMsSUFBSSxNQUFNLEdBQUcsT0FBTyxHQUFHLElBQUksQ0FBQztFQUM1QixJQUFJLEtBQUssR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDO0VBQzVCLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQzNCLElBQUksY0FBYyxHQUFHLEVBQUUsQ0FBQztFQUN4QixHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDWixJQUFJLFVBQVUsR0FBRyxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztFQUNyQyxJQUFJLGNBQWMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxFQUFFO0lBQ2hELFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLEdBQUcsT0FBTyxJQUFJLElBQUksUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtHQUN4SSxDQUFDLENBQUM7RUFDSCxJQUFJLGNBQWMsRUFBRTtJQUNsQixJQUFJLGNBQWMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO0lBQ2hDLEdBQUcsSUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLEdBQUcsaUJBQWlCLElBQUksTUFBTSxDQUFDLEdBQUcsYUFBYSxDQUFDO0lBQ3hFLElBQUksYUFBYSxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUM7SUFDckMsRUFBRSxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztJQUM1QyxJQUFJLElBQUksR0FBRyxPQUFPLENBQUM7SUFDbkIsSUFBSSxJQUFJLEVBQUU7TUFDUixJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO01BQ3ZCLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUNkLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3JCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLEdBQUcsQ0FBQyxVQUFVLEdBQUcsV0FBVyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO1FBQzlDLEdBQUcsQ0FBQyxhQUFhLEdBQUcsY0FBYyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDOUMsR0FBRyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ3ZDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsY0FBYyxDQUFDO1FBQzVCLEdBQUcsSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsS0FBSyxJQUFJLE1BQU0sQ0FBQyxHQUFHLE1BQU0sSUFBSSxVQUFVLENBQUMsR0FBRyxTQUFTLElBQUksTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQ2pHLGNBQWMsSUFBSSxHQUFHLENBQUM7T0FDdkI7S0FDRjtJQUNELEVBQUUsQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7SUFDckQsR0FBRyxJQUFJLEdBQUcsSUFBSSxjQUFjLENBQUMsR0FBRyxRQUFRLElBQUksTUFBTSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7SUFDM0UsSUFBSSxFQUFFLENBQUMsWUFBWSxLQUFLLEtBQUssRUFBRTtNQUM3QixHQUFHLElBQUksZ0JBQWdCLElBQUksT0FBTyxDQUFDLEdBQUcsc0NBQXNDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLGlCQUFpQixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsZ0JBQWdCLENBQUM7TUFDaEwsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxLQUFLLEVBQUU7UUFDOUIsR0FBRyxJQUFJLG9EQUFvRCxDQUFDO09BQzdEO01BQ0QsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtRQUNuQixHQUFHLElBQUksNEJBQTRCLElBQUksV0FBVyxDQUFDLEdBQUcsa0NBQWtDLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFdBQVcsSUFBSSxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7T0FDMUk7TUFDRCxHQUFHLElBQUksS0FBSyxDQUFDO0tBQ2QsTUFBTTtNQUNMLEdBQUcsSUFBSSxNQUFNLENBQUM7S0FDZjtJQUNELEdBQUcsSUFBSSw4RUFBOEUsQ0FBQztJQUN0RixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsSUFBSSxhQUFhLEVBQUU7O01BRXRDLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRTtRQUNaLEdBQUcsSUFBSSx1Q0FBdUMsQ0FBQztPQUNoRCxNQUFNO1FBQ0wsR0FBRyxJQUFJLDRDQUE0QyxDQUFDO09BQ3JEO0tBQ0Y7SUFDRCxHQUFHLElBQUksc0JBQXNCLElBQUksS0FBSyxDQUFDLEdBQUcsZ0NBQWdDLElBQUksS0FBSyxDQUFDLEdBQUcscUJBQXFCLElBQUksS0FBSyxDQUFDLEdBQUcsMkJBQTJCLENBQUM7SUFDckosSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtNQUNyQixHQUFHLElBQUksS0FBSyxDQUFDO0tBQ2Q7SUFDRCxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7R0FDaEMsTUFBTTtJQUNMLElBQUksYUFBYSxFQUFFO01BQ2pCLEdBQUcsSUFBSSxlQUFlLENBQUM7S0FDeEI7R0FDRjtFQUNELE9BQU8sR0FBRyxDQUFDO0NBQ1o7O0FDeEVELFdBQWMsR0FBRyxTQUFTLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFO0VBQ2xFLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNkLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7RUFDbEMsSUFBSSxjQUFjLEdBQUcsRUFBRSxDQUFDLGFBQWEsR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDO0VBQ3ZELElBQUksYUFBYSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7RUFDdkMsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7RUFDL0MsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7SUFDN0IsR0FBRyxJQUFJLGVBQWUsSUFBSSxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7R0FDNUMsTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksVUFBVSxFQUFFO0lBQ2hELEdBQUcsSUFBSSx1QkFBdUIsSUFBSSxRQUFRLENBQUMsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRywwQkFBMEIsQ0FBQztHQUM1SDtFQUNELE9BQU8sR0FBRyxDQUFDO0NBQ1o7O0FDWkQsVUFBYyxHQUFHLFNBQVMsY0FBYyxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFO0VBQ2hFLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNkLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUM7RUFDcEIsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQztFQUM1QixJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0VBQ2xDLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7RUFDaEUsSUFBSSxjQUFjLEdBQUcsRUFBRSxDQUFDLGFBQWEsR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDO0VBQ3ZELElBQUksYUFBYSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7RUFDdkMsSUFBSSxLQUFLLEdBQUcsTUFBTSxJQUFJLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQztFQUN0QyxJQUFJLE1BQU0sR0FBRyxPQUFPLEdBQUcsSUFBSSxDQUFDO0VBQzVCLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxDQUN4QztFQUNmLElBQUksT0FBTyxFQUFFO0lBQ1gsR0FBRyxJQUFJLGFBQWEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0dBRTNHLEFBRUE7RUFDRCxJQUFJLENBQUMsT0FBTyxFQUFFO0lBQ1osR0FBRyxJQUFJLGFBQWEsSUFBSSxJQUFJLENBQUMsR0FBRyxvQkFBb0IsSUFBSSxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7R0FDNUU7RUFDRCxHQUFHLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxHQUFHLFdBQVcsSUFBSSxLQUFLLENBQUMsR0FBRyxVQUFVLElBQUksSUFBSSxDQUFDLEdBQUcsVUFBVSxJQUFJLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQztFQUMxRyxJQUFJLFVBQVUsR0FBRyxVQUFVLElBQUksRUFBRSxDQUFDO0VBQ2xDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDckIsR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUNULElBQUksRUFBRSxDQUFDLFlBQVksS0FBSyxLQUFLLEVBQUU7SUFDN0IsR0FBRyxJQUFJLGdCQUFnQixJQUFJLE9BQU8sQ0FBQyxHQUFHLHNDQUFzQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxpQkFBaUIsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUFHLG1DQUFtQyxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUNwTixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLEtBQUssRUFBRTtNQUM5QixHQUFHLElBQUksOENBQThDLENBQUM7S0FDdkQ7SUFDRCxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO01BQ25CLEdBQUcsSUFBSSw0QkFBNEIsSUFBSSxXQUFXLENBQUMsR0FBRyxrQ0FBa0MsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsV0FBVyxJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUMxSTtJQUNELEdBQUcsSUFBSSxLQUFLLENBQUM7R0FDZCxNQUFNO0lBQ0wsR0FBRyxJQUFJLE1BQU0sQ0FBQztHQUNmO0VBQ0QsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDO0VBQ2hCLEdBQUcsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDdkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLElBQUksYUFBYSxFQUFFOztJQUV0QyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUU7TUFDWixHQUFHLElBQUksOEJBQThCLElBQUksS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0tBQzFELE1BQU07TUFDTCxHQUFHLElBQUksc0JBQXNCLElBQUksS0FBSyxDQUFDLEdBQUcsbUJBQW1CLENBQUM7S0FDL0Q7R0FDRixNQUFNO0lBQ0wsR0FBRyxJQUFJLGFBQWEsSUFBSSxLQUFLLENBQUMsR0FBRyw4RUFBOEUsQ0FBQztHQUNqSDtFQUNELEdBQUcsSUFBSSxJQUFJLENBQUM7RUFDWixJQUFJLGFBQWEsRUFBRTtJQUNqQixHQUFHLElBQUksVUFBVSxDQUFDO0dBQ25CO0VBQ0QsT0FBTyxHQUFHLENBQUM7Q0FDWjs7QUN0REQsWUFBYyxHQUFHLFNBQVMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUU7RUFDbkUsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2QsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQztFQUNwQixJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDO0VBQzVCLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7RUFDbEMsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztFQUNoRSxJQUFJLGNBQWMsR0FBRyxFQUFFLENBQUMsYUFBYSxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUM7RUFDdkQsSUFBSSxhQUFhLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztFQUN2QyxJQUFJLEtBQUssR0FBRyxNQUFNLElBQUksUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0VBQ3RDLElBQUksTUFBTSxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUM7RUFDNUIsSUFBSSxLQUFLLEdBQUcsUUFBUSxHQUFHLElBQUksQ0FBQztFQUM1QixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUMzQixJQUFJLGNBQWMsR0FBRyxFQUFFLENBQUM7RUFDeEIsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQ1osSUFBSSxVQUFVLEdBQUcsT0FBTyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7RUFDckMsSUFBSSxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUk7SUFDbkIsUUFBUSxHQUFHLEdBQUcsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLFNBQVMsR0FBRyxDQUFDO0lBQzNDLFNBQVMsR0FBRyxNQUFNLEdBQUcsUUFBUTtJQUM3QixjQUFjLEdBQUcsRUFBRSxDQUFDLE1BQU07SUFDMUIsZUFBZSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sT0FBTyxJQUFJLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUM3SixHQUFHLElBQUksTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLGdCQUFnQixJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUM1RCxJQUFJLGVBQWUsRUFBRTtJQUNuQixJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDO0lBQ3JDLEVBQUUsQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFDNUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7SUFDckIsR0FBRyxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUM7SUFDN0IsR0FBRyxDQUFDLGFBQWEsR0FBRyxjQUFjLENBQUM7SUFDbkMsR0FBRyxJQUFJLE9BQU8sSUFBSSxVQUFVLENBQUMsR0FBRyxxQkFBcUIsSUFBSSxJQUFJLENBQUMsR0FBRyxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLEtBQUssQ0FBQyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUM7SUFDdkksR0FBRyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNwRixJQUFJLFNBQVMsR0FBRyxLQUFLLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLENBQUM7SUFDekMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDakMsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QixHQUFHLENBQUMsTUFBTSxHQUFHLGNBQWMsQ0FBQztJQUM1QixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7TUFDL0MsR0FBRyxJQUFJLEdBQUcsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQ3RFLE1BQU07TUFDTCxHQUFHLElBQUksT0FBTyxJQUFJLFNBQVMsQ0FBQyxHQUFHLEtBQUssSUFBSSxTQUFTLENBQUMsR0FBRyxJQUFJLElBQUksS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQzNFO0lBQ0QsR0FBRyxJQUFJLE9BQU8sSUFBSSxVQUFVLENBQUMsR0FBRyxjQUFjLENBQUM7SUFDL0MsRUFBRSxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztJQUNyRCxHQUFHLElBQUksR0FBRyxJQUFJLGNBQWMsQ0FBQyxHQUFHLFFBQVEsSUFBSSxVQUFVLENBQUMsR0FBRyxLQUFLLENBQUM7R0FDakUsTUFBTTtJQUNMLEdBQUcsSUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLEdBQUcsaUJBQWlCLENBQUM7R0FDOUM7RUFDRCxJQUFJLFVBQVUsR0FBRyxVQUFVLElBQUksRUFBRSxDQUFDO0VBQ2xDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDckIsR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUNULElBQUksRUFBRSxDQUFDLFlBQVksS0FBSyxLQUFLLEVBQUU7SUFDN0IsR0FBRyxJQUFJLGdCQUFnQixJQUFJLFVBQVUsQ0FBQyxHQUFHLHNDQUFzQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxpQkFBaUIsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUFHLGdCQUFnQixDQUFDO0lBQ25MLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssS0FBSyxFQUFFO01BQzlCLEdBQUcsSUFBSSw4Q0FBOEMsQ0FBQztLQUN2RDtJQUNELElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7TUFDbkIsR0FBRyxJQUFJLDRCQUE0QixJQUFJLFdBQVcsQ0FBQyxHQUFHLGtDQUFrQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxXQUFXLElBQUksS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQzFJO0lBQ0QsR0FBRyxJQUFJLEtBQUssQ0FBQztHQUNkLE1BQU07SUFDTCxHQUFHLElBQUksTUFBTSxDQUFDO0dBQ2Y7RUFDRCxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUM7RUFDaEIsR0FBRyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUN2QixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsSUFBSSxhQUFhLEVBQUU7O0lBRXRDLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRTtNQUNaLEdBQUcsSUFBSSw4QkFBOEIsSUFBSSxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7S0FDMUQsTUFBTTtNQUNMLEdBQUcsSUFBSSxzQkFBc0IsSUFBSSxLQUFLLENBQUMsR0FBRyxtQkFBbUIsQ0FBQztLQUMvRDtHQUNGLE1BQU07SUFDTCxHQUFHLElBQUksYUFBYSxJQUFJLEtBQUssQ0FBQyxHQUFHLDhFQUE4RSxDQUFDO0dBQ2pIO0VBQ0QsR0FBRyxJQUFJLFlBQVksQ0FBQztFQUNwQixJQUFJLGVBQWUsRUFBRTtJQUNuQixHQUFHLElBQUksYUFBYSxJQUFJLEtBQUssQ0FBQyxHQUFHLGdDQUFnQyxJQUFJLEtBQUssQ0FBQyxHQUFHLHFCQUFxQixJQUFJLEtBQUssQ0FBQyxHQUFHLDJCQUEyQixDQUFDO0dBQzdJO0VBQ0QsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtJQUNyQixHQUFHLElBQUksS0FBSyxDQUFDO0dBQ2Q7RUFDRCxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDL0IsT0FBTyxHQUFHLENBQUM7Q0FDWjs7QUNoRkQsZ0JBQWMsR0FBRyxTQUFTLHFCQUFxQixDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFO0VBQ3ZFLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNkLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUM7RUFDcEIsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQztFQUM1QixJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0VBQ2xDLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7RUFDaEUsSUFBSSxjQUFjLEdBQUcsRUFBRSxDQUFDLGFBQWEsR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDO0VBQ3ZELElBQUksYUFBYSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7RUFDdkMsSUFBSSxLQUFLLEdBQUcsTUFBTSxJQUFJLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQztFQUN0QyxJQUFJLEtBQUssR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDO0VBQzVCLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQzNCLElBQUksY0FBYyxHQUFHLEVBQUUsQ0FBQztFQUN4QixHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDWixJQUFJLFVBQVUsR0FBRyxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztFQUNyQyxJQUFJLFdBQVcsR0FBRyxFQUFFO0lBQ2xCLGFBQWEsR0FBRyxFQUFFO0lBQ2xCLGNBQWMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztFQUN6QyxLQUFLLFNBQVMsSUFBSSxPQUFPLEVBQUU7SUFDekIsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzlCLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsYUFBYSxHQUFHLFdBQVcsQ0FBQztJQUM5RCxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDO0dBQ3pCO0VBQ0QsR0FBRyxJQUFJLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxZQUFZLENBQUM7RUFDdkMsSUFBSSxpQkFBaUIsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDO0VBQ3JDLEdBQUcsSUFBSSxhQUFhLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ3BDLEtBQUssSUFBSSxTQUFTLElBQUksYUFBYSxFQUFFO0lBQ25DLEtBQUssR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDakMsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO01BQ2hCLEdBQUcsSUFBSSxRQUFRLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxpQkFBaUIsQ0FBQztNQUNqRixJQUFJLGNBQWMsRUFBRTtRQUNsQixHQUFHLElBQUksMkNBQTJDLElBQUksS0FBSyxDQUFDLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO09BQ3BIO01BQ0QsSUFBSSxhQUFhLEVBQUU7UUFDakIsR0FBRyxJQUFJLFFBQVEsQ0FBQztRQUNoQixJQUFJLElBQUksR0FBRyxLQUFLLENBQUM7UUFDakIsSUFBSSxJQUFJLEVBQUU7VUFDUixJQUFJLFlBQVksRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztVQUN2QixPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDZCxZQUFZLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM3QixJQUFJLEVBQUUsRUFBRTtjQUNOLEdBQUcsSUFBSSxNQUFNLENBQUM7YUFDZjtZQUNELElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQztjQUMzQyxRQUFRLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUMzQixHQUFHLElBQUksT0FBTyxJQUFJLFFBQVEsQ0FBQyxHQUFHLGlCQUFpQixDQUFDO1lBQ2hELElBQUksY0FBYyxFQUFFO2NBQ2xCLEdBQUcsSUFBSSw2Q0FBNkMsSUFBSSxLQUFLLENBQUMsR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7YUFDekg7WUFDRCxHQUFHLElBQUksZUFBZSxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7V0FDMUg7U0FDRjtRQUNELEdBQUcsSUFBSSxRQUFRLENBQUM7UUFDaEIsSUFBSSxhQUFhLEdBQUcsU0FBUyxHQUFHLElBQUk7VUFDbEMsZ0JBQWdCLEdBQUcsT0FBTyxHQUFHLGFBQWEsR0FBRyxPQUFPLENBQUM7UUFDdkQsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFO1VBQ2xDLEVBQUUsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxHQUFHLGlCQUFpQixHQUFHLEtBQUssR0FBRyxhQUFhLENBQUM7U0FDL0k7UUFDRCxJQUFJLFVBQVUsR0FBRyxVQUFVLElBQUksRUFBRSxDQUFDO1FBQ2xDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckIsR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNULElBQUksRUFBRSxDQUFDLFlBQVksS0FBSyxLQUFLLEVBQUU7VUFDN0IsR0FBRyxJQUFJLGdCQUFnQixJQUFJLGNBQWMsQ0FBQyxHQUFHLHNDQUFzQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxpQkFBaUIsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUFHLDJCQUEyQixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcseUJBQXlCLElBQUksZ0JBQWdCLENBQUMsR0FBRyxpQkFBaUIsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsWUFBWSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7VUFDL1osSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxLQUFLLEVBQUU7WUFDOUIsR0FBRyxJQUFJLDRCQUE0QixDQUFDO1lBQ3BDLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7Y0FDckIsR0FBRyxJQUFJLFdBQVcsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3ZELE1BQU07Y0FDTCxHQUFHLElBQUksYUFBYSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2pFO1lBQ0QsR0FBRyxJQUFJLGlCQUFpQixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsZ0JBQWdCLENBQUM7V0FDakY7VUFDRCxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ25CLEdBQUcsSUFBSSw0QkFBNEIsSUFBSSxXQUFXLENBQUMsR0FBRyxrQ0FBa0MsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsV0FBVyxJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztXQUMxSTtVQUNELEdBQUcsSUFBSSxLQUFLLENBQUM7U0FDZCxNQUFNO1VBQ0wsR0FBRyxJQUFJLE1BQU0sQ0FBQztTQUNmO1FBQ0QsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDO1FBQ2hCLEdBQUcsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLElBQUksYUFBYSxFQUFFOztVQUV0QyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUU7WUFDWixHQUFHLElBQUksOEJBQThCLElBQUksS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO1dBQzFELE1BQU07WUFDTCxHQUFHLElBQUksc0JBQXNCLElBQUksS0FBSyxDQUFDLEdBQUcsbUJBQW1CLENBQUM7V0FDL0Q7U0FDRixNQUFNO1VBQ0wsR0FBRyxJQUFJLGFBQWEsSUFBSSxLQUFLLENBQUMsR0FBRyw4RUFBOEUsQ0FBQztTQUNqSDtPQUNGLE1BQU07UUFDTCxHQUFHLElBQUksT0FBTyxDQUFDO1FBQ2YsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLElBQUksSUFBSSxFQUFFO1VBQ1IsSUFBSSxZQUFZLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN2QixFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7VUFDdkIsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ2QsWUFBWSxHQUFHLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDN0IsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDO2NBQzNDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQztjQUNyRCxRQUFRLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUMzQixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUU7Y0FDbEMsRUFBRSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUN2RjtZQUNELEdBQUcsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLEdBQUcsaUJBQWlCLENBQUM7WUFDakQsSUFBSSxjQUFjLEVBQUU7Y0FDbEIsR0FBRyxJQUFJLDZDQUE2QyxJQUFJLEtBQUssQ0FBQyxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQzthQUN6SDtZQUNELEdBQUcsSUFBSSxtQkFBbUIsQ0FBQztZQUMzQixJQUFJLEVBQUUsQ0FBQyxZQUFZLEtBQUssS0FBSyxFQUFFO2NBQzdCLEdBQUcsSUFBSSxnQkFBZ0IsSUFBSSxjQUFjLENBQUMsR0FBRyxzQ0FBc0MsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsaUJBQWlCLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRywyQkFBMkIsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLHlCQUF5QixJQUFJLGdCQUFnQixDQUFDLEdBQUcsaUJBQWlCLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLFlBQVksSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO2NBQy9aLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssS0FBSyxFQUFFO2dCQUM5QixHQUFHLElBQUksNEJBQTRCLENBQUM7Z0JBQ3BDLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7a0JBQ3JCLEdBQUcsSUFBSSxXQUFXLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDdkQsTUFBTTtrQkFDTCxHQUFHLElBQUksYUFBYSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNqRTtnQkFDRCxHQUFHLElBQUksaUJBQWlCLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQztlQUNqRjtjQUNELElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ25CLEdBQUcsSUFBSSw0QkFBNEIsSUFBSSxXQUFXLENBQUMsR0FBRyxrQ0FBa0MsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsV0FBVyxJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztlQUMxSTtjQUNELEdBQUcsSUFBSSxLQUFLLENBQUM7YUFDZCxNQUFNO2NBQ0wsR0FBRyxJQUFJLE1BQU0sQ0FBQzthQUNmO1lBQ0QsR0FBRyxJQUFJLGdGQUFnRixDQUFDO1dBQ3pGO1NBQ0Y7T0FDRjtNQUNELEdBQUcsSUFBSSxPQUFPLENBQUM7TUFDZixJQUFJLGFBQWEsRUFBRTtRQUNqQixjQUFjLElBQUksR0FBRyxDQUFDO1FBQ3RCLEdBQUcsSUFBSSxVQUFVLENBQUM7T0FDbkI7S0FDRjtHQUNGO0VBQ0QsRUFBRSxDQUFDLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQztFQUNqQyxJQUFJLGNBQWMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO0VBQ2hDLEtBQUssSUFBSSxTQUFTLElBQUksV0FBVyxFQUFFO0lBQ2pDLElBQUksSUFBSSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNsQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sSUFBSSxJQUFJLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUc7TUFDbkksR0FBRyxJQUFJLEdBQUcsSUFBSSxVQUFVLENBQUMsR0FBRyxnQkFBZ0IsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLGlCQUFpQixDQUFDO01BQzlHLElBQUksY0FBYyxFQUFFO1FBQ2xCLEdBQUcsSUFBSSwyQ0FBMkMsSUFBSSxLQUFLLENBQUMsR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7T0FDcEg7TUFDRCxHQUFHLElBQUksTUFBTSxDQUFDO01BQ2QsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7TUFDbEIsR0FBRyxDQUFDLFVBQVUsR0FBRyxXQUFXLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7TUFDOUQsR0FBRyxDQUFDLGFBQWEsR0FBRyxjQUFjLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO01BQzdFLEdBQUcsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztNQUN2QyxHQUFHLENBQUMsTUFBTSxHQUFHLGNBQWMsQ0FBQztNQUM1QixHQUFHLElBQUksTUFBTSxDQUFDO01BQ2QsSUFBSSxhQUFhLEVBQUU7UUFDakIsR0FBRyxJQUFJLE9BQU8sSUFBSSxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDdkMsY0FBYyxJQUFJLEdBQUcsQ0FBQztPQUN2QjtLQUNGO0dBQ0Y7RUFDRCxJQUFJLGFBQWEsRUFBRTtJQUNqQixHQUFHLElBQUksS0FBSyxJQUFJLGNBQWMsQ0FBQyxHQUFHLE9BQU8sSUFBSSxLQUFLLENBQUMsR0FBRyxlQUFlLENBQUM7R0FDdkU7RUFDRCxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDL0IsT0FBTyxHQUFHLENBQUM7Q0FDWjs7QUN0S0QsU0FBYyxHQUFHLFNBQVMsYUFBYSxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFO0VBQy9ELElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNkLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUM7RUFDcEIsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQztFQUM1QixJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0VBQ2xDLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7RUFDaEUsSUFBSSxjQUFjLEdBQUcsRUFBRSxDQUFDLGFBQWEsR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDO0VBQ3ZELElBQUksYUFBYSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7RUFDdkMsSUFBSSxLQUFLLEdBQUcsTUFBTSxJQUFJLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQztFQUN0QyxJQUFJLE1BQU0sR0FBRyxPQUFPLEdBQUcsSUFBSSxDQUFDO0VBQzVCLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxDQUN4QztFQUNmLElBQUksT0FBTyxFQUFFO0lBQ1gsR0FBRyxJQUFJLGFBQWEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0dBRTNHLEFBRUE7RUFDRCxJQUFJLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSTtJQUNqQixRQUFRLEdBQUcsUUFBUSxHQUFHLElBQUksQ0FBQztFQUM3QixJQUFJLENBQUMsT0FBTyxFQUFFO0lBQ1osR0FBRyxJQUFJLE9BQU8sSUFBSSxRQUFRLENBQUMsR0FBRyxvQkFBb0IsSUFBSSxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7R0FDMUU7RUFDRCxHQUFHLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUMvQixJQUFJLE9BQU8sRUFBRTtJQUNYLEdBQUcsSUFBSSxhQUFhLElBQUksSUFBSSxDQUFDLEdBQUcsa0JBQWtCLElBQUksTUFBTSxDQUFDLEdBQUcseUNBQXlDLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLE1BQU0sQ0FBQyxHQUFHLGtCQUFrQixDQUFDO0dBQzVKO0VBQ0QsR0FBRyxJQUFJLEVBQUUsSUFBSSxNQUFNLENBQUMsR0FBRyxvQkFBb0IsSUFBSSxFQUFFLENBQUMsR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLFFBQVEsQ0FBQyxHQUFHLFdBQVcsSUFBSSxFQUFFLENBQUMsR0FBRyxnQkFBZ0IsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLElBQUksUUFBUSxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsQ0FBQyxHQUFHLFFBQVEsSUFBSSxNQUFNLENBQUMsR0FBRyxtQkFBbUIsQ0FBQztFQUNyTixJQUFJLE9BQU8sRUFBRTtJQUNYLEdBQUcsSUFBSSxPQUFPLENBQUM7R0FDaEI7RUFDRCxHQUFHLElBQUksUUFBUSxJQUFJLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQztFQUN0QyxJQUFJLFVBQVUsR0FBRyxVQUFVLElBQUksRUFBRSxDQUFDO0VBQ2xDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDckIsR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUNULElBQUksRUFBRSxDQUFDLFlBQVksS0FBSyxLQUFLLEVBQUU7SUFDN0IsR0FBRyxJQUFJLGdCQUFnQixJQUFJLE1BQU0sQ0FBQyxHQUFHLHNDQUFzQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxpQkFBaUIsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUFHLG9DQUFvQyxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUNwTixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLEtBQUssRUFBRTtNQUM5QixHQUFHLElBQUksK0RBQStELENBQUM7S0FDeEU7SUFDRCxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO01BQ25CLEdBQUcsSUFBSSw0QkFBNEIsSUFBSSxXQUFXLENBQUMsR0FBRyxrQ0FBa0MsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsV0FBVyxJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUMxSTtJQUNELEdBQUcsSUFBSSxLQUFLLENBQUM7R0FDZCxNQUFNO0lBQ0wsR0FBRyxJQUFJLE1BQU0sQ0FBQztHQUNmO0VBQ0QsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDO0VBQ2hCLEdBQUcsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDdkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLElBQUksYUFBYSxFQUFFOztJQUV0QyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUU7TUFDWixHQUFHLElBQUksOEJBQThCLElBQUksS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0tBQzFELE1BQU07TUFDTCxHQUFHLElBQUksc0JBQXNCLElBQUksS0FBSyxDQUFDLEdBQUcsbUJBQW1CLENBQUM7S0FDL0Q7R0FDRixNQUFNO0lBQ0wsR0FBRyxJQUFJLGFBQWEsSUFBSSxLQUFLLENBQUMsR0FBRyw4RUFBOEUsQ0FBQztHQUNqSDtFQUNELEdBQUcsSUFBSSxJQUFJLENBQUM7RUFDWixJQUFJLGFBQWEsRUFBRTtJQUNqQixHQUFHLElBQUksVUFBVSxDQUFDO0dBQ25CO0VBQ0QsT0FBTyxHQUFHLENBQUM7Q0FDWjs7QUNoRUQsVUFBYyxHQUFHLFNBQVMsZUFBZSxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFO0VBQ2pFLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNkLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUM7RUFDcEIsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQztFQUM1QixJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0VBQ2xDLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7RUFDaEUsSUFBSSxjQUFjLEdBQUcsRUFBRSxDQUFDLGFBQWEsR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDO0VBQ3ZELElBQUksYUFBYSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7RUFDdkMsSUFBSSxLQUFLLEdBQUcsTUFBTSxJQUFJLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQztFQUN0QyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLEtBQUssRUFBRTtJQUM1QixJQUFJLGFBQWEsRUFBRTtNQUNqQixHQUFHLElBQUksZUFBZSxDQUFDO0tBQ3hCO0lBQ0QsT0FBTyxHQUFHLENBQUM7R0FDWjtFQUNELElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSztJQUNyRCxZQUFZLENBQUM7RUFDZixJQUFJLE9BQU8sRUFBRTtJQUNYLEdBQUcsSUFBSSxhQUFhLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUMxRyxZQUFZLEdBQUcsUUFBUSxHQUFHLElBQUksQ0FBQztHQUNoQyxNQUFNO0lBQ0wsWUFBWSxHQUFHLE9BQU8sQ0FBQztHQUN4QjtFQUNELElBQUksZUFBZSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYztJQUMxQyxhQUFhLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztFQUNqRCxJQUFJLE9BQU8sRUFBRTtJQUNYLElBQUksT0FBTyxHQUFHLFFBQVEsR0FBRyxJQUFJO01BQzNCLFNBQVMsR0FBRyxVQUFVLEdBQUcsSUFBSTtNQUM3QixXQUFXLEdBQUcsWUFBWSxHQUFHLElBQUksQ0FBQztJQUNwQyxHQUFHLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxHQUFHLGFBQWEsSUFBSSxZQUFZLENBQUMsR0FBRyxTQUFTLElBQUksU0FBUyxDQUFDLEdBQUcsWUFBWSxJQUFJLE9BQU8sQ0FBQyxHQUFHLHNCQUFzQixJQUFJLE9BQU8sQ0FBQyxHQUFHLHlCQUF5QixJQUFJLE9BQU8sQ0FBQyxHQUFHLGlCQUFpQixJQUFJLFdBQVcsQ0FBQyxHQUFHLEtBQUssSUFBSSxTQUFTLENBQUMsR0FBRyxNQUFNLElBQUksT0FBTyxDQUFDLEdBQUcsMkJBQTJCLElBQUksU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ2xVLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRTtNQUNaLEdBQUcsSUFBSSxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLE9BQU8sQ0FBQyxHQUFHLFVBQVUsQ0FBQztLQUMvRDtJQUNELEdBQUcsSUFBSSxHQUFHLElBQUksT0FBTyxDQUFDLEdBQUcsS0FBSyxJQUFJLE9BQU8sQ0FBQyxHQUFHLHFCQUFxQixDQUFDO0lBQ25FLElBQUksT0FBTyxFQUFFO01BQ1gsR0FBRyxJQUFJLElBQUksSUFBSSxZQUFZLENBQUMsR0FBRywyQkFBMkIsSUFBSSxZQUFZLENBQUMsR0FBRyxxQkFBcUIsQ0FBQztLQUNyRztJQUNELEdBQUcsSUFBSSxJQUFJLENBQUM7SUFDWixJQUFJLGVBQWUsSUFBSSxRQUFRLEVBQUU7TUFDL0IsR0FBRyxJQUFJLElBQUksSUFBSSxZQUFZLENBQUMsR0FBRyxPQUFPLElBQUksT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO01BQ3pELElBQUksYUFBYSxFQUFFO1FBQ2pCLEdBQUcsSUFBSSx3Q0FBd0MsSUFBSSxZQUFZLENBQUMsR0FBRyxVQUFVLENBQUM7T0FDL0U7TUFDRCxHQUFHLElBQUksT0FBTyxDQUFDO0tBQ2hCO0lBQ0QsR0FBRyxJQUFJLElBQUksSUFBSSxPQUFPLENBQUMsR0FBRyxNQUFNLElBQUksV0FBVyxDQUFDLEdBQUcsUUFBUSxJQUFJLFNBQVMsQ0FBQyxHQUFHLGlCQUFpQixJQUFJLE9BQU8sQ0FBQyxHQUFHLHFCQUFxQixDQUFDO0lBQ2xJLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRTtNQUNaLEdBQUcsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLEdBQUcsV0FBVyxJQUFJLE9BQU8sQ0FBQyxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxNQUFNLElBQUksT0FBTyxDQUFDLEdBQUcsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQztLQUNsSCxNQUFNO01BQ0wsR0FBRyxJQUFJLEdBQUcsSUFBSSxPQUFPLENBQUMsR0FBRyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDO0tBQy9DO0lBQ0QsR0FBRyxJQUFJLEtBQUssSUFBSSxPQUFPLENBQUMsR0FBRyxRQUFRLElBQUksS0FBSyxDQUFDLEdBQUcsU0FBUyxDQUFDO0dBQzNELE1BQU07SUFDTCxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xDLElBQUksQ0FBQyxPQUFPLEVBQUU7TUFDWixJQUFJLGVBQWUsSUFBSSxRQUFRLEVBQUU7UUFDL0IsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsT0FBTyxHQUFHLCtCQUErQixHQUFHLEVBQUUsQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDeEcsSUFBSSxhQUFhLEVBQUU7VUFDakIsR0FBRyxJQUFJLGVBQWUsQ0FBQztTQUN4QjtRQUNELE9BQU8sR0FBRyxDQUFDO09BQ1osTUFBTSxJQUFJLGFBQWEsSUFBSSxlQUFlLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNqRSxJQUFJLGFBQWEsRUFBRTtVQUNqQixHQUFHLElBQUksZUFBZSxDQUFDO1NBQ3hCO1FBQ0QsT0FBTyxHQUFHLENBQUM7T0FDWixNQUFNO1FBQ0wsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsR0FBRyxPQUFPLEdBQUcsK0JBQStCLEdBQUcsRUFBRSxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUMsQ0FBQztPQUMxRztLQUNGO0lBQ0QsSUFBSSxTQUFTLEdBQUcsT0FBTyxPQUFPLElBQUksUUFBUSxJQUFJLEVBQUUsT0FBTyxZQUFZLE1BQU0sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUM7SUFDL0YsSUFBSSxXQUFXLEdBQUcsU0FBUyxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDO0lBQ3hELElBQUksU0FBUyxFQUFFO01BQ2IsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUM7TUFDcEMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7S0FDNUI7SUFDRCxJQUFJLFdBQVcsSUFBSSxTQUFTLEVBQUU7TUFDNUIsSUFBSSxhQUFhLEVBQUU7UUFDakIsR0FBRyxJQUFJLGVBQWUsQ0FBQztPQUN4QjtNQUNELE9BQU8sR0FBRyxDQUFDO0tBQ1o7SUFDRCxJQUFJLE1BQU0sRUFBRTtNQUNWLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztNQUM5RCxJQUFJLFVBQVUsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsV0FBVyxDQUFDO01BQ3hFLEdBQUcsSUFBSSxlQUFlLElBQUksVUFBVSxDQUFDLEdBQUcsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLFFBQVEsQ0FBQztLQUNsRSxNQUFNO01BQ0wsR0FBRyxJQUFJLFNBQVMsQ0FBQztNQUNqQixJQUFJLFVBQVUsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7TUFDMUQsSUFBSSxTQUFTLEVBQUUsVUFBVSxJQUFJLFdBQVcsQ0FBQztNQUN6QyxJQUFJLE9BQU8sT0FBTyxJQUFJLFVBQVUsRUFBRTtRQUNoQyxHQUFHLElBQUksR0FBRyxJQUFJLFVBQVUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUM7T0FDbEQsTUFBTTtRQUNMLEdBQUcsSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLEdBQUcsUUFBUSxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQztPQUN2RDtNQUNELEdBQUcsSUFBSSxNQUFNLENBQUM7S0FDZjtHQUNGO0VBQ0QsSUFBSSxVQUFVLEdBQUcsVUFBVSxJQUFJLEVBQUUsQ0FBQztFQUNsQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDVCxJQUFJLEVBQUUsQ0FBQyxZQUFZLEtBQUssS0FBSyxFQUFFO0lBQzdCLEdBQUcsSUFBSSxnQkFBZ0IsSUFBSSxRQUFRLENBQUMsR0FBRyxzQ0FBc0MsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsaUJBQWlCLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRyx3QkFBd0IsQ0FBQztJQUN6TCxJQUFJLE9BQU8sRUFBRTtNQUNYLEdBQUcsSUFBSSxFQUFFLElBQUksWUFBWSxDQUFDLENBQUM7S0FDNUIsTUFBTTtNQUNMLEdBQUcsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztLQUMvQztJQUNELEdBQUcsSUFBSSxNQUFNLENBQUM7SUFDZCxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLEtBQUssRUFBRTtNQUM5QixHQUFHLElBQUkscUNBQXFDLENBQUM7TUFDN0MsSUFBSSxPQUFPLEVBQUU7UUFDWCxHQUFHLElBQUksT0FBTyxJQUFJLFlBQVksQ0FBQyxHQUFHLE9BQU8sQ0FBQztPQUMzQyxNQUFNO1FBQ0wsR0FBRyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO09BQzdDO01BQ0QsR0FBRyxJQUFJLE1BQU0sQ0FBQztLQUNmO0lBQ0QsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtNQUNuQixHQUFHLElBQUksY0FBYyxDQUFDO01BQ3RCLElBQUksT0FBTyxFQUFFO1FBQ1gsR0FBRyxJQUFJLGlCQUFpQixJQUFJLFdBQVcsQ0FBQyxDQUFDO09BQzFDLE1BQU07UUFDTCxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7T0FDL0M7TUFDRCxHQUFHLElBQUksMENBQTBDLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFdBQVcsSUFBSSxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7S0FDbkc7SUFDRCxHQUFHLElBQUksS0FBSyxDQUFDO0dBQ2QsTUFBTTtJQUNMLEdBQUcsSUFBSSxNQUFNLENBQUM7R0FDZjtFQUNELElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQztFQUNoQixHQUFHLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ3ZCLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxJQUFJLGFBQWEsRUFBRTs7SUFFdEMsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFO01BQ1osR0FBRyxJQUFJLDhCQUE4QixJQUFJLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQztLQUMxRCxNQUFNO01BQ0wsR0FBRyxJQUFJLHNCQUFzQixJQUFJLEtBQUssQ0FBQyxHQUFHLG1CQUFtQixDQUFDO0tBQy9EO0dBQ0YsTUFBTTtJQUNMLEdBQUcsSUFBSSxhQUFhLElBQUksS0FBSyxDQUFDLEdBQUcsOEVBQThFLENBQUM7R0FDakg7RUFDRCxHQUFHLElBQUksS0FBSyxDQUFDO0VBQ2IsSUFBSSxhQUFhLEVBQUU7SUFDakIsR0FBRyxJQUFJLFVBQVUsQ0FBQztHQUNuQjtFQUNELE9BQU8sR0FBRyxDQUFDO0NBQ1o7O0FDcEpELE9BQWMsR0FBRyxTQUFTLFdBQVcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRTtFQUM3RCxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDZCxJQUFJLElBQUksR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDO0VBQ3BCLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUM7RUFDNUIsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztFQUNsQyxJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0VBQ2hFLElBQUksY0FBYyxHQUFHLEVBQUUsQ0FBQyxhQUFhLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQztFQUN2RCxJQUFJLGFBQWEsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0VBQ3ZDLElBQUksS0FBSyxHQUFHLE1BQU0sSUFBSSxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7RUFDdEMsSUFBSSxNQUFNLEdBQUcsT0FBTyxHQUFHLElBQUksQ0FBQztFQUM1QixJQUFJLEtBQUssR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDO0VBQzVCLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQzNCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUNaLElBQUksVUFBVSxHQUFHLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO0VBQ3JDLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzlCLFFBQVEsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM1QixZQUFZLEdBQUcsUUFBUSxLQUFLLFNBQVMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLFFBQVEsSUFBSSxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BMLFlBQVksR0FBRyxRQUFRLEtBQUssU0FBUyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sUUFBUSxJQUFJLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEwsY0FBYyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7RUFDOUIsSUFBSSxZQUFZLElBQUksWUFBWSxFQUFFO0lBQ2hDLElBQUksU0FBUyxDQUFDO0lBQ2QsR0FBRyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7SUFDekIsR0FBRyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7SUFDckIsR0FBRyxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUM7SUFDN0IsR0FBRyxDQUFDLGFBQWEsR0FBRyxjQUFjLENBQUM7SUFDbkMsR0FBRyxJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsR0FBRyxpQkFBaUIsSUFBSSxNQUFNLENBQUMsR0FBRyxZQUFZLENBQUM7SUFDdkUsSUFBSSxhQUFhLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQztJQUNyQyxFQUFFLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQzVDLEdBQUcsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUN2QyxHQUFHLENBQUMsTUFBTSxHQUFHLGNBQWMsQ0FBQztJQUM1QixHQUFHLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztJQUN4QixHQUFHLElBQUksYUFBYSxJQUFJLEtBQUssQ0FBQyxHQUFHLGdDQUFnQyxJQUFJLEtBQUssQ0FBQyxHQUFHLHFCQUFxQixJQUFJLEtBQUssQ0FBQyxHQUFHLDRCQUE0QixDQUFDO0lBQzdJLEVBQUUsQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7SUFDckQsSUFBSSxZQUFZLEVBQUU7TUFDaEIsR0FBRyxJQUFJLE9BQU8sSUFBSSxVQUFVLENBQUMsR0FBRyxPQUFPLENBQUM7TUFDeEMsR0FBRyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQy9CLEdBQUcsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUM7TUFDekMsR0FBRyxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQztNQUMvQyxHQUFHLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7TUFDdkMsR0FBRyxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUM7TUFDNUIsR0FBRyxJQUFJLEdBQUcsSUFBSSxNQUFNLENBQUMsR0FBRyxLQUFLLElBQUksVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO01BQ3BELElBQUksWUFBWSxJQUFJLFlBQVksRUFBRTtRQUNoQyxTQUFTLEdBQUcsVUFBVSxHQUFHLElBQUksQ0FBQztRQUM5QixHQUFHLElBQUksT0FBTyxJQUFJLFNBQVMsQ0FBQyxHQUFHLGVBQWUsQ0FBQztPQUNoRCxNQUFNO1FBQ0wsU0FBUyxHQUFHLFVBQVUsQ0FBQztPQUN4QjtNQUNELEdBQUcsSUFBSSxLQUFLLENBQUM7TUFDYixJQUFJLFlBQVksRUFBRTtRQUNoQixHQUFHLElBQUksVUFBVSxDQUFDO09BQ25CO0tBQ0YsTUFBTTtNQUNMLEdBQUcsSUFBSSxRQUFRLElBQUksVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDO0tBQ3pDO0lBQ0QsSUFBSSxZQUFZLEVBQUU7TUFDaEIsR0FBRyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQy9CLEdBQUcsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUM7TUFDekMsR0FBRyxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQztNQUMvQyxHQUFHLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7TUFDdkMsR0FBRyxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUM7TUFDNUIsR0FBRyxJQUFJLEdBQUcsSUFBSSxNQUFNLENBQUMsR0FBRyxLQUFLLElBQUksVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO01BQ3BELElBQUksWUFBWSxJQUFJLFlBQVksRUFBRTtRQUNoQyxTQUFTLEdBQUcsVUFBVSxHQUFHLElBQUksQ0FBQztRQUM5QixHQUFHLElBQUksT0FBTyxJQUFJLFNBQVMsQ0FBQyxHQUFHLGVBQWUsQ0FBQztPQUNoRCxNQUFNO1FBQ0wsU0FBUyxHQUFHLFVBQVUsQ0FBQztPQUN4QjtNQUNELEdBQUcsSUFBSSxLQUFLLENBQUM7S0FDZDtJQUNELEdBQUcsSUFBSSxRQUFRLElBQUksTUFBTSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7SUFDbEQsSUFBSSxFQUFFLENBQUMsWUFBWSxLQUFLLEtBQUssRUFBRTtNQUM3QixHQUFHLElBQUksZ0JBQWdCLElBQUksSUFBSSxDQUFDLEdBQUcsc0NBQXNDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLGlCQUFpQixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsK0JBQStCLElBQUksU0FBUyxDQUFDLEdBQUcsS0FBSyxDQUFDO01BQ2xOLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssS0FBSyxFQUFFO1FBQzlCLEdBQUcsSUFBSSxtQ0FBbUMsSUFBSSxTQUFTLENBQUMsR0FBRyxrQkFBa0IsQ0FBQztPQUMvRTtNQUNELElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7UUFDbkIsR0FBRyxJQUFJLDRCQUE0QixJQUFJLFdBQVcsQ0FBQyxHQUFHLGtDQUFrQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxXQUFXLElBQUksS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO09BQzFJO01BQ0QsR0FBRyxJQUFJLEtBQUssQ0FBQztLQUNkLE1BQU07TUFDTCxHQUFHLElBQUksTUFBTSxDQUFDO0tBQ2Y7SUFDRCxHQUFHLElBQUksOEVBQThFLENBQUM7SUFDdEYsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLElBQUksYUFBYSxFQUFFOztNQUV0QyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUU7UUFDWixHQUFHLElBQUksdUNBQXVDLENBQUM7T0FDaEQsTUFBTTtRQUNMLEdBQUcsSUFBSSw0Q0FBNEMsQ0FBQztPQUNyRDtLQUNGO0lBQ0QsR0FBRyxJQUFJLE9BQU8sQ0FBQztJQUNmLElBQUksYUFBYSxFQUFFO01BQ2pCLEdBQUcsSUFBSSxVQUFVLENBQUM7S0FDbkI7SUFDRCxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7R0FDaEMsTUFBTTtJQUNMLElBQUksYUFBYSxFQUFFO01BQ2pCLEdBQUcsSUFBSSxlQUFlLENBQUM7S0FDeEI7R0FDRjtFQUNELE9BQU8sR0FBRyxDQUFDO0NBQ1o7O0FDdEdELFNBQWMsR0FBRyxTQUFTLGNBQWMsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRTtFQUNoRSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDZCxJQUFJLElBQUksR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDO0VBQ3BCLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUM7RUFDNUIsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztFQUNsQyxJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0VBQ2hFLElBQUksY0FBYyxHQUFHLEVBQUUsQ0FBQyxhQUFhLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQztFQUN2RCxJQUFJLGFBQWEsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0VBQ3ZDLElBQUksS0FBSyxHQUFHLE1BQU0sSUFBSSxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7RUFDdEMsSUFBSSxNQUFNLEdBQUcsT0FBTyxHQUFHLElBQUksQ0FBQztFQUM1QixJQUFJLEtBQUssR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDO0VBQzVCLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQzNCLElBQUksY0FBYyxHQUFHLEVBQUUsQ0FBQztFQUN4QixHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDWixJQUFJLFVBQVUsR0FBRyxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztFQUNyQyxJQUFJLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSTtJQUNuQixRQUFRLEdBQUcsR0FBRyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsU0FBUyxHQUFHLENBQUM7SUFDM0MsU0FBUyxHQUFHLE1BQU0sR0FBRyxRQUFRO0lBQzdCLGNBQWMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO0VBQzdCLEdBQUcsSUFBSSxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsZ0JBQWdCLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQzVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtJQUMxQixJQUFJLGdCQUFnQixHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO0lBQ2pELElBQUksZ0JBQWdCLEtBQUssS0FBSyxFQUFFO01BQzlCLEdBQUcsSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsS0FBSyxJQUFJLEtBQUssQ0FBQyxHQUFHLGFBQWEsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDO01BQ2xGLElBQUksa0JBQWtCLEdBQUcsY0FBYyxDQUFDO01BQ3hDLGNBQWMsR0FBRyxFQUFFLENBQUMsYUFBYSxHQUFHLGtCQUFrQixDQUFDO01BQ3ZELEdBQUcsSUFBSSxTQUFTLElBQUksTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDO01BQ3ZDLElBQUksVUFBVSxHQUFHLFVBQVUsSUFBSSxFQUFFLENBQUM7TUFDbEMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUNyQixHQUFHLEdBQUcsRUFBRSxDQUFDO01BQ1QsSUFBSSxFQUFFLENBQUMsWUFBWSxLQUFLLEtBQUssRUFBRTtRQUM3QixHQUFHLElBQUksZ0JBQWdCLElBQUksaUJBQWlCLENBQUMsR0FBRyxzQ0FBc0MsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsaUJBQWlCLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRyxzQkFBc0IsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzNOLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssS0FBSyxFQUFFO1VBQzlCLEdBQUcsSUFBSSwwQ0FBMEMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsV0FBVyxDQUFDO1NBQ3BGO1FBQ0QsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtVQUNuQixHQUFHLElBQUksa0RBQWtELElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFdBQVcsSUFBSSxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7U0FDM0c7UUFDRCxHQUFHLElBQUksS0FBSyxDQUFDO09BQ2QsTUFBTTtRQUNMLEdBQUcsSUFBSSxNQUFNLENBQUM7T0FDZjtNQUNELElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQztNQUNoQixHQUFHLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO01BQ3ZCLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxJQUFJLGFBQWEsRUFBRTs7UUFFdEMsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFO1VBQ1osR0FBRyxJQUFJLDhCQUE4QixJQUFJLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQztTQUMxRCxNQUFNO1VBQ0wsR0FBRyxJQUFJLHNCQUFzQixJQUFJLEtBQUssQ0FBQyxHQUFHLG1CQUFtQixDQUFDO1NBQy9EO09BQ0YsTUFBTTtRQUNMLEdBQUcsSUFBSSxhQUFhLElBQUksS0FBSyxDQUFDLEdBQUcsOEVBQThFLENBQUM7T0FDakg7TUFDRCxHQUFHLElBQUksS0FBSyxDQUFDO01BQ2IsY0FBYyxHQUFHLGtCQUFrQixDQUFDO01BQ3BDLElBQUksYUFBYSxFQUFFO1FBQ2pCLGNBQWMsSUFBSSxHQUFHLENBQUM7UUFDdEIsR0FBRyxJQUFJLFVBQVUsQ0FBQztPQUNuQjtLQUNGO0lBQ0QsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDO0lBQ25CLElBQUksSUFBSSxFQUFFO01BQ1IsSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNmLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztNQUN2QixPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDZCxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNyQixLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sSUFBSSxJQUFJLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUc7VUFDbkksR0FBRyxJQUFJLEdBQUcsSUFBSSxVQUFVLENBQUMsR0FBRyxlQUFlLElBQUksS0FBSyxDQUFDLEdBQUcsWUFBWSxJQUFJLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztVQUNyRixJQUFJLFNBQVMsR0FBRyxLQUFLLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7VUFDdkMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7VUFDbEIsR0FBRyxDQUFDLFVBQVUsR0FBRyxXQUFXLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7VUFDOUMsR0FBRyxDQUFDLGFBQWEsR0FBRyxjQUFjLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztVQUM5QyxHQUFHLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO1VBQ2xGLEdBQUcsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO1VBQy9CLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7VUFDN0IsR0FBRyxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUM7VUFDNUIsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQy9DLEdBQUcsSUFBSSxHQUFHLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztXQUN0RSxNQUFNO1lBQ0wsR0FBRyxJQUFJLE9BQU8sSUFBSSxTQUFTLENBQUMsR0FBRyxLQUFLLElBQUksU0FBUyxDQUFDLEdBQUcsSUFBSSxJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztXQUMzRTtVQUNELEdBQUcsSUFBSSxNQUFNLENBQUM7VUFDZCxJQUFJLGFBQWEsRUFBRTtZQUNqQixHQUFHLElBQUksT0FBTyxJQUFJLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztZQUN2QyxjQUFjLElBQUksR0FBRyxDQUFDO1dBQ3ZCO1NBQ0Y7T0FDRjtLQUNGO0lBQ0QsSUFBSSxPQUFPLGdCQUFnQixJQUFJLFFBQVEsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLGdCQUFnQixJQUFJLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7TUFDOU0sR0FBRyxDQUFDLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQztNQUM5QixHQUFHLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxVQUFVLEdBQUcsa0JBQWtCLENBQUM7TUFDcEQsR0FBRyxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUMsYUFBYSxHQUFHLGtCQUFrQixDQUFDO01BQzFELEdBQUcsSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLEdBQUcsZUFBZSxJQUFJLEtBQUssQ0FBQyxHQUFHLFlBQVksSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsZ0JBQWdCLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLEtBQUssQ0FBQyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUM7TUFDbk4sR0FBRyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztNQUNwRixJQUFJLFNBQVMsR0FBRyxLQUFLLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLENBQUM7TUFDekMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7TUFDakMsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUM3QixHQUFHLENBQUMsTUFBTSxHQUFHLGNBQWMsQ0FBQztNQUM1QixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDL0MsR0FBRyxJQUFJLEdBQUcsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO09BQ3RFLE1BQU07UUFDTCxHQUFHLElBQUksT0FBTyxJQUFJLFNBQVMsQ0FBQyxHQUFHLEtBQUssSUFBSSxTQUFTLENBQUMsR0FBRyxJQUFJLElBQUksS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO09BQzNFO01BQ0QsSUFBSSxhQUFhLEVBQUU7UUFDakIsR0FBRyxJQUFJLFFBQVEsSUFBSSxVQUFVLENBQUMsR0FBRyxXQUFXLENBQUM7T0FDOUM7TUFDRCxHQUFHLElBQUksUUFBUSxDQUFDO01BQ2hCLElBQUksYUFBYSxFQUFFO1FBQ2pCLEdBQUcsSUFBSSxPQUFPLElBQUksVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQ3ZDLGNBQWMsSUFBSSxHQUFHLENBQUM7T0FDdkI7S0FDRjtHQUNGLE1BQU0sS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLE9BQU8sSUFBSSxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHO0lBQ25KLEdBQUcsQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDO0lBQzdCLEdBQUcsQ0FBQyxhQUFhLEdBQUcsY0FBYyxDQUFDO0lBQ25DLEdBQUcsSUFBSSxhQUFhLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksS0FBSyxDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQztJQUNoSCxHQUFHLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3BGLElBQUksU0FBUyxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQztJQUN6QyxHQUFHLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUNqQyxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsY0FBYyxDQUFDO0lBQzVCLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtNQUMvQyxHQUFHLElBQUksR0FBRyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7S0FDdEUsTUFBTTtNQUNMLEdBQUcsSUFBSSxPQUFPLElBQUksU0FBUyxDQUFDLEdBQUcsS0FBSyxJQUFJLFNBQVMsQ0FBQyxHQUFHLElBQUksSUFBSSxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7S0FDM0U7SUFDRCxJQUFJLGFBQWEsRUFBRTtNQUNqQixHQUFHLElBQUksUUFBUSxJQUFJLFVBQVUsQ0FBQyxHQUFHLFdBQVcsQ0FBQztLQUM5QztJQUNELEdBQUcsSUFBSSxJQUFJLENBQUM7R0FDYjtFQUNELElBQUksYUFBYSxFQUFFO0lBQ2pCLEdBQUcsSUFBSSxHQUFHLElBQUksY0FBYyxDQUFDLEdBQUcsT0FBTyxJQUFJLEtBQUssQ0FBQyxHQUFHLGVBQWUsQ0FBQztHQUNyRTtFQUNELEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUMvQixPQUFPLEdBQUcsQ0FBQztDQUNaOztBQzNJRCxVQUFjLEdBQUcsU0FBUyxlQUFlLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUU7RUFDakUsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2QsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQztFQUNwQixJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDO0VBQzVCLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7RUFDbEMsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztFQUNoRSxJQUFJLGNBQWMsR0FBRyxFQUFFLENBQUMsYUFBYSxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUM7RUFDdkQsSUFBSSxhQUFhLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztFQUN2QyxJQUFJLGFBQWEsQ0FBQztFQUNsQixJQUFJLEtBQUssR0FBRyxNQUFNLElBQUksUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0VBQ3RDLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSztJQUNyRCxZQUFZLENBQUM7RUFDZixJQUFJLE9BQU8sRUFBRTtJQUNYLEdBQUcsSUFBSSxhQUFhLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUMxRyxZQUFZLEdBQUcsUUFBUSxHQUFHLElBQUksQ0FBQztHQUNoQyxNQUFNO0lBQ0wsWUFBWSxHQUFHLE9BQU8sQ0FBQztHQUN4QjtFQUNELElBQUksTUFBTSxHQUFHLFFBQVEsSUFBSSxTQUFTO0lBQ2hDLGlCQUFpQixHQUFHLE1BQU0sR0FBRyxrQkFBa0IsR0FBRyxrQkFBa0I7SUFDcEUsV0FBVyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUM7SUFDMUMsV0FBVyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLFdBQVcsSUFBSSxXQUFXLENBQUMsS0FBSztJQUMvRCxHQUFHLEdBQUcsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHO0lBQ3hCLE1BQU0sR0FBRyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUc7SUFDM0IsYUFBYSxHQUFHLFNBQVMsQ0FBQztFQUM1QixJQUFJLFdBQVcsRUFBRTtJQUNmLElBQUksZ0JBQWdCLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQztNQUNqRixVQUFVLEdBQUcsV0FBVyxHQUFHLElBQUk7TUFDL0IsU0FBUyxHQUFHLFVBQVUsR0FBRyxJQUFJO01BQzdCLGFBQWEsR0FBRyxjQUFjLEdBQUcsSUFBSTtNQUNyQyxPQUFPLEdBQUcsSUFBSSxHQUFHLElBQUk7TUFDckIsTUFBTSxHQUFHLE9BQU8sR0FBRyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQ3ZDLEdBQUcsSUFBSSxpQkFBaUIsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEUsZ0JBQWdCLEdBQUcsWUFBWSxHQUFHLElBQUksQ0FBQztJQUN2QyxHQUFHLElBQUksT0FBTyxJQUFJLFVBQVUsQ0FBQyxHQUFHLFFBQVEsSUFBSSxTQUFTLENBQUMsR0FBRyxZQUFZLElBQUksZ0JBQWdCLENBQUMsR0FBRyxRQUFRLElBQUksU0FBUyxDQUFDLEdBQUcscUJBQXFCLElBQUksU0FBUyxDQUFDLEdBQUcsdUJBQXVCLElBQUksU0FBUyxDQUFDLEdBQUcsb0JBQW9CLENBQUM7SUFDek4sSUFBSSxhQUFhLEdBQUcsaUJBQWlCLENBQUM7SUFDdEMsSUFBSSxVQUFVLEdBQUcsVUFBVSxJQUFJLEVBQUUsQ0FBQztJQUNsQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDVCxJQUFJLEVBQUUsQ0FBQyxZQUFZLEtBQUssS0FBSyxFQUFFO01BQzdCLEdBQUcsSUFBSSxnQkFBZ0IsSUFBSSxhQUFhLElBQUksaUJBQWlCLENBQUMsR0FBRyxzQ0FBc0MsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsaUJBQWlCLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQztNQUMzTSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLEtBQUssRUFBRTtRQUM5QixHQUFHLElBQUksZ0JBQWdCLElBQUksaUJBQWlCLENBQUMsR0FBRyx1QkFBdUIsQ0FBQztPQUN6RTtNQUNELElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7UUFDbkIsR0FBRyxJQUFJLDRCQUE0QixJQUFJLFdBQVcsQ0FBQyxHQUFHLGtDQUFrQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxXQUFXLElBQUksS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO09BQzFJO01BQ0QsR0FBRyxJQUFJLEtBQUssQ0FBQztLQUNkLE1BQU07TUFDTCxHQUFHLElBQUksTUFBTSxDQUFDO0tBQ2Y7SUFDRCxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUM7SUFDaEIsR0FBRyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN2QixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsSUFBSSxhQUFhLEVBQUU7O01BRXRDLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRTtRQUNaLEdBQUcsSUFBSSw4QkFBOEIsSUFBSSxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7T0FDMUQsTUFBTTtRQUNMLEdBQUcsSUFBSSxzQkFBc0IsSUFBSSxLQUFLLENBQUMsR0FBRyxtQkFBbUIsQ0FBQztPQUMvRDtLQUNGLE1BQU07TUFDTCxHQUFHLElBQUksYUFBYSxJQUFJLEtBQUssQ0FBQyxHQUFHLDhFQUE4RSxDQUFDO0tBQ2pIO0lBQ0QsR0FBRyxJQUFJLGVBQWUsQ0FBQztJQUN2QixJQUFJLE9BQU8sRUFBRTtNQUNYLEdBQUcsSUFBSSxJQUFJLElBQUksWUFBWSxDQUFDLEdBQUcsMkJBQTJCLElBQUksWUFBWSxDQUFDLEdBQUcscUJBQXFCLENBQUM7S0FDckc7SUFDRCxHQUFHLElBQUksR0FBRyxJQUFJLFNBQVMsQ0FBQyxHQUFHLHNCQUFzQixJQUFJLFVBQVUsQ0FBQyxHQUFHLEtBQUssSUFBSSxZQUFZLENBQUMsR0FBRyxvQkFBb0IsSUFBSSxnQkFBZ0IsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLElBQUksWUFBWSxDQUFDLEdBQUcsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLElBQUksZ0JBQWdCLENBQUMsR0FBRyxLQUFLLElBQUksS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsSUFBSSxZQUFZLENBQUMsR0FBRyxVQUFVLElBQUksVUFBVSxDQUFDLEdBQUcsS0FBSyxJQUFJLGdCQUFnQixDQUFDLEdBQUcsZUFBZSxJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLElBQUksWUFBWSxDQUFDLEdBQUcsS0FBSyxJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxNQUFNLENBQUMsR0FBRyxHQUFHLElBQUksWUFBWSxDQUFDLEdBQUcsUUFBUSxJQUFJLEtBQUssQ0FBQyxHQUFHLE9BQU8sSUFBSSxLQUFLLENBQUMsR0FBRyxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLFVBQVUsQ0FBQyxHQUFHLE9BQU8sSUFBSSxHQUFHLENBQUMsR0FBRyxTQUFTLElBQUksR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDO0lBQ3RtQixJQUFJLE9BQU8sS0FBSyxTQUFTLEVBQUU7TUFDekIsYUFBYSxHQUFHLGlCQUFpQixDQUFDO01BQ2xDLGNBQWMsR0FBRyxFQUFFLENBQUMsYUFBYSxHQUFHLEdBQUcsR0FBRyxpQkFBaUIsQ0FBQztNQUM1RCxZQUFZLEdBQUcsZ0JBQWdCLENBQUM7TUFDaEMsT0FBTyxHQUFHLFdBQVcsQ0FBQztLQUN2QjtHQUNGLE1BQU07SUFDTCxJQUFJLGFBQWEsR0FBRyxPQUFPLFdBQVcsSUFBSSxRQUFRO01BQ2hELE1BQU0sR0FBRyxHQUFHLENBQUM7SUFDZixJQUFJLGFBQWEsSUFBSSxPQUFPLEVBQUU7TUFDNUIsSUFBSSxPQUFPLEdBQUcsSUFBSSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUM7TUFDbkMsR0FBRyxJQUFJLFFBQVEsQ0FBQztNQUNoQixJQUFJLE9BQU8sRUFBRTtRQUNYLEdBQUcsSUFBSSxJQUFJLElBQUksWUFBWSxDQUFDLEdBQUcsMkJBQTJCLElBQUksWUFBWSxDQUFDLEdBQUcscUJBQXFCLENBQUM7T0FDckc7TUFDRCxHQUFHLElBQUksS0FBSyxJQUFJLFlBQVksQ0FBQyxHQUFHLG9CQUFvQixJQUFJLFdBQVcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLElBQUksWUFBWSxDQUFDLEdBQUcsS0FBSyxJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLElBQUksV0FBVyxDQUFDLEdBQUcsS0FBSyxJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxNQUFNLENBQUMsR0FBRyxHQUFHLElBQUksWUFBWSxDQUFDLEdBQUcsUUFBUSxJQUFJLEtBQUssQ0FBQyxHQUFHLE9BQU8sSUFBSSxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7S0FDbFIsTUFBTTtNQUNMLElBQUksYUFBYSxJQUFJLE9BQU8sS0FBSyxTQUFTLEVBQUU7UUFDMUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUNsQixhQUFhLEdBQUcsaUJBQWlCLENBQUM7UUFDbEMsY0FBYyxHQUFHLEVBQUUsQ0FBQyxhQUFhLEdBQUcsR0FBRyxHQUFHLGlCQUFpQixDQUFDO1FBQzVELFlBQVksR0FBRyxXQUFXLENBQUM7UUFDM0IsTUFBTSxJQUFJLEdBQUcsQ0FBQztPQUNmLE1BQU07UUFDTCxJQUFJLGFBQWEsRUFBRSxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3JGLElBQUksV0FBVyxNQUFNLGFBQWEsR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLEVBQUU7VUFDekQsVUFBVSxHQUFHLElBQUksQ0FBQztVQUNsQixhQUFhLEdBQUcsaUJBQWlCLENBQUM7VUFDbEMsY0FBYyxHQUFHLEVBQUUsQ0FBQyxhQUFhLEdBQUcsR0FBRyxHQUFHLGlCQUFpQixDQUFDO1VBQzVELE1BQU0sSUFBSSxHQUFHLENBQUM7U0FDZixNQUFNO1VBQ0wsVUFBVSxHQUFHLEtBQUssQ0FBQztVQUNuQixNQUFNLElBQUksR0FBRyxDQUFDO1NBQ2Y7T0FDRjtNQUNELElBQUksT0FBTyxHQUFHLElBQUksR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDO01BQ25DLEdBQUcsSUFBSSxRQUFRLENBQUM7TUFDaEIsSUFBSSxPQUFPLEVBQUU7UUFDWCxHQUFHLElBQUksSUFBSSxJQUFJLFlBQVksQ0FBQyxHQUFHLDJCQUEyQixJQUFJLFlBQVksQ0FBQyxHQUFHLHFCQUFxQixDQUFDO09BQ3JHO01BQ0QsR0FBRyxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLFlBQVksQ0FBQyxHQUFHLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxPQUFPLElBQUksS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0tBQzlHO0dBQ0Y7RUFDRCxhQUFhLEdBQUcsYUFBYSxJQUFJLFFBQVEsQ0FBQztFQUMxQyxJQUFJLFVBQVUsR0FBRyxVQUFVLElBQUksRUFBRSxDQUFDO0VBQ2xDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDckIsR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUNULElBQUksRUFBRSxDQUFDLFlBQVksS0FBSyxLQUFLLEVBQUU7SUFDN0IsR0FBRyxJQUFJLGdCQUFnQixJQUFJLGFBQWEsSUFBSSxRQUFRLENBQUMsR0FBRyxzQ0FBc0MsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsaUJBQWlCLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRywyQkFBMkIsSUFBSSxPQUFPLENBQUMsR0FBRyxXQUFXLElBQUksWUFBWSxDQUFDLEdBQUcsZUFBZSxJQUFJLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUNqUyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLEtBQUssRUFBRTtNQUM5QixHQUFHLElBQUksMEJBQTBCLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO01BQ25ELElBQUksT0FBTyxFQUFFO1FBQ1gsR0FBRyxJQUFJLE9BQU8sSUFBSSxZQUFZLENBQUMsQ0FBQztPQUNqQyxNQUFNO1FBQ0wsR0FBRyxJQUFJLEVBQUUsSUFBSSxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUM7T0FDbkM7S0FDRjtJQUNELElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7TUFDbkIsR0FBRyxJQUFJLGNBQWMsQ0FBQztNQUN0QixJQUFJLE9BQU8sRUFBRTtRQUNYLEdBQUcsSUFBSSxpQkFBaUIsSUFBSSxXQUFXLENBQUMsQ0FBQztPQUMxQyxNQUFNO1FBQ0wsR0FBRyxJQUFJLEVBQUUsSUFBSSxPQUFPLENBQUMsQ0FBQztPQUN2QjtNQUNELEdBQUcsSUFBSSwwQ0FBMEMsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsV0FBVyxJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUNuRztJQUNELEdBQUcsSUFBSSxLQUFLLENBQUM7R0FDZCxNQUFNO0lBQ0wsR0FBRyxJQUFJLE1BQU0sQ0FBQztHQUNmO0VBQ0QsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDO0VBQ2hCLEdBQUcsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDdkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLElBQUksYUFBYSxFQUFFOztJQUV0QyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUU7TUFDWixHQUFHLElBQUksOEJBQThCLElBQUksS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0tBQzFELE1BQU07TUFDTCxHQUFHLElBQUksc0JBQXNCLElBQUksS0FBSyxDQUFDLEdBQUcsbUJBQW1CLENBQUM7S0FDL0Q7R0FDRixNQUFNO0lBQ0wsR0FBRyxJQUFJLGFBQWEsSUFBSSxLQUFLLENBQUMsR0FBRyw4RUFBOEUsQ0FBQztHQUNqSDtFQUNELEdBQUcsSUFBSSxLQUFLLENBQUM7RUFDYixJQUFJLGFBQWEsRUFBRTtJQUNqQixHQUFHLElBQUksVUFBVSxDQUFDO0dBQ25CO0VBQ0QsT0FBTyxHQUFHLENBQUM7Q0FDWjs7QUMzSkQsZUFBYyxHQUFHLFNBQVMsb0JBQW9CLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUU7RUFDdEUsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2QsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQztFQUNwQixJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDO0VBQzVCLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7RUFDbEMsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztFQUNoRSxJQUFJLGNBQWMsR0FBRyxFQUFFLENBQUMsYUFBYSxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUM7RUFDdkQsSUFBSSxhQUFhLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztFQUN2QyxJQUFJLGFBQWEsQ0FBQztFQUNsQixJQUFJLEtBQUssR0FBRyxNQUFNLElBQUksUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0VBQ3RDLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSztJQUNyRCxZQUFZLENBQUM7RUFDZixJQUFJLE9BQU8sRUFBRTtJQUNYLEdBQUcsSUFBSSxhQUFhLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUMxRyxZQUFZLEdBQUcsUUFBUSxHQUFHLElBQUksQ0FBQztHQUNoQyxNQUFNO0lBQ0wsWUFBWSxHQUFHLE9BQU8sQ0FBQztHQUN4QjtFQUNELElBQUksR0FBRyxHQUFHLFFBQVEsSUFBSSxVQUFVLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUM3QyxHQUFHLElBQUksT0FBTyxDQUFDO0VBQ2YsSUFBSSxPQUFPLEVBQUU7SUFDWCxHQUFHLElBQUksSUFBSSxJQUFJLFlBQVksQ0FBQyxHQUFHLDJCQUEyQixJQUFJLFlBQVksQ0FBQyxHQUFHLHFCQUFxQixDQUFDO0dBQ3JHO0VBQ0QsR0FBRyxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxVQUFVLElBQUksR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztFQUMxRSxJQUFJLGFBQWEsR0FBRyxRQUFRLENBQUM7RUFDN0IsSUFBSSxVQUFVLEdBQUcsVUFBVSxJQUFJLEVBQUUsQ0FBQztFQUNsQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDVCxJQUFJLEVBQUUsQ0FBQyxZQUFZLEtBQUssS0FBSyxFQUFFO0lBQzdCLEdBQUcsSUFBSSxnQkFBZ0IsSUFBSSxhQUFhLElBQUksYUFBYSxDQUFDLEdBQUcsc0NBQXNDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLGlCQUFpQixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsc0JBQXNCLElBQUksWUFBWSxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ3RPLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssS0FBSyxFQUFFO01BQzlCLEdBQUcsSUFBSSxnQ0FBZ0MsQ0FBQztNQUN4QyxJQUFJLFFBQVEsSUFBSSxVQUFVLEVBQUU7UUFDMUIsR0FBRyxJQUFJLE1BQU0sQ0FBQztPQUNmLE1BQU07UUFDTCxHQUFHLElBQUksT0FBTyxDQUFDO09BQ2hCO01BQ0QsR0FBRyxJQUFJLFFBQVEsQ0FBQztNQUNoQixJQUFJLE9BQU8sRUFBRTtRQUNYLEdBQUcsSUFBSSxPQUFPLElBQUksWUFBWSxDQUFDLEdBQUcsT0FBTyxDQUFDO09BQzNDLE1BQU07UUFDTCxHQUFHLElBQUksRUFBRSxJQUFJLE9BQU8sQ0FBQyxDQUFDO09BQ3ZCO01BQ0QsR0FBRyxJQUFJLFdBQVcsQ0FBQztLQUNwQjtJQUNELElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7TUFDbkIsR0FBRyxJQUFJLGNBQWMsQ0FBQztNQUN0QixJQUFJLE9BQU8sRUFBRTtRQUNYLEdBQUcsSUFBSSxpQkFBaUIsSUFBSSxXQUFXLENBQUMsQ0FBQztPQUMxQyxNQUFNO1FBQ0wsR0FBRyxJQUFJLEVBQUUsSUFBSSxPQUFPLENBQUMsQ0FBQztPQUN2QjtNQUNELEdBQUcsSUFBSSwwQ0FBMEMsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsV0FBVyxJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUNuRztJQUNELEdBQUcsSUFBSSxLQUFLLENBQUM7R0FDZCxNQUFNO0lBQ0wsR0FBRyxJQUFJLE1BQU0sQ0FBQztHQUNmO0VBQ0QsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDO0VBQ2hCLEdBQUcsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDdkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLElBQUksYUFBYSxFQUFFOztJQUV0QyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUU7TUFDWixHQUFHLElBQUksOEJBQThCLElBQUksS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0tBQzFELE1BQU07TUFDTCxHQUFHLElBQUksc0JBQXNCLElBQUksS0FBSyxDQUFDLEdBQUcsbUJBQW1CLENBQUM7S0FDL0Q7R0FDRixNQUFNO0lBQ0wsR0FBRyxJQUFJLGFBQWEsSUFBSSxLQUFLLENBQUMsR0FBRyw4RUFBOEUsQ0FBQztHQUNqSDtFQUNELEdBQUcsSUFBSSxJQUFJLENBQUM7RUFDWixJQUFJLGFBQWEsRUFBRTtJQUNqQixHQUFHLElBQUksVUFBVSxDQUFDO0dBQ25CO0VBQ0QsT0FBTyxHQUFHLENBQUM7Q0FDWjs7QUMzRUQsZ0JBQWMsR0FBRyxTQUFTLHFCQUFxQixDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFO0VBQ3ZFLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNkLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUM7RUFDcEIsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQztFQUM1QixJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0VBQ2xDLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7RUFDaEUsSUFBSSxjQUFjLEdBQUcsRUFBRSxDQUFDLGFBQWEsR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDO0VBQ3ZELElBQUksYUFBYSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7RUFDdkMsSUFBSSxhQUFhLENBQUM7RUFDbEIsSUFBSSxLQUFLLEdBQUcsTUFBTSxJQUFJLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQztFQUN0QyxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLEtBQUs7SUFDckQsWUFBWSxDQUFDO0VBQ2YsSUFBSSxPQUFPLEVBQUU7SUFDWCxHQUFHLElBQUksYUFBYSxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDMUcsWUFBWSxHQUFHLFFBQVEsR0FBRyxJQUFJLENBQUM7R0FDaEMsTUFBTTtJQUNMLFlBQVksR0FBRyxPQUFPLENBQUM7R0FDeEI7RUFDRCxJQUFJLEdBQUcsR0FBRyxRQUFRLElBQUksV0FBVyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDOUMsR0FBRyxJQUFJLE9BQU8sQ0FBQztFQUNmLElBQUksT0FBTyxFQUFFO0lBQ1gsR0FBRyxJQUFJLElBQUksSUFBSSxZQUFZLENBQUMsR0FBRywyQkFBMkIsSUFBSSxZQUFZLENBQUMsR0FBRyxxQkFBcUIsQ0FBQztHQUNyRztFQUNELElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEtBQUssS0FBSyxFQUFFO0lBQzdCLEdBQUcsSUFBSSxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsVUFBVSxDQUFDO0dBQ25DLE1BQU07SUFDTCxHQUFHLElBQUksY0FBYyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQztHQUN4QztFQUNELEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztFQUNuRCxJQUFJLGFBQWEsR0FBRyxRQUFRLENBQUM7RUFDN0IsSUFBSSxVQUFVLEdBQUcsVUFBVSxJQUFJLEVBQUUsQ0FBQztFQUNsQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3JCLEdBQUcsR0FBRyxFQUFFLENBQUM7RUFDVCxJQUFJLEVBQUUsQ0FBQyxZQUFZLEtBQUssS0FBSyxFQUFFO0lBQzdCLEdBQUcsSUFBSSxnQkFBZ0IsSUFBSSxhQUFhLElBQUksY0FBYyxDQUFDLEdBQUcsc0NBQXNDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLGlCQUFpQixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsc0JBQXNCLElBQUksWUFBWSxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ3ZPLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssS0FBSyxFQUFFO01BQzlCLEdBQUcsSUFBSSw4QkFBOEIsQ0FBQztNQUN0QyxJQUFJLFFBQVEsSUFBSSxXQUFXLEVBQUU7UUFDM0IsR0FBRyxJQUFJLFFBQVEsQ0FBQztPQUNqQixNQUFNO1FBQ0wsR0FBRyxJQUFJLFNBQVMsQ0FBQztPQUNsQjtNQUNELEdBQUcsSUFBSSxRQUFRLENBQUM7TUFDaEIsSUFBSSxPQUFPLEVBQUU7UUFDWCxHQUFHLElBQUksT0FBTyxJQUFJLFlBQVksQ0FBQyxHQUFHLE9BQU8sQ0FBQztPQUMzQyxNQUFNO1FBQ0wsR0FBRyxJQUFJLEVBQUUsSUFBSSxPQUFPLENBQUMsQ0FBQztPQUN2QjtNQUNELEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQztLQUN6QjtJQUNELElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7TUFDbkIsR0FBRyxJQUFJLGNBQWMsQ0FBQztNQUN0QixJQUFJLE9BQU8sRUFBRTtRQUNYLEdBQUcsSUFBSSxpQkFBaUIsSUFBSSxXQUFXLENBQUMsQ0FBQztPQUMxQyxNQUFNO1FBQ0wsR0FBRyxJQUFJLEVBQUUsSUFBSSxPQUFPLENBQUMsQ0FBQztPQUN2QjtNQUNELEdBQUcsSUFBSSwwQ0FBMEMsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsV0FBVyxJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUNuRztJQUNELEdBQUcsSUFBSSxLQUFLLENBQUM7R0FDZCxNQUFNO0lBQ0wsR0FBRyxJQUFJLE1BQU0sQ0FBQztHQUNmO0VBQ0QsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDO0VBQ2hCLEdBQUcsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDdkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLElBQUksYUFBYSxFQUFFOztJQUV0QyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUU7TUFDWixHQUFHLElBQUksOEJBQThCLElBQUksS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0tBQzFELE1BQU07TUFDTCxHQUFHLElBQUksc0JBQXNCLElBQUksS0FBSyxDQUFDLEdBQUcsbUJBQW1CLENBQUM7S0FDL0Q7R0FDRixNQUFNO0lBQ0wsR0FBRyxJQUFJLGFBQWEsSUFBSSxLQUFLLENBQUMsR0FBRyw4RUFBOEUsQ0FBQztHQUNqSDtFQUNELEdBQUcsSUFBSSxJQUFJLENBQUM7RUFDWixJQUFJLGFBQWEsRUFBRTtJQUNqQixHQUFHLElBQUksVUFBVSxDQUFDO0dBQ25CO0VBQ0QsT0FBTyxHQUFHLENBQUM7Q0FDWjs7QUNoRkQsb0JBQWMsR0FBRyxTQUFTLHlCQUF5QixDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFO0VBQzNFLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNkLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUM7RUFDcEIsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQztFQUM1QixJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0VBQ2xDLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7RUFDaEUsSUFBSSxjQUFjLEdBQUcsRUFBRSxDQUFDLGFBQWEsR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDO0VBQ3ZELElBQUksYUFBYSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7RUFDdkMsSUFBSSxhQUFhLENBQUM7RUFDbEIsSUFBSSxLQUFLLEdBQUcsTUFBTSxJQUFJLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQztFQUN0QyxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLEtBQUs7SUFDckQsWUFBWSxDQUFDO0VBQ2YsSUFBSSxPQUFPLEVBQUU7SUFDWCxHQUFHLElBQUksYUFBYSxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDMUcsWUFBWSxHQUFHLFFBQVEsR0FBRyxJQUFJLENBQUM7R0FDaEMsTUFBTTtJQUNMLFlBQVksR0FBRyxPQUFPLENBQUM7R0FDeEI7RUFDRCxJQUFJLEdBQUcsR0FBRyxRQUFRLElBQUksZUFBZSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDbEQsR0FBRyxJQUFJLE9BQU8sQ0FBQztFQUNmLElBQUksT0FBTyxFQUFFO0lBQ1gsR0FBRyxJQUFJLElBQUksSUFBSSxZQUFZLENBQUMsR0FBRywyQkFBMkIsSUFBSSxZQUFZLENBQUMsR0FBRyxxQkFBcUIsQ0FBQztHQUNyRztFQUNELEdBQUcsSUFBSSxlQUFlLElBQUksS0FBSyxDQUFDLEdBQUcsV0FBVyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7RUFDdkYsSUFBSSxhQUFhLEdBQUcsUUFBUSxDQUFDO0VBQzdCLElBQUksVUFBVSxHQUFHLFVBQVUsSUFBSSxFQUFFLENBQUM7RUFDbEMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNyQixHQUFHLEdBQUcsRUFBRSxDQUFDO0VBQ1QsSUFBSSxFQUFFLENBQUMsWUFBWSxLQUFLLEtBQUssRUFBRTtJQUM3QixHQUFHLElBQUksZ0JBQWdCLElBQUksYUFBYSxJQUFJLGtCQUFrQixDQUFDLEdBQUcsc0NBQXNDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLGlCQUFpQixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsc0JBQXNCLElBQUksWUFBWSxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQzNPLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssS0FBSyxFQUFFO01BQzlCLEdBQUcsSUFBSSxnQ0FBZ0MsQ0FBQztNQUN4QyxJQUFJLFFBQVEsSUFBSSxlQUFlLEVBQUU7UUFDL0IsR0FBRyxJQUFJLE1BQU0sQ0FBQztPQUNmLE1BQU07UUFDTCxHQUFHLElBQUksT0FBTyxDQUFDO09BQ2hCO01BQ0QsR0FBRyxJQUFJLFFBQVEsQ0FBQztNQUNoQixJQUFJLE9BQU8sRUFBRTtRQUNYLEdBQUcsSUFBSSxPQUFPLElBQUksWUFBWSxDQUFDLEdBQUcsT0FBTyxDQUFDO09BQzNDLE1BQU07UUFDTCxHQUFHLElBQUksRUFBRSxJQUFJLE9BQU8sQ0FBQyxDQUFDO09BQ3ZCO01BQ0QsR0FBRyxJQUFJLGdCQUFnQixDQUFDO0tBQ3pCO0lBQ0QsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtNQUNuQixHQUFHLElBQUksY0FBYyxDQUFDO01BQ3RCLElBQUksT0FBTyxFQUFFO1FBQ1gsR0FBRyxJQUFJLGlCQUFpQixJQUFJLFdBQVcsQ0FBQyxDQUFDO09BQzFDLE1BQU07UUFDTCxHQUFHLElBQUksRUFBRSxJQUFJLE9BQU8sQ0FBQyxDQUFDO09BQ3ZCO01BQ0QsR0FBRyxJQUFJLDBDQUEwQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxXQUFXLElBQUksS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQ25HO0lBQ0QsR0FBRyxJQUFJLEtBQUssQ0FBQztHQUNkLE1BQU07SUFDTCxHQUFHLElBQUksTUFBTSxDQUFDO0dBQ2Y7RUFDRCxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUM7RUFDaEIsR0FBRyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUN2QixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsSUFBSSxhQUFhLEVBQUU7O0lBRXRDLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRTtNQUNaLEdBQUcsSUFBSSw4QkFBOEIsSUFBSSxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7S0FDMUQsTUFBTTtNQUNMLEdBQUcsSUFBSSxzQkFBc0IsSUFBSSxLQUFLLENBQUMsR0FBRyxtQkFBbUIsQ0FBQztLQUMvRDtHQUNGLE1BQU07SUFDTCxHQUFHLElBQUksYUFBYSxJQUFJLEtBQUssQ0FBQyxHQUFHLDhFQUE4RSxDQUFDO0dBQ2pIO0VBQ0QsR0FBRyxJQUFJLElBQUksQ0FBQztFQUNaLElBQUksYUFBYSxFQUFFO0lBQ2pCLEdBQUcsSUFBSSxVQUFVLENBQUM7R0FDbkI7RUFDRCxPQUFPLEdBQUcsQ0FBQztDQUNaOztBQzNFRCxjQUFjLEdBQUcsU0FBUyxtQkFBbUIsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRTtFQUNyRSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDZCxJQUFJLElBQUksR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDO0VBQ3BCLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUM7RUFDNUIsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztFQUNsQyxJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0VBQ2hFLElBQUksY0FBYyxHQUFHLEVBQUUsQ0FBQyxhQUFhLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQztFQUN2RCxJQUFJLGFBQWEsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0VBQ3ZDLElBQUksS0FBSyxHQUFHLE1BQU0sSUFBSSxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7RUFDdEMsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLO0lBQ3JELFlBQVksQ0FBQztFQUNmLElBQUksT0FBTyxFQUFFO0lBQ1gsR0FBRyxJQUFJLGFBQWEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQzFHLFlBQVksR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDO0dBQ2hDLE1BQU07SUFDTCxZQUFZLEdBQUcsT0FBTyxDQUFDO0dBQ3hCO0VBQ0QsR0FBRyxJQUFJLGNBQWMsSUFBSSxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUM7RUFDekMsSUFBSSxPQUFPLEVBQUU7SUFDWCxHQUFHLElBQUksR0FBRyxJQUFJLFlBQVksQ0FBQyxHQUFHLDZCQUE2QixJQUFJLFlBQVksQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0dBQ3JHO0VBQ0QsR0FBRyxJQUFJLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxJQUFJLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQztFQUMvRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUU7SUFDL0IsR0FBRyxJQUFJLCtCQUErQixJQUFJLElBQUksQ0FBQyxHQUFHLGNBQWMsSUFBSSxJQUFJLENBQUMsR0FBRyxTQUFTLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEdBQUcsQ0FBQztHQUM3SCxNQUFNO0lBQ0wsR0FBRyxJQUFJLFdBQVcsSUFBSSxJQUFJLENBQUMsR0FBRyx3QkFBd0IsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7R0FDeEU7RUFDRCxHQUFHLElBQUksS0FBSyxDQUFDO0VBQ2IsSUFBSSxPQUFPLEVBQUU7SUFDWCxHQUFHLElBQUksT0FBTyxDQUFDO0dBQ2hCO0VBQ0QsR0FBRyxJQUFJLFNBQVMsQ0FBQztFQUNqQixJQUFJLFVBQVUsR0FBRyxVQUFVLElBQUksRUFBRSxDQUFDO0VBQ2xDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDckIsR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUNULElBQUksRUFBRSxDQUFDLFlBQVksS0FBSyxLQUFLLEVBQUU7SUFDN0IsR0FBRyxJQUFJLGdCQUFnQixJQUFJLFlBQVksQ0FBQyxHQUFHLHNDQUFzQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxpQkFBaUIsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUFHLDJCQUEyQixJQUFJLFlBQVksQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUN6TixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLEtBQUssRUFBRTtNQUM5QixHQUFHLElBQUksc0NBQXNDLENBQUM7TUFDOUMsSUFBSSxPQUFPLEVBQUU7UUFDWCxHQUFHLElBQUksT0FBTyxJQUFJLFlBQVksQ0FBQyxDQUFDO09BQ2pDLE1BQU07UUFDTCxHQUFHLElBQUksRUFBRSxJQUFJLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQztPQUNuQztLQUNGO0lBQ0QsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtNQUNuQixHQUFHLElBQUksY0FBYyxDQUFDO01BQ3RCLElBQUksT0FBTyxFQUFFO1FBQ1gsR0FBRyxJQUFJLGlCQUFpQixJQUFJLFdBQVcsQ0FBQyxDQUFDO09BQzFDLE1BQU07UUFDTCxHQUFHLElBQUksRUFBRSxJQUFJLE9BQU8sQ0FBQyxDQUFDO09BQ3ZCO01BQ0QsR0FBRyxJQUFJLDBDQUEwQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxXQUFXLElBQUksS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQ25HO0lBQ0QsR0FBRyxJQUFJLEtBQUssQ0FBQztHQUNkLE1BQU07SUFDTCxHQUFHLElBQUksTUFBTSxDQUFDO0dBQ2Y7RUFDRCxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUM7RUFDaEIsR0FBRyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUN2QixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsSUFBSSxhQUFhLEVBQUU7O0lBRXRDLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRTtNQUNaLEdBQUcsSUFBSSw4QkFBOEIsSUFBSSxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7S0FDMUQsTUFBTTtNQUNMLEdBQUcsSUFBSSxzQkFBc0IsSUFBSSxLQUFLLENBQUMsR0FBRyxtQkFBbUIsQ0FBQztLQUMvRDtHQUNGLE1BQU07SUFDTCxHQUFHLElBQUksYUFBYSxJQUFJLEtBQUssQ0FBQyxHQUFHLDhFQUE4RSxDQUFDO0dBQ2pIO0VBQ0QsR0FBRyxJQUFJLElBQUksQ0FBQztFQUNaLElBQUksYUFBYSxFQUFFO0lBQ2pCLEdBQUcsSUFBSSxVQUFVLENBQUM7R0FDbkI7RUFDRCxPQUFPLEdBQUcsQ0FBQztDQUNaOztBQzNFRCxPQUFjLEdBQUcsU0FBUyxZQUFZLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUU7RUFDOUQsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2QsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQztFQUNwQixJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDO0VBQzVCLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7RUFDbEMsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztFQUNoRSxJQUFJLGNBQWMsR0FBRyxFQUFFLENBQUMsYUFBYSxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUM7RUFDdkQsSUFBSSxhQUFhLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztFQUN2QyxJQUFJLEtBQUssR0FBRyxNQUFNLElBQUksUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0VBQ3RDLElBQUksS0FBSyxHQUFHLFFBQVEsR0FBRyxJQUFJLENBQUM7RUFDNUIsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDM0IsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQ1osSUFBSSxVQUFVLEdBQUcsT0FBTyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7RUFDckMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLE9BQU8sSUFBSSxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHO0lBQzVJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDO0lBQzdCLEdBQUcsQ0FBQyxhQUFhLEdBQUcsY0FBYyxDQUFDO0lBQ25DLEdBQUcsSUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLEdBQUcsY0FBYyxDQUFDO0lBQzFDLElBQUksYUFBYSxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUM7SUFDckMsRUFBRSxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztJQUM1QyxHQUFHLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUN6QixJQUFJLGdCQUFnQixDQUFDO0lBQ3JCLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7TUFDdEIsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7TUFDdEMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0tBQzVCO0lBQ0QsR0FBRyxJQUFJLEdBQUcsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ3RDLEdBQUcsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0lBQ3hCLElBQUksZ0JBQWdCLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsZ0JBQWdCLENBQUM7SUFDNUQsRUFBRSxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztJQUNyRCxHQUFHLElBQUksT0FBTyxJQUFJLFVBQVUsQ0FBQyxHQUFHLFFBQVEsQ0FBQztJQUN6QyxJQUFJLFVBQVUsR0FBRyxVQUFVLElBQUksRUFBRSxDQUFDO0lBQ2xDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckIsR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUNULElBQUksRUFBRSxDQUFDLFlBQVksS0FBSyxLQUFLLEVBQUU7TUFDN0IsR0FBRyxJQUFJLGdCQUFnQixJQUFJLEtBQUssQ0FBQyxHQUFHLHNDQUFzQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxpQkFBaUIsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUFHLGdCQUFnQixDQUFDO01BQzlLLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssS0FBSyxFQUFFO1FBQzlCLEdBQUcsSUFBSSxzQ0FBc0MsQ0FBQztPQUMvQztNQUNELElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7UUFDbkIsR0FBRyxJQUFJLDRCQUE0QixJQUFJLFdBQVcsQ0FBQyxHQUFHLGtDQUFrQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxXQUFXLElBQUksS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO09BQzFJO01BQ0QsR0FBRyxJQUFJLEtBQUssQ0FBQztLQUNkLE1BQU07TUFDTCxHQUFHLElBQUksTUFBTSxDQUFDO0tBQ2Y7SUFDRCxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUM7SUFDaEIsR0FBRyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN2QixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsSUFBSSxhQUFhLEVBQUU7O01BRXRDLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRTtRQUNaLEdBQUcsSUFBSSw4QkFBOEIsSUFBSSxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7T0FDMUQsTUFBTTtRQUNMLEdBQUcsSUFBSSxzQkFBc0IsSUFBSSxLQUFLLENBQUMsR0FBRyxtQkFBbUIsQ0FBQztPQUMvRDtLQUNGLE1BQU07TUFDTCxHQUFHLElBQUksYUFBYSxJQUFJLEtBQUssQ0FBQyxHQUFHLDhFQUE4RSxDQUFDO0tBQ2pIO0lBQ0QsR0FBRyxJQUFJLHNCQUFzQixJQUFJLEtBQUssQ0FBQyxHQUFHLGdDQUFnQyxJQUFJLEtBQUssQ0FBQyxHQUFHLHFCQUFxQixJQUFJLEtBQUssQ0FBQyxHQUFHLDJCQUEyQixDQUFDO0lBQ3JKLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7TUFDckIsR0FBRyxJQUFJLEtBQUssQ0FBQztLQUNkO0dBQ0YsTUFBTTtJQUNMLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQztJQUN4QixJQUFJLEVBQUUsQ0FBQyxZQUFZLEtBQUssS0FBSyxFQUFFO01BQzdCLEdBQUcsSUFBSSxnQkFBZ0IsSUFBSSxLQUFLLENBQUMsR0FBRyxzQ0FBc0MsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsaUJBQWlCLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQztNQUM5SyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLEtBQUssRUFBRTtRQUM5QixHQUFHLElBQUksc0NBQXNDLENBQUM7T0FDL0M7TUFDRCxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1FBQ25CLEdBQUcsSUFBSSw0QkFBNEIsSUFBSSxXQUFXLENBQUMsR0FBRyxrQ0FBa0MsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsV0FBVyxJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztPQUMxSTtNQUNELEdBQUcsSUFBSSxLQUFLLENBQUM7S0FDZCxNQUFNO01BQ0wsR0FBRyxJQUFJLE1BQU0sQ0FBQztLQUNmO0lBQ0QsR0FBRyxJQUFJLDhFQUE4RSxDQUFDO0lBQ3RGLElBQUksYUFBYSxFQUFFO01BQ2pCLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQztLQUN6QjtHQUNGO0VBQ0QsT0FBTyxHQUFHLENBQUM7Q0FDWjs7QUNsRkQsU0FBYyxHQUFHLFNBQVMsY0FBYyxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFO0VBQ2hFLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNkLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUM7RUFDcEIsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQztFQUM1QixJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0VBQ2xDLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7RUFDaEUsSUFBSSxjQUFjLEdBQUcsRUFBRSxDQUFDLGFBQWEsR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDO0VBQ3ZELElBQUksYUFBYSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7RUFDdkMsSUFBSSxLQUFLLEdBQUcsTUFBTSxJQUFJLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQztFQUN0QyxJQUFJLE1BQU0sR0FBRyxPQUFPLEdBQUcsSUFBSSxDQUFDO0VBQzVCLElBQUksS0FBSyxHQUFHLFFBQVEsR0FBRyxJQUFJLENBQUM7RUFDNUIsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDM0IsSUFBSSxjQUFjLEdBQUcsRUFBRSxDQUFDO0VBQ3hCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUNaLElBQUksVUFBVSxHQUFHLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO0VBQ3JDLElBQUksY0FBYyxHQUFHLEdBQUcsQ0FBQyxNQUFNO0lBQzdCLFVBQVUsR0FBRyxXQUFXLEdBQUcsSUFBSTtJQUMvQixlQUFlLEdBQUcsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO0VBQzVDLEdBQUcsSUFBSSxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsY0FBYyxJQUFJLFVBQVUsQ0FBQyxHQUFHLGFBQWEsSUFBSSxNQUFNLENBQUMsR0FBRyxhQUFhLElBQUksZUFBZSxDQUFDLEdBQUcsV0FBVyxDQUFDO0VBQ3JJLElBQUksYUFBYSxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUM7RUFDckMsRUFBRSxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztFQUM1QyxJQUFJLElBQUksR0FBRyxPQUFPLENBQUM7RUFDbkIsSUFBSSxJQUFJLEVBQUU7SUFDUixJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO01BQ2YsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZCLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRTtNQUNkLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO01BQ3JCLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLEdBQUcsT0FBTyxJQUFJLElBQUksUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRztRQUNuSSxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNsQixHQUFHLENBQUMsVUFBVSxHQUFHLFdBQVcsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztRQUM5QyxHQUFHLENBQUMsYUFBYSxHQUFHLGNBQWMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQzlDLEdBQUcsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUN2QyxHQUFHLENBQUMsTUFBTSxHQUFHLGNBQWMsQ0FBQztPQUM3QixNQUFNO1FBQ0wsR0FBRyxJQUFJLE9BQU8sSUFBSSxVQUFVLENBQUMsR0FBRyxXQUFXLENBQUM7T0FDN0M7TUFDRCxJQUFJLEVBQUUsRUFBRTtRQUNOLEdBQUcsSUFBSSxPQUFPLElBQUksVUFBVSxDQUFDLEdBQUcsTUFBTSxJQUFJLFVBQVUsQ0FBQyxHQUFHLE1BQU0sSUFBSSxNQUFNLENBQUMsR0FBRyxZQUFZLElBQUksZUFBZSxDQUFDLEdBQUcsTUFBTSxJQUFJLGVBQWUsQ0FBQyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsR0FBRyxjQUFjLENBQUM7UUFDekssY0FBYyxJQUFJLEdBQUcsQ0FBQztPQUN2QjtNQUNELEdBQUcsSUFBSSxPQUFPLElBQUksVUFBVSxDQUFDLEdBQUcsTUFBTSxJQUFJLE1BQU0sQ0FBQyxHQUFHLEtBQUssSUFBSSxVQUFVLENBQUMsR0FBRyxXQUFXLElBQUksZUFBZSxDQUFDLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztLQUNuSTtHQUNGO0VBQ0QsRUFBRSxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztFQUNyRCxHQUFHLElBQUksRUFBRSxJQUFJLGNBQWMsQ0FBQyxHQUFHLE9BQU8sSUFBSSxNQUFNLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztFQUN6RSxJQUFJLEVBQUUsQ0FBQyxZQUFZLEtBQUssS0FBSyxFQUFFO0lBQzdCLEdBQUcsSUFBSSxnQkFBZ0IsSUFBSSxPQUFPLENBQUMsR0FBRyxzQ0FBc0MsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsaUJBQWlCLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRywrQkFBK0IsSUFBSSxlQUFlLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDM04sSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxLQUFLLEVBQUU7TUFDOUIsR0FBRyxJQUFJLDJEQUEyRCxDQUFDO0tBQ3BFO0lBQ0QsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtNQUNuQixHQUFHLElBQUksNEJBQTRCLElBQUksV0FBVyxDQUFDLEdBQUcsa0NBQWtDLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFdBQVcsSUFBSSxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7S0FDMUk7SUFDRCxHQUFHLElBQUksS0FBSyxDQUFDO0dBQ2QsTUFBTTtJQUNMLEdBQUcsSUFBSSxNQUFNLENBQUM7R0FDZjtFQUNELEdBQUcsSUFBSSw4RUFBOEUsQ0FBQztFQUN0RixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsSUFBSSxhQUFhLEVBQUU7O0lBRXRDLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRTtNQUNaLEdBQUcsSUFBSSx1Q0FBdUMsQ0FBQztLQUNoRCxNQUFNO01BQ0wsR0FBRyxJQUFJLDRDQUE0QyxDQUFDO0tBQ3JEO0dBQ0Y7RUFDRCxHQUFHLElBQUkscUJBQXFCLElBQUksS0FBSyxDQUFDLEdBQUcsZ0NBQWdDLElBQUksS0FBSyxDQUFDLEdBQUcscUJBQXFCLElBQUksS0FBSyxDQUFDLEdBQUcsMEJBQTBCLENBQUM7RUFDbkosSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtJQUNyQixHQUFHLElBQUksS0FBSyxDQUFDO0dBQ2Q7RUFDRCxPQUFPLEdBQUcsQ0FBQztDQUNaOztBQ3ZFRCxXQUFjLEdBQUcsU0FBUyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRTtFQUNsRSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDZCxJQUFJLElBQUksR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDO0VBQ3BCLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUM7RUFDNUIsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztFQUNsQyxJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0VBQ2hFLElBQUksY0FBYyxHQUFHLEVBQUUsQ0FBQyxhQUFhLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQztFQUN2RCxJQUFJLGFBQWEsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0VBQ3ZDLElBQUksS0FBSyxHQUFHLE1BQU0sSUFBSSxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7RUFDdEMsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLO0lBQ3JELFlBQVksQ0FBQztFQUNmLElBQUksT0FBTyxFQUFFO0lBQ1gsR0FBRyxJQUFJLGFBQWEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQzFHLFlBQVksR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDO0dBQ2hDLE1BQU07SUFDTCxZQUFZLEdBQUcsT0FBTyxDQUFDO0dBQ3hCO0VBQ0QsSUFBSSxPQUFPLEdBQUcsT0FBTyxHQUFHLGNBQWMsR0FBRyxZQUFZLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7RUFDdEYsR0FBRyxJQUFJLE9BQU8sQ0FBQztFQUNmLElBQUksT0FBTyxFQUFFO0lBQ1gsR0FBRyxJQUFJLElBQUksSUFBSSxZQUFZLENBQUMsR0FBRywyQkFBMkIsSUFBSSxZQUFZLENBQUMsR0FBRyxxQkFBcUIsQ0FBQztHQUNyRztFQUNELEdBQUcsSUFBSSxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsUUFBUSxJQUFJLEtBQUssQ0FBQyxHQUFHLFVBQVUsQ0FBQztFQUMxRCxJQUFJLFVBQVUsR0FBRyxVQUFVLElBQUksRUFBRSxDQUFDO0VBQ2xDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDckIsR0FBRyxHQUFHLEVBQUUsQ0FBQztFQUNULElBQUksRUFBRSxDQUFDLFlBQVksS0FBSyxLQUFLLEVBQUU7SUFDN0IsR0FBRyxJQUFJLGdCQUFnQixJQUFJLFNBQVMsQ0FBQyxHQUFHLHNDQUFzQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxpQkFBaUIsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUFHLHlCQUF5QixDQUFDO0lBQzNMLElBQUksT0FBTyxFQUFFO01BQ1gsR0FBRyxJQUFJLEVBQUUsSUFBSSxZQUFZLENBQUMsQ0FBQztLQUM1QixNQUFNO01BQ0wsR0FBRyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0tBQy9DO0lBQ0QsR0FBRyxJQUFJLE1BQU0sQ0FBQztJQUNkLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssS0FBSyxFQUFFO01BQzlCLEdBQUcsSUFBSSxzQ0FBc0MsQ0FBQztNQUM5QyxJQUFJLE9BQU8sRUFBRTtRQUNYLEdBQUcsSUFBSSxPQUFPLElBQUksWUFBWSxDQUFDLEdBQUcsT0FBTyxDQUFDO09BQzNDLE1BQU07UUFDTCxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7T0FDN0M7TUFDRCxHQUFHLElBQUksTUFBTSxDQUFDO0tBQ2Y7SUFDRCxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO01BQ25CLEdBQUcsSUFBSSxjQUFjLENBQUM7TUFDdEIsSUFBSSxPQUFPLEVBQUU7UUFDWCxHQUFHLElBQUksaUJBQWlCLElBQUksV0FBVyxDQUFDLENBQUM7T0FDMUMsTUFBTTtRQUNMLEdBQUcsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztPQUMvQztNQUNELEdBQUcsSUFBSSwwQ0FBMEMsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsV0FBVyxJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUNuRztJQUNELEdBQUcsSUFBSSxLQUFLLENBQUM7R0FDZCxNQUFNO0lBQ0wsR0FBRyxJQUFJLE1BQU0sQ0FBQztHQUNmO0VBQ0QsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDO0VBQ2hCLEdBQUcsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDdkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLElBQUksYUFBYSxFQUFFOztJQUV0QyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUU7TUFDWixHQUFHLElBQUksOEJBQThCLElBQUksS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0tBQzFELE1BQU07TUFDTCxHQUFHLElBQUksc0JBQXNCLElBQUksS0FBSyxDQUFDLEdBQUcsbUJBQW1CLENBQUM7S0FDL0Q7R0FDRixNQUFNO0lBQ0wsR0FBRyxJQUFJLGFBQWEsSUFBSSxLQUFLLENBQUMsR0FBRyw4RUFBOEUsQ0FBQztHQUNqSDtFQUNELEdBQUcsSUFBSSxJQUFJLENBQUM7RUFDWixJQUFJLGFBQWEsRUFBRTtJQUNqQixHQUFHLElBQUksVUFBVSxDQUFDO0dBQ25CO0VBQ0QsT0FBTyxHQUFHLENBQUM7Q0FDWjs7QUN6RUQsY0FBYyxHQUFHLFNBQVMsbUJBQW1CLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUU7RUFDckUsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2QsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQztFQUNwQixJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDO0VBQzVCLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7RUFDbEMsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztFQUNoRSxJQUFJLGNBQWMsR0FBRyxFQUFFLENBQUMsYUFBYSxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUM7RUFDdkQsSUFBSSxhQUFhLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztFQUN2QyxJQUFJLEtBQUssR0FBRyxNQUFNLElBQUksUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0VBQ3RDLElBQUksS0FBSyxHQUFHLFFBQVEsR0FBRyxJQUFJLENBQUM7RUFDNUIsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDM0IsSUFBSSxjQUFjLEdBQUcsRUFBRSxDQUFDO0VBQ3hCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUNaLElBQUksVUFBVSxHQUFHLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO0VBQ3JDLElBQUksSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJO0lBQ3JCLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSTtJQUNuQixRQUFRLEdBQUcsR0FBRyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsU0FBUyxHQUFHLENBQUM7SUFDM0MsU0FBUyxHQUFHLE1BQU0sR0FBRyxRQUFRO0lBQzdCLGVBQWUsR0FBRyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7RUFDNUMsSUFBSSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO0lBQzFDLFlBQVksR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLGlCQUFpQixJQUFJLEVBQUU7SUFDaEQsY0FBYyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzFDLFlBQVksR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLG9CQUFvQjtJQUM3QyxlQUFlLEdBQUcsV0FBVyxDQUFDLE1BQU0sSUFBSSxjQUFjLENBQUMsTUFBTTtJQUM3RCxhQUFhLEdBQUcsWUFBWSxLQUFLLEtBQUs7SUFDdEMsbUJBQW1CLEdBQUcsT0FBTyxZQUFZLElBQUksUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTTtJQUN6RixpQkFBaUIsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQjtJQUM1QyxnQkFBZ0IsR0FBRyxhQUFhLElBQUksbUJBQW1CLElBQUksaUJBQWlCO0lBQzVFLGNBQWMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWE7SUFDdEMsY0FBYyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7RUFDN0IsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7RUFDbkMsSUFBSSxTQUFTLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztFQUMvSSxHQUFHLElBQUksTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLGdCQUFnQixJQUFJLFVBQVUsQ0FBQyxHQUFHLFVBQVUsQ0FBQztFQUN2RSxJQUFJLGNBQWMsRUFBRTtJQUNsQixHQUFHLElBQUksT0FBTyxJQUFJLGVBQWUsQ0FBQyxHQUFHLGVBQWUsQ0FBQztHQUN0RDtFQUNELElBQUksZ0JBQWdCLEVBQUU7SUFDcEIsSUFBSSxjQUFjLEVBQUU7TUFDbEIsR0FBRyxJQUFJLEdBQUcsSUFBSSxlQUFlLENBQUMsR0FBRyxLQUFLLElBQUksZUFBZSxDQUFDLEdBQUcsa0JBQWtCLElBQUksS0FBSyxDQUFDLEdBQUcsY0FBYyxJQUFJLElBQUksQ0FBQyxHQUFHLE1BQU0sSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksZUFBZSxDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxHQUFHLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksZUFBZSxDQUFDLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztLQUNuUSxNQUFNO01BQ0wsR0FBRyxJQUFJLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0tBQzFEO0lBQ0QsSUFBSSxlQUFlLEVBQUU7TUFDbkIsR0FBRyxJQUFJLG1CQUFtQixJQUFJLElBQUksQ0FBQyxHQUFHLGFBQWEsQ0FBQztNQUNwRCxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUU7UUFDdEIsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtVQUMxQixHQUFHLElBQUkscUJBQXFCLElBQUksV0FBVyxDQUFDLEdBQUcsa0JBQWtCLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO1NBQ25GLE1BQU07VUFDTCxJQUFJLElBQUksR0FBRyxXQUFXLENBQUM7VUFDdkIsSUFBSSxJQUFJLEVBQUU7WUFDUixJQUFJLFlBQVksRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2NBQ3ZCLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUN2QixPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUU7Y0FDZCxZQUFZLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztjQUM3QixHQUFHLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQzthQUNoRjtXQUNGO1NBQ0Y7T0FDRjtNQUNELElBQUksY0FBYyxDQUFDLE1BQU0sRUFBRTtRQUN6QixJQUFJLElBQUksR0FBRyxjQUFjLENBQUM7UUFDMUIsSUFBSSxJQUFJLEVBQUU7VUFDUixJQUFJLFVBQVUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3JCLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztVQUN2QixPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDZCxVQUFVLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUMzQixHQUFHLElBQUksTUFBTSxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO1dBQ3hFO1NBQ0Y7T0FDRjtNQUNELEdBQUcsSUFBSSxzQkFBc0IsSUFBSSxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7S0FDakQ7SUFDRCxJQUFJLGlCQUFpQixJQUFJLEtBQUssRUFBRTtNQUM5QixHQUFHLElBQUksVUFBVSxJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7S0FDcEQsTUFBTTtNQUNMLElBQUksaUJBQWlCLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQztNQUNyQyxJQUFJLG1CQUFtQixHQUFHLE9BQU8sR0FBRyxJQUFJLEdBQUcsT0FBTyxDQUFDO01BQ25ELElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtRQUNsQyxFQUFFLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7T0FDOUU7TUFDRCxJQUFJLGFBQWEsRUFBRTtRQUNqQixJQUFJLGlCQUFpQixFQUFFO1VBQ3JCLEdBQUcsSUFBSSxVQUFVLElBQUksS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztTQUNwRCxNQUFNO1VBQ0wsR0FBRyxJQUFJLEdBQUcsSUFBSSxVQUFVLENBQUMsR0FBRyxZQUFZLENBQUM7VUFDekMsSUFBSSxrQkFBa0IsR0FBRyxjQUFjLENBQUM7VUFDeEMsY0FBYyxHQUFHLEVBQUUsQ0FBQyxhQUFhLEdBQUcsdUJBQXVCLENBQUM7VUFDNUQsSUFBSSxVQUFVLEdBQUcsVUFBVSxJQUFJLEVBQUUsQ0FBQztVQUNsQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1VBQ3JCLEdBQUcsR0FBRyxFQUFFLENBQUM7VUFDVCxJQUFJLEVBQUUsQ0FBQyxZQUFZLEtBQUssS0FBSyxFQUFFO1lBQzdCLEdBQUcsSUFBSSxnQkFBZ0IsSUFBSSxzQkFBc0IsQ0FBQyxHQUFHLHNDQUFzQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxpQkFBaUIsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUFHLHFDQUFxQyxJQUFJLG1CQUFtQixDQUFDLEdBQUcsT0FBTyxDQUFDO1lBQ3RQLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssS0FBSyxFQUFFO2NBQzlCLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQztjQUN4QixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUU7Z0JBQ2xDLEdBQUcsSUFBSSxtQ0FBbUMsQ0FBQztlQUM1QyxNQUFNO2dCQUNMLEdBQUcsSUFBSSx1Q0FBdUMsQ0FBQztlQUNoRDtjQUNELEdBQUcsSUFBSSxLQUFLLENBQUM7YUFDZDtZQUNELElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7Y0FDbkIsR0FBRyxJQUFJLGtEQUFrRCxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxXQUFXLElBQUksS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO2FBQzNHO1lBQ0QsR0FBRyxJQUFJLEtBQUssQ0FBQztXQUNkLE1BQU07WUFDTCxHQUFHLElBQUksTUFBTSxDQUFDO1dBQ2Y7VUFDRCxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUM7VUFDaEIsR0FBRyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztVQUN2QixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsSUFBSSxhQUFhLEVBQUU7O1lBRXRDLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRTtjQUNaLEdBQUcsSUFBSSw4QkFBOEIsSUFBSSxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7YUFDMUQsTUFBTTtjQUNMLEdBQUcsSUFBSSxzQkFBc0IsSUFBSSxLQUFLLENBQUMsR0FBRyxtQkFBbUIsQ0FBQzthQUMvRDtXQUNGLE1BQU07WUFDTCxHQUFHLElBQUksYUFBYSxJQUFJLEtBQUssQ0FBQyxHQUFHLDhFQUE4RSxDQUFDO1dBQ2pIO1VBQ0QsY0FBYyxHQUFHLGtCQUFrQixDQUFDO1VBQ3BDLElBQUksYUFBYSxFQUFFO1lBQ2pCLEdBQUcsSUFBSSxVQUFVLENBQUM7V0FDbkI7U0FDRjtPQUNGLE1BQU0sSUFBSSxtQkFBbUIsRUFBRTtRQUM5QixJQUFJLGlCQUFpQixJQUFJLFNBQVMsRUFBRTtVQUNsQyxHQUFHLElBQUksT0FBTyxJQUFJLEtBQUssQ0FBQyxHQUFHLGNBQWMsQ0FBQztVQUMxQyxJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDO1VBQ3JDLEVBQUUsQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7VUFDNUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUM7VUFDMUIsR0FBRyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsVUFBVSxHQUFHLHVCQUF1QixDQUFDO1VBQ3pELEdBQUcsQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDLGFBQWEsR0FBRyx1QkFBdUIsQ0FBQztVQUMvRCxHQUFHLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsRUFBRSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1VBQzlILElBQUksU0FBUyxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQztVQUN6QyxHQUFHLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQztVQUNqQyxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1VBQzdCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsY0FBYyxDQUFDO1VBQzVCLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUMvQyxHQUFHLElBQUksR0FBRyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7V0FDdEUsTUFBTTtZQUNMLEdBQUcsSUFBSSxPQUFPLElBQUksU0FBUyxDQUFDLEdBQUcsS0FBSyxJQUFJLFNBQVMsQ0FBQyxHQUFHLElBQUksSUFBSSxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7V0FDM0U7VUFDRCxHQUFHLElBQUksUUFBUSxJQUFJLFVBQVUsQ0FBQyxHQUFHLGVBQWUsSUFBSSxLQUFLLENBQUMsR0FBRyx1SEFBdUgsSUFBSSxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDO1VBQ3pOLEVBQUUsQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7U0FDdEQsTUFBTTtVQUNMLEdBQUcsQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDO1VBQzFCLEdBQUcsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLFVBQVUsR0FBRyx1QkFBdUIsQ0FBQztVQUN6RCxHQUFHLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQyxhQUFhLEdBQUcsdUJBQXVCLENBQUM7VUFDL0QsR0FBRyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEVBQUUsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztVQUM5SCxJQUFJLFNBQVMsR0FBRyxLQUFLLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLENBQUM7VUFDekMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7VUFDakMsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztVQUM3QixHQUFHLENBQUMsTUFBTSxHQUFHLGNBQWMsQ0FBQztVQUM1QixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDL0MsR0FBRyxJQUFJLEdBQUcsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1dBQ3RFLE1BQU07WUFDTCxHQUFHLElBQUksT0FBTyxJQUFJLFNBQVMsQ0FBQyxHQUFHLEtBQUssSUFBSSxTQUFTLENBQUMsR0FBRyxJQUFJLElBQUksS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO1dBQzNFO1VBQ0QsSUFBSSxhQUFhLEVBQUU7WUFDakIsR0FBRyxJQUFJLFFBQVEsSUFBSSxVQUFVLENBQUMsR0FBRyxXQUFXLENBQUM7V0FDOUM7U0FDRjtPQUNGO01BQ0QsRUFBRSxDQUFDLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQztLQUNsQztJQUNELElBQUksZUFBZSxFQUFFO01BQ25CLEdBQUcsSUFBSSxLQUFLLENBQUM7S0FDZDtJQUNELEdBQUcsSUFBSSxNQUFNLENBQUM7SUFDZCxJQUFJLGFBQWEsRUFBRTtNQUNqQixHQUFHLElBQUksT0FBTyxJQUFJLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztNQUN2QyxjQUFjLElBQUksR0FBRyxDQUFDO0tBQ3ZCO0dBQ0Y7RUFDRCxJQUFJLFlBQVksR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUM7RUFDNUQsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFO0lBQ3RCLElBQUksSUFBSSxHQUFHLFdBQVcsQ0FBQztJQUN2QixJQUFJLElBQUksRUFBRTtNQUNSLElBQUksWUFBWSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdkIsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO01BQ3ZCLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUNkLFlBQVksR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzdCLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNqQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sSUFBSSxJQUFJLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUc7VUFDbkksSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDO1lBQzNDLFNBQVMsR0FBRyxLQUFLLEdBQUcsS0FBSztZQUN6QixXQUFXLEdBQUcsWUFBWSxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDO1VBQzNELEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1VBQ2xCLEdBQUcsQ0FBQyxVQUFVLEdBQUcsV0FBVyxHQUFHLEtBQUssQ0FBQztVQUNyQyxHQUFHLENBQUMsYUFBYSxHQUFHLGNBQWMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7VUFDaEYsR0FBRyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1VBQ2xGLEdBQUcsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7VUFDakUsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztVQUM3QixHQUFHLENBQUMsTUFBTSxHQUFHLGNBQWMsQ0FBQztVQUM1QixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDL0MsS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDeEQsSUFBSSxRQUFRLEdBQUcsU0FBUyxDQUFDO1dBQzFCLE1BQU07WUFDTCxJQUFJLFFBQVEsR0FBRyxTQUFTLENBQUM7WUFDekIsR0FBRyxJQUFJLE9BQU8sSUFBSSxTQUFTLENBQUMsR0FBRyxLQUFLLElBQUksU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDO1dBQzNEO1VBQ0QsSUFBSSxXQUFXLEVBQUU7WUFDZixHQUFHLElBQUksR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztXQUM1QixNQUFNO1lBQ0wsSUFBSSxhQUFhLElBQUksYUFBYSxDQUFDLFlBQVksQ0FBQyxFQUFFO2NBQ2hELEdBQUcsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLEdBQUcsaUJBQWlCLENBQUM7Y0FDakQsSUFBSSxjQUFjLEVBQUU7Z0JBQ2xCLEdBQUcsSUFBSSw2Q0FBNkMsSUFBSSxLQUFLLENBQUMsR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7ZUFDekg7Y0FDRCxHQUFHLElBQUksTUFBTSxJQUFJLFVBQVUsQ0FBQyxHQUFHLFlBQVksQ0FBQztjQUM1QyxJQUFJLGlCQUFpQixHQUFHLEVBQUUsQ0FBQyxTQUFTO2dCQUNsQyxrQkFBa0IsR0FBRyxjQUFjO2dCQUNuQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztjQUN4RCxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUU7Z0JBQ2xDLEVBQUUsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7ZUFDdkY7Y0FDRCxjQUFjLEdBQUcsRUFBRSxDQUFDLGFBQWEsR0FBRyxXQUFXLENBQUM7Y0FDaEQsSUFBSSxVQUFVLEdBQUcsVUFBVSxJQUFJLEVBQUUsQ0FBQztjQUNsQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2NBQ3JCLEdBQUcsR0FBRyxFQUFFLENBQUM7Y0FDVCxJQUFJLEVBQUUsQ0FBQyxZQUFZLEtBQUssS0FBSyxFQUFFO2dCQUM3QixHQUFHLElBQUksZ0JBQWdCLElBQUksVUFBVSxDQUFDLEdBQUcsc0NBQXNDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLGlCQUFpQixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsa0NBQWtDLElBQUksZ0JBQWdCLENBQUMsR0FBRyxPQUFPLENBQUM7Z0JBQ3BPLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssS0FBSyxFQUFFO2tCQUM5QixHQUFHLElBQUksZ0JBQWdCLENBQUM7a0JBQ3hCLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtvQkFDbEMsR0FBRyxJQUFJLHdCQUF3QixDQUFDO21CQUNqQyxNQUFNO29CQUNMLEdBQUcsSUFBSSxvQ0FBb0MsSUFBSSxnQkFBZ0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQzttQkFDM0U7a0JBQ0QsR0FBRyxJQUFJLEtBQUssQ0FBQztpQkFDZDtnQkFDRCxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO2tCQUNuQixHQUFHLElBQUksNEJBQTRCLElBQUksV0FBVyxDQUFDLEdBQUcsa0NBQWtDLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFdBQVcsSUFBSSxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7aUJBQzFJO2dCQUNELEdBQUcsSUFBSSxLQUFLLENBQUM7ZUFDZCxNQUFNO2dCQUNMLEdBQUcsSUFBSSxNQUFNLENBQUM7ZUFDZjtjQUNELElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQztjQUNoQixHQUFHLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO2NBQ3ZCLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxJQUFJLGFBQWEsRUFBRTs7Z0JBRXRDLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRTtrQkFDWixHQUFHLElBQUksOEJBQThCLElBQUksS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO2lCQUMxRCxNQUFNO2tCQUNMLEdBQUcsSUFBSSxzQkFBc0IsSUFBSSxLQUFLLENBQUMsR0FBRyxtQkFBbUIsQ0FBQztpQkFDL0Q7ZUFDRixNQUFNO2dCQUNMLEdBQUcsSUFBSSxhQUFhLElBQUksS0FBSyxDQUFDLEdBQUcsOEVBQThFLENBQUM7ZUFDakg7Y0FDRCxjQUFjLEdBQUcsa0JBQWtCLENBQUM7Y0FDcEMsRUFBRSxDQUFDLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQztjQUNqQyxHQUFHLElBQUksWUFBWSxDQUFDO2FBQ3JCLE1BQU07Y0FDTCxJQUFJLGFBQWEsRUFBRTtnQkFDakIsR0FBRyxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsR0FBRyxpQkFBaUIsQ0FBQztnQkFDakQsSUFBSSxjQUFjLEVBQUU7a0JBQ2xCLEdBQUcsSUFBSSw2Q0FBNkMsSUFBSSxLQUFLLENBQUMsR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7aUJBQ3pIO2dCQUNELEdBQUcsSUFBSSxNQUFNLElBQUksVUFBVSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7ZUFDckQsTUFBTTtnQkFDTCxHQUFHLElBQUksT0FBTyxJQUFJLFFBQVEsQ0FBQyxHQUFHLGlCQUFpQixDQUFDO2dCQUNoRCxJQUFJLGNBQWMsRUFBRTtrQkFDbEIsR0FBRyxJQUFJLDZDQUE2QyxJQUFJLEtBQUssQ0FBQyxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztpQkFDekg7Z0JBQ0QsR0FBRyxJQUFJLE9BQU8sQ0FBQztlQUNoQjthQUNGO1lBQ0QsR0FBRyxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUM7V0FDOUI7U0FDRjtRQUNELElBQUksYUFBYSxFQUFFO1VBQ2pCLEdBQUcsSUFBSSxPQUFPLElBQUksVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDO1VBQ3ZDLGNBQWMsSUFBSSxHQUFHLENBQUM7U0FDdkI7T0FDRjtLQUNGO0dBQ0Y7RUFDRCxJQUFJLGNBQWMsQ0FBQyxNQUFNLEVBQUU7SUFDekIsSUFBSSxJQUFJLEdBQUcsY0FBYyxDQUFDO0lBQzFCLElBQUksSUFBSSxFQUFFO01BQ1IsSUFBSSxVQUFVLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNyQixFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7TUFDdkIsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQ2QsVUFBVSxHQUFHLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDM0IsSUFBSSxJQUFJLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3BDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLEdBQUcsT0FBTyxJQUFJLElBQUksUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRztVQUNuSSxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztVQUNsQixHQUFHLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxVQUFVLEdBQUcsb0JBQW9CLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7VUFDeEYsR0FBRyxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUMsYUFBYSxHQUFHLHFCQUFxQixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1VBQ2xHLElBQUksY0FBYyxFQUFFO1lBQ2xCLEdBQUcsSUFBSSxHQUFHLElBQUksZUFBZSxDQUFDLEdBQUcsS0FBSyxJQUFJLGVBQWUsQ0FBQyxHQUFHLGtCQUFrQixJQUFJLEtBQUssQ0FBQyxHQUFHLGNBQWMsSUFBSSxJQUFJLENBQUMsR0FBRyxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLGVBQWUsQ0FBQyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsR0FBRyxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLGVBQWUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7V0FDblEsTUFBTTtZQUNMLEdBQUcsSUFBSSxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQztXQUMxRDtVQUNELEdBQUcsSUFBSSxPQUFPLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUM7VUFDM0UsR0FBRyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1VBQzlFLElBQUksU0FBUyxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQztVQUN6QyxHQUFHLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQztVQUNqQyxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1VBQzdCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsY0FBYyxDQUFDO1VBQzVCLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUMvQyxHQUFHLElBQUksR0FBRyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7V0FDdEUsTUFBTTtZQUNMLEdBQUcsSUFBSSxPQUFPLElBQUksU0FBUyxDQUFDLEdBQUcsS0FBSyxJQUFJLFNBQVMsQ0FBQyxHQUFHLElBQUksSUFBSSxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7V0FDM0U7VUFDRCxJQUFJLGFBQWEsRUFBRTtZQUNqQixHQUFHLElBQUksUUFBUSxJQUFJLFVBQVUsQ0FBQyxHQUFHLFdBQVcsQ0FBQztXQUM5QztVQUNELEdBQUcsSUFBSSxLQUFLLENBQUM7VUFDYixJQUFJLGFBQWEsRUFBRTtZQUNqQixHQUFHLElBQUksUUFBUSxJQUFJLFVBQVUsQ0FBQyxHQUFHLFdBQVcsQ0FBQztXQUM5QztVQUNELEdBQUcsSUFBSSxNQUFNLENBQUM7VUFDZCxJQUFJLGFBQWEsRUFBRTtZQUNqQixHQUFHLElBQUksT0FBTyxJQUFJLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztZQUN2QyxjQUFjLElBQUksR0FBRyxDQUFDO1dBQ3ZCO1NBQ0Y7T0FDRjtLQUNGO0dBQ0Y7RUFDRCxJQUFJLGFBQWEsRUFBRTtJQUNqQixHQUFHLElBQUksR0FBRyxJQUFJLGNBQWMsQ0FBQyxHQUFHLE9BQU8sSUFBSSxLQUFLLENBQUMsR0FBRyxlQUFlLENBQUM7R0FDckU7RUFDRCxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDL0IsT0FBTyxHQUFHLENBQUM7Q0FDWjs7QUN4VUQsaUJBQWMsR0FBRyxTQUFTLHNCQUFzQixDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFO0VBQ3hFLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNkLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUM7RUFDcEIsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQztFQUM1QixJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0VBQ2xDLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7RUFDaEUsSUFBSSxjQUFjLEdBQUcsRUFBRSxDQUFDLGFBQWEsR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDO0VBQ3ZELElBQUksYUFBYSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7RUFDdkMsSUFBSSxLQUFLLEdBQUcsTUFBTSxJQUFJLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQztFQUN0QyxJQUFJLEtBQUssR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDO0VBQzVCLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQzNCLElBQUksY0FBYyxHQUFHLEVBQUUsQ0FBQztFQUN4QixHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDWixJQUFJLFVBQVUsR0FBRyxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztFQUNyQyxHQUFHLElBQUksTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLFlBQVksQ0FBQztFQUN2QyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sT0FBTyxJQUFJLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUc7SUFDNUksR0FBRyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7SUFDckIsR0FBRyxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUM7SUFDN0IsR0FBRyxDQUFDLGFBQWEsR0FBRyxjQUFjLENBQUM7SUFDbkMsSUFBSSxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUk7TUFDckIsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJO01BQ25CLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSTtNQUNmLFlBQVksR0FBRyxPQUFPLEdBQUcsSUFBSSxHQUFHLE9BQU87TUFDdkMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLFNBQVMsR0FBRyxDQUFDO01BQzNDLFNBQVMsR0FBRyxNQUFNLEdBQUcsUUFBUTtNQUM3QixlQUFlLEdBQUcsZ0JBQWdCLEdBQUcsSUFBSTtNQUN6QyxjQUFjLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhO01BQ3RDLGNBQWMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO0lBQzdCLElBQUksY0FBYyxFQUFFO01BQ2xCLEdBQUcsSUFBSSxPQUFPLElBQUksZUFBZSxDQUFDLEdBQUcsZ0JBQWdCLENBQUM7S0FDdkQ7SUFDRCxJQUFJLGNBQWMsRUFBRTtNQUNsQixHQUFHLElBQUksR0FBRyxJQUFJLGVBQWUsQ0FBQyxHQUFHLEtBQUssSUFBSSxlQUFlLENBQUMsR0FBRyxrQkFBa0IsSUFBSSxLQUFLLENBQUMsR0FBRyxjQUFjLElBQUksSUFBSSxDQUFDLEdBQUcsTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxlQUFlLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLEdBQUcsWUFBWSxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxlQUFlLENBQUMsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO0tBQ25RLE1BQU07TUFDTCxHQUFHLElBQUksWUFBWSxJQUFJLElBQUksQ0FBQyxHQUFHLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7S0FDMUQ7SUFDRCxHQUFHLElBQUksZ0JBQWdCLElBQUksSUFBSSxDQUFDLEdBQUcsYUFBYSxDQUFDO0lBQ2pELElBQUksU0FBUyxHQUFHLElBQUksQ0FBQztJQUNyQixJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDO0lBQ3JDLEVBQUUsQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFDNUMsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QixHQUFHLENBQUMsTUFBTSxHQUFHLGNBQWMsQ0FBQztJQUM1QixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7TUFDL0MsR0FBRyxJQUFJLEdBQUcsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQ3RFLE1BQU07TUFDTCxHQUFHLElBQUksT0FBTyxJQUFJLFNBQVMsQ0FBQyxHQUFHLEtBQUssSUFBSSxTQUFTLENBQUMsR0FBRyxJQUFJLElBQUksS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQzNFO0lBQ0QsRUFBRSxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztJQUNyRCxHQUFHLElBQUksUUFBUSxJQUFJLFVBQVUsQ0FBQyxHQUFHLGVBQWUsSUFBSSxFQUFFLENBQUMsR0FBRyxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHLFdBQVcsSUFBSSxFQUFFLENBQUMsR0FBRyxnQkFBZ0IsSUFBSSxFQUFFLENBQUMsR0FBRyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztJQUNuTSxJQUFJLEVBQUUsQ0FBQyxZQUFZLEtBQUssS0FBSyxFQUFFO01BQzdCLEdBQUcsSUFBSSxnQkFBZ0IsSUFBSSxlQUFlLENBQUMsR0FBRyxzQ0FBc0MsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsaUJBQWlCLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRywrQkFBK0IsSUFBSSxZQUFZLENBQUMsR0FBRyxPQUFPLENBQUM7TUFDbE8sSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxLQUFLLEVBQUU7UUFDOUIsR0FBRyxJQUFJLGtDQUFrQyxJQUFJLFlBQVksQ0FBQyxHQUFHLG9CQUFvQixDQUFDO09BQ25GO01BQ0QsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtRQUNuQixHQUFHLElBQUksNEJBQTRCLElBQUksV0FBVyxDQUFDLEdBQUcsa0NBQWtDLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFdBQVcsSUFBSSxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7T0FDMUk7TUFDRCxHQUFHLElBQUksS0FBSyxDQUFDO0tBQ2QsTUFBTTtNQUNMLEdBQUcsSUFBSSxNQUFNLENBQUM7S0FDZjtJQUNELEdBQUcsSUFBSSw4RUFBOEUsQ0FBQztJQUN0RixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsSUFBSSxhQUFhLEVBQUU7O01BRXRDLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRTtRQUNaLEdBQUcsSUFBSSx1Q0FBdUMsQ0FBQztPQUNoRCxNQUFNO1FBQ0wsR0FBRyxJQUFJLDRDQUE0QyxDQUFDO09BQ3JEO0tBQ0Y7SUFDRCxJQUFJLGFBQWEsRUFBRTtNQUNqQixHQUFHLElBQUksVUFBVSxDQUFDO0tBQ25CO0lBQ0QsR0FBRyxJQUFJLE1BQU0sQ0FBQztHQUNmO0VBQ0QsSUFBSSxhQUFhLEVBQUU7SUFDakIsR0FBRyxJQUFJLEdBQUcsSUFBSSxjQUFjLENBQUMsR0FBRyxPQUFPLElBQUksS0FBSyxDQUFDLEdBQUcsZUFBZSxDQUFDO0dBQ3JFO0VBQ0QsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQy9CLE9BQU8sR0FBRyxDQUFDO0NBQ1o7O0FDaEZELFlBQWMsR0FBRyxTQUFTLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFO0VBQ25FLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNkLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUM7RUFDcEIsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQztFQUM1QixJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0VBQ2xDLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7RUFDaEUsSUFBSSxjQUFjLEdBQUcsRUFBRSxDQUFDLGFBQWEsR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDO0VBQ3ZELElBQUksYUFBYSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7RUFDdkMsSUFBSSxLQUFLLEdBQUcsTUFBTSxJQUFJLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQztFQUN0QyxJQUFJLE1BQU0sR0FBRyxPQUFPLEdBQUcsSUFBSSxDQUFDO0VBQzVCLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxDQUN4QztFQUNmLElBQUksT0FBTyxFQUFFO0lBQ1gsR0FBRyxJQUFJLGFBQWEsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0dBRTNHLEFBRUE7RUFDRCxJQUFJLFFBQVEsR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDO0VBQy9CLElBQUksQ0FBQyxPQUFPLEVBQUU7SUFDWixJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtNQUM3RyxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7TUFDbkIsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDO01BQ25CLElBQUksSUFBSSxFQUFFO1FBQ1IsSUFBSSxTQUFTLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztVQUNwQixFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDdkIsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFO1VBQ2QsU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7VUFDMUIsSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7VUFDbkQsSUFBSSxFQUFFLFlBQVksS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLFlBQVksSUFBSSxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUM5SyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLFNBQVMsQ0FBQztXQUN6QztTQUNGO09BQ0Y7S0FDRixNQUFNO01BQ0wsSUFBSSxTQUFTLEdBQUcsT0FBTyxDQUFDO0tBQ3pCO0dBQ0Y7RUFDRCxJQUFJLE9BQU8sSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFO0lBQy9CLElBQUksaUJBQWlCLEdBQUcsRUFBRSxDQUFDLFNBQVM7TUFDbEMsYUFBYSxHQUFHLE9BQU8sSUFBSSxTQUFTLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWTtNQUNuRSxjQUFjLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDekMsSUFBSSxhQUFhLEVBQUU7TUFDakIsR0FBRyxJQUFJLGNBQWMsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7TUFDdEMsSUFBSSxhQUFhLEVBQUU7UUFDakIsSUFBSSxDQUFDLE9BQU8sRUFBRTtVQUNaLEdBQUcsSUFBSSxPQUFPLElBQUksUUFBUSxDQUFDLEdBQUcsb0JBQW9CLElBQUksV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDO1NBQzNFO1FBQ0QsSUFBSSxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUk7VUFDakIsYUFBYSxHQUFHLFFBQVEsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHO1VBQ2hELGdCQUFnQixHQUFHLE9BQU8sR0FBRyxhQUFhLEdBQUcsT0FBTyxDQUFDO1FBQ3ZELElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtVQUNsQyxFQUFFLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQzVGO1FBQ0QsR0FBRyxJQUFJLE9BQU8sSUFBSSxNQUFNLENBQUMsR0FBRyxXQUFXLENBQUM7UUFDeEMsSUFBSSxPQUFPLEVBQUU7VUFDWCxHQUFHLElBQUksYUFBYSxJQUFJLElBQUksQ0FBQyxHQUFHLGtCQUFrQixJQUFJLE1BQU0sQ0FBQyxHQUFHLHlDQUF5QyxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxNQUFNLENBQUMsR0FBRyxrQkFBa0IsQ0FBQztTQUM1SjtRQUNELEdBQUcsSUFBSSxZQUFZLElBQUksRUFBRSxDQUFDLEdBQUcsUUFBUSxJQUFJLEVBQUUsQ0FBQyxHQUFHLEtBQUssSUFBSSxRQUFRLENBQUMsR0FBRyxXQUFXLElBQUksRUFBRSxDQUFDLEdBQUcsUUFBUSxJQUFJLE1BQU0sQ0FBQyxHQUFHLEtBQUssSUFBSSxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksUUFBUSxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsQ0FBQyxHQUFHLG1CQUFtQixDQUFDO1FBQ3JMLElBQUksY0FBYyxFQUFFO1VBQ2xCLEdBQUcsSUFBSSw2Q0FBNkMsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLElBQUksUUFBUSxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztTQUN6RztRQUNELEdBQUcsSUFBSSxTQUFTLElBQUksTUFBTSxDQUFDLEdBQUcsYUFBYSxDQUFDO1FBQzVDLElBQUksT0FBTyxFQUFFO1VBQ1gsR0FBRyxJQUFJLE9BQU8sQ0FBQztTQUNoQjtRQUNELEdBQUcsSUFBSSxTQUFTLElBQUksTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDO1FBQ3ZDLElBQUksVUFBVSxHQUFHLFVBQVUsSUFBSSxFQUFFLENBQUM7UUFDbEMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQixHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ1QsSUFBSSxFQUFFLENBQUMsWUFBWSxLQUFLLEtBQUssRUFBRTtVQUM3QixHQUFHLElBQUksZ0JBQWdCLElBQUksVUFBVSxDQUFDLEdBQUcsc0NBQXNDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLGlCQUFpQixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsa0NBQWtDLElBQUksZ0JBQWdCLENBQUMsR0FBRyxPQUFPLENBQUM7VUFDcE8sSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxLQUFLLEVBQUU7WUFDOUIsR0FBRyxJQUFJLGdCQUFnQixDQUFDO1lBQ3hCLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtjQUNsQyxHQUFHLElBQUksd0JBQXdCLENBQUM7YUFDakMsTUFBTTtjQUNMLEdBQUcsSUFBSSxvQ0FBb0MsSUFBSSxnQkFBZ0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQzthQUMzRTtZQUNELEdBQUcsSUFBSSxLQUFLLENBQUM7V0FDZDtVQUNELElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDbkIsR0FBRyxJQUFJLDRCQUE0QixJQUFJLFdBQVcsQ0FBQyxHQUFHLGtDQUFrQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxXQUFXLElBQUksS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO1dBQzFJO1VBQ0QsR0FBRyxJQUFJLEtBQUssQ0FBQztTQUNkLE1BQU07VUFDTCxHQUFHLElBQUksTUFBTSxDQUFDO1NBQ2Y7UUFDRCxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUM7UUFDaEIsR0FBRyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsSUFBSSxhQUFhLEVBQUU7O1VBRXRDLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRTtZQUNaLEdBQUcsSUFBSSw4QkFBOEIsSUFBSSxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7V0FDMUQsTUFBTTtZQUNMLEdBQUcsSUFBSSxzQkFBc0IsSUFBSSxLQUFLLENBQUMsR0FBRyxtQkFBbUIsQ0FBQztXQUMvRDtTQUNGLE1BQU07VUFDTCxHQUFHLElBQUksYUFBYSxJQUFJLEtBQUssQ0FBQyxHQUFHLDhFQUE4RSxDQUFDO1NBQ2pIO1FBQ0QsR0FBRyxJQUFJLFlBQVksQ0FBQztPQUNyQixNQUFNO1FBQ0wsR0FBRyxJQUFJLFFBQVEsQ0FBQztRQUNoQixJQUFJLElBQUksR0FBRyxTQUFTLENBQUM7UUFDckIsSUFBSSxJQUFJLEVBQUU7VUFDUixJQUFJLFlBQVksRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztVQUN2QixPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDZCxZQUFZLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM3QixJQUFJLEVBQUUsRUFBRTtjQUNOLEdBQUcsSUFBSSxNQUFNLENBQUM7YUFDZjtZQUNELElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQztjQUMzQyxRQUFRLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUMzQixHQUFHLElBQUksT0FBTyxJQUFJLFFBQVEsQ0FBQyxHQUFHLGlCQUFpQixDQUFDO1lBQ2hELElBQUksY0FBYyxFQUFFO2NBQ2xCLEdBQUcsSUFBSSw2Q0FBNkMsSUFBSSxLQUFLLENBQUMsR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7YUFDekg7WUFDRCxHQUFHLElBQUksZUFBZSxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7V0FDMUg7U0FDRjtRQUNELEdBQUcsSUFBSSxPQUFPLENBQUM7UUFDZixJQUFJLGFBQWEsR0FBRyxTQUFTLEdBQUcsSUFBSTtVQUNsQyxnQkFBZ0IsR0FBRyxPQUFPLEdBQUcsYUFBYSxHQUFHLE9BQU8sQ0FBQztRQUN2RCxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUU7VUFDbEMsRUFBRSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsaUJBQWlCLEdBQUcsS0FBSyxHQUFHLGFBQWEsQ0FBQztTQUMvSTtRQUNELElBQUksVUFBVSxHQUFHLFVBQVUsSUFBSSxFQUFFLENBQUM7UUFDbEMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQixHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ1QsSUFBSSxFQUFFLENBQUMsWUFBWSxLQUFLLEtBQUssRUFBRTtVQUM3QixHQUFHLElBQUksZ0JBQWdCLElBQUksVUFBVSxDQUFDLEdBQUcsc0NBQXNDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLGlCQUFpQixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsa0NBQWtDLElBQUksZ0JBQWdCLENBQUMsR0FBRyxPQUFPLENBQUM7VUFDcE8sSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxLQUFLLEVBQUU7WUFDOUIsR0FBRyxJQUFJLGdCQUFnQixDQUFDO1lBQ3hCLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtjQUNsQyxHQUFHLElBQUksd0JBQXdCLENBQUM7YUFDakMsTUFBTTtjQUNMLEdBQUcsSUFBSSxvQ0FBb0MsSUFBSSxnQkFBZ0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQzthQUMzRTtZQUNELEdBQUcsSUFBSSxLQUFLLENBQUM7V0FDZDtVQUNELElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDbkIsR0FBRyxJQUFJLDRCQUE0QixJQUFJLFdBQVcsQ0FBQyxHQUFHLGtDQUFrQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxXQUFXLElBQUksS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO1dBQzFJO1VBQ0QsR0FBRyxJQUFJLEtBQUssQ0FBQztTQUNkLE1BQU07VUFDTCxHQUFHLElBQUksTUFBTSxDQUFDO1NBQ2Y7UUFDRCxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUM7UUFDaEIsR0FBRyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsSUFBSSxhQUFhLEVBQUU7O1VBRXRDLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRTtZQUNaLEdBQUcsSUFBSSw4QkFBOEIsSUFBSSxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7V0FDMUQsTUFBTTtZQUNMLEdBQUcsSUFBSSxzQkFBc0IsSUFBSSxLQUFLLENBQUMsR0FBRyxtQkFBbUIsQ0FBQztXQUMvRDtTQUNGLE1BQU07VUFDTCxHQUFHLElBQUksYUFBYSxJQUFJLEtBQUssQ0FBQyxHQUFHLDhFQUE4RSxDQUFDO1NBQ2pIO1FBQ0QsR0FBRyxJQUFJLFlBQVksQ0FBQztPQUNyQjtLQUNGLE1BQU07TUFDTCxJQUFJLGFBQWEsRUFBRTtRQUNqQixJQUFJLENBQUMsT0FBTyxFQUFFO1VBQ1osR0FBRyxJQUFJLE9BQU8sSUFBSSxRQUFRLENBQUMsR0FBRyxvQkFBb0IsSUFBSSxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUM7U0FDM0U7UUFDRCxJQUFJLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSTtVQUNqQixhQUFhLEdBQUcsUUFBUSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUc7VUFDaEQsZ0JBQWdCLEdBQUcsT0FBTyxHQUFHLGFBQWEsR0FBRyxPQUFPLENBQUM7UUFDdkQsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFO1VBQ2xDLEVBQUUsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDNUY7UUFDRCxJQUFJLE9BQU8sRUFBRTtVQUNYLEdBQUcsSUFBSSxPQUFPLElBQUksUUFBUSxDQUFDLEdBQUcscUJBQXFCLElBQUksUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7VUFDeEYsSUFBSSxFQUFFLENBQUMsWUFBWSxLQUFLLEtBQUssRUFBRTtZQUM3QixHQUFHLElBQUksZ0JBQWdCLElBQUksVUFBVSxDQUFDLEdBQUcsc0NBQXNDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLGlCQUFpQixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsa0NBQWtDLElBQUksZ0JBQWdCLENBQUMsR0FBRyxPQUFPLENBQUM7WUFDcE8sSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxLQUFLLEVBQUU7Y0FDOUIsR0FBRyxJQUFJLGdCQUFnQixDQUFDO2NBQ3hCLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtnQkFDbEMsR0FBRyxJQUFJLHdCQUF3QixDQUFDO2VBQ2pDLE1BQU07Z0JBQ0wsR0FBRyxJQUFJLG9DQUFvQyxJQUFJLGdCQUFnQixDQUFDLEdBQUcsTUFBTSxDQUFDO2VBQzNFO2NBQ0QsR0FBRyxJQUFJLEtBQUssQ0FBQzthQUNkO1lBQ0QsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtjQUNuQixHQUFHLElBQUksNEJBQTRCLElBQUksV0FBVyxDQUFDLEdBQUcsa0NBQWtDLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFdBQVcsSUFBSSxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7YUFDMUk7WUFDRCxHQUFHLElBQUksS0FBSyxDQUFDO1dBQ2QsTUFBTTtZQUNMLEdBQUcsSUFBSSxNQUFNLENBQUM7V0FDZjtVQUNELEdBQUcsSUFBSSx5RkFBeUYsSUFBSSxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztTQUN0STtRQUNELEdBQUcsSUFBSSxZQUFZLElBQUksRUFBRSxDQUFDLEdBQUcsUUFBUSxJQUFJLEVBQUUsQ0FBQyxHQUFHLEtBQUssSUFBSSxRQUFRLENBQUMsR0FBRyxXQUFXLElBQUksRUFBRSxDQUFDLEdBQUcsWUFBWSxJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxRQUFRLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDLEdBQUcsbUJBQW1CLENBQUM7UUFDdEssSUFBSSxjQUFjLEVBQUU7VUFDbEIsR0FBRyxJQUFJLDZDQUE2QyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksSUFBSSxRQUFRLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDO1NBQ3pHO1FBQ0QsR0FBRyxJQUFJLG1CQUFtQixDQUFDO1FBQzNCLElBQUksRUFBRSxDQUFDLFlBQVksS0FBSyxLQUFLLEVBQUU7VUFDN0IsR0FBRyxJQUFJLGdCQUFnQixJQUFJLFVBQVUsQ0FBQyxHQUFHLHNDQUFzQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxpQkFBaUIsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUFHLGtDQUFrQyxJQUFJLGdCQUFnQixDQUFDLEdBQUcsT0FBTyxDQUFDO1VBQ3BPLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssS0FBSyxFQUFFO1lBQzlCLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQztZQUN4QixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUU7Y0FDbEMsR0FBRyxJQUFJLHdCQUF3QixDQUFDO2FBQ2pDLE1BQU07Y0FDTCxHQUFHLElBQUksb0NBQW9DLElBQUksZ0JBQWdCLENBQUMsR0FBRyxNQUFNLENBQUM7YUFDM0U7WUFDRCxHQUFHLElBQUksS0FBSyxDQUFDO1dBQ2Q7VUFDRCxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ25CLEdBQUcsSUFBSSw0QkFBNEIsSUFBSSxXQUFXLENBQUMsR0FBRyxrQ0FBa0MsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsV0FBVyxJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztXQUMxSTtVQUNELEdBQUcsSUFBSSxLQUFLLENBQUM7U0FDZCxNQUFNO1VBQ0wsR0FBRyxJQUFJLE1BQU0sQ0FBQztTQUNmO1FBQ0QsR0FBRyxJQUFJLGtGQUFrRixDQUFDO1FBQzFGLElBQUksT0FBTyxFQUFFO1VBQ1gsR0FBRyxJQUFJLE9BQU8sQ0FBQztTQUNoQjtPQUNGLE1BQU07UUFDTCxJQUFJLElBQUksR0FBRyxTQUFTLENBQUM7UUFDckIsSUFBSSxJQUFJLEVBQUU7VUFDUixJQUFJLFlBQVksRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztVQUN2QixPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDZCxZQUFZLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM3QixJQUFJLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUM7Y0FDM0MsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDO2NBQ3JELFFBQVEsR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQzNCLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtjQUNsQyxFQUFFLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLFlBQVksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQ3ZGO1lBQ0QsR0FBRyxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsR0FBRyxpQkFBaUIsQ0FBQztZQUNqRCxJQUFJLGNBQWMsRUFBRTtjQUNsQixHQUFHLElBQUksNkNBQTZDLElBQUksS0FBSyxDQUFDLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO2FBQ3pIO1lBQ0QsR0FBRyxJQUFJLG1CQUFtQixDQUFDO1lBQzNCLElBQUksRUFBRSxDQUFDLFlBQVksS0FBSyxLQUFLLEVBQUU7Y0FDN0IsR0FBRyxJQUFJLGdCQUFnQixJQUFJLFVBQVUsQ0FBQyxHQUFHLHNDQUFzQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxpQkFBaUIsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUFHLGtDQUFrQyxJQUFJLGdCQUFnQixDQUFDLEdBQUcsT0FBTyxDQUFDO2NBQ3BPLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssS0FBSyxFQUFFO2dCQUM5QixHQUFHLElBQUksZ0JBQWdCLENBQUM7Z0JBQ3hCLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtrQkFDbEMsR0FBRyxJQUFJLHdCQUF3QixDQUFDO2lCQUNqQyxNQUFNO2tCQUNMLEdBQUcsSUFBSSxvQ0FBb0MsSUFBSSxnQkFBZ0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztpQkFDM0U7Z0JBQ0QsR0FBRyxJQUFJLEtBQUssQ0FBQztlQUNkO2NBQ0QsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDbkIsR0FBRyxJQUFJLDRCQUE0QixJQUFJLFdBQVcsQ0FBQyxHQUFHLGtDQUFrQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxXQUFXLElBQUksS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO2VBQzFJO2NBQ0QsR0FBRyxJQUFJLEtBQUssQ0FBQzthQUNkLE1BQU07Y0FDTCxHQUFHLElBQUksTUFBTSxDQUFDO2FBQ2Y7WUFDRCxHQUFHLElBQUksZ0ZBQWdGLENBQUM7V0FDekY7U0FDRjtPQUNGO0tBQ0Y7SUFDRCxFQUFFLENBQUMsU0FBUyxHQUFHLGlCQUFpQixDQUFDO0dBQ2xDLE1BQU0sSUFBSSxhQUFhLEVBQUU7SUFDeEIsR0FBRyxJQUFJLGNBQWMsQ0FBQztHQUN2QjtFQUNELE9BQU8sR0FBRyxDQUFDO0NBQ1o7O0FDNVFELGVBQWMsR0FBRyxTQUFTLG9CQUFvQixDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFO0VBQ3RFLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztFQUNkLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUM7RUFDcEIsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQztFQUM1QixJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0VBQ2xDLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7RUFDaEUsSUFBSSxjQUFjLEdBQUcsRUFBRSxDQUFDLGFBQWEsR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDO0VBQ3ZELElBQUksYUFBYSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7RUFDdkMsSUFBSSxLQUFLLEdBQUcsTUFBTSxJQUFJLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQztFQUN0QyxJQUFJLE1BQU0sR0FBRyxPQUFPLEdBQUcsSUFBSSxDQUFDO0VBQzVCLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSztJQUNyRCxZQUFZLENBQUM7RUFDZixJQUFJLE9BQU8sRUFBRTtJQUNYLEdBQUcsSUFBSSxhQUFhLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUMxRyxZQUFZLEdBQUcsUUFBUSxHQUFHLElBQUksQ0FBQztHQUNoQyxNQUFNO0lBQ0wsWUFBWSxHQUFHLE9BQU8sQ0FBQztHQUN4QjtFQUNELElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxLQUFLLEtBQUssRUFBRTtJQUN6RCxJQUFJLE9BQU8sRUFBRTtNQUNYLEdBQUcsSUFBSSxPQUFPLElBQUksTUFBTSxDQUFDLEdBQUcsUUFBUSxJQUFJLFlBQVksQ0FBQyxHQUFHLGdCQUFnQixJQUFJLFlBQVksQ0FBQyxHQUFHLGtCQUFrQixJQUFJLE1BQU0sQ0FBQyxHQUFHLDJCQUEyQixJQUFJLFlBQVksQ0FBQyxHQUFHLG1CQUFtQixJQUFJLE1BQU0sQ0FBQyxHQUFHLG1CQUFtQixDQUFDO0tBQ2pPO0lBQ0QsR0FBRyxJQUFJLFdBQVcsSUFBSSxLQUFLLENBQUMsR0FBRyxZQUFZLElBQUksTUFBTSxDQUFDLEdBQUcsNEJBQTRCLENBQUM7SUFDdEYsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSTtNQUNyRCxZQUFZLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxQyxJQUFJLENBQUMsU0FBUyxJQUFJLFNBQVMsSUFBSSxRQUFRLElBQUksU0FBUyxJQUFJLE9BQU8sS0FBSyxZQUFZLEtBQUssU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO01BQzFKLEdBQUcsSUFBSSxzREFBc0QsSUFBSSxLQUFLLENBQUMsR0FBRyxPQUFPLElBQUksS0FBSyxDQUFDLEdBQUcsVUFBVSxJQUFJLE1BQU0sQ0FBQyxHQUFHLCtCQUErQixDQUFDO0tBQ3ZKLE1BQU07TUFDTCxHQUFHLElBQUksd0RBQXdELElBQUksS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDO01BQ3BGLElBQUksT0FBTyxHQUFHLGVBQWUsSUFBSSxZQUFZLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO01BQzFELEdBQUcsSUFBSSxPQUFPLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsY0FBYyxDQUFDO01BQzlFLElBQUksWUFBWSxFQUFFO1FBQ2hCLEdBQUcsSUFBSSx1REFBdUQsQ0FBQztPQUNoRTtNQUNELEdBQUcsSUFBSSxpREFBaUQsSUFBSSxNQUFNLENBQUMsR0FBRyxxRUFBcUUsQ0FBQztLQUM3STtJQUNELEdBQUcsSUFBSSxLQUFLLENBQUM7SUFDYixJQUFJLE9BQU8sRUFBRTtNQUNYLEdBQUcsSUFBSSxPQUFPLENBQUM7S0FDaEI7SUFDRCxHQUFHLElBQUksUUFBUSxJQUFJLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQztJQUN0QyxJQUFJLFVBQVUsR0FBRyxVQUFVLElBQUksRUFBRSxDQUFDO0lBQ2xDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckIsR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUNULElBQUksRUFBRSxDQUFDLFlBQVksS0FBSyxLQUFLLEVBQUU7TUFDN0IsR0FBRyxJQUFJLGdCQUFnQixJQUFJLGFBQWEsQ0FBQyxHQUFHLHNDQUFzQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxpQkFBaUIsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUFHLDRCQUE0QixDQUFDO01BQ2xNLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssS0FBSyxFQUFFO1FBQzlCLEdBQUcsSUFBSSx1R0FBdUcsQ0FBQztPQUNoSDtNQUNELElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7UUFDbkIsR0FBRyxJQUFJLGNBQWMsQ0FBQztRQUN0QixJQUFJLE9BQU8sRUFBRTtVQUNYLEdBQUcsSUFBSSxpQkFBaUIsSUFBSSxXQUFXLENBQUMsQ0FBQztTQUMxQyxNQUFNO1VBQ0wsR0FBRyxJQUFJLEVBQUUsSUFBSSxPQUFPLENBQUMsQ0FBQztTQUN2QjtRQUNELEdBQUcsSUFBSSwwQ0FBMEMsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsV0FBVyxJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztPQUNuRztNQUNELEdBQUcsSUFBSSxLQUFLLENBQUM7S0FDZCxNQUFNO01BQ0wsR0FBRyxJQUFJLE1BQU0sQ0FBQztLQUNmO0lBQ0QsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDO0lBQ2hCLEdBQUcsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDdkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLElBQUksYUFBYSxFQUFFOztNQUV0QyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUU7UUFDWixHQUFHLElBQUksOEJBQThCLElBQUksS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO09BQzFELE1BQU07UUFDTCxHQUFHLElBQUksc0JBQXNCLElBQUksS0FBSyxDQUFDLEdBQUcsbUJBQW1CLENBQUM7T0FDL0Q7S0FDRixNQUFNO01BQ0wsR0FBRyxJQUFJLGFBQWEsSUFBSSxLQUFLLENBQUMsR0FBRyw4RUFBOEUsQ0FBQztLQUNqSDtJQUNELEdBQUcsSUFBSSxLQUFLLENBQUM7SUFDYixJQUFJLGFBQWEsRUFBRTtNQUNqQixHQUFHLElBQUksVUFBVSxDQUFDO0tBQ25CO0dBQ0YsTUFBTTtJQUNMLElBQUksYUFBYSxFQUFFO01BQ2pCLEdBQUcsSUFBSSxlQUFlLENBQUM7S0FDeEI7R0FDRjtFQUNELE9BQU8sR0FBRyxDQUFDO0NBQ1o7OztBQ2xGRCxTQUFjLEdBQUc7RUFDZixNQUFNLEVBQUVaLEdBQWdCO0VBQ3hCLEtBQUssRUFBRUMsS0FBa0I7RUFDekIsS0FBSyxFQUFFWSxLQUFrQjtFQUN6QixVQUFVLEVBQUVDLE9BQW9CO0VBQ2hDLEtBQUssRUFBRUMsTUFBa0I7RUFDekIsUUFBUSxFQUFFQyxRQUFxQjtFQUMvQixZQUFZLEVBQUVDLFlBQXlCO0VBQ3ZDLE1BQU0sRUFBRUMsS0FBaUI7RUFDekIsTUFBTSxFQUFFQyxNQUFtQjtFQUMzQixJQUFJLEVBQUVDLEdBQWU7RUFDckIsS0FBSyxFQUFFQyxLQUFrQjtFQUN6QixPQUFPLEVBQUVDLE1BQW1CO0VBQzVCLE9BQU8sRUFBRUEsTUFBbUI7RUFDNUIsUUFBUSxFQUFFQyxXQUF3QjtFQUNsQyxRQUFRLEVBQUVBLFdBQXdCO0VBQ2xDLFNBQVMsRUFBRUMsWUFBeUI7RUFDcEMsU0FBUyxFQUFFQSxZQUF5QjtFQUNwQyxhQUFhLEVBQUVDLGdCQUE2QjtFQUM1QyxhQUFhLEVBQUVBLGdCQUE2QjtFQUM1QyxVQUFVLEVBQUVDLFVBQXVCO0VBQ25DLEdBQUcsRUFBRUMsR0FBZ0I7RUFDckIsS0FBSyxFQUFFQyxLQUFrQjtFQUN6QixPQUFPLEVBQUVDLE9BQW9CO0VBQzdCLFVBQVUsRUFBRUMsVUFBdUI7RUFDbkMsYUFBYSxFQUFFQyxhQUEwQjtFQUN6QyxRQUFRLEVBQUVDLFFBQXFCO0VBQy9CLFdBQVcsRUFBRUMsV0FBd0I7RUFDckMsUUFBUSxFQUFFQyxRQUFxQjtDQUNoQyxDQUFDOztBQzlCRixJQUFJQyxRQUNNLEdBQUduQyxJQUFpQixDQUFDLE1BQU0sQ0FBQzs7QUFFdEMsU0FBYyxHQUFHLFNBQVMsS0FBSyxHQUFHO0VBQ2hDLElBQUksS0FBSyxHQUFHO0lBQ1YsRUFBRSxJQUFJLEVBQUUsUUFBUTtNQUNkLEtBQUssRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsa0JBQWtCLENBQUMsRUFBRTtlQUNuQyxFQUFFLFNBQVMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLEVBQUU7SUFDekUsRUFBRSxJQUFJLEVBQUUsUUFBUTtNQUNkLEtBQUssRUFBRSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxFQUFFO0lBQzVELEVBQUUsSUFBSSxFQUFFLE9BQU87TUFDYixLQUFLLEVBQUUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLEVBQUU7SUFDekUsRUFBRSxJQUFJLEVBQUUsUUFBUTtNQUNkLEtBQUssRUFBRSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxlQUFlO2VBQzdFLEVBQUUsWUFBWSxFQUFFLENBQUMsc0JBQXNCLEVBQUUsbUJBQW1CLENBQUMsRUFBRSxFQUFFLEVBQUU7SUFDOUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUU7R0FDL0UsQ0FBQzs7RUFFRixJQUFJLEdBQUcsR0FBRyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsQ0FBQztFQUNqQyxJQUFJLFFBQVEsR0FBRztJQUNiLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTztJQUNsRCxhQUFhLEVBQUUsU0FBUyxFQUFFLGFBQWE7SUFDdkMsVUFBVSxFQUFFLFVBQVUsRUFBRSxXQUFXO0lBQ25DLGtCQUFrQixFQUFFLGlCQUFpQjtJQUNyQyxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsTUFBTTtHQUNsQyxDQUFDO0VBQ0YsSUFBSSxLQUFLLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsQ0FBQztFQUNwRixLQUFLLENBQUMsR0FBRyxHQUFHbUMsUUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3hCLEtBQUssQ0FBQyxLQUFLLEdBQUdBLFFBQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQzs7RUFFNUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEtBQUssRUFBRTtJQUM3QixLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsT0FBTyxFQUFFO01BQy9DLElBQUksWUFBWSxDQUFDO01BQ2pCLElBQUksT0FBTyxPQUFPLElBQUksUUFBUSxFQUFFO1FBQzlCLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QixPQUFPLEdBQUcsR0FBRyxDQUFDO1FBQ2QsWUFBWSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRTtVQUNoQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQ1osS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7U0FDckIsQ0FBQyxDQUFDO09BQ0o7TUFDRCxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO01BQ2xCLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUc7UUFDOUIsT0FBTyxFQUFFLE9BQU87UUFDaEIsSUFBSSxFQUFFQyxLQUFXLENBQUMsT0FBTyxDQUFDO1FBQzFCLFVBQVUsRUFBRSxZQUFZO09BQ3pCLENBQUM7TUFDRixPQUFPLElBQUksQ0FBQztLQUNiLENBQUMsQ0FBQzs7SUFFSCxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRztNQUNuQixPQUFPLEVBQUUsVUFBVTtNQUNuQixJQUFJLEVBQUVBLEtBQVcsQ0FBQyxRQUFRO0tBQzNCLENBQUM7O0lBRUYsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztHQUNqRCxDQUFDLENBQUM7O0VBRUgsS0FBSyxDQUFDLFFBQVEsR0FBR0QsUUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztFQUM5QyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQzs7RUFFbEIsT0FBTyxLQUFLLENBQUM7Q0FDZCxDQUFDOztBQy9ERixJQUFJLFFBQVEsR0FBRztFQUNiLFlBQVk7RUFDWixTQUFTO0VBQ1Qsa0JBQWtCO0VBQ2xCLFNBQVM7RUFDVCxrQkFBa0I7RUFDbEIsV0FBVztFQUNYLFdBQVc7RUFDWCxTQUFTO0VBQ1QsaUJBQWlCO0VBQ2pCLFVBQVU7RUFDVixVQUFVO0VBQ1YsYUFBYTtFQUNiLGVBQWU7RUFDZixlQUFlO0VBQ2YsVUFBVTtFQUNWLHNCQUFzQjtFQUN0QixNQUFNO0VBQ04sUUFBUTtFQUNSLE9BQU87Q0FDUixDQUFDOztBQUVGLFFBQWMsR0FBRyxVQUFVLFVBQVUsRUFBRSxvQkFBb0IsRUFBRTtFQUMzRCxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ2hELFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUNwRCxJQUFJLFFBQVEsR0FBRyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEQsSUFBSSxRQUFRLEdBQUcsVUFBVSxDQUFDO0lBQzFCLElBQUksQ0FBQyxDQUFDO0lBQ04sS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRTtNQUM5QixRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUVuQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7TUFDaEMsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3RCLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUMzQixJQUFJLE1BQU0sRUFBRTtRQUNWLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRztVQUNkLEtBQUssRUFBRTtZQUNMLE1BQU07WUFDTixFQUFFLElBQUksRUFBRSw4RUFBOEUsRUFBRTtXQUN6RjtTQUNGLENBQUM7T0FDSDtLQUNGO0dBQ0Y7O0VBRUQsT0FBTyxVQUFVLENBQUM7Q0FDbkIsQ0FBQzs7QUM5Q0YsSUFBSUUsaUJBQWUsR0FBR3JDLGFBQTBCLENBQUMsVUFBVSxDQUFDOztBQUU1RCxTQUFjLEdBQUcsWUFBWSxDQUFDOzs7Ozs7Ozs7Ozs7QUFZOUIsU0FBUyxZQUFZLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7Ozs7RUFJNUMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO0VBQ2hCLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxVQUFVO0lBQzVDLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQzs7RUFFN0QsSUFBSSxPQUFPLElBQUksSUFBSSxVQUFVLEVBQUU7SUFDN0IsUUFBUSxHQUFHLElBQUksQ0FBQztJQUNoQixJQUFJLEdBQUcsU0FBUyxDQUFDO0dBQ2xCOztFQUVELElBQUksQ0FBQyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZO0lBQ2hELElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN6RCxPQUFPLFNBQVMsQ0FBQyxRQUFRLElBQUksYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0dBQ3ZELENBQUMsQ0FBQzs7RUFFSCxJQUFJLFFBQVEsRUFBRTtJQUNaLENBQUMsQ0FBQyxJQUFJO01BQ0osU0FBUyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUU7TUFDbEMsUUFBUTtLQUNULENBQUM7R0FDSDs7RUFFRCxPQUFPLENBQUMsQ0FBQzs7O0VBR1QsU0FBUyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUU7SUFDN0IsSUFBSSxPQUFPLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQztJQUMxQixPQUFPLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO2NBQ2hDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksQ0FBQztjQUNoRCxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7R0FDN0I7OztFQUdELFNBQVMsYUFBYSxDQUFDLFNBQVMsRUFBRTtJQUNoQyxJQUFJLEVBQUUsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUU7SUFDeEMsTUFBTSxDQUFDLEVBQUU7TUFDUCxJQUFJLENBQUMsWUFBWXFDLGlCQUFlLEVBQUUsT0FBTyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUM5RCxNQUFNLENBQUMsQ0FBQztLQUNUOzs7SUFHRCxTQUFTLGlCQUFpQixDQUFDLENBQUMsRUFBRTtNQUM1QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDO01BQzFCLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsU0FBUyxHQUFHLEdBQUcsR0FBRyxpQkFBaUIsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLHFCQUFxQixDQUFDLENBQUM7O01BRTVHLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDOUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtRQUNsQixhQUFhLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2RSxhQUFhLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQztPQUNsRDs7TUFFRCxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUU7UUFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtVQUNmLE9BQU8sZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVk7WUFDNUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1dBQzVELENBQUMsQ0FBQztTQUNKO09BQ0YsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXO1FBQ2pCLE9BQU8sYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO09BQ2pDLENBQUMsQ0FBQzs7TUFFSCxTQUFTLGFBQWEsR0FBRztRQUN2QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7T0FDbEM7O01BRUQsU0FBUyxLQUFLLENBQUMsR0FBRyxFQUFFO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO09BQzlDO0tBQ0Y7R0FDRjtDQUNGOztBQ3hGRCxVQUFjLEdBQUcsU0FBUyxlQUFlLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUU7RUFDakUsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ2QsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQztFQUNwQixJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDO0VBQzVCLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7RUFDbEMsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztFQUNoRSxJQUFJLGNBQWMsR0FBRyxFQUFFLENBQUMsYUFBYSxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUM7RUFDdkQsSUFBSSxhQUFhLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztFQUN2QyxJQUFJLGFBQWEsQ0FBQztFQUNsQixJQUFJLEtBQUssR0FBRyxNQUFNLElBQUksUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0VBQ3RDLElBQUksTUFBTSxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUM7RUFDNUIsSUFBSSxLQUFLLEdBQUcsUUFBUSxHQUFHLElBQUksQ0FBQztFQUM1QixJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLEtBQUs7SUFDckQsWUFBWSxDQUFDO0VBQ2YsSUFBSSxPQUFPLEVBQUU7SUFDWCxHQUFHLElBQUksYUFBYSxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDMUcsWUFBWSxHQUFHLFFBQVEsR0FBRyxJQUFJLENBQUM7R0FDaEMsTUFBTTtJQUNMLFlBQVksR0FBRyxPQUFPLENBQUM7R0FDeEI7RUFDRCxJQUFJLEtBQUssR0FBRyxJQUFJO0lBQ2QsV0FBVyxHQUFHLFlBQVksR0FBRyxJQUFJO0lBQ2pDLEtBQUssR0FBRyxLQUFLLENBQUMsVUFBVTtJQUN4QixjQUFjLEdBQUcsRUFBRSxDQUFDO0VBQ3RCLElBQUksUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLGFBQWEsQ0FBQztFQUM1RCxJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO0lBQzFCLGFBQWEsR0FBRyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7SUFDekMsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQztJQUMzQyxHQUFHLElBQUksT0FBTyxJQUFJLFdBQVcsQ0FBQyxHQUFHLG9CQUFvQixJQUFJLFFBQVEsQ0FBQyxHQUFHLHNCQUFzQixJQUFJLGFBQWEsQ0FBQyxHQUFHLEtBQUssSUFBSSxXQUFXLENBQUMsR0FBRyxZQUFZLENBQUM7R0FDdEosTUFBTTtJQUNMLGFBQWEsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNoRSxJQUFJLENBQUMsYUFBYSxFQUFFLE9BQU87SUFDM0IsWUFBWSxHQUFHLGlCQUFpQixHQUFHLFdBQVcsQ0FBQztJQUMvQyxhQUFhLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQztJQUNuQyxRQUFRLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztJQUN6QixPQUFPLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUN2QixNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztHQUN0QjtFQUNELElBQUksU0FBUyxHQUFHLGFBQWEsR0FBRyxTQUFTO0lBQ3ZDLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSTtJQUNmLFFBQVEsR0FBRyxTQUFTLEdBQUcsSUFBSTtJQUMzQixhQUFhLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztFQUM5QixJQUFJLGFBQWEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO0VBQ2hGLElBQUksRUFBRSxPQUFPLElBQUksTUFBTSxDQUFDLEVBQUU7SUFDeEIsR0FBRyxJQUFJLEVBQUUsSUFBSSxTQUFTLENBQUMsR0FBRyxVQUFVLENBQUM7R0FDdEM7RUFDRCxHQUFHLElBQUksTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLGdCQUFnQixJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUM1RCxJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO0lBQzFCLGNBQWMsSUFBSSxHQUFHLENBQUM7SUFDdEIsR0FBRyxJQUFJLE9BQU8sSUFBSSxZQUFZLENBQUMsR0FBRyxvQkFBb0IsSUFBSSxNQUFNLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztJQUN6RixJQUFJLGVBQWUsRUFBRTtNQUNuQixjQUFjLElBQUksR0FBRyxDQUFDO01BQ3RCLEdBQUcsSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsS0FBSyxJQUFJLFdBQVcsQ0FBQyxHQUFHLGtCQUFrQixJQUFJLFlBQVksQ0FBQyxHQUFHLFNBQVMsSUFBSSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUM7S0FDckg7R0FDRjtFQUNELElBQUksT0FBTyxFQUFFO0lBQ1gsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFO01BQ3BCLEdBQUcsSUFBSSxHQUFHLElBQUksYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUM3QyxNQUFNO01BQ0wsR0FBRyxJQUFJLEdBQUcsSUFBSSxNQUFNLENBQUMsR0FBRyxLQUFLLElBQUksYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQztLQUNqRTtHQUNGLE1BQU0sSUFBSSxNQUFNLEVBQUU7SUFDakIsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDM0IsSUFBSSxjQUFjLEdBQUcsRUFBRSxDQUFDO0lBQ3hCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNaLElBQUksVUFBVSxHQUFHLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO0lBQ3JDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQztJQUNwQyxHQUFHLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUNwQixJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDO0lBQ3JDLEVBQUUsQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFDNUMsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDekUsRUFBRSxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztJQUNyRCxHQUFHLElBQUksR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDO0dBQ3RCLE1BQU07SUFDTCxJQUFJLFVBQVUsR0FBRyxVQUFVLElBQUksRUFBRSxDQUFDO0lBQ2xDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckIsR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUNULEdBQUcsSUFBSSxJQUFJLElBQUksYUFBYSxDQUFDLEdBQUcsU0FBUyxDQUFDO0lBQzFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7TUFDdkIsR0FBRyxJQUFJLE1BQU0sQ0FBQztLQUNmLE1BQU07TUFDTCxHQUFHLElBQUksTUFBTSxDQUFDO0tBQ2Y7SUFDRCxJQUFJLFFBQVEsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLEtBQUssRUFBRTtNQUN0QyxHQUFHLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUM5QixNQUFNO01BQ0wsR0FBRyxJQUFJLEtBQUssSUFBSSxZQUFZLENBQUMsR0FBRyxLQUFLLElBQUksS0FBSyxDQUFDLEdBQUcsb0JBQW9CLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUNoRztJQUNELEdBQUcsSUFBSSx1QkFBdUIsQ0FBQztJQUMvQixJQUFJLEVBQUUsQ0FBQyxTQUFTLElBQUksSUFBSSxFQUFFO01BQ3hCLEdBQUcsSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQy9CO0lBQ0QsSUFBSSxXQUFXLEdBQUcsUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsWUFBWTtNQUN6RSxtQkFBbUIsR0FBRyxRQUFRLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztJQUNuRixHQUFHLElBQUksS0FBSyxJQUFJLFdBQVcsQ0FBQyxHQUFHLEtBQUssSUFBSSxtQkFBbUIsQ0FBQyxHQUFHLGlCQUFpQixDQUFDO0lBQ2pGLElBQUksb0JBQW9CLEdBQUcsR0FBRyxDQUFDO0lBQy9CLEdBQUcsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDdkIsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLEtBQUssRUFBRTtNQUMxQixHQUFHLElBQUksR0FBRyxJQUFJLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQztNQUM5QixJQUFJLGFBQWEsRUFBRTtRQUNqQixHQUFHLElBQUksUUFBUSxDQUFDO09BQ2pCO01BQ0QsR0FBRyxJQUFJLEVBQUUsSUFBSSxvQkFBb0IsQ0FBQyxHQUFHLElBQUksQ0FBQztLQUMzQyxNQUFNO01BQ0wsSUFBSSxhQUFhLEVBQUU7UUFDakIsU0FBUyxHQUFHLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDbEMsR0FBRyxJQUFJLE9BQU8sSUFBSSxTQUFTLENBQUMsR0FBRyxpQkFBaUIsSUFBSSxNQUFNLENBQUMsR0FBRyxXQUFXLElBQUksb0JBQW9CLENBQUMsR0FBRyxrQkFBa0IsSUFBSSxNQUFNLENBQUMsR0FBRyw4Q0FBOEMsSUFBSSxTQUFTLENBQUMsR0FBRywrQkFBK0IsQ0FBQztPQUNyTyxNQUFNO1FBQ0wsR0FBRyxJQUFJLEdBQUcsSUFBSSxTQUFTLENBQUMsR0FBRyxXQUFXLElBQUksTUFBTSxDQUFDLEdBQUcsS0FBSyxJQUFJLG9CQUFvQixDQUFDLEdBQUcsSUFBSSxDQUFDO09BQzNGO0tBQ0Y7R0FDRjtFQUNELElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRTtJQUNuQixHQUFHLElBQUksT0FBTyxJQUFJLFdBQVcsQ0FBQyxHQUFHLElBQUksSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLElBQUksV0FBVyxDQUFDLEdBQUcsR0FBRyxJQUFJLG1CQUFtQixDQUFDLEdBQUcsSUFBSSxDQUFDO0dBQzlHO0VBQ0QsR0FBRyxJQUFJLEVBQUUsSUFBSSxjQUFjLENBQUMsQ0FBQztFQUM3QixJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7SUFDZixJQUFJLGFBQWEsRUFBRTtNQUNqQixHQUFHLElBQUksZUFBZSxDQUFDO0tBQ3hCO0dBQ0YsTUFBTTtJQUNMLEdBQUcsSUFBSSxRQUFRLENBQUM7SUFDaEIsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtNQUM3QixHQUFHLElBQUksSUFBSSxDQUFDO01BQ1osSUFBSSxNQUFNLEVBQUU7UUFDVixHQUFHLElBQUksRUFBRSxJQUFJLFVBQVUsQ0FBQyxDQUFDO09BQzFCLE1BQU07UUFDTCxHQUFHLElBQUksRUFBRSxJQUFJLE1BQU0sQ0FBQyxDQUFDO09BQ3RCO0tBQ0YsTUFBTTtNQUNMLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQ25DO0lBQ0QsR0FBRyxJQUFJLE1BQU0sQ0FBQztJQUNkLGFBQWEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO0lBQzlCLElBQUksVUFBVSxHQUFHLFVBQVUsSUFBSSxFQUFFLENBQUM7SUFDbEMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQixHQUFHLEdBQUcsRUFBRSxDQUFDO0lBQ1QsSUFBSSxVQUFVLEdBQUcsVUFBVSxJQUFJLEVBQUUsQ0FBQztJQUNsQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDVCxJQUFJLEVBQUUsQ0FBQyxZQUFZLEtBQUssS0FBSyxFQUFFO01BQzdCLEdBQUcsSUFBSSxnQkFBZ0IsSUFBSSxhQUFhLElBQUksUUFBUSxDQUFDLEdBQUcsc0NBQXNDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLGlCQUFpQixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsMEJBQTBCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLE9BQU8sQ0FBQztNQUN4TyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLEtBQUssRUFBRTtRQUM5QixHQUFHLElBQUksNkJBQTZCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLHlCQUF5QixDQUFDO09BQ3BGO01BQ0QsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtRQUNuQixHQUFHLElBQUksNEJBQTRCLElBQUksV0FBVyxDQUFDLEdBQUcsa0NBQWtDLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFdBQVcsSUFBSSxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7T0FDMUk7TUFDRCxHQUFHLElBQUksS0FBSyxDQUFDO0tBQ2QsTUFBTTtNQUNMLEdBQUcsSUFBSSxNQUFNLENBQUM7S0FDZjtJQUNELElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQztJQUNoQixHQUFHLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxJQUFJLGFBQWEsRUFBRTs7TUFFdEMsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFO1FBQ1osR0FBRyxJQUFJLDhCQUE4QixJQUFJLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQztPQUMxRCxNQUFNO1FBQ0wsR0FBRyxJQUFJLHNCQUFzQixJQUFJLEtBQUssQ0FBQyxHQUFHLG1CQUFtQixDQUFDO09BQy9EO0tBQ0YsTUFBTTtNQUNMLEdBQUcsSUFBSSxhQUFhLElBQUksS0FBSyxDQUFDLEdBQUcsOEVBQThFLENBQUM7S0FDakg7SUFDRCxJQUFJLGVBQWUsR0FBRyxHQUFHLENBQUM7SUFDMUIsR0FBRyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN2QixJQUFJLE9BQU8sRUFBRTtNQUNYLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRTtRQUNoQixJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksTUFBTSxFQUFFO1VBQzFCLEdBQUcsSUFBSSxhQUFhLElBQUksRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsR0FBRyxXQUFXLElBQUksRUFBRSxDQUFDLEdBQUcsWUFBWSxJQUFJLFFBQVEsQ0FBQyxHQUFHLGFBQWEsSUFBSSxFQUFFLENBQUMsR0FBRyxTQUFTLElBQUksUUFBUSxDQUFDLEdBQUcsMkJBQTJCLElBQUksUUFBUSxDQUFDLEdBQUcsbUNBQW1DLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFFBQVEsSUFBSSxRQUFRLENBQUMsR0FBRywrQkFBK0IsSUFBSSxRQUFRLENBQUMsR0FBRyxpQkFBaUIsSUFBSSxjQUFjLENBQUMsR0FBRyxPQUFPLENBQUM7VUFDclgsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNuQixHQUFHLElBQUksR0FBRyxJQUFJLFFBQVEsQ0FBQyxHQUFHLFlBQVksSUFBSSxZQUFZLENBQUMsR0FBRyxJQUFJLElBQUksUUFBUSxDQUFDLEdBQUcsVUFBVSxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQztXQUMzRztVQUNELEdBQUcsSUFBSSxLQUFLLENBQUM7U0FDZDtPQUNGLE1BQU07UUFDTCxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssS0FBSyxFQUFFO1VBQzFCLEdBQUcsSUFBSSxHQUFHLElBQUksZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO1NBQ3RDLE1BQU07VUFDTCxHQUFHLElBQUksT0FBTyxJQUFJLEtBQUssQ0FBQyxHQUFHLGdCQUFnQixJQUFJLGVBQWUsQ0FBQyxHQUFHLHNCQUFzQixJQUFJLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLEdBQUcsV0FBVyxJQUFJLEVBQUUsQ0FBQyxHQUFHLFlBQVksSUFBSSxRQUFRLENBQUMsR0FBRyxhQUFhLElBQUksRUFBRSxDQUFDLEdBQUcsU0FBUyxJQUFJLFFBQVEsQ0FBQyxHQUFHLDJCQUEyQixJQUFJLFFBQVEsQ0FBQyxHQUFHLG1DQUFtQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxRQUFRLElBQUksUUFBUSxDQUFDLEdBQUcsK0JBQStCLElBQUksUUFBUSxDQUFDLEdBQUcsaUJBQWlCLElBQUksY0FBYyxDQUFDLEdBQUcsT0FBTyxDQUFDO1VBQ3piLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDbkIsR0FBRyxJQUFJLEdBQUcsSUFBSSxRQUFRLENBQUMsR0FBRyxZQUFZLElBQUksWUFBWSxDQUFDLEdBQUcsSUFBSSxJQUFJLFFBQVEsQ0FBQyxHQUFHLFVBQVUsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUM7V0FDM0c7VUFDRCxHQUFHLElBQUksT0FBTyxDQUFDO1NBQ2hCO09BQ0Y7S0FDRixNQUFNLElBQUksTUFBTSxFQUFFO01BQ2pCLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQztNQUN6QixJQUFJLEVBQUUsQ0FBQyxZQUFZLEtBQUssS0FBSyxFQUFFO1FBQzdCLEdBQUcsSUFBSSxnQkFBZ0IsSUFBSSxhQUFhLElBQUksUUFBUSxDQUFDLEdBQUcsc0NBQXNDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLGlCQUFpQixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsMEJBQTBCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLE9BQU8sQ0FBQztRQUN4TyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLEtBQUssRUFBRTtVQUM5QixHQUFHLElBQUksNkJBQTZCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLHlCQUF5QixDQUFDO1NBQ3BGO1FBQ0QsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtVQUNuQixHQUFHLElBQUksNEJBQTRCLElBQUksV0FBVyxDQUFDLEdBQUcsa0NBQWtDLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFdBQVcsSUFBSSxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7U0FDMUk7UUFDRCxHQUFHLElBQUksS0FBSyxDQUFDO09BQ2QsTUFBTTtRQUNMLEdBQUcsSUFBSSxNQUFNLENBQUM7T0FDZjtNQUNELEdBQUcsSUFBSSw4RUFBOEUsQ0FBQztNQUN0RixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsSUFBSSxhQUFhLEVBQUU7O1FBRXRDLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRTtVQUNaLEdBQUcsSUFBSSx1Q0FBdUMsQ0FBQztTQUNoRCxNQUFNO1VBQ0wsR0FBRyxJQUFJLDRDQUE0QyxDQUFDO1NBQ3JEO09BQ0Y7S0FDRixNQUFNO01BQ0wsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLEtBQUssRUFBRTtRQUMxQixHQUFHLElBQUksR0FBRyxJQUFJLGVBQWUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztPQUN0QyxNQUFNO1FBQ0wsR0FBRyxJQUFJLHFCQUFxQixJQUFJLFNBQVMsQ0FBQyxHQUFHLHVDQUF1QyxJQUFJLFNBQVMsQ0FBQyxHQUFHLGtDQUFrQyxJQUFJLFNBQVMsQ0FBQyxHQUFHLHdDQUF3QyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLEdBQUcsV0FBVyxJQUFJLEVBQUUsQ0FBQyxHQUFHLFlBQVksSUFBSSxRQUFRLENBQUMsR0FBRyxhQUFhLElBQUksRUFBRSxDQUFDLEdBQUcsU0FBUyxJQUFJLFFBQVEsQ0FBQyxHQUFHLDJCQUEyQixJQUFJLFFBQVEsQ0FBQyxHQUFHLG1DQUFtQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxLQUFLLElBQUksUUFBUSxDQUFDLEdBQUcsaUJBQWlCLElBQUksY0FBYyxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQzllLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7VUFDbkIsR0FBRyxJQUFJLEdBQUcsSUFBSSxRQUFRLENBQUMsR0FBRyxZQUFZLElBQUksWUFBWSxDQUFDLEdBQUcsSUFBSSxJQUFJLFFBQVEsQ0FBQyxHQUFHLFVBQVUsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUM7U0FDM0c7UUFDRCxHQUFHLElBQUksY0FBYyxJQUFJLGVBQWUsQ0FBQyxHQUFHLEtBQUssQ0FBQztPQUNuRDtLQUNGO0lBQ0QsR0FBRyxJQUFJLEtBQUssQ0FBQztJQUNiLElBQUksYUFBYSxFQUFFO01BQ2pCLEdBQUcsSUFBSSxVQUFVLENBQUM7S0FDbkI7R0FDRjtFQUNELE9BQU8sR0FBRyxDQUFDO0NBQ1o7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQy9ORCxxQkFBYyxHQUFHO0VBQ2YsR0FBRyxFQUFFLHlFQUF5RTtFQUM5RSxXQUFXLEVBQUU7SUFDWCxXQUFXLEVBQUVDLFVBQVUsQ0FBQyxXQUFXLENBQUMsV0FBVztHQUNoRDtFQUNELElBQUksRUFBRSxRQUFRO0VBQ2QsWUFBWSxFQUFFO0lBQ1osTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDO0lBQ3BCLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQztJQUNuQixVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUM7SUFDdEIsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztHQUNwQztFQUNELFVBQVUsRUFBRTtJQUNWLElBQUksRUFBRUEsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJO0lBQ2hDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUM7SUFDekIsVUFBVSxFQUFFLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQztJQUM3QixZQUFZLEVBQUU7TUFDWixJQUFJLEVBQUUsT0FBTztNQUNiLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUM7S0FDeEI7SUFDRCxVQUFVLEVBQUUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDO0lBQzVCLFNBQVMsRUFBRSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUM7SUFDNUIsS0FBSyxFQUFFLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQztJQUN4QixLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDO0lBQ3hCLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUM7SUFDeEIsTUFBTSxFQUFFO01BQ04sS0FBSyxFQUFFO1FBQ0wsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDO1FBQ2pCLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQztPQUNoQjtLQUNGO0dBQ0Y7Q0FDRixDQUFDOztBQ2xDRixJQUFJQyxZQUFVLEdBQUcsd0JBQXdCLENBQUM7Ozs7QUFJMUMsV0FBYyxHQUFHO0VBQ2YsR0FBRyxFQUFFLFVBQVU7RUFDZixHQUFHLEVBQUUsVUFBVTtFQUNmLE1BQU0sRUFBRSxhQUFhO0VBQ3JCLFFBQVEsRUFBRSxlQUFlO0NBQzFCLENBQUM7Ozs7Ozs7Ozs7QUFVRixTQUFTLFVBQVUsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFOzs7RUFHdkMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUN2QixJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO0lBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxHQUFHLE9BQU8sR0FBRyxxQkFBcUIsQ0FBQyxDQUFDOztFQUVoRSxJQUFJLENBQUNBLFlBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxHQUFHLE9BQU8sR0FBRyw0QkFBNEIsQ0FBQyxDQUFDOztFQUV2RSxJQUFJLFVBQVUsRUFBRTtJQUNkLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDOztJQUV2QyxJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO0lBQy9CLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtNQUMzQixLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUU7UUFDbEMsUUFBUSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7S0FDOUMsTUFBTTtNQUNMLFFBQVEsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0tBQ3pDOztJQUVELElBQUksVUFBVSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUM7SUFDdkMsSUFBSSxVQUFVLEVBQUU7TUFDZCxJQUFJLFVBQVUsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUU7UUFDeEMsVUFBVSxHQUFHO1VBQ1gsS0FBSyxFQUFFO1lBQ0wsVUFBVTtZQUNWLEVBQUUsTUFBTSxFQUFFLDhFQUE4RSxFQUFFO1dBQzNGO1NBQ0YsQ0FBQztPQUNIO01BQ0QsVUFBVSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUM1RDtHQUNGOztFQUVELEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUM7OztFQUdwRCxTQUFTLFFBQVEsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRTtJQUMvQyxJQUFJLFNBQVMsQ0FBQztJQUNkLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO01BQ2pDLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNsQixJQUFJLEVBQUUsQ0FBQyxJQUFJLElBQUksUUFBUSxFQUFFO1FBQ3ZCLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDZixNQUFNO09BQ1A7S0FDRjs7SUFFRCxJQUFJLENBQUMsU0FBUyxFQUFFO01BQ2QsU0FBUyxHQUFHLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUM7TUFDMUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUN2Qjs7SUFFRCxJQUFJLElBQUksR0FBRztNQUNULE9BQU8sRUFBRSxPQUFPO01BQ2hCLFVBQVUsRUFBRSxVQUFVO01BQ3RCLE1BQU0sRUFBRSxJQUFJO01BQ1osSUFBSSxFQUFFQyxNQUFjO01BQ3BCLFVBQVUsRUFBRSxVQUFVLENBQUMsVUFBVTtLQUNsQyxDQUFDO0lBQ0YsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUM7R0FDOUI7O0VBRUQsT0FBTyxJQUFJLENBQUM7Q0FDYjs7Ozs7Ozs7O0FBU0QsU0FBUyxVQUFVLENBQUMsT0FBTyxFQUFFOztFQUUzQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztFQUN0QyxPQUFPLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQztDQUN2RTs7Ozs7Ozs7O0FBU0QsU0FBUyxhQUFhLENBQUMsT0FBTyxFQUFFOztFQUU5QixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQ3ZCLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztFQUMvQixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7RUFDMUIsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0VBQzdCLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ2pDLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDM0IsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7TUFDakMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLE9BQU8sRUFBRTtRQUMvQixLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNuQixNQUFNO09BQ1A7S0FDRjtHQUNGO0VBQ0QsT0FBTyxJQUFJLENBQUM7Q0FDYjs7Ozs7Ozs7OztBQVVELFNBQVMsZUFBZSxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUU7RUFDL0MsZUFBZSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7RUFDOUIsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0I7cUNBQ2xCLElBQUksQ0FBQyxPQUFPLENBQUNDLGlCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDOztFQUV4RSxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxPQUFPLElBQUksQ0FBQztFQUMvQixlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7RUFDbEMsSUFBSSxVQUFVO0lBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyx3Q0FBd0MsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDOztJQUV2RixPQUFPLEtBQUssQ0FBQztDQUNoQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNySUQsT0FBYyxHQUFHLEdBQUcsQ0FBQzs7QUFFckIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUdoQyxVQUFRLENBQUM7QUFDbEMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUdpQyxTQUFPLENBQUM7QUFDaEMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0FBQ3BDLEdBQUcsQ0FBQyxTQUFTLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztBQUM1QyxHQUFHLENBQUMsU0FBUyxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7QUFDOUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0FBQ3BDLEdBQUcsQ0FBQyxTQUFTLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztBQUMxQyxHQUFHLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFDcEMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDOztBQUV0QyxHQUFHLENBQUMsU0FBUyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7QUFDdEMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDOztBQUVsQyxHQUFHLENBQUMsU0FBUyxDQUFDLFlBQVksR0FBRzFDLEtBQTBCLENBQUM7O0FBRXhELEdBQUcsQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHMkMsT0FBYSxDQUFDLEdBQUcsQ0FBQztBQUM3QyxHQUFHLENBQUMsU0FBUyxDQUFDLFVBQVUsR0FBR0EsT0FBYSxDQUFDLEdBQUcsQ0FBQztBQUM3QyxHQUFHLENBQUMsU0FBUyxDQUFDLGFBQWEsR0FBR0EsT0FBYSxDQUFDLE1BQU0sQ0FBQztBQUNuRCxHQUFHLENBQUMsU0FBUyxDQUFDLGVBQWUsR0FBR0EsT0FBYSxDQUFDLFFBQVEsQ0FBQzs7O0FBR3ZELEdBQUcsQ0FBQyxlQUFlLEdBQUdwQyxhQUFZLENBQUMsVUFBVSxDQUFDO0FBQzlDLEdBQUcsQ0FBQyxlQUFlLEdBQUdBLGFBQVksQ0FBQyxVQUFVLENBQUM7QUFDOUMsR0FBRyxDQUFDLGVBQWUsR0FBR3FDLElBQWUsQ0FBQzs7QUFFdEMsSUFBSSxjQUFjLEdBQUcsd0NBQXdDLENBQUM7O0FBRTlELElBQUksbUJBQW1CLEdBQUcsRUFBRSxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLENBQUM7QUFDakcsSUFBSSxpQkFBaUIsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDOzs7Ozs7OztBQVF4QyxTQUFTLEdBQUcsQ0FBQyxJQUFJLEVBQUU7RUFDakIsSUFBSSxFQUFFLElBQUksWUFBWSxHQUFHLENBQUMsRUFBRSxPQUFPLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ2pELElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0VBQzFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUNoQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztFQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztFQUNoQixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztFQUNyQixJQUFJLENBQUMsUUFBUSxHQUFHQyxTQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDOztFQUVyQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSUMsS0FBSyxDQUFDO0VBQ3RDLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO0VBQzFCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO0VBQ3hCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxFQUFFLENBQUM7RUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7O0VBRWhDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksSUFBSSxRQUFRLENBQUM7RUFDbEQsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLFVBQVUsRUFBRSxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDO0VBQ3pFLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsR0FBR3BDLHVCQUFlLENBQUM7RUFDbkUsSUFBSSxDQUFDLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7RUFFNUMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO0VBQzFDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUM1QyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUMzQixJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksSUFBSSxRQUFRLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDaEUsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNoRixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUN6Qjs7Ozs7Ozs7Ozs7O0FBWUQsU0FBU0QsVUFBUSxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUU7RUFDcEMsSUFBSSxDQUFDLENBQUM7RUFDTixJQUFJLE9BQU8sWUFBWSxJQUFJLFFBQVEsRUFBRTtJQUNuQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNqQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLEdBQUcsWUFBWSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0dBQzdFLE1BQU07SUFDTCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzlDLENBQUMsR0FBRyxTQUFTLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7R0FDcEQ7O0VBRUQsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ3BCLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0VBQzlDLE9BQU8sS0FBSyxDQUFDO0NBQ2Q7Ozs7Ozs7Ozs7QUFVRCxTQUFTaUMsU0FBTyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUU7RUFDOUIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0VBQzFELE9BQU8sU0FBUyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0NBQ3ZEOzs7Ozs7Ozs7Ozs7QUFZRCxTQUFTLFNBQVMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUU7RUFDdEQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hCLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakcsT0FBTyxJQUFJLENBQUM7R0FDYjtFQUNELElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7RUFDN0IsSUFBSSxFQUFFLEtBQUssU0FBUyxJQUFJLE9BQU8sRUFBRSxJQUFJLFFBQVE7SUFDM0MsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0VBQzlDLEdBQUcsR0FBRzVGLFNBQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0VBQ3JDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQzNFLE9BQU8sSUFBSSxDQUFDO0NBQ2I7Ozs7Ozs7Ozs7OztBQVlELFNBQVMsYUFBYSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFO0VBQ2xELElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7RUFDbEQsT0FBTyxJQUFJLENBQUM7Q0FDYjs7Ozs7Ozs7OztBQVVELFNBQVMsY0FBYyxDQUFDLE1BQU0sRUFBRSxlQUFlLEVBQUU7RUFDL0MsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztFQUM3QixJQUFJLE9BQU8sS0FBSyxTQUFTLElBQUksT0FBTyxPQUFPLElBQUksUUFBUTtJQUNyRCxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7RUFDOUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDakUsSUFBSSxDQUFDLE9BQU8sRUFBRTtJQUNaLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFDOUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbkIsT0FBTyxJQUFJLENBQUM7R0FDYjtFQUNELElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0VBQzNDLElBQUksQ0FBQyxLQUFLLElBQUksZUFBZSxFQUFFO0lBQzdCLElBQUksT0FBTyxHQUFHLHFCQUFxQixHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN4RCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxJQUFJLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUM5RCxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0dBQy9CO0VBQ0QsT0FBTyxLQUFLLENBQUM7Q0FDZDs7O0FBR0QsU0FBUyxXQUFXLENBQUMsSUFBSSxFQUFFO0VBQ3pCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO0VBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLE9BQU8sSUFBSSxJQUFJLFFBQVE7OEJBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSTs4QkFDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUM7Z0NBQzVCLGNBQWM7Z0NBQ2QsU0FBUyxDQUFDO0VBQ3hDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7Q0FDL0I7Ozs7Ozs7OztBQVNELFNBQVMsU0FBUyxDQUFDLE1BQU0sRUFBRTtFQUN6QixJQUFJLFNBQVMsR0FBRyxhQUFhLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0VBQzVDLFFBQVEsT0FBTyxTQUFTO0lBQ3RCLEtBQUssUUFBUSxFQUFFLE9BQU8sU0FBUyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3JFLEtBQUssUUFBUSxFQUFFLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNoRCxLQUFLLFdBQVcsRUFBRSxPQUFPLGtCQUFrQixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztHQUMzRDtDQUNGOzs7QUFHRCxTQUFTLGtCQUFrQixDQUFDLElBQUksRUFBRSxHQUFHLEVBQUU7RUFDckMsSUFBSSxHQUFHLEdBQUdBLFNBQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztFQUN6RCxJQUFJLEdBQUcsRUFBRTtJQUNQLElBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNO1FBQ25CLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSTtRQUNmLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO0lBQ3hCLElBQUksQ0FBQyxHQUFHaUcsU0FBYSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJN0MsVUFBWSxDQUFDO01BQ3RDLEdBQUcsRUFBRSxHQUFHO01BQ1IsUUFBUSxFQUFFLElBQUk7TUFDZCxNQUFNLEVBQUUsTUFBTTtNQUNkLElBQUksRUFBRSxJQUFJO01BQ1YsTUFBTSxFQUFFLE1BQU07TUFDZCxRQUFRLEVBQUUsQ0FBQztLQUNaLENBQUMsQ0FBQztJQUNILE9BQU8sQ0FBQyxDQUFDO0dBQ1Y7Q0FDRjs7O0FBR0QsU0FBUyxhQUFhLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRTtFQUNuQyxNQUFNLEdBQUdwRCxTQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0VBQ3JDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7Q0FDL0U7Ozs7Ozs7Ozs7OztBQVlELFNBQVMsWUFBWSxDQUFDLFlBQVksRUFBRTtFQUNsQyxJQUFJLFlBQVksWUFBWSxNQUFNLEVBQUU7SUFDbEMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDckQsaUJBQWlCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDbEQsT0FBTyxJQUFJLENBQUM7R0FDYjtFQUNELFFBQVEsT0FBTyxZQUFZO0lBQ3pCLEtBQUssV0FBVztNQUNkLGlCQUFpQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7TUFDdkMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztNQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO01BQ3BCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsS0FBSyxRQUFRO01BQ1gsSUFBSSxTQUFTLEdBQUcsYUFBYSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztNQUNsRCxJQUFJLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7TUFDbkQsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO01BQ25DLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztNQUNoQyxPQUFPLElBQUksQ0FBQztJQUNkLEtBQUssUUFBUTtNQUNYLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO01BQ3JDLElBQUksUUFBUSxHQUFHLFNBQVMsR0FBRyxTQUFTLENBQUMsWUFBWSxDQUFDLEdBQUcsWUFBWSxDQUFDO01BQ2xFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO01BQzFCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7TUFDbkMsSUFBSSxFQUFFLEVBQUU7UUFDTixFQUFFLEdBQUdBLFNBQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztPQUN2QjtHQUNKO0VBQ0QsT0FBTyxJQUFJLENBQUM7Q0FDYjs7O0FBR0QsU0FBUyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRTtFQUMvQyxLQUFLLElBQUksTUFBTSxJQUFJLE9BQU8sRUFBRTtJQUMxQixJQUFJLFNBQVMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFO01BQ3JELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztNQUNwQyxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUN4QjtHQUNGO0NBQ0Y7Ozs7QUFJRCxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUU7RUFDakUsSUFBSSxPQUFPLE1BQU0sSUFBSSxRQUFRLElBQUksT0FBTyxNQUFNLElBQUksU0FBUztJQUN6RCxNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7RUFDeEQsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7RUFDckMsSUFBSSxRQUFRLEdBQUcsU0FBUyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUM7RUFDdEQsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7RUFDdkMsSUFBSSxNQUFNLEVBQUUsT0FBTyxNQUFNLENBQUM7O0VBRTFCLGVBQWUsR0FBRyxlQUFlLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEtBQUssS0FBSyxDQUFDOztFQUV4RSxJQUFJLEVBQUUsR0FBR0EsU0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7RUFDbEQsSUFBSSxFQUFFLElBQUksZUFBZSxFQUFFLFdBQVcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7O0VBRWpELElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxLQUFLLEtBQUssSUFBSSxDQUFDLGNBQWMsQ0FBQztFQUMxRSxJQUFJLGFBQWEsQ0FBQztFQUNsQixJQUFJLFlBQVksSUFBSSxFQUFFLGFBQWEsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJQSxTQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwRixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQzs7RUFFcEMsSUFBSSxTQUFTLEdBQUdBLFNBQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQzs7RUFFL0MsSUFBSSxTQUFTLEdBQUcsSUFBSW9ELFVBQVksQ0FBQztJQUMvQixFQUFFLEVBQUUsRUFBRTtJQUNOLE1BQU0sRUFBRSxNQUFNO0lBQ2QsU0FBUyxFQUFFLFNBQVM7SUFDcEIsUUFBUSxFQUFFLFFBQVE7SUFDbEIsSUFBSSxFQUFFLElBQUk7R0FDWCxDQUFDLENBQUM7O0VBRUgsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLGVBQWUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQztFQUNoRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7O0VBRXJDLElBQUksWUFBWSxJQUFJLGFBQWEsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQzs7RUFFckUsT0FBTyxTQUFTLENBQUM7Q0FDbEI7Ozs7QUFJRCxTQUFTLFFBQVEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFO0VBQ2pDLElBQUksU0FBUyxDQUFDLFNBQVMsRUFBRTtJQUN2QixTQUFTLENBQUMsUUFBUSxHQUFHLFlBQVksQ0FBQztJQUNsQyxZQUFZLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7SUFDdkMsWUFBWSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDM0IsWUFBWSxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLFlBQVksQ0FBQztJQUMvQyxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLElBQUk7TUFDbEMsWUFBWSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDN0IsT0FBTyxZQUFZLENBQUM7R0FDckI7RUFDRCxTQUFTLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQzs7RUFFM0IsSUFBSSxXQUFXLENBQUM7RUFDaEIsSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFO0lBQ2xCLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3pCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztHQUM3Qjs7RUFFRCxJQUFJLENBQUMsQ0FBQztFQUNOLElBQUksRUFBRSxDQUFDLEdBQUc2QyxTQUFhLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRTtFQUNsRixNQUFNLENBQUMsRUFBRTtJQUNQLE9BQU8sU0FBUyxDQUFDLFFBQVEsQ0FBQztJQUMxQixNQUFNLENBQUMsQ0FBQztHQUNUO1VBQ087SUFDTixTQUFTLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUM1QixJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUM7R0FDOUM7O0VBRUQsU0FBUyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7RUFDdkIsU0FBUyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0VBQ3hCLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztFQUM1QixTQUFTLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7RUFDeEIsT0FBTyxDQUFDLENBQUM7Ozs7RUFJVCxTQUFTLFlBQVksR0FBRzs7SUFFdEIsSUFBSSxTQUFTLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQztJQUNuQyxJQUFJLE1BQU0sR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM5QyxZQUFZLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7SUFDdkMsT0FBTyxNQUFNLENBQUM7R0FDZjtDQUNGOzs7QUFHRCxTQUFTLFdBQVcsQ0FBQyxJQUFJLEVBQUU7RUFDekIsUUFBUSxJQUFJLENBQUMsUUFBUTtJQUNuQixLQUFLLE1BQU0sRUFBRSxPQUFPLFdBQVcsQ0FBQztJQUNoQyxLQUFLLElBQUksRUFBRSxPQUFPLE1BQU0sQ0FBQztJQUN6QixTQUFTLE9BQU8sT0FBTyxDQUFDO0dBQ3pCO0NBQ0Y7OztBQUdELFNBQVMsTUFBTSxDQUFDLE1BQU0sRUFBRTtFQUN0QixJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ25FLE9BQU8sTUFBTSxDQUFDLEVBQUUsQ0FBQztDQUNsQjs7O0FBR0QsU0FBUyxPQUFPLENBQUMsTUFBTSxFQUFFO0VBQ3ZCLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEUsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDO0NBQ25COzs7QUFHRCxTQUFTLFdBQVcsQ0FBQyxNQUFNLEVBQUU7RUFDM0IsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsRUFBRTtJQUNwRCxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7RUFDckQsT0FBTyxNQUFNLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUM7Q0FDaEM7Ozs7Ozs7Ozs7QUFVRCxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFO0VBQ25DLE1BQU0sR0FBRyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQztFQUMvQixJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sV0FBVyxDQUFDO0VBQ2hDLE9BQU8sR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO0VBQ3hCLElBQUksU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHLElBQUksR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDO0VBQzNFLElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLEtBQUssU0FBUyxHQUFHLE1BQU0sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDOztFQUV2RSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7RUFDZCxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUNsQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsSUFBSSxDQUFDLEVBQUUsSUFBSSxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQztHQUNuRTtFQUNELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7Q0FDekM7Ozs7Ozs7Ozs7QUFVRCxTQUFTLFNBQVMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO0VBQy9CLElBQUksT0FBTyxNQUFNLElBQUksUUFBUSxFQUFFLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztFQUMzRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQztFQUM3QixPQUFPLElBQUksQ0FBQztDQUNiOzs7QUFHRCxTQUFTLG9CQUFvQixDQUFDLElBQUksRUFBRTtFQUNsQyxJQUFJLFdBQVcsQ0FBQztFQUNoQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFO0lBQ3BCLFdBQVcsR0FBRyxVQUEyQixDQUFDO0lBQzFDLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7R0FDeEQ7RUFDRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRSxPQUFPO0VBQ3RDLElBQUksVUFBVSxHQUFHLFVBQTJDLENBQUM7RUFDN0QsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxVQUFVLEdBQUdILElBQWUsQ0FBQyxVQUFVLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztFQUNsRixJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7RUFDckQsSUFBSSxDQUFDLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxHQUFHLGNBQWMsQ0FBQztDQUM5RDs7O0FBR0QsU0FBUyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUU7RUFDL0IsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7RUFDckMsSUFBSSxDQUFDLFdBQVcsRUFBRSxPQUFPO0VBQ3pCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO09BQ3ZELEtBQUssSUFBSSxHQUFHLElBQUksV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQ3pFOzs7QUFHRCxTQUFTLGlCQUFpQixDQUFDLElBQUksRUFBRTtFQUMvQixLQUFLLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFO0lBQ25DLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0dBQzlCO0NBQ0Y7OztBQUdELFNBQVMsa0JBQWtCLENBQUMsSUFBSSxFQUFFO0VBQ2hDLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUU7SUFDcEMsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7R0FDaEM7Q0FDRjs7O0FBR0QsU0FBUyxXQUFXLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRTtFQUM3QixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFDckMsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsR0FBRyxFQUFFLEdBQUcsa0JBQWtCLENBQUMsQ0FBQztDQUN4RTs7O0FBR0QsU0FBUyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUU7RUFDbEMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7RUFDckMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUU7SUFDN0MsT0FBTyxRQUFRLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMxQyxPQUFPLFFBQVEsQ0FBQztDQUNqQjs7O0FBR0QsU0FBUyxTQUFTLENBQUMsSUFBSSxFQUFFO0VBQ3ZCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0VBQy9CLElBQUksTUFBTSxLQUFLLEtBQUssRUFBRTtJQUNwQixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztHQUNwRCxNQUFNO0lBQ0wsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUM7SUFDM0MsSUFBSSxFQUFFLE9BQU8sTUFBTSxJQUFJLFFBQVEsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQztNQUMzRSxNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7SUFDdkUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7R0FDdEI7Q0FDRjs7O0FBR0QsU0FBUyxJQUFJLEdBQUcsRUFBRTs7QUN4ZmxCOztBQUVBLFNBQVMsTUFBTSxHQUFHO0VBQ2hCLE9BQU87SUFDTCxJQUFJLEVBQUUsUUFBUTtJQUNkLFVBQVUsRUFBRTtNQUNWLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUU7TUFDbEMsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFO01BQzdDLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLEVBQUU7TUFDcEUsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsRUFBRTtNQUNwRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO0tBQ3pCO0lBQ0Qsb0JBQW9CLEVBQUUsS0FBSztJQUMzQixJQUFJLEVBQUU7TUFDSixVQUFVLEVBQUU7UUFDVixJQUFJLEVBQUUsUUFBUTtRQUNkLFVBQVUsRUFBRTtVQUNWLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7VUFDeEIsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtVQUMxQixRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO1VBQzVCLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUU7U0FDMUI7UUFDRCxvQkFBb0IsRUFBRSxLQUFLO1FBQzNCLEtBQUssRUFBRTtVQUNMLEVBQUUsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsRUFBRTtVQUM1QyxFQUFFLFFBQVEsRUFBRSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLEVBQUU7U0FDM0M7T0FDRjtNQUNELFVBQVUsRUFBRTtRQUNWLElBQUksRUFBRSxRQUFRO1FBQ2QsVUFBVSxFQUFFO1VBQ1YsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtVQUN4QixFQUFFLEVBQUU7WUFDRixLQUFLLEVBQUU7Y0FDTCxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7Y0FDbEI7Z0JBQ0UsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsVUFBVSxFQUFFO2tCQUNWLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7a0JBQzNCLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7aUJBQzFCO2dCQUNELG9CQUFvQixFQUFFLEtBQUs7ZUFDNUI7YUFDRjtXQUNGO1VBQ0QsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtVQUMzQixLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsRUFBRTtVQUM1RCxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsc0JBQXNCLEVBQUU7U0FDN0M7UUFDRCxvQkFBb0IsRUFBRSxLQUFLO1FBQzNCLEtBQUssRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDO09BQ2pEO01BQ0QsYUFBYSxFQUFFO1FBQ2IsSUFBSSxFQUFFLFFBQVE7UUFDZCxVQUFVLEVBQUU7VUFDVixJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO1VBQ3hCLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUU7VUFDdkQsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtVQUMzQixLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsRUFBRTtVQUM1RCxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsc0JBQXNCLEVBQUU7U0FDN0M7UUFDRCxvQkFBb0IsRUFBRSxLQUFLO1FBQzNCLEtBQUssRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7T0FDekM7TUFDRCxLQUFLLEVBQUU7UUFDTCxLQUFLLEVBQUU7VUFDTCxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUU7VUFDdkIsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFO1VBQ3pCLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFO1VBQzNCLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFO1VBQzNCLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFO1VBQzdCLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFO1VBQzVCLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFO1NBQzVCO09BQ0Y7TUFDRCxNQUFNLEVBQUU7UUFDTixJQUFJLEVBQUUsUUFBUTtRQUNkLFVBQVUsRUFBRTtVQUNWLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxFQUFFO1VBQzFELGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFFO1VBQzVELFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7U0FDL0I7UUFDRCxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUM7UUFDcEIsb0JBQW9CLEVBQUUsS0FBSztPQUM1QjtNQUNELElBQUksRUFBRTtRQUNKLElBQUksRUFBRSxRQUFRO1FBQ2QsVUFBVSxFQUFFO1VBQ1YsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLEVBQUU7VUFDeEQsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUU7U0FDbkQ7UUFDRCxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFDbEIsb0JBQW9CLEVBQUUsS0FBSztPQUM1QjtNQUNELFFBQVEsRUFBRTtRQUNSLElBQUksRUFBRSxRQUFRO1FBQ2QsVUFBVSxFQUFFO1VBQ1YsU0FBUyxFQUFFO1lBQ1QsSUFBSSxFQUFFLFFBQVE7WUFDZCxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUU7WUFDeEMsb0JBQW9CLEVBQUUsS0FBSztZQUMzQixRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUM7V0FDbkI7VUFDRCxNQUFNLEVBQUU7WUFDTixJQUFJLEVBQUUsUUFBUTtZQUNkLFVBQVUsRUFBRTtjQUNWLElBQUksRUFBRTtnQkFDSixLQUFLLEVBQUU7a0JBQ0w7b0JBQ0UsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsVUFBVSxFQUFFO3NCQUNWLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFFO3NCQUNsRCxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO3NCQUMxQixJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO3NCQUN6QixNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO3FCQUM1QjtvQkFDRCxvQkFBb0IsRUFBRSxLQUFLO21CQUM1QjtrQkFDRCxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFFO2tCQUM1QyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7aUJBQ3BCO2VBQ0Y7Y0FDRCxLQUFLLEVBQUU7Z0JBQ0wsS0FBSyxFQUFFO2tCQUNMO29CQUNFLElBQUksRUFBRSxRQUFRO29CQUNkLG9CQUFvQixFQUFFO3NCQUNwQixJQUFJLEVBQUUsUUFBUTtzQkFDZCxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEVBQUU7c0JBQ3pDLG9CQUFvQixFQUFFLEtBQUs7cUJBQzVCO21CQUNGO2tCQUNELEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRTtrQkFDbkIsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRTtpQkFDN0M7ZUFDRjtjQUNELE1BQU0sRUFBRTtnQkFDTixLQUFLLEVBQUU7a0JBQ0wsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRTtrQkFDNUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO2lCQUNwQjtlQUNGO2NBQ0QsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRTtjQUM3QixNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFO2FBQ2xDO1lBQ0Qsb0JBQW9CLEVBQUUsS0FBSztXQUM1QjtVQUNELE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUU7VUFDakMsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtTQUMvQjtRQUNELFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUM7UUFDakMsb0JBQW9CLEVBQUUsS0FBSztPQUM1QjtNQUNELFFBQVEsRUFBRTtRQUNSLElBQUksRUFBRSxRQUFRO1FBQ2QsVUFBVSxFQUFFO1VBQ1YsU0FBUyxFQUFFO1lBQ1QsSUFBSSxFQUFFLFFBQVE7WUFDZCxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUU7WUFDeEMsb0JBQW9CLEVBQUUsS0FBSztZQUMzQixRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUM7V0FDbkI7VUFDRCxNQUFNLEVBQUU7WUFDTixJQUFJLEVBQUUsUUFBUTtZQUNkLFVBQVUsRUFBRTtjQUNWLEtBQUssRUFBRTtnQkFDTCxLQUFLLEVBQUU7a0JBQ0w7b0JBQ0UsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsVUFBVSxFQUFFO3NCQUNWLGVBQWUsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFO3NCQUMzRCxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO3FCQUMxQjtvQkFDRCxvQkFBb0IsRUFBRSxLQUFLO21CQUM1QjtrQkFDRCxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7aUJBQ3BCO2VBQ0Y7Y0FDRCxNQUFNLEVBQUU7Z0JBQ04sS0FBSyxFQUFFO2tCQUNMLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUU7a0JBQzVDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRTtpQkFDcEI7ZUFDRjtjQUNELFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7Y0FDN0IsTUFBTSxFQUFFO2dCQUNOLEtBQUssRUFBRTtrQkFDTDtvQkFDRSxJQUFJLEVBQUUsUUFBUTtvQkFDZCxVQUFVLEVBQUU7c0JBQ1YsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRTtzQkFDL0IsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRTtzQkFDaEMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRTtzQkFDaEMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRTtzQkFDakMsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRTtzQkFDL0IsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRTtxQkFDbEM7b0JBQ0Qsb0JBQW9CLEVBQUUsS0FBSzttQkFDNUI7a0JBQ0QsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO2lCQUNwQjtlQUNGO2FBQ0Y7WUFDRCxvQkFBb0IsRUFBRSxLQUFLO1dBQzVCO1VBQ0QsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRTtVQUNqQyxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO1NBQy9CO1FBQ0QsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQztRQUNqQyxvQkFBb0IsRUFBRSxLQUFLO09BQzVCO01BQ0QsVUFBVSxFQUFFO1FBQ1YsSUFBSSxFQUFFLFFBQVE7UUFDZCxVQUFVLEVBQUU7VUFDVixTQUFTLEVBQUU7WUFDVCxJQUFJLEVBQUUsUUFBUTtZQUNkLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRTtZQUMxQyxvQkFBb0IsRUFBRSxLQUFLO1lBQzNCLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQztXQUNyQjtVQUNELE1BQU0sRUFBRTtZQUNOLElBQUksRUFBRSxRQUFRO1lBQ2QsVUFBVSxFQUFFO2NBQ1YsS0FBSyxFQUFFO2dCQUNMLEtBQUssRUFBRTtrQkFDTDtvQkFDRSxJQUFJLEVBQUUsUUFBUTtvQkFDZCxVQUFVLEVBQUU7c0JBQ1YsZUFBZSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUU7cUJBQzVEO29CQUNELG9CQUFvQixFQUFFO3NCQUNwQixJQUFJLEVBQUUsUUFBUTtzQkFDZCxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEVBQUU7c0JBQ3pDLG9CQUFvQixFQUFFLEtBQUs7cUJBQzVCO21CQUNGO2tCQUNELEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRTtrQkFDbkIsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRTtpQkFDN0M7ZUFDRjtjQUNELE1BQU0sRUFBRTtnQkFDTixLQUFLLEVBQUU7a0JBQ0wsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRTtrQkFDNUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO2lCQUNwQjtlQUNGO2NBQ0QsTUFBTSxFQUFFO2dCQUNOLEtBQUssRUFBRTtrQkFDTDtvQkFDRSxJQUFJLEVBQUUsUUFBUTtvQkFDZCxVQUFVLEVBQUU7c0JBQ1YsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRTtzQkFDbEMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRTtzQkFDaEMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRTtzQkFDakMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRTtzQkFDbEMsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRTtzQkFDbkMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRTtxQkFDbEM7b0JBQ0Qsb0JBQW9CLEVBQUUsS0FBSzttQkFDNUI7a0JBQ0QsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO2lCQUNwQjtlQUNGO2FBQ0Y7WUFDRCxvQkFBb0IsRUFBRSxLQUFLO1dBQzVCO1VBQ0QsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRTtVQUNqQyxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO1NBQy9CO1FBQ0QsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQztRQUNqQyxvQkFBb0IsRUFBRSxLQUFLO09BQzVCO01BQ0QsU0FBUyxFQUFFO1FBQ1QsSUFBSSxFQUFFLFFBQVE7UUFDZCxVQUFVLEVBQUU7VUFDVixTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO1VBQzdCLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUU7U0FDbEM7UUFDRCxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDO1FBQ2pDLG9CQUFvQixFQUFFLEtBQUs7T0FDNUI7TUFDRCxRQUFRLEVBQUU7UUFDUixJQUFJLEVBQUUsUUFBUTtRQUNkLFVBQVUsRUFBRTtVQUNWLFNBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7VUFDNUIsTUFBTSxFQUFFO1lBQ04sSUFBSSxFQUFFLFFBQVE7WUFDZCxVQUFVLEVBQUU7Y0FDVixNQUFNLEVBQUU7Z0JBQ04sS0FBSyxFQUFFO2tCQUNMLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUU7a0JBQzVDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRTtpQkFDcEI7ZUFDRjtjQUNELG9CQUFvQixFQUFFLEtBQUs7YUFDNUI7V0FDRjtVQUNELE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUU7U0FDbEM7UUFDRCxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDO1FBQ2pDLG9CQUFvQixFQUFFLEtBQUs7T0FDNUI7TUFDRCxNQUFNLEVBQUU7UUFDTixJQUFJLEVBQUUsUUFBUTtRQUNkLFVBQVUsRUFBRTtVQUNWLFFBQVEsRUFBRTtZQUNSLEtBQUssRUFBRTtjQUNMLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFO2NBQzlCO2dCQUNFLElBQUksRUFBRSxRQUFRO2dCQUNkLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFO2VBQ3REO2FBQ0Y7V0FDRjtVQUNELEtBQUssRUFBRTtZQUNMLEtBQUssRUFBRTtjQUNMLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtjQUNsQixFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUU7YUFDOUQ7V0FDRjtVQUNELFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7U0FDL0I7T0FDRjtNQUNELE1BQU0sRUFBRTtRQUNOLEtBQUssRUFBRTtVQUNMO1lBQ0UsSUFBSSxFQUFFLFFBQVE7WUFDZCxVQUFVLEVBQUU7Y0FDVixNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFO2NBQzVELEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUU7Y0FDM0QsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRTthQUMzRDtZQUNELG9CQUFvQixFQUFFLEtBQUs7V0FDNUI7VUFDRCxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7U0FDcEI7T0FDRjtLQUNGO0dBQ0YsQ0FBQztDQUNIOztBQUVELFNBQVMsV0FBVyxDQUFDLElBQUksRUFBRTtFQUN6QixNQUFNSSxLQUFHLEdBQUcsSUFBSUMsR0FBRyxFQUFFLENBQUM7RUFDdEIsTUFBTSxRQUFRLEdBQUdELEtBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQzs7RUFFdkMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQzdCLElBQUksQ0FBQyxLQUFLLEVBQUU7SUFDVixNQUFNLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7R0FDbEQ7RUFDRCxPQUFPLElBQUksQ0FBQztDQUNiOztBQy9WTSxJQUFJLE9BQU8sR0FBRyxTQUFTLENBQUM7QUFDL0IsQUFBTyxJQUFJLE9BQU8sR0FBRyxTQUFTLENBQUM7QUFDL0IsQUFBTyxJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUM7QUFDakMsQUFBTyxJQUFJLFVBQVUsR0FBRyxZQUFZLENBQUM7O0FBRXJDLEFBQU8sSUFBSSxlQUFlLEdBQUcsaUJBQWlCLENBQUM7QUFDL0MsQUFBTyxJQUFJLGdCQUFnQixHQUFHLGtCQUFrQixDQUFDO0FBQ2pELEFBQU8sSUFBSSxjQUFjLEdBQUcsZ0JBQWdCLENBQUM7QUFDN0MsQUFBTyxJQUFJLHFCQUFxQixHQUFHLHVCQUF1QixDQUFDO0FBQzNELEFBQU8sSUFBSSxpQkFBaUIsR0FBRyxtQkFBbUIsQ0FBQztBQUNuRCxBQUFPLElBQUksZ0JBQWdCLEdBQUcsa0JBQWtCLENBQUM7QUFDakQsQUFBTyxJQUFJLGdCQUFnQixHQUFHLGtCQUFrQixDQUFDO0FBQ2pELEFBQU8sSUFBSSxlQUFlLEdBQUcsaUJBQWlCLENBQUM7O0FBRS9DLEFBQWUsU0FBUyxPQUFPLENBQUMsSUFBSSxFQUFFO0VBQ3BDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0NBQ2xCOztBQUVELE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLFNBQVMsT0FBTyxFQUFFO0VBQzFDLElBQUksSUFBSSxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7RUFFekIsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7O0VBRTVCLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7SUFDaEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0dBQ25DO0NBQ0YsQ0FBQzs7QUFFRixTQUFTLFFBQVEsQ0FBQyxJQUFJLEVBQUU7RUFDdEIsUUFBUSxJQUFJLENBQUMsSUFBSTtJQUNmLEtBQUssZUFBZTtNQUNsQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsS0FBSyxnQkFBZ0IsQ0FBQztJQUN0QixLQUFLLGlCQUFpQjtNQUNwQixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsS0FBSyxjQUFjO01BQ2pCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7TUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDMUIsT0FBTyxJQUFJLENBQUM7SUFDZCxLQUFLLHFCQUFxQjtNQUN4QixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN0RCxLQUFLLGdCQUFnQjtNQUNuQixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdEMsS0FBSyxnQkFBZ0I7TUFDbkIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLEtBQUssUUFBUTtNQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxLQUFLLGVBQWU7TUFDbEIsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN6QixLQUFLLFVBQVUsQ0FBQztJQUNoQixLQUFLLE9BQU8sQ0FBQztJQUNiLEtBQUssT0FBTyxDQUFDO0lBQ2I7TUFDRSxPQUFPLEVBQUUsQ0FBQztHQUNiO0NBQ0Y7O0FDdkREOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1DQSxBQUNBO0FBQ0EsSUFBSSxTQUFTO0lBQ1QsTUFBTTtJQUNOLEtBQUs7SUFDTCxNQUFNO0lBQ04sU0FBUyxDQUFDOztBQUVkLElBQUksbUJBQW1CLEdBQUcsQ0FBQztJQUN2QixRQUFRLEdBQUcsQ0FBQztJQUNaLGVBQWUsR0FBRyxDQUFDO0lBQ25CLFlBQVksR0FBRyxDQUFDO0lBQ2hCLGdCQUFnQixHQUFHLENBQUM7SUFDcEIsbUJBQW1CLEdBQUcsQ0FBQztJQUN2QixlQUFlLEdBQUcsQ0FBQztJQUNuQixrQkFBa0IsR0FBRyxDQUFDO0lBQ3RCLHNCQUFzQixHQUFHLENBQUMsQ0FBQzs7QUFFL0IsU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUNmLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLFNBQVMsQ0FBQztBQUMzQyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQzlCLFNBQVMsQ0FBQyxlQUFlLENBQUMsR0FBRyxZQUFZLENBQUM7QUFDMUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxHQUFHLFNBQVMsQ0FBQztBQUNwQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDckMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsU0FBUyxDQUFDO0FBQzNDLFNBQVMsQ0FBQyxlQUFlLENBQUMsR0FBRyxZQUFZLENBQUM7QUFDMUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3pDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLG1CQUFtQixDQUFDOztBQUV4RCxJQUFJLHFCQUFxQixHQUFHLGlCQUFpQjtJQUN6QyxzQkFBc0IsR0FBRyxrQkFBa0I7SUFDM0Msb0JBQW9CLEdBQUcsZ0JBQWdCO0lBQ3ZDLDJCQUEyQixHQUFHLHVCQUF1QjtJQUNyRCxnQkFBZ0IsR0FBRyxZQUFZO0lBQy9CLGFBQWEsR0FBRyxTQUFTO0lBQ3pCLHVCQUF1QixHQUFHLG1CQUFtQjtJQUM3QyxzQkFBc0IsR0FBRyxrQkFBa0I7SUFDM0Msc0JBQXNCLEdBQUcsa0JBQWtCO0lBQzNDLGNBQWMsR0FBRyxVQUFVO0lBQzNCLHFCQUFxQixHQUFHLGlCQUFpQixDQUFDOzs7QUFHOUMsSUFBSSxzQkFBc0IsR0FBRyxxQkFBcUI7SUFDOUMsdUJBQXVCLEdBQUcsbUJBQW1CO0lBQzdDLHVCQUF1QixHQUFHLG1CQUFtQjtJQUM3QywyQkFBMkIsR0FBRyx1QkFBdUI7SUFDckQseUJBQXlCLEdBQUcsMEJBQTBCO0lBQ3RELG9CQUFvQixHQUFHLHlCQUF5QjtJQUNoRCxvQkFBb0IsR0FBRyw0QkFBNEI7SUFDbkQseUJBQXlCLEdBQUcsdUNBQXVDO0lBQ25FLHlCQUF5QixHQUFHLGdEQUFnRDtJQUM1RSw4QkFBOEIsR0FBRyxzRUFBc0UsQ0FBQzs7QUFFNUcsSUFBSSxPQUFPLEdBQUcsU0FBUztJQUNuQixRQUFRLEdBQUcsV0FBVyxDQUFDOzs7QUFHM0IsSUFBSSw0QkFBNEIsR0FBRyxJQUFJLE1BQU0sQ0FBQyxzekpBQXN6SixDQUFDOztJQUVqMkosMkJBQTJCLEdBQUcsSUFBSSxNQUFNLENBQUMsbXVMQUFtdUwsQ0FBQyxDQUFDOzs7Ozs7O0FBT2x4TCxTQUFTLE1BQU0sQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFOztFQUVsQyxJQUFJLENBQUMsU0FBUyxFQUFFO0lBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLENBQUM7R0FDdkM7Q0FDRjs7QUFFRCxTQUFTLGNBQWMsQ0FBQyxFQUFFLEVBQUU7RUFDMUIsUUFBUSxFQUFFLElBQUksSUFBSSxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUU7Q0FDbkM7O0FBRUQsU0FBUyxVQUFVLENBQUMsRUFBRSxFQUFFO0VBQ3RCLE9BQU8sd0JBQXdCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUNsRDs7QUFFRCxTQUFTLFlBQVksQ0FBQyxFQUFFLEVBQUU7RUFDeEIsT0FBTyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUNwQzs7OztBQUlELFNBQVMsWUFBWSxDQUFDLEVBQUUsRUFBRTtFQUN4QixPQUFPLENBQUMsRUFBRSxLQUFLLElBQUksTUFBTSxFQUFFLEtBQUssSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssSUFBSSxDQUFDO0tBQ3JGLEVBQUUsSUFBSSxNQUFNLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQy9LOzs7O0FBSUQsU0FBUyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUU7RUFDNUIsT0FBTyxDQUFDLEVBQUUsS0FBSyxJQUFJLE1BQU0sRUFBRSxLQUFLLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssTUFBTSxDQUFDLENBQUM7Q0FDN0U7Ozs7QUFJRCxTQUFTLGlCQUFpQixDQUFDLEVBQUUsRUFBRTtFQUM3QixPQUFPLENBQUMsRUFBRSxLQUFLLElBQUksTUFBTSxFQUFFLEtBQUssSUFBSSxDQUFDO0tBQ2xDLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQztLQUN6QixFQUFFLElBQUksSUFBSSxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUM7S0FDekIsRUFBRSxLQUFLLElBQUksQ0FBQztLQUNaLENBQUMsRUFBRSxJQUFJLElBQUksS0FBSyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDaEY7O0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUU7RUFDNUIsT0FBTyxDQUFDLEVBQUUsS0FBSyxJQUFJLE1BQU0sRUFBRSxLQUFLLElBQUksQ0FBQztLQUNsQyxFQUFFLElBQUksSUFBSSxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUM7S0FDekIsRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDO0tBQ3pCLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQztLQUN6QixFQUFFLEtBQUssSUFBSSxDQUFDO0tBQ1osQ0FBQyxFQUFFLElBQUksSUFBSSxLQUFLLDJCQUEyQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMvRTs7OztBQUlELElBQUksUUFBUSxHQUFHO0VBQ2IsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQ3RCLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7RUFDM0MsTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0VBQzFELE9BQU8sQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7RUFDdEYsUUFBUSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztFQUM5RixTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0VBQy9ELFVBQVUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztFQUN4QyxXQUFXLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0VBQzVCLFlBQVksQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7Q0FDL0IsQ0FBQzs7QUFFRixTQUFTLFdBQVcsR0FBRztFQUNyQixJQUFJLEVBQUUsQ0FBQzs7RUFFUCxPQUFPLEtBQUssR0FBRyxNQUFNLEVBQUU7SUFDckIsRUFBRSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7O0lBRTlCLElB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QUUsTUFBTSxFQUFFLEdBQUcsRUFBRTtNQUMvQyxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRTtNQUMzQyxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRTtNQUMvQyxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRTtNQUNoRCxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRTtNQUM1QyxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRTtNQUMvQyxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRTtNQUNoRCxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRTtNQUM1QyxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRTtNQUNoRCxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRTtLQUNsRDtJQUNELE9BQU8sRUFBRTtNQUNQLENBQUMsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUU7TUFDbkIsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRTtNQUNuQyxDQUFDLFNBQVMs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TUFBUyxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7RUFDdEQsTUFBTSxPQUFPLEdBQUdBLE1BQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0VBQ3RELElBQUksT0FBTyxLQUFLLEdBQUcsRUFBRTtJQUNuQixNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkUsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUVuRSxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDNUMsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3RELE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3RELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDOztJQUUzRCxPQUFPLENBQUMsSUFBSTtNQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNYLE9BQU8sQ0FBQyxLQUFLLElBQUksR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO09BQzVCO01BQ0Q7UUFDRSxr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QUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO09BQ2pFLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFOztRQUVsQyxNQUFNLENBQUMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUQsSUFBSSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO09BQ2xFOztNQUVELElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTs7UUFFM0IsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdELElBQUksR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7T0FDcEUsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7O1FBRWxDLE1BQU0sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3RCxJQUFJLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDOztPQUVyRTs7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RyxPQUFPLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQztFQUM1QyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQztFQUMxQyxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsT0FBTyxJQUFJLFNBQVMsQ0FBQzs7RUFFbEQsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLEtBQUssSUFBSSxTQUFTLENBQUM7RUFDaEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUM7RUFDekMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7RUFDdkMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUM7RUFDNUMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUM7RUFDMUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUM7RUFDOUIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7RUFDekIsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLE9BQU8sSUFBSSxRQUFRLENBQUM7RUFDL0MsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLEtBQUssSUFBSSxRQUFRLENBQUM7RUFDN0MsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7RUFDbkcsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7RUFDbkcsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFB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QVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztNQUN4RSxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksS0FBSztRQUMxRCxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7T0FDbEMsRUFBRSxFQUFFLENBQUMsQ0FBQztNQUNQLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJO1FBQ3BCLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUU7VUFDMUIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7VUFDckQsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUU7WUFDOUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7V0FDL0MsQ0FBQztTQUNILE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtVQUM1QixZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7WUFDckIsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7V0FDM0MsQ0FBQztTQUNILE1BQU07VUFDTCxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRTtZQUN0QyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztXQUMzQyxDQUFDO1NBQ0g7T0FDRixDQUFDLENBQUM7Ozs7O01BS0gsTUFBTSxPQUFPLEdBQUcscUJBQXFCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzs7TUFFL0QsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQzs7TUFFM0QsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUk7UUFDcEIsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtVQUNyQixTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLEVBQUU7WUFDckMsT0FBTyxVQUFVLENBQUMseUJBQXlCLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztXQUNwRSxDQUFDLENBQUM7U0FDSixNQUFNLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUU7VUFDakMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxFQUFFO1lBQ3JDLE9BQU8sVUFBVSxDQUFDLHlCQUF5QixDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7V0FDcEUsQ0FBQyxDQUFDO1NBQ0osTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFO1VBQzVCLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1lBQ2xDLE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLHlCQUF5QjtjQUMzRCxDQUFDO2NBQ0QsU0FBUztjQUNULElBQUk7YUFDTCxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ0wsT0FBTyxTQUFTLENBQUMsRUFBRTtjQUNqQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2hELENBQUM7V0FDSCxDQUFDLENBQUM7U0FDSixNQUFNLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUU7VUFDN0IsU0FBUyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSTtZQUN6QyxPQUFPLFVBQVUsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1dBQ3BFLENBQUMsQ0FBQztTQUNKO09BQ0YsQ0FBQyxDQUFDOzs7TUFHSCxTQUFTO1NBQ04sUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1NBQ3ZDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztTQUNqQyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQ1osR0FBRyxFQUFFO1NBQ0wsSUFBSSxDQUFDLE1BQU07VUFDVixLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7VUFDaEQsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDakMsQ0FBQyxDQUFDOzs7O0tBSU4sTUFBTTs7TUFFTCxJQUFJLFNBQVMsQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDLEtBQUssRUFBRTtRQUN6QyxJQUFJLFVBQVUsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDO1FBQy9CLElBQUksZUFBZSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRTtVQUN0QyxNQUFNLEtBQUssR0FBR0EsTUFBUztZQUNyQixPQUFPLEdBQUcsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1dBQ3JFLENBQUM7VUFDRixVQUFVLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7VUFDbEQsTUFBTSxVQUFVO1lBQ2QsU0FBUyxDQUFDLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO2dCQUNoRCxhQUFhO2dCQUNiLElBQUksQ0FBQyxRQUFRO2dCQUNiLElBQUksQ0FBQyxZQUFZO2dCQUNqQixJQUFJLENBQUMsTUFBTTtnQkFDWCxPQUFPO2dCQUNQLE9BQU87ZUFDUjtnQkFDQyxPQUFPLENBQUM7VUFDZCxNQUFNLFFBQVEsR0FBR2dCLEtBQVEsRUFBRSxDQUFDO1VBQzVCLElBQUksUUFBUTtjQUNSLFNBQVMsQ0FBQyxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztrQkFDaEQsSUFBSSxDQUFDLFlBQVk7a0JBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUM7O1VBRXRCLElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxLQUFLLElBQUksUUFBUSxFQUFFO1lBQ3BDLFVBQVUsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM1QyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFO2NBQzFCLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ3ZCLENBQUMsQ0FBQztZQUNILFVBQVUsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO2NBQzFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQzthQUN6QixDQUFDO1dBQ0gsTUFBTTtZQUNMLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUU7Y0FDMUIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDdkIsQ0FBQyxDQUFDO1dBQ0o7O1VBRUQsSUFBSTtZQUNGLFVBQVU7WUFDVixVQUFVO1lBQ1YsU0FBUyxDQUFDLE9BQU87WUFDakI7Y0FDRSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJO2NBQzdCLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUk7YUFDMUI7WUFDRCxPQUFPO1lBQ1AsUUFBUTtXQUNULENBQUM7O1VBRUYsTUFBTTtZQUNKLFVBQVU7WUFDVixVQUFVO1lBQ1YsU0FBUyxDQUFDLE9BQU87WUFDakI7Y0FDRSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNO2NBQy9CLEtBQUssRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVk7YUFDcEM7O1lBRUQsT0FBTztZQUNQLFFBQVE7WUFDUixLQUFLO1lBQ0wsS0FBSztXQUNOLENBQUM7U0FDSCxNQUFNO1VBQ0wsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNO1lBQ2pCLE9BQU8sRUFBRSxDQUFDO1dBQ1gsQ0FBQyxDQUFDO1NBQ0o7O1FBRUQsSUFBSSxlQUFlLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1VBQ3BDLE1BQU0sUUFBUSxHQUFHQSxLQUFRLEVBQUUsQ0FBQztVQUM1QixJQUFJLFVBQVUsR0FBRyxTQUFTLENBQUMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFHLE9BQU8sQ0FBQztVQUNySyxJQUFJLFFBQVEsR0FBRyxDQUFDLFNBQVMsQ0FBQyxPQUFPO2NBQzdCLEVBQUU7Y0FDRixDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO2dCQUNqQyxJQUFJLENBQUMsWUFBWTtnQkFDakIsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1VBQ3hCLE1BQU0sS0FBSyxHQUFHaEIsTUFBUztZQUNyQixPQUFPLEdBQUcsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1dBQ25FLENBQUM7VUFDRixVQUFVLEdBQUcsS0FBSzthQUNmLFNBQVMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO2FBQzVCLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDZixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7O1VBRWxCLGVBQWU7WUFDYixVQUFVLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDNUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7WUFDM0IsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRTtZQUNwRCxPQUFPLENBQUMsT0FBTztZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWTtXQUMzQixDQUFDO1VBQ0YsVUFBVSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1VBQ2hELFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDMUIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7V0FDdkIsQ0FBQyxDQUFDO1VBQ0gsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLEtBQUssSUFBSSxRQUFRLEVBQUU7WUFDcEMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO2NBQy9DLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQzthQUN2QixDQUFDO1dBQ0g7O1VBRUQsS0FBSyxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDOztVQUUvQyxNQUFNO1lBQ0osVUFBVTtZQUNWLFVBQVU7WUFDVixTQUFTLENBQUMsS0FBSztZQUNmO2NBQ0UsT0FBTyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWTtjQUNuQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNO2FBQzVCO1lBQ0QsT0FBTztZQUNQLFFBQVE7WUFDUixJQUFJO1lBQ0osSUFBSTtXQUNMLENBQUM7U0FDSCxNQUFNO1VBQ0wsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNO1lBQ25CLE9BQU8sRUFBRSxDQUFDO1dBQ1gsQ0FBQyxDQUFDO1VBQ0gsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNO1lBQ2xCLE9BQU8sRUFBRSxDQUFDO1dBQ1gsQ0FBQyxDQUFDO1NBQ0o7T0FDRixNQUFNO1FBQ0wsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM1QyxNQUFNLFFBQVEsR0FBR2dCLEtBQVEsRUFBRSxDQUFDO1FBQzVCLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUU7VUFDekIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDdkIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLEtBQUssSUFBSSxRQUFRLEVBQUU7OztVQUdwQyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN6QixTQUFTLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7V0FDM0M7O1VBRUQsU0FBUyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUs7O1lBRWxELE9BQU8sT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztXQUN0QixDQUFDLENBQUM7U0FDSjs7O1FBR0QsS0FBSyxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7OztRQUdwQyxJQUFJO1VBQ0YsT0FBTztVQUNQLFNBQVM7VUFDVCxRQUFRO1VBQ1I7WUFDRSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJO1lBQzdCLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUk7V0FDMUI7VUFDRCxPQUFPO1VBQ1AsUUFBUTtTQUNULENBQUM7O1FBRUYsTUFBTTtVQUNKLE9BQU87VUFDUCxTQUFTO1VBQ1QsUUFBUTtVQUNSO1lBQ0UsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTTtZQUMvQixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNO1dBQzVCO1VBQ0QsT0FBTztVQUNQLFFBQVE7U0FDVCxDQUFDO09BQ0g7S0FDRjtJQUNELFNBQVMsS0FBSztNQUNaLE9BQU87TUFDUCxTQUFTO01BQ1QsUUFBUTtNQUNSLGFBQWEsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUs7TUFDckMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSztNQUM1Qjs7TUFFQSxJQUFJLE1BQU0sR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO01BQy9ELGVBQWU7UUFDYixNQUFNO1FBQ04sVUFBVSxDQUFDLFFBQVEsQ0FBQzs7UUFFcEIsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRTtRQUNwRCxPQUFPLENBQUMsT0FBTztRQUNmO1VBQ0UsT0FBTyxFQUFFLGFBQWE7VUFDdEIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1NBQ2hFO09BQ0YsQ0FBQzs7O01BR0YsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtRQUM3QixNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxPQUFPLENBQUMsQ0FBQztPQUNoRTtNQUNELElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7O1FBRTVCLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN4QixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7O1FBRW5DLGVBQWU7VUFDYixNQUFNO1VBQ04sVUFBVSxDQUFDLFFBQVEsQ0FBQztVQUNwQixNQUFNLENBQUMsS0FBSztVQUNaLE9BQU8sQ0FBQyxLQUFLO1VBQ2I7WUFDRSxPQUFPLEVBQUU7Y0FDUCxPQUFPLEVBQUUsYUFBYTtjQUN0QixTQUFTLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7YUFDaEU7WUFDRCxLQUFLLEVBQUUsTUFBTTtXQUNkO1NBQ0YsQ0FBQzs7UUFFRixNQUFNO1dBQ0gsUUFBUTtZQUNQLENBQUMsQ0FBQyxFQUFFLENBQUM7Y0FDSCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUTtXQUM5RDtXQUNBLEtBQUs7WUFDSixDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUs7V0FDbkU7V0FDQSxJQUFJLENBQUMsTUFBTSxDQUFDO1dBQ1osR0FBRyxFQUFFO1dBQ0wsSUFBSSxDQUFDLE1BQU07WUFDVixJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztXQUNuQyxDQUFDLENBQUM7T0FDTixNQUFNO1FBQ0wsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNO1VBQ2xCLE9BQU8sRUFBRSxDQUFDO1NBQ1gsQ0FBQyxDQUFDO09BQ0o7S0FDRjtJQUNELFNBQVMsSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFOzs7TUFHckUsSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDOztNQUU3QixJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO1FBQzVCLEtBQUssR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxDQUFDO09BQzlEO01BQ0QsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTs7UUFFM0IsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDO1FBQzFCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQzs7UUFFakMsZUFBZTtVQUNiLEtBQUs7VUFDTCxVQUFVLENBQUMsUUFBUSxDQUFDO1VBQ3BCLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRTtZQUN4QixPQUFPLEVBQUUsTUFBTSxDQUFDLEtBQUs7WUFDckIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxPQUFPO1dBQzFCLENBQUM7VUFDRixPQUFPO1VBQ1AsTUFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSTtVQUM1QixRQUFRO1NBQ1QsQ0FBQzs7UUFFRixLQUFLO1dBQ0YsUUFBUTtZQUNQLENBQUMsQ0FBQyxFQUFFLENBQUM7Y0FDSCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUTtXQUM5RDtXQUNBLEtBQUs7WUFDSixDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUs7V0FDbkU7V0FDQSxJQUFJLENBQUMsTUFBTSxDQUFDO1dBQ1osTUFBTSxFQUFFO1dBQ1IsR0FBRyxFQUFFO1dBQ0wsSUFBSSxDQUFDLFdBQVc7WUFDZixJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztXQUNsQyxDQUFDLENBQUM7O09BRU4sTUFBTTtRQUNMLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTTtVQUNqQixPQUFPLEVBQUUsQ0FBQztTQUNYLENBQUMsQ0FBQztPQUNKO0tBQ0Y7SUFDRCxTQUFTLE1BQU07TUFDYixPQUFPO01BQ1AsU0FBUztNQUNULFFBQVE7TUFDUixPQUFPO01BQ1AsT0FBTztNQUNQLFFBQVE7TUFDUixjQUFjLEdBQUcsSUFBSTtNQUNyQixZQUFZLEdBQUcsSUFBSTtNQUNuQjtNQUNBLElBQUksT0FBTyxHQUFHLFlBQVk7VUFDdEIsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxRQUFRLENBQUM7VUFDdEQsU0FBUyxDQUFDO01BQ2QsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLEtBQUssSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUN4RCxPQUFPLEdBQUcsU0FBUyxDQUFDO09BQ3JCOztNQUVELElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDN0IsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDO1FBQzFCLE9BQU8sR0FBRyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7O1FBRS9CLGVBQWU7VUFDYixPQUFPO1VBQ1AsVUFBVSxDQUFDLFFBQVEsQ0FBQztVQUNwQixNQUFNO1VBQ04sT0FBTztVQUNQLE9BQU87VUFDUCxRQUFRO1NBQ1QsQ0FBQztRQUNGLE9BQU87V0FDSixRQUFRO1lBQ1AsQ0FBQyxDQUFDLEVBQUUsQ0FBQztjQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRO1dBQzlEO1dBQ0EsS0FBSztZQUNKLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSztXQUNuRTtXQUNBLElBQUksQ0FBQyxNQUFNLENBQUM7V0FDWixHQUFHLEVBQUU7V0FDTCxJQUFJLENBQUMsTUFBTTtZQUNWLElBQUksY0FBYyxFQUFFO2NBQ2xCLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3BDO1dBQ0YsQ0FBQyxDQUFDO09BQ04sTUFBTSxJQUFJLGNBQWMsRUFBRTtRQUN6QixJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztPQUNwQztLQUNGO0dBQ0YsQ0FBQyxDQUFDO0VBQ0gsU0FBUyxlQUFlLENBQUMsUUFBUSxFQUFFO0lBQ2pDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztHQUMvQjtDQUNGO0FBQ0QsU0FBUyxTQUFTLEdBQUc7RUFDbkIsTUFBTSxnQkFBZ0IsR0FBRztJQUN2QixNQUFNLEVBQUUsS0FBSztJQUNiLEtBQUssRUFBRSxLQUFLO0lBQ1osSUFBSSxFQUFFLEtBQUs7R0FDWixDQUFDOztFQUVGLE9BQU8sU0FBUyxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRTtJQUMvQixJQUFJLEtBQUssS0FBSyxLQUFLLEVBQUU7TUFDbkIsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLGdCQUFnQixDQUFDLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0tBQ2pGLE1BQU07TUFDTCxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUM7S0FDaEM7SUFDRDtNQUNFLGdCQUFnQixDQUFDLE1BQU07TUFDdkIsZ0JBQWdCLENBQUMsS0FBSztNQUN0QixnQkFBZ0IsQ0FBQyxJQUFJO01BQ3JCO01BQ0EsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ1Y7R0FDRixDQUFDO0NBQ0g7OztBQUdELFNBQVMsT0FBTyxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFO0VBQzlDLE9BQU8sV0FBVztLQUNmLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDO0tBQ25CLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN0RTtBQUNELFNBQVMsYUFBYSxDQUFDLFFBQVEsQ0FBQztFQUM5QixRQUFRLFFBQVE7RUFDaEIsS0FBSyxNQUFNLENBQUM7RUFDWixLQUFLLFFBQVE7SUFDWCxPQUFPLE1BQU0sQ0FBQztFQUNoQixLQUFLLE1BQU07SUFDVCxPQUFPLE1BQU0sQ0FBQztFQUNoQixLQUFLLE1BQU07SUFDVCxPQUFPLE1BQU0sQ0FBQztBQUNsQixBQUNBO0dBQ0c7Q0FDRjs7QUN4cUJELFNBQVMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7RUFDckQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLGNBQWMsS0FBSztJQUN4QyxPQUFPLENBQUMsQ0FBQyxVQUFVO01BQ2pCLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLENBQUM7UUFDaEMsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssVUFBVTtVQUN4QyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7VUFDekIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7R0FDN0QsQ0FBQyxDQUFDLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSztJQUMzQixPQUFPLENBQUMsQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztHQUN0RSxDQUFDO0VBQ0YsTUFBTSxVQUFVLEdBQUc7SUFDakIsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNwQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ3BDLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUM7R0FDdkMsQ0FBQztFQUNGLE1BQU0sTUFBTSxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztFQUM3RSxNQUFNLDJCQUEyQixHQUFHO0lBQ2xDLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMvQixJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDL0IsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0dBQ2xDLENBQUM7Ozs7O0VBS0YsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDO0VBQzFCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0VBQ2hDLE1BQU0sZ0JBQWdCLEdBQUc7SUFDdkIsTUFBTSxFQUFFLEtBQUs7SUFDYixLQUFLLEVBQUUsS0FBSztJQUNaLElBQUksRUFBRSxLQUFLO0dBQ1osQ0FBQzs7RUFFRixTQUFTLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRTtJQUM3QixJQUFJLEtBQUssS0FBSyxLQUFLLEVBQUU7TUFDbkIsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLGdCQUFnQixDQUFDLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0tBQ2pGLE1BQU07TUFDTCxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUM7S0FDaEM7SUFDRDtNQUNFLGdCQUFnQixDQUFDLE1BQU07TUFDdkIsZ0JBQWdCLENBQUMsS0FBSztNQUN0QixnQkFBZ0IsQ0FBQyxJQUFJO01BQ3JCO01BQ0EsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ1Y7R0FDRjtFQUNELFNBQVMsa0JBQWtCLENBQUMsUUFBUSxFQUFFO0lBQ3BDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztHQUMvQjs7RUFFRCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxLQUFLO0lBQzlCLE1BQU0sT0FBTyxHQUFHLGFBQWE7TUFDM0IsSUFBSSxDQUFDLFFBQVE7TUFDYixJQUFJLENBQUMsUUFBUTtNQUNiLElBQUksQ0FBQyxNQUFNO01BQ1gsT0FBTztNQUNQLE9BQU87S0FDUixDQUFDO0lBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQztJQUN0QixNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDOztJQUV6QixNQUFNLEtBQUssR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLO01BQzdDLFFBQVEsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7O0lBRS9DLElBQUksUUFBUSxDQUFDO0lBQ2I7TUFDRSxTQUFTLENBQUMsT0FBTztNQUNqQixTQUFTLENBQUMsS0FBSztNQUNmLFNBQVMsQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDLEtBQUs7TUFDckM7TUFDQSxJQUFJLE1BQU0sQ0FBQyxRQUFRLEtBQUssS0FBSyxFQUFFO1FBQzdCLFFBQVEsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDO09BQzlCLE1BQU07UUFDTCxRQUFRLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQztPQUM1QjtLQUNGLE1BQU0sSUFBSSxRQUFRLEVBQUU7TUFDbkIsUUFBUSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUM7S0FDOUIsTUFBTSxJQUFJLEtBQUssRUFBRTtNQUNoQixRQUFRLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQztLQUM1QixNQUFNO01BQ0wsUUFBUSxHQUFHLFNBQVMsQ0FBQyxPQUFPLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQztLQUNqRDtJQUNELE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7O0lBRXhCLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQztJQUN2QixNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDOztJQUV2QixJQUFJLEtBQUssSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRTtNQUNuRCxJQUFJLFFBQVEsQ0FBQyxLQUFLLEVBQUU7UUFDbEIsTUFBTSxHQUFHLEdBQUcsZ0JBQWdCO1VBQzFCLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJO1VBQ3ZCLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUk7U0FDekIsQ0FBQzs7UUFFRkMsU0FBTztVQUNMakIsTUFBUyxDQUFDLENBQUMsRUFBRSxPQUFPLEdBQUcsRUFBRSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7VUFDckUsTUFBTSxDQUFDLEtBQUs7VUFDWixHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsU0FBUztVQUNoQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7U0FDbkIsQ0FBQztPQUNILE1BQU07UUFDTCxNQUFNLEdBQUcsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQzs7UUFFdkVpQixTQUFPO1VBQ0xqQixNQUFTLENBQUMsQ0FBQyxFQUFFLE9BQU8sR0FBRyxFQUFFLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1VBQzlELE1BQU0sQ0FBQyxLQUFLO1VBQ1osR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLFNBQVM7U0FDakMsQ0FBQztPQUNIO0tBQ0Y7O0lBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO01BQ25CLElBQUksZUFBZSxHQUFHLEVBQUUsQ0FBQztNQUN6QixJQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFO1FBQ3pCLGVBQWUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7T0FDdEQsTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ3RDLGVBQWUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO09BQ2hDOzs7TUFHRCxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO01BQzFCLE1BQU0sU0FBUyxHQUFHO1FBQ2hCLE1BQU0sRUFBRTtVQUNOLE9BQU8sRUFBRSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxLQUFLO1lBQy9CLE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsZUFBZSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3hFLE9BQU8sVUFBVTtjQUNmLElBQUk7Y0FDSixPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU07Y0FDdEIsY0FBYyxDQUFDLE9BQU87Y0FDdEIsT0FBTyxDQUFDLE9BQU87Y0FDZixDQUFDO2FBQ0YsQ0FBQztXQUNIO1VBQ0QsS0FBSyxFQUFFLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLEtBQUs7WUFDN0IsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxlQUFlLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDeEUsT0FBTyxVQUFVO2NBQ2YsSUFBSTtjQUNKLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTTtjQUNwQixjQUFjLENBQUMsS0FBSztjQUNwQixPQUFPLENBQUMsS0FBSztjQUNiLENBQUM7YUFDRixDQUFDO1dBQ0g7VUFDRCxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUs7WUFDckMsTUFBTSxRQUFRLEdBQUc7Y0FDZixPQUFPLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2NBQzlCLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDN0IsQ0FBQztZQUNGLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRTtjQUMxQyxnQkFBZ0IsRUFBRSxRQUFRO2FBQzNCLENBQUMsQ0FBQztZQUNILE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsZUFBZSxFQUFFLFNBQVMsQ0FBQyxDQUFDOztZQUV4RSxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2NBQzFCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLFdBQVc7Y0FDakMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNO2NBQ3BCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsY0FBYyxHQUFHLGNBQWMsQ0FBQyxLQUFLO2NBQ3BELE9BQU8sQ0FBQyxLQUFLO2NBQ2IsUUFBUTthQUNULENBQUM7V0FDSDtTQUNGO1FBQ0QsS0FBSyxFQUFFO1VBQ0wsT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLEtBQUs7WUFDL0IsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxlQUFlLEVBQUUsU0FBUyxDQUFDLENBQUM7O1lBRXhFLE9BQU8sVUFBVTtjQUNmLElBQUk7Y0FDSixPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUs7Y0FDckI7Z0JBQ0UsT0FBTyxFQUFFLGNBQWMsQ0FBQyxPQUFPO2dCQUMvQixTQUFTLEVBQUUsY0FBYyxDQUFDLEtBQUs7ZUFDaEM7Y0FDRCxPQUFPLENBQUMsT0FBTztjQUNmLENBQUM7YUFDRixDQUFDO1dBQ0g7VUFDRCxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsS0FBSztZQUM3QixNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLGVBQWUsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUN4RSxPQUFPLFVBQVU7Y0FDZixJQUFJO2NBQ0osT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLO2NBQ25CLGNBQWMsQ0FBQyxLQUFLO2NBQ3BCLE9BQU8sQ0FBQyxLQUFLO2NBQ2IsQ0FBQzthQUNGLENBQUM7V0FDSDtVQUNELE1BQU0sQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7WUFDL0IsSUFBSSxRQUFRLEdBQUc7Y0FDYixPQUFPLEVBQUUsTUFBTSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRTtjQUN0RSxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQzdCLENBQUM7WUFDRixJQUFJLFdBQVcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ3hFLElBQUksY0FBYyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsZUFBZSxFQUFFLFNBQVMsQ0FBQyxDQUFDOztZQUV0RSxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2NBQzFCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLFdBQVc7Y0FDakMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNO2NBQ3BCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsY0FBYyxHQUFHLGNBQWMsQ0FBQyxLQUFLO2NBQ3BELE9BQU8sQ0FBQyxLQUFLO2NBQ2IsUUFBUSxDQUFDLENBQUM7V0FDYjtTQUNGO1FBQ0QsSUFBSSxFQUFFO1VBQ0osT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLEtBQUs7WUFDL0IsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxlQUFlLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDeEUsT0FBTyxVQUFVO2NBQ2YsSUFBSTtjQUNKLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSTtjQUNwQixjQUFjLENBQUMsT0FBTztjQUN0QixPQUFPLENBQUMsT0FBTztjQUNmLENBQUM7YUFDRixDQUFDO1dBQ0g7VUFDRCxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsS0FBSztZQUM3QixNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLGVBQWUsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUN4RSxPQUFPLFVBQVU7Y0FDZixJQUFJO2NBQ0osT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJO2NBQ2xCO2dCQUNFLE9BQU8sRUFBRSxjQUFjLENBQUMsS0FBSztnQkFDN0IsU0FBUyxFQUFFLGNBQWMsQ0FBQyxPQUFPO2VBQ2xDO2NBQ0QsT0FBTyxDQUFDLEtBQUs7Y0FDYixDQUFDO2FBQ0YsQ0FBQztXQUNIO1VBQ0QsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLEtBQUs7WUFDaEMsTUFBTSxRQUFRLEdBQUc7Y0FDZixPQUFPLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2NBQzlCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztrQkFDZixHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7a0JBQ3JCLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFO2FBQzVCLENBQUM7O1lBRUYsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxlQUFlLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDeEUsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFO2NBQzFDLGdCQUFnQixFQUFFLFFBQVE7YUFDM0IsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztjQUMxQixNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksR0FBRyxXQUFXO2NBQ2pDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSTtjQUNsQixNQUFNLENBQUMsS0FBSyxHQUFHLGNBQWMsR0FBRyxjQUFjLENBQUMsT0FBTztjQUN0RCxPQUFPLENBQUMsS0FBSztjQUNiLFFBQVE7YUFDVCxDQUFDO1dBQ0g7U0FDRjtPQUNGLENBQUM7TUFDRixJQUFJLFFBQVEsQ0FBQyxPQUFPLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRTs7UUFFdEMsSUFBSSxNQUFNLEdBQUdrQixTQUNELENBQUMsT0FBTyxHQUFHLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztXQUNuRSxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzFCLE1BQU0sR0FBR0MsTUFDQSxDQUFDLE9BQU8sR0FBRyxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1dBQzVELFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2QixNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNqRCxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDOzs7UUFHbEQsSUFBSSxLQUFLLEdBQUcsTUFBTTtXQUNmLE1BQU0sQ0FBQyxHQUFHLENBQUM7V0FDWCxNQUFNLENBQUMsR0FBRyxDQUFDO1dBQ1gsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1dBQzlELE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQzs7UUFFbEIsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLE1BQU07VUFDL0IsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7U0FDN0QsQ0FBQztRQUNGLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxLQUFLO1VBQzFELE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUNsQyxFQUFFLEVBQUUsQ0FBQyxDQUFDOzs7UUFHUCxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSTtVQUNwQixJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFO1lBQzFCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ3JELFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFO2NBQzlDLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2FBQy9DLENBQUM7V0FDSCxNQUFNO1lBQ0wsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUU7Y0FDdEMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7YUFDM0MsQ0FBQztXQUNIO1NBQ0YsQ0FBQyxDQUFDOztRQUVILE1BQU0sT0FBTyxHQUFHLHFCQUFxQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7O1FBRS9ELEtBQUssR0FBRyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7O1FBRTNCLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJO1VBQ3BCLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7WUFDckIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxFQUFFO2NBQ2pDLE9BQU8sVUFBVSxDQUFDLHlCQUF5QjtnQkFDekMsQ0FBQztnQkFDRCxTQUFTO2dCQUNULElBQUk7ZUFDTCxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ04sQ0FBQyxDQUFDO1dBQ0osTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFO1lBQ2pDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsRUFBRTtjQUNqQyxPQUFPLFVBQVUsQ0FBQyx5QkFBeUI7Z0JBQ3pDLENBQUM7Z0JBQ0QsU0FBUztnQkFDVCxJQUFJO2VBQ0wsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNOLENBQUMsQ0FBQztXQUNKLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtZQUM1QixLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsRUFBRTtjQUM5QixNQUFNLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyx5QkFBeUI7Z0JBQzNELENBQUM7Z0JBQ0QsU0FBUztnQkFDVCxJQUFJO2VBQ0wsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUNMLE9BQU8sU0FBUyxDQUFDLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7ZUFDdEMsQ0FBQzthQUNILENBQUMsQ0FBQztXQUNKLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTtZQUM3QixLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQUU7Y0FDNUMsT0FBTyxVQUFVLENBQUMseUJBQXlCO2dCQUN6QyxDQUFDO2dCQUNELFNBQVM7Z0JBQ1QsSUFBSTtlQUNMLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDTixDQUFDLENBQUM7V0FDSjtTQUNGLENBQUMsQ0FBQzs7O1FBR0gsS0FBSztXQUNGLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztXQUN2QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7V0FDakMsSUFBSSxDQUFDLE1BQU0sQ0FBQztXQUNaLEdBQUcsRUFBRTtXQUNMLElBQUksQ0FBQyxNQUFNO1lBQ1YsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNO2NBQ2hCLE9BQU8sRUFBRSxDQUFDO2FBQ1gsQ0FBQyxDQUFDO1dBQ0osQ0FBQyxDQUFDO09BQ04sTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUU7UUFDL0MsSUFBSSxJQUFJLEdBQUdBLE1BQ0YsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztXQUNuRSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7O1FBRXJCLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNyQixJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQzs7UUFFbkMsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEtBQUs7VUFDMUQsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ2xDLEVBQUUsRUFBRSxDQUFDLENBQUM7OztRQUdQLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJO1VBQ3BCLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUU7WUFDMUIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDckQsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUU7Y0FDdEMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7YUFDL0MsQ0FBQztXQUNILE1BQU07WUFDTCxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRTtjQUM5QixVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQzthQUMzQyxDQUFDO1dBQ0g7U0FDRixDQUFDLENBQUM7O1FBRUgsTUFBTSxPQUFPLEdBQUcscUJBQXFCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzs7UUFFL0QsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQzs7UUFFekIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUk7VUFDcEIsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtZQUNyQixJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLEVBQUU7Y0FDaEMsT0FBTyxVQUFVLENBQUMseUJBQXlCO2dCQUN6QyxDQUFDO2dCQUNELFNBQVM7Z0JBQ1QsSUFBSTtlQUNMLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDTixDQUFDLENBQUM7V0FDSixNQUFNLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUU7WUFDakMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxFQUFFO2NBQ2hDLE9BQU8sVUFBVSxDQUFDLHlCQUF5QjtnQkFDekMsQ0FBQztnQkFDRCxTQUFTO2dCQUNULElBQUk7ZUFDTCxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ04sQ0FBQyxDQUFDO1dBQ0osTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFO1lBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxFQUFFO2NBQzdCLE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLHlCQUF5QjtnQkFDM0QsQ0FBQztnQkFDRCxTQUFTO2dCQUNULElBQUk7ZUFDTCxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ0wsT0FBTyxTQUFTLENBQUMsRUFBRTtnQkFDakIsSUFBSSxDQUFDLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztlQUN0QyxDQUFDO2FBQ0gsQ0FBQyxDQUFDO1dBQ0osTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFO1lBQzdCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRTtjQUMzQyxPQUFPLFVBQVUsQ0FBQyx5QkFBeUI7Z0JBQ3pDLENBQUM7Z0JBQ0QsU0FBUztnQkFDVCxJQUFJO2VBQ0wsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNOLENBQUMsQ0FBQztXQUNKO1NBQ0YsQ0FBQyxDQUFDOzs7UUFHSCxJQUFJO1dBQ0QsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1dBQ3ZDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztXQUNqQyxJQUFJLENBQUMsTUFBTSxDQUFDO1dBQ1osR0FBRyxFQUFFO1dBQ0wsSUFBSSxDQUFDLE1BQU07WUFDVixJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU07Y0FDaEIsT0FBTyxFQUFFLENBQUM7YUFDWCxDQUFDLENBQUM7V0FDSixDQUFDLENBQUM7T0FDTjtLQUNGLE1BQU0sSUFBSSxTQUFTLENBQUMsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFOzs7TUFHdEUsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLENBQUMsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQztNQUMxRCxNQUFNLFFBQVEsR0FBR0gsS0FBUSxFQUFFLENBQUM7O01BRTVCLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRTtRQUNsQixNQUFNLE9BQU8sR0FBRyxhQUFhO1VBQzNCLElBQUksQ0FBQyxXQUFXO1VBQ2hCLElBQUksQ0FBQyxRQUFRO1VBQ2IsSUFBSSxDQUFDLE1BQU07VUFDWCxPQUFPO1VBQ1AsT0FBTztTQUNSLENBQUM7UUFDRixJQUFJLE1BQU0sR0FBR0ksU0FBWTtVQUN2QixPQUFPLEdBQUcsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztTQUN6RCxDQUFDO1FBQ0YsTUFBTSxHQUFHRCxNQUNBLENBQUMsQ0FBQyxFQUFFLE9BQU8sR0FBRyxhQUFhLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztXQUM5RCxTQUFTLENBQUMsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1dBQ3hELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDOzs7UUFHNUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7OztRQUduRCxNQUFNLFVBQVUsR0FBRyxPQUFPO1dBQ3ZCLE1BQU0sQ0FBQyxHQUFHLENBQUM7V0FDWCxNQUFNLENBQUMsR0FBRyxDQUFDO1dBQ1gsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1dBQzlELE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQzs7UUFFbEIsZUFBZTtVQUNiLFVBQVU7VUFDVixVQUFVLENBQUMsUUFBUSxDQUFDO1VBQ3BCLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUU7VUFDcEQsT0FBTyxDQUFDLE9BQU87VUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVk7U0FDM0IsQ0FBQzs7UUFFRixNQUFNLEdBQUdBLE1BQ0EsQ0FBQyxDQUFDLEVBQUUsT0FBTyxHQUFHLGFBQWEsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1dBQzlELFNBQVMsQ0FBQyxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzs7UUFFNUQsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtVQUN0QixRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztTQUN2QixDQUFDLENBQUM7UUFDSCxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDOztRQUV0RSxNQUFNO1VBQ0osT0FBTztVQUNQLE1BQU07VUFDTixRQUFRO1VBQ1I7WUFDRSxPQUFPLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZO1lBQ25DLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU07V0FDNUI7VUFDRCxRQUFRO1NBQ1QsQ0FBQzs7UUFFRixLQUFLLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQzs7UUFFakMsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLE9BQU8sRUFBRSxDQUFDLENBQUM7T0FDL0IsTUFBTTtRQUNMLElBQUksSUFBSSxHQUFHQSxNQUNGLENBQUMsT0FBTyxHQUFHLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7V0FDbkUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JCLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzs7UUFFbkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQzs7UUFFM0MsZUFBZTtVQUNiLE1BQU07VUFDTixVQUFVLENBQUMsUUFBUSxDQUFDO1VBQ3BCLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUU7VUFDcEQsT0FBTyxDQUFDLE9BQU87VUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVk7U0FDM0IsQ0FBQzs7UUFFRixJQUFJLE1BQU0sR0FBR0EsTUFDSjtZQUNMLE9BQU8sR0FBRyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7V0FDbkU7V0FDQSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckIsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtVQUN0QixRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztTQUN2QixDQUFDLENBQUM7O1FBRUgsTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDOztRQUVqRCxlQUFlO1VBQ2IsTUFBTTtVQUNOLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO1VBQzNCLE1BQU07VUFDTixPQUFPLENBQUMsS0FBSztVQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTTtVQUNwQixRQUFRO1NBQ1QsQ0FBQzs7UUFFRixNQUFNO1dBQ0gsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO1dBQzlCLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztXQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDO1dBQ1osR0FBRyxFQUFFO1dBQ0wsSUFBSSxDQUFDLE1BQU07WUFDVixJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztXQUNqQyxDQUFDLENBQUM7O09BRU47S0FDRixNQUFNLElBQUksU0FBUyxDQUFDLEtBQUssSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTs7O01BR2xFLE1BQU0sT0FBTyxHQUFHLGFBQWE7UUFDM0IsSUFBSSxDQUFDLFFBQVE7UUFDYixJQUFJLENBQUMsV0FBVztRQUNoQixJQUFJLENBQUMsTUFBTTtRQUNYLE9BQU87UUFDUCxPQUFPO09BQ1IsQ0FBQztNQUNGLE1BQU0sUUFBUSxHQUFHSCxLQUFRLEVBQUUsQ0FBQztNQUM1QixNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsQ0FBQyxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDO01BQzlELElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRTtRQUNwQixJQUFJLE1BQU0sR0FBR0ksU0FBWTtVQUN2QixPQUFPLEdBQUcsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztTQUMzRCxDQUFDO1FBQ0YsTUFBTSxHQUFHRCxNQUNBLENBQUMsQ0FBQyxFQUFFLE9BQU8sR0FBRyxhQUFhLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztXQUNoRSxTQUFTLENBQUMsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7O1FBRTlELE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUU7VUFDdEIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDdkIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1VBQzFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQztTQUN2QixDQUFDOztRQUVGLElBQUk7VUFDRixPQUFPO1VBQ1AsTUFBTTtVQUNOLFFBQVE7VUFDUjtZQUNFLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUk7WUFDN0IsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSTtXQUMxQjtVQUNELFFBQVE7VUFDUixTQUFTO1NBQ1YsQ0FBQzs7UUFFRixNQUFNO1VBQ0osT0FBTztVQUNQLE1BQU07VUFDTixRQUFRO1VBQ1I7WUFDRSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNO1lBQy9CLEtBQUssRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVk7V0FDcEM7VUFDRCxRQUFRO1NBQ1QsQ0FBQztRQUNGLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxPQUFPLEVBQUUsQ0FBQyxDQUFDO09BQ2hDLE1BQU07UUFDTCxJQUFJLElBQUksR0FBR0EsTUFDRixDQUFDLE9BQU8sR0FBRyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1dBQ25FLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1VBQ3BCLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3ZCLENBQUMsQ0FBQztRQUNILElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQzs7O1FBR2hELGVBQWU7VUFDYixJQUFJO1VBQ0osVUFBVSxDQUFDLFFBQVEsQ0FBQztVQUNwQixNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUU7WUFDeEIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxLQUFLO1lBQ3JCLFNBQVMsRUFBRSxNQUFNLENBQUMsT0FBTztXQUMxQixDQUFDO1VBQ0YsT0FBTyxDQUFDLEtBQUs7VUFDYjtZQUNFLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU07WUFDL0IsS0FBSyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWTtXQUNwQztVQUNELFFBQVE7U0FDVCxDQUFDOztRQUVGLElBQUk7V0FDRCxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztXQUN2QixLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztXQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDOztXQUVaLEdBQUcsRUFBRTtXQUNMLElBQUksQ0FBQyxXQUFXO1lBQ2YsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7V0FDakMsQ0FBQyxDQUFDO09BQ047S0FDRixNQUFNLElBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLEtBQUssTUFBTSxLQUFLLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFOztNQUV0RSxNQUFNLFVBQVUsR0FBRyxLQUFLO1VBQ3BCLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUk7VUFDeEIsUUFBUTtZQUNOLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUk7WUFDMUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLE9BQU87Y0FDdkMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSTtjQUMxQixNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7TUFDakMsSUFBSSxNQUFNLEdBQUdFLFNBQ0QsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxhQUFhLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3JELElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7O01BRTFCLE1BQU0sR0FBR0MsTUFDQSxDQUFDLE9BQU8sR0FBRyxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO1NBQzlDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztNQUN2QixNQUFNLFFBQVEsR0FBR04sS0FBUSxFQUFFLENBQUM7TUFDNUIsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtRQUN0QixRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztPQUN2QixDQUFDLENBQUM7TUFDSCxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksS0FBSyxJQUFJLFFBQVEsRUFBRTtRQUNwQyxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7T0FDOUQ7Ozs7TUFJRCxLQUFLLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7Ozs7TUFJeEMsSUFBSTtRQUNGLE9BQU87UUFDUCxNQUFNO1FBQ04sU0FBUyxDQUFDLE9BQU87UUFDakI7VUFDRSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJO1VBQzdCLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUk7U0FDMUI7UUFDRCxRQUFRO1FBQ1IsU0FBUztPQUNWLENBQUM7Ozs7O01BS0YsTUFBTTtRQUNKLE9BQU87UUFDUCxNQUFNO1FBQ04sU0FBUztRQUNUO1VBQ0UsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTTtVQUMvQixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNO1NBQzVCO1FBQ0QsUUFBUTtPQUNULENBQUM7O0tBRUgsTUFBTSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssTUFBTSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7OztNQUd4RSxNQUFNLEtBQUssR0FBR2hCLE1BQVM7UUFDckIsT0FBTyxHQUFHLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztPQUNyRSxDQUFDO01BQ0YsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUNuQyxNQUFNLFFBQVEsR0FBR2dCLEtBQVEsRUFBRSxDQUFDO01BQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUU7UUFDcEIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7T0FDdkIsQ0FBQyxDQUFDO01BQ0gsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLEtBQUssSUFBSSxRQUFRLEVBQUU7UUFDcEMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO09BQ2pDOzs7O01BSUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQzs7TUFFM0MsZUFBZTtRQUNiLE1BQU07UUFDTixVQUFVLENBQUMsUUFBUSxDQUFDO1FBQ3BCLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDcEQsT0FBTyxDQUFDLE9BQU87UUFDZixPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUs7T0FDdEIsQ0FBQztNQUNGLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDNUIsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDOztRQUVqQyxlQUFlO1VBQ2IsTUFBTTtVQUNOLFVBQVUsQ0FBQyxRQUFRLENBQUM7VUFDcEIsTUFBTSxDQUFDLEtBQUs7VUFDWixPQUFPLENBQUMsS0FBSztVQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSztTQUNwQixDQUFDOztRQUVGLE1BQU07V0FDSCxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7V0FDOUIsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1dBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUM7V0FDWixHQUFHLEVBQUU7V0FDTCxJQUFJLENBQUMsTUFBTTtZQUNWLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1dBQ25DLENBQUMsQ0FBQztPQUNOLE1BQU07UUFDTCxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU07VUFDbEIsT0FBTyxFQUFFLENBQUM7U0FDWCxDQUFDLENBQUM7T0FDSjs7Ozs7O01BTUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDOztNQUUxQixJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFOztRQUUzQixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7O1FBRWpDLGVBQWU7VUFDYixLQUFLO1VBQ0wsVUFBVSxDQUFDLFFBQVEsQ0FBQztVQUNwQixFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFO1VBQ3BELE9BQU8sQ0FBQyxLQUFLO1VBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJO1NBQ25CLENBQUM7O1FBRUYsS0FBSztXQUNGLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7V0FDeEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztXQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDO1dBQ1osR0FBRyxFQUFFO1dBQ0wsSUFBSSxDQUFDLFdBQVc7WUFDZixJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztXQUNsQyxDQUFDLENBQUM7T0FDTixNQUFNO1FBQ0wsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNO1VBQ2pCLE9BQU8sRUFBRSxDQUFDO1NBQ1gsQ0FBQyxDQUFDO09BQ0o7Ozs7O01BS0QsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUMxQixJQUFJLFNBQVMsQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDLEtBQUssRUFBRTtVQUN6QyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1VBQ2xELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDaEQ7O1FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDOztRQUVsQyxlQUFlO1VBQ2IsT0FBTztVQUNQLE9BQU8sQ0FBQyxTQUFTLENBQUM7VUFDbEIsTUFBTTtVQUNOLE9BQU8sQ0FBQyxLQUFLO1VBQ2I7WUFDRSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNO1lBQy9CLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU07V0FDNUI7VUFDRCxRQUFRO1NBQ1QsQ0FBQztRQUNGLE9BQU87V0FDSixRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7V0FDOUIsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1dBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUM7V0FDWixHQUFHLEVBQUU7V0FDTCxJQUFJLENBQUMsTUFBTTtZQUNWLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1dBQ3BDLENBQUMsQ0FBQztPQUNOLE1BQU07UUFDTCxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU07VUFDbkIsT0FBTyxFQUFFLENBQUM7U0FDWCxDQUFDLENBQUM7T0FDSjs7O0tBR0YsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sSUFBSSxRQUFRLENBQUMsS0FBSyxFQUFFOztNQUU5QyxNQUFNLFFBQVEsR0FBR0EsS0FBUSxFQUFFLENBQUM7OztNQUc1QixJQUFJLFFBQVEsR0FBR00sTUFDTjtVQUNMLE9BQU8sR0FBRyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDckU7U0FDQSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDckIsUUFBUSxHQUFHLFFBQVE7U0FDaEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1VBQ2hCLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3ZCLENBQUM7U0FDRCxVQUFVLEVBQUUsQ0FBQzs7TUFFaEIsZUFBZTtRQUNiLFFBQVE7UUFDUixVQUFVLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztRQUM3QixNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUU7VUFDeEIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxLQUFLO1VBQ3JCLFNBQVMsRUFBRSxNQUFNLENBQUMsT0FBTztTQUMxQixDQUFDO1FBQ0YsT0FBTyxDQUFDLEtBQUs7UUFDYixNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2xFLFFBQVE7T0FDVCxDQUFDOztNQUVGLFFBQVE7U0FDTCxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDO1NBQ2hFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUM7U0FDMUQsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUNaLE1BQU0sRUFBRTtTQUNSLEdBQUcsRUFBRTtTQUNMLElBQUksQ0FBQyxXQUFXO1VBQ2Z0QixNQUFTLENBQUMsQ0FBQyxFQUFFLE9BQU8sR0FBRyxPQUFPLEVBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztVQUMzRixJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNsQyxDQUFDLENBQUM7OztNQUdMLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO01BQzlCLE1BQU0sR0FBRyxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDOztNQUVuRWlCLFNBQU87UUFDTGpCLE1BQVMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxHQUFHLEVBQUUsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4RCxNQUFNLENBQUMsS0FBSztRQUNaLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxTQUFTO1FBQ2hDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtPQUNuQixDQUFDOztNQUVGLE1BQU0sTUFBTSxHQUFHc0IsTUFDTixDQUFDLE9BQU8sR0FBRyxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUMvQyxTQUFTLENBQUMsR0FBRyxDQUFDO1NBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzs7O01BR3ZCLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDM0MsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDOzs7OztNQUtuRCxNQUFNLFVBQVUsR0FBRyxPQUFPO1NBQ3ZCLE1BQU0sQ0FBQyxHQUFHLENBQUM7U0FDWCxNQUFNLENBQUMsR0FBRyxDQUFDO1NBQ1gsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztTQUNyRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7O01BRWxCLGVBQWU7UUFDYixVQUFVO1FBQ1YsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFDM0IsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRTtRQUNwRCxPQUFPLENBQUMsT0FBTztRQUNmLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7O09BRWxFLENBQUM7O01BRUYsTUFBTSxVQUFVLEdBQUcsVUFBVTtTQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUU7VUFDaEIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDdkIsQ0FBQztTQUNELFVBQVUsRUFBRSxDQUFDOztNQUVoQixlQUFlO1FBQ2IsVUFBVTtRQUNWLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO1FBQzNCLE1BQU07UUFDTixPQUFPLENBQUMsS0FBSztRQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSztRQUNuQixRQUFRO09BQ1QsQ0FBQzs7TUFFRixVQUFVO1NBQ1AsUUFBUTtVQUNQLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUTtTQUN0RTtTQUNBLEtBQUs7VUFDSixDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUs7U0FDbkU7U0FDQSxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQ1osR0FBRyxFQUFFO1NBQ0wsSUFBSSxDQUFDLE1BQU07VUFDVixJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNuQyxDQUFDLENBQUM7TUFDTCxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU07UUFDbkIsT0FBTyxFQUFFLENBQUM7T0FDWCxDQUFDLENBQUM7S0FDSixNQUFNLElBQUksUUFBUSxDQUFDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUU7OztNQUc5QyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU87UUFDN0IsUUFBUSxHQUFHTixLQUFRLEVBQUUsQ0FBQzs7O01BR3hCLElBQUksU0FBUyxHQUFHTSxNQUNQLENBQUMsT0FBTyxHQUFHLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQy9DLFNBQVMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQ25CLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3BDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtVQUNoQixRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztTQUN2QixDQUFDLENBQUM7O01BRUwsU0FBUyxHQUFHLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQzs7TUFFbkMsZUFBZTtRQUNiLFNBQVM7O1FBRVQsVUFBVSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7UUFDN0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFO1VBQ3hCLE9BQU8sRUFBRSxNQUFNLENBQUMsS0FBSztVQUNyQixTQUFTLEVBQUUsTUFBTSxDQUFDLE9BQU87U0FDMUIsQ0FBQztRQUNGLE9BQU8sQ0FBQyxLQUFLO1FBQ2IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNsRSxRQUFRO09BQ1QsQ0FBQzs7TUFFRixTQUFTO1NBQ04sUUFBUTtVQUNQLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUTtTQUNoRTtTQUNBLEtBQUs7VUFDSixDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUs7U0FDckU7U0FDQSxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQ1osTUFBTSxFQUFFO1NBQ1IsR0FBRyxFQUFFO1NBQ0wsSUFBSSxDQUFDLFdBQVc7VUFDZixJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNsQyxDQUFDLENBQUM7OztNQUdMLE1BQU0sR0FBRyxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDOztNQUV2RSxJQUFJLFVBQVUsR0FBR0wsU0FBTztRQUN0QmpCLE1BQVMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxHQUFHLEVBQUUsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUQsTUFBTSxDQUFDLEtBQUs7UUFDWixHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsU0FBUztPQUNqQyxDQUFDOztNQUVGLFVBQVUsR0FBRyxVQUFVO1NBQ3BCLFNBQVMsQ0FBQyxNQUFNLENBQUM7U0FDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDbkIsS0FBSyxFQUFFO1NBQ1AsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDOztNQUVsQixlQUFlO1FBQ2IsVUFBVTtRQUNWLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO1FBQzNCLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDcEQsT0FBTyxDQUFDLE9BQU87UUFDZixNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO09BQ2xFLENBQUM7O01BRUYsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtRQUMxQixRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztPQUN2QixDQUFDLENBQUM7TUFDSCxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUM7O01BRXZDLGVBQWU7UUFDYixNQUFNO1FBQ04sVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFDM0IsTUFBTTtRQUNOLE9BQU8sQ0FBQyxLQUFLO1FBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLO1FBQ25CLFFBQVE7T0FDVCxDQUFDOztNQUVGLE1BQU07U0FDSCxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDO1NBQ2pFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUM7U0FDM0QsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUNaLEdBQUcsRUFBRTtTQUNMLElBQUksQ0FBQyxNQUFNO1VBQ1YsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbkMsQ0FBQyxDQUFDO01BQ0wsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNO1FBQ25CLE9BQU8sRUFBRSxDQUFDO09BQ1gsQ0FBQyxDQUFDO0tBQ0o7O0lBRUQsU0FBUyxPQUFPLENBQUMsU0FBUyxFQUFFO01BQzFCLE1BQU0sUUFBUTtRQUNaLE9BQU8sU0FBUyxLQUFLLFFBQVEsR0FBRyxTQUFTLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQztNQUM5RCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZELDJCQUEyQixDQUFDLFFBQVEsQ0FBQztRQUNyQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7TUFDdkI7UUFDRSxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO1FBQ3JDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFDbkMsU0FBUyxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsT0FBTztRQUNyQztRQUNBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1VBQ25CLElBQUksRUFBRSxXQUFXO1VBQ2pCLEdBQUcsRUFBRSxHQUFHO1VBQ1IsZUFBZSxFQUFFLFNBQVMsQ0FBQyxPQUFPO1VBQ2xDLGdCQUFnQixFQUFFLFFBQVE7U0FDM0IsQ0FBQyxDQUFDO1FBQ0gsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7VUFDbkIsSUFBSSxFQUFFLE9BQU87VUFDYixHQUFHLEVBQUUsTUFBTTtVQUNYLGVBQWUsRUFBRSxTQUFTLENBQUMsT0FBTztVQUNsQyxPQUFPLEVBQUUsSUFBSTtTQUNkLENBQUMsQ0FBQztRQUNILEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1VBQ25CLElBQUksRUFBRSxPQUFPO1VBQ2IsR0FBRyxFQUFFLFFBQVE7VUFDYixlQUFlLEVBQUUsU0FBUyxDQUFDLE9BQU87U0FDbkMsQ0FBQyxDQUFDO09BQ0o7TUFDRCxPQUFPLEtBQUssQ0FBQztLQUNkO0lBQ0QsU0FBUyxJQUFJO01BQ1gsT0FBTztNQUNQLE1BQU07TUFDTixRQUFRO01BQ1IsT0FBTztNQUNQLFFBQVE7TUFDUixPQUFPO01BQ1AsU0FBUyxHQUFHLEtBQUs7TUFDakI7O01BRUEsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDOzs7TUFHMUIsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLElBQUksS0FBSyxJQUFJLFFBQVEsQ0FBQyxFQUFFO1FBQ3BFLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUM7T0FDbkQ7TUFDRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQzNCLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDOzs7UUFHN0QsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDOztRQUV6QyxlQUFlO1VBQ2IsU0FBUztVQUNULFVBQVUsQ0FBQyxRQUFRLENBQUM7VUFDcEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFO1lBQ3hCLE9BQU8sRUFBRSxNQUFNLENBQUMsS0FBSztZQUNyQixTQUFTLEVBQUUsTUFBTSxDQUFDLE9BQU87V0FDMUIsQ0FBQztVQUNGLE9BQU8sQ0FBQyxLQUFLO1VBQ2IsT0FBTztVQUNQLFFBQVE7U0FDVCxDQUFDOztRQUVGLFNBQVM7V0FDTixRQUFRO1lBQ1AsQ0FBQyxDQUFDLEVBQUUsQ0FBQztjQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRO1dBQzlEO1dBQ0EsS0FBSztZQUNKLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSztXQUNuRTtXQUNBLElBQUksQ0FBQyxNQUFNLENBQUM7V0FDWixNQUFNLEVBQUU7V0FDUixHQUFHLEVBQUU7V0FDTCxJQUFJLENBQUMsV0FBVztZQUNmLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxHQUFHLE1BQU0sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7V0FDdEQsQ0FBQyxDQUFDO09BQ04sTUFBTTtRQUNMLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxHQUFHLE1BQU0sRUFBRSxNQUFNO1VBQ3JDLE9BQU8sRUFBRSxDQUFDO1NBQ1gsQ0FBQyxDQUFDO09BQ0o7S0FDRjtJQUNELFNBQVMsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUU7TUFDN0QsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDOztNQUUxRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssS0FBSyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3hELE9BQU8sR0FBRyxNQUFNLENBQUM7T0FDbEI7TUFDRCxJQUFJLFdBQVcsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDeEQsSUFBSSxTQUFTLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQyxLQUFLLEVBQUU7UUFDekMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN4RCxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO09BQ3REO01BQ0QsV0FBVyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDekMsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNqQyxXQUFXLEdBQUcsV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNqQyxlQUFlO1VBQ2IsV0FBVztVQUNYLEtBQUs7O1VBRUwsTUFBTTtVQUNOLE9BQU8sQ0FBQyxLQUFLO1VBQ2IsT0FBTztVQUNQLFFBQVE7U0FDVCxDQUFDO1FBQ0YsV0FBVztXQUNSLFFBQVE7WUFDUCxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUTtXQUM3RDtXQUNBLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1dBQ2hFLElBQUksQ0FBQyxNQUFNLENBQUM7V0FDWixHQUFHLEVBQUU7V0FDTCxJQUFJLENBQUMsTUFBTTtZQUNWLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1dBQ3BDLENBQUMsQ0FBQztPQUNOLE1BQU07UUFDTCxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU07VUFDbkIsT0FBTyxFQUFFLENBQUM7U0FDWCxDQUFDLENBQUM7T0FDSjtLQUNGO0lBQ0QsU0FBUyxLQUFLO01BQ1osT0FBTztNQUNQLE1BQU07TUFDTixRQUFRO01BQ1IsYUFBYSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSztNQUNyQyxNQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLO01BQzVCOztNQUVBLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDM0MsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDOzs7TUFHbkQsSUFBSSxVQUFVLEdBQUcsT0FBTztTQUNyQixNQUFNLENBQUMsR0FBRyxDQUFDO1NBQ1gsTUFBTSxDQUFDLEdBQUcsQ0FBQztTQUNYLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztTQUM5RCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7O01BRWxCLGVBQWU7UUFDYixVQUFVO1FBQ1YsVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUNwQixFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQ3BELE9BQU8sQ0FBQyxPQUFPO1FBQ2YsYUFBYTtPQUNkLENBQUM7OztNQUdGLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxJQUFJLEtBQUssSUFBSSxRQUFRLENBQUMsRUFBRTtRQUN0RSxVQUFVLEdBQUcsTUFBTTtXQUNoQixNQUFNLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxPQUFPLENBQUM7V0FDbkMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztPQUM1Qzs7TUFFRCxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ2hDLE1BQU0sUUFBUSxHQUFHZ0IsS0FBUSxFQUFFLENBQUM7UUFDNUIsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtVQUMxQixRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztTQUN2QixDQUFDLENBQUM7UUFDSCxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUM7O1FBRTNDLGVBQWU7VUFDYixVQUFVOztVQUVWLFVBQVUsQ0FBQyxRQUFRLENBQUM7VUFDcEIsTUFBTTtVQUNOLE9BQU8sQ0FBQyxLQUFLO1VBQ2IsTUFBTTtVQUNOLFFBQVE7U0FDVCxDQUFDOztRQUVGLFVBQVU7V0FDUCxRQUFRO1lBQ1AsQ0FBQyxDQUFDLEVBQUUsQ0FBQztjQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRO1dBQzlEO1dBQ0EsS0FBSztZQUNKLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSztXQUNuRTtXQUNBLElBQUksQ0FBQyxNQUFNLENBQUM7V0FDWixHQUFHLEVBQUU7V0FDTCxJQUFJLENBQUMsTUFBTTtZQUNWLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1dBQ25DLENBQUMsQ0FBQztPQUNOLE1BQU07UUFDTCxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU07VUFDbEIsT0FBTyxFQUFFLENBQUM7U0FDWCxDQUFDLENBQUM7T0FDSjtLQUNGO0dBQ0YsQ0FBQyxDQUFDOztDQUVKO0FBQ0QsU0FBU0MsU0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUU7RUFDekQsSUFBSSxHQUFHLENBQUMsUUFBUSxFQUFFO0lBQ2hCLE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDO09BQ25DLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztHQUNuRTtFQUNELE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDO0tBQ25DLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Q0FFdEU7O0FDaHJDRCxNQUFNLGNBQWMsR0FBRztFQUNyQixNQUFNLEVBQUUsS0FBSztFQUNiLEtBQUssRUFBRSxLQUFLO0VBQ1osSUFBSSxFQUFFLEtBQUs7Q0FDWixDQUFDOztBQUVGLFNBQVMsT0FBTyxDQUFDLFdBQVcsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFO0VBQ2pELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUM7RUFDakMsTUFBTSxRQUFRLEdBQUcsV0FBVztLQUN6QixNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQztLQUNsQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMscUJBQXFCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztLQUMvQyxNQUFNLENBQUMsR0FBRyxDQUFDO0tBQ1gsSUFBSSxDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0VBRTNELE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3hDLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRTtJQUNmLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO0dBQ2hFO0VBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO0lBQ2hCLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSwyQkFBMkIsQ0FBQyxDQUFDO0dBQ2pFO0VBQ0QsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFO0lBQ2QsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLDBCQUEwQixDQUFDLENBQUM7R0FDaEU7RUFDRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUU7SUFDaEIsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLDRCQUE0QixDQUFDLENBQUM7R0FDbEU7RUFDRCxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7SUFDZixRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsMkJBQTJCLENBQUMsQ0FBQztHQUNqRTs7RUFFRCxPQUFPLFdBQVcsQ0FBQztDQUNwQjs7QUFFRCxTQUFTTSxXQUFTLENBQUMsYUFBYSxFQUFFO0VBQ2hDLE1BQU0sZ0JBQWdCLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEtBQUs7SUFDM0QsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNqQyxPQUFPLEdBQUcsQ0FBQztHQUNaLEVBQUUsRUFBRSxDQUFDLENBQUM7O0VBRVAsT0FBTyxTQUFTLEtBQUssRUFBRSxFQUFFLEVBQUU7SUFDekIsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtNQUN0QixJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUU7UUFDdEIsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUN2QyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ3hDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7T0FDMUMsTUFBTTtRQUNMLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztPQUM3QztLQUNGLE1BQU0sSUFBSSxLQUFLLEtBQUssS0FBSyxFQUFFO01BQzFCLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7TUFDL0IsZ0JBQWdCLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztNQUM5QixnQkFBZ0IsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0tBQzlCLE1BQU07TUFDTCxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUM7S0FDaEM7O0lBRUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUs7TUFDakU7UUFDRSxHQUFHO1FBQ0gsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTTtRQUM1QixnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLO1FBQzNCLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUk7UUFDMUI7S0FDSCxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ1QsSUFBSSxPQUFPLEVBQUU7TUFDWCxFQUFFLEVBQUUsQ0FBQztLQUNOO0dBQ0YsQ0FBQztDQUNIO0FBQ0QsU0FBUyxlQUFlLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7RUFDakQsU0FBUyxVQUFVLENBQUMsT0FBTyxFQUFFO0lBQzNCLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLGNBQWMsR0FBRyxTQUFTLEtBQUs7TUFDM0MsSUFBSSxDQUFDLENBQUMsRUFBRTtRQUNOLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO09BQ3JCO01BQ0QsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUU7UUFDakIsT0FBTyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEtBQUssVUFBVTtZQUNyRCxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7O09BRXhEO01BQ0QsT0FBTyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7S0FDM0MsQ0FBQztHQUNIO0VBQ0QsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztFQUM3RCxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUM7RUFDMUIsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7O0VBRWhDLE1BQU0sSUFBSSxHQUFHQSxXQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQzs7RUFFckUsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLElBQUk7OztJQUc1QixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3hCLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDOztJQUUzQyxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDckIsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLEtBQUssRUFBRTtNQUMzQixTQUFTLEdBQUcsS0FBSyxDQUFDO0tBQ25CO0lBQ0QsSUFBSSxPQUFPLEdBQUcsU0FBUyxDQUFDO0lBQ3hCLElBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQztJQUN6QixJQUFJLE9BQU8sR0FBRyxTQUFTLENBQUM7SUFDeEIsSUFBSSxPQUFPLEdBQUcsU0FBUyxDQUFDO0lBQ3hCLElBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQztJQUN6QixJQUFJLE1BQU0sR0FBRyxTQUFTLENBQUM7O0lBRXZCLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRTtNQUNqQixPQUFPLEdBQUcsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsQ0FBQztNQUMzQyxRQUFRLEdBQUcsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsQ0FBQztNQUM3QyxPQUFPLEdBQUcsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQztNQUMxQyxPQUFPLEdBQUcsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsQ0FBQztNQUMzQyxNQUFNLEdBQUcsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQztNQUN6QyxRQUFRLEdBQUcsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsQ0FBQztLQUM5Qzs7SUFFRCxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDckIsSUFBSSxJQUFJLEdBQUdILFNBQVksQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUVwRSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDOztJQUUvQixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3hCLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7OztJQUd6QixJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssSUFBSSxFQUFFOztNQUUzQixNQUFNLFFBQVEsR0FBR3BCLE1BQVMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQztNQUMvRCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDO01BQzFDLE1BQU0sR0FBRyxHQUFHLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7TUFDekQsT0FBTztRQUNMLFFBQVE7UUFDUixRQUFRLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLFNBQVM7T0FDakMsQ0FBQztNQUNGLElBQUksR0FBR29CLFNBQVksQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2pFLE1BQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRTs7TUFFaEMsUUFBUSxHQUFHLElBQUksQ0FBQztLQUNqQjs7O0lBR0QsSUFBSSxRQUFRLEVBQUU7TUFDWixNQUFNLFlBQVk7UUFDaEIsTUFBTSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO01BQ3JFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDL0IsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO01BQ2xDLGVBQWU7UUFDYixNQUFNO1FBQ04sQ0FBQyxPQUFPLENBQUM7UUFDVCxNQUFNLENBQUMsS0FBSztRQUNaLE9BQU8sQ0FBQyxLQUFLO1FBQ2IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQztPQUMvRCxDQUFDO01BQ0YsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDaEMsTUFBTSxJQUFJLE9BQU8sRUFBRTtNQUNsQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQy9CLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUMvQixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7TUFDbEMsZUFBZTtRQUNiLE1BQU07UUFDTixDQUFDLE9BQU8sQ0FBQztRQUNULE1BQU0sQ0FBQyxLQUFLO1FBQ1osT0FBTyxDQUFDLEtBQUs7UUFDYixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTTtPQUMvQixDQUFDO01BQ0YsTUFBTTtTQUNILEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1NBQ2pCLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUNqQjs7SUFFRCxTQUFTLGtCQUFrQixDQUFDLE9BQU8sRUFBRTtNQUNuQyxPQUFPO1FBQ0wsTUFBTSxFQUFFO1VBQ04sT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLEtBQUs7WUFDL0IsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ2pFLE9BQU8sVUFBVTtjQUNmLElBQUk7Y0FDSixPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU07Y0FDdEIsY0FBYyxDQUFDLE9BQU87Y0FDdEIsT0FBTyxDQUFDLE9BQU87Y0FDZixDQUFDO2FBQ0YsQ0FBQztXQUNIO1VBQ0QsS0FBSyxFQUFFLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLEtBQUs7WUFDN0IsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ2pFLE9BQU8sVUFBVTtjQUNmLElBQUk7Y0FDSixPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU07Y0FDcEIsY0FBYyxDQUFDLEtBQUs7Y0FDcEIsT0FBTyxDQUFDLEtBQUs7Y0FDYixDQUFDO2FBQ0YsQ0FBQztXQUNIO1NBQ0Y7UUFDRCxLQUFLLEVBQUU7VUFDTCxPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsS0FBSztZQUMvQixNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7O1lBRWpFLE9BQU8sVUFBVTtjQUNmLElBQUk7Y0FDSixPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUs7Y0FDckIsY0FBYyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7a0JBQzFCLGNBQWMsQ0FBQyxPQUFPO2tCQUN0QixjQUFjLENBQUMsS0FBSztjQUN4QixPQUFPLENBQUMsT0FBTztjQUNmLENBQUM7YUFDRixDQUFDO1dBQ0g7VUFDRCxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsS0FBSztZQUM3QixNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDakUsT0FBTyxVQUFVO2NBQ2YsSUFBSTtjQUNKLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSztjQUNuQixjQUFjLENBQUMsS0FBSztjQUNwQixPQUFPLENBQUMsS0FBSztjQUNiLENBQUM7YUFDRixDQUFDO1dBQ0g7U0FDRjtRQUNELElBQUksRUFBRTtVQUNKLE9BQU8sRUFBRSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxLQUFLO1lBQy9CLE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNqRSxPQUFPLFVBQVU7Y0FDZixJQUFJO2NBQ0osT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJO2NBQ3BCLGNBQWMsQ0FBQyxPQUFPO2NBQ3RCLE9BQU8sQ0FBQyxPQUFPO2NBQ2YsQ0FBQzthQUNGLENBQUM7V0FDSDtVQUNELEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxLQUFLO1lBQzdCLE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNqRSxPQUFPLFVBQVU7Y0FDZixJQUFJO2NBQ0osT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJO2NBQ2xCLGNBQWMsQ0FBQyxLQUFLO2NBQ3BCLE9BQU8sQ0FBQyxLQUFLO2NBQ2IsQ0FBQzthQUNGLENBQUM7V0FDSDtTQUNGO09BQ0YsQ0FBQztLQUNIOztJQUVELElBQUksT0FBTyxFQUFFO01BQ1gsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO01BQ2hELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDOztNQUVuQyxNQUFNLFVBQVUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDOztNQUU1QixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7UUFDbkIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDeEMsTUFBTSxTQUFTLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7O1FBRTlDLE1BQU0sYUFBYSxHQUFHLEtBQUs7V0FDeEIsU0FBUyxDQUFDLE1BQU0sQ0FBQztXQUNqQixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDcEMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzlCLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckMsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEtBQUs7VUFDaEQsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ2xDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDUCxNQUFNLFlBQVksR0FBRyxLQUFLO1dBQ3ZCLFNBQVMsQ0FBQyxNQUFNLENBQUM7V0FDakIsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN4RSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSTtVQUNwQixJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFO1lBQzFCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ3JELFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFO2NBQzlDLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2FBQy9DLENBQUM7V0FDSCxNQUFNLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7WUFDNUIsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO2NBQ3JCLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2FBQzNDLENBQUM7V0FDSCxNQUFNO1lBQ0wsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUU7Y0FDdEMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7YUFDM0MsQ0FBQztXQUNIO1NBQ0YsQ0FBQyxDQUFDOztRQUVILE1BQU0sT0FBTyxHQUFHLHFCQUFxQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0QsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQzs7UUFFbkQsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUk7VUFDcEIsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtZQUNyQixLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJO2NBQzFCLE9BQU8sVUFBVSxDQUFDLHlCQUF5QixDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUM5RCxDQUFDLENBQUM7V0FDSixNQUFNLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7WUFDNUIsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLEVBQUU7Y0FDOUIsTUFBTSxnQkFBZ0IsR0FBRyxVQUFVLENBQUMseUJBQXlCO2dCQUMzRCxDQUFDO2dCQUNELFNBQVM7ZUFDVixDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ0wsT0FBTyxTQUFTLENBQUMsRUFBRTtnQkFDakIsSUFBSSxDQUFDLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztlQUN0QyxDQUFDO2FBQ0gsQ0FBQyxDQUFDO1dBQ0osTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFO1lBQzdCLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUk7Y0FDckMsT0FBTyxVQUFVLENBQUMseUJBQXlCLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzlELENBQUMsQ0FBQztXQUNKO1NBQ0YsQ0FBQyxDQUFDOzs7UUFHSCxLQUFLO1dBQ0YsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1dBQ3ZDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztXQUNqQyxJQUFJLENBQUMsTUFBTSxDQUFDO1dBQ1osR0FBRyxFQUFFO1dBQ0wsSUFBSSxDQUFDLE1BQU07WUFDVixJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTTtjQUMxQixPQUFPLEVBQUUsQ0FBQzthQUNYLENBQUMsQ0FBQztXQUNKLENBQUMsQ0FBQztPQUNOLE1BQU07UUFDTCxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ3BDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ25DLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuQyxNQUFNLE9BQU8sR0FBRyxhQUFhO1VBQzNCLFFBQVE7VUFDUixPQUFPO1VBQ1AsSUFBSSxDQUFDLE1BQU07VUFDWCxPQUFPO1VBQ1AsT0FBTztTQUNSLENBQUM7O1FBRUYsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QyxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9DLGVBQWU7VUFDYixXQUFXO1VBQ1gsVUFBVTtVQUNWLElBQUksQ0FBQyxtQkFBbUI7Y0FDcEIsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRTtjQUNwRCxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFO1VBQ3hELE9BQU8sQ0FBQyxPQUFPO1VBQ2YsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLO1NBQ3RCLENBQUM7O1FBRUYsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtVQUNsQyxXQUFXLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxDQUFDO1NBQ3pEOztRQUVELE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUM3QyxlQUFlO1VBQ2IsV0FBVztVQUNYLFVBQVU7VUFDVixNQUFNLENBQUMsS0FBSztVQUNaLE9BQU8sQ0FBQyxLQUFLO1VBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLO1NBQ3BCLENBQUM7UUFDRixXQUFXO1dBQ1IsUUFBUTtZQUNQLENBQUMsQ0FBQyxFQUFFLENBQUM7Y0FDSCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUTtXQUM5RDtXQUNBLEtBQUs7WUFDSixDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUs7V0FDbkU7V0FDQSxJQUFJLENBQUMsTUFBTSxDQUFDO1dBQ1osR0FBRyxFQUFFO1dBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRSxNQUFNLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQzs7UUFFbEQsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzlCLElBQUksVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7VUFDakMsVUFBVSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQztTQUN2RDs7UUFFRCxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDM0MsZUFBZTtVQUNiLFVBQVU7VUFDVixVQUFVOztVQUVWLElBQUksQ0FBQyxtQkFBbUI7Y0FDcEIsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRTtjQUNwRCxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFO1VBQ3hELE9BQU8sQ0FBQyxLQUFLO1VBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJO1NBQ25CLENBQUM7UUFDRixVQUFVO1dBQ1AsUUFBUTtZQUNQLENBQUMsQ0FBQyxFQUFFLENBQUM7Y0FDSCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUTtXQUNoRTtXQUNBLEtBQUs7WUFDSixDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUs7V0FDckU7V0FDQSxJQUFJLENBQUMsTUFBTSxDQUFDO1dBQ1osTUFBTSxFQUFFO1dBQ1IsR0FBRyxFQUFFO1dBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRSxNQUFNLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQzs7UUFFakQsSUFBSSxBQUFPLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7VUFDbkMsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQzs7VUFFaEUsZUFBZTtZQUNiLEtBQUs7WUFDTCxVQUFVO1lBQ1YsTUFBTSxDQUFDLEtBQUs7WUFDWixPQUFPLENBQUMsS0FBSztZQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTTtXQUNyQixDQUFDOztVQUVGLEtBQUs7YUFDRixRQUFRO2NBQ1AsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVE7YUFDN0Q7YUFDQSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQzthQUNoRSxJQUFJLENBQUMsTUFBTSxDQUFDO2FBQ1osR0FBRyxFQUFFO2FBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsRUFBRSxNQUFNLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNwRCxNQUFNO1VBQ0wsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxFQUFFLE1BQU0sT0FBTyxFQUFFLENBQUMsQ0FBQztTQUMzQztPQUNGO0tBQ0YsTUFBTTtNQUNMLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRSxNQUFNLE9BQU8sRUFBRSxDQUFDLENBQUM7TUFDekMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFLE1BQU0sT0FBTyxFQUFFLENBQUMsQ0FBQztNQUN4QyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLEVBQUUsTUFBTSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0tBQzNDOzs7SUFHRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLENBQUM7O0lBRWxELE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDOzs7SUFHdEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxRQUFRLEVBQUU7TUFDL0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7O01BRXBDLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtRQUNuQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQzs7UUFFekMsTUFBTSxTQUFTLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7O1FBRTlDLE1BQU0sY0FBYyxHQUFHLE1BQU07V0FDMUIsU0FBUyxDQUFDLE1BQU0sQ0FBQztXQUNqQixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDcEMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQy9CLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEMsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEtBQUs7VUFDakQsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ2xDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDUCxNQUFNLGFBQWEsR0FBRyxNQUFNO1dBQ3pCLFNBQVMsQ0FBQyxNQUFNLENBQUM7V0FDakIsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN4RSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSTtVQUNwQixJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFO1lBQzFCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ3JELGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFO2NBQy9DLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2FBQy9DLENBQUM7V0FDSCxNQUFNLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7WUFDNUIsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO2NBQ3RCLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2FBQzNDLENBQUM7V0FDSCxNQUFNO1lBQ0wsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUU7Y0FDdkMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7YUFDM0MsQ0FBQztXQUNIO1NBQ0YsQ0FBQyxDQUFDOztRQUVILE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDckQsTUFBTSxPQUFPLEdBQUcscUJBQXFCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvRCxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSTtVQUNwQixJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFO1lBQ3JCLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUk7Y0FDM0IsT0FBTyxVQUFVLENBQUMseUJBQXlCLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzlELENBQUMsQ0FBQztXQUNKLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtZQUM1QixNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsRUFBRTtjQUMvQixNQUFNLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyx5QkFBeUI7Z0JBQzNELENBQUM7Z0JBQ0QsU0FBUztlQUNWLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDTCxPQUFPLFNBQVMsQ0FBQyxFQUFFO2dCQUNqQixJQUFJLENBQUMsU0FBUyxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO2VBQ3RDLENBQUM7YUFDSCxDQUFDLENBQUM7V0FDSixNQUFNLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUU7WUFDN0IsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSTtjQUN0QyxPQUFPLFVBQVUsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDOUQsQ0FBQyxDQUFDO1dBQ0o7U0FDRixDQUFDLENBQUM7OztRQUdILE1BQU07V0FDSCxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7V0FDdkMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1dBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUM7V0FDWixHQUFHLEVBQUU7V0FDTCxJQUFJLENBQUMsTUFBTTtZQUNWLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNO2NBQzNCLE9BQU8sRUFBRSxDQUFDO2FBQ1gsQ0FBQyxDQUFDO1dBQ0osQ0FBQyxDQUFDO09BQ04sTUFBTTtRQUNMLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFDckMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFDcEMsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sT0FBTyxHQUFHLGFBQWE7VUFDM0IsUUFBUTtVQUNSLE9BQU87VUFDUCxJQUFJLENBQUMsTUFBTTtVQUNYLE9BQU87VUFDUCxPQUFPO1NBQ1IsQ0FBQztRQUNGLE1BQU0sUUFBUSxHQUFHSixLQUFRLEVBQUUsQ0FBQztRQUM1QixNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1VBQ3RCLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3ZCLENBQUMsQ0FBQztRQUNILE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O1FBRS9DLElBQUksV0FBVyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEQsZUFBZTtVQUNiLFdBQVc7VUFDWCxXQUFXO1VBQ1gsSUFBSSxDQUFDLG1CQUFtQjtjQUNwQixFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFO2NBQ3BELEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUU7VUFDeEQsT0FBTyxDQUFDLE9BQU87VUFDZixPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUs7U0FDdEIsQ0FBQzs7OztRQUlGLElBQUksV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7VUFDbEMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxPQUFPLENBQUMsQ0FBQztTQUMxRDs7UUFFRCxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDN0MsZUFBZTtVQUNiLFdBQVc7VUFDWCxXQUFXO1VBQ1gsTUFBTSxDQUFDLEtBQUs7VUFDWixPQUFPLENBQUMsS0FBSztVQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSztTQUNwQixDQUFDO1FBQ0YsV0FBVztXQUNSLFFBQVE7WUFDUCxDQUFDLENBQUMsRUFBRSxDQUFDO2NBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVE7V0FDOUQ7V0FDQSxLQUFLO1lBQ0osQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLO1dBQ25FO1dBQ0EsSUFBSSxDQUFDLE1BQU0sQ0FBQztXQUNaLEdBQUcsRUFBRTtXQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsTUFBTSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7OztRQUduRCxJQUFJLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDL0IsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtVQUNqQyxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxDQUFDO1NBQ3hEOztRQUVELE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMzQyxlQUFlO1VBQ2IsVUFBVTtVQUNWLFdBQVc7VUFDWCxJQUFJLENBQUMsbUJBQW1CO2NBQ3BCLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUU7Y0FDcEQsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRTtVQUN4RCxPQUFPLENBQUMsS0FBSztVQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSTtVQUNsQixRQUFRO1NBQ1QsQ0FBQztRQUNGLFVBQVU7V0FDUCxRQUFRO1lBQ1AsQ0FBQyxDQUFDLEVBQUUsQ0FBQztjQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRO1dBQ2hFO1dBQ0EsS0FBSztZQUNKLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSztXQUNyRTtXQUNBLElBQUksQ0FBQyxNQUFNLENBQUM7V0FDWixNQUFNLEVBQUU7V0FDUixHQUFHLEVBQUU7V0FDTCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxFQUFFLE1BQU0sT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDOzs7UUFHbEQsSUFBSSxBQUFPLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7VUFDcEMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQzs7VUFFbEUsZUFBZTtZQUNiLE1BQU07WUFDTixXQUFXO1lBQ1gsTUFBTSxDQUFDLEtBQUs7WUFDWixPQUFPLENBQUMsS0FBSztZQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTTtZQUNwQixRQUFRO1dBQ1QsQ0FBQzs7VUFFRixNQUFNO2FBQ0gsUUFBUTtjQUNQLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRO2FBQzdEO2FBQ0EsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7YUFDaEUsSUFBSSxDQUFDLE1BQU0sQ0FBQzthQUNaLEdBQUcsRUFBRTthQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLEVBQUUsTUFBTSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDckQsTUFBTTtVQUNMLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsRUFBRSxNQUFNLE9BQU8sRUFBRSxDQUFDLENBQUM7U0FDNUM7T0FDRjtLQUNGLE1BQU07TUFDTCxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsTUFBTSxPQUFPLEVBQUUsQ0FBQyxDQUFDO01BQzFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRSxNQUFNLE9BQU8sRUFBRSxDQUFDLENBQUM7TUFDekMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxFQUFFLE1BQU0sT0FBTyxFQUFFLENBQUMsQ0FBQztLQUM1Qzs7O0lBR0QsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzlDLE1BQU0sVUFBVSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7O0lBRTVCO01BQ0UsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxLQUFLO01BQzNELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSztNQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSTtNQUMvQjs7TUFFQSxLQUFLLEdBQUcsSUFBSTtTQUNULE1BQU0sQ0FBQyxHQUFHLENBQUM7U0FDWCxNQUFNLENBQUMsR0FBRyxDQUFDO1NBQ1gsTUFBTSxDQUFDLEdBQUcsQ0FBQztTQUNYLElBQUksQ0FBQyxPQUFPLEVBQUUsMEJBQTBCLENBQUMsQ0FBQztLQUM5QztJQUNELElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksTUFBTSxFQUFFO01BQzVCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDOztNQUVsQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7UUFDbkIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7O1FBRXhDLE1BQU0sU0FBUyxHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDOzs7UUFHOUMsTUFBTSxhQUFhLEdBQUcsS0FBSztXQUN4QixTQUFTLENBQUMsTUFBTSxDQUFDO1dBQ2pCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNwQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDOUIsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQyxNQUFNLFlBQVksR0FBRyxLQUFLO1dBQ3ZCLFNBQVMsQ0FBQyxNQUFNLENBQUM7V0FDakIsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzs7UUFFeEUsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEtBQUs7VUFDaEQsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ2xDLEVBQUUsRUFBRSxDQUFDLENBQUM7O1FBRVAsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUk7VUFDcEIsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRTtZQUMxQixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUNyRCxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRTtjQUM5QyxVQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQzthQUMvQyxDQUFDO1dBQ0gsTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFO1lBQzVCLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtjQUNyQixVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQzthQUMzQyxDQUFDO1dBQ0gsTUFBTTtZQUNMLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFO2NBQ3RDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2FBQzNDLENBQUM7V0FDSDtTQUNGLENBQUMsQ0FBQzs7UUFFSCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ25ELE1BQU0sT0FBTyxHQUFHLHFCQUFxQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7O1FBRS9ELFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJO1VBQ3BCLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7WUFDckIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSTtjQUMxQixPQUFPLFVBQVUsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDOUQsQ0FBQyxDQUFDO1dBQ0osTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFO1lBQzVCLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxFQUFFO2NBQzlCLE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLHlCQUF5QjtnQkFDM0QsQ0FBQztnQkFDRCxTQUFTO2VBQ1YsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUNMLE9BQU8sU0FBUyxDQUFDLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7ZUFDdEMsQ0FBQzthQUNILENBQUMsQ0FBQztXQUNKLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTtZQUM3QixLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJO2NBQ3JDLE9BQU8sVUFBVSxDQUFDLHlCQUF5QixDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUM5RCxDQUFDLENBQUM7V0FDSjtTQUNGLENBQUMsQ0FBQzs7O1FBR0gsS0FBSztXQUNGLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztXQUN2QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7V0FDakMsSUFBSSxDQUFDLE1BQU0sQ0FBQztXQUNaLEdBQUcsRUFBRTtXQUNMLElBQUksQ0FBQyxNQUFNO1lBQ1YsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU07Y0FDMUIsT0FBTyxFQUFFLENBQUM7YUFDWCxDQUFDLENBQUM7V0FDSixDQUFDLENBQUM7T0FDTixNQUFNO1FBQ0wsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztRQUNwQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztRQUNuQyxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkMsTUFBTSxPQUFPLEdBQUcsYUFBYTtVQUMzQixRQUFRO1VBQ1IsT0FBTztVQUNQLElBQUksQ0FBQyxNQUFNO1VBQ1gsT0FBTztVQUNQLE9BQU87U0FDUixDQUFDO1FBQ0YsTUFBTSxRQUFRLEdBQUdBLEtBQVEsRUFBRSxDQUFDO1FBQzVCLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUU7VUFDckIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDdkIsQ0FBQyxDQUFDO1FBQ0gsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QyxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlDLGVBQWU7VUFDYixVQUFVO1VBQ1YsVUFBVTs7VUFFVixJQUFJLENBQUMsbUJBQW1CO2NBQ3BCLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUU7Y0FDcEQsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRTtVQUN4RCxPQUFPLENBQUMsT0FBTztVQUNmLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSztTQUN0QixDQUFDOztRQUVGLElBQUksVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7VUFDakMsVUFBVSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxPQUFPLENBQUMsQ0FBQztTQUN4RDs7UUFFRCxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDM0MsZUFBZTtVQUNiLFVBQVU7VUFDVixVQUFVO1VBQ1YsTUFBTSxDQUFDLEtBQUs7VUFDWixPQUFPLENBQUMsS0FBSztVQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSztTQUNwQixDQUFDO1FBQ0YsVUFBVTtXQUNQLFFBQVE7WUFDUCxDQUFDLENBQUMsRUFBRSxDQUFDO2NBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVE7V0FDOUQ7V0FDQSxLQUFLO1lBQ0osQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLO1dBQ25FO1dBQ0EsSUFBSSxDQUFDLE1BQU0sQ0FBQztXQUNaLEdBQUcsRUFBRTtXQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsTUFBTSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7O1FBRWxELElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM3QixJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO1VBQ2hDLFNBQVMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUM7U0FDdEQ7O1FBRUQsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDOztRQUV6QyxlQUFlO1VBQ2IsU0FBUztVQUNULFVBQVU7VUFDVixJQUFJLENBQUMsbUJBQW1CO2NBQ3BCLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUU7Y0FDcEQsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRTs7VUFFeEQsT0FBTyxDQUFDLEtBQUs7VUFDYixPQUFPLENBQUMsS0FBSyxDQUFDLElBQUk7VUFDbEIsUUFBUTtTQUNULENBQUM7UUFDRixTQUFTO1dBQ04sUUFBUTtZQUNQLENBQUMsQ0FBQyxFQUFFLENBQUM7Y0FDSCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUTtXQUNoRTtXQUNBLEtBQUs7WUFDSixDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUs7V0FDckU7V0FDQSxJQUFJLENBQUMsTUFBTSxDQUFDO1dBQ1osTUFBTSxFQUFFO1dBQ1IsR0FBRyxFQUFFO1dBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRSxNQUFNLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQzs7UUFFakQsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQzs7UUFFaEUsZUFBZTtVQUNiLEtBQUs7VUFDTCxVQUFVO1VBQ1YsTUFBTSxDQUFDLEtBQUs7VUFDWixPQUFPLENBQUMsS0FBSztVQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTTtVQUNwQixRQUFRO1NBQ1QsQ0FBQzs7UUFFRixLQUFLO1dBQ0YsUUFBUTtZQUNQLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRO1dBQzdEO1dBQ0EsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7V0FDaEUsSUFBSSxDQUFDLE1BQU0sQ0FBQztXQUNaLEdBQUcsRUFBRTtXQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLEVBQUUsTUFBTSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7T0FDcEQ7S0FDRixNQUFNO01BQ0wsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxFQUFFLE1BQU0sT0FBTyxFQUFFLENBQUMsQ0FBQztNQUN6QyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUUsTUFBTSxPQUFPLEVBQUUsQ0FBQyxDQUFDO01BQ3hDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsRUFBRSxNQUFNLE9BQU8sRUFBRSxDQUFDLENBQUM7S0FDM0M7O0lBRUQsTUFBTSxXQUFXLEdBQUcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ2xELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksT0FBTyxFQUFFOzs7TUFHOUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7TUFDbkMsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQzs7TUFFckMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO01BQzNCLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztNQUNmLElBQUksQ0FBQyxRQUFRLEVBQUU7O1FBRWIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUU7VUFDL0IsS0FBSyxHQUFHLEtBQUssQ0FBQztTQUNmLE1BQU07VUFDTCxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTTtZQUM5RCxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxZQUFZO1dBQ25DLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1NBQ1o7T0FDRjs7TUFFRCxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO01BQy9CLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ3ZDLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7O01BRWpELGVBQWU7UUFDYixXQUFXO1FBQ1gsV0FBVztRQUNYLEVBQUU7UUFDRixPQUFPLENBQUMsT0FBTztRQUNmLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSztPQUN0QixDQUFDOztNQUVGLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztNQUM3QyxlQUFlO1FBQ2IsV0FBVztRQUNYLFdBQVc7UUFDWCxFQUFFO1FBQ0YsT0FBTyxDQUFDLEtBQUs7UUFDYixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUs7T0FDcEIsQ0FBQztNQUNGLFdBQVc7U0FDUixRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUN2QixLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztTQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDO1NBQ1osR0FBRyxFQUFFO1NBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxNQUFNLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQzs7TUFFbkQsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO01BQ2hDLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztNQUMzQyxlQUFlO1FBQ2IsVUFBVTtRQUNWLFdBQVc7UUFDWCxFQUFFO1FBQ0YsT0FBTyxDQUFDLEtBQUs7UUFDYixPQUFPLENBQUMsS0FBSyxDQUFDLElBQUk7T0FDbkIsQ0FBQztNQUNGLFVBQVU7U0FDUCxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUN2QixLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztTQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDO1NBQ1osR0FBRyxFQUFFO1NBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRSxNQUFNLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQzs7TUFFbEQsS0FBSyxHQUFHLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQzs7TUFFM0IsZUFBZTtRQUNiLEtBQUs7UUFDTCxXQUFXO1FBQ1gsRUFBRTtRQUNGLE9BQU8sQ0FBQyxLQUFLO1FBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNO09BQ3JCLENBQUM7O01BRUYsS0FBSztTQUNGLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQ3ZCLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1NBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUM7U0FDWixHQUFHLEVBQUU7U0FDTCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxFQUFFLE1BQU0sT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ3JELE1BQU07TUFDTCxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsTUFBTSxPQUFPLEVBQUUsQ0FBQyxDQUFDO01BQzFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRSxNQUFNLE9BQU8sRUFBRSxDQUFDLENBQUM7TUFDekMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxFQUFFLE1BQU0sT0FBTyxFQUFFLENBQUMsQ0FBQztLQUM1Qzs7O0lBR0QsTUFBTSxZQUFZLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQzs7SUFFaEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3BELElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksUUFBUSxFQUFFO01BQ2hDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO01BQ3BDLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztNQUNmLElBQUksQ0FBQyxRQUFRLEVBQUU7UUFDYixLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTTtVQUM5RCxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxhQUFhO1NBQ3BDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO09BQ1o7TUFDRCxJQUFJLE1BQU0sR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzs7TUFFbkQsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUNuRCxlQUFlO1FBQ2IsWUFBWTtRQUNaLFlBQVk7UUFDWixFQUFFO1FBQ0YsT0FBTyxDQUFDLE9BQU87UUFDZixPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUs7T0FDdEIsQ0FBQztNQUNGLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztNQUMvQyxlQUFlO1FBQ2IsWUFBWTtRQUNaLFlBQVk7UUFDWixFQUFFO1FBQ0YsT0FBTyxDQUFDLEtBQUs7UUFDYixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUs7T0FDcEIsQ0FBQztNQUNGLFlBQVk7U0FDVCxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUN2QixLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztTQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDO1NBQ1osR0FBRyxFQUFFO1NBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxNQUFNLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQzs7TUFFcEQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO01BQ2xDLGVBQWU7UUFDYixXQUFXO1FBQ1gsWUFBWTtRQUNaLEVBQUU7UUFDRixPQUFPLENBQUMsT0FBTztRQUNmLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSTtPQUNyQixDQUFDO01BQ0YsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDO01BQzdDLGVBQWU7UUFDYixXQUFXO1FBQ1gsWUFBWTtRQUNaLEVBQUU7UUFDRixPQUFPLENBQUMsS0FBSztRQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSTtPQUNuQixDQUFDO01BQ0YsV0FBVztTQUNSLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQ3ZCLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1NBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUM7U0FDWixHQUFHLEVBQUU7U0FDTCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLE1BQU0sT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDOzs7O01BSW5ELGVBQWU7UUFDYixNQUFNO1FBQ04sWUFBWTtRQUNaLE1BQU0sQ0FBQyxPQUFPO1FBQ2QsT0FBTyxDQUFDLE9BQU87UUFDZixPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU07T0FDdkIsQ0FBQztNQUNGLE1BQU0sR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7O01BRTdCLGVBQWU7UUFDYixNQUFNO1FBQ04sWUFBWTtRQUNaLE1BQU0sQ0FBQyxLQUFLO1FBQ1osT0FBTyxDQUFDLEtBQUs7UUFDYixPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU07T0FDckIsQ0FBQzs7TUFFRixNQUFNO1NBQ0gsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDdkIsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7U0FDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUNaLEdBQUcsRUFBRTtTQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLEVBQUUsTUFBTSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDdEQsTUFBTTtNQUNMLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxNQUFNLE9BQU8sRUFBRSxDQUFDLENBQUM7TUFDM0MsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLE1BQU0sT0FBTyxFQUFFLENBQUMsQ0FBQztNQUMxQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLEVBQUUsTUFBTSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0tBQzdDO0dBQ0YsQ0FBQyxDQUFDO0NBQ0o7O0FDditCRCxNQUFNLGVBQWUsR0FBRztFQUN0QixNQUFNO0VBQ04sU0FBUztFQUNULE9BQU87RUFDUCxNQUFNO0VBQ04sUUFBUTtFQUNSLFlBQVk7RUFDWixhQUFhO0NBQ2QsQ0FBQztBQUNGLE1BQU1RLGdCQUFjLEdBQUc7RUFDckIsTUFBTSxFQUFFLEtBQUs7RUFDYixLQUFLLEVBQUUsS0FBSztFQUNaLElBQUksRUFBRSxLQUFLO0NBQ1osQ0FBQzs7QUFFRixTQUFTRCxXQUFTLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUU7RUFDckQsTUFBTSxnQkFBZ0IsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksS0FBSztJQUMzRCxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDQyxnQkFBYyxDQUFDLENBQUM7SUFDakMsT0FBTyxHQUFHLENBQUM7R0FDWixFQUFFLEVBQUUsQ0FBQyxDQUFDOztFQUVQLE9BQU8sU0FBUyxLQUFLLEVBQUUsRUFBRSxFQUFFO0lBQ3pCLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7TUFDdEIsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFO1FBQ3RCLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxnQkFBZ0I7VUFDbEQsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUNULENBQUMsS0FBSyxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7T0FDbEQsTUFBTTtRQUNMLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztPQUM3QztLQUNGLE1BQU0sSUFBSSxLQUFLLEtBQUssS0FBSyxFQUFFO01BQzFCLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztLQUNqRixNQUFNO01BQ0wsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDO0tBQ2hDOztJQUVELE1BQU0sT0FBTztNQUNYLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxNQUFNO1FBQ2pFLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSztVQUNaO1lBQ0UsR0FBRztZQUNILGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU07WUFDNUIsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSztZQUMzQixnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJO1lBQzFCO1NBQ0g7UUFDRCxJQUFJO09BQ0w7TUFDRCxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsTUFBTTtRQUNsRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUs7VUFDWjtZQUNFLEdBQUc7WUFDSCxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNO1lBQzVCLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUs7WUFDM0IsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSTtZQUMxQjtTQUNIO1FBQ0QsSUFBSTtPQUNMLENBQUM7SUFDSixJQUFJLE9BQU8sRUFBRTtNQUNYLElBQUksV0FBVyxDQUFDLEtBQUssRUFBRTtRQUNyQixJQUFJLFdBQVcsQ0FBQyxLQUFLLEtBQUssVUFBVSxFQUFFO1VBQ3BDLE1BQU0sQ0FBQyxTQUFTLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNyRCxNQUFNO1VBQ0wsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1VBQzNELE1BQU07YUFDSCxNQUFNLENBQUMsMkRBQTJELENBQUM7YUFDbkUsTUFBTSxFQUFFLENBQUM7VUFDWixNQUFNLENBQUMsTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7VUFDdEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQzNEO09BQ0Y7TUFDRCxFQUFFLEVBQUUsQ0FBQztLQUNOO0dBQ0YsQ0FBQztDQUNIOztBQUVELFNBQVMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7RUFDbkQsU0FBUyxVQUFVLENBQUMsT0FBTyxFQUFFO0lBQzNCLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLGNBQWMsR0FBRyxTQUFTLEtBQUs7TUFDM0MsSUFBSSxDQUFDLENBQUMsRUFBRTtRQUNOLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO09BQ3JCO01BQ0QsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUU7UUFDakIsT0FBTyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEtBQUssVUFBVTtZQUNyRCxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7O09BRXhEO01BQ0QsT0FBTyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7S0FDM0MsQ0FBQztHQUNIO0VBQ0QsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLO0lBQ3hCLE9BQU8sQ0FBQyxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLEdBQUcsU0FBUyxDQUFDO0dBQ3RFLENBQUM7RUFDRixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzs7RUFFaEMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sS0FBSzs7O0lBRzlCLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDeEIsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7O0lBRTNDLElBQUksT0FBTyxDQUFDO0lBQ1osSUFBSSxTQUFTLENBQUM7SUFDZCxJQUFJLFFBQVEsQ0FBQztJQUNiLElBQUksVUFBVSxDQUFDOztJQUVmLE9BQU8sR0FBRyxTQUFTLEdBQUcsUUFBUSxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUM7O0lBRW5ELElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxLQUFLLEVBQUU7TUFDM0IsT0FBTyxHQUFHLFNBQVMsR0FBRyxRQUFRLEdBQUcsVUFBVSxHQUFHLEtBQUssQ0FBQztLQUNyRCxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRTtNQUN4QixPQUFPLEdBQUcsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsQ0FBQztNQUMzQyxTQUFTLEdBQUcsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sS0FBSyxLQUFLLENBQUMsQ0FBQztNQUMvQyxRQUFRLEdBQUcsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsQ0FBQztNQUM3QyxVQUFVLEdBQUcsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsS0FBSyxLQUFLLENBQUMsQ0FBQztLQUNsRDs7SUFFRCxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQzFCLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDdkIsSUFBSSxNQUFNLEdBQUd4QixNQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RSxNQUFNLElBQUksR0FBR3VCLFdBQVM7TUFDcEI7UUFDRSxTQUFTO1FBQ1QsT0FBTztRQUNQLFFBQVE7UUFDUixVQUFVO1FBQ1YsU0FBUztRQUNULFFBQVE7UUFDUixPQUFPO1FBQ1AsT0FBTztPQUNSO01BQ0QsSUFBSSxDQUFDLFdBQVc7TUFDaEIsTUFBTTtLQUNQLENBQUM7SUFDRixNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsTUFBTSxDQUFDOztJQUU1QixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3hCLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDekIsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQztJQUN6QixNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDOzs7SUFHN0IsSUFBSSxLQUFLLEVBQUU7TUFDVCxNQUFNLFFBQVEsR0FBR3ZCLE1BQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQztNQUNqRSxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDO01BQzFDLE1BQU0sR0FBRyxHQUFHLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7TUFDekQsU0FBUztRQUNQLFFBQVE7UUFDUixRQUFRLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pELEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxTQUFTO09BQ2pDLENBQUM7TUFDRixNQUFNLEdBQUdvQixTQUFZLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7TUFFdEUsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU0sT0FBTyxFQUFFLENBQUMsQ0FBQztNQUN6QyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0tBQzNDLE1BQU0sSUFBSSxRQUFRLEVBQUU7TUFDbkIsTUFBTSxZQUFZO1FBQ2hCLE1BQU0sQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztNQUN6RSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ25DLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztNQUN0QyxlQUFlO1FBQ2IsUUFBUTtRQUNSLENBQUMsT0FBTyxDQUFDO1FBQ1QsTUFBTSxDQUFDLEtBQUs7UUFDWixPQUFPLENBQUMsS0FBSztRQUNiLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDO09BQ2hFLENBQUM7TUFDRixRQUFRO1NBQ0wsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDdkIsR0FBRyxFQUFFO1NBQ0wsSUFBSSxDQUFDLE1BQU07VUFDVixJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1VBQ3pDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLE9BQU8sRUFBRSxDQUFDLENBQUM7U0FDM0MsQ0FBQyxDQUFDO0tBQ04sTUFBTTs7TUFFTCxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3RFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNaLE1BQU0sTUFBTSxHQUFHO1FBQ2IsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUU7UUFDeEIsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUU7T0FDekIsQ0FBQzs7TUFFRixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ25DLE1BQU0sS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztNQUNwRSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO01BQ3BCLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztNQUN0QyxlQUFlO1FBQ2IsUUFBUTtRQUNSLENBQUMsT0FBTyxDQUFDO1FBQ1QsTUFBTSxDQUFDLEtBQUs7UUFDWixPQUFPLENBQUMsS0FBSztRQUNiLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUM7T0FDdEQsQ0FBQztNQUNGLFFBQVE7U0FDTCxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUN2QixHQUFHLEVBQUU7U0FDTCxJQUFJLENBQUMsTUFBTTtVQUNWLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLE9BQU8sRUFBRSxDQUFDLENBQUM7VUFDekMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU0sT0FBTyxFQUFFLENBQUMsQ0FBQztTQUMzQyxDQUFDLENBQUM7S0FDTjs7SUFFRCxNQUFNLE9BQU8sR0FBRztNQUNkLE9BQU8sRUFBRSxFQUFFO01BQ1gsS0FBSyxFQUFFLEVBQUU7S0FDVixDQUFDO0lBQ0YsZUFBZSxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUk7TUFDakMsSUFBSSxNQUFNLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDN0MsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO09BQy9DO01BQ0QsSUFBSSxNQUFNLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDekMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO09BQzNDO0tBQ0YsQ0FBQyxDQUFDOztJQUVILElBQUksZUFBZSxHQUFHLEVBQUUsQ0FBQztJQUN6QixJQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssRUFBRTtNQUNsQyxlQUFlLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztLQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUU7TUFDdEMsZUFBZSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7S0FDaEMsTUFBTSxJQUFJLE9BQU8sTUFBTSxDQUFDLEtBQUssS0FBSyxRQUFRLEVBQUU7TUFDM0MsZUFBZSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU07UUFDaEQsTUFBTSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO09BQy9CLENBQUM7S0FDSDs7SUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7TUFDbkIsSUFBSSxXQUFXLENBQUMsT0FBTyxLQUFLLFdBQVcsQ0FBQyxLQUFLLEVBQUU7UUFDN0MsT0FBTyxDQUFDLEtBQUssQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO09BQ2xFO01BQ0QsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLE9BQU8sSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDO01BQ3pELElBQUksUUFBUSxDQUFDO01BQ2IsSUFBSSxPQUFPLEtBQUssUUFBUSxFQUFFO1FBQ3hCLE1BQU0sS0FBSyxHQUFHLE1BQU07V0FDakIsTUFBTSxDQUFDLGdDQUFnQyxDQUFDO1dBQ3hDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQztXQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMvQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdEIsTUFBTSxjQUFjLEdBQUcsS0FBSztXQUN6QixLQUFLLEVBQUU7V0FDUCxNQUFNLENBQUMsR0FBRyxDQUFDO1dBQ1gsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsY0FBYztXQUNYLE1BQU0sQ0FBQyxHQUFHLENBQUM7V0FDWCxJQUFJLENBQUMsT0FBTyxFQUFFLGdDQUFnQyxDQUFDO1dBQy9DLE1BQU0sQ0FBQyxNQUFNLENBQUM7V0FDZCxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELGNBQWM7V0FDWCxNQUFNLENBQUMsR0FBRyxDQUFDO1dBQ1gsSUFBSSxDQUFDLE9BQU8sRUFBRSw2QkFBNkIsQ0FBQztXQUM1QyxNQUFNLENBQUMsTUFBTSxDQUFDO1dBQ2QsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7UUFFdEQsUUFBUSxHQUFHO1VBQ1Q7WUFDRSxJQUFJLEVBQUUsT0FBTztZQUNiLFNBQVMsRUFBRSxNQUFNO2VBQ2QsTUFBTSxDQUFDLGdDQUFnQyxDQUFDO2VBQ3hDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQztZQUMvQixLQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUM7V0FDakI7VUFDRDtZQUNFLElBQUksRUFBRSxTQUFTO1lBQ2YsU0FBUyxFQUFFLE1BQU07ZUFDZCxNQUFNLENBQUMsZ0NBQWdDLENBQUM7ZUFDeEMsU0FBUyxDQUFDLDRCQUE0QixDQUFDO1lBQzFDLEtBQUssRUFBRSxDQUFDLFFBQVEsQ0FBQztXQUNsQjtVQUNEO1lBQ0UsSUFBSSxFQUFFLFFBQVE7WUFDZCxTQUFTLEVBQUUsTUFBTTtlQUNkLE1BQU0sQ0FBQyxnQ0FBZ0MsQ0FBQztlQUN4QyxTQUFTLENBQUMsMkJBQTJCLENBQUM7WUFDekMsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDO1dBQ2hCO1NBQ0YsQ0FBQztPQUNILE1BQU07O1FBRUwsTUFBTSxTQUFTLEdBQUcsTUFBTTtXQUNyQixNQUFNLENBQUMsb0JBQW9CLENBQUM7V0FDNUIsU0FBUyxDQUFDLE1BQU0sQ0FBQztXQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNoRCxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDMUIsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQzs7UUFFakMsUUFBUSxHQUFHO1VBQ1Q7WUFDRSxJQUFJLEVBQUUsUUFBUTtZQUNkLFNBQVMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztZQUNoRSxVQUFVLEVBQUUsTUFBTTtZQUNsQixLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUM7V0FDaEI7U0FDRixDQUFDO1FBQ0YsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7VUFDOUIsTUFBTSxTQUFTLEdBQUcsTUFBTTthQUNyQixNQUFNLENBQUMsb0JBQW9CLENBQUM7YUFDNUIsU0FBUyxDQUFDLE1BQU0sQ0FBQzthQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztVQUMvQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7VUFDMUIsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQzs7VUFFakMsUUFBUSxDQUFDLElBQUksQ0FBQztZQUNaLElBQUksRUFBRSxPQUFPO1lBQ2IsU0FBUyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO1lBQ2hFLFVBQVUsRUFBRSxNQUFNO1lBQ2xCLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQztXQUNoQixDQUFDLENBQUM7U0FDSixNQUFNO1VBQ0wsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU07WUFDM0IsT0FBTyxFQUFFLENBQUM7V0FDWCxDQUFDLENBQUM7U0FDSjtRQUNELElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNO1VBQzlCLE9BQU8sRUFBRSxDQUFDO1NBQ1gsQ0FBQyxDQUFDO09BQ0o7O01BRUQsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUk7UUFDMUIsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4RCxNQUFNLFNBQVMsR0FBRyxrQkFBa0I7VUFDbEMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7VUFDckIsTUFBTTtVQUNOLE9BQU87VUFDUCxZQUFZO1VBQ1osZUFBZTtTQUNoQixDQUFDO1FBQ0YsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxLQUFLO1VBQ25ELE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUNsQyxFQUFFLEVBQUUsQ0FBQyxDQUFDOztRQUVQLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTTtVQUN2QyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1NBQ3BFLENBQUM7UUFDRixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSTtVQUNwQixJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFO1lBQzFCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ3JELFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFO2NBQzFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7YUFDdEQsQ0FBQztXQUNILE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtZQUM1QixRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7Y0FDakIsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQzthQUNsRCxDQUFDO1dBQ0gsTUFBTTtZQUNMLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFO2NBQ2xDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7YUFDbEQsQ0FBQztXQUNIO1NBQ0YsQ0FBQyxDQUFDOztRQUVILE1BQU0saUJBQWlCLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN6RCxNQUFNLE9BQU8sR0FBRyxxQkFBcUIsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUk7VUFDcEIsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtZQUNyQixpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUk7Y0FDdEMsT0FBTyxpQkFBaUIsQ0FBQyx5QkFBeUI7Z0JBQ2hELENBQUM7Z0JBQ0QsU0FBUztlQUNWLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDTixDQUFDLENBQUM7V0FDSixNQUFNLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUU7WUFDakMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLEVBQUU7Y0FDN0MsT0FBTyxpQkFBaUIsQ0FBQyx5QkFBeUI7Z0JBQ2hELENBQUM7Z0JBQ0QsU0FBUztnQkFDVCxJQUFJO2VBQ0wsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNOLENBQUMsQ0FBQztXQUNKLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtZQUM1QixpQkFBaUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxFQUFFO2NBQzFDLE1BQU0sZ0JBQWdCLEdBQUcsaUJBQWlCLENBQUMseUJBQXlCO2dCQUNsRSxDQUFDO2dCQUNELFNBQVM7ZUFDVixDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ0wsT0FBTyxTQUFTLENBQUMsRUFBRTtnQkFDakIsSUFBSSxDQUFDLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztlQUN0QyxDQUFDO2FBQ0gsQ0FBQyxDQUFDO1dBQ0osTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFO1lBQzdCLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSTtjQUNqRCxPQUFPLGlCQUFpQixDQUFDLHlCQUF5QjtnQkFDaEQsQ0FBQztnQkFDRCxTQUFTO2VBQ1YsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNOLENBQUMsQ0FBQztXQUNKO1NBQ0YsQ0FBQyxDQUFDOzs7UUFHSCxpQkFBaUI7V0FDZCxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7V0FDdkMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1dBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUM7V0FDWixHQUFHLEVBQUU7V0FDTCxJQUFJLENBQUMsTUFBTTtZQUNWLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTTtjQUNoQyxPQUFPLEVBQUUsQ0FBQzthQUNYLENBQUMsQ0FBQztXQUNKLENBQUMsQ0FBQztPQUNOLENBQUMsQ0FBQztLQUNKLE1BQU07TUFDTDtRQUNFLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7U0FDOUQsU0FBUyxJQUFJLFFBQVEsQ0FBQztRQUN2QjtRQUNBLElBQUksV0FBVyxDQUFDLE9BQU8sS0FBSyxRQUFRLEVBQUU7O1VBRXBDLE1BQU07YUFDSCxNQUFNLENBQUMsNkJBQTZCLENBQUM7YUFDckMsTUFBTSxDQUFDLEdBQUcsQ0FBQzthQUNYLElBQUksQ0FBQyxPQUFPLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztTQUMzQzs7UUFFRCxJQUFJLEtBQUssR0FBRyxNQUFNO1dBQ2YsTUFBTSxDQUFDLGdDQUFnQyxDQUFDO1dBQ3hDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDOztRQUVoQyxNQUFNLE9BQU8sR0FBRztVQUNkLEtBQUssRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDO1VBQzFCLE9BQU8sRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDO1VBQzlCLE1BQU0sRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1NBQzdCLENBQUM7UUFDRixNQUFNLGNBQWM7VUFDbEIsV0FBVyxDQUFDLEtBQUssS0FBSyxRQUFRLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQzdELE1BQU0sY0FBYztVQUNsQixXQUFXLENBQUMsT0FBTyxLQUFLLFFBQVEsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDL0QsTUFBTSxPQUFPLEdBQUc7VUFDZCxLQUFLLEVBQUUsYUFBYTtZQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUs7WUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLO1lBQ25CLElBQUksQ0FBQyxNQUFNO1lBQ1gsT0FBTyxDQUFDLEtBQUs7WUFDYixPQUFPO1dBQ1I7VUFDRCxPQUFPLEVBQUUsYUFBYTtZQUNwQixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU87WUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPO1lBQ3JCLElBQUksQ0FBQyxNQUFNO1lBQ1gsT0FBTyxDQUFDLE9BQU87WUFDZixPQUFPO1dBQ1I7VUFDRCxNQUFNLEVBQUUsYUFBYTtZQUNuQixjQUFjO1lBQ2QsY0FBYztZQUNkLElBQUksQ0FBQyxNQUFNO1lBQ1gsT0FBTyxDQUFDLE1BQU07WUFDZCxPQUFPO1dBQ1I7U0FDRixDQUFDOztRQUVGLE1BQU0sUUFBUSxHQUFHSixLQUFRLEVBQUUsQ0FBQzs7UUFFNUIsS0FBSyxDQUFDLFNBQVMsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtVQUM3RCxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztTQUN2QixDQUFDLENBQUM7O1FBRUgsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7UUFFL0QsSUFBSSxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtVQUNoRCxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1VBQzVDLE1BQU0sZUFBZSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7VUFDaEQsSUFBSSxhQUFhLEdBQUcsZUFBZTthQUNoQyxNQUFNLENBQUMsR0FBRyxDQUFDO2FBQ1gsSUFBSSxDQUFDLE9BQU8sRUFBRSxnQ0FBZ0MsQ0FBQzthQUMvQyxNQUFNLENBQUMsTUFBTSxDQUFDO2FBQ2QsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQzdDLElBQUksWUFBWSxHQUFHLGVBQWU7YUFDL0IsTUFBTSxDQUFDLEdBQUcsQ0FBQzthQUNYLElBQUksQ0FBQyxPQUFPLEVBQUUsNkJBQTZCLENBQUM7YUFDNUMsTUFBTSxDQUFDLE1BQU0sQ0FBQzthQUNkLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7VUFFNUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLG1CQUFtQjtjQUN6QyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFO2NBQ3BELEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQzs7VUFFekQsZUFBZTtZQUNiLFdBQVc7WUFDWCxDQUFDLE9BQU8sQ0FBQztZQUNULFlBQVk7WUFDWixPQUFPLENBQUMsT0FBTztZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUs7V0FDNUIsQ0FBQzs7VUFFRixlQUFlO1lBQ2IsYUFBYTtZQUNiLENBQUMsUUFBUSxDQUFDO1lBQ1YsWUFBWTtZQUNaLE9BQU8sQ0FBQyxPQUFPO1lBQ2YsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSztXQUM5QixDQUFDOztVQUVGLGVBQWU7WUFDYixZQUFZO1lBQ1osQ0FBQyxNQUFNLENBQUM7WUFDUixZQUFZO1lBQ1osT0FBTyxDQUFDLE9BQU87WUFDZixPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLO1dBQzdCLENBQUM7O1VBRUYsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUNsQyxXQUFXLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxDQUFDO1dBQ3pEOztVQUVELE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztVQUM3QyxlQUFlO1lBQ2IsV0FBVztZQUNYLENBQUMsT0FBTyxDQUFDO1lBQ1QsTUFBTSxDQUFDLEtBQUs7WUFDWixPQUFPLENBQUMsS0FBSztZQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUs7V0FDMUIsQ0FBQztVQUNGLFdBQVc7YUFDUixRQUFRO2NBQ1AsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDSCxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7bUJBQzNELFFBQVE7YUFDZDthQUNBLEtBQUs7Y0FDSixDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNILE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQzttQkFDM0QsS0FBSzthQUNYO2FBQ0EsSUFBSSxDQUFDLE1BQU0sQ0FBQzthQUNaLEdBQUcsRUFBRTthQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsTUFBTSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7O1VBRW5ELElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7WUFDcEMsYUFBYSxHQUFHLEtBQUs7ZUFDbEIsU0FBUyxDQUFDLDRCQUE0QixDQUFDO2VBQ3ZDLE1BQU0sQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxDQUFDO1dBQ3hDO1VBQ0QsTUFBTSxhQUFhLEdBQUcsYUFBYSxDQUFDLFVBQVUsRUFBRSxDQUFDO1VBQ2pELGVBQWU7WUFDYixhQUFhO1lBQ2IsQ0FBQyxRQUFRLENBQUM7WUFDVixNQUFNO1lBQ04sT0FBTyxDQUFDLEtBQUs7WUFDYixPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLO1dBQzVCLENBQUM7VUFDRixhQUFhO2FBQ1YsUUFBUTtjQUNQLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ0gsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJO2tCQUNsQixDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDO2lCQUM3QyxDQUFDLFFBQVE7YUFDYjthQUNBLEtBQUs7Y0FDSixDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNILE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSTtrQkFDbEIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQztpQkFDN0MsQ0FBQyxLQUFLO2FBQ1Y7YUFDQSxJQUFJLENBQUMsTUFBTSxDQUFDO2FBQ1osR0FBRyxFQUFFO2FBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsRUFBRSxNQUFNLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQzs7VUFFckQsSUFBSSxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUNuQyxZQUFZLEdBQUcsS0FBSztlQUNqQixTQUFTLENBQUMsMkJBQTJCLENBQUM7ZUFDdEMsTUFBTSxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssT0FBTyxDQUFDLENBQUM7V0FDeEM7VUFDRCxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUM7VUFDL0MsZUFBZTtZQUNiLFlBQVk7WUFDWixDQUFDLE1BQU0sQ0FBQztZQUNSLE1BQU0sQ0FBQyxLQUFLO1lBQ1osT0FBTyxDQUFDLEtBQUs7WUFDYixPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLO1dBQzNCLENBQUM7VUFDRixZQUFZO2FBQ1QsUUFBUTtjQUNQLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ0gsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO21CQUM3RCxRQUFRO2FBQ2Q7YUFDQSxLQUFLO2NBQ0osQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDSCxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7bUJBQzdELEtBQUs7YUFDWDthQUNBLElBQUksQ0FBQyxNQUFNLENBQUM7YUFDWixHQUFHLEVBQUU7YUFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLE1BQU0sT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3JELE1BQU07VUFDTCxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsTUFBTSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1VBQzFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsRUFBRSxNQUFNLE9BQU8sRUFBRSxDQUFDLENBQUM7VUFDNUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLE1BQU0sT0FBTyxFQUFFLENBQUMsQ0FBQztTQUM1Qzs7O1FBR0QsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtVQUM1QyxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7VUFDOUIsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUNqQyxVQUFVLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxDQUFDO1dBQ3ZEO1VBQ0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLG1CQUFtQjtjQUN6QyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFO2NBQ3BELEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQzs7VUFFekQsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDO1VBQzNDLGVBQWU7WUFDYixVQUFVO1lBQ1YsQ0FBQyxPQUFPLENBQUM7WUFDVCxZQUFZO1lBQ1osT0FBTyxDQUFDLEtBQUs7WUFDYixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJO1dBQ3pCLENBQUM7VUFDRixVQUFVO2FBQ1AsUUFBUTtjQUNQLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ0gsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO21CQUM3RCxRQUFRO2FBQ2Q7YUFDQSxLQUFLO2NBQ0osQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDSCxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7bUJBQzdELEtBQUs7YUFDWDthQUNBLElBQUksQ0FBQyxNQUFNLENBQUM7YUFDWixNQUFNLEVBQUU7YUFDUixHQUFHLEVBQUU7YUFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxFQUFFLE1BQU0sT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDOztVQUVsRCxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsU0FBUztZQUN2Qyw0QkFBNEI7V0FDN0IsQ0FBQztVQUNGLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztVQUMvQyxlQUFlO1lBQ2IsWUFBWTtZQUNaLENBQUMsUUFBUSxDQUFDO1lBQ1YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFO2NBQ3hCLE9BQU8sRUFBRSxNQUFNLENBQUMsS0FBSztjQUNyQixTQUFTLEVBQUUsTUFBTSxDQUFDLE9BQU87YUFDMUIsQ0FBQztZQUNGLE9BQU8sQ0FBQyxLQUFLO1lBQ2IsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSTtXQUMzQixDQUFDO1VBQ0YsWUFBWTthQUNULFFBQVE7Y0FDUCxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNILE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSTtrQkFDbEIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQztpQkFDL0MsQ0FBQyxRQUFRO2FBQ2I7YUFDQSxLQUFLO2NBQ0osQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDSCxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUk7a0JBQ2xCLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUM7aUJBQy9DLENBQUMsS0FBSzthQUNWO2FBQ0EsSUFBSSxDQUFDLE1BQU0sQ0FBQzthQUNaLE1BQU0sRUFBRTthQUNSLEdBQUcsRUFBRTthQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLEVBQUUsTUFBTSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7O1VBRXBELE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsMkJBQTJCLENBQUMsQ0FBQztVQUN0RSxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUM7VUFDN0MsZUFBZTtZQUNiLFdBQVc7WUFDWCxDQUFDLE1BQU0sQ0FBQztZQUNSLFlBQVk7WUFDWixPQUFPLENBQUMsS0FBSztZQUNiLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUk7V0FDMUIsQ0FBQztVQUNGLFdBQVc7YUFDUixRQUFRO2NBQ1AsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDSCxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUk7a0JBQ2pCLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUM7aUJBQzlDLENBQUMsUUFBUTthQUNiO2FBQ0EsS0FBSztjQUNKLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ0gsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJO2tCQUNqQixDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDO2lCQUM5QyxDQUFDLEtBQUs7YUFDVjthQUNBLElBQUksQ0FBQyxNQUFNLENBQUM7YUFDWixNQUFNLEVBQUU7YUFDUixHQUFHLEVBQUU7YUFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLE1BQU0sT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3BELE1BQU07VUFDTCxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEVBQUUsTUFBTSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1VBQ3pDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRSxNQUFNLE9BQU8sRUFBRSxDQUFDLENBQUM7VUFDMUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxFQUFFLE1BQU0sT0FBTyxFQUFFLENBQUMsQ0FBQztTQUM1Qzs7UUFFRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFOztVQUUzQixNQUFNLFlBQVksR0FBRyxLQUFLO2FBQ3ZCLE1BQU0sQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsQ0FBQzthQUNwQyxVQUFVLEVBQUUsQ0FBQzs7VUFFaEIsZUFBZTtZQUNiLFlBQVk7WUFDWixDQUFDLE9BQU8sQ0FBQztZQUNULE1BQU0sQ0FBQyxLQUFLO1lBQ1osT0FBTyxDQUFDLEtBQUs7WUFDYixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNO1dBQzNCLENBQUM7O1VBRUYsWUFBWTthQUNULFFBQVE7Y0FDUCxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNILE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUTthQUNqRTthQUNBLEtBQUs7Y0FDSixDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNILE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSzthQUM5RDthQUNBLElBQUksQ0FBQyxNQUFNLENBQUM7YUFDWixHQUFHLEVBQUU7YUFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxFQUFFLE1BQU0sT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDOztVQUVwRCxNQUFNLGNBQWMsR0FBRyxLQUFLO2FBQ3pCLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQzthQUNwQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFDN0MsTUFBTSxjQUFjLEdBQUcsY0FBYyxDQUFDLFVBQVUsRUFBRSxDQUFDO1VBQ25ELGVBQWU7WUFDYixjQUFjO1lBQ2QsQ0FBQyxRQUFRLENBQUM7WUFDVixNQUFNO1lBQ04sT0FBTyxDQUFDLEtBQUs7WUFDYjtjQUNFLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNO2NBQ3ZDLEtBQUssRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNO2FBQ3BDO1lBQ0QsUUFBUTtXQUNULENBQUM7VUFDRixjQUFjO2FBQ1gsUUFBUTtjQUNQLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ0gsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7bUJBQ3RELFFBQVE7YUFDZDthQUNBLEtBQUs7Y0FDSixDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNILE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSzthQUNsRTthQUNBLElBQUksQ0FBQyxNQUFNLENBQUM7YUFDWixHQUFHLEVBQUU7YUFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUFFLE1BQU0sT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDOztVQUV0RCxNQUFNLGFBQWEsR0FBRyxLQUFLO2FBQ3hCLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQzthQUNuQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFDNUMsTUFBTSxhQUFhLEdBQUcsYUFBYSxDQUFDLFVBQVUsRUFBRSxDQUFDO1VBQ2pELGVBQWU7WUFDYixhQUFhO1lBQ2IsQ0FBQyxNQUFNLENBQUM7WUFDUixNQUFNLENBQUMsS0FBSztZQUNaLE9BQU8sQ0FBQyxLQUFLO1lBQ2IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTTtXQUM1QixDQUFDO1VBQ0YsYUFBYTthQUNWLFFBQVE7Y0FDUCxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNILE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUTthQUNuRTthQUNBLEtBQUs7Y0FDSixDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNILE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSzthQUNoRTthQUNBLElBQUksQ0FBQyxNQUFNLENBQUM7YUFDWixHQUFHLEVBQUU7YUFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxFQUFFLE1BQU0sT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3RELE1BQU07VUFDTCxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLEVBQUUsTUFBTSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1VBQzNDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsRUFBRSxNQUFNLE9BQU8sRUFBRSxDQUFDLENBQUM7VUFDN0MsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxFQUFFLE1BQU0sT0FBTyxFQUFFLENBQUMsQ0FBQztTQUM3QztPQUNGO01BQ0Q7UUFDRSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1NBQ2hFLFVBQVUsSUFBSSxRQUFRLENBQUM7UUFDeEI7UUFDQSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDNUQsSUFBSSxXQUFXLENBQUMsT0FBTyxLQUFLLFVBQVUsRUFBRTs7VUFFdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLDZCQUE2QixDQUFDLENBQUM7O1VBRWhFLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQzVCLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSw0QkFBNEIsQ0FBQyxDQUFDO1dBQ2hFLE1BQU07WUFDTCxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsZ0NBQWdDLENBQUMsQ0FBQztXQUNwRTtTQUNGOztRQUVELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHO1VBQzVELE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDO1NBQ3BFLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7VUFDbEUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLDRCQUE0QixDQUFDLENBQUM7U0FDaEU7O1FBRUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU07VUFDMUIsa0RBQWtEO1NBQ25ELENBQUM7UUFDRixJQUFJLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRTtVQUMvQixlQUFlLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ3JELE1BQU07VUFDTCxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1NBQzFDOztRQUVELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUN6RCxJQUFJLFVBQVUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtVQUNwQyxlQUFlLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1NBQzlELE1BQU07VUFDTCxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1NBQzVDOztRQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNsRCxJQUFJLFVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRTtVQUNqQyxlQUFlLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ3BELE1BQU07VUFDTCxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1NBQ3pDO09BQ0Y7S0FDRjs7O0lBR0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ25ELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksT0FBTyxFQUFFO01BQzlCLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7OztNQUdyQyxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7TUFDcEMsTUFBTSxPQUFPLEdBQUcsYUFBYTtRQUMzQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUs7UUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLO1FBQ25CLElBQUksQ0FBQyxNQUFNO1FBQ1gsT0FBTztRQUNQLE9BQU87T0FDUixDQUFDOztNQUVGLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDckQsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQzs7TUFFakQsZUFBZTtRQUNiLFdBQVc7UUFDWCxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUM7UUFDbEIsRUFBRTtRQUNGLE9BQU8sQ0FBQyxPQUFPO1FBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSztPQUM1QixDQUFDOzs7TUFHRixNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUM7TUFDN0MsZUFBZTtRQUNiLFdBQVc7UUFDWCxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUM7UUFDbEIsRUFBRTtRQUNGLE9BQU8sQ0FBQyxLQUFLO1FBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSztPQUMxQixDQUFDO01BQ0YsV0FBVztTQUNSLFFBQVE7VUFDUCxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVE7U0FDOUQ7U0FDQSxLQUFLO1VBQ0osQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLO1NBQ25FO1NBQ0EsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUNaLEdBQUcsRUFBRTtTQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsTUFBTSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7Ozs7O01BS25ELE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztNQUNoQyxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUM7TUFDM0MsZUFBZTtRQUNiLFVBQVU7UUFDVixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUM7UUFDbEIsRUFBRTtRQUNGLE9BQU8sQ0FBQyxLQUFLO1FBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSTtPQUN6QixDQUFDO01BQ0YsVUFBVTtTQUNQLFFBQVE7VUFDUCxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVE7U0FDaEU7U0FDQSxLQUFLO1VBQ0osQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLO1NBQ3JFO1NBQ0EsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUNaLE1BQU0sRUFBRTtTQUNSLEdBQUcsRUFBRTtTQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEVBQUUsTUFBTSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7Ozs7O01BS2xELEtBQUssR0FBRyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7O01BRTNCLGVBQWU7UUFDYixLQUFLO1FBQ0wsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDO1FBQ2xCLEVBQUU7UUFDRixPQUFPLENBQUMsS0FBSztRQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU07T0FDM0IsQ0FBQzs7TUFFRixLQUFLO1NBQ0YsUUFBUTtVQUNQLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRO1NBQzdEO1NBQ0EsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7U0FDaEUsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUNaLEdBQUcsRUFBRTtTQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLEVBQUUsTUFBTSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7O0tBRXJEOzs7SUFHRCxTQUFTLGVBQWU7TUFDdEIsV0FBVztNQUNYLFFBQVE7TUFDUixpQkFBaUI7TUFDakIsWUFBWTtNQUNaO01BQ0EsTUFBTSxRQUFRLEdBQUdBLEtBQVEsRUFBRSxDQUFDO01BQzVCLElBQUksZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDOztNQUU3RCxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7TUFDeEMsTUFBTSxRQUFRO1FBQ1osV0FBVyxLQUFLLFFBQVEsSUFBSSxXQUFXLENBQUMsS0FBSyxLQUFLLFVBQVU7WUFDeEQsRUFBRTtZQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7TUFDakMsTUFBTSxRQUFRO1FBQ1osV0FBVyxLQUFLLFFBQVEsSUFBSSxXQUFXLENBQUMsT0FBTyxLQUFLLFVBQVU7WUFDMUQsRUFBRTtZQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7TUFDakMsTUFBTSxPQUFPLEdBQUcsYUFBYTtRQUMzQixRQUFRO1FBQ1IsUUFBUTtRQUNSLElBQUksQ0FBQyxNQUFNO1FBQ1gsT0FBTztRQUNQLE9BQU87T0FDUixDQUFDO01BQ0YsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1FBQ2hDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ3ZCLENBQUMsQ0FBQztNQUNILGdCQUFnQixHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN0RCxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztPQUNkLENBQUM7OztNQUdGLElBQUksQ0FBQyxRQUFRLElBQUksZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUMzRCxJQUFJLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQzs7UUFFdkUsZUFBZTtVQUNiLGFBQWE7VUFDYixZQUFZO1VBQ1osSUFBSSxDQUFDLG1CQUFtQjtjQUNwQixFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFO2NBQ3BELEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUU7VUFDeEQsT0FBTyxDQUFDLE9BQU87VUFDZixPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUs7U0FDbkMsQ0FBQzs7UUFFRixJQUFJLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO1VBQ3BDLGFBQWEsR0FBRyxRQUFRO2FBQ3JCLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQzthQUM1QixNQUFNLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxPQUFPLENBQUMsQ0FBQztTQUN4QztRQUNELE1BQU0sYUFBYSxHQUFHLGFBQWEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNqRCxlQUFlO1VBQ2IsYUFBYTtVQUNiLFlBQVk7VUFDWixNQUFNO1VBQ04sT0FBTyxDQUFDLEtBQUs7VUFDYixPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUs7VUFDaEMsUUFBUTtTQUNULENBQUM7UUFDRixhQUFhO1dBQ1YsUUFBUTtZQUNQLENBQUMsQ0FBQyxFQUFFLENBQUM7Y0FDSCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUTtXQUM5RDtXQUNBLEtBQUs7WUFDSixDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUs7V0FDbkU7V0FDQSxJQUFJLENBQUMsTUFBTSxDQUFDO1dBQ1osR0FBRyxFQUFFO1dBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsRUFBRSxNQUFNLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztPQUN4RCxNQUFNO1FBQ0wsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxFQUFFLE1BQU0sT0FBTyxFQUFFLENBQUMsQ0FBQztPQUMvQzs7O01BR0QsSUFBSSxDQUFDLEtBQUssSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ3ZELE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO1FBQzdDLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMvQyxlQUFlO1VBQ2IsWUFBWTtVQUNaLFlBQVk7VUFDWixJQUFJLENBQUMsbUJBQW1CO2NBQ3BCLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUU7Y0FDcEQsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRTtVQUN4RCxPQUFPLENBQUMsS0FBSztVQUNiLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSTtVQUMvQixRQUFRO1NBQ1QsQ0FBQztRQUNGLFlBQVk7V0FDVCxRQUFRO1lBQ1AsQ0FBQyxDQUFDLEVBQUUsQ0FBQztjQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRO1dBQ2hFO1dBQ0EsS0FBSztZQUNKLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSztXQUNyRTtXQUNBLElBQUksQ0FBQyxNQUFNLENBQUM7V0FDWixNQUFNLEVBQUU7V0FDUixHQUFHLEVBQUU7V0FDTCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxFQUFFLE1BQU0sT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ3ZELE1BQU07UUFDTCxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLEVBQUUsTUFBTSxPQUFPLEVBQUUsQ0FBQyxDQUFDO09BQzlDOzs7TUFHRCxJQUFJLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDdEMsTUFBTSxjQUFjLEdBQUcsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDckQsSUFBSSxvQkFBb0IsR0FBRyxXQUFXLEtBQUssVUFBVTtZQUNqRCxDQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNsRSxZQUFZLENBQUM7OztRQUdqQixlQUFlO1VBQ2IsY0FBYztVQUNkLG9CQUFvQjtVQUNwQixNQUFNO1VBQ04sT0FBTyxDQUFDLEtBQUs7VUFDYjtZQUNFLE9BQU8sRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU07WUFDNUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTTtXQUN6QztVQUNELFFBQVE7U0FDVCxDQUFDO1FBQ0YsSUFBSSxXQUFXLEtBQUssVUFBVSxFQUFFO1VBQzlCLGtCQUFrQixDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDO1NBQzVDOzs7O1FBSUQsY0FBYztXQUNYLFFBQVE7WUFDUCxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUTtXQUM3RDtXQUNBLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1dBQ2hFLElBQUksQ0FBQyxNQUFNLENBQUM7V0FDWixHQUFHLEVBQUU7V0FDTCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxFQUFFLE1BQU0sT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ3pELE1BQU07UUFDTCxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLEVBQUUsTUFBTSxPQUFPLEVBQUUsQ0FBQyxDQUFDO09BQ2hEO0tBQ0Y7R0FDRixDQUFDLENBQUM7Q0FDSjtBQUNELFNBQVMsa0JBQWtCLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxFQUFFO0VBQ25ELE1BQU0sR0FBRyxHQUFHLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0VBQ2pHLE1BQU0sT0FBTyxHQUFHLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzVDLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDeEMsTUFBTSxRQUFRLEdBQUdoQixNQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzdDLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO0tBQ3ZCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLE1BQU0sQ0FBQztLQUMvQyxVQUFVLEVBQUU7S0FDWixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0tBQy9CLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0tBQ3ZCLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7RUFDckIsUUFBUSxDQUFDLFVBQVUsRUFBRTtLQUNsQixJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0tBQzNCLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7S0FDM0IsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztLQUMzQixJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0tBQzNCLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0tBQ3ZCLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7O0NBRXRCO0FBQ0QsU0FBUyxTQUFTLENBQUMsV0FBVyxFQUFFLGNBQWMsRUFBRTtFQUM5QyxNQUFNLFFBQVEsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDO0VBQ3JDLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxzQkFBc0I7SUFDM0QsYUFBYTtHQUNkLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDTCxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ3JDLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7RUFHMUMsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO0lBQ2YsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0dBQ3JFO0VBQ0QsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtJQUMzQixXQUFXO09BQ1IsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO09BQzVELE1BQU0sRUFBRSxDQUFDO0dBQ2IsTUFBTTtJQUNMLFdBQVc7T0FDUixTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLDZDQUE2QyxDQUFDLENBQUM7T0FDdEUsTUFBTSxFQUFFLENBQUM7SUFDWixXQUFXO09BQ1IsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO09BQ3pFLE1BQU0sRUFBRSxDQUFDO0lBQ1osV0FBVztPQUNSLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsNENBQTRDLENBQUMsQ0FBQztPQUNyRSxNQUFNLEVBQUUsQ0FBQztHQUNiOztFQUVELE9BQU8sV0FBVyxDQUFDO0NBQ3BCOztBQ25tQ0QsU0FBUyxlQUFlLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7RUFDakQsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDOztFQUUxQixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxLQUFLO0lBQzlCLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDOztJQUUzQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLEtBQUssRUFBRTtNQUNoQyxPQUFPLEVBQUUsQ0FBQztLQUNYOztJQUVELE1BQU0sSUFBSSxHQUFHQSxNQUFTLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQzs7O0lBR3pDLElBQUk7T0FDRCxVQUFVLEVBQUU7T0FDWixLQUFLLENBQUMsUUFBUSxFQUFFLFdBQVc7UUFDMUIsTUFBTSxDQUFDLEdBQUdULFdBQWM7VUFDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUM7VUFDMUIsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLO1NBQ3RCLENBQUM7UUFDRixNQUFNLENBQUMsR0FBR0EsV0FBYztVQUN0QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztVQUMzQixTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUs7U0FDdkIsQ0FBQztRQUNGLE9BQU8sU0FBUyxDQUFDLEVBQUU7VUFDakIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1VBQ3BDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztVQUNwQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztVQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztVQUNoQyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNqRCxDQUFDO09BQ0gsQ0FBQztPQUNELFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO09BQ3ZCLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO09BQ2pCLElBQUksQ0FBQyxNQUFNLENBQUM7T0FDWixHQUFHLEVBQUU7T0FDTCxJQUFJLENBQUMsTUFBTTtRQUNWLE9BQU8sRUFBRSxDQUFDO09BQ1gsQ0FBQyxDQUFDOzs7SUFHTCxJQUFJO09BQ0QsTUFBTSxDQUFDLEdBQUcsQ0FBQztPQUNYLFVBQVUsRUFBRTtPQUNaLElBQUk7UUFDSCxXQUFXO1FBQ1gsYUFBYSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO09BQzlEO09BQ0EsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7T0FDdkIsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7T0FDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDOzs7SUFHaEIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQ2hELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztJQUMzQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLEtBQUs7TUFDN0QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7TUFDcEMsT0FBTyxNQUFNLENBQUM7S0FDZixFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1AsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3hDLGVBQWU7TUFDYixJQUFJO01BQ0osQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQztNQUNoQyxFQUFFO01BQ0YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLO01BQ2xCLFVBQVU7S0FDWCxDQUFDOztJQUVGLElBQUk7T0FDRCxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztPQUN2QixLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztPQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7OztHQUdqQixDQUFDLENBQUM7Q0FDSjs7QUMxRUQsTUFBTSxPQUFPLEdBQUc7RUFDZCxNQUFNLEVBQUUsaUJBQWlCO0VBQ3pCLElBQUksRUFBRSxlQUFlO0VBQ3JCLElBQUksRUFBRTtJQUNKLFdBQVcsRUFBRTtNQUNYLE1BQU0sRUFBRSxlQUFlO01BQ3ZCLFFBQVEsRUFBRSxtQkFBbUI7S0FDOUI7SUFDRCxjQUFjO0dBQ2Y7RUFDRCxJQUFJLEVBQUUsZUFBZTtFQUNyQixLQUFLLEVBQUUsSUFBSSxJQUFJO0lBQ2IsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sS0FBSztNQUM5QixVQUFVLENBQUMsV0FBVztRQUNwQixPQUFPLEVBQUUsQ0FBQztPQUNYLEVBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDaEMsQ0FBQyxDQUFDO0dBQ0o7Q0FDRixDQUFDO0FBQ0YsQUFBZSxpQkFBUSxDQUFDLElBQUksRUFBRTtFQUM1QixJQUFJLFFBQVEsQ0FBQztFQUNiLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDM0IsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLE1BQU0sRUFBRTtJQUM1QjtNQUNFLFNBQVMsQ0FBQyxLQUFLO01BQ2YsU0FBUyxDQUFDLE9BQU87TUFDakIsU0FBUyxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUs7TUFDMUM7TUFDQSxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7S0FDeEMsTUFBTTtNQUNMLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO01BQ3hFO01BQ0EsUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQztLQUM5QyxNQUFNO01BQ0wsUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQztLQUM1QztHQUNGLE1BQU07SUFDTCxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztHQUNuQzs7RUFFRCxPQUFPLFFBQVEsQ0FBQztDQUNqQjs7QUFFRCxlQUFlLGNBQWMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRTtFQUN0RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztFQUN0QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztFQUNwQyxLQUFLLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUFJLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxFQUFFO0lBQ3pELE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7R0FDcEU7RUFDRDtJQUNFLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztNQUNuRixnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEY7SUFDQSxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUM7TUFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDO01BQ3pELE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQztLQUM1RCxDQUFDLENBQUM7R0FDSjtFQUNELE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7Q0FDbEU7O0FDaEVNLFNBQVMsY0FBYyxDQUFDLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUU7RUFDbEUsTUFBTSxZQUFZLEdBQUcsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDOztFQUUzRCxJQUFJLGdCQUFnQixHQUFHLFlBQVksQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7RUFDM0QsTUFBTSxrQkFBa0IsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsY0FBYyxDQUFDO0lBQy9ELGtCQUFrQixHQUFHLGdCQUFnQixDQUFDLHFCQUFxQixDQUFDLGtCQUFrQixDQUFDLENBQUM7O0VBRWxGLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxrQkFBa0IsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFO0lBQ2hFLE1BQU0sV0FBVyxHQUFHLGtCQUFrQixFQUFFLENBQUM7SUFDekMsSUFBSSxDQUFDLFdBQVcsRUFBRTtNQUNoQixnQkFBZ0IsR0FBRyxZQUFZLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO01BQ3ZELE1BQU07S0FDUDtJQUNELGdCQUFnQixHQUFHLFlBQVksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7R0FDdkQ7RUFDRCxPQUFPLGdCQUFnQixDQUFDO0NBQ3pCOztBQUVELFNBQVMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRTtFQUM5QyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7RUFDakIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUk7SUFDMUIsT0FBTyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJO01BQ3pDLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUM7TUFDdkUsSUFBSSxVQUFVLElBQUksVUFBVSxDQUFDLGVBQWUsS0FBSyxLQUFLLEVBQUU7UUFDdEQsS0FBSyxHQUFHLEtBQUssQ0FBQztPQUNmO0tBQ0YsQ0FBQyxDQUFDO0dBQ0osQ0FBQyxDQUFDO0VBQ0gsT0FBTyxLQUFLLENBQUM7OztDQUNkLERDdkJELFNBQVMsbUJBQW1CLENBQUMsUUFBUSxFQUFFO0VBQ3JDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJO0lBQ3hCLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJO01BQ3BDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUNoQyxJQUFJLENBQUMsUUFBUSxFQUFFO1FBQ2IsT0FBTyxDQUFDLEtBQUs7VUFDWCxDQUFDLHdDQUF3QyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQzVELENBQUM7T0FDSDs7TUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztNQUN6QixPQUFPLElBQUksQ0FBQztLQUNiLENBQUMsQ0FBQztHQUNKLENBQUMsQ0FBQztFQUNILE9BQU8sUUFBUSxDQUFDO0NBQ2pCOztBQUVELE1BQU0sTUFBTSxDQUFDO0VBQ1gsYUFBYSxPQUFPLENBQUMsWUFBWSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUU7O0lBRW5ELE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSUMsSUFBUyxDQUFDQyxPQUFVLENBQUMsVUFBVSxDQUFDLEVBQUU7TUFDeEQsUUFBUSxFQUFFLEtBQUs7S0FDaEIsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDOztJQUVkLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSUQsSUFBUyxDQUFDQyxPQUFVLENBQUMsWUFBWSxDQUFDLEVBQUU7TUFDMUQsUUFBUSxFQUFFLEtBQUs7S0FDaEIsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDOztJQUVkLE1BQU0sT0FBTyxHQUFHO01BQ2QsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFO01BQ3pDLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtLQUN4QyxDQUFDOztJQUVGLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEdBQUczSixPQUFLLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3BELFFBQVEsQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUQsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7O0lBRWxFLE9BQU8sSUFBSSxTQUFTLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0dBQ3pFO0NBQ0Y7O0FDN0NELE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQztBQUN6QixNQUFNLGdCQUFnQixHQUFHO0VBQ3ZCLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsRUFBRTtFQUNuRCxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLEVBQUU7RUFDcEQsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRTtFQUMvQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUU7RUFDdEMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFO0VBQ3BDLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRTtFQUMxQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUU7RUFDcEMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsYUFBYSxDQUFDLEVBQUU7Q0FDbkUsQ0FBQztBQUNGLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7O0FBRXpFLE1BQU0sb0JBQW9CLEdBQUc7RUFDM0IsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDO0VBQzdCLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQztFQUM5QixLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO0VBQ3pCLEtBQUssRUFBRSxDQUFDLE9BQU8sQ0FBQztFQUNoQixJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUM7RUFDZCxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUM7RUFDcEIsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDO0VBQ2QsTUFBTSxFQUFFLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUM7Q0FDN0MsQ0FBQzs7QUFFRixTQUFTLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUU7RUFDOUMsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO0VBQ3JCLElBQUksT0FBTyxLQUFLLFFBQVEsRUFBRTtJQUN4QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsbUJBQW1CLEVBQUUsUUFBUSxLQUFLO01BQ3pELFFBQVEsbUJBQW1CLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtLQUMzRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUk7TUFDckIsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDMUIsQ0FBQyxDQUFDOztJQUVILE9BQU8sV0FBVyxDQUFDO0dBQ3BCOztFQUVELG9CQUFvQixDQUFDLE9BQU8sQ0FBQzs7S0FFMUIsT0FBTyxDQUFDLElBQUksSUFBSTtNQUNmLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDaEMsQ0FBQyxDQUFDO0VBQ0wsT0FBTyxTQUFTLENBQUM7Q0FDbEI7QUFDRCxTQUFTLFdBQVcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQztFQUNoRCxJQUFJLENBQUMsU0FBUyxFQUFFO0lBQ2QsT0FBTztHQUNSO0VBQ0QsSUFBSSxPQUFPLEtBQUssT0FBTyxFQUFFO0lBQ3ZCLElBQUksUUFBUSxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztRQUM1RCxTQUFTLENBQUMsTUFBTTtRQUNoQixTQUFTLENBQUMsSUFBSSxDQUFDOztJQUVuQjtNQUNFLFFBQVEsS0FBSyxRQUFRO1FBQ25CLFNBQVMsQ0FBQyxJQUFJO1FBQ2QsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssYUFBYTtNQUN4QztNQUNBLFFBQVEsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO0tBQzNCOztJQUVELE9BQU8sUUFBUSxDQUFDO0dBQ2pCO0VBQ0QsSUFBSSxPQUFPLEdBQUcsR0FBRyxFQUFFO0lBQ2pCLE9BQU8sU0FBUyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsRUFBRSxDQUFDO0dBQ3JDLE1BQU0sSUFBSSxPQUFPLEdBQUcsR0FBRyxFQUFFO0lBQ3hCLE9BQU8sU0FBUyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsRUFBRSxDQUFDO0dBQ3JDO0VBQ0QsT0FBTyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7Q0FDM0I7O0FDL0RNLFNBQVMsV0FBVyxDQUFDLE9BQU8sRUFBRSxTQUFTLEdBQUcsRUFBRSxFQUFFOztFQUVuRCxNQUFNLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQzs7RUFFL0MsTUFBTSxPQUFPLEdBQUcsVUFBVTtJQUN4QixhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDaEMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0dBQ2pDLENBQUM7RUFDRixNQUFNLFVBQVUsR0FBRyxPQUFPO0tBQ3ZCLE1BQU0sQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLFFBQVEsS0FBSyxPQUFPLENBQUM7S0FDM0MsTUFBTSxDQUFDLENBQUMsVUFBVSxFQUFFLEtBQUssS0FBSztNQUM3QixVQUFVLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQztNQUNuQyxVQUFVLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQzs7TUFFckYsT0FBTyxVQUFVLENBQUM7S0FDbkIsRUFBRSxFQUFFLENBQUMsQ0FBQzs7RUFFVCxNQUFNLFNBQVMsR0FBRyxPQUFPO0tBQ3RCLE1BQU0sQ0FBQyxLQUFLLElBQUk7TUFDZjtRQUNFLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztRQUNqRCxLQUFLLENBQUMsUUFBUSxLQUFLLE9BQU87UUFDMUI7S0FDSCxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSTtNQUNkLFFBQVEsS0FBSyxDQUFDLFFBQVE7TUFDdEIsS0FBSyxNQUFNO1FBQ1QsS0FBSyxDQUFDLElBQUksR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN6RCxNQUFNO01BQ1IsS0FBSyxNQUFNO1FBQ1QsS0FBSyxDQUFDLElBQUksR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN6RCxNQUFNO01BQ1IsS0FBSyxRQUFRO1FBQ1gsS0FBSyxDQUFDLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzNELE1BQU07QUFDZCxBQUVBLE9BQU87O01BRUQsT0FBTyxLQUFLLENBQUM7S0FDZCxDQUFDLENBQUM7RUFDTCxNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7OztFQUcxQyxPQUFPO0lBQ0wsU0FBUztJQUNULFVBQVU7SUFDVixXQUFXO0lBQ1gsU0FBUztHQUNWLENBQUM7Q0FDSDtBQUNELFNBQVMsbUJBQW1CLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRTtFQUNuRCxJQUFJLG9CQUFvQixHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksYUFBYSxHQUFHLEtBQUssQ0FBQzs7RUFFekQsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUk7SUFDOUIsb0JBQW9CLENBQUMsU0FBUyxDQUFDLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUM3RCxhQUFhLEdBQUcsYUFBYSxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUM7R0FDN0QsRUFBRSxFQUFFLENBQUMsQ0FBQzs7RUFFUCxPQUFPLGFBQWEsR0FBRyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7Q0FDckQ7QUFDRCxTQUFTLGVBQWUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRTtFQUNuRCxJQUFJLFNBQVMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7RUFDbkQsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUU7SUFDbEIsU0FBUyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7SUFDckIsU0FBUyxDQUFDLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxDQUFDO0dBQ25FLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUU7SUFDdkIsU0FBUyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDeEIsU0FBUyxDQUFDLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxDQUFDO0dBQ25FOzs7RUFHRCxTQUFTLENBQUMsUUFBUSxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQzs7O0VBR2pHLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0VBQy9FLElBQUksU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0VBQzNFLFNBQVMsQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQzs7RUFFN0QsU0FBUyxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLE9BQU8sS0FBSztJQUMzRCxNQUFNLFdBQVcsR0FBRyxxQkFBcUI7TUFDdkMsR0FBRyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQUU7TUFDL0MsT0FBTztLQUNSLENBQUM7SUFDRixJQUFJLFdBQVcsR0FBRyxxQkFBcUI7TUFDckMsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQUU7TUFDN0MsT0FBTztLQUNSLENBQUM7O0lBRUYsV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQzs7O0lBRzVEO01BQ0UsT0FBTyxLQUFLLFNBQVM7T0FDcEIsR0FBRyxDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDO1FBQ25DLEdBQUcsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLEtBQUssU0FBUyxDQUFDO09BQzNDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQztRQUNuQyxHQUFHLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxLQUFLLFNBQVMsQ0FBQztNQUM1QztNQUNBLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQztNQUNqRSxJQUFJLFlBQVksR0FBRyxHQUFHLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUM7TUFDL0QsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUMsR0FBRyxHQUFHLEVBQUU7UUFDL0MsV0FBVyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7T0FDN0I7S0FDRjs7O0lBR0QsSUFBSSxTQUFTLENBQUMsUUFBUSxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRTtNQUM5QyxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUM7UUFDOUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO01BQzNDLElBQUksWUFBWSxHQUFHLFdBQVcsQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO01BQ2pFLElBQUksWUFBWSxHQUFHLFdBQVcsQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDOztNQUVqRSxJQUFJLFNBQVMsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLEVBQUU7UUFDekMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLGtCQUFrQixDQUFDO09BQzNDO0tBQ0Y7OztJQUdELE9BQU8sV0FBVyxDQUFDO0dBQ3BCLEVBQUUsRUFBRSxDQUFDLENBQUM7Ozs7O0VBS1AsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO0VBQ3BCLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSTtJQUN4QixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7O0lBRXhELENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUk7TUFDckMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSTtRQUNwQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7VUFDL0IsVUFBVSxHQUFHLFVBQVUsQ0FBQyxNQUFNO1lBQzVCLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUM7V0FDeEQsQ0FBQztTQUNILE1BQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFO1VBQzdCLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3JDO09BQ0YsQ0FBQyxDQUFDO0tBQ0osQ0FBQyxDQUFDO0dBQ0osQ0FBQyxDQUFDO0VBQ0gsU0FBUyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7RUFDM0MsU0FBUyxDQUFDLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0VBQ3hFLFNBQVMsQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7RUFDakQsU0FBUyxDQUFDLElBQUksR0FBRztJQUNmLE1BQU0sRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckIsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsVUFBVTtRQUM1QixTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU07SUFDekIsTUFBTSxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQixTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxVQUFVO1FBQzVCLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTTtHQUMxQixDQUFDO0VBQ0YsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUU7SUFDOUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDO0dBQ3ZDLE1BQU0sSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDeEQsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxhQUFhLENBQUM7R0FDeEM7O0VBRUQsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUU7SUFDOUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDO0dBQ3ZDLE1BQU0sSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDeEQsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxhQUFhLENBQUM7R0FDeEM7Ozs7Ozs7Ozs7Ozs7RUFhRCxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTztNQUNyQixXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDO01BQzdELEVBQUUsQ0FBQztFQUNQLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLO01BQ25CLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUM7TUFDM0QsRUFBRSxDQUFDOztFQUVQLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxlQUFlLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtJQUMvRixLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0dBQzNCO0VBQ0QsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLGVBQWUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksa0JBQWtCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO0lBQ3pGLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7R0FDM0I7RUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTs7SUFFbkIsS0FBSyxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUNuRSxLQUFLLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDOztJQUVqRSxTQUFTLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7R0FDM0M7Ozs7RUFJRCxPQUFPLFNBQVMsQ0FBQztDQUNsQjs7QUFFRCxTQUFTLGdCQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsZUFBZSxHQUFHLEVBQUUsRUFBRTtFQUM5RCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRTtJQUNsQixPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0dBQ3BCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUU7SUFDbEIsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztHQUN2QjtFQUNELElBQUksU0FBUyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDOztFQUVuRSxJQUFJLFdBQVcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUU7SUFDbkUsV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0VBQ2xFLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztFQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN2QyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFDL0UsV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO01BQ3ZGLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNoRztHQUNGOztFQUVELElBQUksWUFBWSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNyRSxZQUFZLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7O0VBRXBFLElBQUksQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsS0FBSyxVQUFVLEtBQUssQ0FBQyxDQUFDLEVBQUU7SUFDN0UsT0FBTyxLQUFLLENBQUM7R0FDZDtFQUNELFNBQVMsR0FBRztJQUNWLFVBQVUsRUFBRSxVQUFVO0lBQ3RCLGVBQWUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDO0dBQ3hELENBQUM7O0VBRUYsSUFBSSw0QkFBNEIsR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztFQUMvRixTQUFTLENBQUMsZUFBZSxHQUFHLDRCQUE0QixLQUFLLE1BQU0sR0FBRyxJQUFJO0lBQ3hFLDRCQUE0QixLQUFLLE1BQU0sR0FBRyxLQUFLO01BQzdDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0dBQ3ZELENBQUM7OztFQUdGLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztLQUMvRCxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDL0QsU0FBUyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7R0FDL0I7RUFDRCxPQUFPLFNBQVMsQ0FBQztDQUNsQjs7QUFFRCxTQUFTLGlCQUFpQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFO0VBQ3JELE1BQU0sV0FBVyxHQUFHO0lBQ2xCLFVBQVUsRUFBRSxFQUFFO0lBQ2QsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtHQUMzQyxDQUFDO0VBQ0YsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUU7SUFDbEIsV0FBVyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7SUFDdkIsV0FBVyxDQUFDLElBQUksR0FBRztNQUNqQixNQUFNLEVBQUUsYUFBYTtNQUNyQixNQUFNLEVBQUUsYUFBYTtNQUNyQixDQUFDLEVBQUUsYUFBYTtNQUNoQixDQUFDLEVBQUUsYUFBYTtLQUNqQixDQUFDO0dBQ0gsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRTtJQUN2QixXQUFXLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUMxQixXQUFXLENBQUMsSUFBSSxHQUFHO01BQ2pCLE1BQU0sRUFBRSxDQUFDLGFBQWE7TUFDdEIsTUFBTSxFQUFFLENBQUMsYUFBYTtNQUN0QixDQUFDLEVBQUUsQ0FBQyxhQUFhO01BQ2pCLENBQUMsRUFBRSxDQUFDLGFBQWE7S0FDbEIsQ0FBQztHQUNIOztFQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7OztFQUduRjtJQUNFLE1BQU07SUFDTixTQUFTO0lBQ1QsT0FBTztJQUNQLE1BQU07SUFDTixRQUFRO0lBQ1IsWUFBWTtJQUNaLGFBQWE7R0FDZCxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUk7SUFDakIsSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7TUFDekMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0tBQ25EO0lBQ0QsSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7TUFDckMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0tBQ2pEOztJQUVELE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0dBQ3hCLEVBQUUsS0FBSyxDQUFDLENBQUM7RUFDVixXQUFXLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7RUFDekQsV0FBVyxDQUFDLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0VBQzVFLFdBQVcsQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7O0VBRXJELFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDOzs7RUFHcEQsSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7SUFDaEMsTUFBTSxZQUFZLEdBQUc7TUFDbkIsT0FBTyxFQUFFLFFBQVE7UUFDZixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJO1FBQ25DLEtBQUssQ0FBQyxRQUFRO1FBQ2QsUUFBUTtPQUNULENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztNQUNiLEtBQUssRUFBRSxRQUFRO1FBQ2IsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSTtRQUNuQyxLQUFLLENBQUMsUUFBUTtRQUNkLFFBQVE7T0FDVCxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7S0FDZCxDQUFDOztJQUVGLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ25FLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0dBQ3BFOztFQUVELE9BQU8sV0FBVyxDQUFDO0NBQ3BCOztBQUVELFNBQVMsZUFBZSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFO0VBQ25ELE1BQU0sU0FBUyxHQUFHO0lBQ2hCLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7R0FDM0MsQ0FBQztFQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFO0lBQ2xCLFNBQVMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO0lBQ3JCLFNBQVMsQ0FBQyxJQUFJLEdBQUc7TUFDZixNQUFNLEVBQUUsYUFBYTtNQUNyQixNQUFNLEVBQUUsYUFBYTtNQUNyQixDQUFDLEVBQUUsYUFBYTtNQUNoQixDQUFDLEVBQUUsYUFBYTtLQUNqQixDQUFDO0dBQ0gsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRTtJQUN2QixTQUFTLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUN4QixTQUFTLENBQUMsSUFBSSxHQUFHO01BQ2YsTUFBTSxFQUFFLENBQUMsYUFBYTtNQUN0QixNQUFNLEVBQUUsQ0FBQyxhQUFhO01BQ3RCLENBQUMsRUFBRSxDQUFDLGFBQWE7TUFDakIsQ0FBQyxFQUFFLENBQUMsYUFBYTtLQUNsQixDQUFDO0dBQ0g7O0VBRUQsU0FBUyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7RUFDMUIsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO0lBQ2pCLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7R0FDaEQsTUFBTSxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7SUFDdEIsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztHQUM5Qzs7RUFFRCxTQUFTLENBQUMsS0FBSyxHQUFHLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7RUFDeEUsU0FBUyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztFQUNqRCxJQUFJLEtBQUssQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRTtJQUNoQyxTQUFTLENBQUMsSUFBSSxHQUFHO01BQ2YsTUFBTSxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDO01BQzVELE1BQU0sRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQztLQUM3RCxDQUFDO0lBQ0YsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRTtNQUM3QyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUU7UUFDL0MsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxHQUFHLEVBQUU7VUFDN0IsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJO2NBQ3RDLENBQUMsYUFBYTtjQUNkLGFBQWEsQ0FBQztTQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssR0FBRyxFQUFFO1VBQ3BDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSTtjQUN0QyxDQUFDLGFBQWE7Y0FDZCxhQUFhLENBQUM7U0FDbkI7T0FDRixNQUFNLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRTtRQUNyRCxJQUFJLEtBQUs7VUFDUCxHQUFHLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEUsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxNQUFNLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssT0FBTyxFQUFFO1VBQ25FLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztTQUMvQixNQUFNO1VBQ0wsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1NBQy9CO09BQ0Y7S0FDRjtHQUNGOzs7RUFHRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0VBQy9FLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQztFQUNwQixPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUM7RUFDcEIsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7OztFQUc5QyxJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRTtJQUNoQyxNQUFNLFVBQVUsR0FBRztNQUNqQixPQUFPLEVBQUUsUUFBUTtRQUNmLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUk7UUFDbkMsS0FBSyxDQUFDLFFBQVE7UUFDZCxNQUFNO09BQ1AsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO01BQ2IsS0FBSyxFQUFFLFFBQVE7UUFDYixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJO1FBQ25DLEtBQUssQ0FBQyxRQUFRO1FBQ2QsTUFBTTtPQUNQLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztLQUNkLENBQUM7SUFDRixJQUFJLE1BQU0sR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtNQUNsRSxNQUFNLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7TUFDcEUsT0FBTyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO01BQ2pFLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDOztJQUV4RSxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3pDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUM7O0lBRTNDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzdELFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0dBQzlEOztFQUVELE9BQU8sU0FBUyxDQUFDO0NBQ2xCO0FBQ0QsU0FBUyxjQUFjLENBQUMsT0FBTyxFQUFFO0VBQy9CLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztFQUN6QyxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztFQUN4RSxTQUFTLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxP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TUFDRCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO01BQzlFLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxNQUFNLENBQUMsQ0FBQztLQUN4RCxDQUFDLEVBQUU7TUFDRixLQUFLLEdBQUcsS0FBSyxDQUFDO0tBQ2Y7R0FDRixDQUFDLENBQUM7RUFDSCxJQUFJLENBQUMsS0FBSyxFQUFFO0lBQ1YsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7R0FDeEQ7O0VBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDckMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUMxRixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtNQUN2QyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDMUIsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRTtRQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRTtVQUN6QixPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFLE9BQU8s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RSxDQUFDLFVBQVUsQ0FBQyxFQUFFO0lBQ3hELEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFO0lBQ3hELEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFO0lBQ3ZELEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFO0lBQ3hELEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFO0lBQ3hELEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFO0lBQzVELEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFO0lBQzVELEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFO0lBQzNELEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFO0lBQ2pDLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFO0lBQ2pDLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFO0lBQ3JDLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFO0lBQ3JDLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFO0lBQ3BDLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7R0FD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QU0sRUFBRSxhQUFhLEVBQUU7T0FDNUM7TUFDRDtRQUNFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFO1FBQzNDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFO09BQzVDO01BQ0Q7UUFDRSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRTtRQUMzQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRTtPQUMzQztNQUNEO1FBQ0UsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUU7UUFDMUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUU7T0FDOUM7TUFDRDtRQUNFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFO1FBQzdDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFO09BQzVDO01BQ0Q7UUFDRSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRTtRQUMzQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRTtPQUM5QztNQUNEO1FBQ0UsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUU7UUFDM0MsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUU7UUFDMUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUU7T0FDNUM7TUFDRDtRQUNFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFO1FBQzFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFO1FBQzNDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFO09BQzlDO01BQ0Q7UUFDRSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRTtRQUMzQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRTtRQUMzQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRTtPQUM5QztNQUNEO1FBQ0UsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUU7UUFDM0MsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUU7UUFDMUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUU7T0FDOUM7TUFDRDtRQUNFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFO1FBQzNDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFO1FBQzFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFO1FBQzdDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFO09BQzVDO0tBQ0Y7SUFDRCxJQUFJLEVBQUUsQ0FBQyxHQUFHO0dBQ1g7RUFDRDtJQUNFLE1BQU0sRUFBRTtNQUNOO1FBQ0UsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUU7UUFDM0QsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUU7T0FDNUQ7S0FDRjtJQUNELElBQUksRUFBRSxDQUFDLEdBQUc7R0FDWDtFQUNEO0lBQ0UsTUFBTSxFQUFFO01BQ047UUFDRSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRTtRQUMzRCxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRTtPQUM1RDtLQUNGO0lBQ0QsSUFBSSxFQUFFLENBQUMsQ0FBQztHQUNUO0VBQ0Q7SUFDRSxNQUFNLEVBQUU7TUFDTjtRQUNFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFO1FBQ3hDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFO09BQ3RDO01BQ0Q7UUFDRSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRTtRQUN4QyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRTtPQUN6QztLQUNGO0lBQ0QsSUFBSSxFQUFFLENBQUMsR0FBRztHQUNYO0VBQ0Q7SUFDRSxNQUFNLEVBQUU7TUFDTjtRQUNFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1FBQzNELEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFO09BQzVEO0tBQ0Y7SUFDRCxJQUFJLEVBQUUsQ0FBQyxHQUFHO0dBQ1g7RUFDRDtJQUNFLE1BQU0sRUFBRTtNQUNOO1FBQ0UsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUU7UUFDM0QsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUU7T0FDNUQ7S0FDRjtJQUNELElBQUksRUFBRSxDQUFDLENBQUM7R0FDVDtFQUNEO0lBQ0UsTUFBTSxFQUFFO01BQ047UUFD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 diff --git a/gemini.web.js b/gemini.web.js index e536daf..dc2c4ed 100644 --- a/gemini.web.js +++ b/gemini.web.js @@ -11537,20 +11537,20 @@ if (typeof groupby === "string") { groupby = [groupby]; } - return d3.nest() - .key(d => groupby.map(f => d.datum[f]).join("@@_@@")) - .entries(data) + return d3.groups(data, d => groupby.map(f => d.datum[f]).join("@@_@@")) .map(group => { + const values = group[1]; let datum = groupby.reduce((datum, f) => { - datum[f] = group.values[0].datum[f]; + datum[f] = values[0].datum[f]; return datum; - }, { count: group.values.length }); + }, { count: values.length }); return { datum: datum, mark: {role: "group", marktype: "group"}, - items: [{items: group.values }] + items: [{items: values }] }; }); + } function unpackData(data) { if (data[0].mark.marktype !== "group") { @@ -16156,32 +16156,43 @@ return (acc = acc && (val !== undefined ? !isNaN(Number(val)) : true)); }, true); if (!staggering.by) { - grouped = d3.nest() - .key(d => { - const val = d.__staggering_id__; - return val === undefined ? "__empty__" : val; - }) - .sortKeys(getOrderFn(true, staggering.order)) - .entries(dataWithTiming); + + + const orderFn = getOrderFn(true, staggering.order); + grouped = d3.groups(dataWithTiming, d => { + const val = d.__staggering_id__; + return val === undefined ? "__empty__" : val; + }); + if (typeof(orderFn) === "function") { + grouped.sort((a,b) => orderFn(a,b)); + } } else if (typeof staggering.by === "string") { - grouped = d3.nest() - .key(d => { - const val = (d.initial || d.final)[staggering.by]; - return val === undefined ? "__empty__" : val; - }) - .sortKeys(getOrderFn(isNumber, staggering.order)) - .entries(dataWithTiming); + + + grouped = d3.groups(dataWithTiming, d => { + const val = (d.initial || d.final)[staggering.by]; + return val === undefined ? "__empty__" : val; + }); + + const orderFn = getOrderFn(isNumber, staggering.order); + if (typeof(orderFn) === "function") { + grouped.sort((a,b) => orderFn(a,b)); + } } else if (staggering.by.initial || staggering.by.final) { const which = staggering.by.initial ? "initial" : "final"; - grouped = d3.nest() - .key(d => { - const val = (which === "initial" - ? d.initial || d.final - : d.final || d.initial)[staggering.by[which]]; - return val === undefined ? "__empty__" : val; - }) - .sortKeys(getOrderFn(isNumber, staggering.order)) - .entries(dataWithTiming); + + + grouped = d3.groups(dataWithTiming, d => { + const val = (which === "initial" + ? d.initial || d.final + : d.final || d.initial)[staggering.by[which]]; + return val === undefined ? "__empty__" : val; + }); + + const orderFn = getOrderFn(isNumber, staggering.order); + if (typeof(orderFn) === "function") { + grouped.sort((a,b) => orderFn(a,b)); + } } N = grouped.length; @@ -16211,13 +16222,13 @@ }); timings.groups = grouped.map((g, i) => { - return staggeredTiming(subStaggering, g.values, durations[i]); + return staggeredTiming(subStaggering, g[1], durations[i]); }); return getFlattenTimings(timings); } grouped.forEach((group, i) => { - group.values.forEach(datum => { + group[1].forEach(datum => { datum.delay = delays[i]; datum.duration = durations[i]; }); @@ -22977,9 +22988,8 @@ } let axesScales = vegaAxes.filter(a => a.grid).map(a => a.scale); - return d3.nest() - .key(axis => axis.scale) - .rollup(axes => { + return d3.rollups(vegaAxes, + axes => { let axisWithGrid = axes.find(a => a.grid); let axisWithoutGrid = { ...axes.find(a => !a.grid) }; @@ -22991,9 +23001,10 @@ axisWithoutGrid.zindex = 0; } return axisWithoutGrid; - }).entries(vegaAxes) - .map(d => d.value) - .sort((a,b) => (axesScales.indexOf(a.scale) - axesScales.indexOf(b.scale))); + }, + axis => axis.scale + ).map(d => d[1]) + .sort((a,b) => (axesScales.indexOf(a.scale) - axesScales.indexOf(b.scale))); } const { animate } = Gemini; diff --git a/gemini.web.js.map b/gemini.web.js.map index c241af9..088a5e5 100644 --- a/gemini.web.js.map +++ b/gemini.web.js.map @@ -1 +1 @@ -{"version":3,"file":"gemini.web.js","sources":["src/animation.js","src/util/util.js","src/parser/resolveCollector.js","src/schedule.js","src/parser/conflictChecker.js","node_modules/uri-js/src/util.ts","node_modules/uri-js/src/regexps-uri.ts","node_modules/uri-js/src/regexps-iri.ts","node_modules/uri-js/node_modules/punycode/punycode.es6.js","node_modules/uri-js/src/uri.ts","node_modules/uri-js/src/schemes/http.ts","node_modules/uri-js/src/schemes/https.ts","node_modules/uri-js/src/schemes/mailto.ts","node_modules/uri-js/src/schemes/urn.ts","node_modules/uri-js/src/schemes/urn-uuid.ts","node_modules/uri-js/src/index.ts","node_modules/fast-deep-equal/index.js","node_modules/ajv/lib/compile/ucs2length.js","node_modules/ajv/lib/compile/util.js","node_modules/ajv/lib/compile/schema_obj.js","node_modules/json-schema-traverse/index.js","node_modules/ajv/lib/compile/resolve.js","node_modules/ajv/lib/compile/error_classes.js","node_modules/fast-json-stable-stringify/index.js","node_modules/ajv/lib/dotjs/validate.js","node_modules/ajv/lib/compile/index.js","node_modules/ajv/lib/cache.js","node_modules/ajv/lib/compile/formats.js","node_modules/ajv/lib/dotjs/ref.js","node_modules/ajv/lib/dotjs/allOf.js","node_modules/ajv/lib/dotjs/anyOf.js","node_modules/ajv/lib/dotjs/comment.js","node_modules/ajv/lib/dotjs/const.js","node_modules/ajv/lib/dotjs/contains.js","node_modules/ajv/lib/dotjs/dependencies.js","node_modules/ajv/lib/dotjs/enum.js","node_modules/ajv/lib/dotjs/format.js","node_modules/ajv/lib/dotjs/if.js","node_modules/ajv/lib/dotjs/items.js","node_modules/ajv/lib/dotjs/_limit.js","node_modules/ajv/lib/dotjs/_limitItems.js","node_modules/ajv/lib/dotjs/_limitLength.js","node_modules/ajv/lib/dotjs/_limitProperties.js","node_modules/ajv/lib/dotjs/multipleOf.js","node_modules/ajv/lib/dotjs/not.js","node_modules/ajv/lib/dotjs/oneOf.js","node_modules/ajv/lib/dotjs/pattern.js","node_modules/ajv/lib/dotjs/properties.js","node_modules/ajv/lib/dotjs/propertyNames.js","node_modules/ajv/lib/dotjs/required.js","node_modules/ajv/lib/dotjs/uniqueItems.js","node_modules/ajv/lib/dotjs/index.js","node_modules/ajv/lib/compile/rules.js","node_modules/ajv/lib/data.js","node_modules/ajv/lib/compile/async.js","node_modules/ajv/lib/dotjs/custom.js","node_modules/ajv/lib/definition_schema.js","node_modules/ajv/lib/keyword.js","node_modules/ajv/lib/ajv.js","src/parser/specChecker.js","node_modules/vega-expression/src/ast.js","node_modules/vega-expression/src/parser.js","node_modules/vega-expression/src/constants.js","node_modules/vega-util/src/accessor.js","node_modules/vega-util/src/error.js","node_modules/vega-util/src/splitAccessPath.js","node_modules/vega-util/src/isArray.js","node_modules/vega-util/src/isObject.js","node_modules/vega-util/src/isString.js","node_modules/vega-util/src/stringValue.js","node_modules/vega-util/src/field.js","node_modules/vega-util/src/accessors.js","node_modules/vega-util/src/isFunction.js","node_modules/vega-util/src/hasOwnProperty.js","node_modules/vega-util/src/toSet.js","node_modules/vega-expression/src/functions.js","node_modules/vega-expression/src/codegen.js","src/default/browser.js","src/default/ease.js","src/default/vegaConfig.js","src/default/util.js","src/default/style.js","src/default/encode/vegaDefault.js","src/default/encode/legend.js","src/default/encode/mark.js","src/default/encode/axis.js","src/default/encode/index.js","src/actuator/util.js","src/changeFetcher/state/util.js","src/enumerator.js","src/parser/stepEnumerator.js","src/parser/index.js","src/util/vgDataHelper.js","src/changeFetcher/state/dataJoin.js","src/changeFetcher/state/compute/util.js","src/changeFetcher/state/compute/mark.js","src/changeFetcher/state/compute/axis.js","src/changeFetcher/state/compute/legend.js","src/changeFetcher/state/compute/view.js","src/util/vgSpecHelper.js","src/changeFetcher/change.js","src/changeFetcher/state/index.js","src/actuator/vega-render-util.js","src/actuator/mark/interpolatePathYH.js","src/actuator/mark/interpolateHelper.js","src/actuator/attributeFetcher.js","src/actuator/staggering.js","src/actuator/timings.js","src/actuator/mark/mark.js","src/actuator/mark/areaLine.js","src/actuator/axis.js","src/actuator/legend.js","src/actuator/view.js","src/actuator/index.js","src/resolver.js","src/gemini.js","src/recommender/util.js","src/recommender/diffDetector.js","src/recommender/diffApplier.js","src/recommender/markCompChecker.js","src/recommender/pseudoTimelineValidator.js","src/recommender/pseudoTimelineEnumerator.js","src/recommender/designGuidelines.js","src/recommender/pseudoTimelineEvaluator.js","src/recommender/timelineGenerator.js","src/recommender/index.js","src/util/vl2vg4gemini.js","src/index.js"],"sourcesContent":["class Animation {\n constructor(schedule, rawInfo, spec) {\n this.schedule = schedule;\n this.moments = this.schedule.moments;\n this.status = \"ready\";\n this.spec = spec;\n this.logs = [];\n this._queue = [];\n this.rawInfo = rawInfo;\n }\n\n log(timestamp, message, info) {\n if (typeof message === \"string\" && typeof timestamp === \"number\") {\n this.logs.push({\n timestamp,\n message,\n info\n });\n }\n return this.logs;\n }\n\n async play(targetElm) {\n this.status = \"playing\";\n // get moments and sort by sTime\n const { moments } = this;\n\n const globalSTime = new Date();\n this._start(moments[0].starting, targetElm);\n this.log(new Date() - globalSTime, \"0-th moment\");\n\n for (let i = 1; i < moments.length; i++) {\n const moment = moments[i];\n\n await this._end(moment).then(() => {\n const delay = Math.max(moment.time - (new Date() - globalSTime), 0);\n return new Promise(resolve => setTimeout(() => resolve(), delay));\n });\n this._start(moment.starting, targetElm);\n this.log(new Date() - globalSTime, `${i}-th moment`);\n\n if (i === moments.length - 1) {\n this.status = \"ready\";\n return;\n }\n }\n }\n\n _start(steps, targetElm) {\n steps.forEach(step => {\n this._queue.push({\n sTime: step.sTime,\n eTime: step.eTime,\n step,\n result: step.template(this.rawInfo, step, targetElm) // contains the promise\n });\n });\n }\n\n async _end(moment) {\n const { time } = moment;\n\n const workingSteps = this._queue.filter(item => item.eTime === time);\n for (let i = 0; i < workingSteps.length; i++) {\n await workingSteps[i].result;\n }\n }\n}\n\nexport { Animation };\n","Array.prototype.contains = function(v, accessor) {\n accessor =\n accessor ||\n (d => {\n return d;\n });\n for (let i = 0; i < this.length; i++) {\n if (accessor(this[i]) === accessor(v)) return true;\n }\n return false;\n};\nArray.prototype.containAll = function(arr, accessor) {\n accessor =\n accessor ||\n (d => {\n return d;\n });\n for (let i = 0; i < arr.length; i++) {\n if (!this.contains(arr[i], accessor)) return false;\n }\n return true;\n};\n\nArray.prototype.unique = function(accessor) {\n const arr = [];\n for (let i = 0; i < this.length; i++) {\n if (!arr.contains(this[i], accessor)) {\n arr.push(this[i]);\n }\n }\n return arr;\n};\n\nArray.prototype.sample = function(N) {\n const tempThis = this.slice();\n const sampled = [];\n for (let i = 0; i < N; i++) {\n sampled.push(\n tempThis.splice([Math.floor(Math.random() * tempThis.length)], 1)[0]\n );\n }\n return sampled;\n};\n\nArray.prototype.shuffle = function() {\n for (let i = this.length; i; i--) {\n const j = Math.floor(Math.random() * i);\n [this[i - 1], this[j]] = [this[j], this[i - 1]];\n }\n return this;\n};\nArray.prototype.clone = function() {\n return JSON.parse(JSON.stringify(this));\n};\nfunction stringifyDatumValue(value) {\n if (value === null) {\n return \"__null__\";\n }\n return value.toString();\n}\nfunction deepEqual(obj1, obj2) {\n if (obj1 === obj2) {\n return true;\n }\n if (isDate(obj1) && isDate(obj2)) {\n return Number(obj1) === Number(obj2);\n }\n if (\n typeof obj1 === \"object\" &&\n obj1 !== undefined &&\n typeof obj2 === \"object\" &&\n obj2 !== undefined\n ) {\n const props1 = Object.keys(obj1);\n const props2 = Object.keys(obj2);\n if (props1.length !== props2.length) {\n return false;\n }\n\n for (let i = 0; i < props1.length; i++) {\n const prop = props1[i];\n\n if (!Object.prototype.hasOwnProperty.call(obj2, prop) || !deepEqual(obj1[prop], obj2[prop])) {\n return false;\n }\n }\n return true;\n }\n return false;\n}\n\nfunction copy(obj) {\n if (obj === undefined) {\n return undefined;\n }\n return JSON.parse(JSON.stringify(obj));\n}\n// create a new obj that has the same keys pointing the same values/functions;\nfunction copy2(obj) {\n return Object.keys(obj).reduce((acc, curr) => {\n acc[curr] = obj[curr];\n return acc;\n }, {});\n}\nfunction flatten(arrays) {\n return arrays.reduce((acc, curr) => {\n acc = acc.concat(curr);\n return acc;\n }, []);\n}\n\nfunction permutate(arr) {\n if (arr.length === 2) {\n return [arr, [arr[1], arr[0]]];\n }\n return arr.reduce((acc, anchor, i) => {\n const workingArr = copy(arr);\n workingArr.splice(i, 1);\n\n acc = acc.concat(\n permutate(workingArr).map(newArr => {\n return [anchor].concat(newArr);\n })\n );\n return acc;\n }, []);\n}\nfunction isDate(o) {\n return o !== undefined && typeof o.getMonth === \"function\";\n}\n\nfunction enumArr(arr, item) {\n const newArrs = [];\n for (let i = 0; i < arr.length; i++) {\n const newArr = copy(arr);\n if (Array.isArray(newArr[i])) {\n newArr[i].push(item);\n } else {\n newArr[i] = [newArr[i], item];\n }\n newArrs.push(newArr);\n }\n return newArrs;\n}\n\nfunction enumArraysByItems(arrs, items, enumArrFn = enumArr) {\n let newArrs = copy(arrs);\n items.forEach(item => {\n newArrs = newArrs.reduce((allArrs, arr) => {\n return (allArrs = allArrs.concat(enumArrFn(arr, item)));\n }, []);\n });\n return newArrs;\n}\n\nfunction get(o, ...props) {\n return props.reduce((obj, prop) => {\n return !isNullOrUndefined(obj) && !isNullOrUndefined(obj[prop])\n ? obj[prop]\n : undefined;\n }, o);\n}\n\nfunction isNullOrUndefined(obj) {\n return obj === null || obj === undefined;\n}\nfunction isNumber(x) {\n return typeof x === \"number\" && !isNaN(x);\n}\nfunction roundUp(num, d = 5) {\n return Math.round(Math.pow(10, d) * num) / Math.pow(10, d);\n}\nArray.prototype.exclude = function(items, accessor = x => x) {\n const newArr = this.slice();\n for (const item of items) {\n const i = newArr.findIndex(x => accessor(x) === accessor(item));\n if (i >= 0) {\n newArr.splice(i, 1);\n }\n }\n return newArr;\n};\nfunction variance(nums) {\n const mu = mean(nums);\n return (\n nums.reduce((acc, num) => (acc += Math.pow(num - mu, 2)), 0) / nums.length\n );\n}\nfunction mean(nums) {\n return nums.reduce((sum, num) => sum + num, 0) / nums.length;\n}\n\nfunction isEmpty(o) {\n return typeof o === \"object\" && Object.keys(o).length === 0;\n}\n\nexport {\n deepEqual,\n copy,\n copy2,\n flatten,\n permutate,\n isNumber,\n enumArraysByItems,\n get,\n roundUp,\n variance,\n mean,\n isEmpty,\n stringifyDatumValue\n};\n","export default function(parsedBlock, parsedSteps) {\n let resolves = collect(parsedBlock);\n // 1-2. collect the alternative timelines. (alterIds)\n resolves.forEach(r => {\n r.alterIds = parsedSteps\n .filter(\n step => step.alterId &&\n (step.alterId.split(\":\")[0] === r.alterName)\n )\n .map(step => step.alterId)\n .unique();\n\n // Place \":main\" at first\n const i = r.alterIds.findIndex(d => d.indexOf(\":main\") >= 0);\n const head = r.alterIds.splice(i, 1);\n r.alterIds = head.concat(r.alterIds);\n });\n return resolves;\n}\n\nfunction collect(block) {\n let resolves = [];\n\n if (block.sync) {\n block.sync.forEach(blk => {\n resolves = resolves.concat(collect(blk));\n });\n } else if (block.concat) {\n block.concat.forEach(blk => {\n resolves = resolves.concat(collect(blk));\n });\n }\n if (block.resolve) {\n resolves.push(block.resolve);\n }\n return resolves;\n}","class Schedule {\n constructor(parsedSteps) {\n // Assgin the sTime and eTime\n\n let newParsedSteps = parsedSteps.map((stp, i) => {\n return { ...stp, stepId: i };\n });\n\n this.tracks = newParsedSteps\n .map(d => {\n const trackName = (d.trackName = d.compName\n ? `${d.compType}.${d.compName}`\n : d.compType);\n\n return {\n name: trackName,\n compType: d.compType,\n compName: d.compName\n };\n })\n .unique(d => d.name)\n .map(track => {\n return {\n ...track,\n steps: newParsedSteps.filter(d => d.trackName === track.name)\n };\n });\n }\n\n\n getTimeline(alterId) {\n return this.tracks.map(track => {\n return Object.assign({}, track, {\n steps: track.steps.filter(\n step => step.alterId === undefined || step.alterId.indexOf(alterId) >= 0\n )\n });\n });\n }\n\n getTimelineAlternator(scaleOrderResovles) {\n let counter = 0;\n let dividers = scaleOrderResovles.reduce(\n (acc, r, i) => {\n acc.push(r.alterIds.length * acc[i]);\n return acc;\n },\n [1]\n );\n const totalCount = dividers[dividers.length - 1];\n dividers = dividers.slice(0, dividers.length - 1).sort((a, b) => b - a);\n return () => {\n counter += 1;\n counter %= totalCount;\n if (counter === 0) {\n console.warn(\"Gemini cannot find the order to resolve.\");\n return false;\n }\n return dividers.reduce(\n (acc, divider, i) => {\n const q = Math.floor(acc.remainder / divider);\n acc.remainder -= q * divider;\n const resolve = scaleOrderResovles[i];\n\n const alterId = resolve.alterIds[q];\n\n acc.tracks = acc.tracks.map(track => {\n const newSteps = track.steps.filter(step => {\n if (step.alterId === undefined) {\n return true;\n }\n if (\n step.alterId.split(\":\")[0] === alterId.split(\":\")[0] &&\n step.alterId.split(\":\")[1] !== alterId.split(\":\")[1]\n ) {\n return false;\n }\n\n return true;\n });\n return Object.assign({}, track, { steps: newSteps });\n });\n\n return acc;\n },\n { tracks: this.tracks, remainder: counter }\n ).tracks;\n };\n }\n\n\n}\n\n\n\n\n\nexport {Schedule};","export default function check(schedule, resolves) {\n // 3. check if there is any component whose steps are overlapped by themselves.\n let tracksPerAlterId = [{ alterId: \":main\", tracks: schedule.tracks }];\n if (resolves.length > 0) {\n tracksPerAlterId = resolves\n .reduce((allAlterIds, resolve) => {\n return allAlterIds.concat(resolve.alterIds);\n }, [])\n .map(alterId => {\n return {\n tracks: schedule.tracks.map(track => {\n return {\n ...track,\n steps: track.steps.filter(\n stp => !stp.alterId || alterId === stp.alterId\n )\n };\n }),\n alterId\n };\n });\n }\n const conflictsPerAlterId = tracksPerAlterId.map(findConflicts);\n const conflictedAlterIds = conflictsPerAlterId\n .filter(conflicts => conflicts.length > 0)\n .map(conflicts => conflicts.alterId);\n\n if (conflictedAlterIds.length === tracksPerAlterId.length) {\n if (conflictsPerAlterId.length > 1) {\n throw new Error(\n \"All possible timelines have 1+ schedule conflict.\",\n conflictsPerAlterId\n );\n } else {\n throw new Error(\n \"The timeline has 1+ schedule conflict.\",\n conflictsPerAlterId\n );\n }\n } else if (conflictedAlterIds.length > 0) {\n if (\n conflictsPerAlterId.find(conflicts =>\n conflicts.find(conf => conf.alterId.indexOf(\":main\") >= 0)\n )\n ) {\n console.warn(\n \"The main timeline (specified timeline) has 1+ schedule conflict.\",\n conflictsPerAlterId\n );\n } else {\n console.warn(\n \"Some possible timelines have 1+ schedule conflict.\",\n conflictsPerAlterId\n );\n }\n }\n schedule.tracks = schedule.tracks.map(track => {\n return {\n ...track,\n steps: track.steps.filter(\n stp => conflictedAlterIds.indexOf(stp.alterId) < 0\n )\n };\n });\n resolves = resolves.map(resolve => {\n return {\n ...resolve,\n alterIds: resolve.alterIds.filter(\n id => conflictedAlterIds.indexOf(id) < 0\n )\n };\n });\n\n return {conflictsPerAlterId};\n}\n\n\nfunction findConflicts(tracksWithAlterId) {\n const conflicts = [];\n const { tracks } = tracksWithAlterId;\n const { alterId } = tracksWithAlterId;\n\n for (const track of tracks) {\n const sortedSteps = track.steps.sort(\n (stp1, stp2) => stp1.sTime - stp2.sTime\n );\n for (let i = 0; i < sortedSteps.length - 1; i++) {\n if (sortedSteps[i].eTime > sortedSteps[i + 1].sTime) {\n conflicts.push({\n alterId,\n conflictedSteps: [sortedSteps[i], sortedSteps[i + 1]],\n compName: track.compName,\n compType: track.compType\n });\n }\n }\n }\n\n return conflicts;\n}","export function merge(...sets:Array):string {\n\tif (sets.length > 1) {\n\t\tsets[0] = sets[0].slice(0, -1);\n\t\tconst xl = sets.length - 1;\n\t\tfor (let x = 1; x < xl; ++x) {\n\t\t\tsets[x] = sets[x].slice(1, -1);\n\t\t}\n\t\tsets[xl] = sets[xl].slice(1);\n\t\treturn sets.join('');\n\t} else {\n\t\treturn sets[0];\n\t}\n}\n\nexport function subexp(str:string):string {\n\treturn \"(?:\" + str + \")\";\n}\n\nexport function typeOf(o:any):string {\n\treturn o === undefined ? \"undefined\" : (o === null ? \"null\" : Object.prototype.toString.call(o).split(\" \").pop().split(\"]\").shift().toLowerCase());\n}\n\nexport function toUpperCase(str:string):string {\n\treturn str.toUpperCase();\n}\n\nexport function toArray(obj:any):Array {\n\treturn obj !== undefined && obj !== null ? (obj instanceof Array ? obj : (typeof obj.length !== \"number\" || obj.split || obj.setInterval || obj.call ? [obj] : Array.prototype.slice.call(obj))) : [];\n}\n\n\nexport function assign(target: object, source: any): any {\n\tconst obj = target as any;\n\tif (source) {\n\t\tfor (const key in source) {\n\t\t\tobj[key] = source[key];\n\t\t}\n\t}\n\treturn obj;\n}","import { URIRegExps } from \"./uri\";\nimport { merge, subexp } from \"./util\";\n\nexport function buildExps(isIRI:boolean):URIRegExps {\n\tconst\n\t\tALPHA$$ = \"[A-Za-z]\",\n\t\tCR$ = \"[\\\\x0D]\",\n\t\tDIGIT$$ = \"[0-9]\",\n\t\tDQUOTE$$ = \"[\\\\x22]\",\n\t\tHEXDIG$$ = merge(DIGIT$$, \"[A-Fa-f]\"), //case-insensitive\n\t\tLF$$ = \"[\\\\x0A]\",\n\t\tSP$$ = \"[\\\\x20]\",\n\t\tPCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$)), //expanded\n\t\tGEN_DELIMS$$ = \"[\\\\:\\\\/\\\\?\\\\#\\\\[\\\\]\\\\@]\",\n\t\tSUB_DELIMS$$ = \"[\\\\!\\\\$\\\\&\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\=]\",\n\t\tRESERVED$$ = merge(GEN_DELIMS$$, SUB_DELIMS$$),\n\t\tUCSCHAR$$ = isIRI ? \"[\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF]\" : \"[]\", //subset, excludes bidi control characters\n\t\tIPRIVATE$$ = isIRI ? \"[\\\\uE000-\\\\uF8FF]\" : \"[]\", //subset\n\t\tUNRESERVED$$ = merge(ALPHA$$, DIGIT$$, \"[\\\\-\\\\.\\\\_\\\\~]\", UCSCHAR$$),\n\t\tSCHEME$ = subexp(ALPHA$$ + merge(ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\") + \"*\"),\n\t\tUSERINFO$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\")) + \"*\"),\n\t\tDEC_OCTET$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"[1-9]\" + DIGIT$$) + \"|\" + DIGIT$$),\n\t\tDEC_OCTET_RELAXED$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"0?[1-9]\" + DIGIT$$) + \"|0?0?\" + DIGIT$$), //relaxed parsing rules\n\t\tIPV4ADDRESS$ = subexp(DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$),\n\t\tH16$ = subexp(HEXDIG$$ + \"{1,4}\"),\n\t\tLS32$ = subexp(subexp(H16$ + \"\\\\:\" + H16$) + \"|\" + IPV4ADDRESS$),\n\t\tIPV6ADDRESS1$ = subexp( subexp(H16$ + \"\\\\:\") + \"{6}\" + LS32$), // 6( h16 \":\" ) ls32\n\t\tIPV6ADDRESS2$ = subexp( \"\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{5}\" + LS32$), // \"::\" 5( h16 \":\" ) ls32\n\t\tIPV6ADDRESS3$ = subexp(subexp( H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{4}\" + LS32$), //[ h16 ] \"::\" 4( h16 \":\" ) ls32\n\t\tIPV6ADDRESS4$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,1}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{3}\" + LS32$), //[ *1( h16 \":\" ) h16 ] \"::\" 3( h16 \":\" ) ls32\n\t\tIPV6ADDRESS5$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,2}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{2}\" + LS32$), //[ *2( h16 \":\" ) h16 ] \"::\" 2( h16 \":\" ) ls32\n\t\tIPV6ADDRESS6$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,3}\" + H16$) + \"?\\\\:\\\\:\" + H16$ + \"\\\\:\" + LS32$), //[ *3( h16 \":\" ) h16 ] \"::\" h16 \":\" ls32\n\t\tIPV6ADDRESS7$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,4}\" + H16$) + \"?\\\\:\\\\:\" + LS32$), //[ *4( h16 \":\" ) h16 ] \"::\" ls32\n\t\tIPV6ADDRESS8$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,5}\" + H16$) + \"?\\\\:\\\\:\" + H16$ ), //[ *5( h16 \":\" ) h16 ] \"::\" h16\n\t\tIPV6ADDRESS9$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,6}\" + H16$) + \"?\\\\:\\\\:\" ), //[ *6( h16 \":\" ) h16 ] \"::\"\n\t\tIPV6ADDRESS$ = subexp([IPV6ADDRESS1$, IPV6ADDRESS2$, IPV6ADDRESS3$, IPV6ADDRESS4$, IPV6ADDRESS5$, IPV6ADDRESS6$, IPV6ADDRESS7$, IPV6ADDRESS8$, IPV6ADDRESS9$].join(\"|\")),\n\t\tZONEID$ = subexp(subexp(UNRESERVED$$ + \"|\" + PCT_ENCODED$) + \"+\"), //RFC 6874\n\t\tIPV6ADDRZ$ = subexp(IPV6ADDRESS$ + \"\\\\%25\" + ZONEID$), //RFC 6874\n\t\tIPV6ADDRZ_RELAXED$ = subexp(IPV6ADDRESS$ + subexp(\"\\\\%25|\\\\%(?!\" + HEXDIG$$ + \"{2})\") + ZONEID$), //RFC 6874, with relaxed parsing rules\n\t\tIPVFUTURE$ = subexp(\"[vV]\" + HEXDIG$$ + \"+\\\\.\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\") + \"+\"),\n\t\tIP_LITERAL$ = subexp(\"\\\\[\" + subexp(IPV6ADDRZ_RELAXED$ + \"|\" + IPV6ADDRESS$ + \"|\" + IPVFUTURE$) + \"\\\\]\"), //RFC 6874\n\t\tREG_NAME$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$)) + \"*\"),\n\t\tHOST$ = subexp(IP_LITERAL$ + \"|\" + IPV4ADDRESS$ + \"(?!\" + REG_NAME$ + \")\" + \"|\" + REG_NAME$),\n\t\tPORT$ = subexp(DIGIT$$ + \"*\"),\n\t\tAUTHORITY$ = subexp(subexp(USERINFO$ + \"@\") + \"?\" + HOST$ + subexp(\"\\\\:\" + PORT$) + \"?\"),\n\t\tPCHAR$ = subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@]\")),\n\t\tSEGMENT$ = subexp(PCHAR$ + \"*\"),\n\t\tSEGMENT_NZ$ = subexp(PCHAR$ + \"+\"),\n\t\tSEGMENT_NZ_NC$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\@]\")) + \"+\"),\n\t\tPATH_ABEMPTY$ = subexp(subexp(\"\\\\/\" + SEGMENT$) + \"*\"),\n\t\tPATH_ABSOLUTE$ = subexp(\"\\\\/\" + subexp(SEGMENT_NZ$ + PATH_ABEMPTY$) + \"?\"), //simplified\n\t\tPATH_NOSCHEME$ = subexp(SEGMENT_NZ_NC$ + PATH_ABEMPTY$), //simplified\n\t\tPATH_ROOTLESS$ = subexp(SEGMENT_NZ$ + PATH_ABEMPTY$), //simplified\n\t\tPATH_EMPTY$ = \"(?!\" + PCHAR$ + \")\",\n\t\tPATH$ = subexp(PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n\t\tQUERY$ = subexp(subexp(PCHAR$ + \"|\" + merge(\"[\\\\/\\\\?]\", IPRIVATE$$)) + \"*\"),\n\t\tFRAGMENT$ = subexp(subexp(PCHAR$ + \"|[\\\\/\\\\?]\") + \"*\"),\n\t\tHIER_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n\t\tURI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n\t\tRELATIVE_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$),\n\t\tRELATIVE$ = subexp(RELATIVE_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n\t\tURI_REFERENCE$ = subexp(URI$ + \"|\" + RELATIVE$),\n\t\tABSOLUTE_URI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\"),\n\n\t\tGENERIC_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tRELATIVE_REF$ = \"^(){0}\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tABSOLUTE_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?$\",\n\t\tSAMEDOC_REF$ = \"^\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tAUTHORITY_REF$ = \"^\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?$\"\n\t;\n\n\treturn {\n\t\tNOT_SCHEME : new RegExp(merge(\"[^]\", ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\"), \"g\"),\n\t\tNOT_USERINFO : new RegExp(merge(\"[^\\\\%\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_HOST : new RegExp(merge(\"[^\\\\%\\\\[\\\\]\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_PATH : new RegExp(merge(\"[^\\\\%\\\\/\\\\:\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_PATH_NOSCHEME : new RegExp(merge(\"[^\\\\%\\\\/\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_QUERY : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\", IPRIVATE$$), \"g\"),\n\t\tNOT_FRAGMENT : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\"), \"g\"),\n\t\tESCAPE : new RegExp(merge(\"[^]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tUNRESERVED : new RegExp(UNRESERVED$$, \"g\"),\n\t\tOTHER_CHARS : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, RESERVED$$), \"g\"),\n\t\tPCT_ENCODED : new RegExp(PCT_ENCODED$, \"g\"),\n\t\tIPV4ADDRESS : new RegExp(\"^(\" + IPV4ADDRESS$ + \")$\"),\n\t\tIPV6ADDRESS : new RegExp(\"^\\\\[?(\" + IPV6ADDRESS$ + \")\" + subexp(subexp(\"\\\\%25|\\\\%(?!\" + HEXDIG$$ + \"{2})\") + \"(\" + ZONEID$ + \")\") + \"?\\\\]?$\") //RFC 6874, with relaxed parsing rules\n\t};\n}\n\nexport default buildExps(false);\n","import { URIRegExps } from \"./uri\";\nimport { buildExps } from \"./regexps-uri\";\n\nexport default buildExps(true);\n","'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7E]/; // non-ASCII chars\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, fn) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = fn(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {Array} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(string, fn) {\n\tconst parts = string.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tstring = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tstring = string.replace(regexSeparators, '\\x2E');\n\tconst labels = string.split('.');\n\tconst encoded = map(labels, fn).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see \n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = array => String.fromCodePoint(...array);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint - 0x30 < 0x0A) {\n\t\treturn codePoint - 0x16;\n\t}\n\tif (codePoint - 0x41 < 0x1A) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint - 0x61 < 0x1A) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t// 0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tlet oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tlet inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tlet basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's state to ,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue == n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.1.0',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see \n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nexport default punycode;\n","/**\n * URI.js\n *\n * @fileoverview An RFC 3986 compliant, scheme extendable URI parsing/validating/resolving library for JavaScript.\n * @author Gary Court\n * @see http://github.com/garycourt/uri-js\n */\n\n/**\n * Copyright 2011 Gary Court. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this list of\n * conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice, this list\n * of conditions and the following disclaimer in the documentation and/or other materials\n * provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY GARY COURT ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GARY COURT OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of Gary Court.\n */\n\nimport URI_PROTOCOL from \"./regexps-uri\";\nimport IRI_PROTOCOL from \"./regexps-iri\";\nimport punycode from \"punycode\";\nimport { toUpperCase, typeOf, assign } from \"./util\";\n\nexport interface URIComponents {\n\tscheme?:string;\n\tuserinfo?:string;\n\thost?:string;\n\tport?:number|string;\n\tpath?:string;\n\tquery?:string;\n\tfragment?:string;\n\treference?:string;\n\terror?:string;\n}\n\nexport interface URIOptions {\n\tscheme?:string;\n\treference?:string;\n\ttolerant?:boolean;\n\tabsolutePath?:boolean;\n\tiri?:boolean;\n\tunicodeSupport?:boolean;\n\tdomainHost?:boolean;\n}\n\nexport interface URISchemeHandler {\n\tscheme:string;\n\tparse(components:ParentComponents, options:Options):Components;\n\tserialize(components:Components, options:Options):ParentComponents;\n\tunicodeSupport?:boolean;\n\tdomainHost?:boolean;\n\tabsolutePath?:boolean;\n}\n\nexport interface URIRegExps {\n\tNOT_SCHEME : RegExp,\n\tNOT_USERINFO : RegExp,\n\tNOT_HOST : RegExp,\n\tNOT_PATH : RegExp,\n\tNOT_PATH_NOSCHEME : RegExp,\n\tNOT_QUERY : RegExp,\n\tNOT_FRAGMENT : RegExp,\n\tESCAPE : RegExp,\n\tUNRESERVED : RegExp,\n\tOTHER_CHARS : RegExp,\n\tPCT_ENCODED : RegExp,\n\tIPV4ADDRESS : RegExp,\n\tIPV6ADDRESS : RegExp,\n}\n\nexport const SCHEMES:{[scheme:string]:URISchemeHandler} = {};\n\nexport function pctEncChar(chr:string):string {\n\tconst c = chr.charCodeAt(0);\n\tlet e:string;\n\n\tif (c < 16) e = \"%0\" + c.toString(16).toUpperCase();\n\telse if (c < 128) e = \"%\" + c.toString(16).toUpperCase();\n\telse if (c < 2048) e = \"%\" + ((c >> 6) | 192).toString(16).toUpperCase() + \"%\" + ((c & 63) | 128).toString(16).toUpperCase();\n\telse e = \"%\" + ((c >> 12) | 224).toString(16).toUpperCase() + \"%\" + (((c >> 6) & 63) | 128).toString(16).toUpperCase() + \"%\" + ((c & 63) | 128).toString(16).toUpperCase();\n\n\treturn e;\n}\n\nexport function pctDecChars(str:string):string {\n\tlet newStr = \"\";\n\tlet i = 0;\n\tconst il = str.length;\n\n\twhile (i < il) {\n\t\tconst c = parseInt(str.substr(i + 1, 2), 16);\n\n\t\tif (c < 128) {\n\t\t\tnewStr += String.fromCharCode(c);\n\t\t\ti += 3;\n\t\t}\n\t\telse if (c >= 194 && c < 224) {\n\t\t\tif ((il - i) >= 6) {\n\t\t\t\tconst c2 = parseInt(str.substr(i + 4, 2), 16);\n\t\t\t\tnewStr += String.fromCharCode(((c & 31) << 6) | (c2 & 63));\n\t\t\t} else {\n\t\t\t\tnewStr += str.substr(i, 6);\n\t\t\t}\n\t\t\ti += 6;\n\t\t}\n\t\telse if (c >= 224) {\n\t\t\tif ((il - i) >= 9) {\n\t\t\t\tconst c2 = parseInt(str.substr(i + 4, 2), 16);\n\t\t\t\tconst c3 = parseInt(str.substr(i + 7, 2), 16);\n\t\t\t\tnewStr += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));\n\t\t\t} else {\n\t\t\t\tnewStr += str.substr(i, 9);\n\t\t\t}\n\t\t\ti += 9;\n\t\t}\n\t\telse {\n\t\t\tnewStr += str.substr(i, 3);\n\t\t\ti += 3;\n\t\t}\n\t}\n\n\treturn newStr;\n}\n\nfunction _normalizeComponentEncoding(components:URIComponents, protocol:URIRegExps) {\n\tfunction decodeUnreserved(str:string):string {\n\t\tconst decStr = pctDecChars(str);\n\t\treturn (!decStr.match(protocol.UNRESERVED) ? str : decStr);\n\t}\n\n\tif (components.scheme) components.scheme = String(components.scheme).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_SCHEME, \"\");\n\tif (components.userinfo !== undefined) components.userinfo = String(components.userinfo).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_USERINFO, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.host !== undefined) components.host = String(components.host).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_HOST, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.path !== undefined) components.path = String(components.path).replace(protocol.PCT_ENCODED, decodeUnreserved).replace((components.scheme ? protocol.NOT_PATH : protocol.NOT_PATH_NOSCHEME), pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.query !== undefined) components.query = String(components.query).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_QUERY, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.fragment !== undefined) components.fragment = String(components.fragment).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_FRAGMENT, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\n\treturn components;\n};\n\nfunction _stripLeadingZeros(str:string):string {\n\treturn str.replace(/^0*(.*)/, \"$1\") || \"0\";\n}\n\nfunction _normalizeIPv4(host:string, protocol:URIRegExps):string {\n\tconst matches = host.match(protocol.IPV4ADDRESS) || [];\n\tconst [, address] = matches;\n\t\n\tif (address) {\n\t\treturn address.split(\".\").map(_stripLeadingZeros).join(\".\");\n\t} else {\n\t\treturn host;\n\t}\n}\n\nfunction _normalizeIPv6(host:string, protocol:URIRegExps):string {\n\tconst matches = host.match(protocol.IPV6ADDRESS) || [];\n\tconst [, address, zone] = matches;\n\n\tif (address) {\n\t\tconst [last, first] = address.toLowerCase().split('::').reverse();\n\t\tconst firstFields = first ? first.split(\":\").map(_stripLeadingZeros) : [];\n\t\tconst lastFields = last.split(\":\").map(_stripLeadingZeros);\n\t\tconst isLastFieldIPv4Address = protocol.IPV4ADDRESS.test(lastFields[lastFields.length - 1]);\n\t\tconst fieldCount = isLastFieldIPv4Address ? 7 : 8;\n\t\tconst lastFieldsStart = lastFields.length - fieldCount;\n\t\tconst fields = Array(fieldCount);\n\n\t\tfor (let x = 0; x < fieldCount; ++x) {\n\t\t\tfields[x] = firstFields[x] || lastFields[lastFieldsStart + x] || '';\n\t\t}\n\n\t\tif (isLastFieldIPv4Address) {\n\t\t\tfields[fieldCount - 1] = _normalizeIPv4(fields[fieldCount - 1], protocol);\n\t\t}\n\n\t\tconst allZeroFields = fields.reduce>((acc, field, index) => {\n\t\t\tif (!field || field === \"0\") {\n\t\t\t\tconst lastLongest = acc[acc.length - 1];\n\t\t\t\tif (lastLongest && lastLongest.index + lastLongest.length === index) {\n\t\t\t\t\tlastLongest.length++;\n\t\t\t\t} else {\n\t\t\t\t\tacc.push({ index, length : 1 });\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, []);\n\n\t\tconst longestZeroFields = allZeroFields.sort((a, b) => b.length - a.length)[0];\n\n\t\tlet newHost:string;\n\t\tif (longestZeroFields && longestZeroFields.length > 1) {\n\t\t\tconst newFirst = fields.slice(0, longestZeroFields.index) ;\n\t\t\tconst newLast = fields.slice(longestZeroFields.index + longestZeroFields.length);\n\t\t\tnewHost = newFirst.join(\":\") + \"::\" + newLast.join(\":\");\n\t\t} else {\n\t\t\tnewHost = fields.join(\":\");\n\t\t}\n\n\t\tif (zone) {\n\t\t\tnewHost += \"%\" + zone;\n\t\t}\n\n\t\treturn newHost;\n\t} else {\n\t\treturn host;\n\t}\n}\n\nconst URI_PARSE = /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:([^\\/?#@]*)@)?(\\[[^\\/?#\\]]+\\]|[^\\/?#:]*)(?:\\:(\\d*))?))?([^?#]*)(?:\\?([^#]*))?(?:#((?:.|\\n|\\r)*))?/i;\nconst NO_MATCH_IS_UNDEFINED = ((\"\").match(/(){0}/))[1] === undefined;\n\nexport function parse(uriString:string, options:URIOptions = {}):URIComponents {\n\tconst components:URIComponents = {};\n\tconst protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL);\n\n\tif (options.reference === \"suffix\") uriString = (options.scheme ? options.scheme + \":\" : \"\") + \"//\" + uriString;\n\n\tconst matches = uriString.match(URI_PARSE);\n\n\tif (matches) {\n\t\tif (NO_MATCH_IS_UNDEFINED) {\n\t\t\t//store each component\n\t\t\tcomponents.scheme = matches[1];\n\t\t\tcomponents.userinfo = matches[3];\n\t\t\tcomponents.host = matches[4];\n\t\t\tcomponents.port = parseInt(matches[5], 10);\n\t\t\tcomponents.path = matches[6] || \"\";\n\t\t\tcomponents.query = matches[7];\n\t\t\tcomponents.fragment = matches[8];\n\n\t\t\t//fix port number\n\t\t\tif (isNaN(components.port)) {\n\t\t\t\tcomponents.port = matches[5];\n\t\t\t}\n\t\t} else { //IE FIX for improper RegExp matching\n\t\t\t//store each component\n\t\t\tcomponents.scheme = matches[1] || undefined;\n\t\t\tcomponents.userinfo = (uriString.indexOf(\"@\") !== -1 ? matches[3] : undefined);\n\t\t\tcomponents.host = (uriString.indexOf(\"//\") !== -1 ? matches[4] : undefined);\n\t\t\tcomponents.port = parseInt(matches[5], 10);\n\t\t\tcomponents.path = matches[6] || \"\";\n\t\t\tcomponents.query = (uriString.indexOf(\"?\") !== -1 ? matches[7] : undefined);\n\t\t\tcomponents.fragment = (uriString.indexOf(\"#\") !== -1 ? matches[8] : undefined);\n\n\t\t\t//fix port number\n\t\t\tif (isNaN(components.port)) {\n\t\t\t\tcomponents.port = (uriString.match(/\\/\\/(?:.|\\n)*\\:(?:\\/|\\?|\\#|$)/) ? matches[4] : undefined);\n\t\t\t}\n\t\t}\n\n\t\tif (components.host) {\n\t\t\t//normalize IP hosts\n\t\t\tcomponents.host = _normalizeIPv6(_normalizeIPv4(components.host, protocol), protocol);\n\t\t}\n\n\t\t//determine reference type\n\t\tif (components.scheme === undefined && components.userinfo === undefined && components.host === undefined && components.port === undefined && !components.path && components.query === undefined) {\n\t\t\tcomponents.reference = \"same-document\";\n\t\t} else if (components.scheme === undefined) {\n\t\t\tcomponents.reference = \"relative\";\n\t\t} else if (components.fragment === undefined) {\n\t\t\tcomponents.reference = \"absolute\";\n\t\t} else {\n\t\t\tcomponents.reference = \"uri\";\n\t\t}\n\n\t\t//check for reference errors\n\t\tif (options.reference && options.reference !== \"suffix\" && options.reference !== components.reference) {\n\t\t\tcomponents.error = components.error || \"URI is not a \" + options.reference + \" reference.\";\n\t\t}\n\n\t\t//find scheme handler\n\t\tconst schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n\n\t\t//check if scheme can't handle IRIs\n\t\tif (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) {\n\t\t\t//if host component is a domain name\n\t\t\tif (components.host && (options.domainHost || (schemeHandler && schemeHandler.domainHost))) {\n\t\t\t\t//convert Unicode IDN -> ASCII IDN\n\t\t\t\ttry {\n\t\t\t\t\tcomponents.host = punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase());\n\t\t\t\t} catch (e) {\n\t\t\t\t\tcomponents.error = components.error || \"Host's domain name can not be converted to ASCII via punycode: \" + e;\n\t\t\t\t}\n\t\t\t}\n\t\t\t//convert IRI -> URI\n\t\t\t_normalizeComponentEncoding(components, URI_PROTOCOL);\n\t\t} else {\n\t\t\t//normalize encodings\n\t\t\t_normalizeComponentEncoding(components, protocol);\n\t\t}\n\n\t\t//perform scheme specific parsing\n\t\tif (schemeHandler && schemeHandler.parse) {\n\t\t\tschemeHandler.parse(components, options);\n\t\t}\n\t} else {\n\t\tcomponents.error = components.error || \"URI can not be parsed.\";\n\t}\n\n\treturn components;\n};\n\nfunction _recomposeAuthority(components:URIComponents, options:URIOptions):string|undefined {\n\tconst protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL);\n\tconst uriTokens:Array = [];\n\n\tif (components.userinfo !== undefined) {\n\t\turiTokens.push(components.userinfo);\n\t\turiTokens.push(\"@\");\n\t}\n\n\tif (components.host !== undefined) {\n\t\t//normalize IP hosts, add brackets and escape zone separator for IPv6\n\t\turiTokens.push(_normalizeIPv6(_normalizeIPv4(String(components.host), protocol), protocol).replace(protocol.IPV6ADDRESS, (_, $1, $2) => \"[\" + $1 + ($2 ? \"%25\" + $2 : \"\") + \"]\"));\n\t}\n\n\tif (typeof components.port === \"number\") {\n\t\turiTokens.push(\":\");\n\t\turiTokens.push(components.port.toString(10));\n\t}\n\n\treturn uriTokens.length ? uriTokens.join(\"\") : undefined;\n};\n\nconst RDS1 = /^\\.\\.?\\//;\nconst RDS2 = /^\\/\\.(\\/|$)/;\nconst RDS3 = /^\\/\\.\\.(\\/|$)/;\nconst RDS4 = /^\\.\\.?$/;\nconst RDS5 = /^\\/?(?:.|\\n)*?(?=\\/|$)/;\n\nexport function removeDotSegments(input:string):string {\n\tconst output:Array = [];\n\n\twhile (input.length) {\n\t\tif (input.match(RDS1)) {\n\t\t\tinput = input.replace(RDS1, \"\");\n\t\t} else if (input.match(RDS2)) {\n\t\t\tinput = input.replace(RDS2, \"/\");\n\t\t} else if (input.match(RDS3)) {\n\t\t\tinput = input.replace(RDS3, \"/\");\n\t\t\toutput.pop();\n\t\t} else if (input === \".\" || input === \"..\") {\n\t\t\tinput = \"\";\n\t\t} else {\n\t\t\tconst im = input.match(RDS5);\n\t\t\tif (im) {\n\t\t\t\tconst s = im[0];\n\t\t\t\tinput = input.slice(s.length);\n\t\t\t\toutput.push(s);\n\t\t\t} else {\n\t\t\t\tthrow new Error(\"Unexpected dot segment condition\");\n\t\t\t}\n\t\t}\n\t}\n\n\treturn output.join(\"\");\n};\n\nexport function serialize(components:URIComponents, options:URIOptions = {}):string {\n\tconst protocol = (options.iri ? IRI_PROTOCOL : URI_PROTOCOL);\n\tconst uriTokens:Array = [];\n\n\t//find scheme handler\n\tconst schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n\n\t//perform scheme specific serialization\n\tif (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(components, options);\n\n\tif (components.host) {\n\t\t//if host component is an IPv6 address\n\t\tif (protocol.IPV6ADDRESS.test(components.host)) {\n\t\t\t//TODO: normalize IPv6 address as per RFC 5952\n\t\t}\n\n\t\t//if host component is a domain name\n\t\telse if (options.domainHost || (schemeHandler && schemeHandler.domainHost)) {\n\t\t\t//convert IDN via punycode\n\t\t\ttry {\n\t\t\t\tcomponents.host = (!options.iri ? punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()) : punycode.toUnicode(components.host));\n\t\t\t} catch (e) {\n\t\t\t\tcomponents.error = components.error || \"Host's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n\t\t\t}\n\t\t}\n\t}\n\n\t//normalize encoding\n\t_normalizeComponentEncoding(components, protocol);\n\n\tif (options.reference !== \"suffix\" && components.scheme) {\n\t\turiTokens.push(components.scheme);\n\t\turiTokens.push(\":\");\n\t}\n\n\tconst authority = _recomposeAuthority(components, options);\n\tif (authority !== undefined) {\n\t\tif (options.reference !== \"suffix\") {\n\t\t\turiTokens.push(\"//\");\n\t\t}\n\n\t\turiTokens.push(authority);\n\n\t\tif (components.path && components.path.charAt(0) !== \"/\") {\n\t\t\turiTokens.push(\"/\");\n\t\t}\n\t}\n\n\tif (components.path !== undefined) {\n\t\tlet s = components.path;\n\n\t\tif (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) {\n\t\t\ts = removeDotSegments(s);\n\t\t}\n\n\t\tif (authority === undefined) {\n\t\t\ts = s.replace(/^\\/\\//, \"/%2F\"); //don't allow the path to start with \"//\"\n\t\t}\n\n\t\turiTokens.push(s);\n\t}\n\n\tif (components.query !== undefined) {\n\t\turiTokens.push(\"?\");\n\t\turiTokens.push(components.query);\n\t}\n\n\tif (components.fragment !== undefined) {\n\t\turiTokens.push(\"#\");\n\t\turiTokens.push(components.fragment);\n\t}\n\n\treturn uriTokens.join(\"\"); //merge tokens into a string\n};\n\nexport function resolveComponents(base:URIComponents, relative:URIComponents, options:URIOptions = {}, skipNormalization?:boolean):URIComponents {\n\tconst target:URIComponents = {};\n\n\tif (!skipNormalization) {\n\t\tbase = parse(serialize(base, options), options); //normalize base components\n\t\trelative = parse(serialize(relative, options), options); //normalize relative components\n\t}\n\toptions = options || {};\n\n\tif (!options.tolerant && relative.scheme) {\n\t\ttarget.scheme = relative.scheme;\n\t\t//target.authority = relative.authority;\n\t\ttarget.userinfo = relative.userinfo;\n\t\ttarget.host = relative.host;\n\t\ttarget.port = relative.port;\n\t\ttarget.path = removeDotSegments(relative.path || \"\");\n\t\ttarget.query = relative.query;\n\t} else {\n\t\tif (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) {\n\t\t\t//target.authority = relative.authority;\n\t\t\ttarget.userinfo = relative.userinfo;\n\t\t\ttarget.host = relative.host;\n\t\t\ttarget.port = relative.port;\n\t\t\ttarget.path = removeDotSegments(relative.path || \"\");\n\t\t\ttarget.query = relative.query;\n\t\t} else {\n\t\t\tif (!relative.path) {\n\t\t\t\ttarget.path = base.path;\n\t\t\t\tif (relative.query !== undefined) {\n\t\t\t\t\ttarget.query = relative.query;\n\t\t\t\t} else {\n\t\t\t\t\ttarget.query = base.query;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (relative.path.charAt(0) === \"/\") {\n\t\t\t\t\ttarget.path = removeDotSegments(relative.path);\n\t\t\t\t} else {\n\t\t\t\t\tif ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) {\n\t\t\t\t\t\ttarget.path = \"/\" + relative.path;\n\t\t\t\t\t} else if (!base.path) {\n\t\t\t\t\t\ttarget.path = relative.path;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttarget.path = base.path.slice(0, base.path.lastIndexOf(\"/\") + 1) + relative.path;\n\t\t\t\t\t}\n\t\t\t\t\ttarget.path = removeDotSegments(target.path);\n\t\t\t\t}\n\t\t\t\ttarget.query = relative.query;\n\t\t\t}\n\t\t\t//target.authority = base.authority;\n\t\t\ttarget.userinfo = base.userinfo;\n\t\t\ttarget.host = base.host;\n\t\t\ttarget.port = base.port;\n\t\t}\n\t\ttarget.scheme = base.scheme;\n\t}\n\n\ttarget.fragment = relative.fragment;\n\n\treturn target;\n};\n\nexport function resolve(baseURI:string, relativeURI:string, options?:URIOptions):string {\n\tconst schemelessOptions = assign({ scheme : 'null' }, options);\n\treturn serialize(resolveComponents(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true), schemelessOptions);\n};\n\nexport function normalize(uri:string, options?:URIOptions):string;\nexport function normalize(uri:URIComponents, options?:URIOptions):URIComponents;\nexport function normalize(uri:any, options?:URIOptions):any {\n\tif (typeof uri === \"string\") {\n\t\turi = serialize(parse(uri, options), options);\n\t} else if (typeOf(uri) === \"object\") {\n\t\turi = parse(serialize(uri, options), options);\n\t}\n\n\treturn uri;\n};\n\nexport function equal(uriA:string, uriB:string, options?: URIOptions):boolean;\nexport function equal(uriA:URIComponents, uriB:URIComponents, options?:URIOptions):boolean;\nexport function equal(uriA:any, uriB:any, options?:URIOptions):boolean {\n\tif (typeof uriA === \"string\") {\n\t\turiA = serialize(parse(uriA, options), options);\n\t} else if (typeOf(uriA) === \"object\") {\n\t\turiA = serialize(uriA, options);\n\t}\n\n\tif (typeof uriB === \"string\") {\n\t\turiB = serialize(parse(uriB, options), options);\n\t} else if (typeOf(uriB) === \"object\") {\n\t\turiB = serialize(uriB, options);\n\t}\n\n\treturn uriA === uriB;\n};\n\nexport function escapeComponent(str:string, options?:URIOptions):string {\n\treturn str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.ESCAPE : IRI_PROTOCOL.ESCAPE), pctEncChar);\n};\n\nexport function unescapeComponent(str:string, options?:URIOptions):string {\n\treturn str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.PCT_ENCODED : IRI_PROTOCOL.PCT_ENCODED), pctDecChars);\n};\n","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\n\nconst handler:URISchemeHandler = {\n\tscheme : \"http\",\n\n\tdomainHost : true,\n\n\tparse : function (components:URIComponents, options:URIOptions):URIComponents {\n\t\t//report missing host\n\t\tif (!components.host) {\n\t\t\tcomponents.error = components.error || \"HTTP URIs must have a host.\";\n\t\t}\n\n\t\treturn components;\n\t},\n\n\tserialize : function (components:URIComponents, options:URIOptions):URIComponents {\n\t\t//normalize the default port\n\t\tif (components.port === (String(components.scheme).toLowerCase() !== \"https\" ? 80 : 443) || components.port === \"\") {\n\t\t\tcomponents.port = undefined;\n\t\t}\n\t\t\n\t\t//normalize the empty path\n\t\tif (!components.path) {\n\t\t\tcomponents.path = \"/\";\n\t\t}\n\n\t\t//NOTE: We do not parse query strings for HTTP URIs\n\t\t//as WWW Form Url Encoded query strings are part of the HTML4+ spec,\n\t\t//and not the HTTP spec.\n\n\t\treturn components;\n\t}\n};\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport http from \"./http\";\n\nconst handler:URISchemeHandler = {\n\tscheme : \"https\",\n\tdomainHost : http.domainHost,\n\tparse : http.parse,\n\tserialize : http.serialize\n}\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { pctEncChar, pctDecChars, unescapeComponent } from \"../uri\";\nimport punycode from \"punycode\";\nimport { merge, subexp, toUpperCase, toArray } from \"../util\";\n\nexport interface MailtoHeaders {\n\t[hfname:string]:string\n}\n\nexport interface MailtoComponents extends URIComponents {\n\tto:Array,\n\theaders?:MailtoHeaders,\n\tsubject?:string,\n\tbody?:string\n}\n\nconst O:MailtoHeaders = {};\nconst isIRI = true;\n\n//RFC 3986\nconst UNRESERVED$$ = \"[A-Za-z0-9\\\\-\\\\.\\\\_\\\\~\" + (isIRI ? \"\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF\" : \"\") + \"]\";\nconst HEXDIG$$ = \"[0-9A-Fa-f]\"; //case-insensitive\nconst PCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$)); //expanded\n\n//RFC 5322, except these symbols as per RFC 6068: @ : / ? # [ ] & ; =\n//const ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\#\\\\$\\\\%\\\\&\\\\'\\\\*\\\\+\\\\-\\\\/\\\\=\\\\?\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QTEXT$$ = \"[\\\\x01-\\\\x08\\\\x0B\\\\x0C\\\\x0E-\\\\x1F\\\\x7F]\"; //(%d1-8 / %d11-12 / %d14-31 / %d127)\n//const QTEXT$$ = merge(\"[\\\\x21\\\\x23-\\\\x5B\\\\x5D-\\\\x7E]\", OBS_QTEXT$$); //%d33 / %d35-91 / %d93-126 / obs-qtext\n//const VCHAR$$ = \"[\\\\x21-\\\\x7E]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QP$ = subexp(\"\\\\\\\\\" + merge(\"[\\\\x00\\\\x0D\\\\x0A]\", OBS_QTEXT$$)); //%d0 / CR / LF / obs-qtext\n//const FWS$ = subexp(subexp(WSP$$ + \"*\" + \"\\\\x0D\\\\x0A\") + \"?\" + WSP$$ + \"+\");\n//const QUOTED_PAIR$ = subexp(subexp(\"\\\\\\\\\" + subexp(VCHAR$$ + \"|\" + WSP$$)) + \"|\" + OBS_QP$);\n//const QUOTED_STRING$ = subexp('\\\\\"' + subexp(FWS$ + \"?\" + QCONTENT$) + \"*\" + FWS$ + \"?\" + '\\\\\"');\nconst ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\$\\\\%\\\\'\\\\*\\\\+\\\\-\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\nconst QTEXT$$ = \"[\\\\!\\\\$\\\\%\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\-\\\\.0-9\\\\<\\\\>A-Z\\\\x5E-\\\\x7E]\";\nconst VCHAR$$ = merge(QTEXT$$, \"[\\\\\\\"\\\\\\\\]\");\nconst DOT_ATOM_TEXT$ = subexp(ATEXT$$ + \"+\" + subexp(\"\\\\.\" + ATEXT$$ + \"+\") + \"*\");\nconst QUOTED_PAIR$ = subexp(\"\\\\\\\\\" + VCHAR$$);\nconst QCONTENT$ = subexp(QTEXT$$ + \"|\" + QUOTED_PAIR$);\nconst QUOTED_STRING$ = subexp('\\\\\"' + QCONTENT$ + \"*\" + '\\\\\"');\n\n//RFC 6068\nconst DTEXT_NO_OBS$$ = \"[\\\\x21-\\\\x5A\\\\x5E-\\\\x7E]\"; //%d33-90 / %d94-126\nconst SOME_DELIMS$$ = \"[\\\\!\\\\$\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\:\\\\@]\";\nconst QCHAR$ = subexp(UNRESERVED$$ + \"|\" + PCT_ENCODED$ + \"|\" + SOME_DELIMS$$);\nconst DOMAIN$ = subexp(DOT_ATOM_TEXT$ + \"|\" + \"\\\\[\" + DTEXT_NO_OBS$$ + \"*\" + \"\\\\]\");\nconst LOCAL_PART$ = subexp(DOT_ATOM_TEXT$ + \"|\" + QUOTED_STRING$);\nconst ADDR_SPEC$ = subexp(LOCAL_PART$ + \"\\\\@\" + DOMAIN$);\nconst TO$ = subexp(ADDR_SPEC$ + subexp(\"\\\\,\" + ADDR_SPEC$) + \"*\");\nconst HFNAME$ = subexp(QCHAR$ + \"*\");\nconst HFVALUE$ = HFNAME$;\nconst HFIELD$ = subexp(HFNAME$ + \"\\\\=\" + HFVALUE$);\nconst HFIELDS2$ = subexp(HFIELD$ + subexp(\"\\\\&\" + HFIELD$) + \"*\");\nconst HFIELDS$ = subexp(\"\\\\?\" + HFIELDS2$);\nconst MAILTO_URI = new RegExp(\"^mailto\\\\:\" + TO$ + \"?\" + HFIELDS$ + \"?$\");\n\nconst UNRESERVED = new RegExp(UNRESERVED$$, \"g\");\nconst PCT_ENCODED = new RegExp(PCT_ENCODED$, \"g\");\nconst NOT_LOCAL_PART = new RegExp(merge(\"[^]\", ATEXT$$, \"[\\\\.]\", '[\\\\\"]', VCHAR$$), \"g\");\nconst NOT_DOMAIN = new RegExp(merge(\"[^]\", ATEXT$$, \"[\\\\.]\", \"[\\\\[]\", DTEXT_NO_OBS$$, \"[\\\\]]\"), \"g\");\nconst NOT_HFNAME = new RegExp(merge(\"[^]\", UNRESERVED$$, SOME_DELIMS$$), \"g\");\nconst NOT_HFVALUE = NOT_HFNAME;\nconst TO = new RegExp(\"^\" + TO$ + \"$\");\nconst HFIELDS = new RegExp(\"^\" + HFIELDS2$ + \"$\");\n\nfunction decodeUnreserved(str:string):string {\n\tconst decStr = pctDecChars(str);\n\treturn (!decStr.match(UNRESERVED) ? str : decStr);\n}\n\nconst handler:URISchemeHandler = {\n\tscheme : \"mailto\",\n\n\tparse : function (components:URIComponents, options:URIOptions):MailtoComponents {\n\t\tconst mailtoComponents = components as MailtoComponents;\n\t\tconst to = mailtoComponents.to = (mailtoComponents.path ? mailtoComponents.path.split(\",\") : []);\n\t\tmailtoComponents.path = undefined;\n\n\t\tif (mailtoComponents.query) {\n\t\t\tlet unknownHeaders = false\n\t\t\tconst headers:MailtoHeaders = {};\n\t\t\tconst hfields = mailtoComponents.query.split(\"&\");\n\n\t\t\tfor (let x = 0, xl = hfields.length; x < xl; ++x) {\n\t\t\t\tconst hfield = hfields[x].split(\"=\");\n\n\t\t\t\tswitch (hfield[0]) {\n\t\t\t\t\tcase \"to\":\n\t\t\t\t\t\tconst toAddrs = hfield[1].split(\",\");\n\t\t\t\t\t\tfor (let x = 0, xl = toAddrs.length; x < xl; ++x) {\n\t\t\t\t\t\t\tto.push(toAddrs[x]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subject\":\n\t\t\t\t\t\tmailtoComponents.subject = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"body\":\n\t\t\t\t\t\tmailtoComponents.body = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tunknownHeaders = true;\n\t\t\t\t\t\theaders[unescapeComponent(hfield[0], options)] = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (unknownHeaders) mailtoComponents.headers = headers;\n\t\t}\n\n\t\tmailtoComponents.query = undefined;\n\n\t\tfor (let x = 0, xl = to.length; x < xl; ++x) {\n\t\t\tconst addr = to[x].split(\"@\");\n\n\t\t\taddr[0] = unescapeComponent(addr[0]);\n\n\t\t\tif (!options.unicodeSupport) {\n\t\t\t\t//convert Unicode IDN -> ASCII IDN\n\t\t\t\ttry {\n\t\t\t\t\taddr[1] = punycode.toASCII(unescapeComponent(addr[1], options).toLowerCase());\n\t\t\t\t} catch (e) {\n\t\t\t\t\tmailtoComponents.error = mailtoComponents.error || \"Email address's domain name can not be converted to ASCII via punycode: \" + e;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\taddr[1] = unescapeComponent(addr[1], options).toLowerCase();\n\t\t\t}\n\n\t\t\tto[x] = addr.join(\"@\");\n\t\t}\n\n\t\treturn mailtoComponents;\n\t},\n\n\tserialize : function (mailtoComponents:MailtoComponents, options:URIOptions):URIComponents {\n\t\tconst components = mailtoComponents as URIComponents;\n\t\tconst to = toArray(mailtoComponents.to);\n\t\tif (to) {\n\t\t\tfor (let x = 0, xl = to.length; x < xl; ++x) {\n\t\t\t\tconst toAddr = String(to[x]);\n\t\t\t\tconst atIdx = toAddr.lastIndexOf(\"@\");\n\t\t\t\tconst localPart = (toAddr.slice(0, atIdx)).replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_LOCAL_PART, pctEncChar);\n\t\t\t\tlet domain = toAddr.slice(atIdx + 1);\n\n\t\t\t\t//convert IDN via punycode\n\t\t\t\ttry {\n\t\t\t\t\tdomain = (!options.iri ? punycode.toASCII(unescapeComponent(domain, options).toLowerCase()) : punycode.toUnicode(domain));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tcomponents.error = components.error || \"Email address's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n\t\t\t\t}\n\n\t\t\t\tto[x] = localPart + \"@\" + domain;\n\t\t\t}\n\n\t\t\tcomponents.path = to.join(\",\");\n\t\t}\n\n\t\tconst headers = mailtoComponents.headers = mailtoComponents.headers || {};\n\n\t\tif (mailtoComponents.subject) headers[\"subject\"] = mailtoComponents.subject;\n\t\tif (mailtoComponents.body) headers[\"body\"] = mailtoComponents.body;\n\n\t\tconst fields = [];\n\t\tfor (const name in headers) {\n\t\t\tif (headers[name] !== O[name]) {\n\t\t\t\tfields.push(\n\t\t\t\t\tname.replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFNAME, pctEncChar) +\n\t\t\t\t\t\"=\" +\n\t\t\t\t\theaders[name].replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFVALUE, pctEncChar)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (fields.length) {\n\t\t\tcomponents.query = fields.join(\"&\");\n\t\t}\n\n\t\treturn components;\n\t}\n}\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { pctEncChar, SCHEMES } from \"../uri\";\n\nexport interface URNComponents extends URIComponents {\n\tnid?:string;\n\tnss?:string;\n}\n\nexport interface URNOptions extends URIOptions {\n\tnid?:string;\n}\n\nconst NID$ = \"(?:[0-9A-Za-z][0-9A-Za-z\\\\-]{1,31})\";\nconst PCT_ENCODED$ = \"(?:\\\\%[0-9A-Fa-f]{2})\";\nconst TRANS$$ = \"[0-9A-Za-z\\\\(\\\\)\\\\+\\\\,\\\\-\\\\.\\\\:\\\\=\\\\@\\\\;\\\\$\\\\_\\\\!\\\\*\\\\'\\\\/\\\\?\\\\#]\";\nconst NSS$ = \"(?:(?:\" + PCT_ENCODED$ + \"|\" + TRANS$$ + \")+)\";\nconst URN_SCHEME = new RegExp(\"^urn\\\\:(\" + NID$ + \")$\");\nconst URN_PATH = new RegExp(\"^(\" + NID$ + \")\\\\:(\" + NSS$ + \")$\");\nconst URN_PARSE = /^([^\\:]+)\\:(.*)/;\nconst URN_EXCLUDED = /[\\x00-\\x20\\\\\\\"\\&\\<\\>\\[\\]\\^\\`\\{\\|\\}\\~\\x7F-\\xFF]/g;\n\n//RFC 2141\nconst handler:URISchemeHandler = {\n\tscheme : \"urn\",\n\n\tparse : function (components:URIComponents, options:URNOptions):URNComponents {\n\t\tconst matches = components.path && components.path.match(URN_PARSE);\n\t\tlet urnComponents = components as URNComponents;\n\n\t\tif (matches) {\n\t\t\tconst scheme = options.scheme || urnComponents.scheme || \"urn\";\n\t\t\tconst nid = matches[1].toLowerCase();\n\t\t\tconst nss = matches[2];\n\t\t\tconst urnScheme = `${scheme}:${options.nid || nid}`;\n\t\t\tconst schemeHandler = SCHEMES[urnScheme];\n\n\t\t\turnComponents.nid = nid;\n\t\t\turnComponents.nss = nss;\n\t\t\turnComponents.path = undefined;\n\n\t\t\tif (schemeHandler) {\n\t\t\t\turnComponents = schemeHandler.parse(urnComponents, options) as URNComponents;\n\t\t\t}\n\t\t} else {\n\t\t\turnComponents.error = urnComponents.error || \"URN can not be parsed.\";\n\t\t}\n\n\t\treturn urnComponents;\n\t},\n\n\tserialize : function (urnComponents:URNComponents, options:URNOptions):URIComponents {\n\t\tconst scheme = options.scheme || urnComponents.scheme || \"urn\";\n\t\tconst nid = urnComponents.nid;\n\t\tconst urnScheme = `${scheme}:${options.nid || nid}`;\n\t\tconst schemeHandler = SCHEMES[urnScheme];\n\n\t\tif (schemeHandler) {\n\t\t\turnComponents = schemeHandler.serialize(urnComponents, options) as URNComponents;\n\t\t}\n\n\t\tconst uriComponents = urnComponents as URIComponents;\n\t\tconst nss = urnComponents.nss;\n\t\turiComponents.path = `${nid || options.nid}:${nss}`;\n\n\t\treturn uriComponents;\n\t},\n};\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { URNComponents } from \"./urn\";\nimport { SCHEMES } from \"../uri\";\n\nexport interface UUIDComponents extends URNComponents {\n\tuuid?: string;\n}\n\nconst UUID = /^[0-9A-Fa-f]{8}(?:\\-[0-9A-Fa-f]{4}){3}\\-[0-9A-Fa-f]{12}$/;\nconst UUID_PARSE = /^[0-9A-Fa-f\\-]{36}/;\n\n//RFC 4122\nconst handler:URISchemeHandler = {\n\tscheme : \"urn:uuid\",\n\n\tparse : function (urnComponents:URNComponents, options:URIOptions):UUIDComponents {\n\t\tconst uuidComponents = urnComponents as UUIDComponents;\n\t\tuuidComponents.uuid = uuidComponents.nss;\n\t\tuuidComponents.nss = undefined;\n\n\t\tif (!options.tolerant && (!uuidComponents.uuid || !uuidComponents.uuid.match(UUID))) {\n\t\t\tuuidComponents.error = uuidComponents.error || \"UUID is not valid.\";\n\t\t}\n\n\t\treturn uuidComponents;\n\t},\n\n\tserialize : function (uuidComponents:UUIDComponents, options:URIOptions):URNComponents {\n\t\tconst urnComponents = uuidComponents as URNComponents;\n\t\t//normalize UUID\n\t\turnComponents.nss = (uuidComponents.uuid || \"\").toLowerCase();\n\t\treturn urnComponents;\n\t},\n};\n\nexport default handler;","import { SCHEMES } from \"./uri\";\n\nimport http from \"./schemes/http\";\nSCHEMES[http.scheme] = http;\n\nimport https from \"./schemes/https\";\nSCHEMES[https.scheme] = https;\n\nimport mailto from \"./schemes/mailto\";\nSCHEMES[mailto.scheme] = mailto;\n\nimport urn from \"./schemes/urn\";\nSCHEMES[urn.scheme] = urn;\n\nimport uuid from \"./schemes/urn-uuid\";\nSCHEMES[uuid.scheme] = uuid;\n\nexport * from \"./uri\";\n","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","'use strict';\n\n// https://mathiasbynens.be/notes/javascript-encoding\n// https://github.com/bestiejs/punycode.js - punycode.ucs2.decode\nmodule.exports = function ucs2length(str) {\n var length = 0\n , len = str.length\n , pos = 0\n , value;\n while (pos < len) {\n length++;\n value = str.charCodeAt(pos++);\n if (value >= 0xD800 && value <= 0xDBFF && pos < len) {\n // high surrogate, and there is a next character\n value = str.charCodeAt(pos);\n if ((value & 0xFC00) == 0xDC00) pos++; // low surrogate\n }\n }\n return length;\n};\n","'use strict';\n\n\nmodule.exports = {\n copy: copy,\n checkDataType: checkDataType,\n checkDataTypes: checkDataTypes,\n coerceToTypes: coerceToTypes,\n toHash: toHash,\n getProperty: getProperty,\n escapeQuotes: escapeQuotes,\n equal: require('fast-deep-equal'),\n ucs2length: require('./ucs2length'),\n varOccurences: varOccurences,\n varReplace: varReplace,\n cleanUpCode: cleanUpCode,\n finalCleanUpCode: finalCleanUpCode,\n schemaHasRules: schemaHasRules,\n schemaHasRulesExcept: schemaHasRulesExcept,\n schemaUnknownRules: schemaUnknownRules,\n toQuotedString: toQuotedString,\n getPathExpr: getPathExpr,\n getPath: getPath,\n getData: getData,\n unescapeFragment: unescapeFragment,\n unescapeJsonPointer: unescapeJsonPointer,\n escapeFragment: escapeFragment,\n escapeJsonPointer: escapeJsonPointer\n};\n\n\nfunction copy(o, to) {\n to = to || {};\n for (var key in o) to[key] = o[key];\n return to;\n}\n\n\nfunction checkDataType(dataType, data, negate) {\n var EQUAL = negate ? ' !== ' : ' === '\n , AND = negate ? ' || ' : ' && '\n , OK = negate ? '!' : ''\n , NOT = negate ? '' : '!';\n switch (dataType) {\n case 'null': return data + EQUAL + 'null';\n case 'array': return OK + 'Array.isArray(' + data + ')';\n case 'object': return '(' + OK + data + AND +\n 'typeof ' + data + EQUAL + '\"object\"' + AND +\n NOT + 'Array.isArray(' + data + '))';\n case 'integer': return '(typeof ' + data + EQUAL + '\"number\"' + AND +\n NOT + '(' + data + ' % 1)' +\n AND + data + EQUAL + data + ')';\n default: return 'typeof ' + data + EQUAL + '\"' + dataType + '\"';\n }\n}\n\n\nfunction checkDataTypes(dataTypes, data) {\n switch (dataTypes.length) {\n case 1: return checkDataType(dataTypes[0], data, true);\n default:\n var code = '';\n var types = toHash(dataTypes);\n if (types.array && types.object) {\n code = types.null ? '(': '(!' + data + ' || ';\n code += 'typeof ' + data + ' !== \"object\")';\n delete types.null;\n delete types.array;\n delete types.object;\n }\n if (types.number) delete types.integer;\n for (var t in types)\n code += (code ? ' && ' : '' ) + checkDataType(t, data, true);\n\n return code;\n }\n}\n\n\nvar COERCE_TO_TYPES = toHash([ 'string', 'number', 'integer', 'boolean', 'null' ]);\nfunction coerceToTypes(optionCoerceTypes, dataTypes) {\n if (Array.isArray(dataTypes)) {\n var types = [];\n for (var i=0; i= lvl) throw new Error('Cannot access property/index ' + up + ' levels up, current level is ' + lvl);\n return paths[lvl - up];\n }\n\n if (up > lvl) throw new Error('Cannot access data ' + up + ' levels up, current level is ' + lvl);\n data = 'data' + ((lvl - up) || '');\n if (!jsonPointer) return data;\n }\n\n var expr = data;\n var segments = jsonPointer.split('/');\n for (var i=0; i= 0) return { index: index, compiling: true };\n index = this._compilations.length;\n this._compilations[index] = {\n schema: schema,\n root: root,\n baseId: baseId\n };\n return { index: index, compiling: false };\n}\n\n\n/**\n * Removes the schema from the currently compiled list\n * @this Ajv\n * @param {Object} schema schema to compile\n * @param {Object} root root object\n * @param {String} baseId base schema ID\n */\nfunction endCompiling(schema, root, baseId) {\n /* jshint validthis: true */\n var i = compIndex.call(this, schema, root, baseId);\n if (i >= 0) this._compilations.splice(i, 1);\n}\n\n\n/**\n * Index of schema compilation in the currently compiled list\n * @this Ajv\n * @param {Object} schema schema to compile\n * @param {Object} root root object\n * @param {String} baseId base schema ID\n * @return {Integer} compilation index\n */\nfunction compIndex(schema, root, baseId) {\n /* jshint validthis: true */\n for (var i=0; i%\\\\^`{|}]|%[0-9a-f]{2})|\\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?)*\\})*$/i;\n// For the source: https://gist.github.com/dperini/729294\n// For test cases: https://mathiasbynens.be/demo/url-regex\n// @todo Delete current URL in favour of the commented out URL rule when this issue is fixed https://github.com/eslint/eslint/issues/7983.\n// var URL = /^(?:(?:https?|ftp):\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!10(?:\\.\\d{1,3}){3})(?!127(?:\\.\\d{1,3}){3})(?!169\\.254(?:\\.\\d{1,3}){2})(?!192\\.168(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u{00a1}-\\u{ffff}0-9]+-?)*[a-z\\u{00a1}-\\u{ffff}0-9]+)(?:\\.(?:[a-z\\u{00a1}-\\u{ffff}0-9]+-?)*[a-z\\u{00a1}-\\u{ffff}0-9]+)*(?:\\.(?:[a-z\\u{00a1}-\\u{ffff}]{2,})))(?::\\d{2,5})?(?:\\/[^\\s]*)?$/iu;\nvar URL = /^(?:(?:http[s\\u017F]?|ftp):\\/\\/)(?:(?:[\\0-\\x08\\x0E-\\x1F!-\\x9F\\xA1-\\u167F\\u1681-\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u205E\\u2060-\\u2FFF\\u3001-\\uD7FF\\uE000-\\uFEFE\\uFF00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+(?::(?:[\\0-\\x08\\x0E-\\x1F!-\\x9F\\xA1-\\u167F\\u1681-\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u205E\\u2060-\\u2FFF\\u3001-\\uD7FF\\uE000-\\uFEFE\\uFF00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])*)?@)?(?:(?!10(?:\\.[0-9]{1,3}){3})(?!127(?:\\.[0-9]{1,3}){3})(?!169\\.254(?:\\.[0-9]{1,3}){2})(?!192\\.168(?:\\.[0-9]{1,3}){2})(?!172\\.(?:1[6-9]|2[0-9]|3[01])(?:\\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9KSa-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+-?)*(?:[0-9KSa-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+)(?:\\.(?:(?:[0-9KSa-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+-?)*(?:[0-9KSa-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+)*(?:\\.(?:(?:[KSa-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\\/(?:[\\0-\\x08\\x0E-\\x1F!-\\x9F\\xA1-\\u167F\\u1681-\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u205E\\u2060-\\u2FFF\\u3001-\\uD7FF\\uE000-\\uFEFE\\uFF00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])*)?$/i;\nvar UUID = /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i;\nvar JSON_POINTER = /^(?:\\/(?:[^~/]|~0|~1)*)*$/;\nvar JSON_POINTER_URI_FRAGMENT = /^#(?:\\/(?:[a-z0-9_\\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i;\nvar RELATIVE_JSON_POINTER = /^(?:0|[1-9][0-9]*)(?:#|(?:\\/(?:[^~/]|~0|~1)*)*)$/;\n\n\nmodule.exports = formats;\n\nfunction formats(mode) {\n mode = mode == 'full' ? 'full' : 'fast';\n return util.copy(formats[mode]);\n}\n\n\nformats.fast = {\n // date: http://tools.ietf.org/html/rfc3339#section-5.6\n date: /^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d$/,\n // date-time: http://tools.ietf.org/html/rfc3339#section-5.6\n time: /^(?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)?$/i,\n 'date-time': /^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d[t\\s](?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)$/i,\n // uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js\n uri: /^(?:[a-z][a-z0-9+-.]*:)(?:\\/?\\/)?[^\\s]*$/i,\n 'uri-reference': /^(?:(?:[a-z][a-z0-9+-.]*:)?\\/?\\/)?(?:[^\\\\\\s#][^\\s#]*)?(?:#[^\\\\\\s]*)?$/i,\n 'uri-template': URITEMPLATE,\n url: URL,\n // email (sources from jsen validator):\n // http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address#answer-8829363\n // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address (search for 'willful violation')\n email: /^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,\n hostname: HOSTNAME,\n // optimized https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html\n ipv4: /^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/,\n // optimized http://stackoverflow.com/questions/53497/regular-expression-that-matches-valid-ipv6-addresses\n ipv6: /^\\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(?:%.+)?\\s*$/i,\n regex: regex,\n // uuid: http://tools.ietf.org/html/rfc4122\n uuid: UUID,\n // JSON-pointer: https://tools.ietf.org/html/rfc6901\n // uri fragment: https://tools.ietf.org/html/rfc3986#appendix-A\n 'json-pointer': JSON_POINTER,\n 'json-pointer-uri-fragment': JSON_POINTER_URI_FRAGMENT,\n // relative JSON-pointer: http://tools.ietf.org/html/draft-luff-relative-json-pointer-00\n 'relative-json-pointer': RELATIVE_JSON_POINTER\n};\n\n\nformats.full = {\n date: date,\n time: time,\n 'date-time': date_time,\n uri: uri,\n 'uri-reference': URIREF,\n 'uri-template': URITEMPLATE,\n url: URL,\n email: /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,\n hostname: HOSTNAME,\n ipv4: /^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/,\n ipv6: /^\\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(?:%.+)?\\s*$/i,\n regex: regex,\n uuid: UUID,\n 'json-pointer': JSON_POINTER,\n 'json-pointer-uri-fragment': JSON_POINTER_URI_FRAGMENT,\n 'relative-json-pointer': RELATIVE_JSON_POINTER\n};\n\n\nfunction isLeapYear(year) {\n // https://tools.ietf.org/html/rfc3339#appendix-C\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n\n\nfunction date(str) {\n // full-date from http://tools.ietf.org/html/rfc3339#section-5.6\n var matches = str.match(DATE);\n if (!matches) return false;\n\n var year = +matches[1];\n var month = +matches[2];\n var day = +matches[3];\n\n return month >= 1 && month <= 12 && day >= 1 &&\n day <= (month == 2 && isLeapYear(year) ? 29 : DAYS[month]);\n}\n\n\nfunction time(str, full) {\n var matches = str.match(TIME);\n if (!matches) return false;\n\n var hour = matches[1];\n var minute = matches[2];\n var second = matches[3];\n var timeZone = matches[5];\n return ((hour <= 23 && minute <= 59 && second <= 59) ||\n (hour == 23 && minute == 59 && second == 60)) &&\n (!full || timeZone);\n}\n\n\nvar DATE_TIME_SEPARATOR = /t|\\s/i;\nfunction date_time(str) {\n // http://tools.ietf.org/html/rfc3339#section-5.6\n var dateTime = str.split(DATE_TIME_SEPARATOR);\n return dateTime.length == 2 && date(dateTime[0]) && time(dateTime[1], true);\n}\n\n\nvar NOT_URI_FRAGMENT = /\\/|:/;\nfunction uri(str) {\n // http://jmrware.com/articles/2009/uri_regexp/URI_regex.html + optional protocol + required \".\"\n return NOT_URI_FRAGMENT.test(str) && URI.test(str);\n}\n\n\nvar Z_ANCHOR = /[^\\\\]\\\\Z/;\nfunction regex(str) {\n if (Z_ANCHOR.test(str)) return false;\n try {\n new RegExp(str);\n return true;\n } catch(e) {\n return false;\n }\n}\n","'use strict';\nmodule.exports = function generate_ref(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $async, $refCode;\n if ($schema == '#' || $schema == '#/') {\n if (it.isRoot) {\n $async = it.async;\n $refCode = 'validate';\n } else {\n $async = it.root.schema.$async === true;\n $refCode = 'root.refVal[0]';\n }\n } else {\n var $refVal = it.resolveRef(it.baseId, $schema, it.isRoot);\n if ($refVal === undefined) {\n var $message = it.MissingRefError.message(it.baseId, $schema);\n if (it.opts.missingRefs == 'fail') {\n it.logger.error($message);\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('$ref') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { ref: \\'' + (it.util.escapeQuotes($schema)) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'can\\\\\\'t resolve reference ' + (it.util.escapeQuotes($schema)) + '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: ' + (it.util.toQuotedString($schema)) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n if ($breakOnError) {\n out += ' if (false) { ';\n }\n } else if (it.opts.missingRefs == 'ignore') {\n it.logger.warn($message);\n if ($breakOnError) {\n out += ' if (true) { ';\n }\n } else {\n throw new it.MissingRefError(it.baseId, $schema, $message);\n }\n } else if ($refVal.inline) {\n var $it = it.util.copy(it);\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n $it.schema = $refVal.schema;\n $it.schemaPath = '';\n $it.errSchemaPath = $schema;\n var $code = it.validate($it).replace(/validate\\.schema/g, $refVal.code);\n out += ' ' + ($code) + ' ';\n if ($breakOnError) {\n out += ' if (' + ($nextValid) + ') { ';\n }\n } else {\n $async = $refVal.$async === true || (it.async && $refVal.$async !== false);\n $refCode = $refVal.code;\n }\n }\n if ($refCode) {\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = '';\n if (it.opts.passContext) {\n out += ' ' + ($refCode) + '.call(this, ';\n } else {\n out += ' ' + ($refCode) + '( ';\n }\n out += ' ' + ($data) + ', (dataPath || \\'\\')';\n if (it.errorPath != '\"\"') {\n out += ' + ' + (it.errorPath);\n }\n var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData',\n $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty';\n out += ' , ' + ($parentData) + ' , ' + ($parentDataProperty) + ', rootData) ';\n var __callValidate = out;\n out = $$outStack.pop();\n if ($async) {\n if (!it.async) throw new Error('async schema referenced by sync schema');\n if ($breakOnError) {\n out += ' var ' + ($valid) + '; ';\n }\n out += ' try { await ' + (__callValidate) + '; ';\n if ($breakOnError) {\n out += ' ' + ($valid) + ' = true; ';\n }\n out += ' } catch (e) { if (!(e instanceof ValidationError)) throw e; if (vErrors === null) vErrors = e.errors; else vErrors = vErrors.concat(e.errors); errors = vErrors.length; ';\n if ($breakOnError) {\n out += ' ' + ($valid) + ' = false; ';\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' if (' + ($valid) + ') { ';\n }\n } else {\n out += ' if (!' + (__callValidate) + ') { if (vErrors === null) vErrors = ' + ($refCode) + '.errors; else vErrors = vErrors.concat(' + ($refCode) + '.errors); errors = vErrors.length; } ';\n if ($breakOnError) {\n out += ' else { ';\n }\n }\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_allOf(it, $keyword, $ruleType) {\n var out = ' ';\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $it = it.util.copy(it);\n var $closingBraces = '';\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n var $currentBaseId = $it.baseId,\n $allSchemasEmpty = true;\n var arr1 = $schema;\n if (arr1) {\n var $sch, $i = -1,\n l1 = arr1.length - 1;\n while ($i < l1) {\n $sch = arr1[$i += 1];\n if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) {\n $allSchemasEmpty = false;\n $it.schema = $sch;\n $it.schemaPath = $schemaPath + '[' + $i + ']';\n $it.errSchemaPath = $errSchemaPath + '/' + $i;\n out += ' ' + (it.validate($it)) + ' ';\n $it.baseId = $currentBaseId;\n if ($breakOnError) {\n out += ' if (' + ($nextValid) + ') { ';\n $closingBraces += '}';\n }\n }\n }\n }\n if ($breakOnError) {\n if ($allSchemasEmpty) {\n out += ' if (true) { ';\n } else {\n out += ' ' + ($closingBraces.slice(0, -1)) + ' ';\n }\n }\n out = it.util.cleanUpCode(out);\n return out;\n}\n","'use strict';\nmodule.exports = function generate_anyOf(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n var $closingBraces = '';\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n var $noEmptySchema = $schema.every(function($sch) {\n return (it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all));\n });\n if ($noEmptySchema) {\n var $currentBaseId = $it.baseId;\n out += ' var ' + ($errs) + ' = errors; var ' + ($valid) + ' = false; ';\n var $wasComposite = it.compositeRule;\n it.compositeRule = $it.compositeRule = true;\n var arr1 = $schema;\n if (arr1) {\n var $sch, $i = -1,\n l1 = arr1.length - 1;\n while ($i < l1) {\n $sch = arr1[$i += 1];\n $it.schema = $sch;\n $it.schemaPath = $schemaPath + '[' + $i + ']';\n $it.errSchemaPath = $errSchemaPath + '/' + $i;\n out += ' ' + (it.validate($it)) + ' ';\n $it.baseId = $currentBaseId;\n out += ' ' + ($valid) + ' = ' + ($valid) + ' || ' + ($nextValid) + '; if (!' + ($valid) + ') { ';\n $closingBraces += '}';\n }\n }\n it.compositeRule = $it.compositeRule = $wasComposite;\n out += ' ' + ($closingBraces) + ' if (!' + ($valid) + ') { var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('anyOf') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should match some schema in anyOf\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError(vErrors); ';\n } else {\n out += ' validate.errors = vErrors; return false; ';\n }\n }\n out += ' } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';\n if (it.opts.allErrors) {\n out += ' } ';\n }\n out = it.util.cleanUpCode(out);\n } else {\n if ($breakOnError) {\n out += ' if (true) { ';\n }\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_comment(it, $keyword, $ruleType) {\n var out = ' ';\n var $schema = it.schema[$keyword];\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $comment = it.util.toQuotedString($schema);\n if (it.opts.$comment === true) {\n out += ' console.log(' + ($comment) + ');';\n } else if (typeof it.opts.$comment == 'function') {\n out += ' self._opts.$comment(' + ($comment) + ', ' + (it.util.toQuotedString($errSchemaPath)) + ', validate.root.schema);';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_const(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n if (!$isData) {\n out += ' var schema' + ($lvl) + ' = validate.schema' + ($schemaPath) + ';';\n }\n out += 'var ' + ($valid) + ' = equal(' + ($data) + ', schema' + ($lvl) + '); if (!' + ($valid) + ') { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('const') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { allowedValue: schema' + ($lvl) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should be equal to constant\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' }';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_contains(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n var $closingBraces = '';\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n var $idx = 'i' + $lvl,\n $dataNxt = $it.dataLevel = it.dataLevel + 1,\n $nextData = 'data' + $dataNxt,\n $currentBaseId = it.baseId,\n $nonEmptySchema = (it.opts.strictKeywords ? typeof $schema == 'object' && Object.keys($schema).length > 0 : it.util.schemaHasRules($schema, it.RULES.all));\n out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';';\n if ($nonEmptySchema) {\n var $wasComposite = it.compositeRule;\n it.compositeRule = $it.compositeRule = true;\n $it.schema = $schema;\n $it.schemaPath = $schemaPath;\n $it.errSchemaPath = $errSchemaPath;\n out += ' var ' + ($nextValid) + ' = false; for (var ' + ($idx) + ' = 0; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { ';\n $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true);\n var $passData = $data + '[' + $idx + ']';\n $it.dataPathArr[$dataNxt] = $idx;\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n } else {\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n }\n out += ' if (' + ($nextValid) + ') break; } ';\n it.compositeRule = $it.compositeRule = $wasComposite;\n out += ' ' + ($closingBraces) + ' if (!' + ($nextValid) + ') {';\n } else {\n out += ' if (' + ($data) + '.length == 0) {';\n }\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('contains') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should contain a valid item\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } else { ';\n if ($nonEmptySchema) {\n out += ' errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';\n }\n if (it.opts.allErrors) {\n out += ' } ';\n }\n out = it.util.cleanUpCode(out);\n return out;\n}\n","'use strict';\nmodule.exports = function generate_dependencies(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n var $closingBraces = '';\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n var $schemaDeps = {},\n $propertyDeps = {},\n $ownProperties = it.opts.ownProperties;\n for ($property in $schema) {\n var $sch = $schema[$property];\n var $deps = Array.isArray($sch) ? $propertyDeps : $schemaDeps;\n $deps[$property] = $sch;\n }\n out += 'var ' + ($errs) + ' = errors;';\n var $currentErrorPath = it.errorPath;\n out += 'var missing' + ($lvl) + ';';\n for (var $property in $propertyDeps) {\n $deps = $propertyDeps[$property];\n if ($deps.length) {\n out += ' if ( ' + ($data) + (it.util.getProperty($property)) + ' !== undefined ';\n if ($ownProperties) {\n out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($property)) + '\\') ';\n }\n if ($breakOnError) {\n out += ' && ( ';\n var arr1 = $deps;\n if (arr1) {\n var $propertyKey, $i = -1,\n l1 = arr1.length - 1;\n while ($i < l1) {\n $propertyKey = arr1[$i += 1];\n if ($i) {\n out += ' || ';\n }\n var $prop = it.util.getProperty($propertyKey),\n $useData = $data + $prop;\n out += ' ( ( ' + ($useData) + ' === undefined ';\n if ($ownProperties) {\n out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n }\n out += ') && (missing' + ($lvl) + ' = ' + (it.util.toQuotedString(it.opts.jsonPointers ? $propertyKey : $prop)) + ') ) ';\n }\n }\n out += ')) { ';\n var $propertyPath = 'missing' + $lvl,\n $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\n if (it.opts._errorDataPathProperty) {\n it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + ' + ' + $propertyPath;\n }\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('dependencies') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { property: \\'' + (it.util.escapeQuotes($property)) + '\\', missingProperty: \\'' + ($missingProperty) + '\\', depsCount: ' + ($deps.length) + ', deps: \\'' + (it.util.escapeQuotes($deps.length == 1 ? $deps[0] : $deps.join(\", \"))) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should have ';\n if ($deps.length == 1) {\n out += 'property ' + (it.util.escapeQuotes($deps[0]));\n } else {\n out += 'properties ' + (it.util.escapeQuotes($deps.join(\", \")));\n }\n out += ' when property ' + (it.util.escapeQuotes($property)) + ' is present\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n } else {\n out += ' ) { ';\n var arr2 = $deps;\n if (arr2) {\n var $propertyKey, i2 = -1,\n l2 = arr2.length - 1;\n while (i2 < l2) {\n $propertyKey = arr2[i2 += 1];\n var $prop = it.util.getProperty($propertyKey),\n $missingProperty = it.util.escapeQuotes($propertyKey),\n $useData = $data + $prop;\n if (it.opts._errorDataPathProperty) {\n it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers);\n }\n out += ' if ( ' + ($useData) + ' === undefined ';\n if ($ownProperties) {\n out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n }\n out += ') { var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('dependencies') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { property: \\'' + (it.util.escapeQuotes($property)) + '\\', missingProperty: \\'' + ($missingProperty) + '\\', depsCount: ' + ($deps.length) + ', deps: \\'' + (it.util.escapeQuotes($deps.length == 1 ? $deps[0] : $deps.join(\", \"))) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should have ';\n if ($deps.length == 1) {\n out += 'property ' + (it.util.escapeQuotes($deps[0]));\n } else {\n out += 'properties ' + (it.util.escapeQuotes($deps.join(\", \")));\n }\n out += ' when property ' + (it.util.escapeQuotes($property)) + ' is present\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } ';\n }\n }\n }\n out += ' } ';\n if ($breakOnError) {\n $closingBraces += '}';\n out += ' else { ';\n }\n }\n }\n it.errorPath = $currentErrorPath;\n var $currentBaseId = $it.baseId;\n for (var $property in $schemaDeps) {\n var $sch = $schemaDeps[$property];\n if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) {\n out += ' ' + ($nextValid) + ' = true; if ( ' + ($data) + (it.util.getProperty($property)) + ' !== undefined ';\n if ($ownProperties) {\n out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($property)) + '\\') ';\n }\n out += ') { ';\n $it.schema = $sch;\n $it.schemaPath = $schemaPath + it.util.getProperty($property);\n $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($property);\n out += ' ' + (it.validate($it)) + ' ';\n $it.baseId = $currentBaseId;\n out += ' } ';\n if ($breakOnError) {\n out += ' if (' + ($nextValid) + ') { ';\n $closingBraces += '}';\n }\n }\n }\n if ($breakOnError) {\n out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';\n }\n out = it.util.cleanUpCode(out);\n return out;\n}\n","'use strict';\nmodule.exports = function generate_enum(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n var $i = 'i' + $lvl,\n $vSchema = 'schema' + $lvl;\n if (!$isData) {\n out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + ';';\n }\n out += 'var ' + ($valid) + ';';\n if ($isData) {\n out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {';\n }\n out += '' + ($valid) + ' = false;for (var ' + ($i) + '=0; ' + ($i) + '<' + ($vSchema) + '.length; ' + ($i) + '++) if (equal(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + '])) { ' + ($valid) + ' = true; break; }';\n if ($isData) {\n out += ' } ';\n }\n out += ' if (!' + ($valid) + ') { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('enum') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { allowedValues: schema' + ($lvl) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should be equal to one of the allowed values\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' }';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_format(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n if (it.opts.format === false) {\n if ($breakOnError) {\n out += ' if (true) { ';\n }\n return out;\n }\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n var $unknownFormats = it.opts.unknownFormats,\n $allowUnknown = Array.isArray($unknownFormats);\n if ($isData) {\n var $format = 'format' + $lvl,\n $isObject = 'isObject' + $lvl,\n $formatType = 'formatType' + $lvl;\n out += ' var ' + ($format) + ' = formats[' + ($schemaValue) + ']; var ' + ($isObject) + ' = typeof ' + ($format) + ' == \\'object\\' && !(' + ($format) + ' instanceof RegExp) && ' + ($format) + '.validate; var ' + ($formatType) + ' = ' + ($isObject) + ' && ' + ($format) + '.type || \\'string\\'; if (' + ($isObject) + ') { ';\n if (it.async) {\n out += ' var async' + ($lvl) + ' = ' + ($format) + '.async; ';\n }\n out += ' ' + ($format) + ' = ' + ($format) + '.validate; } if ( ';\n if ($isData) {\n out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'string\\') || ';\n }\n out += ' (';\n if ($unknownFormats != 'ignore') {\n out += ' (' + ($schemaValue) + ' && !' + ($format) + ' ';\n if ($allowUnknown) {\n out += ' && self._opts.unknownFormats.indexOf(' + ($schemaValue) + ') == -1 ';\n }\n out += ') || ';\n }\n out += ' (' + ($format) + ' && ' + ($formatType) + ' == \\'' + ($ruleType) + '\\' && !(typeof ' + ($format) + ' == \\'function\\' ? ';\n if (it.async) {\n out += ' (async' + ($lvl) + ' ? await ' + ($format) + '(' + ($data) + ') : ' + ($format) + '(' + ($data) + ')) ';\n } else {\n out += ' ' + ($format) + '(' + ($data) + ') ';\n }\n out += ' : ' + ($format) + '.test(' + ($data) + '))))) {';\n } else {\n var $format = it.formats[$schema];\n if (!$format) {\n if ($unknownFormats == 'ignore') {\n it.logger.warn('unknown format \"' + $schema + '\" ignored in schema at path \"' + it.errSchemaPath + '\"');\n if ($breakOnError) {\n out += ' if (true) { ';\n }\n return out;\n } else if ($allowUnknown && $unknownFormats.indexOf($schema) >= 0) {\n if ($breakOnError) {\n out += ' if (true) { ';\n }\n return out;\n } else {\n throw new Error('unknown format \"' + $schema + '\" is used in schema at path \"' + it.errSchemaPath + '\"');\n }\n }\n var $isObject = typeof $format == 'object' && !($format instanceof RegExp) && $format.validate;\n var $formatType = $isObject && $format.type || 'string';\n if ($isObject) {\n var $async = $format.async === true;\n $format = $format.validate;\n }\n if ($formatType != $ruleType) {\n if ($breakOnError) {\n out += ' if (true) { ';\n }\n return out;\n }\n if ($async) {\n if (!it.async) throw new Error('async format in sync schema');\n var $formatRef = 'formats' + it.util.getProperty($schema) + '.validate';\n out += ' if (!(await ' + ($formatRef) + '(' + ($data) + '))) { ';\n } else {\n out += ' if (! ';\n var $formatRef = 'formats' + it.util.getProperty($schema);\n if ($isObject) $formatRef += '.validate';\n if (typeof $format == 'function') {\n out += ' ' + ($formatRef) + '(' + ($data) + ') ';\n } else {\n out += ' ' + ($formatRef) + '.test(' + ($data) + ') ';\n }\n out += ') { ';\n }\n }\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('format') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { format: ';\n if ($isData) {\n out += '' + ($schemaValue);\n } else {\n out += '' + (it.util.toQuotedString($schema));\n }\n out += ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should match format \"';\n if ($isData) {\n out += '\\' + ' + ($schemaValue) + ' + \\'';\n } else {\n out += '' + (it.util.escapeQuotes($schema));\n }\n out += '\"\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: ';\n if ($isData) {\n out += 'validate.schema' + ($schemaPath);\n } else {\n out += '' + (it.util.toQuotedString($schema));\n }\n out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_if(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n var $thenSch = it.schema['then'],\n $elseSch = it.schema['else'],\n $thenPresent = $thenSch !== undefined && (it.opts.strictKeywords ? typeof $thenSch == 'object' && Object.keys($thenSch).length > 0 : it.util.schemaHasRules($thenSch, it.RULES.all)),\n $elsePresent = $elseSch !== undefined && (it.opts.strictKeywords ? typeof $elseSch == 'object' && Object.keys($elseSch).length > 0 : it.util.schemaHasRules($elseSch, it.RULES.all)),\n $currentBaseId = $it.baseId;\n if ($thenPresent || $elsePresent) {\n var $ifClause;\n $it.createErrors = false;\n $it.schema = $schema;\n $it.schemaPath = $schemaPath;\n $it.errSchemaPath = $errSchemaPath;\n out += ' var ' + ($errs) + ' = errors; var ' + ($valid) + ' = true; ';\n var $wasComposite = it.compositeRule;\n it.compositeRule = $it.compositeRule = true;\n out += ' ' + (it.validate($it)) + ' ';\n $it.baseId = $currentBaseId;\n $it.createErrors = true;\n out += ' errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';\n it.compositeRule = $it.compositeRule = $wasComposite;\n if ($thenPresent) {\n out += ' if (' + ($nextValid) + ') { ';\n $it.schema = it.schema['then'];\n $it.schemaPath = it.schemaPath + '.then';\n $it.errSchemaPath = it.errSchemaPath + '/then';\n out += ' ' + (it.validate($it)) + ' ';\n $it.baseId = $currentBaseId;\n out += ' ' + ($valid) + ' = ' + ($nextValid) + '; ';\n if ($thenPresent && $elsePresent) {\n $ifClause = 'ifClause' + $lvl;\n out += ' var ' + ($ifClause) + ' = \\'then\\'; ';\n } else {\n $ifClause = '\\'then\\'';\n }\n out += ' } ';\n if ($elsePresent) {\n out += ' else { ';\n }\n } else {\n out += ' if (!' + ($nextValid) + ') { ';\n }\n if ($elsePresent) {\n $it.schema = it.schema['else'];\n $it.schemaPath = it.schemaPath + '.else';\n $it.errSchemaPath = it.errSchemaPath + '/else';\n out += ' ' + (it.validate($it)) + ' ';\n $it.baseId = $currentBaseId;\n out += ' ' + ($valid) + ' = ' + ($nextValid) + '; ';\n if ($thenPresent && $elsePresent) {\n $ifClause = 'ifClause' + $lvl;\n out += ' var ' + ($ifClause) + ' = \\'else\\'; ';\n } else {\n $ifClause = '\\'else\\'';\n }\n out += ' } ';\n }\n out += ' if (!' + ($valid) + ') { var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('if') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { failingKeyword: ' + ($ifClause) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should match \"\\' + ' + ($ifClause) + ' + \\'\" schema\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError(vErrors); ';\n } else {\n out += ' validate.errors = vErrors; return false; ';\n }\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' else { ';\n }\n out = it.util.cleanUpCode(out);\n } else {\n if ($breakOnError) {\n out += ' if (true) { ';\n }\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_items(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n var $closingBraces = '';\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n var $idx = 'i' + $lvl,\n $dataNxt = $it.dataLevel = it.dataLevel + 1,\n $nextData = 'data' + $dataNxt,\n $currentBaseId = it.baseId;\n out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';';\n if (Array.isArray($schema)) {\n var $additionalItems = it.schema.additionalItems;\n if ($additionalItems === false) {\n out += ' ' + ($valid) + ' = ' + ($data) + '.length <= ' + ($schema.length) + '; ';\n var $currErrSchemaPath = $errSchemaPath;\n $errSchemaPath = it.errSchemaPath + '/additionalItems';\n out += ' if (!' + ($valid) + ') { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('additionalItems') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schema.length) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should NOT have more than ' + ($schema.length) + ' items\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } ';\n $errSchemaPath = $currErrSchemaPath;\n if ($breakOnError) {\n $closingBraces += '}';\n out += ' else { ';\n }\n }\n var arr1 = $schema;\n if (arr1) {\n var $sch, $i = -1,\n l1 = arr1.length - 1;\n while ($i < l1) {\n $sch = arr1[$i += 1];\n if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) {\n out += ' ' + ($nextValid) + ' = true; if (' + ($data) + '.length > ' + ($i) + ') { ';\n var $passData = $data + '[' + $i + ']';\n $it.schema = $sch;\n $it.schemaPath = $schemaPath + '[' + $i + ']';\n $it.errSchemaPath = $errSchemaPath + '/' + $i;\n $it.errorPath = it.util.getPathExpr(it.errorPath, $i, it.opts.jsonPointers, true);\n $it.dataPathArr[$dataNxt] = $i;\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n } else {\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' if (' + ($nextValid) + ') { ';\n $closingBraces += '}';\n }\n }\n }\n }\n if (typeof $additionalItems == 'object' && (it.opts.strictKeywords ? typeof $additionalItems == 'object' && Object.keys($additionalItems).length > 0 : it.util.schemaHasRules($additionalItems, it.RULES.all))) {\n $it.schema = $additionalItems;\n $it.schemaPath = it.schemaPath + '.additionalItems';\n $it.errSchemaPath = it.errSchemaPath + '/additionalItems';\n out += ' ' + ($nextValid) + ' = true; if (' + ($data) + '.length > ' + ($schema.length) + ') { for (var ' + ($idx) + ' = ' + ($schema.length) + '; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { ';\n $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true);\n var $passData = $data + '[' + $idx + ']';\n $it.dataPathArr[$dataNxt] = $idx;\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n } else {\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n }\n if ($breakOnError) {\n out += ' if (!' + ($nextValid) + ') break; ';\n }\n out += ' } } ';\n if ($breakOnError) {\n out += ' if (' + ($nextValid) + ') { ';\n $closingBraces += '}';\n }\n }\n } else if ((it.opts.strictKeywords ? typeof $schema == 'object' && Object.keys($schema).length > 0 : it.util.schemaHasRules($schema, it.RULES.all))) {\n $it.schema = $schema;\n $it.schemaPath = $schemaPath;\n $it.errSchemaPath = $errSchemaPath;\n out += ' for (var ' + ($idx) + ' = ' + (0) + '; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { ';\n $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true);\n var $passData = $data + '[' + $idx + ']';\n $it.dataPathArr[$dataNxt] = $idx;\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n } else {\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n }\n if ($breakOnError) {\n out += ' if (!' + ($nextValid) + ') break; ';\n }\n out += ' }';\n }\n if ($breakOnError) {\n out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';\n }\n out = it.util.cleanUpCode(out);\n return out;\n}\n","'use strict';\nmodule.exports = function generate__limit(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $errorKeyword;\n var $data = 'data' + ($dataLvl || '');\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n var $isMax = $keyword == 'maximum',\n $exclusiveKeyword = $isMax ? 'exclusiveMaximum' : 'exclusiveMinimum',\n $schemaExcl = it.schema[$exclusiveKeyword],\n $isDataExcl = it.opts.$data && $schemaExcl && $schemaExcl.$data,\n $op = $isMax ? '<' : '>',\n $notOp = $isMax ? '>' : '<',\n $errorKeyword = undefined;\n if ($isDataExcl) {\n var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr),\n $exclusive = 'exclusive' + $lvl,\n $exclType = 'exclType' + $lvl,\n $exclIsNumber = 'exclIsNumber' + $lvl,\n $opExpr = 'op' + $lvl,\n $opStr = '\\' + ' + $opExpr + ' + \\'';\n out += ' var schemaExcl' + ($lvl) + ' = ' + ($schemaValueExcl) + '; ';\n $schemaValueExcl = 'schemaExcl' + $lvl;\n out += ' var ' + ($exclusive) + '; var ' + ($exclType) + ' = typeof ' + ($schemaValueExcl) + '; if (' + ($exclType) + ' != \\'boolean\\' && ' + ($exclType) + ' != \\'undefined\\' && ' + ($exclType) + ' != \\'number\\') { ';\n var $errorKeyword = $exclusiveKeyword;\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ($errorKeyword || '_exclusiveLimit') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'' + ($exclusiveKeyword) + ' should be boolean\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } else if ( ';\n if ($isData) {\n out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n }\n out += ' ' + ($exclType) + ' == \\'number\\' ? ( (' + ($exclusive) + ' = ' + ($schemaValue) + ' === undefined || ' + ($schemaValueExcl) + ' ' + ($op) + '= ' + ($schemaValue) + ') ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValueExcl) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) : ( (' + ($exclusive) + ' = ' + ($schemaValueExcl) + ' === true) ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValue) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) || ' + ($data) + ' !== ' + ($data) + ') { var op' + ($lvl) + ' = ' + ($exclusive) + ' ? \\'' + ($op) + '\\' : \\'' + ($op) + '=\\'; ';\n if ($schema === undefined) {\n $errorKeyword = $exclusiveKeyword;\n $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword;\n $schemaValue = $schemaValueExcl;\n $isData = $isDataExcl;\n }\n } else {\n var $exclIsNumber = typeof $schemaExcl == 'number',\n $opStr = $op;\n if ($exclIsNumber && $isData) {\n var $opExpr = '\\'' + $opStr + '\\'';\n out += ' if ( ';\n if ($isData) {\n out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n }\n out += ' ( ' + ($schemaValue) + ' === undefined || ' + ($schemaExcl) + ' ' + ($op) + '= ' + ($schemaValue) + ' ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaExcl) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) || ' + ($data) + ' !== ' + ($data) + ') { ';\n } else {\n if ($exclIsNumber && $schema === undefined) {\n $exclusive = true;\n $errorKeyword = $exclusiveKeyword;\n $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword;\n $schemaValue = $schemaExcl;\n $notOp += '=';\n } else {\n if ($exclIsNumber) $schemaValue = Math[$isMax ? 'min' : 'max']($schemaExcl, $schema);\n if ($schemaExcl === ($exclIsNumber ? $schemaValue : true)) {\n $exclusive = true;\n $errorKeyword = $exclusiveKeyword;\n $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword;\n $notOp += '=';\n } else {\n $exclusive = false;\n $opStr += '=';\n }\n }\n var $opExpr = '\\'' + $opStr + '\\'';\n out += ' if ( ';\n if ($isData) {\n out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n }\n out += ' ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' || ' + ($data) + ' !== ' + ($data) + ') { ';\n }\n }\n $errorKeyword = $errorKeyword || $keyword;\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ($errorKeyword || '_limit') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { comparison: ' + ($opExpr) + ', limit: ' + ($schemaValue) + ', exclusive: ' + ($exclusive) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should be ' + ($opStr) + ' ';\n if ($isData) {\n out += '\\' + ' + ($schemaValue);\n } else {\n out += '' + ($schemaValue) + '\\'';\n }\n }\n if (it.opts.verbose) {\n out += ' , schema: ';\n if ($isData) {\n out += 'validate.schema' + ($schemaPath);\n } else {\n out += '' + ($schema);\n }\n out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate__limitItems(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $errorKeyword;\n var $data = 'data' + ($dataLvl || '');\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n var $op = $keyword == 'maxItems' ? '>' : '<';\n out += 'if ( ';\n if ($isData) {\n out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n }\n out += ' ' + ($data) + '.length ' + ($op) + ' ' + ($schemaValue) + ') { ';\n var $errorKeyword = $keyword;\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ($errorKeyword || '_limitItems') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should NOT have ';\n if ($keyword == 'maxItems') {\n out += 'more';\n } else {\n out += 'fewer';\n }\n out += ' than ';\n if ($isData) {\n out += '\\' + ' + ($schemaValue) + ' + \\'';\n } else {\n out += '' + ($schema);\n }\n out += ' items\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: ';\n if ($isData) {\n out += 'validate.schema' + ($schemaPath);\n } else {\n out += '' + ($schema);\n }\n out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += '} ';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate__limitLength(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $errorKeyword;\n var $data = 'data' + ($dataLvl || '');\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n var $op = $keyword == 'maxLength' ? '>' : '<';\n out += 'if ( ';\n if ($isData) {\n out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n }\n if (it.opts.unicode === false) {\n out += ' ' + ($data) + '.length ';\n } else {\n out += ' ucs2length(' + ($data) + ') ';\n }\n out += ' ' + ($op) + ' ' + ($schemaValue) + ') { ';\n var $errorKeyword = $keyword;\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ($errorKeyword || '_limitLength') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should NOT be ';\n if ($keyword == 'maxLength') {\n out += 'longer';\n } else {\n out += 'shorter';\n }\n out += ' than ';\n if ($isData) {\n out += '\\' + ' + ($schemaValue) + ' + \\'';\n } else {\n out += '' + ($schema);\n }\n out += ' characters\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: ';\n if ($isData) {\n out += 'validate.schema' + ($schemaPath);\n } else {\n out += '' + ($schema);\n }\n out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += '} ';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate__limitProperties(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $errorKeyword;\n var $data = 'data' + ($dataLvl || '');\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n var $op = $keyword == 'maxProperties' ? '>' : '<';\n out += 'if ( ';\n if ($isData) {\n out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n }\n out += ' Object.keys(' + ($data) + ').length ' + ($op) + ' ' + ($schemaValue) + ') { ';\n var $errorKeyword = $keyword;\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ($errorKeyword || '_limitProperties') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should NOT have ';\n if ($keyword == 'maxProperties') {\n out += 'more';\n } else {\n out += 'fewer';\n }\n out += ' than ';\n if ($isData) {\n out += '\\' + ' + ($schemaValue) + ' + \\'';\n } else {\n out += '' + ($schema);\n }\n out += ' properties\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: ';\n if ($isData) {\n out += 'validate.schema' + ($schemaPath);\n } else {\n out += '' + ($schema);\n }\n out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += '} ';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_multipleOf(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n out += 'var division' + ($lvl) + ';if (';\n if ($isData) {\n out += ' ' + ($schemaValue) + ' !== undefined && ( typeof ' + ($schemaValue) + ' != \\'number\\' || ';\n }\n out += ' (division' + ($lvl) + ' = ' + ($data) + ' / ' + ($schemaValue) + ', ';\n if (it.opts.multipleOfPrecision) {\n out += ' Math.abs(Math.round(division' + ($lvl) + ') - division' + ($lvl) + ') > 1e-' + (it.opts.multipleOfPrecision) + ' ';\n } else {\n out += ' division' + ($lvl) + ' !== parseInt(division' + ($lvl) + ') ';\n }\n out += ' ) ';\n if ($isData) {\n out += ' ) ';\n }\n out += ' ) { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('multipleOf') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { multipleOf: ' + ($schemaValue) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should be multiple of ';\n if ($isData) {\n out += '\\' + ' + ($schemaValue);\n } else {\n out += '' + ($schemaValue) + '\\'';\n }\n }\n if (it.opts.verbose) {\n out += ' , schema: ';\n if ($isData) {\n out += 'validate.schema' + ($schemaPath);\n } else {\n out += '' + ($schema);\n }\n out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += '} ';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_not(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n if ((it.opts.strictKeywords ? typeof $schema == 'object' && Object.keys($schema).length > 0 : it.util.schemaHasRules($schema, it.RULES.all))) {\n $it.schema = $schema;\n $it.schemaPath = $schemaPath;\n $it.errSchemaPath = $errSchemaPath;\n out += ' var ' + ($errs) + ' = errors; ';\n var $wasComposite = it.compositeRule;\n it.compositeRule = $it.compositeRule = true;\n $it.createErrors = false;\n var $allErrorsOption;\n if ($it.opts.allErrors) {\n $allErrorsOption = $it.opts.allErrors;\n $it.opts.allErrors = false;\n }\n out += ' ' + (it.validate($it)) + ' ';\n $it.createErrors = true;\n if ($allErrorsOption) $it.opts.allErrors = $allErrorsOption;\n it.compositeRule = $it.compositeRule = $wasComposite;\n out += ' if (' + ($nextValid) + ') { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('not') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should NOT be valid\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';\n if (it.opts.allErrors) {\n out += ' } ';\n }\n } else {\n out += ' var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('not') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should NOT be valid\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n if ($breakOnError) {\n out += ' if (false) { ';\n }\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_oneOf(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n var $closingBraces = '';\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n var $currentBaseId = $it.baseId,\n $prevValid = 'prevValid' + $lvl,\n $passingSchemas = 'passingSchemas' + $lvl;\n out += 'var ' + ($errs) + ' = errors , ' + ($prevValid) + ' = false , ' + ($valid) + ' = false , ' + ($passingSchemas) + ' = null; ';\n var $wasComposite = it.compositeRule;\n it.compositeRule = $it.compositeRule = true;\n var arr1 = $schema;\n if (arr1) {\n var $sch, $i = -1,\n l1 = arr1.length - 1;\n while ($i < l1) {\n $sch = arr1[$i += 1];\n if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) {\n $it.schema = $sch;\n $it.schemaPath = $schemaPath + '[' + $i + ']';\n $it.errSchemaPath = $errSchemaPath + '/' + $i;\n out += ' ' + (it.validate($it)) + ' ';\n $it.baseId = $currentBaseId;\n } else {\n out += ' var ' + ($nextValid) + ' = true; ';\n }\n if ($i) {\n out += ' if (' + ($nextValid) + ' && ' + ($prevValid) + ') { ' + ($valid) + ' = false; ' + ($passingSchemas) + ' = [' + ($passingSchemas) + ', ' + ($i) + ']; } else { ';\n $closingBraces += '}';\n }\n out += ' if (' + ($nextValid) + ') { ' + ($valid) + ' = ' + ($prevValid) + ' = true; ' + ($passingSchemas) + ' = ' + ($i) + '; }';\n }\n }\n it.compositeRule = $it.compositeRule = $wasComposite;\n out += '' + ($closingBraces) + 'if (!' + ($valid) + ') { var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('oneOf') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { passingSchemas: ' + ($passingSchemas) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should match exactly one schema in oneOf\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError(vErrors); ';\n } else {\n out += ' validate.errors = vErrors; return false; ';\n }\n }\n out += '} else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; }';\n if (it.opts.allErrors) {\n out += ' } ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_pattern(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n var $regexp = $isData ? '(new RegExp(' + $schemaValue + '))' : it.usePattern($schema);\n out += 'if ( ';\n if ($isData) {\n out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'string\\') || ';\n }\n out += ' !' + ($regexp) + '.test(' + ($data) + ') ) { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('pattern') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { pattern: ';\n if ($isData) {\n out += '' + ($schemaValue);\n } else {\n out += '' + (it.util.toQuotedString($schema));\n }\n out += ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should match pattern \"';\n if ($isData) {\n out += '\\' + ' + ($schemaValue) + ' + \\'';\n } else {\n out += '' + (it.util.escapeQuotes($schema));\n }\n out += '\"\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: ';\n if ($isData) {\n out += 'validate.schema' + ($schemaPath);\n } else {\n out += '' + (it.util.toQuotedString($schema));\n }\n out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += '} ';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_properties(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n var $closingBraces = '';\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n var $key = 'key' + $lvl,\n $idx = 'idx' + $lvl,\n $dataNxt = $it.dataLevel = it.dataLevel + 1,\n $nextData = 'data' + $dataNxt,\n $dataProperties = 'dataProperties' + $lvl;\n var $schemaKeys = Object.keys($schema || {}),\n $pProperties = it.schema.patternProperties || {},\n $pPropertyKeys = Object.keys($pProperties),\n $aProperties = it.schema.additionalProperties,\n $someProperties = $schemaKeys.length || $pPropertyKeys.length,\n $noAdditional = $aProperties === false,\n $additionalIsSchema = typeof $aProperties == 'object' && Object.keys($aProperties).length,\n $removeAdditional = it.opts.removeAdditional,\n $checkAdditional = $noAdditional || $additionalIsSchema || $removeAdditional,\n $ownProperties = it.opts.ownProperties,\n $currentBaseId = it.baseId;\n var $required = it.schema.required;\n if ($required && !(it.opts.$data && $required.$data) && $required.length < it.opts.loopRequired) var $requiredHash = it.util.toHash($required);\n out += 'var ' + ($errs) + ' = errors;var ' + ($nextValid) + ' = true;';\n if ($ownProperties) {\n out += ' var ' + ($dataProperties) + ' = undefined;';\n }\n if ($checkAdditional) {\n if ($ownProperties) {\n out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; ';\n } else {\n out += ' for (var ' + ($key) + ' in ' + ($data) + ') { ';\n }\n if ($someProperties) {\n out += ' var isAdditional' + ($lvl) + ' = !(false ';\n if ($schemaKeys.length) {\n if ($schemaKeys.length > 8) {\n out += ' || validate.schema' + ($schemaPath) + '.hasOwnProperty(' + ($key) + ') ';\n } else {\n var arr1 = $schemaKeys;\n if (arr1) {\n var $propertyKey, i1 = -1,\n l1 = arr1.length - 1;\n while (i1 < l1) {\n $propertyKey = arr1[i1 += 1];\n out += ' || ' + ($key) + ' == ' + (it.util.toQuotedString($propertyKey)) + ' ';\n }\n }\n }\n }\n if ($pPropertyKeys.length) {\n var arr2 = $pPropertyKeys;\n if (arr2) {\n var $pProperty, $i = -1,\n l2 = arr2.length - 1;\n while ($i < l2) {\n $pProperty = arr2[$i += 1];\n out += ' || ' + (it.usePattern($pProperty)) + '.test(' + ($key) + ') ';\n }\n }\n }\n out += ' ); if (isAdditional' + ($lvl) + ') { ';\n }\n if ($removeAdditional == 'all') {\n out += ' delete ' + ($data) + '[' + ($key) + ']; ';\n } else {\n var $currentErrorPath = it.errorPath;\n var $additionalProperty = '\\' + ' + $key + ' + \\'';\n if (it.opts._errorDataPathProperty) {\n it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);\n }\n if ($noAdditional) {\n if ($removeAdditional) {\n out += ' delete ' + ($data) + '[' + ($key) + ']; ';\n } else {\n out += ' ' + ($nextValid) + ' = false; ';\n var $currErrSchemaPath = $errSchemaPath;\n $errSchemaPath = it.errSchemaPath + '/additionalProperties';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('additionalProperties') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { additionalProperty: \\'' + ($additionalProperty) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'';\n if (it.opts._errorDataPathProperty) {\n out += 'is an invalid additional property';\n } else {\n out += 'should NOT have additional properties';\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n $errSchemaPath = $currErrSchemaPath;\n if ($breakOnError) {\n out += ' break; ';\n }\n }\n } else if ($additionalIsSchema) {\n if ($removeAdditional == 'failing') {\n out += ' var ' + ($errs) + ' = errors; ';\n var $wasComposite = it.compositeRule;\n it.compositeRule = $it.compositeRule = true;\n $it.schema = $aProperties;\n $it.schemaPath = it.schemaPath + '.additionalProperties';\n $it.errSchemaPath = it.errSchemaPath + '/additionalProperties';\n $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);\n var $passData = $data + '[' + $key + ']';\n $it.dataPathArr[$dataNxt] = $key;\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n } else {\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n }\n out += ' if (!' + ($nextValid) + ') { errors = ' + ($errs) + '; if (validate.errors !== null) { if (errors) validate.errors.length = errors; else validate.errors = null; } delete ' + ($data) + '[' + ($key) + ']; } ';\n it.compositeRule = $it.compositeRule = $wasComposite;\n } else {\n $it.schema = $aProperties;\n $it.schemaPath = it.schemaPath + '.additionalProperties';\n $it.errSchemaPath = it.errSchemaPath + '/additionalProperties';\n $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);\n var $passData = $data + '[' + $key + ']';\n $it.dataPathArr[$dataNxt] = $key;\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n } else {\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n }\n if ($breakOnError) {\n out += ' if (!' + ($nextValid) + ') break; ';\n }\n }\n }\n it.errorPath = $currentErrorPath;\n }\n if ($someProperties) {\n out += ' } ';\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' if (' + ($nextValid) + ') { ';\n $closingBraces += '}';\n }\n }\n var $useDefaults = it.opts.useDefaults && !it.compositeRule;\n if ($schemaKeys.length) {\n var arr3 = $schemaKeys;\n if (arr3) {\n var $propertyKey, i3 = -1,\n l3 = arr3.length - 1;\n while (i3 < l3) {\n $propertyKey = arr3[i3 += 1];\n var $sch = $schema[$propertyKey];\n if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) {\n var $prop = it.util.getProperty($propertyKey),\n $passData = $data + $prop,\n $hasDefault = $useDefaults && $sch.default !== undefined;\n $it.schema = $sch;\n $it.schemaPath = $schemaPath + $prop;\n $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($propertyKey);\n $it.errorPath = it.util.getPath(it.errorPath, $propertyKey, it.opts.jsonPointers);\n $it.dataPathArr[$dataNxt] = it.util.toQuotedString($propertyKey);\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n $code = it.util.varReplace($code, $nextData, $passData);\n var $useData = $passData;\n } else {\n var $useData = $nextData;\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ';\n }\n if ($hasDefault) {\n out += ' ' + ($code) + ' ';\n } else {\n if ($requiredHash && $requiredHash[$propertyKey]) {\n out += ' if ( ' + ($useData) + ' === undefined ';\n if ($ownProperties) {\n out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n }\n out += ') { ' + ($nextValid) + ' = false; ';\n var $currentErrorPath = it.errorPath,\n $currErrSchemaPath = $errSchemaPath,\n $missingProperty = it.util.escapeQuotes($propertyKey);\n if (it.opts._errorDataPathProperty) {\n it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers);\n }\n $errSchemaPath = it.errSchemaPath + '/required';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'';\n if (it.opts._errorDataPathProperty) {\n out += 'is a required property';\n } else {\n out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n $errSchemaPath = $currErrSchemaPath;\n it.errorPath = $currentErrorPath;\n out += ' } else { ';\n } else {\n if ($breakOnError) {\n out += ' if ( ' + ($useData) + ' === undefined ';\n if ($ownProperties) {\n out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n }\n out += ') { ' + ($nextValid) + ' = true; } else { ';\n } else {\n out += ' if (' + ($useData) + ' !== undefined ';\n if ($ownProperties) {\n out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n }\n out += ' ) { ';\n }\n }\n out += ' ' + ($code) + ' } ';\n }\n }\n if ($breakOnError) {\n out += ' if (' + ($nextValid) + ') { ';\n $closingBraces += '}';\n }\n }\n }\n }\n if ($pPropertyKeys.length) {\n var arr4 = $pPropertyKeys;\n if (arr4) {\n var $pProperty, i4 = -1,\n l4 = arr4.length - 1;\n while (i4 < l4) {\n $pProperty = arr4[i4 += 1];\n var $sch = $pProperties[$pProperty];\n if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) {\n $it.schema = $sch;\n $it.schemaPath = it.schemaPath + '.patternProperties' + it.util.getProperty($pProperty);\n $it.errSchemaPath = it.errSchemaPath + '/patternProperties/' + it.util.escapeFragment($pProperty);\n if ($ownProperties) {\n out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; ';\n } else {\n out += ' for (var ' + ($key) + ' in ' + ($data) + ') { ';\n }\n out += ' if (' + (it.usePattern($pProperty)) + '.test(' + ($key) + ')) { ';\n $it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);\n var $passData = $data + '[' + $key + ']';\n $it.dataPathArr[$dataNxt] = $key;\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n } else {\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n }\n if ($breakOnError) {\n out += ' if (!' + ($nextValid) + ') break; ';\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' else ' + ($nextValid) + ' = true; ';\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' if (' + ($nextValid) + ') { ';\n $closingBraces += '}';\n }\n }\n }\n }\n }\n if ($breakOnError) {\n out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';\n }\n out = it.util.cleanUpCode(out);\n return out;\n}\n","'use strict';\nmodule.exports = function generate_propertyNames(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n var $closingBraces = '';\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n out += 'var ' + ($errs) + ' = errors;';\n if ((it.opts.strictKeywords ? typeof $schema == 'object' && Object.keys($schema).length > 0 : it.util.schemaHasRules($schema, it.RULES.all))) {\n $it.schema = $schema;\n $it.schemaPath = $schemaPath;\n $it.errSchemaPath = $errSchemaPath;\n var $key = 'key' + $lvl,\n $idx = 'idx' + $lvl,\n $i = 'i' + $lvl,\n $invalidName = '\\' + ' + $key + ' + \\'',\n $dataNxt = $it.dataLevel = it.dataLevel + 1,\n $nextData = 'data' + $dataNxt,\n $dataProperties = 'dataProperties' + $lvl,\n $ownProperties = it.opts.ownProperties,\n $currentBaseId = it.baseId;\n if ($ownProperties) {\n out += ' var ' + ($dataProperties) + ' = undefined; ';\n }\n if ($ownProperties) {\n out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; ';\n } else {\n out += ' for (var ' + ($key) + ' in ' + ($data) + ') { ';\n }\n out += ' var startErrs' + ($lvl) + ' = errors; ';\n var $passData = $key;\n var $wasComposite = it.compositeRule;\n it.compositeRule = $it.compositeRule = true;\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n } else {\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n }\n it.compositeRule = $it.compositeRule = $wasComposite;\n out += ' if (!' + ($nextValid) + ') { for (var ' + ($i) + '=startErrs' + ($lvl) + '; ' + ($i) + ' 0 : it.util.schemaHasRules($propertySch, it.RULES.all)))) {\n $required[$required.length] = $property;\n }\n }\n }\n } else {\n var $required = $schema;\n }\n }\n if ($isData || $required.length) {\n var $currentErrorPath = it.errorPath,\n $loopRequired = $isData || $required.length >= it.opts.loopRequired,\n $ownProperties = it.opts.ownProperties;\n if ($breakOnError) {\n out += ' var missing' + ($lvl) + '; ';\n if ($loopRequired) {\n if (!$isData) {\n out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; ';\n }\n var $i = 'i' + $lvl,\n $propertyPath = 'schema' + $lvl + '[' + $i + ']',\n $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\n if (it.opts._errorDataPathProperty) {\n it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers);\n }\n out += ' var ' + ($valid) + ' = true; ';\n if ($isData) {\n out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {';\n }\n out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { ' + ($valid) + ' = ' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] !== undefined ';\n if ($ownProperties) {\n out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + ']) ';\n }\n out += '; if (!' + ($valid) + ') break; } ';\n if ($isData) {\n out += ' } ';\n }\n out += ' if (!' + ($valid) + ') { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'';\n if (it.opts._errorDataPathProperty) {\n out += 'is a required property';\n } else {\n out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } else { ';\n } else {\n out += ' if ( ';\n var arr2 = $required;\n if (arr2) {\n var $propertyKey, $i = -1,\n l2 = arr2.length - 1;\n while ($i < l2) {\n $propertyKey = arr2[$i += 1];\n if ($i) {\n out += ' || ';\n }\n var $prop = it.util.getProperty($propertyKey),\n $useData = $data + $prop;\n out += ' ( ( ' + ($useData) + ' === undefined ';\n if ($ownProperties) {\n out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n }\n out += ') && (missing' + ($lvl) + ' = ' + (it.util.toQuotedString(it.opts.jsonPointers ? $propertyKey : $prop)) + ') ) ';\n }\n }\n out += ') { ';\n var $propertyPath = 'missing' + $lvl,\n $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\n if (it.opts._errorDataPathProperty) {\n it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + ' + ' + $propertyPath;\n }\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'';\n if (it.opts._errorDataPathProperty) {\n out += 'is a required property';\n } else {\n out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } else { ';\n }\n } else {\n if ($loopRequired) {\n if (!$isData) {\n out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; ';\n }\n var $i = 'i' + $lvl,\n $propertyPath = 'schema' + $lvl + '[' + $i + ']',\n $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\n if (it.opts._errorDataPathProperty) {\n it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers);\n }\n if ($isData) {\n out += ' if (' + ($vSchema) + ' && !Array.isArray(' + ($vSchema) + ')) { var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'';\n if (it.opts._errorDataPathProperty) {\n out += 'is a required property';\n } else {\n out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else if (' + ($vSchema) + ' !== undefined) { ';\n }\n out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { if (' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] === undefined ';\n if ($ownProperties) {\n out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + ']) ';\n }\n out += ') { var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'';\n if (it.opts._errorDataPathProperty) {\n out += 'is a required property';\n } else {\n out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } } ';\n if ($isData) {\n out += ' } ';\n }\n } else {\n var arr3 = $required;\n if (arr3) {\n var $propertyKey, i3 = -1,\n l3 = arr3.length - 1;\n while (i3 < l3) {\n $propertyKey = arr3[i3 += 1];\n var $prop = it.util.getProperty($propertyKey),\n $missingProperty = it.util.escapeQuotes($propertyKey),\n $useData = $data + $prop;\n if (it.opts._errorDataPathProperty) {\n it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers);\n }\n out += ' if ( ' + ($useData) + ' === undefined ';\n if ($ownProperties) {\n out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n }\n out += ') { var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'';\n if (it.opts._errorDataPathProperty) {\n out += 'is a required property';\n } else {\n out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } ';\n }\n }\n }\n }\n it.errorPath = $currentErrorPath;\n } else if ($breakOnError) {\n out += ' if (true) {';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_uniqueItems(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n if (($schema || $isData) && it.opts.uniqueItems !== false) {\n if ($isData) {\n out += ' var ' + ($valid) + '; if (' + ($schemaValue) + ' === false || ' + ($schemaValue) + ' === undefined) ' + ($valid) + ' = true; else if (typeof ' + ($schemaValue) + ' != \\'boolean\\') ' + ($valid) + ' = false; else { ';\n }\n out += ' var i = ' + ($data) + '.length , ' + ($valid) + ' = true , j; if (i > 1) { ';\n var $itemType = it.schema.items && it.schema.items.type,\n $typeIsArray = Array.isArray($itemType);\n if (!$itemType || $itemType == 'object' || $itemType == 'array' || ($typeIsArray && ($itemType.indexOf('object') >= 0 || $itemType.indexOf('array') >= 0))) {\n out += ' outer: for (;i--;) { for (j = i; j--;) { if (equal(' + ($data) + '[i], ' + ($data) + '[j])) { ' + ($valid) + ' = false; break outer; } } } ';\n } else {\n out += ' var itemIndices = {}, item; for (;i--;) { var item = ' + ($data) + '[i]; ';\n var $method = 'checkDataType' + ($typeIsArray ? 's' : '');\n out += ' if (' + (it.util[$method]($itemType, 'item', true)) + ') continue; ';\n if ($typeIsArray) {\n out += ' if (typeof item == \\'string\\') item = \\'\"\\' + item; ';\n }\n out += ' if (typeof itemIndices[item] == \\'number\\') { ' + ($valid) + ' = false; j = itemIndices[item]; break; } itemIndices[item] = i; } ';\n }\n out += ' } ';\n if ($isData) {\n out += ' } ';\n }\n out += ' if (!' + ($valid) + ') { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('uniqueItems') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { i: i, j: j } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should NOT have duplicate items (items ## \\' + j + \\' and \\' + i + \\' are identical)\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: ';\n if ($isData) {\n out += 'validate.schema' + ($schemaPath);\n } else {\n out += '' + ($schema);\n }\n out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' else { ';\n }\n } else {\n if ($breakOnError) {\n out += ' if (true) { ';\n }\n }\n return out;\n}\n","'use strict';\n\n//all requires must be explicit because browserify won't work with dynamic requires\nmodule.exports = {\n '$ref': require('./ref'),\n allOf: require('./allOf'),\n anyOf: require('./anyOf'),\n '$comment': require('./comment'),\n const: require('./const'),\n contains: require('./contains'),\n dependencies: require('./dependencies'),\n 'enum': require('./enum'),\n format: require('./format'),\n 'if': require('./if'),\n items: require('./items'),\n maximum: require('./_limit'),\n minimum: require('./_limit'),\n maxItems: require('./_limitItems'),\n minItems: require('./_limitItems'),\n maxLength: require('./_limitLength'),\n minLength: require('./_limitLength'),\n maxProperties: require('./_limitProperties'),\n minProperties: require('./_limitProperties'),\n multipleOf: require('./multipleOf'),\n not: require('./not'),\n oneOf: require('./oneOf'),\n pattern: require('./pattern'),\n properties: require('./properties'),\n propertyNames: require('./propertyNames'),\n required: require('./required'),\n uniqueItems: require('./uniqueItems'),\n validate: require('./validate')\n};\n","'use strict';\n\nvar ruleModules = require('../dotjs')\n , toHash = require('./util').toHash;\n\nmodule.exports = function rules() {\n var RULES = [\n { type: 'number',\n rules: [ { 'maximum': ['exclusiveMaximum'] },\n { 'minimum': ['exclusiveMinimum'] }, 'multipleOf', 'format'] },\n { type: 'string',\n rules: [ 'maxLength', 'minLength', 'pattern', 'format' ] },\n { type: 'array',\n rules: [ 'maxItems', 'minItems', 'items', 'contains', 'uniqueItems' ] },\n { type: 'object',\n rules: [ 'maxProperties', 'minProperties', 'required', 'dependencies', 'propertyNames',\n { 'properties': ['additionalProperties', 'patternProperties'] } ] },\n { rules: [ '$ref', 'const', 'enum', 'not', 'anyOf', 'oneOf', 'allOf', 'if' ] }\n ];\n\n var ALL = [ 'type', '$comment' ];\n var KEYWORDS = [\n '$schema', '$id', 'id', '$data', '$async', 'title',\n 'description', 'default', 'definitions',\n 'examples', 'readOnly', 'writeOnly',\n 'contentMediaType', 'contentEncoding',\n 'additionalItems', 'then', 'else'\n ];\n var TYPES = [ 'number', 'integer', 'string', 'array', 'object', 'boolean', 'null' ];\n RULES.all = toHash(ALL);\n RULES.types = toHash(TYPES);\n\n RULES.forEach(function (group) {\n group.rules = group.rules.map(function (keyword) {\n var implKeywords;\n if (typeof keyword == 'object') {\n var key = Object.keys(keyword)[0];\n implKeywords = keyword[key];\n keyword = key;\n implKeywords.forEach(function (k) {\n ALL.push(k);\n RULES.all[k] = true;\n });\n }\n ALL.push(keyword);\n var rule = RULES.all[keyword] = {\n keyword: keyword,\n code: ruleModules[keyword],\n implements: implKeywords\n };\n return rule;\n });\n\n RULES.all.$comment = {\n keyword: '$comment',\n code: ruleModules.$comment\n };\n\n if (group.type) RULES.types[group.type] = group;\n });\n\n RULES.keywords = toHash(ALL.concat(KEYWORDS));\n RULES.custom = {};\n\n return RULES;\n};\n","'use strict';\n\nvar KEYWORDS = [\n 'multipleOf',\n 'maximum',\n 'exclusiveMaximum',\n 'minimum',\n 'exclusiveMinimum',\n 'maxLength',\n 'minLength',\n 'pattern',\n 'additionalItems',\n 'maxItems',\n 'minItems',\n 'uniqueItems',\n 'maxProperties',\n 'minProperties',\n 'required',\n 'additionalProperties',\n 'enum',\n 'format',\n 'const'\n];\n\nmodule.exports = function (metaSchema, keywordsJsonPointers) {\n for (var i=0; i} errors optional array of validation errors, if not passed errors from the instance are used.\n * @param {Object} options optional options with properties `separator` and `dataVar`.\n * @return {String} human readable string with all errors descriptions\n */\nfunction errorsText(errors, options) {\n errors = errors || this.errors;\n if (!errors) return 'No errors';\n options = options || {};\n var separator = options.separator === undefined ? ', ' : options.separator;\n var dataVar = options.dataVar === undefined ? 'data' : options.dataVar;\n\n var text = '';\n for (var i=0; i\n Copyright (C) 2013 Thaddee Tyl \n Copyright (C) 2013 Mathias Bynens \n Copyright (C) 2012 Ariya Hidayat \n Copyright (C) 2012 Mathias Bynens \n Copyright (C) 2012 Joost-Wim Boekesteijn \n Copyright (C) 2012 Kris Kowal \n Copyright (C) 2012 Yusuke Suzuki \n Copyright (C) 2012 Arpad Borsos \n Copyright (C) 2011 Ariya Hidayat \n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY\n DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\nimport ASTNode from './ast';\n\nvar TokenName,\n source,\n index,\n length,\n lookahead;\n\nvar TokenBooleanLiteral = 1,\n TokenEOF = 2,\n TokenIdentifier = 3,\n TokenKeyword = 4,\n TokenNullLiteral = 5,\n TokenNumericLiteral = 6,\n TokenPunctuator = 7,\n TokenStringLiteral = 8,\n TokenRegularExpression = 9;\n\nTokenName = {};\nTokenName[TokenBooleanLiteral] = 'Boolean';\nTokenName[TokenEOF] = '';\nTokenName[TokenIdentifier] = 'Identifier';\nTokenName[TokenKeyword] = 'Keyword';\nTokenName[TokenNullLiteral] = 'Null';\nTokenName[TokenNumericLiteral] = 'Numeric';\nTokenName[TokenPunctuator] = 'Punctuator';\nTokenName[TokenStringLiteral] = 'String';\nTokenName[TokenRegularExpression] = 'RegularExpression';\n\nvar SyntaxArrayExpression = 'ArrayExpression',\n SyntaxBinaryExpression = 'BinaryExpression',\n SyntaxCallExpression = 'CallExpression',\n SyntaxConditionalExpression = 'ConditionalExpression',\n SyntaxIdentifier = 'Identifier',\n SyntaxLiteral = 'Literal',\n SyntaxLogicalExpression = 'LogicalExpression',\n SyntaxMemberExpression = 'MemberExpression',\n SyntaxObjectExpression = 'ObjectExpression',\n SyntaxProperty = 'Property',\n SyntaxUnaryExpression = 'UnaryExpression';\n\n// Error messages should be identical to V8.\nvar MessageUnexpectedToken = 'Unexpected token %0',\n MessageUnexpectedNumber = 'Unexpected number',\n MessageUnexpectedString = 'Unexpected string',\n MessageUnexpectedIdentifier = 'Unexpected identifier',\n MessageUnexpectedReserved = 'Unexpected reserved word',\n MessageUnexpectedEOS = 'Unexpected end of input',\n MessageInvalidRegExp = 'Invalid regular expression',\n MessageUnterminatedRegExp = 'Invalid regular expression: missing /',\n MessageStrictOctalLiteral = 'Octal literals are not allowed in strict mode.',\n MessageStrictDuplicateProperty = 'Duplicate data property in object literal not allowed in strict mode';\n\nvar ILLEGAL = 'ILLEGAL',\n DISABLED = 'Disabled.';\n\n// See also tools/generate-unicode-regex.py.\nvar RegexNonAsciiIdentifierStart = new RegExp(\"[\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0370-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0620-\\\\u064A\\\\u066E\\\\u066F\\\\u0671-\\\\u06D3\\\\u06D5\\\\u06E5\\\\u06E6\\\\u06EE\\\\u06EF\\\\u06FA-\\\\u06FC\\\\u06FF\\\\u0710\\\\u0712-\\\\u072F\\\\u074D-\\\\u07A5\\\\u07B1\\\\u07CA-\\\\u07EA\\\\u07F4\\\\u07F5\\\\u07FA\\\\u0800-\\\\u0815\\\\u081A\\\\u0824\\\\u0828\\\\u0840-\\\\u0858\\\\u08A0-\\\\u08B2\\\\u0904-\\\\u0939\\\\u093D\\\\u0950\\\\u0958-\\\\u0961\\\\u0971-\\\\u0980\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BD\\\\u09CE\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E1\\\\u09F0\\\\u09F1\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A72-\\\\u0A74\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABD\\\\u0AD0\\\\u0AE0\\\\u0AE1\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3D\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B61\\\\u0B71\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BD0\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D\\\\u0C58\\\\u0C59\\\\u0C60\\\\u0C61\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBD\\\\u0CDE\\\\u0CE0\\\\u0CE1\\\\u0CF1\\\\u0CF2\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D\\\\u0D4E\\\\u0D60\\\\u0D61\\\\u0D7A-\\\\u0D7F\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0E01-\\\\u0E30\\\\u0E32\\\\u0E33\\\\u0E40-\\\\u0E46\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB0\\\\u0EB2\\\\u0EB3\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F40-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F88-\\\\u0F8C\\\\u1000-\\\\u102A\\\\u103F\\\\u1050-\\\\u1055\\\\u105A-\\\\u105D\\\\u1061\\\\u1065\\\\u1066\\\\u106E-\\\\u1070\\\\u1075-\\\\u1081\\\\u108E\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1711\\\\u1720-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1780-\\\\u17B3\\\\u17D7\\\\u17DC\\\\u1820-\\\\u1877\\\\u1880-\\\\u18A8\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1950-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19C1-\\\\u19C7\\\\u1A00-\\\\u1A16\\\\u1A20-\\\\u1A54\\\\u1AA7\\\\u1B05-\\\\u1B33\\\\u1B45-\\\\u1B4B\\\\u1B83-\\\\u1BA0\\\\u1BAE\\\\u1BAF\\\\u1BBA-\\\\u1BE5\\\\u1C00-\\\\u1C23\\\\u1C4D-\\\\u1C4F\\\\u1C5A-\\\\u1C7D\\\\u1CE9-\\\\u1CEC\\\\u1CEE-\\\\u1CF1\\\\u1CF5\\\\u1CF6\\\\u1D00-\\\\u1DBF\\\\u1E00-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CEE\\\\u2CF2\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D80-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u3029\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA640-\\\\uA66E\\\\uA67F-\\\\uA69D\\\\uA6A0-\\\\uA6EF\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA801\\\\uA803-\\\\uA805\\\\uA807-\\\\uA80A\\\\uA80C-\\\\uA822\\\\uA840-\\\\uA873\\\\uA882-\\\\uA8B3\\\\uA8F2-\\\\uA8F7\\\\uA8FB\\\\uA90A-\\\\uA925\\\\uA930-\\\\uA946\\\\uA960-\\\\uA97C\\\\uA984-\\\\uA9B2\\\\uA9CF\\\\uA9E0-\\\\uA9E4\\\\uA9E6-\\\\uA9EF\\\\uA9FA-\\\\uA9FE\\\\uAA00-\\\\uAA28\\\\uAA40-\\\\uAA42\\\\uAA44-\\\\uAA4B\\\\uAA60-\\\\uAA76\\\\uAA7A\\\\uAA7E-\\\\uAAAF\\\\uAAB1\\\\uAAB5\\\\uAAB6\\\\uAAB9-\\\\uAABD\\\\uAAC0\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEA\\\\uAAF2-\\\\uAAF4\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABE2\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D\\\\uFB1F-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF21-\\\\uFF3A\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]\"),\n // eslint-disable-next-line no-misleading-character-class\n RegexNonAsciiIdentifierPart = new RegExp(\"[\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0300-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u0483-\\\\u0487\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0610-\\\\u061A\\\\u0620-\\\\u0669\\\\u066E-\\\\u06D3\\\\u06D5-\\\\u06DC\\\\u06DF-\\\\u06E8\\\\u06EA-\\\\u06FC\\\\u06FF\\\\u0710-\\\\u074A\\\\u074D-\\\\u07B1\\\\u07C0-\\\\u07F5\\\\u07FA\\\\u0800-\\\\u082D\\\\u0840-\\\\u085B\\\\u08A0-\\\\u08B2\\\\u08E4-\\\\u0963\\\\u0966-\\\\u096F\\\\u0971-\\\\u0983\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BC-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CE\\\\u09D7\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E3\\\\u09E6-\\\\u09F1\\\\u0A01-\\\\u0A03\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A66-\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABC-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AD0\\\\u0AE0-\\\\u0AE3\\\\u0AE6-\\\\u0AEF\\\\u0B01-\\\\u0B03\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3C-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B56\\\\u0B57\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B63\\\\u0B66-\\\\u0B6F\\\\u0B71\\\\u0B82\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD0\\\\u0BD7\\\\u0BE6-\\\\u0BEF\\\\u0C00-\\\\u0C03\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C58\\\\u0C59\\\\u0C60-\\\\u0C63\\\\u0C66-\\\\u0C6F\\\\u0C81-\\\\u0C83\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBC-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CDE\\\\u0CE0-\\\\u0CE3\\\\u0CE6-\\\\u0CEF\\\\u0CF1\\\\u0CF2\\\\u0D01-\\\\u0D03\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4E\\\\u0D57\\\\u0D60-\\\\u0D63\\\\u0D66-\\\\u0D6F\\\\u0D7A-\\\\u0D7F\\\\u0D82\\\\u0D83\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DE6-\\\\u0DEF\\\\u0DF2\\\\u0DF3\\\\u0E01-\\\\u0E3A\\\\u0E40-\\\\u0E4E\\\\u0E50-\\\\u0E59\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB9\\\\u0EBB-\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EC8-\\\\u0ECD\\\\u0ED0-\\\\u0ED9\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F18\\\\u0F19\\\\u0F20-\\\\u0F29\\\\u0F35\\\\u0F37\\\\u0F39\\\\u0F3E-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F71-\\\\u0F84\\\\u0F86-\\\\u0F97\\\\u0F99-\\\\u0FBC\\\\u0FC6\\\\u1000-\\\\u1049\\\\u1050-\\\\u109D\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u135D-\\\\u135F\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1714\\\\u1720-\\\\u1734\\\\u1740-\\\\u1753\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1772\\\\u1773\\\\u1780-\\\\u17D3\\\\u17D7\\\\u17DC\\\\u17DD\\\\u17E0-\\\\u17E9\\\\u180B-\\\\u180D\\\\u1810-\\\\u1819\\\\u1820-\\\\u1877\\\\u1880-\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1946-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19B0-\\\\u19C9\\\\u19D0-\\\\u19D9\\\\u1A00-\\\\u1A1B\\\\u1A20-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F-\\\\u1A89\\\\u1A90-\\\\u1A99\\\\u1AA7\\\\u1AB0-\\\\u1ABD\\\\u1B00-\\\\u1B4B\\\\u1B50-\\\\u1B59\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1BF3\\\\u1C00-\\\\u1C37\\\\u1C40-\\\\u1C49\\\\u1C4D-\\\\u1C7D\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CF6\\\\u1CF8\\\\u1CF9\\\\u1D00-\\\\u1DF5\\\\u1DFC-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u200C\\\\u200D\\\\u203F\\\\u2040\\\\u2054\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u20D0-\\\\u20DC\\\\u20E1\\\\u20E5-\\\\u20F0\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D7F-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2DE0-\\\\u2DFF\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u302F\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u3099\\\\u309A\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA62B\\\\uA640-\\\\uA66F\\\\uA674-\\\\uA67D\\\\uA67F-\\\\uA69D\\\\uA69F-\\\\uA6F1\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA827\\\\uA840-\\\\uA873\\\\uA880-\\\\uA8C4\\\\uA8D0-\\\\uA8D9\\\\uA8E0-\\\\uA8F7\\\\uA8FB\\\\uA900-\\\\uA92D\\\\uA930-\\\\uA953\\\\uA960-\\\\uA97C\\\\uA980-\\\\uA9C0\\\\uA9CF-\\\\uA9D9\\\\uA9E0-\\\\uA9FE\\\\uAA00-\\\\uAA36\\\\uAA40-\\\\uAA4D\\\\uAA50-\\\\uAA59\\\\uAA60-\\\\uAA76\\\\uAA7A-\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEF\\\\uAAF2-\\\\uAAF6\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABEA\\\\uABEC\\\\uABED\\\\uABF0-\\\\uABF9\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE00-\\\\uFE0F\\\\uFE20-\\\\uFE2D\\\\uFE33\\\\uFE34\\\\uFE4D-\\\\uFE4F\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF10-\\\\uFF19\\\\uFF21-\\\\uFF3A\\\\uFF3F\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]\");\n\n// Ensure the condition is true, otherwise throw an error.\n// This is only to have a better contract semantic, i.e. another safety net\n// to catch a logic error. The condition shall be fulfilled in normal case.\n// Do NOT use this to enforce a certain condition on any user input.\n\nfunction assert(condition, message) {\n /* istanbul ignore next */\n if (!condition) {\n throw new Error('ASSERT: ' + message);\n }\n}\n\nfunction isDecimalDigit(ch) {\n return (ch >= 0x30 && ch <= 0x39); // 0..9\n}\n\nfunction isHexDigit(ch) {\n return '0123456789abcdefABCDEF'.indexOf(ch) >= 0;\n}\n\nfunction isOctalDigit(ch) {\n return '01234567'.indexOf(ch) >= 0;\n}\n\n// 7.2 White Space\n\nfunction isWhiteSpace(ch) {\n return (ch === 0x20) || (ch === 0x09) || (ch === 0x0B) || (ch === 0x0C) || (ch === 0xA0) ||\n (ch >= 0x1680 && [0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(ch) >= 0);\n}\n\n// 7.3 Line Terminators\n\nfunction isLineTerminator(ch) {\n return (ch === 0x0A) || (ch === 0x0D) || (ch === 0x2028) || (ch === 0x2029);\n}\n\n// 7.6 Identifier Names and Identifiers\n\nfunction isIdentifierStart(ch) {\n return (ch === 0x24) || (ch === 0x5F) || // $ (dollar) and _ (underscore)\n (ch >= 0x41 && ch <= 0x5A) || // A..Z\n (ch >= 0x61 && ch <= 0x7A) || // a..z\n (ch === 0x5C) || // \\ (backslash)\n ((ch >= 0x80) && RegexNonAsciiIdentifierStart.test(String.fromCharCode(ch)));\n}\n\nfunction isIdentifierPart(ch) {\n return (ch === 0x24) || (ch === 0x5F) || // $ (dollar) and _ (underscore)\n (ch >= 0x41 && ch <= 0x5A) || // A..Z\n (ch >= 0x61 && ch <= 0x7A) || // a..z\n (ch >= 0x30 && ch <= 0x39) || // 0..9\n (ch === 0x5C) || // \\ (backslash)\n ((ch >= 0x80) && RegexNonAsciiIdentifierPart.test(String.fromCharCode(ch)));\n}\n\n// 7.6.1.1 Keywords\n\nvar keywords = {\n 'if':1, 'in':1, 'do':1,\n 'var':1, 'for':1, 'new':1, 'try':1, 'let':1,\n 'this':1, 'else':1, 'case':1, 'void':1, 'with':1, 'enum':1,\n 'while':1, 'break':1, 'catch':1, 'throw':1, 'const':1, 'yield':1, 'class':1, 'super':1,\n 'return':1, 'typeof':1, 'delete':1, 'switch':1, 'export':1, 'import':1, 'public':1, 'static':1,\n 'default':1, 'finally':1, 'extends':1, 'package':1, 'private':1,\n 'function':1, 'continue':1, 'debugger':1,\n 'interface':1, 'protected':1,\n 'instanceof':1, 'implements':1\n};\n\nfunction skipComment() {\n var ch;\n\n while (index < length) {\n ch = source.charCodeAt(index);\n\n if (isWhiteSpace(ch) || isLineTerminator(ch)) {\n ++index;\n } else {\n break;\n }\n }\n}\n\nfunction scanHexEscape(prefix) {\n var i, len, ch, code = 0;\n\n len = (prefix === 'u') ? 4 : 2;\n for (i = 0; i < len; ++i) {\n if (index < length && isHexDigit(source[index])) {\n ch = source[index++];\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n } else {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n return String.fromCharCode(code);\n}\n\nfunction scanUnicodeCodePointEscape() {\n var ch, code, cu1, cu2;\n\n ch = source[index];\n code = 0;\n\n // At least, one hex digit is required.\n if (ch === '}') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n while (index < length) {\n ch = source[index++];\n if (!isHexDigit(ch)) {\n break;\n }\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n }\n\n if (code > 0x10FFFF || ch !== '}') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n // UTF-16 Encoding\n if (code <= 0xFFFF) {\n return String.fromCharCode(code);\n }\n cu1 = ((code - 0x10000) >> 10) + 0xD800;\n cu2 = ((code - 0x10000) & 1023) + 0xDC00;\n return String.fromCharCode(cu1, cu2);\n}\n\nfunction getEscapedIdentifier() {\n var ch, id;\n\n ch = source.charCodeAt(index++);\n id = String.fromCharCode(ch);\n\n // '\\u' (U+005C, U+0075) denotes an escaped character.\n if (ch === 0x5C) {\n if (source.charCodeAt(index) !== 0x75) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n ++index;\n ch = scanHexEscape('u');\n if (!ch || ch === '\\\\' || !isIdentifierStart(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n id = ch;\n }\n\n while (index < length) {\n ch = source.charCodeAt(index);\n if (!isIdentifierPart(ch)) {\n break;\n }\n ++index;\n id += String.fromCharCode(ch);\n\n // '\\u' (U+005C, U+0075) denotes an escaped character.\n if (ch === 0x5C) {\n id = id.substr(0, id.length - 1);\n if (source.charCodeAt(index) !== 0x75) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n ++index;\n ch = scanHexEscape('u');\n if (!ch || ch === '\\\\' || !isIdentifierPart(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n id += ch;\n }\n }\n\n return id;\n}\n\nfunction getIdentifier() {\n var start, ch;\n\n start = index++;\n while (index < length) {\n ch = source.charCodeAt(index);\n if (ch === 0x5C) {\n // Blackslash (U+005C) marks Unicode escape sequence.\n index = start;\n return getEscapedIdentifier();\n }\n if (isIdentifierPart(ch)) {\n ++index;\n } else {\n break;\n }\n }\n\n return source.slice(start, index);\n}\n\nfunction scanIdentifier() {\n var start, id, type;\n\n start = index;\n\n // Backslash (U+005C) starts an escaped character.\n id = (source.charCodeAt(index) === 0x5C) ? getEscapedIdentifier() : getIdentifier();\n\n // There is no keyword or literal with only one character.\n // Thus, it must be an identifier.\n if (id.length === 1) {\n type = TokenIdentifier;\n } else if (keywords.hasOwnProperty(id)) { // eslint-disable-line no-prototype-builtins\n type = TokenKeyword;\n } else if (id === 'null') {\n type = TokenNullLiteral;\n } else if (id === 'true' || id === 'false') {\n type = TokenBooleanLiteral;\n } else {\n type = TokenIdentifier;\n }\n\n return {\n type: type,\n value: id,\n start: start,\n end: index\n };\n}\n\n// 7.7 Punctuators\n\nfunction scanPunctuator() {\n var start = index,\n code = source.charCodeAt(index),\n code2,\n ch1 = source[index],\n ch2,\n ch3,\n ch4;\n\n switch (code) {\n\n // Check for most common single-character punctuators.\n case 0x2E: // . dot\n case 0x28: // ( open bracket\n case 0x29: // ) close bracket\n case 0x3B: // ; semicolon\n case 0x2C: // , comma\n case 0x7B: // { open curly brace\n case 0x7D: // } close curly brace\n case 0x5B: // [\n case 0x5D: // ]\n case 0x3A: // :\n case 0x3F: // ?\n case 0x7E: // ~\n ++index;\n return {\n type: TokenPunctuator,\n value: String.fromCharCode(code),\n start: start,\n end: index\n };\n\n default:\n code2 = source.charCodeAt(index + 1);\n\n // '=' (U+003D) marks an assignment or comparison operator.\n if (code2 === 0x3D) {\n switch (code) {\n case 0x2B: // +\n case 0x2D: // -\n case 0x2F: // /\n case 0x3C: // <\n case 0x3E: // >\n case 0x5E: // ^\n case 0x7C: // |\n case 0x25: // %\n case 0x26: // &\n case 0x2A: // *\n index += 2;\n return {\n type: TokenPunctuator,\n value: String.fromCharCode(code) + String.fromCharCode(code2),\n start: start,\n end: index\n };\n\n case 0x21: // !\n case 0x3D: // =\n index += 2;\n\n // !== and ===\n if (source.charCodeAt(index) === 0x3D) {\n ++index;\n }\n return {\n type: TokenPunctuator,\n value: source.slice(start, index),\n start: start,\n end: index\n };\n }\n }\n }\n\n // 4-character punctuator: >>>=\n\n ch4 = source.substr(index, 4);\n\n if (ch4 === '>>>=') {\n index += 4;\n return {\n type: TokenPunctuator,\n value: ch4,\n start: start,\n end: index\n };\n }\n\n // 3-character punctuators: === !== >>> <<= >>=\n\n ch3 = ch4.substr(0, 3);\n\n if (ch3 === '>>>' || ch3 === '<<=' || ch3 === '>>=') {\n index += 3;\n return {\n type: TokenPunctuator,\n value: ch3,\n start: start,\n end: index\n };\n }\n\n // Other 2-character punctuators: ++ -- << >> && ||\n ch2 = ch3.substr(0, 2);\n\n if ((ch1 === ch2[1] && ('+-<>&|'.indexOf(ch1) >= 0)) || ch2 === '=>') {\n index += 2;\n return {\n type: TokenPunctuator,\n value: ch2,\n start: start,\n end: index\n };\n }\n\n // 1-character punctuators: < > = ! + - * % & | ^ /\n\n if ('<>=!+-*%&|^/'.indexOf(ch1) >= 0) {\n ++index;\n return {\n type: TokenPunctuator,\n value: ch1,\n start: start,\n end: index\n };\n }\n\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n}\n\n// 7.8.3 Numeric Literals\n\nfunction scanHexLiteral(start) {\n var number = '';\n\n while (index < length) {\n if (!isHexDigit(source[index])) {\n break;\n }\n number += source[index++];\n }\n\n if (number.length === 0) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenNumericLiteral,\n value: parseInt('0x' + number, 16),\n start: start,\n end: index\n };\n}\n\nfunction scanOctalLiteral(start) {\n var number = '0' + source[index++];\n while (index < length) {\n if (!isOctalDigit(source[index])) {\n break;\n }\n number += source[index++];\n }\n\n if (isIdentifierStart(source.charCodeAt(index)) || isDecimalDigit(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenNumericLiteral,\n value: parseInt(number, 8),\n octal: true,\n start: start,\n end: index\n };\n}\n\nfunction scanNumericLiteral() {\n var number, start, ch;\n\n ch = source[index];\n assert(isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'),\n 'Numeric literal must start with a decimal digit or a decimal point');\n\n start = index;\n number = '';\n if (ch !== '.') {\n number = source[index++];\n ch = source[index];\n\n // Hex number starts with '0x'.\n // Octal number starts with '0'.\n if (number === '0') {\n if (ch === 'x' || ch === 'X') {\n ++index;\n return scanHexLiteral(start);\n }\n if (isOctalDigit(ch)) {\n return scanOctalLiteral(start);\n }\n\n // decimal number starts with '0' such as '09' is illegal.\n if (ch && isDecimalDigit(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n ch = source[index];\n }\n\n if (ch === '.') {\n number += source[index++];\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n ch = source[index];\n }\n\n if (ch === 'e' || ch === 'E') {\n number += source[index++];\n\n ch = source[index];\n if (ch === '+' || ch === '-') {\n number += source[index++];\n }\n if (isDecimalDigit(source.charCodeAt(index))) {\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n } else {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenNumericLiteral,\n value: parseFloat(number),\n start: start,\n end: index\n };\n}\n\n// 7.8.4 String Literals\n\nfunction scanStringLiteral() {\n var str = '',\n quote, start, ch, code, octal = false;\n\n quote = source[index];\n assert((quote === '\\'' || quote === '\"'),\n 'String literal must starts with a quote');\n\n start = index;\n ++index;\n\n while (index < length) {\n ch = source[index++];\n\n if (ch === quote) {\n quote = '';\n break;\n } else if (ch === '\\\\') {\n ch = source[index++];\n if (!ch || !isLineTerminator(ch.charCodeAt(0))) {\n switch (ch) {\n case 'u':\n case 'x':\n if (source[index] === '{') {\n ++index;\n str += scanUnicodeCodePointEscape();\n } else {\n str += scanHexEscape(ch);\n }\n break;\n case 'n':\n str += '\\n';\n break;\n case 'r':\n str += '\\r';\n break;\n case 't':\n str += '\\t';\n break;\n case 'b':\n str += '\\b';\n break;\n case 'f':\n str += '\\f';\n break;\n case 'v':\n str += '\\x0B';\n break;\n\n default:\n if (isOctalDigit(ch)) {\n code = '01234567'.indexOf(ch);\n\n // \\0 is not octal escape sequence\n if (code !== 0) {\n octal = true;\n }\n\n if (index < length && isOctalDigit(source[index])) {\n octal = true;\n code = code * 8 + '01234567'.indexOf(source[index++]);\n\n // 3 digits are only allowed when string starts\n // with 0, 1, 2, 3\n if ('0123'.indexOf(ch) >= 0 &&\n index < length &&\n isOctalDigit(source[index])) {\n code = code * 8 + '01234567'.indexOf(source[index++]);\n }\n }\n str += String.fromCharCode(code);\n } else {\n str += ch;\n }\n break;\n }\n } else {\n if (ch === '\\r' && source[index] === '\\n') {\n ++index;\n }\n }\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n break;\n } else {\n str += ch;\n }\n }\n\n if (quote !== '') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenStringLiteral,\n value: str,\n octal: octal,\n start: start,\n end: index\n };\n}\n\nfunction testRegExp(pattern, flags) {\n var tmp = pattern;\n\n if (flags.indexOf('u') >= 0) {\n // Replace each astral symbol and every Unicode code point\n // escape sequence with a single ASCII symbol to avoid throwing on\n // regular expressions that are only valid in combination with the\n // `/u` flag.\n // Note: replacing with the ASCII symbol `x` might cause false\n // negatives in unlikely scenarios. For example, `[\\u{61}-b]` is a\n // perfectly valid pattern that is equivalent to `[a-b]`, but it\n // would be replaced by `[x-b]` which throws an error.\n tmp = tmp\n .replace(/\\\\u\\{([0-9a-fA-F]+)\\}/g, function($0, $1) {\n if (parseInt($1, 16) <= 0x10FFFF) {\n return 'x';\n }\n throwError({}, MessageInvalidRegExp);\n })\n .replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, 'x');\n }\n\n // First, detect invalid regular expressions.\n try {\n new RegExp(tmp);\n } catch (e) {\n throwError({}, MessageInvalidRegExp);\n }\n\n // Return a regular expression object for this pattern-flag pair, or\n // `null` in case the current environment doesn't support the flags it\n // uses.\n try {\n return new RegExp(pattern, flags);\n } catch (exception) {\n return null;\n }\n}\n\nfunction scanRegExpBody() {\n var ch, str, classMarker, terminated, body;\n\n ch = source[index];\n assert(ch === '/', 'Regular expression literal must start with a slash');\n str = source[index++];\n\n classMarker = false;\n terminated = false;\n while (index < length) {\n ch = source[index++];\n str += ch;\n if (ch === '\\\\') {\n ch = source[index++];\n // ECMA-262 7.8.5\n if (isLineTerminator(ch.charCodeAt(0))) {\n throwError({}, MessageUnterminatedRegExp);\n }\n str += ch;\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n throwError({}, MessageUnterminatedRegExp);\n } else if (classMarker) {\n if (ch === ']') {\n classMarker = false;\n }\n } else {\n if (ch === '/') {\n terminated = true;\n break;\n } else if (ch === '[') {\n classMarker = true;\n }\n }\n }\n\n if (!terminated) {\n throwError({}, MessageUnterminatedRegExp);\n }\n\n // Exclude leading and trailing slash.\n body = str.substr(1, str.length - 2);\n return {\n value: body,\n literal: str\n };\n}\n\nfunction scanRegExpFlags() {\n var ch, str, flags;\n\n str = '';\n flags = '';\n while (index < length) {\n ch = source[index];\n if (!isIdentifierPart(ch.charCodeAt(0))) {\n break;\n }\n\n ++index;\n if (ch === '\\\\' && index < length) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n } else {\n flags += ch;\n str += ch;\n }\n }\n\n if (flags.search(/[^gimuy]/g) >= 0) {\n throwError({}, MessageInvalidRegExp, flags);\n }\n\n return {\n value: flags,\n literal: str\n };\n}\n\nfunction scanRegExp() {\n var start, body, flags, value;\n\n lookahead = null;\n skipComment();\n start = index;\n\n body = scanRegExpBody();\n flags = scanRegExpFlags();\n value = testRegExp(body.value, flags.value);\n\n return {\n literal: body.literal + flags.literal,\n value: value,\n regex: {\n pattern: body.value,\n flags: flags.value\n },\n start: start,\n end: index\n };\n}\n\nfunction isIdentifierName(token) {\n return token.type === TokenIdentifier ||\n token.type === TokenKeyword ||\n token.type === TokenBooleanLiteral ||\n token.type === TokenNullLiteral;\n}\n\nfunction advance() {\n var ch;\n\n skipComment();\n\n if (index >= length) {\n return {\n type: TokenEOF,\n start: index,\n end: index\n };\n }\n\n ch = source.charCodeAt(index);\n\n if (isIdentifierStart(ch)) {\n return scanIdentifier();\n }\n\n // Very common: ( and ) and ;\n if (ch === 0x28 || ch === 0x29 || ch === 0x3B) {\n return scanPunctuator();\n }\n\n // String literal starts with single quote (U+0027) or double quote (U+0022).\n if (ch === 0x27 || ch === 0x22) {\n return scanStringLiteral();\n }\n\n\n // Dot (.) U+002E can also start a floating-point number, hence the need\n // to check the next character.\n if (ch === 0x2E) {\n if (isDecimalDigit(source.charCodeAt(index + 1))) {\n return scanNumericLiteral();\n }\n return scanPunctuator();\n }\n\n if (isDecimalDigit(ch)) {\n return scanNumericLiteral();\n }\n\n return scanPunctuator();\n}\n\nfunction lex() {\n var token;\n\n token = lookahead;\n index = token.end;\n\n lookahead = advance();\n\n index = token.end;\n\n return token;\n}\n\nfunction peek() {\n var pos;\n\n pos = index;\n\n lookahead = advance();\n index = pos;\n}\n\nfunction finishArrayExpression(elements) {\n var node = new ASTNode(SyntaxArrayExpression);\n node.elements = elements;\n return node;\n}\n\nfunction finishBinaryExpression(operator, left, right) {\n var node = new ASTNode((operator === '||' || operator === '&&') ? SyntaxLogicalExpression : SyntaxBinaryExpression);\n node.operator = operator;\n node.left = left;\n node.right = right;\n return node;\n}\n\nfunction finishCallExpression(callee, args) {\n var node = new ASTNode(SyntaxCallExpression);\n node.callee = callee;\n node.arguments = args;\n return node;\n}\n\nfunction finishConditionalExpression(test, consequent, alternate) {\n var node = new ASTNode(SyntaxConditionalExpression);\n node.test = test;\n node.consequent = consequent;\n node.alternate = alternate;\n return node;\n}\n\nfunction finishIdentifier(name) {\n var node = new ASTNode(SyntaxIdentifier);\n node.name = name;\n return node;\n}\n\nfunction finishLiteral(token) {\n var node = new ASTNode(SyntaxLiteral);\n node.value = token.value;\n node.raw = source.slice(token.start, token.end);\n if (token.regex) {\n if (node.raw === '//') {\n node.raw = '/(?:)/';\n }\n node.regex = token.regex;\n }\n return node;\n}\n\nfunction finishMemberExpression(accessor, object, property) {\n var node = new ASTNode(SyntaxMemberExpression);\n node.computed = accessor === '[';\n node.object = object;\n node.property = property;\n if (!node.computed) property.member = true;\n return node;\n}\n\nfunction finishObjectExpression(properties) {\n var node = new ASTNode(SyntaxObjectExpression);\n node.properties = properties;\n return node;\n}\n\nfunction finishProperty(kind, key, value) {\n var node = new ASTNode(SyntaxProperty);\n node.key = key;\n node.value = value;\n node.kind = kind;\n return node;\n}\n\nfunction finishUnaryExpression(operator, argument) {\n var node = new ASTNode(SyntaxUnaryExpression);\n node.operator = operator;\n node.argument = argument;\n node.prefix = true;\n return node;\n}\n\n// Throw an exception\n\nfunction throwError(token, messageFormat) {\n var error,\n args = Array.prototype.slice.call(arguments, 2),\n msg = messageFormat.replace(\n /%(\\d)/g,\n function(whole, index) {\n assert(index < args.length, 'Message reference must be in range');\n return args[index];\n }\n );\n\n\n error = new Error(msg);\n error.index = index;\n error.description = msg;\n throw error;\n}\n\n// Throw an exception because of the token.\n\nfunction throwUnexpected(token) {\n if (token.type === TokenEOF) {\n throwError(token, MessageUnexpectedEOS);\n }\n\n if (token.type === TokenNumericLiteral) {\n throwError(token, MessageUnexpectedNumber);\n }\n\n if (token.type === TokenStringLiteral) {\n throwError(token, MessageUnexpectedString);\n }\n\n if (token.type === TokenIdentifier) {\n throwError(token, MessageUnexpectedIdentifier);\n }\n\n if (token.type === TokenKeyword) {\n throwError(token, MessageUnexpectedReserved);\n }\n\n // BooleanLiteral, NullLiteral, or Punctuator.\n throwError(token, MessageUnexpectedToken, token.value);\n}\n\n// Expect the next token to match the specified punctuator.\n// If not, an exception will be thrown.\n\nfunction expect(value) {\n var token = lex();\n if (token.type !== TokenPunctuator || token.value !== value) {\n throwUnexpected(token);\n }\n}\n\n// Return true if the next token matches the specified punctuator.\n\nfunction match(value) {\n return lookahead.type === TokenPunctuator && lookahead.value === value;\n}\n\n// Return true if the next token matches the specified keyword\n\nfunction matchKeyword(keyword) {\n return lookahead.type === TokenKeyword && lookahead.value === keyword;\n}\n\n// 11.1.4 Array Initialiser\n\nfunction parseArrayInitialiser() {\n var elements = [];\n\n index = lookahead.start;\n expect('[');\n\n while (!match(']')) {\n if (match(',')) {\n lex();\n elements.push(null);\n } else {\n elements.push(parseConditionalExpression());\n\n if (!match(']')) {\n expect(',');\n }\n }\n }\n\n lex();\n\n return finishArrayExpression(elements);\n}\n\n// 11.1.5 Object Initialiser\n\nfunction parseObjectPropertyKey() {\n var token;\n\n index = lookahead.start;\n token = lex();\n\n // Note: This function is called only from parseObjectProperty(), where\n // EOF and Punctuator tokens are already filtered out.\n\n if (token.type === TokenStringLiteral || token.type === TokenNumericLiteral) {\n if (token.octal) {\n throwError(token, MessageStrictOctalLiteral);\n }\n return finishLiteral(token);\n }\n\n return finishIdentifier(token.value);\n}\n\nfunction parseObjectProperty() {\n var token, key, id, value;\n\n index = lookahead.start;\n token = lookahead;\n\n if (token.type === TokenIdentifier) {\n id = parseObjectPropertyKey();\n expect(':');\n value = parseConditionalExpression();\n return finishProperty('init', id, value);\n }\n if (token.type === TokenEOF || token.type === TokenPunctuator) {\n throwUnexpected(token);\n } else {\n key = parseObjectPropertyKey();\n expect(':');\n value = parseConditionalExpression();\n return finishProperty('init', key, value);\n }\n}\n\nfunction parseObjectInitialiser() {\n var properties = [],\n property, name, key, map = {},\n toString = String;\n\n index = lookahead.start;\n expect('{');\n\n while (!match('}')) {\n property = parseObjectProperty();\n\n if (property.key.type === SyntaxIdentifier) {\n name = property.key.name;\n } else {\n name = toString(property.key.value);\n }\n\n key = '$' + name;\n if (Object.prototype.hasOwnProperty.call(map, key)) {\n throwError({}, MessageStrictDuplicateProperty);\n } else {\n map[key] = true;\n }\n\n properties.push(property);\n\n if (!match('}')) {\n expect(',');\n }\n }\n\n expect('}');\n\n return finishObjectExpression(properties);\n}\n\n// 11.1.6 The Grouping Operator\n\nfunction parseGroupExpression() {\n var expr;\n\n expect('(');\n\n expr = parseExpression();\n\n expect(')');\n\n return expr;\n}\n\n\n// 11.1 Primary Expressions\n\nvar legalKeywords = {\n \"if\": 1,\n \"this\": 1\n};\n\nfunction parsePrimaryExpression() {\n var type, token, expr;\n\n if (match('(')) {\n return parseGroupExpression();\n }\n\n if (match('[')) {\n return parseArrayInitialiser();\n }\n\n if (match('{')) {\n return parseObjectInitialiser();\n }\n\n type = lookahead.type;\n index = lookahead.start;\n\n\n if (type === TokenIdentifier || legalKeywords[lookahead.value]) {\n expr = finishIdentifier(lex().value);\n } else if (type === TokenStringLiteral || type === TokenNumericLiteral) {\n if (lookahead.octal) {\n throwError(lookahead, MessageStrictOctalLiteral);\n }\n expr = finishLiteral(lex());\n } else if (type === TokenKeyword) {\n throw new Error(DISABLED);\n } else if (type === TokenBooleanLiteral) {\n token = lex();\n token.value = (token.value === 'true');\n expr = finishLiteral(token);\n } else if (type === TokenNullLiteral) {\n token = lex();\n token.value = null;\n expr = finishLiteral(token);\n } else if (match('/') || match('/=')) {\n expr = finishLiteral(scanRegExp());\n peek();\n } else {\n throwUnexpected(lex());\n }\n\n return expr;\n}\n\n// 11.2 Left-Hand-Side Expressions\n\nfunction parseArguments() {\n var args = [];\n\n expect('(');\n\n if (!match(')')) {\n while (index < length) {\n args.push(parseConditionalExpression());\n if (match(')')) {\n break;\n }\n expect(',');\n }\n }\n\n expect(')');\n\n return args;\n}\n\nfunction parseNonComputedProperty() {\n var token;\n index = lookahead.start;\n token = lex();\n\n if (!isIdentifierName(token)) {\n throwUnexpected(token);\n }\n\n return finishIdentifier(token.value);\n}\n\nfunction parseNonComputedMember() {\n expect('.');\n\n return parseNonComputedProperty();\n}\n\nfunction parseComputedMember() {\n var expr;\n\n expect('[');\n\n expr = parseExpression();\n\n expect(']');\n\n return expr;\n}\n\nfunction parseLeftHandSideExpressionAllowCall() {\n var expr, args, property;\n\n expr = parsePrimaryExpression();\n\n for (;;) {\n if (match('.')) {\n property = parseNonComputedMember();\n expr = finishMemberExpression('.', expr, property);\n } else if (match('(')) {\n args = parseArguments();\n expr = finishCallExpression(expr, args);\n } else if (match('[')) {\n property = parseComputedMember();\n expr = finishMemberExpression('[', expr, property);\n } else {\n break;\n }\n }\n\n return expr;\n}\n\n// 11.3 Postfix Expressions\n\nfunction parsePostfixExpression() {\n var expr = parseLeftHandSideExpressionAllowCall();\n\n if (lookahead.type === TokenPunctuator) {\n if ((match('++') || match('--'))) {\n throw new Error(DISABLED);\n }\n }\n\n return expr;\n}\n\n// 11.4 Unary Operators\n\nfunction parseUnaryExpression() {\n var token, expr;\n\n if (lookahead.type !== TokenPunctuator && lookahead.type !== TokenKeyword) {\n expr = parsePostfixExpression();\n } else if (match('++') || match('--')) {\n throw new Error(DISABLED);\n } else if (match('+') || match('-') || match('~') || match('!')) {\n token = lex();\n expr = parseUnaryExpression();\n expr = finishUnaryExpression(token.value, expr);\n } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) {\n throw new Error(DISABLED);\n } else {\n expr = parsePostfixExpression();\n }\n\n return expr;\n}\n\nfunction binaryPrecedence(token) {\n var prec = 0;\n\n if (token.type !== TokenPunctuator && token.type !== TokenKeyword) {\n return 0;\n }\n\n switch (token.value) {\n case '||':\n prec = 1;\n break;\n\n case '&&':\n prec = 2;\n break;\n\n case '|':\n prec = 3;\n break;\n\n case '^':\n prec = 4;\n break;\n\n case '&':\n prec = 5;\n break;\n\n case '==':\n case '!=':\n case '===':\n case '!==':\n prec = 6;\n break;\n\n case '<':\n case '>':\n case '<=':\n case '>=':\n case 'instanceof':\n case 'in':\n prec = 7;\n break;\n\n case '<<':\n case '>>':\n case '>>>':\n prec = 8;\n break;\n\n case '+':\n case '-':\n prec = 9;\n break;\n\n case '*':\n case '/':\n case '%':\n prec = 11;\n break;\n\n default:\n break;\n }\n\n return prec;\n}\n\n// 11.5 Multiplicative Operators\n// 11.6 Additive Operators\n// 11.7 Bitwise Shift Operators\n// 11.8 Relational Operators\n// 11.9 Equality Operators\n// 11.10 Binary Bitwise Operators\n// 11.11 Binary Logical Operators\n\nfunction parseBinaryExpression() {\n var marker, markers, expr, token, prec, stack, right, operator, left, i;\n\n marker = lookahead;\n left = parseUnaryExpression();\n\n token = lookahead;\n prec = binaryPrecedence(token);\n if (prec === 0) {\n return left;\n }\n token.prec = prec;\n lex();\n\n markers = [marker, lookahead];\n right = parseUnaryExpression();\n\n stack = [left, token, right];\n\n while ((prec = binaryPrecedence(lookahead)) > 0) {\n\n // Reduce: make a binary expression from the three topmost entries.\n while ((stack.length > 2) && (prec <= stack[stack.length - 2].prec)) {\n right = stack.pop();\n operator = stack.pop().value;\n left = stack.pop();\n markers.pop();\n expr = finishBinaryExpression(operator, left, right);\n stack.push(expr);\n }\n\n // Shift.\n token = lex();\n token.prec = prec;\n stack.push(token);\n markers.push(lookahead);\n expr = parseUnaryExpression();\n stack.push(expr);\n }\n\n // Final reduce to clean-up the stack.\n i = stack.length - 1;\n expr = stack[i];\n markers.pop();\n while (i > 1) {\n markers.pop()\n expr = finishBinaryExpression(stack[i - 1].value, stack[i - 2], expr);\n i -= 2;\n }\n\n return expr;\n}\n\n// 11.12 Conditional Operator\n\nfunction parseConditionalExpression() {\n var expr, consequent, alternate;\n\n expr = parseBinaryExpression();\n\n if (match('?')) {\n lex();\n consequent = parseConditionalExpression();\n expect(':');\n alternate = parseConditionalExpression();\n\n expr = finishConditionalExpression(expr, consequent, alternate);\n }\n\n return expr;\n}\n\n// 11.14 Comma Operator\n\nfunction parseExpression() {\n var expr = parseConditionalExpression();\n\n if (match(',')) {\n throw new Error(DISABLED); // no sequence expressions\n }\n\n return expr;\n}\n\nexport default function(code) {\n source = code;\n index = 0;\n length = source.length;\n lookahead = null;\n\n peek();\n\n var expr = parseExpression();\n\n if (lookahead.type !== TokenEOF) {\n throw new Error(\"Unexpect token after expression.\");\n }\n return expr;\n}\n","export default {\n NaN: 'NaN',\n E: 'Math.E',\n LN2: 'Math.LN2',\n LN10: 'Math.LN10',\n LOG2E: 'Math.LOG2E',\n LOG10E: 'Math.LOG10E',\n PI: 'Math.PI',\n SQRT1_2: 'Math.SQRT1_2',\n SQRT2: 'Math.SQRT2',\n MIN_VALUE: 'Number.MIN_VALUE',\n MAX_VALUE: 'Number.MAX_VALUE'\n};\n","export default function(fn, fields, name) {\n fn.fields = fields || [];\n fn.fname = name;\n return fn;\n}\n\nexport function accessorName(fn) {\n return fn == null ? null : fn.fname;\n}\n\nexport function accessorFields(fn) {\n return fn == null ? null : fn.fields;\n}\n","export default function(message) {\n throw Error(message);\n}\n","import error from './error';\n\nexport default function(p) {\n var path = [],\n q = null,\n b = 0,\n n = p.length,\n s = '',\n i, j, c;\n\n p = p + '';\n\n function push() {\n path.push(s + p.substring(i, j));\n s = '';\n i = j + 1;\n }\n\n for (i=j=0; j i) {\n push();\n } else {\n i = j + 1;\n }\n } else if (c === '[') {\n if (j > i) push();\n b = i = j + 1;\n } else if (c === ']') {\n if (!b) error('Access path missing open bracket: ' + p);\n if (b > 0) push();\n b = 0;\n i = j + 1;\n }\n }\n\n if (b) error('Access path missing closing bracket: ' + p);\n if (q) error('Access path missing closing quote: ' + p);\n\n if (j > i) {\n j++;\n push();\n }\n\n return path;\n}\n","export default Array.isArray;\n","export default function(_) {\n return _ === Object(_);\n}\n","export default function(_) {\n return typeof _ === 'string';\n}\n","import isArray from './isArray';\nimport isObject from './isObject';\nimport isString from './isString';\n\nexport default function $(x) {\n return isArray(x) ? '[' + x.map($) + ']'\n : isObject(x) || isString(x) ?\n // Output valid JSON and JS source strings.\n // See http://timelessrepo.com/json-isnt-a-javascript-subset\n JSON.stringify(x).replace('\\u2028','\\\\u2028').replace('\\u2029', '\\\\u2029')\n : x;\n}\n","import accessor from './accessor';\nimport splitAccessPath from './splitAccessPath';\nimport stringValue from './stringValue';\n\nexport default function(field, name) {\n var path = splitAccessPath(field),\n code = 'return _[' + path.map(stringValue).join('][') + '];';\n\n return accessor(\n Function('_', code),\n [(field = path.length===1 ? path[0] : field)],\n name || field\n );\n}\n","import accessor from './accessor';\nimport field from './field';\n\nvar empty = [];\n\nexport var id = field('id');\n\nexport var identity = accessor(function(_) { return _; }, empty, 'identity');\n\nexport var zero = accessor(function() { return 0; }, empty, 'zero');\n\nexport var one = accessor(function() { return 1; }, empty, 'one');\n\nexport var truthy = accessor(function() { return true; }, empty, 'true');\n\nexport var falsy = accessor(function() { return false; }, empty, 'false');\n","export default function(_) {\n return typeof _ === 'function';\n}\n","const hop = Object.prototype.hasOwnProperty;\n\nexport default function(object, property) {\n return hop.call(object, property);\n}\n","export default function(_) {\n for (var s={}, i=0, n=_.length; i 3) error('Too many arguments to clamp function.');\n var a = args.map(codegen);\n return 'Math.max('+a[1]+', Math.min('+a[2]+','+a[0]+'))';\n },\n\n // DATE functions\n now: 'Date.now',\n utc: 'Date.UTC',\n datetime: DATE,\n date: fn('getDate', DATE, 0),\n day: fn('getDay', DATE, 0),\n year: fn('getFullYear', DATE, 0),\n month: fn('getMonth', DATE, 0),\n hours: fn('getHours', DATE, 0),\n minutes: fn('getMinutes', DATE, 0),\n seconds: fn('getSeconds', DATE, 0),\n milliseconds: fn('getMilliseconds', DATE, 0),\n time: fn('getTime', DATE, 0),\n timezoneoffset: fn('getTimezoneOffset', DATE, 0),\n utcdate: fn('getUTCDate', DATE, 0),\n utcday: fn('getUTCDay', DATE, 0),\n utcyear: fn('getUTCFullYear', DATE, 0),\n utcmonth: fn('getUTCMonth', DATE, 0),\n utchours: fn('getUTCHours', DATE, 0),\n utcminutes: fn('getUTCMinutes', DATE, 0),\n utcseconds: fn('getUTCSeconds', DATE, 0),\n utcmilliseconds: fn('getUTCMilliseconds', DATE, 0),\n\n // sequence functions\n length: fn('length', null, -1),\n join: fn('join', null),\n indexof: fn('indexOf', null),\n lastindexof: fn('lastIndexOf', null),\n slice: fn('slice', null),\n\n reverse: function(args) {\n return '('+codegen(args[0])+').slice().reverse()';\n },\n\n // STRING functions\n parseFloat: 'parseFloat',\n parseInt: 'parseInt',\n upper: fn('toUpperCase', STRING, 0),\n lower: fn('toLowerCase', STRING, 0),\n substring: fn('substring', STRING),\n split: fn('split', STRING),\n replace: fn('replace', STRING),\n trim: fn('trim', STRING, 0),\n\n // REGEXP functions\n regexp: REGEXP,\n test: fn('test', REGEXP),\n\n // Control Flow functions\n if: function(args) {\n if (args.length < 3) error('Missing arguments to if function.');\n if (args.length > 3) error('Too many arguments to if function.');\n var a = args.map(codegen);\n return '('+a[0]+'?'+a[1]+':'+a[2]+')';\n }\n };\n}\n","import Constants from './constants';\nimport Functions from './functions';\nimport {error, hasOwnProperty, isFunction, isString, toSet} from 'vega-util';\n\nfunction stripQuotes(s) {\n var n = s && s.length - 1;\n return n && (\n (s[0]==='\"' && s[n]==='\"') ||\n (s[0]==='\\'' && s[n]==='\\'')\n ) ? s.slice(1, -1) : s;\n}\n\nexport default function(opt) {\n opt = opt || {};\n\n var whitelist = opt.whitelist ? toSet(opt.whitelist) : {},\n blacklist = opt.blacklist ? toSet(opt.blacklist) : {},\n constants = opt.constants || Constants,\n functions = (opt.functions || Functions)(visit),\n globalvar = opt.globalvar,\n fieldvar = opt.fieldvar,\n globals = {},\n fields = {},\n memberDepth = 0;\n\n var outputGlobal = isFunction(globalvar)\n ? globalvar\n : function (id) { return globalvar + '[\"' + id + '\"]'; };\n\n function visit(ast) {\n if (isString(ast)) return ast;\n var generator = Generators[ast.type];\n if (generator == null) error('Unsupported type: ' + ast.type);\n return generator(ast);\n }\n\n var Generators = {\n Literal: function(n) {\n return n.raw;\n },\n\n Identifier: function(n) {\n var id = n.name;\n if (memberDepth > 0) {\n return id;\n } else if (hasOwnProperty(blacklist, id)) {\n return error('Illegal identifier: ' + id);\n } else if (hasOwnProperty(constants, id)) {\n return constants[id];\n } else if (hasOwnProperty(whitelist, id)) {\n return id;\n } else {\n globals[id] = 1;\n return outputGlobal(id);\n }\n },\n\n MemberExpression: function(n) {\n var d = !n.computed;\n var o = visit(n.object);\n if (d) memberDepth += 1;\n var p = visit(n.property);\n if (o === fieldvar) {\n // strip quotes to sanitize field name (#1653)\n fields[stripQuotes(p)] = 1;\n }\n if (d) memberDepth -= 1;\n return o + (d ? '.'+p : '['+p+']');\n },\n\n CallExpression: function(n) {\n if (n.callee.type !== 'Identifier') {\n error('Illegal callee type: ' + n.callee.type);\n }\n var callee = n.callee.name;\n var args = n.arguments;\n var fn = hasOwnProperty(functions, callee) && functions[callee];\n if (!fn) error('Unrecognized function: ' + callee);\n return isFunction(fn)\n ? fn(args)\n : fn + '(' + args.map(visit).join(',') + ')';\n },\n\n ArrayExpression: function(n) {\n return '[' + n.elements.map(visit).join(',') + ']';\n },\n\n BinaryExpression: function(n) {\n return '(' + visit(n.left) + n.operator + visit(n.right) + ')';\n },\n\n UnaryExpression: function(n) {\n return '(' + n.operator + visit(n.argument) + ')';\n },\n\n ConditionalExpression: function(n) {\n return '(' + visit(n.test) +\n '?' + visit(n.consequent) +\n ':' + visit(n.alternate) +\n ')';\n },\n\n LogicalExpression: function(n) {\n return '(' + visit(n.left) + n.operator + visit(n.right) + ')';\n },\n\n ObjectExpression: function(n) {\n return '{' + n.properties.map(visit).join(',') + '}';\n },\n\n Property: function(n) {\n memberDepth += 1;\n var k = visit(n.key);\n memberDepth -= 1;\n return k + ':' + visit(n.value);\n }\n };\n\n function codegen(ast) {\n var result = {\n code: visit(ast),\n globals: Object.keys(globals),\n fields: Object.keys(fields)\n };\n globals = {};\n fields = {};\n return result;\n }\n\n codegen.functions = functions;\n codegen.constants = constants;\n\n return codegen;\n}\n","const textDefault = {\n fill: \"#000\",\n font: \"sans-serif\",\n fontSize: 11,\n opacity: 1,\n baseline: \"alphabetic\"\n};\n// the browsers' default\nexport const BR_PROP_DEFAULT = {\n none: {},\n rect: { opacity: 1 },\n gradient: { opacity: 1 },\n group: { opacity: 1 },\n tick: { opacity: 1 },\n grid: { opacity: 1 },\n domain: { opacity: 1 },\n symbol: { opacity: 1, stroke: \"transparent\" },\n line: { opacity: 1, fill: \"none\" },\n // area: { opacity: 1, strokeWidth: \"1px\", stroke: \"none\" },\n area: { opacity: 1, strokeWidth: \"0px\" },\n trail: { opacity: 1, strokeWidth: \"0px\" },\n rule: { opacity: 1 },\n text: textDefault,\n title: textDefault\n};\n","export const DEFAULT_EASE = {\n mark: \"cubic\",\n line: \"cubic\",\n axis: \"cubic\",\n legend: \"cubic\",\n view: \"cubic\"\n};","// From https://github.com/vega/vega/blob/master/packages/vega-parser/src/config.js\n/**\n * Standard configuration defaults for Vega specification parsing.\n * Users can provide their own (sub-)set of these default values\n * by passing in a config object to the top-level parse method.\n */\nconst defaultFont = \"sans-serif\",\n defaultSymbolSize = 30,\n defaultStrokeWidth = 2,\n defaultColor = \"#4c78a8\",\n black = \"#000\",\n gray = \"#888\",\n lightGray = \"#ddd\";\nexport const vegaConfig = {\n // default visualization description\n description: \"Vega visualization\",\n\n // default padding around visualization\n padding: 0,\n\n // default for automatic sizing; options: 'none', 'pad', 'fit'\n // or provide an object (e.g., {'type': 'pad', 'resize': true})\n autosize: \"pad\",\n\n // default view background color\n // covers the entire view component\n background: null,\n\n // default event handling configuration\n // preventDefault for view-sourced event types except 'wheel'\n events: {\n defaults: {allow: [\"wheel\"]}\n },\n\n // defaults for top-level group marks\n // accepts mark properties (fill, stroke, etc)\n // covers the data rectangle within group width/height\n group: null,\n\n // defaults for basic mark types\n // each subset accepts mark properties (fill, stroke, etc)\n mark: null,\n arc: { fill: defaultColor },\n area: { fill: defaultColor },\n image: null,\n line: {\n stroke: defaultColor,\n strokeWidth: defaultStrokeWidth\n },\n path: { stroke: defaultColor },\n rect: { fill: defaultColor },\n rule: { stroke: black },\n shape: { stroke: defaultColor },\n symbol: {\n fill: defaultColor,\n size: 64\n },\n text: {\n fill: black,\n font: defaultFont,\n fontSize: 11\n },\n trail: {\n fill: defaultColor,\n size: defaultStrokeWidth\n },\n\n // style definitions\n style: {\n // axis & legend labels\n \"guide-label\": {\n fill: black,\n font: defaultFont,\n fontSize: 10\n },\n // axis & legend titles\n \"guide-title\": {\n fill: black,\n font: defaultFont,\n fontSize: 11,\n fontWeight: \"bold\"\n },\n // headers, including chart title\n \"group-title\": {\n fill: black,\n font: defaultFont,\n fontSize: 13,\n fontWeight: \"bold\"\n },\n // chart subtitle\n \"group-subtitle\": {\n fill: black,\n font: defaultFont,\n fontSize: 12\n },\n // defaults for styled point marks in Vega-Lite\n point: {\n size: defaultSymbolSize,\n strokeWidth: defaultStrokeWidth,\n shape: \"circle\"\n },\n circle: {\n size: defaultSymbolSize,\n strokeWidth: defaultStrokeWidth\n },\n square: {\n size: defaultSymbolSize,\n strokeWidth: defaultStrokeWidth,\n shape: \"square\"\n },\n // defaults for styled group marks in Vega-Lite\n cell: {\n fill: \"transparent\",\n stroke: lightGray\n }\n },\n\n // defaults for title\n title: {\n orient: \"top\",\n anchor: \"middle\",\n offset: 4,\n subtitlePadding: 3\n },\n\n // defaults for axes\n axis: {\n minExtent: 0,\n maxExtent: 200,\n bandPosition: 0.5,\n domain: true,\n domainWidth: 1,\n domainColor: gray,\n grid: false,\n gridWidth: 1,\n gridColor: lightGray,\n labels: true,\n labelAngle: 0,\n labelLimit: 180,\n labelOffset: 0,\n labelPadding: 2,\n ticks: true,\n tickColor: gray,\n tickOffset: 0,\n tickRound: true,\n tickSize: 5,\n tickWidth: 1,\n titlePadding: 4\n },\n\n // correction for centering bias\n axisBand: {\n tickOffset: -0.5\n },\n\n // defaults for cartographic projection\n projection: {\n type: \"mercator\"\n },\n\n // defaults for legends\n legend: {\n orient: \"right\",\n padding: 0,\n gridAlign: \"each\",\n columnPadding: 10,\n rowPadding: 2,\n symbolDirection: \"vertical\",\n gradientDirection: \"vertical\",\n gradientLength: 200,\n gradientThickness: 16,\n gradientStrokeColor: lightGray,\n gradientStrokeWidth: 0,\n gradientLabelOffset: 2,\n labelAlign: \"left\",\n labelBaseline: \"middle\",\n labelLimit: 160,\n labelOffset: 4,\n labelOverlap: true,\n symbolLimit: 30,\n symbolType: \"circle\",\n symbolSize: 100,\n symbolOffset: 0,\n symbolStrokeWidth: 1.5,\n symbolBaseFillColor: \"transparent\",\n symbolBaseStrokeColor: gray,\n titleLimit: 180,\n titleOrient: \"top\",\n titlePadding: 5,\n layout: {\n offset: 18,\n direction: \"horizontal\",\n left: { direction: \"vertical\" },\n right: { direction: \"vertical\" }\n }\n },\n\n // defaults for scale ranges\n range: {\n category: {\n scheme: \"tableau10\"\n },\n ordinal: {\n scheme: \"blues\"\n },\n heatmap: {\n scheme: \"yellowgreenblue\"\n },\n ramp: {\n scheme: \"blues\"\n },\n diverging: {\n scheme: \"blueorange\",\n extent: [1, 0]\n },\n symbol: [\n \"circle\",\n \"square\",\n \"triangle-up\",\n \"cross\",\n \"diamond\",\n \"triangle-right\",\n \"triangle-down\",\n \"triangle-left\"\n ]\n }\n};\n\n","export function encodify(obj) {\n return Object.keys(obj).reduce((encode, key) => {\n encode[key] = { value: obj[key] };\n return encode;\n }, {});\n}\n","import { vegaConfig } from \"./vegaConfig\";\nimport { encodify } from \"./util\";\nexport const DEFAULT_STYLE = Object.keys(vegaConfig.style).reduce(\n (styles, key) => {\n styles[key] = encodify(vegaConfig.style[key]);\n return styles;\n },\n {}\n);\n","import { vegaConfig as vgConfig } from \"../vegaConfig\";\n\nconst EMPTY_ENCODE = {\n enter: { opacity: { value: 0 } },\n exit: { opacity: { value: 0 } },\n update: { }\n};\n\n\nfunction axisCompPos(spec) {\n if (!spec) {\n return {};\n }\n const scName = spec.scale;\n if (spec.orient === \"left\" || spec.orient === \"right\") {\n return { y: { scale: scName, field: \"value\", band: 0.5 } };\n }\n return { x: { scale: scName, field: \"value\", band: 0.5 } };\n}\nfunction legendBandPos(spec) {\n let grLength = spec ? spec.gradientLength : undefined;\n let grThickness = spec ? spec.gradientThickness : undefined;\n grLength = grLength || vgConfig.legend.gradientLength;\n grThickness = grThickness || vgConfig.legend.gradientThickness;\n\n if (spec && spec.direction === \"horizontal\") {\n return {\n x: { signal: \"(1-datum.perc)\", mult: grLength },\n x2: { signal: \"(1-datum.perc2)\", mult: grLength },\n y: { value: 0 },\n height: { value: grThickness }\n };\n }\n return {\n y: { signal: \"(1-datum.perc)\", mult: grLength },\n y2: { signal: \"(1-datum.perc2)\", mult: grLength },\n x: { value: 0 },\n width: { value: grThickness }\n };\n}\n\nfunction legendLablePos(spec) {\n let grLength = spec ? spec.gradientLength : undefined;\n grLength = isNaN(grLength) ? vgConfig.legend.gradientLength : grLength;\n let grThickness = spec ? spec.gradientThickness : undefined;\n grThickness = isNaN(grThickness) ? vgConfig.legend.gradientThickness : grThickness;\n let grLabelOffset = spec ? spec.gradientLabelOffset : undefined;\n grLabelOffset = isNaN(grLabelOffset) ? vgConfig.legend.gradientLabelOffset : grLabelOffset;\n\n if (spec.type === \"symbol\") {\n return {\n x: { value: 0 },\n y: { value: 0 },\n dx: { value: 16 },\n dy: { value: 6 }\n };\n }\n if (spec.direction === \"vertical\") {\n return {\n x: { value: 0, },\n y: { signal: `(1-datum.perc) * clamp(height, 64, ${grLength})` },\n dx: { value: grThickness + grLabelOffset }\n };\n }\n return {\n x: { signal: `(datum.perc) * clamp(width, 64, ${grLength})` },\n y: { value: 0, },\n dy: { value: grThickness + grLabelOffset }\n };\n}\n\n\nfunction titlePos(orient) {\n if (orient === \"top\") {\n return {x: { signal: \"width\", mult: 0.5}, y: {value: -22}};\n } if (orient === \"bottom\") {\n return {x: { signal: \"width\", mult: 0.5}, y: {value: 22}};\n } if (orient === \"right\") {\n return {y: { signal: \"height\", mult: 0.5}, x: {value: 22}};\n }\n return {y: { signal: \"height\", mult: 0.5}, x: {value: -22}};\n\n}\nfunction titleAngle(orient) {\n if (orient === \"left\") {\n return 270;\n }\n if (orient === \"right\") {\n return 90;\n }\n return 0;\n}\nfunction baseline(orient) {\n if (orient === \"top\") {\n return \"bottom\";\n }\n if (orient === \"bottom\") {\n return \"top\";\n }\n return \"middle\";\n}\nfunction tickLength(attr, orient) {\n if (attr === \"x2\") {\n if (orient === \"right\") {\n return vgConfig.axis.tickSize;\n }\n if (orient === \"left\") {\n return -vgConfig.axis.tickSize;\n }\n } else if (attr === \"y2\") {\n if (orient === \"bottom\") {\n return vgConfig.axis.tickSize;\n }\n if (orient === \"top\") {\n return -vgConfig.axis.tickSize;\n }\n }\n return 0;\n}\n\nfunction axisLabelAlign(spec) {\n if (spec && spec.labelAlign) {\n return spec.labelAlign;\n }\n\n if (spec && spec.orient === \"right\") {\n return \"left\";\n }\n if (spec && spec.orient === \"left\") {\n return \"right\";\n }\n return \"center\";\n}\n\nfunction legendLabelAlign(spec) {\n if (spec && spec.labelAlign) {\n return spec.labelAlign;\n }\n\n if (spec && spec.orient === \"right\") {\n return \"left\";\n }\n if (spec && spec.orient === \"left\") {\n return \"right\";\n }\n return \"center\";\n}\n\nfunction lableAngle(orient, scaleType) {\n if (orient === \"top\" || orient === \"bottom\") {\n if ([\"band\", \"point\"].indexOf(scaleType) >= 0) {\n return 270;\n }\n }\n return 0;\n}\nfunction axisTextDpos(attr, spec) {\n const orient = spec ? spec.orient : undefined;\n\n if (spec.ticks === false) {\n return 0;\n }\n if (attr === \"dx\") {\n if (orient === \"right\") {\n return 7;\n }\n if (orient === \"left\") {\n return -7;\n }\n } else if (attr === \"dy\") {\n if (orient === \"bottom\") {\n return 7;\n }\n if (orient === \"top\") {\n return -7;\n }\n }\n return 0;\n}\n\nfunction gridLength(orient, gridScale){\n if (orient === \"bottom\" || orient === \"top\") {\n if (!gridScale){\n return {\n y2: {signal: \"height\", mult: -1},\n y: {value: 0},\n x2: {value: 0}\n };\n }\n return {\n // y2: {signal: \"height\"},\n // y: {signal: \"height\", mult: -1},\n y2: {signal: \"height\", mult: -1},\n y: {value: 0},\n x2: {value: 0}\n };\n\n }\n\n if (orient === \"right\" || orient === \"left\") {\n if (!gridScale){\n return {\n x2: {signal: \"width\"},\n x: {value: 0},\n y2: {value: 0}\n };\n }\n return {\n x2: {signal: \"width\"},\n x: {value: 0},\n y2: {value: 0}\n };\n\n }\n\n}\n\nfunction domainLength(orient) {\n if (orient === \"bottom\" || orient === \"top\") {\n return {\n y2: { value: 0 },\n x2: { signal: \"width\" },\n y: { value: 0 },\n x: { value: 0 }\n };\n }\n if (orient === \"right\" || orient === \"left\") {\n return {\n y2: { signal: \"height\", mult: 1 },\n x2: { value: 0 },\n y: { value: 0 },\n x: { value: 0 }\n };\n }\n return {\n y2: { value: 0 },\n x2: { value: 0 }\n };\n}\n\nexport {\n\n legendBandPos,\n legendLablePos,\n legendLabelAlign,\n\n titlePos,\n titleAngle,\n baseline,\n\n axisCompPos,\n lableAngle,\n tickLength,\n axisLabelAlign,\n axisTextDpos,\n gridLength,\n domainLength,\n\n EMPTY_ENCODE\n};","import { vegaConfig as vgConfig } from \"../vegaConfig\";\nimport * as vg from \"./vegaDefault\";\nimport { copy } from \"../../util/util\";\nconst LEGEND_SYMBOL_CHANNEL = [\n \"fill\",\n \"opacity\",\n \"shape\",\n \"size\",\n \"stroke\",\n \"strokeDash\",\n \"strokeWidth\"\n];\n\nexport const DEFAULT_ENCODE_LEGEND = {\n\n title: () => {\n const defaultTitleEncode = {\n fontSize: { value: vgConfig.style[\"guide-title\"].fontSize },\n fontWeight: { value: \"bold\" }\n };\n\n return {\n update: defaultTitleEncode,\n enter: {...defaultTitleEncode, opacity: {value: 0}},\n exit: {...defaultTitleEncode, opacity: {value: 0}},\n };\n },\n labels: spec => {\n if (!spec) {\n return copy(vg.EMPTY_ENCODE);\n }\n\n let defaultEncode = {\n ...vg.legendLablePos(spec),\n text: { field: \"label\" },\n fontSize: { value: vgConfig.style[\"guide-label\"].fontSize },\n align: { value: vg.legendLabelAlign(spec) },\n baseline: {\n value: spec.baseline || vg.baseline(spec.orient)\n },\n angle: {\n value: spec.labelAngle || vg.lableAngle(spec.orient, spec.scaleType)\n }\n };\n\n\n return {\n enter: {...defaultEncode, opacity: { value: 0 } },\n exit: {...defaultEncode, opacity: { value: 0 } },\n update: defaultEncode\n };\n },\n symbols: spec => {\n const defaultEncode = {\n y: { value: 6 },\n x: { value: 6 },\n shape: { value: vgConfig.legend.symbolType },\n size: { value: vgConfig.legend.symbolSize },\n strokeWidth: { value: vgConfig.legend.symbolStrokeWidth }\n };\n\n if (spec) {\n if (!spec.fill) {\n defaultEncode.stroke = {\n value: vgConfig.legend.symbolBaseStrokeColor\n };\n defaultEncode.fill = {\n value: vgConfig.legend.symbolBaseFillColor\n };\n }\n\n LEGEND_SYMBOL_CHANNEL.forEach(channel => {\n if (channel === \"shape\") {\n defaultEncode[channel] = { value: spec.symbolType };\n }\n if (spec[channel]) {\n defaultEncode[channel] = { scale: spec[channel], field: \"value\" };\n }\n });\n }\n\n return {\n update: defaultEncode,\n enter: Object.assign({}, defaultEncode, { opacity: { value: 0 } }),\n exit: Object.assign({}, defaultEncode, { opacity: { value: 0 } })\n };\n },\n gradient: spec => {\n if (!spec) {\n return copy(vg.EMPTY_ENCODE);\n }\n\n let grLength = spec.gradientLength ||\n {\n signal: `clamp(${spec.direction === \"vertical\" ? \"height\" : \"width\"}, 64, ${vgConfig.legend.gradientLength})`\n },\n grThickness = spec.gradientThickness || vgConfig.legend.gradientThickness;\n if (typeof grLength === \"number\") {\n grLength= {\n signal: `clamp(${spec.direction === \"vertical\" ? \"height\" : \"width\"}, 64, ${grLength})`\n };\n }\n const defaultEncode = {\n x: { value: 0 },\n y: { value: 0 },\n width:\n spec.direction === \"vertical\"\n ? { value: grThickness }\n : grLength,\n height:\n spec.direction === \"vertical\"\n ? grLength\n : { value: grThickness }\n };\n\n return {\n update: defaultEncode,\n enter: Object.assign({}, defaultEncode, { opacity: { value: 0 } }),\n exit: Object.assign({}, defaultEncode, { opacity: { value: 0 } })\n };\n },\n entries: () => {\n return copy(vg.EMPTY_ENCODE);\n },\n legend: () => {\n return copy(vg.EMPTY_ENCODE);\n },\n pairs: spec => {\n let defaultEncode = { y: { signal: \"datum.index * 13\" } };\n if (spec && spec.direction === \"horizontal\") {\n defaultEncode = { x: { signal: \"datum.index * 50\" } };\n }\n\n return {\n update: defaultEncode,\n enter: Object.assign({}, defaultEncode, { opacity: { value: 0 } }),\n exit: Object.assign({}, defaultEncode, { opacity: { value: 0 } })\n };\n },\n bands: spec => {\n let defaultEncode = {\n ...vg.legendBandPos(spec),\n fill: {\n value: vgConfig.legend.symbolBaseFillColor\n }\n };\n if (spec && (spec.fill || spec.stroke)) {\n defaultEncode.fill = { scale: spec.fill || spec.stroke, field: \"value\" };\n }\n\n return {\n update: defaultEncode,\n enter: {\n ...defaultEncode,\n opacity: { value: 0 }\n },\n exit: {\n ...defaultEncode,\n opacity: { value: 0 }\n }\n };\n }\n};","import { encodify } from \"../util\";\nimport { vegaConfig as vgConfig } from \"../vegaConfig\";\nexport const DEFAULT_ENCODE_MARK = {\n enter: { opacity: { value: 0 } },\n exit: { opacity: { value: 0 } },\n line: {\n update: {\n ...encodify(vgConfig.line),\n fill: { value: \"none\" }\n }\n },\n area: {update: encodify(vgConfig.area)},\n trail: {update: encodify(vgConfig.trail)},\n symbol: { update: encodify(vgConfig.symbol) },\n rect: { update: encodify(vgConfig.rect) },\n rule: { update: encodify(vgConfig.rule) },\n text: { update: encodify(vgConfig.text) }\n};","import { vegaConfig as vgConfig } from \"../vegaConfig\";\nimport * as vg from \"./vegaDefault\";\nimport { isNumber, copy } from \"../../util/util\";\n\n\nexport const DEFAULT_ENCODE_AXIS = {\n axis: () => {\n return copy(vg.EMPTY_ENCODE);\n },\n labels: spec => {\n if (!spec) {\n return copy(vg.EMPTY_ENCODE);\n }\n\n const orient = spec ? spec.orient : undefined;\n const scaleType = spec ? spec.scaleType : undefined;\n\n const defaultEncode = {\n ...vg.axisCompPos(spec),\n text: { field: \"label\" },\n fontSize: {\n value: spec && spec.labelFontSize ? spec.labelFontSize : vgConfig.style[\"guide-label\"].fontSize\n },\n dx: { value: vg.axisTextDpos(\"dx\", spec) },\n dy: { value: vg.axisTextDpos(\"dy\", spec) },\n align: { value: vg.axisLabelAlign(spec) },\n baseline: {\n value: spec && spec.baseline ? spec.baseline : vg.baseline(orient)\n },\n angle: {\n value:\n spec && isNumber(spec.labelAngle)\n ? spec.labelAngle\n : vg.lableAngle(orient, scaleType)\n }\n };\n\n return {\n enter: { ...defaultEncode, opacity: { value: 0 } },\n exit: { ...defaultEncode, opacity: { value: 0 } },\n update: defaultEncode\n };\n },\n ticks: spec => {\n if (!spec) {\n return copy(vg.EMPTY_ENCODE);\n }\n\n const orient = spec ? spec.orient : undefined;\n const defaultEncode = Object.assign({}, vg.axisCompPos(spec), {\n x2: { value: vg.tickLength(\"x2\", orient) },\n y2: { value: vg.tickLength(\"y2\", orient) },\n strokeWidth: { value: vgConfig.axis.tickWidth },\n stroke: { value: vgConfig.axis.tickColor }\n });\n return {\n enter: { ...defaultEncode, opacity: { value: 0 } },\n exit: { ...defaultEncode, opacity: { value: 0 } },\n update: defaultEncode\n };\n },\n grid: spec => {\n\n const orient = spec ? spec.orient : undefined;\n const gridScale = spec ? spec.gridScale : undefined;\n let defaultEncode = Object.assign(\n {},\n vg.axisCompPos(spec),\n vg.gridLength(orient, gridScale),\n {\n strokeWidth: { value: vgConfig.axis.gridWidth },\n stroke: { value: vgConfig.axis.gridColor }\n }\n );\n if (spec && spec.gridDash) {\n defaultEncode.strokeDasharray = {\"value\": spec.gridDash.join(\",\")};\n }\n\n return {\n enter: { ...defaultEncode, opacity: { value: 0 } },\n exit: { ...defaultEncode, opacity: { value: 0 } },\n update: defaultEncode\n };\n },\n title: spec => {\n\n\n const orient = spec ? spec.orient : undefined;\n const defaultEncode = Object.assign(\n {\n baseline: { value: vg.baseline(orient) },\n align: { value: \"center\" },\n angle: { value: vg.titleAngle(orient) },\n fontSize: { value: vgConfig.style[\"guide-title\"].fontSize },\n fontWeight: { value: \"bold\" }\n },\n vg.titlePos(orient)\n );\n return {\n enter: { ...defaultEncode, opacity: { value: 0 } },\n exit: { ...defaultEncode, opacity: { value: 0 } },\n update: defaultEncode\n };\n },\n domain: spec => {\n\n const defaultEncode = {\n ...(spec ? vg.domainLength(spec.orient) : {}),\n strokeWidth: { value: vgConfig.axis.domainWidth },\n stroke: { value: vgConfig.axis.domainColor }\n };\n\n return {\n enter: { ...defaultEncode, opacity: { value: 0 } },\n exit: { ...defaultEncode, opacity: { value: 0 } },\n update: defaultEncode\n };\n }\n};\n","import { DEFAULT_ENCODE_LEGEND } from \"./legend\";\nimport { DEFAULT_ENCODE_MARK } from \"./mark\";\nimport { DEFAULT_ENCODE_AXIS } from \"./axis\";\n\n// DEFAULT enter means initials of the enter\nexport const DEFAULT_ENCODE = {\n mark: DEFAULT_ENCODE_MARK,\n axis: DEFAULT_ENCODE_AXIS,\n legend: DEFAULT_ENCODE_LEGEND\n};\n","/* eslint-disable prefer-destructuring */\n/* eslint-disable no-restricted-globals */\n/* eslint-disable no-use-before-define */\n/* eslint-disable camelcase */\nimport * as vega from \"vega\";\nimport * as d3 from \"d3\";\nimport { DEFAULT_EASE } from \"../default\";\n\nfunction getEaseFn(easeFnName) {\n const name = easeFnName || DEFAULT_EASE.mark;\n return d3[`ease${name.slice(0, 1).toUpperCase() + name.slice(1)}`];\n}\n\n\nfunction findAfterSibling(scene, name) {\n let result;\n for (let i = 0; i < scene.items.length; i++) {\n const s = scene.items[i];\n if (s.name === name) {\n return scene.items[i + 1];\n }\n if (s.items) {\n result = findAfterSibling(s, name);\n }\n }\n return result;\n}\n\nfunction getJoinInfo(d, i, step, prop) {\n return d.__gemini__[step.stepId]\n ? d.__gemini__[step.stepId][prop]\n : undefined;\n}\n\nfunction findComp(scene, name, role) {\n let result = [];\n scene.items.forEach(item => {\n if (item.items) {\n result = result.concat(findComp(item, name, role));\n }\n\n if (item.role === role && item.name === name) {\n result.push(item);\n }\n });\n return result; // return the first item.\n}\nfunction svgRender(vegaScene) {\n const svg = new vega.SVGRenderer()\n .initialize(document.createElement(\"div\"), 1, 1)\n .render(vegaScene)\n .svg();\n const p = new DOMParser();\n const dom = p.parseFromString(svg, \"image/svg+xml\");\n return dom.documentElement;\n}\n\nfunction gradientRender(d3RootSelection, d) {\n const s = vega.sceneFromJSON(vega.sceneToJSON(d.mark));\n s.items[0].fill = d.fill;\n const dom = svgRender(s);\n const gradientDom = dom.getElementsByTagName(\"defs\")[0].firstElementChild;\n let d3DefsSelection = d3RootSelection.select(\"defs\");\n if (d3DefsSelection.empty()) {\n d3DefsSelection = d3RootSelection.append(\"defs\");\n }\n d3DefsSelection.node().appendChild(gradientDom);\n return `${window.location.origin + window.location.pathname}#${\n gradientDom.id\n }`;\n}\n\n\nfunction propMap(prop) {\n let propName = prop;\n let tweaks;\n if (typeof prop === \"object\") {\n propName = prop.name;\n tweaks = prop.tweaks;\n }\n let result = [];\n switch (propName) {\n case \"text\":\n result = result.concat([\n { type: \"text\", val: \"text\" },\n { type: \"attr\", val: \"transform\" },\n { type: \"style\", val: \"opacity\" },\n { type: \"style\", val: \"font\" },\n { type: \"style\", val: \"fontSize\" },\n { type: \"style\", val: \"fontWeight\" },\n { type: \"style\", val: \"fill\" }\n ]);\n break;\n case \"title\":\n result = result.concat([\n { type: \"text\", val: \"text\" },\n { type: \"attr\", val: \"transform\" },\n { type: \"style\", val: \"opacity\" },\n { type: \"style\", val: \"font\" },\n { type: \"style\", val: \"fontSize\" },\n { type: \"style\", val: \"fontWeight\" },\n { type: \"style\", val: \"fill\" }\n ]);\n break;\n case \"tick\":\n result = result.concat([\n { type: \"attr\", val: \"transform\" },\n { type: \"attr\", val: \"x2\" },\n { type: \"attr\", val: \"y2\" },\n { type: \"style\", val: \"strokeWidth\" },\n { type: \"style\", val: \"stroke\" },\n { type: \"style\", val: \"opacity\" }\n ]);\n break;\n case \"grid\":\n result = result.concat([\n { type: \"attr\", val: \"transform\" },\n { type: \"attr\", val: \"x2\" },\n { type: \"attr\", val: \"y2\" },\n { type: \"style\", val: \"strokeWidth\" },\n { type: \"style\", val: \"stroke\" },\n { type: \"style\", val: \"strokeDasharray\" },\n { type: \"style\", val: \"opacity\" }\n ]);\n break;\n case \"domain\":\n result = result.concat([\n { type: \"attr\", val: \"transform\" },\n { type: \"attr\", val: \"x2\" },\n { type: \"attr\", val: \"y2\" },\n { type: \"style\", val: \"strokeWidth\" },\n { type: \"style\", val: \"stroke\" },\n { type: \"style\", val: \"opacity\" }\n ]);\n break;\n case \"rect\":\n result = result.concat([\n { type: \"attrTween\", val: \"d\" },\n { type: \"attr\", val: \"transform\" },\n { type: \"style\", val: \"opacity\" },\n { type: \"style\", val: \"fill\" },\n { type: \"style\", val: \"strokeWidth\" },\n { type: \"style\", val: \"stroke\" }\n ]);\n break;\n case \"gradient\":\n result = result.concat([\n { type: \"attr\", val: \"d\" },\n { type: \"style\", val: \"opacity\" },\n { type: \"style\", val: \"fill\", defs: gradientRender },\n { type: \"style\", val: \"strokeWidth\" },\n { type: \"style\", val: \"stroke\" }\n ]);\n break;\n case \"rule\":\n result = result.concat([\n { type: \"attr\", val: \"transform\" },\n { type: \"attr\", val: \"x2\" },\n { type: \"attr\", val: \"y2\" },\n { type: \"style\", val: \"strokeWidth\" },\n { type: \"style\", val: \"stroke\" },\n { type: \"style\", val: \"opacity\" }\n ]);\n break;\n case \"symbol\":\n result = result.concat([\n { type: \"attrTween\", val: \"d\" },\n { type: \"attr\", val: \"size\" },\n { type: \"attr\", val: \"transform\" },\n { type: \"style\", val: \"strokeWidth\" },\n { type: \"style\", val: \"stroke\" },\n { type: \"style\", val: \"opacity\" },\n { type: \"style\", val: \"fill\" }\n ]);\n break;\n case \"group\":\n result = result.concat([\n { type: \"attr\", val: \"transform\" },\n { type: \"style\", val: \"opacity\" }\n ]);\n break;\n case \"background\":\n result = result.concat([{ type: \"attr\", val: \"d\" }]);\n break;\n case \"line\":\n result = result.concat([\n { type: \"attrTween\", val: \"d\" },\n { type: \"style\", val: \"strokeWidth\" },\n { type: \"style\", val: \"stroke\" },\n { type: \"style\", val: \"opacity\" },\n { type: \"style\", val: \"fill\" }\n ]);\n break;\n case \"trail\":\n case \"area\":\n result = result.concat([\n { type: \"attrTween\", val: \"d\" },\n { type: \"style\", val: \"strokeWidth\" },\n { type: \"style\", val: \"stroke\" },\n { type: \"style\", val: \"opacity\" },\n { type: \"style\", val: \"fill\" }\n ]);\n break;\n case \"legend-pair\":\n result = result.concat([{ type: \"attr\", val: \"transform\" }]);\n break;\n default:\n break;\n }\n if (prop.excludes) {\n prop.excludes.forEach(exclude => {\n result = result.filter(\n r => !(r.type === exclude.type && r.val === exclude.val)\n );\n });\n }\n if (result.length > 0) {\n result.forEach(p => {\n p.elmType = propName;\n if (tweaks) {\n tweaks\n .filter(twk => twk.type === p.type && twk.val === p.val)\n .forEach(twk => {\n p = Object.assign(p, twk);\n });\n }\n });\n return result;\n }\n if (propName === \"align\") {\n return [{ type: \"attr\", val: \"text-anchor\", elmType: \"none\" }];\n }\n return [{ type: \"style\", val: propName, elmType: \"none\" }];\n}\n\nfunction computeScale(scales, scNames, getScales) {\n const computed = Object.assign({}, scales);\n\n scNames.forEach(scName => {\n computed.initial[scName] = getScales.initial(scName);\n computed.final[scName] = getScales.final(scName);\n });\n return computed;\n}\n\nfunction isLinearMarktype(mtype) {\n return [\"area\", \"line\", \"trail\"].indexOf(mtype) >= 0;\n}\n\nexport {\n propMap,\n getEaseFn,\n findAfterSibling,\n getJoinInfo,\n findComp,\n svgRender,\n computeScale,\n isLinearMarktype\n};\n","function computeHasFacet(compSpec) {\n if (\n compSpec &&\n compSpec.parent &&\n compSpec.parent.from &&\n compSpec.parent.from.facet &&\n compSpec.parent.from.facet.data &&\n compSpec.parent.from.facet.name === compSpec.from.data\n ) {\n return true;\n }\n return false;\n}\n\nfunction getFacet(compSpec) {\n return computeHasFacet(compSpec) ? compSpec.parent.from.facet : undefined;\n}\n\nfunction isGroupingMarktype(marktype) {\n return marktype === \"line\" || marktype === \"area\" || marktype === \"trail\";\n}\n\nfunction findMark(marks, markName) {\n let result;\n for (let i = 0; i < marks.length; i++) {\n const m = marks[i];\n if (m.name === markName) {\n return m;\n }\n if (m.marks) {\n result = findMark(m.marks, markName);\n if (result) {\n break;\n }\n }\n }\n return result;\n}\n\nfunction findData(spec, dataName) {\n for (let i = 0; i < spec.data.length; i++) {\n if (spec.data[i].name === dataName) {\n return spec.data[i];\n }\n }\n}\nfunction findFilter(spec, name) {\n for (let i = 0; i < spec.data.length; i++) {\n const d = spec.data[i];\n if (d.transform) {\n const filter = d.transform.find(filter => filter.name === name);\n if (filter) {\n return filter;\n }\n }\n }\n}\n\nexport {\n computeHasFacet,\n getFacet,\n isGroupingMarktype,\n findMark,\n findData,\n findFilter\n};\n","import { parse, codegen as vgCodegen } from \"vega-expression\";\nimport * as d3 from \"d3\";\nimport * as vega from \"vega\";\nimport {copy, flatten} from \"./util/util.js\";\nimport { getEaseFn } from \"./actuator/util\";\nimport { findFilter } from \"./changeFetcher/state/util\";\n\n\nclass Enumerator {\n constructor(enumDef, spec, rawInfo) {\n this.views = getStops(enumDef, spec, rawInfo);\n this.stopN = this.views.length;\n this.enumDef = enumDef;\n this.currSpec = spec;\n this.easeFn = getEaseFn(enumDef.ease);\n this.delay = enumDef.delay || 0;\n this.staggering = enumDef.staggering;\n this.rawInfo = rawInfo;\n }\n\n _getScales(stop_n) {\n return scName => {\n const view = this.views[stop_n];\n return view._runtime.scales[scName]\n ? view._runtime.scales[scName].value\n : undefined;\n };\n }\n\n getData(stop_n) {\n if (this.extractData && this.getId) {\n return this.extractData(this.views[stop_n]);\n }\n throw Error(\"Cannot return data without joining data.\");\n }\n\n getDatum(id, stop_n) {\n if (this.extractData && this.getId) {\n const found = this.extractData(this.views[stop_n]).find(\n (d, i) => this.getId(d, i) === id\n );\n return found && found.datum ? found.datum : found;\n }\n throw Error(\"Cannot return data without joining data.\");\n }\n\n joinData(extractData, identifyData) {\n this.extractData = extractData;\n this.getId = identifyData;\n let currDataKeys = this.extractData(this.views[0]).map(this.getId);\n\n this.joinDataInfo = this.views.slice(1).map(view => {\n const join = {\n update: [],\n enter: [],\n exit: []\n };\n const newDataKeys = extractData(view).map(this.getId);\n currDataKeys.forEach(cKey => {\n const foundIndex = newDataKeys.indexOf(cKey);\n if (foundIndex >= 0) {\n join.update.push(cKey);\n } else {\n join.exit.push(cKey);\n }\n });\n join.enter = newDataKeys.filter(nKey => currDataKeys.indexOf(nKey) < 0);\n\n currDataKeys = newDataKeys;\n\n return [\"update\", \"enter\", \"exit\"].reduce((accMap, set) => {\n return Object.assign(\n accMap,\n join[set].reduce((acc, key) => {\n acc[key] = set;\n return acc;\n }, {})\n );\n }, {});\n });\n this.allKeys = flatten(this.joinDataInfo.map(Object.keys)).unique();\n this.set = (id, stop_n) => this.joinDataInfo[stop_n][id];\n }\n\n getPropVal(prop, encodes, stop_n, id) {\n const d = this.extractData(this.views[stop_n]).find(\n (x, i) => this.getId(x, i) === id\n );\n const dSet = this.set(id, stop_n);\n if (!dSet) {\n return [\"x2\", \"y2\"].indexOf(prop.val) >= 0 ? 0 : \"\";\n }\n const getScales = {\n initial: this._getScales(stop_n),\n final: this._getScales(stop_n + 1)\n };\n return encodes[dSet].initial(prop, getScales, d);\n }\n\n interpolateAlongEnumMaker(prop, encodes, elem) {\n return id => {\n return t => {\n const stop_n = Math.min(Math.floor(t * (this.stopN - 1)), this.stopN - 2);\n let d_i = this.extractData(this.views[stop_n]).find(\n (x, i) => this.getId(x, i) === id\n );\n let d_f = this.extractData(this.views[stop_n + 1]).find(\n (x, i) => this.getId(x, i) === id\n );\n\n const dSet = this.set(id, stop_n);\n switch (dSet) {\n case \"enter\":\n d_i = d_f;\n break;\n case \"exit\":\n d_f = d_i;\n break;\n case \"update\":\n break;\n default:\n return [\"x2\", \"y2\"].indexOf(prop.val) >= 0 ? 0 : \"\";\n }\n const getScales = {\n initial: this._getScales(stop_n),\n final: this._getScales(stop_n + 1)\n };\n if (prop.type === \"attrTween\") {\n return encodes[dSet].custom.bind(elem)(prop, getScales, d_i, d_f)(\n t * (this.stopN - 1) - stop_n\n );\n }\n const valI = encodes[dSet].initial.bind(elem)(prop, getScales, d_i);\n const valF = encodes[dSet].final.bind(elem)(prop, getScales, d_f);\n\n return d3.interpolate(valI, valF)(t * (this.stopN - 1) - stop_n);\n // apply one of corresponding interpolation\n };\n };\n }\n}\n\nfunction computeFilteringValues(enumDef, rawInfo) {\n const filteringValues = enumDef.values || [];\n if (filteringValues.length === 0 && enumDef.stepSize) {\n // find initial value\n const iFilter = findFilter(rawInfo.sVis.spec, enumDef.filter);\n const iVal = parse(iFilter.expr).right.value;\n\n // find end value\n const fFilter = findFilter(rawInfo.eVis.spec, enumDef.filter);\n const fVal = parse(fFilter.expr).right.value;\n\n for (let v = iVal; v < fVal; v += enumDef.stepSize) {\n filteringValues.push(v);\n }\n\n filteringValues.push(fVal);\n }\n return filteringValues;\n}\n\n\nfunction computeNewSpec(workingSpec, filter, fVal) {\n const codegen = vgCodegen({\n whitelist: [\"datum\", \"event\", \"signals\"],\n globalvar: \"global\"\n });\n\n const parsedASTNode = parse(filter.expr);\n\n parsedASTNode.right.value = fVal;\n parsedASTNode.right.raw = fVal.toString();\n const newFilterExpr = codegen(parsedASTNode).code;\n filter.expr = newFilterExpr;\n\n return copy(workingSpec);\n}\nfunction getStops(enumDef, spec, rawInfo) {\n const workingSpec = copy(spec);\n\n const enumVals = computeFilteringValues(enumDef, rawInfo);\n const filter = findFilter(workingSpec, enumDef.filter);\n\n const views = enumVals.map(v => {\n return new vega.View(vega.parse(computeNewSpec(workingSpec, filter, v)), {\n renderer: \"none\"\n }).run();\n });\n\n return views;\n}\n\n\nexport { Enumerator, computeFilteringValues, computeNewSpec };\n","import { copy } from \"../util/util\";\nimport {computeFilteringValues} from \"../enumerator\";\nexport default function enumerateSteps(block, rawInfo, enumDefs) {\n if (block.sync) {\n block.sync = block.sync.map(blk => enumerateSteps(blk, rawInfo, enumDefs));\n } else if (block.concat) {\n block.concat = block.concat.map(blk =>\n enumerateSteps(blk, rawInfo, enumDefs)\n );\n\n if (block.enumerator) {\n const foundEnumDef = enumDefs.find(\n enumDef => enumDef.name === block.enumerator\n );\n\n if (foundEnumDef) {\n const filteringValues = computeFilteringValues(foundEnumDef, rawInfo);\n return filteringValues.slice(1).reduce(\n (acc, fVal, i) => {\n const enumedConcatBlock = copy(block);\n enumedConcatBlock.concat.forEach(blk => {\n fetchEnumVal(blk, foundEnumDef, fVal);\n });\n enumedConcatBlock.enumerated = copy(foundEnumDef);\n enumedConcatBlock.enumerated.val = fVal;\n enumedConcatBlock.enumerated.N = filteringValues.length;\n enumedConcatBlock.enumerated.last =\n i === filteringValues.length - 2;\n\n acc.concat.push(enumedConcatBlock);\n return acc;\n },\n { concat: [] }\n );\n }\n }\n }\n return block;\n}\n\nfunction fetchEnumVal(block, enumDef, val) {\n if (block.sync || block.concat) {\n (block.sync || block.concat).forEach(blk => {\n fetchEnumVal(blk, enumDef, val);\n });\n } else if (Array.isArray(block.enumVals)) {\n block.enumerated.push({def: enumDef, val: val});\n } else {\n block.enumerated = [{def: enumDef, val: val}];\n }\n}","import { isNumber, copy, permutate} from \"../util/util\";\nimport {default as collectResolves} from \"./resolveCollector\";\nimport {Schedule} from \"../schedule\";\nimport {default as checkConflict} from \"./conflictChecker\";\nimport {specChecker} from \"./specChecker\";\nimport {default as enumerateSteps} from \"./stepEnumerator\";\nexport function parse(spec, rawInfo){\n // const speckCheckResult = true; //specChecker(spec); TODO: when specChecker is included, it blocked loading the source map.\n const speckCheckResult = specChecker(spec);\n if (!speckCheckResult) {\n // Todo: give more specific reasons through speckCheckResult.\n return console.error(\"The spec is invalid.\");\n }\n\n // Enumerator argument the concatBlock with enumerator\n let newSpec = copy(spec);\n newSpec.timeline = enumerateSteps(newSpec.timeline, rawInfo, newSpec.enumerators);\n\n\n // 1. reform the timline such that all blocks have duration.\n let parsedTimelineBlock = readBlock(newSpec.timeline, newSpec.totalDuration);\n let parsedSteps = assignTiming(parsedTimelineBlock, { sTime: 0 }, true);\n\n // 2. attach staggering definitions\n parsedSteps.forEach(step => {\n if ([\"axis\", \"mark\", \"legend\"].indexOf(step.compType) >= 0) {\n step.timing = attachStaggering(step.timing, newSpec.staggerings);\n }\n });\n // 3. enumerator definitions\n if (newSpec.enumerators) {\n newSpec.enumerators = newSpec.enumerators.map(enumerator => {\n return attachStaggering(enumerator, newSpec.staggerings);\n });\n\n parsedSteps.forEach((step, i) => {\n if ([\"axis\", \"mark\", \"legend\"].indexOf(step.compType) >= 0) {\n step = attachEnumerators(step, newSpec.enumerators);\n }\n });\n }\n\n\n const schedule = new Schedule(parsedSteps);\n const resolves = collectResolves(parsedTimelineBlock, parsedSteps);\n\n const { conflictsPerAlterId } = checkConflict(schedule, resolves);\n\n\n return { schedule, resolves, conflictsPerAlterId };\n}\n\n\nexport function readBlock(block, totalDuration, multiplier = 1) {\n if (block.sync) {\n return readSyncBlock(block, totalDuration, multiplier);\n }\n if (block.concat) {\n return readConcatBlock(block, totalDuration, multiplier);\n }\n const delay =\n (block.delay\n ? isNumber(block.timing.delay.ratio)\n ? block.timing.delay.ratio * totalDuration\n : block.timing.delay\n : 0) * multiplier;\n\n const duration =\n (isNumber(block.timing.duration.ratio)\n ? block.timing.duration.ratio * totalDuration\n : block.timing.duration) * multiplier;\n const compType =\n typeof block.component === \"object\"\n ? Object.keys(block.component)[0]\n : block.component;\n const compName =\n typeof block.component === \"object\" ? block.component[compType] : undefined;\n\n return {\n duration,\n delay,\n timing: Object.assign({}, block.timing, { duration, delay }),\n change: block.change,\n enumerated: block.enumerated,\n enumerator: block.enumerator, // step enumerator\n compType,\n compName\n };\n}\nexport function readConcatBlock(concatBlock, totalDuration, multiplier = 1) {\n const concatenated = concatBlock.concat;\n let duration = 0;\n let alternateConcats = {};\n\n const newMult = concatBlock.enumerated ? 1 / concatBlock.enumerated.N : 1;\n\n const reformedBlocks = concatenated.map(block => {\n const newBlock = readBlock(block, totalDuration, multiplier * newMult);\n duration = duration + newBlock.timing.duration + newBlock.timing.delay;\n return newBlock;\n });\n\n if (concatBlock.autoScaleOrder) {\n // permutate the concat's order\n concatBlock.resolve = {\n autoScaleOrder: concatBlock.autoScaleOrder,\n alterName:\n concatBlock.autoScaleOrder.join(\"-\") +\n (concatBlock.enumerated ? `_${concatBlock.enumerated.val}` : \"\")\n };\n let alternates = permutateOnlyContainNames(\n concatenated,\n concatBlock.resolve.autoScaleOrder\n );\n\n alternates.splice(0, 1);\n alternates = alternates.map(concatenated_i => {\n return concatenated_i.map(block => readBlock(block, totalDuration, multiplier * newMult));\n });\n alternateConcats = {\n alterName: concatBlock.resolve.alterName,\n alternates\n };\n }\n return Object.assign(\n {\n delay: 0,\n duration,\n timing: { delay: 0, duration },\n concat: reformedBlocks,\n resolve: concatBlock.resolve,\n enumerated: concatBlock.enumerated\n },\n alternateConcats\n );\n}\n\nexport function permutateOnlyContainNames(blocks, names) {\n const filtered = [];\n const indices = [];\n blocks.forEach((blk, i) => {\n if (containNames(blk)) {\n filtered.push(blk);\n indices.push(i);\n }\n });\n\n return permutate(filtered).map(permutatedOne => {\n return indices.reduce((acc, index, i) => {\n acc.splice(index, 1, permutatedOne[i]);\n return acc;\n }, copy(blocks));\n });\n\n function containNames(block) {\n if (block.sync || block.concat) {\n return (block.sync || block.concat).reduce((acc, blk) => {\n acc = acc || containNames(blk, names);\n return acc;\n }, false);\n }\n const compType = Object.keys(block.component)[0];\n return names.indexOf(block.component[compType]) >= 0;\n }\n}\n\nexport function readSyncBlock(syncBlock, totalDuration, multiplier = 1) {\n const anchor = syncBlock.anchor || \"start\";\n let duration = 0;\n const newBlocks = syncBlock.sync.map(block => {\n const newBlock = readBlock(block, totalDuration, multiplier);\n duration =\n duration > newBlock.timing.duration + newBlock.timing.delay\n ? duration\n : newBlock.timing.duration + newBlock.timing.delay;\n return newBlock;\n });\n\n return {\n delay: 0,\n duration,\n timing: { delay: 0, duration },\n anchor,\n sync: newBlocks\n };\n}\n\nexport function attachStaggering(item, staggerings) {\n if (!staggerings || staggerings.length <= 0 || !item) {\n return item;\n }\n\n const found = staggerings.find(stgDef => item.staggering === stgDef.name);\n return Object.assign(item, { staggering: found });\n}\n\nexport function attachEnumerators(item, enumerators) {\n if (!enumerators || enumerators.length <= 0 || !item) {\n return item;\n }\n\n const found = enumerators.find(\n enumeratorDef => item.enumerator === enumeratorDef.name\n );\n return Object.assign(item, { enumerator: found });\n}\n\nexport function assignTiming(block, timePointer) {\n let steps = [];\n const anchor = isNumber(timePointer.sTime) ? \"s\" : \"e\";\n let timestamp = anchor === \"s\" ? timePointer.sTime : timePointer.eTime;\n if (block.sync && block.anchor === \"start\") {\n block.sync.forEach(blk => {\n steps = steps.concat(\n assignTiming(blk, {\n sTime: anchor === \"s\" ? timestamp : timestamp - block.duration\n })\n );\n });\n } else if (block.sync && block.anchor === \"end\") {\n block.sync.forEach(blk => {\n steps = steps.concat(\n assignTiming(blk, {\n eTime: anchor === \"e\" ? timestamp : timestamp + block.duration\n })\n );\n });\n } else if (block.concat) {\n if (anchor === \"e\") {\n timestamp -= block.duration;\n }\n\n if (block.alternates) {\n block.alternates.forEach((alternate, i) => {\n let alterTimeStamp = timestamp;\n alternate.forEach(blk => {\n const alter = assignTiming(copy(blk), {\n sTime: alterTimeStamp\n }).map(step => {\n step.alterId = `${step.alterId || \"\"}${block.alterName}:${i}`;\n return step;\n });\n\n steps = steps.concat(alter);\n alterTimeStamp += blk.duration + blk.delay;\n });\n });\n }\n\n block.concat.forEach(blk => {\n const mainSteps = assignTiming(blk, { sTime: timestamp }).map(step => {\n step.alterId = step.alterId || `${block.alterName || \"\"}:main`;\n return copy(step);\n });\n steps = steps.concat(mainSteps);\n timestamp += blk.duration + blk.delay;\n });\n } else {\n if (anchor === \"s\") {\n block.sTime = timestamp;\n block.eTime = timestamp + block.duration + block.delay;\n } else {\n block.eTime = timestamp;\n block.sTime = timestamp - block.duration - block.delay;\n }\n steps = steps.concat([block]);\n }\n return steps;\n}","import * as d3 from \"d3\";\nimport { computeHasFacet, isGroupingMarktype } from \"../changeFetcher/state/util\";\n// Join and return nextData\nfunction facetData(data, facetDef) {\n if (!facetDef) {\n return [\n {\n datum: {},\n mark: { role: \"group\", marktype: \"group\" },\n items: [{ items: data }]\n }\n ];\n }\n\n let {groupby} = facetDef;\n if (typeof groupby === \"string\") {\n groupby = [groupby];\n }\n return d3\n .nest()\n .key(d => groupby.map(f => d.datum[f]).join(\"@@_@@\"))\n .entries(data)\n .map(group => {\n let datum = groupby.reduce((datum, f) => {\n datum[f] = group.values[0].datum[f];\n return datum;\n }, { count: group.values.length });\n return {\n datum: datum,\n mark: {role: \"group\", marktype: \"group\"},\n items: [{items: group.values }]\n };\n });\n}\nfunction unpackData(data) {\n if (data[0].mark.marktype !== \"group\") {\n return data;\n }\n\n return data.reduce((unpacked, group) => {\n return unpacked.concat(group.items[0].items);\n }, []);\n}\n\nfunction getMarkData(view, compSpec, compName, marktype, facet) {\n let dataName = computeHasFacet(compSpec) ? compSpec.parent.name : compName;\n let data = view._runtime.data[dataName] ? (view._runtime.data[dataName].values.value) || [] : [];\n if (data.length === 0) {\n return data;\n }\n let isGroupingMtype = isGroupingMarktype(marktype || compSpec.type),\n hasFacet = computeHasFacet(compSpec);\n\n if ( isGroupingMtype && !hasFacet ) {\n return facetData(data, facet || (compSpec.parent.from ? compSpec.parent.from.facet : undefined));\n } if (!isGroupingMtype && hasFacet) {\n data = unpackData(data);\n }\n return data;\n}\n\nfunction getEmptyLegendData(compSpec) {\n if (compSpec.type === \"symbol\") {\n return {\n labels: [],\n symbols: [],\n pairs: [],\n title: []\n };\n } if (compSpec.type === \"gradient\") {\n return {\n labels: [],\n gradient: [],\n bands: [],\n title: []\n };\n }\n}\nfunction getLegendData(view, compName, compSpec) {\n const titleDatum = view._runtime.data[compName].values.value[0].items.find(\n item => item.role === \"legend-title\"\n ).items[0];\n let returnData = { title: [titleDatum] };\n if (compSpec.type === \"symbol\") {\n returnData = Object.assign(returnData, {\n labels: [],\n symbols: [],\n pairs: []\n });\n const fPairs = view._runtime.data[compName].values.value[0].items.find(\n item => item.role === \"legend-entry\"\n ).items[0].items[0].items;\n fPairs.forEach(pair => {\n returnData.pairs.push(pair);\n returnData.labels.push(\n pair.items.find(item => item.role === \"legend-label\").items[0]\n );\n returnData.symbols.push(\n pair.items.find(item => item.role === \"legend-symbol\").items[0]\n );\n });\n } else if (compSpec.type === \"gradient\") {\n returnData = Object.assign(returnData, {\n labels: [],\n gradient: [],\n bands: []\n });\n const entryG = view._runtime.data[compName].values.value[0].items.find(\n item => item.role === \"legend-entry\"\n ).items[0];\n let labelG; let bandG; let gradientG;\n if ((labelG = entryG.items.find(item => item.role === \"legend-label\"))) {\n returnData.labels = returnData.labels.concat(labelG.items);\n }\n if ((bandG = entryG.items.find(item => item.role === \"legend-band\"))) {\n returnData.bands = returnData.bands.concat(bandG.items);\n }\n if (\n (gradientG = entryG.items.find(item => item.role === \"legend-gradient\"))\n ) {\n returnData.gradient.push(gradientG.items[0]);\n }\n }\n return returnData;\n}\n\nfunction getEmptyAxisData() {\n return {\n tick: [],\n label: [],\n grid: []\n };\n}\nfunction getAxisData(view, compName) {\n return [\"tick\", \"label\", \"grid\"].reduce((acc, subComp) => {\n let data = view._runtime.data[compName].values.value[0].items\n .find(item => item.role === `axis-${subComp}`);\n\n data = data && data.items ? data.items : [];\n acc[subComp] = data;\n return acc;\n }, {});\n}\n\nexport {\n facetData,\n unpackData,\n getMarkData,\n getEmptyLegendData,\n getLegendData,\n getEmptyAxisData,\n getAxisData\n};\n","import { computeHasFacet, isGroupingMarktype, getFacet } from \"./util\";\nimport { stringifyDatumValue } from \"../../util/util\";\nimport {\n facetData,\n unpackData,\n getAxisData,\n getEmptyAxisData,\n getEmptyLegendData,\n getLegendData,\n getMarkData\n} from \"../../util/vgDataHelper\";\n\nfunction computeIdMaker(key) {\n if (Array.isArray(key)) {\n return (d) => {\n return key\n .map(field => {\n return d.datum[field];\n })\n .join(\"-\");\n };\n }\n return (d, i) => stringifyDatumValue(i);\n}\n\nfunction initialData(step, rawInfo) {\n const sView = rawInfo.sVis.view;\n const { change } = step;\n const isAdd = !change.initial && !!change.final;\n if (change.compType === \"axis\") {\n if (isAdd) {\n return getEmptyAxisData();\n }\n return getAxisData(sView, change.compName);\n }\n if (change.compType === \"legend\") {\n if (isAdd) {\n return getEmptyLegendData(change.final);\n }\n return getLegendData(sView, change.compName, change.initial);\n }\n if (change.compType === \"mark\") {\n if (isAdd) {\n return [];\n }\n const mtype = step.marktypes ? step.marktypes.initial : change.initial.type;\n return getMarkData(sView, change.initial, change.compName, mtype);\n }\n if (change.compType === \"view\") {\n return sView._runtime.data.root.values.value[0];\n }\n}\n\nfunction joinData(step, rawInfo, initialData) {\n const iData = initialData;\n const eView = rawInfo.eVis.view;\n const {change} = step;\n const isAdd = !change.initial && !!change.final;\n const isRemove = !!change.initial && !change.final;\n const {hasFacet} = step;\n let preFetchCurrData = false;\n let computeId = {};\n\n if (change.compType === \"axis\") {\n const result = {\n nextData: {},\n currData: {},\n computeDatumId: {}\n };\n\n result.nextData.axis = isRemove\n ? iData.axis\n : [eView._runtime.data[change.compName].values.value[0].datum];\n result.currData.axis = iData.axis;\n result.computeDatumId.axis = (d, i) => i;\n\n if (\n change.scale === false ||\n (change.scale && change.scale.data === false)\n ) {\n const computeId = d => stringifyDatumValue(d.datum.value);\n return [\"tick\", \"label\", \"grid\"].reduce((acc, subComp) => {\n const nextData = iData[subComp].map((d, i) => {\n setJoinInfo(d, step, { animSet: \"update\", joinKey: computeId(d, i) });\n return d;\n });\n acc.nextData[subComp] = nextData;\n acc.currData[subComp] = nextData;\n acc.computeDatumId[subComp] = computeId;\n return acc;\n }, result);\n }\n\n let fData = getEmptyAxisData();\n if (!isRemove) {\n fData = getAxisData(eView, change.compName);\n }\n\n return [\"tick\", \"label\", \"grid\"].reduce((acc, subComp) => {\n let subCompEncName = subComp === \"tick\" ? \"ticks\" : subComp;\n subCompEncName = subCompEncName === \"label\" ? \"labels\" : subCompEncName;\n let computeId = d => stringifyDatumValue(d.datum.value);\n\n if (change.encode && change.encode[subCompEncName] === false) {\n acc.nextData[subComp] = iData[subComp];\n acc.currData[subComp] = iData[subComp];\n acc.computeDatumId[subComp] = computeId;\n return acc;\n }\n\n const iDataSubComp = iData[subComp] || [];\n let fDataSubComp = fData[subComp] || [];\n if (!step.sameDomainDimension) {\n const ci = appendPostfix(computeId, \"_exit\");\n let cf = appendPostfix(computeId, \"_enter\");\n computeId = { initial: ci, final: cf };\n\n iDataSubComp.forEach((iDatum, i) => {\n setJoinInfo(iDatum, step, {\n animSet: \"exit\",\n joinKey: computeId.initial(iDatum, i)\n });\n });\n\n fDataSubComp.forEach((fDatum, i) => {\n setJoinInfo(fDatum, step, {\n animSet: \"enter\",\n joinKey: computeId.final(fDatum, i)\n });\n });\n } else {\n joinThem(iDataSubComp, fDataSubComp, computeId, step);\n }\n\n // let isAnimSet = getIsAnimSet(subCompEncName, change.encode);\n // let iDataAnimSets = (isAnimSet.exit ? [] : [\"exit\"]).concat(isAnimSet.update ? [] : [\"update\"]),\n // fDataAnimSets = (isAnimSet.enter ? [\"enter\"] : []).concat(isAnimSet.update ? [\"update\"] : [])\n const iDataAnimSets = []; let fDataAnimSets = [\"enter\", \"update\"];\n const nextData = iDataSubComp\n .filter(d => iDataAnimSets.indexOf(getJoinInfo(d, step, \"animSet\")) >= 0)\n .concat(fDataSubComp.filter(d => fDataAnimSets.indexOf(getJoinInfo(d, step, \"animSet\")) >= 0));\n\n // let nextData = [];\n\n // nextData = nextData.concat(isAnimSet.update ? joinedData.update.final : joinedData.update.initial)\n // nextData = isAnimSet.enter ? nextData.concat(joinedData.enter) : nextData;\n // nextData = !isAnimSet.exit ? nextData.concat(joinedData.exit) : nextData;\n\n acc.nextData[subComp] = nextData;\n acc.currData[subComp] = iDataSubComp;\n acc.computeDatumId[subComp] = computeId;\n return acc;\n }, result);\n\n }\n if (change.compType === \"legend\") {\n const getComputeId = subComp => {\n if (subComp === \"pairs\") {\n return d => {\n const {datum} = d.items.find(item => item.role === \"legend-label\").items[0];\n return stringifyDatumValue(datum.value);\n };\n } else if (subComp === \"title\") {\n return d => d.text;\n } else if (subComp === \"gradient\") {\n return d => JSON.stringify(d.fill.stops);\n }\n return d => stringifyDatumValue(d.datum.value);\n };\n\n const result = Object.keys(iData).reduce(\n (acc, subComp) => {\n computeId = getComputeId(subComp);\n const nextData = iData[subComp].map((d, i) => {\n setJoinInfo(d, step, { animSet: \"update\", joinKey: computeId(d, i) });\n return d;\n });\n acc.nextData[subComp] = nextData;\n acc.currData[subComp] = nextData;\n acc.computeDatumId[subComp] = computeId;\n return acc;\n },\n {\n nextData: {},\n currData: {},\n computeDatumId: {}\n }\n );\n\n if (\n change.scale === false ||\n (change.scale && change.scale.data === false)\n ) {\n return result;\n }\n\n if (isRemove) {\n result.nextData = getEmptyLegendData(change.initial);\n return result;\n }\n const fData = getLegendData(eView, change.compName, change.final);\n const keys = Object.keys(fData)\n .concat(Object.keys(iData))\n .unique();\n return keys.reduce((acc, subComp) => {\n const subCompEncName = subComp;\n if (change.encode && change.encode[subCompEncName] === false) {\n return acc;\n }\n computeId = getComputeId(subComp);\n const iDataSubComp = iData[subComp] || [];\n let fDataSubComp = fData[subComp]|| [];\n if (\n (subComp === \"labels\" &&\n step.legendTypes.initial !== step.legendTypes.final) ||\n !step.sameDomainDimension\n ) {\n const ci = appendPostfix(computeId, \"_exit\");\n let cf = appendPostfix(computeId, \"_enter\");\n computeId = { initial: ci, final: cf };\n\n iDataSubComp.forEach((iDatum, i) => {\n setJoinInfo(iDatum, step, {\n animSet: \"exit\",\n joinKey: computeId.initial(iDatum, i)\n });\n });\n\n fDataSubComp.forEach((fDatum, i) => {\n setJoinInfo(fDatum, step, {\n animSet: \"enter\",\n joinKey: computeId.final(fDatum, i)\n });\n });\n } else {\n joinThem(iDataSubComp, fDataSubComp, computeId, step);\n }\n\n // let isAnimSet = getIsAnimSet(subCompEncName, change.encode);\n\n // let iDataAnimSets = (isAnimSet.exit ? [] : [\"exit\"]).concat(isAnimSet.update ? [] : [\"update\"]),\n // fDataAnimSets = (isAnimSet.enter ? [\"enter\"] : []).concat(isAnimSet.update ? [\"update\"] : [])\n const iDataAnimSets = []; let fDataAnimSets = [\"enter\", \"update\"];\n const nextData = iDataSubComp\n .filter(d => iDataAnimSets.indexOf(getJoinInfo(d, step, \"animSet\")) >= 0)\n .concat(fDataSubComp.filter(d => fDataAnimSets.indexOf(getJoinInfo(d, step, \"animSet\")) >= 0));\n\n acc.nextData[subComp] = nextData || [];\n acc.currData[subComp] = iDataSubComp;\n acc.computeDatumId[subComp] = computeId;\n return acc;\n }, result);\n }\n if (change.compType === \"mark\") {\n const {marktypes} = step;\n\n let doUpdate = !isRemove && !isAdd && change.data !== false,\n doEnter = !isRemove && (isAdd || change.data !== false),\n doExit = !isAdd && (isRemove || change.data !== false);\n let joinFields = null;\n if (change.data) {\n doUpdate = change.data.update === false ? false : doUpdate;\n doEnter = change.data.enter === false ? false : doEnter;\n doExit = change.data.exit === false ? false : doExit;\n joinFields = Array.isArray(change.data) ? change.data : change.data.keys;\n }\n\n\n const aggregate = step.aggregates;\n const isGroupingMarktypes = {\n initial: isGroupingMarktype(marktypes.initial || marktypes.final),\n final: isGroupingMarktype(marktypes.final || marktypes.initial)\n };\n\n const facets = {\n initial: hasFacet.initial\n ? getFacet(change.initial) || getFacet(change.final)\n : undefined,\n final: hasFacet.final\n ? getFacet(change.final) || getFacet(change.initial)\n : undefined\n };\n if (change.marktype === false) {\n isGroupingMarktypes.final = isGroupingMarktypes.initial;\n }\n\n if (change.data || isAdd || isRemove) {\n step.change.aggregate = aggregate;\n\n let fData = [];\n if (!isRemove) {\n const mtype = marktypes.final || marktypes.initial;\n const facet =\n change.marktype === false\n ? change.initial.parent.from\n ? change.initial.parent.from.facet\n : undefined\n : change.final.parent.from\n ? change.final.parent.from.facet\n : undefined;\n\n fData = getMarkData(eView, change.final, change.compName, mtype, facet);\n }\n // // Data should be from change.final!\n // let dName = computeHasFacet(change.final) ? change.final.parent.name : dataName;\n // let _fData = eView._runtime.data[dName] ? (eView._runtime.data[dName].values.value) : [];\n\n // // when the final data should be facetted but are not facetted yet:\n // if (isGroupingMarktypes.final && !computeHasFacet(change.final)){\n // if (change.marktype === false) {\n // fData = facetData(_fData, change.initial.parent.from ? change.initial.parent.from.facet : undefined);\n // } else {\n // fData = facetData(_fData, change.final.parent.from ? change.final.parent.from.facet : undefined);\n // }\n // } else if (!isGroupingMarktypes.final && computeHasFacet(change.final)) {\n // fData = unpackData(_fData);\n // } else {\n // fData = _fData;\n // }\n // }\n\n [\"initial\", \"final\"].forEach(which => {\n if (change[which] && facets[which]) {\n computeId[which] = computeIdMaker(facets[which].groupby);\n } else if (aggregate[which]) {\n computeId[which] = computeIdMaker(aggregate[which].groupby);\n } else {\n computeId[which] = computeIdMaker(joinFields);\n }\n });\n\n\n if (isGroupingMarktypes.initial && isGroupingMarktypes.final) {\n if (\n change.final &&\n change.initial &&\n facets.final &&\n facets.initial &&\n facets.initial.groupby.sort().toString() ===\n facets.final.groupby.sort().toString()\n ) {\n computeId = computeId.initial;\n joinThem(iData, fData, computeId, step);\n } else if (\n change.final &&\n change.initial &&\n !facets.final &&\n !facets.initial\n ) {\n computeId = computeId.initial;\n joinThem(iData, fData, computeId, step);\n } else {\n const ci = appendPostfix(computeId.initial, \"_exit\");\n let cf = appendPostfix(computeId.final, \"_enter\");\n\n computeId = { initial: ci, final: cf };\n iData.forEach((iDatum, i) => {\n setJoinInfo(iDatum, step, {\n animSet: \"exit\",\n joinKey: computeId.initial(iDatum, i)\n });\n });\n fData.forEach((fDatum, i) => {\n setJoinInfo(fDatum, step, {\n animSet: \"enter\",\n joinKey: computeId.final(fDatum, i)\n });\n });\n }\n } else if (!isGroupingMarktypes.initial && !isGroupingMarktypes.final) {\n if (\n aggregate.initial &&\n aggregate.final &&\n aggregate.initial.groupby.sort().toString() ===\n aggregate.final.groupby.sort().toString()\n ) {\n computeId = computeId.initial;\n joinThem(iData, fData, computeId, step);\n } else if (!aggregate.initial && !aggregate.final) {\n computeId = computeId.initial;\n joinThem(iData, fData, computeId, step);\n } else {\n let ci = appendPostfix(computeId.initial, \"_exit\");\n let cf = appendPostfix(computeId.final, \"_enter\");\n computeId = { initial: ci, final: cf };\n\n iData.forEach((iDatum, i) => {\n setJoinInfo(iDatum, step, {\n animSet: \"exit\",\n joinKey: computeId.initial(iDatum, i)\n });\n });\n\n fData.forEach((fDatum, i) => {\n setJoinInfo(fDatum, step, {\n animSet: \"enter\",\n joinKey: computeId.final(fDatum, i)\n });\n });\n\n if (!aggregate.initial && aggregate.final) {\n attachAggData(fData, iData, computeId.final, aggregate.final);\n preFetchCurrData = true;\n } else if (aggregate.initial && !aggregate.final) {\n attachAggData(iData, fData, computeId.initial, aggregate.initial);\n preFetchCurrData = true;\n }\n }\n } else {\n // When the marktype changes between area/line to the others.\n let groupedData; let unpackedData;\n if (isGroupingMarktypes.initial) {\n computeId.initial = computeIdMaker(\n facets.initial ? change.initial.parent.from.facet.groupby : null\n );\n computeId.final = computeIdMaker(joinFields || null);\n unpackedData = unpackData(iData);\n joinThem(unpackedData, fData, computeId.final, step);\n\n groupedData = facetData(\n fData,\n change.initial.parent.from\n ? change.initial.parent.from.facet\n : undefined\n );\n joinThem(iData, groupedData, computeId.initial, step);\n } else {\n computeId.initial = computeIdMaker(joinFields || null);\n computeId.final = computeIdMaker(\n facets.final ? change.final.parent.from.facet.groupby : null\n );\n\n unpackedData = unpackData(fData);\n joinThem(iData, unpackedData, computeId.initial, step);\n\n groupedData = facetData(\n iData,\n change.final.parent.from\n ? change.final.parent.from.facet\n : undefined\n );\n joinThem(groupedData, fData, computeId.final, step);\n }\n\n return {\n nextData: fData,\n currData: iData,\n computeDatumId: computeId,\n groupedData,\n unpackedData\n };\n }\n\n const iDataAnimSets = (doExit ? [] : [\"exit\"]).concat(\n doUpdate ? [] : [\"update\"]\n );\n let fDataAnimSets = (doEnter ? [\"enter\"] : []).concat(\n doUpdate ? [\"update\"] : []\n );\n let nextData = iData.filter(\n d => iDataAnimSets.indexOf(getJoinInfo(d, step, \"animSet\")) >= 0\n );\n if (!doExit) {\n // we included the exit data as we do not make them exit.\n nextData.forEach((datum) => {\n setJoinInfo(datum, step, { animSet: \"update\" });\n });\n }\n\n nextData = nextData.concat(\n fData.filter(\n d => fDataAnimSets.indexOf(getJoinInfo(d, step, \"animSet\")) >= 0\n )\n );\n\n return {\n nextData,\n currData: iData,\n computeDatumId: computeId,\n preFetchCurrData\n };\n }\n // When there is no data change\n computeId = computeIdMaker(null);\n const sameData = iData.map((d, i) => {\n setJoinInfo(d, step, { animSet: \"update\", joinKey: computeId(d,i) });\n return d;\n });\n\n if (isGroupingMarktypes.initial !== isGroupingMarktypes.final) {\n // When the marktype changes between area/line to the others.\n let groupedData; let unpackedData;\n if (isGroupingMarktypes.initial) {\n unpackedData = unpackData(iData);\n unpackedData.map((d, i) => {\n setJoinInfo(d, step, { animSet: \"update\", joinKey: computeId(d,i) });\n return d;\n });\n return {\n nextData: unpackedData, currData: iData,\n computeDatumId: computeId,\n groupedData: iData,\n unpackedData: unpackedData\n };\n }\n groupedData = facetData(iData, change.final.parent.from ? change.final.parent.from.facet : undefined);\n groupedData.map((d, i) => {\n setJoinInfo(d, step, { animSet: \"update\", joinKey: computeId(d,i) });\n return d;\n });\n return {\n nextData: groupedData, currData: iData,\n computeDatumId: computeId,\n groupedData,\n unpackedData: iData\n };\n }\n\n return {\n nextData: sameData,\n currData: sameData,\n computeDatumId: computeId\n };\n }\n if (change.compType === \"view\") {\n return { nextData: eView._runtime.data.root.values.value[0] };\n }\n return iData;\n}\nfunction joinThem(iData, fData, computeId, step) {\n const updateData = { initial: [], final: [] };\n const enterData = [];\n const exitData = [];\n\n const takenChecker = new Array(fData.length);\n takenChecker.fill(false);\n iData.forEach((iDatum, i) => {\n const id = computeId(iDatum, i);\n const foundIndex = fData.findIndex(\n (fDatum, j) => computeId(fDatum, j) === id\n );\n const found = foundIndex >= 0 ? fData[foundIndex] : null;\n\n if (found) {\n const info = { animSet: \"update\", joinKey: id };\n setJoinInfo(found, step, info);\n setJoinInfo(iDatum, step, info);\n const extendedIDatum = { ...found.datum, ...iDatum.datum };\n const extendedFDatum = { ...iDatum.datum, ...found.datum };\n iDatum.datum = extendedIDatum;\n found.datum = extendedFDatum;\n updateData.final.push(found);\n updateData.initial.push(iDatum);\n\n takenChecker[foundIndex] = true;\n } else {\n setJoinInfo(iDatum, step, { animSet: \"exit\", joinKey: id });\n exitData.push(iDatum);\n }\n });\n takenChecker.forEach((taken, i) => {\n if (!taken) {\n setJoinInfo(fData[i], step, {\n animSet: \"enter\",\n joinKey: computeId(fData[i], i)\n });\n enterData.push(fData[i]);\n }\n });\n\n return {\n enter: enterData,\n update: updateData,\n exit: exitData\n };\n}\nfunction attachAggData(aggData, rawData, aggId, agg) {\n rawData.forEach((rawDatum, i) => {\n aggData.forEach((aggDatum, j) => {\n if (aggId(rawDatum, i) === aggId(aggDatum, j)) {\n agg.fields.forEach((f, f_i) => {\n rawDatum.datum[agg.as[f_i]] = aggDatum.datum[agg.as[f_i]];\n });\n }\n });\n });\n}\n\nfunction getJoinInfo(d, step, prop) {\n return d.__gemini__[step.stepId]\n ? d.__gemini__[step.stepId][prop]\n : undefined;\n}\n\nfunction appendPostfix(computeId, postFix) {\n return (d, i) => {\n return computeId(d, i) + postFix;\n };\n}\n\nfunction getAggregate(change, rawInfo) {\n const aggregate = {};\n if (!change.initial || !change.final) {\n return aggregate;\n }\n const sSpec = rawInfo.sVis.spec;\n const eSpec = rawInfo.eVis.spec;\n\n const dataName = compSpec => {\n return computeHasFacet(compSpec)\n ? compSpec.parent.from.facet.data\n : compSpec.from.data;\n };\n\n const dataSource_f = eSpec.data.find(\n dset => dset.name === dataName(change.final)\n );\n if (dataSource_f.transform) {\n aggregate.final = dataSource_f.transform.find(\n trsfm => trsfm.type === \"aggregate\"\n );\n }\n const dataSource_i = sSpec.data.find(\n dset => dset.name === dataName(change.initial)\n );\n if (dataSource_i.transform) {\n aggregate.initial = dataSource_i.transform.find(\n trsfm => trsfm.type === \"aggregate\"\n );\n }\n return aggregate;\n}\n\nfunction setJoinInfo(datum, step, info) {\n datum.__gemini__ = datum.__gemini__ || {};\n datum.__gemini__[step.stepId] = datum.__gemini__[step.stepId] || {};\n Object.assign(datum.__gemini__[step.stepId], info);\n}\n\nexport { joinData, initialData, getAggregate };\n","import { copy } from \"../../../util/util\";\nimport * as vega from \"vega\";\nfunction dataPreservedScale(sSpec, eSpec, scName) {\n const tempSpec = copy(eSpec);\n const scaleSpec = tempSpec.scales.find(sc => sc.name === scName);\n if (scaleSpec.domain.data) {\n const index = tempSpec.data.findIndex(\n d => d.name === scaleSpec.domain.data\n );\n if (index >= 0) {\n tempSpec.data.splice(\n index,\n 1,\n sSpec.data.find(d => d.name === scaleSpec.domain.data)\n );\n }\n }\n const tempView = new vega.View(vega.parse(tempSpec), {\n renderer: \"none\"\n }).run();\n return tempView._runtime.scales[scName].value;\n}\n\nfunction computeKeptEncode(manualEncode, referenceEncode, set) {\n return Object.keys(manualEncode && manualEncode[set] ? manualEncode[set] : {})\n .filter(attr => manualEncode[set][attr] === false)\n .reduce((keptEncode, attr) => {\n keptEncode[attr] = referenceEncode[set][attr];\n return keptEncode;\n }, {});\n}\n\n\nfunction replacePositionAttrs(targetMarktype, targetEncode, referenceEncode) {\n const encode = Object.assign({}, targetEncode);\n const POSITION_ATTRS = [\"x\", \"x2\", \"xc\", \"width\", \"y\", \"y2\", \"yc\", \"height\"];\n const replaceRules = {\n rect: [\n {replaceBy: [\"x\", \"x2\"], },\n {replaceBy: [\"x\", \"width\"], },\n {replaceBy: [\"xc\", \"width\"], remove: [\"x\"] },\n {replaceBy: [\"y\", \"y2\"], },\n {replaceBy: [\"y\", \"height\"], },\n {replaceBy: [\"yc\", \"height\"], remove: [\"y\"] }\n ],\n area: [\n {replaceBy: [\"x\", \"x2\", \"y\"], remove: \"*\" },\n {replaceBy: [\"x\", \"width\", \"y\"], remove: \"*\" },\n {replaceBy: [\"xc\", \"width\", \"y\"], remove: \"*\" },\n {replaceBy: [\"y\", \"y2\", \"x\"], remove: \"*\" },\n {replaceBy: [\"y\", \"height\", \"x\"], remove: \"*\" },\n {replaceBy: [\"yc\", \"height\", \"x\"], remove: \"*\" },\n {replaceBy: [\"x\", \"x2\", \"yc\"], remove: \"*\" },\n {replaceBy: [\"x\", \"width\", \"yc\"], remove: \"*\" },\n {replaceBy: [\"xc\", \"width\", \"yc\"], remove: \"*\" },\n {replaceBy: [\"y\", \"y2\", \"xc\"], remove: \"*\" },\n {replaceBy: [\"y\", \"height\", \"xc\"], remove: \"*\" },\n {replaceBy: [\"yc\", \"height\", \"xc\"], remove: \"*\" }\n ],\n default: [\n {replaceBy: [\"x\"] },\n {replaceBy: [\"xc\"], remove: [\"x\"] },\n {replaceBy: [\"y\"] },\n {replaceBy: [\"yc\"], remove: [\"y\"] }\n ]\n };\n let rules = replaceRules[targetMarktype] || replaceRules.default;\n\n rules.forEach(rule => {\n const hasAll = rule.replaceBy.reduce((hasAll, attr) => {\n return hasAll && referenceEncode[attr];\n }, true);\n if (hasAll) {\n rule.replaceBy.forEach(attr => {\n encode[attr] = referenceEncode[attr];\n });\n let removedAttrs = rule.remove || [];\n if (rule.remove === \"*\") {\n removedAttrs = POSITION_ATTRS.filter(attr => rule.replaceBy.indexOf(attr) < 0);\n }\n removedAttrs.forEach(attr => {\n delete encode[attr];\n });\n }\n });\n\n\n return encode;\n}\n\nexport { dataPreservedScale, computeKeptEncode, replacePositionAttrs };","import { dataPreservedScale, computeKeptEncode, replacePositionAttrs } from \"./util\";\nimport { copy2, copy, get } from \"../../../util/util\";\nimport { DEFAULT_ENCODE, DEFAULT_STYLE } from \"../../../default\";\nimport { computeHasFacet } from \"../util\";\nimport { getAggregate } from \"../dataJoin\";\n\n\nexport function compute(rawInfo, step, lastState) {\n const eView = rawInfo.eVis.view;\n const { change } = step;\n const isAdd = !change.initial && !!change.final;\n const isRemove = !!change.initial && !change.final;\n\n const manualEncode = change.encode;\n let doEnter = !isRemove && (isAdd || change.data !== false);\n let doExit = !isAdd && (isRemove || change.data !== false);\n\n if (change.data) {\n doEnter = change.data.enter === false ? false : doEnter;\n doExit = change.data.exit === false ? false : doExit;\n }\n\n if (\n !isAdd &&\n !isRemove &&\n change.initial.from.data !== change.final.from.data\n ) {\n if (!computeHasFacet(change.final) && !computeHasFacet(change.initial)) {\n console.error(\n `Data source of this mark (${change.compName}) has changed unexpectedly!`\n );\n }\n }\n\n const aggregates = {\n initial: lastState.aggregate,\n final: lastState.aggregate\n };\n\n if (change.data) {\n // aggregates.done = true;\n aggregates.final = getAggregate(change, rawInfo).final;\n }\n\n const marktypes = {\n initial: lastState.marktype, // change.initial ? change.initial.type : undefined,\n final: change.final ? change.final.type : undefined\n };\n\n if (\n marktypes.initial &&\n marktypes.final &&\n marktypes.initial !== marktypes.final\n ) {\n console.log(\"mark transform change!\");\n if (change.marktype === false) {\n marktypes.final = marktypes.initial;\n }\n }\n\n const hasFacet = {\n initial: lastState.hasFacet,\n final: lastState.hasFacet\n };\n if ((change.data || isAdd || isRemove) && change.marktype !== false) {\n hasFacet.final = computeHasFacet(change.final);\n }\n\n const scales = {\n initial: lastState.scale,\n final: copy2(lastState.scale)\n };\n const encodes = {\n initial: Object.assign({ update: {} }, copy(lastState.encode)),\n final: Object.assign({ update: {} }, copy(lastState.encode))\n };\n const signals = {\n initial: lastState.signal\n };\n const signalsFinal = [\"width\", \"height\", \"padding\"].reduce((acc, sgName) => {\n if (Array.isArray(change.signal)) {\n if (change.signal.indexOf(sgName) >= 0) {\n acc[sgName] = eView.signal(sgName);\n }\n return acc;\n }\n if (change.signal === false) {\n return acc;\n }\n acc[sgName] = eView.signal(sgName);\n return acc;\n }, {});\n signals.final = Object.assign({}, signals.initial, signalsFinal);\n\n if (change.scale !== false) {\n let finalScaleNames = [];\n if (change.scale === true || isAdd) {\n finalScaleNames = Object.keys(eView._runtime.scales);\n } else if (Array.isArray(change.scale)) {\n finalScaleNames = change.scale;\n } else if (typeof change.scale === \"object\") {\n finalScaleNames = Object.keys(change.scale);\n }\n finalScaleNames.forEach(scName => {\n if (change.scale[scName] && change.scale[scName].data === false) {\n scales.final[scName] = dataPreservedScale(\n rawInfo.sVis.spec,\n rawInfo.eVis.spec,\n scName\n );\n } else {\n scales.final[scName] = eView._runtime.scales[scName]\n ? eView._runtime.scales[scName].value\n : undefined;\n }\n\n const channel = Object.keys(encodes.final.update).find(\n key => key.scale === scName\n );\n encodes.final.update[channel] = change.final\n ? copy(change.final.encode.update[channel])\n : undefined;\n });\n }\n\n if (manualEncode === false) {\n throw Error(\"Interpolating data requires to interpolate encode.\");\n }\n\n const styleEncodes = {\n initial: copy(lastState.styleEncode),\n final: copy(lastState.styleEncode)\n };\n if (change.marktype) {\n styleEncodes.final = change.final && change.final.style\n ? DEFAULT_STYLE[change.final.style] || {}\n : {};\n }\n\n const manualEncodeEnterWithoutInitial = manualEncode\n ? copy(manualEncode.enter || {})\n : {};\n delete manualEncodeEnterWithoutInitial.initial;\n\n encodes.initial.enter = Object.assign(\n {},\n lastState.encode.update,\n DEFAULT_ENCODE.mark.enter,\n manualEncode && manualEncode.enter ? manualEncode.enter.initial : {}\n );\n\n if (get(change, \"encode\", \"enter\") === false) {\n encodes.final.enter = encodes.initial.enter;\n } else {\n encodes.final.enter = Object.assign(\n {},\n DEFAULT_ENCODE.mark[marktypes.final || marktypes.initial].update,\n styleEncodes.final,\n copy(get(change, \"final\", \"encode\", \"update\") || {}),\n manualEncode ? manualEncodeEnterWithoutInitial : {},\n computeKeptEncode(manualEncode, encodes.initial, \"enter\")\n );\n }\n\n encodes.initial.exit = Object.assign({}, lastState.encode.update);\n if (change.encode && change.encode.exit === false) {\n encodes.final.exit = encodes.initial.exit;\n } else {\n encodes.final.exit = Object.assign(\n {},\n DEFAULT_ENCODE.mark[marktypes.initial || marktypes.final].update,\n styleEncodes.final,\n doExit\n ? copy(\n get(change, \"final\", \"encode\", \"update\") ||\n get(change, \"initial\", \"encode\", \"update\")\n )\n : copy(\n get(change, \"initial\", \"encode\", \"update\") ||\n get(change, \"final\", \"encode\", \"update\")\n ),\n DEFAULT_ENCODE.mark.exit,\n manualEncode ? manualEncode.exit : {},\n computeKeptEncode(manualEncode, encodes.initial, \"exit\")\n );\n }\n\n if (change.encode && change.encode.update === false) {\n encodes.final.update = encodes.initial.update;\n } else {\n encodes.final.update = Object.assign(\n {},\n DEFAULT_ENCODE.mark[marktypes.final || marktypes.initial].update,\n styleEncodes.final,\n copy(get(change, \"final\", \"encode\", \"update\") || {}),\n manualEncode ? manualEncode.update : {},\n computeKeptEncode(manualEncode, encodes.initial, \"update\")\n );\n }\n\n // When marktype changes\n // |S_exit | -> | | exit! (initial.exit -> final.exit)\n // |S_update| -> | | update via fading out (initial.update -> initial.intermediate)\n // | | -> | E_update | & fading in (final.intermediate -> final.update)\n // | | -> | E_enter | enter! (initial.enter -> final.enter)\n if (marktypes.final !== marktypes.initial) {\n encodes.initial.intermediate = Object.assign(\n {},\n replacePositionAttrs(marktypes.initial, encodes.initial.update, encodes.final.update),\n { opacity: { value: 0 } }\n );\n\n encodes.final.intermediate = Object.assign(\n {},\n replacePositionAttrs(marktypes.final, encodes.final.update, encodes.initial.update),\n { opacity: { value: 0 } }\n );\n\n if (doEnter) {\n encodes.initial.enter = Object.assign(\n {},\n replacePositionAttrs(marktypes.final, encodes.final.enter, encodes.initial.enter),\n { opacity: { value: 0 } },\n manualEncode && manualEncode.enter ? manualEncode.enter.initial : {}\n );\n }\n if (doExit) {\n encodes.final.exit = Object.assign(\n {},\n replacePositionAttrs(marktypes.initial, encodes.initial.exit, encodes.final.exit),\n { opacity: { value: 0 } },\n manualEncode ? manualEncode.exit : {},\n computeKeptEncode(manualEncode, encodes.initial, \"exit\"),\n );\n }\n }\n if (!aggregates.initial && aggregates.final && change.data ) {\n // when aggregate\n encodes.final.exit = Object.assign(\n !change.marktype ? encodes.final.update : replacePositionAttrs(marktypes.initial, encodes.final.exit, encodes.final.update),\n { opacity: { value: 0 } },\n manualEncode ? manualEncode.exit : {},\n computeKeptEncode(manualEncode, encodes.initial, \"exit\"),\n );\n\n encodes.final.update = copy(encodes.final.enter);\n } else if (aggregates.initial && !aggregates.final && change.data ) {\n // when disaggregate\n\n encodes.initial.enter = Object.assign(\n {},\n !change.marktype ? encodes.initial.update : replacePositionAttrs(marktypes.final, encodes.initial.enter, encodes.initial.update),\n { opacity: { value: 0 } },\n manualEncode && manualEncode.enter ? manualEncode.enter.initial : {}\n );\n\n encodes.final.update = copy(encodes.final.enter);\n }\n\n return {\n encodes,\n scales,\n signals,\n marktypes,\n hasFacet,\n aggregates,\n styleEncodes\n };\n}","import { dataPreservedScale, computeKeptEncode } from \"./util\";\nimport { copy2, copy, get, deepEqual } from \"../../../util/util\";\nimport { DEFAULT_ENCODE } from \"../../../default\";\nimport { findComp } from \"../../../actuator/util\";\n\nexport function compute(rawInfo, step, lastState) {\n const { change } = step;\n const compState = lastState;\n const eView = rawInfo.eVis.view;\n const isRemove = !change.final;\n const isAdd = !change.initial;\n let doTicks;\n let doLabels;\n let doAxisG;\n let doTitle;\n let doDomain;\n let doGrid;\n doTicks = doLabels = doAxisG = doTitle = doDomain = doGrid = true;\n\n if (change.encode === false) {\n doTicks = doLabels = doAxisG = doTitle = doDomain = doGrid = false;\n } else if (change.encode) {\n doTicks = !(change.encode.ticks === false);\n doLabels = !(change.encode.labels === false);\n doAxisG = !(change.encode.axis === false);\n doTitle = !(change.encode.title === false);\n doGrid = !(change.encode.grid === false);\n doDomain = !(change.encode.domain === false);\n }\n\n const scNames = {\n initial: change.initial ? change.initial.scale : undefined,\n final: change.final ? change.final.scale : undefined\n };\n\n // collect the scale objects to scale the initial/final values\n const scales = {\n initial: compState.scale,\n final: copy2(compState.scale)\n };\n\n if (!(change.scale === false)) {\n if (!scNames.final) {\n scales.final = {};\n } else if (change.scale && change.scale.data === false) {\n scales.final[scNames.final] = dataPreservedScale(\n rawInfo.sVis.spec,\n rawInfo.eVis.spec,\n scNames.final\n );\n } else {\n scales.final[scNames.final] = eView._runtime.scales[scNames.final]\n ? eView._runtime.scales[scNames.final].value\n : undefined;\n }\n }\n\n let sameDomainDimension = get(change, \"scale\", \"domainDimension\");\n if (typeof sameDomainDimension === \"string\") {\n sameDomainDimension =\n sameDomainDimension === \"same\"\n ? true\n : sameDomainDimension === \"diff\"\n ? false\n : undefined;\n }\n if (isRemove || isAdd) {\n sameDomainDimension = false;\n } else if (sameDomainDimension === undefined) {\n if (change.scale === false) {\n sameDomainDimension = true;\n } else {\n const scaleDefs = {\n initial: rawInfo.sVis.spec.scales.find(\n scaleDef => scaleDef.name === scNames.initial\n ),\n final: rawInfo.eVis.spec.scales.find(\n scaleDef => scaleDef.name === scNames.final\n )\n };\n sameDomainDimension = deepEqual(\n scaleDefs.initial.domain,\n scaleDefs.final.domain\n );\n }\n }\n\n const signals = {\n initial: compState.signal\n };\n const signalsFinal = [\"width\", \"height\", \"padding\"].reduce((acc, sgName) => {\n if (Array.isArray(change.signal)) {\n if (change.signal.indexOf(sgName) >= 0) {\n acc[sgName] = eView.signal(sgName);\n }\n return acc;\n }\n if (change.signal === false) {\n return acc;\n }\n acc[sgName] = eView.signal(sgName);\n return acc;\n }, {});\n signals.final = Object.assign({}, signals.initial, signalsFinal);\n\n const allEncodes = {};\n\n const subComps = {\n ticks: doTicks,\n labels: doLabels,\n title: doTitle,\n axis: doAxisG,\n grid: doGrid,\n domain: doDomain\n };\n const axisGDatumFinal = change.final\n ? findComp(eView.scenegraph().root, change.compName, \"axis\")[0].items[0]\n : undefined;\n const axisGEncodeBaseFinal = axisGDatumFinal\n ? {\n x: { value: axisGDatumFinal.x },\n y: { value: axisGDatumFinal.y }\n }\n : {};\n\n Object.keys(subComps).forEach(subComp => {\n const manualEncode =\n change.encode && change.encode[subComp] ? change.encode[subComp] : {};\n allEncodes[subComp] = getAxisSubCompEncodes(subComp, manualEncode);\n });\n\n function getAxisSubCompEncodes(subComponent, manualEncode) {\n const encodes = {\n initial: copy(compState.encode[subComponent] || {}),\n final: copy(compState.encode[subComponent] || {})\n };\n\n if (subComps[subComponent] !== true) {\n return encodes;\n }\n\n const subCompEncode = {\n initial:\n change.initial &&\n change.initial.encode &&\n change.initial.encode[subComponent]\n ? change.initial.encode[subComponent].update\n : undefined,\n final:\n change.final && change.final.encode && change.final.encode[subComponent]\n ? change.final.encode[subComponent].update\n : undefined\n };\n\n encodes.initial.enter = Object.assign(\n {},\n // defaultAxisEncode.initial,\n DEFAULT_ENCODE.axis[subComponent](sameDomainDimension ? change.initial : change.final)\n .update,\n sameDomainDimension ? subCompEncode.initial : subCompEncode.final || {},\n DEFAULT_ENCODE.mark.enter,\n compState.encode.enter,\n manualEncode && manualEncode.enter ? manualEncode.enter.initial : {}\n );\n if (manualEncode && manualEncode.enter === false) {\n encodes.final.enter = encodes.initial.enter;\n } else {\n encodes.final.enter = Object.assign(\n {},\n // defaultAxisEncode.final,\n DEFAULT_ENCODE.axis[subComponent](change.final).update,\n subCompEncode.final ? subCompEncode.final : {},\n manualEncode ? manualEncode.enter : {},\n computeKeptEncode(manualEncode, encodes.initial, \"enter\")\n );\n }\n\n encodes.initial.exit = Object.assign(\n {},\n // defaultAxisEncode.initial,\n DEFAULT_ENCODE.axis[subComponent](change.initial).update,\n subCompEncode.initial ? subCompEncode.initial : {},\n compState.encode.exit || compState.encode.update\n );\n if (manualEncode && manualEncode.exit === false) {\n encodes.final.exit = encodes.initial.exit;\n } else {\n encodes.final.exit = Object.assign(\n {},\n // defaultAxisEncode.final,\n DEFAULT_ENCODE.axis[subComponent](\n sameDomainDimension ? change.final : change.initial\n ).update,\n sameDomainDimension ? subCompEncode.final : subCompEncode.initial || {},\n DEFAULT_ENCODE.mark.exit,\n manualEncode ? manualEncode.exit : {},\n computeKeptEncode(manualEncode, encodes.initial, \"exit\")\n );\n }\n\n encodes.initial.update = Object.assign(\n {},\n // defaultAxisEncode.initial,\n DEFAULT_ENCODE.axis[subComponent](change.initial).update,\n subCompEncode.initial || {},\n encodes.initial.update\n );\n\n if (manualEncode && manualEncode.update === false) {\n encodes.final.update = encodes.initial.update;\n } else {\n encodes.final.update = Object.assign(\n {},\n // defaultAxisEncode.final,\n subComponent === \"axis\" ? axisGEncodeBaseFinal : {},\n DEFAULT_ENCODE.axis[subComponent](change.final).update,\n subCompEncode.final || {},\n manualEncode ? manualEncode.update : {},\n computeKeptEncode(manualEncode, encodes.initial, \"update\")\n );\n }\n return encodes;\n }\n\n return {\n encodes: allEncodes,\n scales,\n signals,\n sameDomainDimension\n };\n}","import { dataPreservedScale, computeKeptEncode } from \"./util\";\nimport { copy2, get, deepEqual } from \"../../../util/util\";\nimport { DEFAULT_ENCODE } from \"../../../default\";\n\n\nexport function compute(rawInfo, step, lastState) {\n const LEGEND_CHANNELS = [\n \"fill\",\n \"opacity\",\n \"shape\",\n \"size\",\n \"stroke\",\n \"strokeDash\",\n \"strokeWidth\"\n ];\n const { change } = step;\n const eView = rawInfo.eVis.view;\n\n let doTitle;\n let doSymbols;\n let doLabels;\n let doEntries;\n let doGradient;\n let doLegendG;\n doTitle = doSymbols = doLabels = doEntries = doGradient = doLegendG = true;\n const isRemove = !lastState.isRemove && !change.final;\n const isAdd = !lastState.isAdd && !change.initial;\n if (change.encode === false) {\n doTitle = doSymbols = doLabels = doEntries = doGradient = doLegendG = false;\n } else if (change.encode) {\n doTitle = !(change.encode.title === false);\n doSymbols = !(change.encode.symbols === false);\n doLabels = !(change.encode.labels === false);\n doEntries = !(change.encode.entries === false);\n doGradient = !(change.encode.gradient === false);\n doLegendG = !(change.encode.legend === false);\n }\n\n const legendTypes = {\n initial: lastState.legendType,\n final:\n change.scale === false\n ? lastState.legendType\n : change.final\n ? change.final.type\n : undefined\n };\n\n const scNames = {\n initial: [],\n final: []\n };\n LEGEND_CHANNELS.forEach(channel => {\n if (change.initial && change.initial[channel]) {\n scNames.initial.push(change.initial[channel]);\n }\n if (change.final && change.final[channel]) {\n scNames.final.push(change.final[channel]);\n }\n });\n\n // collect the scale objects to scale the initial/final values\n const scales = {\n initial: lastState.scale,\n final: copy2(lastState.scale)\n };\n\n if (change.scale !== false) {\n let finalScaleNames = [];\n if (Array.isArray(change.scale)) {\n finalScaleNames = change.scale;\n } else if (change.scale === true || isAdd) {\n finalScaleNames = scNames.final;\n } else if (typeof change.scale === \"object\") {\n finalScaleNames = scNames.final.filter(\n scName => change.scale[scName] !== false\n );\n }\n finalScaleNames.forEach(scName => {\n if (change.scale[scName] && change.scale[scName].data === false) {\n scales.final[scName] = dataPreservedScale(\n rawInfo.sVis.spec,\n rawInfo.eVis.spec,\n scName\n );\n } else {\n scales.final[scName] = eView._runtime.scales[scName]\n ? eView._runtime.scales[scName].value\n : undefined;\n }\n });\n }\n\n let sameDomainDimension = get(change, \"scale\", \"domainDimension\");\n if (typeof sameDomainDimension === \"string\") {\n sameDomainDimension =\n sameDomainDimension === \"same\"\n ? true\n : sameDomainDimension === \"diff\"\n ? false\n : undefined;\n }\n if (sameDomainDimension === undefined) {\n if (change.scale === false) {\n sameDomainDimension = true;\n } else if (isRemove || isAdd) {\n sameDomainDimension = false;\n } else {\n // Fact: Each legend can be associated with multiple scales but their domains are equal.\n const scaleDefs = {\n initial: rawInfo.sVis.spec.scales.find(\n scaleDef => scaleDef.name === scNames.initial[0]\n ),\n final: rawInfo.eVis.spec.scales.find(\n scaleDef => scaleDef.name === scNames.final[0]\n )\n };\n sameDomainDimension = deepEqual(\n scaleDefs.initial.domain,\n scaleDefs.final.domain\n );\n }\n }\n\n const signals = {\n initial: lastState.signal\n };\n const signalsFinal = [\"width\", \"height\", \"padding\"].reduce((acc, sgName) => {\n if (Array.isArray(change.signal)) {\n if (change.signal.indexOf(sgName) >= 0) {\n acc[sgName] = eView.signal(sgName);\n }\n return acc;\n }\n if (change.signal === false) {\n return acc;\n }\n acc[sgName] = eView.signal(sgName);\n return acc;\n }, {});\n signals.final = Object.assign({}, signals.initial, signalsFinal);\n\n const allEncodes = {};\n\n const subComps = {\n gradient: doGradient,\n bands: doGradient,\n pairs: doSymbols || doLabels,\n labels: doLabels,\n title: doTitle,\n legend: doLegendG,\n entries: doEntries,\n symbols: doSymbols\n };\n Object.keys(subComps).forEach(subComp => {\n if (subComps[subComp]) {\n const manualEncode =\n change.encode && change.encode[subComp] ? change.encode[subComp] : {};\n allEncodes[subComp] = getLegendSubCompEncodes(\n subComp,\n manualEncode\n );\n }\n });\n\n function getLegendSubCompEncodes(subComponent, manualEncode) {\n const defaultSubcompEncode = {\n initial: DEFAULT_ENCODE.legend[subComponent](change.initial).update,\n final: DEFAULT_ENCODE.legend[subComponent](change.final).update\n };\n const comps = change;\n const compEncode = {};\n [\"initial\", \"final\"].forEach(which => {\n if (\n comps[which] &&\n comps[which].encode &&\n comps[which].encode[subComponent]\n ) {\n compEncode[which] = comps[which].encode[subComponent].update;\n }\n });\n\n const encodes = {\n initial: copy2(\n lastState.encode && lastState.encode[subComponent]\n ? lastState.encode[subComponent]\n : { update: defaultSubcompEncode.initial }\n ),\n final: copy2(\n lastState.encode && lastState.encode[subComponent]\n ? lastState.encode[subComponent]\n : { update: defaultSubcompEncode.final }\n )\n };\n\n encodes.initial.enter = Object.assign(\n {},\n sameDomainDimension\n ? defaultSubcompEncode.initial\n : defaultSubcompEncode.final,\n sameDomainDimension ? compEncode.initial : compEncode.final,\n DEFAULT_ENCODE.mark.enter,\n lastState.encode.enter,\n manualEncode && manualEncode.enter ? manualEncode.enter.initial : {}\n );\n if (manualEncode && manualEncode.enter === false) {\n encodes.final.enter = encodes.initial.enter;\n } else {\n encodes.final.enter = Object.assign(\n {},\n defaultSubcompEncode.final,\n compEncode.final,\n manualEncode ? manualEncode.enter : {},\n computeKeptEncode(manualEncode, encodes.initial, \"enter\")\n );\n }\n\n encodes.initial.exit = Object.assign(\n {},\n defaultSubcompEncode.initial,\n compEncode.initial,\n lastState.encode.exit || lastState.encode.update\n );\n\n if (manualEncode && manualEncode.exit === false) {\n encodes.final.exit = encodes.initial.exit;\n } else {\n encodes.final.exit = Object.assign(\n {},\n sameDomainDimension\n ? defaultSubcompEncode.final\n : defaultSubcompEncode.initial,\n sameDomainDimension ? compEncode.final : compEncode.initial,\n DEFAULT_ENCODE.mark.exit,\n manualEncode ? manualEncode.exit : {},\n computeKeptEncode(manualEncode, encodes.initial, \"exit\")\n );\n }\n\n encodes.initial.update = Object.assign(\n {},\n defaultSubcompEncode.initial,\n compEncode.initial,\n encodes.initial.update\n );\n\n if (manualEncode && manualEncode.update === false) {\n encodes.final.update = encodes.initial.update;\n } else {\n encodes.final.update = Object.assign(\n {},\n defaultSubcompEncode.final,\n compEncode.final,\n manualEncode ? manualEncode.update : {},\n computeKeptEncode(manualEncode, encodes.initial, \"update\")\n );\n }\n\n return encodes;\n }\n\n return {\n encodes: allEncodes,\n scales,\n signals,\n legendTypes,\n sameDomainDimension,\n isAdd,\n isRemove\n };\n}","import { copy } from \"../../../util/util\";\n\nexport function compute(rawInfo, step, lastState) {\n const { change } = step;\n const signals = {\n initial: lastState.signal\n };\n const encodes = {\n initial: copy(lastState.encode),\n final: copy(lastState.encode)\n };\n\n const signalsFinal = {};\n const finalSignalNames = Array.isArray(change.signal)\n ? change.signal\n : [\"width\", \"height\", \"padding\"];\n\n finalSignalNames.forEach(sgName => {\n signalsFinal[sgName] = rawInfo.eVis.view.signal(sgName);\n });\n\n signals.final = { ...signals.initial, ...signalsFinal };\n\n if (step.change.signal !== false) {\n if (finalSignalNames.indexOf(\"height\") >= 0) {\n encodes.final.svg.y = { value: change.final.y + change.final.padding };\n encodes.final.svg.height = {\n value: change.final.viewHeight + change.final.padding * 2\n };\n encodes.final.root.height = { value: signals.final.height };\n }\n if (finalSignalNames.indexOf(\"width\") >= 0) {\n encodes.final.svg.x = { value: change.final.x + change.final.padding };\n encodes.final.svg.width = {\n value: change.final.viewWidth + change.final.padding * 2\n };\n encodes.final.root.width = { value: signals.final.width };\n }\n }\n\n // Todo Encodes for view comp\n const fRootDatum = rawInfo.eVis.view._runtime.data.root.values.value[0];\n encodes.final.root.fill = { value: fRootDatum.fill };\n encodes.final.root.stroke = { value: fRootDatum.stroke };\n\n return {\n signals,\n encodes\n };\n\n}","function getLegendType(legendCompSpec, view) {\n if (legendCompSpec.fill) {\n const scale = view._runtime.scales[legendCompSpec.fill].value;\n if (\n [\n \"sequential-linear\",\n \"linear\",\n \"log\",\n \"pow\",\n \"sqrt\",\n \"symlog\",\n \"bin-ordinal\"\n ].indexOf(scale.type) >= 0\n ) {\n if (scale.type === \"bin-ordinal\") {\n return { type: \"gradient\", isBand: true };\n }\n return { type: \"gradient\" };\n }\n }\n\n if (legendCompSpec.stroke) {\n const scale = view._runtime.scales[legendCompSpec.stroke].value;\n if (\n [\n \"sequential-linear\",\n \"linear\",\n \"log\",\n \"pow\",\n \"sqrt\",\n \"symlog\",\n \"bin-ordinal\"\n ].indexOf(scale.type) >= 0\n ) {\n if (scale.type === \"bin-ordinal\") {\n return { type: \"gradient\", isBand: true };\n }\n return { type: \"gradient\" };\n }\n }\n return { type: \"symbol\" };\n}\n\nexport { getLegendType };\n","import { copy } from \"../util/util\";\nimport { getLegendType } from \"../util/vgSpecHelper\";\n\nfunction getComponents(vgSpec) {\n // By traveling vgSpec, collect the marks, axes, legends, and scales with their bound data and encoding.\n const components = [];\n function collectComp(mark, currComp, isRoot = false) {\n if (isRoot) {\n mark.name = \"root\";\n }\n let newComp = currComp;\n if (mark.axes) {\n newComp = newComp.concat(\n mark.axes.map(d => {\n return {\n ...copy(d),\n compType: \"axis\"\n };\n })\n );\n }\n\n if (mark.legends) {\n newComp = newComp.concat(\n mark.legends.map(d => { return { ...copy(d), compType: \"legend\" }; })\n );\n }\n\n if (mark.scales) {\n newComp = newComp.concat(\n mark.scales.map(d => { return { ...copy(d), compType: \"scale\" }; })\n );\n }\n\n if (!isRoot) {\n const newMark = { ...copy(mark), compType: \"mark\" };\n delete newMark.marks;\n newComp.push(newMark);\n }\n\n if (mark.marks) {\n newComp = mark.marks.reduce((acc, curr) => {\n const subComps = collectComp(\n { ...curr, parent: (mark || \"root\") },\n []\n );\n return acc.concat(subComps);\n }, newComp);\n }\n return newComp;\n }\n\n return collectComp(vgSpec, components, true);\n}\nfunction getChanges(sComponents, eComponents) {\n const IDENTIFIERS = {\n axis: comp =>\n comp.encode && comp.encode.axis ? comp.encode.axis.name : comp.scale,\n legend: comp =>\n comp.encode && comp.encode.legend ? comp.encode.legend.name : comp.scale,\n mark: comp => comp.name,\n scale: comp => comp.name\n };\n const merged = [];\n sComponents.forEach(sComp => {\n const id = IDENTIFIERS[sComp.compType];\n const matchedId = eComponents.findIndex(\n eComp => sComp.compType === eComp.compType && id(sComp) === id(eComp)\n );\n if (matchedId >= 0) {\n merged.push({\n compType: sComp.compType,\n compName: id(sComp),\n parent: sComp.parent,\n initial: sComp,\n final: eComponents.splice(matchedId, 1)[0]\n });\n } else {\n merged.push({\n compType: sComp.compType,\n compName: id(sComp),\n parent: sComp.parent,\n initial: sComp,\n final: null\n });\n }\n });\n\n return merged.concat(\n eComponents.map(eComp => {\n const id = IDENTIFIERS[eComp.compType];\n return {\n compType: eComp.compType,\n compName: id(eComp),\n parent: eComp.parent,\n initial: null,\n final: eComp\n };\n })\n );\n}\n\nfunction getViewChange(rawInfo) {\n return {\n compType: \"view\",\n compName: \"global\",\n\n initial: {\n viewWidth: rawInfo.sVis.view._viewWidth,\n viewHeight: rawInfo.sVis.view._viewHeight,\n width: rawInfo.sVis.view.width(),\n height: rawInfo.sVis.view.height(),\n x: rawInfo.sVis.view._origin[0],\n y: rawInfo.sVis.view._origin[1],\n padding: rawInfo.sVis.spec.padding\n },\n final: {\n viewWidth: rawInfo.eVis.view._viewWidth,\n viewHeight: rawInfo.eVis.view._viewHeight,\n width: rawInfo.eVis.view.width(),\n height: rawInfo.eVis.view.height(),\n x: rawInfo.eVis.view._origin[0],\n y: rawInfo.eVis.view._origin[1],\n padding: rawInfo.eVis.spec.padding\n }\n };\n}\n\n\nfunction getDefaultChange(step, rawInfo) {\n const change = copy(step.change || {});\n if (step.compType === \"mark\") {\n change.data = change.data === undefined ? true : change.data;\n if (\n change.data.update === false &&\n change.data.enter === false &&\n change.data.exit === false\n ) {\n change.data = false;\n }\n change.marktype = change.marktype === undefined ? true : change.marktype;\n change.scale = change.scale === undefined ? true : change.scale;\n change.signal = change.signal === undefined ? true : change.signal;\n change.encode = change.encode === undefined ? true : change.encode;\n } else if (step.compType === \"axis\" || step.compType === \"legend\") {\n change.signal = change.signal === undefined ? true : change.signal;\n change.scale = change.scale === undefined ? {} : change.scale;\n\n if (step.compType === \"legend\") {\n change.scale = change.scale === undefined ? true : change.scale;\n change.signal = change.signal === undefined ? true : change.signal;\n // specify the type of the legend\n if (change.initial) {\n change.initial = Object.assign(\n change.initial,\n getLegendType(change.initial, rawInfo.sVis.view)\n );\n\n change.initial.direction = change.initial.direction || \"vertical\";\n change.initial.orient = change.initial.orient || \"right\";\n }\n if (change.final) {\n change.final = Object.assign(\n change.final,\n getLegendType(change.final, rawInfo.eVis.view)\n );\n change.final.direction = change.final.direction || \"vertical\";\n change.final.orient = change.final.orient || \"right\";\n }\n }\n } else if (step.compType === \"view\") {\n change.signal = change.signal === undefined ? true : change.signal;\n }\n return change;\n}\n\n\nfunction attachChanges(rawInfo, schedule) {\n const changes = getChanges(\n getComponents(rawInfo.sVis.spec),\n getComponents(rawInfo.eVis.spec)\n );\n\n // attach the view change\n changes.push(getViewChange(rawInfo));\n\n schedule.forEach(track => {\n track.steps = track.steps.map(step => {\n if (step.compType === \"pause\") {\n return step;\n }\n\n const found = changes.find(change => {\n return (\n change.compType === step.compType &&\n (change.compName === step.compName || step.compType === \"view\")\n );\n });\n if (!found) {\n console.error(`cannot found the changes of ${step.compName}.`);\n }\n\n step.change = {\n ...step.change,\n ...found\n };\n step.change = {\n ...step.change,\n ...getDefaultChange(step, rawInfo)\n };\n\n return step;\n });\n });\n\n return schedule;\n}\n\nexport { getComponents, getChanges, getViewChange, getDefaultChange, attachChanges };\n","import * as vega from \"vega\";\nimport { joinData, initialData, getAggregate } from \"./dataJoin\";\nimport { findComp } from \"../../actuator/util\";\nimport { DEFAULT_ENCODE, DEFAULT_STYLE } from \"../../default\";\nimport * as computeStates from \"./compute\";\nimport { computeNewSpec, Enumerator } from \"../../enumerator\";\nimport { copy, get } from \"../../util/util\";\nimport {\n getComponents,\n getViewChange,\n} from \"../change\";\nimport {\n computeHasFacet,\n isGroupingMarktype,\n findMark,\n findFilter,\n findData\n} from \"./util\";\n\n\n//Todo make schedule class and put this as its method\nfunction getMoments(schedule) {\n const moments = [];\n schedule.forEach(track => {\n track.steps.forEach(step => {\n let m = moments.find(m => m.time === step.sTime);\n if (!m) {\n moments.push({\n time: step.sTime,\n starting: [step],\n ending: []\n });\n } else {\n m.starting.push(step);\n }\n m = moments.find(m => m.time === step.eTime);\n if (!m) {\n moments.push({\n time: step.eTime,\n starting: [],\n ending: [step]\n });\n } else {\n m.ending.push(step);\n }\n });\n });\n return moments.sort((a, b) => a.time - b.time);\n}\n\n\nexport function attachStates(schedule, rawInfo) {\n const state = initializeState(schedule, rawInfo);\n const moments = getMoments(schedule);\n schedule.moments = moments;\n\n moments.forEach(moment => {\n moment.ending.forEach(step => {\n const lastState = state[step.trackName];\n if (step.compType === \"pause\") {\n return;\n }\n\n lastState.data = lastState.data || initialData(step, rawInfo);\n\n // When the steps are enumerated by \"enumerator\"\n let eView;\n if (step.enumerated) {\n step.enumerated.forEach(enumed => {\n const filter = findFilter(state.spec, enumed.def.filter);\n state.spec = computeNewSpec(state.spec, filter, enumed.val);\n });\n eView = new vega.View(vega.parse(state.spec), {\n renderer: \"none\"\n }).run();\n }\n const newRawInfo = {\n sVis: rawInfo.sVis,\n eVis: Object.assign(\n {},\n rawInfo.eVis,\n eView ? { view: eView } : undefined\n )\n };\n if (step.compType === \"view\") {\n Object.assign(step.change, getViewChange(newRawInfo));\n }\n\n Object.assign(\n step,\n computeStates[step.compType](newRawInfo, step, lastState)\n );\n Object.assign(step, joinData(step, newRawInfo, lastState.data));\n lastState.data = step.nextData;\n\n if (step.encodes) {\n lastState.encode =\n copy(step.encodes.final) ||\n Object.keys(step.encodes).reduce((acc, key) => {\n acc[key] = step.encodes[key].final;\n return acc;\n }, {});\n }\n lastState.styleEncode = step.styleEncodes ? step.styleEncodes.final : undefined;\n lastState.signal = step.signals ? step.signals.final : undefined;\n lastState.scale = step.scales ? step.scales.final : undefined;\n lastState.marktype = step.marktypes ? step.marktypes.final : undefined;\n lastState.hasFacet = step.hasFacet ? step.hasFacet.final : undefined;\n lastState.aggregate = step.aggregates ? step.aggregates.final : undefined;\n lastState.isAdd = step.isAdd;\n lastState.isRemove = step.isRemove;\n lastState.sameDomainDimension = step.sameDomainDimension;\n\n state.spec = updateSpec(state, step, newRawInfo.eVis.spec);\n\n // Catch if scale < data for encodes using scales\n\n if (step.compType === \"mark\") {\n let valid = schedule.find(track => track.name === step.trackName)\n .scaleOrderValid;\n valid = valid === undefined ? true : valid;\n\n Object.keys(lastState.encode.update).map(prop => {\n const foundScale =\n lastState.scale[lastState.encode.update[prop].scale];\n\n if (foundScale && lastState.encode.update[prop].field) {\n const { field } = lastState.encode.update[prop];\n let vals = lastState.data.map(d => d.datum[field]);\n\n if (lastState.data[0].mark.marktype === \"group\") {\n vals = lastState.data.reduce((vals, d) => {\n return vals.concat(d.items[0].items.map(d2 => d2.datum[field]));\n }, []);\n }\n\n const scaleDomain = foundScale.domain();\n if (foundScale.type === \"band\" || foundScale.type === \"point\") {\n valid =\n valid &&\n vals.reduce(\n (acc, v) => (acc = acc && scaleDomain.indexOf(v) >= 0),\n true\n );\n } else if (foundScale.type === \"linear\") {\n const max = Math.max(...vals);\n const min = Math.min(...vals);\n valid = valid && scaleDomain[0] <= min && scaleDomain[1] >= max;\n }\n }\n });\n schedule.find(\n track => track.name === step.trackName\n ).scaleOrderValid = valid;\n }\n });\n moment.starting.forEach(step => {\n const lastState = state[step.trackName];\n if (get(step, \"enumerator\")) {\n if (step.compType === \"mark\") {\n // fetch enumerator\n step.enumeratorDef = step.enumerator;\n const enumerator = (step.enumerator = new Enumerator(\n step.enumerator,\n state.spec,\n rawInfo\n ));\n // let dataName = (step.change.final || step.change.final).from.data;\n let dataName = step.compName;\n\n let key =\n (Array.isArray(step.change.data)\n ? step.change.data\n : step.change.data.keys) || null;\n if (\n computeHasFacet(step.change.initial) &&\n computeHasFacet(step.change.final)\n ) {\n key = (step.change.final || step.change.final).parent.from.facet\n .groupby;\n dataName = (step.change.final || step.change.final).parent.name;\n }\n let extractData = view => view.data(dataName);\n if (\n !computeHasFacet(step.change.initial) &&\n !computeHasFacet(step.change.final) &&\n isGroupingMarktype(step.change.initial) &&\n isGroupingMarktype(step.change.final)\n ) {\n extractData = view => {\n const data = view._runtime.data[dataName].values.value;\n return [\n {\n datum: {},\n mark: { role: \"group\", marktype: \"group\" },\n items: [{ items: data }]\n }\n ];\n };\n }\n enumerator.joinData(extractData, (d, i) => {\n if (Array.isArray(key)) {\n return key\n .map(field => {\n return d.datum[field];\n })\n .join(\"-\");\n }\n return i.toString();\n });\n\n // Check if scale < data\n for (let i = 1; i < enumerator.stopN - 1; i++) {\n let scale = scName => lastState.scale[scName];\n if (step.change.scale) {\n scale = enumerator._getScales(i);\n }\n const data = enumerator.getData(i);\n let valid = schedule.find(track => track.name === step.trackName)\n .scaleOrderValid;\n valid = valid === undefined ? true : valid;\n Object.keys(lastState.encode.update).map(prop => {\n const foundScale = scale(lastState.encode.update[prop].scale);\n\n if (foundScale && lastState.encode.update[prop].field) {\n const { field } = lastState.encode.update[prop];\n const scaleDomain = foundScale.domain();\n let vals = data.map(d => d[field]);\n\n if (data[0].mark.marktype === \"group\") {\n vals = data.reduce((vals, d) => {\n return vals.concat(\n d.items[0].items.map(d2 => d2.datum[field])\n );\n }, []);\n }\n\n if (foundScale.type === \"band\" || foundScale.type === \"point\") {\n valid =\n valid &&\n vals.reduce(\n (acc, v) => (acc = acc && scaleDomain.indexOf(v) >= 0),\n true\n );\n } else if (foundScale.type === \"linear\") {\n const max = Math.max(...vals);\n const min = Math.min(...vals);\n valid =\n valid && scaleDomain[0] <= min && scaleDomain[1] >= max;\n }\n }\n });\n schedule.find(\n track => track.name === step.trackName\n ).scaleOrderValid = valid;\n }\n } else if (step.compType === \"axis\") {\n step.enumeratorDef = step.enumerator;\n step.enumerator = [\"tick\", \"label\", \"grid\"].reduce((acc, subComp) => {\n const enumerator = new Enumerator(\n step.enumerator,\n state.spec,\n rawInfo\n );\n const scName = step.compName;\n enumerator.joinData(\n view => {\n return view\n .data(scName)[0]\n .items.filter(item => item.role === `axis-${subComp}`)[0]\n .items;\n },\n d => d.datum.value.toString()\n );\n acc[subComp] = enumerator;\n return acc;\n }, {});\n } else if (step.compType === \"legend\") {\n step.enumeratorDef = step.enumerator;\n let legendEnumDefs = [];\n if (\n step.change.initial.type === \"gradient\" &&\n step.change.initial.type === \"gradient\"\n ) {\n const subComps = step.change.initial.isBand\n ? [\"bands\", \"labels\"]\n : [\"labels\"];\n legendEnumDefs = subComps.map(subComp => {\n return {\n subComp,\n extractData: view => {\n const entryG = view._runtime.data[\n step.compName\n ].values.value[0].items.find(\n item => item.role === \"legend-entry\"\n ).items[0];\n return entryG.items.find(\n item => item.role === `legend-${subComp.replace(/s$/g, \"\")}`\n ).items;\n },\n identifyDatum: d => d.datum.value.toString()\n };\n });\n } else if (\n step.change.initial.type === \"symbol\" &&\n step.change.initial.type === \"symbol\"\n ) {\n legendEnumDefs.push({\n subComp: \"pairs\",\n extractData: view => {\n return view._runtime.data[\n step.compName\n ].values.value[0].items.find(\n item => item.role === \"legend-entry\"\n ).items[0].items[0].items;\n },\n identifyDatum: d => {\n const { datum } = d.items.find(\n item => item.role === \"legend-label\"\n ).items[0];\n return datum.value.toString();\n }\n });\n\n legendEnumDefs.push({\n subComp: \"labels\",\n extractData: view => {\n const pairs = view._runtime.data[\n step.compName\n ].values.value[0].items.find(\n item => item.role === \"legend-entry\"\n ).items[0].items[0].items;\n return pairs.map(pair => {\n return pair.items.find(item => item.role === \"legend-label\")\n .items[0];\n });\n },\n identifyDatum: d => d.datum.value.toString()\n });\n\n legendEnumDefs.push({\n subComp: \"symbols\",\n extractData: view => {\n const pairs = view._runtime.data[\n step.compName\n ].values.value[0].items.find(\n item => item.role === \"legend-entry\"\n ).items[0].items[0].items;\n return pairs.map(pair => {\n return pair.items.find(item => item.role === \"legend-symbol\")\n .items[0];\n });\n },\n identifyDatum: d => d.datum.value.toString()\n });\n } else {\n console.error(\n \"Cannot enumerate the changes when the legend type changes.\"\n );\n }\n step.enumerator = legendEnumDefs.reduce((acc, enumDef) => {\n const enumerator = new Enumerator(\n step.enumerator,\n state.spec,\n rawInfo\n );\n enumerator.joinData(enumDef.extractData, enumDef.identifyDatum);\n acc[enumDef.subComp] = enumerator;\n return acc;\n }, {});\n }\n }\n });\n });\n\n return schedule;\n}\n\nfunction initializeState(schedule, rawInfo) {\n const sView = rawInfo.sVis.view;\n const sSpec = rawInfo.sVis.spec;\n const sComps = getComponents(sSpec);\n const initialState = {\n spec: copy(sSpec)\n };\n return schedule.reduce((initialState, track) => {\n // Todo: some scales can be hidden in _runtime._subcontext\n const compState = {\n scale: {},\n signal: {\n width: sView.signal(\"width\"),\n height: sView.signal(\"height\"),\n padding: sView.signal(\"padding\")\n }\n };\n\n if (track.compType === \"mark\") {\n const sComp = sComps.find(c => c.name === track.compName);\n\n if (sComp) {\n compState.marktype = sComp.type;\n compState.hasFacet = computeHasFacet(sComp);\n compState.styleEncode = sComp.style ? DEFAULT_STYLE[sComp.style] : {};\n\n compState.encode = copy(sComp.encode || {});\n const baseEncode = Object.assign(\n {},\n DEFAULT_ENCODE.mark[compState.marktype].update,\n sComp.style ? DEFAULT_STYLE[sComp.style] : {}\n );\n compState.encode.update = Object.assign(\n baseEncode,\n compState.encode.update\n );\n compState.encode.exit = copy(compState.encode.update);\n compState.encode.enter = Object.assign(\n {},\n compState.encode.update,\n DEFAULT_ENCODE.mark.enter\n );\n\n sComps\n .filter(comp => comp.compType === \"scale\")\n .forEach(scale => {\n compState.scale[scale.name] = sView.scale(scale.name);\n });\n } else {\n compState.encode = {};\n compState.styleEncode = {};\n }\n compState.aggregate = getAggregate(\n track.steps[0].change,\n rawInfo\n ).initial;\n // compState.aggregate.done = false;\n } else if (track.compType === \"axis\") {\n // for axis comp\n const sComp = sComps.find(\n c => c.compType === \"axis\" && c.encode.axis.name === track.compName\n );\n\n if (track.steps[0].change.initial) {\n compState.scale[sComp.scale] = sView.scale(sComp.scale);\n }\n\n compState.encode = sComp ? copy(sComp.encode || {}) : {};\n const axisGDatumInitial = sComp\n ? findComp(sView.scenegraph().root, track.compName, \"axis\")[0].items[0]\n : undefined;\n compState.encode.axis = axisGDatumInitial\n ? {\n update: {\n x: { value: axisGDatumInitial.x },\n y: { value: axisGDatumInitial.y }\n }\n }\n : {};\n } else if (track.compType === \"legend\") {\n // for axis comp\n\n const sComp = sComps.find(\n c => c.compType === \"legend\" && c.encode.legend.name === track.compName\n );\n compState.legendType = undefined;\n if (track.steps[0].change.initial) {\n compState.legendType = track.steps[0].change.initial.type;\n [\n \"fill\",\n \"opacity\",\n \"shape\",\n \"size\",\n \"stroke\",\n \"strokeDash\",\n \"strokeWidth\"\n ].forEach(channel => {\n const scName = track.steps[0].change.initial[channel];\n if (scName) {\n compState.scale[scName] = sView.scale(scName);\n }\n });\n }\n\n compState.encode = sComp ? copy(sComp.encode || {}) : {};\n } else if (track.compType === \"view\") {\n const iRootDatum = sView._runtime.data.root.values.value[0];\n const { initial } = track.steps[0].change;\n compState.encode = {\n svg: {\n x: { value: initial.x + initial.padding },\n y: { value: initial.y + initial.padding },\n width: { value: initial.viewWidth + initial.padding * 2 },\n height: { value: initial.viewHeight + initial.padding * 2 }\n },\n root: {\n width: { value: initial.width },\n height: { value: initial.height },\n fill: { value: iRootDatum.fill },\n stroke: { value: iRootDatum.stroke }\n }\n };\n }\n initialState[track.name] = compState;\n return initialState;\n }, initialState);\n}\n\nfunction updateSpec(lastState, lastStep, eSpec) {\n const updatedSpec = copy(lastState.spec);\n if (lastStep.compType === \"mark\") {\n const lastMarkComp = lastStep.change.final;\n // If the markComp is facetted, its parent mark should be updated.\n const compName = computeHasFacet(lastMarkComp)\n ? lastMarkComp.parent.name\n : lastStep.compName;\n if (!lastMarkComp && compName && lastStep.change.data) {\n // Remove the mark\n const old = updatedSpec.marks.findIndex(mark => mark.name === compName);\n updatedSpec.marks.splice(old, 1);\n } else {\n const old = findMark(updatedSpec.marks, compName);\n if (!old) {\n updatedSpec.marks.push(findMark(eSpec.marks, compName));\n } else {\n const dataName = computeHasFacet(lastMarkComp)\n ? lastMarkComp.parent.from.facet.data\n : lastMarkComp.from.data;\n if (lastStep.change.data) {\n // update data source\n const old = updatedSpec.data.findIndex(\n data => data.name === dataName\n );\n if (old >= 0) {\n updatedSpec.data.splice(old, 1, copy(findData(eSpec, dataName)));\n } else {\n const newI = eSpec.data.findIndex(data => data.name === dataName);\n updatedSpec.data.splice(newI, 0, copy(findData(eSpec, dataName)));\n }\n }\n old.encode.update = lastState[lastStep.trackName].encode.update;\n }\n }\n } else if (lastStep.compType === \"axis\") {\n // console.log(lastStep.compName);\n const old = updatedSpec.axes.findIndex(\n axis =>\n axis.encode &&\n axis.encode.axis &&\n axis.encode.axis.name === lastStep.compName\n );\n if (old >= 0) {\n updatedSpec.axes.splice(old, 1);\n }\n let newAxis;\n if (\n (newAxis = eSpec.axes.find(\n axis =>\n axis.encode &&\n axis.encode.axis &&\n axis.encode.axis.name === lastStep.compName\n ))\n ) {\n updatedSpec.axes.push(newAxis);\n }\n } else if (lastStep.compType === \"legend\") {\n const old = updatedSpec.legends\n ? updatedSpec.legends.findIndex(\n legend =>\n legend.encode &&\n legend.encode.legend &&\n legend.encode.legend.name === lastStep.compName\n )\n : -1;\n if (old >= 0) {\n updatedSpec.legends.splice(old, 1);\n }\n\n const newLegend = eSpec.legends\n ? eSpec.legends.find(\n legend =>\n legend.encode &&\n legend.encode.legend &&\n legend.encode.legend.name === lastStep.compName\n )\n : undefined;\n if (newLegend) {\n if (updatedSpec.legends) {\n updatedSpec.legends.push(newLegend);\n } else {\n updatedSpec.legends = [newLegend];\n }\n }\n }\n return updatedSpec;\n}","// https://github.com/vega/vega/blob/master/packages/vega-scenegraph/src/util/text.js\nfunction textOffset(item) {\n // perform our own font baseline calculation\n // why? not all browsers support SVG 1.1 'alignment-baseline' :(\n const { baseline } = item;\n const h = fontSize(item);\n switch (baseline) {\n case \"top\":\n return 0.79 * h;\n case \"middle\":\n return 0.3 * h;\n case \"bottom\":\n return -0.21 * h;\n case \"line-top\":\n return 0.29 * h + 0.5 * lineHeight(item);\n case \"line-bottom\":\n return 0.29 * h - 0.5 * lineHeight(item);\n default:\n return 0;\n }\n}\n\nfunction fontSize(item) {\n return item.fontSize != null ? +item.fontSize || 0 : 11;\n}\n\nfunction lineHeight(item) {\n return item.lineHeight != null ? item.lineHeight : fontSize(item) + 2;\n}\n\nfunction getStyle(attr) {\n switch (attr) {\n case \"font\":\n return \"font-family\";\n case \"fontSize\":\n return \"font-size\";\n case \"fontStyle\":\n return \"font-style\";\n case \"fontVariant\":\n return \"font-variant\";\n case \"fontWeight\":\n return \"font-weight\";\n case \"strokeWidth\":\n return \"stroke-width\";\n case \"strokeDasharray\":\n return \"stroke-dasharray\";\n }\n return attr;\n}\n\nfunction setTextAnchor(d3Selection, fn) {\n const textAnchor = {\n left: \"start\",\n center: \"middle\",\n right: \"end\"\n };\n d3Selection.attr(\"text-anchor\", d => textAnchor[fn(d)]);\n}\n\nfunction transformItem(item) {\n return `translate(${item.x || 0}, ${item.y || 0})${\n item.angle ? ` rotate(${item.angle})` : \"\"\n }`;\n}\n\nexport { textOffset, getStyle, setTextAnchor, transformItem };\n","import * as d3 from \"d3\";\n// Modify d3-interpolate-path (https://github.com/pbeshai/d3-interpolate-path) package by **.\n\n/**\n * List of params for each command type in a path `d` attribute\n */\nconst typeMap = {\n M: [\"x\", \"y\"],\n L: [\"x\", \"y\"],\n H: [\"x\"],\n V: [\"y\"],\n C: [\"x1\", \"y1\", \"x2\", \"y2\", \"x\", \"y\"],\n S: [\"x2\", \"y2\", \"x\", \"y\"],\n Q: [\"x1\", \"y1\", \"x\", \"y\"],\n T: [\"x\", \"y\"],\n A: [\"rx\", \"ry\", \"xAxisRotation\", \"largeArcFlag\", \"sweepFlag\", \"x\", \"y\"]\n};\n\n/**\n * Convert to object representation of the command from a string\n *\n * @param {String} commandString Token string from the `d` attribute (e.g., L0,0)\n * @return {Object} An object representing this command.\n */\nfunction commandObject(commandString) {\n // convert all spaces to commas\n commandString = commandString.trim().replace(/ /g, \",\");\n\n const type = commandString[0];\n const args = commandString.substring(1).split(\",\");\n return typeMap[type.toUpperCase()].reduce(\n (obj, param, i) => {\n // parse X as float since we need it to do distance checks for extending points\n obj[param] = [\"x\", \"y\"].indexOf(param) >= 0 ? parseFloat(args[i]) : args[i];\n return obj;\n },\n { type }\n );\n}\n\n/**\n * Converts a command object to a string to be used in a `d` attribute\n * @param {Object} command A command object\n * @return {String} The string for the `d` attribute\n */\nfunction commandToString(command) {\n const { type } = command;\n const params = typeMap[type.toUpperCase()];\n return `${type}${params.map(p => command[p]).join(\",\")}`;\n}\n\n/**\n * Converts command A to have the same type as command B.\n *\n * e.g., L0,5 -> C0,5,0,5,0,5\n *\n * Uses these rules:\n * x1 <- x\n * x2 <- x\n * y1 <- y\n * y2 <- y\n * rx <- 0\n * ry <- 0\n * xAxisRotation <- read from B\n * largeArcFlag <- read from B\n * sweepflag <- read from B\n *\n * @param {Object} aCommand Command object from path `d` attribute\n * @param {Object} bCommand Command object from path `d` attribute to match against\n * @return {Object} aCommand converted to type of bCommand\n */\nfunction convertToSameType(aCommand, bCommand) {\n const conversionMap = {\n x1: \"x\",\n y1: \"y\",\n x2: \"x\",\n y2: \"y\"\n };\n\n const readFromBKeys = [\"xAxisRotation\", \"largeArcFlag\", \"sweepFlag\"];\n\n // convert (but ignore M types)\n if (aCommand.type !== bCommand.type && bCommand.type.toUpperCase() !== \"M\") {\n const aConverted = {};\n Object.keys(bCommand).forEach(bKey => {\n const bValue = bCommand[bKey];\n // first read from the A command\n let aValue = aCommand[bKey];\n\n // if it is one of these values, read from B no matter what\n if (aValue === undefined) {\n if (readFromBKeys.includes(bKey)) {\n aValue = bValue;\n } else {\n // if it wasn't in the A command, see if an equivalent was\n if (aValue === undefined && conversionMap[bKey]) {\n aValue = aCommand[conversionMap[bKey]];\n }\n\n // if it doesn't have a converted value, use 0\n if (aValue === undefined) {\n aValue = 0;\n }\n }\n }\n\n aConverted[bKey] = aValue;\n });\n\n // update the type to match B\n aConverted.type = bCommand.type;\n aCommand = aConverted;\n }\n\n return aCommand;\n}\n\n/**\n * Extends an array of commands to the length of the second array\n * inserting points at the spot that is closest by X value. Ensures\n * all the points of commandsToExtend are in the extended array and that\n * only numPointsToExtend points are added.\n *\n * @param {Object[]} commandsToExtend The commands array to extend\n * @param {Object[]} referenceCommands The commands array to match\n * @return {Object[]} The extended commands1 array\n */\nfunction extend(commandsToExtend, referenceCommands, numPointsToExtend) {\n // map each command in B to a command in A by counting how many times ideally\n // a command in A was in the initial path (see https://github.com/pbeshai/d3-interpolate-path/issues/8)\n let initialCommandIndex;\n if (commandsToExtend.length > 1 && commandsToExtend[0].type === \"M\") {\n initialCommandIndex = 1;\n } else {\n initialCommandIndex = 0;\n }\n\n const counts = referenceCommands.reduce((counts, refCommand, i) => {\n // skip first M\n if (i === 0 && refCommand.type === \"M\") {\n counts[0] = 1;\n return counts;\n }\n\n let minDistance = Math.abs(\n commandsToExtend[initialCommandIndex].x - refCommand.x\n );\n let minCommand = initialCommandIndex;\n\n // find the closest point by X position in A\n for (let j = initialCommandIndex + 1; j < commandsToExtend.length; j++) {\n const distance = Math.abs(commandsToExtend[j].x - refCommand.x);\n if (distance < minDistance) {\n minDistance = distance;\n minCommand = j;\n // since we assume sorted by X, once we find a value farther, we can return the min.\n } else {\n break;\n }\n }\n\n counts[minCommand] = (counts[minCommand] || 0) + 1;\n return counts;\n }, {});\n\n // now extend the array adding in at the appropriate place as needed\n const extended = [];\n let numExtended = 0;\n for (let i = 0; i < commandsToExtend.length; i++) {\n // add in the initial point for this A command\n extended.push(commandsToExtend[i]);\n\n for (let j = 1; j < counts[i] && numExtended < numPointsToExtend; j++) {\n const commandToAdd = Object.assign({}, commandsToExtend[i]);\n // don't allow multiple Ms\n if (commandToAdd.type === \"M\") {\n commandToAdd.type = \"L\";\n } else {\n // try to set control points to x and y\n if (commandToAdd.x1 !== undefined) {\n commandToAdd.x1 = commandToAdd.x;\n commandToAdd.y1 = commandToAdd.y;\n }\n\n if (commandToAdd.x2 !== undefined) {\n commandToAdd.x2 = commandToAdd.x;\n commandToAdd.y2 = commandToAdd.y;\n }\n }\n extended.push(commandToAdd);\n numExtended += 1;\n }\n }\n\n return extended;\n}\n\n/**\n * Extends an array of commands to the length of the second array\n * inserting points at the spot that is closest by X value. Ensures\n * all the points of commandsToExtend are in the extended array and that\n * only numPointsToExtend points are added.\n *\n * @param {Object[]} commandsToExtend The commands array to extend\n * @param {Object[]} referenceCommands The commands array to match\n * @return {Object[]} The extended commands1 array\n */\nfunction extend2(commandsToExtend, referenceCommands, numPointsToExtend, alongTo=\"x\") {\n // map each command in B to a command in A by counting how many times ideally\n // a command in A was in the initial path (see https://github.com/pbeshai/d3-interpolate-path/issues/8)\n let initialCommandIndex;\n if (commandsToExtend.length > 1 && commandsToExtend[0].type === \"M\") {\n initialCommandIndex = 1;\n } else {\n initialCommandIndex = 0;\n }\n let [m, subM] = alongTo === \"x\" ? [\"x\", \"y\"] : [\"y\", \"x\"];\n\n\n const counts = referenceCommands.reduce((counts, refCommand, i) => {\n // skip first M\n if (i === 0 && refCommand.type === \"M\") {\n counts[0] = 1;\n return counts;\n }\n\n let minDistance = Math.abs(\n commandsToExtend[initialCommandIndex][m] - refCommand[m]\n );\n let subMinDistance = Math.abs(\n commandsToExtend[initialCommandIndex][subM] - refCommand[subM]\n );\n let minCommand = initialCommandIndex;\n\n // find the closest point by X position in A\n for (let j = initialCommandIndex + 1; j < commandsToExtend.length; j++) {\n const distance = Math.abs(commandsToExtend[j][m] - refCommand[m]);\n const subDistance = Math.abs(commandsToExtend[j][subM] - refCommand[subM]);\n if (distance < minDistance) {\n minDistance = distance;\n minCommand = j;\n subMinDistance = subDistance;\n // since we assume sorted by X, once we find a value farther, we can return the min.\n } else if (distance === minDistance) {\n if (subDistance < subMinDistance) {\n minCommand = j;\n subMinDistance = subDistance;\n }\n } else {\n break;\n }\n }\n\n counts[minCommand] = (counts[minCommand] || 0) + 1;\n return counts;\n }, {});\n\n // now extend the array adding in at the appropriate place as needed\n const extended = [];\n let numExtended = 0;\n for (let i = 0; i < commandsToExtend.length; i++) {\n // add in the initial point for this A command\n extended.push(commandsToExtend[i]);\n\n for (let j = 1; j < counts[i] && numExtended < numPointsToExtend; j++) {\n const commandToAdd = Object.assign({}, commandsToExtend[i]);\n // don't allow multiple Ms\n if (commandToAdd.type === \"M\") {\n commandToAdd.type = \"L\";\n } else {\n // try to set control points to x and y\n if (commandToAdd.x1 !== undefined) {\n commandToAdd.x1 = commandToAdd.x;\n commandToAdd.y1 = commandToAdd.y;\n }\n\n if (commandToAdd.x2 !== undefined) {\n commandToAdd.x2 = commandToAdd.x;\n commandToAdd.y2 = commandToAdd.y;\n }\n }\n extended.push(commandToAdd);\n numExtended += 1;\n }\n }\n\n return extended;\n}\n\n/**\n * Interpolate from A to B by extending A and B during interpolation to have\n * the same number of points. This allows for a smooth transition when they\n * have a different number of points.\n *\n * Ignores the `Z` character in paths unless both A and B end with it.\n *\n * @param {String} a The `d` attribute for a path\n * @param {String} b The `d` attribute for a path\n */\nfunction interpolatePath(a, b, alongTo = \"x\") {\n // remove Z, remove spaces after letters as seen in IE\n const aNormalized =\n a == null ? \"\" : a.replace(/[Z]/gi, \"\").replace(/([MLCSTQAHV])\\s*/gi, \"$1\");\n const bNormalized =\n b == null ? \"\" : b.replace(/[Z]/gi, \"\").replace(/([MLCSTQAHV])\\s*/gi, \"$1\");\n const aPoints =\n aNormalized === \"\" ? [] : aNormalized.split(/(?=[MLCSTQAHV])/gi);\n const bPoints =\n bNormalized === \"\" ? [] : bNormalized.split(/(?=[MLCSTQAHV])/gi);\n\n // if both are empty, interpolation is always the empty string.\n if (!aPoints.length && !bPoints.length) {\n return function nullInterpolator() {\n return \"\";\n };\n }\n\n // if A is empty, treat it as if it used to contain just the first point\n // of B. This makes it so the line extends out of from that first point.\n if (!aPoints.length) {\n aPoints.push(bPoints[0]);\n\n // otherwise if B is empty, treat it as if it contains the first point\n // of A. This makes it so the line retracts into the first point.\n } else if (!bPoints.length) {\n bPoints.push(aPoints[0]);\n }\n\n // convert to command objects so we can match types\n let aCommands = aPoints.map(commandObject);\n let bCommands = bPoints.map(commandObject);\n\n // extend to match equal size\n const numPointsToExtend = Math.abs(bPoints.length - aPoints.length);\n\n if (numPointsToExtend !== 0) {\n // B has more points than A, so add points to A before interpolating\n if (bCommands.length > aCommands.length) {\n aCommands = extend2(aCommands, bCommands, numPointsToExtend, alongTo);\n\n // else if A has more points than B, add more points to B\n } else if (bCommands.length < aCommands.length) {\n bCommands = extend2(bCommands, aCommands, numPointsToExtend, alongTo);\n }\n }\n\n // commands have same length now.\n // convert A to the same type of B\n aCommands = aCommands.map((aCommand, i) =>\n convertToSameType(aCommand, bCommands[i])\n );\n\n let aProcessed = aCommands.map(commandToString).join(\"\");\n let bProcessed = bCommands.map(commandToString).join(\"\");\n\n // if both A and B end with Z add it back in\n if (\n (a == null || a[a.length - 1] === \"Z\") &&\n (b == null || b[b.length - 1] === \"Z\")\n ) {\n aProcessed += \"Z\";\n bProcessed += \"Z\";\n }\n\n const stringInterpolator = d3.interpolateString(aProcessed, bProcessed);\n\n return function pathInterpolator(t) {\n // at 1 return the final value without the extensions used during interpolation\n if (t === 1) {\n return b == null ? \"\" : b;\n }\n\n return stringInterpolator(t);\n };\n}\n\n// a -> a + reverse(a) so that the line is closed.\nfunction lineToArea(a) {\n const aNormalized =\n a == null ? \"\" : a.replace(/[Z]/gi, \"\").replace(/([MLCSTQAHV])\\s*/gi, \"$1\");\n const aPoints =\n aNormalized === \"\" ? [] : aNormalized.split(/(?=[MLCSTQAHV])/gi);\n\n if (aPoints.length <= 0) {\n return \"\";\n }\n\n // convert to command objects so we can match types\n const aCommands = aPoints.map(commandObject);\n const reversed = aPoints.map(commandObject).reverse();\n if (reversed[reversed.length - 1].type == \"M\") {\n reversed[reversed.length - 1].type = reversed[reversed.length - 2].type;\n }\n return `${aCommands\n .concat(reversed)\n .map(commandToString)\n .join(\"\")}Z`;\n}\n/**\n * Interpolate from A to B by extending A and B during interpolation to have\n * the same number of points. This allows for a smooth transition when they\n * have a different number of points.\n *\n * Ignores the `Z` character in paths unless both A and B end with it.\n *\n * @param {String} a The `d` attribute for a path\n * @param {String} b The `d` attribute for a path\n */\nfunction interpolatePath2(a, b, alongTo = \"x\") {\n // remove Z, remove spaces after letters as seen in IE\n const aNormalized =\n a == null ? \"\" : a.replace(/[Z]/gi, \"\").replace(/([MLCSTQAHV])\\s*/gi, \"$1\");\n const bNormalized =\n b == null ? \"\" : b.replace(/[Z]/gi, \"\").replace(/([MLCSTQAHV])\\s*/gi, \"$1\");\n const aPoints =\n aNormalized === \"\" ? [] : aNormalized.split(/(?=[MLCSTQAHV])/gi);\n const bPoints =\n bNormalized === \"\" ? [] : bNormalized.split(/(?=[MLCSTQAHV])/gi);\n\n // if both are empty, interpolation is always the empty string.\n if (!aPoints.length && !bPoints.length) {\n return function nullInterpolator() {\n return \"\";\n };\n }\n\n // if A is empty, treat it as if it used to contain just the first point\n // of B. This makes it so the line extends out of from that first point.\n if (!aPoints.length) {\n aPoints.push(bPoints[0]);\n\n // otherwise if B is empty, treat it as if it contains the first point\n // of A. This makes it so the line retracts into the first point.\n } else if (!bPoints.length) {\n bPoints.push(aPoints[0]);\n }\n\n // convert to command objects so we can match types\n const aCommands = aPoints.map(commandObject);\n const bCommands = bPoints.map(commandObject);\n let hasZ = false;\n if (\n (a == null || a[a.length - 1] === \"Z\") &&\n (b == null || b[b.length - 1] === \"Z\")\n ) {\n hasZ = true;\n }\n\n // get tail\n // get head\n // concat tail + body + head\n const aExtent = d3.extent(aCommands, c => c[alongTo]);\n const bExtent = d3.extent(bCommands, c => c[alongTo]);\n if (alongTo === \"x\") {\n const aHeadI = aCommands.findIndex(c => c[alongTo] === aExtent[1]);\n const bHeadI = bCommands.findIndex(c => c[alongTo] === bExtent[1]);\n\n const aTop = aCommands.slice(0, aHeadI + 1);\n const bTop = bCommands.slice(0, bHeadI + 1);\n const aBottom = aCommands.slice(aHeadI + 1).reverse();\n const bBottom = bCommands.slice(bHeadI + 1).reverse();\n const hasBottom = aBottom.length > 0 && bBottom.length > 0;\n\n return t => {\n if (t === 1) {\n return b === null ? \"\" : b;\n }\n return (\n interpolateOutline(aTop, bTop, aExtent, bExtent)(t) +\n (hasBottom\n ? interpolateOutline(aBottom, bBottom, aExtent, bExtent, true, true)(t)\n : \"\") +\n (hasZ ? \"Z\" : \"\")\n );\n };\n } else {\n const aHeadI = aCommands.findIndex(c => c[alongTo] === aExtent[0]);\n const bHeadI = bCommands.findIndex(c => c[alongTo] === bExtent[0]);\n\n const aTop = aCommands.slice(0, aHeadI + 1).reverse();\n const bTop = bCommands.slice(0, bHeadI + 1).reverse();\n const aBottom = aCommands.slice(aHeadI + 1);\n const bBottom = bCommands.slice(bHeadI + 1);\n const hasBottom = aBottom.length > 0 && bBottom.length > 0;\n\n return t => {\n if (t === 1) {\n return b === null ? \"\" : b;\n }\n return (\n interpolateOutline(aTop, bTop, aExtent, bExtent, true)(t) +\n (hasBottom\n ? interpolateOutline(aBottom, bBottom, aExtent, bExtent, false, true)(t)\n : \"\") +\n (hasZ ? \"Z\" : \"\")\n );\n };\n }\n\n function interpolateOutline(\n aCommands,\n bCommands,\n aExtent,\n bExtent,\n reverse,\n isBottom = false\n ) {\n let head;\n let tail;\n let body;\n if (aExtent[1] < bExtent[0] || aExtent[0] > bExtent[1]) {\n // just interpolate\n body = getBody(aCommands, bCommands, reverse);\n } else {\n if (aExtent[1] > bExtent[1]) {\n // shrink head\n const i = aCommands.findIndex(c => c[alongTo] > bExtent[1]);\n head = getHead(aCommands.slice(i - 1), reverse, true, isBottom);\n } else if (aExtent[1] < bExtent[1]) {\n // extend head\n const i = bCommands.findIndex(c => c[alongTo] > aExtent[1]);\n head = getHead(bCommands.slice(i - 1), reverse, false, isBottom);\n }\n\n if (aExtent[0] < bExtent[0]) {\n // shrink tail\n const i = aCommands.findIndex(c => c[alongTo] >= bExtent[0]);\n tail = getTail(aCommands.slice(0, i + 1), reverse, true, isBottom);\n } else if (aExtent[0] > bExtent[0]) {\n // extend tail\n const i = bCommands.findIndex(c => c[alongTo] >= aExtent[0]);\n tail = getTail(bCommands.slice(0, i + 1), reverse, false, isBottom);\n // tail = getTail(bCommands.filter(c => c[alongTo] < aExtent[0]), false);\n }\n\n const bodyMin = Math.max(aExtent[0], bExtent[0]);\n const bodyMax = Math.min(aExtent[1], bExtent[1]);\n // get body\n body = getBody(\n aCommands.filter(c => c[alongTo] >= bodyMin && c[alongTo] <= bodyMax ),\n bCommands.filter(c => c[alongTo] >= bodyMin && c[alongTo] <= bodyMax ),\n reverse,\n !isBottom && ((reverse && !head) || (!reverse && !tail))\n );\n }\n if (reverse) {\n return t => {\n return (head ? head(t) : \"\") + body(t) + (tail ? tail(t) : \"\");\n };\n } else {\n return t => {\n return (tail ? tail(t) : \"\") + body(t) + (head ? head(t) : \"\");\n };\n }\n\n }\n\n function getBody(aCommands, bCommands, reverse = false, isTail = false) {\n // extend to match equal size\n const numPointsToExtend = Math.abs(bCommands.length - aCommands.length);\n if (aCommands.length <= 1 && bCommands.length <= 1) {\n return t => \"\";\n }\n if (numPointsToExtend !== 0) {\n // B has more points than A, so add points to A before interpolating\n if (bCommands.length > aCommands.length) {\n aCommands = extend(aCommands, bCommands, numPointsToExtend);\n\n // else if A has more points than B, add more points to B\n } else if (bCommands.length < aCommands.length) {\n bCommands = extend(bCommands, aCommands, numPointsToExtend);\n }\n }\n\n // commands have same length now.\n // convert A to the same type of B\n aCommands = aCommands.map((aCommand, i) =>\n convertToSameType(aCommand, bCommands[i])\n );\n aCommands = (reverse ? aCommands.reverse() : aCommands);\n bCommands = (reverse ? bCommands.reverse() : bCommands);\n if (isTail) {\n aCommands[0] = Object.assign({}, aCommands[0], { type: \"M\" });\n bCommands[0] = Object.assign({}, bCommands[0], { type: \"M\" });\n }\n const aProcessed = aCommands\n .map(commandToString)\n .join(\"\");\n const bProcessed = bCommands\n .map(commandToString)\n .join(\"\");\n\n const stringInterpolator = d3.interpolateString(aProcessed, bProcessed);\n\n return function pathInterpolator(t) {\n // at 1 return the final value without the extensions used during interpolation\n if (t === 1) {\n return bProcessed == null ? \"\" : bProcessed;\n }\n\n return stringInterpolator(t);\n };\n }\n\n function getHead(commands, reverse = false, isShrink = false, isBottom=false) {\n const d = commands.map(commandToString).join(\"\");\n const L = commands.length;\n const phases = [];\n const debug = [];\n for (let i = 1; i <= L - 1; i++) {\n let aCommands = commands.slice(0, i).concat([commands[i - 1]]);\n let bCommands = commands.slice(0, i + 1);\n aCommands = (reverse ? aCommands.reverse() : aCommands);\n bCommands = (reverse ? bCommands.reverse() : bCommands);\n const aProcessed = aCommands\n .map(commandToString)\n .join(\"\");\n const bProcessed = bCommands\n .map(commandToString)\n .join(\"\");\n if (reverse && !isBottom) {\n aCommands[0] = Object.assign({}, aCommands[0], { type: \"M\" });\n bCommands[0] = Object.assign({}, bCommands[0], { type: \"M\" });\n }\n debug.push({ aProcessed, bProcessed });\n phases.push(function(t) {\n return d3.interpolateString(aProcessed, bProcessed)(t);\n });\n }\n\n return function(t) {\n if (isShrink) {\n t = 1 - t;\n }\n if (t === 1) {\n return d == null ? \"\" : d;\n }\n const phase = Math.floor(t * (L - 1));\n\n return phases[phase](t * (L - 1) - phase);\n };\n }\n\n function getTail(commands, reverse = false, isShrink = false, isBottom=false) {\n const d = commands.map(commandToString).join(\"\");\n const L = commands.length;\n const phases = [];\n for (let i = 1; i < L; i++) {\n let aCommands = [commands[L - i]].concat(commands.slice(L - i, L));\n let bCommands = commands.slice(L - i - 1, L);\n\n aCommands = (reverse ? aCommands.reverse() : aCommands);\n bCommands = (reverse ? bCommands.reverse() : bCommands);\n\n if (!reverse && !isBottom) {\n aCommands[0] = Object.assign({}, aCommands[0], { type: \"M\" });\n bCommands[0] = Object.assign({}, bCommands[0], { type: \"M\" });\n }\n\n const aProcessed = aCommands\n .map(commandToString)\n .join(\"\");\n const bProcessed = bCommands\n .map(commandToString)\n .join(\"\");\n\n phases.push(function(t) {\n return d3.interpolateString(aProcessed, bProcessed)(t);\n });\n }\n return function(t) {\n if (isShrink) {\n t = 1 - t;\n }\n if (t === 1) {\n return d == null ? \"\" : d;\n }\n const phase = Math.floor(t * (L - 1));\n return phases[phase](t * (L - 1) - phase);\n };\n }\n}\n\nexport { interpolatePath, interpolatePath2, lineToArea };\n","/* eslint-disable camelcase */\nimport * as d3 from \"d3\";\nimport { interpolatePath, interpolatePath2 } from \"./interpolatePathYH\";\nimport {get} from \"../../util/util\";\n\n\n\n\nfunction rectInterpolator(scales, encodes, signals, d, oldD, getRect) {\n let path_i;\n let path_f;\n const d_i = d.initial || oldD || d3.select(this).datum();\n const d_f = d.final || d;\n const encode_i = encodes.initial || encodes;\n const encode_f = encodes.final || encodes;\n const scale_i = {\n primary: scales.initial || scales,\n secondary: scales.final || scales\n };\n const scale_f = {\n primary: scales.final || scales,\n secondary: scales.initial || scales\n };\n const signal_i = signals.initial || signals;\n const signal_f = signals.final || signals;\n\n path_i = getRect(d_i, scale_i, encode_i, signal_i).path;\n path_f = getRect(d_f, scale_f, encode_f, signal_f).path;\n\n return interpolatePath(path_i, path_f);\n}\nfunction symbolInterpolator(scales, encodes, signals, d, oldD, getShape) {\n let shape_i;\n let shape_f;\n let shape_i_diminished;\n let shape_f_diminished;\n const d_i = d.initial || oldD || d3.select(this).datum();\n const d_f = d.final || d;\n const encode_i = encodes.initial || encodes;\n const encode_f = encodes.final || encodes;\n const scale_i = scales.initial || scales;\n const scale_f = scales.final || scales;\n const signal_i = signals.initial || signals;\n const signal_f = signals.final || signals;\n let isMorph = false;\n\n shape_i = getShape(d_i, scale_i, encode_i, signal_i);\n shape_f = getShape(d_f, scale_f, encode_f, signal_f);\n if (shape_i.meta.shape !== shape_f.meta.shape) {\n isMorph = true;\n shape_i_diminished = getShape(d_i, scale_i, encode_i, signal_i, true);\n shape_f_diminished = getShape(d_f, scale_f, encode_f, signal_f, true);\n }\n\n if (isMorph) {\n return t => {\n if (t < 0.5) {\n return interpolatePath(shape_i.path, shape_i_diminished.path)(t * 2);\n }\n return interpolatePath(\n shape_f_diminished.path,\n shape_f.path\n )((t - 0.5) * 2);\n };\n }\n return interpolatePath(shape_i.path, shape_f.path);\n}\n\nfunction areaLineInterpolatorWithScales(\n scales,\n encodes,\n marktypes,\n d,\n oldD,\n signals,\n getPath,\n interpolateStyle,\n alongTos\n) {\n const encode_i = encodes.initial || encodes;\n const encode_f = encodes.final || encodes;\n const marktype_i = marktypes.initial || marktypes;\n // const marktype_i = \"area\";\n const marktype_f = marktypes.final || marktypes;\n const scale_i = scales.initial || scales;\n const scale_f = scales.final || scales;\n const signal_i = signals.initial || signals;\n const signal_f = signals.final || signals;\n const d_i = d.initial || oldD;\n const d_f = d.final || d;\n const alongTo_i = alongTos.initial || alongTos;\n const alongTo_f = alongTos.final || alongTos;\n const paths_11 = getPath(areaLineDToData(d_i), scale_i, encode_i, signal_i, marktype_i, alongTo_i);\n const paths_12 = getPath(areaLineDToData(d_i), scale_f, encode_i, signal_i, marktype_i, alongTo_i);\n const paths_21 = getPath(areaLineDToData(d_f), scale_i, encode_f, signal_f, marktype_f, alongTo_f);\n const paths_22 = getPath(areaLineDToData(d_f), scale_f, encode_f, signal_f, marktype_f, alongTo_f);\n\n if (\n isValidPath(paths_11) &&\n isValidPath(paths_12) &&\n isValidPath(paths_21) &&\n isValidPath(paths_22)\n ) {\n const interpolator_scale1 = interpolatePath(paths_11, paths_12, alongTo_i);\n const interpolator_scale2 = interpolatePath(paths_21, paths_22, alongTo_f);\n const interpolator_data =\n interpolateStyle === \"update\" ? interpolatePath2 : interpolatePath;\n // interpolateStyle === \"update\" ? interpolatePath3 : interpolatePath;\n return t => {\n return interpolator_data(\n interpolator_scale1(t),\n interpolator_scale2(t),\n alongTo_i\n )(t);\n };\n }\n const interpolator_data =\n interpolateStyle === \"update\" ? interpolatePath2 : interpolatePath;\n // interpolateStyle === \"update\" ? interpolatePath3 : interpolatePath;\n\n return interpolator_data(paths_11, paths_22, alongTo_i);\n}\n\nfunction areaLineInterpolator(\n scales,\n encodes,\n marktypes,\n d,\n oldD,\n signals,\n getPath,\n interpolateStyle\n) {\n const marktype = typeof marktypes === \"string\" ? marktypes : undefined;\n\n if (marktype === \"line\") {\n const dataToPath = (data, scale, encode, signal) => {\n return getPath(data, scale, encode, signal, \"line\");\n };\n const computId = (encode, d) => {\n return !d\n ? undefined\n : [d.datum[encode.x.field], d.datum[encode.y.field]].join(\",\");\n };\n return computeLineInterpolator(\n areaLineDToData(d.initial || oldD),\n areaLineDToData(d.final || d),\n scales,\n encodes,\n signals,\n computId,\n dataToPath\n );\n // if (interpolateStyle === \"update\") {\n // const dataToPath = (data, scale, encode, signal) => {\n // return getPath(data, scale, encode, signal, \"line\");\n // };\n // const computId = (encode, d) => {\n // return !d\n // ? undefined\n // : [d.datum[encode.x.field], d.datum[encode.y.field]].join(\",\");\n // };\n // return computeLineInterpolator(\n // areaLineDToData(oldD),\n // areaLineDToData(d),\n // scales,\n // encodes,\n // signals,\n // computId,\n // dataToPath\n // );\n // }\n\n // return areaLineInterpolatorWithScales.bind(this)(\n // scales,\n // encodes,\n // \"line\",\n // d,\n // oldD,\n // signals,\n // getPath,\n // interpolateStyle\n // );\n }\n if (marktype === \"area\" || marktype === \"trail\") {\n const alongTos = {\n initial: get(encodes, \"initial\", \"orient\", \"value\") === \"horizontal\" ? \"y\": \"x\",\n final: get(encodes, \"final\", \"orient\", \"value\") === \"horizontal\" ? \"y\": \"x\"\n };\n return areaLineInterpolatorWithScales.bind(this)(\n scales,\n encodes,\n marktype,\n d,\n oldD,\n signals,\n getPath,\n interpolateStyle,\n alongTos\n );\n }\n\n // when the marktype changes between \"area\" and \"line\", assume the line as area.\n\n if (marktypes.initial === \"line\" && marktypes.final === \"area\") {\n let alongTo = get(encodes, \"final\", \"orient\", \"value\") === \"horizontal\" ? \"y\": \"x\";\n return areaLineInterpolatorWithScales.bind(this)(scales, encodes, \"area\", d, oldD, signals, getPath, interpolateStyle, alongTo);\n } else { // area -> line\n let alongTo = get(encodes, \"initial\", \"orient\", \"value\") === \"horizontal\" ? \"y\": \"x\";\n let linePaths = getPath(\n areaLineDToData(d.final || d),\n scales.final || scales,\n encodes.final || encodes,\n signals.final || signals,\n \"line\");\n let intp = areaLineInterpolatorWithScales.bind(this)(scales, encodes, \"area\", d, oldD, signals, getPath, interpolateStyle, alongTo);\n return (t) => {\n return t >= 1 ? linePaths : intp(t);\n };\n }\n}\n\nfunction areaLineDToData(d) {\n if (!d) {\n return undefined;\n }\n return d.mark.marktype !== \"group\" ? d.mark.items : d.items[0].items;\n}\n\n// Interpolate path(dataA, scaleA) -> path(dataB, scaleB)\nfunction computeLineInterpolator(\n dataA,\n dataB,\n scales,\n encodes,\n signals,\n computeId,\n getPath\n) {\n const t = Date.now();\n // 1) calculate two anchors between dataA and dataB\n const _encodes = encodes.initial && encodes.final ? encodes : {\n initial: encodes,\n final: encodes\n };\n const computeIdA = d => computeId(_encodes.initial, d);\n const computeIdB = d => computeId(_encodes.final, d);\n const La = dataA.length;\n const Lb = dataB.length;\n let i = dataB.findIndex(d => computeIdB(d) === computeIdA(dataA[0]));\n let j = dataB.findIndex(d => computeIdB(d) === computeIdA(dataA[La - 1]));\n let head;\n let tail;\n let body;\n\n if (i >= 0) {\n if (j >= 0) {\n if (j < i) {\n body = getBody(dataA, dataB, scales, _encodes, signals, getPath);\n } else {\n tail = getTail(\n dataB.slice(0, i + 1),\n false,\n scales,\n _encodes,\n signals,\n getPath\n );\n body = getBody(\n dataA,\n dataB.slice(i, j + 1),\n scales,\n _encodes,\n signals,\n getPath,\n false\n );\n head = getHead(\n dataB.slice(j),\n false,\n scales,\n _encodes,\n signals,\n getPath\n );\n }\n } else if (\n (j = dataA.findIndex(d => computeIdA(d) === computeIdB(dataB[Lb - 1]))) >= 0\n ) {\n tail = getTail(\n dataB.slice(0, i + 1),\n false,\n scales,\n _encodes,\n signals,\n getPath\n );\n body = getBody(\n dataA.slice(0, j + 1),\n dataB.slice(i),\n scales,\n _encodes,\n signals,\n getPath,\n false\n );\n head = getHead(dataA.slice(j), true, scales, _encodes, signals, getPath);\n } else {\n body = getBody(dataA, dataB, scales, _encodes, signals, getPath);\n }\n } else if (j >= 0) {\n if (\n (i = dataA.findIndex(d => computeIdA(d) === computeIdB(dataB[0]))) >= 0\n ) {\n tail = getTail(\n dataA.slice(0, i + 1),\n true,\n scales,\n _encodes,\n signals,\n getPath\n );\n body = getBody(\n dataA.slice(i),\n dataB.slice(0, j + 1),\n scales,\n _encodes,\n signals,\n getPath,\n false\n );\n head = getHead(dataB.slice(j), false, scales, _encodes, signals, getPath);\n } else {\n body = getBody(dataA, dataB, scales, _encodes, signals, getPath);\n }\n } else {\n i = dataA.findIndex(d => computeIdA(d) === computeIdB(dataB[0]));\n j = dataA.findIndex(d => computeIdA(d) === computeIdB(dataB[Lb - 1]));\n if (i >= 0 && j >= 0) {\n tail = getTail(\n dataA.slice(0, i + 1),\n true,\n scales,\n _encodes,\n signals,\n getPath\n );\n body = getBody(\n dataA.slice(i, j + 1),\n dataB,\n scales,\n _encodes,\n signals,\n getPath,\n false\n );\n head = getHead(dataA.slice(j), true, scales, _encodes, signals, getPath);\n } else {\n body = getBody(dataA, dataB, scales, _encodes, signals, getPath);\n }\n }\n\n if (head && tail && body) {\n return t => {\n if (t === 1) {\n return getPath(dataB, scales.final, _encodes.final, signals.final);\n }\n return tail(t) + body(t) + head(t);\n };\n }\n return t => {\n if (t === 1) {\n return getPath(dataB, scales.final, _encodes.final, signals.final);\n }\n return body(t);\n };\n}\n\nfunction getHead(data, isShrink, scales, encodes, signals, getPath) {\n const L = data.length;\n if (L <= 1) {\n return t => \"\";\n }\n\n const interpolators = [\"initial\", \"final\"].map(which => {\n const phases = [];\n const scale = scales[which];\n const encode = encodes[which];\n const signal = signals[which] || signals;\n for (let i = 0; i <= L - 2; i++) {\n const fromPath = getPath(\n data.slice(0, i + 1).concat(data.slice(i, i + 1)),\n scale,\n encode,\n signal\n ).replace(/^M/g, \"L\");\n const toPath = getPath(\n data.slice(0, i + 2),\n scale,\n encode,\n signal\n ).replace(/^M/g, \"L\");\n phases.push(function(t) {\n return d3.interpolateString(fromPath, toPath)(t);\n });\n }\n return function(t) {\n if (isShrink) {\n t = 1 - t;\n }\n if (t === 1) {\n return getPath(data, scale, encode, signal);\n }\n const phase = Math.floor(t * (L - 1));\n\n return phases[phase](t * (L - 1) - phase);\n };\n });\n\n return t => {\n return d3.interpolateString(interpolators[0](t), interpolators[1](t))(t);\n };\n}\n\nfunction getTail(data, isShrink, scales, encodes, signals, getPath) {\n const L = data.length;\n if (L <= 1) {\n return t => \"\";\n }\n const interpolators = [\"initial\", \"final\"].map(which => {\n const phases = [];\n const scale = scales[which];\n const encode = encodes[which];\n const signal = signals[which] || signals;\n for (let i = L - 2; i >= 0; i--) {\n const fromPath = getPath(\n data.slice(i + 1, i + 2).concat(data.slice(i + 1)),\n scale,\n encode,\n signal\n ).replace(/Z$/g, \"\");\n const toPath = getPath(data.slice(i), scale, encode, signal).replace(\n /Z$/g,\n \"\"\n );\n\n phases.push(function(t) {\n return d3.interpolateString(fromPath, toPath)(t);\n });\n }\n\n return function(t) {\n if (isShrink) {\n t = 1 - t;\n }\n if (t === 1) {\n return getPath(data, scale, encode, signal);\n }\n const phase = Math.floor(t * (L - 1));\n\n return phases[phase](t * (L - 1) - phase);\n };\n });\n return t => {\n return d3.interpolateString(interpolators[0](t), interpolators[1](t))(t);\n };\n}\n\nfunction getBody(\n fromData,\n toData,\n scales,\n encodes,\n signals,\n getPath,\n toBeAssembled\n) {\n const pathPairs = [\"initial\", \"final\"].map(which => {\n const scale = scales[which];\n const encode = encodes[which];\n const signal = signals[which] || signals;\n let fromPath = getPath(fromData, scale, encode, signal);\n let toPath = getPath(toData, scale, encode, signal);\n\n if (toBeAssembled) {\n fromPath = fromPath.replace(/^M/g, \"L\").replace(/Z$/g, \"\");\n toPath = toPath.replace(/^M/g, \"L\").replace(/Z$/g, \"\");\n }\n return [fromPath, toPath];\n });\n\n if (\n isValidPath(pathPairs[0][0]) &&\n isValidPath(pathPairs[0][1]) &&\n isValidPath(pathPairs[1][0]) &&\n isValidPath(pathPairs[1][0])\n ) {\n const interpolator1 = interpolatePath(pathPairs[0][0], pathPairs[0][1]);\n const interpolator2 = interpolatePath(pathPairs[1][0], pathPairs[1][1]);\n return t => {\n return d3.interpolateString(interpolator1(t), interpolator2(t))(t);\n };\n }\n return d3.interpolateString(pathPairs[0][0], pathPairs[1][1]);\n}\nfunction isValidPath(p) {\n return p.indexOf(\"NaN\") < 0;\n}\n\nexport {\n areaLineInterpolatorWithScales,\n areaLineInterpolator,\n symbolInterpolator,\n areaLineDToData,\n rectInterpolator\n};\n","/* eslint-disable prefer-destructuring */\n/* eslint-disable no-restricted-globals */\n/* eslint-disable no-use-before-define */\n/* eslint-disable camelcase */\nimport * as vega from \"vega\";\nimport * as vegaExpression from \"vega-expression\";\nimport * as d3 from \"d3\";\nimport { propMap, isLinearMarktype } from \"./util\";\nimport { textOffset, getStyle, transformItem } from \"./vega-render-util\";\nimport { copy, copy2, isNumber, get } from \"../util/util\";\nimport {\n areaLineInterpolator,\n symbolInterpolator,\n areaLineDToData,\n rectInterpolator\n} from \"./mark/interpolateHelper\";\nimport { BR_PROP_DEFAULT } from \"../default\";\n\nexport function fetchAttributes(d3Selection, props, scales, signal, encode, prevData) {\n props.forEach(prop => {\n propMap(prop).forEach(p => {\n if (p.type === \"attrTween\") {\n if (d3Selection.attrTween) {\n d3Selection.attrTween(getStyle(p.val), function(d) {\n const oldD = prevData ? prevData.get(this) : undefined;\n return getPropVal.bind(this)(p, encode, scales, signal, d, oldD);\n });\n } else {\n const tempP = Object.assign({}, p, { type: \"attr\" });\n d3Selection.attr(tempP.val, function(d) {\n const oldD = prevData ? prevData.get(this) : undefined;\n return getPropVal.bind(this)(\n tempP,\n encode,\n scales,\n signal,\n d,\n oldD\n );\n });\n }\n } else if (p.type === \"attr\") {\n d3Selection.attr(getStyle(p.val), function(d) {\n const oldD = prevData ? prevData.get(this) : undefined;\n return getPropVal.bind(this)(p, encode, scales, signal, d, oldD);\n });\n } else if (p.type === \"text\") {\n d3Selection.text(function(d) {\n const oldD = prevData ? prevData.get(this) : undefined;\n return getPropVal.bind(this)(p, encode, scales, signal, d, oldD);\n });\n } else if (p.type === \"style\") {\n if (p.asTween) {\n d3Selection.styleTween(getStyle(p.val), function(d) {\n const oldD = prevData ? prevData.get(this) : undefined;\n return getPropVal.bind(this)(p, encode, scales, signal, d, oldD);\n });\n } else {\n d3Selection.style(getStyle(p.val), function(d) {\n const oldD = prevData ? prevData.get(this) : undefined;\n return getPropVal.bind(this)(p, encode, scales, signal, d, oldD);\n });\n }\n }\n });\n });\n}\n\nexport function getPropVal(propInfo, encodes, scales, signals, d, oldD) {\n const signal = signals.final || signals;\n const encode = encodes.final || encodes;\n\n if (propInfo.elmType === \"text\") {\n if (propInfo.val === \"transform\") {\n // get transform\n const trfD = transformD.bind(this)(encode, scales, signal, d, false);\n const dx = decodeEncode.bind(this)(\"dx\", encode, scales, signal, d);\n const dy = decodeEncode.bind(this)(\"dy\", encode, scales, signal, d);\n trfD.x = (trfD.x || 0) + (dx || 0);\n trfD.y = (trfD.y || 0) + (dy || 0);\n const baseline = decodeEncode.bind(this)(\n \"baseline\",\n encode,\n scales,\n signal,\n d\n );\n const fontSize = decodeEncode.bind(this)(\n \"fontSize\",\n encode,\n scales,\n signal,\n d\n );\n if (oldD && oldD.align !== d.align) {\n const alignFactor = { right: -0.5, center: 0, left: 0.5 };\n trfD.x +=\n vega.textMetrics.width(d,d.text) *\n (alignFactor[d.align] - alignFactor[oldD.align]);\n }\n\n return `${transformItem(trfD)} ${transformItem({\n y: textOffset(Object.assign({ baseline, fontSize }, d))\n })}`;\n }\n if (propInfo.val === \"text\") {\n return encode.text\n ? decodeEncode.bind(this)(\"text\", encode, scales, signal, d)\n : d.text;\n }\n } else if (propInfo.elmType === \"title\") {\n if (propInfo.val === \"transform\") {\n // get transform\n const trfD = transformD.bind(this)(encode, scales, signal, d);\n // let trfD = transformD.bind(this)(encode, scales, signal, d, false);\n const dx = decodeEncode.bind(this)(\"dx\", encode, scales, signal, d);\n const dy = decodeEncode.bind(this)(\"dy\", encode, scales, signal, d);\n trfD.x = (trfD.x || 0) + (dx || 0);\n trfD.y = (trfD.y || 0) + (dy || 0);\n const baseline = decodeEncode.bind(this)(\n \"baseline\",\n encode,\n scales,\n signal,\n d\n );\n const fontSize = decodeEncode.bind(this)(\n \"fontSize\",\n encode,\n scales,\n signal,\n d\n );\n return `${transformItem(trfD)} ${transformItem({\n y: textOffset(Object.assign({ baseline, fontSize }, d))\n })}`;\n }\n if (propInfo.val === \"text\") {\n return encode.text\n ? decodeEncode.bind(this)(\"text\", encode, scales, signal, d)\n : d.text;\n }\n } else if (\n propInfo.elmType === \"tick\" ||\n propInfo.elmType === \"grid\" ||\n propInfo.elmType === \"domain\"\n ) {\n // hotfix\n if (propInfo.val === \"transform\") {\n // get transform\n let trfD = transformD.bind(this)(encode, scales, signal, d, false);\n trfD = Object.keys(trfD).length === 0 ? d : trfD;\n const x2 = decodeEncode.bind(this)(\"x2\", encode, scales, signal, d);\n const y2 = decodeEncode.bind(this)(\"y2\", encode, scales, signal, d);\n if (oldD) {\n if (x2 === 0 && (oldD.y2 - oldD.y) * y2 < 0) {\n trfD.y += y2;\n } else if (y2 === 0 && (oldD.x2 - oldD.x) * x2 < 0) {\n trfD.x += x2;\n }\n }\n return transformItem(Object.keys(trfD).length === 0 ? d : trfD);\n }\n if (propInfo.val === \"x2\") {\n let x2 = decodeEncode.bind(this)(\"x2\", encode, scales, signal, d);\n if (isNaN(x2)) {\n return d.x2 - d.x;\n }\n if (oldD) {\n if ((oldD.x2 - oldD.x) * x2 < 0) {\n x2 = -x2;\n }\n }\n return isNaN(x2) ? d.x2 - d.x : x2;\n }\n if (propInfo.val === \"y2\") {\n let y2 = decodeEncode.bind(this)(\"y2\", encode, scales, signal, d);\n if (isNaN(y2)) {\n return d.y2 - d.y;\n }\n if (oldD) {\n if ((oldD.y2 - oldD.y) * y2 < 0) {\n y2 = -y2;\n }\n }\n return y2;\n }\n } else if (propInfo.elmType === \"rect\") {\n if (propInfo.val === \"transform\") {\n return \"\";\n }\n if (propInfo.val === \"d\") {\n if (propInfo.type === \"attrTween\") {\n return rectInterpolator.bind(this)(\n scales,\n encodes,\n signals,\n d,\n oldD,\n getRect\n );\n }\n return getRect(d, scales, encodes, signal).path;\n }\n } else if (propInfo.elmType === \"symbol\") {\n if (propInfo.val === \"d\") {\n if (propInfo.type === \"attrTween\") {\n return symbolInterpolator.bind(this)(\n scales,\n encodes,\n signals,\n d,\n oldD,\n getShape\n );\n }\n return getShape(d, scales, encode, signal).path;\n }\n if (propInfo.val === \"transform\") {\n const trfD = transformD.bind(this)(encode, scales, signal, d, false);\n return transformItem(Object.keys(trfD).length === 0 ? d : trfD);\n }\n } else if (propInfo.elmType === \"gradient\") {\n if (propInfo.val === \"d\") {\n const newD = Object.keys(encode.primary || encode)\n .filter(\n key =>\n [\"x\", \"x2\", \"xc\", \"width\", \"y\", \"y2\", \"yc\", \"height\"].indexOf(\n key\n ) >= 0\n )\n .reduce((acc, curr) => {\n acc[curr] = decodeEncode.bind(this)(curr, encode, scales, signal, d);\n return acc;\n }, {});\n let x; let y; let width; let height;\n if (isNaN(newD.x)) {\n x = isNaN(newD.xc - newD.width / 2)\n ? newD.x2\n : newD.xc - newD.width / 2;\n } else {\n x = newD.x;\n }\n if (isNaN(newD.width)) {\n width = isNaN(newD.x2 - newD.x) ? undefined : newD.x2 - newD.x;\n } else {\n width = newD.width;\n }\n\n if (!isNaN(newD.y2) && !isNaN(newD.y)) {\n y = Math.min(newD.y2, newD.y);\n height = Math.abs(newD.y2 - newD.y);\n } else {\n y = isNaN(newD.y) ? newD.y2 : newD.y;\n height = newD.height;\n }\n\n // height = isNaN(newD.height) ? ( isNaN(newD.y2 - newD.y) ? undefined : (newD.y2 - newD.y)) : newD.height;\n // return vega.pathRectangle().x(x).y(y).width(width).height(height)();\n\n return vega\n .pathRectangle()\n .x(x)\n .y(y)\n .width(width)\n .height(height)();\n }\n if (propInfo.val === \"transform\") {\n const trfD = transformD.bind(this)(encode, scales, signal, d, false);\n return transformItem(Object.keys(trfD).length === 0 ? d : trfD);\n }\n if (propInfo.val === \"fill\") {\n if (propInfo.defs && !propInfo.isUpdate) {\n const url = propInfo.defs(d3.select(this.closest(\"svg\")), d);\n return `url(\"${url}\")`;\n }\n }\n } else if (propInfo.elmType === \"rule\") {\n if (propInfo.val === \"transform\") {\n // get transform\n const trfD = transformD.bind(this)(encode, scales, signal, d, false);\n return transformItem(Object.keys(trfD).length === 0 ? d : trfD);\n }\n if (propInfo.val === \"x2\") {\n const x2 = decodeEncode.bind(this)(\"x2\", encode, scales, signal, d);\n const x = decodeEncode.bind(this)(\"x\", encode, scales, signal, d);\n return isNumber(x2 - x) ? x2 - x : d.x2 || 0;\n }\n if (propInfo.val === \"y2\") {\n const y2 = decodeEncode.bind(this)(\"y2\", encode, scales, signal, d);\n const y = decodeEncode.bind(this)(\"y\", encode, scales, signal, d);\n return isNumber(y2 - y) ? y2 - y : d.y2 || 0;\n }\n } else if (propInfo.elmType === \"group\") {\n if (propInfo.val === \"transform\") {\n const trfD = transformD.bind(this)(encode, scales, signal, d);\n return transformItem(Object.keys(trfD).length === 0 ? d : trfD);\n }\n } else if (propInfo.elmType === \"background\") {\n if (propInfo.val === \"d\") {\n const rectD = {\n x: decodeEncode.bind(this)(\"x\", encode, scales, signal, d) || 0,\n y: decodeEncode.bind(this)(\"y\", encode, scales, signal, d) || 0,\n height: decodeEncode.bind(this)(\"height\", encode, scales, signal, d),\n width: decodeEncode.bind(this)(\"width\", encode, scales, signal, d)\n };\n return vega\n .pathRectangle()\n .x(rectD.x)\n .y(rectD.y)\n .width(rectD.width)\n .height(rectD.height)();\n }\n } else if (isLinearMarktype(propInfo.elmType)) {\n if (propInfo.val === \"d\") {\n if (propInfo.type === \"attrTween\") {\n const marktypes = propInfo.initialMarktype\n ? { initial: propInfo.initialMarktype, final: propInfo.elmType }\n : propInfo.elmType;\n return areaLineInterpolator.bind(this)(\n scales,\n encodes,\n marktypes,\n d,\n oldD,\n signals,\n getPath.bind(this),\n propInfo.interpolateStyle\n );\n }\n return getPath.bind(this)(\n areaLineDToData(d),\n scales,\n encode,\n signal,\n propInfo.elmType\n );\n }\n if (propInfo.val === \"fill\" && propInfo.asTween) {\n const getFill = encode =>\n decodeEncode.bind(this)(\n \"fill\",\n encode,\n scales,\n signal,\n d.mark.marktype !== \"group\" ? { datum: {} } : d\n );\n if (propInfo.initialMarktype === \"area\" && propInfo.elmType === \"line\") {\n // while area -> line, keep the fill of the path and remove at the end.\n const decodedValue = getFill({\n fill: (encodes.initial || encode).fill\n });\n return t => (t >= 1 ? \"none\" : decodedValue);\n }\n const decodedValue = getFill(encode);\n return (t) => decodedValue;\n }\n if (\n propInfo.val === \"stroke\" &&\n propInfo.initialMarktype === \"line\" &&\n propInfo.elmType === \"area\"\n ) {\n const _encode = { stroke: encode.stroke || encode.fill };\n return decodeEncode.bind(this)(\n \"stroke\",\n _encode,\n scales,\n signal,\n d.mark.marktype !== \"group\" ? { datum: {} } : d\n );\n }\n if (hasProp(encode, propInfo)) {\n // since data bind to the group of the line\n return decodeEncode.bind(this)(\n propInfo.val,\n encode,\n scales,\n signal,\n d.mark.marktype !== \"group\" ? { datum: {} } : d\n ) + (propInfo.val === \"strokeWidth\" ? \"px\" : \"\");\n }\n }\n\n if (propInfo.val === \"text-anchor\") {\n const textAnchor = {\n left: \"start\",\n center: \"middle\",\n right: \"end\"\n };\n return textAnchor[\n (oldD ? oldD.align : d.align) ||\n decodeEncode.bind(this)(\"align\", encode, scales, signal, d)\n ];\n }\n if (hasProp(encode, propInfo)) {\n return decodeEncode.bind(this)(propInfo.val, encodes, scales, signal, d);\n }\n // Vega make some lables transparent to avoid the overlaps.\n // Gemini takes the vega's decisions.\n if (propInfo.elmType === \"text\" && propInfo.val === \"opacity\") {\n return d[propInfo.val];\n }\n return BR_PROP_DEFAULT[propInfo.elmType][propInfo.val];\n\n function hasProp(encode, propInfo) {\n return (\n get(encode, \"primary\", propInfo.val) ||\n get(encode, \"secondary\", propInfo.val) ||\n get(encode, propInfo.val)\n );\n }\n function getRect(d, scales, encodes, signal, isDiminished) {\n const encode = encodes.primary || encodes;\n const subEncode = encodes.secondary || encodes;\n const POSITION_ATTRS = [\n \"x\",\n \"x2\",\n \"xc\",\n \"width\",\n \"y\",\n \"y2\",\n \"yc\",\n \"height\",\n \"cornerRadius\"\n ];\n const newD = POSITION_ATTRS.reduce((acc, attr) => {\n if (encode[attr] || subEncode[attr]) {\n acc[attr] = decodeEncode.bind(this)(\n attr,\n encodes,\n scales,\n signal,\n d,\n false\n );\n }\n return acc;\n }, {});\n\n let x; let y; let width; let height; let cornerRadius;\n if (isNumber(newD.xc) && isNumber(newD.width)) {\n x = newD.xc - newD.width / 2;\n width = newD.width;\n } else if (isNumber(newD.x) && isNumber(newD.x2)) {\n x = Math.min(newD.x, newD.x2);\n width = Math.abs(newD.x - newD.x2);\n } else {\n x = isNumber(newD.x) ? newD.x : newD.x2;\n width = newD.width;\n }\n\n if (isNumber(newD.yc) && isNumber(newD.height)) {\n y = newD.yc - newD.height / 2;\n height = newD.height;\n } else if (isNumber(newD.y2) && isNumber(newD.y)) {\n y = Math.min(newD.y2, newD.y);\n height = Math.abs(newD.y2 - newD.y);\n } else {\n y = isNumber(newD.y) ? newD.y : newD.y2;\n height = newD.height;\n }\n\n cornerRadius = !isNumber(newD.cornerRadius) ? 0 : newD.cornerRadius;\n if (isDiminished) {\n return {\n path: vega\n .pathRectangle()\n .x(0)\n .y(0)\n .width(1)\n .height(1)(),\n meta: newD\n };\n }\n // height = isNaN(newD.height) ? ( isNaN(newD.y2 - newD.y) ? undefined : (newD.y2 - newD.y)) : newD.height;\n // return vega.pathRectangle().x(x).y(y).width(width).height(height)();\n\n return {\n path: vega\n .pathRectangle()\n .x(x)\n .y(y)\n .width(width)\n .height(height)\n .cornerRadius(cornerRadius)(),\n meta: newD\n };\n }\n\n function getShape(d, scales, encodes, signal, isDiminished = false) {\n const encode = encodes.primary || encodes;\n let newD = Object.keys(encode)\n .filter(key => [\"size\", \"shape\"].indexOf(key) >= 0)\n .reduce((acc, curr) => {\n acc[curr] = decodeEncode.bind(this)(curr, encodes, scales, signal, d);\n return acc;\n }, {});\n const context = d3.path();\n newD = {\n shape: newD.shape || \"circle\",\n size: isNumber(newD.size) ? newD.size : isNumber(d.size) ? d.size : 30\n };\n\n vega.pathSymbols(newD.shape).draw(context, isDiminished ? 1 : newD.size);\n return {\n path: context.toString(),\n meta: newD\n };\n }\n\n function getPath(data, scales, encodes, signal, type, alongTo=\"x\") {\n // let data = (d.mark.marktype !== \"group\" ? d : d.items[0].items[0]).mark.items;\n const encode = encodes.primary || encodes;\n const newData = data.map(oldD => {\n const defaultD = Object.keys(encode)\n .filter(key => [\"x\", \"x2\", \"xc\", \"width\", \"y\", \"y2\", \"yc\", \"height\", \"size\"].indexOf(key) >= 0) // \"defined\" channel is ignored due to performance issue.\n .reduce((acc, curr) => {\n const newVal = decodeEncode.bind(this)(\n curr,\n encodes,\n scales,\n signal,\n oldD\n );\n if (!isNumber(newVal)) {\n return acc;\n }\n acc[curr] = newVal;\n if (scales[curr] && scales[curr].type === \"band\") {\n acc[curr] += Math.round(\n scales[curr].bandwidth() * (encode.bandPosition || 0.5)\n );\n }\n return acc;\n }, {});\n defaultD.height = isNumber(defaultD.height)\n ? defaultD.height\n : Math.abs(defaultD.y2 - defaultD.y);\n defaultD.width = isNumber(defaultD.width)\n ? defaultD.width\n : Math.abs(defaultD.x2 - defaultD.x);\n return Object.assign(\n // {\n // x: oldD.x,\n // y: oldD.y,\n // width: oldD.width,\n // height: oldD.height\n // },\n defaultD\n );\n });\n\n if (type === \"line\") {\n return (\n d3\n .line()\n .x(d => Math.floor(d.x * 100) / 100)\n .y(d => Math.floor(d.y * 100) / 100)(newData) || \"\"\n );\n } else if (type === \"area\") {\n // areahShape = d3_area().y(y).x1(x).x0(xw).defined(def),\n if (alongTo === \"x\") {\n newData.forEach(d => {\n d.y2 = isNumber(d.y2) ? d.y2 : d.y;\n });\n return (\n d3\n .area()\n .x(d => Math.floor(d.x * 100) / 100)\n .y1(d => Math.floor(Math.min(d.y, d.y2) * 100) / 100)\n .y0(\n d => Math.floor((Math.min(d.y, d.y2) + (d.height || 0)) * 100) / 100\n )(newData) || \"\"\n );\n } else {\n newData.forEach(d => {\n d.x2 = isNumber(d.x2) ? d.x2 : d.x;\n });\n return (\n d3\n .area()\n .y(d => Math.floor(d.y * 100) / 100)\n .x1(d => Math.floor(Math.min(d.x, d.x2) * 100) / 100)\n .x0(\n d => Math.floor((Math.min(d.x, d.x2) + (d.width || 0)) * 100) / 100\n )(newData) || \"\"\n );\n }\n\n } else if (type === \"trail\") {\n\n return vega.pathTrail()\n .x(d => d.x)\n .y(d=> d.y)\n .size(d=> (isNumber(d.size) ? d.size : 2)) // 2 is default size in Vega\n .defined(d=>(d.defined || true))(newData);\n }\n }\n}\n\nexport function transformD(encodes, scales, signal, d, inherit = true) {\n const encode = encodes.primary || encodes;\n return Object.assign(\n {},\n Object.keys(encode)\n .filter(key => [\"x\", \"y\", \"angle\", \"yc\", \"xc\"].indexOf(key) >= 0)\n .reduce((acc, curr) => {\n const newVal = decodeEncode.bind(this)(\n curr,\n encodes,\n scales,\n signal,\n d\n );\n let prop = curr;\n if (isNaN(newVal)) {\n return acc;\n }\n if (curr === \"xc\") {\n prop = \"x\";\n } else if (curr === \"yc\") {\n prop = \"y\";\n }\n\n acc[prop] = isNaN(acc[prop]) ? newVal : acc[prop];\n return acc;\n }, {}),\n inherit ? d : {}\n );\n}\nexport\nfunction calculateGetValeus(encodes, scales, signals, computeScale, scNames) {\n return {\n update: {\n initial: (attr, getScales, d) => {\n const computedScales = computeScale(scales, scNames, getScales);\n return getPropVal(\n attr,\n encodes.initial.update,\n computedScales.initial,\n signals.initial,\n d\n );\n },\n final: (attr, getScales, d) => {\n const computedScales = computeScale(scales, scNames, getScales);\n return getPropVal(\n attr,\n encodes.final.update,\n computedScales.final,\n signals.final,\n d\n );\n },\n custom(attr, getScales, d_i, d_f) {\n const datum = {\n initial: d_i,\n final: d_f\n };\n\n const computedScales = computeScale(scales, scNames, getScales);\n return getPropVal.bind(this)(\n attr,\n encodes.final.update,\n computedScales,\n signals.final,\n datum\n );\n }\n },\n enter: {\n initial: (attr, getScales, d) => {\n const computedScales = computeScale(scales, scNames, getScales);\n\n return getPropVal(\n attr,\n encodes.initial.enter,\n { primary: computedScales.initial, secondary: computedScales.final },\n signals.initial,\n d\n );\n },\n final: (attr, getScales, d) => {\n const computedScales = computeScale(scales, scNames, getScales);\n return getPropVal(\n attr,\n encodes.final.enter,\n computedScales.final,\n signals.final,\n d\n );\n },\n custom(attr, getScales, d_i, d_f) {\n const datum = {\n initial: d_i,\n final: d_f\n };\n\n const computedScales = computeScale(scales, scNames, getScales);\n return getPropVal.bind(this)(\n attr,\n encodes.final.enter,\n computedScales,\n signals.final,\n datum\n );\n }\n },\n exit: {\n initial: (attr, getScales, d) => {\n const computedScales = computeScale(scales, scNames, getScales);\n return getPropVal(\n attr,\n encodes.initial.exit,\n computedScales.initial,\n signals.initial,\n d\n );\n },\n final: (attr, getScales, d) => {\n const computedScales = computeScale(scales, scNames, getScales);\n return getPropVal(\n attr,\n encodes.final.exit,\n { primary: computedScales.final, secondary: computedScales.initial },\n signals.final,\n d\n );\n },\n custom(attr, getScales, d_i, d_f) {\n const datum = {\n initial: d_i,\n final: d_f\n };\n\n const computedScales = computeScale(scales, scNames, getScales);\n return getPropVal.bind(this)(\n attr,\n encodes.final.exit,\n computedScales,\n signals.final,\n datum\n );\n }\n }\n };\n}\n\nfunction decodeEncode(prop, encodes, scales, signal, d) {\n let subScales = copy2(scales);\n if (scales.primary && scales.secondary) {\n subScales = scales.secondary;\n scales = scales.primary;\n } else if (scales.initial && scales.final) {\n scales = scales.final;\n }\n\n let encode = copy(encodes);\n let subEncode = copy(encodes);\n if (encodes.primary && encodes.secondary) {\n encode = encodes.primary;\n subEncode = encodes.secondary;\n } else if (encodes.initial && encodes.final) {\n subEncode = encode = encodes.final;\n }\n\n const enAttr = encode[prop];\n const subEnAttr = subEncode[prop];\n\n function getVal(enAttr, scales) {\n if (!enAttr) {\n return;\n }\n if (Array.isArray(enAttr)) {\n for (let i = 0; i < enAttr.length - 1; i++) {\n // Then the items should contain 'test' prop to test (except the last)\n if (evalSignalVal(enAttr[i].test, signal, scales, d.datum)) {\n return enAttr[i].value;\n }\n }\n enAttr = copy(enAttr[enAttr.length - 1]);\n }\n\n let finalVal = enAttr.value;\n if (enAttr.field) {\n if (enAttr.scale) {\n const scName = enAttr.scale;\n finalVal = scales[scName]\n ? scales[scName](d.datum[enAttr.field])\n : undefined;\n } else if (enAttr.field.group) {\n return d.mark.group[enAttr.field.group];\n } else {\n finalVal = d.datum[enAttr.field];\n }\n }\n if (enAttr.signal) {\n const val = evalSignalVal(enAttr.signal, signal, scales, d.datum);\n\n if (enAttr.scale) {\n const scName = enAttr.scale;\n finalVal = scales[scName] ? scales[scName](val) : undefined;\n } else {\n finalVal = val;\n }\n }\n if (enAttr.scale) {\n const scName = enAttr.scale;\n\n if (enAttr.value !== undefined) {\n finalVal = scales[scName] ? scales[scName](enAttr.value) : undefined;\n }\n\n if (enAttr.band) {\n const sc = scales[scName];\n let bw = sc && sc.type === \"band\" ? sc.bandwidth() : 0;\n bw = Math.round(\n bw *\n (enAttr.band === true || isNumber(enAttr.band) ? enAttr.band : 0.5)\n );\n finalVal = isNumber(finalVal) ? bw + finalVal : bw;\n }\n }\n\n if (enAttr.exp) {\n console.error(\"Todo decodeEncdoe with exp.\");\n }\n if (enAttr.mult) {\n if (isNumber(enAttr.mult)) {\n finalVal *= enAttr.mult;\n } else {\n finalVal *= decodeEncode(\n \"mult\",\n { mult: enAttr.mult },\n scales,\n signal,\n d\n );\n }\n }\n if (enAttr.offset) {\n if (isNumber(enAttr.offset)) {\n finalVal += enAttr.offset;\n } else {\n finalVal += decodeEncode(\n \"offset\",\n { offset: enAttr.offset },\n scales,\n signal,\n d\n );\n }\n }\n return finalVal;\n }\n const fValPrimary = getVal(enAttr, scales);\n const fValSecondary = getVal(subEnAttr, subScales);\n return fValPrimary !== undefined ? fValPrimary : fValSecondary;\n}\n\n\nfunction evalSignalVal(signalVal, signal, scales, datum) {\n const VEGA_FUNCTIONS = [\n {\n name: \"scale\",\n fn: (scName, val) => (scales[scName] ? scales[scName](val) : undefined)\n },\n { name: \"isValid\", fn: o => o !== null && o === o },\n { name: \"timeFormat\", fn: (a, b) => vega.timeFormat(b)(a) },\n { name: \"timeUnitSpecifier\", fn: (a, b) => vega.timeUnitSpecifier(a, b) }\n ];\n\n const codegen = vegaExpression.codegen({\n whitelist: [\"datum\"].concat(Object.keys(signal || {})),\n globalvar: \"global\"\n });\n\n\n VEGA_FUNCTIONS.forEach(fnDef => {\n codegen.functions[fnDef.name] = fnDef.name;\n });\n const extraFunctions = VEGA_FUNCTIONS.map(fnDef => fnDef.fn);\n const extraFunctionNames = VEGA_FUNCTIONS.map(fnDef => fnDef.name);\n\n const codegenVal = codegen(vegaExpression.parse(signalVal));\n\n const fn = Function(\n \"datum\",\n ...Object.keys(signal || {}),\n ...extraFunctionNames,\n `return (${codegenVal.code})`\n );\n return fn(\n datum,\n ...Object.keys(signal || {}).map(key => signal[key]),\n ...extraFunctions\n );\n\n}","import * as d3 from \"d3\";\nimport { flatten } from \"../util/util.js\";\nimport { getEaseFn } from \"./util\";\n\nconst ORDER = {\n ascending: d3.ascending,\n descending: d3.descending\n};\n\nfunction getOrderFn(isNumber, order) {\n if (isNumber && order) {\n return (a, b) => ORDER[order](Number(a), Number(b));\n }\n return ORDER[order];\n}\n\nfunction staggeredTiming(staggering, data, duration) {\n let N;\n let grouped;\n const dataWithTiming = data.map((d, i) => {\n return { ...d, __staggering_id__: i };\n });\n const subStaggering = staggering.staggering;\n\n const isNumber =\n staggering.by &&\n dataWithTiming.reduce((acc, d) => {\n let val;\n if (typeof staggering.by === \"string\") {\n val = (d.initial || d.final)[staggering.by];\n } else if (staggering.by.initial || staggering.by.final) {\n const which = staggering.by.initial ? \"initial\" : \"final\";\n val = (which === \"initial\"\n ? d.initial || d.final\n : d.final || d.initial)[staggering.by[which]];\n }\n return (acc = acc && (val !== undefined ? !isNaN(Number(val)) : true));\n }, true);\n if (!staggering.by) {\n grouped = d3\n .nest()\n .key(d => {\n const val = d.__staggering_id__;\n return val === undefined ? \"__empty__\" : val;\n })\n .sortKeys(getOrderFn(true, staggering.order))\n .entries(dataWithTiming);\n } else if (typeof staggering.by === \"string\") {\n grouped = d3\n .nest()\n .key(d => {\n const val = (d.initial || d.final)[staggering.by];\n return val === undefined ? \"__empty__\" : val;\n })\n .sortKeys(getOrderFn(isNumber, staggering.order))\n .entries(dataWithTiming);\n } else if (staggering.by.initial || staggering.by.final) {\n const which = staggering.by.initial ? \"initial\" : \"final\";\n grouped = d3\n .nest()\n .key(d => {\n const val = (which === \"initial\"\n ? d.initial || d.final\n : d.final || d.initial)[staggering.by[which]];\n return val === undefined ? \"__empty__\" : val;\n })\n .sortKeys(getOrderFn(isNumber, staggering.order))\n .entries(dataWithTiming);\n }\n\n N = grouped.length;\n\n const ease = getEaseFn(staggering.ease || \"linear\") || d3.easeLinear;\n const r = staggering.overlap === undefined ? 1 : staggering.overlap;\n const delta_e = i => ease((i + 1) / N) - ease(i / N);\n const alpha = 1 / (delta_e(0) * r + 1 - r);\n\n let durations = new Array(N).fill(0);\n durations = durations.map((d, i) => delta_e(i) * alpha * duration);\n let delayAcc = 0;\n const delays = durations.map((dur, i, durations) => {\n const currDelay = delayAcc;\n if (i < N - 1) {\n delayAcc = delayAcc + dur - durations[i + 1] * r;\n }\n return currDelay;\n });\n\n if (subStaggering) {\n const timings = delays.map((d, i) => {\n return {\n delay: d,\n duration: durations[i]\n };\n });\n\n timings.groups = grouped.map((g, i) => {\n return staggeredTiming(subStaggering, g.values, durations[i]);\n });\n\n return getFlattenTimings(timings);\n }\n grouped.forEach((group, i) => {\n group.values.forEach(datum => {\n datum.delay = delays[i];\n datum.duration = durations[i];\n });\n });\n\n return dataWithTiming;\n}\n\nfunction getFlattenTimings(timings) {\n if (!timings.groups) {\n return timings;\n }\n return flatten(\n timings.map((g_t, i) => {\n return getFlattenTimings(timings.groups[i]).map(t => {\n return Object.assign({}, t, { delay: t.delay + g_t.delay });\n });\n })\n );\n}\n\nexport { staggeredTiming };\n","import { staggeredTiming } from \"./staggering\";\n\nfunction computeTiming(initialData, finalData, stepTiming, joinKey, joinSet) {\n let timings = initialData.map((d_i, i) => {\n const key = joinKey(d_i, i, \"initial\");\n const found = finalData.find((d_f, j) => key === joinKey(d_f, j, \"final\"));\n return {\n initial: d_i.datum,\n final: found ? found.datum : null,\n set: found ? \"update\" : \"exit\",\n id: key,\n duration: stepTiming.duration,\n delay: stepTiming.delay\n };\n });\n timings = timings.concat(\n finalData\n .filter(d => joinSet(d) === \"enter\")\n .map((d, i) => {\n const key = joinKey(d, i, \"final\");\n return {\n initial: null,\n final: d.datum,\n set: \"enter\",\n id: key,\n duration: stepTiming.duration,\n delay: stepTiming.delay\n };\n })\n );\n\n if (stepTiming.staggering) {\n timings = staggeredTiming(\n stepTiming.staggering,\n timings,\n stepTiming.duration\n );\n }\n return timings;\n}\n\nfunction enumStepComputeTiming(enumerator, stepTiming) {\n // staggering\n let timings = enumerator.allKeys.map((d, i) => {\n let datum_i = enumerator.getDatum(d, 0);\n let datum_f = enumerator.getDatum(d, 0);\n for (let k = 1; k < enumerator.stopN; k++) {\n datum_i = datum_i || enumerator.getDatum(d, 0);\n datum_f = enumerator.getDatum(d, k) || datum_f;\n }\n\n return {\n initial: datum_i,\n final: datum_f,\n set: \"update\", // Todo\n id: i,\n key: d,\n duration: stepTiming.duration,\n delay: stepTiming.delay\n };\n });\n\n if (stepTiming.staggering) {\n timings = staggeredTiming(\n stepTiming.staggering,\n timings,\n stepTiming.duration\n );\n }\n timings = timings.sort((a, b) => a.id - b.id);\n return timings;\n}\n\nexport { computeTiming, enumStepComputeTiming };\n","import * as d3 from \"d3\";\nimport { findAfterSibling, propMap, getEaseFn, getJoinInfo, computeScale} from \"../util.js\";\nimport { getPropVal, fetchAttributes} from \"../attributeFetcher\";\nimport { getStyle } from \"../vega-render-util.js\";\nimport { computeTiming, enumStepComputeTiming } from \"../timings\";\n\nfunction markInterpolate(rawInfo, step, targetElm) {\n const joinKey = (d, i, initialOrFinal) => {\n return d.__gemini__ ?\n getJoinInfo(d, i, step, \"joinKey\") :\n (\n typeof(step.computeDatumId) === \"function\"\n ? step.computeDatumId(d, i)\n : step.computeDatumId[initialOrFinal || \"initial\"](d, i)\n );\n }; const joinSet = (d, i) => {\n return d.__gemini__ ? getJoinInfo(d, i, step, \"animSet\") : undefined;\n };\n\n const animVis = targetElm;\n const eView = rawInfo.eVis.view;\n\n const MARK_ATTRS = {\n rect: [\"rect\"],\n symbol: [\"symbol\"],\n rule: [\"rule\"],\n text: [\"text\", \"align\"]\n };\n\n return new Promise((resolve) => {\n const done = doneMaker();\n const timings = computeTiming(\n step.currData,\n step.nextData,\n step.timing,\n joinKey,\n joinSet\n );\n const {\n change,\n marktypes,\n scales,\n encodes,\n signals\n } = step;\n\n const isAdd = !change.initial && !!change.final,\n isRemove = !!change.initial && !change.final;\n // if (isValidMarktype(marktypes.initial) && isValidMarktype(marktypes.final) && marktypes.initial !== marktypes.final) {\n // isAdd = isRemove = true;\n // }\n const easeFn = getEaseFn(step.timing.ease);\n\n // let doUpdate = !isRemove && !isAdd && (change.encode !== false),\n // doEnter = !isRemove && (isAdd || change.encode !== false),\n // doExit = !isAdd && (isRemove || change.encode !== false);\n\n // if (change.encode) {\n // doUpdate = change.encode.update === false ? false : doUpdate;\n // doEnter = change.encode.enter === false ? false : doEnter;\n // doExit = change.encode.exit === false ? false : doExit;\n // }\n // doExit = true;\n // doEnter = true;\n let marktype;\n\n if (isRemove) {\n marktype = marktypes.initial;\n } else if (isAdd) {\n marktype = marktypes.final;\n } else if (\n marktypes.initial &&\n marktypes.final &&\n marktypes.initial !== marktypes.final\n ) {\n if (change.marktype === false) {\n marktype = marktypes.initial;\n } else {\n marktype = marktypes.final;\n }\n } else {\n marktype = marktypes.initial || marktypes.final;\n }\n\n const svgElmType = getSvgElmType(marktype);\n const svgElmTypes = {\n initial: getSvgElmType(marktypes.initial),\n final: getSvgElmType(marktypes.final)\n };\n\n let marks = d3.select(`${animVis } .mark-${marktype}.role-mark.${change.compName}`);\n\n\n if (\n isAdd ||\n (marktypes.initial !== marktypes.final &&\n isValidMarktype(marktypes.final))\n ) {\n const sib = findAfterSibling(eView.scenegraph().root, change.compName);\n\n marks = addMark(\n d3.select(`${animVis } .${change.final.parent.name} > g > g`),\n change.final,\n sib ? `.${sib.name}` : undefined\n );\n }\n\n if (step.enumerator) {\n if (!change.data) {\n console.error(\n \"Cannot apply enumerator for a mark interpolation without data change!\"\n );\n }\n const {enumerator} = step;\n let finalScaleNames = [];\n if (change.scale === true) {\n finalScaleNames = Object.keys(eView._runtime.scales);\n } else if (Array.isArray(change.scale)) {\n finalScaleNames = change.scale;\n }\n\n const getValues = {\n update: {\n initial(attr, getScales, d){\n\n let computedScales = computeScale(scales, finalScaleNames, getScales);\n return getPropVal.bind(this)(\n attr,\n encodes.initial.update,\n computedScales.initial,\n signals.initial,\n d);\n },\n\n final: function(attr, getScales, d){\n const computedScales = computeScale(scales, finalScaleNames, getScales);\n return getPropVal.bind(this)(\n attr,\n encodes.final.update,\n computedScales.final,\n signals.initial,\n d\n );\n },\n custom(attr, getScales, d_i, d_f) {\n let datum = {\n initial: d_i,\n final: d_f\n };\n\n let computedScales = computeScale(scales, finalScaleNames, getScales);\n return getPropVal.bind(this)(\n attr,\n encodes.final.update,\n computedScales,\n signals.final,\n datum);\n }\n },\n enter: {\n initial(attr, getScales, d){\n\n let computedScales = computeScale(scales, finalScaleNames, getScales);\n return getPropVal.bind(this)(\n attr,\n encodes.initial.enter,\n {primary: computedScales.initial, secondary: computedScales.final},\n signals.initial,\n d);\n },\n final(attr, getScales, d){\n let computedScales = computeScale(scales, finalScaleNames, getScales);\n return getPropVal.bind(this)(\n attr,\n encodes.final.enter,\n computedScales.final,\n signals.initial,\n d);\n\n },\n custom(attr, getScales, d_i, d_f){\n let datum = {\n initial: d_i,\n final: d_f\n };\n\n let computedScales = computeScale(scales, finalScaleNames, getScales);\n return getPropVal.bind(this)(\n attr,\n encodes.final.enter,\n computedScales,\n signals.final,\n datum);\n }\n },\n exit: {\n initial(attr, getScales, d){\n\n let computedScales = computeScale(scales, finalScaleNames, getScales);\n return getPropVal.bind(this)(\n attr,\n encodes.initial.exit,\n computedScales.initial,\n signals.initial,\n d);\n },\n final(attr, getScales, d){\n let computedScales = computeScale(scales, finalScaleNames, getScales);\n return getPropVal.bind(this)(\n attr,\n encodes.final.exit,\n {primary: computedScales.final, secondary: computedScales.initial},\n signals.final,\n d);\n },\n custom(attr, getScales, d_i, d_f){\n let datum = {\n initial: d_i,\n final: d_f\n };\n\n let computedScales = computeScale(scales, finalScaleNames, getScales);\n return getPropVal.bind(this)(\n attr,\n encodes.final.exit,\n computedScales,\n signals.final,\n datum);\n }\n }\n };\n // bind allKeys\n const newBoundMarks = marks\n .selectAll(svgElmType)\n .data(enumerator.allKeys, d => d);\n newBoundMarks.exit().remove();\n newBoundMarks.enter().append(svgElmType);\n\n const initialMarks = marks\n .selectAll(svgElmType)\n .filter(id => [\"update\", \"exit\"].indexOf(enumerator.set(id, 0)) >= 0);\n const allProps = MARK_ATTRS[marktype].reduce((acc, prop) => {\n return acc.concat(propMap(prop));\n }, []);\n allProps.forEach(p => {\n if (p.type === \"attrTween\") {\n const tempP = Object.assign({}, p, { type: \"attr\" });\n initialMarks[tempP.type](getStyle(tempP.val), id =>\n enumerator.getPropVal(tempP, getValues, 0, id)\n );\n } else if (p.type === \"text\") {\n initialMarks[p.type](id =>\n enumerator.getPropVal(p, getValues, 0, id)\n );\n } else {\n initialMarks[p.type](getStyle(p.val), id =>\n enumerator.getPropVal(p, getValues, 0, id)\n );\n }\n });\n\n\n\n // staggering\n const timings = enumStepComputeTiming(enumerator, step.timing);\n\n const animMarks = marks.selectAll(svgElmType).transition();\n\n allProps.forEach(p => {\n if (p.type === \"attr\") {\n animMarks.attrTween(p.val, function(d) {\n return enumerator.interpolateAlongEnumMaker(p, getValues, this)(d);\n });\n } else if (p.type === \"attrTween\") {\n animMarks.attrTween(p.val, function(d) {\n return enumerator.interpolateAlongEnumMaker(p, getValues, this)(d);\n });\n } else if (p.type === \"text\") {\n animMarks.tween(\"text\", function(d) {\n const textInterpolator = enumerator.interpolateAlongEnumMaker(\n p,\n getValues,\n this\n )(d);\n return function(t) {\n this.setAttribute(\"text\", textInterpolator(t));\n };\n });\n } else if (p.type === \"style\") {\n animMarks.styleTween(getStyle(p.val), d => {\n return enumerator.interpolateAlongEnumMaker(p, getValues, this)(d);\n });\n }\n });\n\n // interpolate them\n animMarks\n .duration((d, i) => timings[i].duration)\n .delay((d, i) => timings[i].delay)\n .ease(easeFn)\n .end()\n .then(() => {\n marks.selectAll(svgElmType).data(step.nextData);\n done(\"all\", () => {resolve();});\n });\n\n\n\n } else {\n // If there is a marktype change between different svgElmTypes\n if (marktypes.initial !== marktypes.final) {\n let animMarksI; let animMarksF;\n if (isValidMarktype(marktypes.initial)) {\n const marks = d3.select(\n animVis + ` .mark-${marktypes.initial}.role-mark.${change.compName}`\n );\n animMarksI = marks.selectAll(svgElmTypes.initial);\n const newTimings =\n marktypes.final && !isValidMarktype(marktypes.final)\n ? computeTiming(\n step.currData,\n step.unpackedData,\n step.timing,\n joinKey,\n joinSet\n )\n : timings;\n const prevData = d3.local();\n let nextData =\n marktypes.final && !isValidMarktype(marktypes.final)\n ? step.unpackedData\n : step.nextData;\n\n if (change.data || isAdd || isRemove) {\n animMarksI = animMarksI.data(step.currData);\n animMarksI.each(function(d) {\n prevData.set(this, d);\n });\n animMarksI = animMarksI.data(nextData, (d, i) =>\n joinKey(d, i, \"initial\")\n );\n } else {\n animMarksI.each(function(d) {\n prevData.set(this, d);\n });\n }\n\n exit(\n newTimings,\n animMarksI,\n marktypes.initial,\n {\n initial: encodes.initial.exit,\n final: encodes.final.exit\n },\n signals,\n prevData\n );\n\n update(\n newTimings,\n animMarksI,\n marktypes.initial,\n {\n initial: encodes.initial.update,\n final: encodes.initial.intermediate\n },\n // encode,\n signals,\n prevData,\n false,\n false\n );\n } else {\n done(\"exit\", () => {\n resolve();\n });\n }\n\n if (isValidMarktype(marktypes.final)) {\n const prevData = d3.local();\n let newTimings = marktypes.initial && !isValidMarktype(marktypes.initial) ? computeTiming(step.unpackedData, step.nextData, step.timing, joinKey, joinSet) : timings;\n let currData = !marktypes.initial\n ? []\n : !isValidMarktype(marktypes.initial)\n ? step.unpackedData\n : animMarksI.data();\n const marks = d3.select(\n animVis + ` .mark-${marktypes.final}.role-mark.${change.compName}`\n );\n animMarksF = marks\n .selectAll(svgElmTypes.final)\n .filter(d => !d)\n .data(currData);\n\n fetchAttributes(\n animMarksF.enter().append(svgElmTypes.final),\n MARK_ATTRS[marktypes.final],\n { primary: scales.initial, secondary: scales.final },\n signals.initial,\n encodes.final.intermediate\n );\n animMarksF = marks.selectAll(svgElmTypes.final);\n animMarksF.each(function(d) {\n prevData.set(this, d);\n });\n if (change.data || isAdd || isRemove) {\n animMarksF = animMarksF.data(step.nextData, (d, i) =>\n joinKey(d, i, \"final\")\n );\n }\n\n enter(newTimings, animMarksF, marktypes.final);\n // fade-in the new martype\n update(\n newTimings,\n animMarksF,\n marktypes.final,\n {\n initial: encodes.final.intermediate,\n final: encodes.final.update\n },\n signals,\n prevData,\n true,\n true\n );\n } else {\n done(\"update\", () => {\n resolve();\n });\n done(\"enter\", () => {\n resolve();\n });\n }\n } else {\n let animMarks = marks.selectAll(svgElmType);\n const prevData = d3.local();\n animMarks.each(function(d) {\n prevData.set(this, d);\n });\n if (change.data || isAdd || isRemove) {\n // let nextData = change.marktype === false ? step.unpackedData : step.nextData;\n\n if (step.preFetchCurrData) {\n animMarks = animMarks.data(step.currData);\n }\n\n animMarks = animMarks.data(step.nextData, (d, i) => {\n // console.log(joinKey(d, i));\n return joinKey(d, i);\n });\n }\n\n // enter\n enter(timings, animMarks, marktype);\n\n // exit\n exit(\n timings,\n animMarks,\n marktype,\n {\n initial: encodes.initial.exit, // encodes.final.exit,\n final: encodes.final.exit\n },\n signals,\n prevData\n );\n\n update(\n timings,\n animMarks,\n marktype,\n {\n initial: encodes.initial.update, // encodes.final.update,\n final: encodes.final.update\n },\n signals,\n prevData\n );\n }\n }\n function enter(\n timings,\n animMarks,\n marktype,\n encodeInitial = encodes.initial.enter,\n encode = encodes.final.enter\n ) {\n // enter\n let enterI = animMarks.enter().append(getSvgElmType(marktype));\n fetchAttributes(\n enterI,\n MARK_ATTRS[marktype],\n // Todo: When using the final scale, it should use the final encode as well.\n { primary: scales.initial, secondary: scales.final },\n signals.initial,\n {\n primary: encodeInitial,\n secondary: Object.assign({}, encode, { opacity: { value: 0 } })\n }\n );\n\n // If they are already entered,\n if (enterI.data().length <= 0) {\n enterI = animMarks.filter((d, i) => joinSet(d, i) === \"enter\");\n }\n if (enterI.data().length > 0) {\n // if (doEnter && enterI.data().length > 0) {\n const setType = \"final\";\n const enterF = enterI.transition();\n\n fetchAttributes(\n enterF,\n MARK_ATTRS[marktype],\n scales.final,\n signals.final,\n {\n initial: {\n primary: encodeInitial,\n secondary: Object.assign({}, encode, { opacity: { value: 0 } })\n },\n final: encode\n }\n );\n\n enterF\n .duration(\n (d, i) =>\n timings.find(t => t.id === joinKey(d, i, setType)).duration\n )\n .delay(\n (d, i) => timings.find(t => t.id === joinKey(d, i, setType)).delay\n )\n .ease(easeFn)\n .end()\n .then(() => {\n done(\"enter\", () => {resolve();});\n });\n } else {\n done(\"enter\", () => {\n resolve();\n });\n }\n }\n function exit(timings, animMarks, marktype, encode, signals, prevData) {\n // exit\n // initiate exit\n let exitI = animMarks.exit();\n // If they are already entered,\n if (exitI.data().length <= 0) {\n exitI = animMarks.filter((d, i) => joinSet(d, i) === \"exit\");\n }\n if (exitI.data().length > 0) {\n // if (doExit && exitI.data().length > 0) {\n const setType = \"initial\";\n const exitF = exitI.transition();\n\n fetchAttributes(\n exitF,\n MARK_ATTRS[marktype],\n Object.assign({}, scales, {\n primary: scales.final,\n secondary: scales.initial\n }),\n signals,\n encode || encodes.final.exit,\n prevData\n );\n\n exitF\n .duration(\n (d, i) =>\n timings.find(t => t.id === joinKey(d, i, setType)).duration\n )\n .delay(\n (d, i) => timings.find(t => t.id === joinKey(d, i, setType)).delay\n )\n .ease(easeFn)\n .remove()\n .end()\n .then(function() {\n done(\"exit\", () => {resolve();});\n });\n // Todo: when should we remove exit-marks?\n } else {\n done(\"exit\", () => {\n resolve();\n });\n }\n }\n function update(\n timings,\n animMarks,\n marktype,\n encodes,\n signals,\n prevData,\n doStatusUpdate = true,\n filterUpdate = true\n ) {\n let updateF = filterUpdate\n ? animMarks.filter((d, i) => joinSet(d, i) === \"update\")\n : animMarks;\n if (change.data === false && updateF.data().length === 0) {\n updateF = animMarks;\n }\n\n if (updateF.data().length > 0) {\n const setType = \"initial\"; // Actually, it also can be 'final'.\n updateF = updateF.transition();\n\n fetchAttributes(\n updateF,\n MARK_ATTRS[marktype],\n scales,\n signals,\n encodes,\n prevData\n );\n updateF\n .duration(\n (d, i) =>\n timings.find(t => t.id === joinKey(d, i, setType)).duration\n )\n .delay(\n (d, i) => timings.find(t => t.id === joinKey(d, i, setType)).delay\n )\n .ease(easeFn)\n .end()\n .then(() => {\n if (doStatusUpdate) {\n done(\"update\", () => {resolve();});\n }\n });\n } else if (doStatusUpdate) {\n done(\"update\", () => {resolve();});\n }\n }\n });\n function isValidMarktype(marktype) {\n return !!MARK_ATTRS[marktype];\n }\n}\nfunction doneMaker() {\n const transitionStatus = {\n update: false,\n enter: false,\n exit: false\n };\n\n return function(which, cb, args) {\n if (which === \"all\") {\n transitionStatus.update = transitionStatus.enter = transitionStatus.exit = true;\n } else {\n transitionStatus[which] = true;\n }\n if (\n transitionStatus.update &&\n transitionStatus.enter &&\n transitionStatus.exit\n ) {\n cb(args);\n }\n };\n}\n\n\nfunction addMark(d3Selection, compSpec, before) {\n return d3Selection\n .insert(\"g\", before)\n .attr(\"class\", `mark-${compSpec.type} role-mark ${compSpec.name}`);\n}\nfunction getSvgElmType(markType){\n switch (markType) {\n case \"rect\":\n case \"symbol\":\n return \"path\";\n case \"rule\":\n return \"line\";\n case \"text\":\n return \"text\";\n default:\n\n }\n}\nexport { markInterpolate };\n","import * as d3 from \"d3\";\nimport { propMap, getEaseFn, findAfterSibling, getJoinInfo, computeScale, isLinearMarktype } from \"../util.js\";\nimport { getPropVal, fetchAttributes} from \"../attributeFetcher\";\nimport { getStyle } from \"../vega-render-util.js\";\nimport { computeTiming, enumStepComputeTiming } from \"../timings\";\n\nfunction areaLineInterpolate(rawInfo, step, targetElm) {\n const joinKey = (d, i, initialOrFinal) => {\n return d.__gemini__ ?\n getJoinInfo(d, i, step, \"joinKey\") :\n ( typeof(step.computeDatumId) === \"function\"\n ? step.computeDatumId(d, i)\n : step.computeDatumId[initialOrFinal || \"final\"](d, i));\n }; const joinSet = (d, i) => {\n return d.__gemini__ ? getJoinInfo(d, i, step, \"animSet\") : undefined;\n };\n const MARK_ATTRS = {\n area: [{ name: \"area\", tweaks: [] }],\n line: [{ name: \"line\", tweaks: [] }],\n trail: [{ name: \"trail\", tweaks: [] }]\n };\n const tweaks = [{ type: \"attrTween\", val: \"d\", interpolateStyle: \"update\" }];\n const MARK_ATTRS_DATA_INTERPOLATE = {\n area: [{ name: \"area\", tweaks}],\n line: [{ name: \"line\", tweaks}],\n trail: [{ name: \"trail\", tweaks}]\n };\n\n\n // Get Timing\n\n const animVis = targetElm;\n const eView = rawInfo.eVis.view;\n const transitionStatus = {\n update: false,\n enter: false,\n exit: false\n };\n\n function done(which, cb, args) {\n if (which === \"all\") {\n transitionStatus.update = transitionStatus.enter = transitionStatus.exit = true;\n } else {\n transitionStatus[which] = true;\n }\n if (\n transitionStatus.update &&\n transitionStatus.enter &&\n transitionStatus.exit\n ) {\n cb(args);\n }\n }\n function isAreaLineMarktype(marktype) {\n return !!MARK_ATTRS[marktype];\n }\n\n return new Promise((resolve) => {\n const timings = computeTiming(\n step.currData,\n step.nextData,\n step.timing,\n joinKey,\n joinSet\n );\n const {change} = step;\n const easeFn = getEaseFn(step.timing.ease);\n const {marktypes} = step;\n\n const isAdd = !change.initial && !!change.final,\n isRemove = !!change.initial && !change.final;\n\n let marktype;\n if (\n marktypes.initial &&\n marktypes.final &&\n marktypes.initial !== marktypes.final\n ) {\n if (change.marktype === false) {\n marktype = marktypes.initial;\n } else {\n marktype = marktypes.final;\n }\n } else if (isRemove) {\n marktype = marktypes.initial;\n } else if (isAdd) {\n marktype = marktypes.final;\n } else {\n marktype = marktypes.initial || marktypes.final;\n }\n const {hasFacet} = step;\n // collect the scale objects to scale the initial/final values\n const {scales} = step;\n const {encodes} = step;\n const {signals} = step;\n\n if (isAdd || !isAreaLineMarktype(marktypes.initial)) {\n if (hasFacet.final) {\n const sib = findAfterSibling(\n eView.scenegraph().root,\n change.final.parent.name\n );\n\n addMark(\n d3.select(`${animVis } .${change.final.parent.parent.name} > g > g`),\n change.final,\n sib ? `.${sib.name}` : undefined,\n { hasGroup: true }\n );\n } else {\n const sib = findAfterSibling(eView.scenegraph().root, change.compName);\n\n addMark(\n d3.select(`${animVis } .${change.final.parent.name} > g > g`),\n change.final,\n sib ? `.${sib.name}` : undefined\n );\n }\n }\n\n if (step.enumerator) {\n let finalScaleNames = [];\n if (change.scale === true) {\n finalScaleNames = Object.keys(eView._runtime.scales);\n } else if (Array.isArray(change.scale)) {\n finalScaleNames = change.scale;\n }\n\n\n const {enumerator} = step;\n const getValues = {\n update: {\n initial: (attr, getScales, d) => {\n const computedScales = computeScale(scales, finalScaleNames, getScales);\n return getPropVal(\n attr,\n encodes.initial.update,\n computedScales.initial,\n signals.initial,\n d\n );\n },\n final: (attr, getScales, d) => {\n const computedScales = computeScale(scales, finalScaleNames, getScales);\n return getPropVal(\n attr,\n encodes.final.update,\n computedScales.final,\n signals.final,\n d\n );\n },\n custom: (attr, getScales, d_i, d_f) => {\n const pahtData = {\n initial: d_i.items[0].items[0],\n final: d_f.items[0].items[0]\n };\n const nuancedAttr = Object.assign({}, attr, {\n interpolateStyle: \"update\"\n });\n const computedScales = computeScale(scales, finalScaleNames, getScales);\n\n return getPropVal.bind(this)(\n change.scale ? attr : nuancedAttr,\n encodes.final.update,\n change.scale ? computedScales : computedScales.final,\n signals.final,\n pahtData\n );\n }\n },\n enter: {\n initial: (attr, getScales, d) => {\n const computedScales = computeScale(scales, finalScaleNames, getScales);\n\n return getPropVal(\n attr,\n encodes.initial.enter,\n {\n primary: computedScales.initial,\n secondary: computedScales.final\n },\n signals.initial,\n d\n );\n },\n final: (attr, getScales, d) => {\n const computedScales = computeScale(scales, finalScaleNames, getScales);\n return getPropVal(\n attr,\n encodes.final.enter,\n computedScales.final,\n signals.final,\n d\n );\n },\n custom(attr, getScales, d_i, d_f){\n let pahtData = {\n initial: change.scale ? d_f.items[0].items[0] : { mark: { items:[] } },\n final: d_f.items[0].items[0]\n };\n let nuancedAttr = Object.assign({}, attr, {interpolateStyle: \"update\"});\n let computedScales = computeScale(scales, finalScaleNames, getScales);\n\n return getPropVal.bind(this)(\n change.scale ? attr : nuancedAttr,\n encodes.final.update,\n change.scale ? computedScales : computedScales.final,\n signals.final,\n pahtData);\n }\n },\n exit: {\n initial: (attr, getScales, d) => {\n const computedScales = computeScale(scales, finalScaleNames, getScales);\n return getPropVal(\n attr,\n encodes.initial.exit,\n computedScales.initial,\n signals.initial,\n d\n );\n },\n final: (attr, getScales, d) => {\n const computedScales = computeScale(scales, finalScaleNames, getScales);\n return getPropVal(\n attr,\n encodes.final.exit,\n {\n primary: computedScales.final,\n secondary: computedScales.initial\n },\n signals.final,\n d\n );\n },\n custom: (attr, getScales, d_i) => {\n const pahtData = {\n initial: d_i.items[0].items[0],\n final: change.scale\n ? d_i.items[0].items[0]\n : { mark: { items: [] } }\n };\n\n const computedScales = computeScale(scales, finalScaleNames, getScales);\n const nuancedAttr = Object.assign({}, attr, {\n interpolateStyle: \"update\"\n });\n return getPropVal.bind(this)(\n change.scale ? attr : nuancedAttr,\n encodes.final.exit,\n change.scale ? computedScales : computedScales.initial,\n signals.final,\n pahtData\n );\n }\n }\n };\n if (hasFacet.initial && hasFacet.final) {\n // bind allKeys\n let markGs = d3\n .selectAll(animVis + ` .role-scope.${change.final.parent.name} > g`)\n .attr(\"class\", \"__sub\");\n markGs = d3\n .select(animVis + ` .role-scope.${change.final.parent.name}`)\n .selectAll(\".__sub\");\n markGs = markGs.data(enumerator.allKeys, d => d);\n markGs.exit().remove();\n markGs = markGs.enter().append(\"g\");\n markGs.append(\"path\").attr(\"class\", \"background\");\n\n // append mark mark\n let marks = markGs\n .append(\"g\")\n .append(\"g\")\n .attr(\"class\", `${marktype}-mark role-mark ${change.compName}`)\n .append(\"path\");\n\n const initialMarks = marks.filter(\n id => [\"update\", \"exit\"].indexOf(enumerator.set(id, 0)) >= 0\n );\n const allProps = MARK_ATTRS[marktype].reduce((acc, prop) => {\n return acc.concat(propMap(prop));\n }, []);\n\n // init\n allProps.forEach(p => {\n if (p.type === \"attrTween\") {\n const tempP = Object.assign({}, p, { type: \"attr\" });\n initialMarks[tempP.type](getStyle(tempP.val), id =>\n enumerator.getPropVal(tempP, getValues, 0, id)\n );\n } else {\n initialMarks[p.type](getStyle(p.val), id =>\n enumerator.getPropVal(p, getValues, 0, id)\n );\n }\n });\n\n const timings = enumStepComputeTiming(enumerator, step.timing);\n\n marks = marks.transition();\n\n allProps.forEach(p => {\n if (p.type === \"attr\") {\n marks.attrTween(p.val, function(d) {\n return enumerator.interpolateAlongEnumMaker(\n p,\n getValues,\n this\n )(d);\n });\n } else if (p.type === \"attrTween\") {\n marks.attrTween(p.val, function(d) {\n return enumerator.interpolateAlongEnumMaker(\n p,\n getValues,\n this\n )(d);\n });\n } else if (p.type === \"text\") {\n marks.tween(\"text\", function(d) {\n const textInterpolator = enumerator.interpolateAlongEnumMaker(\n p,\n getValues,\n this\n )(d);\n return function(t) {\n this.innerHTML = textInterpolator(t);\n };\n });\n } else if (p.type === \"style\") {\n marks.styleTween(getStyle(p.val), function(d) {\n return enumerator.interpolateAlongEnumMaker(\n p,\n getValues,\n this\n )(d);\n });\n }\n });\n\n // interpolate them\n marks\n .duration((d, i) => timings[i].duration)\n .delay((d, i) => timings[i].delay)\n .ease(easeFn)\n .end()\n .then(() => {\n done(\"all\", () => {\n resolve();\n });\n });\n } else if (!hasFacet.initial && !hasFacet.final) {\n let mark = d3\n .select(animVis + ` .mark-${marktype}.role-mark.${change.compName}`)\n .selectAll(\"path\");\n\n mark = mark.data(enumerator.allKeys, d => d);\n mark.exit().remove();\n mark = mark.enter().append(\"path\");\n\n const allProps = MARK_ATTRS[marktype].reduce((acc, prop) => {\n return acc.concat(propMap(prop));\n }, []);\n\n // init\n allProps.forEach(p => {\n if (p.type === \"attrTween\") {\n const tempP = Object.assign({}, p, { type: \"attr\" });\n mark[tempP.type](getStyle(tempP.val), id =>\n enumerator.getPropVal(tempP, getValues, 0, id)\n );\n } else {\n mark[p.type](getStyle(p.val), id =>\n enumerator.getPropVal(p, getValues, 0, id)\n );\n }\n });\n\n const timings = enumStepComputeTiming(enumerator, step.timing);\n\n mark = mark.transition();\n\n allProps.forEach(p => {\n if (p.type === \"attr\") {\n mark.attrTween(p.val, function(d) {\n return enumerator.interpolateAlongEnumMaker(\n p,\n getValues,\n this\n )(d);\n });\n } else if (p.type === \"attrTween\") {\n mark.attrTween(p.val, function(d) {\n return enumerator.interpolateAlongEnumMaker(\n p,\n getValues,\n this\n )(d);\n });\n } else if (p.type === \"text\") {\n mark.tween(\"text\", function(d) {\n const textInterpolator = enumerator.interpolateAlongEnumMaker(\n p,\n getValues,\n this\n )(d);\n return function(t) {\n this.innerHTML = textInterpolator(t);\n };\n });\n } else if (p.type === \"style\") {\n mark.styleTween(getStyle(p.val), function(d) {\n return enumerator.interpolateAlongEnumMaker(\n p,\n getValues,\n this\n )(d);\n });\n }\n });\n\n // interpolate them\n mark\n .duration((d, i) => timings[i].duration)\n .delay((d, i) => timings[i].delay)\n .ease(easeFn)\n .end()\n .then(() => {\n done(\"all\", () => {\n resolve();\n });\n });\n }\n } else if (marktypes.initial && !isAreaLineMarktype(marktypes.initial)) {\n // when marktype changes from other marks to area/line mark\n\n const setType = \"final\"; const marktype = marktypes.final;\n const prevData = d3.local();\n\n if (hasFacet.final) {\n const timings = computeTiming(\n step.groupedData,\n step.nextData,\n step.timing,\n joinKey,\n joinSet\n );\n let markGs = d3.selectAll(\n animVis + ` .role-scope.${change.final.parent.name} > g`\n );\n markGs = d3\n .select(`${animVis } .role-scope.${change.final.parent.name}`)\n .selectAll(`.role-scope.${change.final.parent.name} > g`)\n .data(step.groupedData, (d, i) => joinKey(d, i, setType));\n\n // append group mark\n const enterIG = markGs.enter().append(\"g\");\n enterIG.append(\"path\").attr(\"class\", \"background\");\n\n // append mark mark\n const enterIMark = enterIG\n .append(\"g\")\n .append(\"g\")\n .attr(\"class\", `mark-${marktype} role-mark ${change.compName}`)\n .append(\"path\");\n\n fetchAttributes(\n enterIMark,\n MARK_ATTRS[marktype],\n { primary: scales.initial, secondary: scales.final },\n signals.initial,\n encodes.final.intermediate\n );\n\n markGs = d3\n .select(`${animVis } .role-scope.${change.final.parent.name}`)\n .selectAll(`.role-scope.${change.final.parent.name} > g`);\n\n markGs.each(function(d) {\n prevData.set(this, d);\n });\n markGs = markGs.data(step.nextData, (d, i) => joinKey(d, i, setType));\n\n update(\n timings,\n markGs,\n marktype,\n {\n initial: encodes.final.intermediate,\n final: encodes.final.update\n },\n prevData\n );\n\n enter(timings, markGs, marktype);\n\n done(\"exit\", () => resolve());\n } else {\n let mark = d3\n .select(animVis + ` .mark-${marktype}.role-mark.${change.compName}`)\n .selectAll(\"path\");\n mark = mark.data(step.groupedData);\n\n const enterI = mark.enter().append(\"path\");\n\n fetchAttributes(\n enterI,\n MARK_ATTRS[marktype],\n { primary: scales.initial, secondary: scales.final },\n signals.initial,\n encodes.final.intermediate\n );\n\n let enterF = d3\n .select(\n animVis + ` .mark-${marktypes.final}.role-mark.${change.compName}`\n )\n .selectAll(\"path\");\n enterF.each(function(d) {\n prevData.set(this, d);\n });\n\n enterF = enterF.data(step.nextData).transition();\n\n fetchAttributes(\n enterF,\n MARK_ATTRS[marktypes.final], // MARK_ATTRS_DATA_INTERPOLATE[marktype],\n scales,\n signals.final,\n encodes.final.update,\n prevData\n );\n\n enterF\n .duration(step.timing.duration)\n .delay(step.timing.delay)\n .ease(easeFn)\n .end()\n .then(() => {\n done(\"all\", () => {resolve();});\n });\n\n }\n } else if (marktypes.final && !isAreaLineMarktype(marktypes.final)) {\n // when marktype changes from area/line to the other marktypes\n // exit\n const timings = computeTiming(\n step.currData,\n step.groupedData,\n step.timing,\n joinKey,\n joinSet\n );\n const prevData = d3.local();\n const setType = \"initial\"; const marktype = marktypes.initial;\n if (hasFacet.initial) {\n let markGs = d3.selectAll(\n animVis + ` .role-scope.${change.initial.parent.name} > g`\n );\n markGs = d3\n .select(`${animVis } .role-scope.${change.initial.parent.name}`)\n .selectAll(`.role-scope.${change.initial.parent.name} > g`);\n\n markGs.each(function(d) {\n prevData.set(this, d);\n });\n markGs = markGs.data(step.groupedData, (d, i) =>\n joinKey(d, i, setType)\n );\n\n exit(\n timings,\n markGs,\n marktype,\n {\n initial: encodes.initial.exit,\n final: encodes.final.exit\n },\n prevData,\n \"initial\"\n );\n\n update(\n timings,\n markGs,\n marktype,\n {\n initial: encodes.initial.update,\n final: encodes.initial.intermediate\n },\n prevData\n );\n done(\"enter\", () => resolve());\n } else {\n let mark = d3\n .select(animVis + ` .mark-${marktype}.role-mark.${change.compName}`)\n .selectAll(\"path\");\n mark.each(function(d) {\n prevData.set(this, d);\n });\n mark = mark.data(step.groupedData).transition();\n // fade-out by the exit encoding\n\n fetchAttributes(\n mark,\n MARK_ATTRS[marktype],\n Object.assign({}, scales, {\n primary: scales.final,\n secondary: scales.initial\n }),\n signals.final,\n {\n initial: encodes.initial.update,\n final: encodes.initial.intermediate\n },\n prevData\n );\n\n mark\n .duration(step.duration)\n .delay(step.delay)\n .ease(easeFn)\n // .remove()\n .end()\n .then(function() {\n done(\"all\", () => {resolve();});\n });\n }\n } else if ((isRemove || hasFacet.final) && (isAdd || hasFacet.initial)) {\n // When adding or removing or changing marks with pathGroup\n const parentName = isAdd\n ? change.final.parent.name\n : isRemove\n ? change.initial.parent.name\n : change.initial.type === marktypes.initial\n ? change.initial.parent.name\n : change.final.parent.name;\n let markGs = d3\n .selectAll(animVis + ` .role-scope.${parentName} > g`)\n .attr(\"class\", \"__sub\");\n\n markGs = d3\n .select(animVis + ` .role-scope.${parentName}`)\n .selectAll(\".__sub\");\n const prevData = d3.local();\n markGs.each(function(d) {\n prevData.set(this, d);\n });\n if (change.data || isAdd || isRemove) {\n markGs = markGs.data(step.nextData, (d, i) => joinKey(d, i));\n }\n\n // enter\n // if (doEnter) {\n enter(timings, markGs, marktypes.final); // , encodes.initial.enter, encodes.final.enter, \"final\")\n\n // exit\n // if (doExit) {\n exit(\n timings,\n markGs,\n marktypes.initial,\n {\n initial: encodes.initial.exit,\n final: encodes.final.exit\n },\n prevData,\n \"initial\"\n );\n\n // finalize update\n // if (doUpdate) {\n\n update(\n timings,\n markGs,\n marktypes,\n {\n initial: encodes.initial.update,\n final: encodes.final.update\n },\n prevData\n );\n\n } else if ((isRemove || !hasFacet.final) && (isAdd || !hasFacet.initial)) {\n // When adding or removing or updating a single mark without pathgroup\n\n const markG = d3.select(\n animVis + ` .mark-${marktypes.initial}.role-mark.${change.compName}`\n );\n let mark = markG.selectAll(\"path\");\n const prevData = d3.local();\n mark.each(function(d) {\n prevData.set(this, d);\n });\n if (change.data || isAdd || isRemove) {\n mark = mark.data(step.nextData);\n }\n\n // enter\n\n const enterI = mark.enter().append(\"path\");\n\n fetchAttributes(\n enterI,\n MARK_ATTRS[marktype],\n { primary: scales.initial, secondary: scales.final },\n signals.initial,\n encodes.initial.enter\n );\n if (enterI.data().length > 0) {\n let enterF = enterI.transition();\n\n fetchAttributes(\n enterF,\n MARK_ATTRS[marktype], // MARK_ATTRS_DATA_INTERPOLATE[marktype],\n scales.final,\n signals.final,\n encodes.final.enter\n );\n\n enterF\n .duration(step.timing.duration)\n .delay(step.timing.delay)\n .ease(easeFn)\n .end()\n .then(() => {\n done(\"enter\", () => {resolve();});\n });\n } else {\n done(\"enter\", () => {\n resolve();\n });\n }\n\n\n // exit\n\n // initiate exit\n const exitI = mark.exit();\n\n if (exitI.data().length > 0) {\n // finalize exit\n const exitF = exitI.transition();\n\n fetchAttributes(\n exitF,\n MARK_ATTRS[marktype], // MARK_ATTRS_DATA_INTERPOLATE[marktype],\n { primary: scales.final, secondary: scales.initial },\n signals.final,\n encodes.final.exit\n );\n\n exitF\n .duration((d, i) => step.timing.duration)\n .delay((d, i) => step.timing.delay)\n .ease(easeFn)\n .end()\n .then(function() {\n done(\"exit\", () => {resolve();});\n });\n } else {\n done(\"exit\", () => {\n resolve();\n });\n }\n\n\n // finalize update\n\n if (mark.data().length > 0) {\n if (marktypes.initial !== marktypes.final) {\n markG.classed(`mark-${marktypes.initial}`, false);\n markG.classed(`mark-${marktypes.final}`, true);\n }\n\n const updateF = mark.transition();\n\n fetchAttributes(\n updateF,\n getProp(marktypes),\n scales,\n signals.final,\n {\n initial: encodes.initial.update,\n final: encodes.final.update\n },\n prevData\n );\n updateF\n .duration(step.timing.duration)\n .delay(step.timing.delay)\n .ease(easeFn)\n .end()\n .then(() => {\n done(\"update\", () => {resolve();});\n });\n } else {\n done(\"update\", () => {\n resolve();\n });\n }\n\n\n } else if (!hasFacet.initial && hasFacet.final) {\n // single mark without pathgroup -> marks with pathgroup\n const prevData = d3.local();\n\n // Remove the single area\n let exitMark = d3\n .select(\n animVis + ` .mark-${marktypes.initial}.role-mark.${change.compName}`\n )\n .selectAll(\"path\");\n exitMark = exitMark\n .each(function(d) {\n prevData.set(this, d);\n })\n .transition();\n\n fetchAttributes(\n exitMark,\n MARK_ATTRS[marktypes.initial], // MARK_ATTRS_DATA_INTERPOLATE[marktypes.initial],\n Object.assign({}, scales, {\n primary: scales.final,\n secondary: scales.initial\n }),\n signals.final,\n Object.assign({}, encodes.initial.exit, { opacity: { value: 0 } }),\n prevData\n );\n\n exitMark\n .duration((d, i) => timings.find(t => t.set === \"exit\").duration)\n .delay((d, i) => timings.find(t => t.set === \"exit\").delay)\n .ease(easeFn)\n .remove()\n .end()\n .then(function() {\n d3.select(`${animVis } .mark-${marktypes.initial}.role-mark.${change.compName}`).remove();\n done(\"exit\", () => {resolve();});\n });\n\n // Add pathgroup with marks\n const {parent} = change.final;\n const sib = findAfterSibling(eView.scenegraph().root, parent.name);\n\n addMark(\n d3.select(`${animVis } .${parent.parent.name} > g > g`),\n change.final,\n sib ? `.${sib.name}` : undefined,\n { hasGroup: true }\n );\n\n const markGs = d3\n .select(animVis + ` .role-scope.${parent.name}`)\n .selectAll(\"g\")\n .data(step.nextData);\n\n // append group mark\n const enterIG = markGs.enter().append(\"g\");\n enterIG.append(\"path\").attr(\"class\", \"background\");\n // d (rect)\n // fill (none)\n\n // append mark mark\n const enterIMark = enterIG\n .append(\"g\")\n .append(\"g\")\n .attr(\"class\", `${marktypes.final}-mark role-mark ${change.compName}`)\n .append(\"path\");\n\n fetchAttributes(\n enterIMark,\n MARK_ATTRS[marktypes.final],\n { primary: scales.initial, secondary: scales.final },\n signals.initial,\n Object.assign({}, encodes.final.enter, { opacity: { value: 0 } })\n // encodes.initial.enter\n );\n\n const enterFMark = enterIMark\n .each(function(d) {\n prevData.set(this, d);\n })\n .transition();\n\n fetchAttributes(\n enterFMark,\n MARK_ATTRS[marktypes.final],\n scales,\n signals.final,\n encodes.final.enter,\n prevData\n );\n\n enterFMark\n .duration(\n (d, i) => timings.find(t => t.id === joinKey(d, i, \"final\")).duration\n )\n .delay(\n (d, i) => timings.find(t => t.id === joinKey(d, i, \"final\")).delay\n )\n .ease(easeFn)\n .end()\n .then(() => {\n done(\"enter\", () => {resolve();});\n });\n done(\"update\", () => {\n resolve();\n });\n } else if (hasFacet.initial && !hasFacet.final) {\n // marks with pathgroup -> single mark without pathgroup\n\n const {parent} = change.initial,\n prevData = d3.local();\n // Remove the pathgroup and the marks\n\n let exitMarks = d3\n .select(animVis + ` .role-scope.${parent.name}`)\n .selectAll(` .role-scope.${parent.name} > g`)\n .data(step.currData)\n .select(`.${change.compName} > path`)\n .each(function(d) {\n prevData.set(this, d);\n });\n\n exitMarks = exitMarks.transition();\n\n fetchAttributes(\n exitMarks,\n // MARK_ATTRS_DATA_INTERPOLATE[marktype],\n MARK_ATTRS[marktypes.initial],\n Object.assign({}, scales, {\n primary: scales.final,\n secondary: scales.initial\n }),\n signals.final,\n Object.assign({}, encodes.initial.exit, { opacity: { value: 0 } }),\n prevData\n );\n\n exitMarks\n .duration(\n (d, i) =>\n timings.find(t => t.id === joinKey(d, i, \"initial\")).duration\n )\n .delay(\n (d, i) => timings.find(t => t.id === joinKey(d, i, \"initial\")).delay\n )\n .ease(easeFn)\n .remove()\n .end()\n .then(function() {\n done(\"exit\", () => {resolve();});\n });\n\n // Add the single area\n const sib = findAfterSibling(eView.scenegraph().root, change.compName);\n\n let enterIMark = addMark(\n d3.select(`${animVis } .${change.final.parent.name} > g > g`),\n change.final,\n sib ? `.${sib.name}` : undefined\n );\n\n enterIMark = enterIMark\n .selectAll(\"path\")\n .data(step.nextData)\n .enter()\n .append(\"path\");\n\n fetchAttributes(\n enterIMark,\n MARK_ATTRS[marktypes.final],\n { primary: scales.initial, secondary: scales.final },\n signals.initial,\n Object.assign({}, encodes.final.enter, { opacity: { value: 0 } })\n );\n\n enterIMark.each(function(d) {\n prevData.set(this, d);\n });\n const enterF = enterIMark.transition();\n\n fetchAttributes(\n enterF,\n MARK_ATTRS[marktypes.final],\n scales,\n signals.final,\n encodes.final.enter,\n prevData\n );\n\n enterF\n .duration((d, i) => timings.find(t => t.set === \"enter\").duration)\n .delay((d, i) => timings.find(t => t.set === \"enter\").delay)\n .ease(easeFn)\n .end()\n .then(() => {\n done(\"enter\", () => {resolve();});\n });\n done(\"update\", () => {\n resolve();\n });\n }\n\n function getProp(marktypes) {\n const marktype =\n typeof marktypes === \"string\" ? marktypes : marktypes.final;\n const props = change.data && (isLinearMarktype(marktype)) ?\n MARK_ATTRS_DATA_INTERPOLATE[marktype] :\n MARK_ATTRS[marktype];\n if (\n isAreaLineMarktype(marktypes.initial) &&\n isAreaLineMarktype(marktypes.final) &&\n marktypes.final !== marktypes.initial\n ) {\n props[0].tweaks.push({\n type: \"attrTween\",\n val: \"d\",\n initialMarktype: marktypes.initial,\n interpolateStyle: \"update\"\n });\n props[0].tweaks.push({\n type: \"style\",\n val: \"fill\",\n initialMarktype: marktypes.initial,\n asTween: true\n });\n props[0].tweaks.push({\n type: \"style\",\n val: \"stroke\",\n initialMarktype: marktypes.initial\n });\n }\n return props;\n }\n function exit(\n timings,\n markGs,\n marktype,\n encodes,\n prevData,\n setType,\n isAllDone = false\n ) {\n // initiate exit\n let exitI = markGs.exit();\n\n // If they are already entered,\n if (exitI.data().length === 0 || !(change.data || isAdd || isRemove)) {\n exitI = markGs.filter(d => joinSet(d) === \"exit\");\n }\n if (exitI.data().length > 0) {\n const exitIMark = exitI.select(`.${change.compName} > path`);\n\n // finalize exit\n const exitFMark = exitIMark.transition();\n\n fetchAttributes(\n exitFMark,\n MARK_ATTRS[marktype],\n Object.assign({}, scales, {\n primary: scales.final,\n secondary: scales.initial\n }),\n signals.final,\n encodes,\n prevData\n );\n\n exitFMark\n .duration(\n (d, i) =>\n timings.find(t => t.id === joinKey(d, i, setType)).duration\n )\n .delay(\n (d, i) => timings.find(t => t.id === joinKey(d, i, setType)).delay\n )\n .ease(easeFn)\n .remove()\n .end()\n .then(function() {\n exitI.remove();\n done(isAllDone ? \"all\" : \"exit\", () => {resolve();});\n });\n } else {\n done(isAllDone ? \"all\" : \"exit\", () => {\n resolve();\n });\n }\n }\n function update(timings, markGs, marktypes, encodes, prevData) {\n let updateF = markGs.filter(d => joinSet(d) === \"update\");\n\n if (change.data === false && updateF.data().length === 0) {\n updateF = markGs;\n }\n let updateFMark = updateF.select(`.${change.compName}`);\n if (marktypes.initial !== marktypes.final) {\n updateFMark.classed(`mark-${marktypes.initial}`, false);\n updateFMark.classed(`mark-${marktypes.final}`, true);\n }\n updateFMark = updateFMark.select(\"path\");\n if (updateFMark.data().length > 0) {\n updateFMark = updateFMark.transition();\n const props = getProp(marktypes);\n fetchAttributes(\n updateFMark,\n props,\n // change.data ? MARK_ATTRS_DATA_INTERPOLATE[marktype] : MARK_ATTRS[marktype],\n scales,\n signals.final,\n encodes,\n prevData\n );\n updateFMark\n .duration(\n (d, i) => timings.find(t => t.id === joinKey(d, i)).duration\n )\n .delay((d, i) => timings.find(t => t.id === joinKey(d, i)).delay)\n .ease(easeFn)\n .end()\n .then(() => {\n done(\"update\", () => {resolve();});\n });\n } else {\n done(\"update\", () => {\n resolve();\n });\n }\n }\n function enter(\n timings,\n markGs,\n marktype,\n encodeInitial = encodes.initial.enter,\n encode = encodes.final.enter\n ) {\n // append group mark\n const enterIG = markGs.enter().append(\"g\");\n enterIG.append(\"path\").attr(\"class\", \"background\");\n\n // append mark mark\n let enterIMark = enterIG\n .append(\"g\")\n .append(\"g\")\n .attr(\"class\", `mark-${marktype} role-mark ${change.compName}`)\n .append(\"path\");\n\n fetchAttributes(\n enterIMark,\n MARK_ATTRS[marktype],\n { primary: scales.initial, secondary: scales.final },\n signals.initial,\n encodeInitial\n );\n\n // If they are already entered,\n if (enterIG.data().length === 0 || !(change.data || isAdd || isRemove)) {\n enterIMark = markGs\n .filter(d => joinSet(d) === \"enter\")\n .selectAll(`.${change.compName} > path`);\n }\n\n if (enterIMark.data().length > 0) {\n const prevData = d3.local();\n enterIMark.each(function(d) {\n prevData.set(this, d);\n });\n const enterFMark = enterIMark.transition();\n\n fetchAttributes(\n enterFMark,\n // MARK_ATTRS_DATA_INTERPOLATE[marktype],\n MARK_ATTRS[marktype],\n scales,\n signals.final,\n encode,\n prevData\n );\n\n enterFMark\n .duration(\n (d, i) =>\n timings.find(t => t.id === joinKey(d, i, \"final\")).duration\n )\n .delay(\n (d, i) => timings.find(t => t.id === joinKey(d, i, \"final\")).delay\n )\n .ease(easeFn)\n .end()\n .then(() => {\n done(\"enter\", () => {resolve();});\n });\n } else {\n done(\"enter\", () => {\n resolve();\n });\n }\n }\n });\n\n}\nfunction addMark (d3Selection, compSpec, before, opt = {}) {\n if (opt.hasGroup) {\n return d3Selection.insert(\"g\", before)\n .attr(\"class\", `mark-group role-scope ${compSpec.parent.name}`);\n }\n return d3Selection.insert(\"g\", before)\n .attr(\"class\", `mark-${compSpec.type} role-mark ${compSpec.name}`);\n\n}\n\nexport { areaLineInterpolate };\n","import * as d3 from \"d3\";\nimport {\n propMap,\n getEaseFn,\n findAfterSibling,\n getJoinInfo,\n findComp,\n computeScale\n} from \"./util\";\nimport { fetchAttributes, getPropVal } from \"./attributeFetcher\";\nimport { getStyle, transformItem } from \"./vega-render-util\";\nimport { copy } from \"../util/util\";\nimport { computeTiming, enumStepComputeTiming } from \"./timings\";\nimport { DEFAULT_ENCODE } from \"../default\";\n\nconst INITIAL_STATUS = {\n update: false,\n enter: false,\n exit: false\n};\n\nfunction addAxis(d3Selection, newAxisScene, prior) {\n const scName = newAxisScene.name;\n const axisSubG = d3Selection\n .insert(\"g\", prior)\n .attr(\"class\", `mark-group role-axis ${scName}`)\n .append(\"g\")\n .attr(\"transform\", transformItem(newAxisScene.items[0]));\n\n const { datum } = newAxisScene.items[0];\n if (datum.ticks) {\n axisSubG.append(\"g\").attr(\"class\", \"mark-rule role-axis-tick\");\n }\n if (datum.labels) {\n axisSubG.append(\"g\").attr(\"class\", \"mark-text role-axis-label\");\n }\n if (datum.grid) {\n axisSubG.append(\"g\").attr(\"class\", \"mark-rule role-axis-grid\");\n }\n if (datum.domain) {\n axisSubG.append(\"g\").attr(\"class\", \"mark-rule role-axis-domain\");\n }\n if (datum.title) {\n axisSubG.append(\"g\").attr(\"class\", \"mark-text role-axis-title\");\n }\n\n return d3Selection;\n}\n\nfunction doneMaker(subComponents) {\n const transitionStatus = subComponents.reduce((acc, curr) => {\n acc[curr] = copy(INITIAL_STATUS);\n return acc;\n }, {});\n\n return function(which, cb) {\n if (which.length === 2) {\n if (which[1] === \"all\") {\n transitionStatus[which[0]].exit = true;\n transitionStatus[which[0]].enter = true;\n transitionStatus[which[0]].update = true;\n } else {\n transitionStatus[which[0]][which[1]] = true;\n }\n } else if (which === \"all\") {\n transitionStatus.update = true;\n transitionStatus.enter = true;\n transitionStatus.exit = true;\n } else {\n transitionStatus[which] = true;\n }\n\n const allDone = Object.keys(transitionStatus).reduce((acc, key) => {\n return (\n acc &&\n transitionStatus[key].update &&\n transitionStatus[key].enter &&\n transitionStatus[key].exit\n );\n }, true);\n if (allDone) {\n cb();\n }\n };\n}\nfunction axisInterpolate(rawInfo, step, targetElm) {\n function joinKeyGen(subcomp) {\n return (d, i, initialOrFinal = \"initial\") => {\n if (!d) {\n return i.toString();\n }\n if (!d.__gemini__) {\n return typeof step.computeDatumId[subcomp] === \"function\"\n ? step.computeDatumId[subcomp](d, i)\n : step.computeDatumId[subcomp][initialOrFinal](d, i);\n // return step.computeDatumId[subcomp](d, i);\n }\n return getJoinInfo(d, i, step, \"joinKey\");\n };\n }\n const joinSet = (d, i) => getJoinInfo(d, i, step, \"animSet\");\n const animVis = targetElm;\n const eView = rawInfo.eVis.view;\n\n const done = doneMaker([\"tick\", \"label\", \"grid\", \"title\", \"domain\"]);\n\n return new Promise(resolve => {\n // Mark Interpolate Data\n\n const { change } = step;\n const easeFn = getEaseFn(step.timing.ease);\n\n let defaultDo = true;\n if (change.encode === false) {\n defaultDo = false;\n }\n let doTicks = defaultDo;\n let doLabels = defaultDo;\n let doAxisG = defaultDo;\n let doTitle = defaultDo;\n let doDomain = defaultDo;\n let doGrid = defaultDo;\n\n if (change.encode) {\n doTicks = !(change.encode.ticks === false);\n doLabels = !(change.encode.labels === false);\n doAxisG = !(change.encode.axis === false);\n doTitle = !(change.encode.title === false);\n doGrid = !(change.encode.grid === false);\n doDomain = !(change.encode.domain === false);\n }\n\n let isRemove = false;\n let axis = d3.selectAll(`${animVis} .role-axis.${change.compName}`);\n\n const scName = change.compName;\n // collect the scale objects to scale the initial/final values\n const { scales } = step;\n const { signals } = step;\n\n // Add Axis\n if (change.initial === null) {\n // todo: find where-to-add d3Selection by searching eView.scenegraph\n const rootMark = d3.select(`${animVis} .mark-group.root g g `);\n const rootScene = eView.scenegraph().root;\n const sib = findAfterSibling(rootScene, change.compName);\n addAxis(\n rootMark,\n findComp(rootScene, scName, \"axis\")[0],\n sib ? `.${sib.name}` : undefined\n );\n axis = d3.selectAll(`${animVis} .role-axis.${change.compName}`);\n } else if (change.final === null) {\n // Remove Axis\n isRemove = true;\n }\n\n // update axis group\n if (isRemove) {\n const manualEncode =\n change.encode && change.encode.axis ? change.encode.axis.exit : {};\n const axisG = axis.select(\"g\");\n const fAxisG = axisG.transition();\n fetchAttributes(\n fAxisG,\n [\"group\"],\n scales.final,\n signals.final,\n Object.assign({}, DEFAULT_ENCODE.axis.axis.exit, manualEncode)\n );\n fAxisG.duration(step.duration);\n } else if (doAxisG) {\n const axisG = axis.select(\"g\");\n axisG.data(step.nextData.axis);\n const fAxisG = axisG.transition();\n fetchAttributes(\n fAxisG,\n [\"group\"],\n scales.final,\n signals.final,\n step.encodes.axis.final.update\n );\n fAxisG\n .delay(step.delay)\n .duration(step.duration)\n .ease(easeFn);\n }\n\n function calculateGetValues(encodes) {\n return {\n update: {\n initial: (attr, getScales, d) => {\n const computedScales = computeScale(scales, [scName], getScales);\n return getPropVal(\n attr,\n encodes.initial.update,\n computedScales.initial,\n signals.initial,\n d\n );\n },\n final: (attr, getScales, d) => {\n const computedScales = computeScale(scales, [scName], getScales);\n return getPropVal(\n attr,\n encodes.final.update,\n computedScales.final,\n signals.final,\n d\n );\n }\n },\n enter: {\n initial: (attr, getScales, d) => {\n const computedScales = computeScale(scales, [scName], getScales);\n\n return getPropVal(\n attr,\n encodes.initial.enter,\n computedScales.initial[scName]\n ? computedScales.initial\n : computedScales.final,\n signals.initial,\n d\n );\n },\n final: (attr, getScales, d) => {\n const computedScales = computeScale(scales, [scName], getScales);\n return getPropVal(\n attr,\n encodes.final.enter,\n computedScales.final,\n signals.final,\n d\n );\n }\n },\n exit: {\n initial: (attr, getScales, d) => {\n const computedScales = computeScale(scales, [scName], getScales);\n return getPropVal(\n attr,\n encodes.initial.exit,\n computedScales.initial,\n signals.initial,\n d\n );\n },\n final: (attr, getScales, d) => {\n const computedScales = computeScale(scales, [scName], getScales);\n return getPropVal(\n attr,\n encodes.final.exit,\n computedScales.final,\n signals.final,\n d\n );\n }\n }\n };\n }\n // update tick\n if (doTicks) {\n const tickG = axis.selectAll(\".role-axis-tick\");\n const encodes = step.encodes.ticks;\n\n const TICK_ATTRS = [\"tick\"];\n\n if (step.enumerator) {\n const enumerator = step.enumerator.tick;\n const getValues = calculateGetValues(encodes);\n // bind allKeys\n const newBoundTicks = tickG\n .selectAll(\"line\")\n .data(enumerator.allKeys, d => d);\n newBoundTicks.exit().remove();\n newBoundTicks.enter().append(\"line\");\n const allProps = TICK_ATTRS.reduce((acc, prop) => {\n return acc.concat(propMap(prop));\n }, []);\n const initialTicks = tickG\n .selectAll(\"line\")\n .filter(id => [\"update\", \"exit\"].indexOf(enumerator.set(id, 0)) >= 0);\n allProps.forEach(p => {\n if (p.type === \"attrTween\") {\n const tempP = Object.assign({}, p, { type: \"attr\" });\n initialTicks[tempP.type](getStyle(tempP.val), id =>\n enumerator.getPropVal(tempP, getValues, 0, id)\n );\n } else if (p.type === \"text\") {\n initialTicks[p.type](id =>\n enumerator.getPropVal(p, getValues, 0, id)\n );\n } else {\n initialTicks[p.type](getStyle(p.val), id =>\n enumerator.getPropVal(p, getValues, 0, id)\n );\n }\n });\n\n const timings = enumStepComputeTiming(enumerator, step.timing);\n const ticks = tickG.selectAll(\"line\").transition();\n\n allProps.forEach(p => {\n if (p.type === \"attr\") {\n ticks.attrTween(p.val, d => {\n return enumerator.interpolateAlongEnumMaker(p, getValues)(d);\n });\n } else if (p.type === \"text\") {\n ticks.tween(\"text\", function(d) {\n const textInterpolator = enumerator.interpolateAlongEnumMaker(\n p,\n getValues\n )(d);\n return function(t) {\n this.innerHTML = textInterpolator(t);\n };\n });\n } else if (p.type === \"style\") {\n ticks.styleTween(getStyle(p.val), d => {\n return enumerator.interpolateAlongEnumMaker(p, getValues)(d);\n });\n }\n });\n\n // interpolate them\n ticks\n .duration((d, i) => timings[i].duration)\n .delay((d, i) => timings[i].delay)\n .ease(easeFn)\n .end()\n .then(() => {\n done([\"tick\", \"all\"], () => {\n resolve();\n });\n });\n } else {\n let ticks = tickG.selectAll(\"line\");\n const currData = step.currData.tick;\n const newData = step.nextData.tick;\n const joinKey = joinKeyGen(\"tick\");\n const timings = computeTiming(\n currData,\n newData,\n step.timing,\n joinKey,\n joinSet\n );\n\n ticks = ticks.data(newData, d => joinKey(d));\n let enterTicksI = ticks.enter().append(\"line\");\n fetchAttributes(\n enterTicksI,\n TICK_ATTRS,\n step.sameDomainDimension\n ? { primary: scales.initial, secondary: scales.final }\n : { primary: scales.final, secondary: scales.initial },\n signals.initial,\n encodes.initial.enter\n );\n\n if (enterTicksI.data().length <= 0) {\n enterTicksI = ticks.filter(d => joinSet(d) === \"enter\");\n }\n\n const enterTicksF = enterTicksI.transition();\n fetchAttributes(\n enterTicksF,\n TICK_ATTRS,\n scales.final,\n signals.final,\n encodes.final.enter\n );\n enterTicksF\n .duration(\n (d, i) =>\n timings.find(t => t.id === joinKey(d, i, \"final\")).duration\n )\n .delay(\n (d, i) => timings.find(t => t.id === joinKey(d, i, \"final\")).delay\n )\n .ease(easeFn)\n .end()\n .then(done([\"tick\", \"enter\"], () => resolve()));\n\n let exitTicksI = ticks.exit();\n if (exitTicksI.data().length <= 0) {\n exitTicksI = ticks.filter(d => joinSet(d) === \"exit\");\n }\n\n const exitTicksF = exitTicksI.transition();\n fetchAttributes(\n exitTicksF,\n TICK_ATTRS,\n // scales.final[scName] ? scales.final : scales.initial,\n step.sameDomainDimension\n ? { primary: scales.final, secondary: scales.initial }\n : { primary: scales.initial, secondary: scales.final }, // { primary: scales.final, secondary: scales.initial },\n signals.final,\n encodes.final.exit\n );\n exitTicksF\n .duration(\n (d, i) =>\n timings.find(t => t.id === joinKey(d, i, \"initial\")).duration\n )\n .delay(\n (d, i) => timings.find(t => t.id === joinKey(d, i, \"initial\")).delay\n )\n .ease(easeFn)\n .remove()\n .end()\n .then(done([\"tick\", \"exit\"], () => resolve()));\n\n if (true && ticks.data().length > 0) {\n ticks = ticks.filter(d => joinSet(d) === \"update\").transition();\n // finalize the update set of the ticks\n fetchAttributes(\n ticks,\n TICK_ATTRS,\n scales.final,\n signals.final,\n encodes.final.update\n );\n\n ticks\n .duration(\n (d, i) => timings.find(t => t.id === joinKey(d, i)).duration\n )\n .delay((d, i) => timings.find(t => t.id === joinKey(d, i)).delay)\n .ease(easeFn)\n .end()\n .then(done([\"tick\", \"update\"], () => resolve()));\n } else {\n done([\"tick\", \"update\"], () => resolve());\n }\n }\n } else {\n done([\"tick\", \"enter\"], () => resolve());\n done([\"tick\", \"exit\"], () => resolve());\n done([\"tick\", \"update\"], () => resolve());\n }\n\n // update label\n const labelG = axis.selectAll(\".role-axis-label\");\n\n const LABEL_ATTRS = [\"text\", \"align\"];\n // const LABEL_ATTRS = [ \"text\" ];\n\n if (!labelG.empty() && doLabels) {\n const encodes = step.encodes.labels;\n\n if (step.enumerator) {\n const enumerator = step.enumerator.label;\n\n const getValues = calculateGetValues(encodes);\n // bind allKeys\n const newBoundLabels = labelG\n .selectAll(\"text\")\n .data(enumerator.allKeys, d => d);\n newBoundLabels.exit().remove();\n newBoundLabels.enter().append(\"text\");\n const allProps = LABEL_ATTRS.reduce((acc, prop) => {\n return acc.concat(propMap(prop));\n }, []);\n const initialLabels = labelG\n .selectAll(\"text\")\n .filter(id => [\"update\", \"exit\"].indexOf(enumerator.set(id, 0)) >= 0);\n allProps.forEach(p => {\n if (p.type === \"attrTween\") {\n const tempP = Object.assign({}, p, { type: \"attr\" });\n initialLabels[tempP.type](getStyle(tempP.val), id =>\n enumerator.getPropVal(tempP, getValues, 0, id)\n );\n } else if (p.type === \"text\") {\n initialLabels[p.type](id =>\n enumerator.getPropVal(p, getValues, 0, id)\n );\n } else {\n initialLabels[p.type](getStyle(p.val), id =>\n enumerator.getPropVal(p, getValues, 0, id)\n );\n }\n });\n\n const labels = labelG.selectAll(\"text\").transition();\n const timings = enumStepComputeTiming(enumerator, step.timing);\n allProps.forEach(p => {\n if (p.type === \"attr\") {\n labels.attrTween(p.val, d => {\n return enumerator.interpolateAlongEnumMaker(p, getValues)(d);\n });\n } else if (p.type === \"text\") {\n labels.tween(\"text\", function(d) {\n const textInterpolator = enumerator.interpolateAlongEnumMaker(\n p,\n getValues\n )(d);\n return function(t) {\n this.innerHTML = textInterpolator(t);\n };\n });\n } else if (p.type === \"style\") {\n labels.styleTween(getStyle(p.val), d => {\n return enumerator.interpolateAlongEnumMaker(p, getValues)(d);\n });\n }\n });\n\n // interpolate them\n labels\n .duration((d, i) => timings[i].duration)\n .delay((d, i) => timings[i].delay)\n .ease(easeFn)\n .end()\n .then(() => {\n done([\"label\", \"all\"], () => {\n resolve();\n });\n });\n } else {\n let labels = labelG.selectAll(\"text\");\n const currData = step.currData.label;\n const newData = step.nextData.label;\n const joinKey = joinKeyGen(\"label\");\n const timings = computeTiming(\n currData,\n newData,\n step.timing,\n joinKey,\n joinSet\n );\n const prevData = d3.local();\n labels.each(function(d) {\n prevData.set(this, d);\n });\n labels = labels.data(newData, d => joinKey(d));\n\n let enterLabelI = labels.enter().append(\"text\");\n fetchAttributes(\n enterLabelI,\n LABEL_ATTRS,\n step.sameDomainDimension\n ? { primary: scales.initial, secondary: scales.final }\n : { primary: scales.final, secondary: scales.initial }, // { primary: scales.final, secondary: scales.initial },\n signals.initial,\n encodes.initial.enter\n );\n\n // entered labels\n\n if (enterLabelI.data().length <= 0) {\n enterLabelI = labels.filter(d => joinSet(d) === \"enter\");\n }\n\n const enterLabelF = enterLabelI.transition();\n fetchAttributes(\n enterLabelF,\n LABEL_ATTRS,\n scales.final,\n signals.final,\n encodes.final.enter\n );\n enterLabelF\n .duration(\n (d, i) =>\n timings.find(t => t.id === joinKey(d, i, \"final\")).duration\n )\n .delay(\n (d, i) => timings.find(t => t.id === joinKey(d, i, \"final\")).delay\n )\n .ease(easeFn)\n .end()\n .then(done([\"label\", \"enter\"], () => resolve()));\n\n // exit labels\n let exitLabelI = labels.exit();\n if (exitLabelI.data().length <= 0) {\n exitLabelI = labels.filter(d => joinSet(d) === \"exit\");\n }\n\n const exitLabelF = exitLabelI.transition();\n fetchAttributes(\n exitLabelF,\n LABEL_ATTRS,\n step.sameDomainDimension\n ? { primary: scales.final, secondary: scales.initial }\n : { primary: scales.initial, secondary: scales.final }, // { primary: scales.final, secondary: scales.initial },\n signals.final,\n encodes.final.exit,\n prevData\n );\n exitLabelF\n .duration(\n (d, i) =>\n timings.find(t => t.id === joinKey(d, i, \"initial\")).duration\n )\n .delay(\n (d, i) => timings.find(t => t.id === joinKey(d, i, \"initial\")).delay\n )\n .ease(easeFn)\n .remove()\n .end()\n .then(done([\"label\", \"exit\"], () => resolve()));\n\n // Todo update labels!!\n if (true && labels.data().length > 0) {\n labels = labels.filter(d => joinSet(d) === \"update\").transition();\n // finalize the update set of the labels\n fetchAttributes(\n labels,\n LABEL_ATTRS,\n scales.final,\n signals.final,\n encodes.final.update,\n prevData\n );\n\n labels\n .duration(\n (d, i) => timings.find(t => t.id === joinKey(d, i)).duration\n )\n .delay((d, i) => timings.find(t => t.id === joinKey(d, i)).delay)\n .ease(easeFn)\n .end()\n .then(done([\"label\", \"update\"], () => resolve()));\n } else {\n done([\"label\", \"update\"], () => resolve());\n }\n }\n } else {\n done([\"label\", \"enter\"], () => resolve());\n done([\"label\", \"exit\"], () => resolve());\n done([\"label\", \"update\"], () => resolve());\n }\n\n // update grid\n let gridG = axis.selectAll(\".role-axis-grid\");\n const GRID_ATTRS = [\"grid\"];\n\n if (\n (!step.change.initial || step.change.initial.grid === false) &&\n step.change.final &&\n step.change.final.grid === true\n ) {\n // add grid\n gridG = axis\n .select(\"g\")\n .select(\"g\")\n .append(\"g\")\n .attr(\"class\", \"mark-rule role-axis-grid\");\n }\n if (!gridG.empty() && doGrid) {\n const encodes = step.encodes.grid;\n\n if (step.enumerator) {\n const enumerator = step.enumerator.grid;\n\n const getValues = calculateGetValues(encodes);\n\n // bind allKeys\n const newBoundGrids = gridG\n .selectAll(\"line\")\n .data(enumerator.allKeys, d => d);\n newBoundGrids.exit().remove();\n newBoundGrids.enter().append(\"line\");\n const initialGrids = gridG\n .selectAll(\"line\")\n .filter(id => [\"update\", \"exit\"].indexOf(enumerator.set(id, 0)) >= 0);\n // init\n const allProps = GRID_ATTRS.reduce((acc, prop) => {\n return acc.concat(propMap(prop));\n }, []);\n\n allProps.forEach(p => {\n if (p.type === \"attrTween\") {\n const tempP = Object.assign({}, p, { type: \"attr\" });\n initialGrids[tempP.type](getStyle(tempP.val), id =>\n enumerator.getPropVal(tempP, getValues, 0, id)\n );\n } else if (p.type === \"text\") {\n initialGrids[p.type](id =>\n enumerator.getPropVal(p, getValues, 0, id)\n );\n } else {\n initialGrids[p.type](getStyle(p.val), id =>\n enumerator.getPropVal(p, getValues, 0, id)\n );\n }\n });\n\n const grids = gridG.selectAll(\"line\").transition();\n const timings = enumStepComputeTiming(enumerator, step.timing);\n\n allProps.forEach(p => {\n if (p.type === \"attr\") {\n grids.attrTween(p.val, d => {\n return enumerator.interpolateAlongEnumMaker(p, getValues)(d);\n });\n } else if (p.type === \"text\") {\n grids.tween(\"text\", function(d) {\n const textInterpolator = enumerator.interpolateAlongEnumMaker(\n p,\n getValues\n )(d);\n return function(t) {\n this.innerHTML = textInterpolator(t);\n };\n });\n } else if (p.type === \"style\") {\n grids.styleTween(getStyle(p.val), d => {\n return enumerator.interpolateAlongEnumMaker(p, getValues)(d);\n });\n }\n });\n\n // interpolate them\n grids\n .duration((d, i) => timings[i].duration)\n .delay((d, i) => timings[i].delay)\n .ease(easeFn)\n .end()\n .then(() => {\n done([\"grid\", \"all\"], () => {\n resolve();\n });\n });\n } else {\n let grids = gridG.selectAll(\"line\");\n const currData = step.currData.grid;\n const newData = step.nextData.grid;\n const joinKey = joinKeyGen(\"grid\");\n const timings = computeTiming(\n currData,\n newData,\n step.timing,\n joinKey,\n joinSet\n );\n const prevData = d3.local();\n grids.each(function(d) {\n prevData.set(this, d);\n });\n grids = grids.data(newData, d => joinKey(d));\n let enterGridI = grids.enter().append(\"line\");\n fetchAttributes(\n enterGridI,\n GRID_ATTRS,\n // scales.initial[scName] ? scales.initial : scales.final,\n step.sameDomainDimension\n ? { primary: scales.initial, secondary: scales.final }\n : { primary: scales.final, secondary: scales.initial },\n signals.initial,\n encodes.initial.enter\n );\n\n if (enterGridI.data().length <= 0) {\n enterGridI = grids.filter(d => joinSet(d) === \"enter\");\n }\n\n const enterGridF = enterGridI.transition();\n fetchAttributes(\n enterGridF,\n GRID_ATTRS,\n scales.final,\n signals.final,\n encodes.final.enter\n );\n enterGridF\n .duration(\n (d, i) =>\n timings.find(t => t.id === joinKey(d, i, \"final\")).duration\n )\n .delay(\n (d, i) => timings.find(t => t.id === joinKey(d, i, \"final\")).delay\n )\n .ease(easeFn)\n .end()\n .then(done([\"grid\", \"enter\"], () => resolve()));\n\n let exitGridI = grids.exit();\n if (exitGridI.data().length <= 0) {\n exitGridI = grids.filter(d => joinSet(d) === \"exit\");\n }\n\n const exitGridF = exitGridI.transition();\n\n fetchAttributes(\n exitGridF,\n GRID_ATTRS,\n step.sameDomainDimension\n ? { primary: scales.final, secondary: scales.initial }\n : { primary: scales.initial, secondary: scales.final },\n // scales.final[scName] ? scales.final : scales.initial,\n signals.final,\n encodes.final.exit,\n prevData\n );\n exitGridF\n .duration(\n (d, i) =>\n timings.find(t => t.id === joinKey(d, i, \"initial\")).duration\n )\n .delay(\n (d, i) => timings.find(t => t.id === joinKey(d, i, \"initial\")).delay\n )\n .ease(easeFn)\n .remove()\n .end()\n .then(done([\"grid\", \"exit\"], () => resolve()));\n\n grids = grids.filter(d => joinSet(d) === \"update\").transition();\n // finalize the update set of the grids\n fetchAttributes(\n grids,\n GRID_ATTRS,\n scales.final,\n signals.final,\n encodes.final.update,\n prevData\n );\n\n grids\n .duration(\n (d, i) => timings.find(t => t.id === joinKey(d, i)).duration\n )\n .delay((d, i) => timings.find(t => t.id === joinKey(d, i)).delay)\n .ease(easeFn)\n .end()\n .then(done([\"grid\", \"update\"], () => resolve()));\n }\n } else {\n done([\"grid\", \"enter\"], () => resolve());\n done([\"grid\", \"exit\"], () => resolve());\n done([\"grid\", \"update\"], () => resolve());\n }\n // update title\n const TITLE_ATTRS = [\"title\", \"align\"];\n const titleG = axis.selectAll(\".role-axis-title\");\n if (!titleG.empty() && doTitle) {\n // Assume that there is no data binding (no enter and exit)\n\n const encodes = step.encodes.title;\n let title = titleG.selectAll(\"text\");\n\n const iData = title.data();\n let fData = [];\n if (!isRemove) {\n\n if (step.change.scale === false) {\n fData = iData;\n } else {\n fData = eView._runtime.data[scName].values.value[0].items.filter(\n item => item.role === \"axis-title\"\n )[0].items;\n }\n }\n\n title.data(iData, d => d.text);\n title = title.data(fData, d => d.text);\n const enterTitleI = title.enter().append(\"text\");\n\n fetchAttributes(\n enterTitleI,\n TITLE_ATTRS,\n {},\n signals.initial,\n encodes.initial.enter\n );\n\n const enterTitleF = enterTitleI.transition();\n fetchAttributes(\n enterTitleF,\n TITLE_ATTRS,\n {},\n signals.final,\n encodes.final.enter\n );\n enterTitleF\n .duration(step.duration)\n .delay(step.delay)\n .ease(easeFn)\n .end()\n .then(done([\"title\", \"enter\"], () => resolve()));\n\n const exitTitleI = title.exit();\n const exitTitleF = exitTitleI.transition();\n fetchAttributes(\n exitTitleF,\n TITLE_ATTRS,\n {},\n signals.final,\n encodes.final.exit\n );\n exitTitleF\n .duration(step.duration)\n .delay(step.delay)\n .ease(easeFn)\n .end()\n .then(done([\"title\", \"exit\"], () => resolve()));\n\n title = title.transition();\n // update the title\n fetchAttributes(\n title,\n TITLE_ATTRS,\n {},\n signals.final,\n encodes.final.update\n );\n\n title\n .duration(step.duration)\n .delay(step.delay)\n .ease(easeFn)\n .end()\n .then(done([\"title\", \"update\"], () => resolve()));\n } else {\n done([\"title\", \"enter\"], () => resolve());\n done([\"title\", \"exit\"], () => resolve());\n done([\"title\", \"update\"], () => resolve());\n }\n\n // update domain\n const DOMAIN_ATTRS = [\"domain\"];\n\n const domainG = axis.selectAll(\".role-axis-domain\");\n if (!domainG.empty() && doDomain) {\n const encodes = step.encodes.domain;\n let fData = [];\n if (!isRemove) {\n fData = eView._runtime.data[scName].values.value[0].items.filter(\n item => item.role === \"axis-domain\"\n )[0].items;\n }\n let domain = domainG.selectAll(\"line\").data(fData);\n\n const iDomainEnter = domain.enter().append(\"line\");\n fetchAttributes(\n iDomainEnter,\n DOMAIN_ATTRS,\n {},\n signals.initial,\n encodes.initial.enter\n );\n const fDomainEnter = iDomainEnter.transition();\n fetchAttributes(\n fDomainEnter,\n DOMAIN_ATTRS,\n {},\n signals.final,\n encodes.final.enter\n );\n fDomainEnter\n .duration(step.duration)\n .delay(step.delay)\n .ease(easeFn)\n .end()\n .then(done([\"domain\", \"enter\"], () => resolve()));\n\n const iDomainExit = domain.exit();\n fetchAttributes(\n iDomainExit,\n DOMAIN_ATTRS,\n {},\n signals.initial,\n encodes.initial.exit\n );\n const fDomainExit = iDomainExit.transition();\n fetchAttributes(\n fDomainExit,\n DOMAIN_ATTRS,\n {},\n signals.final,\n encodes.final.exit\n );\n fDomainExit\n .duration(step.duration)\n .delay(step.delay)\n .ease(easeFn)\n .end()\n .then(done([\"domain\", \"exit\"], () => resolve()));\n\n // update the domain\n\n fetchAttributes(\n domain,\n DOMAIN_ATTRS,\n scales.initial,\n signals.initial,\n encodes.initial.update\n );\n domain = domain.transition();\n\n fetchAttributes(\n domain,\n DOMAIN_ATTRS,\n scales.final,\n signals.final,\n encodes.final.update\n );\n\n domain\n .duration(step.duration)\n .delay(step.delay)\n .ease(easeFn)\n .end()\n .then(done([\"domain\", \"update\"], () => resolve()));\n } else {\n done([\"domain\", \"enter\"], () => resolve());\n done([\"domain\", \"exit\"], () => resolve());\n done([\"domain\", \"update\"], () => resolve());\n }\n });\n}\n\nexport { axisInterpolate };\n","import * as d3 from \"d3\";\nimport {\n propMap,\n getEaseFn,\n findAfterSibling,\n getJoinInfo,\n findComp,\n svgRender,\n computeScale\n} from \"./util.js\";\nimport { fetchAttributes, calculateGetValeus } from \"./attributeFetcher\";\nimport { getStyle } from \"./vega-render-util.js\";\nimport { copy } from \"../util/util.js\";\nimport { computeTiming, enumStepComputeTiming } from \"./timings\";\n\nconst LEGEND_CHANNELS = [\n \"fill\",\n \"opacity\",\n \"shape\",\n \"size\",\n \"stroke\",\n \"strokeDash\",\n \"strokeWidth\"\n];\nconst INITIAL_STATUS = {\n update: false,\n enter: false,\n exit: false\n};\n\nfunction doneMaker(subComponents, legendTypes, legend) {\n const transitionStatus = subComponents.reduce((acc, curr) => {\n acc[curr] = copy(INITIAL_STATUS);\n return acc;\n }, {});\n\n return function(which, cb) {\n if (which.length === 2) {\n if (which[1] === \"all\") {\n transitionStatus[which[0]].update = transitionStatus[\n which[0]\n ].enter = transitionStatus[which[0]].exit = true;\n } else {\n transitionStatus[which[0]][which[1]] = true;\n }\n } else if (which === \"all\") {\n transitionStatus.update = transitionStatus.enter = transitionStatus.exit = true;\n } else {\n transitionStatus[which] = true;\n }\n\n const allDone =\n [\"title\", \"labels\", \"symbols\", \"pairs\", \"entries\", \"legend\"].reduce(\n (acc, key) => {\n return (\n acc &&\n transitionStatus[key].update &&\n transitionStatus[key].enter &&\n transitionStatus[key].exit\n );\n },\n true\n ) ||\n [\"title\", \"labels\", \"gradient\", \"bands\", \"entries\", \"legend\"].reduce(\n (acc, key) => {\n return (\n acc &&\n transitionStatus[key].update &&\n transitionStatus[key].enter &&\n transitionStatus[key].exit\n );\n },\n true\n );\n if (allDone) {\n if (legendTypes.final) {\n if (legendTypes.final === \"gradient\") {\n legend.selectAll(\".mark-group.role-scope\").remove();\n } else {\n const entryG = legend.select(\".role-legend-entry > g > g\");\n legend\n .select(\".role-legend-entry > g > g > .mark-text.role-legend-label\")\n .remove();\n entryG.select(\".mark-text.role-legend-band\").remove();\n entryG.select(\".mark-text.role-legend-gradient\").remove();\n }\n }\n cb();\n }\n };\n}\n\nfunction legendInterpolate(rawInfo, step, targetElm) {\n function joinKeyGen(subcomp) {\n return (d, i, initialOrFinal = \"initial\") => {\n if (!d) {\n return i.toString();\n }\n if (!d.__gemini__) {\n return typeof step.computeDatumId[subcomp] === \"function\"\n ? step.computeDatumId[subcomp](d, i)\n : step.computeDatumId[subcomp][initialOrFinal](d, i);\n // return step.computeDatumId[subcomp](d, i);\n }\n return getJoinInfo(d, i, step, \"joinKey\");\n };\n }\n const joinSet = (d, i) => {\n return d.__gemini__ ? getJoinInfo(d, i, step, \"animSet\") : undefined;\n };\n const eView = rawInfo.eVis.view;\n\n return new Promise((resolve) => {\n // Mark Interpolate Data\n\n const { change } = step;\n const easeFn = getEaseFn(step.timing.ease);\n\n let doTitle;\n let doSymbols;\n let doLabels;\n let doGradient;\n\n doTitle = doSymbols = doLabels = doGradient = true;\n\n if (change.encode === false) {\n doTitle = doSymbols = doLabels = doGradient = false;\n } else if (change.encode) {\n doTitle = !(change.encode.title === false);\n doSymbols = !(change.encode.symbols === false);\n doLabels = !(change.encode.labels === false);\n doGradient = !(change.encode.gradient === false);\n }\n\n const { isRemove } = step;\n const { isAdd } = step;\n let legend = d3.select(`${targetElm} .role-legend.${change.compName}`);\n const done = doneMaker(\n [\n \"entries\",\n \"title\",\n \"labels\",\n \"gradient\",\n \"symbols\",\n \"legend\",\n \"pairs\",\n \"bands\"\n ],\n step.legendTypes,\n legend\n );\n const { compName } = change;\n // collect the scale objects to scale the initial/final values\n const { scales } = step;\n const { signals } = step;\n const { encodes } = step;\n const { legendTypes } = step;\n\n // add/remove/update legend\n if (isAdd) {\n const rootMark = d3.select(`${targetElm} .mark-group.root g g `);\n const rootScene = eView.scenegraph().root;\n const sib = findAfterSibling(rootScene, change.compName);\n addLegend(\n rootMark,\n findComp(rootScene, change.compName, \"legend\")[0],\n sib ? `.${sib.name}` : undefined\n );\n legend = d3.selectAll(`${targetElm} .role-legend.${change.compName}`);\n\n done([\"legend\", \"all\"], () => resolve());\n done([\"entries\", \"all\"], () => resolve());\n } else if (isRemove) {\n const manualEncode =\n change.encode && change.encode.legend ? change.encode.legend.exit : {};\n const legendG = legend.select(\"g\");\n const fLegendG = legendG.transition();\n fetchAttributes(\n fLegendG,\n [\"group\"],\n scales.final,\n signals.final,\n Object.assign({}, step.encodes.legend.final.exit, manualEncode)\n );\n fLegendG\n .duration(step.duration)\n .end()\n .then(() => {\n done([\"legend\", \"all\"], () => resolve());\n done([\"entries\", \"all\"], () => resolve());\n });\n } else {\n // update legend G\n const fLegendD = findComp(eView.scenegraph().root, compName, \"legend\")[0]\n .items[0];\n const encode = {\n x: { value: fLegendD.x },\n y: { value: fLegendD.y }\n };\n\n const legendG = legend.select(\"g\");\n const fData = [eView._runtime.data[compName].values.value[0].datum];\n legendG.data(fData);\n const fLegendG = legendG.transition();\n fetchAttributes(\n fLegendG,\n [\"group\"],\n scales.final,\n signals.final,\n Object.assign({}, step.encodes.legend.update, encode)\n );\n fLegendG\n .duration(step.duration)\n .end()\n .then(() => {\n done([\"legend\", \"all\"], () => resolve());\n done([\"entries\", \"all\"], () => resolve());\n });\n }\n\n const scNames = {\n initial: [],\n final: []\n };\n LEGEND_CHANNELS.forEach(channel => {\n if (change.initial && change.initial[channel]) {\n scNames.initial.push(change.initial[channel]);\n }\n if (change.final && change.final[channel]) {\n scNames.final.push(change.final[channel]);\n }\n });\n\n let finalScaleNames = [];\n if (change.scale === true || isAdd) {\n finalScaleNames = scNames.final;\n } else if (Array.isArray(change.scale)) {\n finalScaleNames = change.scale;\n } else if (typeof change.scale === \"object\") {\n finalScaleNames = Object.keys(change.scale).filter(\n scName => change.scale[scName]\n );\n }\n\n if (step.enumerator) {\n if (legendTypes.initial !== legendTypes.final) {\n console.error(\"Cannot enumerate the change of the legend type.\");\n }\n const legType = legendTypes.initial || legendTypes.final;\n let subComps;\n if (legType === \"symbol\") {\n const pairs = legend\n .select(\".role-legend-entry .role-scope\")\n .selectAll(\".role-scope > g\")\n .data(step.enumerator.pairs.allKeys, d => d);\n pairs.exit().remove();\n const enterPairSubGs = pairs\n .enter()\n .append(\"g\")\n .append(\"g\");\n enterPairSubGs\n .append(\"g\")\n .attr(\"class\", \"mark-symbol role-legend-symbol\")\n .append(\"path\")\n .datum((d, i) => step.enumerator.symbols.allKeys[i]);\n enterPairSubGs\n .append(\"g\")\n .attr(\"class\", \"mark-text role-legend-label\")\n .append(\"text\")\n .datum((d, i) => step.enumerator.labels.allKeys[i]);\n\n subComps = [\n {\n name: \"pairs\",\n selection: legend\n .select(\".role-legend-entry .role-scope\")\n .selectAll(\".role-scope > g\"),\n props: [\"group\"]\n },\n {\n name: \"symbols\",\n selection: legend\n .select(\".role-legend-entry .role-scope\")\n .selectAll(\".role-legend-symbol > path\"),\n props: [\"symbol\"]\n },\n {\n name: \"labels\",\n selection: legend\n .select(\".role-legend-entry .role-scope\")\n .selectAll(\".role-legend-label > text\"),\n props: [\"text\"]\n }\n ];\n } else {\n // bind allKeys\n const selection = legend\n .select(\".role-legend-label\")\n .selectAll(\"text\")\n .data(step.enumerator.labels.allKeys, d => d);\n selection.exit().remove();\n selection.enter().append(\"text\");\n\n subComps = [\n {\n name: \"labels\",\n selection: legend.select(\".role-legend-label\").selectAll(\"text\"),\n svgElmType: \"text\",\n props: [\"text\"]\n }\n ];\n if (step.change.initial.isBand) {\n const selection = legend\n .select(\".role-legend-band \")\n .selectAll(\"path\")\n .data(step.enumerator.bands.allKeys, d => d);\n selection.exit().remove();\n selection.enter().append(\"path\");\n\n subComps.push({\n name: \"bands\",\n selection: legend.select(\".role-legend-band \").selectAll(\"path\"),\n svgElmType: \"path\",\n props: [\"rect\"]\n });\n } else {\n done([\"bands\", \"all\"], () => {\n resolve();\n });\n }\n done([\"gradient\", \"all\"], () => {\n resolve();\n }); // The gradient elms cannot be enumerated.\n }\n\n subComps.forEach(subComp => {\n const subCompEnumerator = step.enumerator[subComp.name];\n const getValues = calculateGetValeus(\n encodes[subComp.name],\n scales,\n signals,\n computeScale,\n finalScaleNames\n );\n const allProps = subComp.props.reduce((acc, prop) => {\n return acc.concat(propMap(prop));\n }, []);\n\n const initials = subComp.selection.filter(\n id => [\"update\", \"exit\"].indexOf(subCompEnumerator.set(id, 0)) >= 0\n );\n allProps.forEach(p => {\n if (p.type === \"attrTween\") {\n const tempP = Object.assign({}, p, { type: \"attr\" });\n initials[tempP.type](getStyle(tempP.val), id =>\n subCompEnumerator.getPropVal(tempP, getValues, 0, id)\n );\n } else if (p.type === \"text\") {\n initials[p.type](id =>\n subCompEnumerator.getPropVal(p, getValues, 0, id)\n );\n } else {\n initials[p.type](getStyle(p.val), id =>\n subCompEnumerator.getPropVal(p, getValues, 0, id)\n );\n }\n });\n\n const subCompTransition = subComp.selection.transition();\n const timings = enumStepComputeTiming(subCompEnumerator, step.timing);\n allProps.forEach(p => {\n if (p.type === \"attr\") {\n subCompTransition.attrTween(p.val, d => {\n return subCompEnumerator.interpolateAlongEnumMaker(\n p,\n getValues\n )(d);\n });\n } else if (p.type === \"attrTween\") {\n subCompTransition.attrTween(p.val, function(d) {\n return subCompEnumerator.interpolateAlongEnumMaker(\n p,\n getValues,\n this\n )(d);\n });\n } else if (p.type === \"text\") {\n subCompTransition.tween(\"text\", function(d) {\n const textInterpolator = subCompEnumerator.interpolateAlongEnumMaker(\n p,\n getValues\n )(d);\n return function(t) {\n this.innerHTML = textInterpolator(t);\n };\n });\n } else if (p.type === \"style\") {\n subCompTransition.styleTween(getStyle(p.val), d => {\n return subCompEnumerator.interpolateAlongEnumMaker(\n p,\n getValues\n )(d);\n });\n }\n });\n\n // interpolate them\n subCompTransition\n .duration((d, i) => timings[i].duration)\n .delay((d, i) => timings[i].delay)\n .ease(easeFn)\n .end()\n .then(() => {\n done([subComp.name, \"all\"], () => {\n resolve();\n });\n });\n });\n } else {\n if (\n [legendTypes.initial, legendTypes.final].indexOf(\"symbol\") >= 0 &&\n (doSymbols || doLabels)\n ) {\n if (legendTypes.initial !== \"symbol\") {\n // add the frame for the symbol legend.\n legend\n .select(\" .role-legend-entry > g > g\")\n .append(\"g\")\n .attr(\"class\", \"mark-group role-scope\");\n }\n\n let pairs = legend\n .select(\".role-legend-entry .role-scope\")\n .selectAll(\".role-scope > g\");\n\n const joinKey = {\n pairs: joinKeyGen(\"pairs\"),\n symbols: joinKeyGen(\"symbols\"),\n labels: joinKeyGen(\"labels\")\n }; // currData.symbols === currData.labels\n const nextDataLabels =\n legendTypes.final !== \"symbol\" ? [] : step.nextData.labels;\n const currDataLabels =\n legendTypes.initial !== \"symbol\" ? [] : step.currData.labels;\n const timings = {\n pairs: computeTiming(\n step.currData.pairs,\n step.nextData.pairs,\n step.timing,\n joinKey.pairs,\n joinSet\n ),\n symbols: computeTiming(\n step.currData.symbols,\n step.nextData.symbols,\n step.timing,\n joinKey.symbols,\n joinSet\n ),\n labels: computeTiming(\n currDataLabels,\n nextDataLabels,\n step.timing,\n joinKey.labels,\n joinSet\n )\n };\n\n const prevData = d3.local();\n\n pairs.selectAll(\".role-legend-symbol > path\").each(function(d) {\n prevData.set(this, d);\n });\n\n pairs = pairs.data(step.nextData.pairs, d => joinKey.pairs(d));\n // if (!isRemove && (isAnimSetSymbols.enter || isAnimSetLabels.enter)) {\n if (!isRemove && pairs.enter().data().length > 0) {\n let enterPairsI = pairs.enter().append(\"g\");\n const enterPairsIsubG = enterPairsI.append(\"g\");\n let enterSymbolsI = enterPairsIsubG\n .append(\"g\")\n .attr(\"class\", \"mark-symbol role-legend-symbol\")\n .append(\"path\")\n .datum((d, i) => step.nextData.symbols[i]);\n let enterLabelsI = enterPairsIsubG\n .append(\"g\")\n .attr(\"class\", \"mark-text role-legend-label\")\n .append(\"text\")\n .datum((d, i) => step.nextData.labels[i]);\n\n const actingScales = step.sameDomainDimension\n ? { primary: scales.initial, secondary: scales.final }\n : { primary: scales.final, secondary: scales.initial };\n\n fetchAttributes(\n enterPairsI,\n [\"group\"],\n actingScales,\n signals.initial,\n encodes.pairs.initial.enter\n );\n\n fetchAttributes(\n enterSymbolsI,\n [\"symbol\"],\n actingScales,\n signals.initial,\n encodes.symbols.initial.enter\n );\n\n fetchAttributes(\n enterLabelsI,\n [\"text\"],\n actingScales,\n signals.initial,\n encodes.labels.initial.enter\n );\n\n if (enterPairsI.data().length <= 0) {\n enterPairsI = pairs.filter(d => joinSet(d) === \"enter\");\n }\n\n const enterPairsF = enterPairsI.transition();\n fetchAttributes(\n enterPairsF,\n [\"group\"],\n scales.final,\n signals.final,\n encodes.pairs.final.enter\n );\n enterPairsF\n .duration(\n (d, i) =>\n timings.pairs.find(t => t.id === joinKey.pairs(d, i, \"final\"))\n .duration\n )\n .delay(\n (d, i) =>\n timings.pairs.find(t => t.id === joinKey.pairs(d, i, \"final\"))\n .delay\n )\n .ease(easeFn)\n .end()\n .then(done([\"pairs\", \"enter\"], () => resolve()));\n\n if (enterSymbolsI.data().length <= 0) {\n enterSymbolsI = pairs\n .selectAll(\".role-legend-symbol > path\")\n .filter(d => joinSet(d) === \"enter\");\n }\n const enterSymbolsF = enterSymbolsI.transition();\n fetchAttributes(\n enterSymbolsF,\n [\"symbol\"],\n scales,\n signals.final,\n encodes.symbols.final.enter\n );\n enterSymbolsF\n .duration(\n (d, i) =>\n timings.symbols.find(\n t => t.id === joinKey.symbols(d, i, \"final\")\n ).duration\n )\n .delay(\n (d, i) =>\n timings.symbols.find(\n t => t.id === joinKey.symbols(d, i, \"final\")\n ).delay\n )\n .ease(easeFn)\n .end()\n .then(done([\"symbols\", \"enter\"], () => resolve()));\n\n if (enterLabelsI.data().length <= 0) {\n enterLabelsI = pairs\n .selectAll(\".role-legend-label > text\")\n .filter(d => joinSet(d) === \"enter\");\n }\n const enterLabelsF = enterLabelsI.transition();\n fetchAttributes(\n enterLabelsF,\n [\"text\"],\n scales.final,\n signals.final,\n encodes.labels.final.enter\n );\n enterLabelsF\n .duration(\n (d, i) =>\n timings.labels.find(t => t.id === joinKey.labels(d, i, \"final\"))\n .duration\n )\n .delay(\n (d, i) =>\n timings.labels.find(t => t.id === joinKey.labels(d, i, \"final\"))\n .delay\n )\n .ease(easeFn)\n .end()\n .then(done([\"labels\", \"enter\"], () => resolve()));\n } else {\n done([\"pairs\", \"enter\"], () => resolve());\n done([\"symbols\", \"enter\"], () => resolve());\n done([\"labels\", \"enter\"], () => resolve());\n }\n\n // if (!isAdd && (isAnimSetSymbols.exit || isAnimSetLabels.exit)) {\n if (!isAdd && pairs.exit().data().length > 0) {\n let exitPairsI = pairs.exit();\n if (exitPairsI.data().length <= 0) {\n exitPairsI = pairs.filter(d => joinSet(d) === \"exit\");\n }\n const actingScales = step.sameDomainDimension\n ? { primary: scales.final, secondary: scales.initial }\n : { primary: scales.initial, secondary: scales.final };\n\n const exitPairsF = exitPairsI.transition();\n fetchAttributes(\n exitPairsF,\n [\"group\"],\n actingScales,\n signals.final,\n encodes.pairs.final.exit\n );\n exitPairsF\n .duration(\n (d, i) =>\n timings.pairs.find(t => t.id === joinKey.pairs(d, i, \"initial\"))\n .duration\n )\n .delay(\n (d, i) =>\n timings.pairs.find(t => t.id === joinKey.pairs(d, i, \"initial\"))\n .delay\n )\n .ease(easeFn)\n .remove()\n .end()\n .then(done([\"pairs\", \"exit\"], () => resolve()));\n\n const exitSymbolsI = exitPairsI.selectAll(\n \".role-legend-symbol > path\"\n );\n const exitSymbolsF = exitSymbolsI.transition();\n fetchAttributes(\n exitSymbolsF,\n [\"symbol\"],\n Object.assign({}, scales, {\n primary: scales.final,\n secondary: scales.initial\n }),\n signals.final,\n encodes.symbols.final.exit\n );\n exitSymbolsF\n .duration(\n (d, i) =>\n timings.symbols.find(\n t => t.id === joinKey.symbols(d, i, \"initial\")\n ).duration\n )\n .delay(\n (d, i) =>\n timings.symbols.find(\n t => t.id === joinKey.symbols(d, i, \"initial\")\n ).delay\n )\n .ease(easeFn)\n .remove()\n .end()\n .then(done([\"symbols\", \"exit\"], () => resolve()));\n\n const exitLabelsI = exitPairsI.selectAll(\".role-legend-label > text\");\n const exitLabelsF = exitLabelsI.transition();\n fetchAttributes(\n exitLabelsF,\n [\"text\"],\n actingScales,\n signals.final,\n encodes.labels.final.exit\n );\n exitLabelsF\n .duration(\n (d, i) =>\n timings.labels.find(\n t => t.id === joinKey.labels(d, i, \"initial\")\n ).duration\n )\n .delay(\n (d, i) =>\n timings.labels.find(\n t => t.id === joinKey.labels(d, i, \"initial\")\n ).delay\n )\n .ease(easeFn)\n .remove()\n .end()\n .then(done([\"labels\", \"exit\"], () => resolve()));\n } else {\n done([\"pairs\", \"exit\"], () => resolve());\n done([\"labels\", \"exit\"], () => resolve());\n done([\"symbols\", \"exit\"], () => resolve());\n }\n\n if (pairs.data().length > 0) {\n // if ((isAnimSetSymbols.update || isAnimSetLabels.update) && pairs.data().length > 0) {\n const updatePairsF = pairs\n .filter(d => joinSet(d) === \"update\")\n .transition();\n // finalize the update set of the pairs\n fetchAttributes(\n updatePairsF,\n [\"group\"],\n scales.final,\n signals.final,\n encodes.pairs.final.update\n );\n\n updatePairsF\n .duration(\n (d, i) =>\n timings.pairs.find(t => t.id === joinKey.pairs(d, i)).duration\n )\n .delay(\n (d, i) =>\n timings.pairs.find(t => t.id === joinKey.pairs(d, i)).delay\n )\n .ease(easeFn)\n .end()\n .then(done([\"pairs\", \"update\"], () => resolve()));\n\n const updateSymbolsI = pairs\n .select(\".role-legend-symbol > path\")\n .datum((d, i) => step.nextData.symbols[i]);\n const updateSymbolsF = updateSymbolsI.transition();\n fetchAttributes(\n updateSymbolsF,\n [\"symbol\"],\n scales,\n signals.final,\n {\n initial: encodes.symbols.initial.update,\n final: encodes.symbols.final.update\n },\n prevData\n );\n updateSymbolsF\n .duration(\n (d, i) =>\n timings.symbols.find(t => t.id === joinKey.symbols(d, i))\n .duration\n )\n .delay(\n (d, i) =>\n timings.symbols.find(t => t.id === joinKey.symbols(d, i)).delay\n )\n .ease(easeFn)\n .end()\n .then(done([\"symbols\", \"update\"], () => resolve()));\n\n const updateLabelsI = pairs\n .select(\".role-legend-label > text\")\n .datum((d, i) => step.nextData.labels[i]);\n const updateLabelsF = updateLabelsI.transition();\n fetchAttributes(\n updateLabelsF,\n [\"text\"],\n scales.final,\n signals.final,\n encodes.labels.final.update\n );\n updateLabelsF\n .duration(\n (d, i) =>\n timings.labels.find(t => t.id === joinKey.labels(d, i)).duration\n )\n .delay(\n (d, i) =>\n timings.labels.find(t => t.id === joinKey.labels(d, i)).delay\n )\n .ease(easeFn)\n .end()\n .then(done([\"labels\", \"update\"], () => resolve()));\n } else {\n done([\"pairs\", \"update\"], () => resolve());\n done([\"symbols\", \"update\"], () => resolve());\n done([\"labels\", \"update\"], () => resolve());\n }\n }\n if (\n [legendTypes.initial, legendTypes.final].indexOf(\"gradient\") >= 0 &&\n (doGradient || doLabels)\n ) {\n const entryG = legend.select(\" .role-legend-entry > g > g\");\n if (legendTypes.initial !== \"gradient\") {\n // add the frame for the symbol legend.\n entryG.append(\"g\").attr(\"class\", \"mark-text role-legend-label\");\n\n if (step.change.final.isBand) {\n entryG.append(\"g\").attr(\"class\", \"mark-rect role-legend-band\");\n } else {\n entryG.append(\"g\").attr(\"class\", \"mark-rect role-legend-gradient\");\n }\n }\n\n if (step.change.initial.isBand && !step.change.final.isBand ) {\n entryG.append(\"g\").attr(\"class\", \"mark-rect role-legend-gradient\");\n } else if (!step.change.initial.isBand && step.change.final.isBand) {\n entryG.append(\"g\").attr(\"class\", \"mark-rect role-legend-band\");\n }\n\n const labelG = legend.select(\n \" .role-legend-entry > g > g > .role-legend-label\"\n );\n if (doLabels && !labelG.empty()) {\n gradientSubComp(\"labels\", labelG, \"text\", [\"text\"]);\n } else {\n done([\"labels\", \"all\"], () => resolve());\n }\n\n const gradientG = legend.select(\".role-legend-gradient\");\n if (doGradient && !gradientG.empty()) {\n gradientSubComp(\"gradient\", gradientG, \"path\", [\"gradient\"]);\n } else {\n done([\"gradient\", \"all\"], () => resolve());\n }\n\n const bandsG = legend.select(\".role-legend-band\");\n if (doGradient && !bandsG.empty()) {\n gradientSubComp(\"bands\", bandsG, \"path\", [\"rect\"]);\n } else {\n done([\"bands\", \"all\"], () => resolve());\n }\n }\n }\n\n // Title\n const titleG = legend.select(\".role-legend-title\");\n if (!titleG.empty() && doTitle) {\n let title = titleG.selectAll(\"text\");\n\n\n const joinKey = joinKeyGen(\"title\");\n const timings = computeTiming(\n step.currData.title,\n step.nextData.title,\n step.timing,\n joinKey,\n joinSet\n );\n\n title = title.data(step.nextData.title, d => d.text);\n const enterTitleI = title.enter().append(\"text\");\n\n fetchAttributes(\n enterTitleI,\n [\"title\", \"align\"],\n {},\n signals.initial,\n encodes.title.initial.enter\n );\n\n\n const enterTitleF = enterTitleI.transition();\n fetchAttributes(\n enterTitleF,\n [\"title\", \"align\"],\n {},\n signals.final,\n encodes.title.final.enter\n );\n enterTitleF\n .duration(\n (d, i) =>\n timings.find(t => t.id === joinKey(d, i, \"final\")).duration\n )\n .delay(\n (d, i) => timings.find(t => t.id === joinKey(d, i, \"final\")).delay\n )\n .ease(easeFn)\n .end()\n .then(done([\"title\", \"enter\"], () => resolve()));\n\n\n\n\n const exitTitleI = title.exit();\n const exitTitleF = exitTitleI.transition();\n fetchAttributes(\n exitTitleF,\n [\"title\", \"align\"],\n {},\n signals.final,\n encodes.title.final.exit\n );\n exitTitleF\n .duration(\n (d, i) =>\n timings.find(t => t.id === joinKey(d, i, \"initial\")).duration\n )\n .delay(\n (d, i) => timings.find(t => t.id === joinKey(d, i, \"initial\")).delay\n )\n .ease(easeFn)\n .remove()\n .end()\n .then(done([\"title\", \"exit\"], () => resolve()));\n\n\n\n\n title = title.transition();\n // update the title\n fetchAttributes(\n title,\n [\"title\", \"align\"],\n {},\n signals.final,\n encodes.title.final.update\n );\n\n title\n .duration(\n (d, i) => timings.find(t => t.id === joinKey(d, i)).duration\n )\n .delay((d, i) => timings.find(t => t.id === joinKey(d, i)).delay)\n .ease(easeFn)\n .end()\n .then(done([\"title\", \"update\"], () => resolve()));\n\n }\n\n\n function gradientSubComp(\n subCompName,\n subCompG,\n subCompSvgElmType,\n subCompProps\n ) {\n const prevData = d3.local();\n let subCompSelection = subCompG.selectAll(subCompSvgElmType);\n\n const joinKey = joinKeyGen(subCompName);\n const nextData =\n subCompName === \"labels\" && legendTypes.final !== \"gradient\"\n ? []\n : step.nextData[subCompName];\n const currData =\n subCompName === \"labels\" && legendTypes.initial !== \"gradient\"\n ? []\n : step.currData[subCompName];\n const timings = computeTiming(\n currData,\n nextData,\n step.timing,\n joinKey,\n joinSet\n );\n subCompSelection.each(function(d) {\n prevData.set(this, d);\n });\n subCompSelection = subCompSelection.data(nextData, (d, i) =>\n joinKey(d, i)\n );\n\n // if (!isRemove && isAnimSet.enter) {\n if (!isRemove && subCompSelection.enter().data().length > 0) {\n let enterSubCompI = subCompSelection.enter().append(subCompSvgElmType);\n\n fetchAttributes(\n enterSubCompI,\n subCompProps,\n step.sameDomainDimension\n ? { primary: scales.initial, secondary: scales.final }\n : { primary: scales.final, secondary: scales.initial },\n signals.initial,\n encodes[subCompName].initial.enter\n );\n\n if (enterSubCompI.data().length <= 0) {\n enterSubCompI = subCompG\n .selectAll(subCompSvgElmType)\n .filter(d => joinSet(d) === \"enter\");\n }\n const enterSubCompF = enterSubCompI.transition();\n fetchAttributes(\n enterSubCompF,\n subCompProps,\n scales,\n signals.final,\n encodes[subCompName].final.enter,\n prevData\n );\n enterSubCompF\n .duration(\n (d, i) =>\n timings.find(t => t.id === joinKey(d, i, \"final\")).duration\n )\n .delay(\n (d, i) => timings.find(t => t.id === joinKey(d, i, \"final\")).delay\n )\n .ease(easeFn)\n .end()\n .then(done([subCompName, \"enter\"], () => resolve()));\n } else {\n done([subCompName, \"enter\"], () => resolve());\n }\n\n // if (!isAdd && isAnimSet.exit) {\n if (!isAdd && subCompSelection.exit().data().length > 0) {\n const exitSubCompI = subCompSelection.exit();\n const exitSubCompF = exitSubCompI.transition();\n fetchAttributes(\n exitSubCompF,\n subCompProps,\n step.sameDomainDimension\n ? { primary: scales.final, secondary: scales.initial }\n : { primary: scales.initial, secondary: scales.final },\n signals.final,\n encodes[subCompName].final.exit,\n prevData\n );\n exitSubCompF\n .duration(\n (d, i) =>\n timings.find(t => t.id === joinKey(d, i, \"initial\")).duration\n )\n .delay(\n (d, i) => timings.find(t => t.id === joinKey(d, i, \"initial\")).delay\n )\n .ease(easeFn)\n .remove()\n .end()\n .then(done([subCompName, \"exit\"], () => resolve()));\n } else {\n done([subCompName, \"exit\"], () => resolve());\n }\n\n // if ((isAnimSet.update) && subCompSelection.data().length > 0) {\n if (subCompSelection.data().length > 0) {\n const updateSubCompF = subCompSelection.transition();\n let modifiedSubCompProps = subCompName === \"gradient\"\n ? [{ name: \"gradient\", excludes: [{ type: \"style\", val: \"fill\" }] }]\n : subCompProps;\n\n\n fetchAttributes(\n updateSubCompF,\n modifiedSubCompProps,\n scales,\n signals.final,\n {\n initial: encodes[subCompName].initial.update,\n final: encodes[subCompName].final.update\n },\n prevData\n );\n if (subCompName === \"gradient\") {\n updateGradientFill(subCompSelection, step);\n }\n\n\n\n updateSubCompF\n .duration(\n (d, i) => timings.find(t => t.id === joinKey(d, i)).duration\n )\n .delay((d, i) => timings.find(t => t.id === joinKey(d, i)).delay)\n .ease(easeFn)\n .end()\n .then(done([subCompName, \"update\"], () => resolve()));\n } else {\n done([subCompName, \"update\"], () => resolve());\n }\n }\n });\n}\nfunction updateGradientFill(gradCompSelection, step) {\n const url = gradCompSelection.node().style.fill.replace(/^url\\(['\"]/, \"\").replace(/['\"]\\)$/, \"\");\n const vgDatum = gradCompSelection.data()[0];\n const gradientId = url.split(\"#\").pop();\n const gradient = d3.select(`#${gradientId}`);\n gradient.selectAll(\"stop\")\n .data(vgDatum.fill.stops, d => (d || {}).offset)\n .transition()\n .attr(\"stop-color\", d=> d.color)\n .duration(step.duration)\n .delay(step.delay);\n gradient.transition()\n .attr(\"x1\", vgDatum.fill.x1)\n .attr(\"x2\", vgDatum.fill.x2)\n .attr(\"y1\", vgDatum.fill.y1)\n .attr(\"y2\", vgDatum.fill.y2)\n .duration(step.duration)\n .delay(step.delay);\n\n}\nfunction addLegend(d3Selection, newLegendScene) {\n const compName = newLegendScene.name;\n const elem = svgRender(newLegendScene).getElementsByClassName(\n \"role-legend\"\n )[0];\n d3Selection.node().appendChild(elem);\n const { datum } = newLegendScene.items[0];\n // after adding the rendered result, delete the items to re-encode according to `encodes`.\n\n if (datum.title) {\n d3Selection.select(`.${compName} .role-legend-title text`).remove();\n }\n if (datum.type === \"symbol\") {\n d3Selection\n .selectAll(`.${compName} .role-legend-entry .role-scope > g`)\n .remove();\n } else {\n d3Selection\n .selectAll(`.${compName} .role-legend-entry .role-legend-label > text`)\n .remove();\n d3Selection\n .selectAll(`.${compName} .role-legend-entry .role-legend-gradient > path`)\n .remove();\n d3Selection\n .selectAll(`.${compName} .role-legend-entry .role-legend-band > path`)\n .remove();\n }\n\n return d3Selection;\n}\n\nexport { legendInterpolate };\n","import * as d3 from \"d3\";\nimport { transformItem } from \"./vega-render-util\";\nimport { getEaseFn } from \"./util.js\";\nimport { fetchAttributes } from \"./attributeFetcher\";\n\nfunction viewInterpolate(rawInfo, step, targetElm) {\n const animVis = targetElm;\n\n return new Promise((resolve) => {\n const easeFn = getEaseFn(step.timing.ease);\n\n if (step.change.signal === false) {\n resolve();\n }\n\n const view = d3.select(`${animVis} svg`);\n const svgEncode = step.encodes.final.svg;\n // update svg\n // When just applying attr(\"width\", ...), the size of the chart jitters.\n view\n .transition()\n .tween(\"resize\", function() {\n const w = d3.interpolate(\n this.getAttribute(\"width\"),\n svgEncode.width.value\n );\n const h = d3.interpolate(\n this.getAttribute(\"height\"),\n svgEncode.height.value\n );\n return function(t) {\n const _w = Math.round(w(t) * 1) / 1;\n const _h = Math.round(h(t) * 1) / 1;\n this.setAttribute(\"width\", _w);\n this.setAttribute(\"height\", _h);\n this.setAttribute(\"viewBox\", `0 0 ${_w} ${_h}`);\n };\n })\n .duration(step.duration)\n .delay(step.delay)\n .ease(easeFn)\n .end()\n .then(() => {\n resolve();\n });\n\n // update svg > g\n view\n .select(\"g\")\n .transition()\n .attr(\n \"transform\",\n transformItem({ x: svgEncode.x.value, y: svgEncode.y.value })\n )\n .duration(step.duration)\n .delay(step.delay)\n .ease(easeFn);\n\n // update background\n let root = view.select(\".root g > .background\");\n const rootEncode = step.encodes.final.root;\n const fDatum = Object.keys(rootEncode).reduce((fDatum, key) => {\n fDatum[key] = rootEncode[key].value;\n return fDatum;\n }, {});\n root = root.data([fDatum]).transition();\n fetchAttributes(\n root,\n [\"background\", \"fill\", \"stroke\"],\n {},\n step.signals.final,\n rootEncode\n );\n\n root\n .duration(step.duration)\n .delay(step.delay)\n .ease(easeFn);\n\n // update frame\n });\n}\n\nexport { viewInterpolate };\n","import { markInterpolate } from \"./mark/mark\";\nimport { areaLineInterpolate } from \"./mark/areaLine\";\nimport { axisInterpolate } from \"./axis\";\nimport { legendInterpolate } from \"./legend\";\nimport { viewInterpolate } from \"./view\";\nimport { isLinearMarktype} from \"./util\";\n\nconst LIBRARY = {\n legend: legendInterpolate,\n axis: axisInterpolate,\n mark: {\n interpolate: {\n others: markInterpolate,\n areaLine: areaLineInterpolate\n },\n marktypeChange\n },\n view: viewInterpolate,\n pause: step => {\n return new Promise((resolve) => {\n setTimeout(function() {\n resolve();\n }, step.duration + step.delay);\n });\n }\n};\nexport default function(step) {\n let template;\n const { marktypes } = step;\n if (step.compType === \"mark\") {\n if (\n marktypes.final &&\n marktypes.initial &&\n marktypes.initial !== step.marktypes.final\n ) {\n template = LIBRARY.mark.marktypeChange;\n } else if (\n isLinearMarktype(marktypes.initial) || isLinearMarktype(marktypes.final)\n ) {\n template = LIBRARY.mark.interpolate.areaLine;\n } else {\n template = LIBRARY.mark.interpolate.others;\n }\n } else {\n template = LIBRARY[step.compType];\n }\n\n return template;\n}\n\nasync function marktypeChange(rawInfo, step, targetElm) {\n const mTypeI = step.marktypes.initial;\n const mTypeF = step.marktypes.final;\n if ( isLinearMarktype(mTypeF) && isLinearMarktype(mTypeI)) {\n return LIBRARY.mark.interpolate.areaLine(rawInfo, step, targetElm);\n }\n if (\n ( isLinearMarktype(mTypeI) && [\"rule\", \"rect\", \"symbol\", \"text\"].indexOf(mTypeF) >= 0) ||\n ( isLinearMarktype(mTypeF) && [\"rule\", \"rect\", \"symbol\", \"text\"].indexOf(mTypeI) >= 0)\n ) {\n return Promise.all([\n LIBRARY.mark.interpolate.others(rawInfo, step, targetElm),\n LIBRARY.mark.interpolate.areaLine(rawInfo, step, targetElm)\n ]);\n }\n return LIBRARY.mark.interpolate.others(rawInfo, step, targetElm);\n}\nexport function testInterpolator(step, state) {\n return new Promise((resolve) => {\n setTimeout(function() {\n const nextState = `${state} ${step.compName}`;\n resolve(nextState);\n }, step.duration + step.delay);\n });\n}\n","import {attachStates} from \"./changeFetcher\";\n\nexport function autoScaleOrder(extendedSchedule, resolves, rawInfo) {\n const mainTimeline = extendedSchedule.getTimeline(\":main\");\n\n let extendedTimeline = attachStates(mainTimeline, rawInfo);\n const scaleOrderResovles = resolves.filter(r => r.autoScaleOrder),\n scheduleAlternator = extendedSchedule.getTimelineAlternator(scaleOrderResovles);\n\n while (!validateScaleOrder(scaleOrderResovles, extendedTimeline)) {\n const altTimeline = scheduleAlternator();\n if (!altTimeline) {\n extendedTimeline = attachStates(mainTimeline, rawInfo);\n break;\n }\n extendedTimeline = attachStates(altTimeline, rawInfo);\n }\n return extendedTimeline;\n}\n\nfunction validateScaleOrder(resolves, timeline) {\n let valid = true;\n resolves.forEach(resolve => {\n resolve.autoScaleOrder.forEach(compName => {\n const foundTrack = timeline.find(track => track.compName === compName);\n if (foundTrack && foundTrack.scaleOrderValid === false) {\n valid = false;\n }\n });\n });\n return valid;\n}","import * as vega from \"vega\";\nimport { Animation } from \"./animation\";\nimport { parse } from \"./parser\";\nimport { attachChanges } from \"./changeFetcher\";\nimport { default as Actuator } from \"./actuator\";\nimport { autoScaleOrder } from \"./resolver\";\n\n\nfunction attachAnimTemplates(schedule) {\n schedule.forEach(track => {\n track.steps = track.steps.map(step => {\n const template = Actuator(step);\n if (!template) {\n console.error(\n `There is no such animation template for ${step.compType}.`\n );\n }\n\n step.template = template;\n return step;\n });\n });\n return schedule;\n}\n\nclass Gemini {\n static async animate(startVisSpec, endVisSpec, spec) {\n\n const eView = await new vega.View(vega.parse(endVisSpec), {\n renderer: \"svg\"\n }).runAsync();\n\n const sView = await new vega.View(vega.parse(startVisSpec), {\n renderer: \"svg\"\n }).runAsync();\n\n const rawInfo = {\n sVis: { view: sView, spec: startVisSpec },\n eVis: { view: eView, spec: endVisSpec }\n };\n\n const { schedule, resolves } = parse(spec, rawInfo);\n schedule.tracks = attachChanges(rawInfo, schedule.tracks);\n const finalTimeline = autoScaleOrder(schedule, resolves, rawInfo);\n\n return new Animation(attachAnimTemplates(finalTimeline), rawInfo, spec);\n }\n}\n\nexport {\n Gemini,\n attachAnimTemplates as attachAnimTemplate\n};\n","import { copy } from \"../util/util\";\n\nconst MIN_POS_DELTA = 10;\nconst CHANNEL_TO_ATTRS = [\n { channel: \"x\", attrs: [\"x\", \"x2\", \"xc\", \"width\"] },\n { channel: \"y\", attrs: [\"y\", \"y2\", \"yc\", \"height\"] },\n { channel: \"color\", attrs: [\"stroke\", \"fill\"] },\n { channel: \"shape\", attrs: [\"shape\"] },\n { channel: \"size\", attrs: [\"size\"] },\n { channel: \"opacity\", attrs: [\"opacity\"] },\n { channel: \"text\", attrs: [\"text\"] },\n { channel: \"others\", attrs: [\"tooltip\", \"define\", \"strokeWidth\"] }\n];\nconst CHANNELS = [\"x\", \"y\", \"color\", \"shape\", \"size\", \"opacity\", \"text\"];\n\nconst CHANNEL_TO_ATTRS_OBJ = {\n x: [\"x\", \"x2\", \"xc\", \"width\"],\n y: [\"y\", \"y2\", \"yc\", \"height\"],\n color: [\"stroke\", \"fill\"],\n shape: [\"shape\"],\n size: [\"size\"],\n opacity: [\"opacity\"],\n text: [\"text\"],\n others: [\"tooltip\", \"define\", \"strokeWidth\"]\n};\n\nfunction getSubEncodeByChannel(encode, channel) {\n const subEncode = {};\n if (channel === \"others\") {\n const otherEncode = copy(encode);\n CHANNEL_TO_ATTRS.reduce((channelRelatedAttrs, ch2Attrs) => {\n return (channelRelatedAttrs = channelRelatedAttrs.concat(ch2Attrs.attrs));\n }, []).forEach(attr => {\n delete otherEncode[attr];\n });\n\n return otherEncode;\n }\n\n CHANNEL_TO_ATTRS_OBJ[channel]\n // .filter(attr => encode[attr])\n .forEach(attr => {\n subEncode[attr] = encode[attr];\n });\n return subEncode;\n}\nfunction getCoreAttr(subEncode, channel, marktype){\n if (!subEncode) {\n return;\n }\n if (channel === \"color\") {\n let coreAttr = [\"line\", \"rule\", \"symbol\"].indexOf(marktype) >= 0\n ? subEncode.stroke\n : subEncode.fill;\n\n if (\n coreAttr === \"symbol\" &&\n subEncode.fill &&\n subEncode.fill.value !== \"transparent\"\n ) {\n coreAttr = subEncode.fill;\n }\n\n return coreAttr;\n }\n if (channel===\"x\") {\n return subEncode.x || subEncode.xc;\n } else if (channel===\"y\") {\n return subEncode.y || subEncode.yc;\n }\n return subEncode[channel];\n}\n\nexport { CHANNELS, CHANNEL_TO_ATTRS_OBJ, MIN_POS_DELTA, getSubEncodeByChannel, getCoreAttr };\n","import { getComponents, getChanges, getViewChange } from \"../changeFetcher/change\";\nimport { copy, deepEqual, isNumber, get } from \"../util/util\";\nimport { findComp } from \"../actuator/util\";\nimport { computeHasFacet, isGroupingMarktype } from \"../changeFetcher/state/util\";\nimport { CHANNELS, getSubEncodeByChannel, MIN_POS_DELTA,getCoreAttr } from \"./util\";\nimport { getMarkData, unpackData } from \"../util/vgDataHelper\";\n\n\nexport function detectDiffs(rawInfo, userInput = {}) {\n // 0) compare signals\n const signalDiffs = detectSignalDiffs(rawInfo);\n\n const matches = getChanges(\n getComponents(rawInfo.sVis.spec),\n getComponents(rawInfo.eVis.spec)\n );\n const scaleDiffs = matches\n .filter(match => match.compType === \"scale\")\n .reduce((scaleDiffs, match) => {\n scaleDiffs[match.compName] = match;\n scaleDiffs[match.compName].meta = detectScaleDiffs(match, rawInfo, userInput.scales);\n\n return scaleDiffs;\n }, {});\n\n const compDiffs = matches\n .filter(match => {\n return (\n [\"root\", \"pathgroup\"].indexOf(match.compName) < 0 &&\n match.compType !== \"scale\"\n );\n }).map(match => {\n switch (match.compType) {\n case \"mark\":\n match.meta = detectMarkDiffs(match, rawInfo, scaleDiffs);\n break;\n case \"axis\":\n match.meta = detectAxisDiffs(match, rawInfo, scaleDiffs);\n break;\n case \"legend\":\n match.meta = detectLegendDiffs(match, rawInfo, scaleDiffs);\n break;\n default:\n break;\n }\n\n return match;\n });\n const viewDiffs = detectViewDiff(rawInfo);\n\n // 1) should return the components\n return {\n compDiffs,\n scaleDiffs,\n signalDiffs,\n viewDiffs\n };\n}\nfunction appendCompScaleDiff(usedScales, scaleDiffs) {\n let compScaleDiffDetails = {}; let compScaleDiff = false;\n\n usedScales.forEach(scaleName => {\n compScaleDiffDetails[scaleName] = scaleDiffs[scaleName].meta;\n compScaleDiff = compScaleDiff || scaleDiffs[scaleName].meta;\n }, {});\n\n return compScaleDiff ? compScaleDiffDetails : false;\n}\nfunction detectMarkDiffs(match, rawInfo, scaleDiffs) {\n let markDiffs = { view: { deltaW: 0, deltaH: 0 } };\n if (!match.initial) {\n markDiffs.add = true;\n markDiffs.view = { deltaW: MIN_POS_DELTA, deltaH: MIN_POS_DELTA };\n } else if (!match.final) {\n markDiffs.remove = true;\n markDiffs.view = { deltaW: MIN_POS_DELTA, deltaH: MIN_POS_DELTA };\n }\n\n // marktype\n markDiffs.marktype = !match.initial || !match.final || (match.initial.type !== match.final.type);\n\n // compare the encodes per channel\n const enAttrs_i = Object.keys(get(match, \"initial\", \"encode\", \"update\") || {});\n let enAttrs_f = Object.keys(get(match, \"final\", \"encode\", \"update\") || {});\n markDiffs.usedEnAttrs = enAttrs_i.concat(enAttrs_f).unique();\n\n markDiffs.encode = CHANNELS.reduce((encodeDiffs, channel) => {\n const subEncode_i = getSubEncodeByChannel(\n get(match, \"initial\", \"encode\", \"update\") || {},\n channel\n );\n let subEncode_f = getSubEncodeByChannel(\n get(match, \"final\", \"encode\", \"update\") || {},\n channel\n );\n\n encodeDiffs[channel] = !deepEqual(subEncode_i, subEncode_f);\n\n // ignoreable encode diffs (d (opacity) > 0.5 )\n if (\n channel === \"opacity\" &&\n (get(subEncode_i, \"opacity\", \"value\") ||\n get(subEncode_i, \"opacity\") === undefined) &&\n (get(subEncode_f, \"opacity\", \"value\") ||\n get(subEncode_f, \"opacity\") === undefined)\n ) {\n const opacityVal_i = get(subEncode_i, \"opacity\", \"value\") || 1.0;\n let opacityVal_f = get(subEncode_f, \"opacity\", \"value\") || 1.0;\n if (Math.abs(opacityVal_i - opacityVal_f) < 0.5) {\n encodeDiffs.opacity = false;\n }\n }\n\n //\n if (markDiffs.marktype && encodeDiffs[channel]) {\n const marktype_i = get(match, \"initial\", \"type\"),\n marktype_f = get(match, \"final\", \"type\");\n let coreEnAttr_i = getCoreAttr(subEncode_i, channel, marktype_i);\n let coreEnAttr_f = getCoreAttr(subEncode_f, channel, marktype_f);\n\n if (deepEqual(coreEnAttr_i, coreEnAttr_f)) {\n encodeDiffs[channel] = \"byMarktypeChange\";\n }\n }\n\n //\n return encodeDiffs;\n }, {});\n\n\n\n // find the used scales\n let usedScales = [];\n [\"update\"].forEach(set => {\n const encode_i = match.initial && match.initial.encode[set];\n const encode_f = match.final && match.final.encode[set];\n\n [encode_i, encode_f].forEach(encode => {\n Object.keys(encode || {}).map(attr => {\n if (Array.isArray(encode[attr])) {\n usedScales = usedScales.concat(\n encode[attr].filter(ch => ch.scale).map(ch => ch.scale)\n );\n } else if (encode[attr].scale) {\n usedScales.push(encode[attr].scale);\n }\n });\n });\n });\n markDiffs.usedScales = usedScales.unique();\n markDiffs.scale = appendCompScaleDiff(markDiffs.usedScales, scaleDiffs);\n markDiffs.scNames = Object.keys(markDiffs.scale);\n markDiffs.view = {\n deltaW: markDiffs.scale.x\n ? markDiffs.scale.x.rangeDelta\n : markDiffs.view.deltaW,\n deltaH: markDiffs.scale.y\n ? markDiffs.scale.y.rangeDelta\n : markDiffs.view.deltaH\n };\n if (markDiffs.scale.y && markDiffs.scale.y.add) {\n markDiffs.view.deltaH = MIN_POS_DELTA;\n } else if (markDiffs.scale.y && markDiffs.scale.y.remove) {\n markDiffs.view.deltaH = -MIN_POS_DELTA;\n }\n\n if (markDiffs.scale.x && markDiffs.scale.x.add) {\n markDiffs.view.deltaW = MIN_POS_DELTA;\n } else if (markDiffs.scale.x && markDiffs.scale.x.remove) {\n markDiffs.view.deltaW = -MIN_POS_DELTA;\n }\n\n // Get data and compare\n // get dataComp name\n // let iDataCompName = computeHasFacet(match.initial) ? match.initial.parent.from.facet.data : match.initial.from.data,\n // fDataCompName = computeHasFacet(match.final) ? match.final.parent.from.facet.data : match.final.from.data;\n\n // markDiffs.data = isDiffDataComp(\n // findDataComp(rawInfo.sVis.spec, iDataCompName),\n // findDataComp(rawInfo.eVis.spec, fDataCompName),\n // rawInfo\n // );\n // if (markDiffs.data || true) {\n let iData = match.initial\n ? getMarkData(rawInfo.sVis.view, match.initial, match.compName)\n : [];\n let fData = match.final\n ? getMarkData(rawInfo.eVis.view, match.final, match.compName)\n : [];\n\n if (match.initial && (computeHasFacet(match.initial) || isGroupingMarktype(match.initial.type))) {\n iData = unpackData(iData);\n }\n if (match.final && (computeHasFacet(match.final) || isGroupingMarktype(match.final.type))) {\n fData = unpackData(fData);\n }\n if (!markDiffs.data) {\n\n iData = computeHasFacet(match.initial) ? unpackData(iData) : iData;\n fData = computeHasFacet(match.final) ? unpackData(fData) : fData;\n\n markDiffs.data = isDiffData(iData, fData);\n }\n\n // }\n\n return markDiffs;\n}\n\nfunction detectScaleDiffs(match, rawInfo, userInputScales = {}) {\n if (!match.initial) {\n return {add: true};\n } if (!match.final) {\n return {remove: true};\n }\n let scaleDiff = deepEqual(match.initial, match.final) ? false : {};\n\n let rangeVals_i = rawInfo.sVis.view.scale(match.initial.name).range(),\n rangeVals_f = rawInfo.eVis.view.scale(match.final.name).range();\n let rangeDelta = 0;\n if (!deepEqual(rangeVals_i, rangeVals_f)){\n if ((rangeVals_i.length === 2 && isNumber(rangeVals_i[0]) && isNumber(rangeVals_i[1]))\n && (rangeVals_f.length === 2 && isNumber(rangeVals_f[0]) && isNumber(rangeVals_f[1]))) {\n rangeDelta = Math.abs(rangeVals_f[0]-rangeVals_f[1]) - Math.abs(rangeVals_i[0]-rangeVals_i[1]);\n }\n }\n\n let domainVals_i = rawInfo.sVis.view.scale(match.initial.name).domain(),\n domainVals_f = rawInfo.eVis.view.scale(match.final.name).domain();\n\n if (!scaleDiff && deepEqual(domainVals_i, domainVals_f) && (rangeDelta === 0)) {\n return false;\n }\n scaleDiff = {\n rangeDelta: rangeDelta,\n domainValueDiff: !deepEqual(domainVals_i, domainVals_f)\n };\n\n let userInputDomainDimensionDiff = get(userInputScales[match.initial.name], \"domainDimension\");\n scaleDiff.domainSpaceDiff = userInputDomainDimensionDiff === \"diff\" ? true : (\n userInputDomainDimensionDiff === \"same\" ? false :\n !deepEqual(match.initial.domain, match.final.domain)\n );\n\n\n if (([\"band\", \"point\", \"ordinal\"].indexOf(match.initial.type) >= 0) &&\n ([\"band\", \"point\", \"ordinal\"].indexOf(match.final.type) >= 0)) {\n scaleDiff.stayDiscrete = true;\n }\n return scaleDiff;\n}\n\nfunction detectLegendDiffs(match, rawInfo, scaleDiffs) {\n const legendDiffs = {\n usedScales: [],\n view: { deltaW: 0, deltaH: 0, x: 0, y: 0 }\n };\n if (!match.initial) {\n legendDiffs.add = true;\n legendDiffs.view = {\n deltaW: MIN_POS_DELTA,\n deltaH: MIN_POS_DELTA,\n x: MIN_POS_DELTA,\n y: MIN_POS_DELTA\n };\n } else if (!match.final) {\n legendDiffs.remove = true;\n legendDiffs.view = {\n deltaW: -MIN_POS_DELTA,\n deltaH: -MIN_POS_DELTA,\n x: -MIN_POS_DELTA,\n y: -MIN_POS_DELTA\n };\n }\n\n const legend_i = copy(match.initial || {}); let legend_f = copy(match.final || {});\n\n // 1) scale diff\n [\n \"fill\",\n \"opacity\",\n \"shape\",\n \"size\",\n \"stroke\",\n \"strokeDash\",\n \"strokeWidth\"\n ].forEach(scale => {\n if (match.initial && match.initial[scale]) {\n legendDiffs.usedScales.push(match.initial[scale]);\n }\n if (match.final && match.final[scale]) {\n legendDiffs.usedScales.push(match.final[scale]);\n }\n\n delete legend_i[scale];\n delete legend_f[scale];\n }, false);\n legendDiffs.usedScales = legendDiffs.usedScales.unique();\n legendDiffs.scale = appendCompScaleDiff(legendDiffs.usedScales, scaleDiffs);\n legendDiffs.scNames = Object.keys(legendDiffs.scale);\n // 2) encode diff\n legendDiffs.encode = !deepEqual(legend_i, legend_f);\n\n // 3) Pos Diff\n if (match.initial && match.final) {\n const legendGDatum = {\n initial: findComp(\n rawInfo.sVis.view.scenegraph().root,\n match.compName,\n \"legend\"\n )[0].items[0],\n final: findComp(\n rawInfo.eVis.view.scenegraph().root,\n match.compName,\n \"legend\"\n )[0].items[0]\n };\n\n legendDiffs.view.x = legendGDatum.final.x - legendGDatum.initial.x;\n legendDiffs.view.y = legendGDatum.final.y - legendGDatum.initial.y;\n }\n\n return legendDiffs;\n}\n\nfunction detectAxisDiffs(match, rawInfo, scaleDiffs) {\n const axisDiffs = {\n view: { deltaW: 0, deltaH: 0, x: 0, y: 0 }\n };\n if (!match.initial) {\n axisDiffs.add = true;\n axisDiffs.view = {\n deltaW: MIN_POS_DELTA,\n deltaH: MIN_POS_DELTA,\n x: MIN_POS_DELTA,\n y: MIN_POS_DELTA\n };\n } else if (!match.final) {\n axisDiffs.remove = true;\n axisDiffs.view = {\n deltaW: -MIN_POS_DELTA,\n deltaH: -MIN_POS_DELTA,\n x: -MIN_POS_DELTA,\n y: -MIN_POS_DELTA\n };\n }\n // 1) scale diff\n axisDiffs.usedScales = [];\n if (match.initial) {\n axisDiffs.usedScales.push(match.initial.scale);\n } else if (match.final) {\n axisDiffs.usedScales.push(match.final.scale);\n }\n\n axisDiffs.scale = appendCompScaleDiff(axisDiffs.usedScales, scaleDiffs);\n axisDiffs.scNames = Object.keys(axisDiffs.scale);\n if (match.final && match.initial) {\n axisDiffs.view = {\n deltaW: axisDiffs.scale.x ? axisDiffs.scale.x.rangeDelta : 0,\n deltaH: axisDiffs.scale.y ? axisDiffs.scale.y.rangeDelta : 0\n };\n if (match.initial.scale === match.final.scale) {\n if (!!match.initial.grid !== !!match.final.grid) {\n if (match.final.scale === \"x\") {\n axisDiffs.view.deltaH = match.initial.grid\n ? -MIN_POS_DELTA\n : MIN_POS_DELTA;\n } else if (match.final.scale === \"y\") {\n axisDiffs.view.deltaW = match.initial.grid\n ? -MIN_POS_DELTA\n : MIN_POS_DELTA;\n }\n } else if (!!match.initial.grid && !!match.final.grid) {\n let delta =\n get(scaleDiffs, match.initial.gridScale, \"meta\", \"rangeDelta\") || 0;\n if (match.final.orient === \"left\" || match.final.orient === \"right\") {\n axisDiffs.view.deltaW = delta;\n } else {\n axisDiffs.view.deltaH = delta;\n }\n }\n }\n }\n\n // 2) encode diff\n const axis_i = copy(match.initial) || {}; let axis_f = copy(match.final || {});\n delete axis_i.scale;\n delete axis_f.scale;\n axisDiffs.encode = !deepEqual(axis_i, axis_f);\n\n // 3) Pos Diff\n if (match.initial && match.final) {\n const axisGDatum = {\n initial: findComp(\n rawInfo.sVis.view.scenegraph().root,\n match.compName,\n \"axis\"\n )[0].items[0],\n final: findComp(\n rawInfo.eVis.view.scenegraph().root,\n match.compName,\n \"axis\"\n )[0].items[0]\n };\n let fWidth = axisGDatum.final.bounds.x2 - axisGDatum.final.bounds.x1,\n iWidth = axisGDatum.initial.bounds.x2 - axisGDatum.initial.bounds.x1,\n fHeight = axisGDatum.final.bounds.y2 - axisGDatum.final.bounds.y1,\n iHeight = axisGDatum.initial.bounds.y2 - axisGDatum.initial.bounds.y1;\n\n axisDiffs.view.deltaW += fWidth - iWidth;\n axisDiffs.view.deltaH += fHeight - iHeight;\n\n axisDiffs.view.x = axisGDatum.final.x - axisGDatum.initial.x;\n axisDiffs.view.y = axisGDatum.final.y - axisGDatum.initial.y;\n }\n\n return axisDiffs;\n}\nfunction detectViewDiff(rawInfo) {\n const viewDiffs = getViewChange(rawInfo);\n const paddingDiff = viewDiffs.final.padding - viewDiffs.initial.padding;\n viewDiffs.deltaW = viewDiffs.final.viewWidth - viewDiffs.initial.viewWidth + paddingDiff;\n viewDiffs.deltaH = viewDiffs.final.viewHeight - viewDiffs.initial.viewHeight + paddingDiff;\n viewDiffs.width = {};\n viewDiffs.height = {};\n if (Math.abs(viewDiffs.deltaW) > MIN_POS_DELTA/2) {\n viewDiffs.width[viewDiffs.deltaW > 0 ? \"increase\" : \"decrease\"] = true;\n }\n if (Math.abs(viewDiffs.deltaH) > MIN_POS_DELTA/2) {\n viewDiffs.height[viewDiffs.deltaH > 0 ? \"increase\" : \"decrease\"] = true;\n }\n viewDiffs.scNames = [];\n\n return viewDiffs;\n}\n\nfunction detectSignalDiffs(rawInfo) {\n const signalDiffs = {\n initial: rawInfo.sVis.view._runtime.signals,\n final: rawInfo.eVis.view._runtime.signals,\n meta: {\n update: [],\n exit: [],\n enter: [],\n same: []\n }\n };\n Object.keys(signalDiffs.initial)\n .concat(Object.keys(signalDiffs.final))\n .unique()\n .forEach(sgName => {\n let sg_f = signalDiffs.final[sgName];\n let sg_i = signalDiffs.initial[sgName];\n if (!sg_f) {\n signalDiffs.meta.exit.push(sgName);\n } else if (!sg_i) {\n signalDiffs.meta.enter.push(sgName);\n } else if (!deepEqual(sg_f.value, sg_i.value)) {\n signalDiffs.meta.update.push(sgName);\n } else {\n signalDiffs.meta.same.push(sgName);\n }\n });\n return signalDiffs;\n}\n\nexport function isDiffData(iData, fData) {\n const diff = { column: false, row: false };\n\n let iFields = iData[0] ? Object.keys(iData[0].datum) : [];\n let fFields = fData[0] ? Object.keys(fData[0].datum) : [];\n let sharedFields = [];\n if (!deepEqual(iFields, fFields)) {\n if (iFields.containAll(fFields)) {\n diff.column = \"removed\";\n sharedFields = fFields;\n } else if (fFields.containAll(iFields)) {\n diff.column = \"added\";\n sharedFields = iFields;\n } else {\n diff.column = \"changed\";\n sharedFields = iFields.filter(f => fFields.indexOf(f) >= 0);\n }\n } else {\n sharedFields = iFields;\n }\n\n if (sharedFields.length > 0) {\n const mappedIData = iData.map(d =>\n sharedFields.map(f => d.datum[f]).join(\",\")\n );\n const mappedFData = fData.map(d =>\n sharedFields.map(f => d.datum[f]).join(\",\")\n );\n diff.row = !deepEqual(mappedIData, mappedFData);\n } else {\n diff.row = iData.length !== fData.length;\n }\n\n if (!diff.column && !diff.row) {\n return false;\n }\n diff.sharedFields = sharedFields;\n return diff;\n}\n\n// function isDiffDataComp(iDataComp, fDataComp, rawInfo) {\n// if (iDataComp.source || fDataComp.source) {\n// let newIDataComp = iDataComp,\n// newFDataComp = fDataComp;\n// if (iDataComp.source && typeof(iDataComp.source) === \"string\") {\n// newIDataComp = findDataComp(rawInfo.sVis.spec, iDataComp.source);\n// newIDataComp.transform = (newIDataComp.transform || []).concat(iDataComp.transform);\n// }\n// if (fDataComp.source && typeof(fDataComp.source) === \"string\") {\n// newFDataComp = findDataComp(rawInfo.eVis.spec, fDataComp.source);\n// newFDataComp.transform = (newFDataComp.transform || []).concat(fDataComp.transform);\n// }\n\n// return isDiffDataComp(newIDataComp, newFDataComp, rawInfo)\n// }\n\n// let _i = copy(iDataComp), _f = copy(fDataComp);\n// delete _i.name;\n// // delete _i.values;\n// delete _f.name;\n// // delete _f.values;\n// if (_i.values && _f.values) {\n// if (_i.values.length !== _f.values.length) {\n// return true\n// }\n// if ( JSON.stringify(_i.values.sort()) !== JSON.stringify(_f.values.sort())){\n// return true\n// }\n\n// }\n// delete _i.values;\n// delete _f.values;\n// return !deepEqual(_i, _f);\n// //compare all except for \"name\". (\"values\" may take a lot of times...)\n// }\n\n// function findDataComp(spec, compName) {\n// return spec.data.find(comp => comp.name === compName);\n// }\n","import { getMarkData, unpackData } from \"../util/vgDataHelper\";\nimport { get } from \"../util/util\";\nimport { computeHasFacet, isGroupingMarktype } from \"../changeFetcher/state/util\";\nimport { getSubEncodeByChannel } from \"./util\";\n\nfunction applyMarkDiffs(\n markDiff,\n applyingDiffs,\n rawInfo,\n extraDiffsByMarktypeChange = []\n) {\n\n const markCompSummary = new MarkSummary(markDiff, rawInfo);\n\n applyingDiffs.forEach(diff => {\n markCompSummary.applyDiff(diff, extraDiffsByMarktypeChange);\n });\n return markCompSummary;\n}\n\n\nclass MarkSummary {\n constructor(markDiff, rawInfo) {\n const vegaView = rawInfo.sVis.view;\n let data = getMarkData(\n vegaView,\n markDiff.initial,\n markDiff.compName,\n\n );\n let hasFacet = markDiff.initial ? computeHasFacet(markDiff.initial) : undefined;\n let isGroupingMtype = markDiff.initial ? isGroupingMarktype(markDiff.initial.type) : undefined;\n data = hasFacet || isGroupingMtype ? unpackData(data) : data;\n this.markDiff = markDiff;\n this.rawInfo = rawInfo;\n this.isEmpty = markDiff.add;\n this.marktype = get(markDiff, \"initial\", \"type\");\n this.encode = get(markDiff, \"initial\", \"encode\", \"update\") || {};\n\n this.data = {\n hasFacet,\n isGroupingMarktype: isGroupingMtype,\n fields: data[0] ? Object.keys(data[0].datum) : [],\n values: data\n };\n\n this.scales = markDiff.meta.usedScales.reduce((scales, scName) => {\n const scale_i = vegaView._runtime.scales[scName];\n if (scale_i) {\n scales[scName] = scale_i.value;\n }\n return scales;\n }, {});\n\n this.style = get(markDiff, \"initial\", \"style\");\n }\n\n applyDiff(diff, extraDiffsByMarktypeChange) {\n\n if (diff === \"add\") {\n this.isEmpty = true;\n }\n if (diff === \"remove\") {\n this.isEmpty = false;\n }\n if (diff === \"marktype\") {\n this.marktype = get(this.markDiff, \"final\", \"type\");\n extraDiffsByMarktypeChange.forEach(extraDiff => {\n this.applyDiff(extraDiff);\n });\n } else if (diff === \"data\") {\n this.data = {\n isGroupingMarktype: this.markDiff.final ? isGroupingMarktype(this.markDiff.final.type) : undefined,\n hasFacet: this.markDiff.final ? computeHasFacet(this.markDiff.final) : undefined,\n };\n let data = getMarkData(\n this.rawInfo.eVis.view,\n this.markDiff.final,\n this.markDiff.compName\n );\n data = this.data.hasFacet || this.data.isGroupingMarktype ? unpackData(data) : data;\n this.data.fields = data[0] ? Object.keys(data[0].datum) : [];\n this.data.values = data;\n } else if (diff.indexOf(\"encode.\") >= 0) {\n const channel = diff.replace(\"encode.\", \"\");\n this.encode = Object.assign(\n {},\n this.encode,\n this.markDiff.final ? getSubEncodeByChannel(this.markDiff.final.encode.update, channel) : {}\n );\n } else if (diff.indexOf(\"scale.\") >= 0) {\n const scName = diff.replace(\"scale.\", \"\");\n const scale_f = this.rawInfo.eVis.view._runtime.scales[scName];\n if (scale_f) {\n this.scales[scName] = scale_f.value;\n } else {\n delete this.scales[scName];\n }\n } else if (diff === \"style\") {\n this.style = get(this.markDiff, \"final\", \"style\");\n }\n return this;\n }\n\n}\n\n\nexport { applyMarkDiffs };\n// Todo\n// Make Test\n","function checkMarkComp(markCompSummary) {\n const { encode } = markCompSummary;\n const { marktype } = markCompSummary;\n const { data } = markCompSummary;\n const { scales } = markCompSummary;\n\n if (markCompSummary.isEmpty) {\n return { result: true };\n }\n\n // encode - marktype\n if (marktype === \"rect\") {\n const isXEncodeValid = containAnyAttrSet(\n [\n [\"x\", \"x2\"],\n [\"x\", \"width\"],\n [\"xc\", \"width\"]\n ],\n encode\n );\n const isYEncodeValid = containAnyAttrSet(\n [\n [\"y\", \"y2\"],\n [\"y\", \"height\"],\n [\"yc\", \"height\"]\n ],\n encode\n );\n if (!isXEncodeValid || !isYEncodeValid) {\n return { result: false, reasons: [\"encode\", \"marktype\"] };\n }\n } else if (marktype === \"area\") {\n const isValid =\n encode.orient && encode.orient.value === \"horizontal\"\n ? containAnyAttrSet(\n [\n [\"x\", \"x2\", \"y\"],\n [\"x\", \"y\", \"width\"]\n ],\n encode\n )\n : containAnyAttrSet(\n [\n [\"x\", \"y2\", \"y\"],\n [\"x\", \"y\", \"height\"]\n ],\n encode\n );\n\n if (!isValid) {\n return { result: false, reasons: [\"encode\", \"marktype\"] };\n }\n } else if (marktype === \"line\") {\n const isInValid = containAnyAttrSet(\n [ [\"x2\", \"x\"], [\"y2\", \"y\"], [\"y\", \"height\"], [\"yc\", \"height\"], [\"x\", \"width\"], [\"xc\", \"width\"] ],\n encode\n );\n if (isInValid) {\n return { result: false, reasons: [\"encode\", \"marktype\"] };\n }\n } else if (marktype === \"text\") {\n if (!encode.text) {\n return { result: false, reasons: [\"encode\", \"marktype\"] };\n }\n } else if (marktype === \"rule\") {\n if (\n !containAnyAttrSet(\n [\n [\"x\", \"x2\", \"y\"],\n [\"y\", \"y2\", \"x\"]\n ],\n encode\n )\n ) {\n return { result: false, reasons: [\"encode\", \"marktype\"] };\n }\n } else if (!marktype) {\n return { result: false, reasons: [\"marktype\"] };\n }\n\n // encode - data, encode - data - scale, encode - scale\n const attrs = Object.keys(encode);\n let valid = true;\n Object.keys(scales || {}).forEach(scName => {\n\n if (!attrs.find(attr => {\n if (!encode[attr]) {\n return false;\n }\n const enAttrs = Array.isArray(encode[attr]) ? encode[attr] : [ encode[attr] ];\n return enAttrs.find(enAttr => enAttr.scale === scName);\n })) {\n valid = false;\n }\n });\n if (!valid) {\n return { reasons: [\"encode\", \"scale\"], result: false };\n }\n\n for (let i = 0; i < attrs.length; i++) {\n const enAttrs = Array.isArray(encode[attrs[i]]) ? encode[attrs[i]] : [ encode[attrs[i]] ];\n for (let j = 0; j < enAttrs.length; j++) {\n const enAttr = enAttrs[j];\n if (enAttr && enAttr.scale) {\n if (!scales[enAttr.scale]) {\n return { reasons: [\"encode\", \"scale\"], result: false };\n }\n if (enAttr.band && scales[enAttr.scale].type !== \"band\") {\n return { reasons: [\"encode\", \"scale\"], result: false };\n }\n }\n if (enAttr && enAttr.field) {\n if (data.fields.indexOf(enAttr.field) < 0) {\n return { result: false, reasons: [\"encode\", \"data\"] };\n }\n if (enAttr.scale) {\n const foundScale = scales[enAttr.scale];\n const vals = data.values.map(d => d.datum[enAttr.field]);\n const scaleDomain = foundScale.domain();\n let valid = true;\n\n if ([\"band\", \"ordinal\", \"point\"].indexOf(foundScale.type) >= 0) {\n // for discrete scales\n valid =\n valid &&\n vals.reduce(\n (acc, v) => (acc = acc && scaleDomain.indexOf(v) >= 0),\n true\n );\n } else if (foundScale.type === \"linear\") {\n const max = Math.max(...vals);\n const min = Math.min(...vals);\n valid = valid && scaleDomain[0] <= min && scaleDomain[1] >= max;\n } else if (foundScale.type === \"time\") {\n const max = Math.max(...vals);\n const min = Math.min(...vals);\n valid = valid && scaleDomain[0] <= min && scaleDomain[1] >= max;\n }\n\n if (!valid) {\n return { reasons: [\"encode\", \"data\", \"scale\"], result: false };\n }\n }\n }\n }\n }\n return { result: true };\n}\n\nfunction containAnyAttrSet(possibleAttrSets, encode) {\n return possibleAttrSets.reduce((valid, attrs) => {\n const hasAttrs = attrs.reduce(\n (hasAttrs, attr) => hasAttrs && encode[attr],\n true\n );\n return valid || hasAttrs;\n }, false);\n}\n\n// function checkViewAxisConstraint(pseudoTl) {\n// let yAxisViewChange, markViewChanges = [], xAxisViewChange;\n// pseudoTl.concat.forEach((stage, i) => {\n// stage.sync.forEach(pseudoStep => {\n// let deltaW = get(pseudoStep, \"diff\", \"meta\", \"view\", \"deltaW\"),\n// deltaH = get(pseudoStep, \"diff\", \"meta\", \"view\", \"deltaH\");\n\n// if (pseudoStep.diff.compType === \"axis\" && pseudoStep.diff.compName === \"x\" && !xAxisViewChange) {\n// xAxisViewChange = {\n// widthChange: deltaW > 0 ? \"inc\" : (deltaW < 0 ? \"dec\" : false),\n// orient: pseudoStep.diff.initial.orient,\n// when: i\n// }\n// }\n// if (pseudoStep.diff.compType === \"axis\" && pseudoStep.diff.compName === \"y\" && !yAxisViewChange) {\n// yAxisViewChange = {\n// heightChange: deltaH > 0 ? \"inc\" : (deltaH < 0 ? \"dec\" : false),\n// orient: pseudoStep.diff.initial.orient,\n// when: i\n// }\n// }\n// if (pseudoStep.diff.compType === \"mark\" ) {\n// markViewChanges.push({\n// widthChange: deltaW > 0 ? \"inc\" : (deltaW < 0 ? \"dec\" : false),\n// heightChange: deltaH > 0 ? \"inc\" : (deltaH < 0 ? \"dec\" : false),\n// when: i\n// })\n// }\n// })\n// })\n// if (xAxisViewChange.orient === \"bottom\") {\n// if (xAxisViewChange.heightChange === \"inc\") {\n// if (xAxisViewChange.when > yAxisViewChange.when) {\n// return false\n// } else if (xAxisViewChange.when > Math.min(...markViewChanges.map(c => c.when))) {\n// return false\n// }\n// } else if (xAxisViewChange.heightChange === \"dec\") {\n// if (xAxisViewChange.when < yAxisViewChange.when) {\n// return false\n// } else if (xAxisViewChange.when < Math.max(...markViewChanges.map(c => c.when))) {\n// return false\n// }\n// }\n// } else if (yAxisViewChange.orient === \"right\" &&\n// yAxisViewChange.heightChange === \"inc\") {\n// console.error(\"TODO\");\n// }\n// return true;\n// }\n\nexport {\n checkMarkComp\n // checkViewAxisConstraint as checkViewAxisConstraint\n};\n","import { get, deepEqual } from \"../util/util\";\nimport { MIN_POS_DELTA } from \"./util\";\n\nfunction validate(pseudoTimeline, stageN) {\n return (\n checkViewAxisConstraint(pseudoTimeline) &&\n checkViewLegendConstraint(pseudoTimeline) &&\n checkUnempty(pseudoTimeline) &&\n pseudoTimeline.concat.length === stageN &&\n checkMarkConstraint(pseudoTimeline)\n );\n}\nfunction checkUnempty(pseudoTl) {\n return !pseudoTl.concat.find(stage => stage.sync.length === 0);\n}\n\nfunction checkViewAxisConstraint(pseudoTl) {\n let yAxisViewChange, markViewChanges = [], xAxisViewChange;\n pseudoTl.concat.forEach((stage, i) => {\n stage.sync.forEach(pseudoStep => {\n let deltaW = get(pseudoStep, \"diff\", \"meta\", \"view\", \"x\"),\n deltaH = get(pseudoStep, \"diff\", \"meta\", \"view\", \"y\");\n\n if (pseudoStep.diff.compType === \"axis\" && pseudoStep.diff.compName === \"x\" && !xAxisViewChange) {\n xAxisViewChange = {\n width: deltaW >= MIN_POS_DELTA ? \"inc\" : (deltaW <= -MIN_POS_DELTA ? \"dec\" : false),\n height: deltaH >= MIN_POS_DELTA ? \"inc\" : (deltaH <= -MIN_POS_DELTA ? \"dec\" : false),\n orient: get(pseudoStep, \"diff\", \"initial\", \"orient\") || get(pseudoStep, \"diff\", \"final\", \"orient\"),\n when: i\n };\n }\n if (pseudoStep.diff.compType === \"axis\" && pseudoStep.diff.compName === \"y\" && !yAxisViewChange) {\n yAxisViewChange = {\n width: deltaW >= MIN_POS_DELTA ? \"inc\" : (deltaW <= -MIN_POS_DELTA ? \"dec\" : false),\n height: deltaH >= MIN_POS_DELTA ? \"inc\" : (deltaH <= -MIN_POS_DELTA ? \"dec\" : false),\n orient: get(pseudoStep, \"diff\", \"initial\", \"orient\") || get(pseudoStep, \"diff\", \"final\", \"orient\"),\n when: i\n };\n }\n\n if (pseudoStep.diff.compType === \"mark\" ) {\n markViewChanges.push({\n width: deltaW >= MIN_POS_DELTA ? \"inc\" : (deltaW <= -MIN_POS_DELTA ? \"dec\" : false),\n height: deltaH >= MIN_POS_DELTA ? \"inc\" : (deltaH <= -MIN_POS_DELTA ? \"dec\" : false),\n when: i\n });\n }\n });\n });\n\n for (const condition of [[xAxisViewChange, yAxisViewChange, \"bottom\", \"height\"], [yAxisViewChange, xAxisViewChange, \"right\", \"width\"]]) {\n let [axis, otherAxis, orient, side] = condition;\n\n if (get(axis, \"orient\") === orient) {\n if (axis[side] === \"inc\") {\n if (axis.when > get(otherAxis, \"when\")) {\n return false;\n } if ((markViewChanges.length > 0) &&\n (axis.when > Math.min(...markViewChanges.map(c => c.when)))) {\n return false;\n }\n } else if (axis[side] === \"dec\") {\n if (axis.when < get(otherAxis, \"when\")) {\n return false;\n } else if ((markViewChanges.length > 0) &&\n (axis.when < Math.max(...markViewChanges.map(c => c.when)))) {\n return false;\n }\n }\n }\n }\n\n return true;\n}\n\nfunction checkViewLegendConstraint(pseudoTl) {\n const viewChanges = {\n marks: [],\n legends: []\n };\n\n pseudoTl.concat.forEach((stage, i) => {\n stage.sync.forEach(pseudoStep => {\n const delta = {\n x: get(pseudoStep, \"diff\", \"meta\", \"view\", \"x\"),\n y: get(pseudoStep, \"diff\", \"meta\", \"view\", \"y\"),\n width: get(pseudoStep, \"diff\", \"meta\", \"view\", \"deltaW\"),\n height: get(pseudoStep, \"diff\", \"meta\", \"view\", \"deltaH\")\n };\n\n if ([\"legend\", \"mark\"].indexOf(pseudoStep.diff.compType) >= 0) {\n const vc = {\n x:\n delta.x >= MIN_POS_DELTA\n ? \"inc\"\n : delta.x <= -MIN_POS_DELTA\n ? \"dec\"\n : false,\n y:\n delta.y >= MIN_POS_DELTA\n ? \"inc\"\n : delta.y <= -MIN_POS_DELTA\n ? \"dec\"\n : false,\n width:\n delta.width >= MIN_POS_DELTA\n ? \"inc\"\n : delta.width <= -MIN_POS_DELTA\n ? \"dec\"\n : false,\n height:\n delta.height >= MIN_POS_DELTA\n ? \"inc\"\n : delta.height <= -MIN_POS_DELTA\n ? \"dec\"\n : false,\n when: i\n };\n if (vc.x || vc.y || vc.width || vc.height) {\n if (pseudoStep.diff.compType === \"legend\") {\n vc.orient =\n get(pseudoStep, \"diff\", \"initial\", \"orient\") ||\n get(pseudoStep, \"diff\", \"final\", \"orient\") ||\n \"right\";\n viewChanges.legends.push(vc);\n } else {\n viewChanges.marks.push(vc);\n }\n }\n }\n });\n });\n if (viewChanges.marks.length === 0 || viewChanges.legends.length === 0) {\n return true;\n }\n\n for (const markViewChange of viewChanges.marks) {\n const rightLegendVCs = viewChanges.legends.filter(\n vc => vc.orient === \"right\"\n );\n if (rightLegendVCs.length > 0) {\n if (markViewChange.width === \"inc\") {\n if (\n markViewChange.when <\n Math.min(\n ...rightLegendVCs.filter(vc => vc.x === \"inc\").map(c => c.when)\n )\n ) {\n return false;\n }\n } else if (markViewChange.width === \"dec\") {\n if (\n markViewChange.when >\n Math.max(\n ...rightLegendVCs.filter(vc => vc.x === \"dec\").map(c => c.when)\n )\n ) {\n return false;\n }\n }\n }\n const bottomLegendVCs = viewChanges.legends.filter(\n vc => vc.orient === \"bottom\"\n );\n if (bottomLegendVCs.length > 0) {\n if (markViewChange.height === \"inc\") {\n if (\n markViewChange.when <\n Math.min(\n ...bottomLegendVCs.filter(vc => vc.y === \"inc\").map(c => c.when)\n )\n ) {\n return false;\n }\n } else if (markViewChange.height === \"dec\") {\n if (\n markViewChange.when >\n Math.max(\n ...bottomLegendVCs.filter(vc => vc.y === \"dec\").map(c => c.when)\n )\n ) {\n return false;\n }\n }\n }\n }\n\n return true;\n}\n\nfunction checkMarkConstraint(pseudoTl) {\n for (const stage of pseudoTl.concat) {\n const markPseduoSteps = stage.sync.filter(\n pseudoStep => pseudoStep.diff.compType === \"mark\"\n );\n for (let i = 0; i < markPseduoSteps.length; i++) {\n const pseudoStep = markPseduoSteps[i];\n if (\n (\n deepEqual(pseudoStep.factorSets.current, [\"data\"]) ||\n deepEqual(pseudoStep.factorSets.current, [\"data\", \"marktype\"])\n ) &&\n pseudoStep.diff.meta.data.row === false\n ) {\n return false;\n }\n /*\n if pseudoStep.factorSets.current has \"data\"\n && pseudoStep.diff.meta.data.row === false\n && pseudoStep.diff.initial.encode.\n */\n }\n }\n return true;\n}\n\nexport { checkViewAxisConstraint, validate, checkUnempty };\n","import { applyMarkDiffs } from \"./diffApplier\";\nimport { checkMarkComp } from \"./markCompChecker\";\nimport { validate } from \"./pseudoTimelineValidator\";\nimport { copy, enumArraysByItems } from \"../util/util\";\nimport { MIN_POS_DELTA } from \"./util\";\n\n// Enuemerate a set of steps ( diff.compType === \"mark\"\n );\n\n const enumedMarksPusedoSteps = markDiffs.map(markDiff => {\n // 1. find valid splitting factors of the mark components.\n const { allFactors, extraFactorsByMarktype } = findAllFactors(markDiff);\n\n // 2. enumerate by assigning a value among [0, ..., stageN -1] on each factor\n const skippingCondition = new SkippingConditions();\n const enumed = [];\n\n for (let i = 0; i < Math.pow(stageN, allFactors.length); i++) {\n const factorAssignment = getFactorAssignment(i, allFactors.length, stageN);\n\n let valid = true;\n const factorSets = [];\n for (let j = 0; j < stageN - 1; j++) {\n const applyingFactors = allFactors.filter((factor, factorId) => {\n return factorAssignment[factorId] >= stageN - j - 1;\n });\n\n if (skippingCondition.check(applyingFactors)) {\n valid = false;\n break;\n }\n\n const markCompSummary = applyMarkDiffs(\n markDiff,\n applyingFactors,\n rawInfo,\n extraFactorsByMarktype\n );\n // 3. Check if the intermediate mark components are valid. If not, exclude the enumerated steps.\n const { reasons } = checkMarkComp(markCompSummary);\n\n if (reasons) {\n // register a new skipping condition\n const newSkippingCondition = allFactors\n .filter(factor =>\n reasons.find(reason => factor.indexOf(reason) >= 0)\n )\n .map(factor => {\n return {factor, include: applyingFactors.indexOf(factor) >= 0};\n });\n skippingCondition.register(newSkippingCondition);\n\n valid = false;\n break;\n } else if (\n !factorSets.find(\n appFctrs => appFctrs.toString() === applyingFactors.toString()\n )\n ) {\n factorSets.push(applyingFactors);\n }\n }\n\n if (valid) {\n factorSets.push(allFactors);\n if (\n !enumed.find(\n fctrSets => fctrSets.toString() === factorSets.toString()\n )\n ) {\n enumed.push(factorSets);\n }\n }\n }\n\n return enumed.map(factorSets => {\n let prevFactorSet;\n return factorSets.map(factorSet => {\n let newPseudoStep = {\n diff: markDiff,\n factorSets: {\n current: prevFactorSet\n ? factorSet.exclude(prevFactorSet)\n : factorSet,\n applied: factorSet,\n all: allFactors,\n extraByMarktype: extraFactorsByMarktype\n }\n };\n prevFactorSet = factorSet;\n return newPseudoStep;\n });\n });\n\n });\n\n const axespseudoSteps = getAxisPseudoSteps(diffs);\n\n const legendspseudoSteps = getLegendPseudoSteps(diffs);\n\n let pseudoTimelines;\n if (enumedMarksPusedoSteps.length === 1) {\n pseudoTimelines = enumArraysByItems(\n enumedMarksPusedoSteps[0],\n legendspseudoSteps.concat(axespseudoSteps),\n enumTlByStep\n ).map(pseudoTl => {\n return {\n concat: pseudoTl.map(stage => {\n return { sync: Array.isArray(stage) ? stage : [stage] };\n })\n };\n });\n } else {\n console.error(\n \"Currently, Gemini Recommendation only supports a single mark without adding or removing.\"\n );\n console.error(\"TODO: cross join the pseudo timelines of each mark.\");\n }\n\n return (\n pseudoTimelines\n .map(pseudoTl => {\n pseudoTl.concat = pseudoTl.concat.map(stage => {\n let currSync = stage.sync;\n\n // filter empty mark pStep\n currSync = currSync.filter(pStep => {\n return (pStep.diff.compType !== \"mark\") ||\n (\n !(\n (pStep.factorSets.applied.length === 0) ||\n (pStep.factorSets.current.length === 0)\n ) &&\n !(\n (pStep.factorSets.all.indexOf(\"add\") >= 0) &&\n (pStep.factorSets.applied.indexOf(\"add\") < 0)\n ) &&\n !(\n (pStep.factorSets.all.indexOf(\"remove\") >= 0) &&\n (pStep.factorSets.applied.length !== pStep.factorSets.current.length)\n )\n );\n\n });\n\n\n\n return { sync: currSync };\n });\n return pseudoTl;\n })\n .filter(pseudoTl => validate(pseudoTl, stageN))\n // .map((pseudoTl, i) => appendGuideMoves(pseudoTl, axespseudoSteps, legendspseudoSteps))\n .map(pseudoTl => appendViewDiff(pseudoTl, diffs.viewDiffs))\n .map(pseudoTl => appendGridChanges(pseudoTl))\n .map(pseudoTl => appendTiming(pseudoTl, timing))\n );\n}\n\nfunction appendTiming(pseudoTl, timing = {}) {\n const totalDuration = timing.totalDuration || 2000;\n pseudoTl.concat.forEach(stage => {\n for (const pseudoStep of stage.sync) {\n pseudoStep.timing = {\n duration: { ratio: Math.floor(100 / pseudoTl.concat.length) / 100 }\n };\n\n }\n });\n pseudoTl.totalDuration = totalDuration;\n return pseudoTl;\n}\nfunction getLegendPseudoSteps(diffs) {\n return diffs.compDiffs\n .filter(\n diff =>\n diff.compType === \"legend\" &&\n (diff.meta.scale ||\n diff.meta.encode ||\n diff.meta.add ||\n diff.meta.remove ||\n Math.abs(diff.meta.view.x) - MIN_POS_DELTA > 0 ||\n Math.abs(diff.meta.view.y) - MIN_POS_DELTA > 0 ||\n Math.abs(diff.meta.view.deltaH) - MIN_POS_DELTA > 0 ||\n Math.abs(diff.meta.view.deltaW) - MIN_POS_DELTA > 0)\n )\n .reduce((steps, diff) => {\n let factors = [];\n if (diff.meta.add) {\n factors = [`add.${diff.meta.usedScales.sort().join(\"_\")}`];\n } else if (diff.meta.remove) {\n factors = [`remove.${diff.meta.usedScales.sort().join(\"_\")}`];\n } else {\n if (diff.meta.scale) {\n factors = factors.concat(Object.keys(diff.meta.scale).map(scName => `scale.${scName}`));\n }\n if (diff.meta.encode) {\n factors.push(\"encode\");\n }\n if (diff.meta.view.x !== 0 || diff.meta.view.y !== 0) {\n factors.push(\"encode.position\");\n }\n }\n\n // return steps.concat(\n // factors.map(fctr => {\n // return { diff: diff, factorSets: {current: [fctr], all: factors} }\n // })\n // );\n return steps.concat({ diff, factorSets: {current: factors, all: factors} });\n }, []);\n}\nfunction getAxisPseudoSteps(diffs) {\n return diffs.compDiffs\n .filter(\n diff =>\n diff.compType === \"axis\" &&\n (diff.meta.scale ||\n diff.meta.encode ||\n diff.meta.add ||\n diff.meta.remove ||\n Math.abs(diff.meta.view.x) - MIN_POS_DELTA > 0 ||\n Math.abs(diff.meta.view.y) - MIN_POS_DELTA > 0 ||\n Math.abs(diff.meta.view.deltaH) - MIN_POS_DELTA > 0 ||\n Math.abs(diff.meta.view.deltaW) - MIN_POS_DELTA > 0)\n )\n .filter(diff => {\n if (diff.meta.scale[diff.meta.usedScales[0]]) {\n const scaleDiff = diff.meta.scale[diff.meta.usedScales[0]];\n return scaleDiff.rangeDelta === 0 &&\n !scaleDiff.domainValueDiff &&\n scaleDiff.stayDiscrete\n ? false\n : true;\n }\n return true;\n })\n .map(diff => {\n let factors = [];\n if (diff.meta.add) {\n factors = [`add.${diff.compName}`];\n } else if (diff.meta.remove) {\n factors = [`remove.${diff.compName}`];\n } else {\n if (diff.meta.scale) {\n factors = factors.concat(Object.keys(diff.meta.scale).map(scName => `scale.${scName}`));\n factors.push(\"encode\");\n }\n\n if (diff.meta.view.x !== 0 || diff.meta.view.y !== 0) {\n factors.push(\"encode.position\");\n }\n }\n return { diff, factorSets: {current: factors, applied: factors, all: factors} };\n });\n}\n\n\nfunction appendViewDiff(pseudoTl, viewDiffs) {\n const done = {\n increase: { width: false, height: false },\n decrease: { width: false, height: false }\n };\n function appendDiff(stage, incOrDec) {\n for (const which of [\"width\", \"height\"]) {\n if (\n viewDiffs[which][incOrDec] &&\n needViewDiff(stage.sync, incOrDec, which) &&\n !done[incOrDec][which]\n ) {\n const found = stage.sync.find(pStep => pStep.diff.compType === \"view\");\n if (found) {\n found.factorSets.current.push(which);\n } else {\n stage.sync.push({\n\n diff: {\n compName: viewDiffs.compName,\n compType: viewDiffs.compType,\n meta: viewDiffs\n },\n factorSets: { current: [which] }\n });\n }\n\n done[incOrDec][which] = true;\n }\n }\n\n return stage;\n }\n return {\n concat: pseudoTl.concat\n .map((stage, j) => appendDiff(stage, \"increase\", j))\n .reverse()\n .map(stage => appendDiff(stage, \"decrease\"))\n .reverse()\n };\n}\nfunction needViewDiff(pseudoSteps, incOrDec, which) {\n for (const pseudoStep of pseudoSteps.filter(\n step => [\"mark\", \"axis\", \"legend\"].indexOf(step.diff.compType) >= 0\n )) {\n let deltaProp = which === \"width\" ? \"x\" : \"y\";\n if (pseudoStep.diff.compType === \"mark\") {\n deltaProp = which === \"width\" ? \"deltaW\" : \"deltaH\";\n } else if (pseudoStep.diff.compType === \"axis\") {\n if (\n [\"left\", \"top\"].indexOf(\n (pseudoStep.diff.initial || pseudoStep.diff.final).orient\n ) >= 0\n ) {\n deltaProp = which === \"width\" ? \"deltaW\" : \"deltaH\";\n }\n }\n let hasViwRelatedScaleDiff = true;\n if (pseudoStep.diff.compType === \"mark\") {\n hasViwRelatedScaleDiff =\n pseudoStep.factorSets.current.indexOf(\n which === \"width\" ? \"scale.x\" : \"scale.y\"\n ) >= 0;\n }\n\n if (\n pseudoStep.diff.meta.view[deltaProp] >= MIN_POS_DELTA &&\n incOrDec === \"increase\" &&\n hasViwRelatedScaleDiff\n ) {\n return true;\n }\n if (\n pseudoStep.diff.meta.view[deltaProp] <= -MIN_POS_DELTA &&\n incOrDec === \"decrease\" &&\n hasViwRelatedScaleDiff\n ) {\n return true;\n }\n }\n return false;\n}\n\n// When the size of the mark view changes, grid lines should be extended.\nfunction appendGridChanges(pseudoTl) {\n // Currently only one pStep is generated.\n let xAxisPStep, yAxisPStep;\n pseudoTl.concat.forEach(stage => {\n xAxisPStep = xAxisPStep || stage.sync.find(aPStep =>\n !aPStep.diff.meta.add &&\n !aPStep.diff.meta.remove &&\n aPStep.diff.compType === \"axis\" &&\n aPStep.diff.meta.scNames[0] === \"x\");\n yAxisPStep = yAxisPStep || stage.sync.find(aPStep =>\n !aPStep.diff.meta.add &&\n !aPStep.diff.meta.remove &&\n aPStep.diff.compType === \"axis\" &&\n aPStep.diff.meta.scNames[0] === \"y\");\n });\n\n if (!xAxisPStep && !yAxisPStep) {\n return pseudoTl;\n }\n return {\n ...pseudoTl,\n concat: pseudoTl.concat.map(stage => {\n let newStage = copy(stage);\n // if there is any mark.view change\n if ( stage.sync.find(pStep => [\"mark\", \"axis\"].indexOf(pStep.diff.compType) >= 0 && pStep.diff.meta.view.deltaH !== 0) ) {\n if (xAxisPStep && !stage.sync.find(pStep => pStep.diff.compType === \"axis\" && pStep.diff.meta.scNames[0] === \"x\")) {\n\n xAxisPStep.factorSets.all.push(\"encode.only.grid\");\n let gridChangingAxisPStep = {\n ...xAxisPStep,\n factorSets: {\n all: copy(xAxisPStep.factorSets.all),\n applied: [\"encode.only.grid\"],\n current: [\"encode.only.grid\"]\n }\n };\n xAxisPStep.factorSets.applied.push(\"encode.only.grid\");\n newStage.sync.push(gridChangingAxisPStep);\n }\n }\n\n if ( stage.sync.find(pStep => [\"mark\", \"axis\"].indexOf(pStep.diff.compType) >= 0 && pStep.diff.meta.view.deltaW !== 0) ) {\n if (yAxisPStep && !stage.sync.find(pStep => pStep.diff.compType === \"axis\" && pStep.diff.meta.scNames[0] === \"y\")) {\n yAxisPStep.factorSets.all.push(\"encode.only.grid\");\n let gridChangingAxisPStep = {\n ...yAxisPStep,\n factorSets: {\n all: copy(yAxisPStep.factorSets.all),\n applied: [\"encode.only.grid\"],\n current: [\"encode.only.grid\"]\n }\n };\n yAxisPStep.factorSets.applied.push(\"encode.only.grid\");\n newStage.sync.push(gridChangingAxisPStep);\n }\n }\n\n return newStage;\n })\n };\n\n}\nfunction enumTlByStep(Tl, step) {\n const newTls = [];\n for (let i = 0; i < Tl.length; i++) {\n const newTl = copy(Tl);\n if (!Array.isArray(newTl[i])) {\n newTl[i] = [newTl[i]];\n }\n const found = newTl[i].find(stp => stp.diff.compName === step.diff.compName);\n if (found) {\n found.factorSets.current = found.factorSets.current.concat(\n step.factorSets.current\n );\n } else {\n newTl[i].push(step);\n }\n\n newTls.push(newTl);\n }\n return newTls;\n}\n\n// choose the factors having diffs between initial and final.\nfunction findAllFactors(markDiff) {\n const allFactors = [];\n let diffInfo = markDiff.meta;\n let extraFactorsByMarktype = [];\n if (diffInfo.add) {\n allFactors.push(\"add\");\n }\n\n if (diffInfo.remove) {\n allFactors.push(\"remove\");\n return { allFactors, extraFactorsByMarktype };\n }\n\n if (diffInfo.marktype) {\n allFactors.push(\"marktype\");\n extraFactorsByMarktype.push(\"encode.others\");\n }\n if (diffInfo.data) {\n if (diffInfo.data.row !== false || diffInfo.data.column !== \"removed\") {\n allFactors.push(\"data\");\n }\n }\n if (diffInfo.scale) {\n Object.keys(diffInfo.scale).forEach(scName => {\n const scaleDiff = diffInfo.scale[scName];\n if (scaleDiff) {\n allFactors.push(`scale.${scName}`);\n }\n });\n }\n Object.keys(diffInfo.encode).forEach(chName => {\n const chDiff = diffInfo.encode[chName];\n if (chDiff === true) {\n allFactors.push(`encode.${chName}`);\n } else if (chDiff === \"byMarktypeChange\") {\n extraFactorsByMarktype.push(`encode.${chName}`);\n }\n });\n return { allFactors, extraFactorsByMarktype };\n}\n\nfunction getFactorAssignment(i, factorLen, stageN) {\n let quotient = i;\n const assignment = new Array(factorLen);\n for (let j = 0; j < factorLen; j++) {\n assignment[j] = quotient % stageN;\n quotient = Math.floor(quotient / stageN);\n }\n return assignment;\n}\n\nclass SkippingConditions {\n constructor() {\n this.registered = [];\n }\n\n register(condition) {\n this.registered.push(condition);\n }\n\n check(factors) {\n for (let i = 0; i < this.registered.length; i++) {\n const condition = this.registered[i];\n const result = condition.reduce((satisfying, condF) => {\n return (satisfying =\n satisfying && factors.indexOf(condF.factor) >= 0 === condF.include);\n }, true);\n\n if (result) {\n return true;\n }\n }\n return false;\n }\n}\n\nexport { findAllFactors, SkippingConditions, enumeratePseudoTimelines };\n\n// legendspseudoSteps.map(pStep => pStep.diff.compName)\n// .unique()\n// .forEach(legendName => {\n// let mergedLegendStep = mergePusedoSteps(currSync.filter(pStep => pStep.diff.compName === legendName))\n// if (mergedLegendStep){\n// currSync = currSync.filter(pStep => pStep.diff.compName !== legendName).concat([mergedLegendStep])\n// }\n// });\n// function mergePusedoSteps(pSteps) {\n// if (pSteps.length === 0) {\n// return;\n// }\n// const merged = copy(pSteps[0]);\n// merged.factorSets = {\n// applied: pSteps.reduce((applied, pStep) => applied.concat(pStep.factorSets ? pStep.factorSets.applied : []), []),\n// all: merged.factorSets ? merged.factorSets.all : [],\n// extraByMarktype: merged.factorSets ? merged.factorSets.extraByMarktype : []\n// }\n\n// return merged;\n// }\n\n// function appendGuideMoves(pseudoTl, axespseudoSteps, legendspseudoSteps) {\n// let bottomAxisPStep = axespseudoSteps.find(pStep =>\n// (pStep.diff.initial && pStep.diff.initial.orient === \"bottom\") &&\n// (pStep.diff.final && pStep.diff.final.orient === \"bottom\")\n// );\n// let rightLegendPStep = legendspseudoSteps.find(pStep =>\n// (pStep.diff.initial && pStep.diff.initial.orient === \"right\") &&\n// (pStep.diff.final && pStep.diff.final.orient === \"right\")\n// );\n// let bottomAxisMoved = false;\n// pseudoTl.concat.forEach(stage => {\n// let markPseudoSteps = stage.sync.filter(pStep => pStep.diff.compType === \"mark\");\n// let widthChange = !!markPseudoSteps.find(mPseudoStep =>\n// mPseudoStep.factorSets.current.indexOf(\"scale.x\") >= 0 && mPseudoStep.diff.meta.view.deltaW !== 0\n// );\n\n// if (bottomAxisPStep) {\n// let thisbottomAxisPStep = stage.sync.find(pStep => pStep.diff.compName === bottomAxisPStep.diff.compName );\n// if (bottomAxisMoved && thisbottomAxisPStep) {\n// thisbottomAxisPStep.factorSets.current = thisbottomAxisPStep.factorSets.current.filter(fctr => fctr !== \"encode.position\");\n// }\n\n// if ((markPseudoSteps.length > 0)) {\n// let heightChange = !!markPseudoSteps.find(mPseudoStep =>\n// mPseudoStep.factorSets.current.indexOf(\"scale.y\") >= 0 && mPseudoStep.diff.meta.view.deltaH !== 0\n// );\n// if (heightChange) {\n// // If marks height change, the bottom axis should move\n// if (!thisbottomAxisPStep && !bottomAxisMoved) {\n// // add axisPStep only changing axisG\n// stage.sync.push({\n// diff: bottomAxisPStep.diff,\n// factorSets: {\n// current: [\"encode.position\"],\n// applied: [\"encode.position\"],\n// all: bottomAxisPStep.factorSets.all\n// }\n// })\n// }\n// bottomAxisMoved = true;\n// } else {\n// // If marks height does not change, the bottom axis should not move\n// if (thisbottomAxisPStep && !bottomAxisMoved) {\n// // bottomAxisPStep should not move\n// thisbottomAxisPStep.factorSets.current = thisbottomAxisPStep.factorSets.current.filter(fctr => fctr !== \"encode.position\")\n\n// }\n// bottomAxisMoved = false;\n// }\n// } else {\n// if (thisbottomAxisPStep) {\n// bottomAxisMoved = true;\n// }\n// }\n// }\n\n// })\n\n// return pseudoTl;\n// // If marks width change, the right axis should move\n// // If marks width change, the right legend should move\n\n// // If marks width does nont change, the right axis should not move\n// // If marks width does not change, the right legend should not move\n// }","import { get } from \"../util/util\";\n\nexport function PERCEPTION_CAP(duration) {\n // if (duration < 0) {\n // console.error(\"Duration cannot be negative!\");\n // } else if (duration <= 0) {\n // return 0.3\n // } else if (duration <= 667) {\n // return 0.5\n // } else if (duration <= 1000) {\n // return 0.8\n // } else if (duration <= 2000) {\n // return 1.0\n // } else\n // return 1.5\n // }\n // return 1.00 / (1 + Math.exp(-(duration-1250)/180)) + 0.4\n // return 1.00 / (1 + Math.exp(-(duration-1250)/180)) + 0.35\n return 1.4 / (1 + Math.exp(-(duration - 1200) / 300));\n}\n\n// Tuning for the mturk study\n// // Stimulus 1\n// stage1-rank1 > stage3-rank1, stage2-rank2, stage2-rank3\n// stage2-rank1 > stage3-rank1, stage2-rank2, stage2-rank3\n\n// // Stimulus 2\n// s1R1 > *\n\n// // Stimulus 3\n// stage1-rank1 > *\n// stage2-rank1 > stage2-rank2, stage3-rank1\n\n// // Stimulus 4\n// stage1-rank1 > stage2-rank3\n\nconst sameDomain = (pseudoStep, foundFactor) => {\n return (\n get(\n pseudoStep,\n \"diff\",\n \"meta\",\n \"scale\",\n foundFactor.split(\".\")[1],\n \"domainSpaceDiff\"\n ) === false\n );\n};\nconst diffDomain = (pseudoStep, foundFactor) => {\n return (\n get(\n pseudoStep,\n \"diff\",\n \"meta\",\n \"scale\",\n foundFactor.split(\".\")[1],\n \"domainSpaceDiff\"\n ) === true\n );\n};\nconst noFactors = factors => {\n return function(pseudoStep) {\n for (const fctr of factors) {\n if (pseudoStep.factorSets.current.indexOf(fctr) >= 0) {\n return false;\n }\n }\n return true;\n };\n};\nexport const PERCEPTION_COST = {\n mark: [\n { factor: \"marktype\", cost: 0.3 },\n { factor: \"data\", cost: 0.5 },\n { factor: \"scale.y\", cost: 0.4, with: [sameDomain] },\n { factor: \"scale.x\", cost: 0.4, with: [sameDomain] },\n { factor: \"scale.color\", cost: 0.4, with: [sameDomain] },\n { factor: \"scale.shape\", cost: 0.4, with: [sameDomain] },\n { factor: \"scale.size\", cost: 0.4, with: [sameDomain] },\n { factor: \"scale.y\", cost: 0.65, without: [sameDomain] },\n { factor: \"scale.x\", cost: 0.65, without: [sameDomain] },\n { factor: \"scale.color\", cost: 0.65, without: [sameDomain] },\n { factor: \"scale.shape\", cost: 0.65, without: [sameDomain] },\n { factor: \"scale.size\", cost: 0.65, without: [sameDomain] },\n { factor: \"encode.x\", cost: 0.3 },\n { factor: \"encode.y\", cost: 0.3 },\n { factor: \"encode.color\", cost: 0.3 },\n { factor: \"encode.shape\", cost: 0.3 },\n { factor: \"encode.size\", cost: 0.3 },\n { factor: \"encode.opacity\", cost: 0.2 }\n ],\n axis: [\n // { factor: \"scale.*\", cost: 0.7 },\n // { factor: \"add.*\", cost: 1 },\n // { factor: \"remove.*\", cost: 1 },\n { factor: \"encode\", cost: 0.3 },\n { factor: \"scale\", cost: 0.5, with: [sameDomain] },\n { factor: \"add\", cost: 0.7 },\n { factor: \"remove\", cost: 0.7 },\n { factor: \"scale\", cost: 1, without: [sameDomain] }\n ],\n legend: [\n // { factor: \"scale.*\", cost: 0.7 },\n // { factor: \"add.*\", cost: 1 },\n // { factor: \"remove.*\", cost: 1 },\n { factor: \"encode\", cost: 0.3 },\n { factor: \"scale\", cost: 0.5, with: [sameDomain] },\n { factor: \"add\", cost: 0.7 },\n { factor: \"remove\", cost: 0.7 },\n { factor: \"scale\", cost: 1, without: [sameDomain] }\n ]\n};\n\nexport const PENALTY_COMBOS = [\n {\n chunks: [\n [\n {\n compType: \"mark\",\n factor: \"scale.y\",\n with: [diffDomain, noFactors([\"encode.y\"])]\n }\n ]\n ],\n cost: 1.0\n },\n {\n chunks: [\n [\n {\n compType: \"mark\",\n factor: \"scale.x\",\n with: [diffDomain, noFactors([\"encode.x\"])]\n }\n ]\n ],\n cost: 1.0\n },\n {\n chunks: [\n [\n {\n compType: \"mark\",\n factor: \"scale.size\",\n with: [diffDomain, noFactors([\"encode.size\"])]\n }\n ]\n ],\n cost: 1.0\n },\n {\n chunks: [\n [\n {\n compType: \"mark\",\n factor: \"scale.color\",\n with: [diffDomain, noFactors([\"encode.color\"])]\n }\n ]\n ],\n cost: 1.0\n }\n];\n\nexport const DISCOUNT_COMBOS = [\n {\n chunks: [\n [\n { compType: \"mark\", factor: \"scale.y\", with: [sameDomain] },\n { compType: \"mark\", factor: \"scale.x\", with: [sameDomain] }\n ]\n ],\n cost: -0.2\n },\n {\n chunks: [\n [\n { compType: \"mark\", factor: \"scale.size\" },\n { compType: \"mark\", factor: \"scale.shape\" }\n ],\n [\n { compType: \"mark\", factor: \"scale.color\" },\n { compType: \"mark\", factor: \"scale.shape\" }\n ],\n [\n { compType: \"mark\", factor: \"scale.color\" },\n { compType: \"mark\", factor: \"scale.size\" }\n ],\n [\n { compType: \"mark\", factor: \"scale.size\" },\n { compType: \"mark\", factor: \"scale.opacity\" }\n ],\n [\n { compType: \"mark\", factor: \"scale.opacity\" },\n { compType: \"mark\", factor: \"scale.shape\" }\n ],\n [\n { compType: \"mark\", factor: \"scale.color\" },\n { compType: \"mark\", factor: \"scale.opacity\" }\n ],\n [\n { compType: \"mark\", factor: \"scale.color\" },\n { compType: \"mark\", factor: \"scale.size\" },\n { compType: \"mark\", factor: \"scale.shape\" }\n ],\n [\n { compType: \"mark\", factor: \"scale.size\" },\n { compType: \"mark\", factor: \"scale.shape\" },\n { compType: \"mark\", factor: \"scale.opacity\" }\n ],\n [\n { compType: \"mark\", factor: \"scale.color\" },\n { compType: \"mark\", factor: \"scale.shape\" },\n { compType: \"mark\", factor: \"scale.opacity\" }\n ],\n [\n { compType: \"mark\", factor: \"scale.color\" },\n { compType: \"mark\", factor: \"scale.size\" },\n { compType: \"mark\", factor: \"scale.opacity\" }\n ],\n [\n { compType: \"mark\", factor: \"scale.color\" },\n { compType: \"mark\", factor: \"scale.size\" },\n { compType: \"mark\", factor: \"scale.opacity\" },\n { compType: \"mark\", factor: \"scale.shape\" }\n ]\n ],\n cost: -0.1\n },\n {\n chunks: [\n [\n { compType: \"mark\", factor: \"scale.y\", with: [sameDomain] },\n { compType: \"axis\", factor: \"scale.y\", with: [sameDomain] }\n ]\n ],\n cost: -0.5\n },\n {\n chunks: [\n [\n { compType: \"mark\", factor: \"scale.y\", with: [diffDomain] },\n { compType: \"axis\", factor: \"scale.y\", with: [diffDomain] }\n ]\n ],\n cost: -1\n },\n {\n chunks: [\n [\n { compType: \"mark\", factor: \"encode.y\" },\n { compType: \"axis\", factor: \"add.y\" }\n ],\n [\n { compType: \"mark\", factor: \"encode.y\" },\n { compType: \"axis\", factor: \"remove.y\" }\n ]\n ],\n cost: -0.7\n },\n {\n chunks: [\n [\n { compType: \"mark\", factor: \"scale.x\", with: [sameDomain] },\n { compType: \"axis\", factor: \"scale.x\", with: [sameDomain] }\n ]\n ],\n cost: -0.5\n },\n {\n chunks: [\n [\n { compType: \"mark\", factor: \"scale.x\", with: [diffDomain] },\n { compType: \"axis\", factor: \"scale.x\", with: [diffDomain] }\n ]\n ],\n cost: -1\n },\n {\n chunks: [\n [\n { compType: \"mark\", factor: \"encode.x\" },\n { compType: \"axis\", factor: \"add.x\" }\n ],\n [\n { compType: \"mark\", factor: \"encode.x\" },\n { compType: \"axis\", factor: \"remove.x\" }\n ]\n ],\n cost: -0.7\n },\n {\n chunks: [\n [\n { compType: \"mark\", factor: \"scale.color\" },\n { compType: \"legend\", contain: \"color\" }\n ]\n ],\n cost: -0.5\n },\n {\n chunks: [\n [\n { compType: \"mark\", factor: \"scale.size\" },\n { compType: \"legend\", contain: \"size\" }\n ]\n ],\n cost: -0.5\n },\n {\n chunks: [\n [\n { compType: \"mark\", factor: \"scale.shape\" },\n { compType: \"legend\", contain: \"shape\" }\n ]\n ],\n cost: -0.5\n }\n];\n","import { roundUp, variance, mean } from \"../util/util\";\nimport * as DG from \"./designGuidelines\";\n\nfunction evaluate(pseudoTimeline) {\n const stageCosts = [];\n const cappedStageCosts = [];\n const N = pseudoTimeline.concat.length;\n const cost = pseudoTimeline.concat.reduce((cost, stage, i) => {\n const totalCost = stage.sync.reduce((sum, pseudoStep) => {\n pseudoStep.meta = { cost: getCost(pseudoStep) };\n return sum + getCost(pseudoStep);\n }, 0);\n const comboCost = getComboCost(stage.sync);\n const dur = pseudoTimeline.totalDuration / pseudoTimeline.concat.length;\n const cap = DG.PERCEPTION_CAP(dur) * Math.pow(0.99, N - 1 - i);\n stage.meta = {\n totalCost: roundUp(totalCost),\n comboCost: roundUp(comboCost),\n cap,\n cost: roundUp(Math.max(totalCost + comboCost - cap, 0))\n };\n stageCosts.push(Math.max(totalCost + comboCost));\n cappedStageCosts.push(Math.max(totalCost + comboCost - cap, 0));\n return cost + Math.max(totalCost + comboCost - cap, 0);\n }, 0);\n\n return {\n cost: roundUp(cost),\n tiebreaker: mean(stageCosts),\n tiebreaker2: variance(cappedStageCosts)\n };\n}\n\nfunction getComboCost(pseudoSteps) {\n const check = (piece, factorSet) => {\n return factorSet.find(\n fctr => fctr === piece.factor || fctr.indexOf(piece.contain) >= 0\n );\n };\n\n return DG.DISCOUNT_COMBOS.concat(DG.PENALTY_COMBOS).reduce(\n (totalDiscount, combo) => {\n for (const chunk of combo.chunks) {\n const isChunk = chunk.reduce((isChunk, piece) => {\n const found = pseudoSteps.find(pStep => {\n return (\n pStep.diff.compType === piece.compType &&\n check(piece, pStep.factorSets.current)\n );\n });\n if (!found) {\n return false;\n }\n\n if (piece.with) {\n isChunk = piece.with.reduce((isChunk, subCondition) => {\n return isChunk && subCondition(found, piece.factor);\n }, isChunk);\n }\n\n return isChunk && !!found;\n }, true);\n if (isChunk) {\n totalDiscount += combo.cost;\n break;\n }\n }\n return totalDiscount;\n },\n 0\n );\n}\n\nfunction getCost(pseudoStep) {\n // Todo\n if (\n pseudoStep.diff.compType === \"view\" ||\n pseudoStep.diff.compType === \"pause\"\n ) {\n return 0;\n }\n let stepCost = 0;\n for (const condition of DG.PERCEPTION_COST[pseudoStep.diff.compType]) {\n const foundFactor = pseudoStep.factorSets.current.find(\n fctr => fctr.indexOf(condition.factor) >= 0\n );\n let with_without = true;\n if (foundFactor && condition.with) {\n with_without = condition.with.reduce((sat, subCondition) => {\n return sat && subCondition(pseudoStep, foundFactor);\n }, true);\n } else if (foundFactor && condition.without) {\n with_without = condition.without.reduce((sat, subCondition) => {\n return sat && !subCondition(pseudoStep, foundFactor);\n }, true);\n }\n\n stepCost += foundFactor && with_without ? condition.cost : 0;\n }\n return stepCost;\n}\n\nexport { getComboCost, getCost, evaluate };\n","import { CHANNEL_TO_ATTRS_OBJ } from \"./util\";\nimport { copy, get, isEmpty } from \"../util/util\";\n\nfunction generateTimeline(pseudoTimeline, userInput, includeMeta) {\n // Assume: pseudoTimeline = {concat: [ {sync: [...] }, {sync: [...]}, ...]}\n // Assume: userInput= {marks: {...}, axes: {...}, legends: {...}, scales: {...}}\n let defaultOpt = {\n timing: {\n duration: {\n ratio: Math.floor(100 / pseudoTimeline.concat.length) / 100\n }\n }\n };\n if (userInput.global) {\n defaultOpt = Object.assign(defaultOpt, userInput.global);\n }\n let opt;\n\n const newConcat = pseudoTimeline.concat.map(syncBlock => {\n return {\n sync: syncBlock.sync.map(pseudoStep => {\n let step;\n switch (pseudoStep.diff.compType) {\n case \"mark\":\n opt = Object.assign(\n {},\n defaultOpt,\n get(userInput, \"marks\", pseudoStep.diff.compName) || {}\n );\n step = generateMarkCompStep(pseudoStep, opt);\n break;\n case \"axis\":\n opt = Object.assign(\n {},\n defaultOpt,\n get(userInput, \"axes\", pseudoStep.diff.compName) || {}\n );\n step = generateAxisCompStep(pseudoStep, opt);\n break;\n case \"legend\":\n opt = Object.assign(\n {},\n defaultOpt,\n get(userInput, \"legends\", pseudoStep.diff.compName) || {}\n );\n step = generateLegendCompStep(pseudoStep, opt);\n break;\n case \"view\":\n step = generateViewCompStep(pseudoStep, opt);\n break;\n }\n if (includeMeta) {\n step.meta = pseudoStep.meta;\n }\n\n return step;\n }),\n ...(includeMeta ? { meta: syncBlock.meta } : {})\n };\n });\n return { concat: newConcat };\n}\n\nfunction generateViewCompStep(pseudoViewStep, opt) {\n return {\n component: \"view\",\n change: {\n signal: pseudoViewStep.factorSets.current\n },\n timing: pseudoViewStep.timing || copy(opt.timing)\n };\n}\n\nfunction generateAxisCompStep(pseudoStep, opt) {\n const scaleDomainDimension = get(opt, \"change\", \"scale\", \"domainDimension\");\n const { factorSets } = pseudoStep;\n const step = {\n component: { axis: pseudoStep.diff.compName },\n change: {},\n timing: pseudoStep.timing || copy(opt.timing)\n };\n if (scaleDomainDimension !== undefined) {\n step.change = { scale: { domainDimension: scaleDomainDimension } };\n }\n if (\n factorSets.all.indexOf(\"scale.y\") >= 0 &&\n factorSets.applied.indexOf(\"scale.y\") < 0\n ) {\n step.change.scale = false;\n } else if (\n factorSets.all.indexOf(\"scale.x\") >= 0 &&\n factorSets.applied.indexOf(\"scale.x\") < 0\n ) {\n step.change.scale = false;\n }\n if (\n factorSets.applied.indexOf(\"encode\") < 0 &&\n factorSets.all.indexOf(\"encode\") >= 0\n ) {\n step.change.encode = false;\n }\n\n if (\n step.change.encode === false &&\n factorSets.applied.indexOf(\"encode.only.grid\") >= 0\n ) {\n step.change.encode = {\n grid: true,\n axis: false,\n labels: false,\n title: false,\n ticks: false,\n domain: false\n };\n }\n\n if (\n ( (step.change.encode === false) ||\n (get(step, \"change\", \"encode\", \"axis\") === false) ) &&\n factorSets.applied.indexOf(\"encode.position\") >= 0\n ) {\n if (step.change.encode) {\n step.change.encode.axis = false;\n } else {\n step.change.encode = {axis: false};\n }\n }\n\n if (isEmpty(step.change)) {\n delete step.change;\n }\n\n return step;\n}\n\nfunction generateLegendCompStep(pseudoStep, opt) {\n const step = {\n component: { legend: pseudoStep.diff.compName },\n timing: pseudoStep.timing || copy(opt.timing)\n };\n // const factorSets = pseudoStep.factorSets;\n // if (factorSets && factorSets.current && factorSets.current.length > 0) {\n // step.change = {\n // scale: factorSets.current.map(fct => fct.replace(\"scale.\", \"\"))\n // };\n // }\n // if (factorSets.current.indexOf(\"encode.position\") < 0 && factorSets.all.indexOf(\"encode.position\") >= 0) {\n // step.change = {\n // ...(step.change || {}),\n // encode: { legend: false }\n // };\n // }\n return step;\n}\n\nfunction generateMarkCompStep(pseudoStep, opt) {\n const markCompDiff = pseudoStep.diff;\n const { factorSets } = pseudoStep;\n const step = {\n component: { mark: markCompDiff.compName },\n change: getBlankChange(factorSets.all),\n timing: pseudoStep.timing || copy(opt.timing)\n };\n if (factorSets.applied.indexOf(\"remove\") >= 0) {\n delete step.change;\n return step;\n }\n // change.scale\n const scaleFactros = factorSets.applied.filter(\n fctr => fctr.indexOf(\"scale\") >= 0\n );\n if (scaleFactros.length > 0) {\n step.change.scale = scaleFactros.map(fctr => fctr.replace(\"scale.\", \"\"));\n }\n\n // change.data\n if (factorSets.applied.indexOf(\"data\") >= 0) {\n step.change.data = get(opt, \"change\", \"data\") || true;\n }\n\n // Todo: For encode factors not in the factorSet, then it should not specify anything.\n // change.encode\n const encodeFactors = factorSets.applied.filter(\n fctr => fctr.indexOf(\"encode\") >= 0\n );\n const encodeChange = getBlankEncodeChange(\n factorSets.all.concat(factorSets.extraByMarktype)\n );\n\n if (encodeFactors.length > 0) {\n encodeFactors.forEach(fctr => {\n const channel = fctr.replace(\"encode.\", \"\");\n const attrs = CHANNEL_TO_ATTRS_OBJ[channel];\n attrs.forEach(attr => {\n delete encodeChange.update[attr];\n delete encodeChange.exit[attr];\n delete encodeChange.enter[attr];\n });\n });\n }\n step.change.encode = encodeChange;\n\n // change.marktype\n if (factorSets.applied.indexOf(\"marktype\") >= 0) {\n step.change.marktype = true;\n\n factorSets.extraByMarktype.forEach(fctr => {\n const channel = fctr.replace(\"encode.\", \"\");\n const attrs = CHANNEL_TO_ATTRS_OBJ[channel];\n attrs.forEach(attr => {\n delete step.change.encode.update[attr];\n delete step.change.encode.exit[attr];\n delete step.change.encode.enter[attr];\n });\n });\n }\n\n [\"update\", \"enter\", \"exit\"].forEach(dataSet => {\n if (!isEmpty(get(step, \"change\", \"encode\", dataSet))) {\n step.change.encode[dataSet] = Object.keys(step.change.encode[dataSet])\n .filter(attr => markCompDiff.meta.usedEnAttrs.indexOf(attr) >= 0)\n .reduce((acc, attr) => {\n acc[attr] = step.change.encode[dataSet][attr];\n return acc;\n }, {});\n }\n\n if (isEmpty(get(step, \"change\", \"encode\", dataSet))) {\n step.change.encode[dataSet] = true;\n }\n });\n\n return step;\n}\n\n// It provides a change.encode that does not change any attribute.\n// The blankEncodeChanges are to be assigned by encode factors.\nfunction getBlankEncodeChange(relatedFactors) {\n const blankEncode = relatedFactors\n .filter(fctr => fctr.indexOf(\"encode\") >= 0)\n .map(fctr => CHANNEL_TO_ATTRS_OBJ[fctr.replace(\"encode.\", \"\")])\n .reduce((blankEncode, attrs) => {\n attrs.forEach(attr => {\n blankEncode[attr] = false;\n });\n return blankEncode;\n }, {});\n\n const blankExitEncode = copy(blankEncode);\n delete blankExitEncode.opacity;\n\n return {\n update: copy(blankEncode),\n enter: blankExitEncode,\n exit: blankExitEncode\n };\n}\nfunction getBlankChange(allFactors) {\n return [\"scale\", \"signal\", \"data\", \"encode\", \"marktype\"].reduce(\n (change, factor) => {\n if (allFactors.find(f => f.indexOf(factor) >= 0)) {\n change[factor] = false;\n }\n return change;\n },\n {}\n );\n}\nexport { generateTimeline, generateMarkCompStep };\n","import * as vega from \"vega\";\nimport { detectDiffs } from \"./diffDetector\";\nimport { enumeratePseudoTimelines } from \"./pseudoTimelineEnumerator\";\nimport { evaluate } from \"./pseudoTimelineEvaluator\";\nimport { generateTimeline } from \"./timelineGenerator\";\nimport { copy } from \"../util/util\";\n\nexport default async function(\n sSpec,\n eSpec,\n opt = { marks: {}, axes: {}, legends: {}, scales: {} }\n) {\n const userInput = opt;\n const stageN = Number(opt.stageN) || 2;\n const { includeMeta } = opt;\n const timing = { totalDuration: userInput.totalDuration || 2000 };\n\n userInput.axes = userInput.axes || {};\n for (const scaleName in userInput.scales || {}) {\n userInput.axes[scaleName] = userInput.axes[scaleName] || {};\n userInput.axes[scaleName].change = userInput.axes[scaleName].change || {};\n userInput.axes[scaleName].change.scale =\n userInput.axes[scaleName].change.scale || {};\n if (userInput.axes[scaleName].change.scale !== false) {\n userInput.axes[scaleName].change.scale.domainDimension =\n userInput.scales[scaleName].domainDimension;\n }\n }\n const eView = await new vega.View(vega.parse(eSpec), {\n renderer: \"svg\"\n }).runAsync();\n\n const sView = await new vega.View(vega.parse(sSpec), {\n renderer: \"svg\"\n }).runAsync();\n\n\n const rawInfo = {\n sVis: { spec: copy(sSpec), view: sView },\n eVis: { spec: copy(eSpec), view: eView }\n };\n\n const detected = detectDiffs(rawInfo, userInput);\n // for (let i = 1; i <= maxStageN; i++) {\n // pseudoTls = pseudoTls.concat(enumeratePseudoTimelines(detected, i, rawInfo));\n // }\n let pseudoTls = enumeratePseudoTimelines(detected, stageN, rawInfo, timing);\n pseudoTls = pseudoTls\n .map(pseudoTl => {\n pseudoTl.eval = evaluate(pseudoTl);\n return pseudoTl;\n })\n .sort((a, b) => compareCost(a.eval, b.eval));\n\n return pseudoTls.map(pseudoTl => {\n const meta = includeMeta ? pseudoTl.eval : undefined;\n return {\n spec: {\n timeline: generateTimeline(pseudoTl, userInput, includeMeta),\n totalDuration: timing.totalDuration,\n meta\n },\n pseudoTimeline: pseudoTl\n };\n });\n}\nexport function compareCost(a, b) {\n if (a.cost === b.cost) {\n if (a.tiebreaker === b.tiebreaker) {\n return a.tiebreaker2 - b.tiebreaker2;\n }\n return a.tiebreaker - b.tiebreaker;\n }\n return a.cost - b.cost;\n}\n","import * as d3 from \"d3\";\nimport * as vegaLite from \"vega-lite\";\n\nexport default function vl2vg4gemini(vlSpec) {\n let vgSpec = vegaLite.compile(vlSpec).spec;\n vgSpec.axes = mergeDuplicatedAxes(vgSpec.axes);\n appendNamesOnGuides(vgSpec);\n return vgSpec;\n}\n\n\nfunction appendNamesOnGuides(vgSpec){\n if (vgSpec.axes) {\n vgSpec.axes.forEach(axis => {\n if (!axis.encode) {\n axis.encode = {axis: {name: axis.scale}};\n } else {\n axis.encode.axis = { ...axis.encode.axis, name: axis.scale };\n }\n });\n }\n if (vgSpec.legends) {\n vgSpec.legends.forEach((legend, i) => {\n if (!legend.encode) {\n legend.encode = {legend: {name: `legend${i}`}};\n } else {\n legend.encode.legend = Object.assign({}, legend.encode.legend, {name: `legend${i}`});\n }\n });\n }\n}\n\n\nfunction mergeDuplicatedAxes(vegaAxes) {\n if (!vegaAxes || vegaAxes.length <= 0) {\n return [];\n }\n let axesScales = vegaAxes.filter(a => a.grid).map(a => a.scale);\n\n return d3.nest()\n .key(axis => axis.scale)\n .rollup(axes => {\n let axisWithGrid = axes.find(a => a.grid);\n let axisWithoutGrid = { ...axes.find(a => !a.grid) };\n\n if (axisWithGrid) {\n axisWithoutGrid.grid = true;\n if (axisWithGrid.gridScale) {\n axisWithoutGrid.gridScale = axisWithGrid.gridScale;\n }\n axisWithoutGrid.zindex = 0;\n }\n return axisWithoutGrid;\n }).entries(vegaAxes)\n .map(d => d.value)\n .sort((a,b) => (axesScales.indexOf(a.scale) - axesScales.indexOf(b.scale)));\n}\n\n","import { Gemini } from \"./gemini.js\";\nimport { default as recommend, compareCost } from \"./recommender\";\nimport { default as vl2vg4gemini } from \"./util/vl2vg4gemini\";\n\nconst { animate } = Gemini;\nexport { animate, recommend, compareCost, vl2vg4gemini };\n"],"names":["merge","sets","length","slice","xl","x","join","subexp","str","typeOf","o","undefined","Object","prototype","toString","call","split","pop","shift","toLowerCase","toUpperCase","toArray","obj","Array","setInterval","assign","target","source","key","buildExps","isIRI","ALPHA$$","CR$","DIGIT$$","DQUOTE$$","HEXDIG$$","PCT_ENCODED$","SUB_DELIMS$$","RESERVED$$","GEN_DELIMS$$","UCSCHAR$$","SCHEME$","USERINFO$","UNRESERVED$$","DEC_OCTET$","DEC_OCTET_RELAXED$","H16$","LS32$","IPV4ADDRESS$","IPV6ADDRESS1$","IPV6ADDRESS2$","IPV6ADDRESS3$","IPV6ADDRESS4$","IPV6ADDRESS5$","IPV6ADDRESS6$","IPV6ADDRESS7$","IPV6ADDRESS8$","IPV6ADDRESS9$","ZONEID$","IP_LITERAL$","HOST$","PCHAR$","SEGMENT$","SEGMENT_NZ_NC$","PATH_ABEMPTY$","QUERY$","IPRIVATE$$","RegExp","IPV6ADDRESS$","maxInt","base","tMin","tMax","skew","damp","initialBias","initialN","delimiter","regexPunycode","regexNonASCII","regexSeparators","errors","baseMinusTMin","floor","Math","stringFromCharCode","String","fromCharCode","error","type","RangeError","map","array","fn","result","mapDomain","string","parts","replace","labels","encoded","ucs2decode","output","counter","value","charCodeAt","extra","push","ucs2encode","fromCodePoint","basicToDigit","codePoint","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","k","decode","input","inputLength","i","n","bias","basic","lastIndexOf","j","index","oldi","w","t","baseMinusT","out","splice","encode","currentValue","basicLength","handledCPCount","m","handledCPCountPlusOne","q","qMinusT","toUnicode","test","toASCII","punycode","SCHEMES","pctEncChar","chr","c","e","pctDecChars","newStr","il","parseInt","substr","c2","c3","_normalizeComponentEncoding","components","protocol","decodeUnreserved","decStr","match","UNRESERVED","scheme","PCT_ENCODED","NOT_SCHEME","userinfo","NOT_USERINFO","host","NOT_HOST","path","NOT_PATH","NOT_PATH_NOSCHEME","query","NOT_QUERY","fragment","NOT_FRAGMENT","_stripLeadingZeros","_normalizeIPv4","matches","IPV4ADDRESS","address","_normalizeIPv6","IPV6ADDRESS","zone","reverse","last","first","firstFields","lastFields","isLastFieldIPv4Address","fieldCount","lastFieldsStart","fields","allZeroFields","reduce","acc","field","lastLongest","longestZeroFields","sort","a","b","newHost","newFirst","newLast","URI_PARSE","NO_MATCH_IS_UNDEFINED","parse","uriString","options","iri","IRI_PROTOCOL","URI_PROTOCOL","reference","port","isNaN","indexOf","schemeHandler","unicodeSupport","domainHost","_recomposeAuthority","uriTokens","_","$1","$2","RDS1","RDS2","RDS3","RDS5","removeDotSegments","im","s","Error","serialize","authority","charAt","absolutePath","resolveComponents","relative","skipNormalization","tolerant","resolve","baseURI","relativeURI","schemelessOptions","normalize","uri","equal","uriA","uriB","escapeComponent","ESCAPE","unescapeComponent","handler","http","O","ATEXT$$","QTEXT$$","VCHAR$$","SOME_DELIMS$$","NOT_LOCAL_PART","NOT_HFNAME","NOT_HFVALUE","mailtoComponents","to","unknownHeaders","headers","hfields","hfield","toAddrs","subject","body","addr","toAddr","atIdx","localPart","domain","name","URN_PARSE","urnComponents","nid","nss","urnScheme","uriComponents","UUID","uuidComponents","uuid","https","mailto","urn","copy","require$$0","require$$1","SchemaObject","URI","traverse","ucs2length","ValidationError","errorClasses","validateGenerator","validate","stableStringify","JSON_POINTER","RELATIVE_JSON_POINTER","require$$2","require$$3","require$$4","require$$5","require$$6","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","require$$21","require$$22","require$$23","toHash","ruleModules","MissingRefError","metaSchema","IDENTIFIER","customRuleCode","definitionSchema","compile","customKeyword","$dataMetaSchema","formats","Cache","compileSchema","ajv","Ajv","stringValue","vgConfig","vg.EMPTY_ENCODE","vg.legendLablePos","vg.legendLabelAlign","vg.baseline","vg.lableAngle","vg.legendBandPos","vg.axisCompPos","vg.axisTextDpos","vg.axisLabelAlign","vg.tickLength","vg.gridLength","vg.titleAngle","vg.titlePos","vg.domainLength","vega.SVGRenderer","vega.sceneFromJSON","vega.sceneToJSON","d3.interpolate","vega.View","vega.parse","checkConflict","d3\n .nest","getJoinInfo","compute","d3.interpolateString","d3.extent","d3.select","vega.textMetrics","vega\n .pathRectangle","vega\n .pathRectangle","d3.path","vega.pathSymbols","d3\n .line","d3\n .area","vega.pathTrail","vega.timeFormat","vega.timeUnitSpecifier","vegaExpression.codegen","vegaExpression.parse","d3.ascending","d3.descending","d3\n .nest","d3.easeLinear","d3.local","addMark","d3\n .selectAll","d3\n .select","d3.selectAll","d3\n .selectAll","d3\n .select","doneMaker","INITIAL_STATUS","DG.PERCEPTION_CAP","DG.DISCOUNT_COMBOS","DG.PENALTY_COMBOS","DG.PERCEPTION_COST","vegaLite.compile","d3.nest"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"gemini.web.js","sources":["src/animation.js","src/util/util.js","src/parser/resolveCollector.js","src/schedule.js","src/parser/conflictChecker.js","node_modules/uri-js/src/util.ts","node_modules/uri-js/src/regexps-uri.ts","node_modules/uri-js/src/regexps-iri.ts","node_modules/uri-js/node_modules/punycode/punycode.es6.js","node_modules/uri-js/src/uri.ts","node_modules/uri-js/src/schemes/http.ts","node_modules/uri-js/src/schemes/https.ts","node_modules/uri-js/src/schemes/mailto.ts","node_modules/uri-js/src/schemes/urn.ts","node_modules/uri-js/src/schemes/urn-uuid.ts","node_modules/uri-js/src/index.ts","node_modules/fast-deep-equal/index.js","node_modules/ajv/lib/compile/ucs2length.js","node_modules/ajv/lib/compile/util.js","node_modules/ajv/lib/compile/schema_obj.js","node_modules/json-schema-traverse/index.js","node_modules/ajv/lib/compile/resolve.js","node_modules/ajv/lib/compile/error_classes.js","node_modules/fast-json-stable-stringify/index.js","node_modules/ajv/lib/dotjs/validate.js","node_modules/ajv/lib/compile/index.js","node_modules/ajv/lib/cache.js","node_modules/ajv/lib/compile/formats.js","node_modules/ajv/lib/dotjs/ref.js","node_modules/ajv/lib/dotjs/allOf.js","node_modules/ajv/lib/dotjs/anyOf.js","node_modules/ajv/lib/dotjs/comment.js","node_modules/ajv/lib/dotjs/const.js","node_modules/ajv/lib/dotjs/contains.js","node_modules/ajv/lib/dotjs/dependencies.js","node_modules/ajv/lib/dotjs/enum.js","node_modules/ajv/lib/dotjs/format.js","node_modules/ajv/lib/dotjs/if.js","node_modules/ajv/lib/dotjs/items.js","node_modules/ajv/lib/dotjs/_limit.js","node_modules/ajv/lib/dotjs/_limitItems.js","node_modules/ajv/lib/dotjs/_limitLength.js","node_modules/ajv/lib/dotjs/_limitProperties.js","node_modules/ajv/lib/dotjs/multipleOf.js","node_modules/ajv/lib/dotjs/not.js","node_modules/ajv/lib/dotjs/oneOf.js","node_modules/ajv/lib/dotjs/pattern.js","node_modules/ajv/lib/dotjs/properties.js","node_modules/ajv/lib/dotjs/propertyNames.js","node_modules/ajv/lib/dotjs/required.js","node_modules/ajv/lib/dotjs/uniqueItems.js","node_modules/ajv/lib/dotjs/index.js","node_modules/ajv/lib/compile/rules.js","node_modules/ajv/lib/data.js","node_modules/ajv/lib/compile/async.js","node_modules/ajv/lib/dotjs/custom.js","node_modules/ajv/lib/definition_schema.js","node_modules/ajv/lib/keyword.js","node_modules/ajv/lib/ajv.js","src/parser/specChecker.js","node_modules/vega-expression/src/ast.js","node_modules/vega-expression/src/parser.js","node_modules/vega-expression/src/constants.js","node_modules/vega-util/src/accessor.js","node_modules/vega-util/src/error.js","node_modules/vega-util/src/splitAccessPath.js","node_modules/vega-util/src/isArray.js","node_modules/vega-util/src/isObject.js","node_modules/vega-util/src/isString.js","node_modules/vega-util/src/stringValue.js","node_modules/vega-util/src/field.js","node_modules/vega-util/src/accessors.js","node_modules/vega-util/src/isFunction.js","node_modules/vega-util/src/hasOwnProperty.js","node_modules/vega-util/src/toSet.js","node_modules/vega-expression/src/functions.js","node_modules/vega-expression/src/codegen.js","src/default/browser.js","src/default/ease.js","src/default/vegaConfig.js","src/default/util.js","src/default/style.js","src/default/encode/vegaDefault.js","src/default/encode/legend.js","src/default/encode/mark.js","src/default/encode/axis.js","src/default/encode/index.js","src/actuator/util.js","src/changeFetcher/state/util.js","src/enumerator.js","src/parser/stepEnumerator.js","src/parser/index.js","src/util/vgDataHelper.js","src/changeFetcher/state/dataJoin.js","src/changeFetcher/state/compute/util.js","src/changeFetcher/state/compute/mark.js","src/changeFetcher/state/compute/axis.js","src/changeFetcher/state/compute/legend.js","src/changeFetcher/state/compute/view.js","src/util/vgSpecHelper.js","src/changeFetcher/change.js","src/changeFetcher/state/index.js","src/actuator/vega-render-util.js","src/actuator/mark/interpolatePathYH.js","src/actuator/mark/interpolateHelper.js","src/actuator/attributeFetcher.js","src/actuator/staggering.js","src/actuator/timings.js","src/actuator/mark/mark.js","src/actuator/mark/areaLine.js","src/actuator/axis.js","src/actuator/legend.js","src/actuator/view.js","src/actuator/index.js","src/resolver.js","src/gemini.js","src/recommender/util.js","src/recommender/diffDetector.js","src/recommender/diffApplier.js","src/recommender/markCompChecker.js","src/recommender/pseudoTimelineValidator.js","src/recommender/pseudoTimelineEnumerator.js","src/recommender/designGuidelines.js","src/recommender/pseudoTimelineEvaluator.js","src/recommender/timelineGenerator.js","src/recommender/index.js","src/util/vl2vg4gemini.js","src/index.js"],"sourcesContent":["class Animation {\n constructor(schedule, rawInfo, spec) {\n this.schedule = schedule;\n this.moments = this.schedule.moments;\n this.status = \"ready\";\n this.spec = spec;\n this.logs = [];\n this._queue = [];\n this.rawInfo = rawInfo;\n }\n\n log(timestamp, message, info) {\n if (typeof message === \"string\" && typeof timestamp === \"number\") {\n this.logs.push({\n timestamp,\n message,\n info\n });\n }\n return this.logs;\n }\n\n async play(targetElm) {\n this.status = \"playing\";\n // get moments and sort by sTime\n const { moments } = this;\n\n const globalSTime = new Date();\n this._start(moments[0].starting, targetElm);\n this.log(new Date() - globalSTime, \"0-th moment\");\n\n for (let i = 1; i < moments.length; i++) {\n const moment = moments[i];\n\n await this._end(moment).then(() => {\n const delay = Math.max(moment.time - (new Date() - globalSTime), 0);\n return new Promise(resolve => setTimeout(() => resolve(), delay));\n });\n this._start(moment.starting, targetElm);\n this.log(new Date() - globalSTime, `${i}-th moment`);\n\n if (i === moments.length - 1) {\n this.status = \"ready\";\n return;\n }\n }\n }\n\n _start(steps, targetElm) {\n steps.forEach(step => {\n this._queue.push({\n sTime: step.sTime,\n eTime: step.eTime,\n step,\n result: step.template(this.rawInfo, step, targetElm) // contains the promise\n });\n });\n }\n\n async _end(moment) {\n const { time } = moment;\n\n const workingSteps = this._queue.filter(item => item.eTime === time);\n for (let i = 0; i < workingSteps.length; i++) {\n await workingSteps[i].result;\n }\n }\n}\n\nexport { Animation };\n","Array.prototype.contains = function(v, accessor) {\n accessor =\n accessor ||\n (d => {\n return d;\n });\n for (let i = 0; i < this.length; i++) {\n if (accessor(this[i]) === accessor(v)) return true;\n }\n return false;\n};\nArray.prototype.containAll = function(arr, accessor) {\n accessor =\n accessor ||\n (d => {\n return d;\n });\n for (let i = 0; i < arr.length; i++) {\n if (!this.contains(arr[i], accessor)) return false;\n }\n return true;\n};\n\nArray.prototype.unique = function(accessor) {\n const arr = [];\n for (let i = 0; i < this.length; i++) {\n if (!arr.contains(this[i], accessor)) {\n arr.push(this[i]);\n }\n }\n return arr;\n};\n\nArray.prototype.sample = function(N) {\n const tempThis = this.slice();\n const sampled = [];\n for (let i = 0; i < N; i++) {\n sampled.push(\n tempThis.splice([Math.floor(Math.random() * tempThis.length)], 1)[0]\n );\n }\n return sampled;\n};\n\nArray.prototype.shuffle = function() {\n for (let i = this.length; i; i--) {\n const j = Math.floor(Math.random() * i);\n [this[i - 1], this[j]] = [this[j], this[i - 1]];\n }\n return this;\n};\nArray.prototype.clone = function() {\n return JSON.parse(JSON.stringify(this));\n};\nfunction stringifyDatumValue(value) {\n if (value === null) {\n return \"__null__\";\n }\n return value.toString();\n}\nfunction deepEqual(obj1, obj2) {\n if (obj1 === obj2) {\n return true;\n }\n if (isDate(obj1) && isDate(obj2)) {\n return Number(obj1) === Number(obj2);\n }\n if (\n typeof obj1 === \"object\" &&\n obj1 !== undefined &&\n typeof obj2 === \"object\" &&\n obj2 !== undefined\n ) {\n const props1 = Object.keys(obj1);\n const props2 = Object.keys(obj2);\n if (props1.length !== props2.length) {\n return false;\n }\n\n for (let i = 0; i < props1.length; i++) {\n const prop = props1[i];\n\n if (!Object.prototype.hasOwnProperty.call(obj2, prop) || !deepEqual(obj1[prop], obj2[prop])) {\n return false;\n }\n }\n return true;\n }\n return false;\n}\n\nfunction copy(obj) {\n if (obj === undefined) {\n return undefined;\n }\n return JSON.parse(JSON.stringify(obj));\n}\n// create a new obj that has the same keys pointing the same values/functions;\nfunction copy2(obj) {\n return Object.keys(obj).reduce((acc, curr) => {\n acc[curr] = obj[curr];\n return acc;\n }, {});\n}\nfunction flatten(arrays) {\n return arrays.reduce((acc, curr) => {\n acc = acc.concat(curr);\n return acc;\n }, []);\n}\n\nfunction permutate(arr) {\n if (arr.length === 2) {\n return [arr, [arr[1], arr[0]]];\n }\n return arr.reduce((acc, anchor, i) => {\n const workingArr = copy(arr);\n workingArr.splice(i, 1);\n\n acc = acc.concat(\n permutate(workingArr).map(newArr => {\n return [anchor].concat(newArr);\n })\n );\n return acc;\n }, []);\n}\nfunction isDate(o) {\n return o !== undefined && typeof o.getMonth === \"function\";\n}\n\nfunction enumArr(arr, item) {\n const newArrs = [];\n for (let i = 0; i < arr.length; i++) {\n const newArr = copy(arr);\n if (Array.isArray(newArr[i])) {\n newArr[i].push(item);\n } else {\n newArr[i] = [newArr[i], item];\n }\n newArrs.push(newArr);\n }\n return newArrs;\n}\n\nfunction enumArraysByItems(arrs, items, enumArrFn = enumArr) {\n let newArrs = copy(arrs);\n items.forEach(item => {\n newArrs = newArrs.reduce((allArrs, arr) => {\n return (allArrs = allArrs.concat(enumArrFn(arr, item)));\n }, []);\n });\n return newArrs;\n}\n\nfunction get(o, ...props) {\n return props.reduce((obj, prop) => {\n return !isNullOrUndefined(obj) && !isNullOrUndefined(obj[prop])\n ? obj[prop]\n : undefined;\n }, o);\n}\n\nfunction isNullOrUndefined(obj) {\n return obj === null || obj === undefined;\n}\nfunction isNumber(x) {\n return typeof x === \"number\" && !isNaN(x);\n}\nfunction roundUp(num, d = 5) {\n return Math.round(Math.pow(10, d) * num) / Math.pow(10, d);\n}\nArray.prototype.exclude = function(items, accessor = x => x) {\n const newArr = this.slice();\n for (const item of items) {\n const i = newArr.findIndex(x => accessor(x) === accessor(item));\n if (i >= 0) {\n newArr.splice(i, 1);\n }\n }\n return newArr;\n};\nfunction variance(nums) {\n const mu = mean(nums);\n return (\n nums.reduce((acc, num) => (acc += Math.pow(num - mu, 2)), 0) / nums.length\n );\n}\nfunction mean(nums) {\n return nums.reduce((sum, num) => sum + num, 0) / nums.length;\n}\n\nfunction isEmpty(o) {\n return typeof o === \"object\" && Object.keys(o).length === 0;\n}\n\nexport {\n deepEqual,\n copy,\n copy2,\n flatten,\n permutate,\n isNumber,\n enumArraysByItems,\n get,\n roundUp,\n variance,\n mean,\n isEmpty,\n stringifyDatumValue\n};\n","export default function(parsedBlock, parsedSteps) {\n let resolves = collect(parsedBlock);\n // 1-2. collect the alternative timelines. (alterIds)\n resolves.forEach(r => {\n r.alterIds = parsedSteps\n .filter(\n step => step.alterId &&\n (step.alterId.split(\":\")[0] === r.alterName)\n )\n .map(step => step.alterId)\n .unique();\n\n // Place \":main\" at first\n const i = r.alterIds.findIndex(d => d.indexOf(\":main\") >= 0);\n const head = r.alterIds.splice(i, 1);\n r.alterIds = head.concat(r.alterIds);\n });\n return resolves;\n}\n\nfunction collect(block) {\n let resolves = [];\n\n if (block.sync) {\n block.sync.forEach(blk => {\n resolves = resolves.concat(collect(blk));\n });\n } else if (block.concat) {\n block.concat.forEach(blk => {\n resolves = resolves.concat(collect(blk));\n });\n }\n if (block.resolve) {\n resolves.push(block.resolve);\n }\n return resolves;\n}","class Schedule {\n constructor(parsedSteps) {\n // Assgin the sTime and eTime\n\n let newParsedSteps = parsedSteps.map((stp, i) => {\n return { ...stp, stepId: i };\n });\n\n this.tracks = newParsedSteps\n .map(d => {\n const trackName = (d.trackName = d.compName\n ? `${d.compType}.${d.compName}`\n : d.compType);\n\n return {\n name: trackName,\n compType: d.compType,\n compName: d.compName\n };\n })\n .unique(d => d.name)\n .map(track => {\n return {\n ...track,\n steps: newParsedSteps.filter(d => d.trackName === track.name)\n };\n });\n }\n\n\n getTimeline(alterId) {\n return this.tracks.map(track => {\n return Object.assign({}, track, {\n steps: track.steps.filter(\n step => step.alterId === undefined || step.alterId.indexOf(alterId) >= 0\n )\n });\n });\n }\n\n getTimelineAlternator(scaleOrderResovles) {\n let counter = 0;\n let dividers = scaleOrderResovles.reduce(\n (acc, r, i) => {\n acc.push(r.alterIds.length * acc[i]);\n return acc;\n },\n [1]\n );\n const totalCount = dividers[dividers.length - 1];\n dividers = dividers.slice(0, dividers.length - 1).sort((a, b) => b - a);\n return () => {\n counter += 1;\n counter %= totalCount;\n if (counter === 0) {\n console.warn(\"Gemini cannot find the order to resolve.\");\n return false;\n }\n return dividers.reduce(\n (acc, divider, i) => {\n const q = Math.floor(acc.remainder / divider);\n acc.remainder -= q * divider;\n const resolve = scaleOrderResovles[i];\n\n const alterId = resolve.alterIds[q];\n\n acc.tracks = acc.tracks.map(track => {\n const newSteps = track.steps.filter(step => {\n if (step.alterId === undefined) {\n return true;\n }\n if (\n step.alterId.split(\":\")[0] === alterId.split(\":\")[0] &&\n step.alterId.split(\":\")[1] !== alterId.split(\":\")[1]\n ) {\n return false;\n }\n\n return true;\n });\n return Object.assign({}, track, { steps: newSteps });\n });\n\n return acc;\n },\n { tracks: this.tracks, remainder: counter }\n ).tracks;\n };\n }\n\n\n}\n\n\n\n\n\nexport {Schedule};","export default function check(schedule, resolves) {\n // 3. check if there is any component whose steps are overlapped by themselves.\n let tracksPerAlterId = [{ alterId: \":main\", tracks: schedule.tracks }];\n if (resolves.length > 0) {\n tracksPerAlterId = resolves\n .reduce((allAlterIds, resolve) => {\n return allAlterIds.concat(resolve.alterIds);\n }, [])\n .map(alterId => {\n return {\n tracks: schedule.tracks.map(track => {\n return {\n ...track,\n steps: track.steps.filter(\n stp => !stp.alterId || alterId === stp.alterId\n )\n };\n }),\n alterId\n };\n });\n }\n const conflictsPerAlterId = tracksPerAlterId.map(findConflicts);\n const conflictedAlterIds = conflictsPerAlterId\n .filter(conflicts => conflicts.length > 0)\n .map(conflicts => conflicts.alterId);\n\n if (conflictedAlterIds.length === tracksPerAlterId.length) {\n if (conflictsPerAlterId.length > 1) {\n throw new Error(\n \"All possible timelines have 1+ schedule conflict.\",\n conflictsPerAlterId\n );\n } else {\n throw new Error(\n \"The timeline has 1+ schedule conflict.\",\n conflictsPerAlterId\n );\n }\n } else if (conflictedAlterIds.length > 0) {\n if (\n conflictsPerAlterId.find(conflicts =>\n conflicts.find(conf => conf.alterId.indexOf(\":main\") >= 0)\n )\n ) {\n console.warn(\n \"The main timeline (specified timeline) has 1+ schedule conflict.\",\n conflictsPerAlterId\n );\n } else {\n console.warn(\n \"Some possible timelines have 1+ schedule conflict.\",\n conflictsPerAlterId\n );\n }\n }\n schedule.tracks = schedule.tracks.map(track => {\n return {\n ...track,\n steps: track.steps.filter(\n stp => conflictedAlterIds.indexOf(stp.alterId) < 0\n )\n };\n });\n resolves = resolves.map(resolve => {\n return {\n ...resolve,\n alterIds: resolve.alterIds.filter(\n id => conflictedAlterIds.indexOf(id) < 0\n )\n };\n });\n\n return {conflictsPerAlterId};\n}\n\n\nfunction findConflicts(tracksWithAlterId) {\n const conflicts = [];\n const { tracks } = tracksWithAlterId;\n const { alterId } = tracksWithAlterId;\n\n for (const track of tracks) {\n const sortedSteps = track.steps.sort(\n (stp1, stp2) => stp1.sTime - stp2.sTime\n );\n for (let i = 0; i < sortedSteps.length - 1; i++) {\n if (sortedSteps[i].eTime > sortedSteps[i + 1].sTime) {\n conflicts.push({\n alterId,\n conflictedSteps: [sortedSteps[i], sortedSteps[i + 1]],\n compName: track.compName,\n compType: track.compType\n });\n }\n }\n }\n\n return conflicts;\n}","export function merge(...sets:Array):string {\n\tif (sets.length > 1) {\n\t\tsets[0] = sets[0].slice(0, -1);\n\t\tconst xl = sets.length - 1;\n\t\tfor (let x = 1; x < xl; ++x) {\n\t\t\tsets[x] = sets[x].slice(1, -1);\n\t\t}\n\t\tsets[xl] = sets[xl].slice(1);\n\t\treturn sets.join('');\n\t} else {\n\t\treturn sets[0];\n\t}\n}\n\nexport function subexp(str:string):string {\n\treturn \"(?:\" + str + \")\";\n}\n\nexport function typeOf(o:any):string {\n\treturn o === undefined ? \"undefined\" : (o === null ? \"null\" : Object.prototype.toString.call(o).split(\" \").pop().split(\"]\").shift().toLowerCase());\n}\n\nexport function toUpperCase(str:string):string {\n\treturn str.toUpperCase();\n}\n\nexport function toArray(obj:any):Array {\n\treturn obj !== undefined && obj !== null ? (obj instanceof Array ? obj : (typeof obj.length !== \"number\" || obj.split || obj.setInterval || obj.call ? [obj] : Array.prototype.slice.call(obj))) : [];\n}\n\n\nexport function assign(target: object, source: any): any {\n\tconst obj = target as any;\n\tif (source) {\n\t\tfor (const key in source) {\n\t\t\tobj[key] = source[key];\n\t\t}\n\t}\n\treturn obj;\n}","import { URIRegExps } from \"./uri\";\nimport { merge, subexp } from \"./util\";\n\nexport function buildExps(isIRI:boolean):URIRegExps {\n\tconst\n\t\tALPHA$$ = \"[A-Za-z]\",\n\t\tCR$ = \"[\\\\x0D]\",\n\t\tDIGIT$$ = \"[0-9]\",\n\t\tDQUOTE$$ = \"[\\\\x22]\",\n\t\tHEXDIG$$ = merge(DIGIT$$, \"[A-Fa-f]\"), //case-insensitive\n\t\tLF$$ = \"[\\\\x0A]\",\n\t\tSP$$ = \"[\\\\x20]\",\n\t\tPCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$)), //expanded\n\t\tGEN_DELIMS$$ = \"[\\\\:\\\\/\\\\?\\\\#\\\\[\\\\]\\\\@]\",\n\t\tSUB_DELIMS$$ = \"[\\\\!\\\\$\\\\&\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\=]\",\n\t\tRESERVED$$ = merge(GEN_DELIMS$$, SUB_DELIMS$$),\n\t\tUCSCHAR$$ = isIRI ? \"[\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF]\" : \"[]\", //subset, excludes bidi control characters\n\t\tIPRIVATE$$ = isIRI ? \"[\\\\uE000-\\\\uF8FF]\" : \"[]\", //subset\n\t\tUNRESERVED$$ = merge(ALPHA$$, DIGIT$$, \"[\\\\-\\\\.\\\\_\\\\~]\", UCSCHAR$$),\n\t\tSCHEME$ = subexp(ALPHA$$ + merge(ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\") + \"*\"),\n\t\tUSERINFO$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\")) + \"*\"),\n\t\tDEC_OCTET$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"[1-9]\" + DIGIT$$) + \"|\" + DIGIT$$),\n\t\tDEC_OCTET_RELAXED$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"0?[1-9]\" + DIGIT$$) + \"|0?0?\" + DIGIT$$), //relaxed parsing rules\n\t\tIPV4ADDRESS$ = subexp(DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$),\n\t\tH16$ = subexp(HEXDIG$$ + \"{1,4}\"),\n\t\tLS32$ = subexp(subexp(H16$ + \"\\\\:\" + H16$) + \"|\" + IPV4ADDRESS$),\n\t\tIPV6ADDRESS1$ = subexp( subexp(H16$ + \"\\\\:\") + \"{6}\" + LS32$), // 6( h16 \":\" ) ls32\n\t\tIPV6ADDRESS2$ = subexp( \"\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{5}\" + LS32$), // \"::\" 5( h16 \":\" ) ls32\n\t\tIPV6ADDRESS3$ = subexp(subexp( H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{4}\" + LS32$), //[ h16 ] \"::\" 4( h16 \":\" ) ls32\n\t\tIPV6ADDRESS4$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,1}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{3}\" + LS32$), //[ *1( h16 \":\" ) h16 ] \"::\" 3( h16 \":\" ) ls32\n\t\tIPV6ADDRESS5$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,2}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{2}\" + LS32$), //[ *2( h16 \":\" ) h16 ] \"::\" 2( h16 \":\" ) ls32\n\t\tIPV6ADDRESS6$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,3}\" + H16$) + \"?\\\\:\\\\:\" + H16$ + \"\\\\:\" + LS32$), //[ *3( h16 \":\" ) h16 ] \"::\" h16 \":\" ls32\n\t\tIPV6ADDRESS7$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,4}\" + H16$) + \"?\\\\:\\\\:\" + LS32$), //[ *4( h16 \":\" ) h16 ] \"::\" ls32\n\t\tIPV6ADDRESS8$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,5}\" + H16$) + \"?\\\\:\\\\:\" + H16$ ), //[ *5( h16 \":\" ) h16 ] \"::\" h16\n\t\tIPV6ADDRESS9$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,6}\" + H16$) + \"?\\\\:\\\\:\" ), //[ *6( h16 \":\" ) h16 ] \"::\"\n\t\tIPV6ADDRESS$ = subexp([IPV6ADDRESS1$, IPV6ADDRESS2$, IPV6ADDRESS3$, IPV6ADDRESS4$, IPV6ADDRESS5$, IPV6ADDRESS6$, IPV6ADDRESS7$, IPV6ADDRESS8$, IPV6ADDRESS9$].join(\"|\")),\n\t\tZONEID$ = subexp(subexp(UNRESERVED$$ + \"|\" + PCT_ENCODED$) + \"+\"), //RFC 6874\n\t\tIPV6ADDRZ$ = subexp(IPV6ADDRESS$ + \"\\\\%25\" + ZONEID$), //RFC 6874\n\t\tIPV6ADDRZ_RELAXED$ = subexp(IPV6ADDRESS$ + subexp(\"\\\\%25|\\\\%(?!\" + HEXDIG$$ + \"{2})\") + ZONEID$), //RFC 6874, with relaxed parsing rules\n\t\tIPVFUTURE$ = subexp(\"[vV]\" + HEXDIG$$ + \"+\\\\.\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\") + \"+\"),\n\t\tIP_LITERAL$ = subexp(\"\\\\[\" + subexp(IPV6ADDRZ_RELAXED$ + \"|\" + IPV6ADDRESS$ + \"|\" + IPVFUTURE$) + \"\\\\]\"), //RFC 6874\n\t\tREG_NAME$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$)) + \"*\"),\n\t\tHOST$ = subexp(IP_LITERAL$ + \"|\" + IPV4ADDRESS$ + \"(?!\" + REG_NAME$ + \")\" + \"|\" + REG_NAME$),\n\t\tPORT$ = subexp(DIGIT$$ + \"*\"),\n\t\tAUTHORITY$ = subexp(subexp(USERINFO$ + \"@\") + \"?\" + HOST$ + subexp(\"\\\\:\" + PORT$) + \"?\"),\n\t\tPCHAR$ = subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@]\")),\n\t\tSEGMENT$ = subexp(PCHAR$ + \"*\"),\n\t\tSEGMENT_NZ$ = subexp(PCHAR$ + \"+\"),\n\t\tSEGMENT_NZ_NC$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\@]\")) + \"+\"),\n\t\tPATH_ABEMPTY$ = subexp(subexp(\"\\\\/\" + SEGMENT$) + \"*\"),\n\t\tPATH_ABSOLUTE$ = subexp(\"\\\\/\" + subexp(SEGMENT_NZ$ + PATH_ABEMPTY$) + \"?\"), //simplified\n\t\tPATH_NOSCHEME$ = subexp(SEGMENT_NZ_NC$ + PATH_ABEMPTY$), //simplified\n\t\tPATH_ROOTLESS$ = subexp(SEGMENT_NZ$ + PATH_ABEMPTY$), //simplified\n\t\tPATH_EMPTY$ = \"(?!\" + PCHAR$ + \")\",\n\t\tPATH$ = subexp(PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n\t\tQUERY$ = subexp(subexp(PCHAR$ + \"|\" + merge(\"[\\\\/\\\\?]\", IPRIVATE$$)) + \"*\"),\n\t\tFRAGMENT$ = subexp(subexp(PCHAR$ + \"|[\\\\/\\\\?]\") + \"*\"),\n\t\tHIER_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n\t\tURI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n\t\tRELATIVE_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$),\n\t\tRELATIVE$ = subexp(RELATIVE_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n\t\tURI_REFERENCE$ = subexp(URI$ + \"|\" + RELATIVE$),\n\t\tABSOLUTE_URI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\"),\n\n\t\tGENERIC_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tRELATIVE_REF$ = \"^(){0}\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tABSOLUTE_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?$\",\n\t\tSAMEDOC_REF$ = \"^\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tAUTHORITY_REF$ = \"^\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?$\"\n\t;\n\n\treturn {\n\t\tNOT_SCHEME : new RegExp(merge(\"[^]\", ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\"), \"g\"),\n\t\tNOT_USERINFO : new RegExp(merge(\"[^\\\\%\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_HOST : new RegExp(merge(\"[^\\\\%\\\\[\\\\]\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_PATH : new RegExp(merge(\"[^\\\\%\\\\/\\\\:\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_PATH_NOSCHEME : new RegExp(merge(\"[^\\\\%\\\\/\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_QUERY : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\", IPRIVATE$$), \"g\"),\n\t\tNOT_FRAGMENT : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\"), \"g\"),\n\t\tESCAPE : new RegExp(merge(\"[^]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tUNRESERVED : new RegExp(UNRESERVED$$, \"g\"),\n\t\tOTHER_CHARS : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, RESERVED$$), \"g\"),\n\t\tPCT_ENCODED : new RegExp(PCT_ENCODED$, \"g\"),\n\t\tIPV4ADDRESS : new RegExp(\"^(\" + IPV4ADDRESS$ + \")$\"),\n\t\tIPV6ADDRESS : new RegExp(\"^\\\\[?(\" + IPV6ADDRESS$ + \")\" + subexp(subexp(\"\\\\%25|\\\\%(?!\" + HEXDIG$$ + \"{2})\") + \"(\" + ZONEID$ + \")\") + \"?\\\\]?$\") //RFC 6874, with relaxed parsing rules\n\t};\n}\n\nexport default buildExps(false);\n","import { URIRegExps } from \"./uri\";\nimport { buildExps } from \"./regexps-uri\";\n\nexport default buildExps(true);\n","'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7E]/; // non-ASCII chars\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, fn) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = fn(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {Array} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(string, fn) {\n\tconst parts = string.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tstring = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tstring = string.replace(regexSeparators, '\\x2E');\n\tconst labels = string.split('.');\n\tconst encoded = map(labels, fn).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see \n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = array => String.fromCodePoint(...array);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint - 0x30 < 0x0A) {\n\t\treturn codePoint - 0x16;\n\t}\n\tif (codePoint - 0x41 < 0x1A) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint - 0x61 < 0x1A) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t// 0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tlet oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tlet inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tlet basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's state to ,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue == n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.1.0',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see \n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nexport default punycode;\n","/**\n * URI.js\n *\n * @fileoverview An RFC 3986 compliant, scheme extendable URI parsing/validating/resolving library for JavaScript.\n * @author Gary Court\n * @see http://github.com/garycourt/uri-js\n */\n\n/**\n * Copyright 2011 Gary Court. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this list of\n * conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice, this list\n * of conditions and the following disclaimer in the documentation and/or other materials\n * provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY GARY COURT ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GARY COURT OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of Gary Court.\n */\n\nimport URI_PROTOCOL from \"./regexps-uri\";\nimport IRI_PROTOCOL from \"./regexps-iri\";\nimport punycode from \"punycode\";\nimport { toUpperCase, typeOf, assign } from \"./util\";\n\nexport interface URIComponents {\n\tscheme?:string;\n\tuserinfo?:string;\n\thost?:string;\n\tport?:number|string;\n\tpath?:string;\n\tquery?:string;\n\tfragment?:string;\n\treference?:string;\n\terror?:string;\n}\n\nexport interface URIOptions {\n\tscheme?:string;\n\treference?:string;\n\ttolerant?:boolean;\n\tabsolutePath?:boolean;\n\tiri?:boolean;\n\tunicodeSupport?:boolean;\n\tdomainHost?:boolean;\n}\n\nexport interface URISchemeHandler {\n\tscheme:string;\n\tparse(components:ParentComponents, options:Options):Components;\n\tserialize(components:Components, options:Options):ParentComponents;\n\tunicodeSupport?:boolean;\n\tdomainHost?:boolean;\n\tabsolutePath?:boolean;\n}\n\nexport interface URIRegExps {\n\tNOT_SCHEME : RegExp,\n\tNOT_USERINFO : RegExp,\n\tNOT_HOST : RegExp,\n\tNOT_PATH : RegExp,\n\tNOT_PATH_NOSCHEME : RegExp,\n\tNOT_QUERY : RegExp,\n\tNOT_FRAGMENT : RegExp,\n\tESCAPE : RegExp,\n\tUNRESERVED : RegExp,\n\tOTHER_CHARS : RegExp,\n\tPCT_ENCODED : RegExp,\n\tIPV4ADDRESS : RegExp,\n\tIPV6ADDRESS : RegExp,\n}\n\nexport const SCHEMES:{[scheme:string]:URISchemeHandler} = {};\n\nexport function pctEncChar(chr:string):string {\n\tconst c = chr.charCodeAt(0);\n\tlet e:string;\n\n\tif (c < 16) e = \"%0\" + c.toString(16).toUpperCase();\n\telse if (c < 128) e = \"%\" + c.toString(16).toUpperCase();\n\telse if (c < 2048) e = \"%\" + ((c >> 6) | 192).toString(16).toUpperCase() + \"%\" + ((c & 63) | 128).toString(16).toUpperCase();\n\telse e = \"%\" + ((c >> 12) | 224).toString(16).toUpperCase() + \"%\" + (((c >> 6) & 63) | 128).toString(16).toUpperCase() + \"%\" + ((c & 63) | 128).toString(16).toUpperCase();\n\n\treturn e;\n}\n\nexport function pctDecChars(str:string):string {\n\tlet newStr = \"\";\n\tlet i = 0;\n\tconst il = str.length;\n\n\twhile (i < il) {\n\t\tconst c = parseInt(str.substr(i + 1, 2), 16);\n\n\t\tif (c < 128) {\n\t\t\tnewStr += String.fromCharCode(c);\n\t\t\ti += 3;\n\t\t}\n\t\telse if (c >= 194 && c < 224) {\n\t\t\tif ((il - i) >= 6) {\n\t\t\t\tconst c2 = parseInt(str.substr(i + 4, 2), 16);\n\t\t\t\tnewStr += String.fromCharCode(((c & 31) << 6) | (c2 & 63));\n\t\t\t} else {\n\t\t\t\tnewStr += str.substr(i, 6);\n\t\t\t}\n\t\t\ti += 6;\n\t\t}\n\t\telse if (c >= 224) {\n\t\t\tif ((il - i) >= 9) {\n\t\t\t\tconst c2 = parseInt(str.substr(i + 4, 2), 16);\n\t\t\t\tconst c3 = parseInt(str.substr(i + 7, 2), 16);\n\t\t\t\tnewStr += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));\n\t\t\t} else {\n\t\t\t\tnewStr += str.substr(i, 9);\n\t\t\t}\n\t\t\ti += 9;\n\t\t}\n\t\telse {\n\t\t\tnewStr += str.substr(i, 3);\n\t\t\ti += 3;\n\t\t}\n\t}\n\n\treturn newStr;\n}\n\nfunction _normalizeComponentEncoding(components:URIComponents, protocol:URIRegExps) {\n\tfunction decodeUnreserved(str:string):string {\n\t\tconst decStr = pctDecChars(str);\n\t\treturn (!decStr.match(protocol.UNRESERVED) ? str : decStr);\n\t}\n\n\tif (components.scheme) components.scheme = String(components.scheme).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_SCHEME, \"\");\n\tif (components.userinfo !== undefined) components.userinfo = String(components.userinfo).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_USERINFO, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.host !== undefined) components.host = String(components.host).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_HOST, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.path !== undefined) components.path = String(components.path).replace(protocol.PCT_ENCODED, decodeUnreserved).replace((components.scheme ? protocol.NOT_PATH : protocol.NOT_PATH_NOSCHEME), pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.query !== undefined) components.query = String(components.query).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_QUERY, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.fragment !== undefined) components.fragment = String(components.fragment).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_FRAGMENT, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\n\treturn components;\n};\n\nfunction _stripLeadingZeros(str:string):string {\n\treturn str.replace(/^0*(.*)/, \"$1\") || \"0\";\n}\n\nfunction _normalizeIPv4(host:string, protocol:URIRegExps):string {\n\tconst matches = host.match(protocol.IPV4ADDRESS) || [];\n\tconst [, address] = matches;\n\t\n\tif (address) {\n\t\treturn address.split(\".\").map(_stripLeadingZeros).join(\".\");\n\t} else {\n\t\treturn host;\n\t}\n}\n\nfunction _normalizeIPv6(host:string, protocol:URIRegExps):string {\n\tconst matches = host.match(protocol.IPV6ADDRESS) || [];\n\tconst [, address, zone] = matches;\n\n\tif (address) {\n\t\tconst [last, first] = address.toLowerCase().split('::').reverse();\n\t\tconst firstFields = first ? first.split(\":\").map(_stripLeadingZeros) : [];\n\t\tconst lastFields = last.split(\":\").map(_stripLeadingZeros);\n\t\tconst isLastFieldIPv4Address = protocol.IPV4ADDRESS.test(lastFields[lastFields.length - 1]);\n\t\tconst fieldCount = isLastFieldIPv4Address ? 7 : 8;\n\t\tconst lastFieldsStart = lastFields.length - fieldCount;\n\t\tconst fields = Array(fieldCount);\n\n\t\tfor (let x = 0; x < fieldCount; ++x) {\n\t\t\tfields[x] = firstFields[x] || lastFields[lastFieldsStart + x] || '';\n\t\t}\n\n\t\tif (isLastFieldIPv4Address) {\n\t\t\tfields[fieldCount - 1] = _normalizeIPv4(fields[fieldCount - 1], protocol);\n\t\t}\n\n\t\tconst allZeroFields = fields.reduce>((acc, field, index) => {\n\t\t\tif (!field || field === \"0\") {\n\t\t\t\tconst lastLongest = acc[acc.length - 1];\n\t\t\t\tif (lastLongest && lastLongest.index + lastLongest.length === index) {\n\t\t\t\t\tlastLongest.length++;\n\t\t\t\t} else {\n\t\t\t\t\tacc.push({ index, length : 1 });\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, []);\n\n\t\tconst longestZeroFields = allZeroFields.sort((a, b) => b.length - a.length)[0];\n\n\t\tlet newHost:string;\n\t\tif (longestZeroFields && longestZeroFields.length > 1) {\n\t\t\tconst newFirst = fields.slice(0, longestZeroFields.index) ;\n\t\t\tconst newLast = fields.slice(longestZeroFields.index + longestZeroFields.length);\n\t\t\tnewHost = newFirst.join(\":\") + \"::\" + newLast.join(\":\");\n\t\t} else {\n\t\t\tnewHost = fields.join(\":\");\n\t\t}\n\n\t\tif (zone) {\n\t\t\tnewHost += \"%\" + zone;\n\t\t}\n\n\t\treturn newHost;\n\t} else {\n\t\treturn host;\n\t}\n}\n\nconst URI_PARSE = /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:([^\\/?#@]*)@)?(\\[[^\\/?#\\]]+\\]|[^\\/?#:]*)(?:\\:(\\d*))?))?([^?#]*)(?:\\?([^#]*))?(?:#((?:.|\\n|\\r)*))?/i;\nconst NO_MATCH_IS_UNDEFINED = ((\"\").match(/(){0}/))[1] === undefined;\n\nexport function parse(uriString:string, options:URIOptions = {}):URIComponents {\n\tconst components:URIComponents = {};\n\tconst protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL);\n\n\tif (options.reference === \"suffix\") uriString = (options.scheme ? options.scheme + \":\" : \"\") + \"//\" + uriString;\n\n\tconst matches = uriString.match(URI_PARSE);\n\n\tif (matches) {\n\t\tif (NO_MATCH_IS_UNDEFINED) {\n\t\t\t//store each component\n\t\t\tcomponents.scheme = matches[1];\n\t\t\tcomponents.userinfo = matches[3];\n\t\t\tcomponents.host = matches[4];\n\t\t\tcomponents.port = parseInt(matches[5], 10);\n\t\t\tcomponents.path = matches[6] || \"\";\n\t\t\tcomponents.query = matches[7];\n\t\t\tcomponents.fragment = matches[8];\n\n\t\t\t//fix port number\n\t\t\tif (isNaN(components.port)) {\n\t\t\t\tcomponents.port = matches[5];\n\t\t\t}\n\t\t} else { //IE FIX for improper RegExp matching\n\t\t\t//store each component\n\t\t\tcomponents.scheme = matches[1] || undefined;\n\t\t\tcomponents.userinfo = (uriString.indexOf(\"@\") !== -1 ? matches[3] : undefined);\n\t\t\tcomponents.host = (uriString.indexOf(\"//\") !== -1 ? matches[4] : undefined);\n\t\t\tcomponents.port = parseInt(matches[5], 10);\n\t\t\tcomponents.path = matches[6] || \"\";\n\t\t\tcomponents.query = (uriString.indexOf(\"?\") !== -1 ? matches[7] : undefined);\n\t\t\tcomponents.fragment = (uriString.indexOf(\"#\") !== -1 ? matches[8] : undefined);\n\n\t\t\t//fix port number\n\t\t\tif (isNaN(components.port)) {\n\t\t\t\tcomponents.port = (uriString.match(/\\/\\/(?:.|\\n)*\\:(?:\\/|\\?|\\#|$)/) ? matches[4] : undefined);\n\t\t\t}\n\t\t}\n\n\t\tif (components.host) {\n\t\t\t//normalize IP hosts\n\t\t\tcomponents.host = _normalizeIPv6(_normalizeIPv4(components.host, protocol), protocol);\n\t\t}\n\n\t\t//determine reference type\n\t\tif (components.scheme === undefined && components.userinfo === undefined && components.host === undefined && components.port === undefined && !components.path && components.query === undefined) {\n\t\t\tcomponents.reference = \"same-document\";\n\t\t} else if (components.scheme === undefined) {\n\t\t\tcomponents.reference = \"relative\";\n\t\t} else if (components.fragment === undefined) {\n\t\t\tcomponents.reference = \"absolute\";\n\t\t} else {\n\t\t\tcomponents.reference = \"uri\";\n\t\t}\n\n\t\t//check for reference errors\n\t\tif (options.reference && options.reference !== \"suffix\" && options.reference !== components.reference) {\n\t\t\tcomponents.error = components.error || \"URI is not a \" + options.reference + \" reference.\";\n\t\t}\n\n\t\t//find scheme handler\n\t\tconst schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n\n\t\t//check if scheme can't handle IRIs\n\t\tif (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) {\n\t\t\t//if host component is a domain name\n\t\t\tif (components.host && (options.domainHost || (schemeHandler && schemeHandler.domainHost))) {\n\t\t\t\t//convert Unicode IDN -> ASCII IDN\n\t\t\t\ttry {\n\t\t\t\t\tcomponents.host = punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase());\n\t\t\t\t} catch (e) {\n\t\t\t\t\tcomponents.error = components.error || \"Host's domain name can not be converted to ASCII via punycode: \" + e;\n\t\t\t\t}\n\t\t\t}\n\t\t\t//convert IRI -> URI\n\t\t\t_normalizeComponentEncoding(components, URI_PROTOCOL);\n\t\t} else {\n\t\t\t//normalize encodings\n\t\t\t_normalizeComponentEncoding(components, protocol);\n\t\t}\n\n\t\t//perform scheme specific parsing\n\t\tif (schemeHandler && schemeHandler.parse) {\n\t\t\tschemeHandler.parse(components, options);\n\t\t}\n\t} else {\n\t\tcomponents.error = components.error || \"URI can not be parsed.\";\n\t}\n\n\treturn components;\n};\n\nfunction _recomposeAuthority(components:URIComponents, options:URIOptions):string|undefined {\n\tconst protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL);\n\tconst uriTokens:Array = [];\n\n\tif (components.userinfo !== undefined) {\n\t\turiTokens.push(components.userinfo);\n\t\turiTokens.push(\"@\");\n\t}\n\n\tif (components.host !== undefined) {\n\t\t//normalize IP hosts, add brackets and escape zone separator for IPv6\n\t\turiTokens.push(_normalizeIPv6(_normalizeIPv4(String(components.host), protocol), protocol).replace(protocol.IPV6ADDRESS, (_, $1, $2) => \"[\" + $1 + ($2 ? \"%25\" + $2 : \"\") + \"]\"));\n\t}\n\n\tif (typeof components.port === \"number\") {\n\t\turiTokens.push(\":\");\n\t\turiTokens.push(components.port.toString(10));\n\t}\n\n\treturn uriTokens.length ? uriTokens.join(\"\") : undefined;\n};\n\nconst RDS1 = /^\\.\\.?\\//;\nconst RDS2 = /^\\/\\.(\\/|$)/;\nconst RDS3 = /^\\/\\.\\.(\\/|$)/;\nconst RDS4 = /^\\.\\.?$/;\nconst RDS5 = /^\\/?(?:.|\\n)*?(?=\\/|$)/;\n\nexport function removeDotSegments(input:string):string {\n\tconst output:Array = [];\n\n\twhile (input.length) {\n\t\tif (input.match(RDS1)) {\n\t\t\tinput = input.replace(RDS1, \"\");\n\t\t} else if (input.match(RDS2)) {\n\t\t\tinput = input.replace(RDS2, \"/\");\n\t\t} else if (input.match(RDS3)) {\n\t\t\tinput = input.replace(RDS3, \"/\");\n\t\t\toutput.pop();\n\t\t} else if (input === \".\" || input === \"..\") {\n\t\t\tinput = \"\";\n\t\t} else {\n\t\t\tconst im = input.match(RDS5);\n\t\t\tif (im) {\n\t\t\t\tconst s = im[0];\n\t\t\t\tinput = input.slice(s.length);\n\t\t\t\toutput.push(s);\n\t\t\t} else {\n\t\t\t\tthrow new Error(\"Unexpected dot segment condition\");\n\t\t\t}\n\t\t}\n\t}\n\n\treturn output.join(\"\");\n};\n\nexport function serialize(components:URIComponents, options:URIOptions = {}):string {\n\tconst protocol = (options.iri ? IRI_PROTOCOL : URI_PROTOCOL);\n\tconst uriTokens:Array = [];\n\n\t//find scheme handler\n\tconst schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n\n\t//perform scheme specific serialization\n\tif (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(components, options);\n\n\tif (components.host) {\n\t\t//if host component is an IPv6 address\n\t\tif (protocol.IPV6ADDRESS.test(components.host)) {\n\t\t\t//TODO: normalize IPv6 address as per RFC 5952\n\t\t}\n\n\t\t//if host component is a domain name\n\t\telse if (options.domainHost || (schemeHandler && schemeHandler.domainHost)) {\n\t\t\t//convert IDN via punycode\n\t\t\ttry {\n\t\t\t\tcomponents.host = (!options.iri ? punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()) : punycode.toUnicode(components.host));\n\t\t\t} catch (e) {\n\t\t\t\tcomponents.error = components.error || \"Host's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n\t\t\t}\n\t\t}\n\t}\n\n\t//normalize encoding\n\t_normalizeComponentEncoding(components, protocol);\n\n\tif (options.reference !== \"suffix\" && components.scheme) {\n\t\turiTokens.push(components.scheme);\n\t\turiTokens.push(\":\");\n\t}\n\n\tconst authority = _recomposeAuthority(components, options);\n\tif (authority !== undefined) {\n\t\tif (options.reference !== \"suffix\") {\n\t\t\turiTokens.push(\"//\");\n\t\t}\n\n\t\turiTokens.push(authority);\n\n\t\tif (components.path && components.path.charAt(0) !== \"/\") {\n\t\t\turiTokens.push(\"/\");\n\t\t}\n\t}\n\n\tif (components.path !== undefined) {\n\t\tlet s = components.path;\n\n\t\tif (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) {\n\t\t\ts = removeDotSegments(s);\n\t\t}\n\n\t\tif (authority === undefined) {\n\t\t\ts = s.replace(/^\\/\\//, \"/%2F\"); //don't allow the path to start with \"//\"\n\t\t}\n\n\t\turiTokens.push(s);\n\t}\n\n\tif (components.query !== undefined) {\n\t\turiTokens.push(\"?\");\n\t\turiTokens.push(components.query);\n\t}\n\n\tif (components.fragment !== undefined) {\n\t\turiTokens.push(\"#\");\n\t\turiTokens.push(components.fragment);\n\t}\n\n\treturn uriTokens.join(\"\"); //merge tokens into a string\n};\n\nexport function resolveComponents(base:URIComponents, relative:URIComponents, options:URIOptions = {}, skipNormalization?:boolean):URIComponents {\n\tconst target:URIComponents = {};\n\n\tif (!skipNormalization) {\n\t\tbase = parse(serialize(base, options), options); //normalize base components\n\t\trelative = parse(serialize(relative, options), options); //normalize relative components\n\t}\n\toptions = options || {};\n\n\tif (!options.tolerant && relative.scheme) {\n\t\ttarget.scheme = relative.scheme;\n\t\t//target.authority = relative.authority;\n\t\ttarget.userinfo = relative.userinfo;\n\t\ttarget.host = relative.host;\n\t\ttarget.port = relative.port;\n\t\ttarget.path = removeDotSegments(relative.path || \"\");\n\t\ttarget.query = relative.query;\n\t} else {\n\t\tif (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) {\n\t\t\t//target.authority = relative.authority;\n\t\t\ttarget.userinfo = relative.userinfo;\n\t\t\ttarget.host = relative.host;\n\t\t\ttarget.port = relative.port;\n\t\t\ttarget.path = removeDotSegments(relative.path || \"\");\n\t\t\ttarget.query = relative.query;\n\t\t} else {\n\t\t\tif (!relative.path) {\n\t\t\t\ttarget.path = base.path;\n\t\t\t\tif (relative.query !== undefined) {\n\t\t\t\t\ttarget.query = relative.query;\n\t\t\t\t} else {\n\t\t\t\t\ttarget.query = base.query;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (relative.path.charAt(0) === \"/\") {\n\t\t\t\t\ttarget.path = removeDotSegments(relative.path);\n\t\t\t\t} else {\n\t\t\t\t\tif ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) {\n\t\t\t\t\t\ttarget.path = \"/\" + relative.path;\n\t\t\t\t\t} else if (!base.path) {\n\t\t\t\t\t\ttarget.path = relative.path;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttarget.path = base.path.slice(0, base.path.lastIndexOf(\"/\") + 1) + relative.path;\n\t\t\t\t\t}\n\t\t\t\t\ttarget.path = removeDotSegments(target.path);\n\t\t\t\t}\n\t\t\t\ttarget.query = relative.query;\n\t\t\t}\n\t\t\t//target.authority = base.authority;\n\t\t\ttarget.userinfo = base.userinfo;\n\t\t\ttarget.host = base.host;\n\t\t\ttarget.port = base.port;\n\t\t}\n\t\ttarget.scheme = base.scheme;\n\t}\n\n\ttarget.fragment = relative.fragment;\n\n\treturn target;\n};\n\nexport function resolve(baseURI:string, relativeURI:string, options?:URIOptions):string {\n\tconst schemelessOptions = assign({ scheme : 'null' }, options);\n\treturn serialize(resolveComponents(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true), schemelessOptions);\n};\n\nexport function normalize(uri:string, options?:URIOptions):string;\nexport function normalize(uri:URIComponents, options?:URIOptions):URIComponents;\nexport function normalize(uri:any, options?:URIOptions):any {\n\tif (typeof uri === \"string\") {\n\t\turi = serialize(parse(uri, options), options);\n\t} else if (typeOf(uri) === \"object\") {\n\t\turi = parse(serialize(uri, options), options);\n\t}\n\n\treturn uri;\n};\n\nexport function equal(uriA:string, uriB:string, options?: URIOptions):boolean;\nexport function equal(uriA:URIComponents, uriB:URIComponents, options?:URIOptions):boolean;\nexport function equal(uriA:any, uriB:any, options?:URIOptions):boolean {\n\tif (typeof uriA === \"string\") {\n\t\turiA = serialize(parse(uriA, options), options);\n\t} else if (typeOf(uriA) === \"object\") {\n\t\turiA = serialize(uriA, options);\n\t}\n\n\tif (typeof uriB === \"string\") {\n\t\turiB = serialize(parse(uriB, options), options);\n\t} else if (typeOf(uriB) === \"object\") {\n\t\turiB = serialize(uriB, options);\n\t}\n\n\treturn uriA === uriB;\n};\n\nexport function escapeComponent(str:string, options?:URIOptions):string {\n\treturn str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.ESCAPE : IRI_PROTOCOL.ESCAPE), pctEncChar);\n};\n\nexport function unescapeComponent(str:string, options?:URIOptions):string {\n\treturn str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.PCT_ENCODED : IRI_PROTOCOL.PCT_ENCODED), pctDecChars);\n};\n","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\n\nconst handler:URISchemeHandler = {\n\tscheme : \"http\",\n\n\tdomainHost : true,\n\n\tparse : function (components:URIComponents, options:URIOptions):URIComponents {\n\t\t//report missing host\n\t\tif (!components.host) {\n\t\t\tcomponents.error = components.error || \"HTTP URIs must have a host.\";\n\t\t}\n\n\t\treturn components;\n\t},\n\n\tserialize : function (components:URIComponents, options:URIOptions):URIComponents {\n\t\t//normalize the default port\n\t\tif (components.port === (String(components.scheme).toLowerCase() !== \"https\" ? 80 : 443) || components.port === \"\") {\n\t\t\tcomponents.port = undefined;\n\t\t}\n\t\t\n\t\t//normalize the empty path\n\t\tif (!components.path) {\n\t\t\tcomponents.path = \"/\";\n\t\t}\n\n\t\t//NOTE: We do not parse query strings for HTTP URIs\n\t\t//as WWW Form Url Encoded query strings are part of the HTML4+ spec,\n\t\t//and not the HTTP spec.\n\n\t\treturn components;\n\t}\n};\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport http from \"./http\";\n\nconst handler:URISchemeHandler = {\n\tscheme : \"https\",\n\tdomainHost : http.domainHost,\n\tparse : http.parse,\n\tserialize : http.serialize\n}\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { pctEncChar, pctDecChars, unescapeComponent } from \"../uri\";\nimport punycode from \"punycode\";\nimport { merge, subexp, toUpperCase, toArray } from \"../util\";\n\nexport interface MailtoHeaders {\n\t[hfname:string]:string\n}\n\nexport interface MailtoComponents extends URIComponents {\n\tto:Array,\n\theaders?:MailtoHeaders,\n\tsubject?:string,\n\tbody?:string\n}\n\nconst O:MailtoHeaders = {};\nconst isIRI = true;\n\n//RFC 3986\nconst UNRESERVED$$ = \"[A-Za-z0-9\\\\-\\\\.\\\\_\\\\~\" + (isIRI ? \"\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF\" : \"\") + \"]\";\nconst HEXDIG$$ = \"[0-9A-Fa-f]\"; //case-insensitive\nconst PCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$)); //expanded\n\n//RFC 5322, except these symbols as per RFC 6068: @ : / ? # [ ] & ; =\n//const ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\#\\\\$\\\\%\\\\&\\\\'\\\\*\\\\+\\\\-\\\\/\\\\=\\\\?\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QTEXT$$ = \"[\\\\x01-\\\\x08\\\\x0B\\\\x0C\\\\x0E-\\\\x1F\\\\x7F]\"; //(%d1-8 / %d11-12 / %d14-31 / %d127)\n//const QTEXT$$ = merge(\"[\\\\x21\\\\x23-\\\\x5B\\\\x5D-\\\\x7E]\", OBS_QTEXT$$); //%d33 / %d35-91 / %d93-126 / obs-qtext\n//const VCHAR$$ = \"[\\\\x21-\\\\x7E]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QP$ = subexp(\"\\\\\\\\\" + merge(\"[\\\\x00\\\\x0D\\\\x0A]\", OBS_QTEXT$$)); //%d0 / CR / LF / obs-qtext\n//const FWS$ = subexp(subexp(WSP$$ + \"*\" + \"\\\\x0D\\\\x0A\") + \"?\" + WSP$$ + \"+\");\n//const QUOTED_PAIR$ = subexp(subexp(\"\\\\\\\\\" + subexp(VCHAR$$ + \"|\" + WSP$$)) + \"|\" + OBS_QP$);\n//const QUOTED_STRING$ = subexp('\\\\\"' + subexp(FWS$ + \"?\" + QCONTENT$) + \"*\" + FWS$ + \"?\" + '\\\\\"');\nconst ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\$\\\\%\\\\'\\\\*\\\\+\\\\-\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\nconst QTEXT$$ = \"[\\\\!\\\\$\\\\%\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\-\\\\.0-9\\\\<\\\\>A-Z\\\\x5E-\\\\x7E]\";\nconst VCHAR$$ = merge(QTEXT$$, \"[\\\\\\\"\\\\\\\\]\");\nconst DOT_ATOM_TEXT$ = subexp(ATEXT$$ + \"+\" + subexp(\"\\\\.\" + ATEXT$$ + \"+\") + \"*\");\nconst QUOTED_PAIR$ = subexp(\"\\\\\\\\\" + VCHAR$$);\nconst QCONTENT$ = subexp(QTEXT$$ + \"|\" + QUOTED_PAIR$);\nconst QUOTED_STRING$ = subexp('\\\\\"' + QCONTENT$ + \"*\" + '\\\\\"');\n\n//RFC 6068\nconst DTEXT_NO_OBS$$ = \"[\\\\x21-\\\\x5A\\\\x5E-\\\\x7E]\"; //%d33-90 / %d94-126\nconst SOME_DELIMS$$ = \"[\\\\!\\\\$\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\:\\\\@]\";\nconst QCHAR$ = subexp(UNRESERVED$$ + \"|\" + PCT_ENCODED$ + \"|\" + SOME_DELIMS$$);\nconst DOMAIN$ = subexp(DOT_ATOM_TEXT$ + \"|\" + \"\\\\[\" + DTEXT_NO_OBS$$ + \"*\" + \"\\\\]\");\nconst LOCAL_PART$ = subexp(DOT_ATOM_TEXT$ + \"|\" + QUOTED_STRING$);\nconst ADDR_SPEC$ = subexp(LOCAL_PART$ + \"\\\\@\" + DOMAIN$);\nconst TO$ = subexp(ADDR_SPEC$ + subexp(\"\\\\,\" + ADDR_SPEC$) + \"*\");\nconst HFNAME$ = subexp(QCHAR$ + \"*\");\nconst HFVALUE$ = HFNAME$;\nconst HFIELD$ = subexp(HFNAME$ + \"\\\\=\" + HFVALUE$);\nconst HFIELDS2$ = subexp(HFIELD$ + subexp(\"\\\\&\" + HFIELD$) + \"*\");\nconst HFIELDS$ = subexp(\"\\\\?\" + HFIELDS2$);\nconst MAILTO_URI = new RegExp(\"^mailto\\\\:\" + TO$ + \"?\" + HFIELDS$ + \"?$\");\n\nconst UNRESERVED = new RegExp(UNRESERVED$$, \"g\");\nconst PCT_ENCODED = new RegExp(PCT_ENCODED$, \"g\");\nconst NOT_LOCAL_PART = new RegExp(merge(\"[^]\", ATEXT$$, \"[\\\\.]\", '[\\\\\"]', VCHAR$$), \"g\");\nconst NOT_DOMAIN = new RegExp(merge(\"[^]\", ATEXT$$, \"[\\\\.]\", \"[\\\\[]\", DTEXT_NO_OBS$$, \"[\\\\]]\"), \"g\");\nconst NOT_HFNAME = new RegExp(merge(\"[^]\", UNRESERVED$$, SOME_DELIMS$$), \"g\");\nconst NOT_HFVALUE = NOT_HFNAME;\nconst TO = new RegExp(\"^\" + TO$ + \"$\");\nconst HFIELDS = new RegExp(\"^\" + HFIELDS2$ + \"$\");\n\nfunction decodeUnreserved(str:string):string {\n\tconst decStr = pctDecChars(str);\n\treturn (!decStr.match(UNRESERVED) ? str : decStr);\n}\n\nconst handler:URISchemeHandler = {\n\tscheme : \"mailto\",\n\n\tparse : function (components:URIComponents, options:URIOptions):MailtoComponents {\n\t\tconst mailtoComponents = components as MailtoComponents;\n\t\tconst to = mailtoComponents.to = (mailtoComponents.path ? mailtoComponents.path.split(\",\") : []);\n\t\tmailtoComponents.path = undefined;\n\n\t\tif (mailtoComponents.query) {\n\t\t\tlet unknownHeaders = false\n\t\t\tconst headers:MailtoHeaders = {};\n\t\t\tconst hfields = mailtoComponents.query.split(\"&\");\n\n\t\t\tfor (let x = 0, xl = hfields.length; x < xl; ++x) {\n\t\t\t\tconst hfield = hfields[x].split(\"=\");\n\n\t\t\t\tswitch (hfield[0]) {\n\t\t\t\t\tcase \"to\":\n\t\t\t\t\t\tconst toAddrs = hfield[1].split(\",\");\n\t\t\t\t\t\tfor (let x = 0, xl = toAddrs.length; x < xl; ++x) {\n\t\t\t\t\t\t\tto.push(toAddrs[x]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subject\":\n\t\t\t\t\t\tmailtoComponents.subject = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"body\":\n\t\t\t\t\t\tmailtoComponents.body = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tunknownHeaders = true;\n\t\t\t\t\t\theaders[unescapeComponent(hfield[0], options)] = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (unknownHeaders) mailtoComponents.headers = headers;\n\t\t}\n\n\t\tmailtoComponents.query = undefined;\n\n\t\tfor (let x = 0, xl = to.length; x < xl; ++x) {\n\t\t\tconst addr = to[x].split(\"@\");\n\n\t\t\taddr[0] = unescapeComponent(addr[0]);\n\n\t\t\tif (!options.unicodeSupport) {\n\t\t\t\t//convert Unicode IDN -> ASCII IDN\n\t\t\t\ttry {\n\t\t\t\t\taddr[1] = punycode.toASCII(unescapeComponent(addr[1], options).toLowerCase());\n\t\t\t\t} catch (e) {\n\t\t\t\t\tmailtoComponents.error = mailtoComponents.error || \"Email address's domain name can not be converted to ASCII via punycode: \" + e;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\taddr[1] = unescapeComponent(addr[1], options).toLowerCase();\n\t\t\t}\n\n\t\t\tto[x] = addr.join(\"@\");\n\t\t}\n\n\t\treturn mailtoComponents;\n\t},\n\n\tserialize : function (mailtoComponents:MailtoComponents, options:URIOptions):URIComponents {\n\t\tconst components = mailtoComponents as URIComponents;\n\t\tconst to = toArray(mailtoComponents.to);\n\t\tif (to) {\n\t\t\tfor (let x = 0, xl = to.length; x < xl; ++x) {\n\t\t\t\tconst toAddr = String(to[x]);\n\t\t\t\tconst atIdx = toAddr.lastIndexOf(\"@\");\n\t\t\t\tconst localPart = (toAddr.slice(0, atIdx)).replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_LOCAL_PART, pctEncChar);\n\t\t\t\tlet domain = toAddr.slice(atIdx + 1);\n\n\t\t\t\t//convert IDN via punycode\n\t\t\t\ttry {\n\t\t\t\t\tdomain = (!options.iri ? punycode.toASCII(unescapeComponent(domain, options).toLowerCase()) : punycode.toUnicode(domain));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tcomponents.error = components.error || \"Email address's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n\t\t\t\t}\n\n\t\t\t\tto[x] = localPart + \"@\" + domain;\n\t\t\t}\n\n\t\t\tcomponents.path = to.join(\",\");\n\t\t}\n\n\t\tconst headers = mailtoComponents.headers = mailtoComponents.headers || {};\n\n\t\tif (mailtoComponents.subject) headers[\"subject\"] = mailtoComponents.subject;\n\t\tif (mailtoComponents.body) headers[\"body\"] = mailtoComponents.body;\n\n\t\tconst fields = [];\n\t\tfor (const name in headers) {\n\t\t\tif (headers[name] !== O[name]) {\n\t\t\t\tfields.push(\n\t\t\t\t\tname.replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFNAME, pctEncChar) +\n\t\t\t\t\t\"=\" +\n\t\t\t\t\theaders[name].replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFVALUE, pctEncChar)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (fields.length) {\n\t\t\tcomponents.query = fields.join(\"&\");\n\t\t}\n\n\t\treturn components;\n\t}\n}\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { pctEncChar, SCHEMES } from \"../uri\";\n\nexport interface URNComponents extends URIComponents {\n\tnid?:string;\n\tnss?:string;\n}\n\nexport interface URNOptions extends URIOptions {\n\tnid?:string;\n}\n\nconst NID$ = \"(?:[0-9A-Za-z][0-9A-Za-z\\\\-]{1,31})\";\nconst PCT_ENCODED$ = \"(?:\\\\%[0-9A-Fa-f]{2})\";\nconst TRANS$$ = \"[0-9A-Za-z\\\\(\\\\)\\\\+\\\\,\\\\-\\\\.\\\\:\\\\=\\\\@\\\\;\\\\$\\\\_\\\\!\\\\*\\\\'\\\\/\\\\?\\\\#]\";\nconst NSS$ = \"(?:(?:\" + PCT_ENCODED$ + \"|\" + TRANS$$ + \")+)\";\nconst URN_SCHEME = new RegExp(\"^urn\\\\:(\" + NID$ + \")$\");\nconst URN_PATH = new RegExp(\"^(\" + NID$ + \")\\\\:(\" + NSS$ + \")$\");\nconst URN_PARSE = /^([^\\:]+)\\:(.*)/;\nconst URN_EXCLUDED = /[\\x00-\\x20\\\\\\\"\\&\\<\\>\\[\\]\\^\\`\\{\\|\\}\\~\\x7F-\\xFF]/g;\n\n//RFC 2141\nconst handler:URISchemeHandler = {\n\tscheme : \"urn\",\n\n\tparse : function (components:URIComponents, options:URNOptions):URNComponents {\n\t\tconst matches = components.path && components.path.match(URN_PARSE);\n\t\tlet urnComponents = components as URNComponents;\n\n\t\tif (matches) {\n\t\t\tconst scheme = options.scheme || urnComponents.scheme || \"urn\";\n\t\t\tconst nid = matches[1].toLowerCase();\n\t\t\tconst nss = matches[2];\n\t\t\tconst urnScheme = `${scheme}:${options.nid || nid}`;\n\t\t\tconst schemeHandler = SCHEMES[urnScheme];\n\n\t\t\turnComponents.nid = nid;\n\t\t\turnComponents.nss = nss;\n\t\t\turnComponents.path = undefined;\n\n\t\t\tif (schemeHandler) {\n\t\t\t\turnComponents = schemeHandler.parse(urnComponents, options) as URNComponents;\n\t\t\t}\n\t\t} else {\n\t\t\turnComponents.error = urnComponents.error || \"URN can not be parsed.\";\n\t\t}\n\n\t\treturn urnComponents;\n\t},\n\n\tserialize : function (urnComponents:URNComponents, options:URNOptions):URIComponents {\n\t\tconst scheme = options.scheme || urnComponents.scheme || \"urn\";\n\t\tconst nid = urnComponents.nid;\n\t\tconst urnScheme = `${scheme}:${options.nid || nid}`;\n\t\tconst schemeHandler = SCHEMES[urnScheme];\n\n\t\tif (schemeHandler) {\n\t\t\turnComponents = schemeHandler.serialize(urnComponents, options) as URNComponents;\n\t\t}\n\n\t\tconst uriComponents = urnComponents as URIComponents;\n\t\tconst nss = urnComponents.nss;\n\t\turiComponents.path = `${nid || options.nid}:${nss}`;\n\n\t\treturn uriComponents;\n\t},\n};\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { URNComponents } from \"./urn\";\nimport { SCHEMES } from \"../uri\";\n\nexport interface UUIDComponents extends URNComponents {\n\tuuid?: string;\n}\n\nconst UUID = /^[0-9A-Fa-f]{8}(?:\\-[0-9A-Fa-f]{4}){3}\\-[0-9A-Fa-f]{12}$/;\nconst UUID_PARSE = /^[0-9A-Fa-f\\-]{36}/;\n\n//RFC 4122\nconst handler:URISchemeHandler = {\n\tscheme : \"urn:uuid\",\n\n\tparse : function (urnComponents:URNComponents, options:URIOptions):UUIDComponents {\n\t\tconst uuidComponents = urnComponents as UUIDComponents;\n\t\tuuidComponents.uuid = uuidComponents.nss;\n\t\tuuidComponents.nss = undefined;\n\n\t\tif (!options.tolerant && (!uuidComponents.uuid || !uuidComponents.uuid.match(UUID))) {\n\t\t\tuuidComponents.error = uuidComponents.error || \"UUID is not valid.\";\n\t\t}\n\n\t\treturn uuidComponents;\n\t},\n\n\tserialize : function (uuidComponents:UUIDComponents, options:URIOptions):URNComponents {\n\t\tconst urnComponents = uuidComponents as URNComponents;\n\t\t//normalize UUID\n\t\turnComponents.nss = (uuidComponents.uuid || \"\").toLowerCase();\n\t\treturn urnComponents;\n\t},\n};\n\nexport default handler;","import { SCHEMES } from \"./uri\";\n\nimport http from \"./schemes/http\";\nSCHEMES[http.scheme] = http;\n\nimport https from \"./schemes/https\";\nSCHEMES[https.scheme] = https;\n\nimport mailto from \"./schemes/mailto\";\nSCHEMES[mailto.scheme] = mailto;\n\nimport urn from \"./schemes/urn\";\nSCHEMES[urn.scheme] = urn;\n\nimport uuid from \"./schemes/urn-uuid\";\nSCHEMES[uuid.scheme] = uuid;\n\nexport * from \"./uri\";\n","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","'use strict';\n\n// https://mathiasbynens.be/notes/javascript-encoding\n// https://github.com/bestiejs/punycode.js - punycode.ucs2.decode\nmodule.exports = function ucs2length(str) {\n var length = 0\n , len = str.length\n , pos = 0\n , value;\n while (pos < len) {\n length++;\n value = str.charCodeAt(pos++);\n if (value >= 0xD800 && value <= 0xDBFF && pos < len) {\n // high surrogate, and there is a next character\n value = str.charCodeAt(pos);\n if ((value & 0xFC00) == 0xDC00) pos++; // low surrogate\n }\n }\n return length;\n};\n","'use strict';\n\n\nmodule.exports = {\n copy: copy,\n checkDataType: checkDataType,\n checkDataTypes: checkDataTypes,\n coerceToTypes: coerceToTypes,\n toHash: toHash,\n getProperty: getProperty,\n escapeQuotes: escapeQuotes,\n equal: require('fast-deep-equal'),\n ucs2length: require('./ucs2length'),\n varOccurences: varOccurences,\n varReplace: varReplace,\n cleanUpCode: cleanUpCode,\n finalCleanUpCode: finalCleanUpCode,\n schemaHasRules: schemaHasRules,\n schemaHasRulesExcept: schemaHasRulesExcept,\n schemaUnknownRules: schemaUnknownRules,\n toQuotedString: toQuotedString,\n getPathExpr: getPathExpr,\n getPath: getPath,\n getData: getData,\n unescapeFragment: unescapeFragment,\n unescapeJsonPointer: unescapeJsonPointer,\n escapeFragment: escapeFragment,\n escapeJsonPointer: escapeJsonPointer\n};\n\n\nfunction copy(o, to) {\n to = to || {};\n for (var key in o) to[key] = o[key];\n return to;\n}\n\n\nfunction checkDataType(dataType, data, negate) {\n var EQUAL = negate ? ' !== ' : ' === '\n , AND = negate ? ' || ' : ' && '\n , OK = negate ? '!' : ''\n , NOT = negate ? '' : '!';\n switch (dataType) {\n case 'null': return data + EQUAL + 'null';\n case 'array': return OK + 'Array.isArray(' + data + ')';\n case 'object': return '(' + OK + data + AND +\n 'typeof ' + data + EQUAL + '\"object\"' + AND +\n NOT + 'Array.isArray(' + data + '))';\n case 'integer': return '(typeof ' + data + EQUAL + '\"number\"' + AND +\n NOT + '(' + data + ' % 1)' +\n AND + data + EQUAL + data + ')';\n default: return 'typeof ' + data + EQUAL + '\"' + dataType + '\"';\n }\n}\n\n\nfunction checkDataTypes(dataTypes, data) {\n switch (dataTypes.length) {\n case 1: return checkDataType(dataTypes[0], data, true);\n default:\n var code = '';\n var types = toHash(dataTypes);\n if (types.array && types.object) {\n code = types.null ? '(': '(!' + data + ' || ';\n code += 'typeof ' + data + ' !== \"object\")';\n delete types.null;\n delete types.array;\n delete types.object;\n }\n if (types.number) delete types.integer;\n for (var t in types)\n code += (code ? ' && ' : '' ) + checkDataType(t, data, true);\n\n return code;\n }\n}\n\n\nvar COERCE_TO_TYPES = toHash([ 'string', 'number', 'integer', 'boolean', 'null' ]);\nfunction coerceToTypes(optionCoerceTypes, dataTypes) {\n if (Array.isArray(dataTypes)) {\n var types = [];\n for (var i=0; i= lvl) throw new Error('Cannot access property/index ' + up + ' levels up, current level is ' + lvl);\n return paths[lvl - up];\n }\n\n if (up > lvl) throw new Error('Cannot access data ' + up + ' levels up, current level is ' + lvl);\n data = 'data' + ((lvl - up) || '');\n if (!jsonPointer) return data;\n }\n\n var expr = data;\n var segments = jsonPointer.split('/');\n for (var i=0; i= 0) return { index: index, compiling: true };\n index = this._compilations.length;\n this._compilations[index] = {\n schema: schema,\n root: root,\n baseId: baseId\n };\n return { index: index, compiling: false };\n}\n\n\n/**\n * Removes the schema from the currently compiled list\n * @this Ajv\n * @param {Object} schema schema to compile\n * @param {Object} root root object\n * @param {String} baseId base schema ID\n */\nfunction endCompiling(schema, root, baseId) {\n /* jshint validthis: true */\n var i = compIndex.call(this, schema, root, baseId);\n if (i >= 0) this._compilations.splice(i, 1);\n}\n\n\n/**\n * Index of schema compilation in the currently compiled list\n * @this Ajv\n * @param {Object} schema schema to compile\n * @param {Object} root root object\n * @param {String} baseId base schema ID\n * @return {Integer} compilation index\n */\nfunction compIndex(schema, root, baseId) {\n /* jshint validthis: true */\n for (var i=0; i%\\\\^`{|}]|%[0-9a-f]{2})|\\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?)*\\})*$/i;\n// For the source: https://gist.github.com/dperini/729294\n// For test cases: https://mathiasbynens.be/demo/url-regex\n// @todo Delete current URL in favour of the commented out URL rule when this issue is fixed https://github.com/eslint/eslint/issues/7983.\n// var URL = /^(?:(?:https?|ftp):\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!10(?:\\.\\d{1,3}){3})(?!127(?:\\.\\d{1,3}){3})(?!169\\.254(?:\\.\\d{1,3}){2})(?!192\\.168(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u{00a1}-\\u{ffff}0-9]+-?)*[a-z\\u{00a1}-\\u{ffff}0-9]+)(?:\\.(?:[a-z\\u{00a1}-\\u{ffff}0-9]+-?)*[a-z\\u{00a1}-\\u{ffff}0-9]+)*(?:\\.(?:[a-z\\u{00a1}-\\u{ffff}]{2,})))(?::\\d{2,5})?(?:\\/[^\\s]*)?$/iu;\nvar URL = /^(?:(?:http[s\\u017F]?|ftp):\\/\\/)(?:(?:[\\0-\\x08\\x0E-\\x1F!-\\x9F\\xA1-\\u167F\\u1681-\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u205E\\u2060-\\u2FFF\\u3001-\\uD7FF\\uE000-\\uFEFE\\uFF00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+(?::(?:[\\0-\\x08\\x0E-\\x1F!-\\x9F\\xA1-\\u167F\\u1681-\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u205E\\u2060-\\u2FFF\\u3001-\\uD7FF\\uE000-\\uFEFE\\uFF00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])*)?@)?(?:(?!10(?:\\.[0-9]{1,3}){3})(?!127(?:\\.[0-9]{1,3}){3})(?!169\\.254(?:\\.[0-9]{1,3}){2})(?!192\\.168(?:\\.[0-9]{1,3}){2})(?!172\\.(?:1[6-9]|2[0-9]|3[01])(?:\\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9KSa-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+-?)*(?:[0-9KSa-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+)(?:\\.(?:(?:[0-9KSa-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+-?)*(?:[0-9KSa-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+)*(?:\\.(?:(?:[KSa-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\\/(?:[\\0-\\x08\\x0E-\\x1F!-\\x9F\\xA1-\\u167F\\u1681-\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u205E\\u2060-\\u2FFF\\u3001-\\uD7FF\\uE000-\\uFEFE\\uFF00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])*)?$/i;\nvar UUID = /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i;\nvar JSON_POINTER = /^(?:\\/(?:[^~/]|~0|~1)*)*$/;\nvar JSON_POINTER_URI_FRAGMENT = /^#(?:\\/(?:[a-z0-9_\\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i;\nvar RELATIVE_JSON_POINTER = /^(?:0|[1-9][0-9]*)(?:#|(?:\\/(?:[^~/]|~0|~1)*)*)$/;\n\n\nmodule.exports = formats;\n\nfunction formats(mode) {\n mode = mode == 'full' ? 'full' : 'fast';\n return util.copy(formats[mode]);\n}\n\n\nformats.fast = {\n // date: http://tools.ietf.org/html/rfc3339#section-5.6\n date: /^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d$/,\n // date-time: http://tools.ietf.org/html/rfc3339#section-5.6\n time: /^(?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)?$/i,\n 'date-time': /^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d[t\\s](?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)$/i,\n // uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js\n uri: /^(?:[a-z][a-z0-9+-.]*:)(?:\\/?\\/)?[^\\s]*$/i,\n 'uri-reference': /^(?:(?:[a-z][a-z0-9+-.]*:)?\\/?\\/)?(?:[^\\\\\\s#][^\\s#]*)?(?:#[^\\\\\\s]*)?$/i,\n 'uri-template': URITEMPLATE,\n url: URL,\n // email (sources from jsen validator):\n // http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address#answer-8829363\n // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address (search for 'willful violation')\n email: /^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,\n hostname: HOSTNAME,\n // optimized https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html\n ipv4: /^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/,\n // optimized http://stackoverflow.com/questions/53497/regular-expression-that-matches-valid-ipv6-addresses\n ipv6: /^\\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(?:%.+)?\\s*$/i,\n regex: regex,\n // uuid: http://tools.ietf.org/html/rfc4122\n uuid: UUID,\n // JSON-pointer: https://tools.ietf.org/html/rfc6901\n // uri fragment: https://tools.ietf.org/html/rfc3986#appendix-A\n 'json-pointer': JSON_POINTER,\n 'json-pointer-uri-fragment': JSON_POINTER_URI_FRAGMENT,\n // relative JSON-pointer: http://tools.ietf.org/html/draft-luff-relative-json-pointer-00\n 'relative-json-pointer': RELATIVE_JSON_POINTER\n};\n\n\nformats.full = {\n date: date,\n time: time,\n 'date-time': date_time,\n uri: uri,\n 'uri-reference': URIREF,\n 'uri-template': URITEMPLATE,\n url: URL,\n email: /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,\n hostname: HOSTNAME,\n ipv4: /^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/,\n ipv6: /^\\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(?:%.+)?\\s*$/i,\n regex: regex,\n uuid: UUID,\n 'json-pointer': JSON_POINTER,\n 'json-pointer-uri-fragment': JSON_POINTER_URI_FRAGMENT,\n 'relative-json-pointer': RELATIVE_JSON_POINTER\n};\n\n\nfunction isLeapYear(year) {\n // https://tools.ietf.org/html/rfc3339#appendix-C\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n\n\nfunction date(str) {\n // full-date from http://tools.ietf.org/html/rfc3339#section-5.6\n var matches = str.match(DATE);\n if (!matches) return false;\n\n var year = +matches[1];\n var month = +matches[2];\n var day = +matches[3];\n\n return month >= 1 && month <= 12 && day >= 1 &&\n day <= (month == 2 && isLeapYear(year) ? 29 : DAYS[month]);\n}\n\n\nfunction time(str, full) {\n var matches = str.match(TIME);\n if (!matches) return false;\n\n var hour = matches[1];\n var minute = matches[2];\n var second = matches[3];\n var timeZone = matches[5];\n return ((hour <= 23 && minute <= 59 && second <= 59) ||\n (hour == 23 && minute == 59 && second == 60)) &&\n (!full || timeZone);\n}\n\n\nvar DATE_TIME_SEPARATOR = /t|\\s/i;\nfunction date_time(str) {\n // http://tools.ietf.org/html/rfc3339#section-5.6\n var dateTime = str.split(DATE_TIME_SEPARATOR);\n return dateTime.length == 2 && date(dateTime[0]) && time(dateTime[1], true);\n}\n\n\nvar NOT_URI_FRAGMENT = /\\/|:/;\nfunction uri(str) {\n // http://jmrware.com/articles/2009/uri_regexp/URI_regex.html + optional protocol + required \".\"\n return NOT_URI_FRAGMENT.test(str) && URI.test(str);\n}\n\n\nvar Z_ANCHOR = /[^\\\\]\\\\Z/;\nfunction regex(str) {\n if (Z_ANCHOR.test(str)) return false;\n try {\n new RegExp(str);\n return true;\n } catch(e) {\n return false;\n }\n}\n","'use strict';\nmodule.exports = function generate_ref(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $async, $refCode;\n if ($schema == '#' || $schema == '#/') {\n if (it.isRoot) {\n $async = it.async;\n $refCode = 'validate';\n } else {\n $async = it.root.schema.$async === true;\n $refCode = 'root.refVal[0]';\n }\n } else {\n var $refVal = it.resolveRef(it.baseId, $schema, it.isRoot);\n if ($refVal === undefined) {\n var $message = it.MissingRefError.message(it.baseId, $schema);\n if (it.opts.missingRefs == 'fail') {\n it.logger.error($message);\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('$ref') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { ref: \\'' + (it.util.escapeQuotes($schema)) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'can\\\\\\'t resolve reference ' + (it.util.escapeQuotes($schema)) + '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: ' + (it.util.toQuotedString($schema)) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n if ($breakOnError) {\n out += ' if (false) { ';\n }\n } else if (it.opts.missingRefs == 'ignore') {\n it.logger.warn($message);\n if ($breakOnError) {\n out += ' if (true) { ';\n }\n } else {\n throw new it.MissingRefError(it.baseId, $schema, $message);\n }\n } else if ($refVal.inline) {\n var $it = it.util.copy(it);\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n $it.schema = $refVal.schema;\n $it.schemaPath = '';\n $it.errSchemaPath = $schema;\n var $code = it.validate($it).replace(/validate\\.schema/g, $refVal.code);\n out += ' ' + ($code) + ' ';\n if ($breakOnError) {\n out += ' if (' + ($nextValid) + ') { ';\n }\n } else {\n $async = $refVal.$async === true || (it.async && $refVal.$async !== false);\n $refCode = $refVal.code;\n }\n }\n if ($refCode) {\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = '';\n if (it.opts.passContext) {\n out += ' ' + ($refCode) + '.call(this, ';\n } else {\n out += ' ' + ($refCode) + '( ';\n }\n out += ' ' + ($data) + ', (dataPath || \\'\\')';\n if (it.errorPath != '\"\"') {\n out += ' + ' + (it.errorPath);\n }\n var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData',\n $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty';\n out += ' , ' + ($parentData) + ' , ' + ($parentDataProperty) + ', rootData) ';\n var __callValidate = out;\n out = $$outStack.pop();\n if ($async) {\n if (!it.async) throw new Error('async schema referenced by sync schema');\n if ($breakOnError) {\n out += ' var ' + ($valid) + '; ';\n }\n out += ' try { await ' + (__callValidate) + '; ';\n if ($breakOnError) {\n out += ' ' + ($valid) + ' = true; ';\n }\n out += ' } catch (e) { if (!(e instanceof ValidationError)) throw e; if (vErrors === null) vErrors = e.errors; else vErrors = vErrors.concat(e.errors); errors = vErrors.length; ';\n if ($breakOnError) {\n out += ' ' + ($valid) + ' = false; ';\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' if (' + ($valid) + ') { ';\n }\n } else {\n out += ' if (!' + (__callValidate) + ') { if (vErrors === null) vErrors = ' + ($refCode) + '.errors; else vErrors = vErrors.concat(' + ($refCode) + '.errors); errors = vErrors.length; } ';\n if ($breakOnError) {\n out += ' else { ';\n }\n }\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_allOf(it, $keyword, $ruleType) {\n var out = ' ';\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $it = it.util.copy(it);\n var $closingBraces = '';\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n var $currentBaseId = $it.baseId,\n $allSchemasEmpty = true;\n var arr1 = $schema;\n if (arr1) {\n var $sch, $i = -1,\n l1 = arr1.length - 1;\n while ($i < l1) {\n $sch = arr1[$i += 1];\n if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) {\n $allSchemasEmpty = false;\n $it.schema = $sch;\n $it.schemaPath = $schemaPath + '[' + $i + ']';\n $it.errSchemaPath = $errSchemaPath + '/' + $i;\n out += ' ' + (it.validate($it)) + ' ';\n $it.baseId = $currentBaseId;\n if ($breakOnError) {\n out += ' if (' + ($nextValid) + ') { ';\n $closingBraces += '}';\n }\n }\n }\n }\n if ($breakOnError) {\n if ($allSchemasEmpty) {\n out += ' if (true) { ';\n } else {\n out += ' ' + ($closingBraces.slice(0, -1)) + ' ';\n }\n }\n out = it.util.cleanUpCode(out);\n return out;\n}\n","'use strict';\nmodule.exports = function generate_anyOf(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n var $closingBraces = '';\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n var $noEmptySchema = $schema.every(function($sch) {\n return (it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all));\n });\n if ($noEmptySchema) {\n var $currentBaseId = $it.baseId;\n out += ' var ' + ($errs) + ' = errors; var ' + ($valid) + ' = false; ';\n var $wasComposite = it.compositeRule;\n it.compositeRule = $it.compositeRule = true;\n var arr1 = $schema;\n if (arr1) {\n var $sch, $i = -1,\n l1 = arr1.length - 1;\n while ($i < l1) {\n $sch = arr1[$i += 1];\n $it.schema = $sch;\n $it.schemaPath = $schemaPath + '[' + $i + ']';\n $it.errSchemaPath = $errSchemaPath + '/' + $i;\n out += ' ' + (it.validate($it)) + ' ';\n $it.baseId = $currentBaseId;\n out += ' ' + ($valid) + ' = ' + ($valid) + ' || ' + ($nextValid) + '; if (!' + ($valid) + ') { ';\n $closingBraces += '}';\n }\n }\n it.compositeRule = $it.compositeRule = $wasComposite;\n out += ' ' + ($closingBraces) + ' if (!' + ($valid) + ') { var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('anyOf') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should match some schema in anyOf\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError(vErrors); ';\n } else {\n out += ' validate.errors = vErrors; return false; ';\n }\n }\n out += ' } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';\n if (it.opts.allErrors) {\n out += ' } ';\n }\n out = it.util.cleanUpCode(out);\n } else {\n if ($breakOnError) {\n out += ' if (true) { ';\n }\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_comment(it, $keyword, $ruleType) {\n var out = ' ';\n var $schema = it.schema[$keyword];\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $comment = it.util.toQuotedString($schema);\n if (it.opts.$comment === true) {\n out += ' console.log(' + ($comment) + ');';\n } else if (typeof it.opts.$comment == 'function') {\n out += ' self._opts.$comment(' + ($comment) + ', ' + (it.util.toQuotedString($errSchemaPath)) + ', validate.root.schema);';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_const(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n if (!$isData) {\n out += ' var schema' + ($lvl) + ' = validate.schema' + ($schemaPath) + ';';\n }\n out += 'var ' + ($valid) + ' = equal(' + ($data) + ', schema' + ($lvl) + '); if (!' + ($valid) + ') { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('const') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { allowedValue: schema' + ($lvl) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should be equal to constant\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' }';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_contains(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n var $closingBraces = '';\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n var $idx = 'i' + $lvl,\n $dataNxt = $it.dataLevel = it.dataLevel + 1,\n $nextData = 'data' + $dataNxt,\n $currentBaseId = it.baseId,\n $nonEmptySchema = (it.opts.strictKeywords ? typeof $schema == 'object' && Object.keys($schema).length > 0 : it.util.schemaHasRules($schema, it.RULES.all));\n out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';';\n if ($nonEmptySchema) {\n var $wasComposite = it.compositeRule;\n it.compositeRule = $it.compositeRule = true;\n $it.schema = $schema;\n $it.schemaPath = $schemaPath;\n $it.errSchemaPath = $errSchemaPath;\n out += ' var ' + ($nextValid) + ' = false; for (var ' + ($idx) + ' = 0; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { ';\n $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true);\n var $passData = $data + '[' + $idx + ']';\n $it.dataPathArr[$dataNxt] = $idx;\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n } else {\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n }\n out += ' if (' + ($nextValid) + ') break; } ';\n it.compositeRule = $it.compositeRule = $wasComposite;\n out += ' ' + ($closingBraces) + ' if (!' + ($nextValid) + ') {';\n } else {\n out += ' if (' + ($data) + '.length == 0) {';\n }\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('contains') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should contain a valid item\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } else { ';\n if ($nonEmptySchema) {\n out += ' errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';\n }\n if (it.opts.allErrors) {\n out += ' } ';\n }\n out = it.util.cleanUpCode(out);\n return out;\n}\n","'use strict';\nmodule.exports = function generate_dependencies(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n var $closingBraces = '';\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n var $schemaDeps = {},\n $propertyDeps = {},\n $ownProperties = it.opts.ownProperties;\n for ($property in $schema) {\n var $sch = $schema[$property];\n var $deps = Array.isArray($sch) ? $propertyDeps : $schemaDeps;\n $deps[$property] = $sch;\n }\n out += 'var ' + ($errs) + ' = errors;';\n var $currentErrorPath = it.errorPath;\n out += 'var missing' + ($lvl) + ';';\n for (var $property in $propertyDeps) {\n $deps = $propertyDeps[$property];\n if ($deps.length) {\n out += ' if ( ' + ($data) + (it.util.getProperty($property)) + ' !== undefined ';\n if ($ownProperties) {\n out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($property)) + '\\') ';\n }\n if ($breakOnError) {\n out += ' && ( ';\n var arr1 = $deps;\n if (arr1) {\n var $propertyKey, $i = -1,\n l1 = arr1.length - 1;\n while ($i < l1) {\n $propertyKey = arr1[$i += 1];\n if ($i) {\n out += ' || ';\n }\n var $prop = it.util.getProperty($propertyKey),\n $useData = $data + $prop;\n out += ' ( ( ' + ($useData) + ' === undefined ';\n if ($ownProperties) {\n out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n }\n out += ') && (missing' + ($lvl) + ' = ' + (it.util.toQuotedString(it.opts.jsonPointers ? $propertyKey : $prop)) + ') ) ';\n }\n }\n out += ')) { ';\n var $propertyPath = 'missing' + $lvl,\n $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\n if (it.opts._errorDataPathProperty) {\n it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + ' + ' + $propertyPath;\n }\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('dependencies') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { property: \\'' + (it.util.escapeQuotes($property)) + '\\', missingProperty: \\'' + ($missingProperty) + '\\', depsCount: ' + ($deps.length) + ', deps: \\'' + (it.util.escapeQuotes($deps.length == 1 ? $deps[0] : $deps.join(\", \"))) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should have ';\n if ($deps.length == 1) {\n out += 'property ' + (it.util.escapeQuotes($deps[0]));\n } else {\n out += 'properties ' + (it.util.escapeQuotes($deps.join(\", \")));\n }\n out += ' when property ' + (it.util.escapeQuotes($property)) + ' is present\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n } else {\n out += ' ) { ';\n var arr2 = $deps;\n if (arr2) {\n var $propertyKey, i2 = -1,\n l2 = arr2.length - 1;\n while (i2 < l2) {\n $propertyKey = arr2[i2 += 1];\n var $prop = it.util.getProperty($propertyKey),\n $missingProperty = it.util.escapeQuotes($propertyKey),\n $useData = $data + $prop;\n if (it.opts._errorDataPathProperty) {\n it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers);\n }\n out += ' if ( ' + ($useData) + ' === undefined ';\n if ($ownProperties) {\n out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n }\n out += ') { var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('dependencies') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { property: \\'' + (it.util.escapeQuotes($property)) + '\\', missingProperty: \\'' + ($missingProperty) + '\\', depsCount: ' + ($deps.length) + ', deps: \\'' + (it.util.escapeQuotes($deps.length == 1 ? $deps[0] : $deps.join(\", \"))) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should have ';\n if ($deps.length == 1) {\n out += 'property ' + (it.util.escapeQuotes($deps[0]));\n } else {\n out += 'properties ' + (it.util.escapeQuotes($deps.join(\", \")));\n }\n out += ' when property ' + (it.util.escapeQuotes($property)) + ' is present\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } ';\n }\n }\n }\n out += ' } ';\n if ($breakOnError) {\n $closingBraces += '}';\n out += ' else { ';\n }\n }\n }\n it.errorPath = $currentErrorPath;\n var $currentBaseId = $it.baseId;\n for (var $property in $schemaDeps) {\n var $sch = $schemaDeps[$property];\n if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) {\n out += ' ' + ($nextValid) + ' = true; if ( ' + ($data) + (it.util.getProperty($property)) + ' !== undefined ';\n if ($ownProperties) {\n out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($property)) + '\\') ';\n }\n out += ') { ';\n $it.schema = $sch;\n $it.schemaPath = $schemaPath + it.util.getProperty($property);\n $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($property);\n out += ' ' + (it.validate($it)) + ' ';\n $it.baseId = $currentBaseId;\n out += ' } ';\n if ($breakOnError) {\n out += ' if (' + ($nextValid) + ') { ';\n $closingBraces += '}';\n }\n }\n }\n if ($breakOnError) {\n out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';\n }\n out = it.util.cleanUpCode(out);\n return out;\n}\n","'use strict';\nmodule.exports = function generate_enum(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n var $i = 'i' + $lvl,\n $vSchema = 'schema' + $lvl;\n if (!$isData) {\n out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + ';';\n }\n out += 'var ' + ($valid) + ';';\n if ($isData) {\n out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {';\n }\n out += '' + ($valid) + ' = false;for (var ' + ($i) + '=0; ' + ($i) + '<' + ($vSchema) + '.length; ' + ($i) + '++) if (equal(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + '])) { ' + ($valid) + ' = true; break; }';\n if ($isData) {\n out += ' } ';\n }\n out += ' if (!' + ($valid) + ') { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('enum') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { allowedValues: schema' + ($lvl) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should be equal to one of the allowed values\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' }';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_format(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n if (it.opts.format === false) {\n if ($breakOnError) {\n out += ' if (true) { ';\n }\n return out;\n }\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n var $unknownFormats = it.opts.unknownFormats,\n $allowUnknown = Array.isArray($unknownFormats);\n if ($isData) {\n var $format = 'format' + $lvl,\n $isObject = 'isObject' + $lvl,\n $formatType = 'formatType' + $lvl;\n out += ' var ' + ($format) + ' = formats[' + ($schemaValue) + ']; var ' + ($isObject) + ' = typeof ' + ($format) + ' == \\'object\\' && !(' + ($format) + ' instanceof RegExp) && ' + ($format) + '.validate; var ' + ($formatType) + ' = ' + ($isObject) + ' && ' + ($format) + '.type || \\'string\\'; if (' + ($isObject) + ') { ';\n if (it.async) {\n out += ' var async' + ($lvl) + ' = ' + ($format) + '.async; ';\n }\n out += ' ' + ($format) + ' = ' + ($format) + '.validate; } if ( ';\n if ($isData) {\n out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'string\\') || ';\n }\n out += ' (';\n if ($unknownFormats != 'ignore') {\n out += ' (' + ($schemaValue) + ' && !' + ($format) + ' ';\n if ($allowUnknown) {\n out += ' && self._opts.unknownFormats.indexOf(' + ($schemaValue) + ') == -1 ';\n }\n out += ') || ';\n }\n out += ' (' + ($format) + ' && ' + ($formatType) + ' == \\'' + ($ruleType) + '\\' && !(typeof ' + ($format) + ' == \\'function\\' ? ';\n if (it.async) {\n out += ' (async' + ($lvl) + ' ? await ' + ($format) + '(' + ($data) + ') : ' + ($format) + '(' + ($data) + ')) ';\n } else {\n out += ' ' + ($format) + '(' + ($data) + ') ';\n }\n out += ' : ' + ($format) + '.test(' + ($data) + '))))) {';\n } else {\n var $format = it.formats[$schema];\n if (!$format) {\n if ($unknownFormats == 'ignore') {\n it.logger.warn('unknown format \"' + $schema + '\" ignored in schema at path \"' + it.errSchemaPath + '\"');\n if ($breakOnError) {\n out += ' if (true) { ';\n }\n return out;\n } else if ($allowUnknown && $unknownFormats.indexOf($schema) >= 0) {\n if ($breakOnError) {\n out += ' if (true) { ';\n }\n return out;\n } else {\n throw new Error('unknown format \"' + $schema + '\" is used in schema at path \"' + it.errSchemaPath + '\"');\n }\n }\n var $isObject = typeof $format == 'object' && !($format instanceof RegExp) && $format.validate;\n var $formatType = $isObject && $format.type || 'string';\n if ($isObject) {\n var $async = $format.async === true;\n $format = $format.validate;\n }\n if ($formatType != $ruleType) {\n if ($breakOnError) {\n out += ' if (true) { ';\n }\n return out;\n }\n if ($async) {\n if (!it.async) throw new Error('async format in sync schema');\n var $formatRef = 'formats' + it.util.getProperty($schema) + '.validate';\n out += ' if (!(await ' + ($formatRef) + '(' + ($data) + '))) { ';\n } else {\n out += ' if (! ';\n var $formatRef = 'formats' + it.util.getProperty($schema);\n if ($isObject) $formatRef += '.validate';\n if (typeof $format == 'function') {\n out += ' ' + ($formatRef) + '(' + ($data) + ') ';\n } else {\n out += ' ' + ($formatRef) + '.test(' + ($data) + ') ';\n }\n out += ') { ';\n }\n }\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('format') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { format: ';\n if ($isData) {\n out += '' + ($schemaValue);\n } else {\n out += '' + (it.util.toQuotedString($schema));\n }\n out += ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should match format \"';\n if ($isData) {\n out += '\\' + ' + ($schemaValue) + ' + \\'';\n } else {\n out += '' + (it.util.escapeQuotes($schema));\n }\n out += '\"\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: ';\n if ($isData) {\n out += 'validate.schema' + ($schemaPath);\n } else {\n out += '' + (it.util.toQuotedString($schema));\n }\n out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_if(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n var $thenSch = it.schema['then'],\n $elseSch = it.schema['else'],\n $thenPresent = $thenSch !== undefined && (it.opts.strictKeywords ? typeof $thenSch == 'object' && Object.keys($thenSch).length > 0 : it.util.schemaHasRules($thenSch, it.RULES.all)),\n $elsePresent = $elseSch !== undefined && (it.opts.strictKeywords ? typeof $elseSch == 'object' && Object.keys($elseSch).length > 0 : it.util.schemaHasRules($elseSch, it.RULES.all)),\n $currentBaseId = $it.baseId;\n if ($thenPresent || $elsePresent) {\n var $ifClause;\n $it.createErrors = false;\n $it.schema = $schema;\n $it.schemaPath = $schemaPath;\n $it.errSchemaPath = $errSchemaPath;\n out += ' var ' + ($errs) + ' = errors; var ' + ($valid) + ' = true; ';\n var $wasComposite = it.compositeRule;\n it.compositeRule = $it.compositeRule = true;\n out += ' ' + (it.validate($it)) + ' ';\n $it.baseId = $currentBaseId;\n $it.createErrors = true;\n out += ' errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';\n it.compositeRule = $it.compositeRule = $wasComposite;\n if ($thenPresent) {\n out += ' if (' + ($nextValid) + ') { ';\n $it.schema = it.schema['then'];\n $it.schemaPath = it.schemaPath + '.then';\n $it.errSchemaPath = it.errSchemaPath + '/then';\n out += ' ' + (it.validate($it)) + ' ';\n $it.baseId = $currentBaseId;\n out += ' ' + ($valid) + ' = ' + ($nextValid) + '; ';\n if ($thenPresent && $elsePresent) {\n $ifClause = 'ifClause' + $lvl;\n out += ' var ' + ($ifClause) + ' = \\'then\\'; ';\n } else {\n $ifClause = '\\'then\\'';\n }\n out += ' } ';\n if ($elsePresent) {\n out += ' else { ';\n }\n } else {\n out += ' if (!' + ($nextValid) + ') { ';\n }\n if ($elsePresent) {\n $it.schema = it.schema['else'];\n $it.schemaPath = it.schemaPath + '.else';\n $it.errSchemaPath = it.errSchemaPath + '/else';\n out += ' ' + (it.validate($it)) + ' ';\n $it.baseId = $currentBaseId;\n out += ' ' + ($valid) + ' = ' + ($nextValid) + '; ';\n if ($thenPresent && $elsePresent) {\n $ifClause = 'ifClause' + $lvl;\n out += ' var ' + ($ifClause) + ' = \\'else\\'; ';\n } else {\n $ifClause = '\\'else\\'';\n }\n out += ' } ';\n }\n out += ' if (!' + ($valid) + ') { var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('if') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { failingKeyword: ' + ($ifClause) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should match \"\\' + ' + ($ifClause) + ' + \\'\" schema\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError(vErrors); ';\n } else {\n out += ' validate.errors = vErrors; return false; ';\n }\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' else { ';\n }\n out = it.util.cleanUpCode(out);\n } else {\n if ($breakOnError) {\n out += ' if (true) { ';\n }\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_items(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n var $closingBraces = '';\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n var $idx = 'i' + $lvl,\n $dataNxt = $it.dataLevel = it.dataLevel + 1,\n $nextData = 'data' + $dataNxt,\n $currentBaseId = it.baseId;\n out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';';\n if (Array.isArray($schema)) {\n var $additionalItems = it.schema.additionalItems;\n if ($additionalItems === false) {\n out += ' ' + ($valid) + ' = ' + ($data) + '.length <= ' + ($schema.length) + '; ';\n var $currErrSchemaPath = $errSchemaPath;\n $errSchemaPath = it.errSchemaPath + '/additionalItems';\n out += ' if (!' + ($valid) + ') { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('additionalItems') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schema.length) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should NOT have more than ' + ($schema.length) + ' items\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } ';\n $errSchemaPath = $currErrSchemaPath;\n if ($breakOnError) {\n $closingBraces += '}';\n out += ' else { ';\n }\n }\n var arr1 = $schema;\n if (arr1) {\n var $sch, $i = -1,\n l1 = arr1.length - 1;\n while ($i < l1) {\n $sch = arr1[$i += 1];\n if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) {\n out += ' ' + ($nextValid) + ' = true; if (' + ($data) + '.length > ' + ($i) + ') { ';\n var $passData = $data + '[' + $i + ']';\n $it.schema = $sch;\n $it.schemaPath = $schemaPath + '[' + $i + ']';\n $it.errSchemaPath = $errSchemaPath + '/' + $i;\n $it.errorPath = it.util.getPathExpr(it.errorPath, $i, it.opts.jsonPointers, true);\n $it.dataPathArr[$dataNxt] = $i;\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n } else {\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' if (' + ($nextValid) + ') { ';\n $closingBraces += '}';\n }\n }\n }\n }\n if (typeof $additionalItems == 'object' && (it.opts.strictKeywords ? typeof $additionalItems == 'object' && Object.keys($additionalItems).length > 0 : it.util.schemaHasRules($additionalItems, it.RULES.all))) {\n $it.schema = $additionalItems;\n $it.schemaPath = it.schemaPath + '.additionalItems';\n $it.errSchemaPath = it.errSchemaPath + '/additionalItems';\n out += ' ' + ($nextValid) + ' = true; if (' + ($data) + '.length > ' + ($schema.length) + ') { for (var ' + ($idx) + ' = ' + ($schema.length) + '; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { ';\n $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true);\n var $passData = $data + '[' + $idx + ']';\n $it.dataPathArr[$dataNxt] = $idx;\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n } else {\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n }\n if ($breakOnError) {\n out += ' if (!' + ($nextValid) + ') break; ';\n }\n out += ' } } ';\n if ($breakOnError) {\n out += ' if (' + ($nextValid) + ') { ';\n $closingBraces += '}';\n }\n }\n } else if ((it.opts.strictKeywords ? typeof $schema == 'object' && Object.keys($schema).length > 0 : it.util.schemaHasRules($schema, it.RULES.all))) {\n $it.schema = $schema;\n $it.schemaPath = $schemaPath;\n $it.errSchemaPath = $errSchemaPath;\n out += ' for (var ' + ($idx) + ' = ' + (0) + '; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { ';\n $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true);\n var $passData = $data + '[' + $idx + ']';\n $it.dataPathArr[$dataNxt] = $idx;\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n } else {\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n }\n if ($breakOnError) {\n out += ' if (!' + ($nextValid) + ') break; ';\n }\n out += ' }';\n }\n if ($breakOnError) {\n out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';\n }\n out = it.util.cleanUpCode(out);\n return out;\n}\n","'use strict';\nmodule.exports = function generate__limit(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $errorKeyword;\n var $data = 'data' + ($dataLvl || '');\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n var $isMax = $keyword == 'maximum',\n $exclusiveKeyword = $isMax ? 'exclusiveMaximum' : 'exclusiveMinimum',\n $schemaExcl = it.schema[$exclusiveKeyword],\n $isDataExcl = it.opts.$data && $schemaExcl && $schemaExcl.$data,\n $op = $isMax ? '<' : '>',\n $notOp = $isMax ? '>' : '<',\n $errorKeyword = undefined;\n if ($isDataExcl) {\n var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr),\n $exclusive = 'exclusive' + $lvl,\n $exclType = 'exclType' + $lvl,\n $exclIsNumber = 'exclIsNumber' + $lvl,\n $opExpr = 'op' + $lvl,\n $opStr = '\\' + ' + $opExpr + ' + \\'';\n out += ' var schemaExcl' + ($lvl) + ' = ' + ($schemaValueExcl) + '; ';\n $schemaValueExcl = 'schemaExcl' + $lvl;\n out += ' var ' + ($exclusive) + '; var ' + ($exclType) + ' = typeof ' + ($schemaValueExcl) + '; if (' + ($exclType) + ' != \\'boolean\\' && ' + ($exclType) + ' != \\'undefined\\' && ' + ($exclType) + ' != \\'number\\') { ';\n var $errorKeyword = $exclusiveKeyword;\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ($errorKeyword || '_exclusiveLimit') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'' + ($exclusiveKeyword) + ' should be boolean\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } else if ( ';\n if ($isData) {\n out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n }\n out += ' ' + ($exclType) + ' == \\'number\\' ? ( (' + ($exclusive) + ' = ' + ($schemaValue) + ' === undefined || ' + ($schemaValueExcl) + ' ' + ($op) + '= ' + ($schemaValue) + ') ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValueExcl) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) : ( (' + ($exclusive) + ' = ' + ($schemaValueExcl) + ' === true) ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValue) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) || ' + ($data) + ' !== ' + ($data) + ') { var op' + ($lvl) + ' = ' + ($exclusive) + ' ? \\'' + ($op) + '\\' : \\'' + ($op) + '=\\'; ';\n if ($schema === undefined) {\n $errorKeyword = $exclusiveKeyword;\n $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword;\n $schemaValue = $schemaValueExcl;\n $isData = $isDataExcl;\n }\n } else {\n var $exclIsNumber = typeof $schemaExcl == 'number',\n $opStr = $op;\n if ($exclIsNumber && $isData) {\n var $opExpr = '\\'' + $opStr + '\\'';\n out += ' if ( ';\n if ($isData) {\n out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n }\n out += ' ( ' + ($schemaValue) + ' === undefined || ' + ($schemaExcl) + ' ' + ($op) + '= ' + ($schemaValue) + ' ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaExcl) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) || ' + ($data) + ' !== ' + ($data) + ') { ';\n } else {\n if ($exclIsNumber && $schema === undefined) {\n $exclusive = true;\n $errorKeyword = $exclusiveKeyword;\n $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword;\n $schemaValue = $schemaExcl;\n $notOp += '=';\n } else {\n if ($exclIsNumber) $schemaValue = Math[$isMax ? 'min' : 'max']($schemaExcl, $schema);\n if ($schemaExcl === ($exclIsNumber ? $schemaValue : true)) {\n $exclusive = true;\n $errorKeyword = $exclusiveKeyword;\n $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword;\n $notOp += '=';\n } else {\n $exclusive = false;\n $opStr += '=';\n }\n }\n var $opExpr = '\\'' + $opStr + '\\'';\n out += ' if ( ';\n if ($isData) {\n out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n }\n out += ' ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' || ' + ($data) + ' !== ' + ($data) + ') { ';\n }\n }\n $errorKeyword = $errorKeyword || $keyword;\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ($errorKeyword || '_limit') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { comparison: ' + ($opExpr) + ', limit: ' + ($schemaValue) + ', exclusive: ' + ($exclusive) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should be ' + ($opStr) + ' ';\n if ($isData) {\n out += '\\' + ' + ($schemaValue);\n } else {\n out += '' + ($schemaValue) + '\\'';\n }\n }\n if (it.opts.verbose) {\n out += ' , schema: ';\n if ($isData) {\n out += 'validate.schema' + ($schemaPath);\n } else {\n out += '' + ($schema);\n }\n out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate__limitItems(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $errorKeyword;\n var $data = 'data' + ($dataLvl || '');\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n var $op = $keyword == 'maxItems' ? '>' : '<';\n out += 'if ( ';\n if ($isData) {\n out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n }\n out += ' ' + ($data) + '.length ' + ($op) + ' ' + ($schemaValue) + ') { ';\n var $errorKeyword = $keyword;\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ($errorKeyword || '_limitItems') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should NOT have ';\n if ($keyword == 'maxItems') {\n out += 'more';\n } else {\n out += 'fewer';\n }\n out += ' than ';\n if ($isData) {\n out += '\\' + ' + ($schemaValue) + ' + \\'';\n } else {\n out += '' + ($schema);\n }\n out += ' items\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: ';\n if ($isData) {\n out += 'validate.schema' + ($schemaPath);\n } else {\n out += '' + ($schema);\n }\n out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += '} ';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate__limitLength(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $errorKeyword;\n var $data = 'data' + ($dataLvl || '');\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n var $op = $keyword == 'maxLength' ? '>' : '<';\n out += 'if ( ';\n if ($isData) {\n out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n }\n if (it.opts.unicode === false) {\n out += ' ' + ($data) + '.length ';\n } else {\n out += ' ucs2length(' + ($data) + ') ';\n }\n out += ' ' + ($op) + ' ' + ($schemaValue) + ') { ';\n var $errorKeyword = $keyword;\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ($errorKeyword || '_limitLength') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should NOT be ';\n if ($keyword == 'maxLength') {\n out += 'longer';\n } else {\n out += 'shorter';\n }\n out += ' than ';\n if ($isData) {\n out += '\\' + ' + ($schemaValue) + ' + \\'';\n } else {\n out += '' + ($schema);\n }\n out += ' characters\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: ';\n if ($isData) {\n out += 'validate.schema' + ($schemaPath);\n } else {\n out += '' + ($schema);\n }\n out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += '} ';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate__limitProperties(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $errorKeyword;\n var $data = 'data' + ($dataLvl || '');\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n var $op = $keyword == 'maxProperties' ? '>' : '<';\n out += 'if ( ';\n if ($isData) {\n out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n }\n out += ' Object.keys(' + ($data) + ').length ' + ($op) + ' ' + ($schemaValue) + ') { ';\n var $errorKeyword = $keyword;\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ($errorKeyword || '_limitProperties') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should NOT have ';\n if ($keyword == 'maxProperties') {\n out += 'more';\n } else {\n out += 'fewer';\n }\n out += ' than ';\n if ($isData) {\n out += '\\' + ' + ($schemaValue) + ' + \\'';\n } else {\n out += '' + ($schema);\n }\n out += ' properties\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: ';\n if ($isData) {\n out += 'validate.schema' + ($schemaPath);\n } else {\n out += '' + ($schema);\n }\n out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += '} ';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_multipleOf(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n out += 'var division' + ($lvl) + ';if (';\n if ($isData) {\n out += ' ' + ($schemaValue) + ' !== undefined && ( typeof ' + ($schemaValue) + ' != \\'number\\' || ';\n }\n out += ' (division' + ($lvl) + ' = ' + ($data) + ' / ' + ($schemaValue) + ', ';\n if (it.opts.multipleOfPrecision) {\n out += ' Math.abs(Math.round(division' + ($lvl) + ') - division' + ($lvl) + ') > 1e-' + (it.opts.multipleOfPrecision) + ' ';\n } else {\n out += ' division' + ($lvl) + ' !== parseInt(division' + ($lvl) + ') ';\n }\n out += ' ) ';\n if ($isData) {\n out += ' ) ';\n }\n out += ' ) { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('multipleOf') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { multipleOf: ' + ($schemaValue) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should be multiple of ';\n if ($isData) {\n out += '\\' + ' + ($schemaValue);\n } else {\n out += '' + ($schemaValue) + '\\'';\n }\n }\n if (it.opts.verbose) {\n out += ' , schema: ';\n if ($isData) {\n out += 'validate.schema' + ($schemaPath);\n } else {\n out += '' + ($schema);\n }\n out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += '} ';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_not(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n if ((it.opts.strictKeywords ? typeof $schema == 'object' && Object.keys($schema).length > 0 : it.util.schemaHasRules($schema, it.RULES.all))) {\n $it.schema = $schema;\n $it.schemaPath = $schemaPath;\n $it.errSchemaPath = $errSchemaPath;\n out += ' var ' + ($errs) + ' = errors; ';\n var $wasComposite = it.compositeRule;\n it.compositeRule = $it.compositeRule = true;\n $it.createErrors = false;\n var $allErrorsOption;\n if ($it.opts.allErrors) {\n $allErrorsOption = $it.opts.allErrors;\n $it.opts.allErrors = false;\n }\n out += ' ' + (it.validate($it)) + ' ';\n $it.createErrors = true;\n if ($allErrorsOption) $it.opts.allErrors = $allErrorsOption;\n it.compositeRule = $it.compositeRule = $wasComposite;\n out += ' if (' + ($nextValid) + ') { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('not') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should NOT be valid\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';\n if (it.opts.allErrors) {\n out += ' } ';\n }\n } else {\n out += ' var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('not') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should NOT be valid\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n if ($breakOnError) {\n out += ' if (false) { ';\n }\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_oneOf(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n var $closingBraces = '';\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n var $currentBaseId = $it.baseId,\n $prevValid = 'prevValid' + $lvl,\n $passingSchemas = 'passingSchemas' + $lvl;\n out += 'var ' + ($errs) + ' = errors , ' + ($prevValid) + ' = false , ' + ($valid) + ' = false , ' + ($passingSchemas) + ' = null; ';\n var $wasComposite = it.compositeRule;\n it.compositeRule = $it.compositeRule = true;\n var arr1 = $schema;\n if (arr1) {\n var $sch, $i = -1,\n l1 = arr1.length - 1;\n while ($i < l1) {\n $sch = arr1[$i += 1];\n if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) {\n $it.schema = $sch;\n $it.schemaPath = $schemaPath + '[' + $i + ']';\n $it.errSchemaPath = $errSchemaPath + '/' + $i;\n out += ' ' + (it.validate($it)) + ' ';\n $it.baseId = $currentBaseId;\n } else {\n out += ' var ' + ($nextValid) + ' = true; ';\n }\n if ($i) {\n out += ' if (' + ($nextValid) + ' && ' + ($prevValid) + ') { ' + ($valid) + ' = false; ' + ($passingSchemas) + ' = [' + ($passingSchemas) + ', ' + ($i) + ']; } else { ';\n $closingBraces += '}';\n }\n out += ' if (' + ($nextValid) + ') { ' + ($valid) + ' = ' + ($prevValid) + ' = true; ' + ($passingSchemas) + ' = ' + ($i) + '; }';\n }\n }\n it.compositeRule = $it.compositeRule = $wasComposite;\n out += '' + ($closingBraces) + 'if (!' + ($valid) + ') { var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('oneOf') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { passingSchemas: ' + ($passingSchemas) + ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should match exactly one schema in oneOf\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError(vErrors); ';\n } else {\n out += ' validate.errors = vErrors; return false; ';\n }\n }\n out += '} else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; }';\n if (it.opts.allErrors) {\n out += ' } ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_pattern(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n var $regexp = $isData ? '(new RegExp(' + $schemaValue + '))' : it.usePattern($schema);\n out += 'if ( ';\n if ($isData) {\n out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'string\\') || ';\n }\n out += ' !' + ($regexp) + '.test(' + ($data) + ') ) { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('pattern') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { pattern: ';\n if ($isData) {\n out += '' + ($schemaValue);\n } else {\n out += '' + (it.util.toQuotedString($schema));\n }\n out += ' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should match pattern \"';\n if ($isData) {\n out += '\\' + ' + ($schemaValue) + ' + \\'';\n } else {\n out += '' + (it.util.escapeQuotes($schema));\n }\n out += '\"\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: ';\n if ($isData) {\n out += 'validate.schema' + ($schemaPath);\n } else {\n out += '' + (it.util.toQuotedString($schema));\n }\n out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += '} ';\n if ($breakOnError) {\n out += ' else { ';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_properties(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n var $closingBraces = '';\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n var $key = 'key' + $lvl,\n $idx = 'idx' + $lvl,\n $dataNxt = $it.dataLevel = it.dataLevel + 1,\n $nextData = 'data' + $dataNxt,\n $dataProperties = 'dataProperties' + $lvl;\n var $schemaKeys = Object.keys($schema || {}),\n $pProperties = it.schema.patternProperties || {},\n $pPropertyKeys = Object.keys($pProperties),\n $aProperties = it.schema.additionalProperties,\n $someProperties = $schemaKeys.length || $pPropertyKeys.length,\n $noAdditional = $aProperties === false,\n $additionalIsSchema = typeof $aProperties == 'object' && Object.keys($aProperties).length,\n $removeAdditional = it.opts.removeAdditional,\n $checkAdditional = $noAdditional || $additionalIsSchema || $removeAdditional,\n $ownProperties = it.opts.ownProperties,\n $currentBaseId = it.baseId;\n var $required = it.schema.required;\n if ($required && !(it.opts.$data && $required.$data) && $required.length < it.opts.loopRequired) var $requiredHash = it.util.toHash($required);\n out += 'var ' + ($errs) + ' = errors;var ' + ($nextValid) + ' = true;';\n if ($ownProperties) {\n out += ' var ' + ($dataProperties) + ' = undefined;';\n }\n if ($checkAdditional) {\n if ($ownProperties) {\n out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; ';\n } else {\n out += ' for (var ' + ($key) + ' in ' + ($data) + ') { ';\n }\n if ($someProperties) {\n out += ' var isAdditional' + ($lvl) + ' = !(false ';\n if ($schemaKeys.length) {\n if ($schemaKeys.length > 8) {\n out += ' || validate.schema' + ($schemaPath) + '.hasOwnProperty(' + ($key) + ') ';\n } else {\n var arr1 = $schemaKeys;\n if (arr1) {\n var $propertyKey, i1 = -1,\n l1 = arr1.length - 1;\n while (i1 < l1) {\n $propertyKey = arr1[i1 += 1];\n out += ' || ' + ($key) + ' == ' + (it.util.toQuotedString($propertyKey)) + ' ';\n }\n }\n }\n }\n if ($pPropertyKeys.length) {\n var arr2 = $pPropertyKeys;\n if (arr2) {\n var $pProperty, $i = -1,\n l2 = arr2.length - 1;\n while ($i < l2) {\n $pProperty = arr2[$i += 1];\n out += ' || ' + (it.usePattern($pProperty)) + '.test(' + ($key) + ') ';\n }\n }\n }\n out += ' ); if (isAdditional' + ($lvl) + ') { ';\n }\n if ($removeAdditional == 'all') {\n out += ' delete ' + ($data) + '[' + ($key) + ']; ';\n } else {\n var $currentErrorPath = it.errorPath;\n var $additionalProperty = '\\' + ' + $key + ' + \\'';\n if (it.opts._errorDataPathProperty) {\n it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);\n }\n if ($noAdditional) {\n if ($removeAdditional) {\n out += ' delete ' + ($data) + '[' + ($key) + ']; ';\n } else {\n out += ' ' + ($nextValid) + ' = false; ';\n var $currErrSchemaPath = $errSchemaPath;\n $errSchemaPath = it.errSchemaPath + '/additionalProperties';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('additionalProperties') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { additionalProperty: \\'' + ($additionalProperty) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'';\n if (it.opts._errorDataPathProperty) {\n out += 'is an invalid additional property';\n } else {\n out += 'should NOT have additional properties';\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n $errSchemaPath = $currErrSchemaPath;\n if ($breakOnError) {\n out += ' break; ';\n }\n }\n } else if ($additionalIsSchema) {\n if ($removeAdditional == 'failing') {\n out += ' var ' + ($errs) + ' = errors; ';\n var $wasComposite = it.compositeRule;\n it.compositeRule = $it.compositeRule = true;\n $it.schema = $aProperties;\n $it.schemaPath = it.schemaPath + '.additionalProperties';\n $it.errSchemaPath = it.errSchemaPath + '/additionalProperties';\n $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);\n var $passData = $data + '[' + $key + ']';\n $it.dataPathArr[$dataNxt] = $key;\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n } else {\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n }\n out += ' if (!' + ($nextValid) + ') { errors = ' + ($errs) + '; if (validate.errors !== null) { if (errors) validate.errors.length = errors; else validate.errors = null; } delete ' + ($data) + '[' + ($key) + ']; } ';\n it.compositeRule = $it.compositeRule = $wasComposite;\n } else {\n $it.schema = $aProperties;\n $it.schemaPath = it.schemaPath + '.additionalProperties';\n $it.errSchemaPath = it.errSchemaPath + '/additionalProperties';\n $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);\n var $passData = $data + '[' + $key + ']';\n $it.dataPathArr[$dataNxt] = $key;\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n } else {\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n }\n if ($breakOnError) {\n out += ' if (!' + ($nextValid) + ') break; ';\n }\n }\n }\n it.errorPath = $currentErrorPath;\n }\n if ($someProperties) {\n out += ' } ';\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' if (' + ($nextValid) + ') { ';\n $closingBraces += '}';\n }\n }\n var $useDefaults = it.opts.useDefaults && !it.compositeRule;\n if ($schemaKeys.length) {\n var arr3 = $schemaKeys;\n if (arr3) {\n var $propertyKey, i3 = -1,\n l3 = arr3.length - 1;\n while (i3 < l3) {\n $propertyKey = arr3[i3 += 1];\n var $sch = $schema[$propertyKey];\n if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) {\n var $prop = it.util.getProperty($propertyKey),\n $passData = $data + $prop,\n $hasDefault = $useDefaults && $sch.default !== undefined;\n $it.schema = $sch;\n $it.schemaPath = $schemaPath + $prop;\n $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($propertyKey);\n $it.errorPath = it.util.getPath(it.errorPath, $propertyKey, it.opts.jsonPointers);\n $it.dataPathArr[$dataNxt] = it.util.toQuotedString($propertyKey);\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n $code = it.util.varReplace($code, $nextData, $passData);\n var $useData = $passData;\n } else {\n var $useData = $nextData;\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ';\n }\n if ($hasDefault) {\n out += ' ' + ($code) + ' ';\n } else {\n if ($requiredHash && $requiredHash[$propertyKey]) {\n out += ' if ( ' + ($useData) + ' === undefined ';\n if ($ownProperties) {\n out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n }\n out += ') { ' + ($nextValid) + ' = false; ';\n var $currentErrorPath = it.errorPath,\n $currErrSchemaPath = $errSchemaPath,\n $missingProperty = it.util.escapeQuotes($propertyKey);\n if (it.opts._errorDataPathProperty) {\n it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers);\n }\n $errSchemaPath = it.errSchemaPath + '/required';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'';\n if (it.opts._errorDataPathProperty) {\n out += 'is a required property';\n } else {\n out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n $errSchemaPath = $currErrSchemaPath;\n it.errorPath = $currentErrorPath;\n out += ' } else { ';\n } else {\n if ($breakOnError) {\n out += ' if ( ' + ($useData) + ' === undefined ';\n if ($ownProperties) {\n out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n }\n out += ') { ' + ($nextValid) + ' = true; } else { ';\n } else {\n out += ' if (' + ($useData) + ' !== undefined ';\n if ($ownProperties) {\n out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n }\n out += ' ) { ';\n }\n }\n out += ' ' + ($code) + ' } ';\n }\n }\n if ($breakOnError) {\n out += ' if (' + ($nextValid) + ') { ';\n $closingBraces += '}';\n }\n }\n }\n }\n if ($pPropertyKeys.length) {\n var arr4 = $pPropertyKeys;\n if (arr4) {\n var $pProperty, i4 = -1,\n l4 = arr4.length - 1;\n while (i4 < l4) {\n $pProperty = arr4[i4 += 1];\n var $sch = $pProperties[$pProperty];\n if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) {\n $it.schema = $sch;\n $it.schemaPath = it.schemaPath + '.patternProperties' + it.util.getProperty($pProperty);\n $it.errSchemaPath = it.errSchemaPath + '/patternProperties/' + it.util.escapeFragment($pProperty);\n if ($ownProperties) {\n out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; ';\n } else {\n out += ' for (var ' + ($key) + ' in ' + ($data) + ') { ';\n }\n out += ' if (' + (it.usePattern($pProperty)) + '.test(' + ($key) + ')) { ';\n $it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);\n var $passData = $data + '[' + $key + ']';\n $it.dataPathArr[$dataNxt] = $key;\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n } else {\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n }\n if ($breakOnError) {\n out += ' if (!' + ($nextValid) + ') break; ';\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' else ' + ($nextValid) + ' = true; ';\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' if (' + ($nextValid) + ') { ';\n $closingBraces += '}';\n }\n }\n }\n }\n }\n if ($breakOnError) {\n out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';\n }\n out = it.util.cleanUpCode(out);\n return out;\n}\n","'use strict';\nmodule.exports = function generate_propertyNames(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $errs = 'errs__' + $lvl;\n var $it = it.util.copy(it);\n var $closingBraces = '';\n $it.level++;\n var $nextValid = 'valid' + $it.level;\n out += 'var ' + ($errs) + ' = errors;';\n if ((it.opts.strictKeywords ? typeof $schema == 'object' && Object.keys($schema).length > 0 : it.util.schemaHasRules($schema, it.RULES.all))) {\n $it.schema = $schema;\n $it.schemaPath = $schemaPath;\n $it.errSchemaPath = $errSchemaPath;\n var $key = 'key' + $lvl,\n $idx = 'idx' + $lvl,\n $i = 'i' + $lvl,\n $invalidName = '\\' + ' + $key + ' + \\'',\n $dataNxt = $it.dataLevel = it.dataLevel + 1,\n $nextData = 'data' + $dataNxt,\n $dataProperties = 'dataProperties' + $lvl,\n $ownProperties = it.opts.ownProperties,\n $currentBaseId = it.baseId;\n if ($ownProperties) {\n out += ' var ' + ($dataProperties) + ' = undefined; ';\n }\n if ($ownProperties) {\n out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; ';\n } else {\n out += ' for (var ' + ($key) + ' in ' + ($data) + ') { ';\n }\n out += ' var startErrs' + ($lvl) + ' = errors; ';\n var $passData = $key;\n var $wasComposite = it.compositeRule;\n it.compositeRule = $it.compositeRule = true;\n var $code = it.validate($it);\n $it.baseId = $currentBaseId;\n if (it.util.varOccurences($code, $nextData) < 2) {\n out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n } else {\n out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n }\n it.compositeRule = $it.compositeRule = $wasComposite;\n out += ' if (!' + ($nextValid) + ') { for (var ' + ($i) + '=startErrs' + ($lvl) + '; ' + ($i) + ' 0 : it.util.schemaHasRules($propertySch, it.RULES.all)))) {\n $required[$required.length] = $property;\n }\n }\n }\n } else {\n var $required = $schema;\n }\n }\n if ($isData || $required.length) {\n var $currentErrorPath = it.errorPath,\n $loopRequired = $isData || $required.length >= it.opts.loopRequired,\n $ownProperties = it.opts.ownProperties;\n if ($breakOnError) {\n out += ' var missing' + ($lvl) + '; ';\n if ($loopRequired) {\n if (!$isData) {\n out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; ';\n }\n var $i = 'i' + $lvl,\n $propertyPath = 'schema' + $lvl + '[' + $i + ']',\n $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\n if (it.opts._errorDataPathProperty) {\n it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers);\n }\n out += ' var ' + ($valid) + ' = true; ';\n if ($isData) {\n out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {';\n }\n out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { ' + ($valid) + ' = ' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] !== undefined ';\n if ($ownProperties) {\n out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + ']) ';\n }\n out += '; if (!' + ($valid) + ') break; } ';\n if ($isData) {\n out += ' } ';\n }\n out += ' if (!' + ($valid) + ') { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'';\n if (it.opts._errorDataPathProperty) {\n out += 'is a required property';\n } else {\n out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } else { ';\n } else {\n out += ' if ( ';\n var arr2 = $required;\n if (arr2) {\n var $propertyKey, $i = -1,\n l2 = arr2.length - 1;\n while ($i < l2) {\n $propertyKey = arr2[$i += 1];\n if ($i) {\n out += ' || ';\n }\n var $prop = it.util.getProperty($propertyKey),\n $useData = $data + $prop;\n out += ' ( ( ' + ($useData) + ' === undefined ';\n if ($ownProperties) {\n out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n }\n out += ') && (missing' + ($lvl) + ' = ' + (it.util.toQuotedString(it.opts.jsonPointers ? $propertyKey : $prop)) + ') ) ';\n }\n }\n out += ') { ';\n var $propertyPath = 'missing' + $lvl,\n $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\n if (it.opts._errorDataPathProperty) {\n it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + ' + ' + $propertyPath;\n }\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'';\n if (it.opts._errorDataPathProperty) {\n out += 'is a required property';\n } else {\n out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } else { ';\n }\n } else {\n if ($loopRequired) {\n if (!$isData) {\n out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; ';\n }\n var $i = 'i' + $lvl,\n $propertyPath = 'schema' + $lvl + '[' + $i + ']',\n $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\n if (it.opts._errorDataPathProperty) {\n it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers);\n }\n if ($isData) {\n out += ' if (' + ($vSchema) + ' && !Array.isArray(' + ($vSchema) + ')) { var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'';\n if (it.opts._errorDataPathProperty) {\n out += 'is a required property';\n } else {\n out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else if (' + ($vSchema) + ' !== undefined) { ';\n }\n out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { if (' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] === undefined ';\n if ($ownProperties) {\n out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + ']) ';\n }\n out += ') { var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'';\n if (it.opts._errorDataPathProperty) {\n out += 'is a required property';\n } else {\n out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } } ';\n if ($isData) {\n out += ' } ';\n }\n } else {\n var arr3 = $required;\n if (arr3) {\n var $propertyKey, i3 = -1,\n l3 = arr3.length - 1;\n while (i3 < l3) {\n $propertyKey = arr3[i3 += 1];\n var $prop = it.util.getProperty($propertyKey),\n $missingProperty = it.util.escapeQuotes($propertyKey),\n $useData = $data + $prop;\n if (it.opts._errorDataPathProperty) {\n it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers);\n }\n out += ' if ( ' + ($useData) + ' === undefined ';\n if ($ownProperties) {\n out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n }\n out += ') { var err = '; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'';\n if (it.opts._errorDataPathProperty) {\n out += 'is a required property';\n } else {\n out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n }\n out += '\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } ';\n }\n }\n }\n }\n it.errorPath = $currentErrorPath;\n } else if ($breakOnError) {\n out += ' if (true) {';\n }\n return out;\n}\n","'use strict';\nmodule.exports = function generate_uniqueItems(it, $keyword, $ruleType) {\n var out = ' ';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $data = 'data' + ($dataLvl || '');\n var $valid = 'valid' + $lvl;\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n $schemaValue = 'schema' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n if (($schema || $isData) && it.opts.uniqueItems !== false) {\n if ($isData) {\n out += ' var ' + ($valid) + '; if (' + ($schemaValue) + ' === false || ' + ($schemaValue) + ' === undefined) ' + ($valid) + ' = true; else if (typeof ' + ($schemaValue) + ' != \\'boolean\\') ' + ($valid) + ' = false; else { ';\n }\n out += ' var i = ' + ($data) + '.length , ' + ($valid) + ' = true , j; if (i > 1) { ';\n var $itemType = it.schema.items && it.schema.items.type,\n $typeIsArray = Array.isArray($itemType);\n if (!$itemType || $itemType == 'object' || $itemType == 'array' || ($typeIsArray && ($itemType.indexOf('object') >= 0 || $itemType.indexOf('array') >= 0))) {\n out += ' outer: for (;i--;) { for (j = i; j--;) { if (equal(' + ($data) + '[i], ' + ($data) + '[j])) { ' + ($valid) + ' = false; break outer; } } } ';\n } else {\n out += ' var itemIndices = {}, item; for (;i--;) { var item = ' + ($data) + '[i]; ';\n var $method = 'checkDataType' + ($typeIsArray ? 's' : '');\n out += ' if (' + (it.util[$method]($itemType, 'item', true)) + ') continue; ';\n if ($typeIsArray) {\n out += ' if (typeof item == \\'string\\') item = \\'\"\\' + item; ';\n }\n out += ' if (typeof itemIndices[item] == \\'number\\') { ' + ($valid) + ' = false; j = itemIndices[item]; break; } itemIndices[item] = i; } ';\n }\n out += ' } ';\n if ($isData) {\n out += ' } ';\n }\n out += ' if (!' + ($valid) + ') { ';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = ''; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += ' { keyword: \\'' + ('uniqueItems') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { i: i, j: j } ';\n if (it.opts.messages !== false) {\n out += ' , message: \\'should NOT have duplicate items (items ## \\' + j + \\' and \\' + i + \\' are identical)\\' ';\n }\n if (it.opts.verbose) {\n out += ' , schema: ';\n if ($isData) {\n out += 'validate.schema' + ($schemaPath);\n } else {\n out += '' + ($schema);\n }\n out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n }\n out += ' } ';\n } else {\n out += ' {} ';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) {\n /* istanbul ignore if */\n if (it.async) {\n out += ' throw new ValidationError([' + (__err) + ']); ';\n } else {\n out += ' validate.errors = [' + (__err) + ']; return false; ';\n }\n } else {\n out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n }\n out += ' } ';\n if ($breakOnError) {\n out += ' else { ';\n }\n } else {\n if ($breakOnError) {\n out += ' if (true) { ';\n }\n }\n return out;\n}\n","'use strict';\n\n//all requires must be explicit because browserify won't work with dynamic requires\nmodule.exports = {\n '$ref': require('./ref'),\n allOf: require('./allOf'),\n anyOf: require('./anyOf'),\n '$comment': require('./comment'),\n const: require('./const'),\n contains: require('./contains'),\n dependencies: require('./dependencies'),\n 'enum': require('./enum'),\n format: require('./format'),\n 'if': require('./if'),\n items: require('./items'),\n maximum: require('./_limit'),\n minimum: require('./_limit'),\n maxItems: require('./_limitItems'),\n minItems: require('./_limitItems'),\n maxLength: require('./_limitLength'),\n minLength: require('./_limitLength'),\n maxProperties: require('./_limitProperties'),\n minProperties: require('./_limitProperties'),\n multipleOf: require('./multipleOf'),\n not: require('./not'),\n oneOf: require('./oneOf'),\n pattern: require('./pattern'),\n properties: require('./properties'),\n propertyNames: require('./propertyNames'),\n required: require('./required'),\n uniqueItems: require('./uniqueItems'),\n validate: require('./validate')\n};\n","'use strict';\n\nvar ruleModules = require('../dotjs')\n , toHash = require('./util').toHash;\n\nmodule.exports = function rules() {\n var RULES = [\n { type: 'number',\n rules: [ { 'maximum': ['exclusiveMaximum'] },\n { 'minimum': ['exclusiveMinimum'] }, 'multipleOf', 'format'] },\n { type: 'string',\n rules: [ 'maxLength', 'minLength', 'pattern', 'format' ] },\n { type: 'array',\n rules: [ 'maxItems', 'minItems', 'items', 'contains', 'uniqueItems' ] },\n { type: 'object',\n rules: [ 'maxProperties', 'minProperties', 'required', 'dependencies', 'propertyNames',\n { 'properties': ['additionalProperties', 'patternProperties'] } ] },\n { rules: [ '$ref', 'const', 'enum', 'not', 'anyOf', 'oneOf', 'allOf', 'if' ] }\n ];\n\n var ALL = [ 'type', '$comment' ];\n var KEYWORDS = [\n '$schema', '$id', 'id', '$data', '$async', 'title',\n 'description', 'default', 'definitions',\n 'examples', 'readOnly', 'writeOnly',\n 'contentMediaType', 'contentEncoding',\n 'additionalItems', 'then', 'else'\n ];\n var TYPES = [ 'number', 'integer', 'string', 'array', 'object', 'boolean', 'null' ];\n RULES.all = toHash(ALL);\n RULES.types = toHash(TYPES);\n\n RULES.forEach(function (group) {\n group.rules = group.rules.map(function (keyword) {\n var implKeywords;\n if (typeof keyword == 'object') {\n var key = Object.keys(keyword)[0];\n implKeywords = keyword[key];\n keyword = key;\n implKeywords.forEach(function (k) {\n ALL.push(k);\n RULES.all[k] = true;\n });\n }\n ALL.push(keyword);\n var rule = RULES.all[keyword] = {\n keyword: keyword,\n code: ruleModules[keyword],\n implements: implKeywords\n };\n return rule;\n });\n\n RULES.all.$comment = {\n keyword: '$comment',\n code: ruleModules.$comment\n };\n\n if (group.type) RULES.types[group.type] = group;\n });\n\n RULES.keywords = toHash(ALL.concat(KEYWORDS));\n RULES.custom = {};\n\n return RULES;\n};\n","'use strict';\n\nvar KEYWORDS = [\n 'multipleOf',\n 'maximum',\n 'exclusiveMaximum',\n 'minimum',\n 'exclusiveMinimum',\n 'maxLength',\n 'minLength',\n 'pattern',\n 'additionalItems',\n 'maxItems',\n 'minItems',\n 'uniqueItems',\n 'maxProperties',\n 'minProperties',\n 'required',\n 'additionalProperties',\n 'enum',\n 'format',\n 'const'\n];\n\nmodule.exports = function (metaSchema, keywordsJsonPointers) {\n for (var i=0; i} errors optional array of validation errors, if not passed errors from the instance are used.\n * @param {Object} options optional options with properties `separator` and `dataVar`.\n * @return {String} human readable string with all errors descriptions\n */\nfunction errorsText(errors, options) {\n errors = errors || this.errors;\n if (!errors) return 'No errors';\n options = options || {};\n var separator = options.separator === undefined ? ', ' : options.separator;\n var dataVar = options.dataVar === undefined ? 'data' : options.dataVar;\n\n var text = '';\n for (var i=0; i\n Copyright (C) 2013 Thaddee Tyl \n Copyright (C) 2013 Mathias Bynens \n Copyright (C) 2012 Ariya Hidayat \n Copyright (C) 2012 Mathias Bynens \n Copyright (C) 2012 Joost-Wim Boekesteijn \n Copyright (C) 2012 Kris Kowal \n Copyright (C) 2012 Yusuke Suzuki \n Copyright (C) 2012 Arpad Borsos \n Copyright (C) 2011 Ariya Hidayat \n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY\n DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\nimport ASTNode from './ast';\n\nvar TokenName,\n source,\n index,\n length,\n lookahead;\n\nvar TokenBooleanLiteral = 1,\n TokenEOF = 2,\n TokenIdentifier = 3,\n TokenKeyword = 4,\n TokenNullLiteral = 5,\n TokenNumericLiteral = 6,\n TokenPunctuator = 7,\n TokenStringLiteral = 8,\n TokenRegularExpression = 9;\n\nTokenName = {};\nTokenName[TokenBooleanLiteral] = 'Boolean';\nTokenName[TokenEOF] = '';\nTokenName[TokenIdentifier] = 'Identifier';\nTokenName[TokenKeyword] = 'Keyword';\nTokenName[TokenNullLiteral] = 'Null';\nTokenName[TokenNumericLiteral] = 'Numeric';\nTokenName[TokenPunctuator] = 'Punctuator';\nTokenName[TokenStringLiteral] = 'String';\nTokenName[TokenRegularExpression] = 'RegularExpression';\n\nvar SyntaxArrayExpression = 'ArrayExpression',\n SyntaxBinaryExpression = 'BinaryExpression',\n SyntaxCallExpression = 'CallExpression',\n SyntaxConditionalExpression = 'ConditionalExpression',\n SyntaxIdentifier = 'Identifier',\n SyntaxLiteral = 'Literal',\n SyntaxLogicalExpression = 'LogicalExpression',\n SyntaxMemberExpression = 'MemberExpression',\n SyntaxObjectExpression = 'ObjectExpression',\n SyntaxProperty = 'Property',\n SyntaxUnaryExpression = 'UnaryExpression';\n\n// Error messages should be identical to V8.\nvar MessageUnexpectedToken = 'Unexpected token %0',\n MessageUnexpectedNumber = 'Unexpected number',\n MessageUnexpectedString = 'Unexpected string',\n MessageUnexpectedIdentifier = 'Unexpected identifier',\n MessageUnexpectedReserved = 'Unexpected reserved word',\n MessageUnexpectedEOS = 'Unexpected end of input',\n MessageInvalidRegExp = 'Invalid regular expression',\n MessageUnterminatedRegExp = 'Invalid regular expression: missing /',\n MessageStrictOctalLiteral = 'Octal literals are not allowed in strict mode.',\n MessageStrictDuplicateProperty = 'Duplicate data property in object literal not allowed in strict mode';\n\nvar ILLEGAL = 'ILLEGAL',\n DISABLED = 'Disabled.';\n\n// See also tools/generate-unicode-regex.py.\nvar RegexNonAsciiIdentifierStart = new RegExp(\"[\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0370-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0620-\\\\u064A\\\\u066E\\\\u066F\\\\u0671-\\\\u06D3\\\\u06D5\\\\u06E5\\\\u06E6\\\\u06EE\\\\u06EF\\\\u06FA-\\\\u06FC\\\\u06FF\\\\u0710\\\\u0712-\\\\u072F\\\\u074D-\\\\u07A5\\\\u07B1\\\\u07CA-\\\\u07EA\\\\u07F4\\\\u07F5\\\\u07FA\\\\u0800-\\\\u0815\\\\u081A\\\\u0824\\\\u0828\\\\u0840-\\\\u0858\\\\u08A0-\\\\u08B2\\\\u0904-\\\\u0939\\\\u093D\\\\u0950\\\\u0958-\\\\u0961\\\\u0971-\\\\u0980\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BD\\\\u09CE\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E1\\\\u09F0\\\\u09F1\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A72-\\\\u0A74\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABD\\\\u0AD0\\\\u0AE0\\\\u0AE1\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3D\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B61\\\\u0B71\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BD0\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D\\\\u0C58\\\\u0C59\\\\u0C60\\\\u0C61\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBD\\\\u0CDE\\\\u0CE0\\\\u0CE1\\\\u0CF1\\\\u0CF2\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D\\\\u0D4E\\\\u0D60\\\\u0D61\\\\u0D7A-\\\\u0D7F\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0E01-\\\\u0E30\\\\u0E32\\\\u0E33\\\\u0E40-\\\\u0E46\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB0\\\\u0EB2\\\\u0EB3\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F40-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F88-\\\\u0F8C\\\\u1000-\\\\u102A\\\\u103F\\\\u1050-\\\\u1055\\\\u105A-\\\\u105D\\\\u1061\\\\u1065\\\\u1066\\\\u106E-\\\\u1070\\\\u1075-\\\\u1081\\\\u108E\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1711\\\\u1720-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1780-\\\\u17B3\\\\u17D7\\\\u17DC\\\\u1820-\\\\u1877\\\\u1880-\\\\u18A8\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1950-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19C1-\\\\u19C7\\\\u1A00-\\\\u1A16\\\\u1A20-\\\\u1A54\\\\u1AA7\\\\u1B05-\\\\u1B33\\\\u1B45-\\\\u1B4B\\\\u1B83-\\\\u1BA0\\\\u1BAE\\\\u1BAF\\\\u1BBA-\\\\u1BE5\\\\u1C00-\\\\u1C23\\\\u1C4D-\\\\u1C4F\\\\u1C5A-\\\\u1C7D\\\\u1CE9-\\\\u1CEC\\\\u1CEE-\\\\u1CF1\\\\u1CF5\\\\u1CF6\\\\u1D00-\\\\u1DBF\\\\u1E00-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CEE\\\\u2CF2\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D80-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u3029\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA640-\\\\uA66E\\\\uA67F-\\\\uA69D\\\\uA6A0-\\\\uA6EF\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA801\\\\uA803-\\\\uA805\\\\uA807-\\\\uA80A\\\\uA80C-\\\\uA822\\\\uA840-\\\\uA873\\\\uA882-\\\\uA8B3\\\\uA8F2-\\\\uA8F7\\\\uA8FB\\\\uA90A-\\\\uA925\\\\uA930-\\\\uA946\\\\uA960-\\\\uA97C\\\\uA984-\\\\uA9B2\\\\uA9CF\\\\uA9E0-\\\\uA9E4\\\\uA9E6-\\\\uA9EF\\\\uA9FA-\\\\uA9FE\\\\uAA00-\\\\uAA28\\\\uAA40-\\\\uAA42\\\\uAA44-\\\\uAA4B\\\\uAA60-\\\\uAA76\\\\uAA7A\\\\uAA7E-\\\\uAAAF\\\\uAAB1\\\\uAAB5\\\\uAAB6\\\\uAAB9-\\\\uAABD\\\\uAAC0\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEA\\\\uAAF2-\\\\uAAF4\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABE2\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D\\\\uFB1F-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF21-\\\\uFF3A\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]\"),\n // eslint-disable-next-line no-misleading-character-class\n RegexNonAsciiIdentifierPart = new RegExp(\"[\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0300-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u0483-\\\\u0487\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0610-\\\\u061A\\\\u0620-\\\\u0669\\\\u066E-\\\\u06D3\\\\u06D5-\\\\u06DC\\\\u06DF-\\\\u06E8\\\\u06EA-\\\\u06FC\\\\u06FF\\\\u0710-\\\\u074A\\\\u074D-\\\\u07B1\\\\u07C0-\\\\u07F5\\\\u07FA\\\\u0800-\\\\u082D\\\\u0840-\\\\u085B\\\\u08A0-\\\\u08B2\\\\u08E4-\\\\u0963\\\\u0966-\\\\u096F\\\\u0971-\\\\u0983\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BC-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CE\\\\u09D7\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E3\\\\u09E6-\\\\u09F1\\\\u0A01-\\\\u0A03\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A66-\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABC-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AD0\\\\u0AE0-\\\\u0AE3\\\\u0AE6-\\\\u0AEF\\\\u0B01-\\\\u0B03\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3C-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B56\\\\u0B57\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B63\\\\u0B66-\\\\u0B6F\\\\u0B71\\\\u0B82\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD0\\\\u0BD7\\\\u0BE6-\\\\u0BEF\\\\u0C00-\\\\u0C03\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C58\\\\u0C59\\\\u0C60-\\\\u0C63\\\\u0C66-\\\\u0C6F\\\\u0C81-\\\\u0C83\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBC-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CDE\\\\u0CE0-\\\\u0CE3\\\\u0CE6-\\\\u0CEF\\\\u0CF1\\\\u0CF2\\\\u0D01-\\\\u0D03\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4E\\\\u0D57\\\\u0D60-\\\\u0D63\\\\u0D66-\\\\u0D6F\\\\u0D7A-\\\\u0D7F\\\\u0D82\\\\u0D83\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DE6-\\\\u0DEF\\\\u0DF2\\\\u0DF3\\\\u0E01-\\\\u0E3A\\\\u0E40-\\\\u0E4E\\\\u0E50-\\\\u0E59\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB9\\\\u0EBB-\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EC8-\\\\u0ECD\\\\u0ED0-\\\\u0ED9\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F18\\\\u0F19\\\\u0F20-\\\\u0F29\\\\u0F35\\\\u0F37\\\\u0F39\\\\u0F3E-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F71-\\\\u0F84\\\\u0F86-\\\\u0F97\\\\u0F99-\\\\u0FBC\\\\u0FC6\\\\u1000-\\\\u1049\\\\u1050-\\\\u109D\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u135D-\\\\u135F\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1714\\\\u1720-\\\\u1734\\\\u1740-\\\\u1753\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1772\\\\u1773\\\\u1780-\\\\u17D3\\\\u17D7\\\\u17DC\\\\u17DD\\\\u17E0-\\\\u17E9\\\\u180B-\\\\u180D\\\\u1810-\\\\u1819\\\\u1820-\\\\u1877\\\\u1880-\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1946-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19B0-\\\\u19C9\\\\u19D0-\\\\u19D9\\\\u1A00-\\\\u1A1B\\\\u1A20-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F-\\\\u1A89\\\\u1A90-\\\\u1A99\\\\u1AA7\\\\u1AB0-\\\\u1ABD\\\\u1B00-\\\\u1B4B\\\\u1B50-\\\\u1B59\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1BF3\\\\u1C00-\\\\u1C37\\\\u1C40-\\\\u1C49\\\\u1C4D-\\\\u1C7D\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CF6\\\\u1CF8\\\\u1CF9\\\\u1D00-\\\\u1DF5\\\\u1DFC-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u200C\\\\u200D\\\\u203F\\\\u2040\\\\u2054\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u20D0-\\\\u20DC\\\\u20E1\\\\u20E5-\\\\u20F0\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D7F-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2DE0-\\\\u2DFF\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u302F\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u3099\\\\u309A\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA62B\\\\uA640-\\\\uA66F\\\\uA674-\\\\uA67D\\\\uA67F-\\\\uA69D\\\\uA69F-\\\\uA6F1\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA827\\\\uA840-\\\\uA873\\\\uA880-\\\\uA8C4\\\\uA8D0-\\\\uA8D9\\\\uA8E0-\\\\uA8F7\\\\uA8FB\\\\uA900-\\\\uA92D\\\\uA930-\\\\uA953\\\\uA960-\\\\uA97C\\\\uA980-\\\\uA9C0\\\\uA9CF-\\\\uA9D9\\\\uA9E0-\\\\uA9FE\\\\uAA00-\\\\uAA36\\\\uAA40-\\\\uAA4D\\\\uAA50-\\\\uAA59\\\\uAA60-\\\\uAA76\\\\uAA7A-\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEF\\\\uAAF2-\\\\uAAF6\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABEA\\\\uABEC\\\\uABED\\\\uABF0-\\\\uABF9\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE00-\\\\uFE0F\\\\uFE20-\\\\uFE2D\\\\uFE33\\\\uFE34\\\\uFE4D-\\\\uFE4F\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF10-\\\\uFF19\\\\uFF21-\\\\uFF3A\\\\uFF3F\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]\");\n\n// Ensure the condition is true, otherwise throw an error.\n// This is only to have a better contract semantic, i.e. another safety net\n// to catch a logic error. The condition shall be fulfilled in normal case.\n// Do NOT use this to enforce a certain condition on any user input.\n\nfunction assert(condition, message) {\n /* istanbul ignore next */\n if (!condition) {\n throw new Error('ASSERT: ' + message);\n }\n}\n\nfunction isDecimalDigit(ch) {\n return (ch >= 0x30 && ch <= 0x39); // 0..9\n}\n\nfunction isHexDigit(ch) {\n return '0123456789abcdefABCDEF'.indexOf(ch) >= 0;\n}\n\nfunction isOctalDigit(ch) {\n return '01234567'.indexOf(ch) >= 0;\n}\n\n// 7.2 White Space\n\nfunction isWhiteSpace(ch) {\n return (ch === 0x20) || (ch === 0x09) || (ch === 0x0B) || (ch === 0x0C) || (ch === 0xA0) ||\n (ch >= 0x1680 && [0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(ch) >= 0);\n}\n\n// 7.3 Line Terminators\n\nfunction isLineTerminator(ch) {\n return (ch === 0x0A) || (ch === 0x0D) || (ch === 0x2028) || (ch === 0x2029);\n}\n\n// 7.6 Identifier Names and Identifiers\n\nfunction isIdentifierStart(ch) {\n return (ch === 0x24) || (ch === 0x5F) || // $ (dollar) and _ (underscore)\n (ch >= 0x41 && ch <= 0x5A) || // A..Z\n (ch >= 0x61 && ch <= 0x7A) || // a..z\n (ch === 0x5C) || // \\ (backslash)\n ((ch >= 0x80) && RegexNonAsciiIdentifierStart.test(String.fromCharCode(ch)));\n}\n\nfunction isIdentifierPart(ch) {\n return (ch === 0x24) || (ch === 0x5F) || // $ (dollar) and _ (underscore)\n (ch >= 0x41 && ch <= 0x5A) || // A..Z\n (ch >= 0x61 && ch <= 0x7A) || // a..z\n (ch >= 0x30 && ch <= 0x39) || // 0..9\n (ch === 0x5C) || // \\ (backslash)\n ((ch >= 0x80) && RegexNonAsciiIdentifierPart.test(String.fromCharCode(ch)));\n}\n\n// 7.6.1.1 Keywords\n\nvar keywords = {\n 'if':1, 'in':1, 'do':1,\n 'var':1, 'for':1, 'new':1, 'try':1, 'let':1,\n 'this':1, 'else':1, 'case':1, 'void':1, 'with':1, 'enum':1,\n 'while':1, 'break':1, 'catch':1, 'throw':1, 'const':1, 'yield':1, 'class':1, 'super':1,\n 'return':1, 'typeof':1, 'delete':1, 'switch':1, 'export':1, 'import':1, 'public':1, 'static':1,\n 'default':1, 'finally':1, 'extends':1, 'package':1, 'private':1,\n 'function':1, 'continue':1, 'debugger':1,\n 'interface':1, 'protected':1,\n 'instanceof':1, 'implements':1\n};\n\nfunction skipComment() {\n var ch;\n\n while (index < length) {\n ch = source.charCodeAt(index);\n\n if (isWhiteSpace(ch) || isLineTerminator(ch)) {\n ++index;\n } else {\n break;\n }\n }\n}\n\nfunction scanHexEscape(prefix) {\n var i, len, ch, code = 0;\n\n len = (prefix === 'u') ? 4 : 2;\n for (i = 0; i < len; ++i) {\n if (index < length && isHexDigit(source[index])) {\n ch = source[index++];\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n } else {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n return String.fromCharCode(code);\n}\n\nfunction scanUnicodeCodePointEscape() {\n var ch, code, cu1, cu2;\n\n ch = source[index];\n code = 0;\n\n // At least, one hex digit is required.\n if (ch === '}') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n while (index < length) {\n ch = source[index++];\n if (!isHexDigit(ch)) {\n break;\n }\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n }\n\n if (code > 0x10FFFF || ch !== '}') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n // UTF-16 Encoding\n if (code <= 0xFFFF) {\n return String.fromCharCode(code);\n }\n cu1 = ((code - 0x10000) >> 10) + 0xD800;\n cu2 = ((code - 0x10000) & 1023) + 0xDC00;\n return String.fromCharCode(cu1, cu2);\n}\n\nfunction getEscapedIdentifier() {\n var ch, id;\n\n ch = source.charCodeAt(index++);\n id = String.fromCharCode(ch);\n\n // '\\u' (U+005C, U+0075) denotes an escaped character.\n if (ch === 0x5C) {\n if (source.charCodeAt(index) !== 0x75) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n ++index;\n ch = scanHexEscape('u');\n if (!ch || ch === '\\\\' || !isIdentifierStart(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n id = ch;\n }\n\n while (index < length) {\n ch = source.charCodeAt(index);\n if (!isIdentifierPart(ch)) {\n break;\n }\n ++index;\n id += String.fromCharCode(ch);\n\n // '\\u' (U+005C, U+0075) denotes an escaped character.\n if (ch === 0x5C) {\n id = id.substr(0, id.length - 1);\n if (source.charCodeAt(index) !== 0x75) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n ++index;\n ch = scanHexEscape('u');\n if (!ch || ch === '\\\\' || !isIdentifierPart(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n id += ch;\n }\n }\n\n return id;\n}\n\nfunction getIdentifier() {\n var start, ch;\n\n start = index++;\n while (index < length) {\n ch = source.charCodeAt(index);\n if (ch === 0x5C) {\n // Blackslash (U+005C) marks Unicode escape sequence.\n index = start;\n return getEscapedIdentifier();\n }\n if (isIdentifierPart(ch)) {\n ++index;\n } else {\n break;\n }\n }\n\n return source.slice(start, index);\n}\n\nfunction scanIdentifier() {\n var start, id, type;\n\n start = index;\n\n // Backslash (U+005C) starts an escaped character.\n id = (source.charCodeAt(index) === 0x5C) ? getEscapedIdentifier() : getIdentifier();\n\n // There is no keyword or literal with only one character.\n // Thus, it must be an identifier.\n if (id.length === 1) {\n type = TokenIdentifier;\n } else if (keywords.hasOwnProperty(id)) { // eslint-disable-line no-prototype-builtins\n type = TokenKeyword;\n } else if (id === 'null') {\n type = TokenNullLiteral;\n } else if (id === 'true' || id === 'false') {\n type = TokenBooleanLiteral;\n } else {\n type = TokenIdentifier;\n }\n\n return {\n type: type,\n value: id,\n start: start,\n end: index\n };\n}\n\n// 7.7 Punctuators\n\nfunction scanPunctuator() {\n var start = index,\n code = source.charCodeAt(index),\n code2,\n ch1 = source[index],\n ch2,\n ch3,\n ch4;\n\n switch (code) {\n\n // Check for most common single-character punctuators.\n case 0x2E: // . dot\n case 0x28: // ( open bracket\n case 0x29: // ) close bracket\n case 0x3B: // ; semicolon\n case 0x2C: // , comma\n case 0x7B: // { open curly brace\n case 0x7D: // } close curly brace\n case 0x5B: // [\n case 0x5D: // ]\n case 0x3A: // :\n case 0x3F: // ?\n case 0x7E: // ~\n ++index;\n return {\n type: TokenPunctuator,\n value: String.fromCharCode(code),\n start: start,\n end: index\n };\n\n default:\n code2 = source.charCodeAt(index + 1);\n\n // '=' (U+003D) marks an assignment or comparison operator.\n if (code2 === 0x3D) {\n switch (code) {\n case 0x2B: // +\n case 0x2D: // -\n case 0x2F: // /\n case 0x3C: // <\n case 0x3E: // >\n case 0x5E: // ^\n case 0x7C: // |\n case 0x25: // %\n case 0x26: // &\n case 0x2A: // *\n index += 2;\n return {\n type: TokenPunctuator,\n value: String.fromCharCode(code) + String.fromCharCode(code2),\n start: start,\n end: index\n };\n\n case 0x21: // !\n case 0x3D: // =\n index += 2;\n\n // !== and ===\n if (source.charCodeAt(index) === 0x3D) {\n ++index;\n }\n return {\n type: TokenPunctuator,\n value: source.slice(start, index),\n start: start,\n end: index\n };\n }\n }\n }\n\n // 4-character punctuator: >>>=\n\n ch4 = source.substr(index, 4);\n\n if (ch4 === '>>>=') {\n index += 4;\n return {\n type: TokenPunctuator,\n value: ch4,\n start: start,\n end: index\n };\n }\n\n // 3-character punctuators: === !== >>> <<= >>=\n\n ch3 = ch4.substr(0, 3);\n\n if (ch3 === '>>>' || ch3 === '<<=' || ch3 === '>>=') {\n index += 3;\n return {\n type: TokenPunctuator,\n value: ch3,\n start: start,\n end: index\n };\n }\n\n // Other 2-character punctuators: ++ -- << >> && ||\n ch2 = ch3.substr(0, 2);\n\n if ((ch1 === ch2[1] && ('+-<>&|'.indexOf(ch1) >= 0)) || ch2 === '=>') {\n index += 2;\n return {\n type: TokenPunctuator,\n value: ch2,\n start: start,\n end: index\n };\n }\n\n // 1-character punctuators: < > = ! + - * % & | ^ /\n\n if ('<>=!+-*%&|^/'.indexOf(ch1) >= 0) {\n ++index;\n return {\n type: TokenPunctuator,\n value: ch1,\n start: start,\n end: index\n };\n }\n\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n}\n\n// 7.8.3 Numeric Literals\n\nfunction scanHexLiteral(start) {\n var number = '';\n\n while (index < length) {\n if (!isHexDigit(source[index])) {\n break;\n }\n number += source[index++];\n }\n\n if (number.length === 0) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenNumericLiteral,\n value: parseInt('0x' + number, 16),\n start: start,\n end: index\n };\n}\n\nfunction scanOctalLiteral(start) {\n var number = '0' + source[index++];\n while (index < length) {\n if (!isOctalDigit(source[index])) {\n break;\n }\n number += source[index++];\n }\n\n if (isIdentifierStart(source.charCodeAt(index)) || isDecimalDigit(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenNumericLiteral,\n value: parseInt(number, 8),\n octal: true,\n start: start,\n end: index\n };\n}\n\nfunction scanNumericLiteral() {\n var number, start, ch;\n\n ch = source[index];\n assert(isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'),\n 'Numeric literal must start with a decimal digit or a decimal point');\n\n start = index;\n number = '';\n if (ch !== '.') {\n number = source[index++];\n ch = source[index];\n\n // Hex number starts with '0x'.\n // Octal number starts with '0'.\n if (number === '0') {\n if (ch === 'x' || ch === 'X') {\n ++index;\n return scanHexLiteral(start);\n }\n if (isOctalDigit(ch)) {\n return scanOctalLiteral(start);\n }\n\n // decimal number starts with '0' such as '09' is illegal.\n if (ch && isDecimalDigit(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n ch = source[index];\n }\n\n if (ch === '.') {\n number += source[index++];\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n ch = source[index];\n }\n\n if (ch === 'e' || ch === 'E') {\n number += source[index++];\n\n ch = source[index];\n if (ch === '+' || ch === '-') {\n number += source[index++];\n }\n if (isDecimalDigit(source.charCodeAt(index))) {\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n } else {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenNumericLiteral,\n value: parseFloat(number),\n start: start,\n end: index\n };\n}\n\n// 7.8.4 String Literals\n\nfunction scanStringLiteral() {\n var str = '',\n quote, start, ch, code, octal = false;\n\n quote = source[index];\n assert((quote === '\\'' || quote === '\"'),\n 'String literal must starts with a quote');\n\n start = index;\n ++index;\n\n while (index < length) {\n ch = source[index++];\n\n if (ch === quote) {\n quote = '';\n break;\n } else if (ch === '\\\\') {\n ch = source[index++];\n if (!ch || !isLineTerminator(ch.charCodeAt(0))) {\n switch (ch) {\n case 'u':\n case 'x':\n if (source[index] === '{') {\n ++index;\n str += scanUnicodeCodePointEscape();\n } else {\n str += scanHexEscape(ch);\n }\n break;\n case 'n':\n str += '\\n';\n break;\n case 'r':\n str += '\\r';\n break;\n case 't':\n str += '\\t';\n break;\n case 'b':\n str += '\\b';\n break;\n case 'f':\n str += '\\f';\n break;\n case 'v':\n str += '\\x0B';\n break;\n\n default:\n if (isOctalDigit(ch)) {\n code = '01234567'.indexOf(ch);\n\n // \\0 is not octal escape sequence\n if (code !== 0) {\n octal = true;\n }\n\n if (index < length && isOctalDigit(source[index])) {\n octal = true;\n code = code * 8 + '01234567'.indexOf(source[index++]);\n\n // 3 digits are only allowed when string starts\n // with 0, 1, 2, 3\n if ('0123'.indexOf(ch) >= 0 &&\n index < length &&\n isOctalDigit(source[index])) {\n code = code * 8 + '01234567'.indexOf(source[index++]);\n }\n }\n str += String.fromCharCode(code);\n } else {\n str += ch;\n }\n break;\n }\n } else {\n if (ch === '\\r' && source[index] === '\\n') {\n ++index;\n }\n }\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n break;\n } else {\n str += ch;\n }\n }\n\n if (quote !== '') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenStringLiteral,\n value: str,\n octal: octal,\n start: start,\n end: index\n };\n}\n\nfunction testRegExp(pattern, flags) {\n var tmp = pattern;\n\n if (flags.indexOf('u') >= 0) {\n // Replace each astral symbol and every Unicode code point\n // escape sequence with a single ASCII symbol to avoid throwing on\n // regular expressions that are only valid in combination with the\n // `/u` flag.\n // Note: replacing with the ASCII symbol `x` might cause false\n // negatives in unlikely scenarios. For example, `[\\u{61}-b]` is a\n // perfectly valid pattern that is equivalent to `[a-b]`, but it\n // would be replaced by `[x-b]` which throws an error.\n tmp = tmp\n .replace(/\\\\u\\{([0-9a-fA-F]+)\\}/g, function($0, $1) {\n if (parseInt($1, 16) <= 0x10FFFF) {\n return 'x';\n }\n throwError({}, MessageInvalidRegExp);\n })\n .replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, 'x');\n }\n\n // First, detect invalid regular expressions.\n try {\n new RegExp(tmp);\n } catch (e) {\n throwError({}, MessageInvalidRegExp);\n }\n\n // Return a regular expression object for this pattern-flag pair, or\n // `null` in case the current environment doesn't support the flags it\n // uses.\n try {\n return new RegExp(pattern, flags);\n } catch (exception) {\n return null;\n }\n}\n\nfunction scanRegExpBody() {\n var ch, str, classMarker, terminated, body;\n\n ch = source[index];\n assert(ch === '/', 'Regular expression literal must start with a slash');\n str = source[index++];\n\n classMarker = false;\n terminated = false;\n while (index < length) {\n ch = source[index++];\n str += ch;\n if (ch === '\\\\') {\n ch = source[index++];\n // ECMA-262 7.8.5\n if (isLineTerminator(ch.charCodeAt(0))) {\n throwError({}, MessageUnterminatedRegExp);\n }\n str += ch;\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n throwError({}, MessageUnterminatedRegExp);\n } else if (classMarker) {\n if (ch === ']') {\n classMarker = false;\n }\n } else {\n if (ch === '/') {\n terminated = true;\n break;\n } else if (ch === '[') {\n classMarker = true;\n }\n }\n }\n\n if (!terminated) {\n throwError({}, MessageUnterminatedRegExp);\n }\n\n // Exclude leading and trailing slash.\n body = str.substr(1, str.length - 2);\n return {\n value: body,\n literal: str\n };\n}\n\nfunction scanRegExpFlags() {\n var ch, str, flags;\n\n str = '';\n flags = '';\n while (index < length) {\n ch = source[index];\n if (!isIdentifierPart(ch.charCodeAt(0))) {\n break;\n }\n\n ++index;\n if (ch === '\\\\' && index < length) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n } else {\n flags += ch;\n str += ch;\n }\n }\n\n if (flags.search(/[^gimuy]/g) >= 0) {\n throwError({}, MessageInvalidRegExp, flags);\n }\n\n return {\n value: flags,\n literal: str\n };\n}\n\nfunction scanRegExp() {\n var start, body, flags, value;\n\n lookahead = null;\n skipComment();\n start = index;\n\n body = scanRegExpBody();\n flags = scanRegExpFlags();\n value = testRegExp(body.value, flags.value);\n\n return {\n literal: body.literal + flags.literal,\n value: value,\n regex: {\n pattern: body.value,\n flags: flags.value\n },\n start: start,\n end: index\n };\n}\n\nfunction isIdentifierName(token) {\n return token.type === TokenIdentifier ||\n token.type === TokenKeyword ||\n token.type === TokenBooleanLiteral ||\n token.type === TokenNullLiteral;\n}\n\nfunction advance() {\n var ch;\n\n skipComment();\n\n if (index >= length) {\n return {\n type: TokenEOF,\n start: index,\n end: index\n };\n }\n\n ch = source.charCodeAt(index);\n\n if (isIdentifierStart(ch)) {\n return scanIdentifier();\n }\n\n // Very common: ( and ) and ;\n if (ch === 0x28 || ch === 0x29 || ch === 0x3B) {\n return scanPunctuator();\n }\n\n // String literal starts with single quote (U+0027) or double quote (U+0022).\n if (ch === 0x27 || ch === 0x22) {\n return scanStringLiteral();\n }\n\n\n // Dot (.) U+002E can also start a floating-point number, hence the need\n // to check the next character.\n if (ch === 0x2E) {\n if (isDecimalDigit(source.charCodeAt(index + 1))) {\n return scanNumericLiteral();\n }\n return scanPunctuator();\n }\n\n if (isDecimalDigit(ch)) {\n return scanNumericLiteral();\n }\n\n return scanPunctuator();\n}\n\nfunction lex() {\n var token;\n\n token = lookahead;\n index = token.end;\n\n lookahead = advance();\n\n index = token.end;\n\n return token;\n}\n\nfunction peek() {\n var pos;\n\n pos = index;\n\n lookahead = advance();\n index = pos;\n}\n\nfunction finishArrayExpression(elements) {\n var node = new ASTNode(SyntaxArrayExpression);\n node.elements = elements;\n return node;\n}\n\nfunction finishBinaryExpression(operator, left, right) {\n var node = new ASTNode((operator === '||' || operator === '&&') ? SyntaxLogicalExpression : SyntaxBinaryExpression);\n node.operator = operator;\n node.left = left;\n node.right = right;\n return node;\n}\n\nfunction finishCallExpression(callee, args) {\n var node = new ASTNode(SyntaxCallExpression);\n node.callee = callee;\n node.arguments = args;\n return node;\n}\n\nfunction finishConditionalExpression(test, consequent, alternate) {\n var node = new ASTNode(SyntaxConditionalExpression);\n node.test = test;\n node.consequent = consequent;\n node.alternate = alternate;\n return node;\n}\n\nfunction finishIdentifier(name) {\n var node = new ASTNode(SyntaxIdentifier);\n node.name = name;\n return node;\n}\n\nfunction finishLiteral(token) {\n var node = new ASTNode(SyntaxLiteral);\n node.value = token.value;\n node.raw = source.slice(token.start, token.end);\n if (token.regex) {\n if (node.raw === '//') {\n node.raw = '/(?:)/';\n }\n node.regex = token.regex;\n }\n return node;\n}\n\nfunction finishMemberExpression(accessor, object, property) {\n var node = new ASTNode(SyntaxMemberExpression);\n node.computed = accessor === '[';\n node.object = object;\n node.property = property;\n if (!node.computed) property.member = true;\n return node;\n}\n\nfunction finishObjectExpression(properties) {\n var node = new ASTNode(SyntaxObjectExpression);\n node.properties = properties;\n return node;\n}\n\nfunction finishProperty(kind, key, value) {\n var node = new ASTNode(SyntaxProperty);\n node.key = key;\n node.value = value;\n node.kind = kind;\n return node;\n}\n\nfunction finishUnaryExpression(operator, argument) {\n var node = new ASTNode(SyntaxUnaryExpression);\n node.operator = operator;\n node.argument = argument;\n node.prefix = true;\n return node;\n}\n\n// Throw an exception\n\nfunction throwError(token, messageFormat) {\n var error,\n args = Array.prototype.slice.call(arguments, 2),\n msg = messageFormat.replace(\n /%(\\d)/g,\n function(whole, index) {\n assert(index < args.length, 'Message reference must be in range');\n return args[index];\n }\n );\n\n\n error = new Error(msg);\n error.index = index;\n error.description = msg;\n throw error;\n}\n\n// Throw an exception because of the token.\n\nfunction throwUnexpected(token) {\n if (token.type === TokenEOF) {\n throwError(token, MessageUnexpectedEOS);\n }\n\n if (token.type === TokenNumericLiteral) {\n throwError(token, MessageUnexpectedNumber);\n }\n\n if (token.type === TokenStringLiteral) {\n throwError(token, MessageUnexpectedString);\n }\n\n if (token.type === TokenIdentifier) {\n throwError(token, MessageUnexpectedIdentifier);\n }\n\n if (token.type === TokenKeyword) {\n throwError(token, MessageUnexpectedReserved);\n }\n\n // BooleanLiteral, NullLiteral, or Punctuator.\n throwError(token, MessageUnexpectedToken, token.value);\n}\n\n// Expect the next token to match the specified punctuator.\n// If not, an exception will be thrown.\n\nfunction expect(value) {\n var token = lex();\n if (token.type !== TokenPunctuator || token.value !== value) {\n throwUnexpected(token);\n }\n}\n\n// Return true if the next token matches the specified punctuator.\n\nfunction match(value) {\n return lookahead.type === TokenPunctuator && lookahead.value === value;\n}\n\n// Return true if the next token matches the specified keyword\n\nfunction matchKeyword(keyword) {\n return lookahead.type === TokenKeyword && lookahead.value === keyword;\n}\n\n// 11.1.4 Array Initialiser\n\nfunction parseArrayInitialiser() {\n var elements = [];\n\n index = lookahead.start;\n expect('[');\n\n while (!match(']')) {\n if (match(',')) {\n lex();\n elements.push(null);\n } else {\n elements.push(parseConditionalExpression());\n\n if (!match(']')) {\n expect(',');\n }\n }\n }\n\n lex();\n\n return finishArrayExpression(elements);\n}\n\n// 11.1.5 Object Initialiser\n\nfunction parseObjectPropertyKey() {\n var token;\n\n index = lookahead.start;\n token = lex();\n\n // Note: This function is called only from parseObjectProperty(), where\n // EOF and Punctuator tokens are already filtered out.\n\n if (token.type === TokenStringLiteral || token.type === TokenNumericLiteral) {\n if (token.octal) {\n throwError(token, MessageStrictOctalLiteral);\n }\n return finishLiteral(token);\n }\n\n return finishIdentifier(token.value);\n}\n\nfunction parseObjectProperty() {\n var token, key, id, value;\n\n index = lookahead.start;\n token = lookahead;\n\n if (token.type === TokenIdentifier) {\n id = parseObjectPropertyKey();\n expect(':');\n value = parseConditionalExpression();\n return finishProperty('init', id, value);\n }\n if (token.type === TokenEOF || token.type === TokenPunctuator) {\n throwUnexpected(token);\n } else {\n key = parseObjectPropertyKey();\n expect(':');\n value = parseConditionalExpression();\n return finishProperty('init', key, value);\n }\n}\n\nfunction parseObjectInitialiser() {\n var properties = [],\n property, name, key, map = {},\n toString = String;\n\n index = lookahead.start;\n expect('{');\n\n while (!match('}')) {\n property = parseObjectProperty();\n\n if (property.key.type === SyntaxIdentifier) {\n name = property.key.name;\n } else {\n name = toString(property.key.value);\n }\n\n key = '$' + name;\n if (Object.prototype.hasOwnProperty.call(map, key)) {\n throwError({}, MessageStrictDuplicateProperty);\n } else {\n map[key] = true;\n }\n\n properties.push(property);\n\n if (!match('}')) {\n expect(',');\n }\n }\n\n expect('}');\n\n return finishObjectExpression(properties);\n}\n\n// 11.1.6 The Grouping Operator\n\nfunction parseGroupExpression() {\n var expr;\n\n expect('(');\n\n expr = parseExpression();\n\n expect(')');\n\n return expr;\n}\n\n\n// 11.1 Primary Expressions\n\nvar legalKeywords = {\n \"if\": 1,\n \"this\": 1\n};\n\nfunction parsePrimaryExpression() {\n var type, token, expr;\n\n if (match('(')) {\n return parseGroupExpression();\n }\n\n if (match('[')) {\n return parseArrayInitialiser();\n }\n\n if (match('{')) {\n return parseObjectInitialiser();\n }\n\n type = lookahead.type;\n index = lookahead.start;\n\n\n if (type === TokenIdentifier || legalKeywords[lookahead.value]) {\n expr = finishIdentifier(lex().value);\n } else if (type === TokenStringLiteral || type === TokenNumericLiteral) {\n if (lookahead.octal) {\n throwError(lookahead, MessageStrictOctalLiteral);\n }\n expr = finishLiteral(lex());\n } else if (type === TokenKeyword) {\n throw new Error(DISABLED);\n } else if (type === TokenBooleanLiteral) {\n token = lex();\n token.value = (token.value === 'true');\n expr = finishLiteral(token);\n } else if (type === TokenNullLiteral) {\n token = lex();\n token.value = null;\n expr = finishLiteral(token);\n } else if (match('/') || match('/=')) {\n expr = finishLiteral(scanRegExp());\n peek();\n } else {\n throwUnexpected(lex());\n }\n\n return expr;\n}\n\n// 11.2 Left-Hand-Side Expressions\n\nfunction parseArguments() {\n var args = [];\n\n expect('(');\n\n if (!match(')')) {\n while (index < length) {\n args.push(parseConditionalExpression());\n if (match(')')) {\n break;\n }\n expect(',');\n }\n }\n\n expect(')');\n\n return args;\n}\n\nfunction parseNonComputedProperty() {\n var token;\n index = lookahead.start;\n token = lex();\n\n if (!isIdentifierName(token)) {\n throwUnexpected(token);\n }\n\n return finishIdentifier(token.value);\n}\n\nfunction parseNonComputedMember() {\n expect('.');\n\n return parseNonComputedProperty();\n}\n\nfunction parseComputedMember() {\n var expr;\n\n expect('[');\n\n expr = parseExpression();\n\n expect(']');\n\n return expr;\n}\n\nfunction parseLeftHandSideExpressionAllowCall() {\n var expr, args, property;\n\n expr = parsePrimaryExpression();\n\n for (;;) {\n if (match('.')) {\n property = parseNonComputedMember();\n expr = finishMemberExpression('.', expr, property);\n } else if (match('(')) {\n args = parseArguments();\n expr = finishCallExpression(expr, args);\n } else if (match('[')) {\n property = parseComputedMember();\n expr = finishMemberExpression('[', expr, property);\n } else {\n break;\n }\n }\n\n return expr;\n}\n\n// 11.3 Postfix Expressions\n\nfunction parsePostfixExpression() {\n var expr = parseLeftHandSideExpressionAllowCall();\n\n if (lookahead.type === TokenPunctuator) {\n if ((match('++') || match('--'))) {\n throw new Error(DISABLED);\n }\n }\n\n return expr;\n}\n\n// 11.4 Unary Operators\n\nfunction parseUnaryExpression() {\n var token, expr;\n\n if (lookahead.type !== TokenPunctuator && lookahead.type !== TokenKeyword) {\n expr = parsePostfixExpression();\n } else if (match('++') || match('--')) {\n throw new Error(DISABLED);\n } else if (match('+') || match('-') || match('~') || match('!')) {\n token = lex();\n expr = parseUnaryExpression();\n expr = finishUnaryExpression(token.value, expr);\n } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) {\n throw new Error(DISABLED);\n } else {\n expr = parsePostfixExpression();\n }\n\n return expr;\n}\n\nfunction binaryPrecedence(token) {\n var prec = 0;\n\n if (token.type !== TokenPunctuator && token.type !== TokenKeyword) {\n return 0;\n }\n\n switch (token.value) {\n case '||':\n prec = 1;\n break;\n\n case '&&':\n prec = 2;\n break;\n\n case '|':\n prec = 3;\n break;\n\n case '^':\n prec = 4;\n break;\n\n case '&':\n prec = 5;\n break;\n\n case '==':\n case '!=':\n case '===':\n case '!==':\n prec = 6;\n break;\n\n case '<':\n case '>':\n case '<=':\n case '>=':\n case 'instanceof':\n case 'in':\n prec = 7;\n break;\n\n case '<<':\n case '>>':\n case '>>>':\n prec = 8;\n break;\n\n case '+':\n case '-':\n prec = 9;\n break;\n\n case '*':\n case '/':\n case '%':\n prec = 11;\n break;\n\n default:\n break;\n }\n\n return prec;\n}\n\n// 11.5 Multiplicative Operators\n// 11.6 Additive Operators\n// 11.7 Bitwise Shift Operators\n// 11.8 Relational Operators\n// 11.9 Equality Operators\n// 11.10 Binary Bitwise Operators\n// 11.11 Binary Logical Operators\n\nfunction parseBinaryExpression() {\n var marker, markers, expr, token, prec, stack, right, operator, left, i;\n\n marker = lookahead;\n left = parseUnaryExpression();\n\n token = lookahead;\n prec = binaryPrecedence(token);\n if (prec === 0) {\n return left;\n }\n token.prec = prec;\n lex();\n\n markers = [marker, lookahead];\n right = parseUnaryExpression();\n\n stack = [left, token, right];\n\n while ((prec = binaryPrecedence(lookahead)) > 0) {\n\n // Reduce: make a binary expression from the three topmost entries.\n while ((stack.length > 2) && (prec <= stack[stack.length - 2].prec)) {\n right = stack.pop();\n operator = stack.pop().value;\n left = stack.pop();\n markers.pop();\n expr = finishBinaryExpression(operator, left, right);\n stack.push(expr);\n }\n\n // Shift.\n token = lex();\n token.prec = prec;\n stack.push(token);\n markers.push(lookahead);\n expr = parseUnaryExpression();\n stack.push(expr);\n }\n\n // Final reduce to clean-up the stack.\n i = stack.length - 1;\n expr = stack[i];\n markers.pop();\n while (i > 1) {\n markers.pop()\n expr = finishBinaryExpression(stack[i - 1].value, stack[i - 2], expr);\n i -= 2;\n }\n\n return expr;\n}\n\n// 11.12 Conditional Operator\n\nfunction parseConditionalExpression() {\n var expr, consequent, alternate;\n\n expr = parseBinaryExpression();\n\n if (match('?')) {\n lex();\n consequent = parseConditionalExpression();\n expect(':');\n alternate = parseConditionalExpression();\n\n expr = finishConditionalExpression(expr, consequent, alternate);\n }\n\n return expr;\n}\n\n// 11.14 Comma Operator\n\nfunction parseExpression() {\n var expr = parseConditionalExpression();\n\n if (match(',')) {\n throw new Error(DISABLED); // no sequence expressions\n }\n\n return expr;\n}\n\nexport default function(code) {\n source = code;\n index = 0;\n length = source.length;\n lookahead = null;\n\n peek();\n\n var expr = parseExpression();\n\n if (lookahead.type !== TokenEOF) {\n throw new Error(\"Unexpect token after expression.\");\n }\n return expr;\n}\n","export default {\n NaN: 'NaN',\n E: 'Math.E',\n LN2: 'Math.LN2',\n LN10: 'Math.LN10',\n LOG2E: 'Math.LOG2E',\n LOG10E: 'Math.LOG10E',\n PI: 'Math.PI',\n SQRT1_2: 'Math.SQRT1_2',\n SQRT2: 'Math.SQRT2',\n MIN_VALUE: 'Number.MIN_VALUE',\n MAX_VALUE: 'Number.MAX_VALUE'\n};\n","export default function(fn, fields, name) {\n fn.fields = fields || [];\n fn.fname = name;\n return fn;\n}\n\nexport function accessorName(fn) {\n return fn == null ? null : fn.fname;\n}\n\nexport function accessorFields(fn) {\n return fn == null ? null : fn.fields;\n}\n","export default function(message) {\n throw Error(message);\n}\n","import error from './error';\n\nexport default function(p) {\n var path = [],\n q = null,\n b = 0,\n n = p.length,\n s = '',\n i, j, c;\n\n p = p + '';\n\n function push() {\n path.push(s + p.substring(i, j));\n s = '';\n i = j + 1;\n }\n\n for (i=j=0; j i) {\n push();\n } else {\n i = j + 1;\n }\n } else if (c === '[') {\n if (j > i) push();\n b = i = j + 1;\n } else if (c === ']') {\n if (!b) error('Access path missing open bracket: ' + p);\n if (b > 0) push();\n b = 0;\n i = j + 1;\n }\n }\n\n if (b) error('Access path missing closing bracket: ' + p);\n if (q) error('Access path missing closing quote: ' + p);\n\n if (j > i) {\n j++;\n push();\n }\n\n return path;\n}\n","export default Array.isArray;\n","export default function(_) {\n return _ === Object(_);\n}\n","export default function(_) {\n return typeof _ === 'string';\n}\n","import isArray from './isArray';\nimport isObject from './isObject';\nimport isString from './isString';\n\nexport default function $(x) {\n return isArray(x) ? '[' + x.map($) + ']'\n : isObject(x) || isString(x) ?\n // Output valid JSON and JS source strings.\n // See http://timelessrepo.com/json-isnt-a-javascript-subset\n JSON.stringify(x).replace('\\u2028','\\\\u2028').replace('\\u2029', '\\\\u2029')\n : x;\n}\n","import accessor from './accessor';\nimport splitAccessPath from './splitAccessPath';\nimport stringValue from './stringValue';\n\nexport default function(field, name) {\n var path = splitAccessPath(field),\n code = 'return _[' + path.map(stringValue).join('][') + '];';\n\n return accessor(\n Function('_', code),\n [(field = path.length===1 ? path[0] : field)],\n name || field\n );\n}\n","import accessor from './accessor';\nimport field from './field';\n\nvar empty = [];\n\nexport var id = field('id');\n\nexport var identity = accessor(function(_) { return _; }, empty, 'identity');\n\nexport var zero = accessor(function() { return 0; }, empty, 'zero');\n\nexport var one = accessor(function() { return 1; }, empty, 'one');\n\nexport var truthy = accessor(function() { return true; }, empty, 'true');\n\nexport var falsy = accessor(function() { return false; }, empty, 'false');\n","export default function(_) {\n return typeof _ === 'function';\n}\n","const hop = Object.prototype.hasOwnProperty;\n\nexport default function(object, property) {\n return hop.call(object, property);\n}\n","export default function(_) {\n for (var s={}, i=0, n=_.length; i 3) error('Too many arguments to clamp function.');\n var a = args.map(codegen);\n return 'Math.max('+a[1]+', Math.min('+a[2]+','+a[0]+'))';\n },\n\n // DATE functions\n now: 'Date.now',\n utc: 'Date.UTC',\n datetime: DATE,\n date: fn('getDate', DATE, 0),\n day: fn('getDay', DATE, 0),\n year: fn('getFullYear', DATE, 0),\n month: fn('getMonth', DATE, 0),\n hours: fn('getHours', DATE, 0),\n minutes: fn('getMinutes', DATE, 0),\n seconds: fn('getSeconds', DATE, 0),\n milliseconds: fn('getMilliseconds', DATE, 0),\n time: fn('getTime', DATE, 0),\n timezoneoffset: fn('getTimezoneOffset', DATE, 0),\n utcdate: fn('getUTCDate', DATE, 0),\n utcday: fn('getUTCDay', DATE, 0),\n utcyear: fn('getUTCFullYear', DATE, 0),\n utcmonth: fn('getUTCMonth', DATE, 0),\n utchours: fn('getUTCHours', DATE, 0),\n utcminutes: fn('getUTCMinutes', DATE, 0),\n utcseconds: fn('getUTCSeconds', DATE, 0),\n utcmilliseconds: fn('getUTCMilliseconds', DATE, 0),\n\n // sequence functions\n length: fn('length', null, -1),\n join: fn('join', null),\n indexof: fn('indexOf', null),\n lastindexof: fn('lastIndexOf', null),\n slice: fn('slice', null),\n\n reverse: function(args) {\n return '('+codegen(args[0])+').slice().reverse()';\n },\n\n // STRING functions\n parseFloat: 'parseFloat',\n parseInt: 'parseInt',\n upper: fn('toUpperCase', STRING, 0),\n lower: fn('toLowerCase', STRING, 0),\n substring: fn('substring', STRING),\n split: fn('split', STRING),\n replace: fn('replace', STRING),\n trim: fn('trim', STRING, 0),\n\n // REGEXP functions\n regexp: REGEXP,\n test: fn('test', REGEXP),\n\n // Control Flow functions\n if: function(args) {\n if (args.length < 3) error('Missing arguments to if function.');\n if (args.length > 3) error('Too many arguments to if function.');\n var a = args.map(codegen);\n return '('+a[0]+'?'+a[1]+':'+a[2]+')';\n }\n };\n}\n","import Constants from './constants';\nimport Functions from './functions';\nimport {error, hasOwnProperty, isFunction, isString, toSet} from 'vega-util';\n\nfunction stripQuotes(s) {\n var n = s && s.length - 1;\n return n && (\n (s[0]==='\"' && s[n]==='\"') ||\n (s[0]==='\\'' && s[n]==='\\'')\n ) ? s.slice(1, -1) : s;\n}\n\nexport default function(opt) {\n opt = opt || {};\n\n var whitelist = opt.whitelist ? toSet(opt.whitelist) : {},\n blacklist = opt.blacklist ? toSet(opt.blacklist) : {},\n constants = opt.constants || Constants,\n functions = (opt.functions || Functions)(visit),\n globalvar = opt.globalvar,\n fieldvar = opt.fieldvar,\n globals = {},\n fields = {},\n memberDepth = 0;\n\n var outputGlobal = isFunction(globalvar)\n ? globalvar\n : function (id) { return globalvar + '[\"' + id + '\"]'; };\n\n function visit(ast) {\n if (isString(ast)) return ast;\n var generator = Generators[ast.type];\n if (generator == null) error('Unsupported type: ' + ast.type);\n return generator(ast);\n }\n\n var Generators = {\n Literal: function(n) {\n return n.raw;\n },\n\n Identifier: function(n) {\n var id = n.name;\n if (memberDepth > 0) {\n return id;\n } else if (hasOwnProperty(blacklist, id)) {\n return error('Illegal identifier: ' + id);\n } else if (hasOwnProperty(constants, id)) {\n return constants[id];\n } else if (hasOwnProperty(whitelist, id)) {\n return id;\n } else {\n globals[id] = 1;\n return outputGlobal(id);\n }\n },\n\n MemberExpression: function(n) {\n var d = !n.computed;\n var o = visit(n.object);\n if (d) memberDepth += 1;\n var p = visit(n.property);\n if (o === fieldvar) {\n // strip quotes to sanitize field name (#1653)\n fields[stripQuotes(p)] = 1;\n }\n if (d) memberDepth -= 1;\n return o + (d ? '.'+p : '['+p+']');\n },\n\n CallExpression: function(n) {\n if (n.callee.type !== 'Identifier') {\n error('Illegal callee type: ' + n.callee.type);\n }\n var callee = n.callee.name;\n var args = n.arguments;\n var fn = hasOwnProperty(functions, callee) && functions[callee];\n if (!fn) error('Unrecognized function: ' + callee);\n return isFunction(fn)\n ? fn(args)\n : fn + '(' + args.map(visit).join(',') + ')';\n },\n\n ArrayExpression: function(n) {\n return '[' + n.elements.map(visit).join(',') + ']';\n },\n\n BinaryExpression: function(n) {\n return '(' + visit(n.left) + n.operator + visit(n.right) + ')';\n },\n\n UnaryExpression: function(n) {\n return '(' + n.operator + visit(n.argument) + ')';\n },\n\n ConditionalExpression: function(n) {\n return '(' + visit(n.test) +\n '?' + visit(n.consequent) +\n ':' + visit(n.alternate) +\n ')';\n },\n\n LogicalExpression: function(n) {\n return '(' + visit(n.left) + n.operator + visit(n.right) + ')';\n },\n\n ObjectExpression: function(n) {\n return '{' + n.properties.map(visit).join(',') + '}';\n },\n\n Property: function(n) {\n memberDepth += 1;\n var k = visit(n.key);\n memberDepth -= 1;\n return k + ':' + visit(n.value);\n }\n };\n\n function codegen(ast) {\n var result = {\n code: visit(ast),\n globals: Object.keys(globals),\n fields: Object.keys(fields)\n };\n globals = {};\n fields = {};\n return result;\n }\n\n codegen.functions = functions;\n codegen.constants = constants;\n\n return codegen;\n}\n","const textDefault = {\n fill: \"#000\",\n font: \"sans-serif\",\n fontSize: 11,\n opacity: 1,\n baseline: \"alphabetic\"\n};\n// the browsers' default\nexport const BR_PROP_DEFAULT = {\n none: {},\n rect: { opacity: 1 },\n gradient: { opacity: 1 },\n group: { opacity: 1 },\n tick: { opacity: 1 },\n grid: { opacity: 1 },\n domain: { opacity: 1 },\n symbol: { opacity: 1, stroke: \"transparent\" },\n line: { opacity: 1, fill: \"none\" },\n // area: { opacity: 1, strokeWidth: \"1px\", stroke: \"none\" },\n area: { opacity: 1, strokeWidth: \"0px\" },\n trail: { opacity: 1, strokeWidth: \"0px\" },\n rule: { opacity: 1 },\n text: textDefault,\n title: textDefault\n};\n","export const DEFAULT_EASE = {\n mark: \"cubic\",\n line: \"cubic\",\n axis: \"cubic\",\n legend: \"cubic\",\n view: \"cubic\"\n};","// From https://github.com/vega/vega/blob/master/packages/vega-parser/src/config.js\n/**\n * Standard configuration defaults for Vega specification parsing.\n * Users can provide their own (sub-)set of these default values\n * by passing in a config object to the top-level parse method.\n */\nconst defaultFont = \"sans-serif\",\n defaultSymbolSize = 30,\n defaultStrokeWidth = 2,\n defaultColor = \"#4c78a8\",\n black = \"#000\",\n gray = \"#888\",\n lightGray = \"#ddd\";\nexport const vegaConfig = {\n // default visualization description\n description: \"Vega visualization\",\n\n // default padding around visualization\n padding: 0,\n\n // default for automatic sizing; options: 'none', 'pad', 'fit'\n // or provide an object (e.g., {'type': 'pad', 'resize': true})\n autosize: \"pad\",\n\n // default view background color\n // covers the entire view component\n background: null,\n\n // default event handling configuration\n // preventDefault for view-sourced event types except 'wheel'\n events: {\n defaults: {allow: [\"wheel\"]}\n },\n\n // defaults for top-level group marks\n // accepts mark properties (fill, stroke, etc)\n // covers the data rectangle within group width/height\n group: null,\n\n // defaults for basic mark types\n // each subset accepts mark properties (fill, stroke, etc)\n mark: null,\n arc: { fill: defaultColor },\n area: { fill: defaultColor },\n image: null,\n line: {\n stroke: defaultColor,\n strokeWidth: defaultStrokeWidth\n },\n path: { stroke: defaultColor },\n rect: { fill: defaultColor },\n rule: { stroke: black },\n shape: { stroke: defaultColor },\n symbol: {\n fill: defaultColor,\n size: 64\n },\n text: {\n fill: black,\n font: defaultFont,\n fontSize: 11\n },\n trail: {\n fill: defaultColor,\n size: defaultStrokeWidth\n },\n\n // style definitions\n style: {\n // axis & legend labels\n \"guide-label\": {\n fill: black,\n font: defaultFont,\n fontSize: 10\n },\n // axis & legend titles\n \"guide-title\": {\n fill: black,\n font: defaultFont,\n fontSize: 11,\n fontWeight: \"bold\"\n },\n // headers, including chart title\n \"group-title\": {\n fill: black,\n font: defaultFont,\n fontSize: 13,\n fontWeight: \"bold\"\n },\n // chart subtitle\n \"group-subtitle\": {\n fill: black,\n font: defaultFont,\n fontSize: 12\n },\n // defaults for styled point marks in Vega-Lite\n point: {\n size: defaultSymbolSize,\n strokeWidth: defaultStrokeWidth,\n shape: \"circle\"\n },\n circle: {\n size: defaultSymbolSize,\n strokeWidth: defaultStrokeWidth\n },\n square: {\n size: defaultSymbolSize,\n strokeWidth: defaultStrokeWidth,\n shape: \"square\"\n },\n // defaults for styled group marks in Vega-Lite\n cell: {\n fill: \"transparent\",\n stroke: lightGray\n }\n },\n\n // defaults for title\n title: {\n orient: \"top\",\n anchor: \"middle\",\n offset: 4,\n subtitlePadding: 3\n },\n\n // defaults for axes\n axis: {\n minExtent: 0,\n maxExtent: 200,\n bandPosition: 0.5,\n domain: true,\n domainWidth: 1,\n domainColor: gray,\n grid: false,\n gridWidth: 1,\n gridColor: lightGray,\n labels: true,\n labelAngle: 0,\n labelLimit: 180,\n labelOffset: 0,\n labelPadding: 2,\n ticks: true,\n tickColor: gray,\n tickOffset: 0,\n tickRound: true,\n tickSize: 5,\n tickWidth: 1,\n titlePadding: 4\n },\n\n // correction for centering bias\n axisBand: {\n tickOffset: -0.5\n },\n\n // defaults for cartographic projection\n projection: {\n type: \"mercator\"\n },\n\n // defaults for legends\n legend: {\n orient: \"right\",\n padding: 0,\n gridAlign: \"each\",\n columnPadding: 10,\n rowPadding: 2,\n symbolDirection: \"vertical\",\n gradientDirection: \"vertical\",\n gradientLength: 200,\n gradientThickness: 16,\n gradientStrokeColor: lightGray,\n gradientStrokeWidth: 0,\n gradientLabelOffset: 2,\n labelAlign: \"left\",\n labelBaseline: \"middle\",\n labelLimit: 160,\n labelOffset: 4,\n labelOverlap: true,\n symbolLimit: 30,\n symbolType: \"circle\",\n symbolSize: 100,\n symbolOffset: 0,\n symbolStrokeWidth: 1.5,\n symbolBaseFillColor: \"transparent\",\n symbolBaseStrokeColor: gray,\n titleLimit: 180,\n titleOrient: \"top\",\n titlePadding: 5,\n layout: {\n offset: 18,\n direction: \"horizontal\",\n left: { direction: \"vertical\" },\n right: { direction: \"vertical\" }\n }\n },\n\n // defaults for scale ranges\n range: {\n category: {\n scheme: \"tableau10\"\n },\n ordinal: {\n scheme: \"blues\"\n },\n heatmap: {\n scheme: \"yellowgreenblue\"\n },\n ramp: {\n scheme: \"blues\"\n },\n diverging: {\n scheme: \"blueorange\",\n extent: [1, 0]\n },\n symbol: [\n \"circle\",\n \"square\",\n \"triangle-up\",\n \"cross\",\n \"diamond\",\n \"triangle-right\",\n \"triangle-down\",\n \"triangle-left\"\n ]\n }\n};\n\n","export function encodify(obj) {\n return Object.keys(obj).reduce((encode, key) => {\n encode[key] = { value: obj[key] };\n return encode;\n }, {});\n}\n","import { vegaConfig } from \"./vegaConfig\";\nimport { encodify } from \"./util\";\nexport const DEFAULT_STYLE = Object.keys(vegaConfig.style).reduce(\n (styles, key) => {\n styles[key] = encodify(vegaConfig.style[key]);\n return styles;\n },\n {}\n);\n","import { vegaConfig as vgConfig } from \"../vegaConfig\";\n\nconst EMPTY_ENCODE = {\n enter: { opacity: { value: 0 } },\n exit: { opacity: { value: 0 } },\n update: { }\n};\n\n\nfunction axisCompPos(spec) {\n if (!spec) {\n return {};\n }\n const scName = spec.scale;\n if (spec.orient === \"left\" || spec.orient === \"right\") {\n return { y: { scale: scName, field: \"value\", band: 0.5 } };\n }\n return { x: { scale: scName, field: \"value\", band: 0.5 } };\n}\nfunction legendBandPos(spec) {\n let grLength = spec ? spec.gradientLength : undefined;\n let grThickness = spec ? spec.gradientThickness : undefined;\n grLength = grLength || vgConfig.legend.gradientLength;\n grThickness = grThickness || vgConfig.legend.gradientThickness;\n\n if (spec && spec.direction === \"horizontal\") {\n return {\n x: { signal: \"(1-datum.perc)\", mult: grLength },\n x2: { signal: \"(1-datum.perc2)\", mult: grLength },\n y: { value: 0 },\n height: { value: grThickness }\n };\n }\n return {\n y: { signal: \"(1-datum.perc)\", mult: grLength },\n y2: { signal: \"(1-datum.perc2)\", mult: grLength },\n x: { value: 0 },\n width: { value: grThickness }\n };\n}\n\nfunction legendLablePos(spec) {\n let grLength = spec ? spec.gradientLength : undefined;\n grLength = isNaN(grLength) ? vgConfig.legend.gradientLength : grLength;\n let grThickness = spec ? spec.gradientThickness : undefined;\n grThickness = isNaN(grThickness) ? vgConfig.legend.gradientThickness : grThickness;\n let grLabelOffset = spec ? spec.gradientLabelOffset : undefined;\n grLabelOffset = isNaN(grLabelOffset) ? vgConfig.legend.gradientLabelOffset : grLabelOffset;\n\n if (spec.type === \"symbol\") {\n return {\n x: { value: 0 },\n y: { value: 0 },\n dx: { value: 16 },\n dy: { value: 6 }\n };\n }\n if (spec.direction === \"vertical\") {\n return {\n x: { value: 0, },\n y: { signal: `(1-datum.perc) * clamp(height, 64, ${grLength})` },\n dx: { value: grThickness + grLabelOffset }\n };\n }\n return {\n x: { signal: `(datum.perc) * clamp(width, 64, ${grLength})` },\n y: { value: 0, },\n dy: { value: grThickness + grLabelOffset }\n };\n}\n\n\nfunction titlePos(orient) {\n if (orient === \"top\") {\n return {x: { signal: \"width\", mult: 0.5}, y: {value: -22}};\n } if (orient === \"bottom\") {\n return {x: { signal: \"width\", mult: 0.5}, y: {value: 22}};\n } if (orient === \"right\") {\n return {y: { signal: \"height\", mult: 0.5}, x: {value: 22}};\n }\n return {y: { signal: \"height\", mult: 0.5}, x: {value: -22}};\n\n}\nfunction titleAngle(orient) {\n if (orient === \"left\") {\n return 270;\n }\n if (orient === \"right\") {\n return 90;\n }\n return 0;\n}\nfunction baseline(orient) {\n if (orient === \"top\") {\n return \"bottom\";\n }\n if (orient === \"bottom\") {\n return \"top\";\n }\n return \"middle\";\n}\nfunction tickLength(attr, orient) {\n if (attr === \"x2\") {\n if (orient === \"right\") {\n return vgConfig.axis.tickSize;\n }\n if (orient === \"left\") {\n return -vgConfig.axis.tickSize;\n }\n } else if (attr === \"y2\") {\n if (orient === \"bottom\") {\n return vgConfig.axis.tickSize;\n }\n if (orient === \"top\") {\n return -vgConfig.axis.tickSize;\n }\n }\n return 0;\n}\n\nfunction axisLabelAlign(spec) {\n if (spec && spec.labelAlign) {\n return spec.labelAlign;\n }\n\n if (spec && spec.orient === \"right\") {\n return \"left\";\n }\n if (spec && spec.orient === \"left\") {\n return \"right\";\n }\n return \"center\";\n}\n\nfunction legendLabelAlign(spec) {\n if (spec && spec.labelAlign) {\n return spec.labelAlign;\n }\n\n if (spec && spec.orient === \"right\") {\n return \"left\";\n }\n if (spec && spec.orient === \"left\") {\n return \"right\";\n }\n return \"center\";\n}\n\nfunction lableAngle(orient, scaleType) {\n if (orient === \"top\" || orient === \"bottom\") {\n if ([\"band\", \"point\"].indexOf(scaleType) >= 0) {\n return 270;\n }\n }\n return 0;\n}\nfunction axisTextDpos(attr, spec) {\n const orient = spec ? spec.orient : undefined;\n\n if (spec.ticks === false) {\n return 0;\n }\n if (attr === \"dx\") {\n if (orient === \"right\") {\n return 7;\n }\n if (orient === \"left\") {\n return -7;\n }\n } else if (attr === \"dy\") {\n if (orient === \"bottom\") {\n return 7;\n }\n if (orient === \"top\") {\n return -7;\n }\n }\n return 0;\n}\n\nfunction gridLength(orient, gridScale){\n if (orient === \"bottom\" || orient === \"top\") {\n if (!gridScale){\n return {\n y2: {signal: \"height\", mult: -1},\n y: {value: 0},\n x2: {value: 0}\n };\n }\n return {\n // y2: {signal: \"height\"},\n // y: {signal: \"height\", mult: -1},\n y2: {signal: \"height\", mult: -1},\n y: {value: 0},\n x2: {value: 0}\n };\n\n }\n\n if (orient === \"right\" || orient === \"left\") {\n if (!gridScale){\n return {\n x2: {signal: \"width\"},\n x: {value: 0},\n y2: {value: 0}\n };\n }\n return {\n x2: {signal: \"width\"},\n x: {value: 0},\n y2: {value: 0}\n };\n\n }\n\n}\n\nfunction domainLength(orient) {\n if (orient === \"bottom\" || orient === \"top\") {\n return {\n y2: { value: 0 },\n x2: { signal: \"width\" },\n y: { value: 0 },\n x: { value: 0 }\n };\n }\n if (orient === \"right\" || orient === \"left\") {\n return {\n y2: { signal: \"height\", mult: 1 },\n x2: { value: 0 },\n y: { value: 0 },\n x: { value: 0 }\n };\n }\n return {\n y2: { value: 0 },\n x2: { value: 0 }\n };\n}\n\nexport {\n\n legendBandPos,\n legendLablePos,\n legendLabelAlign,\n\n titlePos,\n titleAngle,\n baseline,\n\n axisCompPos,\n lableAngle,\n tickLength,\n axisLabelAlign,\n axisTextDpos,\n gridLength,\n domainLength,\n\n EMPTY_ENCODE\n};","import { vegaConfig as vgConfig } from \"../vegaConfig\";\nimport * as vg from \"./vegaDefault\";\nimport { copy } from \"../../util/util\";\nconst LEGEND_SYMBOL_CHANNEL = [\n \"fill\",\n \"opacity\",\n \"shape\",\n \"size\",\n \"stroke\",\n \"strokeDash\",\n \"strokeWidth\"\n];\n\nexport const DEFAULT_ENCODE_LEGEND = {\n\n title: () => {\n const defaultTitleEncode = {\n fontSize: { value: vgConfig.style[\"guide-title\"].fontSize },\n fontWeight: { value: \"bold\" }\n };\n\n return {\n update: defaultTitleEncode,\n enter: {...defaultTitleEncode, opacity: {value: 0}},\n exit: {...defaultTitleEncode, opacity: {value: 0}},\n };\n },\n labels: spec => {\n if (!spec) {\n return copy(vg.EMPTY_ENCODE);\n }\n\n let defaultEncode = {\n ...vg.legendLablePos(spec),\n text: { field: \"label\" },\n fontSize: { value: vgConfig.style[\"guide-label\"].fontSize },\n align: { value: vg.legendLabelAlign(spec) },\n baseline: {\n value: spec.baseline || vg.baseline(spec.orient)\n },\n angle: {\n value: spec.labelAngle || vg.lableAngle(spec.orient, spec.scaleType)\n }\n };\n\n\n return {\n enter: {...defaultEncode, opacity: { value: 0 } },\n exit: {...defaultEncode, opacity: { value: 0 } },\n update: defaultEncode\n };\n },\n symbols: spec => {\n const defaultEncode = {\n y: { value: 6 },\n x: { value: 6 },\n shape: { value: vgConfig.legend.symbolType },\n size: { value: vgConfig.legend.symbolSize },\n strokeWidth: { value: vgConfig.legend.symbolStrokeWidth }\n };\n\n if (spec) {\n if (!spec.fill) {\n defaultEncode.stroke = {\n value: vgConfig.legend.symbolBaseStrokeColor\n };\n defaultEncode.fill = {\n value: vgConfig.legend.symbolBaseFillColor\n };\n }\n\n LEGEND_SYMBOL_CHANNEL.forEach(channel => {\n if (channel === \"shape\") {\n defaultEncode[channel] = { value: spec.symbolType };\n }\n if (spec[channel]) {\n defaultEncode[channel] = { scale: spec[channel], field: \"value\" };\n }\n });\n }\n\n return {\n update: defaultEncode,\n enter: Object.assign({}, defaultEncode, { opacity: { value: 0 } }),\n exit: Object.assign({}, defaultEncode, { opacity: { value: 0 } })\n };\n },\n gradient: spec => {\n if (!spec) {\n return copy(vg.EMPTY_ENCODE);\n }\n\n let grLength = spec.gradientLength ||\n {\n signal: `clamp(${spec.direction === \"vertical\" ? \"height\" : \"width\"}, 64, ${vgConfig.legend.gradientLength})`\n },\n grThickness = spec.gradientThickness || vgConfig.legend.gradientThickness;\n if (typeof grLength === \"number\") {\n grLength= {\n signal: `clamp(${spec.direction === \"vertical\" ? \"height\" : \"width\"}, 64, ${grLength})`\n };\n }\n const defaultEncode = {\n x: { value: 0 },\n y: { value: 0 },\n width:\n spec.direction === \"vertical\"\n ? { value: grThickness }\n : grLength,\n height:\n spec.direction === \"vertical\"\n ? grLength\n : { value: grThickness }\n };\n\n return {\n update: defaultEncode,\n enter: Object.assign({}, defaultEncode, { opacity: { value: 0 } }),\n exit: Object.assign({}, defaultEncode, { opacity: { value: 0 } })\n };\n },\n entries: () => {\n return copy(vg.EMPTY_ENCODE);\n },\n legend: () => {\n return copy(vg.EMPTY_ENCODE);\n },\n pairs: spec => {\n let defaultEncode = { y: { signal: \"datum.index * 13\" } };\n if (spec && spec.direction === \"horizontal\") {\n defaultEncode = { x: { signal: \"datum.index * 50\" } };\n }\n\n return {\n update: defaultEncode,\n enter: Object.assign({}, defaultEncode, { opacity: { value: 0 } }),\n exit: Object.assign({}, defaultEncode, { opacity: { value: 0 } })\n };\n },\n bands: spec => {\n let defaultEncode = {\n ...vg.legendBandPos(spec),\n fill: {\n value: vgConfig.legend.symbolBaseFillColor\n }\n };\n if (spec && (spec.fill || spec.stroke)) {\n defaultEncode.fill = { scale: spec.fill || spec.stroke, field: \"value\" };\n }\n\n return {\n update: defaultEncode,\n enter: {\n ...defaultEncode,\n opacity: { value: 0 }\n },\n exit: {\n ...defaultEncode,\n opacity: { value: 0 }\n }\n };\n }\n};","import { encodify } from \"../util\";\nimport { vegaConfig as vgConfig } from \"../vegaConfig\";\nexport const DEFAULT_ENCODE_MARK = {\n enter: { opacity: { value: 0 } },\n exit: { opacity: { value: 0 } },\n line: {\n update: {\n ...encodify(vgConfig.line),\n fill: { value: \"none\" }\n }\n },\n area: {update: encodify(vgConfig.area)},\n trail: {update: encodify(vgConfig.trail)},\n symbol: { update: encodify(vgConfig.symbol) },\n rect: { update: encodify(vgConfig.rect) },\n rule: { update: encodify(vgConfig.rule) },\n text: { update: encodify(vgConfig.text) }\n};","import { vegaConfig as vgConfig } from \"../vegaConfig\";\nimport * as vg from \"./vegaDefault\";\nimport { isNumber, copy } from \"../../util/util\";\n\n\nexport const DEFAULT_ENCODE_AXIS = {\n axis: () => {\n return copy(vg.EMPTY_ENCODE);\n },\n labels: spec => {\n if (!spec) {\n return copy(vg.EMPTY_ENCODE);\n }\n\n const orient = spec ? spec.orient : undefined;\n const scaleType = spec ? spec.scaleType : undefined;\n\n const defaultEncode = {\n ...vg.axisCompPos(spec),\n text: { field: \"label\" },\n fontSize: {\n value: spec && spec.labelFontSize ? spec.labelFontSize : vgConfig.style[\"guide-label\"].fontSize\n },\n dx: { value: vg.axisTextDpos(\"dx\", spec) },\n dy: { value: vg.axisTextDpos(\"dy\", spec) },\n align: { value: vg.axisLabelAlign(spec) },\n baseline: {\n value: spec && spec.baseline ? spec.baseline : vg.baseline(orient)\n },\n angle: {\n value:\n spec && isNumber(spec.labelAngle)\n ? spec.labelAngle\n : vg.lableAngle(orient, scaleType)\n }\n };\n\n return {\n enter: { ...defaultEncode, opacity: { value: 0 } },\n exit: { ...defaultEncode, opacity: { value: 0 } },\n update: defaultEncode\n };\n },\n ticks: spec => {\n if (!spec) {\n return copy(vg.EMPTY_ENCODE);\n }\n\n const orient = spec ? spec.orient : undefined;\n const defaultEncode = Object.assign({}, vg.axisCompPos(spec), {\n x2: { value: vg.tickLength(\"x2\", orient) },\n y2: { value: vg.tickLength(\"y2\", orient) },\n strokeWidth: { value: vgConfig.axis.tickWidth },\n stroke: { value: vgConfig.axis.tickColor }\n });\n return {\n enter: { ...defaultEncode, opacity: { value: 0 } },\n exit: { ...defaultEncode, opacity: { value: 0 } },\n update: defaultEncode\n };\n },\n grid: spec => {\n\n const orient = spec ? spec.orient : undefined;\n const gridScale = spec ? spec.gridScale : undefined;\n let defaultEncode = Object.assign(\n {},\n vg.axisCompPos(spec),\n vg.gridLength(orient, gridScale),\n {\n strokeWidth: { value: vgConfig.axis.gridWidth },\n stroke: { value: vgConfig.axis.gridColor }\n }\n );\n if (spec && spec.gridDash) {\n defaultEncode.strokeDasharray = {\"value\": spec.gridDash.join(\",\")};\n }\n\n return {\n enter: { ...defaultEncode, opacity: { value: 0 } },\n exit: { ...defaultEncode, opacity: { value: 0 } },\n update: defaultEncode\n };\n },\n title: spec => {\n\n\n const orient = spec ? spec.orient : undefined;\n const defaultEncode = Object.assign(\n {\n baseline: { value: vg.baseline(orient) },\n align: { value: \"center\" },\n angle: { value: vg.titleAngle(orient) },\n fontSize: { value: vgConfig.style[\"guide-title\"].fontSize },\n fontWeight: { value: \"bold\" }\n },\n vg.titlePos(orient)\n );\n return {\n enter: { ...defaultEncode, opacity: { value: 0 } },\n exit: { ...defaultEncode, opacity: { value: 0 } },\n update: defaultEncode\n };\n },\n domain: spec => {\n\n const defaultEncode = {\n ...(spec ? vg.domainLength(spec.orient) : {}),\n strokeWidth: { value: vgConfig.axis.domainWidth },\n stroke: { value: vgConfig.axis.domainColor }\n };\n\n return {\n enter: { ...defaultEncode, opacity: { value: 0 } },\n exit: { ...defaultEncode, opacity: { value: 0 } },\n update: defaultEncode\n };\n }\n};\n","import { DEFAULT_ENCODE_LEGEND } from \"./legend\";\nimport { DEFAULT_ENCODE_MARK } from \"./mark\";\nimport { DEFAULT_ENCODE_AXIS } from \"./axis\";\n\n// DEFAULT enter means initials of the enter\nexport const DEFAULT_ENCODE = {\n mark: DEFAULT_ENCODE_MARK,\n axis: DEFAULT_ENCODE_AXIS,\n legend: DEFAULT_ENCODE_LEGEND\n};\n","/* eslint-disable prefer-destructuring */\n/* eslint-disable no-restricted-globals */\n/* eslint-disable no-use-before-define */\n/* eslint-disable camelcase */\nimport * as vega from \"vega\";\nimport * as d3 from \"d3\";\nimport { DEFAULT_EASE } from \"../default\";\n\nfunction getEaseFn(easeFnName) {\n const name = easeFnName || DEFAULT_EASE.mark;\n return d3[`ease${name.slice(0, 1).toUpperCase() + name.slice(1)}`];\n}\n\n\nfunction findAfterSibling(scene, name) {\n let result;\n for (let i = 0; i < scene.items.length; i++) {\n const s = scene.items[i];\n if (s.name === name) {\n return scene.items[i + 1];\n }\n if (s.items) {\n result = findAfterSibling(s, name);\n }\n }\n return result;\n}\n\nfunction getJoinInfo(d, i, step, prop) {\n return d.__gemini__[step.stepId]\n ? d.__gemini__[step.stepId][prop]\n : undefined;\n}\n\nfunction findComp(scene, name, role) {\n let result = [];\n scene.items.forEach(item => {\n if (item.items) {\n result = result.concat(findComp(item, name, role));\n }\n\n if (item.role === role && item.name === name) {\n result.push(item);\n }\n });\n return result; // return the first item.\n}\nfunction svgRender(vegaScene) {\n const svg = new vega.SVGRenderer()\n .initialize(document.createElement(\"div\"), 1, 1)\n .render(vegaScene)\n .svg();\n const p = new DOMParser();\n const dom = p.parseFromString(svg, \"image/svg+xml\");\n return dom.documentElement;\n}\n\nfunction gradientRender(d3RootSelection, d) {\n const s = vega.sceneFromJSON(vega.sceneToJSON(d.mark));\n s.items[0].fill = d.fill;\n const dom = svgRender(s);\n const gradientDom = dom.getElementsByTagName(\"defs\")[0].firstElementChild;\n let d3DefsSelection = d3RootSelection.select(\"defs\");\n if (d3DefsSelection.empty()) {\n d3DefsSelection = d3RootSelection.append(\"defs\");\n }\n d3DefsSelection.node().appendChild(gradientDom);\n return `${window.location.origin + window.location.pathname}#${\n gradientDom.id\n }`;\n}\n\n\nfunction propMap(prop) {\n let propName = prop;\n let tweaks;\n if (typeof prop === \"object\") {\n propName = prop.name;\n tweaks = prop.tweaks;\n }\n let result = [];\n switch (propName) {\n case \"text\":\n result = result.concat([\n { type: \"text\", val: \"text\" },\n { type: \"attr\", val: \"transform\" },\n { type: \"style\", val: \"opacity\" },\n { type: \"style\", val: \"font\" },\n { type: \"style\", val: \"fontSize\" },\n { type: \"style\", val: \"fontWeight\" },\n { type: \"style\", val: \"fill\" }\n ]);\n break;\n case \"title\":\n result = result.concat([\n { type: \"text\", val: \"text\" },\n { type: \"attr\", val: \"transform\" },\n { type: \"style\", val: \"opacity\" },\n { type: \"style\", val: \"font\" },\n { type: \"style\", val: \"fontSize\" },\n { type: \"style\", val: \"fontWeight\" },\n { type: \"style\", val: \"fill\" }\n ]);\n break;\n case \"tick\":\n result = result.concat([\n { type: \"attr\", val: \"transform\" },\n { type: \"attr\", val: \"x2\" },\n { type: \"attr\", val: \"y2\" },\n { type: \"style\", val: \"strokeWidth\" },\n { type: \"style\", val: \"stroke\" },\n { type: \"style\", val: \"opacity\" }\n ]);\n break;\n case \"grid\":\n result = result.concat([\n { type: \"attr\", val: \"transform\" },\n { type: \"attr\", val: \"x2\" },\n { type: \"attr\", val: \"y2\" },\n { type: \"style\", val: \"strokeWidth\" },\n { type: \"style\", val: \"stroke\" },\n { type: \"style\", val: \"strokeDasharray\" },\n { type: \"style\", val: \"opacity\" }\n ]);\n break;\n case \"domain\":\n result = result.concat([\n { type: \"attr\", val: \"transform\" },\n { type: \"attr\", val: \"x2\" },\n { type: \"attr\", val: \"y2\" },\n { type: \"style\", val: \"strokeWidth\" },\n { type: \"style\", val: \"stroke\" },\n { type: \"style\", val: \"opacity\" }\n ]);\n break;\n case \"rect\":\n result = result.concat([\n { type: \"attrTween\", val: \"d\" },\n { type: \"attr\", val: \"transform\" },\n { type: \"style\", val: \"opacity\" },\n { type: \"style\", val: \"fill\" },\n { type: \"style\", val: \"strokeWidth\" },\n { type: \"style\", val: \"stroke\" }\n ]);\n break;\n case \"gradient\":\n result = result.concat([\n { type: \"attr\", val: \"d\" },\n { type: \"style\", val: \"opacity\" },\n { type: \"style\", val: \"fill\", defs: gradientRender },\n { type: \"style\", val: \"strokeWidth\" },\n { type: \"style\", val: \"stroke\" }\n ]);\n break;\n case \"rule\":\n result = result.concat([\n { type: \"attr\", val: \"transform\" },\n { type: \"attr\", val: \"x2\" },\n { type: \"attr\", val: \"y2\" },\n { type: \"style\", val: \"strokeWidth\" },\n { type: \"style\", val: \"stroke\" },\n { type: \"style\", val: \"opacity\" }\n ]);\n break;\n case \"symbol\":\n result = result.concat([\n { type: \"attrTween\", val: \"d\" },\n { type: \"attr\", val: \"size\" },\n { type: \"attr\", val: \"transform\" },\n { type: \"style\", val: \"strokeWidth\" },\n { type: \"style\", val: \"stroke\" },\n { type: \"style\", val: \"opacity\" },\n { type: \"style\", val: \"fill\" }\n ]);\n break;\n case \"group\":\n result = result.concat([\n { type: \"attr\", val: \"transform\" },\n { type: \"style\", val: \"opacity\" }\n ]);\n break;\n case \"background\":\n result = result.concat([{ type: \"attr\", val: \"d\" }]);\n break;\n case \"line\":\n result = result.concat([\n { type: \"attrTween\", val: \"d\" },\n { type: \"style\", val: \"strokeWidth\" },\n { type: \"style\", val: \"stroke\" },\n { type: \"style\", val: \"opacity\" },\n { type: \"style\", val: \"fill\" }\n ]);\n break;\n case \"trail\":\n case \"area\":\n result = result.concat([\n { type: \"attrTween\", val: \"d\" },\n { type: \"style\", val: \"strokeWidth\" },\n { type: \"style\", val: \"stroke\" },\n { type: \"style\", val: \"opacity\" },\n { type: \"style\", val: \"fill\" }\n ]);\n break;\n case \"legend-pair\":\n result = result.concat([{ type: \"attr\", val: \"transform\" }]);\n break;\n default:\n break;\n }\n if (prop.excludes) {\n prop.excludes.forEach(exclude => {\n result = result.filter(\n r => !(r.type === exclude.type && r.val === exclude.val)\n );\n });\n }\n if (result.length > 0) {\n result.forEach(p => {\n p.elmType = propName;\n if (tweaks) {\n tweaks\n .filter(twk => twk.type === p.type && twk.val === p.val)\n .forEach(twk => {\n p = Object.assign(p, twk);\n });\n }\n });\n return result;\n }\n if (propName === \"align\") {\n return [{ type: \"attr\", val: \"text-anchor\", elmType: \"none\" }];\n }\n return [{ type: \"style\", val: propName, elmType: \"none\" }];\n}\n\nfunction computeScale(scales, scNames, getScales) {\n const computed = Object.assign({}, scales);\n\n scNames.forEach(scName => {\n computed.initial[scName] = getScales.initial(scName);\n computed.final[scName] = getScales.final(scName);\n });\n return computed;\n}\n\nfunction isLinearMarktype(mtype) {\n return [\"area\", \"line\", \"trail\"].indexOf(mtype) >= 0;\n}\n\nexport {\n propMap,\n getEaseFn,\n findAfterSibling,\n getJoinInfo,\n findComp,\n svgRender,\n computeScale,\n isLinearMarktype\n};\n","function computeHasFacet(compSpec) {\n if (\n compSpec &&\n compSpec.parent &&\n compSpec.parent.from &&\n compSpec.parent.from.facet &&\n compSpec.parent.from.facet.data &&\n compSpec.parent.from.facet.name === compSpec.from.data\n ) {\n return true;\n }\n return false;\n}\n\nfunction getFacet(compSpec) {\n return computeHasFacet(compSpec) ? compSpec.parent.from.facet : undefined;\n}\n\nfunction isGroupingMarktype(marktype) {\n return marktype === \"line\" || marktype === \"area\" || marktype === \"trail\";\n}\n\nfunction findMark(marks, markName) {\n let result;\n for (let i = 0; i < marks.length; i++) {\n const m = marks[i];\n if (m.name === markName) {\n return m;\n }\n if (m.marks) {\n result = findMark(m.marks, markName);\n if (result) {\n break;\n }\n }\n }\n return result;\n}\n\nfunction findData(spec, dataName) {\n for (let i = 0; i < spec.data.length; i++) {\n if (spec.data[i].name === dataName) {\n return spec.data[i];\n }\n }\n}\nfunction findFilter(spec, name) {\n for (let i = 0; i < spec.data.length; i++) {\n const d = spec.data[i];\n if (d.transform) {\n const filter = d.transform.find(filter => filter.name === name);\n if (filter) {\n return filter;\n }\n }\n }\n}\n\nexport {\n computeHasFacet,\n getFacet,\n isGroupingMarktype,\n findMark,\n findData,\n findFilter\n};\n","import { parse, codegen as vgCodegen } from \"vega-expression\";\nimport * as d3 from \"d3\";\nimport * as vega from \"vega\";\nimport {copy, flatten} from \"./util/util.js\";\nimport { getEaseFn } from \"./actuator/util\";\nimport { findFilter } from \"./changeFetcher/state/util\";\n\n\nclass Enumerator {\n constructor(enumDef, spec, rawInfo) {\n this.views = getStops(enumDef, spec, rawInfo);\n this.stopN = this.views.length;\n this.enumDef = enumDef;\n this.currSpec = spec;\n this.easeFn = getEaseFn(enumDef.ease);\n this.delay = enumDef.delay || 0;\n this.staggering = enumDef.staggering;\n this.rawInfo = rawInfo;\n }\n\n _getScales(stop_n) {\n return scName => {\n const view = this.views[stop_n];\n return view._runtime.scales[scName]\n ? view._runtime.scales[scName].value\n : undefined;\n };\n }\n\n getData(stop_n) {\n if (this.extractData && this.getId) {\n return this.extractData(this.views[stop_n]);\n }\n throw Error(\"Cannot return data without joining data.\");\n }\n\n getDatum(id, stop_n) {\n if (this.extractData && this.getId) {\n const found = this.extractData(this.views[stop_n]).find(\n (d, i) => this.getId(d, i) === id\n );\n return found && found.datum ? found.datum : found;\n }\n throw Error(\"Cannot return data without joining data.\");\n }\n\n joinData(extractData, identifyData) {\n this.extractData = extractData;\n this.getId = identifyData;\n let currDataKeys = this.extractData(this.views[0]).map(this.getId);\n\n this.joinDataInfo = this.views.slice(1).map(view => {\n const join = {\n update: [],\n enter: [],\n exit: []\n };\n const newDataKeys = extractData(view).map(this.getId);\n currDataKeys.forEach(cKey => {\n const foundIndex = newDataKeys.indexOf(cKey);\n if (foundIndex >= 0) {\n join.update.push(cKey);\n } else {\n join.exit.push(cKey);\n }\n });\n join.enter = newDataKeys.filter(nKey => currDataKeys.indexOf(nKey) < 0);\n\n currDataKeys = newDataKeys;\n\n return [\"update\", \"enter\", \"exit\"].reduce((accMap, set) => {\n return Object.assign(\n accMap,\n join[set].reduce((acc, key) => {\n acc[key] = set;\n return acc;\n }, {})\n );\n }, {});\n });\n this.allKeys = flatten(this.joinDataInfo.map(Object.keys)).unique();\n this.set = (id, stop_n) => this.joinDataInfo[stop_n][id];\n }\n\n getPropVal(prop, encodes, stop_n, id) {\n const d = this.extractData(this.views[stop_n]).find(\n (x, i) => this.getId(x, i) === id\n );\n const dSet = this.set(id, stop_n);\n if (!dSet) {\n return [\"x2\", \"y2\"].indexOf(prop.val) >= 0 ? 0 : \"\";\n }\n const getScales = {\n initial: this._getScales(stop_n),\n final: this._getScales(stop_n + 1)\n };\n return encodes[dSet].initial(prop, getScales, d);\n }\n\n interpolateAlongEnumMaker(prop, encodes, elem) {\n return id => {\n return t => {\n const stop_n = Math.min(Math.floor(t * (this.stopN - 1)), this.stopN - 2);\n let d_i = this.extractData(this.views[stop_n]).find(\n (x, i) => this.getId(x, i) === id\n );\n let d_f = this.extractData(this.views[stop_n + 1]).find(\n (x, i) => this.getId(x, i) === id\n );\n\n const dSet = this.set(id, stop_n);\n switch (dSet) {\n case \"enter\":\n d_i = d_f;\n break;\n case \"exit\":\n d_f = d_i;\n break;\n case \"update\":\n break;\n default:\n return [\"x2\", \"y2\"].indexOf(prop.val) >= 0 ? 0 : \"\";\n }\n const getScales = {\n initial: this._getScales(stop_n),\n final: this._getScales(stop_n + 1)\n };\n if (prop.type === \"attrTween\") {\n return encodes[dSet].custom.bind(elem)(prop, getScales, d_i, d_f)(\n t * (this.stopN - 1) - stop_n\n );\n }\n const valI = encodes[dSet].initial.bind(elem)(prop, getScales, d_i);\n const valF = encodes[dSet].final.bind(elem)(prop, getScales, d_f);\n\n return d3.interpolate(valI, valF)(t * (this.stopN - 1) - stop_n);\n // apply one of corresponding interpolation\n };\n };\n }\n}\n\nfunction computeFilteringValues(enumDef, rawInfo) {\n const filteringValues = enumDef.values || [];\n if (filteringValues.length === 0 && enumDef.stepSize) {\n // find initial value\n const iFilter = findFilter(rawInfo.sVis.spec, enumDef.filter);\n const iVal = parse(iFilter.expr).right.value;\n\n // find end value\n const fFilter = findFilter(rawInfo.eVis.spec, enumDef.filter);\n const fVal = parse(fFilter.expr).right.value;\n\n for (let v = iVal; v < fVal; v += enumDef.stepSize) {\n filteringValues.push(v);\n }\n\n filteringValues.push(fVal);\n }\n return filteringValues;\n}\n\n\nfunction computeNewSpec(workingSpec, filter, fVal) {\n const codegen = vgCodegen({\n whitelist: [\"datum\", \"event\", \"signals\"],\n globalvar: \"global\"\n });\n\n const parsedASTNode = parse(filter.expr);\n\n parsedASTNode.right.value = fVal;\n parsedASTNode.right.raw = fVal.toString();\n const newFilterExpr = codegen(parsedASTNode).code;\n filter.expr = newFilterExpr;\n\n return copy(workingSpec);\n}\nfunction getStops(enumDef, spec, rawInfo) {\n const workingSpec = copy(spec);\n\n const enumVals = computeFilteringValues(enumDef, rawInfo);\n const filter = findFilter(workingSpec, enumDef.filter);\n\n const views = enumVals.map(v => {\n return new vega.View(vega.parse(computeNewSpec(workingSpec, filter, v)), {\n renderer: \"none\"\n }).run();\n });\n\n return views;\n}\n\n\nexport { Enumerator, computeFilteringValues, computeNewSpec };\n","import { copy } from \"../util/util\";\nimport {computeFilteringValues} from \"../enumerator\";\nexport default function enumerateSteps(block, rawInfo, enumDefs) {\n if (block.sync) {\n block.sync = block.sync.map(blk => enumerateSteps(blk, rawInfo, enumDefs));\n } else if (block.concat) {\n block.concat = block.concat.map(blk =>\n enumerateSteps(blk, rawInfo, enumDefs)\n );\n\n if (block.enumerator) {\n const foundEnumDef = enumDefs.find(\n enumDef => enumDef.name === block.enumerator\n );\n\n if (foundEnumDef) {\n const filteringValues = computeFilteringValues(foundEnumDef, rawInfo);\n return filteringValues.slice(1).reduce(\n (acc, fVal, i) => {\n const enumedConcatBlock = copy(block);\n enumedConcatBlock.concat.forEach(blk => {\n fetchEnumVal(blk, foundEnumDef, fVal);\n });\n enumedConcatBlock.enumerated = copy(foundEnumDef);\n enumedConcatBlock.enumerated.val = fVal;\n enumedConcatBlock.enumerated.N = filteringValues.length;\n enumedConcatBlock.enumerated.last =\n i === filteringValues.length - 2;\n\n acc.concat.push(enumedConcatBlock);\n return acc;\n },\n { concat: [] }\n );\n }\n }\n }\n return block;\n}\n\nfunction fetchEnumVal(block, enumDef, val) {\n if (block.sync || block.concat) {\n (block.sync || block.concat).forEach(blk => {\n fetchEnumVal(blk, enumDef, val);\n });\n } else if (Array.isArray(block.enumVals)) {\n block.enumerated.push({def: enumDef, val: val});\n } else {\n block.enumerated = [{def: enumDef, val: val}];\n }\n}","import { isNumber, copy, permutate} from \"../util/util\";\nimport {default as collectResolves} from \"./resolveCollector\";\nimport {Schedule} from \"../schedule\";\nimport {default as checkConflict} from \"./conflictChecker\";\nimport {specChecker} from \"./specChecker\";\nimport {default as enumerateSteps} from \"./stepEnumerator\";\nexport function parse(spec, rawInfo){\n // const speckCheckResult = true; //specChecker(spec); TODO: when specChecker is included, it blocked loading the source map.\n const speckCheckResult = specChecker(spec);\n if (!speckCheckResult) {\n // Todo: give more specific reasons through speckCheckResult.\n return console.error(\"The spec is invalid.\");\n }\n\n // Enumerator argument the concatBlock with enumerator\n let newSpec = copy(spec);\n newSpec.timeline = enumerateSteps(newSpec.timeline, rawInfo, newSpec.enumerators);\n\n\n // 1. reform the timline such that all blocks have duration.\n let parsedTimelineBlock = readBlock(newSpec.timeline, newSpec.totalDuration);\n let parsedSteps = assignTiming(parsedTimelineBlock, { sTime: 0 }, true);\n\n // 2. attach staggering definitions\n parsedSteps.forEach(step => {\n if ([\"axis\", \"mark\", \"legend\"].indexOf(step.compType) >= 0) {\n step.timing = attachStaggering(step.timing, newSpec.staggerings);\n }\n });\n // 3. enumerator definitions\n if (newSpec.enumerators) {\n newSpec.enumerators = newSpec.enumerators.map(enumerator => {\n return attachStaggering(enumerator, newSpec.staggerings);\n });\n\n parsedSteps.forEach((step, i) => {\n if ([\"axis\", \"mark\", \"legend\"].indexOf(step.compType) >= 0) {\n step = attachEnumerators(step, newSpec.enumerators);\n }\n });\n }\n\n\n const schedule = new Schedule(parsedSteps);\n const resolves = collectResolves(parsedTimelineBlock, parsedSteps);\n\n const { conflictsPerAlterId } = checkConflict(schedule, resolves);\n\n\n return { schedule, resolves, conflictsPerAlterId };\n}\n\n\nexport function readBlock(block, totalDuration, multiplier = 1) {\n if (block.sync) {\n return readSyncBlock(block, totalDuration, multiplier);\n }\n if (block.concat) {\n return readConcatBlock(block, totalDuration, multiplier);\n }\n const delay =\n (block.delay\n ? isNumber(block.timing.delay.ratio)\n ? block.timing.delay.ratio * totalDuration\n : block.timing.delay\n : 0) * multiplier;\n\n const duration =\n (isNumber(block.timing.duration.ratio)\n ? block.timing.duration.ratio * totalDuration\n : block.timing.duration) * multiplier;\n const compType =\n typeof block.component === \"object\"\n ? Object.keys(block.component)[0]\n : block.component;\n const compName =\n typeof block.component === \"object\" ? block.component[compType] : undefined;\n\n return {\n duration,\n delay,\n timing: Object.assign({}, block.timing, { duration, delay }),\n change: block.change,\n enumerated: block.enumerated,\n enumerator: block.enumerator, // step enumerator\n compType,\n compName\n };\n}\nexport function readConcatBlock(concatBlock, totalDuration, multiplier = 1) {\n const concatenated = concatBlock.concat;\n let duration = 0;\n let alternateConcats = {};\n\n const newMult = concatBlock.enumerated ? 1 / concatBlock.enumerated.N : 1;\n\n const reformedBlocks = concatenated.map(block => {\n const newBlock = readBlock(block, totalDuration, multiplier * newMult);\n duration = duration + newBlock.timing.duration + newBlock.timing.delay;\n return newBlock;\n });\n\n if (concatBlock.autoScaleOrder) {\n // permutate the concat's order\n concatBlock.resolve = {\n autoScaleOrder: concatBlock.autoScaleOrder,\n alterName:\n concatBlock.autoScaleOrder.join(\"-\") +\n (concatBlock.enumerated ? `_${concatBlock.enumerated.val}` : \"\")\n };\n let alternates = permutateOnlyContainNames(\n concatenated,\n concatBlock.resolve.autoScaleOrder\n );\n\n alternates.splice(0, 1);\n alternates = alternates.map(concatenated_i => {\n return concatenated_i.map(block => readBlock(block, totalDuration, multiplier * newMult));\n });\n alternateConcats = {\n alterName: concatBlock.resolve.alterName,\n alternates\n };\n }\n return Object.assign(\n {\n delay: 0,\n duration,\n timing: { delay: 0, duration },\n concat: reformedBlocks,\n resolve: concatBlock.resolve,\n enumerated: concatBlock.enumerated\n },\n alternateConcats\n );\n}\n\nexport function permutateOnlyContainNames(blocks, names) {\n const filtered = [];\n const indices = [];\n blocks.forEach((blk, i) => {\n if (containNames(blk)) {\n filtered.push(blk);\n indices.push(i);\n }\n });\n\n return permutate(filtered).map(permutatedOne => {\n return indices.reduce((acc, index, i) => {\n acc.splice(index, 1, permutatedOne[i]);\n return acc;\n }, copy(blocks));\n });\n\n function containNames(block) {\n if (block.sync || block.concat) {\n return (block.sync || block.concat).reduce((acc, blk) => {\n acc = acc || containNames(blk, names);\n return acc;\n }, false);\n }\n const compType = Object.keys(block.component)[0];\n return names.indexOf(block.component[compType]) >= 0;\n }\n}\n\nexport function readSyncBlock(syncBlock, totalDuration, multiplier = 1) {\n const anchor = syncBlock.anchor || \"start\";\n let duration = 0;\n const newBlocks = syncBlock.sync.map(block => {\n const newBlock = readBlock(block, totalDuration, multiplier);\n duration =\n duration > newBlock.timing.duration + newBlock.timing.delay\n ? duration\n : newBlock.timing.duration + newBlock.timing.delay;\n return newBlock;\n });\n\n return {\n delay: 0,\n duration,\n timing: { delay: 0, duration },\n anchor,\n sync: newBlocks\n };\n}\n\nexport function attachStaggering(item, staggerings) {\n if (!staggerings || staggerings.length <= 0 || !item) {\n return item;\n }\n\n const found = staggerings.find(stgDef => item.staggering === stgDef.name);\n return Object.assign(item, { staggering: found });\n}\n\nexport function attachEnumerators(item, enumerators) {\n if (!enumerators || enumerators.length <= 0 || !item) {\n return item;\n }\n\n const found = enumerators.find(\n enumeratorDef => item.enumerator === enumeratorDef.name\n );\n return Object.assign(item, { enumerator: found });\n}\n\nexport function assignTiming(block, timePointer) {\n let steps = [];\n const anchor = isNumber(timePointer.sTime) ? \"s\" : \"e\";\n let timestamp = anchor === \"s\" ? timePointer.sTime : timePointer.eTime;\n if (block.sync && block.anchor === \"start\") {\n block.sync.forEach(blk => {\n steps = steps.concat(\n assignTiming(blk, {\n sTime: anchor === \"s\" ? timestamp : timestamp - block.duration\n })\n );\n });\n } else if (block.sync && block.anchor === \"end\") {\n block.sync.forEach(blk => {\n steps = steps.concat(\n assignTiming(blk, {\n eTime: anchor === \"e\" ? timestamp : timestamp + block.duration\n })\n );\n });\n } else if (block.concat) {\n if (anchor === \"e\") {\n timestamp -= block.duration;\n }\n\n if (block.alternates) {\n block.alternates.forEach((alternate, i) => {\n let alterTimeStamp = timestamp;\n alternate.forEach(blk => {\n const alter = assignTiming(copy(blk), {\n sTime: alterTimeStamp\n }).map(step => {\n step.alterId = `${step.alterId || \"\"}${block.alterName}:${i}`;\n return step;\n });\n\n steps = steps.concat(alter);\n alterTimeStamp += blk.duration + blk.delay;\n });\n });\n }\n\n block.concat.forEach(blk => {\n const mainSteps = assignTiming(blk, { sTime: timestamp }).map(step => {\n step.alterId = step.alterId || `${block.alterName || \"\"}:main`;\n return copy(step);\n });\n steps = steps.concat(mainSteps);\n timestamp += blk.duration + blk.delay;\n });\n } else {\n if (anchor === \"s\") {\n block.sTime = timestamp;\n block.eTime = timestamp + block.duration + block.delay;\n } else {\n block.eTime = timestamp;\n block.sTime = timestamp - block.duration - block.delay;\n }\n steps = steps.concat([block]);\n }\n return steps;\n}","import * as d3 from \"d3\";\nimport { computeHasFacet, isGroupingMarktype } from \"../changeFetcher/state/util\";\n// Join and return nextData\nfunction facetData(data, facetDef) {\n if (!facetDef) {\n return [\n {\n datum: {},\n mark: { role: \"group\", marktype: \"group\" },\n items: [{ items: data }]\n }\n ];\n }\n\n let {groupby} = facetDef;\n if (typeof groupby === \"string\") {\n groupby = [groupby];\n }\n return d3.groups(data, d => groupby.map(f => d.datum[f]).join(\"@@_@@\"))\n .map(group => {\n const values = group[1]\n let datum = groupby.reduce((datum, f) => {\n datum[f] = values[0].datum[f];\n return datum;\n }, { count: values.length });\n return {\n datum: datum,\n mark: {role: \"group\", marktype: \"group\"},\n items: [{items: values }]\n };\n });\n\n}\nfunction unpackData(data) {\n if (data[0].mark.marktype !== \"group\") {\n return data;\n }\n\n return data.reduce((unpacked, group) => {\n return unpacked.concat(group.items[0].items);\n }, []);\n}\n\nfunction getMarkData(view, compSpec, compName, marktype, facet) {\n let dataName = computeHasFacet(compSpec) ? compSpec.parent.name : compName;\n let data = view._runtime.data[dataName] ? (view._runtime.data[dataName].values.value) || [] : [];\n if (data.length === 0) {\n return data;\n }\n let isGroupingMtype = isGroupingMarktype(marktype || compSpec.type),\n hasFacet = computeHasFacet(compSpec);\n\n if ( isGroupingMtype && !hasFacet ) {\n return facetData(data, facet || (compSpec.parent.from ? compSpec.parent.from.facet : undefined));\n } if (!isGroupingMtype && hasFacet) {\n data = unpackData(data);\n }\n return data;\n}\n\nfunction getEmptyLegendData(compSpec) {\n if (compSpec.type === \"symbol\") {\n return {\n labels: [],\n symbols: [],\n pairs: [],\n title: []\n };\n } if (compSpec.type === \"gradient\") {\n return {\n labels: [],\n gradient: [],\n bands: [],\n title: []\n };\n }\n}\nfunction getLegendData(view, compName, compSpec) {\n const titleDatum = view._runtime.data[compName].values.value[0].items.find(\n item => item.role === \"legend-title\"\n ).items[0];\n let returnData = { title: [titleDatum] };\n if (compSpec.type === \"symbol\") {\n returnData = Object.assign(returnData, {\n labels: [],\n symbols: [],\n pairs: []\n });\n const fPairs = view._runtime.data[compName].values.value[0].items.find(\n item => item.role === \"legend-entry\"\n ).items[0].items[0].items;\n fPairs.forEach(pair => {\n returnData.pairs.push(pair);\n returnData.labels.push(\n pair.items.find(item => item.role === \"legend-label\").items[0]\n );\n returnData.symbols.push(\n pair.items.find(item => item.role === \"legend-symbol\").items[0]\n );\n });\n } else if (compSpec.type === \"gradient\") {\n returnData = Object.assign(returnData, {\n labels: [],\n gradient: [],\n bands: []\n });\n const entryG = view._runtime.data[compName].values.value[0].items.find(\n item => item.role === \"legend-entry\"\n ).items[0];\n let labelG; let bandG; let gradientG;\n if ((labelG = entryG.items.find(item => item.role === \"legend-label\"))) {\n returnData.labels = returnData.labels.concat(labelG.items);\n }\n if ((bandG = entryG.items.find(item => item.role === \"legend-band\"))) {\n returnData.bands = returnData.bands.concat(bandG.items);\n }\n if (\n (gradientG = entryG.items.find(item => item.role === \"legend-gradient\"))\n ) {\n returnData.gradient.push(gradientG.items[0]);\n }\n }\n return returnData;\n}\n\nfunction getEmptyAxisData() {\n return {\n tick: [],\n label: [],\n grid: []\n };\n}\nfunction getAxisData(view, compName) {\n return [\"tick\", \"label\", \"grid\"].reduce((acc, subComp) => {\n let data = view._runtime.data[compName].values.value[0].items\n .find(item => item.role === `axis-${subComp}`);\n\n data = data && data.items ? data.items : [];\n acc[subComp] = data;\n return acc;\n }, {});\n}\n\nexport {\n facetData,\n unpackData,\n getMarkData,\n getEmptyLegendData,\n getLegendData,\n getEmptyAxisData,\n getAxisData\n};\n","import { computeHasFacet, isGroupingMarktype, getFacet } from \"./util\";\nimport { stringifyDatumValue } from \"../../util/util\";\nimport {\n facetData,\n unpackData,\n getAxisData,\n getEmptyAxisData,\n getEmptyLegendData,\n getLegendData,\n getMarkData\n} from \"../../util/vgDataHelper\";\n\nfunction computeIdMaker(key) {\n if (Array.isArray(key)) {\n return (d) => {\n return key\n .map(field => {\n return d.datum[field];\n })\n .join(\"-\");\n };\n }\n return (d, i) => stringifyDatumValue(i);\n}\n\nfunction initialData(step, rawInfo) {\n const sView = rawInfo.sVis.view;\n const { change } = step;\n const isAdd = !change.initial && !!change.final;\n if (change.compType === \"axis\") {\n if (isAdd) {\n return getEmptyAxisData();\n }\n return getAxisData(sView, change.compName);\n }\n if (change.compType === \"legend\") {\n if (isAdd) {\n return getEmptyLegendData(change.final);\n }\n return getLegendData(sView, change.compName, change.initial);\n }\n if (change.compType === \"mark\") {\n if (isAdd) {\n return [];\n }\n const mtype = step.marktypes ? step.marktypes.initial : change.initial.type;\n return getMarkData(sView, change.initial, change.compName, mtype);\n }\n if (change.compType === \"view\") {\n return sView._runtime.data.root.values.value[0];\n }\n}\n\nfunction joinData(step, rawInfo, initialData) {\n const iData = initialData;\n const eView = rawInfo.eVis.view;\n const {change} = step;\n const isAdd = !change.initial && !!change.final;\n const isRemove = !!change.initial && !change.final;\n const {hasFacet} = step;\n let preFetchCurrData = false;\n let computeId = {};\n\n if (change.compType === \"axis\") {\n const result = {\n nextData: {},\n currData: {},\n computeDatumId: {}\n };\n\n result.nextData.axis = isRemove\n ? iData.axis\n : [eView._runtime.data[change.compName].values.value[0].datum];\n result.currData.axis = iData.axis;\n result.computeDatumId.axis = (d, i) => i;\n\n if (\n change.scale === false ||\n (change.scale && change.scale.data === false)\n ) {\n const computeId = d => stringifyDatumValue(d.datum.value);\n return [\"tick\", \"label\", \"grid\"].reduce((acc, subComp) => {\n const nextData = iData[subComp].map((d, i) => {\n setJoinInfo(d, step, { animSet: \"update\", joinKey: computeId(d, i) });\n return d;\n });\n acc.nextData[subComp] = nextData;\n acc.currData[subComp] = nextData;\n acc.computeDatumId[subComp] = computeId;\n return acc;\n }, result);\n }\n\n let fData = getEmptyAxisData();\n if (!isRemove) {\n fData = getAxisData(eView, change.compName);\n }\n\n return [\"tick\", \"label\", \"grid\"].reduce((acc, subComp) => {\n let subCompEncName = subComp === \"tick\" ? \"ticks\" : subComp;\n subCompEncName = subCompEncName === \"label\" ? \"labels\" : subCompEncName;\n let computeId = d => stringifyDatumValue(d.datum.value);\n\n if (change.encode && change.encode[subCompEncName] === false) {\n acc.nextData[subComp] = iData[subComp];\n acc.currData[subComp] = iData[subComp];\n acc.computeDatumId[subComp] = computeId;\n return acc;\n }\n\n const iDataSubComp = iData[subComp] || [];\n let fDataSubComp = fData[subComp] || [];\n if (!step.sameDomainDimension) {\n const ci = appendPostfix(computeId, \"_exit\");\n let cf = appendPostfix(computeId, \"_enter\");\n computeId = { initial: ci, final: cf };\n\n iDataSubComp.forEach((iDatum, i) => {\n setJoinInfo(iDatum, step, {\n animSet: \"exit\",\n joinKey: computeId.initial(iDatum, i)\n });\n });\n\n fDataSubComp.forEach((fDatum, i) => {\n setJoinInfo(fDatum, step, {\n animSet: \"enter\",\n joinKey: computeId.final(fDatum, i)\n });\n });\n } else {\n joinThem(iDataSubComp, fDataSubComp, computeId, step);\n }\n\n // let isAnimSet = getIsAnimSet(subCompEncName, change.encode);\n // let iDataAnimSets = (isAnimSet.exit ? [] : [\"exit\"]).concat(isAnimSet.update ? [] : [\"update\"]),\n // fDataAnimSets = (isAnimSet.enter ? [\"enter\"] : []).concat(isAnimSet.update ? [\"update\"] : [])\n const iDataAnimSets = []; let fDataAnimSets = [\"enter\", \"update\"];\n const nextData = iDataSubComp\n .filter(d => iDataAnimSets.indexOf(getJoinInfo(d, step, \"animSet\")) >= 0)\n .concat(fDataSubComp.filter(d => fDataAnimSets.indexOf(getJoinInfo(d, step, \"animSet\")) >= 0));\n\n // let nextData = [];\n\n // nextData = nextData.concat(isAnimSet.update ? joinedData.update.final : joinedData.update.initial)\n // nextData = isAnimSet.enter ? nextData.concat(joinedData.enter) : nextData;\n // nextData = !isAnimSet.exit ? nextData.concat(joinedData.exit) : nextData;\n\n acc.nextData[subComp] = nextData;\n acc.currData[subComp] = iDataSubComp;\n acc.computeDatumId[subComp] = computeId;\n return acc;\n }, result);\n\n }\n if (change.compType === \"legend\") {\n const getComputeId = subComp => {\n if (subComp === \"pairs\") {\n return d => {\n const {datum} = d.items.find(item => item.role === \"legend-label\").items[0];\n return stringifyDatumValue(datum.value);\n };\n } else if (subComp === \"title\") {\n return d => d.text;\n } else if (subComp === \"gradient\") {\n return d => JSON.stringify(d.fill.stops);\n }\n return d => stringifyDatumValue(d.datum.value);\n };\n\n const result = Object.keys(iData).reduce(\n (acc, subComp) => {\n computeId = getComputeId(subComp);\n const nextData = iData[subComp].map((d, i) => {\n setJoinInfo(d, step, { animSet: \"update\", joinKey: computeId(d, i) });\n return d;\n });\n acc.nextData[subComp] = nextData;\n acc.currData[subComp] = nextData;\n acc.computeDatumId[subComp] = computeId;\n return acc;\n },\n {\n nextData: {},\n currData: {},\n computeDatumId: {}\n }\n );\n\n if (\n change.scale === false ||\n (change.scale && change.scale.data === false)\n ) {\n return result;\n }\n\n if (isRemove) {\n result.nextData = getEmptyLegendData(change.initial);\n return result;\n }\n const fData = getLegendData(eView, change.compName, change.final);\n const keys = Object.keys(fData)\n .concat(Object.keys(iData))\n .unique();\n return keys.reduce((acc, subComp) => {\n const subCompEncName = subComp;\n if (change.encode && change.encode[subCompEncName] === false) {\n return acc;\n }\n computeId = getComputeId(subComp);\n const iDataSubComp = iData[subComp] || [];\n let fDataSubComp = fData[subComp]|| [];\n if (\n (subComp === \"labels\" &&\n step.legendTypes.initial !== step.legendTypes.final) ||\n !step.sameDomainDimension\n ) {\n const ci = appendPostfix(computeId, \"_exit\");\n let cf = appendPostfix(computeId, \"_enter\");\n computeId = { initial: ci, final: cf };\n\n iDataSubComp.forEach((iDatum, i) => {\n setJoinInfo(iDatum, step, {\n animSet: \"exit\",\n joinKey: computeId.initial(iDatum, i)\n });\n });\n\n fDataSubComp.forEach((fDatum, i) => {\n setJoinInfo(fDatum, step, {\n animSet: \"enter\",\n joinKey: computeId.final(fDatum, i)\n });\n });\n } else {\n joinThem(iDataSubComp, fDataSubComp, computeId, step);\n }\n\n // let isAnimSet = getIsAnimSet(subCompEncName, change.encode);\n\n // let iDataAnimSets = (isAnimSet.exit ? [] : [\"exit\"]).concat(isAnimSet.update ? [] : [\"update\"]),\n // fDataAnimSets = (isAnimSet.enter ? [\"enter\"] : []).concat(isAnimSet.update ? [\"update\"] : [])\n const iDataAnimSets = []; let fDataAnimSets = [\"enter\", \"update\"];\n const nextData = iDataSubComp\n .filter(d => iDataAnimSets.indexOf(getJoinInfo(d, step, \"animSet\")) >= 0)\n .concat(fDataSubComp.filter(d => fDataAnimSets.indexOf(getJoinInfo(d, step, \"animSet\")) >= 0));\n\n acc.nextData[subComp] = nextData || [];\n acc.currData[subComp] = iDataSubComp;\n acc.computeDatumId[subComp] = computeId;\n return acc;\n }, result);\n }\n if (change.compType === \"mark\") {\n const {marktypes} = step;\n\n let doUpdate = !isRemove && !isAdd && change.data !== false,\n doEnter = !isRemove && (isAdd || change.data !== false),\n doExit = !isAdd && (isRemove || change.data !== false);\n let joinFields = null;\n if (change.data) {\n doUpdate = change.data.update === false ? false : doUpdate;\n doEnter = change.data.enter === false ? false : doEnter;\n doExit = change.data.exit === false ? false : doExit;\n joinFields = Array.isArray(change.data) ? change.data : change.data.keys;\n }\n\n\n const aggregate = step.aggregates;\n const isGroupingMarktypes = {\n initial: isGroupingMarktype(marktypes.initial || marktypes.final),\n final: isGroupingMarktype(marktypes.final || marktypes.initial)\n };\n\n const facets = {\n initial: hasFacet.initial\n ? getFacet(change.initial) || getFacet(change.final)\n : undefined,\n final: hasFacet.final\n ? getFacet(change.final) || getFacet(change.initial)\n : undefined\n };\n if (change.marktype === false) {\n isGroupingMarktypes.final = isGroupingMarktypes.initial;\n }\n\n if (change.data || isAdd || isRemove) {\n step.change.aggregate = aggregate;\n\n let fData = [];\n if (!isRemove) {\n const mtype = marktypes.final || marktypes.initial;\n const facet =\n change.marktype === false\n ? change.initial.parent.from\n ? change.initial.parent.from.facet\n : undefined\n : change.final.parent.from\n ? change.final.parent.from.facet\n : undefined;\n\n fData = getMarkData(eView, change.final, change.compName, mtype, facet);\n }\n // // Data should be from change.final!\n // let dName = computeHasFacet(change.final) ? change.final.parent.name : dataName;\n // let _fData = eView._runtime.data[dName] ? (eView._runtime.data[dName].values.value) : [];\n\n // // when the final data should be facetted but are not facetted yet:\n // if (isGroupingMarktypes.final && !computeHasFacet(change.final)){\n // if (change.marktype === false) {\n // fData = facetData(_fData, change.initial.parent.from ? change.initial.parent.from.facet : undefined);\n // } else {\n // fData = facetData(_fData, change.final.parent.from ? change.final.parent.from.facet : undefined);\n // }\n // } else if (!isGroupingMarktypes.final && computeHasFacet(change.final)) {\n // fData = unpackData(_fData);\n // } else {\n // fData = _fData;\n // }\n // }\n\n [\"initial\", \"final\"].forEach(which => {\n if (change[which] && facets[which]) {\n computeId[which] = computeIdMaker(facets[which].groupby);\n } else if (aggregate[which]) {\n computeId[which] = computeIdMaker(aggregate[which].groupby);\n } else {\n computeId[which] = computeIdMaker(joinFields);\n }\n });\n\n\n if (isGroupingMarktypes.initial && isGroupingMarktypes.final) {\n if (\n change.final &&\n change.initial &&\n facets.final &&\n facets.initial &&\n facets.initial.groupby.sort().toString() ===\n facets.final.groupby.sort().toString()\n ) {\n computeId = computeId.initial;\n joinThem(iData, fData, computeId, step);\n } else if (\n change.final &&\n change.initial &&\n !facets.final &&\n !facets.initial\n ) {\n computeId = computeId.initial;\n joinThem(iData, fData, computeId, step);\n } else {\n const ci = appendPostfix(computeId.initial, \"_exit\");\n let cf = appendPostfix(computeId.final, \"_enter\");\n\n computeId = { initial: ci, final: cf };\n iData.forEach((iDatum, i) => {\n setJoinInfo(iDatum, step, {\n animSet: \"exit\",\n joinKey: computeId.initial(iDatum, i)\n });\n });\n fData.forEach((fDatum, i) => {\n setJoinInfo(fDatum, step, {\n animSet: \"enter\",\n joinKey: computeId.final(fDatum, i)\n });\n });\n }\n } else if (!isGroupingMarktypes.initial && !isGroupingMarktypes.final) {\n if (\n aggregate.initial &&\n aggregate.final &&\n aggregate.initial.groupby.sort().toString() ===\n aggregate.final.groupby.sort().toString()\n ) {\n computeId = computeId.initial;\n joinThem(iData, fData, computeId, step);\n } else if (!aggregate.initial && !aggregate.final) {\n computeId = computeId.initial;\n joinThem(iData, fData, computeId, step);\n } else {\n let ci = appendPostfix(computeId.initial, \"_exit\");\n let cf = appendPostfix(computeId.final, \"_enter\");\n computeId = { initial: ci, final: cf };\n\n iData.forEach((iDatum, i) => {\n setJoinInfo(iDatum, step, {\n animSet: \"exit\",\n joinKey: computeId.initial(iDatum, i)\n });\n });\n\n fData.forEach((fDatum, i) => {\n setJoinInfo(fDatum, step, {\n animSet: \"enter\",\n joinKey: computeId.final(fDatum, i)\n });\n });\n\n if (!aggregate.initial && aggregate.final) {\n attachAggData(fData, iData, computeId.final, aggregate.final);\n preFetchCurrData = true;\n } else if (aggregate.initial && !aggregate.final) {\n attachAggData(iData, fData, computeId.initial, aggregate.initial);\n preFetchCurrData = true;\n }\n }\n } else {\n // When the marktype changes between area/line to the others.\n let groupedData; let unpackedData;\n if (isGroupingMarktypes.initial) {\n computeId.initial = computeIdMaker(\n facets.initial ? change.initial.parent.from.facet.groupby : null\n );\n computeId.final = computeIdMaker(joinFields || null);\n unpackedData = unpackData(iData);\n joinThem(unpackedData, fData, computeId.final, step);\n\n groupedData = facetData(\n fData,\n change.initial.parent.from\n ? change.initial.parent.from.facet\n : undefined\n );\n joinThem(iData, groupedData, computeId.initial, step);\n } else {\n computeId.initial = computeIdMaker(joinFields || null);\n computeId.final = computeIdMaker(\n facets.final ? change.final.parent.from.facet.groupby : null\n );\n\n unpackedData = unpackData(fData);\n joinThem(iData, unpackedData, computeId.initial, step);\n\n groupedData = facetData(\n iData,\n change.final.parent.from\n ? change.final.parent.from.facet\n : undefined\n );\n joinThem(groupedData, fData, computeId.final, step);\n }\n\n return {\n nextData: fData,\n currData: iData,\n computeDatumId: computeId,\n groupedData,\n unpackedData\n };\n }\n\n const iDataAnimSets = (doExit ? [] : [\"exit\"]).concat(\n doUpdate ? [] : [\"update\"]\n );\n let fDataAnimSets = (doEnter ? [\"enter\"] : []).concat(\n doUpdate ? [\"update\"] : []\n );\n let nextData = iData.filter(\n d => iDataAnimSets.indexOf(getJoinInfo(d, step, \"animSet\")) >= 0\n );\n if (!doExit) {\n // we included the exit data as we do not make them exit.\n nextData.forEach((datum) => {\n setJoinInfo(datum, step, { animSet: \"update\" });\n });\n }\n\n nextData = nextData.concat(\n fData.filter(\n d => fDataAnimSets.indexOf(getJoinInfo(d, step, \"animSet\")) >= 0\n )\n );\n\n return {\n nextData,\n currData: iData,\n computeDatumId: computeId,\n preFetchCurrData\n };\n }\n // When there is no data change\n computeId = computeIdMaker(null);\n const sameData = iData.map((d, i) => {\n setJoinInfo(d, step, { animSet: \"update\", joinKey: computeId(d,i) });\n return d;\n });\n\n if (isGroupingMarktypes.initial !== isGroupingMarktypes.final) {\n // When the marktype changes between area/line to the others.\n let groupedData; let unpackedData;\n if (isGroupingMarktypes.initial) {\n unpackedData = unpackData(iData);\n unpackedData.map((d, i) => {\n setJoinInfo(d, step, { animSet: \"update\", joinKey: computeId(d,i) });\n return d;\n });\n return {\n nextData: unpackedData, currData: iData,\n computeDatumId: computeId,\n groupedData: iData,\n unpackedData: unpackedData\n };\n }\n groupedData = facetData(iData, change.final.parent.from ? change.final.parent.from.facet : undefined);\n groupedData.map((d, i) => {\n setJoinInfo(d, step, { animSet: \"update\", joinKey: computeId(d,i) });\n return d;\n });\n return {\n nextData: groupedData, currData: iData,\n computeDatumId: computeId,\n groupedData,\n unpackedData: iData\n };\n }\n\n return {\n nextData: sameData,\n currData: sameData,\n computeDatumId: computeId\n };\n }\n if (change.compType === \"view\") {\n return { nextData: eView._runtime.data.root.values.value[0] };\n }\n return iData;\n}\nfunction joinThem(iData, fData, computeId, step) {\n const updateData = { initial: [], final: [] };\n const enterData = [];\n const exitData = [];\n\n const takenChecker = new Array(fData.length);\n takenChecker.fill(false);\n iData.forEach((iDatum, i) => {\n const id = computeId(iDatum, i);\n const foundIndex = fData.findIndex(\n (fDatum, j) => computeId(fDatum, j) === id\n );\n const found = foundIndex >= 0 ? fData[foundIndex] : null;\n\n if (found) {\n const info = { animSet: \"update\", joinKey: id };\n setJoinInfo(found, step, info);\n setJoinInfo(iDatum, step, info);\n const extendedIDatum = { ...found.datum, ...iDatum.datum };\n const extendedFDatum = { ...iDatum.datum, ...found.datum };\n iDatum.datum = extendedIDatum;\n found.datum = extendedFDatum;\n updateData.final.push(found);\n updateData.initial.push(iDatum);\n\n takenChecker[foundIndex] = true;\n } else {\n setJoinInfo(iDatum, step, { animSet: \"exit\", joinKey: id });\n exitData.push(iDatum);\n }\n });\n takenChecker.forEach((taken, i) => {\n if (!taken) {\n setJoinInfo(fData[i], step, {\n animSet: \"enter\",\n joinKey: computeId(fData[i], i)\n });\n enterData.push(fData[i]);\n }\n });\n\n return {\n enter: enterData,\n update: updateData,\n exit: exitData\n };\n}\nfunction attachAggData(aggData, rawData, aggId, agg) {\n rawData.forEach((rawDatum, i) => {\n aggData.forEach((aggDatum, j) => {\n if (aggId(rawDatum, i) === aggId(aggDatum, j)) {\n agg.fields.forEach((f, f_i) => {\n rawDatum.datum[agg.as[f_i]] = aggDatum.datum[agg.as[f_i]];\n });\n }\n });\n });\n}\n\nfunction getJoinInfo(d, step, prop) {\n return d.__gemini__[step.stepId]\n ? d.__gemini__[step.stepId][prop]\n : undefined;\n}\n\nfunction appendPostfix(computeId, postFix) {\n return (d, i) => {\n return computeId(d, i) + postFix;\n };\n}\n\nfunction getAggregate(change, rawInfo) {\n const aggregate = {};\n if (!change.initial || !change.final) {\n return aggregate;\n }\n const sSpec = rawInfo.sVis.spec;\n const eSpec = rawInfo.eVis.spec;\n\n const dataName = compSpec => {\n return computeHasFacet(compSpec)\n ? compSpec.parent.from.facet.data\n : compSpec.from.data;\n };\n\n const dataSource_f = eSpec.data.find(\n dset => dset.name === dataName(change.final)\n );\n if (dataSource_f.transform) {\n aggregate.final = dataSource_f.transform.find(\n trsfm => trsfm.type === \"aggregate\"\n );\n }\n const dataSource_i = sSpec.data.find(\n dset => dset.name === dataName(change.initial)\n );\n if (dataSource_i.transform) {\n aggregate.initial = dataSource_i.transform.find(\n trsfm => trsfm.type === \"aggregate\"\n );\n }\n return aggregate;\n}\n\nfunction setJoinInfo(datum, step, info) {\n datum.__gemini__ = datum.__gemini__ || {};\n datum.__gemini__[step.stepId] = datum.__gemini__[step.stepId] || {};\n Object.assign(datum.__gemini__[step.stepId], info);\n}\n\nexport { joinData, initialData, getAggregate };\n","import { copy } from \"../../../util/util\";\nimport * as vega from \"vega\";\nfunction dataPreservedScale(sSpec, eSpec, scName) {\n const tempSpec = copy(eSpec);\n const scaleSpec = tempSpec.scales.find(sc => sc.name === scName);\n if (scaleSpec.domain.data) {\n const index = tempSpec.data.findIndex(\n d => d.name === scaleSpec.domain.data\n );\n if (index >= 0) {\n tempSpec.data.splice(\n index,\n 1,\n sSpec.data.find(d => d.name === scaleSpec.domain.data)\n );\n }\n }\n const tempView = new vega.View(vega.parse(tempSpec), {\n renderer: \"none\"\n }).run();\n return tempView._runtime.scales[scName].value;\n}\n\nfunction computeKeptEncode(manualEncode, referenceEncode, set) {\n return Object.keys(manualEncode && manualEncode[set] ? manualEncode[set] : {})\n .filter(attr => manualEncode[set][attr] === false)\n .reduce((keptEncode, attr) => {\n keptEncode[attr] = referenceEncode[set][attr];\n return keptEncode;\n }, {});\n}\n\n\nfunction replacePositionAttrs(targetMarktype, targetEncode, referenceEncode) {\n const encode = Object.assign({}, targetEncode);\n const POSITION_ATTRS = [\"x\", \"x2\", \"xc\", \"width\", \"y\", \"y2\", \"yc\", \"height\"];\n const replaceRules = {\n rect: [\n {replaceBy: [\"x\", \"x2\"], },\n {replaceBy: [\"x\", \"width\"], },\n {replaceBy: [\"xc\", \"width\"], remove: [\"x\"] },\n {replaceBy: [\"y\", \"y2\"], },\n {replaceBy: [\"y\", \"height\"], },\n {replaceBy: [\"yc\", \"height\"], remove: [\"y\"] }\n ],\n area: [\n {replaceBy: [\"x\", \"x2\", \"y\"], remove: \"*\" },\n {replaceBy: [\"x\", \"width\", \"y\"], remove: \"*\" },\n {replaceBy: [\"xc\", \"width\", \"y\"], remove: \"*\" },\n {replaceBy: [\"y\", \"y2\", \"x\"], remove: \"*\" },\n {replaceBy: [\"y\", \"height\", \"x\"], remove: \"*\" },\n {replaceBy: [\"yc\", \"height\", \"x\"], remove: \"*\" },\n {replaceBy: [\"x\", \"x2\", \"yc\"], remove: \"*\" },\n {replaceBy: [\"x\", \"width\", \"yc\"], remove: \"*\" },\n {replaceBy: [\"xc\", \"width\", \"yc\"], remove: \"*\" },\n {replaceBy: [\"y\", \"y2\", \"xc\"], remove: \"*\" },\n {replaceBy: [\"y\", \"height\", \"xc\"], remove: \"*\" },\n {replaceBy: [\"yc\", \"height\", \"xc\"], remove: \"*\" }\n ],\n default: [\n {replaceBy: [\"x\"] },\n {replaceBy: [\"xc\"], remove: [\"x\"] },\n {replaceBy: [\"y\"] },\n {replaceBy: [\"yc\"], remove: [\"y\"] }\n ]\n };\n let rules = replaceRules[targetMarktype] || replaceRules.default;\n\n rules.forEach(rule => {\n const hasAll = rule.replaceBy.reduce((hasAll, attr) => {\n return hasAll && referenceEncode[attr];\n }, true);\n if (hasAll) {\n rule.replaceBy.forEach(attr => {\n encode[attr] = referenceEncode[attr];\n });\n let removedAttrs = rule.remove || [];\n if (rule.remove === \"*\") {\n removedAttrs = POSITION_ATTRS.filter(attr => rule.replaceBy.indexOf(attr) < 0);\n }\n removedAttrs.forEach(attr => {\n delete encode[attr];\n });\n }\n });\n\n\n return encode;\n}\n\nexport { dataPreservedScale, computeKeptEncode, replacePositionAttrs };","import { dataPreservedScale, computeKeptEncode, replacePositionAttrs } from \"./util\";\nimport { copy2, copy, get } from \"../../../util/util\";\nimport { DEFAULT_ENCODE, DEFAULT_STYLE } from \"../../../default\";\nimport { computeHasFacet } from \"../util\";\nimport { getAggregate } from \"../dataJoin\";\n\n\nexport function compute(rawInfo, step, lastState) {\n const eView = rawInfo.eVis.view;\n const { change } = step;\n const isAdd = !change.initial && !!change.final;\n const isRemove = !!change.initial && !change.final;\n\n const manualEncode = change.encode;\n let doEnter = !isRemove && (isAdd || change.data !== false);\n let doExit = !isAdd && (isRemove || change.data !== false);\n\n if (change.data) {\n doEnter = change.data.enter === false ? false : doEnter;\n doExit = change.data.exit === false ? false : doExit;\n }\n\n if (\n !isAdd &&\n !isRemove &&\n change.initial.from.data !== change.final.from.data\n ) {\n if (!computeHasFacet(change.final) && !computeHasFacet(change.initial)) {\n console.error(\n `Data source of this mark (${change.compName}) has changed unexpectedly!`\n );\n }\n }\n\n const aggregates = {\n initial: lastState.aggregate,\n final: lastState.aggregate\n };\n\n if (change.data) {\n // aggregates.done = true;\n aggregates.final = getAggregate(change, rawInfo).final;\n }\n\n const marktypes = {\n initial: lastState.marktype, // change.initial ? change.initial.type : undefined,\n final: change.final ? change.final.type : undefined\n };\n\n if (\n marktypes.initial &&\n marktypes.final &&\n marktypes.initial !== marktypes.final\n ) {\n console.log(\"mark transform change!\");\n if (change.marktype === false) {\n marktypes.final = marktypes.initial;\n }\n }\n\n const hasFacet = {\n initial: lastState.hasFacet,\n final: lastState.hasFacet\n };\n if ((change.data || isAdd || isRemove) && change.marktype !== false) {\n hasFacet.final = computeHasFacet(change.final);\n }\n\n const scales = {\n initial: lastState.scale,\n final: copy2(lastState.scale)\n };\n const encodes = {\n initial: Object.assign({ update: {} }, copy(lastState.encode)),\n final: Object.assign({ update: {} }, copy(lastState.encode))\n };\n const signals = {\n initial: lastState.signal\n };\n const signalsFinal = [\"width\", \"height\", \"padding\"].reduce((acc, sgName) => {\n if (Array.isArray(change.signal)) {\n if (change.signal.indexOf(sgName) >= 0) {\n acc[sgName] = eView.signal(sgName);\n }\n return acc;\n }\n if (change.signal === false) {\n return acc;\n }\n acc[sgName] = eView.signal(sgName);\n return acc;\n }, {});\n signals.final = Object.assign({}, signals.initial, signalsFinal);\n\n if (change.scale !== false) {\n let finalScaleNames = [];\n if (change.scale === true || isAdd) {\n finalScaleNames = Object.keys(eView._runtime.scales);\n } else if (Array.isArray(change.scale)) {\n finalScaleNames = change.scale;\n } else if (typeof change.scale === \"object\") {\n finalScaleNames = Object.keys(change.scale);\n }\n finalScaleNames.forEach(scName => {\n if (change.scale[scName] && change.scale[scName].data === false) {\n scales.final[scName] = dataPreservedScale(\n rawInfo.sVis.spec,\n rawInfo.eVis.spec,\n scName\n );\n } else {\n scales.final[scName] = eView._runtime.scales[scName]\n ? eView._runtime.scales[scName].value\n : undefined;\n }\n\n const channel = Object.keys(encodes.final.update).find(\n key => key.scale === scName\n );\n encodes.final.update[channel] = change.final\n ? copy(change.final.encode.update[channel])\n : undefined;\n });\n }\n\n if (manualEncode === false) {\n throw Error(\"Interpolating data requires to interpolate encode.\");\n }\n\n const styleEncodes = {\n initial: copy(lastState.styleEncode),\n final: copy(lastState.styleEncode)\n };\n if (change.marktype) {\n styleEncodes.final = change.final && change.final.style\n ? DEFAULT_STYLE[change.final.style] || {}\n : {};\n }\n\n const manualEncodeEnterWithoutInitial = manualEncode\n ? copy(manualEncode.enter || {})\n : {};\n delete manualEncodeEnterWithoutInitial.initial;\n\n encodes.initial.enter = Object.assign(\n {},\n lastState.encode.update,\n DEFAULT_ENCODE.mark.enter,\n manualEncode && manualEncode.enter ? manualEncode.enter.initial : {}\n );\n\n if (get(change, \"encode\", \"enter\") === false) {\n encodes.final.enter = encodes.initial.enter;\n } else {\n encodes.final.enter = Object.assign(\n {},\n DEFAULT_ENCODE.mark[marktypes.final || marktypes.initial].update,\n styleEncodes.final,\n copy(get(change, \"final\", \"encode\", \"update\") || {}),\n manualEncode ? manualEncodeEnterWithoutInitial : {},\n computeKeptEncode(manualEncode, encodes.initial, \"enter\")\n );\n }\n\n encodes.initial.exit = Object.assign({}, lastState.encode.update);\n if (change.encode && change.encode.exit === false) {\n encodes.final.exit = encodes.initial.exit;\n } else {\n encodes.final.exit = Object.assign(\n {},\n DEFAULT_ENCODE.mark[marktypes.initial || marktypes.final].update,\n styleEncodes.final,\n doExit\n ? copy(\n get(change, \"final\", \"encode\", \"update\") ||\n get(change, \"initial\", \"encode\", \"update\")\n )\n : copy(\n get(change, \"initial\", \"encode\", \"update\") ||\n get(change, \"final\", \"encode\", \"update\")\n ),\n DEFAULT_ENCODE.mark.exit,\n manualEncode ? manualEncode.exit : {},\n computeKeptEncode(manualEncode, encodes.initial, \"exit\")\n );\n }\n\n if (change.encode && change.encode.update === false) {\n encodes.final.update = encodes.initial.update;\n } else {\n encodes.final.update = Object.assign(\n {},\n DEFAULT_ENCODE.mark[marktypes.final || marktypes.initial].update,\n styleEncodes.final,\n copy(get(change, \"final\", \"encode\", \"update\") || {}),\n manualEncode ? manualEncode.update : {},\n computeKeptEncode(manualEncode, encodes.initial, \"update\")\n );\n }\n\n // When marktype changes\n // |S_exit | -> | | exit! (initial.exit -> final.exit)\n // |S_update| -> | | update via fading out (initial.update -> initial.intermediate)\n // | | -> | E_update | & fading in (final.intermediate -> final.update)\n // | | -> | E_enter | enter! (initial.enter -> final.enter)\n if (marktypes.final !== marktypes.initial) {\n encodes.initial.intermediate = Object.assign(\n {},\n replacePositionAttrs(marktypes.initial, encodes.initial.update, encodes.final.update),\n { opacity: { value: 0 } }\n );\n\n encodes.final.intermediate = Object.assign(\n {},\n replacePositionAttrs(marktypes.final, encodes.final.update, encodes.initial.update),\n { opacity: { value: 0 } }\n );\n\n if (doEnter) {\n encodes.initial.enter = Object.assign(\n {},\n replacePositionAttrs(marktypes.final, encodes.final.enter, encodes.initial.enter),\n { opacity: { value: 0 } },\n manualEncode && manualEncode.enter ? manualEncode.enter.initial : {}\n );\n }\n if (doExit) {\n encodes.final.exit = Object.assign(\n {},\n replacePositionAttrs(marktypes.initial, encodes.initial.exit, encodes.final.exit),\n { opacity: { value: 0 } },\n manualEncode ? manualEncode.exit : {},\n computeKeptEncode(manualEncode, encodes.initial, \"exit\"),\n );\n }\n }\n if (!aggregates.initial && aggregates.final && change.data ) {\n // when aggregate\n encodes.final.exit = Object.assign(\n !change.marktype ? encodes.final.update : replacePositionAttrs(marktypes.initial, encodes.final.exit, encodes.final.update),\n { opacity: { value: 0 } },\n manualEncode ? manualEncode.exit : {},\n computeKeptEncode(manualEncode, encodes.initial, \"exit\"),\n );\n\n encodes.final.update = copy(encodes.final.enter);\n } else if (aggregates.initial && !aggregates.final && change.data ) {\n // when disaggregate\n\n encodes.initial.enter = Object.assign(\n {},\n !change.marktype ? encodes.initial.update : replacePositionAttrs(marktypes.final, encodes.initial.enter, encodes.initial.update),\n { opacity: { value: 0 } },\n manualEncode && manualEncode.enter ? manualEncode.enter.initial : {}\n );\n\n encodes.final.update = copy(encodes.final.enter);\n }\n\n return {\n encodes,\n scales,\n signals,\n marktypes,\n hasFacet,\n aggregates,\n styleEncodes\n };\n}","import { dataPreservedScale, computeKeptEncode } from \"./util\";\nimport { copy2, copy, get, deepEqual } from \"../../../util/util\";\nimport { DEFAULT_ENCODE } from \"../../../default\";\nimport { findComp } from \"../../../actuator/util\";\n\nexport function compute(rawInfo, step, lastState) {\n const { change } = step;\n const compState = lastState;\n const eView = rawInfo.eVis.view;\n const isRemove = !change.final;\n const isAdd = !change.initial;\n let doTicks;\n let doLabels;\n let doAxisG;\n let doTitle;\n let doDomain;\n let doGrid;\n doTicks = doLabels = doAxisG = doTitle = doDomain = doGrid = true;\n\n if (change.encode === false) {\n doTicks = doLabels = doAxisG = doTitle = doDomain = doGrid = false;\n } else if (change.encode) {\n doTicks = !(change.encode.ticks === false);\n doLabels = !(change.encode.labels === false);\n doAxisG = !(change.encode.axis === false);\n doTitle = !(change.encode.title === false);\n doGrid = !(change.encode.grid === false);\n doDomain = !(change.encode.domain === false);\n }\n\n const scNames = {\n initial: change.initial ? change.initial.scale : undefined,\n final: change.final ? change.final.scale : undefined\n };\n\n // collect the scale objects to scale the initial/final values\n const scales = {\n initial: compState.scale,\n final: copy2(compState.scale)\n };\n\n if (!(change.scale === false)) {\n if (!scNames.final) {\n scales.final = {};\n } else if (change.scale && change.scale.data === false) {\n scales.final[scNames.final] = dataPreservedScale(\n rawInfo.sVis.spec,\n rawInfo.eVis.spec,\n scNames.final\n );\n } else {\n scales.final[scNames.final] = eView._runtime.scales[scNames.final]\n ? eView._runtime.scales[scNames.final].value\n : undefined;\n }\n }\n\n let sameDomainDimension = get(change, \"scale\", \"domainDimension\");\n if (typeof sameDomainDimension === \"string\") {\n sameDomainDimension =\n sameDomainDimension === \"same\"\n ? true\n : sameDomainDimension === \"diff\"\n ? false\n : undefined;\n }\n if (isRemove || isAdd) {\n sameDomainDimension = false;\n } else if (sameDomainDimension === undefined) {\n if (change.scale === false) {\n sameDomainDimension = true;\n } else {\n const scaleDefs = {\n initial: rawInfo.sVis.spec.scales.find(\n scaleDef => scaleDef.name === scNames.initial\n ),\n final: rawInfo.eVis.spec.scales.find(\n scaleDef => scaleDef.name === scNames.final\n )\n };\n sameDomainDimension = deepEqual(\n scaleDefs.initial.domain,\n scaleDefs.final.domain\n );\n }\n }\n\n const signals = {\n initial: compState.signal\n };\n const signalsFinal = [\"width\", \"height\", \"padding\"].reduce((acc, sgName) => {\n if (Array.isArray(change.signal)) {\n if (change.signal.indexOf(sgName) >= 0) {\n acc[sgName] = eView.signal(sgName);\n }\n return acc;\n }\n if (change.signal === false) {\n return acc;\n }\n acc[sgName] = eView.signal(sgName);\n return acc;\n }, {});\n signals.final = Object.assign({}, signals.initial, signalsFinal);\n\n const allEncodes = {};\n\n const subComps = {\n ticks: doTicks,\n labels: doLabels,\n title: doTitle,\n axis: doAxisG,\n grid: doGrid,\n domain: doDomain\n };\n const axisGDatumFinal = change.final\n ? findComp(eView.scenegraph().root, change.compName, \"axis\")[0].items[0]\n : undefined;\n const axisGEncodeBaseFinal = axisGDatumFinal\n ? {\n x: { value: axisGDatumFinal.x },\n y: { value: axisGDatumFinal.y }\n }\n : {};\n\n Object.keys(subComps).forEach(subComp => {\n const manualEncode =\n change.encode && change.encode[subComp] ? change.encode[subComp] : {};\n allEncodes[subComp] = getAxisSubCompEncodes(subComp, manualEncode);\n });\n\n function getAxisSubCompEncodes(subComponent, manualEncode) {\n const encodes = {\n initial: copy(compState.encode[subComponent] || {}),\n final: copy(compState.encode[subComponent] || {})\n };\n\n if (subComps[subComponent] !== true) {\n return encodes;\n }\n\n const subCompEncode = {\n initial:\n change.initial &&\n change.initial.encode &&\n change.initial.encode[subComponent]\n ? change.initial.encode[subComponent].update\n : undefined,\n final:\n change.final && change.final.encode && change.final.encode[subComponent]\n ? change.final.encode[subComponent].update\n : undefined\n };\n\n encodes.initial.enter = Object.assign(\n {},\n // defaultAxisEncode.initial,\n DEFAULT_ENCODE.axis[subComponent](sameDomainDimension ? change.initial : change.final)\n .update,\n sameDomainDimension ? subCompEncode.initial : subCompEncode.final || {},\n DEFAULT_ENCODE.mark.enter,\n compState.encode.enter,\n manualEncode && manualEncode.enter ? manualEncode.enter.initial : {}\n );\n if (manualEncode && manualEncode.enter === false) {\n encodes.final.enter = encodes.initial.enter;\n } else {\n encodes.final.enter = Object.assign(\n {},\n // defaultAxisEncode.final,\n DEFAULT_ENCODE.axis[subComponent](change.final).update,\n subCompEncode.final ? subCompEncode.final : {},\n manualEncode ? manualEncode.enter : {},\n computeKeptEncode(manualEncode, encodes.initial, \"enter\")\n );\n }\n\n encodes.initial.exit = Object.assign(\n {},\n // defaultAxisEncode.initial,\n DEFAULT_ENCODE.axis[subComponent](change.initial).update,\n subCompEncode.initial ? subCompEncode.initial : {},\n compState.encode.exit || compState.encode.update\n );\n if (manualEncode && manualEncode.exit === false) {\n encodes.final.exit = encodes.initial.exit;\n } else {\n encodes.final.exit = Object.assign(\n {},\n // defaultAxisEncode.final,\n DEFAULT_ENCODE.axis[subComponent](\n sameDomainDimension ? change.final : change.initial\n ).update,\n sameDomainDimension ? subCompEncode.final : subCompEncode.initial || {},\n DEFAULT_ENCODE.mark.exit,\n manualEncode ? manualEncode.exit : {},\n computeKeptEncode(manualEncode, encodes.initial, \"exit\")\n );\n }\n\n encodes.initial.update = Object.assign(\n {},\n // defaultAxisEncode.initial,\n DEFAULT_ENCODE.axis[subComponent](change.initial).update,\n subCompEncode.initial || {},\n encodes.initial.update\n );\n\n if (manualEncode && manualEncode.update === false) {\n encodes.final.update = encodes.initial.update;\n } else {\n encodes.final.update = Object.assign(\n {},\n // defaultAxisEncode.final,\n subComponent === \"axis\" ? axisGEncodeBaseFinal : {},\n DEFAULT_ENCODE.axis[subComponent](change.final).update,\n subCompEncode.final || {},\n manualEncode ? manualEncode.update : {},\n computeKeptEncode(manualEncode, encodes.initial, \"update\")\n );\n }\n return encodes;\n }\n\n return {\n encodes: allEncodes,\n scales,\n signals,\n sameDomainDimension\n };\n}","import { dataPreservedScale, computeKeptEncode } from \"./util\";\nimport { copy2, get, deepEqual } from \"../../../util/util\";\nimport { DEFAULT_ENCODE } from \"../../../default\";\n\n\nexport function compute(rawInfo, step, lastState) {\n const LEGEND_CHANNELS = [\n \"fill\",\n \"opacity\",\n \"shape\",\n \"size\",\n \"stroke\",\n \"strokeDash\",\n \"strokeWidth\"\n ];\n const { change } = step;\n const eView = rawInfo.eVis.view;\n\n let doTitle;\n let doSymbols;\n let doLabels;\n let doEntries;\n let doGradient;\n let doLegendG;\n doTitle = doSymbols = doLabels = doEntries = doGradient = doLegendG = true;\n const isRemove = !lastState.isRemove && !change.final;\n const isAdd = !lastState.isAdd && !change.initial;\n if (change.encode === false) {\n doTitle = doSymbols = doLabels = doEntries = doGradient = doLegendG = false;\n } else if (change.encode) {\n doTitle = !(change.encode.title === false);\n doSymbols = !(change.encode.symbols === false);\n doLabels = !(change.encode.labels === false);\n doEntries = !(change.encode.entries === false);\n doGradient = !(change.encode.gradient === false);\n doLegendG = !(change.encode.legend === false);\n }\n\n const legendTypes = {\n initial: lastState.legendType,\n final:\n change.scale === false\n ? lastState.legendType\n : change.final\n ? change.final.type\n : undefined\n };\n\n const scNames = {\n initial: [],\n final: []\n };\n LEGEND_CHANNELS.forEach(channel => {\n if (change.initial && change.initial[channel]) {\n scNames.initial.push(change.initial[channel]);\n }\n if (change.final && change.final[channel]) {\n scNames.final.push(change.final[channel]);\n }\n });\n\n // collect the scale objects to scale the initial/final values\n const scales = {\n initial: lastState.scale,\n final: copy2(lastState.scale)\n };\n\n if (change.scale !== false) {\n let finalScaleNames = [];\n if (Array.isArray(change.scale)) {\n finalScaleNames = change.scale;\n } else if (change.scale === true || isAdd) {\n finalScaleNames = scNames.final;\n } else if (typeof change.scale === \"object\") {\n finalScaleNames = scNames.final.filter(\n scName => change.scale[scName] !== false\n );\n }\n finalScaleNames.forEach(scName => {\n if (change.scale[scName] && change.scale[scName].data === false) {\n scales.final[scName] = dataPreservedScale(\n rawInfo.sVis.spec,\n rawInfo.eVis.spec,\n scName\n );\n } else {\n scales.final[scName] = eView._runtime.scales[scName]\n ? eView._runtime.scales[scName].value\n : undefined;\n }\n });\n }\n\n let sameDomainDimension = get(change, \"scale\", \"domainDimension\");\n if (typeof sameDomainDimension === \"string\") {\n sameDomainDimension =\n sameDomainDimension === \"same\"\n ? true\n : sameDomainDimension === \"diff\"\n ? false\n : undefined;\n }\n if (sameDomainDimension === undefined) {\n if (change.scale === false) {\n sameDomainDimension = true;\n } else if (isRemove || isAdd) {\n sameDomainDimension = false;\n } else {\n // Fact: Each legend can be associated with multiple scales but their domains are equal.\n const scaleDefs = {\n initial: rawInfo.sVis.spec.scales.find(\n scaleDef => scaleDef.name === scNames.initial[0]\n ),\n final: rawInfo.eVis.spec.scales.find(\n scaleDef => scaleDef.name === scNames.final[0]\n )\n };\n sameDomainDimension = deepEqual(\n scaleDefs.initial.domain,\n scaleDefs.final.domain\n );\n }\n }\n\n const signals = {\n initial: lastState.signal\n };\n const signalsFinal = [\"width\", \"height\", \"padding\"].reduce((acc, sgName) => {\n if (Array.isArray(change.signal)) {\n if (change.signal.indexOf(sgName) >= 0) {\n acc[sgName] = eView.signal(sgName);\n }\n return acc;\n }\n if (change.signal === false) {\n return acc;\n }\n acc[sgName] = eView.signal(sgName);\n return acc;\n }, {});\n signals.final = Object.assign({}, signals.initial, signalsFinal);\n\n const allEncodes = {};\n\n const subComps = {\n gradient: doGradient,\n bands: doGradient,\n pairs: doSymbols || doLabels,\n labels: doLabels,\n title: doTitle,\n legend: doLegendG,\n entries: doEntries,\n symbols: doSymbols\n };\n Object.keys(subComps).forEach(subComp => {\n if (subComps[subComp]) {\n const manualEncode =\n change.encode && change.encode[subComp] ? change.encode[subComp] : {};\n allEncodes[subComp] = getLegendSubCompEncodes(\n subComp,\n manualEncode\n );\n }\n });\n\n function getLegendSubCompEncodes(subComponent, manualEncode) {\n const defaultSubcompEncode = {\n initial: DEFAULT_ENCODE.legend[subComponent](change.initial).update,\n final: DEFAULT_ENCODE.legend[subComponent](change.final).update\n };\n const comps = change;\n const compEncode = {};\n [\"initial\", \"final\"].forEach(which => {\n if (\n comps[which] &&\n comps[which].encode &&\n comps[which].encode[subComponent]\n ) {\n compEncode[which] = comps[which].encode[subComponent].update;\n }\n });\n\n const encodes = {\n initial: copy2(\n lastState.encode && lastState.encode[subComponent]\n ? lastState.encode[subComponent]\n : { update: defaultSubcompEncode.initial }\n ),\n final: copy2(\n lastState.encode && lastState.encode[subComponent]\n ? lastState.encode[subComponent]\n : { update: defaultSubcompEncode.final }\n )\n };\n\n encodes.initial.enter = Object.assign(\n {},\n sameDomainDimension\n ? defaultSubcompEncode.initial\n : defaultSubcompEncode.final,\n sameDomainDimension ? compEncode.initial : compEncode.final,\n DEFAULT_ENCODE.mark.enter,\n lastState.encode.enter,\n manualEncode && manualEncode.enter ? manualEncode.enter.initial : {}\n );\n if (manualEncode && manualEncode.enter === false) {\n encodes.final.enter = encodes.initial.enter;\n } else {\n encodes.final.enter = Object.assign(\n {},\n defaultSubcompEncode.final,\n compEncode.final,\n manualEncode ? manualEncode.enter : {},\n computeKeptEncode(manualEncode, encodes.initial, \"enter\")\n );\n }\n\n encodes.initial.exit = Object.assign(\n {},\n defaultSubcompEncode.initial,\n compEncode.initial,\n lastState.encode.exit || lastState.encode.update\n );\n\n if (manualEncode && manualEncode.exit === false) {\n encodes.final.exit = encodes.initial.exit;\n } else {\n encodes.final.exit = Object.assign(\n {},\n sameDomainDimension\n ? defaultSubcompEncode.final\n : defaultSubcompEncode.initial,\n sameDomainDimension ? compEncode.final : compEncode.initial,\n DEFAULT_ENCODE.mark.exit,\n manualEncode ? manualEncode.exit : {},\n computeKeptEncode(manualEncode, encodes.initial, \"exit\")\n );\n }\n\n encodes.initial.update = Object.assign(\n {},\n defaultSubcompEncode.initial,\n compEncode.initial,\n encodes.initial.update\n );\n\n if (manualEncode && manualEncode.update === false) {\n encodes.final.update = encodes.initial.update;\n } else {\n encodes.final.update = Object.assign(\n {},\n defaultSubcompEncode.final,\n compEncode.final,\n manualEncode ? manualEncode.update : {},\n computeKeptEncode(manualEncode, encodes.initial, \"update\")\n );\n }\n\n return encodes;\n }\n\n return {\n encodes: allEncodes,\n scales,\n signals,\n legendTypes,\n sameDomainDimension,\n isAdd,\n isRemove\n };\n}","import { copy } from \"../../../util/util\";\n\nexport function compute(rawInfo, step, lastState) {\n const { change } = step;\n const signals = {\n initial: lastState.signal\n };\n const encodes = {\n initial: copy(lastState.encode),\n final: copy(lastState.encode)\n };\n\n const signalsFinal = {};\n const finalSignalNames = Array.isArray(change.signal)\n ? change.signal\n : [\"width\", \"height\", \"padding\"];\n\n finalSignalNames.forEach(sgName => {\n signalsFinal[sgName] = rawInfo.eVis.view.signal(sgName);\n });\n\n signals.final = { ...signals.initial, ...signalsFinal };\n\n if (step.change.signal !== false) {\n if (finalSignalNames.indexOf(\"height\") >= 0) {\n encodes.final.svg.y = { value: change.final.y + change.final.padding };\n encodes.final.svg.height = {\n value: change.final.viewHeight + change.final.padding * 2\n };\n encodes.final.root.height = { value: signals.final.height };\n }\n if (finalSignalNames.indexOf(\"width\") >= 0) {\n encodes.final.svg.x = { value: change.final.x + change.final.padding };\n encodes.final.svg.width = {\n value: change.final.viewWidth + change.final.padding * 2\n };\n encodes.final.root.width = { value: signals.final.width };\n }\n }\n\n // Todo Encodes for view comp\n const fRootDatum = rawInfo.eVis.view._runtime.data.root.values.value[0];\n encodes.final.root.fill = { value: fRootDatum.fill };\n encodes.final.root.stroke = { value: fRootDatum.stroke };\n\n return {\n signals,\n encodes\n };\n\n}","function getLegendType(legendCompSpec, view) {\n if (legendCompSpec.fill) {\n const scale = view._runtime.scales[legendCompSpec.fill].value;\n if (\n [\n \"sequential-linear\",\n \"linear\",\n \"log\",\n \"pow\",\n \"sqrt\",\n \"symlog\",\n \"bin-ordinal\"\n ].indexOf(scale.type) >= 0\n ) {\n if (scale.type === \"bin-ordinal\") {\n return { type: \"gradient\", isBand: true };\n }\n return { type: \"gradient\" };\n }\n }\n\n if (legendCompSpec.stroke) {\n const scale = view._runtime.scales[legendCompSpec.stroke].value;\n if (\n [\n \"sequential-linear\",\n \"linear\",\n \"log\",\n \"pow\",\n \"sqrt\",\n \"symlog\",\n \"bin-ordinal\"\n ].indexOf(scale.type) >= 0\n ) {\n if (scale.type === \"bin-ordinal\") {\n return { type: \"gradient\", isBand: true };\n }\n return { type: \"gradient\" };\n }\n }\n return { type: \"symbol\" };\n}\n\nexport { getLegendType };\n","import { copy } from \"../util/util\";\nimport { getLegendType } from \"../util/vgSpecHelper\";\n\nfunction getComponents(vgSpec) {\n // By traveling vgSpec, collect the marks, axes, legends, and scales with their bound data and encoding.\n const components = [];\n function collectComp(mark, currComp, isRoot = false) {\n if (isRoot) {\n mark.name = \"root\";\n }\n let newComp = currComp;\n if (mark.axes) {\n newComp = newComp.concat(\n mark.axes.map(d => {\n return {\n ...copy(d),\n compType: \"axis\"\n };\n })\n );\n }\n\n if (mark.legends) {\n newComp = newComp.concat(\n mark.legends.map(d => { return { ...copy(d), compType: \"legend\" }; })\n );\n }\n\n if (mark.scales) {\n newComp = newComp.concat(\n mark.scales.map(d => { return { ...copy(d), compType: \"scale\" }; })\n );\n }\n\n if (!isRoot) {\n const newMark = { ...copy(mark), compType: \"mark\" };\n delete newMark.marks;\n newComp.push(newMark);\n }\n\n if (mark.marks) {\n newComp = mark.marks.reduce((acc, curr) => {\n const subComps = collectComp(\n { ...curr, parent: (mark || \"root\") },\n []\n );\n return acc.concat(subComps);\n }, newComp);\n }\n return newComp;\n }\n\n return collectComp(vgSpec, components, true);\n}\nfunction getChanges(sComponents, eComponents) {\n const IDENTIFIERS = {\n axis: comp =>\n comp.encode && comp.encode.axis ? comp.encode.axis.name : comp.scale,\n legend: comp =>\n comp.encode && comp.encode.legend ? comp.encode.legend.name : comp.scale,\n mark: comp => comp.name,\n scale: comp => comp.name\n };\n const merged = [];\n sComponents.forEach(sComp => {\n const id = IDENTIFIERS[sComp.compType];\n const matchedId = eComponents.findIndex(\n eComp => sComp.compType === eComp.compType && id(sComp) === id(eComp)\n );\n if (matchedId >= 0) {\n merged.push({\n compType: sComp.compType,\n compName: id(sComp),\n parent: sComp.parent,\n initial: sComp,\n final: eComponents.splice(matchedId, 1)[0]\n });\n } else {\n merged.push({\n compType: sComp.compType,\n compName: id(sComp),\n parent: sComp.parent,\n initial: sComp,\n final: null\n });\n }\n });\n\n return merged.concat(\n eComponents.map(eComp => {\n const id = IDENTIFIERS[eComp.compType];\n return {\n compType: eComp.compType,\n compName: id(eComp),\n parent: eComp.parent,\n initial: null,\n final: eComp\n };\n })\n );\n}\n\nfunction getViewChange(rawInfo) {\n return {\n compType: \"view\",\n compName: \"global\",\n\n initial: {\n viewWidth: rawInfo.sVis.view._viewWidth,\n viewHeight: rawInfo.sVis.view._viewHeight,\n width: rawInfo.sVis.view.width(),\n height: rawInfo.sVis.view.height(),\n x: rawInfo.sVis.view._origin[0],\n y: rawInfo.sVis.view._origin[1],\n padding: rawInfo.sVis.spec.padding\n },\n final: {\n viewWidth: rawInfo.eVis.view._viewWidth,\n viewHeight: rawInfo.eVis.view._viewHeight,\n width: rawInfo.eVis.view.width(),\n height: rawInfo.eVis.view.height(),\n x: rawInfo.eVis.view._origin[0],\n y: rawInfo.eVis.view._origin[1],\n padding: rawInfo.eVis.spec.padding\n }\n };\n}\n\n\nfunction getDefaultChange(step, rawInfo) {\n const change = copy(step.change || {});\n if (step.compType === \"mark\") {\n change.data = change.data === undefined ? true : change.data;\n if (\n change.data.update === false &&\n change.data.enter === false &&\n change.data.exit === false\n ) {\n change.data = false;\n }\n change.marktype = change.marktype === undefined ? true : change.marktype;\n change.scale = change.scale === undefined ? true : change.scale;\n change.signal = change.signal === undefined ? true : change.signal;\n change.encode = change.encode === undefined ? true : change.encode;\n } else if (step.compType === \"axis\" || step.compType === \"legend\") {\n change.signal = change.signal === undefined ? true : change.signal;\n change.scale = change.scale === undefined ? {} : change.scale;\n\n if (step.compType === \"legend\") {\n change.scale = change.scale === undefined ? true : change.scale;\n change.signal = change.signal === undefined ? true : change.signal;\n // specify the type of the legend\n if (change.initial) {\n change.initial = Object.assign(\n change.initial,\n getLegendType(change.initial, rawInfo.sVis.view)\n );\n\n change.initial.direction = change.initial.direction || \"vertical\";\n change.initial.orient = change.initial.orient || \"right\";\n }\n if (change.final) {\n change.final = Object.assign(\n change.final,\n getLegendType(change.final, rawInfo.eVis.view)\n );\n change.final.direction = change.final.direction || \"vertical\";\n change.final.orient = change.final.orient || \"right\";\n }\n }\n } else if (step.compType === \"view\") {\n change.signal = change.signal === undefined ? true : change.signal;\n }\n return change;\n}\n\n\nfunction attachChanges(rawInfo, schedule) {\n const changes = getChanges(\n getComponents(rawInfo.sVis.spec),\n getComponents(rawInfo.eVis.spec)\n );\n\n // attach the view change\n changes.push(getViewChange(rawInfo));\n\n schedule.forEach(track => {\n track.steps = track.steps.map(step => {\n if (step.compType === \"pause\") {\n return step;\n }\n\n const found = changes.find(change => {\n return (\n change.compType === step.compType &&\n (change.compName === step.compName || step.compType === \"view\")\n );\n });\n if (!found) {\n console.error(`cannot found the changes of ${step.compName}.`);\n }\n\n step.change = {\n ...step.change,\n ...found\n };\n step.change = {\n ...step.change,\n ...getDefaultChange(step, rawInfo)\n };\n\n return step;\n });\n });\n\n return schedule;\n}\n\nexport { getComponents, getChanges, getViewChange, getDefaultChange, attachChanges };\n","import * as vega from \"vega\";\nimport { joinData, initialData, getAggregate } from \"./dataJoin\";\nimport { findComp } from \"../../actuator/util\";\nimport { DEFAULT_ENCODE, DEFAULT_STYLE } from \"../../default\";\nimport * as computeStates from \"./compute\";\nimport { computeNewSpec, Enumerator } from \"../../enumerator\";\nimport { copy, get } from \"../../util/util\";\nimport {\n getComponents,\n getViewChange,\n} from \"../change\";\nimport {\n computeHasFacet,\n isGroupingMarktype,\n findMark,\n findFilter,\n findData\n} from \"./util\";\n\n\n//Todo make schedule class and put this as its method\nfunction getMoments(schedule) {\n const moments = [];\n schedule.forEach(track => {\n track.steps.forEach(step => {\n let m = moments.find(m => m.time === step.sTime);\n if (!m) {\n moments.push({\n time: step.sTime,\n starting: [step],\n ending: []\n });\n } else {\n m.starting.push(step);\n }\n m = moments.find(m => m.time === step.eTime);\n if (!m) {\n moments.push({\n time: step.eTime,\n starting: [],\n ending: [step]\n });\n } else {\n m.ending.push(step);\n }\n });\n });\n return moments.sort((a, b) => a.time - b.time);\n}\n\n\nexport function attachStates(schedule, rawInfo) {\n const state = initializeState(schedule, rawInfo);\n const moments = getMoments(schedule);\n schedule.moments = moments;\n\n moments.forEach(moment => {\n moment.ending.forEach(step => {\n const lastState = state[step.trackName];\n if (step.compType === \"pause\") {\n return;\n }\n\n lastState.data = lastState.data || initialData(step, rawInfo);\n\n // When the steps are enumerated by \"enumerator\"\n let eView;\n if (step.enumerated) {\n step.enumerated.forEach(enumed => {\n const filter = findFilter(state.spec, enumed.def.filter);\n state.spec = computeNewSpec(state.spec, filter, enumed.val);\n });\n eView = new vega.View(vega.parse(state.spec), {\n renderer: \"none\"\n }).run();\n }\n const newRawInfo = {\n sVis: rawInfo.sVis,\n eVis: Object.assign(\n {},\n rawInfo.eVis,\n eView ? { view: eView } : undefined\n )\n };\n if (step.compType === \"view\") {\n Object.assign(step.change, getViewChange(newRawInfo));\n }\n\n Object.assign(\n step,\n computeStates[step.compType](newRawInfo, step, lastState)\n );\n Object.assign(step, joinData(step, newRawInfo, lastState.data));\n lastState.data = step.nextData;\n\n if (step.encodes) {\n lastState.encode =\n copy(step.encodes.final) ||\n Object.keys(step.encodes).reduce((acc, key) => {\n acc[key] = step.encodes[key].final;\n return acc;\n }, {});\n }\n lastState.styleEncode = step.styleEncodes ? step.styleEncodes.final : undefined;\n lastState.signal = step.signals ? step.signals.final : undefined;\n lastState.scale = step.scales ? step.scales.final : undefined;\n lastState.marktype = step.marktypes ? step.marktypes.final : undefined;\n lastState.hasFacet = step.hasFacet ? step.hasFacet.final : undefined;\n lastState.aggregate = step.aggregates ? step.aggregates.final : undefined;\n lastState.isAdd = step.isAdd;\n lastState.isRemove = step.isRemove;\n lastState.sameDomainDimension = step.sameDomainDimension;\n\n state.spec = updateSpec(state, step, newRawInfo.eVis.spec);\n\n // Catch if scale < data for encodes using scales\n\n if (step.compType === \"mark\") {\n let valid = schedule.find(track => track.name === step.trackName)\n .scaleOrderValid;\n valid = valid === undefined ? true : valid;\n\n Object.keys(lastState.encode.update).map(prop => {\n const foundScale =\n lastState.scale[lastState.encode.update[prop].scale];\n\n if (foundScale && lastState.encode.update[prop].field) {\n const { field } = lastState.encode.update[prop];\n let vals = lastState.data.map(d => d.datum[field]);\n\n if (lastState.data[0].mark.marktype === \"group\") {\n vals = lastState.data.reduce((vals, d) => {\n return vals.concat(d.items[0].items.map(d2 => d2.datum[field]));\n }, []);\n }\n\n const scaleDomain = foundScale.domain();\n if (foundScale.type === \"band\" || foundScale.type === \"point\") {\n valid =\n valid &&\n vals.reduce(\n (acc, v) => (acc = acc && scaleDomain.indexOf(v) >= 0),\n true\n );\n } else if (foundScale.type === \"linear\") {\n const max = Math.max(...vals);\n const min = Math.min(...vals);\n valid = valid && scaleDomain[0] <= min && scaleDomain[1] >= max;\n }\n }\n });\n schedule.find(\n track => track.name === step.trackName\n ).scaleOrderValid = valid;\n }\n });\n moment.starting.forEach(step => {\n const lastState = state[step.trackName];\n if (get(step, \"enumerator\")) {\n if (step.compType === \"mark\") {\n // fetch enumerator\n step.enumeratorDef = step.enumerator;\n const enumerator = (step.enumerator = new Enumerator(\n step.enumerator,\n state.spec,\n rawInfo\n ));\n // let dataName = (step.change.final || step.change.final).from.data;\n let dataName = step.compName;\n\n let key =\n (Array.isArray(step.change.data)\n ? step.change.data\n : step.change.data.keys) || null;\n if (\n computeHasFacet(step.change.initial) &&\n computeHasFacet(step.change.final)\n ) {\n key = (step.change.final || step.change.final).parent.from.facet\n .groupby;\n dataName = (step.change.final || step.change.final).parent.name;\n }\n let extractData = view => view.data(dataName);\n if (\n !computeHasFacet(step.change.initial) &&\n !computeHasFacet(step.change.final) &&\n isGroupingMarktype(step.change.initial) &&\n isGroupingMarktype(step.change.final)\n ) {\n extractData = view => {\n const data = view._runtime.data[dataName].values.value;\n return [\n {\n datum: {},\n mark: { role: \"group\", marktype: \"group\" },\n items: [{ items: data }]\n }\n ];\n };\n }\n enumerator.joinData(extractData, (d, i) => {\n if (Array.isArray(key)) {\n return key\n .map(field => {\n return d.datum[field];\n })\n .join(\"-\");\n }\n return i.toString();\n });\n\n // Check if scale < data\n for (let i = 1; i < enumerator.stopN - 1; i++) {\n let scale = scName => lastState.scale[scName];\n if (step.change.scale) {\n scale = enumerator._getScales(i);\n }\n const data = enumerator.getData(i);\n let valid = schedule.find(track => track.name === step.trackName)\n .scaleOrderValid;\n valid = valid === undefined ? true : valid;\n Object.keys(lastState.encode.update).map(prop => {\n const foundScale = scale(lastState.encode.update[prop].scale);\n\n if (foundScale && lastState.encode.update[prop].field) {\n const { field } = lastState.encode.update[prop];\n const scaleDomain = foundScale.domain();\n let vals = data.map(d => d[field]);\n\n if (data[0].mark.marktype === \"group\") {\n vals = data.reduce((vals, d) => {\n return vals.concat(\n d.items[0].items.map(d2 => d2.datum[field])\n );\n }, []);\n }\n\n if (foundScale.type === \"band\" || foundScale.type === \"point\") {\n valid =\n valid &&\n vals.reduce(\n (acc, v) => (acc = acc && scaleDomain.indexOf(v) >= 0),\n true\n );\n } else if (foundScale.type === \"linear\") {\n const max = Math.max(...vals);\n const min = Math.min(...vals);\n valid =\n valid && scaleDomain[0] <= min && scaleDomain[1] >= max;\n }\n }\n });\n schedule.find(\n track => track.name === step.trackName\n ).scaleOrderValid = valid;\n }\n } else if (step.compType === \"axis\") {\n step.enumeratorDef = step.enumerator;\n step.enumerator = [\"tick\", \"label\", \"grid\"].reduce((acc, subComp) => {\n const enumerator = new Enumerator(\n step.enumerator,\n state.spec,\n rawInfo\n );\n const scName = step.compName;\n enumerator.joinData(\n view => {\n return view\n .data(scName)[0]\n .items.filter(item => item.role === `axis-${subComp}`)[0]\n .items;\n },\n d => d.datum.value.toString()\n );\n acc[subComp] = enumerator;\n return acc;\n }, {});\n } else if (step.compType === \"legend\") {\n step.enumeratorDef = step.enumerator;\n let legendEnumDefs = [];\n if (\n step.change.initial.type === \"gradient\" &&\n step.change.initial.type === \"gradient\"\n ) {\n const subComps = step.change.initial.isBand\n ? [\"bands\", \"labels\"]\n : [\"labels\"];\n legendEnumDefs = subComps.map(subComp => {\n return {\n subComp,\n extractData: view => {\n const entryG = view._runtime.data[\n step.compName\n ].values.value[0].items.find(\n item => item.role === \"legend-entry\"\n ).items[0];\n return entryG.items.find(\n item => item.role === `legend-${subComp.replace(/s$/g, \"\")}`\n ).items;\n },\n identifyDatum: d => d.datum.value.toString()\n };\n });\n } else if (\n step.change.initial.type === \"symbol\" &&\n step.change.initial.type === \"symbol\"\n ) {\n legendEnumDefs.push({\n subComp: \"pairs\",\n extractData: view => {\n return view._runtime.data[\n step.compName\n ].values.value[0].items.find(\n item => item.role === \"legend-entry\"\n ).items[0].items[0].items;\n },\n identifyDatum: d => {\n const { datum } = d.items.find(\n item => item.role === \"legend-label\"\n ).items[0];\n return datum.value.toString();\n }\n });\n\n legendEnumDefs.push({\n subComp: \"labels\",\n extractData: view => {\n const pairs = view._runtime.data[\n step.compName\n ].values.value[0].items.find(\n item => item.role === \"legend-entry\"\n ).items[0].items[0].items;\n return pairs.map(pair => {\n return pair.items.find(item => item.role === \"legend-label\")\n .items[0];\n });\n },\n identifyDatum: d => d.datum.value.toString()\n });\n\n legendEnumDefs.push({\n subComp: \"symbols\",\n extractData: view => {\n const pairs = view._runtime.data[\n step.compName\n ].values.value[0].items.find(\n item => item.role === \"legend-entry\"\n ).items[0].items[0].items;\n return pairs.map(pair => {\n return pair.items.find(item => item.role === \"legend-symbol\")\n .items[0];\n });\n },\n identifyDatum: d => d.datum.value.toString()\n });\n } else {\n console.error(\n \"Cannot enumerate the changes when the legend type changes.\"\n );\n }\n step.enumerator = legendEnumDefs.reduce((acc, enumDef) => {\n const enumerator = new Enumerator(\n step.enumerator,\n state.spec,\n rawInfo\n );\n enumerator.joinData(enumDef.extractData, enumDef.identifyDatum);\n acc[enumDef.subComp] = enumerator;\n return acc;\n }, {});\n }\n }\n });\n });\n\n return schedule;\n}\n\nfunction initializeState(schedule, rawInfo) {\n const sView = rawInfo.sVis.view;\n const sSpec = rawInfo.sVis.spec;\n const sComps = getComponents(sSpec);\n const initialState = {\n spec: copy(sSpec)\n };\n return schedule.reduce((initialState, track) => {\n // Todo: some scales can be hidden in _runtime._subcontext\n const compState = {\n scale: {},\n signal: {\n width: sView.signal(\"width\"),\n height: sView.signal(\"height\"),\n padding: sView.signal(\"padding\")\n }\n };\n\n if (track.compType === \"mark\") {\n const sComp = sComps.find(c => c.name === track.compName);\n\n if (sComp) {\n compState.marktype = sComp.type;\n compState.hasFacet = computeHasFacet(sComp);\n compState.styleEncode = sComp.style ? DEFAULT_STYLE[sComp.style] : {};\n\n compState.encode = copy(sComp.encode || {});\n const baseEncode = Object.assign(\n {},\n DEFAULT_ENCODE.mark[compState.marktype].update,\n sComp.style ? DEFAULT_STYLE[sComp.style] : {}\n );\n compState.encode.update = Object.assign(\n baseEncode,\n compState.encode.update\n );\n compState.encode.exit = copy(compState.encode.update);\n compState.encode.enter = Object.assign(\n {},\n compState.encode.update,\n DEFAULT_ENCODE.mark.enter\n );\n\n sComps\n .filter(comp => comp.compType === \"scale\")\n .forEach(scale => {\n compState.scale[scale.name] = sView.scale(scale.name);\n });\n } else {\n compState.encode = {};\n compState.styleEncode = {};\n }\n compState.aggregate = getAggregate(\n track.steps[0].change,\n rawInfo\n ).initial;\n // compState.aggregate.done = false;\n } else if (track.compType === \"axis\") {\n // for axis comp\n const sComp = sComps.find(\n c => c.compType === \"axis\" && c.encode.axis.name === track.compName\n );\n\n if (track.steps[0].change.initial) {\n compState.scale[sComp.scale] = sView.scale(sComp.scale);\n }\n\n compState.encode = sComp ? copy(sComp.encode || {}) : {};\n const axisGDatumInitial = sComp\n ? findComp(sView.scenegraph().root, track.compName, \"axis\")[0].items[0]\n : undefined;\n compState.encode.axis = axisGDatumInitial\n ? {\n update: {\n x: { value: axisGDatumInitial.x },\n y: { value: axisGDatumInitial.y }\n }\n }\n : {};\n } else if (track.compType === \"legend\") {\n // for axis comp\n\n const sComp = sComps.find(\n c => c.compType === \"legend\" && c.encode.legend.name === track.compName\n );\n compState.legendType = undefined;\n if (track.steps[0].change.initial) {\n compState.legendType = track.steps[0].change.initial.type;\n [\n \"fill\",\n \"opacity\",\n \"shape\",\n \"size\",\n \"stroke\",\n \"strokeDash\",\n \"strokeWidth\"\n ].forEach(channel => {\n const scName = track.steps[0].change.initial[channel];\n if (scName) {\n compState.scale[scName] = sView.scale(scName);\n }\n });\n }\n\n compState.encode = sComp ? copy(sComp.encode || {}) : {};\n } else if (track.compType === \"view\") {\n const iRootDatum = sView._runtime.data.root.values.value[0];\n const { initial } = track.steps[0].change;\n compState.encode = {\n svg: {\n x: { value: initial.x + initial.padding },\n y: { value: initial.y + initial.padding },\n width: { value: initial.viewWidth + initial.padding * 2 },\n height: { value: initial.viewHeight + initial.padding * 2 }\n },\n root: {\n width: { value: initial.width },\n height: { value: initial.height },\n fill: { value: iRootDatum.fill },\n stroke: { value: iRootDatum.stroke }\n }\n };\n }\n initialState[track.name] = compState;\n return initialState;\n }, initialState);\n}\n\nfunction updateSpec(lastState, lastStep, eSpec) {\n const updatedSpec = copy(lastState.spec);\n if (lastStep.compType === \"mark\") {\n const lastMarkComp = lastStep.change.final;\n // If the markComp is facetted, its parent mark should be updated.\n const compName = computeHasFacet(lastMarkComp)\n ? lastMarkComp.parent.name\n : lastStep.compName;\n if (!lastMarkComp && compName && lastStep.change.data) {\n // Remove the mark\n const old = updatedSpec.marks.findIndex(mark => mark.name === compName);\n updatedSpec.marks.splice(old, 1);\n } else {\n const old = findMark(updatedSpec.marks, compName);\n if (!old) {\n updatedSpec.marks.push(findMark(eSpec.marks, compName));\n } else {\n const dataName = computeHasFacet(lastMarkComp)\n ? lastMarkComp.parent.from.facet.data\n : lastMarkComp.from.data;\n if (lastStep.change.data) {\n // update data source\n const old = updatedSpec.data.findIndex(\n data => data.name === dataName\n );\n if (old >= 0) {\n updatedSpec.data.splice(old, 1, copy(findData(eSpec, dataName)));\n } else {\n const newI = eSpec.data.findIndex(data => data.name === dataName);\n updatedSpec.data.splice(newI, 0, copy(findData(eSpec, dataName)));\n }\n }\n old.encode.update = lastState[lastStep.trackName].encode.update;\n }\n }\n } else if (lastStep.compType === \"axis\") {\n // console.log(lastStep.compName);\n const old = updatedSpec.axes.findIndex(\n axis =>\n axis.encode &&\n axis.encode.axis &&\n axis.encode.axis.name === lastStep.compName\n );\n if (old >= 0) {\n updatedSpec.axes.splice(old, 1);\n }\n let newAxis;\n if (\n (newAxis = eSpec.axes.find(\n axis =>\n axis.encode &&\n axis.encode.axis &&\n axis.encode.axis.name === lastStep.compName\n ))\n ) {\n updatedSpec.axes.push(newAxis);\n }\n } else if (lastStep.compType === \"legend\") {\n const old = updatedSpec.legends\n ? updatedSpec.legends.findIndex(\n legend =>\n legend.encode &&\n legend.encode.legend &&\n legend.encode.legend.name === lastStep.compName\n )\n : -1;\n if (old >= 0) {\n updatedSpec.legends.splice(old, 1);\n }\n\n const newLegend = eSpec.legends\n ? eSpec.legends.find(\n legend =>\n legend.encode &&\n legend.encode.legend &&\n legend.encode.legend.name === lastStep.compName\n )\n : undefined;\n if (newLegend) {\n if (updatedSpec.legends) {\n updatedSpec.legends.push(newLegend);\n } else {\n updatedSpec.legends = [newLegend];\n }\n }\n }\n return updatedSpec;\n}","// https://github.com/vega/vega/blob/master/packages/vega-scenegraph/src/util/text.js\nfunction textOffset(item) {\n // perform our own font baseline calculation\n // why? not all browsers support SVG 1.1 'alignment-baseline' :(\n const { baseline } = item;\n const h = fontSize(item);\n switch (baseline) {\n case \"top\":\n return 0.79 * h;\n case \"middle\":\n return 0.3 * h;\n case \"bottom\":\n return -0.21 * h;\n case \"line-top\":\n return 0.29 * h + 0.5 * lineHeight(item);\n case \"line-bottom\":\n return 0.29 * h - 0.5 * lineHeight(item);\n default:\n return 0;\n }\n}\n\nfunction fontSize(item) {\n return item.fontSize != null ? +item.fontSize || 0 : 11;\n}\n\nfunction lineHeight(item) {\n return item.lineHeight != null ? item.lineHeight : fontSize(item) + 2;\n}\n\nfunction getStyle(attr) {\n switch (attr) {\n case \"font\":\n return \"font-family\";\n case \"fontSize\":\n return \"font-size\";\n case \"fontStyle\":\n return \"font-style\";\n case \"fontVariant\":\n return \"font-variant\";\n case \"fontWeight\":\n return \"font-weight\";\n case \"strokeWidth\":\n return \"stroke-width\";\n case \"strokeDasharray\":\n return \"stroke-dasharray\";\n }\n return attr;\n}\n\nfunction setTextAnchor(d3Selection, fn) {\n const textAnchor = {\n left: \"start\",\n center: \"middle\",\n right: \"end\"\n };\n d3Selection.attr(\"text-anchor\", d => textAnchor[fn(d)]);\n}\n\nfunction transformItem(item) {\n return `translate(${item.x || 0}, ${item.y || 0})${\n item.angle ? ` rotate(${item.angle})` : \"\"\n }`;\n}\n\nexport { textOffset, getStyle, setTextAnchor, transformItem };\n","import * as d3 from \"d3\";\n// Modify d3-interpolate-path (https://github.com/pbeshai/d3-interpolate-path) package by **.\n\n/**\n * List of params for each command type in a path `d` attribute\n */\nconst typeMap = {\n M: [\"x\", \"y\"],\n L: [\"x\", \"y\"],\n H: [\"x\"],\n V: [\"y\"],\n C: [\"x1\", \"y1\", \"x2\", \"y2\", \"x\", \"y\"],\n S: [\"x2\", \"y2\", \"x\", \"y\"],\n Q: [\"x1\", \"y1\", \"x\", \"y\"],\n T: [\"x\", \"y\"],\n A: [\"rx\", \"ry\", \"xAxisRotation\", \"largeArcFlag\", \"sweepFlag\", \"x\", \"y\"]\n};\n\n/**\n * Convert to object representation of the command from a string\n *\n * @param {String} commandString Token string from the `d` attribute (e.g., L0,0)\n * @return {Object} An object representing this command.\n */\nfunction commandObject(commandString) {\n // convert all spaces to commas\n commandString = commandString.trim().replace(/ /g, \",\");\n\n const type = commandString[0];\n const args = commandString.substring(1).split(\",\");\n return typeMap[type.toUpperCase()].reduce(\n (obj, param, i) => {\n // parse X as float since we need it to do distance checks for extending points\n obj[param] = [\"x\", \"y\"].indexOf(param) >= 0 ? parseFloat(args[i]) : args[i];\n return obj;\n },\n { type }\n );\n}\n\n/**\n * Converts a command object to a string to be used in a `d` attribute\n * @param {Object} command A command object\n * @return {String} The string for the `d` attribute\n */\nfunction commandToString(command) {\n const { type } = command;\n const params = typeMap[type.toUpperCase()];\n return `${type}${params.map(p => command[p]).join(\",\")}`;\n}\n\n/**\n * Converts command A to have the same type as command B.\n *\n * e.g., L0,5 -> C0,5,0,5,0,5\n *\n * Uses these rules:\n * x1 <- x\n * x2 <- x\n * y1 <- y\n * y2 <- y\n * rx <- 0\n * ry <- 0\n * xAxisRotation <- read from B\n * largeArcFlag <- read from B\n * sweepflag <- read from B\n *\n * @param {Object} aCommand Command object from path `d` attribute\n * @param {Object} bCommand Command object from path `d` attribute to match against\n * @return {Object} aCommand converted to type of bCommand\n */\nfunction convertToSameType(aCommand, bCommand) {\n const conversionMap = {\n x1: \"x\",\n y1: \"y\",\n x2: \"x\",\n y2: \"y\"\n };\n\n const readFromBKeys = [\"xAxisRotation\", \"largeArcFlag\", \"sweepFlag\"];\n\n // convert (but ignore M types)\n if (aCommand.type !== bCommand.type && bCommand.type.toUpperCase() !== \"M\") {\n const aConverted = {};\n Object.keys(bCommand).forEach(bKey => {\n const bValue = bCommand[bKey];\n // first read from the A command\n let aValue = aCommand[bKey];\n\n // if it is one of these values, read from B no matter what\n if (aValue === undefined) {\n if (readFromBKeys.includes(bKey)) {\n aValue = bValue;\n } else {\n // if it wasn't in the A command, see if an equivalent was\n if (aValue === undefined && conversionMap[bKey]) {\n aValue = aCommand[conversionMap[bKey]];\n }\n\n // if it doesn't have a converted value, use 0\n if (aValue === undefined) {\n aValue = 0;\n }\n }\n }\n\n aConverted[bKey] = aValue;\n });\n\n // update the type to match B\n aConverted.type = bCommand.type;\n aCommand = aConverted;\n }\n\n return aCommand;\n}\n\n/**\n * Extends an array of commands to the length of the second array\n * inserting points at the spot that is closest by X value. Ensures\n * all the points of commandsToExtend are in the extended array and that\n * only numPointsToExtend points are added.\n *\n * @param {Object[]} commandsToExtend The commands array to extend\n * @param {Object[]} referenceCommands The commands array to match\n * @return {Object[]} The extended commands1 array\n */\nfunction extend(commandsToExtend, referenceCommands, numPointsToExtend) {\n // map each command in B to a command in A by counting how many times ideally\n // a command in A was in the initial path (see https://github.com/pbeshai/d3-interpolate-path/issues/8)\n let initialCommandIndex;\n if (commandsToExtend.length > 1 && commandsToExtend[0].type === \"M\") {\n initialCommandIndex = 1;\n } else {\n initialCommandIndex = 0;\n }\n\n const counts = referenceCommands.reduce((counts, refCommand, i) => {\n // skip first M\n if (i === 0 && refCommand.type === \"M\") {\n counts[0] = 1;\n return counts;\n }\n\n let minDistance = Math.abs(\n commandsToExtend[initialCommandIndex].x - refCommand.x\n );\n let minCommand = initialCommandIndex;\n\n // find the closest point by X position in A\n for (let j = initialCommandIndex + 1; j < commandsToExtend.length; j++) {\n const distance = Math.abs(commandsToExtend[j].x - refCommand.x);\n if (distance < minDistance) {\n minDistance = distance;\n minCommand = j;\n // since we assume sorted by X, once we find a value farther, we can return the min.\n } else {\n break;\n }\n }\n\n counts[minCommand] = (counts[minCommand] || 0) + 1;\n return counts;\n }, {});\n\n // now extend the array adding in at the appropriate place as needed\n const extended = [];\n let numExtended = 0;\n for (let i = 0; i < commandsToExtend.length; i++) {\n // add in the initial point for this A command\n extended.push(commandsToExtend[i]);\n\n for (let j = 1; j < counts[i] && numExtended < numPointsToExtend; j++) {\n const commandToAdd = Object.assign({}, commandsToExtend[i]);\n // don't allow multiple Ms\n if (commandToAdd.type === \"M\") {\n commandToAdd.type = \"L\";\n } else {\n // try to set control points to x and y\n if (commandToAdd.x1 !== undefined) {\n commandToAdd.x1 = commandToAdd.x;\n commandToAdd.y1 = commandToAdd.y;\n }\n\n if (commandToAdd.x2 !== undefined) {\n commandToAdd.x2 = commandToAdd.x;\n commandToAdd.y2 = commandToAdd.y;\n }\n }\n extended.push(commandToAdd);\n numExtended += 1;\n }\n }\n\n return extended;\n}\n\n/**\n * Extends an array of commands to the length of the second array\n * inserting points at the spot that is closest by X value. Ensures\n * all the points of commandsToExtend are in the extended array and that\n * only numPointsToExtend points are added.\n *\n * @param {Object[]} commandsToExtend The commands array to extend\n * @param {Object[]} referenceCommands The commands array to match\n * @return {Object[]} The extended commands1 array\n */\nfunction extend2(commandsToExtend, referenceCommands, numPointsToExtend, alongTo=\"x\") {\n // map each command in B to a command in A by counting how many times ideally\n // a command in A was in the initial path (see https://github.com/pbeshai/d3-interpolate-path/issues/8)\n let initialCommandIndex;\n if (commandsToExtend.length > 1 && commandsToExtend[0].type === \"M\") {\n initialCommandIndex = 1;\n } else {\n initialCommandIndex = 0;\n }\n let [m, subM] = alongTo === \"x\" ? [\"x\", \"y\"] : [\"y\", \"x\"];\n\n\n const counts = referenceCommands.reduce((counts, refCommand, i) => {\n // skip first M\n if (i === 0 && refCommand.type === \"M\") {\n counts[0] = 1;\n return counts;\n }\n\n let minDistance = Math.abs(\n commandsToExtend[initialCommandIndex][m] - refCommand[m]\n );\n let subMinDistance = Math.abs(\n commandsToExtend[initialCommandIndex][subM] - refCommand[subM]\n );\n let minCommand = initialCommandIndex;\n\n // find the closest point by X position in A\n for (let j = initialCommandIndex + 1; j < commandsToExtend.length; j++) {\n const distance = Math.abs(commandsToExtend[j][m] - refCommand[m]);\n const subDistance = Math.abs(commandsToExtend[j][subM] - refCommand[subM]);\n if (distance < minDistance) {\n minDistance = distance;\n minCommand = j;\n subMinDistance = subDistance;\n // since we assume sorted by X, once we find a value farther, we can return the min.\n } else if (distance === minDistance) {\n if (subDistance < subMinDistance) {\n minCommand = j;\n subMinDistance = subDistance;\n }\n } else {\n break;\n }\n }\n\n counts[minCommand] = (counts[minCommand] || 0) + 1;\n return counts;\n }, {});\n\n // now extend the array adding in at the appropriate place as needed\n const extended = [];\n let numExtended = 0;\n for (let i = 0; i < commandsToExtend.length; i++) {\n // add in the initial point for this A command\n extended.push(commandsToExtend[i]);\n\n for (let j = 1; j < counts[i] && numExtended < numPointsToExtend; j++) {\n const commandToAdd = Object.assign({}, commandsToExtend[i]);\n // don't allow multiple Ms\n if (commandToAdd.type === \"M\") {\n commandToAdd.type = \"L\";\n } else {\n // try to set control points to x and y\n if (commandToAdd.x1 !== undefined) {\n commandToAdd.x1 = commandToAdd.x;\n commandToAdd.y1 = commandToAdd.y;\n }\n\n if (commandToAdd.x2 !== undefined) {\n commandToAdd.x2 = commandToAdd.x;\n commandToAdd.y2 = commandToAdd.y;\n }\n }\n extended.push(commandToAdd);\n numExtended += 1;\n }\n }\n\n return extended;\n}\n\n/**\n * Interpolate from A to B by extending A and B during interpolation to have\n * the same number of points. This allows for a smooth transition when they\n * have a different number of points.\n *\n * Ignores the `Z` character in paths unless both A and B end with it.\n *\n * @param {String} a The `d` attribute for a path\n * @param {String} b The `d` attribute for a path\n */\nfunction interpolatePath(a, b, alongTo = \"x\") {\n // remove Z, remove spaces after letters as seen in IE\n const aNormalized =\n a == null ? \"\" : a.replace(/[Z]/gi, \"\").replace(/([MLCSTQAHV])\\s*/gi, \"$1\");\n const bNormalized =\n b == null ? \"\" : b.replace(/[Z]/gi, \"\").replace(/([MLCSTQAHV])\\s*/gi, \"$1\");\n const aPoints =\n aNormalized === \"\" ? [] : aNormalized.split(/(?=[MLCSTQAHV])/gi);\n const bPoints =\n bNormalized === \"\" ? [] : bNormalized.split(/(?=[MLCSTQAHV])/gi);\n\n // if both are empty, interpolation is always the empty string.\n if (!aPoints.length && !bPoints.length) {\n return function nullInterpolator() {\n return \"\";\n };\n }\n\n // if A is empty, treat it as if it used to contain just the first point\n // of B. This makes it so the line extends out of from that first point.\n if (!aPoints.length) {\n aPoints.push(bPoints[0]);\n\n // otherwise if B is empty, treat it as if it contains the first point\n // of A. This makes it so the line retracts into the first point.\n } else if (!bPoints.length) {\n bPoints.push(aPoints[0]);\n }\n\n // convert to command objects so we can match types\n let aCommands = aPoints.map(commandObject);\n let bCommands = bPoints.map(commandObject);\n\n // extend to match equal size\n const numPointsToExtend = Math.abs(bPoints.length - aPoints.length);\n\n if (numPointsToExtend !== 0) {\n // B has more points than A, so add points to A before interpolating\n if (bCommands.length > aCommands.length) {\n aCommands = extend2(aCommands, bCommands, numPointsToExtend, alongTo);\n\n // else if A has more points than B, add more points to B\n } else if (bCommands.length < aCommands.length) {\n bCommands = extend2(bCommands, aCommands, numPointsToExtend, alongTo);\n }\n }\n\n // commands have same length now.\n // convert A to the same type of B\n aCommands = aCommands.map((aCommand, i) =>\n convertToSameType(aCommand, bCommands[i])\n );\n\n let aProcessed = aCommands.map(commandToString).join(\"\");\n let bProcessed = bCommands.map(commandToString).join(\"\");\n\n // if both A and B end with Z add it back in\n if (\n (a == null || a[a.length - 1] === \"Z\") &&\n (b == null || b[b.length - 1] === \"Z\")\n ) {\n aProcessed += \"Z\";\n bProcessed += \"Z\";\n }\n\n const stringInterpolator = d3.interpolateString(aProcessed, bProcessed);\n\n return function pathInterpolator(t) {\n // at 1 return the final value without the extensions used during interpolation\n if (t === 1) {\n return b == null ? \"\" : b;\n }\n\n return stringInterpolator(t);\n };\n}\n\n// a -> a + reverse(a) so that the line is closed.\nfunction lineToArea(a) {\n const aNormalized =\n a == null ? \"\" : a.replace(/[Z]/gi, \"\").replace(/([MLCSTQAHV])\\s*/gi, \"$1\");\n const aPoints =\n aNormalized === \"\" ? [] : aNormalized.split(/(?=[MLCSTQAHV])/gi);\n\n if (aPoints.length <= 0) {\n return \"\";\n }\n\n // convert to command objects so we can match types\n const aCommands = aPoints.map(commandObject);\n const reversed = aPoints.map(commandObject).reverse();\n if (reversed[reversed.length - 1].type == \"M\") {\n reversed[reversed.length - 1].type = reversed[reversed.length - 2].type;\n }\n return `${aCommands\n .concat(reversed)\n .map(commandToString)\n .join(\"\")}Z`;\n}\n/**\n * Interpolate from A to B by extending A and B during interpolation to have\n * the same number of points. This allows for a smooth transition when they\n * have a different number of points.\n *\n * Ignores the `Z` character in paths unless both A and B end with it.\n *\n * @param {String} a The `d` attribute for a path\n * @param {String} b The `d` attribute for a path\n */\nfunction interpolatePath2(a, b, alongTo = \"x\") {\n // remove Z, remove spaces after letters as seen in IE\n const aNormalized =\n a == null ? \"\" : a.replace(/[Z]/gi, \"\").replace(/([MLCSTQAHV])\\s*/gi, \"$1\");\n const bNormalized =\n b == null ? \"\" : b.replace(/[Z]/gi, \"\").replace(/([MLCSTQAHV])\\s*/gi, \"$1\");\n const aPoints =\n aNormalized === \"\" ? [] : aNormalized.split(/(?=[MLCSTQAHV])/gi);\n const bPoints =\n bNormalized === \"\" ? [] : bNormalized.split(/(?=[MLCSTQAHV])/gi);\n\n // if both are empty, interpolation is always the empty string.\n if (!aPoints.length && !bPoints.length) {\n return function nullInterpolator() {\n return \"\";\n };\n }\n\n // if A is empty, treat it as if it used to contain just the first point\n // of B. This makes it so the line extends out of from that first point.\n if (!aPoints.length) {\n aPoints.push(bPoints[0]);\n\n // otherwise if B is empty, treat it as if it contains the first point\n // of A. This makes it so the line retracts into the first point.\n } else if (!bPoints.length) {\n bPoints.push(aPoints[0]);\n }\n\n // convert to command objects so we can match types\n const aCommands = aPoints.map(commandObject);\n const bCommands = bPoints.map(commandObject);\n let hasZ = false;\n if (\n (a == null || a[a.length - 1] === \"Z\") &&\n (b == null || b[b.length - 1] === \"Z\")\n ) {\n hasZ = true;\n }\n\n // get tail\n // get head\n // concat tail + body + head\n const aExtent = d3.extent(aCommands, c => c[alongTo]);\n const bExtent = d3.extent(bCommands, c => c[alongTo]);\n if (alongTo === \"x\") {\n const aHeadI = aCommands.findIndex(c => c[alongTo] === aExtent[1]);\n const bHeadI = bCommands.findIndex(c => c[alongTo] === bExtent[1]);\n\n const aTop = aCommands.slice(0, aHeadI + 1);\n const bTop = bCommands.slice(0, bHeadI + 1);\n const aBottom = aCommands.slice(aHeadI + 1).reverse();\n const bBottom = bCommands.slice(bHeadI + 1).reverse();\n const hasBottom = aBottom.length > 0 && bBottom.length > 0;\n\n return t => {\n if (t === 1) {\n return b === null ? \"\" : b;\n }\n return (\n interpolateOutline(aTop, bTop, aExtent, bExtent)(t) +\n (hasBottom\n ? interpolateOutline(aBottom, bBottom, aExtent, bExtent, true, true)(t)\n : \"\") +\n (hasZ ? \"Z\" : \"\")\n );\n };\n } else {\n const aHeadI = aCommands.findIndex(c => c[alongTo] === aExtent[0]);\n const bHeadI = bCommands.findIndex(c => c[alongTo] === bExtent[0]);\n\n const aTop = aCommands.slice(0, aHeadI + 1).reverse();\n const bTop = bCommands.slice(0, bHeadI + 1).reverse();\n const aBottom = aCommands.slice(aHeadI + 1);\n const bBottom = bCommands.slice(bHeadI + 1);\n const hasBottom = aBottom.length > 0 && bBottom.length > 0;\n\n return t => {\n if (t === 1) {\n return b === null ? \"\" : b;\n }\n return (\n interpolateOutline(aTop, bTop, aExtent, bExtent, true)(t) +\n (hasBottom\n ? interpolateOutline(aBottom, bBottom, aExtent, bExtent, false, true)(t)\n : \"\") +\n (hasZ ? \"Z\" : \"\")\n );\n };\n }\n\n function interpolateOutline(\n aCommands,\n bCommands,\n aExtent,\n bExtent,\n reverse,\n isBottom = false\n ) {\n let head;\n let tail;\n let body;\n if (aExtent[1] < bExtent[0] || aExtent[0] > bExtent[1]) {\n // just interpolate\n body = getBody(aCommands, bCommands, reverse);\n } else {\n if (aExtent[1] > bExtent[1]) {\n // shrink head\n const i = aCommands.findIndex(c => c[alongTo] > bExtent[1]);\n head = getHead(aCommands.slice(i - 1), reverse, true, isBottom);\n } else if (aExtent[1] < bExtent[1]) {\n // extend head\n const i = bCommands.findIndex(c => c[alongTo] > aExtent[1]);\n head = getHead(bCommands.slice(i - 1), reverse, false, isBottom);\n }\n\n if (aExtent[0] < bExtent[0]) {\n // shrink tail\n const i = aCommands.findIndex(c => c[alongTo] >= bExtent[0]);\n tail = getTail(aCommands.slice(0, i + 1), reverse, true, isBottom);\n } else if (aExtent[0] > bExtent[0]) {\n // extend tail\n const i = bCommands.findIndex(c => c[alongTo] >= aExtent[0]);\n tail = getTail(bCommands.slice(0, i + 1), reverse, false, isBottom);\n // tail = getTail(bCommands.filter(c => c[alongTo] < aExtent[0]), false);\n }\n\n const bodyMin = Math.max(aExtent[0], bExtent[0]);\n const bodyMax = Math.min(aExtent[1], bExtent[1]);\n // get body\n body = getBody(\n aCommands.filter(c => c[alongTo] >= bodyMin && c[alongTo] <= bodyMax ),\n bCommands.filter(c => c[alongTo] >= bodyMin && c[alongTo] <= bodyMax ),\n reverse,\n !isBottom && ((reverse && !head) || (!reverse && !tail))\n );\n }\n if (reverse) {\n return t => {\n return (head ? head(t) : \"\") + body(t) + (tail ? tail(t) : \"\");\n };\n } else {\n return t => {\n return (tail ? tail(t) : \"\") + body(t) + (head ? head(t) : \"\");\n };\n }\n\n }\n\n function getBody(aCommands, bCommands, reverse = false, isTail = false) {\n // extend to match equal size\n const numPointsToExtend = Math.abs(bCommands.length - aCommands.length);\n if (aCommands.length <= 1 && bCommands.length <= 1) {\n return t => \"\";\n }\n if (numPointsToExtend !== 0) {\n // B has more points than A, so add points to A before interpolating\n if (bCommands.length > aCommands.length) {\n aCommands = extend(aCommands, bCommands, numPointsToExtend);\n\n // else if A has more points than B, add more points to B\n } else if (bCommands.length < aCommands.length) {\n bCommands = extend(bCommands, aCommands, numPointsToExtend);\n }\n }\n\n // commands have same length now.\n // convert A to the same type of B\n aCommands = aCommands.map((aCommand, i) =>\n convertToSameType(aCommand, bCommands[i])\n );\n aCommands = (reverse ? aCommands.reverse() : aCommands);\n bCommands = (reverse ? bCommands.reverse() : bCommands);\n if (isTail) {\n aCommands[0] = Object.assign({}, aCommands[0], { type: \"M\" });\n bCommands[0] = Object.assign({}, bCommands[0], { type: \"M\" });\n }\n const aProcessed = aCommands\n .map(commandToString)\n .join(\"\");\n const bProcessed = bCommands\n .map(commandToString)\n .join(\"\");\n\n const stringInterpolator = d3.interpolateString(aProcessed, bProcessed);\n\n return function pathInterpolator(t) {\n // at 1 return the final value without the extensions used during interpolation\n if (t === 1) {\n return bProcessed == null ? \"\" : bProcessed;\n }\n\n return stringInterpolator(t);\n };\n }\n\n function getHead(commands, reverse = false, isShrink = false, isBottom=false) {\n const d = commands.map(commandToString).join(\"\");\n const L = commands.length;\n const phases = [];\n const debug = [];\n for (let i = 1; i <= L - 1; i++) {\n let aCommands = commands.slice(0, i).concat([commands[i - 1]]);\n let bCommands = commands.slice(0, i + 1);\n aCommands = (reverse ? aCommands.reverse() : aCommands);\n bCommands = (reverse ? bCommands.reverse() : bCommands);\n const aProcessed = aCommands\n .map(commandToString)\n .join(\"\");\n const bProcessed = bCommands\n .map(commandToString)\n .join(\"\");\n if (reverse && !isBottom) {\n aCommands[0] = Object.assign({}, aCommands[0], { type: \"M\" });\n bCommands[0] = Object.assign({}, bCommands[0], { type: \"M\" });\n }\n debug.push({ aProcessed, bProcessed });\n phases.push(function(t) {\n return d3.interpolateString(aProcessed, bProcessed)(t);\n });\n }\n\n return function(t) {\n if (isShrink) {\n t = 1 - t;\n }\n if (t === 1) {\n return d == null ? \"\" : d;\n }\n const phase = Math.floor(t * (L - 1));\n\n return phases[phase](t * (L - 1) - phase);\n };\n }\n\n function getTail(commands, reverse = false, isShrink = false, isBottom=false) {\n const d = commands.map(commandToString).join(\"\");\n const L = commands.length;\n const phases = [];\n for (let i = 1; i < L; i++) {\n let aCommands = [commands[L - i]].concat(commands.slice(L - i, L));\n let bCommands = commands.slice(L - i - 1, L);\n\n aCommands = (reverse ? aCommands.reverse() : aCommands);\n bCommands = (reverse ? bCommands.reverse() : bCommands);\n\n if (!reverse && !isBottom) {\n aCommands[0] = Object.assign({}, aCommands[0], { type: \"M\" });\n bCommands[0] = Object.assign({}, bCommands[0], { type: \"M\" });\n }\n\n const aProcessed = aCommands\n .map(commandToString)\n .join(\"\");\n const bProcessed = bCommands\n .map(commandToString)\n .join(\"\");\n\n phases.push(function(t) {\n return d3.interpolateString(aProcessed, bProcessed)(t);\n });\n }\n return function(t) {\n if (isShrink) {\n t = 1 - t;\n }\n if (t === 1) {\n return d == null ? \"\" : d;\n }\n const phase = Math.floor(t * (L - 1));\n return phases[phase](t * (L - 1) - phase);\n };\n }\n}\n\nexport { interpolatePath, interpolatePath2, lineToArea };\n","/* eslint-disable camelcase */\nimport * as d3 from \"d3\";\nimport { interpolatePath, interpolatePath2 } from \"./interpolatePathYH\";\nimport {get} from \"../../util/util\";\n\n\n\n\nfunction rectInterpolator(scales, encodes, signals, d, oldD, getRect) {\n let path_i;\n let path_f;\n const d_i = d.initial || oldD || d3.select(this).datum();\n const d_f = d.final || d;\n const encode_i = encodes.initial || encodes;\n const encode_f = encodes.final || encodes;\n const scale_i = {\n primary: scales.initial || scales,\n secondary: scales.final || scales\n };\n const scale_f = {\n primary: scales.final || scales,\n secondary: scales.initial || scales\n };\n const signal_i = signals.initial || signals;\n const signal_f = signals.final || signals;\n\n path_i = getRect(d_i, scale_i, encode_i, signal_i).path;\n path_f = getRect(d_f, scale_f, encode_f, signal_f).path;\n\n return interpolatePath(path_i, path_f);\n}\nfunction symbolInterpolator(scales, encodes, signals, d, oldD, getShape) {\n let shape_i;\n let shape_f;\n let shape_i_diminished;\n let shape_f_diminished;\n const d_i = d.initial || oldD || d3.select(this).datum();\n const d_f = d.final || d;\n const encode_i = encodes.initial || encodes;\n const encode_f = encodes.final || encodes;\n const scale_i = scales.initial || scales;\n const scale_f = scales.final || scales;\n const signal_i = signals.initial || signals;\n const signal_f = signals.final || signals;\n let isMorph = false;\n\n shape_i = getShape(d_i, scale_i, encode_i, signal_i);\n shape_f = getShape(d_f, scale_f, encode_f, signal_f);\n if (shape_i.meta.shape !== shape_f.meta.shape) {\n isMorph = true;\n shape_i_diminished = getShape(d_i, scale_i, encode_i, signal_i, true);\n shape_f_diminished = getShape(d_f, scale_f, encode_f, signal_f, true);\n }\n\n if (isMorph) {\n return t => {\n if (t < 0.5) {\n return interpolatePath(shape_i.path, shape_i_diminished.path)(t * 2);\n }\n return interpolatePath(\n shape_f_diminished.path,\n shape_f.path\n )((t - 0.5) * 2);\n };\n }\n return interpolatePath(shape_i.path, shape_f.path);\n}\n\nfunction areaLineInterpolatorWithScales(\n scales,\n encodes,\n marktypes,\n d,\n oldD,\n signals,\n getPath,\n interpolateStyle,\n alongTos\n) {\n const encode_i = encodes.initial || encodes;\n const encode_f = encodes.final || encodes;\n const marktype_i = marktypes.initial || marktypes;\n // const marktype_i = \"area\";\n const marktype_f = marktypes.final || marktypes;\n const scale_i = scales.initial || scales;\n const scale_f = scales.final || scales;\n const signal_i = signals.initial || signals;\n const signal_f = signals.final || signals;\n const d_i = d.initial || oldD;\n const d_f = d.final || d;\n const alongTo_i = alongTos.initial || alongTos;\n const alongTo_f = alongTos.final || alongTos;\n const paths_11 = getPath(areaLineDToData(d_i), scale_i, encode_i, signal_i, marktype_i, alongTo_i);\n const paths_12 = getPath(areaLineDToData(d_i), scale_f, encode_i, signal_i, marktype_i, alongTo_i);\n const paths_21 = getPath(areaLineDToData(d_f), scale_i, encode_f, signal_f, marktype_f, alongTo_f);\n const paths_22 = getPath(areaLineDToData(d_f), scale_f, encode_f, signal_f, marktype_f, alongTo_f);\n\n if (\n isValidPath(paths_11) &&\n isValidPath(paths_12) &&\n isValidPath(paths_21) &&\n isValidPath(paths_22)\n ) {\n const interpolator_scale1 = interpolatePath(paths_11, paths_12, alongTo_i);\n const interpolator_scale2 = interpolatePath(paths_21, paths_22, alongTo_f);\n const interpolator_data =\n interpolateStyle === \"update\" ? interpolatePath2 : interpolatePath;\n // interpolateStyle === \"update\" ? interpolatePath3 : interpolatePath;\n return t => {\n return interpolator_data(\n interpolator_scale1(t),\n interpolator_scale2(t),\n alongTo_i\n )(t);\n };\n }\n const interpolator_data =\n interpolateStyle === \"update\" ? interpolatePath2 : interpolatePath;\n // interpolateStyle === \"update\" ? interpolatePath3 : interpolatePath;\n\n return interpolator_data(paths_11, paths_22, alongTo_i);\n}\n\nfunction areaLineInterpolator(\n scales,\n encodes,\n marktypes,\n d,\n oldD,\n signals,\n getPath,\n interpolateStyle\n) {\n const marktype = typeof marktypes === \"string\" ? marktypes : undefined;\n\n if (marktype === \"line\") {\n const dataToPath = (data, scale, encode, signal) => {\n return getPath(data, scale, encode, signal, \"line\");\n };\n const computId = (encode, d) => {\n return !d\n ? undefined\n : [d.datum[encode.x.field], d.datum[encode.y.field]].join(\",\");\n };\n return computeLineInterpolator(\n areaLineDToData(d.initial || oldD),\n areaLineDToData(d.final || d),\n scales,\n encodes,\n signals,\n computId,\n dataToPath\n );\n // if (interpolateStyle === \"update\") {\n // const dataToPath = (data, scale, encode, signal) => {\n // return getPath(data, scale, encode, signal, \"line\");\n // };\n // const computId = (encode, d) => {\n // return !d\n // ? undefined\n // : [d.datum[encode.x.field], d.datum[encode.y.field]].join(\",\");\n // };\n // return computeLineInterpolator(\n // areaLineDToData(oldD),\n // areaLineDToData(d),\n // scales,\n // encodes,\n // signals,\n // computId,\n // dataToPath\n // );\n // }\n\n // return areaLineInterpolatorWithScales.bind(this)(\n // scales,\n // encodes,\n // \"line\",\n // d,\n // oldD,\n // signals,\n // getPath,\n // interpolateStyle\n // );\n }\n if (marktype === \"area\" || marktype === \"trail\") {\n const alongTos = {\n initial: get(encodes, \"initial\", \"orient\", \"value\") === \"horizontal\" ? \"y\": \"x\",\n final: get(encodes, \"final\", \"orient\", \"value\") === \"horizontal\" ? \"y\": \"x\"\n };\n return areaLineInterpolatorWithScales.bind(this)(\n scales,\n encodes,\n marktype,\n d,\n oldD,\n signals,\n getPath,\n interpolateStyle,\n alongTos\n );\n }\n\n // when the marktype changes between \"area\" and \"line\", assume the line as area.\n\n if (marktypes.initial === \"line\" && marktypes.final === \"area\") {\n let alongTo = get(encodes, \"final\", \"orient\", \"value\") === \"horizontal\" ? \"y\": \"x\";\n return areaLineInterpolatorWithScales.bind(this)(scales, encodes, \"area\", d, oldD, signals, getPath, interpolateStyle, alongTo);\n } else { // area -> line\n let alongTo = get(encodes, \"initial\", \"orient\", \"value\") === \"horizontal\" ? \"y\": \"x\";\n let linePaths = getPath(\n areaLineDToData(d.final || d),\n scales.final || scales,\n encodes.final || encodes,\n signals.final || signals,\n \"line\");\n let intp = areaLineInterpolatorWithScales.bind(this)(scales, encodes, \"area\", d, oldD, signals, getPath, interpolateStyle, alongTo);\n return (t) => {\n return t >= 1 ? linePaths : intp(t);\n };\n }\n}\n\nfunction areaLineDToData(d) {\n if (!d) {\n return undefined;\n }\n return d.mark.marktype !== \"group\" ? d.mark.items : d.items[0].items;\n}\n\n// Interpolate path(dataA, scaleA) -> path(dataB, scaleB)\nfunction computeLineInterpolator(\n dataA,\n dataB,\n scales,\n encodes,\n signals,\n computeId,\n getPath\n) {\n const t = Date.now();\n // 1) calculate two anchors between dataA and dataB\n const _encodes = encodes.initial && encodes.final ? encodes : {\n initial: encodes,\n final: encodes\n };\n const computeIdA = d => computeId(_encodes.initial, d);\n const computeIdB = d => computeId(_encodes.final, d);\n const La = dataA.length;\n const Lb = dataB.length;\n let i = dataB.findIndex(d => computeIdB(d) === computeIdA(dataA[0]));\n let j = dataB.findIndex(d => computeIdB(d) === computeIdA(dataA[La - 1]));\n let head;\n let tail;\n let body;\n\n if (i >= 0) {\n if (j >= 0) {\n if (j < i) {\n body = getBody(dataA, dataB, scales, _encodes, signals, getPath);\n } else {\n tail = getTail(\n dataB.slice(0, i + 1),\n false,\n scales,\n _encodes,\n signals,\n getPath\n );\n body = getBody(\n dataA,\n dataB.slice(i, j + 1),\n scales,\n _encodes,\n signals,\n getPath,\n false\n );\n head = getHead(\n dataB.slice(j),\n false,\n scales,\n _encodes,\n signals,\n getPath\n );\n }\n } else if (\n (j = dataA.findIndex(d => computeIdA(d) === computeIdB(dataB[Lb - 1]))) >= 0\n ) {\n tail = getTail(\n dataB.slice(0, i + 1),\n false,\n scales,\n _encodes,\n signals,\n getPath\n );\n body = getBody(\n dataA.slice(0, j + 1),\n dataB.slice(i),\n scales,\n _encodes,\n signals,\n getPath,\n false\n );\n head = getHead(dataA.slice(j), true, scales, _encodes, signals, getPath);\n } else {\n body = getBody(dataA, dataB, scales, _encodes, signals, getPath);\n }\n } else if (j >= 0) {\n if (\n (i = dataA.findIndex(d => computeIdA(d) === computeIdB(dataB[0]))) >= 0\n ) {\n tail = getTail(\n dataA.slice(0, i + 1),\n true,\n scales,\n _encodes,\n signals,\n getPath\n );\n body = getBody(\n dataA.slice(i),\n dataB.slice(0, j + 1),\n scales,\n _encodes,\n signals,\n getPath,\n false\n );\n head = getHead(dataB.slice(j), false, scales, _encodes, signals, getPath);\n } else {\n body = getBody(dataA, dataB, scales, _encodes, signals, getPath);\n }\n } else {\n i = dataA.findIndex(d => computeIdA(d) === computeIdB(dataB[0]));\n j = dataA.findIndex(d => computeIdA(d) === computeIdB(dataB[Lb - 1]));\n if (i >= 0 && j >= 0) {\n tail = getTail(\n dataA.slice(0, i + 1),\n true,\n scales,\n _encodes,\n signals,\n getPath\n );\n body = getBody(\n dataA.slice(i, j + 1),\n dataB,\n scales,\n _encodes,\n signals,\n getPath,\n false\n );\n head = getHead(dataA.slice(j), true, scales, _encodes, signals, getPath);\n } else {\n body = getBody(dataA, dataB, scales, _encodes, signals, getPath);\n }\n }\n\n if (head && tail && body) {\n return t => {\n if (t === 1) {\n return getPath(dataB, scales.final, _encodes.final, signals.final);\n }\n return tail(t) + body(t) + head(t);\n };\n }\n return t => {\n if (t === 1) {\n return getPath(dataB, scales.final, _encodes.final, signals.final);\n }\n return body(t);\n };\n}\n\nfunction getHead(data, isShrink, scales, encodes, signals, getPath) {\n const L = data.length;\n if (L <= 1) {\n return t => \"\";\n }\n\n const interpolators = [\"initial\", \"final\"].map(which => {\n const phases = [];\n const scale = scales[which];\n const encode = encodes[which];\n const signal = signals[which] || signals;\n for (let i = 0; i <= L - 2; i++) {\n const fromPath = getPath(\n data.slice(0, i + 1).concat(data.slice(i, i + 1)),\n scale,\n encode,\n signal\n ).replace(/^M/g, \"L\");\n const toPath = getPath(\n data.slice(0, i + 2),\n scale,\n encode,\n signal\n ).replace(/^M/g, \"L\");\n phases.push(function(t) {\n return d3.interpolateString(fromPath, toPath)(t);\n });\n }\n return function(t) {\n if (isShrink) {\n t = 1 - t;\n }\n if (t === 1) {\n return getPath(data, scale, encode, signal);\n }\n const phase = Math.floor(t * (L - 1));\n\n return phases[phase](t * (L - 1) - phase);\n };\n });\n\n return t => {\n return d3.interpolateString(interpolators[0](t), interpolators[1](t))(t);\n };\n}\n\nfunction getTail(data, isShrink, scales, encodes, signals, getPath) {\n const L = data.length;\n if (L <= 1) {\n return t => \"\";\n }\n const interpolators = [\"initial\", \"final\"].map(which => {\n const phases = [];\n const scale = scales[which];\n const encode = encodes[which];\n const signal = signals[which] || signals;\n for (let i = L - 2; i >= 0; i--) {\n const fromPath = getPath(\n data.slice(i + 1, i + 2).concat(data.slice(i + 1)),\n scale,\n encode,\n signal\n ).replace(/Z$/g, \"\");\n const toPath = getPath(data.slice(i), scale, encode, signal).replace(\n /Z$/g,\n \"\"\n );\n\n phases.push(function(t) {\n return d3.interpolateString(fromPath, toPath)(t);\n });\n }\n\n return function(t) {\n if (isShrink) {\n t = 1 - t;\n }\n if (t === 1) {\n return getPath(data, scale, encode, signal);\n }\n const phase = Math.floor(t * (L - 1));\n\n return phases[phase](t * (L - 1) - phase);\n };\n });\n return t => {\n return d3.interpolateString(interpolators[0](t), interpolators[1](t))(t);\n };\n}\n\nfunction getBody(\n fromData,\n toData,\n scales,\n encodes,\n signals,\n getPath,\n toBeAssembled\n) {\n const pathPairs = [\"initial\", \"final\"].map(which => {\n const scale = scales[which];\n const encode = encodes[which];\n const signal = signals[which] || signals;\n let fromPath = getPath(fromData, scale, encode, signal);\n let toPath = getPath(toData, scale, encode, signal);\n\n if (toBeAssembled) {\n fromPath = fromPath.replace(/^M/g, \"L\").replace(/Z$/g, \"\");\n toPath = toPath.replace(/^M/g, \"L\").replace(/Z$/g, \"\");\n }\n return [fromPath, toPath];\n });\n\n if (\n isValidPath(pathPairs[0][0]) &&\n isValidPath(pathPairs[0][1]) &&\n isValidPath(pathPairs[1][0]) &&\n isValidPath(pathPairs[1][0])\n ) {\n const interpolator1 = interpolatePath(pathPairs[0][0], pathPairs[0][1]);\n const interpolator2 = interpolatePath(pathPairs[1][0], pathPairs[1][1]);\n return t => {\n return d3.interpolateString(interpolator1(t), interpolator2(t))(t);\n };\n }\n return d3.interpolateString(pathPairs[0][0], pathPairs[1][1]);\n}\nfunction isValidPath(p) {\n return p.indexOf(\"NaN\") < 0;\n}\n\nexport {\n areaLineInterpolatorWithScales,\n areaLineInterpolator,\n symbolInterpolator,\n areaLineDToData,\n rectInterpolator\n};\n","/* eslint-disable prefer-destructuring */\n/* eslint-disable no-restricted-globals */\n/* eslint-disable no-use-before-define */\n/* eslint-disable camelcase */\nimport * as vega from \"vega\";\nimport * as vegaExpression from \"vega-expression\";\nimport * as d3 from \"d3\";\nimport { propMap, isLinearMarktype } from \"./util\";\nimport { textOffset, getStyle, transformItem } from \"./vega-render-util\";\nimport { copy, copy2, isNumber, get } from \"../util/util\";\nimport {\n areaLineInterpolator,\n symbolInterpolator,\n areaLineDToData,\n rectInterpolator\n} from \"./mark/interpolateHelper\";\nimport { BR_PROP_DEFAULT } from \"../default\";\n\nexport function fetchAttributes(d3Selection, props, scales, signal, encode, prevData) {\n props.forEach(prop => {\n propMap(prop).forEach(p => {\n if (p.type === \"attrTween\") {\n if (d3Selection.attrTween) {\n d3Selection.attrTween(getStyle(p.val), function(d) {\n const oldD = prevData ? prevData.get(this) : undefined;\n return getPropVal.bind(this)(p, encode, scales, signal, d, oldD);\n });\n } else {\n const tempP = Object.assign({}, p, { type: \"attr\" });\n d3Selection.attr(tempP.val, function(d) {\n const oldD = prevData ? prevData.get(this) : undefined;\n return getPropVal.bind(this)(\n tempP,\n encode,\n scales,\n signal,\n d,\n oldD\n );\n });\n }\n } else if (p.type === \"attr\") {\n d3Selection.attr(getStyle(p.val), function(d) {\n const oldD = prevData ? prevData.get(this) : undefined;\n return getPropVal.bind(this)(p, encode, scales, signal, d, oldD);\n });\n } else if (p.type === \"text\") {\n d3Selection.text(function(d) {\n const oldD = prevData ? prevData.get(this) : undefined;\n return getPropVal.bind(this)(p, encode, scales, signal, d, oldD);\n });\n } else if (p.type === \"style\") {\n if (p.asTween) {\n d3Selection.styleTween(getStyle(p.val), function(d) {\n const oldD = prevData ? prevData.get(this) : undefined;\n return getPropVal.bind(this)(p, encode, scales, signal, d, oldD);\n });\n } else {\n d3Selection.style(getStyle(p.val), function(d) {\n const oldD = prevData ? prevData.get(this) : undefined;\n return getPropVal.bind(this)(p, encode, scales, signal, d, oldD);\n });\n }\n }\n });\n });\n}\n\nexport function getPropVal(propInfo, encodes, scales, signals, d, oldD) {\n const signal = signals.final || signals;\n const encode = encodes.final || encodes;\n\n if (propInfo.elmType === \"text\") {\n if (propInfo.val === \"transform\") {\n // get transform\n const trfD = transformD.bind(this)(encode, scales, signal, d, false);\n const dx = decodeEncode.bind(this)(\"dx\", encode, scales, signal, d);\n const dy = decodeEncode.bind(this)(\"dy\", encode, scales, signal, d);\n trfD.x = (trfD.x || 0) + (dx || 0);\n trfD.y = (trfD.y || 0) + (dy || 0);\n const baseline = decodeEncode.bind(this)(\n \"baseline\",\n encode,\n scales,\n signal,\n d\n );\n const fontSize = decodeEncode.bind(this)(\n \"fontSize\",\n encode,\n scales,\n signal,\n d\n );\n if (oldD && oldD.align !== d.align) {\n const alignFactor = { right: -0.5, center: 0, left: 0.5 };\n trfD.x +=\n vega.textMetrics.width(d,d.text) *\n (alignFactor[d.align] - alignFactor[oldD.align]);\n }\n\n return `${transformItem(trfD)} ${transformItem({\n y: textOffset(Object.assign({ baseline, fontSize }, d))\n })}`;\n }\n if (propInfo.val === \"text\") {\n return encode.text\n ? decodeEncode.bind(this)(\"text\", encode, scales, signal, d)\n : d.text;\n }\n } else if (propInfo.elmType === \"title\") {\n if (propInfo.val === \"transform\") {\n // get transform\n const trfD = transformD.bind(this)(encode, scales, signal, d);\n // let trfD = transformD.bind(this)(encode, scales, signal, d, false);\n const dx = decodeEncode.bind(this)(\"dx\", encode, scales, signal, d);\n const dy = decodeEncode.bind(this)(\"dy\", encode, scales, signal, d);\n trfD.x = (trfD.x || 0) + (dx || 0);\n trfD.y = (trfD.y || 0) + (dy || 0);\n const baseline = decodeEncode.bind(this)(\n \"baseline\",\n encode,\n scales,\n signal,\n d\n );\n const fontSize = decodeEncode.bind(this)(\n \"fontSize\",\n encode,\n scales,\n signal,\n d\n );\n return `${transformItem(trfD)} ${transformItem({\n y: textOffset(Object.assign({ baseline, fontSize }, d))\n })}`;\n }\n if (propInfo.val === \"text\") {\n return encode.text\n ? decodeEncode.bind(this)(\"text\", encode, scales, signal, d)\n : d.text;\n }\n } else if (\n propInfo.elmType === \"tick\" ||\n propInfo.elmType === \"grid\" ||\n propInfo.elmType === \"domain\"\n ) {\n // hotfix\n if (propInfo.val === \"transform\") {\n // get transform\n let trfD = transformD.bind(this)(encode, scales, signal, d, false);\n trfD = Object.keys(trfD).length === 0 ? d : trfD;\n const x2 = decodeEncode.bind(this)(\"x2\", encode, scales, signal, d);\n const y2 = decodeEncode.bind(this)(\"y2\", encode, scales, signal, d);\n if (oldD) {\n if (x2 === 0 && (oldD.y2 - oldD.y) * y2 < 0) {\n trfD.y += y2;\n } else if (y2 === 0 && (oldD.x2 - oldD.x) * x2 < 0) {\n trfD.x += x2;\n }\n }\n return transformItem(Object.keys(trfD).length === 0 ? d : trfD);\n }\n if (propInfo.val === \"x2\") {\n let x2 = decodeEncode.bind(this)(\"x2\", encode, scales, signal, d);\n if (isNaN(x2)) {\n return d.x2 - d.x;\n }\n if (oldD) {\n if ((oldD.x2 - oldD.x) * x2 < 0) {\n x2 = -x2;\n }\n }\n return isNaN(x2) ? d.x2 - d.x : x2;\n }\n if (propInfo.val === \"y2\") {\n let y2 = decodeEncode.bind(this)(\"y2\", encode, scales, signal, d);\n if (isNaN(y2)) {\n return d.y2 - d.y;\n }\n if (oldD) {\n if ((oldD.y2 - oldD.y) * y2 < 0) {\n y2 = -y2;\n }\n }\n return y2;\n }\n } else if (propInfo.elmType === \"rect\") {\n if (propInfo.val === \"transform\") {\n return \"\";\n }\n if (propInfo.val === \"d\") {\n if (propInfo.type === \"attrTween\") {\n return rectInterpolator.bind(this)(\n scales,\n encodes,\n signals,\n d,\n oldD,\n getRect\n );\n }\n return getRect(d, scales, encodes, signal).path;\n }\n } else if (propInfo.elmType === \"symbol\") {\n if (propInfo.val === \"d\") {\n if (propInfo.type === \"attrTween\") {\n return symbolInterpolator.bind(this)(\n scales,\n encodes,\n signals,\n d,\n oldD,\n getShape\n );\n }\n return getShape(d, scales, encode, signal).path;\n }\n if (propInfo.val === \"transform\") {\n const trfD = transformD.bind(this)(encode, scales, signal, d, false);\n return transformItem(Object.keys(trfD).length === 0 ? d : trfD);\n }\n } else if (propInfo.elmType === \"gradient\") {\n if (propInfo.val === \"d\") {\n const newD = Object.keys(encode.primary || encode)\n .filter(\n key =>\n [\"x\", \"x2\", \"xc\", \"width\", \"y\", \"y2\", \"yc\", \"height\"].indexOf(\n key\n ) >= 0\n )\n .reduce((acc, curr) => {\n acc[curr] = decodeEncode.bind(this)(curr, encode, scales, signal, d);\n return acc;\n }, {});\n let x; let y; let width; let height;\n if (isNaN(newD.x)) {\n x = isNaN(newD.xc - newD.width / 2)\n ? newD.x2\n : newD.xc - newD.width / 2;\n } else {\n x = newD.x;\n }\n if (isNaN(newD.width)) {\n width = isNaN(newD.x2 - newD.x) ? undefined : newD.x2 - newD.x;\n } else {\n width = newD.width;\n }\n\n if (!isNaN(newD.y2) && !isNaN(newD.y)) {\n y = Math.min(newD.y2, newD.y);\n height = Math.abs(newD.y2 - newD.y);\n } else {\n y = isNaN(newD.y) ? newD.y2 : newD.y;\n height = newD.height;\n }\n\n // height = isNaN(newD.height) ? ( isNaN(newD.y2 - newD.y) ? undefined : (newD.y2 - newD.y)) : newD.height;\n // return vega.pathRectangle().x(x).y(y).width(width).height(height)();\n\n return vega\n .pathRectangle()\n .x(x)\n .y(y)\n .width(width)\n .height(height)();\n }\n if (propInfo.val === \"transform\") {\n const trfD = transformD.bind(this)(encode, scales, signal, d, false);\n return transformItem(Object.keys(trfD).length === 0 ? d : trfD);\n }\n if (propInfo.val === \"fill\") {\n if (propInfo.defs && !propInfo.isUpdate) {\n const url = propInfo.defs(d3.select(this.closest(\"svg\")), d);\n return `url(\"${url}\")`;\n }\n }\n } else if (propInfo.elmType === \"rule\") {\n if (propInfo.val === \"transform\") {\n // get transform\n const trfD = transformD.bind(this)(encode, scales, signal, d, false);\n return transformItem(Object.keys(trfD).length === 0 ? d : trfD);\n }\n if (propInfo.val === \"x2\") {\n const x2 = decodeEncode.bind(this)(\"x2\", encode, scales, signal, d);\n const x = decodeEncode.bind(this)(\"x\", encode, scales, signal, d);\n return isNumber(x2 - x) ? x2 - x : d.x2 || 0;\n }\n if (propInfo.val === \"y2\") {\n const y2 = decodeEncode.bind(this)(\"y2\", encode, scales, signal, d);\n const y = decodeEncode.bind(this)(\"y\", encode, scales, signal, d);\n return isNumber(y2 - y) ? y2 - y : d.y2 || 0;\n }\n } else if (propInfo.elmType === \"group\") {\n if (propInfo.val === \"transform\") {\n const trfD = transformD.bind(this)(encode, scales, signal, d);\n return transformItem(Object.keys(trfD).length === 0 ? d : trfD);\n }\n } else if (propInfo.elmType === \"background\") {\n if (propInfo.val === \"d\") {\n const rectD = {\n x: decodeEncode.bind(this)(\"x\", encode, scales, signal, d) || 0,\n y: decodeEncode.bind(this)(\"y\", encode, scales, signal, d) || 0,\n height: decodeEncode.bind(this)(\"height\", encode, scales, signal, d),\n width: decodeEncode.bind(this)(\"width\", encode, scales, signal, d)\n };\n return vega\n .pathRectangle()\n .x(rectD.x)\n .y(rectD.y)\n .width(rectD.width)\n .height(rectD.height)();\n }\n } else if (isLinearMarktype(propInfo.elmType)) {\n if (propInfo.val === \"d\") {\n if (propInfo.type === \"attrTween\") {\n const marktypes = propInfo.initialMarktype\n ? { initial: propInfo.initialMarktype, final: propInfo.elmType }\n : propInfo.elmType;\n return areaLineInterpolator.bind(this)(\n scales,\n encodes,\n marktypes,\n d,\n oldD,\n signals,\n getPath.bind(this),\n propInfo.interpolateStyle\n );\n }\n return getPath.bind(this)(\n areaLineDToData(d),\n scales,\n encode,\n signal,\n propInfo.elmType\n );\n }\n if (propInfo.val === \"fill\" && propInfo.asTween) {\n const getFill = encode =>\n decodeEncode.bind(this)(\n \"fill\",\n encode,\n scales,\n signal,\n d.mark.marktype !== \"group\" ? { datum: {} } : d\n );\n if (propInfo.initialMarktype === \"area\" && propInfo.elmType === \"line\") {\n // while area -> line, keep the fill of the path and remove at the end.\n const decodedValue = getFill({\n fill: (encodes.initial || encode).fill\n });\n return t => (t >= 1 ? \"none\" : decodedValue);\n }\n const decodedValue = getFill(encode);\n return (t) => decodedValue;\n }\n if (\n propInfo.val === \"stroke\" &&\n propInfo.initialMarktype === \"line\" &&\n propInfo.elmType === \"area\"\n ) {\n const _encode = { stroke: encode.stroke || encode.fill };\n return decodeEncode.bind(this)(\n \"stroke\",\n _encode,\n scales,\n signal,\n d.mark.marktype !== \"group\" ? { datum: {} } : d\n );\n }\n if (hasProp(encode, propInfo)) {\n // since data bind to the group of the line\n return decodeEncode.bind(this)(\n propInfo.val,\n encode,\n scales,\n signal,\n d.mark.marktype !== \"group\" ? { datum: {} } : d\n ) + (propInfo.val === \"strokeWidth\" ? \"px\" : \"\");\n }\n }\n\n if (propInfo.val === \"text-anchor\") {\n const textAnchor = {\n left: \"start\",\n center: \"middle\",\n right: \"end\"\n };\n return textAnchor[\n (oldD ? oldD.align : d.align) ||\n decodeEncode.bind(this)(\"align\", encode, scales, signal, d)\n ];\n }\n if (hasProp(encode, propInfo)) {\n return decodeEncode.bind(this)(propInfo.val, encodes, scales, signal, d);\n }\n // Vega make some lables transparent to avoid the overlaps.\n // Gemini takes the vega's decisions.\n if (propInfo.elmType === \"text\" && propInfo.val === \"opacity\") {\n return d[propInfo.val];\n }\n return BR_PROP_DEFAULT[propInfo.elmType][propInfo.val];\n\n function hasProp(encode, propInfo) {\n return (\n get(encode, \"primary\", propInfo.val) ||\n get(encode, \"secondary\", propInfo.val) ||\n get(encode, propInfo.val)\n );\n }\n function getRect(d, scales, encodes, signal, isDiminished) {\n const encode = encodes.primary || encodes;\n const subEncode = encodes.secondary || encodes;\n const POSITION_ATTRS = [\n \"x\",\n \"x2\",\n \"xc\",\n \"width\",\n \"y\",\n \"y2\",\n \"yc\",\n \"height\",\n \"cornerRadius\"\n ];\n const newD = POSITION_ATTRS.reduce((acc, attr) => {\n if (encode[attr] || subEncode[attr]) {\n acc[attr] = decodeEncode.bind(this)(\n attr,\n encodes,\n scales,\n signal,\n d,\n false\n );\n }\n return acc;\n }, {});\n\n let x; let y; let width; let height; let cornerRadius;\n if (isNumber(newD.xc) && isNumber(newD.width)) {\n x = newD.xc - newD.width / 2;\n width = newD.width;\n } else if (isNumber(newD.x) && isNumber(newD.x2)) {\n x = Math.min(newD.x, newD.x2);\n width = Math.abs(newD.x - newD.x2);\n } else {\n x = isNumber(newD.x) ? newD.x : newD.x2;\n width = newD.width;\n }\n\n if (isNumber(newD.yc) && isNumber(newD.height)) {\n y = newD.yc - newD.height / 2;\n height = newD.height;\n } else if (isNumber(newD.y2) && isNumber(newD.y)) {\n y = Math.min(newD.y2, newD.y);\n height = Math.abs(newD.y2 - newD.y);\n } else {\n y = isNumber(newD.y) ? newD.y : newD.y2;\n height = newD.height;\n }\n\n cornerRadius = !isNumber(newD.cornerRadius) ? 0 : newD.cornerRadius;\n if (isDiminished) {\n return {\n path: vega\n .pathRectangle()\n .x(0)\n .y(0)\n .width(1)\n .height(1)(),\n meta: newD\n };\n }\n // height = isNaN(newD.height) ? ( isNaN(newD.y2 - newD.y) ? undefined : (newD.y2 - newD.y)) : newD.height;\n // return vega.pathRectangle().x(x).y(y).width(width).height(height)();\n\n return {\n path: vega\n .pathRectangle()\n .x(x)\n .y(y)\n .width(width)\n .height(height)\n .cornerRadius(cornerRadius)(),\n meta: newD\n };\n }\n\n function getShape(d, scales, encodes, signal, isDiminished = false) {\n const encode = encodes.primary || encodes;\n let newD = Object.keys(encode)\n .filter(key => [\"size\", \"shape\"].indexOf(key) >= 0)\n .reduce((acc, curr) => {\n acc[curr] = decodeEncode.bind(this)(curr, encodes, scales, signal, d);\n return acc;\n }, {});\n const context = d3.path();\n newD = {\n shape: newD.shape || \"circle\",\n size: isNumber(newD.size) ? newD.size : isNumber(d.size) ? d.size : 30\n };\n\n vega.pathSymbols(newD.shape).draw(context, isDiminished ? 1 : newD.size);\n return {\n path: context.toString(),\n meta: newD\n };\n }\n\n function getPath(data, scales, encodes, signal, type, alongTo=\"x\") {\n // let data = (d.mark.marktype !== \"group\" ? d : d.items[0].items[0]).mark.items;\n const encode = encodes.primary || encodes;\n const newData = data.map(oldD => {\n const defaultD = Object.keys(encode)\n .filter(key => [\"x\", \"x2\", \"xc\", \"width\", \"y\", \"y2\", \"yc\", \"height\", \"size\"].indexOf(key) >= 0) // \"defined\" channel is ignored due to performance issue.\n .reduce((acc, curr) => {\n const newVal = decodeEncode.bind(this)(\n curr,\n encodes,\n scales,\n signal,\n oldD\n );\n if (!isNumber(newVal)) {\n return acc;\n }\n acc[curr] = newVal;\n if (scales[curr] && scales[curr].type === \"band\") {\n acc[curr] += Math.round(\n scales[curr].bandwidth() * (encode.bandPosition || 0.5)\n );\n }\n return acc;\n }, {});\n defaultD.height = isNumber(defaultD.height)\n ? defaultD.height\n : Math.abs(defaultD.y2 - defaultD.y);\n defaultD.width = isNumber(defaultD.width)\n ? defaultD.width\n : Math.abs(defaultD.x2 - defaultD.x);\n return Object.assign(\n // {\n // x: oldD.x,\n // y: oldD.y,\n // width: oldD.width,\n // height: oldD.height\n // },\n defaultD\n );\n });\n\n if (type === \"line\") {\n return (\n d3\n .line()\n .x(d => Math.floor(d.x * 100) / 100)\n .y(d => Math.floor(d.y * 100) / 100)(newData) || \"\"\n );\n } else if (type === \"area\") {\n // areahShape = d3_area().y(y).x1(x).x0(xw).defined(def),\n if (alongTo === \"x\") {\n newData.forEach(d => {\n d.y2 = isNumber(d.y2) ? d.y2 : d.y;\n });\n return (\n d3\n .area()\n .x(d => Math.floor(d.x * 100) / 100)\n .y1(d => Math.floor(Math.min(d.y, d.y2) * 100) / 100)\n .y0(\n d => Math.floor((Math.min(d.y, d.y2) + (d.height || 0)) * 100) / 100\n )(newData) || \"\"\n );\n } else {\n newData.forEach(d => {\n d.x2 = isNumber(d.x2) ? d.x2 : d.x;\n });\n return (\n d3\n .area()\n .y(d => Math.floor(d.y * 100) / 100)\n .x1(d => Math.floor(Math.min(d.x, d.x2) * 100) / 100)\n .x0(\n d => Math.floor((Math.min(d.x, d.x2) + (d.width || 0)) * 100) / 100\n )(newData) || \"\"\n );\n }\n\n } else if (type === \"trail\") {\n\n return vega.pathTrail()\n .x(d => d.x)\n .y(d=> d.y)\n .size(d=> (isNumber(d.size) ? d.size : 2)) // 2 is default size in Vega\n .defined(d=>(d.defined || true))(newData);\n }\n }\n}\n\nexport function transformD(encodes, scales, signal, d, inherit = true) {\n const encode = encodes.primary || encodes;\n return Object.assign(\n {},\n Object.keys(encode)\n .filter(key => [\"x\", \"y\", \"angle\", \"yc\", \"xc\"].indexOf(key) >= 0)\n .reduce((acc, curr) => {\n const newVal = decodeEncode.bind(this)(\n curr,\n encodes,\n scales,\n signal,\n d\n );\n let prop = curr;\n if (isNaN(newVal)) {\n return acc;\n }\n if (curr === \"xc\") {\n prop = \"x\";\n } else if (curr === \"yc\") {\n prop = \"y\";\n }\n\n acc[prop] = isNaN(acc[prop]) ? newVal : acc[prop];\n return acc;\n }, {}),\n inherit ? d : {}\n );\n}\nexport\nfunction calculateGetValeus(encodes, scales, signals, computeScale, scNames) {\n return {\n update: {\n initial: (attr, getScales, d) => {\n const computedScales = computeScale(scales, scNames, getScales);\n return getPropVal(\n attr,\n encodes.initial.update,\n computedScales.initial,\n signals.initial,\n d\n );\n },\n final: (attr, getScales, d) => {\n const computedScales = computeScale(scales, scNames, getScales);\n return getPropVal(\n attr,\n encodes.final.update,\n computedScales.final,\n signals.final,\n d\n );\n },\n custom(attr, getScales, d_i, d_f) {\n const datum = {\n initial: d_i,\n final: d_f\n };\n\n const computedScales = computeScale(scales, scNames, getScales);\n return getPropVal.bind(this)(\n attr,\n encodes.final.update,\n computedScales,\n signals.final,\n datum\n );\n }\n },\n enter: {\n initial: (attr, getScales, d) => {\n const computedScales = computeScale(scales, scNames, getScales);\n\n return getPropVal(\n attr,\n encodes.initial.enter,\n { primary: computedScales.initial, secondary: computedScales.final },\n signals.initial,\n d\n );\n },\n final: (attr, getScales, d) => {\n const computedScales = computeScale(scales, scNames, getScales);\n return getPropVal(\n attr,\n encodes.final.enter,\n computedScales.final,\n signals.final,\n d\n );\n },\n custom(attr, getScales, d_i, d_f) {\n const datum = {\n initial: d_i,\n final: d_f\n };\n\n const computedScales = computeScale(scales, scNames, getScales);\n return getPropVal.bind(this)(\n attr,\n encodes.final.enter,\n computedScales,\n signals.final,\n datum\n );\n }\n },\n exit: {\n initial: (attr, getScales, d) => {\n const computedScales = computeScale(scales, scNames, getScales);\n return getPropVal(\n attr,\n encodes.initial.exit,\n computedScales.initial,\n signals.initial,\n d\n );\n },\n final: (attr, getScales, d) => {\n const computedScales = computeScale(scales, scNames, getScales);\n return getPropVal(\n attr,\n encodes.final.exit,\n { primary: computedScales.final, secondary: computedScales.initial },\n signals.final,\n d\n );\n },\n custom(attr, getScales, d_i, d_f) {\n const datum = {\n initial: d_i,\n final: d_f\n };\n\n const computedScales = computeScale(scales, scNames, getScales);\n return getPropVal.bind(this)(\n attr,\n encodes.final.exit,\n computedScales,\n signals.final,\n datum\n );\n }\n }\n };\n}\n\nfunction decodeEncode(prop, encodes, scales, signal, d) {\n let subScales = copy2(scales);\n if (scales.primary && scales.secondary) {\n subScales = scales.secondary;\n scales = scales.primary;\n } else if (scales.initial && scales.final) {\n scales = scales.final;\n }\n\n let encode = copy(encodes);\n let subEncode = copy(encodes);\n if (encodes.primary && encodes.secondary) {\n encode = encodes.primary;\n subEncode = encodes.secondary;\n } else if (encodes.initial && encodes.final) {\n subEncode = encode = encodes.final;\n }\n\n const enAttr = encode[prop];\n const subEnAttr = subEncode[prop];\n\n function getVal(enAttr, scales) {\n if (!enAttr) {\n return;\n }\n if (Array.isArray(enAttr)) {\n for (let i = 0; i < enAttr.length - 1; i++) {\n // Then the items should contain 'test' prop to test (except the last)\n if (evalSignalVal(enAttr[i].test, signal, scales, d.datum)) {\n return enAttr[i].value;\n }\n }\n enAttr = copy(enAttr[enAttr.length - 1]);\n }\n\n let finalVal = enAttr.value;\n if (enAttr.field) {\n if (enAttr.scale) {\n const scName = enAttr.scale;\n finalVal = scales[scName]\n ? scales[scName](d.datum[enAttr.field])\n : undefined;\n } else if (enAttr.field.group) {\n return d.mark.group[enAttr.field.group];\n } else {\n finalVal = d.datum[enAttr.field];\n }\n }\n if (enAttr.signal) {\n const val = evalSignalVal(enAttr.signal, signal, scales, d.datum);\n\n if (enAttr.scale) {\n const scName = enAttr.scale;\n finalVal = scales[scName] ? scales[scName](val) : undefined;\n } else {\n finalVal = val;\n }\n }\n if (enAttr.scale) {\n const scName = enAttr.scale;\n\n if (enAttr.value !== undefined) {\n finalVal = scales[scName] ? scales[scName](enAttr.value) : undefined;\n }\n\n if (enAttr.band) {\n const sc = scales[scName];\n let bw = sc && sc.type === \"band\" ? sc.bandwidth() : 0;\n bw = Math.round(\n bw *\n (enAttr.band === true || isNumber(enAttr.band) ? enAttr.band : 0.5)\n );\n finalVal = isNumber(finalVal) ? bw + finalVal : bw;\n }\n }\n\n if (enAttr.exp) {\n console.error(\"Todo decodeEncdoe with exp.\");\n }\n if (enAttr.mult) {\n if (isNumber(enAttr.mult)) {\n finalVal *= enAttr.mult;\n } else {\n finalVal *= decodeEncode(\n \"mult\",\n { mult: enAttr.mult },\n scales,\n signal,\n d\n );\n }\n }\n if (enAttr.offset) {\n if (isNumber(enAttr.offset)) {\n finalVal += enAttr.offset;\n } else {\n finalVal += decodeEncode(\n \"offset\",\n { offset: enAttr.offset },\n scales,\n signal,\n d\n );\n }\n }\n return finalVal;\n }\n const fValPrimary = getVal(enAttr, scales);\n const fValSecondary = getVal(subEnAttr, subScales);\n return fValPrimary !== undefined ? fValPrimary : fValSecondary;\n}\n\n\nfunction evalSignalVal(signalVal, signal, scales, datum) {\n const VEGA_FUNCTIONS = [\n {\n name: \"scale\",\n fn: (scName, val) => (scales[scName] ? scales[scName](val) : undefined)\n },\n { name: \"isValid\", fn: o => o !== null && o === o },\n { name: \"timeFormat\", fn: (a, b) => vega.timeFormat(b)(a) },\n { name: \"timeUnitSpecifier\", fn: (a, b) => vega.timeUnitSpecifier(a, b) }\n ];\n\n const codegen = vegaExpression.codegen({\n whitelist: [\"datum\"].concat(Object.keys(signal || {})),\n globalvar: \"global\"\n });\n\n\n VEGA_FUNCTIONS.forEach(fnDef => {\n codegen.functions[fnDef.name] = fnDef.name;\n });\n const extraFunctions = VEGA_FUNCTIONS.map(fnDef => fnDef.fn);\n const extraFunctionNames = VEGA_FUNCTIONS.map(fnDef => fnDef.name);\n\n const codegenVal = codegen(vegaExpression.parse(signalVal));\n\n const fn = Function(\n \"datum\",\n ...Object.keys(signal || {}),\n ...extraFunctionNames,\n `return (${codegenVal.code})`\n );\n return fn(\n datum,\n ...Object.keys(signal || {}).map(key => signal[key]),\n ...extraFunctions\n );\n\n}","import * as d3 from \"d3\";\nimport { group } from \"d3\";\nimport { flatten } from \"../util/util.js\";\nimport { getEaseFn } from \"./util\";\n\nconst ORDER = {\n ascending: d3.ascending,\n descending: d3.descending\n};\n\nfunction getOrderFn(isNumber, order) {\n if (isNumber && order) {\n return (a, b) => ORDER[order](Number(a), Number(b));\n }\n return ORDER[order];\n}\n\nfunction staggeredTiming(staggering, data, duration) {\n let N;\n let grouped;\n const dataWithTiming = data.map((d, i) => {\n return { ...d, __staggering_id__: i };\n });\n const subStaggering = staggering.staggering;\n\n const isNumber =\n staggering.by &&\n dataWithTiming.reduce((acc, d) => {\n let val;\n if (typeof staggering.by === \"string\") {\n val = (d.initial || d.final)[staggering.by];\n } else if (staggering.by.initial || staggering.by.final) {\n const which = staggering.by.initial ? \"initial\" : \"final\";\n val = (which === \"initial\"\n ? d.initial || d.final\n : d.final || d.initial)[staggering.by[which]];\n }\n return (acc = acc && (val !== undefined ? !isNaN(Number(val)) : true));\n }, true);\n if (!staggering.by) {\n\n\n const orderFn = getOrderFn(true, staggering.order);\n grouped = d3.groups(dataWithTiming, d => {\n const val = d.__staggering_id__;\n return val === undefined ? \"__empty__\" : val;\n })\n if (typeof(orderFn) === \"function\") {\n grouped.sort((a,b) => orderFn(a,b));\n }\n } else if (typeof staggering.by === \"string\") {\n\n\n grouped = d3.groups(dataWithTiming, d => {\n const val = (d.initial || d.final)[staggering.by];\n return val === undefined ? \"__empty__\" : val;\n })\n\n const orderFn = getOrderFn(isNumber, staggering.order);\n if (typeof(orderFn) === \"function\") {\n grouped.sort((a,b) => orderFn(a,b));\n }\n } else if (staggering.by.initial || staggering.by.final) {\n const which = staggering.by.initial ? \"initial\" : \"final\";\n\n\n grouped = d3.groups(dataWithTiming, d => {\n const val = (which === \"initial\"\n ? d.initial || d.final\n : d.final || d.initial)[staggering.by[which]];\n return val === undefined ? \"__empty__\" : val;\n })\n\n const orderFn = getOrderFn(isNumber, staggering.order);\n if (typeof(orderFn) === \"function\") {\n grouped.sort((a,b) => orderFn(a,b));\n }\n }\n\n N = grouped.length;\n\n const ease = getEaseFn(staggering.ease || \"linear\") || d3.easeLinear;\n const r = staggering.overlap === undefined ? 1 : staggering.overlap;\n const delta_e = i => ease((i + 1) / N) - ease(i / N);\n const alpha = 1 / (delta_e(0) * r + 1 - r);\n\n let durations = new Array(N).fill(0);\n durations = durations.map((d, i) => delta_e(i) * alpha * duration);\n let delayAcc = 0;\n const delays = durations.map((dur, i, durations) => {\n const currDelay = delayAcc;\n if (i < N - 1) {\n delayAcc = delayAcc + dur - durations[i + 1] * r;\n }\n return currDelay;\n });\n\n if (subStaggering) {\n const timings = delays.map((d, i) => {\n return {\n delay: d,\n duration: durations[i]\n };\n });\n\n timings.groups = grouped.map((g, i) => {\n return staggeredTiming(subStaggering, g[1], durations[i]);\n });\n\n return getFlattenTimings(timings);\n }\n grouped.forEach((group, i) => {\n group[1].forEach(datum => {\n datum.delay = delays[i];\n datum.duration = durations[i];\n });\n });\n\n return dataWithTiming;\n}\n\nfunction getFlattenTimings(timings) {\n if (!timings.groups) {\n return timings;\n }\n return flatten(\n timings.map((g_t, i) => {\n return getFlattenTimings(timings.groups[i]).map(t => {\n return Object.assign({}, t, { delay: t.delay + g_t.delay });\n });\n })\n );\n}\n\nexport { staggeredTiming };\n","import { staggeredTiming } from \"./staggering\";\n\nfunction computeTiming(initialData, finalData, stepTiming, joinKey, joinSet) {\n let timings = initialData.map((d_i, i) => {\n const key = joinKey(d_i, i, \"initial\");\n const found = finalData.find((d_f, j) => key === joinKey(d_f, j, \"final\"));\n return {\n initial: d_i.datum,\n final: found ? found.datum : null,\n set: found ? \"update\" : \"exit\",\n id: key,\n duration: stepTiming.duration,\n delay: stepTiming.delay\n };\n });\n timings = timings.concat(\n finalData\n .filter(d => joinSet(d) === \"enter\")\n .map((d, i) => {\n const key = joinKey(d, i, \"final\");\n return {\n initial: null,\n final: d.datum,\n set: \"enter\",\n id: key,\n duration: stepTiming.duration,\n delay: stepTiming.delay\n };\n })\n );\n\n if (stepTiming.staggering) {\n timings = staggeredTiming(\n stepTiming.staggering,\n timings,\n stepTiming.duration\n );\n }\n return timings;\n}\n\nfunction enumStepComputeTiming(enumerator, stepTiming) {\n // staggering\n let timings = enumerator.allKeys.map((d, i) => {\n let datum_i = enumerator.getDatum(d, 0);\n let datum_f = enumerator.getDatum(d, 0);\n for (let k = 1; k < enumerator.stopN; k++) {\n datum_i = datum_i || enumerator.getDatum(d, 0);\n datum_f = enumerator.getDatum(d, k) || datum_f;\n }\n\n return {\n initial: datum_i,\n final: datum_f,\n set: \"update\", // Todo\n id: i,\n key: d,\n duration: stepTiming.duration,\n delay: stepTiming.delay\n };\n });\n\n if (stepTiming.staggering) {\n timings = staggeredTiming(\n stepTiming.staggering,\n timings,\n stepTiming.duration\n );\n }\n timings = timings.sort((a, b) => a.id - b.id);\n return timings;\n}\n\nexport { computeTiming, enumStepComputeTiming };\n","import * as d3 from \"d3\";\nimport { findAfterSibling, propMap, getEaseFn, getJoinInfo, computeScale} from \"../util.js\";\nimport { getPropVal, fetchAttributes} from \"../attributeFetcher\";\nimport { getStyle } from \"../vega-render-util.js\";\nimport { computeTiming, enumStepComputeTiming } from \"../timings\";\n\nfunction markInterpolate(rawInfo, step, targetElm) {\n const joinKey = (d, i, initialOrFinal) => {\n return d.__gemini__ ?\n getJoinInfo(d, i, step, \"joinKey\") :\n (\n typeof(step.computeDatumId) === \"function\"\n ? step.computeDatumId(d, i)\n : step.computeDatumId[initialOrFinal || \"initial\"](d, i)\n );\n }; const joinSet = (d, i) => {\n return d.__gemini__ ? getJoinInfo(d, i, step, \"animSet\") : undefined;\n };\n\n const animVis = targetElm;\n const eView = rawInfo.eVis.view;\n\n const MARK_ATTRS = {\n rect: [\"rect\"],\n symbol: [\"symbol\"],\n rule: [\"rule\"],\n text: [\"text\", \"align\"]\n };\n\n return new Promise((resolve) => {\n const done = doneMaker();\n const timings = computeTiming(\n step.currData,\n step.nextData,\n step.timing,\n joinKey,\n joinSet\n );\n const {\n change,\n marktypes,\n scales,\n encodes,\n signals\n } = step;\n\n const isAdd = !change.initial && !!change.final,\n isRemove = !!change.initial && !change.final;\n // if (isValidMarktype(marktypes.initial) && isValidMarktype(marktypes.final) && marktypes.initial !== marktypes.final) {\n // isAdd = isRemove = true;\n // }\n const easeFn = getEaseFn(step.timing.ease);\n\n // let doUpdate = !isRemove && !isAdd && (change.encode !== false),\n // doEnter = !isRemove && (isAdd || change.encode !== false),\n // doExit = !isAdd && (isRemove || change.encode !== false);\n\n // if (change.encode) {\n // doUpdate = change.encode.update === false ? false : doUpdate;\n // doEnter = change.encode.enter === false ? false : doEnter;\n // doExit = change.encode.exit === false ? false : doExit;\n // }\n // doExit = true;\n // doEnter = true;\n let marktype;\n\n if (isRemove) {\n marktype = marktypes.initial;\n } else if (isAdd) {\n marktype = marktypes.final;\n } else if (\n marktypes.initial &&\n marktypes.final &&\n marktypes.initial !== marktypes.final\n ) {\n if (change.marktype === false) {\n marktype = marktypes.initial;\n } else {\n marktype = marktypes.final;\n }\n } else {\n marktype = marktypes.initial || marktypes.final;\n }\n\n const svgElmType = getSvgElmType(marktype);\n const svgElmTypes = {\n initial: getSvgElmType(marktypes.initial),\n final: getSvgElmType(marktypes.final)\n };\n\n let marks = d3.select(`${animVis } .mark-${marktype}.role-mark.${change.compName}`);\n\n\n if (\n isAdd ||\n (marktypes.initial !== marktypes.final &&\n isValidMarktype(marktypes.final))\n ) {\n const sib = findAfterSibling(eView.scenegraph().root, change.compName);\n\n marks = addMark(\n d3.select(`${animVis } .${change.final.parent.name} > g > g`),\n change.final,\n sib ? `.${sib.name}` : undefined\n );\n }\n\n if (step.enumerator) {\n if (!change.data) {\n console.error(\n \"Cannot apply enumerator for a mark interpolation without data change!\"\n );\n }\n const {enumerator} = step;\n let finalScaleNames = [];\n if (change.scale === true) {\n finalScaleNames = Object.keys(eView._runtime.scales);\n } else if (Array.isArray(change.scale)) {\n finalScaleNames = change.scale;\n }\n\n const getValues = {\n update: {\n initial(attr, getScales, d){\n\n let computedScales = computeScale(scales, finalScaleNames, getScales);\n return getPropVal.bind(this)(\n attr,\n encodes.initial.update,\n computedScales.initial,\n signals.initial,\n d);\n },\n\n final: function(attr, getScales, d){\n const computedScales = computeScale(scales, finalScaleNames, getScales);\n return getPropVal.bind(this)(\n attr,\n encodes.final.update,\n computedScales.final,\n signals.initial,\n d\n );\n },\n custom(attr, getScales, d_i, d_f) {\n let datum = {\n initial: d_i,\n final: d_f\n };\n\n let computedScales = computeScale(scales, finalScaleNames, getScales);\n return getPropVal.bind(this)(\n attr,\n encodes.final.update,\n computedScales,\n signals.final,\n datum);\n }\n },\n enter: {\n initial(attr, getScales, d){\n\n let computedScales = computeScale(scales, finalScaleNames, getScales);\n return getPropVal.bind(this)(\n attr,\n encodes.initial.enter,\n {primary: computedScales.initial, secondary: computedScales.final},\n signals.initial,\n d);\n },\n final(attr, getScales, d){\n let computedScales = computeScale(scales, finalScaleNames, getScales);\n return getPropVal.bind(this)(\n attr,\n encodes.final.enter,\n computedScales.final,\n signals.initial,\n d);\n\n },\n custom(attr, getScales, d_i, d_f){\n let datum = {\n initial: d_i,\n final: d_f\n };\n\n let computedScales = computeScale(scales, finalScaleNames, getScales);\n return getPropVal.bind(this)(\n attr,\n encodes.final.enter,\n computedScales,\n signals.final,\n datum);\n }\n },\n exit: {\n initial(attr, getScales, d){\n\n let computedScales = computeScale(scales, finalScaleNames, getScales);\n return getPropVal.bind(this)(\n attr,\n encodes.initial.exit,\n computedScales.initial,\n signals.initial,\n d);\n },\n final(attr, getScales, d){\n let computedScales = computeScale(scales, finalScaleNames, getScales);\n return getPropVal.bind(this)(\n attr,\n encodes.final.exit,\n {primary: computedScales.final, secondary: computedScales.initial},\n signals.final,\n d);\n },\n custom(attr, getScales, d_i, d_f){\n let datum = {\n initial: d_i,\n final: d_f\n };\n\n let computedScales = computeScale(scales, finalScaleNames, getScales);\n return getPropVal.bind(this)(\n attr,\n encodes.final.exit,\n computedScales,\n signals.final,\n datum);\n }\n }\n };\n // bind allKeys\n const newBoundMarks = marks\n .selectAll(svgElmType)\n .data(enumerator.allKeys, d => d);\n newBoundMarks.exit().remove();\n newBoundMarks.enter().append(svgElmType);\n\n const initialMarks = marks\n .selectAll(svgElmType)\n .filter(id => [\"update\", \"exit\"].indexOf(enumerator.set(id, 0)) >= 0);\n const allProps = MARK_ATTRS[marktype].reduce((acc, prop) => {\n return acc.concat(propMap(prop));\n }, []);\n allProps.forEach(p => {\n if (p.type === \"attrTween\") {\n const tempP = Object.assign({}, p, { type: \"attr\" });\n initialMarks[tempP.type](getStyle(tempP.val), id =>\n enumerator.getPropVal(tempP, getValues, 0, id)\n );\n } else if (p.type === \"text\") {\n initialMarks[p.type](id =>\n enumerator.getPropVal(p, getValues, 0, id)\n );\n } else {\n initialMarks[p.type](getStyle(p.val), id =>\n enumerator.getPropVal(p, getValues, 0, id)\n );\n }\n });\n\n\n\n // staggering\n const timings = enumStepComputeTiming(enumerator, step.timing);\n\n const animMarks = marks.selectAll(svgElmType).transition();\n\n allProps.forEach(p => {\n if (p.type === \"attr\") {\n animMarks.attrTween(p.val, function(d) {\n return enumerator.interpolateAlongEnumMaker(p, getValues, this)(d);\n });\n } else if (p.type === \"attrTween\") {\n animMarks.attrTween(p.val, function(d) {\n return enumerator.interpolateAlongEnumMaker(p, getValues, this)(d);\n });\n } else if (p.type === \"text\") {\n animMarks.tween(\"text\", function(d) {\n const textInterpolator = enumerator.interpolateAlongEnumMaker(\n p,\n getValues,\n this\n )(d);\n return function(t) {\n this.setAttribute(\"text\", textInterpolator(t));\n };\n });\n } else if (p.type === \"style\") {\n animMarks.styleTween(getStyle(p.val), d => {\n return enumerator.interpolateAlongEnumMaker(p, getValues, this)(d);\n });\n }\n });\n\n // interpolate them\n animMarks\n .duration((d, i) => timings[i].duration)\n .delay((d, i) => timings[i].delay)\n .ease(easeFn)\n .end()\n .then(() => {\n marks.selectAll(svgElmType).data(step.nextData);\n done(\"all\", () => {resolve();});\n });\n\n\n\n } else {\n // If there is a marktype change between different svgElmTypes\n if (marktypes.initial !== marktypes.final) {\n let animMarksI; let animMarksF;\n if (isValidMarktype(marktypes.initial)) {\n const marks = d3.select(\n animVis + ` .mark-${marktypes.initial}.role-mark.${change.compName}`\n );\n animMarksI = marks.selectAll(svgElmTypes.initial);\n const newTimings =\n marktypes.final && !isValidMarktype(marktypes.final)\n ? computeTiming(\n step.currData,\n step.unpackedData,\n step.timing,\n joinKey,\n joinSet\n )\n : timings;\n const prevData = d3.local();\n let nextData =\n marktypes.final && !isValidMarktype(marktypes.final)\n ? step.unpackedData\n : step.nextData;\n\n if (change.data || isAdd || isRemove) {\n animMarksI = animMarksI.data(step.currData);\n animMarksI.each(function(d) {\n prevData.set(this, d);\n });\n animMarksI = animMarksI.data(nextData, (d, i) =>\n joinKey(d, i, \"initial\")\n );\n } else {\n animMarksI.each(function(d) {\n prevData.set(this, d);\n });\n }\n\n exit(\n newTimings,\n animMarksI,\n marktypes.initial,\n {\n initial: encodes.initial.exit,\n final: encodes.final.exit\n },\n signals,\n prevData\n );\n\n update(\n newTimings,\n animMarksI,\n marktypes.initial,\n {\n initial: encodes.initial.update,\n final: encodes.initial.intermediate\n },\n // encode,\n signals,\n prevData,\n false,\n false\n );\n } else {\n done(\"exit\", () => {\n resolve();\n });\n }\n\n if (isValidMarktype(marktypes.final)) {\n const prevData = d3.local();\n let newTimings = marktypes.initial && !isValidMarktype(marktypes.initial) ? computeTiming(step.unpackedData, step.nextData, step.timing, joinKey, joinSet) : timings;\n let currData = !marktypes.initial\n ? []\n : !isValidMarktype(marktypes.initial)\n ? step.unpackedData\n : animMarksI.data();\n const marks = d3.select(\n animVis + ` .mark-${marktypes.final}.role-mark.${change.compName}`\n );\n animMarksF = marks\n .selectAll(svgElmTypes.final)\n .filter(d => !d)\n .data(currData);\n\n fetchAttributes(\n animMarksF.enter().append(svgElmTypes.final),\n MARK_ATTRS[marktypes.final],\n { primary: scales.initial, secondary: scales.final },\n signals.initial,\n encodes.final.intermediate\n );\n animMarksF = marks.selectAll(svgElmTypes.final);\n animMarksF.each(function(d) {\n prevData.set(this, d);\n });\n if (change.data || isAdd || isRemove) {\n animMarksF = animMarksF.data(step.nextData, (d, i) =>\n joinKey(d, i, \"final\")\n );\n }\n\n enter(newTimings, animMarksF, marktypes.final);\n // fade-in the new martype\n update(\n newTimings,\n animMarksF,\n marktypes.final,\n {\n initial: encodes.final.intermediate,\n final: encodes.final.update\n },\n signals,\n prevData,\n true,\n true\n );\n } else {\n done(\"update\", () => {\n resolve();\n });\n done(\"enter\", () => {\n resolve();\n });\n }\n } else {\n let animMarks = marks.selectAll(svgElmType);\n const prevData = d3.local();\n animMarks.each(function(d) {\n prevData.set(this, d);\n });\n if (change.data || isAdd || isRemove) {\n // let nextData = change.marktype === false ? step.unpackedData : step.nextData;\n\n if (step.preFetchCurrData) {\n animMarks = animMarks.data(step.currData);\n }\n\n animMarks = animMarks.data(step.nextData, (d, i) => {\n // console.log(joinKey(d, i));\n return joinKey(d, i);\n });\n }\n\n // enter\n enter(timings, animMarks, marktype);\n\n // exit\n exit(\n timings,\n animMarks,\n marktype,\n {\n initial: encodes.initial.exit, // encodes.final.exit,\n final: encodes.final.exit\n },\n signals,\n prevData\n );\n\n update(\n timings,\n animMarks,\n marktype,\n {\n initial: encodes.initial.update, // encodes.final.update,\n final: encodes.final.update\n },\n signals,\n prevData\n );\n }\n }\n function enter(\n timings,\n animMarks,\n marktype,\n encodeInitial = encodes.initial.enter,\n encode = encodes.final.enter\n ) {\n // enter\n let enterI = animMarks.enter().append(getSvgElmType(marktype));\n fetchAttributes(\n enterI,\n MARK_ATTRS[marktype],\n // Todo: When using the final scale, it should use the final encode as well.\n { primary: scales.initial, secondary: scales.final },\n signals.initial,\n {\n primary: encodeInitial,\n secondary: Object.assign({}, encode, { opacity: { value: 0 } })\n }\n );\n\n // If they are already entered,\n if (enterI.data().length <= 0) {\n enterI = animMarks.filter((d, i) => joinSet(d, i) === \"enter\");\n }\n if (enterI.data().length > 0) {\n // if (doEnter && enterI.data().length > 0) {\n const setType = \"final\";\n const enterF = enterI.transition();\n\n fetchAttributes(\n enterF,\n MARK_ATTRS[marktype],\n scales.final,\n signals.final,\n {\n initial: {\n primary: encodeInitial,\n secondary: Object.assign({}, encode, { opacity: { value: 0 } })\n },\n final: encode\n }\n );\n\n enterF\n .duration(\n (d, i) =>\n timings.find(t => t.id === joinKey(d, i, setType)).duration\n )\n .delay(\n (d, i) => timings.find(t => t.id === joinKey(d, i, setType)).delay\n )\n .ease(easeFn)\n .end()\n .then(() => {\n done(\"enter\", () => {resolve();});\n });\n } else {\n done(\"enter\", () => {\n resolve();\n });\n }\n }\n function exit(timings, animMarks, marktype, encode, signals, prevData) {\n // exit\n // initiate exit\n let exitI = animMarks.exit();\n // If they are already entered,\n if (exitI.data().length <= 0) {\n exitI = animMarks.filter((d, i) => joinSet(d, i) === \"exit\");\n }\n if (exitI.data().length > 0) {\n // if (doExit && exitI.data().length > 0) {\n const setType = \"initial\";\n const exitF = exitI.transition();\n\n fetchAttributes(\n exitF,\n MARK_ATTRS[marktype],\n Object.assign({}, scales, {\n primary: scales.final,\n secondary: scales.initial\n }),\n signals,\n encode || encodes.final.exit,\n prevData\n );\n\n exitF\n .duration(\n (d, i) =>\n timings.find(t => t.id === joinKey(d, i, setType)).duration\n )\n .delay(\n (d, i) => timings.find(t => t.id === joinKey(d, i, setType)).delay\n )\n .ease(easeFn)\n .remove()\n .end()\n .then(function() {\n done(\"exit\", () => {resolve();});\n });\n // Todo: when should we remove exit-marks?\n } else {\n done(\"exit\", () => {\n resolve();\n });\n }\n }\n function update(\n timings,\n animMarks,\n marktype,\n encodes,\n signals,\n prevData,\n doStatusUpdate = true,\n filterUpdate = true\n ) {\n let updateF = filterUpdate\n ? animMarks.filter((d, i) => joinSet(d, i) === \"update\")\n : animMarks;\n if (change.data === false && updateF.data().length === 0) {\n updateF = animMarks;\n }\n\n if (updateF.data().length > 0) {\n const setType = \"initial\"; // Actually, it also can be 'final'.\n updateF = updateF.transition();\n\n fetchAttributes(\n updateF,\n MARK_ATTRS[marktype],\n scales,\n signals,\n encodes,\n prevData\n );\n updateF\n .duration(\n (d, i) =>\n timings.find(t => t.id === joinKey(d, i, setType)).duration\n )\n .delay(\n (d, i) => timings.find(t => t.id === joinKey(d, i, setType)).delay\n )\n .ease(easeFn)\n .end()\n .then(() => {\n if (doStatusUpdate) {\n done(\"update\", () => {resolve();});\n }\n });\n } else if (doStatusUpdate) {\n done(\"update\", () => {resolve();});\n }\n }\n });\n function isValidMarktype(marktype) {\n return !!MARK_ATTRS[marktype];\n }\n}\nfunction doneMaker() {\n const transitionStatus = {\n update: false,\n enter: false,\n exit: false\n };\n\n return function(which, cb, args) {\n if (which === \"all\") {\n transitionStatus.update = transitionStatus.enter = transitionStatus.exit = true;\n } else {\n transitionStatus[which] = true;\n }\n if (\n transitionStatus.update &&\n transitionStatus.enter &&\n transitionStatus.exit\n ) {\n cb(args);\n }\n };\n}\n\n\nfunction addMark(d3Selection, compSpec, before) {\n return d3Selection\n .insert(\"g\", before)\n .attr(\"class\", `mark-${compSpec.type} role-mark ${compSpec.name}`);\n}\nfunction getSvgElmType(markType){\n switch (markType) {\n case \"rect\":\n case \"symbol\":\n return \"path\";\n case \"rule\":\n return \"line\";\n case \"text\":\n return \"text\";\n default:\n\n }\n}\nexport { markInterpolate };\n","import * as d3 from \"d3\";\nimport { propMap, getEaseFn, findAfterSibling, getJoinInfo, computeScale, isLinearMarktype } from \"../util.js\";\nimport { getPropVal, fetchAttributes} from \"../attributeFetcher\";\nimport { getStyle } from \"../vega-render-util.js\";\nimport { computeTiming, enumStepComputeTiming } from \"../timings\";\n\nfunction areaLineInterpolate(rawInfo, step, targetElm) {\n const joinKey = (d, i, initialOrFinal) => {\n return d.__gemini__ ?\n getJoinInfo(d, i, step, \"joinKey\") :\n ( typeof(step.computeDatumId) === \"function\"\n ? step.computeDatumId(d, i)\n : step.computeDatumId[initialOrFinal || \"final\"](d, i));\n }; const joinSet = (d, i) => {\n return d.__gemini__ ? getJoinInfo(d, i, step, \"animSet\") : undefined;\n };\n const MARK_ATTRS = {\n area: [{ name: \"area\", tweaks: [] }],\n line: [{ name: \"line\", tweaks: [] }],\n trail: [{ name: \"trail\", tweaks: [] }]\n };\n const tweaks = [{ type: \"attrTween\", val: \"d\", interpolateStyle: \"update\" }];\n const MARK_ATTRS_DATA_INTERPOLATE = {\n area: [{ name: \"area\", tweaks}],\n line: [{ name: \"line\", tweaks}],\n trail: [{ name: \"trail\", tweaks}]\n };\n\n\n // Get Timing\n\n const animVis = targetElm;\n const eView = rawInfo.eVis.view;\n const transitionStatus = {\n update: false,\n enter: false,\n exit: false\n };\n\n function done(which, cb, args) {\n if (which === \"all\") {\n transitionStatus.update = transitionStatus.enter = transitionStatus.exit = true;\n } else {\n transitionStatus[which] = true;\n }\n if (\n transitionStatus.update &&\n transitionStatus.enter &&\n transitionStatus.exit\n ) {\n cb(args);\n }\n }\n function isAreaLineMarktype(marktype) {\n return !!MARK_ATTRS[marktype];\n }\n\n return new Promise((resolve) => {\n const timings = computeTiming(\n step.currData,\n step.nextData,\n step.timing,\n joinKey,\n joinSet\n );\n const {change} = step;\n const easeFn = getEaseFn(step.timing.ease);\n const {marktypes} = step;\n\n const isAdd = !change.initial && !!change.final,\n isRemove = !!change.initial && !change.final;\n\n let marktype;\n if (\n marktypes.initial &&\n marktypes.final &&\n marktypes.initial !== marktypes.final\n ) {\n if (change.marktype === false) {\n marktype = marktypes.initial;\n } else {\n marktype = marktypes.final;\n }\n } else if (isRemove) {\n marktype = marktypes.initial;\n } else if (isAdd) {\n marktype = marktypes.final;\n } else {\n marktype = marktypes.initial || marktypes.final;\n }\n const {hasFacet} = step;\n // collect the scale objects to scale the initial/final values\n const {scales} = step;\n const {encodes} = step;\n const {signals} = step;\n\n if (isAdd || !isAreaLineMarktype(marktypes.initial)) {\n if (hasFacet.final) {\n const sib = findAfterSibling(\n eView.scenegraph().root,\n change.final.parent.name\n );\n\n addMark(\n d3.select(`${animVis } .${change.final.parent.parent.name} > g > g`),\n change.final,\n sib ? `.${sib.name}` : undefined,\n { hasGroup: true }\n );\n } else {\n const sib = findAfterSibling(eView.scenegraph().root, change.compName);\n\n addMark(\n d3.select(`${animVis } .${change.final.parent.name} > g > g`),\n change.final,\n sib ? `.${sib.name}` : undefined\n );\n }\n }\n\n if (step.enumerator) {\n let finalScaleNames = [];\n if (change.scale === true) {\n finalScaleNames = Object.keys(eView._runtime.scales);\n } else if (Array.isArray(change.scale)) {\n finalScaleNames = change.scale;\n }\n\n\n const {enumerator} = step;\n const getValues = {\n update: {\n initial: (attr, getScales, d) => {\n const computedScales = computeScale(scales, finalScaleNames, getScales);\n return getPropVal(\n attr,\n encodes.initial.update,\n computedScales.initial,\n signals.initial,\n d\n );\n },\n final: (attr, getScales, d) => {\n const computedScales = computeScale(scales, finalScaleNames, getScales);\n return getPropVal(\n attr,\n encodes.final.update,\n computedScales.final,\n signals.final,\n d\n );\n },\n custom: (attr, getScales, d_i, d_f) => {\n const pahtData = {\n initial: d_i.items[0].items[0],\n final: d_f.items[0].items[0]\n };\n const nuancedAttr = Object.assign({}, attr, {\n interpolateStyle: \"update\"\n });\n const computedScales = computeScale(scales, finalScaleNames, getScales);\n\n return getPropVal.bind(this)(\n change.scale ? attr : nuancedAttr,\n encodes.final.update,\n change.scale ? computedScales : computedScales.final,\n signals.final,\n pahtData\n );\n }\n },\n enter: {\n initial: (attr, getScales, d) => {\n const computedScales = computeScale(scales, finalScaleNames, getScales);\n\n return getPropVal(\n attr,\n encodes.initial.enter,\n {\n primary: computedScales.initial,\n secondary: computedScales.final\n },\n signals.initial,\n d\n );\n },\n final: (attr, getScales, d) => {\n const computedScales = computeScale(scales, finalScaleNames, getScales);\n return getPropVal(\n attr,\n encodes.final.enter,\n computedScales.final,\n signals.final,\n d\n );\n },\n custom(attr, getScales, d_i, d_f){\n let pahtData = {\n initial: change.scale ? d_f.items[0].items[0] : { mark: { items:[] } },\n final: d_f.items[0].items[0]\n };\n let nuancedAttr = Object.assign({}, attr, {interpolateStyle: \"update\"});\n let computedScales = computeScale(scales, finalScaleNames, getScales);\n\n return getPropVal.bind(this)(\n change.scale ? attr : nuancedAttr,\n encodes.final.update,\n change.scale ? computedScales : computedScales.final,\n signals.final,\n pahtData);\n }\n },\n exit: {\n initial: (attr, getScales, d) => {\n const computedScales = computeScale(scales, finalScaleNames, getScales);\n return getPropVal(\n attr,\n encodes.initial.exit,\n computedScales.initial,\n signals.initial,\n d\n );\n },\n final: (attr, getScales, d) => {\n const computedScales = computeScale(scales, finalScaleNames, getScales);\n return getPropVal(\n attr,\n encodes.final.exit,\n {\n primary: computedScales.final,\n secondary: computedScales.initial\n },\n signals.final,\n d\n );\n },\n custom: (attr, getScales, d_i) => {\n const pahtData = {\n initial: d_i.items[0].items[0],\n final: change.scale\n ? d_i.items[0].items[0]\n : { mark: { items: [] } }\n };\n\n const computedScales = computeScale(scales, finalScaleNames, getScales);\n const nuancedAttr = Object.assign({}, attr, {\n interpolateStyle: \"update\"\n });\n return getPropVal.bind(this)(\n change.scale ? attr : nuancedAttr,\n encodes.final.exit,\n change.scale ? computedScales : computedScales.initial,\n signals.final,\n pahtData\n );\n }\n }\n };\n if (hasFacet.initial && hasFacet.final) {\n // bind allKeys\n let markGs = d3\n .selectAll(animVis + ` .role-scope.${change.final.parent.name} > g`)\n .attr(\"class\", \"__sub\");\n markGs = d3\n .select(animVis + ` .role-scope.${change.final.parent.name}`)\n .selectAll(\".__sub\");\n markGs = markGs.data(enumerator.allKeys, d => d);\n markGs.exit().remove();\n markGs = markGs.enter().append(\"g\");\n markGs.append(\"path\").attr(\"class\", \"background\");\n\n // append mark mark\n let marks = markGs\n .append(\"g\")\n .append(\"g\")\n .attr(\"class\", `${marktype}-mark role-mark ${change.compName}`)\n .append(\"path\");\n\n const initialMarks = marks.filter(\n id => [\"update\", \"exit\"].indexOf(enumerator.set(id, 0)) >= 0\n );\n const allProps = MARK_ATTRS[marktype].reduce((acc, prop) => {\n return acc.concat(propMap(prop));\n }, []);\n\n // init\n allProps.forEach(p => {\n if (p.type === \"attrTween\") {\n const tempP = Object.assign({}, p, { type: \"attr\" });\n initialMarks[tempP.type](getStyle(tempP.val), id =>\n enumerator.getPropVal(tempP, getValues, 0, id)\n );\n } else {\n initialMarks[p.type](getStyle(p.val), id =>\n enumerator.getPropVal(p, getValues, 0, id)\n );\n }\n });\n\n const timings = enumStepComputeTiming(enumerator, step.timing);\n\n marks = marks.transition();\n\n allProps.forEach(p => {\n if (p.type === \"attr\") {\n marks.attrTween(p.val, function(d) {\n return enumerator.interpolateAlongEnumMaker(\n p,\n getValues,\n this\n )(d);\n });\n } else if (p.type === \"attrTween\") {\n marks.attrTween(p.val, function(d) {\n return enumerator.interpolateAlongEnumMaker(\n p,\n getValues,\n this\n )(d);\n });\n } else if (p.type === \"text\") {\n marks.tween(\"text\", function(d) {\n const textInterpolator = enumerator.interpolateAlongEnumMaker(\n p,\n getValues,\n this\n )(d);\n return function(t) {\n this.innerHTML = textInterpolator(t);\n };\n });\n } else if (p.type === \"style\") {\n marks.styleTween(getStyle(p.val), function(d) {\n return enumerator.interpolateAlongEnumMaker(\n p,\n getValues,\n this\n )(d);\n });\n }\n });\n\n // interpolate them\n marks\n .duration((d, i) => timings[i].duration)\n .delay((d, i) => timings[i].delay)\n .ease(easeFn)\n .end()\n .then(() => {\n done(\"all\", () => {\n resolve();\n });\n });\n } else if (!hasFacet.initial && !hasFacet.final) {\n let mark = d3\n .select(animVis + ` .mark-${marktype}.role-mark.${change.compName}`)\n .selectAll(\"path\");\n\n mark = mark.data(enumerator.allKeys, d => d);\n mark.exit().remove();\n mark = mark.enter().append(\"path\");\n\n const allProps = MARK_ATTRS[marktype].reduce((acc, prop) => {\n return acc.concat(propMap(prop));\n }, []);\n\n // init\n allProps.forEach(p => {\n if (p.type === \"attrTween\") {\n const tempP = Object.assign({}, p, { type: \"attr\" });\n mark[tempP.type](getStyle(tempP.val), id =>\n enumerator.getPropVal(tempP, getValues, 0, id)\n );\n } else {\n mark[p.type](getStyle(p.val), id =>\n enumerator.getPropVal(p, getValues, 0, id)\n );\n }\n });\n\n const timings = enumStepComputeTiming(enumerator, step.timing);\n\n mark = mark.transition();\n\n allProps.forEach(p => {\n if (p.type === \"attr\") {\n mark.attrTween(p.val, function(d) {\n return enumerator.interpolateAlongEnumMaker(\n p,\n getValues,\n this\n )(d);\n });\n } else if (p.type === \"attrTween\") {\n mark.attrTween(p.val, function(d) {\n return enumerator.interpolateAlongEnumMaker(\n p,\n getValues,\n this\n )(d);\n });\n } else if (p.type === \"text\") {\n mark.tween(\"text\", function(d) {\n const textInterpolator = enumerator.interpolateAlongEnumMaker(\n p,\n getValues,\n this\n )(d);\n return function(t) {\n this.innerHTML = textInterpolator(t);\n };\n });\n } else if (p.type === \"style\") {\n mark.styleTween(getStyle(p.val), function(d) {\n return enumerator.interpolateAlongEnumMaker(\n p,\n getValues,\n this\n )(d);\n });\n }\n });\n\n // interpolate them\n mark\n .duration((d, i) => timings[i].duration)\n .delay((d, i) => timings[i].delay)\n .ease(easeFn)\n .end()\n .then(() => {\n done(\"all\", () => {\n resolve();\n });\n });\n }\n } else if (marktypes.initial && !isAreaLineMarktype(marktypes.initial)) {\n // when marktype changes from other marks to area/line mark\n\n const setType = \"final\"; const marktype = marktypes.final;\n const prevData = d3.local();\n\n if (hasFacet.final) {\n const timings = computeTiming(\n step.groupedData,\n step.nextData,\n step.timing,\n joinKey,\n joinSet\n );\n let markGs = d3.selectAll(\n animVis + ` .role-scope.${change.final.parent.name} > g`\n );\n markGs = d3\n .select(`${animVis } .role-scope.${change.final.parent.name}`)\n .selectAll(`.role-scope.${change.final.parent.name} > g`)\n .data(step.groupedData, (d, i) => joinKey(d, i, setType));\n\n // append group mark\n const enterIG = markGs.enter().append(\"g\");\n enterIG.append(\"path\").attr(\"class\", \"background\");\n\n // append mark mark\n const enterIMark = enterIG\n .append(\"g\")\n .append(\"g\")\n .attr(\"class\", `mark-${marktype} role-mark ${change.compName}`)\n .append(\"path\");\n\n fetchAttributes(\n enterIMark,\n MARK_ATTRS[marktype],\n { primary: scales.initial, secondary: scales.final },\n signals.initial,\n encodes.final.intermediate\n );\n\n markGs = d3\n .select(`${animVis } .role-scope.${change.final.parent.name}`)\n .selectAll(`.role-scope.${change.final.parent.name} > g`);\n\n markGs.each(function(d) {\n prevData.set(this, d);\n });\n markGs = markGs.data(step.nextData, (d, i) => joinKey(d, i, setType));\n\n update(\n timings,\n markGs,\n marktype,\n {\n initial: encodes.final.intermediate,\n final: encodes.final.update\n },\n prevData\n );\n\n enter(timings, markGs, marktype);\n\n done(\"exit\", () => resolve());\n } else {\n let mark = d3\n .select(animVis + ` .mark-${marktype}.role-mark.${change.compName}`)\n .selectAll(\"path\");\n mark = mark.data(step.groupedData);\n\n const enterI = mark.enter().append(\"path\");\n\n fetchAttributes(\n enterI,\n MARK_ATTRS[marktype],\n { primary: scales.initial, secondary: scales.final },\n signals.initial,\n encodes.final.intermediate\n );\n\n let enterF = d3\n .select(\n animVis + ` .mark-${marktypes.final}.role-mark.${change.compName}`\n )\n .selectAll(\"path\");\n enterF.each(function(d) {\n prevData.set(this, d);\n });\n\n enterF = enterF.data(step.nextData).transition();\n\n fetchAttributes(\n enterF,\n MARK_ATTRS[marktypes.final], // MARK_ATTRS_DATA_INTERPOLATE[marktype],\n scales,\n signals.final,\n encodes.final.update,\n prevData\n );\n\n enterF\n .duration(step.timing.duration)\n .delay(step.timing.delay)\n .ease(easeFn)\n .end()\n .then(() => {\n done(\"all\", () => {resolve();});\n });\n\n }\n } else if (marktypes.final && !isAreaLineMarktype(marktypes.final)) {\n // when marktype changes from area/line to the other marktypes\n // exit\n const timings = computeTiming(\n step.currData,\n step.groupedData,\n step.timing,\n joinKey,\n joinSet\n );\n const prevData = d3.local();\n const setType = \"initial\"; const marktype = marktypes.initial;\n if (hasFacet.initial) {\n let markGs = d3.selectAll(\n animVis + ` .role-scope.${change.initial.parent.name} > g`\n );\n markGs = d3\n .select(`${animVis } .role-scope.${change.initial.parent.name}`)\n .selectAll(`.role-scope.${change.initial.parent.name} > g`);\n\n markGs.each(function(d) {\n prevData.set(this, d);\n });\n markGs = markGs.data(step.groupedData, (d, i) =>\n joinKey(d, i, setType)\n );\n\n exit(\n timings,\n markGs,\n marktype,\n {\n initial: encodes.initial.exit,\n final: encodes.final.exit\n },\n prevData,\n \"initial\"\n );\n\n update(\n timings,\n markGs,\n marktype,\n {\n initial: encodes.initial.update,\n final: encodes.initial.intermediate\n },\n prevData\n );\n done(\"enter\", () => resolve());\n } else {\n let mark = d3\n .select(animVis + ` .mark-${marktype}.role-mark.${change.compName}`)\n .selectAll(\"path\");\n mark.each(function(d) {\n prevData.set(this, d);\n });\n mark = mark.data(step.groupedData).transition();\n // fade-out by the exit encoding\n\n fetchAttributes(\n mark,\n MARK_ATTRS[marktype],\n Object.assign({}, scales, {\n primary: scales.final,\n secondary: scales.initial\n }),\n signals.final,\n {\n initial: encodes.initial.update,\n final: encodes.initial.intermediate\n },\n prevData\n );\n\n mark\n .duration(step.duration)\n .delay(step.delay)\n .ease(easeFn)\n // .remove()\n .end()\n .then(function() {\n done(\"all\", () => {resolve();});\n });\n }\n } else if ((isRemove || hasFacet.final) && (isAdd || hasFacet.initial)) {\n // When adding or removing or changing marks with pathGroup\n const parentName = isAdd\n ? change.final.parent.name\n : isRemove\n ? change.initial.parent.name\n : change.initial.type === marktypes.initial\n ? change.initial.parent.name\n : change.final.parent.name;\n let markGs = d3\n .selectAll(animVis + ` .role-scope.${parentName} > g`)\n .attr(\"class\", \"__sub\");\n\n markGs = d3\n .select(animVis + ` .role-scope.${parentName}`)\n .selectAll(\".__sub\");\n const prevData = d3.local();\n markGs.each(function(d) {\n prevData.set(this, d);\n });\n if (change.data || isAdd || isRemove) {\n markGs = markGs.data(step.nextData, (d, i) => joinKey(d, i));\n }\n\n // enter\n // if (doEnter) {\n enter(timings, markGs, marktypes.final); // , encodes.initial.enter, encodes.final.enter, \"final\")\n\n // exit\n // if (doExit) {\n exit(\n timings,\n markGs,\n marktypes.initial,\n {\n initial: encodes.initial.exit,\n final: encodes.final.exit\n },\n prevData,\n \"initial\"\n );\n\n // finalize update\n // if (doUpdate) {\n\n update(\n timings,\n markGs,\n marktypes,\n {\n initial: encodes.initial.update,\n final: encodes.final.update\n },\n prevData\n );\n\n } else if ((isRemove || !hasFacet.final) && (isAdd || !hasFacet.initial)) {\n // When adding or removing or updating a single mark without pathgroup\n\n const markG = d3.select(\n animVis + ` .mark-${marktypes.initial}.role-mark.${change.compName}`\n );\n let mark = markG.selectAll(\"path\");\n const prevData = d3.local();\n mark.each(function(d) {\n prevData.set(this, d);\n });\n if (change.data || isAdd || isRemove) {\n mark = mark.data(step.nextData);\n }\n\n // enter\n\n const enterI = mark.enter().append(\"path\");\n\n fetchAttributes(\n enterI,\n MARK_ATTRS[marktype],\n { primary: scales.initial, secondary: scales.final },\n signals.initial,\n encodes.initial.enter\n );\n if (enterI.data().length > 0) {\n let enterF = enterI.transition();\n\n fetchAttributes(\n enterF,\n MARK_ATTRS[marktype], // MARK_ATTRS_DATA_INTERPOLATE[marktype],\n scales.final,\n signals.final,\n encodes.final.enter\n );\n\n enterF\n .duration(step.timing.duration)\n .delay(step.timing.delay)\n .ease(easeFn)\n .end()\n .then(() => {\n done(\"enter\", () => {resolve();});\n });\n } else {\n done(\"enter\", () => {\n resolve();\n });\n }\n\n\n // exit\n\n // initiate exit\n const exitI = mark.exit();\n\n if (exitI.data().length > 0) {\n // finalize exit\n const exitF = exitI.transition();\n\n fetchAttributes(\n exitF,\n MARK_ATTRS[marktype], // MARK_ATTRS_DATA_INTERPOLATE[marktype],\n { primary: scales.final, secondary: scales.initial },\n signals.final,\n encodes.final.exit\n );\n\n exitF\n .duration((d, i) => step.timing.duration)\n .delay((d, i) => step.timing.delay)\n .ease(easeFn)\n .end()\n .then(function() {\n done(\"exit\", () => {resolve();});\n });\n } else {\n done(\"exit\", () => {\n resolve();\n });\n }\n\n\n // finalize update\n\n if (mark.data().length > 0) {\n if (marktypes.initial !== marktypes.final) {\n markG.classed(`mark-${marktypes.initial}`, false);\n markG.classed(`mark-${marktypes.final}`, true);\n }\n\n const updateF = mark.transition();\n\n fetchAttributes(\n updateF,\n getProp(marktypes),\n scales,\n signals.final,\n {\n initial: encodes.initial.update,\n final: encodes.final.update\n },\n prevData\n );\n updateF\n .duration(step.timing.duration)\n .delay(step.timing.delay)\n .ease(easeFn)\n .end()\n .then(() => {\n done(\"update\", () => {resolve();});\n });\n } else {\n done(\"update\", () => {\n resolve();\n });\n }\n\n\n } else if (!hasFacet.initial && hasFacet.final) {\n // single mark without pathgroup -> marks with pathgroup\n const prevData = d3.local();\n\n // Remove the single area\n let exitMark = d3\n .select(\n animVis + ` .mark-${marktypes.initial}.role-mark.${change.compName}`\n )\n .selectAll(\"path\");\n exitMark = exitMark\n .each(function(d) {\n prevData.set(this, d);\n })\n .transition();\n\n fetchAttributes(\n exitMark,\n MARK_ATTRS[marktypes.initial], // MARK_ATTRS_DATA_INTERPOLATE[marktypes.initial],\n Object.assign({}, scales, {\n primary: scales.final,\n secondary: scales.initial\n }),\n signals.final,\n Object.assign({}, encodes.initial.exit, { opacity: { value: 0 } }),\n prevData\n );\n\n exitMark\n .duration((d, i) => timings.find(t => t.set === \"exit\").duration)\n .delay((d, i) => timings.find(t => t.set === \"exit\").delay)\n .ease(easeFn)\n .remove()\n .end()\n .then(function() {\n d3.select(`${animVis } .mark-${marktypes.initial}.role-mark.${change.compName}`).remove();\n done(\"exit\", () => {resolve();});\n });\n\n // Add pathgroup with marks\n const {parent} = change.final;\n const sib = findAfterSibling(eView.scenegraph().root, parent.name);\n\n addMark(\n d3.select(`${animVis } .${parent.parent.name} > g > g`),\n change.final,\n sib ? `.${sib.name}` : undefined,\n { hasGroup: true }\n );\n\n const markGs = d3\n .select(animVis + ` .role-scope.${parent.name}`)\n .selectAll(\"g\")\n .data(step.nextData);\n\n // append group mark\n const enterIG = markGs.enter().append(\"g\");\n enterIG.append(\"path\").attr(\"class\", \"background\");\n // d (rect)\n // fill (none)\n\n // append mark mark\n const enterIMark = enterIG\n .append(\"g\")\n .append(\"g\")\n .attr(\"class\", `${marktypes.final}-mark role-mark ${change.compName}`)\n .append(\"path\");\n\n fetchAttributes(\n enterIMark,\n MARK_ATTRS[marktypes.final],\n { primary: scales.initial, secondary: scales.final },\n signals.initial,\n Object.assign({}, encodes.final.enter, { opacity: { value: 0 } })\n // encodes.initial.enter\n );\n\n const enterFMark = enterIMark\n .each(function(d) {\n prevData.set(this, d);\n })\n .transition();\n\n fetchAttributes(\n enterFMark,\n MARK_ATTRS[marktypes.final],\n scales,\n signals.final,\n encodes.final.enter,\n prevData\n );\n\n enterFMark\n .duration(\n (d, i) => timings.find(t => t.id === joinKey(d, i, \"final\")).duration\n )\n .delay(\n (d, i) => timings.find(t => t.id === joinKey(d, i, \"final\")).delay\n )\n .ease(easeFn)\n .end()\n .then(() => {\n done(\"enter\", () => {resolve();});\n });\n done(\"update\", () => {\n resolve();\n });\n } else if (hasFacet.initial && !hasFacet.final) {\n // marks with pathgroup -> single mark without pathgroup\n\n const {parent} = change.initial,\n prevData = d3.local();\n // Remove the pathgroup and the marks\n\n let exitMarks = d3\n .select(animVis + ` .role-scope.${parent.name}`)\n .selectAll(` .role-scope.${parent.name} > g`)\n .data(step.currData)\n .select(`.${change.compName} > path`)\n .each(function(d) {\n prevData.set(this, d);\n });\n\n exitMarks = exitMarks.transition();\n\n fetchAttributes(\n exitMarks,\n // MARK_ATTRS_DATA_INTERPOLATE[marktype],\n MARK_ATTRS[marktypes.initial],\n Object.assign({}, scales, {\n primary: scales.final,\n secondary: scales.initial\n }),\n signals.final,\n Object.assign({}, encodes.initial.exit, { opacity: { value: 0 } }),\n prevData\n );\n\n exitMarks\n .duration(\n (d, i) =>\n timings.find(t => t.id === joinKey(d, i, \"initial\")).duration\n )\n .delay(\n (d, i) => timings.find(t => t.id === joinKey(d, i, \"initial\")).delay\n )\n .ease(easeFn)\n .remove()\n .end()\n .then(function() {\n done(\"exit\", () => {resolve();});\n });\n\n // Add the single area\n const sib = findAfterSibling(eView.scenegraph().root, change.compName);\n\n let enterIMark = addMark(\n d3.select(`${animVis } .${change.final.parent.name} > g > g`),\n change.final,\n sib ? `.${sib.name}` : undefined\n );\n\n enterIMark = enterIMark\n .selectAll(\"path\")\n .data(step.nextData)\n .enter()\n .append(\"path\");\n\n fetchAttributes(\n enterIMark,\n MARK_ATTRS[marktypes.final],\n { primary: scales.initial, secondary: scales.final },\n signals.initial,\n Object.assign({}, encodes.final.enter, { opacity: { value: 0 } })\n );\n\n enterIMark.each(function(d) {\n prevData.set(this, d);\n });\n const enterF = enterIMark.transition();\n\n fetchAttributes(\n enterF,\n MARK_ATTRS[marktypes.final],\n scales,\n signals.final,\n encodes.final.enter,\n prevData\n );\n\n enterF\n .duration((d, i) => timings.find(t => t.set === \"enter\").duration)\n .delay((d, i) => timings.find(t => t.set === \"enter\").delay)\n .ease(easeFn)\n .end()\n .then(() => {\n done(\"enter\", () => {resolve();});\n });\n done(\"update\", () => {\n resolve();\n });\n }\n\n function getProp(marktypes) {\n const marktype =\n typeof marktypes === \"string\" ? marktypes : marktypes.final;\n const props = change.data && (isLinearMarktype(marktype)) ?\n MARK_ATTRS_DATA_INTERPOLATE[marktype] :\n MARK_ATTRS[marktype];\n if (\n isAreaLineMarktype(marktypes.initial) &&\n isAreaLineMarktype(marktypes.final) &&\n marktypes.final !== marktypes.initial\n ) {\n props[0].tweaks.push({\n type: \"attrTween\",\n val: \"d\",\n initialMarktype: marktypes.initial,\n interpolateStyle: \"update\"\n });\n props[0].tweaks.push({\n type: \"style\",\n val: \"fill\",\n initialMarktype: marktypes.initial,\n asTween: true\n });\n props[0].tweaks.push({\n type: \"style\",\n val: \"stroke\",\n initialMarktype: marktypes.initial\n });\n }\n return props;\n }\n function exit(\n timings,\n markGs,\n marktype,\n encodes,\n prevData,\n setType,\n isAllDone = false\n ) {\n // initiate exit\n let exitI = markGs.exit();\n\n // If they are already entered,\n if (exitI.data().length === 0 || !(change.data || isAdd || isRemove)) {\n exitI = markGs.filter(d => joinSet(d) === \"exit\");\n }\n if (exitI.data().length > 0) {\n const exitIMark = exitI.select(`.${change.compName} > path`);\n\n // finalize exit\n const exitFMark = exitIMark.transition();\n\n fetchAttributes(\n exitFMark,\n MARK_ATTRS[marktype],\n Object.assign({}, scales, {\n primary: scales.final,\n secondary: scales.initial\n }),\n signals.final,\n encodes,\n prevData\n );\n\n exitFMark\n .duration(\n (d, i) =>\n timings.find(t => t.id === joinKey(d, i, setType)).duration\n )\n .delay(\n (d, i) => timings.find(t => t.id === joinKey(d, i, setType)).delay\n )\n .ease(easeFn)\n .remove()\n .end()\n .then(function() {\n exitI.remove();\n done(isAllDone ? \"all\" : \"exit\", () => {resolve();});\n });\n } else {\n done(isAllDone ? \"all\" : \"exit\", () => {\n resolve();\n });\n }\n }\n function update(timings, markGs, marktypes, encodes, prevData) {\n let updateF = markGs.filter(d => joinSet(d) === \"update\");\n\n if (change.data === false && updateF.data().length === 0) {\n updateF = markGs;\n }\n let updateFMark = updateF.select(`.${change.compName}`);\n if (marktypes.initial !== marktypes.final) {\n updateFMark.classed(`mark-${marktypes.initial}`, false);\n updateFMark.classed(`mark-${marktypes.final}`, true);\n }\n updateFMark = updateFMark.select(\"path\");\n if (updateFMark.data().length > 0) {\n updateFMark = updateFMark.transition();\n const props = getProp(marktypes);\n fetchAttributes(\n updateFMark,\n props,\n // change.data ? MARK_ATTRS_DATA_INTERPOLATE[marktype] : MARK_ATTRS[marktype],\n scales,\n signals.final,\n encodes,\n prevData\n );\n updateFMark\n .duration(\n (d, i) => timings.find(t => t.id === joinKey(d, i)).duration\n )\n .delay((d, i) => timings.find(t => t.id === joinKey(d, i)).delay)\n .ease(easeFn)\n .end()\n .then(() => {\n done(\"update\", () => {resolve();});\n });\n } else {\n done(\"update\", () => {\n resolve();\n });\n }\n }\n function enter(\n timings,\n markGs,\n marktype,\n encodeInitial = encodes.initial.enter,\n encode = encodes.final.enter\n ) {\n // append group mark\n const enterIG = markGs.enter().append(\"g\");\n enterIG.append(\"path\").attr(\"class\", \"background\");\n\n // append mark mark\n let enterIMark = enterIG\n .append(\"g\")\n .append(\"g\")\n .attr(\"class\", `mark-${marktype} role-mark ${change.compName}`)\n .append(\"path\");\n\n fetchAttributes(\n enterIMark,\n MARK_ATTRS[marktype],\n { primary: scales.initial, secondary: scales.final },\n signals.initial,\n encodeInitial\n );\n\n // If they are already entered,\n if (enterIG.data().length === 0 || !(change.data || isAdd || isRemove)) {\n enterIMark = markGs\n .filter(d => joinSet(d) === \"enter\")\n .selectAll(`.${change.compName} > path`);\n }\n\n if (enterIMark.data().length > 0) {\n const prevData = d3.local();\n enterIMark.each(function(d) {\n prevData.set(this, d);\n });\n const enterFMark = enterIMark.transition();\n\n fetchAttributes(\n enterFMark,\n // MARK_ATTRS_DATA_INTERPOLATE[marktype],\n MARK_ATTRS[marktype],\n scales,\n signals.final,\n encode,\n prevData\n );\n\n enterFMark\n .duration(\n (d, i) =>\n timings.find(t => t.id === joinKey(d, i, \"final\")).duration\n )\n .delay(\n (d, i) => timings.find(t => t.id === joinKey(d, i, \"final\")).delay\n )\n .ease(easeFn)\n .end()\n .then(() => {\n done(\"enter\", () => {resolve();});\n });\n } else {\n done(\"enter\", () => {\n resolve();\n });\n }\n }\n });\n\n}\nfunction addMark (d3Selection, compSpec, before, opt = {}) {\n if (opt.hasGroup) {\n return d3Selection.insert(\"g\", before)\n .attr(\"class\", `mark-group role-scope ${compSpec.parent.name}`);\n }\n return d3Selection.insert(\"g\", before)\n .attr(\"class\", `mark-${compSpec.type} role-mark ${compSpec.name}`);\n\n}\n\nexport { areaLineInterpolate };\n","import * as d3 from \"d3\";\nimport {\n propMap,\n getEaseFn,\n findAfterSibling,\n getJoinInfo,\n findComp,\n computeScale\n} from \"./util\";\nimport { fetchAttributes, getPropVal } from \"./attributeFetcher\";\nimport { getStyle, transformItem } from \"./vega-render-util\";\nimport { copy } from \"../util/util\";\nimport { computeTiming, enumStepComputeTiming } from \"./timings\";\nimport { DEFAULT_ENCODE } from \"../default\";\n\nconst INITIAL_STATUS = {\n update: false,\n enter: false,\n exit: false\n};\n\nfunction addAxis(d3Selection, newAxisScene, prior) {\n const scName = newAxisScene.name;\n const axisSubG = d3Selection\n .insert(\"g\", prior)\n .attr(\"class\", `mark-group role-axis ${scName}`)\n .append(\"g\")\n .attr(\"transform\", transformItem(newAxisScene.items[0]));\n\n const { datum } = newAxisScene.items[0];\n if (datum.ticks) {\n axisSubG.append(\"g\").attr(\"class\", \"mark-rule role-axis-tick\");\n }\n if (datum.labels) {\n axisSubG.append(\"g\").attr(\"class\", \"mark-text role-axis-label\");\n }\n if (datum.grid) {\n axisSubG.append(\"g\").attr(\"class\", \"mark-rule role-axis-grid\");\n }\n if (datum.domain) {\n axisSubG.append(\"g\").attr(\"class\", \"mark-rule role-axis-domain\");\n }\n if (datum.title) {\n axisSubG.append(\"g\").attr(\"class\", \"mark-text role-axis-title\");\n }\n\n return d3Selection;\n}\n\nfunction doneMaker(subComponents) {\n const transitionStatus = subComponents.reduce((acc, curr) => {\n acc[curr] = copy(INITIAL_STATUS);\n return acc;\n }, {});\n\n return function(which, cb) {\n if (which.length === 2) {\n if (which[1] === \"all\") {\n transitionStatus[which[0]].exit = true;\n transitionStatus[which[0]].enter = true;\n transitionStatus[which[0]].update = true;\n } else {\n transitionStatus[which[0]][which[1]] = true;\n }\n } else if (which === \"all\") {\n transitionStatus.update = true;\n transitionStatus.enter = true;\n transitionStatus.exit = true;\n } else {\n transitionStatus[which] = true;\n }\n\n const allDone = Object.keys(transitionStatus).reduce((acc, key) => {\n return (\n acc &&\n transitionStatus[key].update &&\n transitionStatus[key].enter &&\n transitionStatus[key].exit\n );\n }, true);\n if (allDone) {\n cb();\n }\n };\n}\nfunction axisInterpolate(rawInfo, step, targetElm) {\n function joinKeyGen(subcomp) {\n return (d, i, initialOrFinal = \"initial\") => {\n if (!d) {\n return i.toString();\n }\n if (!d.__gemini__) {\n return typeof step.computeDatumId[subcomp] === \"function\"\n ? step.computeDatumId[subcomp](d, i)\n : step.computeDatumId[subcomp][initialOrFinal](d, i);\n // return step.computeDatumId[subcomp](d, i);\n }\n return getJoinInfo(d, i, step, \"joinKey\");\n };\n }\n const joinSet = (d, i) => getJoinInfo(d, i, step, \"animSet\");\n const animVis = targetElm;\n const eView = rawInfo.eVis.view;\n\n const done = doneMaker([\"tick\", \"label\", \"grid\", \"title\", \"domain\"]);\n\n return new Promise(resolve => {\n // Mark Interpolate Data\n\n const { change } = step;\n const easeFn = getEaseFn(step.timing.ease);\n\n let defaultDo = true;\n if (change.encode === false) {\n defaultDo = false;\n }\n let doTicks = defaultDo;\n let doLabels = defaultDo;\n let doAxisG = defaultDo;\n let doTitle = defaultDo;\n let doDomain = defaultDo;\n let doGrid = defaultDo;\n\n if (change.encode) {\n doTicks = !(change.encode.ticks === false);\n doLabels = !(change.encode.labels === false);\n doAxisG = !(change.encode.axis === false);\n doTitle = !(change.encode.title === false);\n doGrid = !(change.encode.grid === false);\n doDomain = !(change.encode.domain === false);\n }\n\n let isRemove = false;\n let axis = d3.selectAll(`${animVis} .role-axis.${change.compName}`);\n\n const scName = change.compName;\n // collect the scale objects to scale the initial/final values\n const { scales } = step;\n const { signals } = step;\n\n // Add Axis\n if (change.initial === null) {\n // todo: find where-to-add d3Selection by searching eView.scenegraph\n const rootMark = d3.select(`${animVis} .mark-group.root g g `);\n const rootScene = eView.scenegraph().root;\n const sib = findAfterSibling(rootScene, change.compName);\n addAxis(\n rootMark,\n findComp(rootScene, scName, \"axis\")[0],\n sib ? `.${sib.name}` : undefined\n );\n axis = d3.selectAll(`${animVis} .role-axis.${change.compName}`);\n } else if (change.final === null) {\n // Remove Axis\n isRemove = true;\n }\n\n // update axis group\n if (isRemove) {\n const manualEncode =\n change.encode && change.encode.axis ? change.encode.axis.exit : {};\n const axisG = axis.select(\"g\");\n const fAxisG = axisG.transition();\n fetchAttributes(\n fAxisG,\n [\"group\"],\n scales.final,\n signals.final,\n Object.assign({}, DEFAULT_ENCODE.axis.axis.exit, manualEncode)\n );\n fAxisG.duration(step.duration);\n } else if (doAxisG) {\n const axisG = axis.select(\"g\");\n axisG.data(step.nextData.axis);\n const fAxisG = axisG.transition();\n fetchAttributes(\n fAxisG,\n [\"group\"],\n scales.final,\n signals.final,\n step.encodes.axis.final.update\n );\n fAxisG\n .delay(step.delay)\n .duration(step.duration)\n .ease(easeFn);\n }\n\n function calculateGetValues(encodes) {\n return {\n update: {\n initial: (attr, getScales, d) => {\n const computedScales = computeScale(scales, [scName], getScales);\n return getPropVal(\n attr,\n encodes.initial.update,\n computedScales.initial,\n signals.initial,\n d\n );\n },\n final: (attr, getScales, d) => {\n const computedScales = computeScale(scales, [scName], getScales);\n return getPropVal(\n attr,\n encodes.final.update,\n computedScales.final,\n signals.final,\n d\n );\n }\n },\n enter: {\n initial: (attr, getScales, d) => {\n const computedScales = computeScale(scales, [scName], getScales);\n\n return getPropVal(\n attr,\n encodes.initial.enter,\n computedScales.initial[scName]\n ? computedScales.initial\n : computedScales.final,\n signals.initial,\n d\n );\n },\n final: (attr, getScales, d) => {\n const computedScales = computeScale(scales, [scName], getScales);\n return getPropVal(\n attr,\n encodes.final.enter,\n computedScales.final,\n signals.final,\n d\n );\n }\n },\n exit: {\n initial: (attr, getScales, d) => {\n const computedScales = computeScale(scales, [scName], getScales);\n return getPropVal(\n attr,\n encodes.initial.exit,\n computedScales.initial,\n signals.initial,\n d\n );\n },\n final: (attr, getScales, d) => {\n const computedScales = computeScale(scales, [scName], getScales);\n return getPropVal(\n attr,\n encodes.final.exit,\n computedScales.final,\n signals.final,\n d\n );\n }\n }\n };\n }\n // update tick\n if (doTicks) {\n const tickG = axis.selectAll(\".role-axis-tick\");\n const encodes = step.encodes.ticks;\n\n const TICK_ATTRS = [\"tick\"];\n\n if (step.enumerator) {\n const enumerator = step.enumerator.tick;\n const getValues = calculateGetValues(encodes);\n // bind allKeys\n const newBoundTicks = tickG\n .selectAll(\"line\")\n .data(enumerator.allKeys, d => d);\n newBoundTicks.exit().remove();\n newBoundTicks.enter().append(\"line\");\n const allProps = TICK_ATTRS.reduce((acc, prop) => {\n return acc.concat(propMap(prop));\n }, []);\n const initialTicks = tickG\n .selectAll(\"line\")\n .filter(id => [\"update\", \"exit\"].indexOf(enumerator.set(id, 0)) >= 0);\n allProps.forEach(p => {\n if (p.type === \"attrTween\") {\n const tempP = Object.assign({}, p, { type: \"attr\" });\n initialTicks[tempP.type](getStyle(tempP.val), id =>\n enumerator.getPropVal(tempP, getValues, 0, id)\n );\n } else if (p.type === \"text\") {\n initialTicks[p.type](id =>\n enumerator.getPropVal(p, getValues, 0, id)\n );\n } else {\n initialTicks[p.type](getStyle(p.val), id =>\n enumerator.getPropVal(p, getValues, 0, id)\n );\n }\n });\n\n const timings = enumStepComputeTiming(enumerator, step.timing);\n const ticks = tickG.selectAll(\"line\").transition();\n\n allProps.forEach(p => {\n if (p.type === \"attr\") {\n ticks.attrTween(p.val, d => {\n return enumerator.interpolateAlongEnumMaker(p, getValues)(d);\n });\n } else if (p.type === \"text\") {\n ticks.tween(\"text\", function(d) {\n const textInterpolator = enumerator.interpolateAlongEnumMaker(\n p,\n getValues\n )(d);\n return function(t) {\n this.innerHTML = textInterpolator(t);\n };\n });\n } else if (p.type === \"style\") {\n ticks.styleTween(getStyle(p.val), d => {\n return enumerator.interpolateAlongEnumMaker(p, getValues)(d);\n });\n }\n });\n\n // interpolate them\n ticks\n .duration((d, i) => timings[i].duration)\n .delay((d, i) => timings[i].delay)\n .ease(easeFn)\n .end()\n .then(() => {\n done([\"tick\", \"all\"], () => {\n resolve();\n });\n });\n } else {\n let ticks = tickG.selectAll(\"line\");\n const currData = step.currData.tick;\n const newData = step.nextData.tick;\n const joinKey = joinKeyGen(\"tick\");\n const timings = computeTiming(\n currData,\n newData,\n step.timing,\n joinKey,\n joinSet\n );\n\n ticks = ticks.data(newData, d => joinKey(d));\n let enterTicksI = ticks.enter().append(\"line\");\n fetchAttributes(\n enterTicksI,\n TICK_ATTRS,\n step.sameDomainDimension\n ? { primary: scales.initial, secondary: scales.final }\n : { primary: scales.final, secondary: scales.initial },\n signals.initial,\n encodes.initial.enter\n );\n\n if (enterTicksI.data().length <= 0) {\n enterTicksI = ticks.filter(d => joinSet(d) === \"enter\");\n }\n\n const enterTicksF = enterTicksI.transition();\n fetchAttributes(\n enterTicksF,\n TICK_ATTRS,\n scales.final,\n signals.final,\n encodes.final.enter\n );\n enterTicksF\n .duration(\n (d, i) =>\n timings.find(t => t.id === joinKey(d, i, \"final\")).duration\n )\n .delay(\n (d, i) => timings.find(t => t.id === joinKey(d, i, \"final\")).delay\n )\n .ease(easeFn)\n .end()\n .then(done([\"tick\", \"enter\"], () => resolve()));\n\n let exitTicksI = ticks.exit();\n if (exitTicksI.data().length <= 0) {\n exitTicksI = ticks.filter(d => joinSet(d) === \"exit\");\n }\n\n const exitTicksF = exitTicksI.transition();\n fetchAttributes(\n exitTicksF,\n TICK_ATTRS,\n // scales.final[scName] ? scales.final : scales.initial,\n step.sameDomainDimension\n ? { primary: scales.final, secondary: scales.initial }\n : { primary: scales.initial, secondary: scales.final }, // { primary: scales.final, secondary: scales.initial },\n signals.final,\n encodes.final.exit\n );\n exitTicksF\n .duration(\n (d, i) =>\n timings.find(t => t.id === joinKey(d, i, \"initial\")).duration\n )\n .delay(\n (d, i) => timings.find(t => t.id === joinKey(d, i, \"initial\")).delay\n )\n .ease(easeFn)\n .remove()\n .end()\n .then(done([\"tick\", \"exit\"], () => resolve()));\n\n if (true && ticks.data().length > 0) {\n ticks = ticks.filter(d => joinSet(d) === \"update\").transition();\n // finalize the update set of the ticks\n fetchAttributes(\n ticks,\n TICK_ATTRS,\n scales.final,\n signals.final,\n encodes.final.update\n );\n\n ticks\n .duration(\n (d, i) => timings.find(t => t.id === joinKey(d, i)).duration\n )\n .delay((d, i) => timings.find(t => t.id === joinKey(d, i)).delay)\n .ease(easeFn)\n .end()\n .then(done([\"tick\", \"update\"], () => resolve()));\n } else {\n done([\"tick\", \"update\"], () => resolve());\n }\n }\n } else {\n done([\"tick\", \"enter\"], () => resolve());\n done([\"tick\", \"exit\"], () => resolve());\n done([\"tick\", \"update\"], () => resolve());\n }\n\n // update label\n const labelG = axis.selectAll(\".role-axis-label\");\n\n const LABEL_ATTRS = [\"text\", \"align\"];\n // const LABEL_ATTRS = [ \"text\" ];\n\n if (!labelG.empty() && doLabels) {\n const encodes = step.encodes.labels;\n\n if (step.enumerator) {\n const enumerator = step.enumerator.label;\n\n const getValues = calculateGetValues(encodes);\n // bind allKeys\n const newBoundLabels = labelG\n .selectAll(\"text\")\n .data(enumerator.allKeys, d => d);\n newBoundLabels.exit().remove();\n newBoundLabels.enter().append(\"text\");\n const allProps = LABEL_ATTRS.reduce((acc, prop) => {\n return acc.concat(propMap(prop));\n }, []);\n const initialLabels = labelG\n .selectAll(\"text\")\n .filter(id => [\"update\", \"exit\"].indexOf(enumerator.set(id, 0)) >= 0);\n allProps.forEach(p => {\n if (p.type === \"attrTween\") {\n const tempP = Object.assign({}, p, { type: \"attr\" });\n initialLabels[tempP.type](getStyle(tempP.val), id =>\n enumerator.getPropVal(tempP, getValues, 0, id)\n );\n } else if (p.type === \"text\") {\n initialLabels[p.type](id =>\n enumerator.getPropVal(p, getValues, 0, id)\n );\n } else {\n initialLabels[p.type](getStyle(p.val), id =>\n enumerator.getPropVal(p, getValues, 0, id)\n );\n }\n });\n\n const labels = labelG.selectAll(\"text\").transition();\n const timings = enumStepComputeTiming(enumerator, step.timing);\n allProps.forEach(p => {\n if (p.type === \"attr\") {\n labels.attrTween(p.val, d => {\n return enumerator.interpolateAlongEnumMaker(p, getValues)(d);\n });\n } else if (p.type === \"text\") {\n labels.tween(\"text\", function(d) {\n const textInterpolator = enumerator.interpolateAlongEnumMaker(\n p,\n getValues\n )(d);\n return function(t) {\n this.innerHTML = textInterpolator(t);\n };\n });\n } else if (p.type === \"style\") {\n labels.styleTween(getStyle(p.val), d => {\n return enumerator.interpolateAlongEnumMaker(p, getValues)(d);\n });\n }\n });\n\n // interpolate them\n labels\n .duration((d, i) => timings[i].duration)\n .delay((d, i) => timings[i].delay)\n .ease(easeFn)\n .end()\n .then(() => {\n done([\"label\", \"all\"], () => {\n resolve();\n });\n });\n } else {\n let labels = labelG.selectAll(\"text\");\n const currData = step.currData.label;\n const newData = step.nextData.label;\n const joinKey = joinKeyGen(\"label\");\n const timings = computeTiming(\n currData,\n newData,\n step.timing,\n joinKey,\n joinSet\n );\n const prevData = d3.local();\n labels.each(function(d) {\n prevData.set(this, d);\n });\n labels = labels.data(newData, d => joinKey(d));\n\n let enterLabelI = labels.enter().append(\"text\");\n fetchAttributes(\n enterLabelI,\n LABEL_ATTRS,\n step.sameDomainDimension\n ? { primary: scales.initial, secondary: scales.final }\n : { primary: scales.final, secondary: scales.initial }, // { primary: scales.final, secondary: scales.initial },\n signals.initial,\n encodes.initial.enter\n );\n\n // entered labels\n\n if (enterLabelI.data().length <= 0) {\n enterLabelI = labels.filter(d => joinSet(d) === \"enter\");\n }\n\n const enterLabelF = enterLabelI.transition();\n fetchAttributes(\n enterLabelF,\n LABEL_ATTRS,\n scales.final,\n signals.final,\n encodes.final.enter\n );\n enterLabelF\n .duration(\n (d, i) =>\n timings.find(t => t.id === joinKey(d, i, \"final\")).duration\n )\n .delay(\n (d, i) => timings.find(t => t.id === joinKey(d, i, \"final\")).delay\n )\n .ease(easeFn)\n .end()\n .then(done([\"label\", \"enter\"], () => resolve()));\n\n // exit labels\n let exitLabelI = labels.exit();\n if (exitLabelI.data().length <= 0) {\n exitLabelI = labels.filter(d => joinSet(d) === \"exit\");\n }\n\n const exitLabelF = exitLabelI.transition();\n fetchAttributes(\n exitLabelF,\n LABEL_ATTRS,\n step.sameDomainDimension\n ? { primary: scales.final, secondary: scales.initial }\n : { primary: scales.initial, secondary: scales.final }, // { primary: scales.final, secondary: scales.initial },\n signals.final,\n encodes.final.exit,\n prevData\n );\n exitLabelF\n .duration(\n (d, i) =>\n timings.find(t => t.id === joinKey(d, i, \"initial\")).duration\n )\n .delay(\n (d, i) => timings.find(t => t.id === joinKey(d, i, \"initial\")).delay\n )\n .ease(easeFn)\n .remove()\n .end()\n .then(done([\"label\", \"exit\"], () => resolve()));\n\n // Todo update labels!!\n if (true && labels.data().length > 0) {\n labels = labels.filter(d => joinSet(d) === \"update\").transition();\n // finalize the update set of the labels\n fetchAttributes(\n labels,\n LABEL_ATTRS,\n scales.final,\n signals.final,\n encodes.final.update,\n prevData\n );\n\n labels\n .duration(\n (d, i) => timings.find(t => t.id === joinKey(d, i)).duration\n )\n .delay((d, i) => timings.find(t => t.id === joinKey(d, i)).delay)\n .ease(easeFn)\n .end()\n .then(done([\"label\", \"update\"], () => resolve()));\n } else {\n done([\"label\", \"update\"], () => resolve());\n }\n }\n } else {\n done([\"label\", \"enter\"], () => resolve());\n done([\"label\", \"exit\"], () => resolve());\n done([\"label\", \"update\"], () => resolve());\n }\n\n // update grid\n let gridG = axis.selectAll(\".role-axis-grid\");\n const GRID_ATTRS = [\"grid\"];\n\n if (\n (!step.change.initial || step.change.initial.grid === false) &&\n step.change.final &&\n step.change.final.grid === true\n ) {\n // add grid\n gridG = axis\n .select(\"g\")\n .select(\"g\")\n .append(\"g\")\n .attr(\"class\", \"mark-rule role-axis-grid\");\n }\n if (!gridG.empty() && doGrid) {\n const encodes = step.encodes.grid;\n\n if (step.enumerator) {\n const enumerator = step.enumerator.grid;\n\n const getValues = calculateGetValues(encodes);\n\n // bind allKeys\n const newBoundGrids = gridG\n .selectAll(\"line\")\n .data(enumerator.allKeys, d => d);\n newBoundGrids.exit().remove();\n newBoundGrids.enter().append(\"line\");\n const initialGrids = gridG\n .selectAll(\"line\")\n .filter(id => [\"update\", \"exit\"].indexOf(enumerator.set(id, 0)) >= 0);\n // init\n const allProps = GRID_ATTRS.reduce((acc, prop) => {\n return acc.concat(propMap(prop));\n }, []);\n\n allProps.forEach(p => {\n if (p.type === \"attrTween\") {\n const tempP = Object.assign({}, p, { type: \"attr\" });\n initialGrids[tempP.type](getStyle(tempP.val), id =>\n enumerator.getPropVal(tempP, getValues, 0, id)\n );\n } else if (p.type === \"text\") {\n initialGrids[p.type](id =>\n enumerator.getPropVal(p, getValues, 0, id)\n );\n } else {\n initialGrids[p.type](getStyle(p.val), id =>\n enumerator.getPropVal(p, getValues, 0, id)\n );\n }\n });\n\n const grids = gridG.selectAll(\"line\").transition();\n const timings = enumStepComputeTiming(enumerator, step.timing);\n\n allProps.forEach(p => {\n if (p.type === \"attr\") {\n grids.attrTween(p.val, d => {\n return enumerator.interpolateAlongEnumMaker(p, getValues)(d);\n });\n } else if (p.type === \"text\") {\n grids.tween(\"text\", function(d) {\n const textInterpolator = enumerator.interpolateAlongEnumMaker(\n p,\n getValues\n )(d);\n return function(t) {\n this.innerHTML = textInterpolator(t);\n };\n });\n } else if (p.type === \"style\") {\n grids.styleTween(getStyle(p.val), d => {\n return enumerator.interpolateAlongEnumMaker(p, getValues)(d);\n });\n }\n });\n\n // interpolate them\n grids\n .duration((d, i) => timings[i].duration)\n .delay((d, i) => timings[i].delay)\n .ease(easeFn)\n .end()\n .then(() => {\n done([\"grid\", \"all\"], () => {\n resolve();\n });\n });\n } else {\n let grids = gridG.selectAll(\"line\");\n const currData = step.currData.grid;\n const newData = step.nextData.grid;\n const joinKey = joinKeyGen(\"grid\");\n const timings = computeTiming(\n currData,\n newData,\n step.timing,\n joinKey,\n joinSet\n );\n const prevData = d3.local();\n grids.each(function(d) {\n prevData.set(this, d);\n });\n grids = grids.data(newData, d => joinKey(d));\n let enterGridI = grids.enter().append(\"line\");\n fetchAttributes(\n enterGridI,\n GRID_ATTRS,\n // scales.initial[scName] ? scales.initial : scales.final,\n step.sameDomainDimension\n ? { primary: scales.initial, secondary: scales.final }\n : { primary: scales.final, secondary: scales.initial },\n signals.initial,\n encodes.initial.enter\n );\n\n if (enterGridI.data().length <= 0) {\n enterGridI = grids.filter(d => joinSet(d) === \"enter\");\n }\n\n const enterGridF = enterGridI.transition();\n fetchAttributes(\n enterGridF,\n GRID_ATTRS,\n scales.final,\n signals.final,\n encodes.final.enter\n );\n enterGridF\n .duration(\n (d, i) =>\n timings.find(t => t.id === joinKey(d, i, \"final\")).duration\n )\n .delay(\n (d, i) => timings.find(t => t.id === joinKey(d, i, \"final\")).delay\n )\n .ease(easeFn)\n .end()\n .then(done([\"grid\", \"enter\"], () => resolve()));\n\n let exitGridI = grids.exit();\n if (exitGridI.data().length <= 0) {\n exitGridI = grids.filter(d => joinSet(d) === \"exit\");\n }\n\n const exitGridF = exitGridI.transition();\n\n fetchAttributes(\n exitGridF,\n GRID_ATTRS,\n step.sameDomainDimension\n ? { primary: scales.final, secondary: scales.initial }\n : { primary: scales.initial, secondary: scales.final },\n // scales.final[scName] ? scales.final : scales.initial,\n signals.final,\n encodes.final.exit,\n prevData\n );\n exitGridF\n .duration(\n (d, i) =>\n timings.find(t => t.id === joinKey(d, i, \"initial\")).duration\n )\n .delay(\n (d, i) => timings.find(t => t.id === joinKey(d, i, \"initial\")).delay\n )\n .ease(easeFn)\n .remove()\n .end()\n .then(done([\"grid\", \"exit\"], () => resolve()));\n\n grids = grids.filter(d => joinSet(d) === \"update\").transition();\n // finalize the update set of the grids\n fetchAttributes(\n grids,\n GRID_ATTRS,\n scales.final,\n signals.final,\n encodes.final.update,\n prevData\n );\n\n grids\n .duration(\n (d, i) => timings.find(t => t.id === joinKey(d, i)).duration\n )\n .delay((d, i) => timings.find(t => t.id === joinKey(d, i)).delay)\n .ease(easeFn)\n .end()\n .then(done([\"grid\", \"update\"], () => resolve()));\n }\n } else {\n done([\"grid\", \"enter\"], () => resolve());\n done([\"grid\", \"exit\"], () => resolve());\n done([\"grid\", \"update\"], () => resolve());\n }\n // update title\n const TITLE_ATTRS = [\"title\", \"align\"];\n const titleG = axis.selectAll(\".role-axis-title\");\n if (!titleG.empty() && doTitle) {\n // Assume that there is no data binding (no enter and exit)\n\n const encodes = step.encodes.title;\n let title = titleG.selectAll(\"text\");\n\n const iData = title.data();\n let fData = [];\n if (!isRemove) {\n\n if (step.change.scale === false) {\n fData = iData;\n } else {\n fData = eView._runtime.data[scName].values.value[0].items.filter(\n item => item.role === \"axis-title\"\n )[0].items;\n }\n }\n\n title.data(iData, d => d.text);\n title = title.data(fData, d => d.text);\n const enterTitleI = title.enter().append(\"text\");\n\n fetchAttributes(\n enterTitleI,\n TITLE_ATTRS,\n {},\n signals.initial,\n encodes.initial.enter\n );\n\n const enterTitleF = enterTitleI.transition();\n fetchAttributes(\n enterTitleF,\n TITLE_ATTRS,\n {},\n signals.final,\n encodes.final.enter\n );\n enterTitleF\n .duration(step.duration)\n .delay(step.delay)\n .ease(easeFn)\n .end()\n .then(done([\"title\", \"enter\"], () => resolve()));\n\n const exitTitleI = title.exit();\n const exitTitleF = exitTitleI.transition();\n fetchAttributes(\n exitTitleF,\n TITLE_ATTRS,\n {},\n signals.final,\n encodes.final.exit\n );\n exitTitleF\n .duration(step.duration)\n .delay(step.delay)\n .ease(easeFn)\n .end()\n .then(done([\"title\", \"exit\"], () => resolve()));\n\n title = title.transition();\n // update the title\n fetchAttributes(\n title,\n TITLE_ATTRS,\n {},\n signals.final,\n encodes.final.update\n );\n\n title\n .duration(step.duration)\n .delay(step.delay)\n .ease(easeFn)\n .end()\n .then(done([\"title\", \"update\"], () => resolve()));\n } else {\n done([\"title\", \"enter\"], () => resolve());\n done([\"title\", \"exit\"], () => resolve());\n done([\"title\", \"update\"], () => resolve());\n }\n\n // update domain\n const DOMAIN_ATTRS = [\"domain\"];\n\n const domainG = axis.selectAll(\".role-axis-domain\");\n if (!domainG.empty() && doDomain) {\n const encodes = step.encodes.domain;\n let fData = [];\n if (!isRemove) {\n fData = eView._runtime.data[scName].values.value[0].items.filter(\n item => item.role === \"axis-domain\"\n )[0].items;\n }\n let domain = domainG.selectAll(\"line\").data(fData);\n\n const iDomainEnter = domain.enter().append(\"line\");\n fetchAttributes(\n iDomainEnter,\n DOMAIN_ATTRS,\n {},\n signals.initial,\n encodes.initial.enter\n );\n const fDomainEnter = iDomainEnter.transition();\n fetchAttributes(\n fDomainEnter,\n DOMAIN_ATTRS,\n {},\n signals.final,\n encodes.final.enter\n );\n fDomainEnter\n .duration(step.duration)\n .delay(step.delay)\n .ease(easeFn)\n .end()\n .then(done([\"domain\", \"enter\"], () => resolve()));\n\n const iDomainExit = domain.exit();\n fetchAttributes(\n iDomainExit,\n DOMAIN_ATTRS,\n {},\n signals.initial,\n encodes.initial.exit\n );\n const fDomainExit = iDomainExit.transition();\n fetchAttributes(\n fDomainExit,\n DOMAIN_ATTRS,\n {},\n signals.final,\n encodes.final.exit\n );\n fDomainExit\n .duration(step.duration)\n .delay(step.delay)\n .ease(easeFn)\n .end()\n .then(done([\"domain\", \"exit\"], () => resolve()));\n\n // update the domain\n\n fetchAttributes(\n domain,\n DOMAIN_ATTRS,\n scales.initial,\n signals.initial,\n encodes.initial.update\n );\n domain = domain.transition();\n\n fetchAttributes(\n domain,\n DOMAIN_ATTRS,\n scales.final,\n signals.final,\n encodes.final.update\n );\n\n domain\n .duration(step.duration)\n .delay(step.delay)\n .ease(easeFn)\n .end()\n .then(done([\"domain\", \"update\"], () => resolve()));\n } else {\n done([\"domain\", \"enter\"], () => resolve());\n done([\"domain\", \"exit\"], () => resolve());\n done([\"domain\", \"update\"], () => resolve());\n }\n });\n}\n\nexport { axisInterpolate };\n","import * as d3 from \"d3\";\nimport {\n propMap,\n getEaseFn,\n findAfterSibling,\n getJoinInfo,\n findComp,\n svgRender,\n computeScale\n} from \"./util.js\";\nimport { fetchAttributes, calculateGetValeus } from \"./attributeFetcher\";\nimport { getStyle } from \"./vega-render-util.js\";\nimport { copy } from \"../util/util.js\";\nimport { computeTiming, enumStepComputeTiming } from \"./timings\";\n\nconst LEGEND_CHANNELS = [\n \"fill\",\n \"opacity\",\n \"shape\",\n \"size\",\n \"stroke\",\n \"strokeDash\",\n \"strokeWidth\"\n];\nconst INITIAL_STATUS = {\n update: false,\n enter: false,\n exit: false\n};\n\nfunction doneMaker(subComponents, legendTypes, legend) {\n const transitionStatus = subComponents.reduce((acc, curr) => {\n acc[curr] = copy(INITIAL_STATUS);\n return acc;\n }, {});\n\n return function(which, cb) {\n if (which.length === 2) {\n if (which[1] === \"all\") {\n transitionStatus[which[0]].update = transitionStatus[\n which[0]\n ].enter = transitionStatus[which[0]].exit = true;\n } else {\n transitionStatus[which[0]][which[1]] = true;\n }\n } else if (which === \"all\") {\n transitionStatus.update = transitionStatus.enter = transitionStatus.exit = true;\n } else {\n transitionStatus[which] = true;\n }\n\n const allDone =\n [\"title\", \"labels\", \"symbols\", \"pairs\", \"entries\", \"legend\"].reduce(\n (acc, key) => {\n return (\n acc &&\n transitionStatus[key].update &&\n transitionStatus[key].enter &&\n transitionStatus[key].exit\n );\n },\n true\n ) ||\n [\"title\", \"labels\", \"gradient\", \"bands\", \"entries\", \"legend\"].reduce(\n (acc, key) => {\n return (\n acc &&\n transitionStatus[key].update &&\n transitionStatus[key].enter &&\n transitionStatus[key].exit\n );\n },\n true\n );\n if (allDone) {\n if (legendTypes.final) {\n if (legendTypes.final === \"gradient\") {\n legend.selectAll(\".mark-group.role-scope\").remove();\n } else {\n const entryG = legend.select(\".role-legend-entry > g > g\");\n legend\n .select(\".role-legend-entry > g > g > .mark-text.role-legend-label\")\n .remove();\n entryG.select(\".mark-text.role-legend-band\").remove();\n entryG.select(\".mark-text.role-legend-gradient\").remove();\n }\n }\n cb();\n }\n };\n}\n\nfunction legendInterpolate(rawInfo, step, targetElm) {\n function joinKeyGen(subcomp) {\n return (d, i, initialOrFinal = \"initial\") => {\n if (!d) {\n return i.toString();\n }\n if (!d.__gemini__) {\n return typeof step.computeDatumId[subcomp] === \"function\"\n ? step.computeDatumId[subcomp](d, i)\n : step.computeDatumId[subcomp][initialOrFinal](d, i);\n // return step.computeDatumId[subcomp](d, i);\n }\n return getJoinInfo(d, i, step, \"joinKey\");\n };\n }\n const joinSet = (d, i) => {\n return d.__gemini__ ? getJoinInfo(d, i, step, \"animSet\") : undefined;\n };\n const eView = rawInfo.eVis.view;\n\n return new Promise((resolve) => {\n // Mark Interpolate Data\n\n const { change } = step;\n const easeFn = getEaseFn(step.timing.ease);\n\n let doTitle;\n let doSymbols;\n let doLabels;\n let doGradient;\n\n doTitle = doSymbols = doLabels = doGradient = true;\n\n if (change.encode === false) {\n doTitle = doSymbols = doLabels = doGradient = false;\n } else if (change.encode) {\n doTitle = !(change.encode.title === false);\n doSymbols = !(change.encode.symbols === false);\n doLabels = !(change.encode.labels === false);\n doGradient = !(change.encode.gradient === false);\n }\n\n const { isRemove } = step;\n const { isAdd } = step;\n let legend = d3.select(`${targetElm} .role-legend.${change.compName}`);\n const done = doneMaker(\n [\n \"entries\",\n \"title\",\n \"labels\",\n \"gradient\",\n \"symbols\",\n \"legend\",\n \"pairs\",\n \"bands\"\n ],\n step.legendTypes,\n legend\n );\n const { compName } = change;\n // collect the scale objects to scale the initial/final values\n const { scales } = step;\n const { signals } = step;\n const { encodes } = step;\n const { legendTypes } = step;\n\n // add/remove/update legend\n if (isAdd) {\n const rootMark = d3.select(`${targetElm} .mark-group.root g g `);\n const rootScene = eView.scenegraph().root;\n const sib = findAfterSibling(rootScene, change.compName);\n addLegend(\n rootMark,\n findComp(rootScene, change.compName, \"legend\")[0],\n sib ? `.${sib.name}` : undefined\n );\n legend = d3.selectAll(`${targetElm} .role-legend.${change.compName}`);\n\n done([\"legend\", \"all\"], () => resolve());\n done([\"entries\", \"all\"], () => resolve());\n } else if (isRemove) {\n const manualEncode =\n change.encode && change.encode.legend ? change.encode.legend.exit : {};\n const legendG = legend.select(\"g\");\n const fLegendG = legendG.transition();\n fetchAttributes(\n fLegendG,\n [\"group\"],\n scales.final,\n signals.final,\n Object.assign({}, step.encodes.legend.final.exit, manualEncode)\n );\n fLegendG\n .duration(step.duration)\n .end()\n .then(() => {\n done([\"legend\", \"all\"], () => resolve());\n done([\"entries\", \"all\"], () => resolve());\n });\n } else {\n // update legend G\n const fLegendD = findComp(eView.scenegraph().root, compName, \"legend\")[0]\n .items[0];\n const encode = {\n x: { value: fLegendD.x },\n y: { value: fLegendD.y }\n };\n\n const legendG = legend.select(\"g\");\n const fData = [eView._runtime.data[compName].values.value[0].datum];\n legendG.data(fData);\n const fLegendG = legendG.transition();\n fetchAttributes(\n fLegendG,\n [\"group\"],\n scales.final,\n signals.final,\n Object.assign({}, step.encodes.legend.update, encode)\n );\n fLegendG\n .duration(step.duration)\n .end()\n .then(() => {\n done([\"legend\", \"all\"], () => resolve());\n done([\"entries\", \"all\"], () => resolve());\n });\n }\n\n const scNames = {\n initial: [],\n final: []\n };\n LEGEND_CHANNELS.forEach(channel => {\n if (change.initial && change.initial[channel]) {\n scNames.initial.push(change.initial[channel]);\n }\n if (change.final && change.final[channel]) {\n scNames.final.push(change.final[channel]);\n }\n });\n\n let finalScaleNames = [];\n if (change.scale === true || isAdd) {\n finalScaleNames = scNames.final;\n } else if (Array.isArray(change.scale)) {\n finalScaleNames = change.scale;\n } else if (typeof change.scale === \"object\") {\n finalScaleNames = Object.keys(change.scale).filter(\n scName => change.scale[scName]\n );\n }\n\n if (step.enumerator) {\n if (legendTypes.initial !== legendTypes.final) {\n console.error(\"Cannot enumerate the change of the legend type.\");\n }\n const legType = legendTypes.initial || legendTypes.final;\n let subComps;\n if (legType === \"symbol\") {\n const pairs = legend\n .select(\".role-legend-entry .role-scope\")\n .selectAll(\".role-scope > g\")\n .data(step.enumerator.pairs.allKeys, d => d);\n pairs.exit().remove();\n const enterPairSubGs = pairs\n .enter()\n .append(\"g\")\n .append(\"g\");\n enterPairSubGs\n .append(\"g\")\n .attr(\"class\", \"mark-symbol role-legend-symbol\")\n .append(\"path\")\n .datum((d, i) => step.enumerator.symbols.allKeys[i]);\n enterPairSubGs\n .append(\"g\")\n .attr(\"class\", \"mark-text role-legend-label\")\n .append(\"text\")\n .datum((d, i) => step.enumerator.labels.allKeys[i]);\n\n subComps = [\n {\n name: \"pairs\",\n selection: legend\n .select(\".role-legend-entry .role-scope\")\n .selectAll(\".role-scope > g\"),\n props: [\"group\"]\n },\n {\n name: \"symbols\",\n selection: legend\n .select(\".role-legend-entry .role-scope\")\n .selectAll(\".role-legend-symbol > path\"),\n props: [\"symbol\"]\n },\n {\n name: \"labels\",\n selection: legend\n .select(\".role-legend-entry .role-scope\")\n .selectAll(\".role-legend-label > text\"),\n props: [\"text\"]\n }\n ];\n } else {\n // bind allKeys\n const selection = legend\n .select(\".role-legend-label\")\n .selectAll(\"text\")\n .data(step.enumerator.labels.allKeys, d => d);\n selection.exit().remove();\n selection.enter().append(\"text\");\n\n subComps = [\n {\n name: \"labels\",\n selection: legend.select(\".role-legend-label\").selectAll(\"text\"),\n svgElmType: \"text\",\n props: [\"text\"]\n }\n ];\n if (step.change.initial.isBand) {\n const selection = legend\n .select(\".role-legend-band \")\n .selectAll(\"path\")\n .data(step.enumerator.bands.allKeys, d => d);\n selection.exit().remove();\n selection.enter().append(\"path\");\n\n subComps.push({\n name: \"bands\",\n selection: legend.select(\".role-legend-band \").selectAll(\"path\"),\n svgElmType: \"path\",\n props: [\"rect\"]\n });\n } else {\n done([\"bands\", \"all\"], () => {\n resolve();\n });\n }\n done([\"gradient\", \"all\"], () => {\n resolve();\n }); // The gradient elms cannot be enumerated.\n }\n\n subComps.forEach(subComp => {\n const subCompEnumerator = step.enumerator[subComp.name];\n const getValues = calculateGetValeus(\n encodes[subComp.name],\n scales,\n signals,\n computeScale,\n finalScaleNames\n );\n const allProps = subComp.props.reduce((acc, prop) => {\n return acc.concat(propMap(prop));\n }, []);\n\n const initials = subComp.selection.filter(\n id => [\"update\", \"exit\"].indexOf(subCompEnumerator.set(id, 0)) >= 0\n );\n allProps.forEach(p => {\n if (p.type === \"attrTween\") {\n const tempP = Object.assign({}, p, { type: \"attr\" });\n initials[tempP.type](getStyle(tempP.val), id =>\n subCompEnumerator.getPropVal(tempP, getValues, 0, id)\n );\n } else if (p.type === \"text\") {\n initials[p.type](id =>\n subCompEnumerator.getPropVal(p, getValues, 0, id)\n );\n } else {\n initials[p.type](getStyle(p.val), id =>\n subCompEnumerator.getPropVal(p, getValues, 0, id)\n );\n }\n });\n\n const subCompTransition = subComp.selection.transition();\n const timings = enumStepComputeTiming(subCompEnumerator, step.timing);\n allProps.forEach(p => {\n if (p.type === \"attr\") {\n subCompTransition.attrTween(p.val, d => {\n return subCompEnumerator.interpolateAlongEnumMaker(\n p,\n getValues\n )(d);\n });\n } else if (p.type === \"attrTween\") {\n subCompTransition.attrTween(p.val, function(d) {\n return subCompEnumerator.interpolateAlongEnumMaker(\n p,\n getValues,\n this\n )(d);\n });\n } else if (p.type === \"text\") {\n subCompTransition.tween(\"text\", function(d) {\n const textInterpolator = subCompEnumerator.interpolateAlongEnumMaker(\n p,\n getValues\n )(d);\n return function(t) {\n this.innerHTML = textInterpolator(t);\n };\n });\n } else if (p.type === \"style\") {\n subCompTransition.styleTween(getStyle(p.val), d => {\n return subCompEnumerator.interpolateAlongEnumMaker(\n p,\n getValues\n )(d);\n });\n }\n });\n\n // interpolate them\n subCompTransition\n .duration((d, i) => timings[i].duration)\n .delay((d, i) => timings[i].delay)\n .ease(easeFn)\n .end()\n .then(() => {\n done([subComp.name, \"all\"], () => {\n resolve();\n });\n });\n });\n } else {\n if (\n [legendTypes.initial, legendTypes.final].indexOf(\"symbol\") >= 0 &&\n (doSymbols || doLabels)\n ) {\n if (legendTypes.initial !== \"symbol\") {\n // add the frame for the symbol legend.\n legend\n .select(\" .role-legend-entry > g > g\")\n .append(\"g\")\n .attr(\"class\", \"mark-group role-scope\");\n }\n\n let pairs = legend\n .select(\".role-legend-entry .role-scope\")\n .selectAll(\".role-scope > g\");\n\n const joinKey = {\n pairs: joinKeyGen(\"pairs\"),\n symbols: joinKeyGen(\"symbols\"),\n labels: joinKeyGen(\"labels\")\n }; // currData.symbols === currData.labels\n const nextDataLabels =\n legendTypes.final !== \"symbol\" ? [] : step.nextData.labels;\n const currDataLabels =\n legendTypes.initial !== \"symbol\" ? [] : step.currData.labels;\n const timings = {\n pairs: computeTiming(\n step.currData.pairs,\n step.nextData.pairs,\n step.timing,\n joinKey.pairs,\n joinSet\n ),\n symbols: computeTiming(\n step.currData.symbols,\n step.nextData.symbols,\n step.timing,\n joinKey.symbols,\n joinSet\n ),\n labels: computeTiming(\n currDataLabels,\n nextDataLabels,\n step.timing,\n joinKey.labels,\n joinSet\n )\n };\n\n const prevData = d3.local();\n\n pairs.selectAll(\".role-legend-symbol > path\").each(function(d) {\n prevData.set(this, d);\n });\n\n pairs = pairs.data(step.nextData.pairs, d => joinKey.pairs(d));\n // if (!isRemove && (isAnimSetSymbols.enter || isAnimSetLabels.enter)) {\n if (!isRemove && pairs.enter().data().length > 0) {\n let enterPairsI = pairs.enter().append(\"g\");\n const enterPairsIsubG = enterPairsI.append(\"g\");\n let enterSymbolsI = enterPairsIsubG\n .append(\"g\")\n .attr(\"class\", \"mark-symbol role-legend-symbol\")\n .append(\"path\")\n .datum((d, i) => step.nextData.symbols[i]);\n let enterLabelsI = enterPairsIsubG\n .append(\"g\")\n .attr(\"class\", \"mark-text role-legend-label\")\n .append(\"text\")\n .datum((d, i) => step.nextData.labels[i]);\n\n const actingScales = step.sameDomainDimension\n ? { primary: scales.initial, secondary: scales.final }\n : { primary: scales.final, secondary: scales.initial };\n\n fetchAttributes(\n enterPairsI,\n [\"group\"],\n actingScales,\n signals.initial,\n encodes.pairs.initial.enter\n );\n\n fetchAttributes(\n enterSymbolsI,\n [\"symbol\"],\n actingScales,\n signals.initial,\n encodes.symbols.initial.enter\n );\n\n fetchAttributes(\n enterLabelsI,\n [\"text\"],\n actingScales,\n signals.initial,\n encodes.labels.initial.enter\n );\n\n if (enterPairsI.data().length <= 0) {\n enterPairsI = pairs.filter(d => joinSet(d) === \"enter\");\n }\n\n const enterPairsF = enterPairsI.transition();\n fetchAttributes(\n enterPairsF,\n [\"group\"],\n scales.final,\n signals.final,\n encodes.pairs.final.enter\n );\n enterPairsF\n .duration(\n (d, i) =>\n timings.pairs.find(t => t.id === joinKey.pairs(d, i, \"final\"))\n .duration\n )\n .delay(\n (d, i) =>\n timings.pairs.find(t => t.id === joinKey.pairs(d, i, \"final\"))\n .delay\n )\n .ease(easeFn)\n .end()\n .then(done([\"pairs\", \"enter\"], () => resolve()));\n\n if (enterSymbolsI.data().length <= 0) {\n enterSymbolsI = pairs\n .selectAll(\".role-legend-symbol > path\")\n .filter(d => joinSet(d) === \"enter\");\n }\n const enterSymbolsF = enterSymbolsI.transition();\n fetchAttributes(\n enterSymbolsF,\n [\"symbol\"],\n scales,\n signals.final,\n encodes.symbols.final.enter\n );\n enterSymbolsF\n .duration(\n (d, i) =>\n timings.symbols.find(\n t => t.id === joinKey.symbols(d, i, \"final\")\n ).duration\n )\n .delay(\n (d, i) =>\n timings.symbols.find(\n t => t.id === joinKey.symbols(d, i, \"final\")\n ).delay\n )\n .ease(easeFn)\n .end()\n .then(done([\"symbols\", \"enter\"], () => resolve()));\n\n if (enterLabelsI.data().length <= 0) {\n enterLabelsI = pairs\n .selectAll(\".role-legend-label > text\")\n .filter(d => joinSet(d) === \"enter\");\n }\n const enterLabelsF = enterLabelsI.transition();\n fetchAttributes(\n enterLabelsF,\n [\"text\"],\n scales.final,\n signals.final,\n encodes.labels.final.enter\n );\n enterLabelsF\n .duration(\n (d, i) =>\n timings.labels.find(t => t.id === joinKey.labels(d, i, \"final\"))\n .duration\n )\n .delay(\n (d, i) =>\n timings.labels.find(t => t.id === joinKey.labels(d, i, \"final\"))\n .delay\n )\n .ease(easeFn)\n .end()\n .then(done([\"labels\", \"enter\"], () => resolve()));\n } else {\n done([\"pairs\", \"enter\"], () => resolve());\n done([\"symbols\", \"enter\"], () => resolve());\n done([\"labels\", \"enter\"], () => resolve());\n }\n\n // if (!isAdd && (isAnimSetSymbols.exit || isAnimSetLabels.exit)) {\n if (!isAdd && pairs.exit().data().length > 0) {\n let exitPairsI = pairs.exit();\n if (exitPairsI.data().length <= 0) {\n exitPairsI = pairs.filter(d => joinSet(d) === \"exit\");\n }\n const actingScales = step.sameDomainDimension\n ? { primary: scales.final, secondary: scales.initial }\n : { primary: scales.initial, secondary: scales.final };\n\n const exitPairsF = exitPairsI.transition();\n fetchAttributes(\n exitPairsF,\n [\"group\"],\n actingScales,\n signals.final,\n encodes.pairs.final.exit\n );\n exitPairsF\n .duration(\n (d, i) =>\n timings.pairs.find(t => t.id === joinKey.pairs(d, i, \"initial\"))\n .duration\n )\n .delay(\n (d, i) =>\n timings.pairs.find(t => t.id === joinKey.pairs(d, i, \"initial\"))\n .delay\n )\n .ease(easeFn)\n .remove()\n .end()\n .then(done([\"pairs\", \"exit\"], () => resolve()));\n\n const exitSymbolsI = exitPairsI.selectAll(\n \".role-legend-symbol > path\"\n );\n const exitSymbolsF = exitSymbolsI.transition();\n fetchAttributes(\n exitSymbolsF,\n [\"symbol\"],\n Object.assign({}, scales, {\n primary: scales.final,\n secondary: scales.initial\n }),\n signals.final,\n encodes.symbols.final.exit\n );\n exitSymbolsF\n .duration(\n (d, i) =>\n timings.symbols.find(\n t => t.id === joinKey.symbols(d, i, \"initial\")\n ).duration\n )\n .delay(\n (d, i) =>\n timings.symbols.find(\n t => t.id === joinKey.symbols(d, i, \"initial\")\n ).delay\n )\n .ease(easeFn)\n .remove()\n .end()\n .then(done([\"symbols\", \"exit\"], () => resolve()));\n\n const exitLabelsI = exitPairsI.selectAll(\".role-legend-label > text\");\n const exitLabelsF = exitLabelsI.transition();\n fetchAttributes(\n exitLabelsF,\n [\"text\"],\n actingScales,\n signals.final,\n encodes.labels.final.exit\n );\n exitLabelsF\n .duration(\n (d, i) =>\n timings.labels.find(\n t => t.id === joinKey.labels(d, i, \"initial\")\n ).duration\n )\n .delay(\n (d, i) =>\n timings.labels.find(\n t => t.id === joinKey.labels(d, i, \"initial\")\n ).delay\n )\n .ease(easeFn)\n .remove()\n .end()\n .then(done([\"labels\", \"exit\"], () => resolve()));\n } else {\n done([\"pairs\", \"exit\"], () => resolve());\n done([\"labels\", \"exit\"], () => resolve());\n done([\"symbols\", \"exit\"], () => resolve());\n }\n\n if (pairs.data().length > 0) {\n // if ((isAnimSetSymbols.update || isAnimSetLabels.update) && pairs.data().length > 0) {\n const updatePairsF = pairs\n .filter(d => joinSet(d) === \"update\")\n .transition();\n // finalize the update set of the pairs\n fetchAttributes(\n updatePairsF,\n [\"group\"],\n scales.final,\n signals.final,\n encodes.pairs.final.update\n );\n\n updatePairsF\n .duration(\n (d, i) =>\n timings.pairs.find(t => t.id === joinKey.pairs(d, i)).duration\n )\n .delay(\n (d, i) =>\n timings.pairs.find(t => t.id === joinKey.pairs(d, i)).delay\n )\n .ease(easeFn)\n .end()\n .then(done([\"pairs\", \"update\"], () => resolve()));\n\n const updateSymbolsI = pairs\n .select(\".role-legend-symbol > path\")\n .datum((d, i) => step.nextData.symbols[i]);\n const updateSymbolsF = updateSymbolsI.transition();\n fetchAttributes(\n updateSymbolsF,\n [\"symbol\"],\n scales,\n signals.final,\n {\n initial: encodes.symbols.initial.update,\n final: encodes.symbols.final.update\n },\n prevData\n );\n updateSymbolsF\n .duration(\n (d, i) =>\n timings.symbols.find(t => t.id === joinKey.symbols(d, i))\n .duration\n )\n .delay(\n (d, i) =>\n timings.symbols.find(t => t.id === joinKey.symbols(d, i)).delay\n )\n .ease(easeFn)\n .end()\n .then(done([\"symbols\", \"update\"], () => resolve()));\n\n const updateLabelsI = pairs\n .select(\".role-legend-label > text\")\n .datum((d, i) => step.nextData.labels[i]);\n const updateLabelsF = updateLabelsI.transition();\n fetchAttributes(\n updateLabelsF,\n [\"text\"],\n scales.final,\n signals.final,\n encodes.labels.final.update\n );\n updateLabelsF\n .duration(\n (d, i) =>\n timings.labels.find(t => t.id === joinKey.labels(d, i)).duration\n )\n .delay(\n (d, i) =>\n timings.labels.find(t => t.id === joinKey.labels(d, i)).delay\n )\n .ease(easeFn)\n .end()\n .then(done([\"labels\", \"update\"], () => resolve()));\n } else {\n done([\"pairs\", \"update\"], () => resolve());\n done([\"symbols\", \"update\"], () => resolve());\n done([\"labels\", \"update\"], () => resolve());\n }\n }\n if (\n [legendTypes.initial, legendTypes.final].indexOf(\"gradient\") >= 0 &&\n (doGradient || doLabels)\n ) {\n const entryG = legend.select(\" .role-legend-entry > g > g\");\n if (legendTypes.initial !== \"gradient\") {\n // add the frame for the symbol legend.\n entryG.append(\"g\").attr(\"class\", \"mark-text role-legend-label\");\n\n if (step.change.final.isBand) {\n entryG.append(\"g\").attr(\"class\", \"mark-rect role-legend-band\");\n } else {\n entryG.append(\"g\").attr(\"class\", \"mark-rect role-legend-gradient\");\n }\n }\n\n if (step.change.initial.isBand && !step.change.final.isBand ) {\n entryG.append(\"g\").attr(\"class\", \"mark-rect role-legend-gradient\");\n } else if (!step.change.initial.isBand && step.change.final.isBand) {\n entryG.append(\"g\").attr(\"class\", \"mark-rect role-legend-band\");\n }\n\n const labelG = legend.select(\n \" .role-legend-entry > g > g > .role-legend-label\"\n );\n if (doLabels && !labelG.empty()) {\n gradientSubComp(\"labels\", labelG, \"text\", [\"text\"]);\n } else {\n done([\"labels\", \"all\"], () => resolve());\n }\n\n const gradientG = legend.select(\".role-legend-gradient\");\n if (doGradient && !gradientG.empty()) {\n gradientSubComp(\"gradient\", gradientG, \"path\", [\"gradient\"]);\n } else {\n done([\"gradient\", \"all\"], () => resolve());\n }\n\n const bandsG = legend.select(\".role-legend-band\");\n if (doGradient && !bandsG.empty()) {\n gradientSubComp(\"bands\", bandsG, \"path\", [\"rect\"]);\n } else {\n done([\"bands\", \"all\"], () => resolve());\n }\n }\n }\n\n // Title\n const titleG = legend.select(\".role-legend-title\");\n if (!titleG.empty() && doTitle) {\n let title = titleG.selectAll(\"text\");\n\n\n const joinKey = joinKeyGen(\"title\");\n const timings = computeTiming(\n step.currData.title,\n step.nextData.title,\n step.timing,\n joinKey,\n joinSet\n );\n\n title = title.data(step.nextData.title, d => d.text);\n const enterTitleI = title.enter().append(\"text\");\n\n fetchAttributes(\n enterTitleI,\n [\"title\", \"align\"],\n {},\n signals.initial,\n encodes.title.initial.enter\n );\n\n\n const enterTitleF = enterTitleI.transition();\n fetchAttributes(\n enterTitleF,\n [\"title\", \"align\"],\n {},\n signals.final,\n encodes.title.final.enter\n );\n enterTitleF\n .duration(\n (d, i) =>\n timings.find(t => t.id === joinKey(d, i, \"final\")).duration\n )\n .delay(\n (d, i) => timings.find(t => t.id === joinKey(d, i, \"final\")).delay\n )\n .ease(easeFn)\n .end()\n .then(done([\"title\", \"enter\"], () => resolve()));\n\n\n\n\n const exitTitleI = title.exit();\n const exitTitleF = exitTitleI.transition();\n fetchAttributes(\n exitTitleF,\n [\"title\", \"align\"],\n {},\n signals.final,\n encodes.title.final.exit\n );\n exitTitleF\n .duration(\n (d, i) =>\n timings.find(t => t.id === joinKey(d, i, \"initial\")).duration\n )\n .delay(\n (d, i) => timings.find(t => t.id === joinKey(d, i, \"initial\")).delay\n )\n .ease(easeFn)\n .remove()\n .end()\n .then(done([\"title\", \"exit\"], () => resolve()));\n\n\n\n\n title = title.transition();\n // update the title\n fetchAttributes(\n title,\n [\"title\", \"align\"],\n {},\n signals.final,\n encodes.title.final.update\n );\n\n title\n .duration(\n (d, i) => timings.find(t => t.id === joinKey(d, i)).duration\n )\n .delay((d, i) => timings.find(t => t.id === joinKey(d, i)).delay)\n .ease(easeFn)\n .end()\n .then(done([\"title\", \"update\"], () => resolve()));\n\n }\n\n\n function gradientSubComp(\n subCompName,\n subCompG,\n subCompSvgElmType,\n subCompProps\n ) {\n const prevData = d3.local();\n let subCompSelection = subCompG.selectAll(subCompSvgElmType);\n\n const joinKey = joinKeyGen(subCompName);\n const nextData =\n subCompName === \"labels\" && legendTypes.final !== \"gradient\"\n ? []\n : step.nextData[subCompName];\n const currData =\n subCompName === \"labels\" && legendTypes.initial !== \"gradient\"\n ? []\n : step.currData[subCompName];\n const timings = computeTiming(\n currData,\n nextData,\n step.timing,\n joinKey,\n joinSet\n );\n subCompSelection.each(function(d) {\n prevData.set(this, d);\n });\n subCompSelection = subCompSelection.data(nextData, (d, i) =>\n joinKey(d, i)\n );\n\n // if (!isRemove && isAnimSet.enter) {\n if (!isRemove && subCompSelection.enter().data().length > 0) {\n let enterSubCompI = subCompSelection.enter().append(subCompSvgElmType);\n\n fetchAttributes(\n enterSubCompI,\n subCompProps,\n step.sameDomainDimension\n ? { primary: scales.initial, secondary: scales.final }\n : { primary: scales.final, secondary: scales.initial },\n signals.initial,\n encodes[subCompName].initial.enter\n );\n\n if (enterSubCompI.data().length <= 0) {\n enterSubCompI = subCompG\n .selectAll(subCompSvgElmType)\n .filter(d => joinSet(d) === \"enter\");\n }\n const enterSubCompF = enterSubCompI.transition();\n fetchAttributes(\n enterSubCompF,\n subCompProps,\n scales,\n signals.final,\n encodes[subCompName].final.enter,\n prevData\n );\n enterSubCompF\n .duration(\n (d, i) =>\n timings.find(t => t.id === joinKey(d, i, \"final\")).duration\n )\n .delay(\n (d, i) => timings.find(t => t.id === joinKey(d, i, \"final\")).delay\n )\n .ease(easeFn)\n .end()\n .then(done([subCompName, \"enter\"], () => resolve()));\n } else {\n done([subCompName, \"enter\"], () => resolve());\n }\n\n // if (!isAdd && isAnimSet.exit) {\n if (!isAdd && subCompSelection.exit().data().length > 0) {\n const exitSubCompI = subCompSelection.exit();\n const exitSubCompF = exitSubCompI.transition();\n fetchAttributes(\n exitSubCompF,\n subCompProps,\n step.sameDomainDimension\n ? { primary: scales.final, secondary: scales.initial }\n : { primary: scales.initial, secondary: scales.final },\n signals.final,\n encodes[subCompName].final.exit,\n prevData\n );\n exitSubCompF\n .duration(\n (d, i) =>\n timings.find(t => t.id === joinKey(d, i, \"initial\")).duration\n )\n .delay(\n (d, i) => timings.find(t => t.id === joinKey(d, i, \"initial\")).delay\n )\n .ease(easeFn)\n .remove()\n .end()\n .then(done([subCompName, \"exit\"], () => resolve()));\n } else {\n done([subCompName, \"exit\"], () => resolve());\n }\n\n // if ((isAnimSet.update) && subCompSelection.data().length > 0) {\n if (subCompSelection.data().length > 0) {\n const updateSubCompF = subCompSelection.transition();\n let modifiedSubCompProps = subCompName === \"gradient\"\n ? [{ name: \"gradient\", excludes: [{ type: \"style\", val: \"fill\" }] }]\n : subCompProps;\n\n\n fetchAttributes(\n updateSubCompF,\n modifiedSubCompProps,\n scales,\n signals.final,\n {\n initial: encodes[subCompName].initial.update,\n final: encodes[subCompName].final.update\n },\n prevData\n );\n if (subCompName === \"gradient\") {\n updateGradientFill(subCompSelection, step);\n }\n\n\n\n updateSubCompF\n .duration(\n (d, i) => timings.find(t => t.id === joinKey(d, i)).duration\n )\n .delay((d, i) => timings.find(t => t.id === joinKey(d, i)).delay)\n .ease(easeFn)\n .end()\n .then(done([subCompName, \"update\"], () => resolve()));\n } else {\n done([subCompName, \"update\"], () => resolve());\n }\n }\n });\n}\nfunction updateGradientFill(gradCompSelection, step) {\n const url = gradCompSelection.node().style.fill.replace(/^url\\(['\"]/, \"\").replace(/['\"]\\)$/, \"\");\n const vgDatum = gradCompSelection.data()[0];\n const gradientId = url.split(\"#\").pop();\n const gradient = d3.select(`#${gradientId}`);\n gradient.selectAll(\"stop\")\n .data(vgDatum.fill.stops, d => (d || {}).offset)\n .transition()\n .attr(\"stop-color\", d=> d.color)\n .duration(step.duration)\n .delay(step.delay);\n gradient.transition()\n .attr(\"x1\", vgDatum.fill.x1)\n .attr(\"x2\", vgDatum.fill.x2)\n .attr(\"y1\", vgDatum.fill.y1)\n .attr(\"y2\", vgDatum.fill.y2)\n .duration(step.duration)\n .delay(step.delay);\n\n}\nfunction addLegend(d3Selection, newLegendScene) {\n const compName = newLegendScene.name;\n const elem = svgRender(newLegendScene).getElementsByClassName(\n \"role-legend\"\n )[0];\n d3Selection.node().appendChild(elem);\n const { datum } = newLegendScene.items[0];\n // after adding the rendered result, delete the items to re-encode according to `encodes`.\n\n if (datum.title) {\n d3Selection.select(`.${compName} .role-legend-title text`).remove();\n }\n if (datum.type === \"symbol\") {\n d3Selection\n .selectAll(`.${compName} .role-legend-entry .role-scope > g`)\n .remove();\n } else {\n d3Selection\n .selectAll(`.${compName} .role-legend-entry .role-legend-label > text`)\n .remove();\n d3Selection\n .selectAll(`.${compName} .role-legend-entry .role-legend-gradient > path`)\n .remove();\n d3Selection\n .selectAll(`.${compName} .role-legend-entry .role-legend-band > path`)\n .remove();\n }\n\n return d3Selection;\n}\n\nexport { legendInterpolate };\n","import * as d3 from \"d3\";\nimport { transformItem } from \"./vega-render-util\";\nimport { getEaseFn } from \"./util.js\";\nimport { fetchAttributes } from \"./attributeFetcher\";\n\nfunction viewInterpolate(rawInfo, step, targetElm) {\n const animVis = targetElm;\n\n return new Promise((resolve) => {\n const easeFn = getEaseFn(step.timing.ease);\n\n if (step.change.signal === false) {\n resolve();\n }\n\n const view = d3.select(`${animVis} svg`);\n const svgEncode = step.encodes.final.svg;\n // update svg\n // When just applying attr(\"width\", ...), the size of the chart jitters.\n view\n .transition()\n .tween(\"resize\", function() {\n const w = d3.interpolate(\n this.getAttribute(\"width\"),\n svgEncode.width.value\n );\n const h = d3.interpolate(\n this.getAttribute(\"height\"),\n svgEncode.height.value\n );\n return function(t) {\n const _w = Math.round(w(t) * 1) / 1;\n const _h = Math.round(h(t) * 1) / 1;\n this.setAttribute(\"width\", _w);\n this.setAttribute(\"height\", _h);\n this.setAttribute(\"viewBox\", `0 0 ${_w} ${_h}`);\n };\n })\n .duration(step.duration)\n .delay(step.delay)\n .ease(easeFn)\n .end()\n .then(() => {\n resolve();\n });\n\n // update svg > g\n view\n .select(\"g\")\n .transition()\n .attr(\n \"transform\",\n transformItem({ x: svgEncode.x.value, y: svgEncode.y.value })\n )\n .duration(step.duration)\n .delay(step.delay)\n .ease(easeFn);\n\n // update background\n let root = view.select(\".root g > .background\");\n const rootEncode = step.encodes.final.root;\n const fDatum = Object.keys(rootEncode).reduce((fDatum, key) => {\n fDatum[key] = rootEncode[key].value;\n return fDatum;\n }, {});\n root = root.data([fDatum]).transition();\n fetchAttributes(\n root,\n [\"background\", \"fill\", \"stroke\"],\n {},\n step.signals.final,\n rootEncode\n );\n\n root\n .duration(step.duration)\n .delay(step.delay)\n .ease(easeFn);\n\n // update frame\n });\n}\n\nexport { viewInterpolate };\n","import { markInterpolate } from \"./mark/mark\";\nimport { areaLineInterpolate } from \"./mark/areaLine\";\nimport { axisInterpolate } from \"./axis\";\nimport { legendInterpolate } from \"./legend\";\nimport { viewInterpolate } from \"./view\";\nimport { isLinearMarktype} from \"./util\";\n\nconst LIBRARY = {\n legend: legendInterpolate,\n axis: axisInterpolate,\n mark: {\n interpolate: {\n others: markInterpolate,\n areaLine: areaLineInterpolate\n },\n marktypeChange\n },\n view: viewInterpolate,\n pause: step => {\n return new Promise((resolve) => {\n setTimeout(function() {\n resolve();\n }, step.duration + step.delay);\n });\n }\n};\nexport default function(step) {\n let template;\n const { marktypes } = step;\n if (step.compType === \"mark\") {\n if (\n marktypes.final &&\n marktypes.initial &&\n marktypes.initial !== step.marktypes.final\n ) {\n template = LIBRARY.mark.marktypeChange;\n } else if (\n isLinearMarktype(marktypes.initial) || isLinearMarktype(marktypes.final)\n ) {\n template = LIBRARY.mark.interpolate.areaLine;\n } else {\n template = LIBRARY.mark.interpolate.others;\n }\n } else {\n template = LIBRARY[step.compType];\n }\n\n return template;\n}\n\nasync function marktypeChange(rawInfo, step, targetElm) {\n const mTypeI = step.marktypes.initial;\n const mTypeF = step.marktypes.final;\n if ( isLinearMarktype(mTypeF) && isLinearMarktype(mTypeI)) {\n return LIBRARY.mark.interpolate.areaLine(rawInfo, step, targetElm);\n }\n if (\n ( isLinearMarktype(mTypeI) && [\"rule\", \"rect\", \"symbol\", \"text\"].indexOf(mTypeF) >= 0) ||\n ( isLinearMarktype(mTypeF) && [\"rule\", \"rect\", \"symbol\", \"text\"].indexOf(mTypeI) >= 0)\n ) {\n return Promise.all([\n LIBRARY.mark.interpolate.others(rawInfo, step, targetElm),\n LIBRARY.mark.interpolate.areaLine(rawInfo, step, targetElm)\n ]);\n }\n return LIBRARY.mark.interpolate.others(rawInfo, step, targetElm);\n}\nexport function testInterpolator(step, state) {\n return new Promise((resolve) => {\n setTimeout(function() {\n const nextState = `${state} ${step.compName}`;\n resolve(nextState);\n }, step.duration + step.delay);\n });\n}\n","import {attachStates} from \"./changeFetcher\";\n\nexport function autoScaleOrder(extendedSchedule, resolves, rawInfo) {\n const mainTimeline = extendedSchedule.getTimeline(\":main\");\n\n let extendedTimeline = attachStates(mainTimeline, rawInfo);\n const scaleOrderResovles = resolves.filter(r => r.autoScaleOrder),\n scheduleAlternator = extendedSchedule.getTimelineAlternator(scaleOrderResovles);\n\n while (!validateScaleOrder(scaleOrderResovles, extendedTimeline)) {\n const altTimeline = scheduleAlternator();\n if (!altTimeline) {\n extendedTimeline = attachStates(mainTimeline, rawInfo);\n break;\n }\n extendedTimeline = attachStates(altTimeline, rawInfo);\n }\n return extendedTimeline;\n}\n\nfunction validateScaleOrder(resolves, timeline) {\n let valid = true;\n resolves.forEach(resolve => {\n resolve.autoScaleOrder.forEach(compName => {\n const foundTrack = timeline.find(track => track.compName === compName);\n if (foundTrack && foundTrack.scaleOrderValid === false) {\n valid = false;\n }\n });\n });\n return valid;\n}","import * as vega from \"vega\";\nimport { Animation } from \"./animation\";\nimport { parse } from \"./parser\";\nimport { attachChanges } from \"./changeFetcher\";\nimport { default as Actuator } from \"./actuator\";\nimport { autoScaleOrder } from \"./resolver\";\n\n\nfunction attachAnimTemplates(schedule) {\n schedule.forEach(track => {\n track.steps = track.steps.map(step => {\n const template = Actuator(step);\n if (!template) {\n console.error(\n `There is no such animation template for ${step.compType}.`\n );\n }\n\n step.template = template;\n return step;\n });\n });\n return schedule;\n}\n\nclass Gemini {\n static async animate(startVisSpec, endVisSpec, spec) {\n\n const eView = await new vega.View(vega.parse(endVisSpec), {\n renderer: \"svg\"\n }).runAsync();\n\n const sView = await new vega.View(vega.parse(startVisSpec), {\n renderer: \"svg\"\n }).runAsync();\n\n const rawInfo = {\n sVis: { view: sView, spec: startVisSpec },\n eVis: { view: eView, spec: endVisSpec }\n };\n\n const { schedule, resolves } = parse(spec, rawInfo);\n schedule.tracks = attachChanges(rawInfo, schedule.tracks);\n const finalTimeline = autoScaleOrder(schedule, resolves, rawInfo);\n\n return new Animation(attachAnimTemplates(finalTimeline), rawInfo, spec);\n }\n}\n\nexport {\n Gemini,\n attachAnimTemplates as attachAnimTemplate\n};\n","import { copy } from \"../util/util\";\n\nconst MIN_POS_DELTA = 10;\nconst CHANNEL_TO_ATTRS = [\n { channel: \"x\", attrs: [\"x\", \"x2\", \"xc\", \"width\"] },\n { channel: \"y\", attrs: [\"y\", \"y2\", \"yc\", \"height\"] },\n { channel: \"color\", attrs: [\"stroke\", \"fill\"] },\n { channel: \"shape\", attrs: [\"shape\"] },\n { channel: \"size\", attrs: [\"size\"] },\n { channel: \"opacity\", attrs: [\"opacity\"] },\n { channel: \"text\", attrs: [\"text\"] },\n { channel: \"others\", attrs: [\"tooltip\", \"define\", \"strokeWidth\"] }\n];\nconst CHANNELS = [\"x\", \"y\", \"color\", \"shape\", \"size\", \"opacity\", \"text\"];\n\nconst CHANNEL_TO_ATTRS_OBJ = {\n x: [\"x\", \"x2\", \"xc\", \"width\"],\n y: [\"y\", \"y2\", \"yc\", \"height\"],\n color: [\"stroke\", \"fill\"],\n shape: [\"shape\"],\n size: [\"size\"],\n opacity: [\"opacity\"],\n text: [\"text\"],\n others: [\"tooltip\", \"define\", \"strokeWidth\"]\n};\n\nfunction getSubEncodeByChannel(encode, channel) {\n const subEncode = {};\n if (channel === \"others\") {\n const otherEncode = copy(encode);\n CHANNEL_TO_ATTRS.reduce((channelRelatedAttrs, ch2Attrs) => {\n return (channelRelatedAttrs = channelRelatedAttrs.concat(ch2Attrs.attrs));\n }, []).forEach(attr => {\n delete otherEncode[attr];\n });\n\n return otherEncode;\n }\n\n CHANNEL_TO_ATTRS_OBJ[channel]\n // .filter(attr => encode[attr])\n .forEach(attr => {\n subEncode[attr] = encode[attr];\n });\n return subEncode;\n}\nfunction getCoreAttr(subEncode, channel, marktype){\n if (!subEncode) {\n return;\n }\n if (channel === \"color\") {\n let coreAttr = [\"line\", \"rule\", \"symbol\"].indexOf(marktype) >= 0\n ? subEncode.stroke\n : subEncode.fill;\n\n if (\n coreAttr === \"symbol\" &&\n subEncode.fill &&\n subEncode.fill.value !== \"transparent\"\n ) {\n coreAttr = subEncode.fill;\n }\n\n return coreAttr;\n }\n if (channel===\"x\") {\n return subEncode.x || subEncode.xc;\n } else if (channel===\"y\") {\n return subEncode.y || subEncode.yc;\n }\n return subEncode[channel];\n}\n\nexport { CHANNELS, CHANNEL_TO_ATTRS_OBJ, MIN_POS_DELTA, getSubEncodeByChannel, getCoreAttr };\n","import { getComponents, getChanges, getViewChange } from \"../changeFetcher/change\";\nimport { copy, deepEqual, isNumber, get } from \"../util/util\";\nimport { findComp } from \"../actuator/util\";\nimport { computeHasFacet, isGroupingMarktype } from \"../changeFetcher/state/util\";\nimport { CHANNELS, getSubEncodeByChannel, MIN_POS_DELTA,getCoreAttr } from \"./util\";\nimport { getMarkData, unpackData } from \"../util/vgDataHelper\";\n\n\nexport function detectDiffs(rawInfo, userInput = {}) {\n // 0) compare signals\n const signalDiffs = detectSignalDiffs(rawInfo);\n\n const matches = getChanges(\n getComponents(rawInfo.sVis.spec),\n getComponents(rawInfo.eVis.spec)\n );\n const scaleDiffs = matches\n .filter(match => match.compType === \"scale\")\n .reduce((scaleDiffs, match) => {\n scaleDiffs[match.compName] = match;\n scaleDiffs[match.compName].meta = detectScaleDiffs(match, rawInfo, userInput.scales);\n\n return scaleDiffs;\n }, {});\n\n const compDiffs = matches\n .filter(match => {\n return (\n [\"root\", \"pathgroup\"].indexOf(match.compName) < 0 &&\n match.compType !== \"scale\"\n );\n }).map(match => {\n switch (match.compType) {\n case \"mark\":\n match.meta = detectMarkDiffs(match, rawInfo, scaleDiffs);\n break;\n case \"axis\":\n match.meta = detectAxisDiffs(match, rawInfo, scaleDiffs);\n break;\n case \"legend\":\n match.meta = detectLegendDiffs(match, rawInfo, scaleDiffs);\n break;\n default:\n break;\n }\n\n return match;\n });\n const viewDiffs = detectViewDiff(rawInfo);\n\n // 1) should return the components\n return {\n compDiffs,\n scaleDiffs,\n signalDiffs,\n viewDiffs\n };\n}\nfunction appendCompScaleDiff(usedScales, scaleDiffs) {\n let compScaleDiffDetails = {}; let compScaleDiff = false;\n\n usedScales.forEach(scaleName => {\n compScaleDiffDetails[scaleName] = scaleDiffs[scaleName].meta;\n compScaleDiff = compScaleDiff || scaleDiffs[scaleName].meta;\n }, {});\n\n return compScaleDiff ? compScaleDiffDetails : false;\n}\nfunction detectMarkDiffs(match, rawInfo, scaleDiffs) {\n let markDiffs = { view: { deltaW: 0, deltaH: 0 } };\n if (!match.initial) {\n markDiffs.add = true;\n markDiffs.view = { deltaW: MIN_POS_DELTA, deltaH: MIN_POS_DELTA };\n } else if (!match.final) {\n markDiffs.remove = true;\n markDiffs.view = { deltaW: MIN_POS_DELTA, deltaH: MIN_POS_DELTA };\n }\n\n // marktype\n markDiffs.marktype = !match.initial || !match.final || (match.initial.type !== match.final.type);\n\n // compare the encodes per channel\n const enAttrs_i = Object.keys(get(match, \"initial\", \"encode\", \"update\") || {});\n let enAttrs_f = Object.keys(get(match, \"final\", \"encode\", \"update\") || {});\n markDiffs.usedEnAttrs = enAttrs_i.concat(enAttrs_f).unique();\n\n markDiffs.encode = CHANNELS.reduce((encodeDiffs, channel) => {\n const subEncode_i = getSubEncodeByChannel(\n get(match, \"initial\", \"encode\", \"update\") || {},\n channel\n );\n let subEncode_f = getSubEncodeByChannel(\n get(match, \"final\", \"encode\", \"update\") || {},\n channel\n );\n\n encodeDiffs[channel] = !deepEqual(subEncode_i, subEncode_f);\n\n // ignoreable encode diffs (d (opacity) > 0.5 )\n if (\n channel === \"opacity\" &&\n (get(subEncode_i, \"opacity\", \"value\") ||\n get(subEncode_i, \"opacity\") === undefined) &&\n (get(subEncode_f, \"opacity\", \"value\") ||\n get(subEncode_f, \"opacity\") === undefined)\n ) {\n const opacityVal_i = get(subEncode_i, \"opacity\", \"value\") || 1.0;\n let opacityVal_f = get(subEncode_f, \"opacity\", \"value\") || 1.0;\n if (Math.abs(opacityVal_i - opacityVal_f) < 0.5) {\n encodeDiffs.opacity = false;\n }\n }\n\n //\n if (markDiffs.marktype && encodeDiffs[channel]) {\n const marktype_i = get(match, \"initial\", \"type\"),\n marktype_f = get(match, \"final\", \"type\");\n let coreEnAttr_i = getCoreAttr(subEncode_i, channel, marktype_i);\n let coreEnAttr_f = getCoreAttr(subEncode_f, channel, marktype_f);\n\n if (deepEqual(coreEnAttr_i, coreEnAttr_f)) {\n encodeDiffs[channel] = \"byMarktypeChange\";\n }\n }\n\n //\n return encodeDiffs;\n }, {});\n\n\n\n // find the used scales\n let usedScales = [];\n [\"update\"].forEach(set => {\n const encode_i = match.initial && match.initial.encode[set];\n const encode_f = match.final && match.final.encode[set];\n\n [encode_i, encode_f].forEach(encode => {\n Object.keys(encode || {}).map(attr => {\n if (Array.isArray(encode[attr])) {\n usedScales = usedScales.concat(\n encode[attr].filter(ch => ch.scale).map(ch => ch.scale)\n );\n } else if (encode[attr].scale) {\n usedScales.push(encode[attr].scale);\n }\n });\n });\n });\n markDiffs.usedScales = usedScales.unique();\n markDiffs.scale = appendCompScaleDiff(markDiffs.usedScales, scaleDiffs);\n markDiffs.scNames = Object.keys(markDiffs.scale);\n markDiffs.view = {\n deltaW: markDiffs.scale.x\n ? markDiffs.scale.x.rangeDelta\n : markDiffs.view.deltaW,\n deltaH: markDiffs.scale.y\n ? markDiffs.scale.y.rangeDelta\n : markDiffs.view.deltaH\n };\n if (markDiffs.scale.y && markDiffs.scale.y.add) {\n markDiffs.view.deltaH = MIN_POS_DELTA;\n } else if (markDiffs.scale.y && markDiffs.scale.y.remove) {\n markDiffs.view.deltaH = -MIN_POS_DELTA;\n }\n\n if (markDiffs.scale.x && markDiffs.scale.x.add) {\n markDiffs.view.deltaW = MIN_POS_DELTA;\n } else if (markDiffs.scale.x && markDiffs.scale.x.remove) {\n markDiffs.view.deltaW = -MIN_POS_DELTA;\n }\n\n // Get data and compare\n // get dataComp name\n // let iDataCompName = computeHasFacet(match.initial) ? match.initial.parent.from.facet.data : match.initial.from.data,\n // fDataCompName = computeHasFacet(match.final) ? match.final.parent.from.facet.data : match.final.from.data;\n\n // markDiffs.data = isDiffDataComp(\n // findDataComp(rawInfo.sVis.spec, iDataCompName),\n // findDataComp(rawInfo.eVis.spec, fDataCompName),\n // rawInfo\n // );\n // if (markDiffs.data || true) {\n let iData = match.initial\n ? getMarkData(rawInfo.sVis.view, match.initial, match.compName)\n : [];\n let fData = match.final\n ? getMarkData(rawInfo.eVis.view, match.final, match.compName)\n : [];\n\n if (match.initial && (computeHasFacet(match.initial) || isGroupingMarktype(match.initial.type))) {\n iData = unpackData(iData);\n }\n if (match.final && (computeHasFacet(match.final) || isGroupingMarktype(match.final.type))) {\n fData = unpackData(fData);\n }\n if (!markDiffs.data) {\n\n iData = computeHasFacet(match.initial) ? unpackData(iData) : iData;\n fData = computeHasFacet(match.final) ? unpackData(fData) : fData;\n\n markDiffs.data = isDiffData(iData, fData);\n }\n\n // }\n\n return markDiffs;\n}\n\nfunction detectScaleDiffs(match, rawInfo, userInputScales = {}) {\n if (!match.initial) {\n return {add: true};\n } if (!match.final) {\n return {remove: true};\n }\n let scaleDiff = deepEqual(match.initial, match.final) ? false : {};\n\n let rangeVals_i = rawInfo.sVis.view.scale(match.initial.name).range(),\n rangeVals_f = rawInfo.eVis.view.scale(match.final.name).range();\n let rangeDelta = 0;\n if (!deepEqual(rangeVals_i, rangeVals_f)){\n if ((rangeVals_i.length === 2 && isNumber(rangeVals_i[0]) && isNumber(rangeVals_i[1]))\n && (rangeVals_f.length === 2 && isNumber(rangeVals_f[0]) && isNumber(rangeVals_f[1]))) {\n rangeDelta = Math.abs(rangeVals_f[0]-rangeVals_f[1]) - Math.abs(rangeVals_i[0]-rangeVals_i[1]);\n }\n }\n\n let domainVals_i = rawInfo.sVis.view.scale(match.initial.name).domain(),\n domainVals_f = rawInfo.eVis.view.scale(match.final.name).domain();\n\n if (!scaleDiff && deepEqual(domainVals_i, domainVals_f) && (rangeDelta === 0)) {\n return false;\n }\n scaleDiff = {\n rangeDelta: rangeDelta,\n domainValueDiff: !deepEqual(domainVals_i, domainVals_f)\n };\n\n let userInputDomainDimensionDiff = get(userInputScales[match.initial.name], \"domainDimension\");\n scaleDiff.domainSpaceDiff = userInputDomainDimensionDiff === \"diff\" ? true : (\n userInputDomainDimensionDiff === \"same\" ? false :\n !deepEqual(match.initial.domain, match.final.domain)\n );\n\n\n if (([\"band\", \"point\", \"ordinal\"].indexOf(match.initial.type) >= 0) &&\n ([\"band\", \"point\", \"ordinal\"].indexOf(match.final.type) >= 0)) {\n scaleDiff.stayDiscrete = true;\n }\n return scaleDiff;\n}\n\nfunction detectLegendDiffs(match, rawInfo, scaleDiffs) {\n const legendDiffs = {\n usedScales: [],\n view: { deltaW: 0, deltaH: 0, x: 0, y: 0 }\n };\n if (!match.initial) {\n legendDiffs.add = true;\n legendDiffs.view = {\n deltaW: MIN_POS_DELTA,\n deltaH: MIN_POS_DELTA,\n x: MIN_POS_DELTA,\n y: MIN_POS_DELTA\n };\n } else if (!match.final) {\n legendDiffs.remove = true;\n legendDiffs.view = {\n deltaW: -MIN_POS_DELTA,\n deltaH: -MIN_POS_DELTA,\n x: -MIN_POS_DELTA,\n y: -MIN_POS_DELTA\n };\n }\n\n const legend_i = copy(match.initial || {}); let legend_f = copy(match.final || {});\n\n // 1) scale diff\n [\n \"fill\",\n \"opacity\",\n \"shape\",\n \"size\",\n \"stroke\",\n \"strokeDash\",\n \"strokeWidth\"\n ].forEach(scale => {\n if (match.initial && match.initial[scale]) {\n legendDiffs.usedScales.push(match.initial[scale]);\n }\n if (match.final && match.final[scale]) {\n legendDiffs.usedScales.push(match.final[scale]);\n }\n\n delete legend_i[scale];\n delete legend_f[scale];\n }, false);\n legendDiffs.usedScales = legendDiffs.usedScales.unique();\n legendDiffs.scale = appendCompScaleDiff(legendDiffs.usedScales, scaleDiffs);\n legendDiffs.scNames = Object.keys(legendDiffs.scale);\n // 2) encode diff\n legendDiffs.encode = !deepEqual(legend_i, legend_f);\n\n // 3) Pos Diff\n if (match.initial && match.final) {\n const legendGDatum = {\n initial: findComp(\n rawInfo.sVis.view.scenegraph().root,\n match.compName,\n \"legend\"\n )[0].items[0],\n final: findComp(\n rawInfo.eVis.view.scenegraph().root,\n match.compName,\n \"legend\"\n )[0].items[0]\n };\n\n legendDiffs.view.x = legendGDatum.final.x - legendGDatum.initial.x;\n legendDiffs.view.y = legendGDatum.final.y - legendGDatum.initial.y;\n }\n\n return legendDiffs;\n}\n\nfunction detectAxisDiffs(match, rawInfo, scaleDiffs) {\n const axisDiffs = {\n view: { deltaW: 0, deltaH: 0, x: 0, y: 0 }\n };\n if (!match.initial) {\n axisDiffs.add = true;\n axisDiffs.view = {\n deltaW: MIN_POS_DELTA,\n deltaH: MIN_POS_DELTA,\n x: MIN_POS_DELTA,\n y: MIN_POS_DELTA\n };\n } else if (!match.final) {\n axisDiffs.remove = true;\n axisDiffs.view = {\n deltaW: -MIN_POS_DELTA,\n deltaH: -MIN_POS_DELTA,\n x: -MIN_POS_DELTA,\n y: -MIN_POS_DELTA\n };\n }\n // 1) scale diff\n axisDiffs.usedScales = [];\n if (match.initial) {\n axisDiffs.usedScales.push(match.initial.scale);\n } else if (match.final) {\n axisDiffs.usedScales.push(match.final.scale);\n }\n\n axisDiffs.scale = appendCompScaleDiff(axisDiffs.usedScales, scaleDiffs);\n axisDiffs.scNames = Object.keys(axisDiffs.scale);\n if (match.final && match.initial) {\n axisDiffs.view = {\n deltaW: axisDiffs.scale.x ? axisDiffs.scale.x.rangeDelta : 0,\n deltaH: axisDiffs.scale.y ? axisDiffs.scale.y.rangeDelta : 0\n };\n if (match.initial.scale === match.final.scale) {\n if (!!match.initial.grid !== !!match.final.grid) {\n if (match.final.scale === \"x\") {\n axisDiffs.view.deltaH = match.initial.grid\n ? -MIN_POS_DELTA\n : MIN_POS_DELTA;\n } else if (match.final.scale === \"y\") {\n axisDiffs.view.deltaW = match.initial.grid\n ? -MIN_POS_DELTA\n : MIN_POS_DELTA;\n }\n } else if (!!match.initial.grid && !!match.final.grid) {\n let delta =\n get(scaleDiffs, match.initial.gridScale, \"meta\", \"rangeDelta\") || 0;\n if (match.final.orient === \"left\" || match.final.orient === \"right\") {\n axisDiffs.view.deltaW = delta;\n } else {\n axisDiffs.view.deltaH = delta;\n }\n }\n }\n }\n\n // 2) encode diff\n const axis_i = copy(match.initial) || {}; let axis_f = copy(match.final || {});\n delete axis_i.scale;\n delete axis_f.scale;\n axisDiffs.encode = !deepEqual(axis_i, axis_f);\n\n // 3) Pos Diff\n if (match.initial && match.final) {\n const axisGDatum = {\n initial: findComp(\n rawInfo.sVis.view.scenegraph().root,\n match.compName,\n \"axis\"\n )[0].items[0],\n final: findComp(\n rawInfo.eVis.view.scenegraph().root,\n match.compName,\n \"axis\"\n )[0].items[0]\n };\n let fWidth = axisGDatum.final.bounds.x2 - axisGDatum.final.bounds.x1,\n iWidth = axisGDatum.initial.bounds.x2 - axisGDatum.initial.bounds.x1,\n fHeight = axisGDatum.final.bounds.y2 - axisGDatum.final.bounds.y1,\n iHeight = axisGDatum.initial.bounds.y2 - axisGDatum.initial.bounds.y1;\n\n axisDiffs.view.deltaW += fWidth - iWidth;\n axisDiffs.view.deltaH += fHeight - iHeight;\n\n axisDiffs.view.x = axisGDatum.final.x - axisGDatum.initial.x;\n axisDiffs.view.y = axisGDatum.final.y - axisGDatum.initial.y;\n }\n\n return axisDiffs;\n}\nfunction detectViewDiff(rawInfo) {\n const viewDiffs = getViewChange(rawInfo);\n const paddingDiff = viewDiffs.final.padding - viewDiffs.initial.padding;\n viewDiffs.deltaW = viewDiffs.final.viewWidth - viewDiffs.initial.viewWidth + paddingDiff;\n viewDiffs.deltaH = viewDiffs.final.viewHeight - viewDiffs.initial.viewHeight + paddingDiff;\n viewDiffs.width = {};\n viewDiffs.height = {};\n if (Math.abs(viewDiffs.deltaW) > MIN_POS_DELTA/2) {\n viewDiffs.width[viewDiffs.deltaW > 0 ? \"increase\" : \"decrease\"] = true;\n }\n if (Math.abs(viewDiffs.deltaH) > MIN_POS_DELTA/2) {\n viewDiffs.height[viewDiffs.deltaH > 0 ? \"increase\" : \"decrease\"] = true;\n }\n viewDiffs.scNames = [];\n\n return viewDiffs;\n}\n\nfunction detectSignalDiffs(rawInfo) {\n const signalDiffs = {\n initial: rawInfo.sVis.view._runtime.signals,\n final: rawInfo.eVis.view._runtime.signals,\n meta: {\n update: [],\n exit: [],\n enter: [],\n same: []\n }\n };\n Object.keys(signalDiffs.initial)\n .concat(Object.keys(signalDiffs.final))\n .unique()\n .forEach(sgName => {\n let sg_f = signalDiffs.final[sgName];\n let sg_i = signalDiffs.initial[sgName];\n if (!sg_f) {\n signalDiffs.meta.exit.push(sgName);\n } else if (!sg_i) {\n signalDiffs.meta.enter.push(sgName);\n } else if (!deepEqual(sg_f.value, sg_i.value)) {\n signalDiffs.meta.update.push(sgName);\n } else {\n signalDiffs.meta.same.push(sgName);\n }\n });\n return signalDiffs;\n}\n\nexport function isDiffData(iData, fData) {\n const diff = { column: false, row: false };\n\n let iFields = iData[0] ? Object.keys(iData[0].datum) : [];\n let fFields = fData[0] ? Object.keys(fData[0].datum) : [];\n let sharedFields = [];\n if (!deepEqual(iFields, fFields)) {\n if (iFields.containAll(fFields)) {\n diff.column = \"removed\";\n sharedFields = fFields;\n } else if (fFields.containAll(iFields)) {\n diff.column = \"added\";\n sharedFields = iFields;\n } else {\n diff.column = \"changed\";\n sharedFields = iFields.filter(f => fFields.indexOf(f) >= 0);\n }\n } else {\n sharedFields = iFields;\n }\n\n if (sharedFields.length > 0) {\n const mappedIData = iData.map(d =>\n sharedFields.map(f => d.datum[f]).join(\",\")\n );\n const mappedFData = fData.map(d =>\n sharedFields.map(f => d.datum[f]).join(\",\")\n );\n diff.row = !deepEqual(mappedIData, mappedFData);\n } else {\n diff.row = iData.length !== fData.length;\n }\n\n if (!diff.column && !diff.row) {\n return false;\n }\n diff.sharedFields = sharedFields;\n return diff;\n}\n\n// function isDiffDataComp(iDataComp, fDataComp, rawInfo) {\n// if (iDataComp.source || fDataComp.source) {\n// let newIDataComp = iDataComp,\n// newFDataComp = fDataComp;\n// if (iDataComp.source && typeof(iDataComp.source) === \"string\") {\n// newIDataComp = findDataComp(rawInfo.sVis.spec, iDataComp.source);\n// newIDataComp.transform = (newIDataComp.transform || []).concat(iDataComp.transform);\n// }\n// if (fDataComp.source && typeof(fDataComp.source) === \"string\") {\n// newFDataComp = findDataComp(rawInfo.eVis.spec, fDataComp.source);\n// newFDataComp.transform = (newFDataComp.transform || []).concat(fDataComp.transform);\n// }\n\n// return isDiffDataComp(newIDataComp, newFDataComp, rawInfo)\n// }\n\n// let _i = copy(iDataComp), _f = copy(fDataComp);\n// delete _i.name;\n// // delete _i.values;\n// delete _f.name;\n// // delete _f.values;\n// if (_i.values && _f.values) {\n// if (_i.values.length !== _f.values.length) {\n// return true\n// }\n// if ( JSON.stringify(_i.values.sort()) !== JSON.stringify(_f.values.sort())){\n// return true\n// }\n\n// }\n// delete _i.values;\n// delete _f.values;\n// return !deepEqual(_i, _f);\n// //compare all except for \"name\". (\"values\" may take a lot of times...)\n// }\n\n// function findDataComp(spec, compName) {\n// return spec.data.find(comp => comp.name === compName);\n// }\n","import { getMarkData, unpackData } from \"../util/vgDataHelper\";\nimport { get } from \"../util/util\";\nimport { computeHasFacet, isGroupingMarktype } from \"../changeFetcher/state/util\";\nimport { getSubEncodeByChannel } from \"./util\";\n\nfunction applyMarkDiffs(\n markDiff,\n applyingDiffs,\n rawInfo,\n extraDiffsByMarktypeChange = []\n) {\n\n const markCompSummary = new MarkSummary(markDiff, rawInfo);\n\n applyingDiffs.forEach(diff => {\n markCompSummary.applyDiff(diff, extraDiffsByMarktypeChange);\n });\n return markCompSummary;\n}\n\n\nclass MarkSummary {\n constructor(markDiff, rawInfo) {\n const vegaView = rawInfo.sVis.view;\n let data = getMarkData(\n vegaView,\n markDiff.initial,\n markDiff.compName,\n\n );\n let hasFacet = markDiff.initial ? computeHasFacet(markDiff.initial) : undefined;\n let isGroupingMtype = markDiff.initial ? isGroupingMarktype(markDiff.initial.type) : undefined;\n data = hasFacet || isGroupingMtype ? unpackData(data) : data;\n this.markDiff = markDiff;\n this.rawInfo = rawInfo;\n this.isEmpty = markDiff.add;\n this.marktype = get(markDiff, \"initial\", \"type\");\n this.encode = get(markDiff, \"initial\", \"encode\", \"update\") || {};\n\n this.data = {\n hasFacet,\n isGroupingMarktype: isGroupingMtype,\n fields: data[0] ? Object.keys(data[0].datum) : [],\n values: data\n };\n\n this.scales = markDiff.meta.usedScales.reduce((scales, scName) => {\n const scale_i = vegaView._runtime.scales[scName];\n if (scale_i) {\n scales[scName] = scale_i.value;\n }\n return scales;\n }, {});\n\n this.style = get(markDiff, \"initial\", \"style\");\n }\n\n applyDiff(diff, extraDiffsByMarktypeChange) {\n\n if (diff === \"add\") {\n this.isEmpty = true;\n }\n if (diff === \"remove\") {\n this.isEmpty = false;\n }\n if (diff === \"marktype\") {\n this.marktype = get(this.markDiff, \"final\", \"type\");\n extraDiffsByMarktypeChange.forEach(extraDiff => {\n this.applyDiff(extraDiff);\n });\n } else if (diff === \"data\") {\n this.data = {\n isGroupingMarktype: this.markDiff.final ? isGroupingMarktype(this.markDiff.final.type) : undefined,\n hasFacet: this.markDiff.final ? computeHasFacet(this.markDiff.final) : undefined,\n };\n let data = getMarkData(\n this.rawInfo.eVis.view,\n this.markDiff.final,\n this.markDiff.compName\n );\n data = this.data.hasFacet || this.data.isGroupingMarktype ? unpackData(data) : data;\n this.data.fields = data[0] ? Object.keys(data[0].datum) : [];\n this.data.values = data;\n } else if (diff.indexOf(\"encode.\") >= 0) {\n const channel = diff.replace(\"encode.\", \"\");\n this.encode = Object.assign(\n {},\n this.encode,\n this.markDiff.final ? getSubEncodeByChannel(this.markDiff.final.encode.update, channel) : {}\n );\n } else if (diff.indexOf(\"scale.\") >= 0) {\n const scName = diff.replace(\"scale.\", \"\");\n const scale_f = this.rawInfo.eVis.view._runtime.scales[scName];\n if (scale_f) {\n this.scales[scName] = scale_f.value;\n } else {\n delete this.scales[scName];\n }\n } else if (diff === \"style\") {\n this.style = get(this.markDiff, \"final\", \"style\");\n }\n return this;\n }\n\n}\n\n\nexport { applyMarkDiffs };\n// Todo\n// Make Test\n","function checkMarkComp(markCompSummary) {\n const { encode } = markCompSummary;\n const { marktype } = markCompSummary;\n const { data } = markCompSummary;\n const { scales } = markCompSummary;\n\n if (markCompSummary.isEmpty) {\n return { result: true };\n }\n\n // encode - marktype\n if (marktype === \"rect\") {\n const isXEncodeValid = containAnyAttrSet(\n [\n [\"x\", \"x2\"],\n [\"x\", \"width\"],\n [\"xc\", \"width\"]\n ],\n encode\n );\n const isYEncodeValid = containAnyAttrSet(\n [\n [\"y\", \"y2\"],\n [\"y\", \"height\"],\n [\"yc\", \"height\"]\n ],\n encode\n );\n if (!isXEncodeValid || !isYEncodeValid) {\n return { result: false, reasons: [\"encode\", \"marktype\"] };\n }\n } else if (marktype === \"area\") {\n const isValid =\n encode.orient && encode.orient.value === \"horizontal\"\n ? containAnyAttrSet(\n [\n [\"x\", \"x2\", \"y\"],\n [\"x\", \"y\", \"width\"]\n ],\n encode\n )\n : containAnyAttrSet(\n [\n [\"x\", \"y2\", \"y\"],\n [\"x\", \"y\", \"height\"]\n ],\n encode\n );\n\n if (!isValid) {\n return { result: false, reasons: [\"encode\", \"marktype\"] };\n }\n } else if (marktype === \"line\") {\n const isInValid = containAnyAttrSet(\n [ [\"x2\", \"x\"], [\"y2\", \"y\"], [\"y\", \"height\"], [\"yc\", \"height\"], [\"x\", \"width\"], [\"xc\", \"width\"] ],\n encode\n );\n if (isInValid) {\n return { result: false, reasons: [\"encode\", \"marktype\"] };\n }\n } else if (marktype === \"text\") {\n if (!encode.text) {\n return { result: false, reasons: [\"encode\", \"marktype\"] };\n }\n } else if (marktype === \"rule\") {\n if (\n !containAnyAttrSet(\n [\n [\"x\", \"x2\", \"y\"],\n [\"y\", \"y2\", \"x\"]\n ],\n encode\n )\n ) {\n return { result: false, reasons: [\"encode\", \"marktype\"] };\n }\n } else if (!marktype) {\n return { result: false, reasons: [\"marktype\"] };\n }\n\n // encode - data, encode - data - scale, encode - scale\n const attrs = Object.keys(encode);\n let valid = true;\n Object.keys(scales || {}).forEach(scName => {\n\n if (!attrs.find(attr => {\n if (!encode[attr]) {\n return false;\n }\n const enAttrs = Array.isArray(encode[attr]) ? encode[attr] : [ encode[attr] ];\n return enAttrs.find(enAttr => enAttr.scale === scName);\n })) {\n valid = false;\n }\n });\n if (!valid) {\n return { reasons: [\"encode\", \"scale\"], result: false };\n }\n\n for (let i = 0; i < attrs.length; i++) {\n const enAttrs = Array.isArray(encode[attrs[i]]) ? encode[attrs[i]] : [ encode[attrs[i]] ];\n for (let j = 0; j < enAttrs.length; j++) {\n const enAttr = enAttrs[j];\n if (enAttr && enAttr.scale) {\n if (!scales[enAttr.scale]) {\n return { reasons: [\"encode\", \"scale\"], result: false };\n }\n if (enAttr.band && scales[enAttr.scale].type !== \"band\") {\n return { reasons: [\"encode\", \"scale\"], result: false };\n }\n }\n if (enAttr && enAttr.field) {\n if (data.fields.indexOf(enAttr.field) < 0) {\n return { result: false, reasons: [\"encode\", \"data\"] };\n }\n if (enAttr.scale) {\n const foundScale = scales[enAttr.scale];\n const vals = data.values.map(d => d.datum[enAttr.field]);\n const scaleDomain = foundScale.domain();\n let valid = true;\n\n if ([\"band\", \"ordinal\", \"point\"].indexOf(foundScale.type) >= 0) {\n // for discrete scales\n valid =\n valid &&\n vals.reduce(\n (acc, v) => (acc = acc && scaleDomain.indexOf(v) >= 0),\n true\n );\n } else if (foundScale.type === \"linear\") {\n const max = Math.max(...vals);\n const min = Math.min(...vals);\n valid = valid && scaleDomain[0] <= min && scaleDomain[1] >= max;\n } else if (foundScale.type === \"time\") {\n const max = Math.max(...vals);\n const min = Math.min(...vals);\n valid = valid && scaleDomain[0] <= min && scaleDomain[1] >= max;\n }\n\n if (!valid) {\n return { reasons: [\"encode\", \"data\", \"scale\"], result: false };\n }\n }\n }\n }\n }\n return { result: true };\n}\n\nfunction containAnyAttrSet(possibleAttrSets, encode) {\n return possibleAttrSets.reduce((valid, attrs) => {\n const hasAttrs = attrs.reduce(\n (hasAttrs, attr) => hasAttrs && encode[attr],\n true\n );\n return valid || hasAttrs;\n }, false);\n}\n\n// function checkViewAxisConstraint(pseudoTl) {\n// let yAxisViewChange, markViewChanges = [], xAxisViewChange;\n// pseudoTl.concat.forEach((stage, i) => {\n// stage.sync.forEach(pseudoStep => {\n// let deltaW = get(pseudoStep, \"diff\", \"meta\", \"view\", \"deltaW\"),\n// deltaH = get(pseudoStep, \"diff\", \"meta\", \"view\", \"deltaH\");\n\n// if (pseudoStep.diff.compType === \"axis\" && pseudoStep.diff.compName === \"x\" && !xAxisViewChange) {\n// xAxisViewChange = {\n// widthChange: deltaW > 0 ? \"inc\" : (deltaW < 0 ? \"dec\" : false),\n// orient: pseudoStep.diff.initial.orient,\n// when: i\n// }\n// }\n// if (pseudoStep.diff.compType === \"axis\" && pseudoStep.diff.compName === \"y\" && !yAxisViewChange) {\n// yAxisViewChange = {\n// heightChange: deltaH > 0 ? \"inc\" : (deltaH < 0 ? \"dec\" : false),\n// orient: pseudoStep.diff.initial.orient,\n// when: i\n// }\n// }\n// if (pseudoStep.diff.compType === \"mark\" ) {\n// markViewChanges.push({\n// widthChange: deltaW > 0 ? \"inc\" : (deltaW < 0 ? \"dec\" : false),\n// heightChange: deltaH > 0 ? \"inc\" : (deltaH < 0 ? \"dec\" : false),\n// when: i\n// })\n// }\n// })\n// })\n// if (xAxisViewChange.orient === \"bottom\") {\n// if (xAxisViewChange.heightChange === \"inc\") {\n// if (xAxisViewChange.when > yAxisViewChange.when) {\n// return false\n// } else if (xAxisViewChange.when > Math.min(...markViewChanges.map(c => c.when))) {\n// return false\n// }\n// } else if (xAxisViewChange.heightChange === \"dec\") {\n// if (xAxisViewChange.when < yAxisViewChange.when) {\n// return false\n// } else if (xAxisViewChange.when < Math.max(...markViewChanges.map(c => c.when))) {\n// return false\n// }\n// }\n// } else if (yAxisViewChange.orient === \"right\" &&\n// yAxisViewChange.heightChange === \"inc\") {\n// console.error(\"TODO\");\n// }\n// return true;\n// }\n\nexport {\n checkMarkComp\n // checkViewAxisConstraint as checkViewAxisConstraint\n};\n","import { get, deepEqual } from \"../util/util\";\nimport { MIN_POS_DELTA } from \"./util\";\n\nfunction validate(pseudoTimeline, stageN) {\n return (\n checkViewAxisConstraint(pseudoTimeline) &&\n checkViewLegendConstraint(pseudoTimeline) &&\n checkUnempty(pseudoTimeline) &&\n pseudoTimeline.concat.length === stageN &&\n checkMarkConstraint(pseudoTimeline)\n );\n}\nfunction checkUnempty(pseudoTl) {\n return !pseudoTl.concat.find(stage => stage.sync.length === 0);\n}\n\nfunction checkViewAxisConstraint(pseudoTl) {\n let yAxisViewChange, markViewChanges = [], xAxisViewChange;\n pseudoTl.concat.forEach((stage, i) => {\n stage.sync.forEach(pseudoStep => {\n let deltaW = get(pseudoStep, \"diff\", \"meta\", \"view\", \"x\"),\n deltaH = get(pseudoStep, \"diff\", \"meta\", \"view\", \"y\");\n\n if (pseudoStep.diff.compType === \"axis\" && pseudoStep.diff.compName === \"x\" && !xAxisViewChange) {\n xAxisViewChange = {\n width: deltaW >= MIN_POS_DELTA ? \"inc\" : (deltaW <= -MIN_POS_DELTA ? \"dec\" : false),\n height: deltaH >= MIN_POS_DELTA ? \"inc\" : (deltaH <= -MIN_POS_DELTA ? \"dec\" : false),\n orient: get(pseudoStep, \"diff\", \"initial\", \"orient\") || get(pseudoStep, \"diff\", \"final\", \"orient\"),\n when: i\n };\n }\n if (pseudoStep.diff.compType === \"axis\" && pseudoStep.diff.compName === \"y\" && !yAxisViewChange) {\n yAxisViewChange = {\n width: deltaW >= MIN_POS_DELTA ? \"inc\" : (deltaW <= -MIN_POS_DELTA ? \"dec\" : false),\n height: deltaH >= MIN_POS_DELTA ? \"inc\" : (deltaH <= -MIN_POS_DELTA ? \"dec\" : false),\n orient: get(pseudoStep, \"diff\", \"initial\", \"orient\") || get(pseudoStep, \"diff\", \"final\", \"orient\"),\n when: i\n };\n }\n\n if (pseudoStep.diff.compType === \"mark\" ) {\n markViewChanges.push({\n width: deltaW >= MIN_POS_DELTA ? \"inc\" : (deltaW <= -MIN_POS_DELTA ? \"dec\" : false),\n height: deltaH >= MIN_POS_DELTA ? \"inc\" : (deltaH <= -MIN_POS_DELTA ? \"dec\" : false),\n when: i\n });\n }\n });\n });\n\n for (const condition of [[xAxisViewChange, yAxisViewChange, \"bottom\", \"height\"], [yAxisViewChange, xAxisViewChange, \"right\", \"width\"]]) {\n let [axis, otherAxis, orient, side] = condition;\n\n if (get(axis, \"orient\") === orient) {\n if (axis[side] === \"inc\") {\n if (axis.when > get(otherAxis, \"when\")) {\n return false;\n } if ((markViewChanges.length > 0) &&\n (axis.when > Math.min(...markViewChanges.map(c => c.when)))) {\n return false;\n }\n } else if (axis[side] === \"dec\") {\n if (axis.when < get(otherAxis, \"when\")) {\n return false;\n } else if ((markViewChanges.length > 0) &&\n (axis.when < Math.max(...markViewChanges.map(c => c.when)))) {\n return false;\n }\n }\n }\n }\n\n return true;\n}\n\nfunction checkViewLegendConstraint(pseudoTl) {\n const viewChanges = {\n marks: [],\n legends: []\n };\n\n pseudoTl.concat.forEach((stage, i) => {\n stage.sync.forEach(pseudoStep => {\n const delta = {\n x: get(pseudoStep, \"diff\", \"meta\", \"view\", \"x\"),\n y: get(pseudoStep, \"diff\", \"meta\", \"view\", \"y\"),\n width: get(pseudoStep, \"diff\", \"meta\", \"view\", \"deltaW\"),\n height: get(pseudoStep, \"diff\", \"meta\", \"view\", \"deltaH\")\n };\n\n if ([\"legend\", \"mark\"].indexOf(pseudoStep.diff.compType) >= 0) {\n const vc = {\n x:\n delta.x >= MIN_POS_DELTA\n ? \"inc\"\n : delta.x <= -MIN_POS_DELTA\n ? \"dec\"\n : false,\n y:\n delta.y >= MIN_POS_DELTA\n ? \"inc\"\n : delta.y <= -MIN_POS_DELTA\n ? \"dec\"\n : false,\n width:\n delta.width >= MIN_POS_DELTA\n ? \"inc\"\n : delta.width <= -MIN_POS_DELTA\n ? \"dec\"\n : false,\n height:\n delta.height >= MIN_POS_DELTA\n ? \"inc\"\n : delta.height <= -MIN_POS_DELTA\n ? \"dec\"\n : false,\n when: i\n };\n if (vc.x || vc.y || vc.width || vc.height) {\n if (pseudoStep.diff.compType === \"legend\") {\n vc.orient =\n get(pseudoStep, \"diff\", \"initial\", \"orient\") ||\n get(pseudoStep, \"diff\", \"final\", \"orient\") ||\n \"right\";\n viewChanges.legends.push(vc);\n } else {\n viewChanges.marks.push(vc);\n }\n }\n }\n });\n });\n if (viewChanges.marks.length === 0 || viewChanges.legends.length === 0) {\n return true;\n }\n\n for (const markViewChange of viewChanges.marks) {\n const rightLegendVCs = viewChanges.legends.filter(\n vc => vc.orient === \"right\"\n );\n if (rightLegendVCs.length > 0) {\n if (markViewChange.width === \"inc\") {\n if (\n markViewChange.when <\n Math.min(\n ...rightLegendVCs.filter(vc => vc.x === \"inc\").map(c => c.when)\n )\n ) {\n return false;\n }\n } else if (markViewChange.width === \"dec\") {\n if (\n markViewChange.when >\n Math.max(\n ...rightLegendVCs.filter(vc => vc.x === \"dec\").map(c => c.when)\n )\n ) {\n return false;\n }\n }\n }\n const bottomLegendVCs = viewChanges.legends.filter(\n vc => vc.orient === \"bottom\"\n );\n if (bottomLegendVCs.length > 0) {\n if (markViewChange.height === \"inc\") {\n if (\n markViewChange.when <\n Math.min(\n ...bottomLegendVCs.filter(vc => vc.y === \"inc\").map(c => c.when)\n )\n ) {\n return false;\n }\n } else if (markViewChange.height === \"dec\") {\n if (\n markViewChange.when >\n Math.max(\n ...bottomLegendVCs.filter(vc => vc.y === \"dec\").map(c => c.when)\n )\n ) {\n return false;\n }\n }\n }\n }\n\n return true;\n}\n\nfunction checkMarkConstraint(pseudoTl) {\n for (const stage of pseudoTl.concat) {\n const markPseduoSteps = stage.sync.filter(\n pseudoStep => pseudoStep.diff.compType === \"mark\"\n );\n for (let i = 0; i < markPseduoSteps.length; i++) {\n const pseudoStep = markPseduoSteps[i];\n if (\n (\n deepEqual(pseudoStep.factorSets.current, [\"data\"]) ||\n deepEqual(pseudoStep.factorSets.current, [\"data\", \"marktype\"])\n ) &&\n pseudoStep.diff.meta.data.row === false\n ) {\n return false;\n }\n /*\n if pseudoStep.factorSets.current has \"data\"\n && pseudoStep.diff.meta.data.row === false\n && pseudoStep.diff.initial.encode.\n */\n }\n }\n return true;\n}\n\nexport { checkViewAxisConstraint, validate, checkUnempty };\n","import { applyMarkDiffs } from \"./diffApplier\";\nimport { checkMarkComp } from \"./markCompChecker\";\nimport { validate } from \"./pseudoTimelineValidator\";\nimport { copy, enumArraysByItems } from \"../util/util\";\nimport { MIN_POS_DELTA } from \"./util\";\n\n// Enuemerate a set of steps ( diff.compType === \"mark\"\n );\n\n const enumedMarksPusedoSteps = markDiffs.map(markDiff => {\n // 1. find valid splitting factors of the mark components.\n const { allFactors, extraFactorsByMarktype } = findAllFactors(markDiff);\n\n // 2. enumerate by assigning a value among [0, ..., stageN -1] on each factor\n const skippingCondition = new SkippingConditions();\n const enumed = [];\n\n for (let i = 0; i < Math.pow(stageN, allFactors.length); i++) {\n const factorAssignment = getFactorAssignment(i, allFactors.length, stageN);\n\n let valid = true;\n const factorSets = [];\n for (let j = 0; j < stageN - 1; j++) {\n const applyingFactors = allFactors.filter((factor, factorId) => {\n return factorAssignment[factorId] >= stageN - j - 1;\n });\n\n if (skippingCondition.check(applyingFactors)) {\n valid = false;\n break;\n }\n\n const markCompSummary = applyMarkDiffs(\n markDiff,\n applyingFactors,\n rawInfo,\n extraFactorsByMarktype\n );\n // 3. Check if the intermediate mark components are valid. If not, exclude the enumerated steps.\n const { reasons } = checkMarkComp(markCompSummary);\n\n if (reasons) {\n // register a new skipping condition\n const newSkippingCondition = allFactors\n .filter(factor =>\n reasons.find(reason => factor.indexOf(reason) >= 0)\n )\n .map(factor => {\n return {factor, include: applyingFactors.indexOf(factor) >= 0};\n });\n skippingCondition.register(newSkippingCondition);\n\n valid = false;\n break;\n } else if (\n !factorSets.find(\n appFctrs => appFctrs.toString() === applyingFactors.toString()\n )\n ) {\n factorSets.push(applyingFactors);\n }\n }\n\n if (valid) {\n factorSets.push(allFactors);\n if (\n !enumed.find(\n fctrSets => fctrSets.toString() === factorSets.toString()\n )\n ) {\n enumed.push(factorSets);\n }\n }\n }\n\n return enumed.map(factorSets => {\n let prevFactorSet;\n return factorSets.map(factorSet => {\n let newPseudoStep = {\n diff: markDiff,\n factorSets: {\n current: prevFactorSet\n ? factorSet.exclude(prevFactorSet)\n : factorSet,\n applied: factorSet,\n all: allFactors,\n extraByMarktype: extraFactorsByMarktype\n }\n };\n prevFactorSet = factorSet;\n return newPseudoStep;\n });\n });\n\n });\n\n const axespseudoSteps = getAxisPseudoSteps(diffs);\n\n const legendspseudoSteps = getLegendPseudoSteps(diffs);\n\n let pseudoTimelines;\n if (enumedMarksPusedoSteps.length === 1) {\n pseudoTimelines = enumArraysByItems(\n enumedMarksPusedoSteps[0],\n legendspseudoSteps.concat(axespseudoSteps),\n enumTlByStep\n ).map(pseudoTl => {\n return {\n concat: pseudoTl.map(stage => {\n return { sync: Array.isArray(stage) ? stage : [stage] };\n })\n };\n });\n } else {\n console.error(\n \"Currently, Gemini Recommendation only supports a single mark without adding or removing.\"\n );\n console.error(\"TODO: cross join the pseudo timelines of each mark.\");\n }\n\n return (\n pseudoTimelines\n .map(pseudoTl => {\n pseudoTl.concat = pseudoTl.concat.map(stage => {\n let currSync = stage.sync;\n\n // filter empty mark pStep\n currSync = currSync.filter(pStep => {\n return (pStep.diff.compType !== \"mark\") ||\n (\n !(\n (pStep.factorSets.applied.length === 0) ||\n (pStep.factorSets.current.length === 0)\n ) &&\n !(\n (pStep.factorSets.all.indexOf(\"add\") >= 0) &&\n (pStep.factorSets.applied.indexOf(\"add\") < 0)\n ) &&\n !(\n (pStep.factorSets.all.indexOf(\"remove\") >= 0) &&\n (pStep.factorSets.applied.length !== pStep.factorSets.current.length)\n )\n );\n\n });\n\n\n\n return { sync: currSync };\n });\n return pseudoTl;\n })\n .filter(pseudoTl => validate(pseudoTl, stageN))\n // .map((pseudoTl, i) => appendGuideMoves(pseudoTl, axespseudoSteps, legendspseudoSteps))\n .map(pseudoTl => appendViewDiff(pseudoTl, diffs.viewDiffs))\n .map(pseudoTl => appendGridChanges(pseudoTl))\n .map(pseudoTl => appendTiming(pseudoTl, timing))\n );\n}\n\nfunction appendTiming(pseudoTl, timing = {}) {\n const totalDuration = timing.totalDuration || 2000;\n pseudoTl.concat.forEach(stage => {\n for (const pseudoStep of stage.sync) {\n pseudoStep.timing = {\n duration: { ratio: Math.floor(100 / pseudoTl.concat.length) / 100 }\n };\n\n }\n });\n pseudoTl.totalDuration = totalDuration;\n return pseudoTl;\n}\nfunction getLegendPseudoSteps(diffs) {\n return diffs.compDiffs\n .filter(\n diff =>\n diff.compType === \"legend\" &&\n (diff.meta.scale ||\n diff.meta.encode ||\n diff.meta.add ||\n diff.meta.remove ||\n Math.abs(diff.meta.view.x) - MIN_POS_DELTA > 0 ||\n Math.abs(diff.meta.view.y) - MIN_POS_DELTA > 0 ||\n Math.abs(diff.meta.view.deltaH) - MIN_POS_DELTA > 0 ||\n Math.abs(diff.meta.view.deltaW) - MIN_POS_DELTA > 0)\n )\n .reduce((steps, diff) => {\n let factors = [];\n if (diff.meta.add) {\n factors = [`add.${diff.meta.usedScales.sort().join(\"_\")}`];\n } else if (diff.meta.remove) {\n factors = [`remove.${diff.meta.usedScales.sort().join(\"_\")}`];\n } else {\n if (diff.meta.scale) {\n factors = factors.concat(Object.keys(diff.meta.scale).map(scName => `scale.${scName}`));\n }\n if (diff.meta.encode) {\n factors.push(\"encode\");\n }\n if (diff.meta.view.x !== 0 || diff.meta.view.y !== 0) {\n factors.push(\"encode.position\");\n }\n }\n\n // return steps.concat(\n // factors.map(fctr => {\n // return { diff: diff, factorSets: {current: [fctr], all: factors} }\n // })\n // );\n return steps.concat({ diff, factorSets: {current: factors, all: factors} });\n }, []);\n}\nfunction getAxisPseudoSteps(diffs) {\n return diffs.compDiffs\n .filter(\n diff =>\n diff.compType === \"axis\" &&\n (diff.meta.scale ||\n diff.meta.encode ||\n diff.meta.add ||\n diff.meta.remove ||\n Math.abs(diff.meta.view.x) - MIN_POS_DELTA > 0 ||\n Math.abs(diff.meta.view.y) - MIN_POS_DELTA > 0 ||\n Math.abs(diff.meta.view.deltaH) - MIN_POS_DELTA > 0 ||\n Math.abs(diff.meta.view.deltaW) - MIN_POS_DELTA > 0)\n )\n .filter(diff => {\n if (diff.meta.scale[diff.meta.usedScales[0]]) {\n const scaleDiff = diff.meta.scale[diff.meta.usedScales[0]];\n return scaleDiff.rangeDelta === 0 &&\n !scaleDiff.domainValueDiff &&\n scaleDiff.stayDiscrete\n ? false\n : true;\n }\n return true;\n })\n .map(diff => {\n let factors = [];\n if (diff.meta.add) {\n factors = [`add.${diff.compName}`];\n } else if (diff.meta.remove) {\n factors = [`remove.${diff.compName}`];\n } else {\n if (diff.meta.scale) {\n factors = factors.concat(Object.keys(diff.meta.scale).map(scName => `scale.${scName}`));\n factors.push(\"encode\");\n }\n\n if (diff.meta.view.x !== 0 || diff.meta.view.y !== 0) {\n factors.push(\"encode.position\");\n }\n }\n return { diff, factorSets: {current: factors, applied: factors, all: factors} };\n });\n}\n\n\nfunction appendViewDiff(pseudoTl, viewDiffs) {\n const done = {\n increase: { width: false, height: false },\n decrease: { width: false, height: false }\n };\n function appendDiff(stage, incOrDec) {\n for (const which of [\"width\", \"height\"]) {\n if (\n viewDiffs[which][incOrDec] &&\n needViewDiff(stage.sync, incOrDec, which) &&\n !done[incOrDec][which]\n ) {\n const found = stage.sync.find(pStep => pStep.diff.compType === \"view\");\n if (found) {\n found.factorSets.current.push(which);\n } else {\n stage.sync.push({\n\n diff: {\n compName: viewDiffs.compName,\n compType: viewDiffs.compType,\n meta: viewDiffs\n },\n factorSets: { current: [which] }\n });\n }\n\n done[incOrDec][which] = true;\n }\n }\n\n return stage;\n }\n return {\n concat: pseudoTl.concat\n .map((stage, j) => appendDiff(stage, \"increase\", j))\n .reverse()\n .map(stage => appendDiff(stage, \"decrease\"))\n .reverse()\n };\n}\nfunction needViewDiff(pseudoSteps, incOrDec, which) {\n for (const pseudoStep of pseudoSteps.filter(\n step => [\"mark\", \"axis\", \"legend\"].indexOf(step.diff.compType) >= 0\n )) {\n let deltaProp = which === \"width\" ? \"x\" : \"y\";\n if (pseudoStep.diff.compType === \"mark\") {\n deltaProp = which === \"width\" ? \"deltaW\" : \"deltaH\";\n } else if (pseudoStep.diff.compType === \"axis\") {\n if (\n [\"left\", \"top\"].indexOf(\n (pseudoStep.diff.initial || pseudoStep.diff.final).orient\n ) >= 0\n ) {\n deltaProp = which === \"width\" ? \"deltaW\" : \"deltaH\";\n }\n }\n let hasViwRelatedScaleDiff = true;\n if (pseudoStep.diff.compType === \"mark\") {\n hasViwRelatedScaleDiff =\n pseudoStep.factorSets.current.indexOf(\n which === \"width\" ? \"scale.x\" : \"scale.y\"\n ) >= 0;\n }\n\n if (\n pseudoStep.diff.meta.view[deltaProp] >= MIN_POS_DELTA &&\n incOrDec === \"increase\" &&\n hasViwRelatedScaleDiff\n ) {\n return true;\n }\n if (\n pseudoStep.diff.meta.view[deltaProp] <= -MIN_POS_DELTA &&\n incOrDec === \"decrease\" &&\n hasViwRelatedScaleDiff\n ) {\n return true;\n }\n }\n return false;\n}\n\n// When the size of the mark view changes, grid lines should be extended.\nfunction appendGridChanges(pseudoTl) {\n // Currently only one pStep is generated.\n let xAxisPStep, yAxisPStep;\n pseudoTl.concat.forEach(stage => {\n xAxisPStep = xAxisPStep || stage.sync.find(aPStep =>\n !aPStep.diff.meta.add &&\n !aPStep.diff.meta.remove &&\n aPStep.diff.compType === \"axis\" &&\n aPStep.diff.meta.scNames[0] === \"x\");\n yAxisPStep = yAxisPStep || stage.sync.find(aPStep =>\n !aPStep.diff.meta.add &&\n !aPStep.diff.meta.remove &&\n aPStep.diff.compType === \"axis\" &&\n aPStep.diff.meta.scNames[0] === \"y\");\n });\n\n if (!xAxisPStep && !yAxisPStep) {\n return pseudoTl;\n }\n return {\n ...pseudoTl,\n concat: pseudoTl.concat.map(stage => {\n let newStage = copy(stage);\n // if there is any mark.view change\n if ( stage.sync.find(pStep => [\"mark\", \"axis\"].indexOf(pStep.diff.compType) >= 0 && pStep.diff.meta.view.deltaH !== 0) ) {\n if (xAxisPStep && !stage.sync.find(pStep => pStep.diff.compType === \"axis\" && pStep.diff.meta.scNames[0] === \"x\")) {\n\n xAxisPStep.factorSets.all.push(\"encode.only.grid\");\n let gridChangingAxisPStep = {\n ...xAxisPStep,\n factorSets: {\n all: copy(xAxisPStep.factorSets.all),\n applied: [\"encode.only.grid\"],\n current: [\"encode.only.grid\"]\n }\n };\n xAxisPStep.factorSets.applied.push(\"encode.only.grid\");\n newStage.sync.push(gridChangingAxisPStep);\n }\n }\n\n if ( stage.sync.find(pStep => [\"mark\", \"axis\"].indexOf(pStep.diff.compType) >= 0 && pStep.diff.meta.view.deltaW !== 0) ) {\n if (yAxisPStep && !stage.sync.find(pStep => pStep.diff.compType === \"axis\" && pStep.diff.meta.scNames[0] === \"y\")) {\n yAxisPStep.factorSets.all.push(\"encode.only.grid\");\n let gridChangingAxisPStep = {\n ...yAxisPStep,\n factorSets: {\n all: copy(yAxisPStep.factorSets.all),\n applied: [\"encode.only.grid\"],\n current: [\"encode.only.grid\"]\n }\n };\n yAxisPStep.factorSets.applied.push(\"encode.only.grid\");\n newStage.sync.push(gridChangingAxisPStep);\n }\n }\n\n return newStage;\n })\n };\n\n}\nfunction enumTlByStep(Tl, step) {\n const newTls = [];\n for (let i = 0; i < Tl.length; i++) {\n const newTl = copy(Tl);\n if (!Array.isArray(newTl[i])) {\n newTl[i] = [newTl[i]];\n }\n const found = newTl[i].find(stp => stp.diff.compName === step.diff.compName);\n if (found) {\n found.factorSets.current = found.factorSets.current.concat(\n step.factorSets.current\n );\n } else {\n newTl[i].push(step);\n }\n\n newTls.push(newTl);\n }\n return newTls;\n}\n\n// choose the factors having diffs between initial and final.\nfunction findAllFactors(markDiff) {\n const allFactors = [];\n let diffInfo = markDiff.meta;\n let extraFactorsByMarktype = [];\n if (diffInfo.add) {\n allFactors.push(\"add\");\n }\n\n if (diffInfo.remove) {\n allFactors.push(\"remove\");\n return { allFactors, extraFactorsByMarktype };\n }\n\n if (diffInfo.marktype) {\n allFactors.push(\"marktype\");\n extraFactorsByMarktype.push(\"encode.others\");\n }\n if (diffInfo.data) {\n if (diffInfo.data.row !== false || diffInfo.data.column !== \"removed\") {\n allFactors.push(\"data\");\n }\n }\n if (diffInfo.scale) {\n Object.keys(diffInfo.scale).forEach(scName => {\n const scaleDiff = diffInfo.scale[scName];\n if (scaleDiff) {\n allFactors.push(`scale.${scName}`);\n }\n });\n }\n Object.keys(diffInfo.encode).forEach(chName => {\n const chDiff = diffInfo.encode[chName];\n if (chDiff === true) {\n allFactors.push(`encode.${chName}`);\n } else if (chDiff === \"byMarktypeChange\") {\n extraFactorsByMarktype.push(`encode.${chName}`);\n }\n });\n return { allFactors, extraFactorsByMarktype };\n}\n\nfunction getFactorAssignment(i, factorLen, stageN) {\n let quotient = i;\n const assignment = new Array(factorLen);\n for (let j = 0; j < factorLen; j++) {\n assignment[j] = quotient % stageN;\n quotient = Math.floor(quotient / stageN);\n }\n return assignment;\n}\n\nclass SkippingConditions {\n constructor() {\n this.registered = [];\n }\n\n register(condition) {\n this.registered.push(condition);\n }\n\n check(factors) {\n for (let i = 0; i < this.registered.length; i++) {\n const condition = this.registered[i];\n const result = condition.reduce((satisfying, condF) => {\n return (satisfying =\n satisfying && factors.indexOf(condF.factor) >= 0 === condF.include);\n }, true);\n\n if (result) {\n return true;\n }\n }\n return false;\n }\n}\n\nexport { findAllFactors, SkippingConditions, enumeratePseudoTimelines };\n\n// legendspseudoSteps.map(pStep => pStep.diff.compName)\n// .unique()\n// .forEach(legendName => {\n// let mergedLegendStep = mergePusedoSteps(currSync.filter(pStep => pStep.diff.compName === legendName))\n// if (mergedLegendStep){\n// currSync = currSync.filter(pStep => pStep.diff.compName !== legendName).concat([mergedLegendStep])\n// }\n// });\n// function mergePusedoSteps(pSteps) {\n// if (pSteps.length === 0) {\n// return;\n// }\n// const merged = copy(pSteps[0]);\n// merged.factorSets = {\n// applied: pSteps.reduce((applied, pStep) => applied.concat(pStep.factorSets ? pStep.factorSets.applied : []), []),\n// all: merged.factorSets ? merged.factorSets.all : [],\n// extraByMarktype: merged.factorSets ? merged.factorSets.extraByMarktype : []\n// }\n\n// return merged;\n// }\n\n// function appendGuideMoves(pseudoTl, axespseudoSteps, legendspseudoSteps) {\n// let bottomAxisPStep = axespseudoSteps.find(pStep =>\n// (pStep.diff.initial && pStep.diff.initial.orient === \"bottom\") &&\n// (pStep.diff.final && pStep.diff.final.orient === \"bottom\")\n// );\n// let rightLegendPStep = legendspseudoSteps.find(pStep =>\n// (pStep.diff.initial && pStep.diff.initial.orient === \"right\") &&\n// (pStep.diff.final && pStep.diff.final.orient === \"right\")\n// );\n// let bottomAxisMoved = false;\n// pseudoTl.concat.forEach(stage => {\n// let markPseudoSteps = stage.sync.filter(pStep => pStep.diff.compType === \"mark\");\n// let widthChange = !!markPseudoSteps.find(mPseudoStep =>\n// mPseudoStep.factorSets.current.indexOf(\"scale.x\") >= 0 && mPseudoStep.diff.meta.view.deltaW !== 0\n// );\n\n// if (bottomAxisPStep) {\n// let thisbottomAxisPStep = stage.sync.find(pStep => pStep.diff.compName === bottomAxisPStep.diff.compName );\n// if (bottomAxisMoved && thisbottomAxisPStep) {\n// thisbottomAxisPStep.factorSets.current = thisbottomAxisPStep.factorSets.current.filter(fctr => fctr !== \"encode.position\");\n// }\n\n// if ((markPseudoSteps.length > 0)) {\n// let heightChange = !!markPseudoSteps.find(mPseudoStep =>\n// mPseudoStep.factorSets.current.indexOf(\"scale.y\") >= 0 && mPseudoStep.diff.meta.view.deltaH !== 0\n// );\n// if (heightChange) {\n// // If marks height change, the bottom axis should move\n// if (!thisbottomAxisPStep && !bottomAxisMoved) {\n// // add axisPStep only changing axisG\n// stage.sync.push({\n// diff: bottomAxisPStep.diff,\n// factorSets: {\n// current: [\"encode.position\"],\n// applied: [\"encode.position\"],\n// all: bottomAxisPStep.factorSets.all\n// }\n// })\n// }\n// bottomAxisMoved = true;\n// } else {\n// // If marks height does not change, the bottom axis should not move\n// if (thisbottomAxisPStep && !bottomAxisMoved) {\n// // bottomAxisPStep should not move\n// thisbottomAxisPStep.factorSets.current = thisbottomAxisPStep.factorSets.current.filter(fctr => fctr !== \"encode.position\")\n\n// }\n// bottomAxisMoved = false;\n// }\n// } else {\n// if (thisbottomAxisPStep) {\n// bottomAxisMoved = true;\n// }\n// }\n// }\n\n// })\n\n// return pseudoTl;\n// // If marks width change, the right axis should move\n// // If marks width change, the right legend should move\n\n// // If marks width does nont change, the right axis should not move\n// // If marks width does not change, the right legend should not move\n// }","import { get } from \"../util/util\";\n\nexport function PERCEPTION_CAP(duration) {\n // if (duration < 0) {\n // console.error(\"Duration cannot be negative!\");\n // } else if (duration <= 0) {\n // return 0.3\n // } else if (duration <= 667) {\n // return 0.5\n // } else if (duration <= 1000) {\n // return 0.8\n // } else if (duration <= 2000) {\n // return 1.0\n // } else\n // return 1.5\n // }\n // return 1.00 / (1 + Math.exp(-(duration-1250)/180)) + 0.4\n // return 1.00 / (1 + Math.exp(-(duration-1250)/180)) + 0.35\n return 1.4 / (1 + Math.exp(-(duration - 1200) / 300));\n}\n\n// Tuning for the mturk study\n// // Stimulus 1\n// stage1-rank1 > stage3-rank1, stage2-rank2, stage2-rank3\n// stage2-rank1 > stage3-rank1, stage2-rank2, stage2-rank3\n\n// // Stimulus 2\n// s1R1 > *\n\n// // Stimulus 3\n// stage1-rank1 > *\n// stage2-rank1 > stage2-rank2, stage3-rank1\n\n// // Stimulus 4\n// stage1-rank1 > stage2-rank3\n\nconst sameDomain = (pseudoStep, foundFactor) => {\n return (\n get(\n pseudoStep,\n \"diff\",\n \"meta\",\n \"scale\",\n foundFactor.split(\".\")[1],\n \"domainSpaceDiff\"\n ) === false\n );\n};\nconst diffDomain = (pseudoStep, foundFactor) => {\n return (\n get(\n pseudoStep,\n \"diff\",\n \"meta\",\n \"scale\",\n foundFactor.split(\".\")[1],\n \"domainSpaceDiff\"\n ) === true\n );\n};\nconst noFactors = factors => {\n return function(pseudoStep) {\n for (const fctr of factors) {\n if (pseudoStep.factorSets.current.indexOf(fctr) >= 0) {\n return false;\n }\n }\n return true;\n };\n};\nexport const PERCEPTION_COST = {\n mark: [\n { factor: \"marktype\", cost: 0.3 },\n { factor: \"data\", cost: 0.5 },\n { factor: \"scale.y\", cost: 0.4, with: [sameDomain] },\n { factor: \"scale.x\", cost: 0.4, with: [sameDomain] },\n { factor: \"scale.color\", cost: 0.4, with: [sameDomain] },\n { factor: \"scale.shape\", cost: 0.4, with: [sameDomain] },\n { factor: \"scale.size\", cost: 0.4, with: [sameDomain] },\n { factor: \"scale.y\", cost: 0.65, without: [sameDomain] },\n { factor: \"scale.x\", cost: 0.65, without: [sameDomain] },\n { factor: \"scale.color\", cost: 0.65, without: [sameDomain] },\n { factor: \"scale.shape\", cost: 0.65, without: [sameDomain] },\n { factor: \"scale.size\", cost: 0.65, without: [sameDomain] },\n { factor: \"encode.x\", cost: 0.3 },\n { factor: \"encode.y\", cost: 0.3 },\n { factor: \"encode.color\", cost: 0.3 },\n { factor: \"encode.shape\", cost: 0.3 },\n { factor: \"encode.size\", cost: 0.3 },\n { factor: \"encode.opacity\", cost: 0.2 }\n ],\n axis: [\n // { factor: \"scale.*\", cost: 0.7 },\n // { factor: \"add.*\", cost: 1 },\n // { factor: \"remove.*\", cost: 1 },\n { factor: \"encode\", cost: 0.3 },\n { factor: \"scale\", cost: 0.5, with: [sameDomain] },\n { factor: \"add\", cost: 0.7 },\n { factor: \"remove\", cost: 0.7 },\n { factor: \"scale\", cost: 1, without: [sameDomain] }\n ],\n legend: [\n // { factor: \"scale.*\", cost: 0.7 },\n // { factor: \"add.*\", cost: 1 },\n // { factor: \"remove.*\", cost: 1 },\n { factor: \"encode\", cost: 0.3 },\n { factor: \"scale\", cost: 0.5, with: [sameDomain] },\n { factor: \"add\", cost: 0.7 },\n { factor: \"remove\", cost: 0.7 },\n { factor: \"scale\", cost: 1, without: [sameDomain] }\n ]\n};\n\nexport const PENALTY_COMBOS = [\n {\n chunks: [\n [\n {\n compType: \"mark\",\n factor: \"scale.y\",\n with: [diffDomain, noFactors([\"encode.y\"])]\n }\n ]\n ],\n cost: 1.0\n },\n {\n chunks: [\n [\n {\n compType: \"mark\",\n factor: \"scale.x\",\n with: [diffDomain, noFactors([\"encode.x\"])]\n }\n ]\n ],\n cost: 1.0\n },\n {\n chunks: [\n [\n {\n compType: \"mark\",\n factor: \"scale.size\",\n with: [diffDomain, noFactors([\"encode.size\"])]\n }\n ]\n ],\n cost: 1.0\n },\n {\n chunks: [\n [\n {\n compType: \"mark\",\n factor: \"scale.color\",\n with: [diffDomain, noFactors([\"encode.color\"])]\n }\n ]\n ],\n cost: 1.0\n }\n];\n\nexport const DISCOUNT_COMBOS = [\n {\n chunks: [\n [\n { compType: \"mark\", factor: \"scale.y\", with: [sameDomain] },\n { compType: \"mark\", factor: \"scale.x\", with: [sameDomain] }\n ]\n ],\n cost: -0.2\n },\n {\n chunks: [\n [\n { compType: \"mark\", factor: \"scale.size\" },\n { compType: \"mark\", factor: \"scale.shape\" }\n ],\n [\n { compType: \"mark\", factor: \"scale.color\" },\n { compType: \"mark\", factor: \"scale.shape\" }\n ],\n [\n { compType: \"mark\", factor: \"scale.color\" },\n { compType: \"mark\", factor: \"scale.size\" }\n ],\n [\n { compType: \"mark\", factor: \"scale.size\" },\n { compType: \"mark\", factor: \"scale.opacity\" }\n ],\n [\n { compType: \"mark\", factor: \"scale.opacity\" },\n { compType: \"mark\", factor: \"scale.shape\" }\n ],\n [\n { compType: \"mark\", factor: \"scale.color\" },\n { compType: \"mark\", factor: \"scale.opacity\" }\n ],\n [\n { compType: \"mark\", factor: \"scale.color\" },\n { compType: \"mark\", factor: \"scale.size\" },\n { compType: \"mark\", factor: \"scale.shape\" }\n ],\n [\n { compType: \"mark\", factor: \"scale.size\" },\n { compType: \"mark\", factor: \"scale.shape\" },\n { compType: \"mark\", factor: \"scale.opacity\" }\n ],\n [\n { compType: \"mark\", factor: \"scale.color\" },\n { compType: \"mark\", factor: \"scale.shape\" },\n { compType: \"mark\", factor: \"scale.opacity\" }\n ],\n [\n { compType: \"mark\", factor: \"scale.color\" },\n { compType: \"mark\", factor: \"scale.size\" },\n { compType: \"mark\", factor: \"scale.opacity\" }\n ],\n [\n { compType: \"mark\", factor: \"scale.color\" },\n { compType: \"mark\", factor: \"scale.size\" },\n { compType: \"mark\", factor: \"scale.opacity\" },\n { compType: \"mark\", factor: \"scale.shape\" }\n ]\n ],\n cost: -0.1\n },\n {\n chunks: [\n [\n { compType: \"mark\", factor: \"scale.y\", with: [sameDomain] },\n { compType: \"axis\", factor: \"scale.y\", with: [sameDomain] }\n ]\n ],\n cost: -0.5\n },\n {\n chunks: [\n [\n { compType: \"mark\", factor: \"scale.y\", with: [diffDomain] },\n { compType: \"axis\", factor: \"scale.y\", with: [diffDomain] }\n ]\n ],\n cost: -1\n },\n {\n chunks: [\n [\n { compType: \"mark\", factor: \"encode.y\" },\n { compType: \"axis\", factor: \"add.y\" }\n ],\n [\n { compType: \"mark\", factor: \"encode.y\" },\n { compType: \"axis\", factor: \"remove.y\" }\n ]\n ],\n cost: -0.7\n },\n {\n chunks: [\n [\n { compType: \"mark\", factor: \"scale.x\", with: [sameDomain] },\n { compType: \"axis\", factor: \"scale.x\", with: [sameDomain] }\n ]\n ],\n cost: -0.5\n },\n {\n chunks: [\n [\n { compType: \"mark\", factor: \"scale.x\", with: [diffDomain] },\n { compType: \"axis\", factor: \"scale.x\", with: [diffDomain] }\n ]\n ],\n cost: -1\n },\n {\n chunks: [\n [\n { compType: \"mark\", factor: \"encode.x\" },\n { compType: \"axis\", factor: \"add.x\" }\n ],\n [\n { compType: \"mark\", factor: \"encode.x\" },\n { compType: \"axis\", factor: \"remove.x\" }\n ]\n ],\n cost: -0.7\n },\n {\n chunks: [\n [\n { compType: \"mark\", factor: \"scale.color\" },\n { compType: \"legend\", contain: \"color\" }\n ]\n ],\n cost: -0.5\n },\n {\n chunks: [\n [\n { compType: \"mark\", factor: \"scale.size\" },\n { compType: \"legend\", contain: \"size\" }\n ]\n ],\n cost: -0.5\n },\n {\n chunks: [\n [\n { compType: \"mark\", factor: \"scale.shape\" },\n { compType: \"legend\", contain: \"shape\" }\n ]\n ],\n cost: -0.5\n }\n];\n","import { roundUp, variance, mean } from \"../util/util\";\nimport * as DG from \"./designGuidelines\";\n\nfunction evaluate(pseudoTimeline) {\n const stageCosts = [];\n const cappedStageCosts = [];\n const N = pseudoTimeline.concat.length;\n const cost = pseudoTimeline.concat.reduce((cost, stage, i) => {\n const totalCost = stage.sync.reduce((sum, pseudoStep) => {\n pseudoStep.meta = { cost: getCost(pseudoStep) };\n return sum + getCost(pseudoStep);\n }, 0);\n const comboCost = getComboCost(stage.sync);\n const dur = pseudoTimeline.totalDuration / pseudoTimeline.concat.length;\n const cap = DG.PERCEPTION_CAP(dur) * Math.pow(0.99, N - 1 - i);\n stage.meta = {\n totalCost: roundUp(totalCost),\n comboCost: roundUp(comboCost),\n cap,\n cost: roundUp(Math.max(totalCost + comboCost - cap, 0))\n };\n stageCosts.push(Math.max(totalCost + comboCost));\n cappedStageCosts.push(Math.max(totalCost + comboCost - cap, 0));\n return cost + Math.max(totalCost + comboCost - cap, 0);\n }, 0);\n\n return {\n cost: roundUp(cost),\n tiebreaker: mean(stageCosts),\n tiebreaker2: variance(cappedStageCosts)\n };\n}\n\nfunction getComboCost(pseudoSteps) {\n const check = (piece, factorSet) => {\n return factorSet.find(\n fctr => fctr === piece.factor || fctr.indexOf(piece.contain) >= 0\n );\n };\n\n return DG.DISCOUNT_COMBOS.concat(DG.PENALTY_COMBOS).reduce(\n (totalDiscount, combo) => {\n for (const chunk of combo.chunks) {\n const isChunk = chunk.reduce((isChunk, piece) => {\n const found = pseudoSteps.find(pStep => {\n return (\n pStep.diff.compType === piece.compType &&\n check(piece, pStep.factorSets.current)\n );\n });\n if (!found) {\n return false;\n }\n\n if (piece.with) {\n isChunk = piece.with.reduce((isChunk, subCondition) => {\n return isChunk && subCondition(found, piece.factor);\n }, isChunk);\n }\n\n return isChunk && !!found;\n }, true);\n if (isChunk) {\n totalDiscount += combo.cost;\n break;\n }\n }\n return totalDiscount;\n },\n 0\n );\n}\n\nfunction getCost(pseudoStep) {\n // Todo\n if (\n pseudoStep.diff.compType === \"view\" ||\n pseudoStep.diff.compType === \"pause\"\n ) {\n return 0;\n }\n let stepCost = 0;\n for (const condition of DG.PERCEPTION_COST[pseudoStep.diff.compType]) {\n const foundFactor = pseudoStep.factorSets.current.find(\n fctr => fctr.indexOf(condition.factor) >= 0\n );\n let with_without = true;\n if (foundFactor && condition.with) {\n with_without = condition.with.reduce((sat, subCondition) => {\n return sat && subCondition(pseudoStep, foundFactor);\n }, true);\n } else if (foundFactor && condition.without) {\n with_without = condition.without.reduce((sat, subCondition) => {\n return sat && !subCondition(pseudoStep, foundFactor);\n }, true);\n }\n\n stepCost += foundFactor && with_without ? condition.cost : 0;\n }\n return stepCost;\n}\n\nexport { getComboCost, getCost, evaluate };\n","import { CHANNEL_TO_ATTRS_OBJ } from \"./util\";\nimport { copy, get, isEmpty } from \"../util/util\";\n\nfunction generateTimeline(pseudoTimeline, userInput, includeMeta) {\n // Assume: pseudoTimeline = {concat: [ {sync: [...] }, {sync: [...]}, ...]}\n // Assume: userInput= {marks: {...}, axes: {...}, legends: {...}, scales: {...}}\n let defaultOpt = {\n timing: {\n duration: {\n ratio: Math.floor(100 / pseudoTimeline.concat.length) / 100\n }\n }\n };\n if (userInput.global) {\n defaultOpt = Object.assign(defaultOpt, userInput.global);\n }\n let opt;\n\n const newConcat = pseudoTimeline.concat.map(syncBlock => {\n return {\n sync: syncBlock.sync.map(pseudoStep => {\n let step;\n switch (pseudoStep.diff.compType) {\n case \"mark\":\n opt = Object.assign(\n {},\n defaultOpt,\n get(userInput, \"marks\", pseudoStep.diff.compName) || {}\n );\n step = generateMarkCompStep(pseudoStep, opt);\n break;\n case \"axis\":\n opt = Object.assign(\n {},\n defaultOpt,\n get(userInput, \"axes\", pseudoStep.diff.compName) || {}\n );\n step = generateAxisCompStep(pseudoStep, opt);\n break;\n case \"legend\":\n opt = Object.assign(\n {},\n defaultOpt,\n get(userInput, \"legends\", pseudoStep.diff.compName) || {}\n );\n step = generateLegendCompStep(pseudoStep, opt);\n break;\n case \"view\":\n step = generateViewCompStep(pseudoStep, opt);\n break;\n }\n if (includeMeta) {\n step.meta = pseudoStep.meta;\n }\n\n return step;\n }),\n ...(includeMeta ? { meta: syncBlock.meta } : {})\n };\n });\n return { concat: newConcat };\n}\n\nfunction generateViewCompStep(pseudoViewStep, opt) {\n return {\n component: \"view\",\n change: {\n signal: pseudoViewStep.factorSets.current\n },\n timing: pseudoViewStep.timing || copy(opt.timing)\n };\n}\n\nfunction generateAxisCompStep(pseudoStep, opt) {\n const scaleDomainDimension = get(opt, \"change\", \"scale\", \"domainDimension\");\n const { factorSets } = pseudoStep;\n const step = {\n component: { axis: pseudoStep.diff.compName },\n change: {},\n timing: pseudoStep.timing || copy(opt.timing)\n };\n if (scaleDomainDimension !== undefined) {\n step.change = { scale: { domainDimension: scaleDomainDimension } };\n }\n if (\n factorSets.all.indexOf(\"scale.y\") >= 0 &&\n factorSets.applied.indexOf(\"scale.y\") < 0\n ) {\n step.change.scale = false;\n } else if (\n factorSets.all.indexOf(\"scale.x\") >= 0 &&\n factorSets.applied.indexOf(\"scale.x\") < 0\n ) {\n step.change.scale = false;\n }\n if (\n factorSets.applied.indexOf(\"encode\") < 0 &&\n factorSets.all.indexOf(\"encode\") >= 0\n ) {\n step.change.encode = false;\n }\n\n if (\n step.change.encode === false &&\n factorSets.applied.indexOf(\"encode.only.grid\") >= 0\n ) {\n step.change.encode = {\n grid: true,\n axis: false,\n labels: false,\n title: false,\n ticks: false,\n domain: false\n };\n }\n\n if (\n ( (step.change.encode === false) ||\n (get(step, \"change\", \"encode\", \"axis\") === false) ) &&\n factorSets.applied.indexOf(\"encode.position\") >= 0\n ) {\n if (step.change.encode) {\n step.change.encode.axis = false;\n } else {\n step.change.encode = {axis: false};\n }\n }\n\n if (isEmpty(step.change)) {\n delete step.change;\n }\n\n return step;\n}\n\nfunction generateLegendCompStep(pseudoStep, opt) {\n const step = {\n component: { legend: pseudoStep.diff.compName },\n timing: pseudoStep.timing || copy(opt.timing)\n };\n // const factorSets = pseudoStep.factorSets;\n // if (factorSets && factorSets.current && factorSets.current.length > 0) {\n // step.change = {\n // scale: factorSets.current.map(fct => fct.replace(\"scale.\", \"\"))\n // };\n // }\n // if (factorSets.current.indexOf(\"encode.position\") < 0 && factorSets.all.indexOf(\"encode.position\") >= 0) {\n // step.change = {\n // ...(step.change || {}),\n // encode: { legend: false }\n // };\n // }\n return step;\n}\n\nfunction generateMarkCompStep(pseudoStep, opt) {\n const markCompDiff = pseudoStep.diff;\n const { factorSets } = pseudoStep;\n const step = {\n component: { mark: markCompDiff.compName },\n change: getBlankChange(factorSets.all),\n timing: pseudoStep.timing || copy(opt.timing)\n };\n if (factorSets.applied.indexOf(\"remove\") >= 0) {\n delete step.change;\n return step;\n }\n // change.scale\n const scaleFactros = factorSets.applied.filter(\n fctr => fctr.indexOf(\"scale\") >= 0\n );\n if (scaleFactros.length > 0) {\n step.change.scale = scaleFactros.map(fctr => fctr.replace(\"scale.\", \"\"));\n }\n\n // change.data\n if (factorSets.applied.indexOf(\"data\") >= 0) {\n step.change.data = get(opt, \"change\", \"data\") || true;\n }\n\n // Todo: For encode factors not in the factorSet, then it should not specify anything.\n // change.encode\n const encodeFactors = factorSets.applied.filter(\n fctr => fctr.indexOf(\"encode\") >= 0\n );\n const encodeChange = getBlankEncodeChange(\n factorSets.all.concat(factorSets.extraByMarktype)\n );\n\n if (encodeFactors.length > 0) {\n encodeFactors.forEach(fctr => {\n const channel = fctr.replace(\"encode.\", \"\");\n const attrs = CHANNEL_TO_ATTRS_OBJ[channel];\n attrs.forEach(attr => {\n delete encodeChange.update[attr];\n delete encodeChange.exit[attr];\n delete encodeChange.enter[attr];\n });\n });\n }\n step.change.encode = encodeChange;\n\n // change.marktype\n if (factorSets.applied.indexOf(\"marktype\") >= 0) {\n step.change.marktype = true;\n\n factorSets.extraByMarktype.forEach(fctr => {\n const channel = fctr.replace(\"encode.\", \"\");\n const attrs = CHANNEL_TO_ATTRS_OBJ[channel];\n attrs.forEach(attr => {\n delete step.change.encode.update[attr];\n delete step.change.encode.exit[attr];\n delete step.change.encode.enter[attr];\n });\n });\n }\n\n [\"update\", \"enter\", \"exit\"].forEach(dataSet => {\n if (!isEmpty(get(step, \"change\", \"encode\", dataSet))) {\n step.change.encode[dataSet] = Object.keys(step.change.encode[dataSet])\n .filter(attr => markCompDiff.meta.usedEnAttrs.indexOf(attr) >= 0)\n .reduce((acc, attr) => {\n acc[attr] = step.change.encode[dataSet][attr];\n return acc;\n }, {});\n }\n\n if (isEmpty(get(step, \"change\", \"encode\", dataSet))) {\n step.change.encode[dataSet] = true;\n }\n });\n\n return step;\n}\n\n// It provides a change.encode that does not change any attribute.\n// The blankEncodeChanges are to be assigned by encode factors.\nfunction getBlankEncodeChange(relatedFactors) {\n const blankEncode = relatedFactors\n .filter(fctr => fctr.indexOf(\"encode\") >= 0)\n .map(fctr => CHANNEL_TO_ATTRS_OBJ[fctr.replace(\"encode.\", \"\")])\n .reduce((blankEncode, attrs) => {\n attrs.forEach(attr => {\n blankEncode[attr] = false;\n });\n return blankEncode;\n }, {});\n\n const blankExitEncode = copy(blankEncode);\n delete blankExitEncode.opacity;\n\n return {\n update: copy(blankEncode),\n enter: blankExitEncode,\n exit: blankExitEncode\n };\n}\nfunction getBlankChange(allFactors) {\n return [\"scale\", \"signal\", \"data\", \"encode\", \"marktype\"].reduce(\n (change, factor) => {\n if (allFactors.find(f => f.indexOf(factor) >= 0)) {\n change[factor] = false;\n }\n return change;\n },\n {}\n );\n}\nexport { generateTimeline, generateMarkCompStep };\n","import * as vega from \"vega\";\nimport { detectDiffs } from \"./diffDetector\";\nimport { enumeratePseudoTimelines } from \"./pseudoTimelineEnumerator\";\nimport { evaluate } from \"./pseudoTimelineEvaluator\";\nimport { generateTimeline } from \"./timelineGenerator\";\nimport { copy } from \"../util/util\";\n\nexport default async function(\n sSpec,\n eSpec,\n opt = { marks: {}, axes: {}, legends: {}, scales: {} }\n) {\n const userInput = opt;\n const stageN = Number(opt.stageN) || 2;\n const { includeMeta } = opt;\n const timing = { totalDuration: userInput.totalDuration || 2000 };\n\n userInput.axes = userInput.axes || {};\n for (const scaleName in userInput.scales || {}) {\n userInput.axes[scaleName] = userInput.axes[scaleName] || {};\n userInput.axes[scaleName].change = userInput.axes[scaleName].change || {};\n userInput.axes[scaleName].change.scale =\n userInput.axes[scaleName].change.scale || {};\n if (userInput.axes[scaleName].change.scale !== false) {\n userInput.axes[scaleName].change.scale.domainDimension =\n userInput.scales[scaleName].domainDimension;\n }\n }\n const eView = await new vega.View(vega.parse(eSpec), {\n renderer: \"svg\"\n }).runAsync();\n\n const sView = await new vega.View(vega.parse(sSpec), {\n renderer: \"svg\"\n }).runAsync();\n\n\n const rawInfo = {\n sVis: { spec: copy(sSpec), view: sView },\n eVis: { spec: copy(eSpec), view: eView }\n };\n\n const detected = detectDiffs(rawInfo, userInput);\n // for (let i = 1; i <= maxStageN; i++) {\n // pseudoTls = pseudoTls.concat(enumeratePseudoTimelines(detected, i, rawInfo));\n // }\n let pseudoTls = enumeratePseudoTimelines(detected, stageN, rawInfo, timing);\n pseudoTls = pseudoTls\n .map(pseudoTl => {\n pseudoTl.eval = evaluate(pseudoTl);\n return pseudoTl;\n })\n .sort((a, b) => compareCost(a.eval, b.eval));\n\n return pseudoTls.map(pseudoTl => {\n const meta = includeMeta ? pseudoTl.eval : undefined;\n return {\n spec: {\n timeline: generateTimeline(pseudoTl, userInput, includeMeta),\n totalDuration: timing.totalDuration,\n meta\n },\n pseudoTimeline: pseudoTl\n };\n });\n}\nexport function compareCost(a, b) {\n if (a.cost === b.cost) {\n if (a.tiebreaker === b.tiebreaker) {\n return a.tiebreaker2 - b.tiebreaker2;\n }\n return a.tiebreaker - b.tiebreaker;\n }\n return a.cost - b.cost;\n}\n","import * as d3 from \"d3\";\nimport * as vegaLite from \"vega-lite\";\n\nexport default function vl2vg4gemini(vlSpec) {\n let vgSpec = vegaLite.compile(vlSpec).spec;\n vgSpec.axes = mergeDuplicatedAxes(vgSpec.axes);\n appendNamesOnGuides(vgSpec);\n return vgSpec;\n}\n\n\nfunction appendNamesOnGuides(vgSpec){\n if (vgSpec.axes) {\n vgSpec.axes.forEach(axis => {\n if (!axis.encode) {\n axis.encode = {axis: {name: axis.scale}};\n } else {\n axis.encode.axis = { ...axis.encode.axis, name: axis.scale };\n }\n });\n }\n if (vgSpec.legends) {\n vgSpec.legends.forEach((legend, i) => {\n if (!legend.encode) {\n legend.encode = {legend: {name: `legend${i}`}};\n } else {\n legend.encode.legend = Object.assign({}, legend.encode.legend, {name: `legend${i}`});\n }\n });\n }\n}\n\n\nfunction mergeDuplicatedAxes(vegaAxes) {\n if (!vegaAxes || vegaAxes.length <= 0) {\n return [];\n }\n let axesScales = vegaAxes.filter(a => a.grid).map(a => a.scale);\n\n return d3.rollups(vegaAxes,\n axes => {\n let axisWithGrid = axes.find(a => a.grid);\n let axisWithoutGrid = { ...axes.find(a => !a.grid) };\n\n if (axisWithGrid) {\n axisWithoutGrid.grid = true;\n if (axisWithGrid.gridScale) {\n axisWithoutGrid.gridScale = axisWithGrid.gridScale;\n }\n axisWithoutGrid.zindex = 0;\n }\n return axisWithoutGrid;\n },\n axis => axis.scale\n ).map(d => d[1])\n .sort((a,b) => (axesScales.indexOf(a.scale) - axesScales.indexOf(b.scale)));\n}\n\n","import { Gemini } from \"./gemini.js\";\nimport { default as recommend, compareCost } from \"./recommender\";\nimport { default as vl2vg4gemini } from \"./util/vl2vg4gemini\";\n\nconst { animate } = Gemini;\nexport { animate, recommend, compareCost, vl2vg4gemini };\n"],"names":["merge","sets","length","slice","xl","x","join","subexp","str","typeOf","o","undefined","Object","prototype","toString","call","split","pop","shift","toLowerCase","toUpperCase","toArray","obj","Array","setInterval","assign","target","source","key","buildExps","isIRI","ALPHA$$","CR$","DIGIT$$","DQUOTE$$","HEXDIG$$","PCT_ENCODED$","SUB_DELIMS$$","RESERVED$$","GEN_DELIMS$$","UCSCHAR$$","SCHEME$","USERINFO$","UNRESERVED$$","DEC_OCTET$","DEC_OCTET_RELAXED$","H16$","LS32$","IPV4ADDRESS$","IPV6ADDRESS1$","IPV6ADDRESS2$","IPV6ADDRESS3$","IPV6ADDRESS4$","IPV6ADDRESS5$","IPV6ADDRESS6$","IPV6ADDRESS7$","IPV6ADDRESS8$","IPV6ADDRESS9$","ZONEID$","IP_LITERAL$","HOST$","PCHAR$","SEGMENT$","SEGMENT_NZ_NC$","PATH_ABEMPTY$","QUERY$","IPRIVATE$$","RegExp","IPV6ADDRESS$","maxInt","base","tMin","tMax","skew","damp","initialBias","initialN","delimiter","regexPunycode","regexNonASCII","regexSeparators","errors","baseMinusTMin","floor","Math","stringFromCharCode","String","fromCharCode","error","type","RangeError","map","array","fn","result","mapDomain","string","parts","replace","labels","encoded","ucs2decode","output","counter","value","charCodeAt","extra","push","ucs2encode","fromCodePoint","basicToDigit","codePoint","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","k","decode","input","inputLength","i","n","bias","basic","lastIndexOf","j","index","oldi","w","t","baseMinusT","out","splice","encode","currentValue","basicLength","handledCPCount","m","handledCPCountPlusOne","q","qMinusT","toUnicode","test","toASCII","punycode","SCHEMES","pctEncChar","chr","c","e","pctDecChars","newStr","il","parseInt","substr","c2","c3","_normalizeComponentEncoding","components","protocol","decodeUnreserved","decStr","match","UNRESERVED","scheme","PCT_ENCODED","NOT_SCHEME","userinfo","NOT_USERINFO","host","NOT_HOST","path","NOT_PATH","NOT_PATH_NOSCHEME","query","NOT_QUERY","fragment","NOT_FRAGMENT","_stripLeadingZeros","_normalizeIPv4","matches","IPV4ADDRESS","address","_normalizeIPv6","IPV6ADDRESS","zone","reverse","last","first","firstFields","lastFields","isLastFieldIPv4Address","fieldCount","lastFieldsStart","fields","allZeroFields","reduce","acc","field","lastLongest","longestZeroFields","sort","a","b","newHost","newFirst","newLast","URI_PARSE","NO_MATCH_IS_UNDEFINED","parse","uriString","options","iri","IRI_PROTOCOL","URI_PROTOCOL","reference","port","isNaN","indexOf","schemeHandler","unicodeSupport","domainHost","_recomposeAuthority","uriTokens","_","$1","$2","RDS1","RDS2","RDS3","RDS5","removeDotSegments","im","s","Error","serialize","authority","charAt","absolutePath","resolveComponents","relative","skipNormalization","tolerant","resolve","baseURI","relativeURI","schemelessOptions","normalize","uri","equal","uriA","uriB","escapeComponent","ESCAPE","unescapeComponent","handler","http","O","ATEXT$$","QTEXT$$","VCHAR$$","SOME_DELIMS$$","NOT_LOCAL_PART","NOT_HFNAME","NOT_HFVALUE","mailtoComponents","to","unknownHeaders","headers","hfields","hfield","toAddrs","subject","body","addr","toAddr","atIdx","localPart","domain","name","URN_PARSE","urnComponents","nid","nss","urnScheme","uriComponents","UUID","uuidComponents","uuid","https","mailto","urn","copy","require$$0","require$$1","SchemaObject","URI","traverse","ucs2length","ValidationError","errorClasses","validateGenerator","validate","stableStringify","JSON_POINTER","RELATIVE_JSON_POINTER","require$$2","require$$3","require$$4","require$$5","require$$6","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","require$$21","require$$22","require$$23","toHash","ruleModules","MissingRefError","metaSchema","IDENTIFIER","customRuleCode","definitionSchema","compile","customKeyword","$dataMetaSchema","formats","Cache","compileSchema","ajv","Ajv","stringValue","vgConfig","vg.EMPTY_ENCODE","vg.legendLablePos","vg.legendLabelAlign","vg.baseline","vg.lableAngle","vg.legendBandPos","vg.axisCompPos","vg.axisTextDpos","vg.axisLabelAlign","vg.tickLength","vg.gridLength","vg.titleAngle","vg.titlePos","vg.domainLength","vega.SVGRenderer","vega.sceneFromJSON","vega.sceneToJSON","d3.interpolate","vega.View","vega.parse","checkConflict","d3.groups","getJoinInfo","compute","d3.interpolateString","d3.extent","d3.select","vega.textMetrics","vega\n .pathRectangle","vega\n .pathRectangle","d3.path","vega.pathSymbols","d3\n .line","d3\n .area","vega.pathTrail","vega.timeFormat","vega.timeUnitSpecifier","vegaExpression.codegen","vegaExpression.parse","d3.ascending","d3.descending","d3.easeLinear","d3.local","addMark","d3\n .selectAll","d3\n .select","d3.selectAll","d3\n .selectAll","d3\n .select","doneMaker","INITIAL_STATUS","DG.PERCEPTION_CAP","DG.DISCOUNT_COMBOS","DG.PENALTY_COMBOS","DG.PERCEPTION_COST","vegaLite.compile","d3.rollups"],"mappings":"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"} \ No newline at end of file diff --git a/package.json b/package.json index 778fdbb..4715f60 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ }, "dependencies": { "ajv": "^6.12.0", - "d3": "5.14.2", + "d3": "^6.2", "d3-interpolate-path": "^2.1.1", "d3-selection-multi": "^1.0.1", "djv": "^2.1.3-alpha.0", diff --git a/src/actuator/staggering.js b/src/actuator/staggering.js index 6702a80..c58f9d0 100644 --- a/src/actuator/staggering.js +++ b/src/actuator/staggering.js @@ -1,4 +1,5 @@ import * as d3 from "d3"; +import { group } from "d3"; import { flatten } from "../util/util.js"; import { getEaseFn } from "./util"; @@ -37,35 +38,43 @@ function staggeredTiming(staggering, data, duration) { return (acc = acc && (val !== undefined ? !isNaN(Number(val)) : true)); }, true); if (!staggering.by) { - grouped = d3 - .nest() - .key(d => { - const val = d.__staggering_id__; - return val === undefined ? "__empty__" : val; - }) - .sortKeys(getOrderFn(true, staggering.order)) - .entries(dataWithTiming); + + + const orderFn = getOrderFn(true, staggering.order); + grouped = d3.groups(dataWithTiming, d => { + const val = d.__staggering_id__; + return val === undefined ? "__empty__" : val; + }) + if (typeof(orderFn) === "function") { + grouped.sort((a,b) => orderFn(a,b)); + } } else if (typeof staggering.by === "string") { - grouped = d3 - .nest() - .key(d => { - const val = (d.initial || d.final)[staggering.by]; - return val === undefined ? "__empty__" : val; - }) - .sortKeys(getOrderFn(isNumber, staggering.order)) - .entries(dataWithTiming); + + + grouped = d3.groups(dataWithTiming, d => { + const val = (d.initial || d.final)[staggering.by]; + return val === undefined ? "__empty__" : val; + }) + + const orderFn = getOrderFn(isNumber, staggering.order); + if (typeof(orderFn) === "function") { + grouped.sort((a,b) => orderFn(a,b)); + } } else if (staggering.by.initial || staggering.by.final) { const which = staggering.by.initial ? "initial" : "final"; - grouped = d3 - .nest() - .key(d => { - const val = (which === "initial" - ? d.initial || d.final - : d.final || d.initial)[staggering.by[which]]; - return val === undefined ? "__empty__" : val; - }) - .sortKeys(getOrderFn(isNumber, staggering.order)) - .entries(dataWithTiming); + + + grouped = d3.groups(dataWithTiming, d => { + const val = (which === "initial" + ? d.initial || d.final + : d.final || d.initial)[staggering.by[which]]; + return val === undefined ? "__empty__" : val; + }) + + const orderFn = getOrderFn(isNumber, staggering.order); + if (typeof(orderFn) === "function") { + grouped.sort((a,b) => orderFn(a,b)); + } } N = grouped.length; @@ -95,13 +104,13 @@ function staggeredTiming(staggering, data, duration) { }); timings.groups = grouped.map((g, i) => { - return staggeredTiming(subStaggering, g.values, durations[i]); + return staggeredTiming(subStaggering, g[1], durations[i]); }); return getFlattenTimings(timings); } grouped.forEach((group, i) => { - group.values.forEach(datum => { + group[1].forEach(datum => { datum.delay = delays[i]; datum.duration = durations[i]; }); diff --git a/src/util/vgDataHelper.js b/src/util/vgDataHelper.js index 290e5ff..b9c1736 100644 --- a/src/util/vgDataHelper.js +++ b/src/util/vgDataHelper.js @@ -16,21 +16,20 @@ function facetData(data, facetDef) { if (typeof groupby === "string") { groupby = [groupby]; } - return d3 - .nest() - .key(d => groupby.map(f => d.datum[f]).join("@@_@@")) - .entries(data) + return d3.groups(data, d => groupby.map(f => d.datum[f]).join("@@_@@")) .map(group => { + const values = group[1] let datum = groupby.reduce((datum, f) => { - datum[f] = group.values[0].datum[f]; + datum[f] = values[0].datum[f]; return datum; - }, { count: group.values.length }); + }, { count: values.length }); return { datum: datum, mark: {role: "group", marktype: "group"}, - items: [{items: group.values }] + items: [{items: values }] }; }); + } function unpackData(data) { if (data[0].mark.marktype !== "group") { diff --git a/src/util/vl2vg4gemini.js b/src/util/vl2vg4gemini.js index cda870a..47773f7 100644 --- a/src/util/vl2vg4gemini.js +++ b/src/util/vl2vg4gemini.js @@ -37,9 +37,8 @@ function mergeDuplicatedAxes(vegaAxes) { } let axesScales = vegaAxes.filter(a => a.grid).map(a => a.scale); - return d3.nest() - .key(axis => axis.scale) - .rollup(axes => { + return d3.rollups(vegaAxes, + axes => { let axisWithGrid = axes.find(a => a.grid); let axisWithoutGrid = { ...axes.find(a => !a.grid) }; @@ -51,8 +50,9 @@ function mergeDuplicatedAxes(vegaAxes) { axisWithoutGrid.zindex = 0; } return axisWithoutGrid; - }).entries(vegaAxes) - .map(d => d.value) - .sort((a,b) => (axesScales.indexOf(a.scale) - axesScales.indexOf(b.scale))); + }, + axis => axis.scale + ).map(d => d[1]) + .sort((a,b) => (axesScales.indexOf(a.scale) - axesScales.indexOf(b.scale))); } diff --git a/yarn.lock b/yarn.lock index 44ce5e1..4364538 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2779,7 +2779,7 @@ cyclist@^1.0.1: resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= -d3-array@1, d3-array@^1.1.1, d3-array@^1.2.0: +d3-array@1: version "1.2.4" resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f" integrity sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw== @@ -2789,46 +2789,57 @@ d3-array@1, d3-array@^1.1.1, d3-array@^1.2.0: resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-2.4.0.tgz#87f8b9ad11088769c82b5ea846bcb1cc9393f242" integrity sha512-KQ41bAF2BMakf/HdKT865ALd4cgND6VcIztVQZUTt0+BH3RWy6ZYnHghVXf6NFjt2ritLr8H1T8LreAAlfiNcw== -d3-axis@1: - version "1.0.12" - resolved "https://registry.yarnpkg.com/d3-axis/-/d3-axis-1.0.12.tgz#cdf20ba210cfbb43795af33756886fb3638daac9" - integrity sha512-ejINPfPSNdGFKEOAtnBtdkpr24c4d4jsei6Lg98mxf424ivoDP2956/5HDpIAtmHo85lqT4pruy+zEgvRUBqaQ== +d3-array@2, d3-array@>=2.5, d3-array@^2.3.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-2.8.0.tgz#f76e10ad47f1f4f75f33db5fc322eb9ffde5ef23" + integrity sha512-6V272gsOeg7+9pTW1jSYOR1QE37g95I3my1hBmY+vOUNHRrk9yt4OTz/gK7PMkVAVDrYYq4mq3grTiZ8iJdNIw== -d3-brush@1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/d3-brush/-/d3-brush-1.1.3.tgz#a04900a71fa5390f7f7afe1504b02a382709f380" - integrity sha512-v8bbYyCFKjyCzFk/tdWqXwDykY8YWqhXYjcYxfILIit085VZOpj4XJKOMccTsvWxgzSLMJQg5SiqHjslsipEDg== - dependencies: - d3-dispatch "1" - d3-drag "1" - d3-interpolate "1" - d3-selection "1" - d3-transition "1" +d3-axis@2: + version "2.0.0" + resolved "https://registry.yarnpkg.com/d3-axis/-/d3-axis-2.0.0.tgz#40aebb65626ffe6d95e9441fbf9194274b328a8b" + integrity sha512-9nzB0uePtb+u9+dWir+HTuEAKJOEUYJoEwbJPsZ1B4K3iZUgzJcSENQ05Nj7S4CIfbZZ8/jQGoUzGKFznBhiiQ== -d3-chord@1: - version "1.0.6" - resolved "https://registry.yarnpkg.com/d3-chord/-/d3-chord-1.0.6.tgz#309157e3f2db2c752f0280fedd35f2067ccbb15f" - integrity sha512-JXA2Dro1Fxw9rJe33Uv+Ckr5IrAa74TlfDEhE/jfLOaXegMQFQTAgAw9WnZL8+HxVBRXaRGCkrNU7pJeylRIuA== +d3-brush@2: + version "2.1.0" + resolved "https://registry.yarnpkg.com/d3-brush/-/d3-brush-2.1.0.tgz#adadfbb104e8937af142e9a6e2028326f0471065" + integrity sha512-cHLLAFatBATyIKqZOkk/mDHUbzne2B3ZwxkzMHvFTCZCmLaXDpZRihQSn8UNXTkGD/3lb/W2sQz0etAftmHMJQ== dependencies: - d3-array "1" - d3-path "1" + d3-dispatch "1 - 2" + d3-drag "2" + d3-interpolate "1 - 2" + d3-selection "2" + d3-transition "2" -d3-collection@1: - version "1.0.7" - resolved "https://registry.yarnpkg.com/d3-collection/-/d3-collection-1.0.7.tgz#349bd2aa9977db071091c13144d5e4f16b5b310e" - integrity sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A== +d3-chord@2: + version "2.0.0" + resolved "https://registry.yarnpkg.com/d3-chord/-/d3-chord-2.0.0.tgz#32491b5665391180560f738e5c1ccd1e3c47ebae" + integrity sha512-D5PZb7EDsRNdGU4SsjQyKhja8Zgu+SHZfUSO5Ls8Wsn+jsAKUUGkcshLxMg9HDFxG3KqavGWaWkJ8EpU8ojuig== + dependencies: + d3-path "1 - 2" d3-color@1, d3-color@^1.4.0, d3-color@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.4.1.tgz#c52002bf8846ada4424d55d97982fef26eb3bc8a" integrity sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q== -d3-contour@1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/d3-contour/-/d3-contour-1.3.2.tgz#652aacd500d2264cb3423cee10db69f6f59bead3" - integrity sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg== +"d3-color@1 - 2", d3-color@2: + version "2.0.0" + resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-2.0.0.tgz#8d625cab42ed9b8f601a1760a389f7ea9189d62e" + integrity sha512-SPXi0TSKPD4g9tw0NMZFnR95XVgUZiBH+uUTqQuDu1OsE2zomHU7ho0FISciaPvosimixwHFl3WHLGabv6dDgQ== + +d3-contour@2: + version "2.0.0" + resolved "https://registry.yarnpkg.com/d3-contour/-/d3-contour-2.0.0.tgz#80ee834988563e3bea9d99ddde72c0f8c089ea40" + integrity sha512-9unAtvIaNk06UwqBmvsdHX7CZ+NPDZnn8TtNH1myW93pWJkhsV25JcgnYAu0Ck5Veb1DHiCv++Ic5uvJ+h50JA== + dependencies: + d3-array "2" + +d3-delaunay@5: + version "5.3.0" + resolved "https://registry.yarnpkg.com/d3-delaunay/-/d3-delaunay-5.3.0.tgz#b47f05c38f854a4e7b3cea80e0bb12e57398772d" + integrity sha512-amALSrOllWVLaHTnDLHwMIiz0d1bBu9gZXd1FiLfXf8sHcX9jrcj81TVZOqD4UX7MgBZZ07c8GxzEgBpJqc74w== dependencies: - d3-array "^1.1.1" + delaunator "4" d3-delaunay@^5.2.1: version "5.2.1" @@ -2842,18 +2853,23 @@ d3-dispatch@1: resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-1.0.6.tgz#00d37bcee4dd8cd97729dd893a0ac29caaba5d58" integrity sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA== -d3-drag@1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/d3-drag/-/d3-drag-1.2.4.tgz#ba9331d68158ad14cf0b4b28a8afa9e78c7d99ad" - integrity sha512-ICPurDETFAelF1CTHdIyiUM4PsyZLaM+7oIBhmyP+cuVjze5vDZ8V//LdOFjg0jGnFIZD/Sfmk0r95PSiu78rw== +"d3-dispatch@1 - 2", d3-dispatch@2: + version "2.0.0" + resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-2.0.0.tgz#8a18e16f76dd3fcaef42163c97b926aa9b55e7cf" + integrity sha512-S/m2VsXI7gAti2pBoLClFFTMOO1HTtT0j99AuXLoGFKO6deHDdnv6ZGTxSTTUTgO1zVcv82fCOtDjYK4EECmWA== + +d3-drag@2: + version "2.0.0" + resolved "https://registry.yarnpkg.com/d3-drag/-/d3-drag-2.0.0.tgz#9eaf046ce9ed1c25c88661911c1d5a4d8eb7ea6d" + integrity sha512-g9y9WbMnF5uqB9qKqwIIa/921RYWzlUDv9Jl1/yONQwxbOfszAWTCm8u7HOTgJgRDXiRZN56cHT9pd24dmXs8w== dependencies: - d3-dispatch "1" - d3-selection "1" + d3-dispatch "1 - 2" + d3-selection "2" -d3-dsv@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-1.1.1.tgz#aaa830ecb76c4b5015572c647cc6441e3c7bb701" - integrity sha512-1EH1oRGSkeDUlDRbhsFytAXU6cAmXFzc52YUe6MRlPClmWb85MP1J5x+YJRzya4ynZWnbELdSAvATFW/MbxaXw== +"d3-dsv@1 - 2", d3-dsv@2: + version "2.0.0" + resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-2.0.0.tgz#b37b194b6df42da513a120d913ad1be22b5fe7c5" + integrity sha512-E+Pn8UJYx9mViuIUkoc93gJGGYut6mSDKy2+XaPwccwkRGlR+LO97L2VCCRjQivTwLHkSnAJG7yo00BWY6QM+w== dependencies: commander "2" iconv-lite "0.4" @@ -2873,22 +2889,26 @@ d3-ease@1: resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-1.0.5.tgz#8ce59276d81241b1b72042d6af2d40e76d936ffb" integrity sha512-Ct1O//ly5y5lFM9YTdu+ygq7LleSgSE4oj7vUt9tPLHUi8VCV7QoizGpdWRWAwCO9LdYzIrQDg97+hGVdsSGPQ== -d3-fetch@1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/d3-fetch/-/d3-fetch-1.1.2.tgz#957c8fbc6d4480599ba191b1b2518bf86b3e1be2" - integrity sha512-S2loaQCV/ZeyTyIF2oP8D1K9Z4QizUzW7cWeAOAS4U88qOt3Ucf6GsmgthuYSdyB2HyEm4CeGvkQxWsmInsIVA== +"d3-ease@1 - 2", d3-ease@2: + version "2.0.0" + resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-2.0.0.tgz#fd1762bfca00dae4bacea504b1d628ff290ac563" + integrity sha512-68/n9JWarxXkOWMshcT5IcjbB+agblQUaIsbnXmrzejn2O82n3p2A9R2zEB9HIEFWKFwPAEDDN8gR0VdSAyyAQ== + +d3-fetch@2: + version "2.0.0" + resolved "https://registry.yarnpkg.com/d3-fetch/-/d3-fetch-2.0.0.tgz#ecd7ef2128d9847a3b41b548fec80918d645c064" + integrity sha512-TkYv/hjXgCryBeNKiclrwqZH7Nb+GaOwo3Neg24ZVWA3MKB+Rd+BY84Nh6tmNEMcjUik1CSUWjXYndmeO6F7sw== dependencies: - d3-dsv "1" + d3-dsv "1 - 2" -d3-force@1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/d3-force/-/d3-force-1.2.1.tgz#fd29a5d1ff181c9e7f0669e4bd72bdb0e914ec0b" - integrity sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg== +d3-force@2: + version "2.1.1" + resolved "https://registry.yarnpkg.com/d3-force/-/d3-force-2.1.1.tgz#f20ccbf1e6c9e80add1926f09b51f686a8bc0937" + integrity sha512-nAuHEzBqMvpFVMf9OX75d00OxvOXdxY+xECIXjW6Gv8BRrXu6gAWbv/9XKrvfJ5i5DCokDW7RYE50LRoK092ew== dependencies: - d3-collection "1" - d3-dispatch "1" - d3-quadtree "1" - d3-timer "1" + d3-dispatch "1 - 2" + d3-quadtree "1 - 2" + d3-timer "1 - 2" d3-force@^2.0.1: version "2.0.1" @@ -2904,6 +2924,11 @@ d3-format@1, d3-format@^1.4.2, d3-format@^1.4.4: resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.4.4.tgz#356925f28d0fd7c7983bfad593726fce46844030" integrity sha512-TWks25e7t8/cqctxCmxpUuzZN11QxIA7YrMbram94zMQ0PXjE4LVIMe/f6a4+xxL8HQ3OsAFULOINQi1pE62Aw== +"d3-format@1 - 2", d3-format@2: + version "2.0.0" + resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-2.0.0.tgz#a10bcc0f986c372b729ba447382413aabf5b0767" + integrity sha512-Ab3S6XuE/Q+flY96HXT0jOXcM4EAClYFnRGY5zsjRGNy6qCYrQsMffs7cV5Q9xejb35zxW5hf/guKw34kvIKsA== + d3-geo-projection@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/d3-geo-projection/-/d3-geo-projection-2.9.0.tgz#826db62f748e8ecd67cd00aced4c26a236ec030c" @@ -2914,12 +2939,12 @@ d3-geo-projection@^2.9.0: d3-geo "^1.12.0" resolve "^1.1.10" -d3-geo@1: - version "1.11.6" - resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-1.11.6.tgz#134f2ef035ff75a448075fafdea92702a2e0e0cf" - integrity sha512-z0J8InXR9e9wcgNtmVnPTj0TU8nhYT6lD/ak9may2PdKqXIeHUr8UbFLoCtrPYNsjv6YaLvSDQVl578k6nm7GA== +d3-geo@2: + version "2.0.1" + resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-2.0.1.tgz#2437fdfed3fe3aba2812bd8f30609cac83a7ee39" + integrity sha512-M6yzGbFRfxzNrVhxDJXzJqSLQ90q1cCyb3EWFZ1LF4eWOBYxFypw7I/NFVBNXKNqxv1bqLathhYvdJ6DC+th3A== dependencies: - d3-array "1" + d3-array ">=2.5" d3-geo@^1.11.9, d3-geo@^1.12.0: version "1.12.0" @@ -2928,10 +2953,10 @@ d3-geo@^1.11.9, d3-geo@^1.12.0: dependencies: d3-array "1" -d3-hierarchy@1: - version "1.1.8" - resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-1.1.8.tgz#7a6317bd3ed24e324641b6f1e76e978836b008cc" - integrity sha512-L+GHMSZNwTpiq4rt9GEsNcpLa4M96lXMR8M/nMG9p5hBE0jy6C+3hWtyZMenPQdwla249iJy7Nx0uKt3n+u9+w== +d3-hierarchy@2: + version "2.0.0" + resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-2.0.0.tgz#dab88a58ca3e7a1bc6cab390e89667fcc6d20218" + integrity sha512-SwIdqM3HxQX2214EG9GTjgmCc/mbSx4mQBn+DuEETubhOw6/U3fmnji4uCVrmzOydMHSO1nZle5gh6HB/wdOzw== d3-hierarchy@^1.1.9: version "1.1.9" @@ -2952,6 +2977,13 @@ d3-interpolate@1, d3-interpolate@^1.2.0, d3-interpolate@^1.3.2, d3-interpolate@^ dependencies: d3-color "1" +"d3-interpolate@1 - 2", "d3-interpolate@1.2.0 - 2", d3-interpolate@2: + version "2.0.1" + resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-2.0.1.tgz#98be499cfb8a3b94d4ff616900501a64abc91163" + integrity sha512-c5UhwwTs/yybcmTpAVqwSFl6vrQ8JZJoT5F7xNFK9pymv5C0Ymcc9/LIJHtYIggg/yS9YHw8i8O8tgb9pupjeQ== + dependencies: + d3-color "1 - 2" + d3-interpolate@^1.1.1: version "1.3.2" resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.3.2.tgz#417d3ebdeb4bc4efcc8fd4361c55e4040211fd68" @@ -2964,40 +2996,49 @@ d3-path@1, d3-path@^1.0.9: resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.9.tgz#48c050bb1fe8c262493a8caf5524e3e9591701cf" integrity sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg== -d3-polygon@1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/d3-polygon/-/d3-polygon-1.0.5.tgz#9a645a0a64ff6cbf9efda96ee0b4a6909184c363" - integrity sha512-RHhh1ZUJZfhgoqzWWuRhzQJvO7LavchhitSTHGu9oj6uuLFzYZVeBzaWTQ2qSO6bz2w55RMoOCf0MsLCDB6e0w== +"d3-path@1 - 2", d3-path@2: + version "2.0.0" + resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-2.0.0.tgz#55d86ac131a0548adae241eebfb56b4582dd09d8" + integrity sha512-ZwZQxKhBnv9yHaiWd6ZU4x5BtCQ7pXszEV9CU6kRgwIQVQGLMv1oiL4M+MK/n79sYzsj+gcgpPQSctJUsLN7fA== + +d3-polygon@2: + version "2.0.0" + resolved "https://registry.yarnpkg.com/d3-polygon/-/d3-polygon-2.0.0.tgz#13608ef042fbec625ba1598327564f03c0396d8e" + integrity sha512-MsexrCK38cTGermELs0cO1d79DcTsQRN7IWMJKczD/2kBjzNXxLUWP33qRF6VDpiLV/4EI4r6Gs0DAWQkE8pSQ== d3-quadtree@1: version "1.0.7" resolved "https://registry.yarnpkg.com/d3-quadtree/-/d3-quadtree-1.0.7.tgz#ca8b84df7bb53763fe3c2f24bd435137f4e53135" integrity sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA== -d3-random@1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/d3-random/-/d3-random-1.1.2.tgz#2833be7c124360bf9e2d3fd4f33847cfe6cab291" - integrity sha512-6AK5BNpIFqP+cx/sreKzNjWbwZQCSUatxq+pPRmFIQaWuoD+NrbVWw7YWpHiXpCQ/NanKdtGDuB+VQcZDaEmYQ== +"d3-quadtree@1 - 2", d3-quadtree@2: + version "2.0.0" + resolved "https://registry.yarnpkg.com/d3-quadtree/-/d3-quadtree-2.0.0.tgz#edbad045cef88701f6fee3aee8e93fb332d30f9d" + integrity sha512-b0Ed2t1UUalJpc3qXzKi+cPGxeXRr4KU9YSlocN74aTzp6R/Ud43t79yLLqxHRWZfsvWXmbDWPpoENK1K539xw== -d3-scale-chromatic@1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz#54e333fc78212f439b14641fb55801dd81135a98" - integrity sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg== +d3-random@2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/d3-random/-/d3-random-2.2.2.tgz#5eebd209ef4e45a2b362b019c1fb21c2c98cbb6e" + integrity sha512-0D9P8TRj6qDAtHhRQn6EfdOtHMfsUWanl3yb/84C4DqpZ+VsgfI5iTVRNRbELCfNvRfpMr8OrqqUTQ6ANGCijw== + +d3-scale-chromatic@2: + version "2.0.0" + resolved "https://registry.yarnpkg.com/d3-scale-chromatic/-/d3-scale-chromatic-2.0.0.tgz#c13f3af86685ff91323dc2f0ebd2dabbd72d8bab" + integrity sha512-LLqy7dJSL8yDy7NRmf6xSlsFZ6zYvJ4BcWFE4zBrOPnQERv9zj24ohnXKRbyi9YHnYV+HN1oEO3iFK971/gkzA== dependencies: - d3-color "1" - d3-interpolate "1" + d3-color "1 - 2" + d3-interpolate "1 - 2" -d3-scale@2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-2.2.2.tgz#4e880e0b2745acaaddd3ede26a9e908a9e17b81f" - integrity sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw== +d3-scale@3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-3.2.3.tgz#be380f57f1f61d4ff2e6cbb65a40593a51649cfd" + integrity sha512-8E37oWEmEzj57bHcnjPVOBS3n4jqakOeuv1EDdQSiSrYnMCBdMd3nc4HtKk7uia8DUHcY/CGuJ42xxgtEYrX0g== dependencies: - d3-array "^1.2.0" - d3-collection "1" - d3-format "1" - d3-interpolate "1" - d3-time "1" - d3-time-format "2" + d3-array "^2.3.0" + d3-format "1 - 2" + d3-interpolate "1.2.0 - 2" + d3-time "1 - 2" + d3-time-format "2 - 3" d3-scale@^3.2.0, d3-scale@^3.2.1: version "3.2.1" @@ -3023,12 +3064,17 @@ d3-selection@1, d3-selection@^1.1.0, d3-selection@^1.4.0: resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-1.4.0.tgz#ab9ac1e664cf967ebf1b479cc07e28ce9908c474" integrity sha512-EYVwBxQGEjLCKF2pJ4+yrErskDnz5v403qvAid96cNdCMr8rmCYfY5RGzWz24mdIbxmDf6/4EAH+K9xperD5jg== -d3-shape@1: - version "1.3.5" - resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.3.5.tgz#e81aea5940f59f0a79cfccac012232a8987c6033" - integrity sha512-VKazVR3phgD+MUCldapHD7P9kcrvPcexeX/PkMJmkUov4JM8IxsSg1DvbYoYich9AtdTsa5nNk2++ImPiDiSxg== +d3-selection@2: + version "2.0.0" + resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-2.0.0.tgz#94a11638ea2141b7565f883780dabc7ef6a61066" + integrity sha512-XoGGqhLUN/W14NmaqcO/bb1nqjDAw5WtSYb2X8wiuQWvSZUsUVYsOSkOybUrNvcBjaywBdYPy03eXHMXjk9nZA== + +d3-shape@2: + version "2.0.0" + resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-2.0.0.tgz#2331b62fa784a2a1daac47a7233cfd69301381fd" + integrity sha512-djpGlA779ua+rImicYyyjnOjeubyhql1Jyn1HK0bTyawuH76UQRWXd+pftr67H6Fa8hSwetkgb/0id3agKWykw== dependencies: - d3-path "1" + d3-path "1 - 2" d3-shape@^1.3.7: version "1.3.7" @@ -3044,16 +3090,33 @@ d3-time-format@2, d3-time-format@^2.2.2, d3-time-format@^2.2.3: dependencies: d3-time "1" +"d3-time-format@2 - 3", d3-time-format@3: + version "3.0.0" + resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-3.0.0.tgz#df8056c83659e01f20ac5da5fdeae7c08d5f1bb6" + integrity sha512-UXJh6EKsHBTjopVqZBhFysQcoXSv/5yLONZvkQ5Kk3qbwiUYkdX17Xa1PT6U1ZWXGGfB1ey5L8dKMlFq2DO0Ag== + dependencies: + d3-time "1 - 2" + d3-time@1, d3-time@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.1.0.tgz#b1e19d307dae9c900b7e5b25ffc5dcc249a8a0f1" integrity sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA== +"d3-time@1 - 2", d3-time@2: + version "2.0.0" + resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-2.0.0.tgz#ad7c127d17c67bd57a4c61f3eaecb81108b1e0ab" + integrity sha512-2mvhstTFcMvwStWd9Tj3e6CEqtOivtD8AUiHT8ido/xmzrI9ijrUUihZ6nHuf/vsScRBonagOdj0Vv+SEL5G3Q== + d3-timer@1, d3-timer@^1.0.10: version "1.0.10" resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-1.0.10.tgz#dfe76b8a91748831b13b6d9c793ffbd508dd9de5" integrity sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw== +"d3-timer@1 - 2", d3-timer@2: + version "2.0.0" + resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-2.0.0.tgz#055edb1d170cfe31ab2da8968deee940b56623e6" + integrity sha512-TO4VLh0/420Y/9dO3+f9abDEFYeCUr2WZRlxJvbp4HPTQcSylXNiL6yZa9FIUvV1yRiFufl1bszTCLDqv9PWNA== + d3-transition@1: version "1.2.0" resolved "https://registry.yarnpkg.com/d3-transition/-/d3-transition-1.2.0.tgz#f538c0e21b2aa1f05f3e965f8567e81284b3b2b8" @@ -3066,58 +3129,63 @@ d3-transition@1: d3-selection "^1.1.0" d3-timer "1" -d3-voronoi@1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/d3-voronoi/-/d3-voronoi-1.1.4.tgz#dd3c78d7653d2bb359284ae478645d95944c8297" - integrity sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg== - -d3-zoom@1: - version "1.8.3" - resolved "https://registry.yarnpkg.com/d3-zoom/-/d3-zoom-1.8.3.tgz#b6a3dbe738c7763121cd05b8a7795ffe17f4fc0a" - integrity sha512-VoLXTK4wvy1a0JpH2Il+F2CiOhVu7VRXWF5M/LroMIh3/zBAC3WAt7QoIvPibOavVo20hN6/37vwAsdBejLyKQ== +d3-transition@2: + version "2.0.0" + resolved "https://registry.yarnpkg.com/d3-transition/-/d3-transition-2.0.0.tgz#366ef70c22ef88d1e34105f507516991a291c94c" + integrity sha512-42ltAGgJesfQE3u9LuuBHNbGrI/AJjNL2OAUdclE70UE6Vy239GCBEYD38uBPoLeNsOhFStGpPI0BAOV+HMxog== dependencies: - d3-dispatch "1" - d3-drag "1" - d3-interpolate "1" - d3-selection "1" - d3-transition "1" + d3-color "1 - 2" + d3-dispatch "1 - 2" + d3-ease "1 - 2" + d3-interpolate "1 - 2" + d3-timer "1 - 2" -d3@^5.14.2: - version "5.14.2" - resolved "https://registry.yarnpkg.com/d3/-/d3-5.14.2.tgz#a3fb3af016d362aaf4dacbe618ae949c1744b8c4" - integrity sha512-Ccipa9XrYW5N0QkP6u0Qb8kU6WekIXBiDenmZm1zLvuq/9pBBhRCJLCICEOsH5Og4B0Xw02bhqGkK5VN/oPH0w== +d3-zoom@2: + version "2.0.0" + resolved "https://registry.yarnpkg.com/d3-zoom/-/d3-zoom-2.0.0.tgz#f04d0afd05518becce879d04709c47ecd93fba54" + integrity sha512-fFg7aoaEm9/jf+qfstak0IYpnesZLiMX6GZvXtUSdv8RH2o4E2qeelgdU09eKS6wGuiGMfcnMI0nTIqWzRHGpw== dependencies: - d3-array "1" - d3-axis "1" - d3-brush "1" - d3-chord "1" - d3-collection "1" - d3-color "1" - d3-contour "1" - d3-dispatch "1" - d3-drag "1" - d3-dsv "1" - d3-ease "1" - d3-fetch "1" - d3-force "1" - d3-format "1" - d3-geo "1" - d3-hierarchy "1" - d3-interpolate "1" - d3-path "1" - d3-polygon "1" - d3-quadtree "1" - d3-random "1" - d3-scale "2" - d3-scale-chromatic "1" - d3-selection "1" - d3-shape "1" - d3-time "1" - d3-time-format "2" - d3-timer "1" - d3-transition "1" - d3-voronoi "1" - d3-zoom "1" + d3-dispatch "1 - 2" + d3-drag "2" + d3-interpolate "1 - 2" + d3-selection "2" + d3-transition "2" + +d3@^6.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/d3/-/d3-6.2.0.tgz#f19b0ecb16ca4ad2171ce8b37c63247e71c6f01d" + integrity sha512-aH+kx55J8vRBh4K4k9GN4EbNO3QnZsXy4XBfrnr4fL2gQuszUAPQU3fV2oObO2iSpreRH/bG/wfvO+hDu2+e9w== + dependencies: + d3-array "2" + d3-axis "2" + d3-brush "2" + d3-chord "2" + d3-color "2" + d3-contour "2" + d3-delaunay "5" + d3-dispatch "2" + d3-drag "2" + d3-dsv "2" + d3-ease "2" + d3-fetch "2" + d3-force "2" + d3-format "2" + d3-geo "2" + d3-hierarchy "2" + d3-interpolate "2" + d3-path "2" + d3-polygon "2" + d3-quadtree "2" + d3-random "2" + d3-scale "3" + d3-scale-chromatic "2" + d3-selection "2" + d3-shape "2" + d3-time "2" + d3-time-format "3" + d3-timer "2" + d3-transition "2" + d3-zoom "2" damerau-levenshtein@^1.0.4: version "1.0.5"