@hestia-earth/ui-components 0.11.2 → 0.11.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/impact-assessments/impact-assessments-graph/impact-assessments-graph.component.mjs +64 -123
- package/esm2020/node/node-logs-models/node-logs-models.component.mjs +3 -3
- package/esm2020/search/search.model.mjs +2 -4
- package/fesm2015/hestia-earth-ui-components.mjs +65 -126
- package/fesm2015/hestia-earth-ui-components.mjs.map +1 -1
- package/fesm2020/hestia-earth-ui-components.mjs +64 -125
- package/fesm2020/hestia-earth-ui-components.mjs.map +1 -1
- package/impact-assessments/impact-assessments-graph/impact-assessments-graph.component.d.ts +1 -1
- package/package.json +1 -1
- package/search/search.model.d.ts +36 -18
package/esm2020/impact-assessments/impact-assessments-graph/impact-assessments-graph.component.mjs
CHANGED
|
@@ -2,7 +2,7 @@ import { Component, ViewChild, Input } from '@angular/core';
|
|
|
2
2
|
import { filter, groupBy, map, mergeAll, mergeMap, toArray, catchError, tap } from 'rxjs/operators';
|
|
3
3
|
import { from, of } from 'rxjs';
|
|
4
4
|
import { linkHorizontal as d3LinkHorizontal } from 'd3-shape';
|
|
5
|
-
import { select as d3Select } from 'd3-selection';
|
|
5
|
+
import { select as d3Select, selectAll } from 'd3-selection';
|
|
6
6
|
import 'd3-transition';
|
|
7
7
|
import { hierarchy as d3Hierarchy, tree as d3Tree } from 'd3-hierarchy';
|
|
8
8
|
import { easeElasticIn as d3EaseElasticIn, easeElasticOut as d3EaseElasticOut } from 'd3-ease';
|
|
@@ -10,7 +10,6 @@ import { DataState } from '@hestia-earth/api';
|
|
|
10
10
|
import { NodeType, TermTermType } from '@hestia-earth/schema';
|
|
11
11
|
import { getDefaultModelId } from '@hestia-earth/glossary';
|
|
12
12
|
import { unique, toPrecision } from '@hestia-earth/utils';
|
|
13
|
-
import { faExternalLinkAlt } from '@fortawesome/free-solid-svg-icons';
|
|
14
13
|
import { baseUrl } from '../../common/utils';
|
|
15
14
|
import { d3wrap } from '../../common/d3-utils';
|
|
16
15
|
import { Level, parseLines, parseMessage } from '../../common/logs-utils';
|
|
@@ -21,7 +20,8 @@ import * as i2 from "../../node/node.service";
|
|
|
21
20
|
import * as i3 from "../../engine/engine.service";
|
|
22
21
|
import * as i4 from "@angular/common";
|
|
23
22
|
import * as i5 from "@angular/forms";
|
|
24
|
-
import * as i6 from "@
|
|
23
|
+
import * as i6 from "@ng-bootstrap/ng-bootstrap";
|
|
24
|
+
import * as i7 from "@fortawesome/angular-fontawesome";
|
|
25
25
|
var ChartNodeType;
|
|
26
26
|
(function (ChartNodeType) {
|
|
27
27
|
ChartNodeType["midpoint"] = "midpoint";
|
|
@@ -108,45 +108,33 @@ const formatBar = (selection) => selection
|
|
|
108
108
|
const isTypeWithoutValue = (nodeDatum) => [ChartNodeType.input, ChartNodeType.operation].includes(nodeDatum.data.type);
|
|
109
109
|
const getWeightedValueText = (nodeDatum) => `${toPrecision(nodeDatum.data.weightedValue, 3)}${nodeDatum.parent?.data.value === null
|
|
110
110
|
? ''
|
|
111
|
-
: ` of ${toPrecision(nodeDatum.parent?.data.value || nodeDatum.parent?.data.weightedValue, 3)}`} ${nodeDatum.parent?.data.value ? nodeDatum.parent?.data.units : nodeDatum.parent?.parent?.data.units}
|
|
112
|
-
const generateTipData = (nodeDatum) =>
|
|
113
|
-
nodeDatum.data.weightedValue
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
nodeDatum.data.value
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
[
|
|
133
|
-
{ text: 'methodModel', href: `${baseUrl()}/schema/Indicator#methodModel` },
|
|
134
|
-
{ text: `${nodeDatum.data.modelName}`, href: `${baseUrl()}/model/${nodeDatum.data.modelId}` }
|
|
135
|
-
],
|
|
136
|
-
[
|
|
137
|
-
{ text: 'term', href: `${baseUrl()}/schema/Indicator#term` },
|
|
138
|
-
{ text: nodeDatum.data.term, href: `${baseUrl()}/term/${nodeDatum.data.id}` }
|
|
139
|
-
]
|
|
140
|
-
].filter(Boolean);
|
|
141
|
-
const rightTipPath = (w, h, tail) => `M${-tail},${h / 2} l${tail},-${tail} v-${h / 2 - tail} h${w} v${h} h-${w} v-${h / 2 - tail} z`;
|
|
142
|
-
const leftTipPath = (w, h, tail) => `M${0},${0} h${w} v${h / 2 - tail} l${tail},${tail} l${-tail},${tail} v${h / 2 - tail} h${-w} z`;
|
|
143
|
-
const addTooltip = (selection, { tipSelection }) => {
|
|
111
|
+
: ` of ${toPrecision(nodeDatum.parent?.data.value || nodeDatum.parent?.data.weightedValue, 3)}`} ${nodeDatum.parent?.data.value ? nodeDatum.parent?.data.units : nodeDatum.parent?.parent?.data.units}`;
|
|
112
|
+
const generateTipData = (nodeDatum) => ({
|
|
113
|
+
hasWeightedValue: nodeDatum.data.weightedValue,
|
|
114
|
+
weightedValueText: getWeightedValueText(nodeDatum),
|
|
115
|
+
valueKeyHref: `${baseUrl()}/schema/Indicator#value`,
|
|
116
|
+
modelDocsHref: nodeDatum.data.modelDocs,
|
|
117
|
+
valueValueText: nodeDatum.data.value
|
|
118
|
+
? `${toPrecision(nodeDatum.data.value, 3)} ${nodeDatum.data.units} - `
|
|
119
|
+
: isTypeWithoutValue(nodeDatum)
|
|
120
|
+
? 'no data (under development)'
|
|
121
|
+
: 'no contribution',
|
|
122
|
+
hasValue: nodeDatum.data.value,
|
|
123
|
+
modelKeyHref: `${baseUrl()}/schema/Indicator#methodModel`,
|
|
124
|
+
modelValue: nodeDatum.data.modelName,
|
|
125
|
+
modelValueHref: `${baseUrl()}/model/${nodeDatum.data.modelId}`,
|
|
126
|
+
termKeyHref: `${baseUrl()}/schema/Indicator#term`,
|
|
127
|
+
termValue: nodeDatum.data.term,
|
|
128
|
+
termValueText: nodeDatum.data.term,
|
|
129
|
+
termValueHref: `${baseUrl()}/term/${nodeDatum.data.id}`
|
|
130
|
+
});
|
|
131
|
+
const addTooltip = (selection, { tooltipOperator, zone }) => {
|
|
144
132
|
let hoveringTip = false;
|
|
145
133
|
let hoveringNode = false;
|
|
146
134
|
let lastNodeId;
|
|
147
135
|
const closeTip = () => {
|
|
148
|
-
|
|
149
|
-
|
|
136
|
+
zone.run(() => tooltipOperator.close(false));
|
|
137
|
+
selectAll('.tip-target').classed('tip-target', false);
|
|
150
138
|
lastNodeId = null;
|
|
151
139
|
};
|
|
152
140
|
const startCloseTip = () => {
|
|
@@ -156,18 +144,9 @@ const addTooltip = (selection, { tipSelection }) => {
|
|
|
156
144
|
}
|
|
157
145
|
}, 100);
|
|
158
146
|
};
|
|
159
|
-
tipSelection
|
|
160
|
-
.on('pointerenter', () => {
|
|
161
|
-
hoveringTip = true;
|
|
162
|
-
})
|
|
163
|
-
.on('pointerleave', () => {
|
|
164
|
-
hoveringTip = false;
|
|
165
|
-
startCloseTip();
|
|
166
|
-
});
|
|
167
147
|
selection
|
|
168
148
|
.on('click', (_e, d) => {
|
|
169
149
|
closeTip();
|
|
170
|
-
clearTimeout(d._timeout);
|
|
171
150
|
})
|
|
172
151
|
.on('pointerenter', (event, nodeDatum) => {
|
|
173
152
|
hoveringNode = true;
|
|
@@ -176,72 +155,24 @@ const addTooltip = (selection, { tipSelection }) => {
|
|
|
176
155
|
}
|
|
177
156
|
closeTip();
|
|
178
157
|
lastNodeId = nodeDatum.data.id;
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
const t = d3Select(this);
|
|
190
|
-
const aOrTspan = d[0].href ? t.append('a').attr('href', d[0].href) : t.append('tspan');
|
|
191
|
-
aOrTspan.append('tspan').text(d[0].text);
|
|
192
|
-
aOrTspan.classed('tip-text-key', true);
|
|
193
|
-
t.append('tspan').text(': ');
|
|
194
|
-
if (d[1] && !d[1].href) {
|
|
195
|
-
t.append('tspan').text(d[1].text);
|
|
196
|
-
}
|
|
197
|
-
});
|
|
198
|
-
// svg icon cannot be child of text so position final link manually
|
|
199
|
-
tipRow
|
|
200
|
-
.filter((d) => d[d.length - 1].href)
|
|
201
|
-
.each(function (d) {
|
|
202
|
-
const { width: textWidth } = this.getBBox();
|
|
203
|
-
const a = d3Select(this)
|
|
204
|
-
.append('a')
|
|
205
|
-
.attr('href', d[d.length - 1].href)
|
|
206
|
-
.attr('transform', `translate(${textWidth + nodePadding},0)`);
|
|
207
|
-
a.append('text').text(d[d.length - 1].text);
|
|
208
|
-
const { width: aWidth } = a.node().getBBox();
|
|
209
|
-
const g = a.append('g').attr('transform', `translate(${aWidth + nodePadding},${-fontSize / 2})`);
|
|
210
|
-
g.append('rect')
|
|
211
|
-
.attr('width', fontSize)
|
|
212
|
-
.attr('height', fontSize)
|
|
213
|
-
.attr('fill', 'none')
|
|
214
|
-
.attr('stroke', 'none');
|
|
215
|
-
g.append('svg')
|
|
216
|
-
.attr('viewBox', `0 0 ${faExternalLinkAlt.icon[0]} ${faExternalLinkAlt.icon[1]}`)
|
|
217
|
-
.attr('width', fontSize)
|
|
218
|
-
.attr('height', fontSize)
|
|
219
|
-
.append('path')
|
|
220
|
-
.attr('d', faExternalLinkAlt.icon[4])
|
|
221
|
-
.attr('fill', 'white');
|
|
222
|
-
});
|
|
223
|
-
tipText.selectAll('a').classed('tip-anchor', true).attr('target', '_blank');
|
|
224
|
-
const { width: tipWidth, height: tipHeight } = tipText.node().getBBox();
|
|
225
|
-
const orientLeft = nodeDatum.y + tipWidth + nodeWidth > width - margin.left;
|
|
226
|
-
const tipPathArgs = [tipWidth + nodePadding * 2, tipHeight + nodePadding * 2, 5];
|
|
227
|
-
tipBackground
|
|
228
|
-
.attr('d', orientLeft ? leftTipPath(...tipPathArgs) : rightTipPath(...tipPathArgs))
|
|
229
|
-
.attr('transform', `translate(${-nodePadding},${-nodePadding})`)
|
|
230
|
-
.attr('stroke-linejoin', 'round')
|
|
231
|
-
.attr('stroke-width', 3)
|
|
232
|
-
.attr('stroke', 'black');
|
|
233
|
-
const xOffset = orientLeft ? -tipWidth - nodePadding * 2 : nodeWidth + nodePadding * 2;
|
|
234
|
-
tipSelection.attr('transform', `translate(${nodeDatum.y + xOffset},${nodeDatum.x + nodeHeight / 2 - tipHeight / 2})`);
|
|
235
|
-
}, 250);
|
|
158
|
+
d3Select(event.target).classed('tip-target', true);
|
|
159
|
+
zone.run(() => tooltipOperator.open({ tipData: generateTipData(nodeDatum) }));
|
|
160
|
+
d3Select('.driver-chart-tooltip')
|
|
161
|
+
.on('pointerenter', () => {
|
|
162
|
+
hoveringTip = true;
|
|
163
|
+
})
|
|
164
|
+
.on('pointerleave', () => {
|
|
165
|
+
hoveringTip = false;
|
|
166
|
+
startCloseTip();
|
|
167
|
+
});
|
|
236
168
|
})
|
|
237
169
|
.on('pointerleave', (_e, d) => {
|
|
238
170
|
hoveringNode = false;
|
|
239
171
|
startCloseTip();
|
|
240
|
-
clearTimeout(d._timeout);
|
|
241
172
|
});
|
|
242
173
|
return selection;
|
|
243
174
|
};
|
|
244
|
-
const mergedNodes = (selection, {
|
|
175
|
+
const mergedNodes = (selection, { tooltipOperator, zone }) => {
|
|
245
176
|
selection
|
|
246
177
|
.selectAll('.node-box')
|
|
247
178
|
.classed('node-openable', (d) => !!d.height)
|
|
@@ -252,7 +183,7 @@ const mergedNodes = (selection, { tipSelection }) => {
|
|
|
252
183
|
.style('user-select', window.innerWidth < 768 ? 'none' : null);
|
|
253
184
|
selection
|
|
254
185
|
.filter((d) => !d.data.group && d.data.id !== nonLCAIndicatorsId)
|
|
255
|
-
.call(addTooltip, {
|
|
186
|
+
.call(addTooltip, { tooltipOperator, zone });
|
|
256
187
|
selection
|
|
257
188
|
.selectAll('.node-label')
|
|
258
189
|
.attr('y', (d) => (d.data.showBar ? lineHeight / 2 + nodePadding / 2 : 0))
|
|
@@ -715,7 +646,6 @@ export class ImpactAssessmentsGraphComponent {
|
|
|
715
646
|
.attr('font-size', `${fontSize}px`);
|
|
716
647
|
this.node = this.svg.append('g').selectAll('g');
|
|
717
648
|
this.link = this.svg.append('g').selectAll('path');
|
|
718
|
-
this.tooltip = this.svg.append('g').classed('tooltip', true).style('opacity', 0);
|
|
719
649
|
this.handleNodeClick(null, this.root.find((node) => node.depth === 1));
|
|
720
650
|
}
|
|
721
651
|
// flip x/y to go left-right instead of top-bottom
|
|
@@ -769,19 +699,27 @@ export class ImpactAssessmentsGraphComponent {
|
|
|
769
699
|
.append('g')
|
|
770
700
|
.call(enterNodes)
|
|
771
701
|
.attr('opacity', 0)
|
|
772
|
-
.attr('transform', (d) => 'translate(' + (togglingGroup ? d.y : d.y - nodeWidth / 2) + ',' + d.x + ')'), (update) => update, (exit) =>
|
|
773
|
-
.
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
702
|
+
.attr('transform', (d) => 'translate(' + (togglingGroup ? d.y : d.y - nodeWidth / 2) + ',' + d.x + ')'), (update) => update, (exit) => {
|
|
703
|
+
this.ngZone.run(() => this.tooltipOperator.close(false));
|
|
704
|
+
return exit
|
|
705
|
+
.style('pointer-events', 'none')
|
|
706
|
+
.transition()
|
|
707
|
+
.duration(nodeDuration / 2)
|
|
708
|
+
.delay((d) => {
|
|
709
|
+
const children = d.parent?.children || d.parent?._children;
|
|
710
|
+
return (children?.length - children?.indexOf(d) - 1) * 10;
|
|
711
|
+
})
|
|
712
|
+
.ease(d3EaseElasticIn.amplitude(0.5).period(1))
|
|
713
|
+
.attr('transform', (d) => 'translate(' + (togglingGroup ? d.y : d.y - nodeWidth / 2) + ',' + d.x + ')')
|
|
714
|
+
.attr('opacity', 0)
|
|
715
|
+
.remove()
|
|
716
|
+
.on('end', () => {
|
|
717
|
+
// in case a tooltip was opened on a transitioning element
|
|
718
|
+
this.ngZone.run(() => this.tooltipOperator.close(false));
|
|
719
|
+
});
|
|
720
|
+
});
|
|
783
721
|
this.node
|
|
784
|
-
.call(mergedNodes, {
|
|
722
|
+
.call(mergedNodes, { tooltipOperator: this.tooltipOperator, zone: this.ngZone })
|
|
785
723
|
.transition()
|
|
786
724
|
.delay((d) => {
|
|
787
725
|
const groupClosing = togglingGroup && !d.parent?.children?.find((n) => n.data.group)?._groupOpen;
|
|
@@ -832,16 +770,19 @@ export class ImpactAssessmentsGraphComponent {
|
|
|
832
770
|
}
|
|
833
771
|
}
|
|
834
772
|
ImpactAssessmentsGraphComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: ImpactAssessmentsGraphComponent, deps: [{ token: i0.NgZone }, { token: i1.HeSearchService }, { token: i2.HeNodeService }, { token: i3.HeEngineService }], target: i0.ɵɵFactoryTarget.Component });
|
|
835
|
-
ImpactAssessmentsGraphComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.8", type: ImpactAssessmentsGraphComponent, selector: "he-impact-assessments-graph", inputs: { impactAssessments: "impactAssessments", dataState: "dataState" }, viewQueries: [{ propertyName: "chartRef", first: true, predicate: ["chart"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"!loading; else loader\">\n <ng-container *ngIf=\"isRecalculated; else showSwitchRecalculated\">\n <div class=\"field has-addons pt-2 px-3 mb-0\" *ngIf=\"filteredImpactAssessments.length > 1\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select an Impact Assessment</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select [(ngModel)]=\"selectedImpactAssessmentId\" (change)=\"reloadChart()\" [disabled]=\"loading\">\n <option *ngFor=\"let value of filteredImpactAssessments\" [value]=\"value['@id']\">\n {{ value.name || value['@id'] }}\n </option>\n </select>\n </div>\n </div>\n </div>\n <div *ngIf=\"!noData\" class=\"field has-addons py-2 px-3\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select a model</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select [(ngModel)]=\"selectedModelId\" (change)=\"initChart()\" [disabled]=\"loading\">\n <option *ngFor=\"let model of models\" [value]=\"model['@id']\">{{ model.name || model['@id'] }}</option>\n </select>\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"!noData && !showWarnings\">\n <div class=\"columns is-centered py-2 is-size-7 is-mobile is-multiline\">\n <ng-container *ngFor=\"let legendItem of legend\">\n <div class=\"column is-narrow py-0 is-flex-mobile is-flex-direction-column is-align-items-center is-legend-item\">\n <span\n class=\"key-colour is-inline-block-tablet is-align-middle\"\n [style.backgroundColor]=\"nodeColours[legendItem.type]\"\n ></span>\n <strong class=\"has-text-black is-align-middle key-label is-pl-tablet-2\">\n <span class=\"is-hidden-desktop\">{{legendItem.mobileText}}</span>\n <span class=\"is-hidden-touch\">{{legendItem.text}}</span>\n </strong>\n </div>\n </ng-container>\n </div>\n </ng-container>\n\n <p *ngIf=\"error\" class=\"has-text-danger py-3\">\n <ng-container [ngSwitch]=\"error\">\n <p *ngSwitchCase=\"'not-found'\">Impact Assessment not found</p>\n <div *ngSwitchDefault>\n <span>An unexpected error occurred:</span>\n <p class=\"mt-1\">{{ error }}</p>\n </div>\n </ng-container>\n </p>\n\n <div *ngIf=\"showWarnings\" class=\"has-text-warning py-3 has-text-centered\">\n <p class=\"is-mb-2\" *ngFor=\"let warning of warnings\">\n <fa-icon class=\"pr-2\" icon=\"exclamation-triangle\"></fa-icon>\n <ng-container [ngSwitch]=\"warning\">\n <span *ngSwitchCase=\"'missing-terms'\">Calculations are not up to date. Some terms may not display correctly.</span>\n </ng-container>\n </p>\n <p class=\"is-underlined is-size-7\"><a (click)=\"showWarnings = false\">View chart anyway.</a></p>\n </div>\n\n <div *ngIf=\"noData\" class=\"py-3\">\n <p class=\"has-text-centered\">No chart available.</p>\n </div>\n </ng-container>\n</ng-container>\n\n<div [class.is-hidden]=\"!isRecalculated || loading || error || noData || showWarnings\" class=\"chart-container is-relative w-100\">\n <svg class=\"w-100 h-100\" #chart></svg>\n</div>\n\n<ng-template #loader>\n <div class=\"loading-container has-text-center my-5 py-5\">\n <fa-icon icon=\"spinner\" [pulse]=\"true\" size=\"lg\"></fa-icon>\n </div>\n</ng-template>\n\n<ng-template #showSwitchRecalculated>\n <p class=\"has-text-centered py-3\">No chart available. Switch to <code>recalculated</code> version.</p>\n</ng-template>\n", styles: [".is-marginless{margin:0!important}.is-paddingless{padding:0!important}.m-0{margin:0!important}.mt-0{margin-top:0!important}.mr-0{margin-right:0!important}.mb-0{margin-bottom:0!important}.ml-0{margin-left:0!important}.mx-0{margin-left:0!important;margin-right:0!important}.my-0{margin-top:0!important;margin-bottom:0!important}.m-1{margin:.25rem!important}.mt-1{margin-top:.25rem!important}.mr-1{margin-right:.25rem!important}.mb-1{margin-bottom:.25rem!important}.ml-1{margin-left:.25rem!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.m-2{margin:.5rem!important}.mt-2{margin-top:.5rem!important}.mr-2{margin-right:.5rem!important}.mb-2{margin-bottom:.5rem!important}.ml-2{margin-left:.5rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.m-3{margin:.75rem!important}.mt-3{margin-top:.75rem!important}.mr-3{margin-right:.75rem!important}.mb-3{margin-bottom:.75rem!important}.ml-3{margin-left:.75rem!important}.mx-3{margin-left:.75rem!important;margin-right:.75rem!important}.my-3{margin-top:.75rem!important;margin-bottom:.75rem!important}.m-4{margin:1rem!important}.mt-4{margin-top:1rem!important}.mr-4{margin-right:1rem!important}.mb-4{margin-bottom:1rem!important}.ml-4{margin-left:1rem!important}.mx-4{margin-left:1rem!important;margin-right:1rem!important}.my-4{margin-top:1rem!important;margin-bottom:1rem!important}.m-5{margin:1.5rem!important}.mt-5{margin-top:1.5rem!important}.mr-5{margin-right:1.5rem!important}.mb-5{margin-bottom:1.5rem!important}.ml-5{margin-left:1.5rem!important}.mx-5{margin-left:1.5rem!important;margin-right:1.5rem!important}.my-5{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.m-6{margin:3rem!important}.mt-6{margin-top:3rem!important}.mr-6{margin-right:3rem!important}.mb-6{margin-bottom:3rem!important}.ml-6{margin-left:3rem!important}.mx-6{margin-left:3rem!important;margin-right:3rem!important}.my-6{margin-top:3rem!important;margin-bottom:3rem!important}.m-auto{margin:auto!important}.mt-auto{margin-top:auto!important}.mr-auto{margin-right:auto!important}.mb-auto{margin-bottom:auto!important}.ml-auto{margin-left:auto!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.p-0{padding:0!important}.pt-0{padding-top:0!important}.pr-0{padding-right:0!important}.pb-0{padding-bottom:0!important}.pl-0{padding-left:0!important}.px-0{padding-left:0!important;padding-right:0!important}.py-0{padding-top:0!important;padding-bottom:0!important}.p-1{padding:.25rem!important}.pt-1{padding-top:.25rem!important}.pr-1{padding-right:.25rem!important}.pb-1{padding-bottom:.25rem!important}.pl-1{padding-left:.25rem!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.p-2{padding:.5rem!important}.pt-2{padding-top:.5rem!important}.pr-2{padding-right:.5rem!important}.pb-2{padding-bottom:.5rem!important}.pl-2{padding-left:.5rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.p-3{padding:.75rem!important}.pt-3{padding-top:.75rem!important}.pr-3{padding-right:.75rem!important}.pb-3{padding-bottom:.75rem!important}.pl-3{padding-left:.75rem!important}.px-3{padding-left:.75rem!important;padding-right:.75rem!important}.py-3{padding-top:.75rem!important;padding-bottom:.75rem!important}.p-4{padding:1rem!important}.pt-4{padding-top:1rem!important}.pr-4{padding-right:1rem!important}.pb-4{padding-bottom:1rem!important}.pl-4{padding-left:1rem!important}.px-4{padding-left:1rem!important;padding-right:1rem!important}.py-4{padding-top:1rem!important;padding-bottom:1rem!important}.p-5{padding:1.5rem!important}.pt-5{padding-top:1.5rem!important}.pr-5{padding-right:1.5rem!important}.pb-5{padding-bottom:1.5rem!important}.pl-5{padding-left:1.5rem!important}.px-5{padding-left:1.5rem!important;padding-right:1.5rem!important}.py-5{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.p-6{padding:3rem!important}.pt-6{padding-top:3rem!important}.pr-6{padding-right:3rem!important}.pb-6{padding-bottom:3rem!important}.pl-6{padding-left:3rem!important}.px-6{padding-left:3rem!important;padding-right:3rem!important}.py-6{padding-top:3rem!important;padding-bottom:3rem!important}.p-auto{padding:auto!important}.pt-auto{padding-top:auto!important}.pr-auto{padding-right:auto!important}.pb-auto{padding-bottom:auto!important}.pl-auto{padding-left:auto!important}.px-auto{padding-left:auto!important;padding-right:auto!important}.py-auto{padding-top:auto!important;padding-bottom:auto!important}.key-colour{border-radius:2px;box-shadow:0 2px 3px #0000001a,inset 0 0 0 1px #0000001a;height:1.5em;width:1.5em;opacity:.7}@media screen and (max-width: 768px){.key-label{font-size:.675rem}}svg{pointer-events:none}@media screen and (min-width: 1216px){.is-legend-item{min-width:130px}}@media screen and (min-width: 1408px){.is-legend-item{min-width:200px}}.loading-container{min-height:200px}:host ::ng-deep .node-box{rx:10px;ry:10px;fill-opacity:0;stroke-opacity:.5;pointer-events:auto}:host ::ng-deep .node-open{stroke-width:3}:host ::ng-deep .node-openable{cursor:pointer;stroke-opacity:1;fill-opacity:.1}:host ::ng-deep .node-openable:hover{stroke-width:3}:host ::ng-deep .group-button{fill:#fff;cursor:pointer;pointer-events:auto;stroke-dasharray:2,5;stroke:#999;stroke-width:2}:host ::ng-deep .group-button:hover{fill:#000}:host ::ng-deep .group-button:hover+text{fill:#fff}:host ::ng-deep .group-button-text{text-anchor:middle;alignment-baseline:central}:host ::ng-deep .group-border,:host ::ng-deep .group-line{stroke-dasharray:2,5;stroke:#999;stroke-width:2;fill:none}:host ::ng-deep .group-label{font-weight:700;fill:#696969;text-anchor:start;alignment-baseline:central}:host ::ng-deep .node-label{font-weight:700;fill:#000;text-anchor:middle;alignment-baseline:central}:host ::ng-deep .node-label tspan{alignment-baseline:inherit}:host ::ng-deep .bar-label{font-weight:700;fill:#696969;alignment-baseline:central}:host ::ng-deep .sibling-mask{fill:#fafafa;fill-opacity:.8;stroke-opacity:.9;stroke:#fafafa;rx:10px;ry:10px;stroke-width:3;pointer-events:none}:host ::ng-deep .mask-openable{pointer-events:all}:host ::ng-deep .mask-openable:hover{fill:none;stroke:none}:host ::ng-deep .bar-background{fill:#d3d3d3;fill-opacity:.5}:host ::ng-deep .link-path{fill:none;stroke:#999}:host ::ng-deep .bar-foreground{fill-opacity:.5}:host ::ng-deep .tip-background{fill:#000}:host ::ng-deep .tip-text{font-weight:400;alignment-baseline:central;fill:#fff}:host ::ng-deep .tip-text *{font-weight:inherit;alignment-baseline:inherit}:host ::ng-deep .tip-text-key{font-weight:700}:host ::ng-deep .tip-anchor{text-decoration:underline;color:#fff;cursor:pointer;fill:#fff}:host ::ng-deep .tip-anchor:hover{text-decoration:underline}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }] });
|
|
773
|
+
ImpactAssessmentsGraphComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.8", type: ImpactAssessmentsGraphComponent, selector: "he-impact-assessments-graph", inputs: { impactAssessments: "impactAssessments", dataState: "dataState" }, viewQueries: [{ propertyName: "chartRef", first: true, predicate: ["chart"], descendants: true }, { propertyName: "tooltipOperator", first: true, predicate: ["t"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"!loading; else loader\">\n <ng-container *ngIf=\"isRecalculated; else showSwitchRecalculated\">\n <div class=\"field has-addons pt-2 px-3 mb-0\" *ngIf=\"filteredImpactAssessments.length > 1\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select an Impact Assessment</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select [(ngModel)]=\"selectedImpactAssessmentId\" (change)=\"reloadChart()\" [disabled]=\"loading\">\n <option *ngFor=\"let value of filteredImpactAssessments\" [value]=\"value['@id']\">\n {{ value.name || value['@id'] }}\n </option>\n </select>\n </div>\n </div>\n </div>\n <div *ngIf=\"!noData\" class=\"field has-addons py-2 px-3\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select a model</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select [(ngModel)]=\"selectedModelId\" (change)=\"initChart()\" [disabled]=\"loading\">\n <option *ngFor=\"let model of models\" [value]=\"model['@id']\">{{ model.name || model['@id'] }}</option>\n </select>\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"!noData && !showWarnings\">\n <div class=\"columns is-centered py-2 is-size-7 is-mobile is-multiline\">\n <ng-container *ngFor=\"let legendItem of legend\">\n <div class=\"column is-narrow py-0 is-flex-mobile is-flex-direction-column is-align-items-center is-legend-item\">\n <span\n class=\"key-colour is-inline-block-tablet is-align-middle\"\n [style.backgroundColor]=\"nodeColours[legendItem.type]\"\n ></span>\n <strong class=\"has-text-black is-align-middle key-label is-pl-tablet-2\">\n <span class=\"is-hidden-desktop\">{{legendItem.mobileText}}</span>\n <span class=\"is-hidden-touch\">{{legendItem.text}}</span>\n </strong>\n </div>\n </ng-container>\n </div>\n </ng-container>\n\n <p *ngIf=\"error\" class=\"has-text-danger py-3\">\n <ng-container [ngSwitch]=\"error\">\n <p *ngSwitchCase=\"'not-found'\">Impact Assessment not found</p>\n <div *ngSwitchDefault>\n <span>An unexpected error occurred:</span>\n <p class=\"mt-1\">{{ error }}</p>\n </div>\n </ng-container>\n </p>\n\n <div *ngIf=\"showWarnings\" class=\"has-text-warning py-3 has-text-centered\">\n <p class=\"is-mb-2\" *ngFor=\"let warning of warnings\">\n <fa-icon class=\"pr-2\" icon=\"exclamation-triangle\"></fa-icon>\n <ng-container [ngSwitch]=\"warning\">\n <span *ngSwitchCase=\"'missing-terms'\">Calculations are not up to date. Some terms may not display correctly.</span>\n </ng-container>\n </p>\n <p class=\"is-underlined is-size-7\"><a (click)=\"showWarnings = false\">View chart anyway.</a></p>\n </div>\n\n <div *ngIf=\"noData\" class=\"py-3\">\n <p class=\"has-text-centered\">No chart available.</p>\n </div>\n </ng-container>\n</ng-container>\n\n<div [class.is-hidden]=\"!isRecalculated || loading || error || noData || showWarnings\" class=\"chart-container is-relative w-100\">\n <svg class=\"w-100 h-100\" #chart></svg>\n <span\n class=\"is-hidden\"\n [ngbPopover]=\"tipContent\"\n triggers=\"manual\"\n placement=\"right left auto\"\n container=\"body\"\n #t=\"ngbPopover\"\n positionTarget=\".tip-target\"\n popoverClass=\"is-narrow driver-chart-tooltip\"\n [animation]=\"true\"\n ></span>\n</div>\n\n<ng-template #loader>\n <div class=\"loading-container has-text-center my-5 py-5\">\n <fa-icon icon=\"spinner\" [pulse]=\"true\" size=\"lg\"></fa-icon>\n </div>\n</ng-template>\n\n<ng-template #showSwitchRecalculated>\n <p class=\"has-text-centered py-3\">No chart available. Switch to <code>recalculated</code> version.</p>\n</ng-template>\n\n<ng-template #tipContent let-tipData=\"tipData\">\n <p *ngIf=\"tipData.hasWeightedValue\">contribution: {{ tipData.weightedValueText }}</p>\n <p>\n <a class=\"is-dark\" target=\"_blank\" [href]=\"tipData.valueKeyHref\">value</a>: {{ tipData.valueValueText }}\n <a class=\"is-dark\" *ngIf=\"tipData.hasValue\" [href]=\"tipData.modelDocsHref\" target=\"_blank\">\n <span>Docs</span>\n <fa-icon class=\"ml-1\" icon=\"external-link-alt\" size=\"sm\"></fa-icon>\n </a>\n </p>\n <p>\n <a class=\"is-dark\" target=\"_blank\" [href]=\"tipData.modelKeyHref\">methodModel</a>: \n <a class=\"is-dark\" target=\"_blank\" [href]=\"tipData.modelValueHref\">{{ tipData.modelValue }}</a>\n </p>\n <p>\n <a class=\"is-dark\" target=\"_blank\" [href]=\"tipData.termKeyHref\">term</a>: \n <a class=\"is-dark\" target=\"_blank\" [href]=\"tipData.termValueHref\">{{ tipData.termValue }}</a>\n </p>\n</ng-template>\n", styles: [".is-marginless{margin:0!important}.is-paddingless{padding:0!important}.m-0{margin:0!important}.mt-0{margin-top:0!important}.mr-0{margin-right:0!important}.mb-0{margin-bottom:0!important}.ml-0{margin-left:0!important}.mx-0{margin-left:0!important;margin-right:0!important}.my-0{margin-top:0!important;margin-bottom:0!important}.m-1{margin:.25rem!important}.mt-1{margin-top:.25rem!important}.mr-1{margin-right:.25rem!important}.mb-1{margin-bottom:.25rem!important}.ml-1{margin-left:.25rem!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.m-2{margin:.5rem!important}.mt-2{margin-top:.5rem!important}.mr-2{margin-right:.5rem!important}.mb-2{margin-bottom:.5rem!important}.ml-2{margin-left:.5rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.m-3{margin:.75rem!important}.mt-3{margin-top:.75rem!important}.mr-3{margin-right:.75rem!important}.mb-3{margin-bottom:.75rem!important}.ml-3{margin-left:.75rem!important}.mx-3{margin-left:.75rem!important;margin-right:.75rem!important}.my-3{margin-top:.75rem!important;margin-bottom:.75rem!important}.m-4{margin:1rem!important}.mt-4{margin-top:1rem!important}.mr-4{margin-right:1rem!important}.mb-4{margin-bottom:1rem!important}.ml-4{margin-left:1rem!important}.mx-4{margin-left:1rem!important;margin-right:1rem!important}.my-4{margin-top:1rem!important;margin-bottom:1rem!important}.m-5{margin:1.5rem!important}.mt-5{margin-top:1.5rem!important}.mr-5{margin-right:1.5rem!important}.mb-5{margin-bottom:1.5rem!important}.ml-5{margin-left:1.5rem!important}.mx-5{margin-left:1.5rem!important;margin-right:1.5rem!important}.my-5{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.m-6{margin:3rem!important}.mt-6{margin-top:3rem!important}.mr-6{margin-right:3rem!important}.mb-6{margin-bottom:3rem!important}.ml-6{margin-left:3rem!important}.mx-6{margin-left:3rem!important;margin-right:3rem!important}.my-6{margin-top:3rem!important;margin-bottom:3rem!important}.m-auto{margin:auto!important}.mt-auto{margin-top:auto!important}.mr-auto{margin-right:auto!important}.mb-auto{margin-bottom:auto!important}.ml-auto{margin-left:auto!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.p-0{padding:0!important}.pt-0{padding-top:0!important}.pr-0{padding-right:0!important}.pb-0{padding-bottom:0!important}.pl-0{padding-left:0!important}.px-0{padding-left:0!important;padding-right:0!important}.py-0{padding-top:0!important;padding-bottom:0!important}.p-1{padding:.25rem!important}.pt-1{padding-top:.25rem!important}.pr-1{padding-right:.25rem!important}.pb-1{padding-bottom:.25rem!important}.pl-1{padding-left:.25rem!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.p-2{padding:.5rem!important}.pt-2{padding-top:.5rem!important}.pr-2{padding-right:.5rem!important}.pb-2{padding-bottom:.5rem!important}.pl-2{padding-left:.5rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.p-3{padding:.75rem!important}.pt-3{padding-top:.75rem!important}.pr-3{padding-right:.75rem!important}.pb-3{padding-bottom:.75rem!important}.pl-3{padding-left:.75rem!important}.px-3{padding-left:.75rem!important;padding-right:.75rem!important}.py-3{padding-top:.75rem!important;padding-bottom:.75rem!important}.p-4{padding:1rem!important}.pt-4{padding-top:1rem!important}.pr-4{padding-right:1rem!important}.pb-4{padding-bottom:1rem!important}.pl-4{padding-left:1rem!important}.px-4{padding-left:1rem!important;padding-right:1rem!important}.py-4{padding-top:1rem!important;padding-bottom:1rem!important}.p-5{padding:1.5rem!important}.pt-5{padding-top:1.5rem!important}.pr-5{padding-right:1.5rem!important}.pb-5{padding-bottom:1.5rem!important}.pl-5{padding-left:1.5rem!important}.px-5{padding-left:1.5rem!important;padding-right:1.5rem!important}.py-5{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.p-6{padding:3rem!important}.pt-6{padding-top:3rem!important}.pr-6{padding-right:3rem!important}.pb-6{padding-bottom:3rem!important}.pl-6{padding-left:3rem!important}.px-6{padding-left:3rem!important;padding-right:3rem!important}.py-6{padding-top:3rem!important;padding-bottom:3rem!important}.p-auto{padding:auto!important}.pt-auto{padding-top:auto!important}.pr-auto{padding-right:auto!important}.pb-auto{padding-bottom:auto!important}.pl-auto{padding-left:auto!important}.px-auto{padding-left:auto!important;padding-right:auto!important}.py-auto{padding-top:auto!important;padding-bottom:auto!important}.key-colour{border-radius:2px;box-shadow:0 2px 3px #0000001a,inset 0 0 0 1px #0000001a;height:1.5em;width:1.5em;opacity:.7}@media screen and (max-width: 767px){.key-label{font-size:calc(.9 * .8rem)}}svg{pointer-events:none}@media screen and (min-width: 1216px){.is-legend-item{min-width:130px}}@media screen and (min-width: 1408px){.is-legend-item{min-width:200px}}.loading-container{min-height:200px}:host ::ng-deep .node-box{rx:10px;ry:10px;fill-opacity:0;stroke-opacity:.5;pointer-events:auto}:host ::ng-deep .node-open{stroke-width:3}:host ::ng-deep .node-openable{cursor:pointer;stroke-opacity:1;fill-opacity:.1}:host ::ng-deep .node-openable:hover{stroke-width:3}:host ::ng-deep .group-button{fill:#fff;cursor:pointer;pointer-events:auto;stroke-dasharray:2,5;stroke:#999;stroke-width:2}:host ::ng-deep .group-button:hover{fill:#000}:host ::ng-deep .group-button:hover+text{fill:#fff}:host ::ng-deep .group-button-text{text-anchor:middle;alignment-baseline:central}:host ::ng-deep .group-border,:host ::ng-deep .group-line{stroke-dasharray:2,5;stroke:#999;stroke-width:2;fill:none}:host ::ng-deep .group-label{font-weight:700;fill:#696969;text-anchor:start;alignment-baseline:central}:host ::ng-deep .node-label{font-weight:700;fill:#000;text-anchor:middle;alignment-baseline:central}:host ::ng-deep .node-label tspan{alignment-baseline:inherit}:host ::ng-deep .bar-label{font-weight:700;fill:#696969;alignment-baseline:central}:host ::ng-deep .sibling-mask{fill:#fafafa;fill-opacity:.8;stroke-opacity:.9;stroke:#fafafa;rx:10px;ry:10px;stroke-width:3;pointer-events:none}:host ::ng-deep .mask-openable{pointer-events:all}:host ::ng-deep .mask-openable:hover{fill:none;stroke:none}:host ::ng-deep .bar-background{fill:#d3d3d3;fill-opacity:.5}:host ::ng-deep .link-path{fill:none;stroke:#999}:host ::ng-deep .bar-foreground{fill-opacity:.5}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.NgbPopover, selector: "[ngbPopover]", inputs: ["animation", "autoClose", "ngbPopover", "popoverTitle", "placement", "popperOptions", "triggers", "positionTarget", "container", "disablePopover", "popoverClass", "openDelay", "closeDelay"], outputs: ["shown", "hidden"], exportAs: ["ngbPopover"] }, { kind: "component", type: i7.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }] });
|
|
836
774
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: ImpactAssessmentsGraphComponent, decorators: [{
|
|
837
775
|
type: Component,
|
|
838
|
-
args: [{ selector: 'he-impact-assessments-graph', template: "<ng-container *ngIf=\"!loading; else loader\">\n <ng-container *ngIf=\"isRecalculated; else showSwitchRecalculated\">\n <div class=\"field has-addons pt-2 px-3 mb-0\" *ngIf=\"filteredImpactAssessments.length > 1\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select an Impact Assessment</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select [(ngModel)]=\"selectedImpactAssessmentId\" (change)=\"reloadChart()\" [disabled]=\"loading\">\n <option *ngFor=\"let value of filteredImpactAssessments\" [value]=\"value['@id']\">\n {{ value.name || value['@id'] }}\n </option>\n </select>\n </div>\n </div>\n </div>\n <div *ngIf=\"!noData\" class=\"field has-addons py-2 px-3\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select a model</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select [(ngModel)]=\"selectedModelId\" (change)=\"initChart()\" [disabled]=\"loading\">\n <option *ngFor=\"let model of models\" [value]=\"model['@id']\">{{ model.name || model['@id'] }}</option>\n </select>\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"!noData && !showWarnings\">\n <div class=\"columns is-centered py-2 is-size-7 is-mobile is-multiline\">\n <ng-container *ngFor=\"let legendItem of legend\">\n <div class=\"column is-narrow py-0 is-flex-mobile is-flex-direction-column is-align-items-center is-legend-item\">\n <span\n class=\"key-colour is-inline-block-tablet is-align-middle\"\n [style.backgroundColor]=\"nodeColours[legendItem.type]\"\n ></span>\n <strong class=\"has-text-black is-align-middle key-label is-pl-tablet-2\">\n <span class=\"is-hidden-desktop\">{{legendItem.mobileText}}</span>\n <span class=\"is-hidden-touch\">{{legendItem.text}}</span>\n </strong>\n </div>\n </ng-container>\n </div>\n </ng-container>\n\n <p *ngIf=\"error\" class=\"has-text-danger py-3\">\n <ng-container [ngSwitch]=\"error\">\n <p *ngSwitchCase=\"'not-found'\">Impact Assessment not found</p>\n <div *ngSwitchDefault>\n <span>An unexpected error occurred:</span>\n <p class=\"mt-1\">{{ error }}</p>\n </div>\n </ng-container>\n </p>\n\n <div *ngIf=\"showWarnings\" class=\"has-text-warning py-3 has-text-centered\">\n <p class=\"is-mb-2\" *ngFor=\"let warning of warnings\">\n <fa-icon class=\"pr-2\" icon=\"exclamation-triangle\"></fa-icon>\n <ng-container [ngSwitch]=\"warning\">\n <span *ngSwitchCase=\"'missing-terms'\">Calculations are not up to date. Some terms may not display correctly.</span>\n </ng-container>\n </p>\n <p class=\"is-underlined is-size-7\"><a (click)=\"showWarnings = false\">View chart anyway.</a></p>\n </div>\n\n <div *ngIf=\"noData\" class=\"py-3\">\n <p class=\"has-text-centered\">No chart available.</p>\n </div>\n </ng-container>\n</ng-container>\n\n<div [class.is-hidden]=\"!isRecalculated || loading || error || noData || showWarnings\" class=\"chart-container is-relative w-100\">\n <svg class=\"w-100 h-100\" #chart></svg>\n</div>\n\n<ng-template #loader>\n <div class=\"loading-container has-text-center my-5 py-5\">\n <fa-icon icon=\"spinner\" [pulse]=\"true\" size=\"lg\"></fa-icon>\n </div>\n</ng-template>\n\n<ng-template #showSwitchRecalculated>\n <p class=\"has-text-centered py-3\">No chart available. Switch to <code>recalculated</code> version.</p>\n</ng-template>\n", styles: [".is-marginless{margin:0!important}.is-paddingless{padding:0!important}.m-0{margin:0!important}.mt-0{margin-top:0!important}.mr-0{margin-right:0!important}.mb-0{margin-bottom:0!important}.ml-0{margin-left:0!important}.mx-0{margin-left:0!important;margin-right:0!important}.my-0{margin-top:0!important;margin-bottom:0!important}.m-1{margin:.25rem!important}.mt-1{margin-top:.25rem!important}.mr-1{margin-right:.25rem!important}.mb-1{margin-bottom:.25rem!important}.ml-1{margin-left:.25rem!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.m-2{margin:.5rem!important}.mt-2{margin-top:.5rem!important}.mr-2{margin-right:.5rem!important}.mb-2{margin-bottom:.5rem!important}.ml-2{margin-left:.5rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.m-3{margin:.75rem!important}.mt-3{margin-top:.75rem!important}.mr-3{margin-right:.75rem!important}.mb-3{margin-bottom:.75rem!important}.ml-3{margin-left:.75rem!important}.mx-3{margin-left:.75rem!important;margin-right:.75rem!important}.my-3{margin-top:.75rem!important;margin-bottom:.75rem!important}.m-4{margin:1rem!important}.mt-4{margin-top:1rem!important}.mr-4{margin-right:1rem!important}.mb-4{margin-bottom:1rem!important}.ml-4{margin-left:1rem!important}.mx-4{margin-left:1rem!important;margin-right:1rem!important}.my-4{margin-top:1rem!important;margin-bottom:1rem!important}.m-5{margin:1.5rem!important}.mt-5{margin-top:1.5rem!important}.mr-5{margin-right:1.5rem!important}.mb-5{margin-bottom:1.5rem!important}.ml-5{margin-left:1.5rem!important}.mx-5{margin-left:1.5rem!important;margin-right:1.5rem!important}.my-5{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.m-6{margin:3rem!important}.mt-6{margin-top:3rem!important}.mr-6{margin-right:3rem!important}.mb-6{margin-bottom:3rem!important}.ml-6{margin-left:3rem!important}.mx-6{margin-left:3rem!important;margin-right:3rem!important}.my-6{margin-top:3rem!important;margin-bottom:3rem!important}.m-auto{margin:auto!important}.mt-auto{margin-top:auto!important}.mr-auto{margin-right:auto!important}.mb-auto{margin-bottom:auto!important}.ml-auto{margin-left:auto!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.p-0{padding:0!important}.pt-0{padding-top:0!important}.pr-0{padding-right:0!important}.pb-0{padding-bottom:0!important}.pl-0{padding-left:0!important}.px-0{padding-left:0!important;padding-right:0!important}.py-0{padding-top:0!important;padding-bottom:0!important}.p-1{padding:.25rem!important}.pt-1{padding-top:.25rem!important}.pr-1{padding-right:.25rem!important}.pb-1{padding-bottom:.25rem!important}.pl-1{padding-left:.25rem!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.p-2{padding:.5rem!important}.pt-2{padding-top:.5rem!important}.pr-2{padding-right:.5rem!important}.pb-2{padding-bottom:.5rem!important}.pl-2{padding-left:.5rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.p-3{padding:.75rem!important}.pt-3{padding-top:.75rem!important}.pr-3{padding-right:.75rem!important}.pb-3{padding-bottom:.75rem!important}.pl-3{padding-left:.75rem!important}.px-3{padding-left:.75rem!important;padding-right:.75rem!important}.py-3{padding-top:.75rem!important;padding-bottom:.75rem!important}.p-4{padding:1rem!important}.pt-4{padding-top:1rem!important}.pr-4{padding-right:1rem!important}.pb-4{padding-bottom:1rem!important}.pl-4{padding-left:1rem!important}.px-4{padding-left:1rem!important;padding-right:1rem!important}.py-4{padding-top:1rem!important;padding-bottom:1rem!important}.p-5{padding:1.5rem!important}.pt-5{padding-top:1.5rem!important}.pr-5{padding-right:1.5rem!important}.pb-5{padding-bottom:1.5rem!important}.pl-5{padding-left:1.5rem!important}.px-5{padding-left:1.5rem!important;padding-right:1.5rem!important}.py-5{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.p-6{padding:3rem!important}.pt-6{padding-top:3rem!important}.pr-6{padding-right:3rem!important}.pb-6{padding-bottom:3rem!important}.pl-6{padding-left:3rem!important}.px-6{padding-left:3rem!important;padding-right:3rem!important}.py-6{padding-top:3rem!important;padding-bottom:3rem!important}.p-auto{padding:auto!important}.pt-auto{padding-top:auto!important}.pr-auto{padding-right:auto!important}.pb-auto{padding-bottom:auto!important}.pl-auto{padding-left:auto!important}.px-auto{padding-left:auto!important;padding-right:auto!important}.py-auto{padding-top:auto!important;padding-bottom:auto!important}.key-colour{border-radius:2px;box-shadow:0 2px 3px #0000001a,inset 0 0 0 1px #0000001a;height:1.5em;width:1.5em;opacity:.7}@media screen and (max-width: 768px){.key-label{font-size:.675rem}}svg{pointer-events:none}@media screen and (min-width: 1216px){.is-legend-item{min-width:130px}}@media screen and (min-width: 1408px){.is-legend-item{min-width:200px}}.loading-container{min-height:200px}:host ::ng-deep .node-box{rx:10px;ry:10px;fill-opacity:0;stroke-opacity:.5;pointer-events:auto}:host ::ng-deep .node-open{stroke-width:3}:host ::ng-deep .node-openable{cursor:pointer;stroke-opacity:1;fill-opacity:.1}:host ::ng-deep .node-openable:hover{stroke-width:3}:host ::ng-deep .group-button{fill:#fff;cursor:pointer;pointer-events:auto;stroke-dasharray:2,5;stroke:#999;stroke-width:2}:host ::ng-deep .group-button:hover{fill:#000}:host ::ng-deep .group-button:hover+text{fill:#fff}:host ::ng-deep .group-button-text{text-anchor:middle;alignment-baseline:central}:host ::ng-deep .group-border,:host ::ng-deep .group-line{stroke-dasharray:2,5;stroke:#999;stroke-width:2;fill:none}:host ::ng-deep .group-label{font-weight:700;fill:#696969;text-anchor:start;alignment-baseline:central}:host ::ng-deep .node-label{font-weight:700;fill:#000;text-anchor:middle;alignment-baseline:central}:host ::ng-deep .node-label tspan{alignment-baseline:inherit}:host ::ng-deep .bar-label{font-weight:700;fill:#696969;alignment-baseline:central}:host ::ng-deep .sibling-mask{fill:#fafafa;fill-opacity:.8;stroke-opacity:.9;stroke:#fafafa;rx:10px;ry:10px;stroke-width:3;pointer-events:none}:host ::ng-deep .mask-openable{pointer-events:all}:host ::ng-deep .mask-openable:hover{fill:none;stroke:none}:host ::ng-deep .bar-background{fill:#d3d3d3;fill-opacity:.5}:host ::ng-deep .link-path{fill:none;stroke:#999}:host ::ng-deep .bar-foreground{fill-opacity:.5}:host ::ng-deep .tip-background{fill:#000}:host ::ng-deep .tip-text{font-weight:400;alignment-baseline:central;fill:#fff}:host ::ng-deep .tip-text *{font-weight:inherit;alignment-baseline:inherit}:host ::ng-deep .tip-text-key{font-weight:700}:host ::ng-deep .tip-anchor{text-decoration:underline;color:#fff;cursor:pointer;fill:#fff}:host ::ng-deep .tip-anchor:hover{text-decoration:underline}\n"] }]
|
|
776
|
+
args: [{ selector: 'he-impact-assessments-graph', template: "<ng-container *ngIf=\"!loading; else loader\">\n <ng-container *ngIf=\"isRecalculated; else showSwitchRecalculated\">\n <div class=\"field has-addons pt-2 px-3 mb-0\" *ngIf=\"filteredImpactAssessments.length > 1\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select an Impact Assessment</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select [(ngModel)]=\"selectedImpactAssessmentId\" (change)=\"reloadChart()\" [disabled]=\"loading\">\n <option *ngFor=\"let value of filteredImpactAssessments\" [value]=\"value['@id']\">\n {{ value.name || value['@id'] }}\n </option>\n </select>\n </div>\n </div>\n </div>\n <div *ngIf=\"!noData\" class=\"field has-addons py-2 px-3\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select a model</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select [(ngModel)]=\"selectedModelId\" (change)=\"initChart()\" [disabled]=\"loading\">\n <option *ngFor=\"let model of models\" [value]=\"model['@id']\">{{ model.name || model['@id'] }}</option>\n </select>\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"!noData && !showWarnings\">\n <div class=\"columns is-centered py-2 is-size-7 is-mobile is-multiline\">\n <ng-container *ngFor=\"let legendItem of legend\">\n <div class=\"column is-narrow py-0 is-flex-mobile is-flex-direction-column is-align-items-center is-legend-item\">\n <span\n class=\"key-colour is-inline-block-tablet is-align-middle\"\n [style.backgroundColor]=\"nodeColours[legendItem.type]\"\n ></span>\n <strong class=\"has-text-black is-align-middle key-label is-pl-tablet-2\">\n <span class=\"is-hidden-desktop\">{{legendItem.mobileText}}</span>\n <span class=\"is-hidden-touch\">{{legendItem.text}}</span>\n </strong>\n </div>\n </ng-container>\n </div>\n </ng-container>\n\n <p *ngIf=\"error\" class=\"has-text-danger py-3\">\n <ng-container [ngSwitch]=\"error\">\n <p *ngSwitchCase=\"'not-found'\">Impact Assessment not found</p>\n <div *ngSwitchDefault>\n <span>An unexpected error occurred:</span>\n <p class=\"mt-1\">{{ error }}</p>\n </div>\n </ng-container>\n </p>\n\n <div *ngIf=\"showWarnings\" class=\"has-text-warning py-3 has-text-centered\">\n <p class=\"is-mb-2\" *ngFor=\"let warning of warnings\">\n <fa-icon class=\"pr-2\" icon=\"exclamation-triangle\"></fa-icon>\n <ng-container [ngSwitch]=\"warning\">\n <span *ngSwitchCase=\"'missing-terms'\">Calculations are not up to date. Some terms may not display correctly.</span>\n </ng-container>\n </p>\n <p class=\"is-underlined is-size-7\"><a (click)=\"showWarnings = false\">View chart anyway.</a></p>\n </div>\n\n <div *ngIf=\"noData\" class=\"py-3\">\n <p class=\"has-text-centered\">No chart available.</p>\n </div>\n </ng-container>\n</ng-container>\n\n<div [class.is-hidden]=\"!isRecalculated || loading || error || noData || showWarnings\" class=\"chart-container is-relative w-100\">\n <svg class=\"w-100 h-100\" #chart></svg>\n <span\n class=\"is-hidden\"\n [ngbPopover]=\"tipContent\"\n triggers=\"manual\"\n placement=\"right left auto\"\n container=\"body\"\n #t=\"ngbPopover\"\n positionTarget=\".tip-target\"\n popoverClass=\"is-narrow driver-chart-tooltip\"\n [animation]=\"true\"\n ></span>\n</div>\n\n<ng-template #loader>\n <div class=\"loading-container has-text-center my-5 py-5\">\n <fa-icon icon=\"spinner\" [pulse]=\"true\" size=\"lg\"></fa-icon>\n </div>\n</ng-template>\n\n<ng-template #showSwitchRecalculated>\n <p class=\"has-text-centered py-3\">No chart available. Switch to <code>recalculated</code> version.</p>\n</ng-template>\n\n<ng-template #tipContent let-tipData=\"tipData\">\n <p *ngIf=\"tipData.hasWeightedValue\">contribution: {{ tipData.weightedValueText }}</p>\n <p>\n <a class=\"is-dark\" target=\"_blank\" [href]=\"tipData.valueKeyHref\">value</a>: {{ tipData.valueValueText }}\n <a class=\"is-dark\" *ngIf=\"tipData.hasValue\" [href]=\"tipData.modelDocsHref\" target=\"_blank\">\n <span>Docs</span>\n <fa-icon class=\"ml-1\" icon=\"external-link-alt\" size=\"sm\"></fa-icon>\n </a>\n </p>\n <p>\n <a class=\"is-dark\" target=\"_blank\" [href]=\"tipData.modelKeyHref\">methodModel</a>: \n <a class=\"is-dark\" target=\"_blank\" [href]=\"tipData.modelValueHref\">{{ tipData.modelValue }}</a>\n </p>\n <p>\n <a class=\"is-dark\" target=\"_blank\" [href]=\"tipData.termKeyHref\">term</a>: \n <a class=\"is-dark\" target=\"_blank\" [href]=\"tipData.termValueHref\">{{ tipData.termValue }}</a>\n </p>\n</ng-template>\n", styles: [".is-marginless{margin:0!important}.is-paddingless{padding:0!important}.m-0{margin:0!important}.mt-0{margin-top:0!important}.mr-0{margin-right:0!important}.mb-0{margin-bottom:0!important}.ml-0{margin-left:0!important}.mx-0{margin-left:0!important;margin-right:0!important}.my-0{margin-top:0!important;margin-bottom:0!important}.m-1{margin:.25rem!important}.mt-1{margin-top:.25rem!important}.mr-1{margin-right:.25rem!important}.mb-1{margin-bottom:.25rem!important}.ml-1{margin-left:.25rem!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.m-2{margin:.5rem!important}.mt-2{margin-top:.5rem!important}.mr-2{margin-right:.5rem!important}.mb-2{margin-bottom:.5rem!important}.ml-2{margin-left:.5rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.m-3{margin:.75rem!important}.mt-3{margin-top:.75rem!important}.mr-3{margin-right:.75rem!important}.mb-3{margin-bottom:.75rem!important}.ml-3{margin-left:.75rem!important}.mx-3{margin-left:.75rem!important;margin-right:.75rem!important}.my-3{margin-top:.75rem!important;margin-bottom:.75rem!important}.m-4{margin:1rem!important}.mt-4{margin-top:1rem!important}.mr-4{margin-right:1rem!important}.mb-4{margin-bottom:1rem!important}.ml-4{margin-left:1rem!important}.mx-4{margin-left:1rem!important;margin-right:1rem!important}.my-4{margin-top:1rem!important;margin-bottom:1rem!important}.m-5{margin:1.5rem!important}.mt-5{margin-top:1.5rem!important}.mr-5{margin-right:1.5rem!important}.mb-5{margin-bottom:1.5rem!important}.ml-5{margin-left:1.5rem!important}.mx-5{margin-left:1.5rem!important;margin-right:1.5rem!important}.my-5{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.m-6{margin:3rem!important}.mt-6{margin-top:3rem!important}.mr-6{margin-right:3rem!important}.mb-6{margin-bottom:3rem!important}.ml-6{margin-left:3rem!important}.mx-6{margin-left:3rem!important;margin-right:3rem!important}.my-6{margin-top:3rem!important;margin-bottom:3rem!important}.m-auto{margin:auto!important}.mt-auto{margin-top:auto!important}.mr-auto{margin-right:auto!important}.mb-auto{margin-bottom:auto!important}.ml-auto{margin-left:auto!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.p-0{padding:0!important}.pt-0{padding-top:0!important}.pr-0{padding-right:0!important}.pb-0{padding-bottom:0!important}.pl-0{padding-left:0!important}.px-0{padding-left:0!important;padding-right:0!important}.py-0{padding-top:0!important;padding-bottom:0!important}.p-1{padding:.25rem!important}.pt-1{padding-top:.25rem!important}.pr-1{padding-right:.25rem!important}.pb-1{padding-bottom:.25rem!important}.pl-1{padding-left:.25rem!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.p-2{padding:.5rem!important}.pt-2{padding-top:.5rem!important}.pr-2{padding-right:.5rem!important}.pb-2{padding-bottom:.5rem!important}.pl-2{padding-left:.5rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.p-3{padding:.75rem!important}.pt-3{padding-top:.75rem!important}.pr-3{padding-right:.75rem!important}.pb-3{padding-bottom:.75rem!important}.pl-3{padding-left:.75rem!important}.px-3{padding-left:.75rem!important;padding-right:.75rem!important}.py-3{padding-top:.75rem!important;padding-bottom:.75rem!important}.p-4{padding:1rem!important}.pt-4{padding-top:1rem!important}.pr-4{padding-right:1rem!important}.pb-4{padding-bottom:1rem!important}.pl-4{padding-left:1rem!important}.px-4{padding-left:1rem!important;padding-right:1rem!important}.py-4{padding-top:1rem!important;padding-bottom:1rem!important}.p-5{padding:1.5rem!important}.pt-5{padding-top:1.5rem!important}.pr-5{padding-right:1.5rem!important}.pb-5{padding-bottom:1.5rem!important}.pl-5{padding-left:1.5rem!important}.px-5{padding-left:1.5rem!important;padding-right:1.5rem!important}.py-5{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.p-6{padding:3rem!important}.pt-6{padding-top:3rem!important}.pr-6{padding-right:3rem!important}.pb-6{padding-bottom:3rem!important}.pl-6{padding-left:3rem!important}.px-6{padding-left:3rem!important;padding-right:3rem!important}.py-6{padding-top:3rem!important;padding-bottom:3rem!important}.p-auto{padding:auto!important}.pt-auto{padding-top:auto!important}.pr-auto{padding-right:auto!important}.pb-auto{padding-bottom:auto!important}.pl-auto{padding-left:auto!important}.px-auto{padding-left:auto!important;padding-right:auto!important}.py-auto{padding-top:auto!important;padding-bottom:auto!important}.key-colour{border-radius:2px;box-shadow:0 2px 3px #0000001a,inset 0 0 0 1px #0000001a;height:1.5em;width:1.5em;opacity:.7}@media screen and (max-width: 767px){.key-label{font-size:calc(.9 * .8rem)}}svg{pointer-events:none}@media screen and (min-width: 1216px){.is-legend-item{min-width:130px}}@media screen and (min-width: 1408px){.is-legend-item{min-width:200px}}.loading-container{min-height:200px}:host ::ng-deep .node-box{rx:10px;ry:10px;fill-opacity:0;stroke-opacity:.5;pointer-events:auto}:host ::ng-deep .node-open{stroke-width:3}:host ::ng-deep .node-openable{cursor:pointer;stroke-opacity:1;fill-opacity:.1}:host ::ng-deep .node-openable:hover{stroke-width:3}:host ::ng-deep .group-button{fill:#fff;cursor:pointer;pointer-events:auto;stroke-dasharray:2,5;stroke:#999;stroke-width:2}:host ::ng-deep .group-button:hover{fill:#000}:host ::ng-deep .group-button:hover+text{fill:#fff}:host ::ng-deep .group-button-text{text-anchor:middle;alignment-baseline:central}:host ::ng-deep .group-border,:host ::ng-deep .group-line{stroke-dasharray:2,5;stroke:#999;stroke-width:2;fill:none}:host ::ng-deep .group-label{font-weight:700;fill:#696969;text-anchor:start;alignment-baseline:central}:host ::ng-deep .node-label{font-weight:700;fill:#000;text-anchor:middle;alignment-baseline:central}:host ::ng-deep .node-label tspan{alignment-baseline:inherit}:host ::ng-deep .bar-label{font-weight:700;fill:#696969;alignment-baseline:central}:host ::ng-deep .sibling-mask{fill:#fafafa;fill-opacity:.8;stroke-opacity:.9;stroke:#fafafa;rx:10px;ry:10px;stroke-width:3;pointer-events:none}:host ::ng-deep .mask-openable{pointer-events:all}:host ::ng-deep .mask-openable:hover{fill:none;stroke:none}:host ::ng-deep .bar-background{fill:#d3d3d3;fill-opacity:.5}:host ::ng-deep .link-path{fill:none;stroke:#999}:host ::ng-deep .bar-foreground{fill-opacity:.5}\n"] }]
|
|
839
777
|
}], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i1.HeSearchService }, { type: i2.HeNodeService }, { type: i3.HeEngineService }]; }, propDecorators: { chartRef: [{
|
|
840
778
|
type: ViewChild,
|
|
841
779
|
args: ['chart']
|
|
780
|
+
}], tooltipOperator: [{
|
|
781
|
+
type: ViewChild,
|
|
782
|
+
args: ['t']
|
|
842
783
|
}], impactAssessments: [{
|
|
843
784
|
type: Input
|
|
844
785
|
}], dataState: [{
|
|
845
786
|
type: Input
|
|
846
787
|
}] } });
|
|
847
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wYWN0LWFzc2Vzc21lbnRzLWdyYXBoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9pbXBhY3QtYXNzZXNzbWVudHMvaW1wYWN0LWFzc2Vzc21lbnRzLWdyYXBoL2ltcGFjdC1hc3Nlc3NtZW50cy1ncmFwaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvaW1wYWN0LWFzc2Vzc21lbnRzL2ltcGFjdC1hc3Nlc3NtZW50cy1ncmFwaC9pbXBhY3QtYXNzZXNzbWVudHMtZ3JhcGguY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFJVCxTQUFTLEVBRVQsS0FBSyxFQUlOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEcsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxjQUFjLElBQUksZ0JBQWdCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDOUQsT0FBTyxFQUFFLE1BQU0sSUFBSSxRQUFRLEVBQXVCLE1BQU0sY0FBYyxDQUFDO0FBQ3ZFLE9BQU8sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxTQUFTLElBQUksV0FBVyxFQUN4QixJQUFJLElBQUksTUFBTSxFQUlmLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxhQUFhLElBQUksZUFBZSxFQUFFLGNBQWMsSUFBSSxnQkFBZ0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUMvRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUF3QyxRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNC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QUMsQ0FBQyxLQUFLLENBQUM7UUFDbkIsTUFBTSxrQkFBa0IsR0FBRyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDdkQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbEMsS0FBSyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDdEIsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO2dCQUNmLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO2dCQUNwQixnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDeEIsS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO2FBQ3pCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7SUFDM0MsQ0FBQzs7NEhBbGdCVSwrQkFBK0I7Z0hBQS9CLCtCQUErQix1UUM3bUI1QywreEhBcUZBOzJGRHdoQmEsK0JBQStCO2tCQUwzQyxTQUFTOytCQUNFLDZCQUE2QjtxTEFtQi9CLFFBQVE7c0JBRGYsU0FBUzt1QkFBQyxPQUFPO2dCQUlWLGlCQUFpQjtzQkFEeEIsS0FBSztnQkFHRSxTQUFTO3NCQURoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBOZ1pvbmUsXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkLFxuICBBZnRlclZpZXdJbml0LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmaWx0ZXIsIGdyb3VwQnksIG1hcCwgbWVyZ2VBbGwsIG1lcmdlTWFwLCB0b0FycmF5LCBjYXRjaEVycm9yLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBmcm9tLCBvZiwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBsaW5rSG9yaXpvbnRhbCBhcyBkM0xpbmtIb3Jpem9udGFsIH0gZnJvbSAnZDMtc2hhcGUnO1xuaW1wb3J0IHsgc2VsZWN0IGFzIGQzU2VsZWN0LCBTZWxlY3Rpb24sIEJhc2VUeXBlIH0gZnJvbSAnZDMtc2VsZWN0aW9uJztcbmltcG9ydCAnZDMtdHJhbnNpdGlvbic7XG5pbXBvcnQge1xuICBoaWVyYXJjaHkgYXMgZDNIaWVyYXJjaHksXG4gIHRyZWUgYXMgZDNUcmVlLFxuICBIaWVyYXJjaHlOb2RlLFxuICBIaWVyYXJjaHlQb2ludE5vZGUsXG4gIEhpZXJhcmNoeVBvaW50TGlua1xufSBmcm9tICdkMy1oaWVyYXJjaHknO1xuaW1wb3J0IHsgZWFzZUVsYXN0aWNJbiBhcyBkM0Vhc2VFbGFzdGljSW4sIGVhc2VFbGFzdGljT3V0IGFzIGQzRWFzZUVsYXN0aWNPdXQgfSBmcm9tICdkMy1lYXNlJztcbmltcG9ydCB7IERhdGFTdGF0ZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvYXBpJztcbmltcG9ydCB7IElJbXBhY3RBc3Nlc3NtZW50SlNPTkxELCBJVGVybUpTT05MRCwgTm9kZVR5cGUsIFRlcm1UZXJtVHlwZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvc2NoZW1hJztcbmltcG9ydCB7IGdldERlZmF1bHRNb2RlbElkIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9nbG9zc2FyeSc7XG5pbXBvcnQgeyB1bmlxdWUsIHRvUHJlY2lzaW9uIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC91dGlscyc7XG5pbXBvcnQgeyBmYUV4dGVybmFsTGlua0FsdCB9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucyc7XG5cbmltcG9ydCB7IGJhc2VVcmwgfSBmcm9tICcuLi8uLi9jb21tb24vdXRpbHMnO1xuaW1wb3J0IHsgZDN3cmFwIH0gZnJvbSAnLi4vLi4vY29tbW9uL2QzLXV0aWxzJztcbmltcG9ydCB7IExldmVsLCBwYXJzZUxpbmVzLCBwYXJzZU1lc3NhZ2UgfSBmcm9tICcuLi8uLi9jb21tb24vbG9ncy11dGlscyc7XG5pbXBvcnQgeyBIZUVuZ2luZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9lbmdpbmUvZW5naW5lLnNlcnZpY2UnO1xuaW1wb3J0IHsgSGVOb2RlU2VydmljZSB9IGZyb20gJy4uLy4uL25vZGUvbm9kZS5zZXJ2aWNlJztcbmltcG9ydCB7IEhlU2VhcmNoU2VydmljZSwgSVNlYXJjaFJlc3VsdEV4dGVuZGVkIH0gZnJvbSAnLi4vLi4vc2VhcmNoL3NlYXJjaC5zZXJ2aWNlJztcbmltcG9ydCB7IG1hdGNoVGVybVR5cGUsIG1hdGNoRXhhY3RRdWVyeSwgbWF0Y2hUeXBlIH0gZnJvbSAnLi4vLi4vc2VhcmNoL3NlYXJjaC5tb2RlbCc7XG5cbmVudW0gQ2hhcnROb2RlVHlwZSB7XG4gIG1pZHBvaW50ID0gJ21pZHBvaW50JyxcbiAgZW1pc3Npb24gPSAnZW1pc3Npb24nLFxuICBlbmRwb2ludCA9ICdlbmRwb2ludCcsXG4gIGlucHV0ID0gJ2lucHV0JyxcbiAgb3BlcmF0aW9uID0gJ29wZXJhdGlvbicsXG4gIHJvb3QgPSAncm9vdCdcbn1cblxuaW50ZXJmYWNlIE5vZGVEYXR1bSB7XG4gIGlkOiBzdHJpbmc7XG4gIHRlcm06IHN0cmluZztcbiAgbW9kZWxJZDogc3RyaW5nO1xuICBtb2RlbE5hbWU/OiBzdHJpbmc7XG4gIG1vZGVsRG9jcz86IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgdHlwZTogQ2hhcnROb2RlVHlwZTtcbiAgdmFsdWU6IG51bWJlciB8IG51bGw7XG4gIHdlaWdodGVkVmFsdWU6IG51bWJlciB8IG51bGw7XG4gIGZyYWN0aW9uPzogbnVtYmVyO1xuICBjaGlsZHJlbj86IE5vZGVEYXR1bVtdO1xuICBncm91cD86IGJvb2xlYW47XG4gIHNob3dCYXI/OiBib29sZWFuO1xuICB1bml0czogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgQ2hhcnROb2RlIGV4dGVuZHMgSGllcmFyY2h5UG9pbnROb2RlPE5vZGVEYXR1bT4ge1xuICBfY2hpbGRyZW4/OiBDaGFydE5vZGVbXTsgLy8gY2hpbGRyZW4gb2YgY29sbGFwc2VkIG5vZGVzXG4gIF9ncm91cENoaWxkcmVuPzogQ2hhcnROb2RlW107IC8vIGFsbCBjaGlsZHJlbiB3aGVuIGdyb3VwIGNsb3NlZDsgdW5ncm91cGVkIGNoaWxkcmVuIHdoZW4gZ3JvdXAgb3BlblxuICBfb3Blbj86IGJvb2xlYW47XG4gIF9ncmV5ZWQ/OiBib29sZWFuO1xuICBfZ3JvdXBPcGVuPzogYm9vbGVhbjtcbiAgX3RpbWVvdXQ/OiBOb2RlSlMuVGltZW91dDtcbn1cblxuaW50ZXJmYWNlIEhOb2RlIGV4dGVuZHMgSGllcmFyY2h5Tm9kZTxOb2RlRGF0dW0+IHtcbiAgX2NoaWxkcmVuPzogSE5vZGVbXTtcbiAgX2dyb3VwQ2hpbGRyZW4/OiBITm9kZVtdO1xuICBfZ3JvdXBPcGVuPzogYm9vbGVhbjtcbiAgX29wZW4/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgTGluayBleHRlbmRzIEhpZXJhcmNoeVBvaW50TGluazxOb2RlRGF0dW0+IHtcbiAgc291cmNlOiBDaGFydE5vZGU7XG4gIHRhcmdldDogQ2hhcnROb2RlO1xufVxuXG50eXBlIE5vZGVTZWxlY3Rpb24gPSBTZWxlY3Rpb248U1ZHR0VsZW1lbnQgfCBCYXNlVHlwZSwgQ2hhcnROb2RlLCBTVkdHRWxlbWVudCwgdW5rbm93bj47XG50eXBlIExpbmtTZWxlY3Rpb24gPSBTZWxlY3Rpb248U1ZHUGF0aEVsZW1lbnQgfCBCYXNlVHlwZSwgTGluaywgU1ZHR0VsZW1lbnQsIHVua25vd24+O1xuXG5pbnRlcmZhY2UgSUlucHV0TG9nIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgdW5pdHM6IHN0cmluZztcbiAgd2VpZ2h0ZWRWYWx1ZTogbnVtYmVyO1xuICB2YWx1ZTogbnVtYmVyO1xuICBvcGVyYXRpb25zOiB7XG4gICAgd2VpZ2h0ZWRWYWx1ZTogbnVtYmVyO1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgdW5pdHM6IHN0cmluZztcbiAgICB2YWx1ZTogbnVtYmVyO1xuICB9W107XG59XG5pbnRlcmZhY2UgSUxvZyB7XG4gIGluZGljYXRvcjogc3RyaW5nO1xuICBjb250cmlidXRvcjogc3RyaW5nO1xuICBjb2VmZmljaWVudDogbnVtYmVyO1xuICB2YWx1ZTogbnVtYmVyO1xuICB3ZWlnaHRlZFZhbHVlOiBudW1iZXI7XG4gIG1vZGVsSWQ6IHN0cmluZztcbiAgaW5wdXRzPzogSUlucHV0TG9nW107XG59XG5cbmNvbnN0IHBhcnNlTG9nID0gKGRhdGE6IGFueSk6IElMb2cgPT4gKHtcbiAgaW5kaWNhdG9yOiBkYXRhWydrZXkvdGVybSddIHx8IGRhdGEudGVybSB8fCBkYXRhLmluZGljYXRvcixcbiAgY29udHJpYnV0b3I6IGRhdGEubm9kZSxcbiAgY29lZmZpY2llbnQ6ICtkYXRhLmNvZWZmaWNpZW50LFxuICBtb2RlbElkOiBkYXRhLm1vZGVsIHx8ICdVbmtub3duJyxcbiAgd2VpZ2h0ZWRWYWx1ZTogK2RhdGEudmFsdWUgKiArZGF0YS5jb2VmZmljaWVudCxcbiAgdmFsdWU6ICtkYXRhLnZhbHVlXG59KTtcblxuY29uc3QgZmlsdGVyVGVybVR5cGVzID0gW1xuICBUZXJtVGVybVR5cGUucmVzb3VyY2VVc2UsXG4gIFRlcm1UZXJtVHlwZS5lbWlzc2lvbixcbiAgVGVybVRlcm1UeXBlLmNoYXJhY3RlcmlzZWRJbmRpY2F0b3IsXG4gIFRlcm1UZXJtVHlwZS5lbmRwb2ludEluZGljYXRvcixcbiAgVGVybVRlcm1UeXBlLm1vZGVsXG5dO1xuY29uc3Qgbm9kZUNvbG91cnMgPSB7XG4gIFtDaGFydE5vZGVUeXBlLmVuZHBvaW50XTogJ2JsdWUnLFxuICBbQ2hhcnROb2RlVHlwZS5taWRwb2ludF06ICdyZWQnLFxuICBbQ2hhcnROb2RlVHlwZS5lbWlzc2lvbl06ICdwdXJwbGUnLFxuICBbQ2hhcnROb2RlVHlwZS5pbnB1dF06ICdncmVlbicsXG4gIFtDaGFydE5vZGVUeXBlLm9wZXJhdGlvbl06ICdvcmFuZ2UnXG59O1xuY29uc3Qgd2lkdGggPSA4MDA7XG5jb25zdCBtYXJnaW4gPSB7IHRvcDogMTAsIHJpZ2h0OiAyMCwgYm90dG9tOiAxMCwgbGVmdDogMjAgfTtcbmNvbnN0IGZvbnRTaXplID0gTWF0aC5mbG9vcih3aWR0aCAvIDEwMCk7XG5jb25zdCBub2RlUGFkZGluZyA9IGZvbnRTaXplIC8gMjtcbmNvbnN0IGxpbmVIZWlnaHQgPSBmb250U2l6ZSAqIDEuMjtcbmNvbnN0IGJhckhlaWdodCA9IGxpbmVIZWlnaHQ7XG5cbmNvbnN0IG5vZGVIZWlnaHQgPSBub2RlUGFkZGluZyAqIDIgKyAyICogbGluZUhlaWdodCArIGJhckhlaWdodDtcbmNvbnN0IG5vZGVXaWR0aCA9IG5vZGVIZWlnaHQgKiAyICogMS42MTg7XG5jb25zdCBub2RlQ29udGVudFdpZHRoID0gbm9kZVdpZHRoIC0gbm9kZVBhZGRpbmcgKiAyO1xuY29uc3QgbGF5ZXJTcGFjaW5nID0gKHdpZHRoIC0gbWFyZ2luLmxlZnQgLSBtYXJnaW4ucmlnaHQgLSBub2RlV2lkdGggKiA1KSAvIDQ7XG5jb25zdCBub2RlTWFyZ2luID0gbm9kZVBhZGRpbmcgKiAwLjc1O1xuY29uc3Qgbm9kZVNwYWNpbmdGYWN0b3IgPSAobm9kZUhlaWdodCArIG5vZGVNYXJnaW4gKiAyKSAvIG5vZGVIZWlnaHQ7XG5jb25zdCBub2RlRHVyYXRpb24gPSA2MDA7XG5jb25zdCBsaW5rRHVyYXRpb24gPSAyMDA7XG5jb25zdCBncm91cERlbGF5ID0gbm9kZUR1cmF0aW9uIC0gMTAwO1xuY29uc3Qgbm9uTENBSW5kaWNhdG9yc0lkID0gJ25vbkxDQUluZGljYXRvcnMnO1xuY29uc3QgZ3JleWVkT3BhY2l0eSA9IDAuMjtcbmNvbnN0IGRlZmF1bHRJbmRpY2F0b3JzTW9kZWxJZCA9ICdkZWZhdWx0SW5kaWNhdG9yc01vZGVsSWQnO1xuY29uc3QgZGVmYXVsdEluZGljYXRvcnNNb2RlbE5hbWUgPSAnRGVmYXVsdCBJbmRpY2F0b3JzIChtdWx0aS1tb2RlbCknO1xuY29uc3QgZ3JvdXBPdmVybGFwID0gbGluZUhlaWdodCAtIG5vZGVQYWRkaW5nIC0gbm9kZU1hcmdpbjtcbmNvbnN0IGdyb3VwTm9kZVNwYWNlID0gbm9kZUhlaWdodCAtIDIgKiBncm91cE92ZXJsYXA7XG5cbmNvbnN0IGNvbGxhcHNlQ2hpbGRyZW4gPSAobm9kZTogQ2hhcnROb2RlIHwgSE5vZGUpID0+IHtcbiAgbm9kZS5fY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuIHx8IG5vZGUuX2NoaWxkcmVuO1xuICBub2RlLmNoaWxkcmVuID0gbnVsbDtcbiAgcmV0dXJuIG5vZGU7XG59O1xuXG5jb25zdCByZXN0b3JlQ2hpbGRyZW4gPSAobm9kZTogQ2hhcnROb2RlIHwgSE5vZGUpID0+IHtcbiAgbm9kZS5jaGlsZHJlbiA9IG5vZGUuX2NoaWxkcmVuO1xuICBub2RlLl9jaGlsZHJlbiA9IG51bGw7XG4gIHJldHVybiBub2RlO1xufTtcblxuY29uc3Qgd3JhcCA9IChzZWxlY3Rpb246IFNlbGVjdGlvbjxTVkdUZXh0RWxlbWVudCwgQ2hhcnROb2RlLCBhbnksIGFueT4sIG1heFdpZHRoID0gbm9kZUNvbnRlbnRXaWR0aCkgPT4ge1xuICBzZWxlY3Rpb24uZWFjaChmdW5jdGlvbihkKSB7XG4gICAgY29uc3QgdCA9IGQzU2VsZWN0PFNWR1RleHRFbGVtZW50LCBDaGFydE5vZGU+KHRoaXMpO1xuICAgIGQzd3JhcDxDaGFydE5vZGU+KHQsIHtcbiAgICAgIG1heFdpZHRoLFxuICAgICAgbWF4TGluZXM6IGQuZGF0YS5zaG93QmFyID8gMiA6IDMsXG4gICAgICB2Y2VudHJlOiAhZC5kYXRhLnNob3dCYXIsXG4gICAgICB3b3JkczogWy4uLmQuZGF0YS5sYWJlbC5zcGxpdCgvXFxzKy8pLCBkLmRhdGEudW5pdHNdLFxuICAgICAgb3duTGluZVdvcmQ6IGQuZGF0YS51bml0cyxcbiAgICAgIG5IZWlnaHQ6IG5vZGVIZWlnaHQsXG4gICAgICBsSGVpZ2h0OiBsaW5lSGVpZ2h0XG4gICAgfSk7XG4gIH0pO1xufTtcblxuY29uc3Qgc2V0Tm9kZVNpemUgPSAoc2VsZWN0aW9uKSA9PiBzZWxlY3Rpb24uYXR0cignd2lkdGgnLCBub2RlV2lkdGgpLmF0dHIoJ2hlaWdodCcsIG5vZGVIZWlnaHQpO1xuXG5jb25zdCBmb3JtYXRCYXIgPSAoc2VsZWN0aW9uOiBOb2RlU2VsZWN0aW9uKSA9PlxuICBzZWxlY3Rpb25cbiAgICAuYXR0cignaGVpZ2h0JywgYmFySGVpZ2h0KVxuICAgIC5hdHRyKCdyeCcsICcxJylcbiAgICAuYXR0cigncnknLCAnMScpXG4gICAgLmF0dHIoJ3knLCBub2RlSGVpZ2h0IC0gbm9kZVBhZGRpbmcgLSBiYXJIZWlnaHQpXG4gICAgLmF0dHIoJ3gnLCBub2RlUGFkZGluZyk7XG5cbmNvbnN0IGlzVHlwZVdpdGhvdXRWYWx1ZSA9IChub2RlRGF0dW0pID0+IFtDaGFydE5vZGVUeXBlLmlucHV0LCBDaGFydE5vZGVUeXBlLm9wZXJhdGlvbl0uaW5jbHVkZXMobm9kZURhdHVtLmRhdGEudHlwZSk7XG5cbmNvbnN0IGdldFdlaWdodGVkVmFsdWVUZXh0ID0gKG5vZGVEYXR1bSkgPT5cbiAgYCR7dG9QcmVjaXNpb24obm9kZURhdHVtLmRhdGEud2VpZ2h0ZWRWYWx1ZSwgMyl9JHtcbiAgICBub2RlRGF0dW0ucGFyZW50Py5kYXRhLnZhbHVlID09PSBudWxsXG4gICAgICA/ICcnXG4gICAgICA6IGAgb2YgJHt0b1ByZWNpc2lvbihub2RlRGF0dW0ucGFyZW50Py5kYXRhLnZhbHVlIHx8IG5vZGVEYXR1bS5wYXJlbnQ/LmRhdGEud2VpZ2h0ZWRWYWx1ZSwgMyl9YFxuICB9ICR7bm9kZURhdHVtLnBhcmVudD8uZGF0YS52YWx1ZSA/IG5vZGVEYXR1bS5wYXJlbnQ/LmRhdGEudW5pdHMgOiBub2RlRGF0dW0ucGFyZW50Py5wYXJlbnQ/LmRhdGEudW5pdHN9IC0gYDtcblxuY29uc3QgZ2VuZXJhdGVUaXBEYXRhID0gKG5vZGVEYXR1bSkgPT5cbiAgW1xuICAgIG5vZGVEYXR1bS5kYXRhLndlaWdodGVkVmFsdWVcbiAgICAgID8gW1xuICAgICAgICAgIHsgdGV4dDogJ2NvbnRyaWJ1dGlvbicgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0ZXh0OiBnZXRXZWlnaHRlZFZhbHVlVGV4dChub2RlRGF0dW0pXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IHRleHQ6IGBEb2NzIGAsIGhyZWY6IG5vZGVEYXR1bS5kYXRhLm1vZGVsRG9jcyB9XG4gICAgICAgIF1cbiAgICAgIDogbnVsbCxcblxuICAgIG5vZGVEYXR1bS5kYXRhLnZhbHVlXG4gICAgICA/IFtcbiAgICAgICAgICB7IHRleHQ6ICd2YWx1ZScsIGhyZWY6IGAke2Jhc2VVcmwoKX0vc2NoZW1hL0luZGljYXRvciN2YWx1ZWAgfSxcbiAgICAgICAgICB7IHRleHQ6IGAke3RvUHJlY2lzaW9uKG5vZGVEYXR1bS5kYXRhLnZhbHVlLCAzKX0gJHtub2RlRGF0dW0uZGF0YS51bml0c30gLSBgIH0sXG4gICAgICAgICAgeyB0ZXh0OiBgRG9jcyBgLCBocmVmOiBub2RlRGF0dW0uZGF0YS5tb2RlbERvY3MgfVxuICAgICAgICBdXG4gICAgICA6IFtcbiAgICAgICAgICB7IHRleHQ6ICd2YWx1ZScgfSxcbiAgICAgICAgICB7IHRleHQ6IGlzVHlwZVdpdGhvdXRWYWx1ZShub2RlRGF0dW0pID8gJ25vIGRhdGEgKHVuZGVyIGRldmVsb3BtZW50KScgOiAnbm8gY29udHJpYnV0aW9uJyB9XG4gICAgICAgIF0sXG4gICAgW1xuICAgICAgeyB0ZXh0OiAnbWV0aG9kTW9kZWwnLCBocmVmOiBgJHtiYXNlVXJsKCl9L3NjaGVtYS9JbmRpY2F0b3IjbWV0aG9kTW9kZWxgIH0sXG4gICAgICB7IHRleHQ6IGAke25vZGVEYXR1bS5kYXRhLm1vZGVsTmFtZX1gLCBocmVmOiBgJHtiYXNlVXJsKCl9L21vZGVsLyR7bm9kZURhdHVtLmRhdGEubW9kZWxJZH1gIH1cbiAgICBdLFxuICAgIFtcbiAgICAgIHsgdGV4dDogJ3Rlcm0nLCBocmVmOiBgJHtiYXNlVXJsKCl9L3NjaGVtYS9JbmRpY2F0b3IjdGVybWAgfSxcbiAgICAgIHsgdGV4dDogbm9kZURhdHVtLmRhdGEudGVybSwgaHJlZjogYCR7YmFzZVVybCgpfS90ZXJtLyR7bm9kZURhdHVtLmRhdGEuaWR9YCB9XG4gICAgXVxuICBdLmZpbHRlcihCb29sZWFuKTtcblxuY29uc3QgcmlnaHRUaXBQYXRoID0gKHcsIGgsIHRhaWwpID0+XG4gIGBNJHstdGFpbH0sJHtoIC8gMn0gbCR7dGFpbH0sLSR7dGFpbH0gdi0ke2ggLyAyIC0gdGFpbH0gaCR7d30gdiR7aH0gaC0ke3d9IHYtJHtoIC8gMiAtIHRhaWx9IHpgO1xuXG5jb25zdCBsZWZ0VGlwUGF0aCA9ICh3LCBoLCB0YWlsKSA9PlxuICBgTSR7MH0sJHswfSBoJHt3fSB2JHtoLzItdGFpbH0gbCR7dGFpbH0sJHt0YWlsfSBsJHstdGFpbH0sJHt0YWlsfSB2JHtoIC8gMiAtIHRhaWx9IGgkey13fSB6YDtcblxuY29uc3QgYWRkVG9vbHRpcCA9IChzZWxlY3Rpb246IE5vZGVTZWxlY3Rpb24sIHsgdGlwU2VsZWN0aW9uIH0pID0+IHtcbiAgbGV0IGhvdmVyaW5nVGlwID0gZmFsc2U7XG4gIGxldCBob3ZlcmluZ05vZGUgPSBmYWxzZTtcbiAgbGV0IGxhc3ROb2RlSWQ6IHN0cmluZztcblxuICBjb25zdCBjbG9zZVRpcCA9ICgpID0+IHtcbiAgICB0aXBTZWxlY3Rpb24uc3R5bGUoJ3BvaW50ZXItZXZlbnRzJywgJ25vbmUnKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMTAwKS5zdHlsZSgnb3BhY2l0eScsIDApO1xuICAgIHRpcFNlbGVjdGlvbi5zdHlsZSgnZGlzcGxheScsICdub25lJyk7XG4gICAgbGFzdE5vZGVJZCA9IG51bGw7XG4gIH07XG5cbiAgY29uc3Qgc3RhcnRDbG9zZVRpcCA9ICgpID0+IHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghaG92ZXJpbmdUaXAgJiYgIWhvdmVyaW5nTm9kZSkge1xuICAgICAgICBjbG9zZVRpcCgpO1xuICAgICAgfVxuICAgIH0sIDEwMCk7XG4gIH07XG5cbiAgdGlwU2VsZWN0aW9uXG4gICAgLm9uKCdwb2ludGVyZW50ZXInLCAoKSA9PiB7XG4gICAgICBob3ZlcmluZ1RpcCA9IHRydWU7XG4gICAgfSlcbiAgICAub24oJ3BvaW50ZXJsZWF2ZScsICgpID0+IHtcbiAgICAgIGhvdmVyaW5nVGlwID0gZmFsc2U7XG4gICAgICBzdGFydENsb3NlVGlwKCk7XG4gICAgfSk7XG5cbiAgc2VsZWN0aW9uXG4gICAgLm9uKCdjbGljaycsIChfZSwgZCkgPT4ge1xuICAgICAgY2xvc2VUaXAoKTtcbiAgICAgIGNsZWFyVGltZW91dChkLl90aW1lb3V0KTtcbiAgICB9KVxuICAgIC5vbigncG9pbnRlcmVudGVyJywgKGV2ZW50LCBub2RlRGF0dW0pID0+IHtcbiAgICAgIGhvdmVyaW5nTm9kZSA9IHRydWU7XG4gICAgICBpZiAobGFzdE5vZGVJZCA9PT0gbm9kZURhdHVtLmRhdGEuaWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2xvc2VUaXAoKTtcbiAgICAgIGxhc3ROb2RlSWQgPSBub2RlRGF0dW0uZGF0YS5pZDtcblxuICAgICAgbm9kZURhdHVtLl90aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRpcFNlbGVjdGlvbi5zdHlsZSgnZGlzcGxheScsIG51bGwpLnN0eWxlKCdwb2ludGVyLWV2ZW50cycsICdhbGwnKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMTAwKS5zdHlsZSgnb3BhY2l0eScsIDEpO1xuICAgICAgICBjb25zdCB0aXBCYWNrZ3JvdW5kID0gdGlwU2VsZWN0aW9uLnNlbGVjdEFsbCgncGF0aCcpLmRhdGEoWyxdKS5qb2luKCdwYXRoJykuY2xhc3NlZCgndGlwLWJhY2tncm91bmQnLCB0cnVlKTtcbiAgICAgICAgY29uc3QgdGlwVGV4dCA9IHRpcFNlbGVjdGlvbi5zZWxlY3RBbGwoJ2cnKS5kYXRhKFssXSkuam9pbignZycpLmNsYXNzZWQoJ3RpcC10ZXh0JywgdHJ1ZSk7XG5cbiAgICAgICAgY29uc3QgdGlwUm93ID0gdGlwVGV4dFxuICAgICAgICAgIC5zZWxlY3RBbGwoJ2cgPiBnJylcbiAgICAgICAgICAuZGF0YShnZW5lcmF0ZVRpcERhdGEobm9kZURhdHVtKSlcbiAgICAgICAgICAuam9pbignZycpXG4gICAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIChfLCBpKSA9PiBgdHJhbnNsYXRlKDAsJHtpICogZm9udFNpemUgKiAxLjUgKyBmb250U2l6ZSAvIDJ9KWApO1xuXG4gICAgICAgIHRpcFJvdy5hcHBlbmQoJ3RleHQnKS5lYWNoKGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICBjb25zdCB0ID0gZDNTZWxlY3QodGhpcyk7XG4gICAgICAgICAgY29uc3QgYU9yVHNwYW4gPSBkWzBdLmhyZWYgPyB0LmFwcGVuZCgnYScpLmF0dHIoJ2hyZWYnLCBkWzBdLmhyZWYpIDogdC5hcHBlbmQoJ3RzcGFuJyk7XG4gICAgICAgICAgYU9yVHNwYW4uYXBwZW5kKCd0c3BhbicpLnRleHQoZFswXS50ZXh0KTtcbiAgICAgICAgICBhT3JUc3Bhbi5jbGFzc2VkKCd0aXAtdGV4dC1rZXknLCB0cnVlKTtcbiAgICAgICAgICB0LmFwcGVuZCgndHNwYW4nKS50ZXh0KCc6ICcpO1xuICAgICAgICAgIGlmIChkWzFdICYmICFkWzFdLmhyZWYpIHtcbiAgICAgICAgICAgIHQuYXBwZW5kKCd0c3BhbicpLnRleHQoZFsxXS50ZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBzdmcgaWNvbiBjYW5ub3QgYmUgY2hpbGQgb2YgdGV4dCBzbyBwb3NpdGlvbiBmaW5hbCBsaW5rIG1hbnVhbGx5XG4gICAgICAgIHRpcFJvd1xuICAgICAgICAgIC5maWx0ZXIoKGQpID0+IGRbZC5sZW5ndGggLSAxXS5ocmVmKVxuICAgICAgICAgIC5lYWNoKGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgd2lkdGg6IHRleHRXaWR0aCB9ID0gdGhpcy5nZXRCQm94KCk7XG4gICAgICAgICAgICBjb25zdCBhID0gZDNTZWxlY3QodGhpcylcbiAgICAgICAgICAgICAgLmFwcGVuZCgnYScpXG4gICAgICAgICAgICAgIC5hdHRyKCdocmVmJywgZFtkLmxlbmd0aCAtIDFdLmhyZWYpXG4gICAgICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKCR7dGV4dFdpZHRoICsgbm9kZVBhZGRpbmd9LDApYCk7XG5cbiAgICAgICAgICAgIGEuYXBwZW5kKCd0ZXh0JykudGV4dChkW2QubGVuZ3RoIC0gMV0udGV4dCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHsgd2lkdGg6IGFXaWR0aCB9ID0gKGEubm9kZSgpIGFzIHVua25vd24gYXMgU1ZHQUVsZW1lbnQpLmdldEJCb3goKTtcblxuICAgICAgICAgICAgY29uc3QgZyA9IGEuYXBwZW5kKCdnJykuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgke2FXaWR0aCArIG5vZGVQYWRkaW5nfSwkey1mb250U2l6ZSAvIDJ9KWApO1xuXG4gICAgICAgICAgICBnLmFwcGVuZCgncmVjdCcpXG4gICAgICAgICAgICAgIC5hdHRyKCd3aWR0aCcsIGZvbnRTaXplKVxuICAgICAgICAgICAgICAuYXR0cignaGVpZ2h0JywgZm9udFNpemUpXG4gICAgICAgICAgICAgIC5hdHRyKCdmaWxsJywgJ25vbmUnKVxuICAgICAgICAgICAgICAuYXR0cignc3Ryb2tlJywgJ25vbmUnKTtcblxuICAgICAgICAgICAgZy5hcHBlbmQoJ3N2ZycpXG4gICAgICAgICAgICAgIC5hdHRyKCd2aWV3Qm94JywgYDAgMCAke2ZhRXh0ZXJuYWxMaW5rQWx0Lmljb25bMF19ICR7ZmFFeHRlcm5hbExpbmtBbHQuaWNvblsxXX1gKVxuICAgICAgICAgICAgICAuYXR0cignd2lkdGgnLCBmb250U2l6ZSlcbiAgICAgICAgICAgICAgLmF0dHIoJ2hlaWdodCcsIGZvbnRTaXplKVxuICAgICAgICAgICAgICAuYXBwZW5kKCdwYXRoJylcbiAgICAgICAgICAgICAgLmF0dHIoJ2QnLCBmYUV4dGVybmFsTGlua0FsdC5pY29uWzRdKVxuICAgICAgICAgICAgICAuYXR0cignZmlsbCcsICd3aGl0ZScpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRpcFRleHQuc2VsZWN0QWxsKCdhJykuY2xhc3NlZCgndGlwLWFuY2hvcicsIHRydWUpLmF0dHIoJ3RhcmdldCcsICdfYmxhbmsnKTtcblxuICAgICAgICBjb25zdCB7IHdpZHRoOiB0aXBXaWR0aCwgaGVpZ2h0OiB0aXBIZWlnaHQgfSA9IHRpcFRleHQubm9kZSgpLmdldEJCb3goKTtcbiAgICAgICAgY29uc3Qgb3JpZW50TGVmdCA9IG5vZGVEYXR1bS55ICsgdGlwV2lkdGggKyBub2RlV2lkdGggPiB3aWR0aCAtIG1hcmdpbi5sZWZ0O1xuXG4gICAgICAgIGNvbnN0IHRpcFBhdGhBcmdzOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPSBbdGlwV2lkdGggKyBub2RlUGFkZGluZyAqIDIsIHRpcEhlaWdodCArIG5vZGVQYWRkaW5nICogMiwgNV07XG4gICAgICAgIHRpcEJhY2tncm91bmRcbiAgICAgICAgICAuYXR0cignZCcsIG9yaWVudExlZnQgPyBsZWZ0VGlwUGF0aCguLi50aXBQYXRoQXJncykgOiByaWdodFRpcFBhdGgoLi4udGlwUGF0aEFyZ3MpKVxuICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKCR7LW5vZGVQYWRkaW5nfSwkey1ub2RlUGFkZGluZ30pYClcbiAgICAgICAgICAuYXR0cignc3Ryb2tlLWxpbmVqb2luJywgJ3JvdW5kJylcbiAgICAgICAgICAuYXR0cignc3Ryb2tlLXdpZHRoJywgMylcbiAgICAgICAgICAuYXR0cignc3Ryb2tlJywgJ2JsYWNrJyk7XG4gICAgICAgIGNvbnN0IHhPZmZzZXQgPSBvcmllbnRMZWZ0ID8gLXRpcFdpZHRoIC0gbm9kZVBhZGRpbmcqMiA6IG5vZGVXaWR0aCArIG5vZGVQYWRkaW5nICogMjtcblxuICAgICAgICB0aXBTZWxlY3Rpb24uYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgke25vZGVEYXR1bS55K3hPZmZzZXR9LCR7bm9kZURhdHVtLngrbm9kZUhlaWdodC8yLXRpcEhlaWdodC8yfSlgKTtcbiAgICAgIH0sIDI1MCk7XG4gICAgfSlcbiAgICAub24oJ3BvaW50ZXJsZWF2ZScsIChfZSwgZCkgPT4ge1xuICAgICAgaG92ZXJpbmdOb2RlID0gZmFsc2U7XG4gICAgICBzdGFydENsb3NlVGlwKCk7XG4gICAgICBjbGVhclRpbWVvdXQoZC5fdGltZW91dCk7XG4gICAgfSk7XG5cbiAgcmV0dXJuIHNlbGVjdGlvbjtcbn07XG5cbmNvbnN0IG1lcmdlZE5vZGVzID0gKHNlbGVjdGlvbjogTm9kZVNlbGVjdGlvbiwgeyB0aXBTZWxlY3Rpb24gfSkgPT4ge1xuICBzZWxlY3Rpb25cbiAgICAuc2VsZWN0QWxsPFNWR1JlY3RFbGVtZW50LCBDaGFydE5vZGU+KCcubm9kZS1ib3gnKVxuICAgIC5jbGFzc2VkKCdub2RlLW9wZW5hYmxlJywgKGQpID0+ICEhZC5oZWlnaHQpXG4gICAgLmNsYXNzZWQoJ25vZGUtb3BlbicsIChkKSA9PiBkLl9vcGVuKVxuICAgIC5jYWxsKHNldE5vZGVTaXplKVxuICAgIC5hdHRyKCdzdHJva2UnLCAoeyBkYXRhIH0pID0+IG5vZGVDb2xvdXJzW2RhdGEudHlwZV0pXG4gICAgLmF0dHIoJ2ZpbGwnLCAoZCkgPT4gbm9kZUNvbG91cnNbZC5kYXRhLnR5cGVdKVxuICAgIC5zdHlsZSgndXNlci1zZWxlY3QnLCB3aW5kb3cuaW5uZXJXaWR0aCA8IDc2OCA/ICdub25lJyA6IG51bGwpO1xuXG4gIHNlbGVjdGlvblxuICAgIC5maWx0ZXIoKGQpID0+ICFkLmRhdGEuZ3JvdXAgJiYgZC5kYXRhLmlkICE9PSBub25MQ0FJbmRpY2F0b3JzSWQpXG4gICAgLmNhbGwoYWRkVG9vbHRpcCwgeyB0aXBTZWxlY3Rpb24gfSk7XG5cbiAgc2VsZWN0aW9uXG4gICAgLnNlbGVjdEFsbDxTVkdUZXh0RWxlbWVudCwgQ2hhcnROb2RlPignLm5vZGUtbGFiZWwnKVxuICAgIC5hdHRyKCd5JywgKGQpID0+IChkLmRhdGEuc2hvd0JhciA/IGxpbmVIZWlnaHQgLyAyICsgbm9kZVBhZGRpbmcgLyAyIDogMCkpXG4gICAgLmF0dHIoJ3gnLCBub2RlV2lkdGggLyAyKTtcblxuICBjb25zdCBncm91cHMgPSBzZWxlY3Rpb24uZmlsdGVyKChkKSA9PiBkLmRhdGEuZ3JvdXApO1xuXG4gIGdyb3Vwc1xuICAgIC5zZWxlY3RBbGw8U1ZHVGV4dEVsZW1lbnQsIENoYXJ0Tm9kZT4oJy5ncm91cC1ib3JkZXInKVxuICAgIC5hdHRyKCd3aWR0aCcsIG5vZGVXaWR0aCArIG5vZGVQYWRkaW5nICogMilcbiAgICAuYXR0cigneCcsIC1ub2RlUGFkZGluZylcbiAgICAuYXR0cigneScsIG5vZGVIZWlnaHQgLSAobGluZUhlaWdodCArIG5vZGVQYWRkaW5nICogMikpXG4gICAgLmF0dHIoJ29wYWNpdHknLCAoZCkgPT4gKGQuX2dyZXllZCAmJiBkLl9ncm91cE9wZW4gPyBncmV5ZWRPcGFjaXR5IDogZC5fZ3JvdXBPcGVuID8gMSA6IDApKVxuICAgIC5hdHRyKFxuICAgICAgJ2hlaWdodCcsXG4gICAgICAoZCkgPT5cbiAgICAgICAgTWF0aC5hYnMoZC5wYXJlbnQuX2dyb3VwQ2hpbGRyZW4ubGVuZ3RoIC0gZC5wYXJlbnQuY2hpbGRyZW4ubGVuZ3RoKSAqIChub2RlSGVpZ2h0ICogbm9kZVNwYWNpbmdGYWN0b3IpICtcbiAgICAgICAgbm9kZVBhZGRpbmcgK1xuICAgICAgICAobGluZUhlaWdodCArIG5vZGVQYWRkaW5nICogMikgLyAyXG4gICAgKTtcblxuICBjb25zdCBncm91cExhYmVscyA9IGdyb3Vwc1xuICAgIC5zZWxlY3RBbGw8U1ZHVGV4dEVsZW1lbnQsIENoYXJ0Tm9kZT4oJy5ncm91cC1sYWJlbCcpXG4gICAgLmF0dHIoJ3knLCBub2RlSGVpZ2h0IC8gMilcbiAgICAuYXR0cigneCcsIG5vZGVQYWRkaW5nKVxuICAgIC50ZXh0KChkKSA9PiBkLmRhdGEubGFiZWwpXG4gICAgLmF0dHIoJ29wYWNpdHknLCAoZCkgPT4gKGQuX2dyb3VwT3BlbiA/IDAgOiBkLl9ncmV5ZWQgPyBncmV5ZWRPcGFjaXR5IDogMSkpO1xuXG4gIC8vIHVubmVlZGVkIHdpdGggY3VycmVudCBkaW1lbnNpb25zXG4gIC8vIGdyb3VwTGFiZWxzLmVhY2goZnVuY3Rpb24oKSB7XG4gIC8vICAgY29uc3QgdGV4dCA9IGQzU2VsZWN0PFNWR1RleHRFbGVtZW50LCBDaGFydE5vZGU+KHRoaXMpO1xuICAvLyAgIGNvbnN0IHRleHRXaWR0aCA9ICh0ZXh0Lm5vZGUoKSBhcyBTVkdUZXh0RWxlbWVudCkuZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCk7XG4gIC8vICAgY29uc3QgbGluZSA9IGQzU2VsZWN0PFNWR0xpbmVFbGVtZW50LCBDaGFydE5vZGU+KHRoaXMubmV4dFNpYmxpbmcgYXMgU1ZHTGluZUVsZW1lbnQpO1xuICAvLyAgIGxpbmVcbiAgLy8gICAgIC5jbGFzc2VkKCdncm91cC1saW5lJywgdHJ1ZSlcbiAgLy8gICAgIC5hdHRyKCd4MScsIHRleHRXaWR0aCArIG5vZGVQYWRkaW5nICogMilcbiAgLy8gICAgIC5hdHRyKCd5MScsIG5vZGVIZWlnaHQgLyAyKVxuICAvLyAgICAgLmF0dHIoJ3gyJywgKG5vZGVXaWR0aCAqIDUpIC8gNyAtIG5vZGVQYWRkaW5nKVxuICAvLyAgICAgLmF0dHIoJ3kyJywgbm9kZUhlaWdodCAvIDIpXG4gIC8vICAgICAuYXR0cignb3BhY2l0eScsIChkKSA9PiAoZC5fZ3JvdXBPcGVuID8gMCA6IGQuX2dyZXllZCA/IGdyZXllZE9wYWNpdHkgOiAxKSk7XG4gIC8vIH0pO1xuXG4gIGNvbnN0IHNldEdyb3VwQnV0dG9uWFkgPSAoc2VsKSA9PlxuICAgIHNlbFxuICAgICAgLmF0dHIoJ3dpZHRoJywgKG5vZGVXaWR0aCAqIDIpIC8gNylcbiAgICAgIC5hdHRyKCdoZWlnaHQnLCAoZCkgPT4gKGQuX2dyb3VwT3BlbiA/IGxpbmVIZWlnaHQgKyBub2RlUGFkZGluZyAqIDIgOiBub2RlUGFkZGluZyAqIDIgKyBsaW5lSGVpZ2h0KSlcbiAgICAgIC5hdHRyKCd4JywgKGQpID0+IChkLl9ncm91cE9wZW4gPyAobm9kZVdpZHRoICogMi41KSAvIDcgOiAobm9kZVdpZHRoICogNSkgLyA3IC0gbm9kZVBhZGRpbmcpKVxuICAgICAgLmF0dHIoJ3knLCAoZCkgPT5cbiAgICAgICAgZC5fZ3JvdXBPcGVuXG4gICAgICAgICAgPyBncm91cE92ZXJsYXAgKyAoZ3JvdXBOb2RlU3BhY2UgLSAobGluZUhlaWdodCArIG5vZGVQYWRkaW5nICogMikpIC8gMlxuICAgICAgICAgIDogbm9kZVBhZGRpbmcgKyBsaW5lSGVpZ2h0IC8gMlxuICAgICAgKTtcblxuICBncm91cHNcbiAgICAuc2VsZWN0QWxsPFNWR1JlY3RFbGVtZW50LCBDaGFydE5vZGU+KCcuZ3JvdXAtYnV0dG9uJylcbiAgICAuY2FsbChzZXRHcm91cEJ1dHRvblhZKVxuICAgIC5zdHlsZSgncG9pbnRlci1ldmVudHMnLCAoZCkgPT4gKGQuX2dyZXllZCA/ICdub25lJyA6ICdhdXRvJykpXG4gICAgLnN0eWxlKCdzdHJva2Utb3BhY2l0eScsIChkKSA9PiAoZC5fZ3JleWVkID8gZ3JleWVkT3BhY2l0eSA6IDEpKTtcblxuICBncm91cHNcbiAgICAuc2VsZWN0QWxsPFNWR1RleHRFbGVtZW50LCBDaGFydE5vZGU+KCcuZ3JvdXAtYnV0dG9uLXRleHQnKVxuICAgIC50ZXh0KChkKSA9PiAoZC5fZ3JvdXBPcGVuID8gJ0hpZGUnIDogJ1Nob3cnKSlcbiAgICAuYXR0cigneCcsIChkKSA9PiAoZC5fZ3JvdXBPcGVuID8gbm9kZVdpZHRoIC8gMiA6IChub2RlV2lkdGggKiA2KSAvIDcgLSBub2RlUGFkZGluZykpXG4gICAgLmF0dHIoJ3knLCAoZCkgPT4gKGQuX2dyb3VwT3BlbiA/IG5vZGVNYXJnaW4gKyBsaW5lSGVpZ2h0ICsgbGluZUhlaWdodCAvIDIgOiBub2RlSGVpZ2h0IC8gMikpXG4gICAgLmF0dHIoJ2ZvbnQtc2l6ZScsIChkKSA9PiBgJHtmb250U2l6ZSAqIDEuM31weGApO1xuXG4gIHNlbGVjdGlvbi5zZWxlY3RBbGwoJy5zaWJsaW5nLW1hc2snKS5yZW1vdmUoKTtcblxuICBzZWxlY3Rpb25cbiAgICAuZmlsdGVyKChkKSA9PiBkLl9ncmV5ZWQgJiYgIWQuZGF0YS5ncm91cClcbiAgICAuYXBwZW5kKCdyZWN0JylcbiAgICAuY2xhc3NlZCgnbm9kZS1vcGVuYWJsZScsIChkKSA9PiAhIWQuaGVpZ2h0KVxuICAgIC5jbGFzc2VkKCdzaWJsaW5nLW1hc2sgbWFzay1vcGVuYWJsZScsIHRydWUpXG4gICAgLmNhbGwoc2V0Tm9kZVNpemUpO1xuXG4gIHNlbGVjdGlvblxuICAgIC5maWx0ZXIoKGQpID0+IGQuX2dyZXllZCAmJiBkLmRhdGEuZ3JvdXApXG4gICAgLmFwcGVuZCgncmVjdCcpXG4gICAgLmNsYXNzZWQoJ3NpYmxpbmctbWFzaycsIHRydWUpXG4gICAgLmNhbGwoc2V0R3JvdXBCdXR0b25YWSk7XG5cbiAgcmV0dXJuIHNlbGVjdGlvbjtcbn07XG5cbmNvbnN0IGVudGVyTm9kZXMgPSAoc2VsZWN0aW9uOiBOb2RlU2VsZWN0aW9uKSA9PiB7XG4gIGNvbnN0IG5vZGVzID0gc2VsZWN0aW9uLmZpbHRlcigoZCkgPT4gZC5kYXRhLnR5cGUgIT09IENoYXJ0Tm9kZVR5cGUucm9vdCAmJiAhZC5kYXRhLmdyb3VwKTtcblxuICBub2Rlcy5hcHBlbmQoJ3JlY3QnKS5jbGFzc2VkKCdub2RlLWJveCcsIHRydWUpO1xuXG4gIG5vZGVzXG4gICAgLmFwcGVuZCgndGV4dCcpXG4gICAgLmNsYXNzZWQoJ25vZGUtbGFiZWwnLCB0cnVlKVxuICAgIC50ZXh0KCh7IGRhdGEgfSkgPT4gZGF0YS5sYWJlbCArICcgJyArIGRhdGEudW5pdHMpXG4gICAgLmF0dHIoJ29wYWNpdHknLCAwKTtcblxuICAvLyBUZXh0IGVsZW1lbnRzIG11c3QgYmUgcmVuZGVyZWQgYmVmb3JlIHdlIGNhbiBjYWxjdWxhdGUgd3JhcHBpbmdcbiAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgY29uc3QgbGFiZWxzID0gbm9kZXMuc2VsZWN0QWxsPFNWR1RleHRFbGVtZW50LCBDaGFydE5vZGU+KCcubm9kZS1sYWJlbCcpLmNhbGwod3JhcCk7XG4gICAgbGFiZWxzLmF0dHIoJ29wYWNpdHknLCAxKTtcbiAgfSk7XG5cbiAgY29uc3QgZ3JvdXBzID0gc2VsZWN0aW9uLmZpbHRlcigoZCkgPT4gZC5kYXRhLmdyb3VwKTtcblxuICBncm91cHMuYXBwZW5kKCdyZWN0JykuYXR0cignY2xhc3MnLCAnZ3JvdXAtYm9yZGVyJyk7XG4gIGdyb3Vwcy5hcHBlbmQoJ3RleHQnKS5hdHRyKCdjbGFzcycsICdncm91cC1sYWJlbCcpO1xuICAvLyBncm91cHMuYXBwZW5kKCdsaW5lJykuYXR0cignY2xhc3MnLCAnZ3JvdXAtbGluZScpO1xuICBncm91cHMuYXBwZW5kKCdyZWN0JykuYXR0cignY2xhc3MnLCAnZ3JvdXAtYnV0dG9uJyk7XG4gIGdyb3Vwcy5hcHBlbmQoJ3RleHQnKS5hdHRyKCdjbGFzcycsICdncm91cC1idXR0b24tdGV4dCcpO1xuXG4gIGNvbnN0IHdpdGhCYXIgPSBub2Rlcy5maWx0ZXIoKGQpID0+IGQuZGF0YS5zaG93QmFyKTtcblxuICB3aXRoQmFyXG4gICAgLmZpbHRlcigoZCkgPT4gZC5kYXRhLmZyYWN0aW9uID4gMClcbiAgICAuYXBwZW5kKCdyZWN0JylcbiAgICAuY2xhc3NlZCgnYmFyLWJhY2tncm91bmQnLCB0cnVlKVxuICAgIC5hdHRyKCd3aWR0aCcsIG5vZGVDb250ZW50V2lkdGgpXG4gICAgLmNhbGwoZm9ybWF0QmFyKTtcblxuICB3aXRoQmFyXG4gICAgLmFwcGVuZCgncmVjdCcpXG4gICAgLmNsYXNzZWQoJ2Jhci1mb3JlZ3JvdW5kJywgdHJ1ZSlcbiAgICAuY2FsbChmb3JtYXRCYXIpXG4gICAgLmF0dHIoJ3dpZHRoJywgKGQpID0+IGQuZGF0YS5mcmFjdGlvbiAqIG5vZGVDb250ZW50V2lkdGgpXG4gICAgLmF0dHIoJ2ZpbGwnLCAoZCkgPT4gbm9kZUNvbG91cnNbZC5kYXRhLnR5cGVdKTtcblxuICB3aXRoQmFyXG4gICAgLmFwcGVuZCgndGV4dCcpXG4gICAgLmNsYXNzZWQoJ2Jhci1sYWJlbCcsIHRydWUpXG4gICAgLnRleHQoKHsgZGF0YSB9KSA9PlxuICAgICAgZGF0YS5mcmFjdGlvbiA9PT0gMFxuICAgICAgICA/ICdubyBjb250cmlidXRpb24nXG4gICAgICAgIDogYCR7TWF0aC5yb3VuZCgxMDAgKiBkYXRhLmZyYWN0aW9uKX0lICR7TWF0aC5yb3VuZCgxMDAgKiBkYXRhLmZyYWN0aW9uKSA9PT0gMCA/ICcgKHJvdW5kZWQpJyA6ICcnfWBcbiAgICApXG4gICAgLmF0dHIoJ3RleHQtYW5jaG9yJywgKGQpID0+IChkLmRhdGEuZnJhY3Rpb24gPT09IDAgPyAnbWlkZGxlJyA6IGQuZGF0YS5mcmFjdGlvbiA+IDAuNyA/ICdlbmQnIDogJ3N0YXJ0JykpXG4gICAgLmF0dHIoJ3gnLCAoZCkgPT5cbiAgICAgIGQuZGF0YS5mcmFjdGlvbiA9PT0gMFxuICAgICAgICA/IG5vZGVXaWR0aCAvIDJcbiAgICAgICAgOiBkLmRhdGEuZnJhY3Rpb24gKiBub2RlQ29udGVudFdpZHRoICsgbm9kZVBhZGRpbmcgKyAoZC5kYXRhLmZyYWN0aW9uID4gMC43ID8gLTQgOiA0KVxuICAgIClcbiAgICAuYXR0cigneScsIG5vZGVIZWlnaHQgLSBub2RlUGFkZGluZyAtIGJhckhlaWdodCAvIDIpO1xuXG4gIHJldHVybiBzZWxlY3Rpb247XG59O1xuXG5jb25zdCBtZXJnZWRMaW5rcyA9IChzZWxlY3Rpb246IExpbmtTZWxlY3Rpb24sIHsgdG9nZ2xpbmdHcm91cCwgc3dpdGNoaW5nU2VsZWN0aW9uIH0pID0+XG4gIHNlbGVjdGlvblxuICAgIC5zdHlsZSgnc3Ryb2tlJywgKGQpID0+IHtcbiAgICAgIGNvbnN0IGNvbG91cnMgPSB7XG4gICAgICAgIFtDaGFydE5vZGVUeXBlLm1pZHBvaW50XTogbm9kZUNvbG91cnNbQ2hhcnROb2RlVHlwZS5taWRwb2ludF0sXG4gICAgICAgIFtDaGFydE5vZGVUeXBlLmVuZHBvaW50XTogbm9kZUNvbG91cnNbQ2hhcnROb2RlVHlwZS5lbmRwb2ludF0sXG4gICAgICAgIFtDaGFydE5vZGVUeXBlLmVtaXNzaW9uXTogbm9kZUNvbG91cnNbQ2hhcnROb2RlVHlwZS5lbWlzc2lvbl1cbiAgICAgIH07XG4gICAgICByZXR1cm4gKGQudGFyZ2V0Ll9vcGVuICYmIGNvbG91cnNbZC5zb3VyY2UuZGF0YS50eXBlXSkgfHwgbnVsbDtcbiAgICB9KVxuICAgIC5hdHRyKCdzdHJva2UtZGFzaGFycmF5JywgKGQpID0+IChkLnRhcmdldC5kYXRhLmdyb3VwID8gJzIsNScgOiBudWxsKSlcbiAgICAuYXR0cignc3Ryb2tlLXdpZHRoJywgKGQpID0+IChkLnRhcmdldC5fb3BlbiA/IDMgOiBkLnRhcmdldC5fZ3JvdXBPcGVuID8gMCA6IDIpKVxuICAgIC5hdHRyKCdzdHJva2Utb3BhY2l0eScsIChkKSA9PiAoZC50YXJnZXQuX2dyZXllZCA/IDAuMSA6IDAuNikpXG4gICAgLnRyYW5zaXRpb24oKVxuICAgIC5kdXJhdGlvbihsaW5rRHVyYXRpb24pXG4gICAgLmRlbGF5KChkKSA9PiB7XG4gICAgICBjb25zdCBncm91cENsb3NpbmcgPSB0b2dnbGluZ0dyb3VwICYmICFkLnRhcmdldC5wYXJlbnQ/LmNoaWxkcmVuPy5maW5kKChuKSA9PiBuLmRhdGEuZ3JvdXApPy5fZ3JvdXBPcGVuO1xuICAgICAgcmV0dXJuIGdyb3VwQ2xvc2luZ1xuICAgICAgICA/IGdyb3VwRGVsYXlcbiAgICAgICAgOiAoc3dpdGNoaW5nU2VsZWN0aW9uID8gbm9kZUR1cmF0aW9uIDogMCkgKyBkLnNvdXJjZS5jaGlsZHJlbj8uaW5kZXhPZihkLnRhcmdldCkgKiAxMDtcbiAgICB9KVxuICAgIC5hdHRyKCdvcGFjaXR5JywgMSlcbiAgICAuYXR0cignZCcsIChkKSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXREeSA9IGQudGFyZ2V0Ll9ncm91cE9wZW4gPyBub2RlUGFkZGluZyArIGxpbmVIZWlnaHQgLyAyICsgbm9kZU1hcmdpbiAqIDIgOiBub2RlSGVpZ2h0IC8gMjtcbiAgICAgIHJldHVybiBkM0xpbmtIb3Jpem9udGFsKCkoe1xuICAgICAgICBzb3VyY2U6IFtkLnNvdXJjZS55ICsgbm9kZVdpZHRoLCBkLnNvdXJjZS54ICsgbm9kZUhlaWdodCAvIDJdLFxuICAgICAgICB0YXJnZXQ6IFtkLnRhcmdldC55LCBkLnRhcmdldC54ICsgdGFyZ2V0RHldXG4gICAgICB9KTtcbiAgICB9KTtcblxuY29uc3QgZ3JvdXBCeVBlcmNlbnRhZ2UgPSAobm9kZSkgPT5cbiAgW0NoYXJ0Tm9kZVR5cGUuZW5kcG9pbnQsIENoYXJ0Tm9kZVR5cGUubWlkcG9pbnQsIENoYXJ0Tm9kZVR5cGUuZW1pc3Npb25dLmluY2x1ZGVzKG5vZGUuZGF0YS50eXBlKTtcblxuY29uc3QgZ3JvdXBQZXJjZW50YWdlID0gKG5vZGUsIHBlcmNlbnRhZ2UgPSAwLjAyKSA9PiB7XG4gIGNvbnN0IGdyb3VwZWQgPSBub2RlLl9jaGlsZHJlbj8uZmlsdGVyKChjaGlsZCkgPT4gY2hpbGQuZGF0YS5mcmFjdGlvbiA8IHBlcmNlbnRhZ2UpO1xuICBpZiAobm9kZS5fY2hpbGRyZW4/Lmxlbmd0aCA+IDYgJiYgZ3JvdXBlZD8ubGVuZ3RoID4gMSkge1xuICAgIGNvbnN0IHR5cGUgPSBub2RlLl9jaGlsZHJlblswXS5kYXRhLnR5cGU7XG4gICAgY29uc3QgZ3JvdXBOb2RlID0ge1xuICAgICAgLi4uZDNIaWVyYXJjaHkoe1xuICAgICAgICBpZDogYCR7dHlwZX0tZ3JvdXBgLFxuICAgICAgICBsYWJlbDogYCR7Z3JvdXBlZC5sZW5ndGh9IG1vcmUgdW5kZXIgJHtNYXRoLnJvdW5kKHBlcmNlbnRhZ2UgKiAxMDApfSUuYCxcbiAgICAgICAgd2VpZ2h0ZWRWYWx1ZTogbnVsbCxcbiAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIGdyb3VwOiB0cnVlXG4gICAgICB9KSxcbiAgICAgIGRlcHRoOiBub2RlLmRlcHRoICsgMSxcbiAgICAgIGhlaWdodDogMSxcbiAgICAgIHBhcmVudDogbm9kZVxuICAgIH07XG4gICAgY29uc3Qgbm90R3JvdXBlZCA9IG5vZGUuX2NoaWxkcmVuPy5maWx0ZXIoKGNoaWxkKSA9PiBjaGlsZC5kYXRhLmZyYWN0aW9uID49IHBlcmNlbnRhZ2UpO1xuICAgIG5vZGUuX2NoaWxkcmVuLnNwbGljZShub3RHcm91cGVkLmxlbmd0aCwgMCwgZ3JvdXBOb2RlKTtcbiAgICBub3RHcm91cGVkLnB1c2goZ3JvdXBOb2RlKTtcbiAgICBub2RlLl9ncm91cENoaWxkcmVuID0gbm9kZS5fY2hpbGRyZW47XG4gICAgbm9kZS5fY2hpbGRyZW4gPSBub3RHcm91cGVkO1xuICB9XG59O1xuXG5jb25zdCBzaG93QmFyID0gKG5vZGUpID0+XG4gIFtcbiAgICBub2RlLnBhcmVudD8uZGF0YS50eXBlICE9PSBDaGFydE5vZGVUeXBlLnJvb3QsXG4gICAgbm9kZS5wYXJlbnQ/LmRhdGEuaWQgIT09IG5vbkxDQUluZGljYXRvcnNJZCxcbiAgICAhbm9kZS5kYXRhLmdyb3VwLFxuICAgIG5vZGUuZGF0YS5mcmFjdGlvbiA+PSAwXG4gIF0uZXZlcnkoQm9vbGVhbik7XG5cbmNvbnN0IGdldFVuaXRzQW5kTGFiZWwgPSAodGVybTogUGFydGlhbDxJVGVybUpTT05MRD4sIGZhbGxiYWNrTGFiZWwgPSAndW5rbm93biB0ZXJtJykgPT4ge1xuICBjb25zdCBsYWJlbCA9IHRlcm0/Lm5hbWUgfHwgdGVybT8uWydAaWQnXSB8fCBmYWxsYmFja0xhYmVsO1xuICBjb25zdCB1bml0cyA9IGAoJHt0ZXJtPy51bml0cyB8fCAndW5rbm93biB1bml0cyd9KWA7XG4gIHJldHVybiB7IGxhYmVsOiBsYWJlbC5yZXBsYWNlKHVuaXRzLCAnJykudHJpbSgpLCB0ZXJtOiBsYWJlbCwgdW5pdHMgfTtcbn07XG5cbmNvbnN0IHF1ZXJ5ID0gKHNob3VsZCkgPT4gKHtcbiAgZmllbGRzOiBbJ0B0eXBlJywgJ0BpZCcsICduYW1lJywgJ3VuaXRzJywgJ3Rlcm1UeXBlJ10sXG4gIGxpbWl0OiAxMDAwMCxcbiAgcXVlcnk6IHtcbiAgICBib29sOiB7XG4gICAgICBtdXN0OiBbbWF0Y2hUeXBlKE5vZGVUeXBlLlRlcm0pXSxcbiAgICAgIHNob3VsZCxcbiAgICAgIG1pbmltdW1fc2hvdWxkX21hdGNoOiAxXG4gICAgfVxuICB9XG59KTtcblxudHlwZSBUZXJtID0gSVRlcm1KU09OTEQgJiBJU2VhcmNoUmVzdWx0RXh0ZW5kZWQgJiB7IGRvY3M/OiBzdHJpbmcgfTtcblxuY29uc3QgbGVnZW5kID0gW1xuICB7IHR5cGU6IENoYXJ0Tm9kZVR5cGUuZW5kcG9pbnQsIG1vYmlsZVRleHQ6ICdFbmRwb2ludCcsIHRleHQ6ICdFbmRwb2ludCBJbmRpY2F0b3InIH0sXG4gIHsgdHlwZTogQ2hhcnROb2RlVHlwZS5taWRwb2ludCwgdGV4dDogJ0NoYXJhY3RlcmlzZWQgSW5kaWNhdG9yJywgbW9iaWxlVGV4dDogJ0ltcGFjdCcgfSxcbiAgeyB0eXBlOiBDaGFydE5vZGVUeXBlLmVtaXNzaW9uLCBtb2JpbGVUZXh0OiAnRW1pc3Npb24nLCB0ZXh0OiAnRW1pc3Npb24gb3IgUmVzb3VyY2UgVXNlJyB9LFxuICB7IHR5cGU6IENoYXJ0Tm9kZVR5cGUuaW5wdXQsIHRleHQ6ICdJbnB1dCcsIG1vYmlsZVRleHQ6ICdJbnB1dCcgfSxcbiAgeyB0eXBlOiBDaGFydE5vZGVUeXBlLm9wZXJhdGlvbiwgdGV4dDogJ09wZXJhdGlvbicsIG1vYmlsZVRleHQ6ICdPcGVyYXRpb24nIH1cbl07XG5cbmNvbnN0IHdhcm5pbmdzID0gKGxvZ3M6IElMb2dbXSwgdGVybXM6IHsgW2lkOiBzdHJpbmddOiBUZXJtIH0pID0+IFtcbiAgIWxvZ3MuZXZlcnkobG9nID0+IHRlcm1zW2xvZy5pbmRpY2F0b3JdICYmIHRlcm1zW2xvZy5jb250cmlidXRvcl0pICYmICdtaXNzaW5nLXRlcm1zJ1xuXS5maWx0ZXIoQm9vbGVhbik7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2hlLWltcGFjdC1hc3Nlc3NtZW50cy1ncmFwaCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbXBhY3QtYXNzZXNzbWVudHMtZ3JhcGguY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pbXBhY3QtYXNzZXNzbWVudHMtZ3JhcGguY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBJbXBhY3RBc3Nlc3NtZW50c0dyYXBoQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgaW5pdGlhbFRlcm1zOiB7IFtpZDogc3RyaW5nXTogVGVybSB9O1xuICBwcml2YXRlIGFsbFRlcm1zOiB7IFtpZDogc3RyaW5nXTogVGVybSB9O1xuXG4gIHByaXZhdGUgcm9vdD86IEhOb2RlO1xuICBwcml2YXRlIG5vZGU6IE5vZGVTZWxlY3Rpb247XG4gIHByaXZhdGUgbGluazogTGlua1NlbGVjdGlvbjtcbiAgcHJpdmF0ZSB0b29sdGlwOiBTZWxlY3Rpb248U1ZHR0VsZW1lbnQsIGFueSwgSFRNTEVsZW1lbnQsIHVua25vd24+O1xuICBwcml2YXRlIHN2ZzogU2VsZWN0aW9uPFNWR1NWR0VsZW1lbnQsIGFueSwgSFRNTEVsZW1lbnQsIHVua25vd24+O1xuICBwcml2YXRlIHlNaW46IG51bWJlcjtcbiAgcHJpdmF0ZSB5VG90YWw6IG51bWJlcjtcbiAgcHJpdmF0ZSBsb2dzQWxsTW9kZWxzOiBJTG9nW107XG5cbiAgQFZpZXdDaGlsZCgnY2hhcnQnKVxuICBwcml2YXRlIGNoYXJ0UmVmPzogRWxlbWVudFJlZjtcblxuICBASW5wdXQoKVxuICBwcml2YXRlIGltcGFjdEFzc2Vzc21lbnRzOiBJSW1wYWN0QXNzZXNzbWVudEpTT05MRFtdID0gW107XG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgZGF0YVN0YXRlID0gRGF0YVN0YXRlLnJlY2FsY3VsYXRlZDtcblxuICBwdWJsaWMgbG9hZGluZyA9IHRydWU7XG4gIHB1YmxpYyBub2RlQ29sb3VycyA9IG5vZGVDb2xvdXJzO1xuICBwdWJsaWMgbm9EYXRhID0gZmFsc2U7XG4gIHB1YmxpYyBlcnJvcj86IGFueTtcbiAgcHVibGljIHdhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgc2hvd1dhcm5pbmdzID0gZmFsc2U7XG4gIHB1YmxpYyBzZWxlY3RlZEltcGFjdEFzc2Vzc21lbnRJZDogc3RyaW5nO1xuICBwdWJsaWMgZmlsdGVyZWRJbXBhY3RBc3Nlc3NtZW50czogSUltcGFjdEFzc2Vzc21lbnRKU09OTERbXTtcbiAgcHVibGljIHNlbGVjdGVkTW9kZWxJZDogc3RyaW5nO1xuICBwdWJsaWMgbW9kZWxzOiBQYXJ0aWFsPElUZXJtSlNPTkxEPltdO1xuICBwdWJsaWMgbGVnZW5kID0gbGVnZW5kO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSBzZWFyY2hTZXJ2aWNlOiBIZVNlYXJjaFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBub2RlU2VydmljZTogSGVOb2RlU2VydmljZSxcbiAgICBwcml2YXRlIGVuZ2luZVNlcnZpY2U6IEhlRW5naW5lU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5pdEltcGFjdEFzc2Vzc21lbnRzKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICByZXR1cm4gdGhpcy5yZWxvYWRDaGFydCgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmICgnaW1wYWN0QXNzZXNzbWVudHMnIGluIGNoYW5nZXMpIHtcbiAgICAgIHRoaXMuaW5pdEltcGFjdEFzc2Vzc21lbnRzKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlbG9hZENoYXJ0KCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRJbXBhY3RBc3Nlc3NtZW50cygpIHtcbiAgICB0aGlzLmZpbHRlcmVkSW1wYWN0QXNzZXNzbWVudHMgPSB0aGlzLmltcGFjdEFzc2Vzc21lbnRzLmZpbHRlcigoaWEpID0+IGlhLmVuZHBvaW50cz8ubGVuZ3RoIHx8IGlhLmltcGFjdHM/Lmxlbmd0aCk7XG4gICAgdGhpcy5zZWxlY3RlZEltcGFjdEFzc2Vzc21lbnRJZCA9IHRoaXMuc2VsZWN0ZWRJbXBhY3RBc3Nlc3NtZW50SWQgfHwgdGhpcy5maWx0ZXJlZEltcGFjdEFzc2Vzc21lbnRzPy5bMF0/LlsnQGlkJ107XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRJbml0aWFsVGVybXMoKSB7XG4gICAgY29uc3QgeyByZXN1bHRzOiB0ZXJtcyB9ID0gYXdhaXQgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaDxJVGVybUpTT05MRCwgTm9kZVR5cGUuVGVybT4oXG4gICAgICBxdWVyeShmaWx0ZXJUZXJtVHlwZXMubWFwKCh0ZXJtVHlwZSkgPT4gbWF0Y2hUZXJtVHlwZSh0ZXJtVHlwZSkpKVxuICAgICk7XG4gICAgY29uc3QgYXVnbWVudGVkVGVybXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHRlcm1zLm1hcChhc3luYyAodDogVGVybSkgPT4ge1xuICAgICAgICBpZiAodC50ZXJtVHlwZSA9PT0gJ21vZGVsJykge1xuICAgICAgICAgIGNvbnN0IG1vZGVsID0gYXdhaXQgdGhpcy5lbmdpbmVTZXJ2aWNlLm1vZGVsKHsgbW9kZWw6IHRbJ0BpZCddIH0pO1xuICAgICAgICAgIHQuZG9jcyA9IG1vZGVsPy5hcGlEb2NzUGF0aCB8fCBtb2RlbD8uZG9jUGF0aCB8fCBtb2RlbD8ucGF0aDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLmluaXRpYWxUZXJtcyA9IE9iamVjdC5mcm9tRW50cmllcyhhdWdtZW50ZWRUZXJtcy5tYXAoKHRlcm0pID0+IFt0ZXJtWydAaWQnXSwgdGVybV0pKTtcbiAgICByZXR1cm4gdGhpcy5pbml0aWFsVGVybXM7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRMb2dUZXJtcyhsb2dzOiBJTG9nW10pIHtcbiAgICBjb25zdCBpbnB1dElkcyA9IHVuaXF1ZShsb2dzLmZsYXRNYXAoKGwpID0+IFtsLmNvbnRyaWJ1dG9yLCBsLmluZGljYXRvcl0pLmZpbHRlcigodGVybUlkKSA9PiAhdGhpcy5pbml0aWFsVGVybXNbdGVybUlkXSkpO1xuICAgIGNvbnN0IHsgcmVzdWx0czogaW5wdXRzIH0gPSBhd2FpdCB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoPElUZXJtSlNPTkxELCBOb2RlVHlwZS5UZXJtPihcbiAgICAgIHF1ZXJ5KGlucHV0SWRzLm1hcCgoaWQpID0+IG1hdGNoRXhhY3RRdWVyeSgnQGlkJywgaWQpKSlcbiAgICApO1xuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoaW5wdXRzLm1hcCgodGVybSkgPT4gW3Rlcm1bJ0BpZCddLCB0ZXJtXSkpO1xuICB9XG5cbiAgcHVibGljIGdldCBpc1JlY2FsY3VsYXRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU3RhdGUgPT09IERhdGFTdGF0ZS5yZWNhbGN1bGF0ZWQ7XG4gIH1cblxuICBwdWJsaWMgcmVsb2FkQ2hhcnQoKSB7XG4gICAgY29uc3QgaW1wYWN0QXNzZXNzbWVudCA9XG4gICAgICB0aGlzLmZpbHRlcmVkSW1wYWN0QXNzZXNzbWVudHMuZmluZCgoaWEpID0+IGlhWydAaWQnXSA9PT0gdGhpcy5zZWxlY3RlZEltcGFjdEFzc2Vzc21lbnRJZCkgfHxcbiAgICAgIHRoaXMuZmlsdGVyZWRJbXBhY3RBc3Nlc3NtZW50c1swXTtcbiAgICBjb25zdCBpbmRpY2F0b3JzID0gW1xuICAgICAgLi4uKGltcGFjdEFzc2Vzc21lbnQ/LmVuZHBvaW50cyB8fCBbXSksXG4gICAgICAuLi4oaW1wYWN0QXNzZXNzbWVudD8uaW1wYWN0cyB8fCBbXSlcbiAgICBdO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSBvZihpbXBhY3RBc3Nlc3NtZW50KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoKSA9PiAodGhpcy5sb2FkaW5nID0gdHJ1ZSkpLFxuICAgICAgICBtZXJnZU1hcChub2RlID0+ICh0aGlzLmluaXRpYWxUZXJtcyA/IG9mKG5vZGUpIDogZnJvbSh0aGlzLmxvYWRJbml0aWFsVGVybXMoKSkucGlwZShtYXAoKCkgPT4gbm9kZSkpKSksXG4gICAgICAgIG1lcmdlTWFwKG5vZGUgPT5cbiAgICAgICAgICB0aGlzLm5vZGVTZXJ2aWNlLmdldExvZyh7XG4gICAgICAgICAgICAuLi5ub2RlLFxuICAgICAgICAgICAgZGF0YVN0YXRlOiBEYXRhU3RhdGUucmVjYWxjdWxhdGVkXG4gICAgICAgICAgfSlcbiAgICAgICAgKSxcbiAgICAgICAgbWFwKCh2YWx1ZSkgPT4gKHZhbHVlID8gcGFyc2VMaW5lcyh2YWx1ZSkgOiBbXSkpLFxuICAgICAgICBtZXJnZUFsbCgpLFxuICAgICAgICBmaWx0ZXIoKHsgZGF0YSB9KSA9PiBkYXRhLmxvZ2dlciA9PT0gJ2hlc3RpYV9lYXJ0aC5tb2RlbHMnICYmIGRhdGEubGV2ZWwgPT09IExldmVsLmRlYnVnKSxcbiAgICAgICAgbWFwKCh7IGRhdGEgfSkgPT4gcGFyc2VNZXNzYWdlKGRhdGEubWVzc2FnZSkpLFxuICAgICAgICBmaWx0ZXIoKG1lc3NhZ2UpID0+ICdub2RlJyBpbiBtZXNzYWdlKSxcbiAgICAgICAgbWFwKHBhcnNlTG9nKSxcbiAgICAgICAgZmlsdGVyKChsb2cpID0+IFtcbiAgICAgICAgICAhIWxvZy5pbmRpY2F0b3IsXG4gICAgICAgICAgISFsb2cuY29udHJpYnV0b3IsXG4gICAgICAgICAgIWlzTmFOKGxvZy53ZWlnaHRlZFZhbHVlKSxcbiAgICAgICAgICBsb2cuY29lZmZpY2llbnQgPiAwLFxuICAgICAgICAgIGluZGljYXRvcnMuc29tZSgoZXJ1KSA9PiBlcnUudGVybVsnQGlkJ10gPT09IGxvZy5pbmRpY2F0b3IpXG4gICAgICAgIF0uZXZlcnkoQm9vbGVhbikpLFxuICAgICAgICBncm91cEJ5KChsb2cpID0+IFtsb2cuaW5kaWNhdG9yLCBsb2cuY29udHJpYnV0b3IsIGxvZy5tb2RlbElkXS5qb2luKCcvJykpLFxuICAgICAgICBtZXJnZU1hcCgoZ3JvdXApID0+IGdyb3VwLnBpcGUodG9BcnJheSgpKSksXG4gICAgICAgIG1hcCgodmFsdWVzOiBJTG9nW10pID0+IHtcbiAgICAgICAgICBjb25zdCBsb2cgPSB2YWx1ZXNbMF07XG4gICAgICAgICAgY29uc3QgeyB3ZWlnaHRlZFRvdGFsLCB0b3RhbCB9ID0gdmFsdWVzLnJlZHVjZShcbiAgICAgICAgICAgIChwcmV2LCBjdXJyKSA9PiAoe1xuICAgICAgICAgICAgICB3ZWlnaHRlZFRvdGFsOiBwcmV2LndlaWdodGVkVG90YWwgKyBjdXJyLndlaWdodGVkVmFsdWUsXG4gICAgICAgICAgICAgIHRvdGFsOiBwcmV2LnRvdGFsICsgY3Vyci52YWx1ZVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB7IHdlaWdodGVkVG90YWw6IDAsIHRvdGFsOiAwIH1cbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgaW5wdXRzT2JqID0gKGltcGFjdEFzc2Vzc21lbnQuZW1pc3Npb25zUmVzb3VyY2VVc2UgfHwgW10pXG4gICAgICAgICAgICAuZmlsdGVyKChlcnUpID0+IGVydS50ZXJtWydAaWQnXSA9PT0gbG9nLmNvbnRyaWJ1dG9yICYmIGVydS5pbnB1dHM/Lmxlbmd0aClcbiAgICAgICAgICAgIC5yZWR1Y2UoKGFjYywgZXJ1KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGlucHV0SWQgPSBlcnUuaW5wdXRzLm1hcCgoaSkgPT4gaVsnQGlkJ10pLmpvaW4oJzsnKTtcbiAgICAgICAgICAgICAgY29uc3QgY3VycmVudE9wZXJhdGlvbnMgPSBlcnUub3BlcmF0aW9uXG4gICAgICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBpZDogZXJ1Lm9wZXJhdGlvblsnQGlkJ10sXG4gICAgICAgICAgICAgICAgICAgICAgLi4uZ2V0VW5pdHNBbmRMYWJlbChlcnUub3BlcmF0aW9uKSxcbiAgICAgICAgICAgICAgICAgICAgICBtb2RlbElkOiBsb2cubW9kZWxJZCxcbiAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHRlZFZhbHVlOiBlcnUudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIDogW107XG5cbiAgICAgICAgICAgICAgYWNjW2lucHV0SWRdID0gYWNjW2lucHV0SWRdXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmFjY1tpbnB1dElkXSxcbiAgICAgICAgICAgICAgICAgICAgd2VpZ2h0ZWRWYWx1ZTogYWNjW2lucHV0SWRdLndlaWdodGVkVmFsdWUgKyBlcnUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIG1vZGVsSWQ6IGxvZy5tb2RlbElkLFxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25zOiBbLi4uYWNjW2lucHV0SWRdLm9wZXJhdGlvbnMsIC4uLmN1cnJlbnRPcGVyYXRpb25zXVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgICBpZDogaW5wdXRJZCxcbiAgICAgICAgICAgICAgICAgICAgLi4uZ2V0VW5pdHNBbmRMYWJlbChcbiAgICAgICAgICAgICAgICAgICAgICBlcnUuaW5wdXRzLmxlbmd0aCA9PT0gMSA/IGVydS5pbnB1dHNbMF0gOiB7IG5hbWU6ICdJbnB1dCBncm91cCAodW5kZXIgZGV2ZWxvcG1lbnQpJyB9XG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIG1vZGVsSWQ6IGxvZy5tb2RlbElkLFxuICAgICAgICAgICAgICAgICAgICB3ZWlnaHRlZFZhbHVlOiBlcnUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnM6IFsuLi5jdXJyZW50T3BlcmF0aW9uc11cbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgICAgY29uc3QgaW5wdXRzOiBJSW5wdXRMb2dbXSA9IE9iamVjdC52YWx1ZXMoaW5wdXRzT2JqKTtcbiAgICAgICAgICByZXR1cm4geyAuLi5sb2csIHdlaWdodGVkVmFsdWU6IHdlaWdodGVkVG90YWwsIHZhbHVlOiB0b3RhbCwgaW5wdXRzIH0gYXMgSUxvZztcbiAgICAgICAgfSksXG4gICAgICAgIHRvQXJyYXkoKSxcbiAgICAgICAgbWVyZ2VNYXAoKGxvZ3MpID0+IGZyb20odGhpcy5sb2FkTG9nVGVybXMobG9ncykpLnBpcGUoXG4gICAgICAgICAgbWFwKGxvZ1Rlcm1zID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWxsVGVybXMgPSB7IC4uLnRoaXMuaW5pdGlhbFRlcm1zLCAuLi5sb2dUZXJtcyB9O1xuICAgICAgICAgICAgcmV0dXJuIGxvZ3M7XG4gICAgICAgICAgfSlcbiAgICAgICAgKSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICB0aGlzLmVycm9yID0gZXJyO1xuICAgICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YXAoKCkgPT4gKHRoaXMubG9hZGluZyA9IGZhbHNlKSksXG4gICAgICAgIHRhcCgobG9ncykgPT4gKHRoaXMubm9EYXRhID0gIWxvZ3MubGVuZ3RoKSksXG4gICAgICAgIHRhcCgobG9nczogSUxvZ1tdKSA9PiB7XG4gICAgICAgICAgdGhpcy53YXJuaW5ncyA9IHdhcm5pbmdzKGxvZ3MsIHRoaXMuYWxsVGVybXMpO1xuICAgICAgICAgIHRoaXMuc2hvd1dhcm5pbmdzID0gdGhpcy53YXJuaW5ncy5sZW5ndGggPiAwO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgobG9nczogSUxvZ1tdKSA9PiB7XG4gICAgICAgIHRoaXMucm9vdCA9IG51bGw7XG4gICAgICAgIHRoaXMubm9kZSA9IG51bGw7XG4gICAgICAgIHRoaXMubGluayA9IG51bGw7XG4gICAgICAgIGNvbnN0IGhhc0RlZmF1bHRNb2RlbExvZ3MgPSBsb2dzLnNvbWUoKGxvZykgPT4gbG9nLm1vZGVsSWQgPT09IGdldERlZmF1bHRNb2RlbElkKGxvZy5pbmRpY2F0b3IpKTtcbiAgICAgICAgdGhpcy5tb2RlbHMgPSBbXG4gICAgICAgICAgLi4uKGhhc0RlZmF1bHRNb2RlbExvZ3NcbiAgICAgICAgICAgID8gW3sgJ0BpZCc6IGRlZmF1bHRJbmRpY2F0b3JzTW9kZWxJZCwgbmFtZTogZGVmYXVsdEluZGljYXRvcnNNb2RlbE5hbWUgfV1cbiAgICAgICAgICAgIDogW10pLFxuICAgICAgICAgIC4uLnVuaXF1ZShsb2dzLm1hcCgoeyBtb2RlbElkIH0pID0+IHRoaXMuYWxsVGVybXNbbW9kZWxJZF0gfHwgeyAnQGlkJzogbW9kZWxJZCB9KSlcbiAgICAgICAgXTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1vZGVsSWQgPSB0aGlzLm1vZGVscz8uWzBdPy5bJ0BpZCddO1xuICAgICAgICBpZiAobG9ncy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLmxvZ3NBbGxNb2RlbHMgPSBsb2dzO1xuICAgICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5pdENoYXJ0KCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGluaXRDaGFydCgpIHtcbiAgICBjb25zdCBsb2dzID0gdGhpcy5sb2dzQWxsTW9kZWxzLmZpbHRlcihcbiAgICAgIChsb2cpID0+XG4gICAgICAgIGxvZy5tb2RlbElkID09PVxuICAgICAgICAodGhpcy5zZWxlY3RlZE1vZGVsSWQgPT09IGRlZmF1bHRJbmRpY2F0b3JzTW9kZWxJZCA/IGdldERlZmF1bHRNb2RlbElkKGxvZy5pbmRpY2F0b3IpIDogdGhpcy5zZWxlY3RlZE1vZGVsSWQpXG4gICAgKTtcbiAgICBjb25zdCB0b3RhbHNQZXJJbmRpY2F0b3IgPSBsb2dzLnJlZHVjZSgoYWNjLCBsb2cpID0+IHtcbiAgICAgIGFjY1tsb2cuaW5kaWNhdG9yXSA9IChhY2NbbG9nLmluZGljYXRvcl0gfHwgMCkgKyBsb2cud2VpZ2h0ZWRWYWx1ZTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuICAgIGNvbnN0IGluZGljYXRvcnM6IHsgW2lkOiBzdHJpbmddOiBOb2RlRGF0dW0gfSA9IGxvZ3MucmVkdWNlKChhY2MsIGxvZykgPT4ge1xuICAgICAgY29uc3QgdHlwZU1hcHBpbmcgPSB7XG4gICAgICAgIFtUZXJtVGVybVR5cGUuZW5kcG9pbnRJbmRpY2F0b3JdOiBDaGFydE5vZGVUeXBlLmVuZHBvaW50LFxuICAgICAgICBbVGVybVRlcm1UeXBlLmNoYXJhY3RlcmlzZWRJbmRpY2F0b3JdOiBDaGFydE5vZGVUeXBlLm1pZHBvaW50LFxuICAgICAgICBbVGVybVRlcm1UeXBlLmVtaXNzaW9uXTogQ2hhcnROb2RlVHlwZS5lbWlzc2lvbixcbiAgICAgICAgW1Rlcm1UZXJtVHlwZS5yZXNvdXJjZVVzZV06IENoYXJ0Tm9kZVR5cGUuZW1pc3Npb24sXG4gICAgICAgIFtUZXJtVGVybVR5cGUub3BlcmF0aW9uXTogQ2hhcnROb2RlVHlwZS5vcGVyYXRpb25cbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGNvbnRyaWJ1dG9yVHlwZSA9IHR5cGVNYXBwaW5nW3RoaXMuYWxsVGVybXNbbG9nLmNvbnRyaWJ1dG9yXT8udGVybVR5cGVdIHx8IENoYXJ0Tm9kZVR5cGUuaW5wdXQ7XG4gICAgICBjb25zdCBpbmRpY2F0b3JUeXBlID0gdHlwZU1hcHBpbmdbdGhpcy5hbGxUZXJtc1tsb2cuaW5kaWNhdG9yXT8udGVybVR5cGVdO1xuICAgICAgY29uc3QgY29udHJpYnV0b3JOb2RlID0ge1xuICAgICAgICBpZDogbG9nLmNvbnRyaWJ1dG9yLFxuICAgICAgICAuLi5nZXRVbml0c0FuZExhYmVsKHRoaXMuYWxsVGVybXNbbG9nLmNvbnRyaWJ1dG9yXSwgbG9nLmNvbnRyaWJ1dG9yKSxcbiAgICAgICAgdHlwZTogY29udHJpYnV0b3JUeXBlLFxuICAgICAgICB2YWx1ZTogbG9nLnZhbHVlLFxuICAgICAgICB3ZWlnaHRlZFZhbHVlOiBsb2cud2VpZ2h0ZWRWYWx1ZSxcbiAgICAgICAgbW9kZWxJZDogbG9nLm1vZGVsSWQsXG4gICAgICAgIGZyYWN0aW9uOiBsb2cud2VpZ2h0ZWRWYWx1ZSAvIHRvdGFsc1BlckluZGljYXRvcltsb2cuaW5kaWNhdG9yXSxcbiAgICAgICAgY2hpbGRyZW46XG4gICAgICAgICAgY29udHJpYnV0b3JUeXBlID09PSBDaGFydE5vZGVUeXBlLmVtaXNzaW9uXG4gICAgICAgICAgICA/IGxvZy5pbnB1dHMubWFwKChpKSA9PiAoe1xuICAgICAgICAgICAgICAgIC4uLmksXG4gICAgICAgICAgICAgICAgdHlwZTogQ2hhcnROb2RlVHlwZS5pbnB1dCxcbiAgICAgICAgICAgICAgICBmcmFjdGlvbjogaS53ZWlnaHRlZFZhbHVlIC8gbG9nLnZhbHVlLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBpLm9wZXJhdGlvbnMubWFwKChvKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgLi4ubyxcbiAgICAgICAgICAgICAgICAgIHR5cGU6IENoYXJ0Tm9kZVR5cGUub3BlcmF0aW9uLFxuICAgICAgICAgICAgICAgICAgZnJhY3Rpb246IG8ud2VpZ2h0ZWRWYWx1ZSAvIGkud2VpZ2h0ZWRWYWx1ZVxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIDogW11cbiAgICAgIH07XG5cbiAgICAgIGFjY1tsb2cuaW5kaWNhdG9yXVxuICAgICAgICA/IGFjY1tsb2cuaW5kaWNhdG9yXS5jaGlsZHJlbi5wdXNoKGNvbnRyaWJ1dG9yTm9kZSlcbiAgICAgICAgOiAoYWNjW2xvZy5pbmRpY2F0b3JdID0ge1xuICAgICAgICAgICAgaWQ6IGxvZy5pbmRpY2F0b3IsXG4gICAgICAgICAgICAuLi5nZXRVbml0c0FuZExhYmVsKHRoaXMuYWxsVGVybXNbbG9nLmluZGljYXRvcl0sIGxvZy5pbmRpY2F0b3IpLFxuICAgICAgICAgICAgbW9kZWxJZDogbG9nLm1vZGVsSWQsXG4gICAgICAgICAgICB0eXBlOiBpbmRpY2F0b3JUeXBlLFxuICAgICAgICAgICAgdmFsdWU6IHRvdGFsc1BlckluZGljYXRvcltsb2cuaW5kaWNhdG9yXSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbY29udHJpYnV0b3JOb2RlXVxuICAgICAgICAgIH0pO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gICAgY29uc3QgaW5kaWNhdG9yQXJyYXkgPSBPYmplY3QudmFsdWVzKGluZGljYXRvcnMpO1xuICAgIGNvbnN0IGxpbmtlZEluZGljYXRvcnMgPSBpbmRpY2F0b3JBcnJheVxuICAgICAgLy8gbGluayBlbmRwb2ludHMgdG8gbWlkcG9pbnRzIGFuZCBtaWRwb2ludHMgdG8gYW55IGNoaWxkIG1pZHBvaW50c1xuICAgICAgLm1hcCgoaW5kaWNhdG9yKSA9PiAoe1xuICAgICAgICAuLi5pbmRpY2F0b3IsXG4gICAgICAgIGNoaWxkcmVuOiBpbmRpY2F0b3IuY2hpbGRyZW4ubWFwKChjaGlsZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHByZWZpeFJlbW92ZWQgPSBpbmRpY2F0b3IudHlwZSA9PT0gQ2hhcnROb2RlVHlwZS5lbmRwb2ludCAmJiBjaGlsZC5sYWJlbC5zcGxpdCgnLCAnKVsxXTtcbiAgICAgICAgICByZXR1cm4gY2hpbGQudHlwZSA9PT0gQ2hhcnROb2RlVHlwZS5taWRwb2ludFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgLi4uY2hpbGQsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHByZWZpeFJlbW92ZWRcbiAgICAgICAgICAgICAgICAgID8gJ1suLi5dJyArIHByZWZpeFJlbW92ZWQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBwcmVmaXhSZW1vdmVkLnNsaWNlKDEpXG4gICAgICAgICAgICAgICAgICA6IGNoaWxkLmxhYmVsLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBpbmRpY2F0b3JzW2NoaWxkLmlkXT8uY2hpbGRyZW5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBjaGlsZDtcbiAgICAgICAgfSlcbiAgICAgIH0pKVxuICAgICAgLy8gcmVtb3ZlIGR1cGxpY2F0ZWQgaW5kaWNhdG9yc1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgKGluZGljYXRvcikgPT4gIWluZGljYXRvckFycmF5LnNvbWUoKHBhcmVudCkgPT4gcGFyZW50LmNoaWxkcmVuLnNvbWUoKGNoaWxkKSA9PiBjaGlsZC5pZCA9PT0gaW5kaWNhdG9yLmlkKSlcbiAgICAgICk7XG5cbiAgICBjb25zdCBlbmRwb2ludHMgPSBsaW5rZWRJbmRpY2F0b3JzLmZpbHRlcigoaW5kaWNhdG9yKSA9PiBpbmRpY2F0b3IudHlwZSA9PT0gQ2hhcnROb2RlVHlwZS5lbmRwb2ludCk7XG4gICAgY29uc3Qgbm9uTENBSW5kaWNhdG9ycyA9IGxpbmtlZEluZGljYXRvcnMuZmlsdGVyKChpbmRpY2F0b3IpID0+IGluZGljYXRvci50eXBlID09PSBDaGFydE5vZGVUeXBlLm1pZHBvaW50KTtcblxuICAgIGVuZHBvaW50cy5sZW5ndGggJiZcbiAgICAgIG5vbkxDQUluZGljYXRvcnMubGVuZ3RoICYmXG4gICAgICBlbmRwb2ludHMucHVzaCh7XG4gICAgICAgIGlkOiBub25MQ0FJbmRpY2F0b3JzSWQsXG4gICAgICAgIGxhYmVsOiAnT3RoZXIgaW5kaWNhdG9ycycsXG4gICAgICAgIHRlcm06ICduL2EnLFxuICAgICAgICBtb2RlbElkOiAnbi9hJyxcbiAgICAgICAgdW5pdHM6ICcnLFxuICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgd2VpZ2h0ZWRWYWx1ZTogbnVsbCxcbiAgICAgICAgdHlwZTogQ2hhcnROb2RlVHlwZS5lbmRwb2ludCxcbiAgICAgICAgZnJhY3Rpb246IG51bGwsXG4gICAgICAgIGNoaWxkcmVuOiBub25MQ0FJbmRpY2F0b3JzXG4gICAgICB9KTtcblxuICAgIGNvbnN0IHJvb3QgPSBkM0hpZXJhcmNoeTxOb2RlRGF0dW0+KHtcbiAgICAgIGlkOiAnZHVtbXktcm9vdCcsXG4gICAgICBsYWJlbDogJycsXG4gICAgICB0ZXJtOiAnJyxcbiAgICAgIG1vZGVsSWQ6ICcnLFxuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICB3ZWlnaHRlZFZhbHVlOiBudWxsLFxuICAgICAgdW5pdHM6ICcnLFxuICAgICAgdHlwZTogQ2hhcnROb2RlVHlwZS5yb290LFxuICAgICAgY2hpbGRyZW46IGVuZHBvaW50cy5sZW5ndGggPyBlbmRwb2ludHMgOiBsaW5rZWRJbmRpY2F0b3JzXG4gICAgfSk7XG5cbiAgICBjb25zdCBpbmNsdWRlZFR5cGVzID0gdW5pcXVlKHJvb3QuZGVzY2VuZGFudHMoKS5tYXAoKG4pID0+IG4uZGF0YS50eXBlKSk7XG4gICAgdGhpcy5sZWdlbmQgPSBsZWdlbmQuZmlsdGVyKCh7IHR5cGUgfSkgPT4gaW5jbHVkZWRUeXBlcy5pbmNsdWRlcyh0eXBlKSk7XG5cbiAgICB0aGlzLnJvb3QgPSByb290XG4gICAgICAuc29ydCgoYSwgYikgPT4gYi5kYXRhLmZyYWN0aW9uIC0gYS5kYXRhLmZyYWN0aW9uKVxuICAgICAgLmVhY2hBZnRlcigobm9kZSkgPT4ge1xuICAgICAgICBpZiAobm9kZS5kYXRhLmZyYWN0aW9uID09PSAwKSB7XG4gICAgICAgICAgbm9kZS5jaGlsZHJlbiA9IG51bGw7XG4gICAgICAgICAgKG5vZGUuaGVpZ2h0IGFzIG51bWJlcikgPSAwO1xuICAgICAgICB9XG4gICAgICAgIG5vZGUuZGF0YS50eXBlICE9PSBDaGFydE5vZGVUeXBlLnJvb3QgJiYgY29sbGFwc2VDaGlsZHJlbihub2RlKTtcbiAgICAgICAgZ3JvdXBCeVBlcmNlbnRhZ2Uobm9kZSkgJiYgZ3JvdXBQZXJjZW50YWdlKG5vZGUpO1xuICAgICAgICBub2RlLmRhdGEuc2hvd0JhciA9IHNob3dCYXIobm9kZSk7XG4gICAgICAgIG5vZGUuZGF0YS5tb2RlbE5hbWUgPSB0aGlzLmFsbFRlcm1zW25vZGUuZGF0YS5tb2RlbElkXT8ubmFtZTtcbiAgICAgICAgbm9kZS5kYXRhLm1vZGVsRG9jcyA9IHRoaXMuYWxsVGVybXNbbm9kZS5kYXRhLm1vZGVsSWRdPy5kb2NzO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLnJlbmRlckNoYXJ0KCk7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckNoYXJ0KCkge1xuICAgIHRoaXMuc3ZnID0gZDNTZWxlY3QodGhpcy5jaGFydFJlZj8ubmF0aXZlRWxlbWVudCk7XG4gICAgdGhpcy5zdmcuc2VsZWN0QWxsKCcqJykucmVtb3ZlKCk7XG4gICAgLy8gcm9vdCBub2RlIGlzIGFsd2F5cyBwb3NpdGlvbmVkIGF0IOKfqDAsIDDin6lcbiAgICBjb25zdCBpbm5lckhlaWdodCA9ICh0aGlzLnJvb3QuY2hpbGRyZW4ubGVuZ3RoIC0gMSkgKiBub2RlSGVpZ2h0ICogbm9kZVNwYWNpbmdGYWN0b3IgKyBub2RlSGVpZ2h0O1xuICAgIHRoaXMueU1pbiA9IChub2RlSGVpZ2h0IC0gaW5uZXJIZWlnaHQpIC8gMiAtIG1hcmdpbi50b3A7XG4gICAgdGhpcy55VG90YWwgPSBpbm5lckhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tO1xuICAgIHRoaXMuc3ZnXG4gICAgICAuYXR0cigndmlld0JveCcsIFstbWFyZ2luLmxlZnQsIHRoaXMueU1pbiwgd2lkdGgsIHRoaXMueVRvdGFsXS5qb2luKCcgJykpXG4gICAgICAuYXR0cignZm9udC1zaXplJywgYCR7Zm9udFNpemV9cHhgKTtcblxuICAgIHRoaXMubm9kZSA9IHRoaXMuc3ZnLmFwcGVuZCgnZycpLnNlbGVjdEFsbCgnZycpO1xuICAgIHRoaXMubGluayA9IHRoaXMuc3ZnLmFwcGVuZCgnZycpLnNlbGVjdEFsbCgncGF0aCcpO1xuICAgIHRoaXMudG9vbHRpcCA9IHRoaXMuc3ZnLmFwcGVuZCgnZycpLmNsYXNzZWQoJ3Rvb2x0aXAnLCB0cnVlKS5zdHlsZSgnb3BhY2l0eScsIDApO1xuXG4gICAgdGhpcy5oYW5kbGVOb2RlQ2xpY2soXG4gICAgICBudWxsLFxuICAgICAgdGhpcy5yb290LmZpbmQoKG5vZGUpID0+IG5vZGUuZGVwdGggPT09IDEpXG4gICAgKTtcbiAgfVxuXG4gIC8vIGZsaXAgeC95IHRvIGdvIGxlZnQtcmlnaHQgaW5zdGVhZCBvZiB0b3AtYm90dG9tXG4gIHByaXZhdGUgdXBkYXRlQ2hhcnQoeyB0b2dnbGluZ0dyb3VwID0gZmFsc2UsIHN3aXRjaGluZ1NlbGVjdGlvbiA9IGZhbHNlIH0gPSB7fSkge1xuICAgIGNvbnN0IHJvb3QgPSB0aGlzLnJvb3Q7XG4gICAgY29uc3QgdHJlZUxheW91dCA9IGQzVHJlZTxOb2RlRGF0dW0+KClcbiAgICAgIC5ub2RlU2l6ZShbbm9kZUhlaWdodCwgbm9kZVdpZHRoXSlcbiAgICAgIC5zZXBhcmF0aW9uKCguLi5uZWlnaGJvdXJzOiBDaGFydE5vZGVbXSkgPT5cbiAgICAgICAgbmVpZ2hib3Vycy5zb21lKChuKSA9PiBuLmRhdGEuZ3JvdXAgJiYgbi5fZ3JvdXBPcGVuKSA/IDEgLSBncm91cE92ZXJsYXAgLyBub2RlSGVpZ2h0IDogbm9kZVNwYWNpbmdGYWN0b3JcbiAgICAgICk7XG4gICAgY29uc3QgdHJlZTogQ2hhcnROb2RlID0gdHJlZUxheW91dChyb290KTtcbiAgICBjb25zdCBsaW5rczogTGlua1tdID0gdHJlZS5saW5rcygpLmZpbHRlcigoZCkgPT4gZC5zb3VyY2UuZGF0YS50eXBlICE9PSBDaGFydE5vZGVUeXBlLnJvb3QpIHx8IFtdO1xuICAgIGNvbnN0IG5vZGVzID0gdHJlZS5kZXNjZW5kYW50cygpLnJldmVyc2UoKTtcblxuICAgIG5vZGVzLmZvckVhY2goKGQpID0+IHtcbiAgICAgIGQueSA9XG4gICAgICAgIChkLmRlcHRoIC0gMSArIChPYmplY3Qua2V5cyhDaGFydE5vZGVUeXBlKS5sZW5ndGggLSAxIC0gdGhpcy5sZWdlbmQubGVuZ3RoKSAvIDIpICogKG5vZGVXaWR0aCArIGxheWVyU3BhY2luZyk7XG4gICAgfSk7XG5cbiAgICAvLyBCeSBkZWZhdWx0IHRoZSB0cmVlIGV4cGFuZHMgc3ltbWV0cmljYWxseSB1cHdhcmRzIGFuZCBkb3dud2FyZHMgZnJvbSB0aGUgc2VsZWN0ZWQgbm9kZS5cbiAgICAvLyBXZSBtb3ZlIGNoaWxkcmVuIGRvd24gdG8gcHJldmVudCBleHBhbnNpb24gdXB3YXJkcyBvciB1cCB0byBtaW5pbWlzZSBleHBhbnNpb24gZG93bndhcmRzXG4gICAgY29uc3QgbWluaW1pc2VIZWlnaHQgPSAoeyBwcmV2aW91c1RhbnNsYXRlWSwgcHJldmlvdXNZVG90YWwgfSwgZGVwdGg6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgbWF4WVRvdGFsID0gTWF0aC5tYXgocHJldmlvdXNZVG90YWwsIHRoaXMueVRvdGFsKTtcbiAgICAgIGNvbnN0IHBhcmVudCA9IHRyZWUuZmluZCgobm9kZSkgPT4gKG5vZGUuZGVwdGggPT09IGRlcHRoIC0gMSkgJiYgbm9kZS5fb3Blbik7XG4gICAgICBwYXJlbnQ/LmNoaWxkcmVuPy5mb3JFYWNoKChub2RlKSA9PiAobm9kZS54ICs9IHByZXZpb3VzVGFuc2xhdGVZKSk7XG5cbiAgICAgIGNvbnN0IHsgbWluOiBtaW5YLCBtYXg6IG1heFggfSA9IChwYXJlbnQ/LmNoaWxkcmVuIHx8IFtdKS5yZWR1Y2UoXG4gICAgICAgICh7IG1pbiwgbWF4IH0sIG4pID0+ICh7XG4gICAgICAgICAgbWluOiBuLnggPCBtaW4gPyBuLnggOiBtaW4sXG4gICAgICAgICAgbWF4OiBuLnggPiBtYXggPyBuLnggOiBtYXhcbiAgICAgICAgfSksXG4gICAgICAgIHsgbWluOiBwYXJlbnQ/LngsIG1heDogcGFyZW50Py54IH1cbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHsgeU1pbiwgeVRvdGFsIH0gPSBwYXJlbnQ/LmNoaWxkcmVuPy5sZW5ndGhcbiAgICAgICAgPyB7IHlNaW46IG1pblggLSBtYXJnaW4udG9wLCB5VG90YWw6IG1heFggLSBtaW5YICsgbWFyZ2luLmJvdHRvbSArIG1hcmdpbi50b3AgKyBub2RlSGVpZ2h0IH1cbiAgICAgICAgOiB7IHlNaW46IG51bGwsIHlUb3RhbDogbnVsbCB9O1xuXG4gICAgICBjb25zdCBvdmVyZmxvd0Fib3ZlID0gdGhpcy55TWluIC0geU1pbjsgLy8gcG9zaXRpdmUgd2hlbiBvdmVyZmxvd3MgYWJvdmVcbiAgICAgIGNvbnN0IG92ZXJmbG93QmVsb3cgPSB5VG90YWwgKyB5TWluIC0gKG1heFlUb3RhbCArIHRoaXMueU1pbik7IC8vIHBvc2l0aXZlIHdoZW4gb3ZlcmZsb3dzIGJlbG93XG4gICAgICAvLyAtIHRyYW5zbGF0ZVkgd2hlbiBvdmVyZmxvd3MgYWJvdmU6IHBvc2l0aXZlXG4gICAgICAvLyAtIHRyYW5zbGF0ZVkgd2hlbiBvdmVyZmxvd3MgYmVsb3c6IG5lZ2F0aXZlIGJ5IHNtYWxsZXN0IG9mIHVuZGVyZmxvdyBhYm92ZSBvciBvdmVyZmxvdyBiZWxvd1xuICAgICAgLy8gLSB0cmFuc2xhdGVZIHdoZW4gbm8gb3ZlcmZsb3c6IDBcbiAgICAgIGNvbnN0IHRyYW5zbGF0ZVkgPVxuICAgICAgICBvdmVyZmxvd0Fib3ZlID4gMCA/IG92ZXJmbG93QWJvdmUgOiBvdmVyZmxvd0JlbG93ID4gMCA/IE1hdGgubWF4KC1vdmVyZmxvd0JlbG93LCBvdmVyZmxvd0Fib3ZlKSA6IDA7XG5cbiAgICAgIHBhcmVudD8uY2hpbGRyZW4/LmZvckVhY2goKG5vZGUpID0+IChub2RlLnggKz0gdHJhbnNsYXRlWSkpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcmV2aW91c1lUb3RhbDogTWF0aC5tYXgoeVRvdGFsLCBwcmV2aW91c1lUb3RhbCksXG4gICAgICAgIHByZXZpb3VzVGFuc2xhdGVZOiB0cmFuc2xhdGVZICsgcHJldmlvdXNUYW5zbGF0ZVlcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHsgcHJldmlvdXNZVG90YWw6IG5ld0hlaWdodCB9ID0gW1xuICAgICAgMiwgMywgNCwgNVxuICAgIF0ucmVkdWNlKG1pbmltaXNlSGVpZ2h0LCB7XG4gICAgICBwcmV2aW91c1RhbnNsYXRlWTogMCxcbiAgICAgIHByZXZpb3VzWVRvdGFsOiB0aGlzLnlUb3RhbFxuICAgIH0pO1xuXG4gICAgdGhpcy5zdmcudHJhbnNpdGlvbigpLmR1cmF0aW9uKDMwMCkuYXR0cigndmlld0JveCcsIFstbWFyZ2luLmxlZnQsIHRoaXMueU1pbiwgd2lkdGgsIG5ld0hlaWdodF0uam9pbignICcpKTtcblxuICAgIHRoaXMubm9kZSA9IHRoaXMubm9kZVxuICAgICAgLmRhdGEoXG4gICAgICAgIG5vZGVzLFxuICAgICAgICAoZCkgPT4gYCR7ZC5wYXJlbnQ/LnBhcmVudD8ucGFyZW50Py5kYXRhLmlkfS0ke2QucGFyZW50Py5wYXJlbnQ/LmRhdGEuaWR9LSR7ZC5wYXJlbnQ/LmRhdGEuaWR9LSR7ZC5kYXRhLmlkfWBcbiAgICAgIClcbiAgICAgIC5qb2luKFxuICAgICAgICAoZW50ZXIpID0+XG4gICAgICAgICAgZW50ZXJcbiAgICAgICAgICAgIC5hcHBlbmQoJ2cnKVxuICAgICAgICAgICAgLmNhbGwoZW50ZXJOb2RlcylcbiAgICAgICAgICAgIC5hdHRyKCdvcGFjaXR5JywgMClcbiAgICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAoZCkgPT4gJ3RyYW5zbGF0ZSgnICsgKHRvZ2dsaW5nR3JvdXAgPyBkLnkgOiBkLnkgLSBub2RlV2lkdGggLyAyKSArICcsJyArIGQueCArICcpJyksXG4gICAgICAgICh1cGRhdGUpID0+IHVwZGF0ZSxcbiAgICAgICAgKGV4aXQpID0+XG4gICAgICAgICAgZXhpdFxuICAgICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgLmR1cmF0aW9uKG5vZGVEdXJhdGlvbiAvIDIpXG4gICAgICAgICAgICAuZGVsYXkoKGQpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBkLnBhcmVudD8uY2hpbGRyZW4gfHwgZC5wYXJlbnQ/Ll9jaGlsZHJlbjtcbiAgICAgICAgICAgICAgcmV0dXJuIChjaGlsZHJlbj8ubGVuZ3RoIC0gY2hpbGRyZW4/LmluZGV4T2YoZCkgLSAxKSAqIDEwO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5lYXNlKGQzRWFzZUVsYXN0aWNJbi5hbXBsaXR1ZGUoMC41KS5wZXJpb2QoMSkpXG4gICAgICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgKGQpID0+ICd0cmFuc2xhdGUoJyArICh0b2dnbGluZ0dyb3VwID8gZC55IDogZC55IC0gbm9kZVdpZHRoIC8gMikgKyAnLCcgKyBkLnggKyAnKScpXG4gICAgICAgICAgICAuYXR0cignb3BhY2l0eScsIDApXG4gICAgICAgICAgICAucmVtb3ZlKClcbiAgICAgICk7XG5cbiAgICB0aGlzLm5vZGVcbiAgICAgIC5jYWxsKG1lcmdlZE5vZGVzLCB7IHRpcFNlbGVjdGlvbjogdGhpcy50b29sdGlwIH0pXG4gICAgICAudHJhbnNpdGlvbigpXG4gICAgICAuZGVsYXkoKGQpID0+IHtcbiAgICAgICAgY29uc3QgZ3JvdXBDbG9zaW5nID0gdG9nZ2xpbmdHcm91cCAmJiAhZC5wYXJlbnQ/LmNoaWxkcmVuPy5maW5kKChuKSA9PiBuLmRhdGEuZ3JvdXApPy5fZ3JvdXBPcGVuO1xuICAgICAgICByZXR1cm4gZ3JvdXBDbG9zaW5nID8gZ3JvdXBEZWxheSA6IChzd2l0Y2hpbmdTZWxlY3Rpb24gPyBub2RlRHVyYXRpb24gOiAwKSArIGQucGFyZW50Py5jaGlsZHJlbi5pbmRleE9mKGQpICogMTA7XG4gICAgICB9KVxuICAgICAgLmR1cmF0aW9uKG5vZGVEdXJhdGlvbilcbiAgICAgIC5lYXNlKGQzRWFzZUVsYXN0aWNPdXQuYW1wbGl0dWRlKDAuNSkucGVyaW9kKDEpKVxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIChkKSA9PiBgdHJhbnNsYXRlKCR7ZC55fSwke2QueH0pYClcbiAgICAgIC5hdHRyKCdvcGFjaXR5JywgMSk7XG5cbiAgICB0aGlzLm5vZGUuc2VsZWN0QWxsKCcubm9kZS1vcGVuYWJsZScpLm9uKCdjbGljaycsIHRoaXMuaGFuZGxlTm9kZUNsaWNrLmJpbmQodGhpcykpO1xuICAgIHRoaXMubm9kZS5zZWxlY3RBbGwoJy5ncm91cC1idXR0b24nKS5vbignY2xpY2snLCB0aGlzLmhhbmRsZUdyb3VwQnV0dG9uQ2xpY2suYmluZCh0aGlzKSk7XG5cbiAgICB0aGlzLmxpbmsgPSB0aGlzLmxpbmtcbiAgICAgIC5kYXRhKFxuICAgICAgICBsaW5rcyxcbiAgICAgICAgKGQpID0+IGAke2Quc291cmNlLnBhcmVudD8ucGFyZW50Py5kYXRhLmlkfS0ke2Quc291cmNlLnBhcmVudD8uZGF0YS5pZH0tJHtkLnNvdXJjZS5kYXRhLmlkfS0ke2QudGFyZ2V0LmRhdGEuaWR9YFxuICAgICAgKVxuICAgICAgLmpvaW4oXG4gICAgICAgIChlbnRlcikgPT4gZW50ZXIuYXBwZW5kKCdwYXRoJykuY2xhc3NlZCgnbGluay1wYXRoJywgdHJ1ZSkuYXR0cignb3BhY2l0eScsIDApLFxuICAgICAgICAodXBkYXRlKSA9PiB1cGRhdGUsXG4gICAgICAgIChleGl0KSA9PlxuICAgICAgICAgIGV4aXRcbiAgICAgICAgICAgIC50cmFuc2l0aW9uKClcbiAgICAgICAgICAgIC5kdXJhdGlvbihsaW5rRHVyYXRpb24gLyAyKVxuICAgICAgICAgICAgLmRlbGF5KChkKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gZC5zb3VyY2UucGFyZW50Py5jaGlsZHJlbiB8fCBkLnNvdXJjZS5wYXJlbnQ/Ll9jaGlsZHJlbjtcbiAgICAgICAgICAgICAgcmV0dXJuIChjaGlsZHJlbj8ubGVuZ3RoIC0gY2hpbGRyZW4/LmluZGV4T2YoZC50YXJnZXQpIC0gMSkgKiAxMDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYXR0cignb3BhY2l0eScsIDApXG4gICAgICAgICAgICAucmVtb3ZlKClcbiAgICAgIClcbiAgICAgIC5jYWxsKG1lcmdlZExpbmtzLCB7IHRvZ2dsaW5nR3JvdXAsIHN3aXRjaGluZ1NlbGVjdGlvbiB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlR3JvdXBCdXR0b25DbGljayhfZXZlbnQ6IGFueSwgZDogQ2hhcnROb2RlKSB7XG4gICAgaWYgKGQuX2dyZXllZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkLl9ncm91cE9wZW4gPSAhZC5fZ3JvdXBPcGVuO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gZC5wYXJlbnQuX2dyb3VwQ2hpbGRyZW47XG4gICAgZC5wYXJlbnQuX2dyb3VwQ2hpbGRyZW4gPSBkLnBhcmVudC5jaGlsZHJlbjtcbiAgICBkLnBhcmVudC5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgIHRoaXMudXBkYXRlQ2hhcnQoeyB0b2dnbGluZ0dyb3VwOiB0cnVlIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVOb2RlQ2xpY2soX2V2ZW50OiBhbnksIGQ6IENoYXJ0Tm9kZSB8IEhOb2RlKTogdm9pZCB7XG4gICAgZC5fb3BlbiA9ICFkLl9vcGVuO1xuICAgIGNvbnN0IHN3aXRjaGluZ1NlbGVjdGlvbiA9ICdfZ3JleWVkJyBpbiBkICYmIGQuX2dyZXllZDtcbiAgICBkLnBhcmVudC5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgY2hpbGQuX2dyZXllZCA9IGZhbHNlO1xuICAgICAgaWYgKGNoaWxkICE9PSBkKSB7XG4gICAgICAgIGNoaWxkLl9vcGVuID0gZmFsc2U7XG4gICAgICAgIGNvbGxhcHNlQ2hpbGRyZW4oY2hpbGQpO1xuICAgICAgICBjaGlsZC5fZ3JleWVkID0gZC5fb3BlbjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBkLmNoaWxkcmVuID8gY29sbGFwc2VDaGlsZHJlbihkKSA6IHJlc3RvcmVDaGlsZHJlbihkKTtcbiAgICB0aGlzLnVwZGF0ZUNoYXJ0KHsgc3dpdGNoaW5nU2VsZWN0aW9uIH0pO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiIWxvYWRpbmc7IGVsc2UgbG9hZGVyXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1JlY2FsY3VsYXRlZDsgZWxzZSBzaG93U3dpdGNoUmVjYWxjdWxhdGVkXCI+XG4gICAgPGRpdiBjbGFzcz1cImZpZWxkIGhhcy1hZGRvbnMgcHQtMiBweC0zIG1iLTBcIiAqbmdJZj1cImZpbHRlcmVkSW1wYWN0QXNzZXNzbWVudHMubGVuZ3RoID4gMVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJidXR0b24gaXMtc21hbGwgaXMtc3RhdGljIGlzLXNlY29uZGFyeVwiPlNlbGVjdCBhbiBJbXBhY3QgQXNzZXNzbWVudDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wgaXMtZXhwYW5kZWRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdCBpcy1zbWFsbCBpcy1mdWxsd2lkdGggaXMtc2Vjb25kYXJ5XCI+XG4gICAgICAgICAgPHNlbGVjdCBbKG5nTW9kZWwpXT1cInNlbGVjdGVkSW1wYWN0QXNzZXNzbWVudElkXCIgKGNoYW5nZSk9XCJyZWxvYWRDaGFydCgpXCIgW2Rpc2FibGVkXT1cImxvYWRpbmdcIj5cbiAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHZhbHVlIG9mIGZpbHRlcmVkSW1wYWN0QXNzZXNzbWVudHNcIiBbdmFsdWVdPVwidmFsdWVbJ0BpZCddXCI+XG4gICAgICAgICAgICAgIHt7IHZhbHVlLm5hbWUgfHwgdmFsdWVbJ0BpZCddIH19XG4gICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiIW5vRGF0YVwiIGNsYXNzPVwiZmllbGQgaGFzLWFkZG9ucyBweS0yIHB4LTNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsIGlzLXN0YXRpYyBpcy1zZWNvbmRhcnlcIj5TZWxlY3QgYSBtb2RlbDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wgaXMtZXhwYW5kZWRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdCBpcy1zbWFsbCBpcy1mdWxsd2lkdGggaXMtc2Vjb25kYXJ5XCI+XG4gICAgICAgICAgPHNlbGVjdCBbKG5nTW9kZWwpXT1cInNlbGVjdGVkTW9kZWxJZFwiIChjaGFuZ2UpPVwiaW5pdENoYXJ0KClcIiBbZGlzYWJsZWRdPVwibG9hZGluZ1wiPlxuICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgbW9kZWwgb2YgbW9kZWxzXCIgW3ZhbHVlXT1cIm1vZGVsWydAaWQnXVwiPnt7IG1vZGVsLm5hbWUgfHwgbW9kZWxbJ0BpZCddIH19PC9vcHRpb24+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIW5vRGF0YSAmJiAhc2hvd1dhcm5pbmdzXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sdW1ucyBpcy1jZW50ZXJlZCBweS0yIGlzLXNpemUtNyBpcy1tb2JpbGUgaXMtbXVsdGlsaW5lXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGxlZ2VuZEl0ZW0gb2YgbGVnZW5kXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbiBpcy1uYXJyb3cgcHktMCBpcy1mbGV4LW1vYmlsZSBpcy1mbGV4LWRpcmVjdGlvbi1jb2x1bW4gaXMtYWxpZ24taXRlbXMtY2VudGVyIGlzLWxlZ2VuZC1pdGVtXCI+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBjbGFzcz1cImtleS1jb2xvdXIgaXMtaW5saW5lLWJsb2NrLXRhYmxldCBpcy1hbGlnbi1taWRkbGVcIlxuICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cIm5vZGVDb2xvdXJzW2xlZ2VuZEl0ZW0udHlwZV1cIlxuICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzdHJvbmcgY2xhc3M9XCJoYXMtdGV4dC1ibGFjayBpcy1hbGlnbi1taWRkbGUga2V5LWxhYmVsIGlzLXBsLXRhYmxldC0yXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXMtaGlkZGVuLWRlc2t0b3BcIj57e2xlZ2VuZEl0ZW0ubW9iaWxlVGV4dH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlzLWhpZGRlbi10b3VjaFwiPnt7bGVnZW5kSXRlbS50ZXh0fX08L3NwYW4+XG4gICAgICAgICAgICA8L3N0cm9uZz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxwICpuZ0lmPVwiZXJyb3JcIiBjbGFzcz1cImhhcy10ZXh0LWRhbmdlciBweS0zXCI+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJlcnJvclwiPlxuICAgICAgICA8cCAqbmdTd2l0Y2hDYXNlPVwiJ25vdC1mb3VuZCdcIj5JbXBhY3QgQXNzZXNzbWVudCBub3QgZm91bmQ8L3A+XG4gICAgICAgIDxkaXYgKm5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgICA8c3Bhbj5BbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VycmVkOjwvc3Bhbj5cbiAgICAgICAgICA8cCBjbGFzcz1cIm10LTFcIj57eyBlcnJvciB9fTwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L3A+XG5cbiAgICA8ZGl2ICpuZ0lmPVwic2hvd1dhcm5pbmdzXCIgY2xhc3M9XCJoYXMtdGV4dC13YXJuaW5nIHB5LTMgaGFzLXRleHQtY2VudGVyZWRcIj5cbiAgICAgIDxwIGNsYXNzPVwiaXMtbWItMlwiICpuZ0Zvcj1cImxldCB3YXJuaW5nIG9mIHdhcm5pbmdzXCI+XG4gICAgICAgIDxmYS1pY29uIGNsYXNzPVwicHItMlwiIGljb249XCJleGNsYW1hdGlvbi10cmlhbmdsZVwiPjwvZmEtaWNvbj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwid2FybmluZ1wiPlxuICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInbWlzc2luZy10ZXJtcydcIj5DYWxjdWxhdGlvbnMgYXJlIG5vdCB1cCB0byBkYXRlLiBTb21lIHRlcm1zIG1heSBub3QgZGlzcGxheSBjb3JyZWN0bHkuPC9zcGFuPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvcD5cbiAgICAgIDxwIGNsYXNzPVwiaXMtdW5kZXJsaW5lZCBpcy1zaXplLTdcIj48YSAoY2xpY2spPVwic2hvd1dhcm5pbmdzID0gZmFsc2VcIj5WaWV3IGNoYXJ0IGFueXdheS48L2E+PC9wPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiAqbmdJZj1cIm5vRGF0YVwiIGNsYXNzPVwicHktM1wiPlxuICAgICAgPHAgY2xhc3M9XCJoYXMtdGV4dC1jZW50ZXJlZFwiPk5vIGNoYXJ0IGF2YWlsYWJsZS48L3A+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG5cbjxkaXYgW2NsYXNzLmlzLWhpZGRlbl09XCIhaXNSZWNhbGN1bGF0ZWQgfHwgbG9hZGluZyB8fCBlcnJvciB8fCBub0RhdGEgfHwgc2hvd1dhcm5pbmdzXCIgY2xhc3M9XCJjaGFydC1jb250YWluZXIgaXMtcmVsYXRpdmUgdy0xMDBcIj5cbiAgPHN2ZyBjbGFzcz1cInctMTAwIGgtMTAwXCIgI2NoYXJ0Pjwvc3ZnPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjbG9hZGVyPlxuICA8ZGl2IGNsYXNzPVwibG9hZGluZy1jb250YWluZXIgaGFzLXRleHQtY2VudGVyIG15LTUgcHktNVwiPlxuICAgIDxmYS1pY29uIGljb249XCJzcGlubmVyXCIgW3B1bHNlXT1cInRydWVcIiBzaXplPVwibGdcIj48L2ZhLWljb24+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzaG93U3dpdGNoUmVjYWxjdWxhdGVkPlxuICA8cCBjbGFzcz1cImhhcy10ZXh0LWNlbnRlcmVkIHB5LTNcIj5ObyBjaGFydCBhdmFpbGFibGUuIFN3aXRjaCB0byA8Y29kZT5yZWNhbGN1bGF0ZWQ8L2NvZGU+IHZlcnNpb24uPC9wPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
788
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wYWN0LWFzc2Vzc21lbnRzLWdyYXBoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9pbXBhY3QtYXNzZXNzbWVudHMvaW1wYWN0LWFzc2Vzc21lbnRzLWdyYXBoL2ltcGFjdC1hc3Nlc3NtZW50cy1ncmFwaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvaW1wYWN0LWFzc2Vzc21lbnRzL2ltcGFjdC1hc3Nlc3NtZW50cy1ncmFwaC9pbXBhY3QtYXNzZXNzbWVudHMtZ3JhcGguY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFJVCxTQUFTLEVBRVQsS0FBSyxFQUlOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEcsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxjQUFjLElBQUksZ0JBQWdCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDOUQsT0FBTyxFQUFFLE1BQU0sSUFBSSxRQUFRLEVBQXVCLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNsRixPQUFPLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsU0FBUyxJQUFJLFdBQVcsRUFDeEIsSUFBSSxJQUFJLE1BQU0sRUFJZixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsYUFBYSxJQUFJLGVBQWUsRUFBRSxjQUFjLElBQUksZ0JBQWdCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDL0YsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFBd0MsUUFBUSxFQUFFLFlBQVksRUFBRSxN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LGVBQWU7c0JBRHRCLFNBQVM7dUJBQUMsR0FBRztnQkFJTixpQkFBaUI7c0JBRHhCLEtBQUs7Z0JBR0UsU0FBUztzQkFEaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgTmdab25lLFxuICBPbkluaXQsXG4gIFZpZXdDaGlsZCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZmlsdGVyLCBncm91cEJ5LCBtYXAsIG1lcmdlQWxsLCBtZXJnZU1hcCwgdG9BcnJheSwgY2F0Y2hFcnJvciwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZnJvbSwgb2YsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbGlua0hvcml6b250YWwgYXMgZDNMaW5rSG9yaXpvbnRhbCB9IGZyb20gJ2QzLXNoYXBlJztcbmltcG9ydCB7IHNlbGVjdCBhcyBkM1NlbGVjdCwgU2VsZWN0aW9uLCBCYXNlVHlwZSwgc2VsZWN0QWxsIH0gZnJvbSAnZDMtc2VsZWN0aW9uJztcbmltcG9ydCAnZDMtdHJhbnNpdGlvbic7XG5pbXBvcnQge1xuICBoaWVyYXJjaHkgYXMgZDNIaWVyYXJjaHksXG4gIHRyZWUgYXMgZDNUcmVlLFxuICBIaWVyYXJjaHlOb2RlLFxuICBIaWVyYXJjaHlQb2ludE5vZGUsXG4gIEhpZXJhcmNoeVBvaW50TGlua1xufSBmcm9tICdkMy1oaWVyYXJjaHknO1xuaW1wb3J0IHsgZWFzZUVsYXN0aWNJbiBhcyBkM0Vhc2VFbGFzdGljSW4sIGVhc2VFbGFzdGljT3V0IGFzIGQzRWFzZUVsYXN0aWNPdXQgfSBmcm9tICdkMy1lYXNlJztcbmltcG9ydCB7IERhdGFTdGF0ZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvYXBpJztcbmltcG9ydCB7IElJbXBhY3RBc3Nlc3NtZW50SlNPTkxELCBJVGVybUpTT05MRCwgTm9kZVR5cGUsIFRlcm1UZXJtVHlwZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvc2NoZW1hJztcbmltcG9ydCB7IGdldERlZmF1bHRNb2RlbElkIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9nbG9zc2FyeSc7XG5pbXBvcnQgeyB1bmlxdWUsIHRvUHJlY2lzaW9uIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC91dGlscyc7XG5pbXBvcnQgeyBOZ2JQb3BvdmVyIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xuXG5pbXBvcnQgeyBiYXNlVXJsIH0gZnJvbSAnLi4vLi4vY29tbW9uL3V0aWxzJztcbmltcG9ydCB7IGQzd3JhcCB9IGZyb20gJy4uLy4uL2NvbW1vbi9kMy11dGlscyc7XG5pbXBvcnQgeyBMZXZlbCwgcGFyc2VMaW5lcywgcGFyc2VNZXNzYWdlIH0gZnJvbSAnLi4vLi4vY29tbW9uL2xvZ3MtdXRpbHMnO1xuaW1wb3J0IHsgSGVFbmdpbmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZW5naW5lL2VuZ2luZS5zZXJ2aWNlJztcbmltcG9ydCB7IEhlTm9kZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9ub2RlL25vZGUuc2VydmljZSc7XG5pbXBvcnQgeyBIZVNlYXJjaFNlcnZpY2UsIElTZWFyY2hSZXN1bHRFeHRlbmRlZCB9IGZyb20gJy4uLy4uL3NlYXJjaC9zZWFyY2guc2VydmljZSc7XG5pbXBvcnQgeyBtYXRjaFRlcm1UeXBlLCBtYXRjaEV4YWN0UXVlcnksIG1hdGNoVHlwZSB9IGZyb20gJy4uLy4uL3NlYXJjaC9zZWFyY2gubW9kZWwnO1xuXG5lbnVtIENoYXJ0Tm9kZVR5cGUge1xuICBtaWRwb2ludCA9ICdtaWRwb2ludCcsXG4gIGVtaXNzaW9uID0gJ2VtaXNzaW9uJyxcbiAgZW5kcG9pbnQgPSAnZW5kcG9pbnQnLFxuICBpbnB1dCA9ICdpbnB1dCcsXG4gIG9wZXJhdGlvbiA9ICdvcGVyYXRpb24nLFxuICByb290ID0gJ3Jvb3QnXG59XG5cbmludGVyZmFjZSBOb2RlRGF0dW0ge1xuICBpZDogc3RyaW5nO1xuICB0ZXJtOiBzdHJpbmc7XG4gIG1vZGVsSWQ6IHN0cmluZztcbiAgbW9kZWxOYW1lPzogc3RyaW5nO1xuICBtb2RlbERvY3M/OiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHR5cGU6IENoYXJ0Tm9kZVR5cGU7XG4gIHZhbHVlOiBudW1iZXIgfCBudWxsO1xuICB3ZWlnaHRlZFZhbHVlOiBudW1iZXIgfCBudWxsO1xuICBmcmFjdGlvbj86IG51bWJlcjtcbiAgY2hpbGRyZW4/OiBOb2RlRGF0dW1bXTtcbiAgZ3JvdXA/OiBib29sZWFuO1xuICBzaG93QmFyPzogYm9vbGVhbjtcbiAgdW5pdHM6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIENoYXJ0Tm9kZSBleHRlbmRzIEhpZXJhcmNoeVBvaW50Tm9kZTxOb2RlRGF0dW0+IHtcbiAgX2NoaWxkcmVuPzogQ2hhcnROb2RlW107IC8vIGNoaWxkcmVuIG9mIGNvbGxhcHNlZCBub2Rlc1xuICBfZ3JvdXBDaGlsZHJlbj86IENoYXJ0Tm9kZVtdOyAvLyBhbGwgY2hpbGRyZW4gd2hlbiBncm91cCBjbG9zZWQ7IHVuZ3JvdXBlZCBjaGlsZHJlbiB3aGVuIGdyb3VwIG9wZW5cbiAgX29wZW4/OiBib29sZWFuO1xuICBfZ3JleWVkPzogYm9vbGVhbjtcbiAgX2dyb3VwT3Blbj86IGJvb2xlYW47XG4gIF90aW1lb3V0PzogTm9kZUpTLlRpbWVvdXQ7XG59XG5cbmludGVyZmFjZSBITm9kZSBleHRlbmRzIEhpZXJhcmNoeU5vZGU8Tm9kZURhdHVtPiB7XG4gIF9jaGlsZHJlbj86IEhOb2RlW107XG4gIF9ncm91cENoaWxkcmVuPzogSE5vZGVbXTtcbiAgX2dyb3VwT3Blbj86IGJvb2xlYW47XG4gIF9vcGVuPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIExpbmsgZXh0ZW5kcyBIaWVyYXJjaHlQb2ludExpbms8Tm9kZURhdHVtPiB7XG4gIHNvdXJjZTogQ2hhcnROb2RlO1xuICB0YXJnZXQ6IENoYXJ0Tm9kZTtcbn1cblxudHlwZSBOb2RlU2VsZWN0aW9uID0gU2VsZWN0aW9uPFNWR0dFbGVtZW50IHwgQmFzZVR5cGUsIENoYXJ0Tm9kZSwgU1ZHR0VsZW1lbnQsIHVua25vd24+O1xudHlwZSBMaW5rU2VsZWN0aW9uID0gU2VsZWN0aW9uPFNWR1BhdGhFbGVtZW50IHwgQmFzZVR5cGUsIExpbmssIFNWR0dFbGVtZW50LCB1bmtub3duPjtcblxuaW50ZXJmYWNlIElJbnB1dExvZyB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHVuaXRzOiBzdHJpbmc7XG4gIHdlaWdodGVkVmFsdWU6IG51bWJlcjtcbiAgdmFsdWU6IG51bWJlcjtcbiAgb3BlcmF0aW9uczoge1xuICAgIHdlaWdodGVkVmFsdWU6IG51bWJlcjtcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIHVuaXRzOiBzdHJpbmc7XG4gICAgdmFsdWU6IG51bWJlcjtcbiAgfVtdO1xufVxuaW50ZXJmYWNlIElMb2cge1xuICBpbmRpY2F0b3I6IHN0cmluZztcbiAgY29udHJpYnV0b3I6IHN0cmluZztcbiAgY29lZmZpY2llbnQ6IG51bWJlcjtcbiAgdmFsdWU6IG51bWJlcjtcbiAgd2VpZ2h0ZWRWYWx1ZTogbnVtYmVyO1xuICBtb2RlbElkOiBzdHJpbmc7XG4gIGlucHV0cz86IElJbnB1dExvZ1tdO1xufVxuXG5jb25zdCBwYXJzZUxvZyA9IChkYXRhOiBhbnkpOiBJTG9nID0+ICh7XG4gIGluZGljYXRvcjogZGF0YVsna2V5L3Rlcm0nXSB8fCBkYXRhLnRlcm0gfHwgZGF0YS5pbmRpY2F0b3IsXG4gIGNvbnRyaWJ1dG9yOiBkYXRhLm5vZGUsXG4gIGNvZWZmaWNpZW50OiArZGF0YS5jb2VmZmljaWVudCxcbiAgbW9kZWxJZDogZGF0YS5tb2RlbCB8fCAnVW5rbm93bicsXG4gIHdlaWdodGVkVmFsdWU6ICtkYXRhLnZhbHVlICogK2RhdGEuY29lZmZpY2llbnQsXG4gIHZhbHVlOiArZGF0YS52YWx1ZVxufSk7XG5cbmNvbnN0IGZpbHRlclRlcm1UeXBlcyA9IFtcbiAgVGVybVRlcm1UeXBlLnJlc291cmNlVXNlLFxuICBUZXJtVGVybVR5cGUuZW1pc3Npb24sXG4gIFRlcm1UZXJtVHlwZS5jaGFyYWN0ZXJpc2VkSW5kaWNhdG9yLFxuICBUZXJtVGVybVR5cGUuZW5kcG9pbnRJbmRpY2F0b3IsXG4gIFRlcm1UZXJtVHlwZS5tb2RlbFxuXTtcbmNvbnN0IG5vZGVDb2xvdXJzID0ge1xuICBbQ2hhcnROb2RlVHlwZS5lbmRwb2ludF06ICdibHVlJyxcbiAgW0NoYXJ0Tm9kZVR5cGUubWlkcG9pbnRdOiAncmVkJyxcbiAgW0NoYXJ0Tm9kZVR5cGUuZW1pc3Npb25dOiAncHVycGxlJyxcbiAgW0NoYXJ0Tm9kZVR5cGUuaW5wdXRdOiAnZ3JlZW4nLFxuICBbQ2hhcnROb2RlVHlwZS5vcGVyYXRpb25dOiAnb3JhbmdlJ1xufTtcbmNvbnN0IHdpZHRoID0gODAwO1xuY29uc3QgbWFyZ2luID0geyB0b3A6IDEwLCByaWdodDogMjAsIGJvdHRvbTogMTAsIGxlZnQ6IDIwIH07XG5jb25zdCBmb250U2l6ZSA9IE1hdGguZmxvb3Iod2lkdGggLyAxMDApO1xuY29uc3Qgbm9kZVBhZGRpbmcgPSBmb250U2l6ZSAvIDI7XG5jb25zdCBsaW5lSGVpZ2h0ID0gZm9udFNpemUgKiAxLjI7XG5jb25zdCBiYXJIZWlnaHQgPSBsaW5lSGVpZ2h0O1xuXG5jb25zdCBub2RlSGVpZ2h0ID0gbm9kZVBhZGRpbmcgKiAyICsgMiAqIGxpbmVIZWlnaHQgKyBiYXJIZWlnaHQ7XG5jb25zdCBub2RlV2lkdGggPSBub2RlSGVpZ2h0ICogMiAqIDEuNjE4O1xuY29uc3Qgbm9kZUNvbnRlbnRXaWR0aCA9IG5vZGVXaWR0aCAtIG5vZGVQYWRkaW5nICogMjtcbmNvbnN0IGxheWVyU3BhY2luZyA9ICh3aWR0aCAtIG1hcmdpbi5sZWZ0IC0gbWFyZ2luLnJpZ2h0IC0gbm9kZVdpZHRoICogNSkgLyA0O1xuY29uc3Qgbm9kZU1hcmdpbiA9IG5vZGVQYWRkaW5nICogMC43NTtcbmNvbnN0IG5vZGVTcGFjaW5nRmFjdG9yID0gKG5vZGVIZWlnaHQgKyBub2RlTWFyZ2luICogMikgLyBub2RlSGVpZ2h0O1xuY29uc3Qgbm9kZUR1cmF0aW9uID0gNjAwO1xuY29uc3QgbGlua0R1cmF0aW9uID0gMjAwO1xuY29uc3QgZ3JvdXBEZWxheSA9IG5vZGVEdXJhdGlvbiAtIDEwMDtcbmNvbnN0IG5vbkxDQUluZGljYXRvcnNJZCA9ICdub25MQ0FJbmRpY2F0b3JzJztcbmNvbnN0IGdyZXllZE9wYWNpdHkgPSAwLjI7XG5jb25zdCBkZWZhdWx0SW5kaWNhdG9yc01vZGVsSWQgPSAnZGVmYXVsdEluZGljYXRvcnNNb2RlbElkJztcbmNvbnN0IGRlZmF1bHRJbmRpY2F0b3JzTW9kZWxOYW1lID0gJ0RlZmF1bHQgSW5kaWNhdG9ycyAobXVsdGktbW9kZWwpJztcbmNvbnN0IGdyb3VwT3ZlcmxhcCA9IGxpbmVIZWlnaHQgLSBub2RlUGFkZGluZyAtIG5vZGVNYXJnaW47XG5jb25zdCBncm91cE5vZGVTcGFjZSA9IG5vZGVIZWlnaHQgLSAyICogZ3JvdXBPdmVybGFwO1xuXG5jb25zdCBjb2xsYXBzZUNoaWxkcmVuID0gKG5vZGU6IENoYXJ0Tm9kZSB8IEhOb2RlKSA9PiB7XG4gIG5vZGUuX2NoaWxkcmVuID0gbm9kZS5jaGlsZHJlbiB8fCBub2RlLl9jaGlsZHJlbjtcbiAgbm9kZS5jaGlsZHJlbiA9IG51bGw7XG4gIHJldHVybiBub2RlO1xufTtcblxuY29uc3QgcmVzdG9yZUNoaWxkcmVuID0gKG5vZGU6IENoYXJ0Tm9kZSB8IEhOb2RlKSA9PiB7XG4gIG5vZGUuY2hpbGRyZW4gPSBub2RlLl9jaGlsZHJlbjtcbiAgbm9kZS5fY2hpbGRyZW4gPSBudWxsO1xuICByZXR1cm4gbm9kZTtcbn07XG5cbmNvbnN0IHdyYXAgPSAoc2VsZWN0aW9uOiBTZWxlY3Rpb248U1ZHVGV4dEVsZW1lbnQsIENoYXJ0Tm9kZSwgYW55LCBhbnk+LCBtYXhXaWR0aCA9IG5vZGVDb250ZW50V2lkdGgpID0+IHtcbiAgc2VsZWN0aW9uLmVhY2goZnVuY3Rpb24oZCkge1xuICAgIGNvbnN0IHQgPSBkM1NlbGVjdDxTVkdUZXh0RWxlbWVudCwgQ2hhcnROb2RlPih0aGlzKTtcbiAgICBkM3dyYXA8Q2hhcnROb2RlPih0LCB7XG4gICAgICBtYXhXaWR0aCxcbiAgICAgIG1heExpbmVzOiBkLmRhdGEuc2hvd0JhciA/IDIgOiAzLFxuICAgICAgdmNlbnRyZTogIWQuZGF0YS5zaG93QmFyLFxuICAgICAgd29yZHM6IFsuLi5kLmRhdGEubGFiZWwuc3BsaXQoL1xccysvKSwgZC5kYXRhLnVuaXRzXSxcbiAgICAgIG93bkxpbmVXb3JkOiBkLmRhdGEudW5pdHMsXG4gICAgICBuSGVpZ2h0OiBub2RlSGVpZ2h0LFxuICAgICAgbEhlaWdodDogbGluZUhlaWdodFxuICAgIH0pO1xuICB9KTtcbn07XG5cbmNvbnN0IHNldE5vZGVTaXplID0gKHNlbGVjdGlvbikgPT4gc2VsZWN0aW9uLmF0dHIoJ3dpZHRoJywgbm9kZVdpZHRoKS5hdHRyKCdoZWlnaHQnLCBub2RlSGVpZ2h0KTtcblxuY29uc3QgZm9ybWF0QmFyID0gKHNlbGVjdGlvbjogTm9kZVNlbGVjdGlvbikgPT5cbiAgc2VsZWN0aW9uXG4gICAgLmF0dHIoJ2hlaWdodCcsIGJhckhlaWdodClcbiAgICAuYXR0cigncngnLCAnMScpXG4gICAgLmF0dHIoJ3J5JywgJzEnKVxuICAgIC5hdHRyKCd5Jywgbm9kZUhlaWdodCAtIG5vZGVQYWRkaW5nIC0gYmFySGVpZ2h0KVxuICAgIC5hdHRyKCd4Jywgbm9kZVBhZGRpbmcpO1xuXG5jb25zdCBpc1R5cGVXaXRob3V0VmFsdWUgPSAobm9kZURhdHVtKSA9PiBbQ2hhcnROb2RlVHlwZS5pbnB1dCwgQ2hhcnROb2RlVHlwZS5vcGVyYXRpb25dLmluY2x1ZGVzKG5vZGVEYXR1bS5kYXRhLnR5cGUpO1xuXG5jb25zdCBnZXRXZWlnaHRlZFZhbHVlVGV4dCA9IChub2RlRGF0dW0pID0+XG4gIGAke3RvUHJlY2lzaW9uKG5vZGVEYXR1bS5kYXRhLndlaWdodGVkVmFsdWUsIDMpfSR7XG4gICAgbm9kZURhdHVtLnBhcmVudD8uZGF0YS52YWx1ZSA9PT0gbnVsbFxuICAgICAgPyAnJ1xuICAgICAgOiBgIG9mICR7dG9QcmVjaXNpb24obm9kZURhdHVtLnBhcmVudD8uZGF0YS52YWx1ZSB8fCBub2RlRGF0dW0ucGFyZW50Py5kYXRhLndlaWdodGVkVmFsdWUsIDMpfWBcbiAgfSAke25vZGVEYXR1bS5wYXJlbnQ/LmRhdGEudmFsdWUgPyBub2RlRGF0dW0ucGFyZW50Py5kYXRhLnVuaXRzIDogbm9kZURhdHVtLnBhcmVudD8ucGFyZW50Py5kYXRhLnVuaXRzfWA7XG5cbmNvbnN0IGdlbmVyYXRlVGlwRGF0YSA9IChub2RlRGF0dW0pID0+ICh7XG4gIGhhc1dlaWdodGVkVmFsdWU6IG5vZGVEYXR1bS5kYXRhLndlaWdodGVkVmFsdWUsXG4gIHdlaWdodGVkVmFsdWVUZXh0OiBnZXRXZWlnaHRlZFZhbHVlVGV4dChub2RlRGF0dW0pLFxuICB2YWx1ZUtleUhyZWY6IGAke2Jhc2VVcmwoKX0vc2NoZW1hL0luZGljYXRvciN2YWx1ZWAsXG4gIG1vZGVsRG9jc0hyZWY6IG5vZGVEYXR1bS5kYXRhLm1vZGVsRG9jcyxcbiAgdmFsdWVWYWx1ZVRleHQ6IG5vZGVEYXR1bS5kYXRhLnZhbHVlXG4gICAgPyBgJHt0b1ByZWNpc2lvbihub2RlRGF0dW0uZGF0YS52YWx1ZSwgMyl9ICR7bm9kZURhdHVtLmRhdGEudW5pdHN9IC0gYFxuICAgIDogaXNUeXBlV2l0aG91dFZhbHVlKG5vZGVEYXR1bSlcbiAgICA/ICdubyBkYXRhICh1bmRlciBkZXZlbG9wbWVudCknXG4gICAgOiAnbm8gY29udHJpYnV0aW9uJyxcbiAgaGFzVmFsdWU6IG5vZGVEYXR1bS5kYXRhLnZhbHVlLFxuICBtb2RlbEtleUhyZWY6IGAke2Jhc2VVcmwoKX0vc2NoZW1hL0luZGljYXRvciNtZXRob2RNb2RlbGAsXG4gIG1vZGVsVmFsdWU6IG5vZGVEYXR1bS5kYXRhLm1vZGVsTmFtZSxcbiAgbW9kZWxWYWx1ZUhyZWY6IGAke2Jhc2VVcmwoKX0vbW9kZWwvJHtub2RlRGF0dW0uZGF0YS5tb2RlbElkfWAsXG4gIHRlcm1LZXlIcmVmOiBgJHtiYXNlVXJsKCl9L3NjaGVtYS9JbmRpY2F0b3IjdGVybWAsXG4gIHRlcm1WYWx1ZTogbm9kZURhdHVtLmRhdGEudGVybSxcbiAgdGVybVZhbHVlVGV4dDogbm9kZURhdHVtLmRhdGEudGVybSxcbiAgdGVybVZhbHVlSHJlZjogYCR7YmFzZVVybCgpfS90ZXJtLyR7bm9kZURhdHVtLmRhdGEuaWR9YFxufSk7XG5cbmNvbnN0IGFkZFRvb2x0aXAgPSAoXG4gIHNlbGVjdGlvbjogTm9kZVNlbGVjdGlvbixcbiAgeyB0b29sdGlwT3BlcmF0b3IsIHpvbmUgfTogeyB0b29sdGlwT3BlcmF0b3I6IE5nYlBvcG92ZXI7IHpvbmU6IE5nWm9uZSB9XG4pID0+IHtcbiAgbGV0IGhvdmVyaW5nVGlwID0gZmFsc2U7XG4gIGxldCBob3ZlcmluZ05vZGUgPSBmYWxzZTtcbiAgbGV0IGxhc3ROb2RlSWQ6IHN0cmluZztcblxuICBjb25zdCBjbG9zZVRpcCA9ICgpID0+IHtcbiAgICB6b25lLnJ1bigoKSA9PiB0b29sdGlwT3BlcmF0b3IuY2xvc2UoZmFsc2UpKTtcbiAgICBzZWxlY3RBbGwoJy50aXAtdGFyZ2V0JykuY2xhc3NlZCgndGlwLXRhcmdldCcsIGZhbHNlKTtcbiAgICBsYXN0Tm9kZUlkID0gbnVsbDtcbiAgfTtcblxuICBjb25zdCBzdGFydENsb3NlVGlwID0gKCkgPT4ge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKCFob3ZlcmluZ1RpcCAmJiAhaG92ZXJpbmdOb2RlKSB7XG4gICAgICAgIGNsb3NlVGlwKCk7XG4gICAgICB9XG4gICAgfSwgMTAwKTtcbiAgfTtcblxuICBzZWxlY3Rpb25cbiAgICAub24oJ2NsaWNrJywgKF9lLCBkKSA9PiB7XG4gICAgICBjbG9zZVRpcCgpO1xuICAgIH0pXG4gICAgLm9uKCdwb2ludGVyZW50ZXInLCAoZXZlbnQsIG5vZGVEYXR1bSkgPT4ge1xuICAgICAgaG92ZXJpbmdOb2RlID0gdHJ1ZTtcbiAgICAgIGlmIChsYXN0Tm9kZUlkID09PSBub2RlRGF0dW0uZGF0YS5pZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjbG9zZVRpcCgpO1xuICAgICAgbGFzdE5vZGVJZCA9IG5vZGVEYXR1bS5kYXRhLmlkO1xuICAgICAgZDNTZWxlY3QoZXZlbnQudGFyZ2V0KS5jbGFzc2VkKCd0aXAtdGFyZ2V0JywgdHJ1ZSk7XG4gICAgICB6b25lLnJ1bigoKSA9PiB0b29sdGlwT3BlcmF0b3Iub3Blbih7IHRpcERhdGE6IGdlbmVyYXRlVGlwRGF0YShub2RlRGF0dW0pIH0pKTtcblxuICAgICAgZDNTZWxlY3QoJy5kcml2ZXItY2hhcnQtdG9vbHRpcCcpXG4gICAgICAgIC5vbigncG9pbnRlcmVudGVyJywgKCkgPT4ge1xuICAgICAgICAgIGhvdmVyaW5nVGlwID0gdHJ1ZTtcbiAgICAgICAgfSlcbiAgICAgICAgLm9uKCdwb2ludGVybGVhdmUnLCAoKSA9PiB7XG4gICAgICAgICAgaG92ZXJpbmdUaXAgPSBmYWxzZTtcbiAgICAgICAgICBzdGFydENsb3NlVGlwKCk7XG4gICAgICAgIH0pO1xuICAgIH0pXG4gICAgLm9uKCdwb2ludGVybGVhdmUnLCAoX2UsIGQpID0+IHtcbiAgICAgIGhvdmVyaW5nTm9kZSA9IGZhbHNlO1xuICAgICAgc3RhcnRDbG9zZVRpcCgpO1xuICAgIH0pO1xuXG4gIHJldHVybiBzZWxlY3Rpb247XG59O1xuXG5jb25zdCBtZXJnZWROb2RlcyA9IChzZWxlY3Rpb246IE5vZGVTZWxlY3Rpb24sIHsgdG9vbHRpcE9wZXJhdG9yLCB6b25lIH0pID0+IHtcbiAgc2VsZWN0aW9uXG4gICAgLnNlbGVjdEFsbDxTVkdSZWN0RWxlbWVudCwgQ2hhcnROb2RlPignLm5vZGUtYm94JylcbiAgICAuY2xhc3NlZCgnbm9kZS1vcGVuYWJsZScsIChkKSA9PiAhIWQuaGVpZ2h0KVxuICAgIC5jbGFzc2VkKCdub2RlLW9wZW4nLCAoZCkgPT4gZC5fb3BlbilcbiAgICAuY2FsbChzZXROb2RlU2l6ZSlcbiAgICAuYXR0cignc3Ryb2tlJywgKHsgZGF0YSB9KSA9PiBub2RlQ29sb3Vyc1tkYXRhLnR5cGVdKVxuICAgIC5hdHRyKCdmaWxsJywgKGQpID0+IG5vZGVDb2xvdXJzW2QuZGF0YS50eXBlXSlcbiAgICAuc3R5bGUoJ3VzZXItc2VsZWN0Jywgd2luZG93LmlubmVyV2lkdGggPCA3NjggPyAnbm9uZScgOiBudWxsKTtcblxuICBzZWxlY3Rpb25cbiAgICAuZmlsdGVyKChkKSA9PiAhZC5kYXRhLmdyb3VwICYmIGQuZGF0YS5pZCAhPT0gbm9uTENBSW5kaWNhdG9yc0lkKVxuICAgIC5jYWxsKGFkZFRvb2x0aXAsIHsgdG9vbHRpcE9wZXJhdG9yLCB6b25lIH0pO1xuXG4gIHNlbGVjdGlvblxuICAgIC5zZWxlY3RBbGw8U1ZHVGV4dEVsZW1lbnQsIENoYXJ0Tm9kZT4oJy5ub2RlLWxhYmVsJylcbiAgICAuYXR0cigneScsIChkKSA9PiAoZC5kYXRhLnNob3dCYXIgPyBsaW5lSGVpZ2h0IC8gMiArIG5vZGVQYWRkaW5nIC8gMiA6IDApKVxuICAgIC5hdHRyKCd4Jywgbm9kZVdpZHRoIC8gMik7XG5cbiAgY29uc3QgZ3JvdXBzID0gc2VsZWN0aW9uLmZpbHRlcigoZCkgPT4gZC5kYXRhLmdyb3VwKTtcblxuICBncm91cHNcbiAgICAuc2VsZWN0QWxsPFNWR1RleHRFbGVtZW50LCBDaGFydE5vZGU+KCcuZ3JvdXAtYm9yZGVyJylcbiAgICAuYXR0cignd2lkdGgnLCBub2RlV2lkdGggKyBub2RlUGFkZGluZyAqIDIpXG4gICAgLmF0dHIoJ3gnLCAtbm9kZVBhZGRpbmcpXG4gICAgLmF0dHIoJ3knLCBub2RlSGVpZ2h0IC0gKGxpbmVIZWlnaHQgKyBub2RlUGFkZGluZyAqIDIpKVxuICAgIC5hdHRyKCdvcGFjaXR5JywgKGQpID0+IChkLl9ncmV5ZWQgJiYgZC5fZ3JvdXBPcGVuID8gZ3JleWVkT3BhY2l0eSA6IGQuX2dyb3VwT3BlbiA/IDEgOiAwKSlcbiAgICAuYXR0cihcbiAgICAgICdoZWlnaHQnLFxuICAgICAgKGQpID0+XG4gICAgICAgIE1hdGguYWJzKGQucGFyZW50Ll9ncm91cENoaWxkcmVuLmxlbmd0aCAtIGQucGFyZW50LmNoaWxkcmVuLmxlbmd0aCkgKiAobm9kZUhlaWdodCAqIG5vZGVTcGFjaW5nRmFjdG9yKSArXG4gICAgICAgIG5vZGVQYWRkaW5nICtcbiAgICAgICAgKGxpbmVIZWlnaHQgKyBub2RlUGFkZGluZyAqIDIpIC8gMlxuICAgICk7XG5cbiAgY29uc3QgZ3JvdXBMYWJlbHMgPSBncm91cHNcbiAgICAuc2VsZWN0QWxsPFNWR1RleHRFbGVtZW50LCBDaGFydE5vZGU+KCcuZ3JvdXAtbGFiZWwnKVxuICAgIC5hdHRyKCd5Jywgbm9kZUhlaWdodCAvIDIpXG4gICAgLmF0dHIoJ3gnLCBub2RlUGFkZGluZylcbiAgICAudGV4dCgoZCkgPT4gZC5kYXRhLmxhYmVsKVxuICAgIC5hdHRyKCdvcGFjaXR5JywgKGQpID0+IChkLl9ncm91cE9wZW4gPyAwIDogZC5fZ3JleWVkID8gZ3JleWVkT3BhY2l0eSA6IDEpKTtcblxuICAvLyB1bm5lZWRlZCB3aXRoIGN1cnJlbnQgZGltZW5zaW9uc1xuICAvLyBncm91cExhYmVscy5lYWNoKGZ1bmN0aW9uKCkge1xuICAvLyAgIGNvbnN0IHRleHQgPSBkM1NlbGVjdDxTVkdUZXh0RWxlbWVudCwgQ2hhcnROb2RlPih0aGlzKTtcbiAgLy8gICBjb25zdCB0ZXh0V2lkdGggPSAodGV4dC5ub2RlKCkgYXMgU1ZHVGV4dEVsZW1lbnQpLmdldENvbXB1dGVkVGV4dExlbmd0aCgpO1xuICAvLyAgIGNvbnN0IGxpbmUgPSBkM1NlbGVjdDxTVkdMaW5lRWxlbWVudCwgQ2hhcnROb2RlPih0aGlzLm5leHRTaWJsaW5nIGFzIFNWR0xpbmVFbGVtZW50KTtcbiAgLy8gICBsaW5lXG4gIC8vICAgICAuY2xhc3NlZCgnZ3JvdXAtbGluZScsIHRydWUpXG4gIC8vICAgICAuYXR0cigneDEnLCB0ZXh0V2lkdGggKyBub2RlUGFkZGluZyAqIDIpXG4gIC8vICAgICAuYXR0cigneTEnLCBub2RlSGVpZ2h0IC8gMilcbiAgLy8gICAgIC5hdHRyKCd4MicsIChub2RlV2lkdGggKiA1KSAvIDcgLSBub2RlUGFkZGluZylcbiAgLy8gICAgIC5hdHRyKCd5MicsIG5vZGVIZWlnaHQgLyAyKVxuICAvLyAgICAgLmF0dHIoJ29wYWNpdHknLCAoZCkgPT4gKGQuX2dyb3VwT3BlbiA/IDAgOiBkLl9ncmV5ZWQgPyBncmV5ZWRPcGFjaXR5IDogMSkpO1xuICAvLyB9KTtcblxuICBjb25zdCBzZXRHcm91cEJ1dHRvblhZID0gKHNlbCkgPT5cbiAgICBzZWxcbiAgICAgIC5hdHRyKCd3aWR0aCcsIChub2RlV2lkdGggKiAyKSAvIDcpXG4gICAgICAuYXR0cignaGVpZ2h0JywgKGQpID0+IChkLl9ncm91cE9wZW4gPyBsaW5lSGVpZ2h0ICsgbm9kZVBhZGRpbmcgKiAyIDogbm9kZVBhZGRpbmcgKiAyICsgbGluZUhlaWdodCkpXG4gICAgICAuYXR0cigneCcsIChkKSA9PiAoZC5fZ3JvdXBPcGVuID8gKG5vZGVXaWR0aCAqIDIuNSkgLyA3IDogKG5vZGVXaWR0aCAqIDUpIC8gNyAtIG5vZGVQYWRkaW5nKSlcbiAgICAgIC5hdHRyKCd5JywgKGQpID0+XG4gICAgICAgIGQuX2dyb3VwT3BlblxuICAgICAgICAgID8gZ3JvdXBPdmVybGFwICsgKGdyb3VwTm9kZVNwYWNlIC0gKGxpbmVIZWlnaHQgKyBub2RlUGFkZGluZyAqIDIpKSAvIDJcbiAgICAgICAgICA6IG5vZGVQYWRkaW5nICsgbGluZUhlaWdodCAvIDJcbiAgICAgICk7XG5cbiAgZ3JvdXBzXG4gICAgLnNlbGVjdEFsbDxTVkdSZWN0RWxlbWVudCwgQ2hhcnROb2RlPignLmdyb3VwLWJ1dHRvbicpXG4gICAgLmNhbGwoc2V0R3JvdXBCdXR0b25YWSlcbiAgICAuc3R5bGUoJ3BvaW50ZXItZXZlbnRzJywgKGQpID0+IChkLl9ncmV5ZWQgPyAnbm9uZScgOiAnYXV0bycpKVxuICAgIC5zdHlsZSgnc3Ryb2tlLW9wYWNpdHknLCAoZCkgPT4gKGQuX2dyZXllZCA/IGdyZXllZE9wYWNpdHkgOiAxKSk7XG5cbiAgZ3JvdXBzXG4gICAgLnNlbGVjdEFsbDxTVkdUZXh0RWxlbWVudCwgQ2hhcnROb2RlPignLmdyb3VwLWJ1dHRvbi10ZXh0JylcbiAgICAudGV4dCgoZCkgPT4gKGQuX2dyb3VwT3BlbiA/ICdIaWRlJyA6ICdTaG93JykpXG4gICAgLmF0dHIoJ3gnLCAoZCkgPT4gKGQuX2dyb3VwT3BlbiA/IG5vZGVXaWR0aCAvIDIgOiAobm9kZVdpZHRoICogNikgLyA3IC0gbm9kZVBhZGRpbmcpKVxuICAgIC5hdHRyKCd5JywgKGQpID0+IChkLl9ncm91cE9wZW4gPyBub2RlTWFyZ2luICsgbGluZUhlaWdodCArIGxpbmVIZWlnaHQgLyAyIDogbm9kZUhlaWdodCAvIDIpKVxuICAgIC5hdHRyKCdmb250LXNpemUnLCAoZCkgPT4gYCR7Zm9udFNpemUgKiAxLjN9cHhgKTtcblxuICBzZWxlY3Rpb24uc2VsZWN0QWxsKCcuc2libGluZy1tYXNrJykucmVtb3ZlKCk7XG5cbiAgc2VsZWN0aW9uXG4gICAgLmZpbHRlcigoZCkgPT4gZC5fZ3JleWVkICYmICFkLmRhdGEuZ3JvdXApXG4gICAgLmFwcGVuZCgncmVjdCcpXG4gICAgLmNsYXNzZWQoJ25vZGUtb3BlbmFibGUnLCAoZCkgPT4gISFkLmhlaWdodClcbiAgICAuY2xhc3NlZCgnc2libGluZy1tYXNrIG1hc2stb3BlbmFibGUnLCB0cnVlKVxuICAgIC5jYWxsKHNldE5vZGVTaXplKTtcblxuICBzZWxlY3Rpb25cbiAgICAuZmlsdGVyKChkKSA9PiBkLl9ncmV5ZWQgJiYgZC5kYXRhLmdyb3VwKVxuICAgIC5hcHBlbmQoJ3JlY3QnKVxuICAgIC5jbGFzc2VkKCdzaWJsaW5nLW1hc2snLCB0cnVlKVxuICAgIC5jYWxsKHNldEdyb3VwQnV0dG9uWFkpO1xuXG4gIHJldHVybiBzZWxlY3Rpb247XG59O1xuXG5jb25zdCBlbnRlck5vZGVzID0gKHNlbGVjdGlvbjogTm9kZVNlbGVjdGlvbikgPT4ge1xuICBjb25zdCBub2RlcyA9IHNlbGVjdGlvbi5maWx0ZXIoKGQpID0+IGQuZGF0YS50eXBlICE9PSBDaGFydE5vZGVUeXBlLnJvb3QgJiYgIWQuZGF0YS5ncm91cCk7XG5cbiAgbm9kZXMuYXBwZW5kKCdyZWN0JykuY2xhc3NlZCgnbm9kZS1ib3gnLCB0cnVlKTtcblxuICBub2Rlc1xuICAgIC5hcHBlbmQoJ3RleHQnKVxuICAgIC5jbGFzc2VkKCdub2RlLWxhYmVsJywgdHJ1ZSlcbiAgICAudGV4dCgoeyBkYXRhIH0pID0+IGRhdGEubGFiZWwgKyAnICcgKyBkYXRhLnVuaXRzKVxuICAgIC5hdHRyKCdvcGFjaXR5JywgMCk7XG5cbiAgLy8gVGV4dCBlbGVtZW50cyBtdXN0IGJlIHJlbmRlcmVkIGJlZm9yZSB3ZSBjYW4gY2FsY3VsYXRlIHdyYXBwaW5nXG4gIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIGNvbnN0IGxhYmVscyA9IG5vZGVzLnNlbGVjdEFsbDxTVkdUZXh0RWxlbWVudCwgQ2hhcnROb2RlPignLm5vZGUtbGFiZWwnKS5jYWxsKHdyYXApO1xuICAgIGxhYmVscy5hdHRyKCdvcGFjaXR5JywgMSk7XG4gIH0pO1xuXG4gIGNvbnN0IGdyb3VwcyA9IHNlbGVjdGlvbi5maWx0ZXIoKGQpID0+IGQuZGF0YS5ncm91cCk7XG5cbiAgZ3JvdXBzLmFwcGVuZCgncmVjdCcpLmF0dHIoJ2NsYXNzJywgJ2dyb3VwLWJvcmRlcicpO1xuICBncm91cHMuYXBwZW5kKCd0ZXh0JykuYXR0cignY2xhc3MnLCAnZ3JvdXAtbGFiZWwnKTtcbiAgLy8gZ3JvdXBzLmFwcGVuZCgnbGluZScpLmF0dHIoJ2NsYXNzJywgJ2dyb3VwLWxpbmUnKTtcbiAgZ3JvdXBzLmFwcGVuZCgncmVjdCcpLmF0dHIoJ2NsYXNzJywgJ2dyb3VwLWJ1dHRvbicpO1xuICBncm91cHMuYXBwZW5kKCd0ZXh0JykuYXR0cignY2xhc3MnLCAnZ3JvdXAtYnV0dG9uLXRleHQnKTtcblxuICBjb25zdCB3aXRoQmFyID0gbm9kZXMuZmlsdGVyKChkKSA9PiBkLmRhdGEuc2hvd0Jhcik7XG5cbiAgd2l0aEJhclxuICAgIC5maWx0ZXIoKGQpID0+IGQuZGF0YS5mcmFjdGlvbiA+IDApXG4gICAgLmFwcGVuZCgncmVjdCcpXG4gICAgLmNsYXNzZWQoJ2Jhci1iYWNrZ3JvdW5kJywgdHJ1ZSlcbiAgICAuYXR0cignd2lkdGgnLCBub2RlQ29udGVudFdpZHRoKVxuICAgIC5jYWxsKGZvcm1hdEJhcik7XG5cbiAgd2l0aEJhclxuICAgIC5hcHBlbmQoJ3JlY3QnKVxuICAgIC5jbGFzc2VkKCdiYXItZm9yZWdyb3VuZCcsIHRydWUpXG4gICAgLmNhbGwoZm9ybWF0QmFyKVxuICAgIC5hdHRyKCd3aWR0aCcsIChkKSA9PiBkLmRhdGEuZnJhY3Rpb24gKiBub2RlQ29udGVudFdpZHRoKVxuICAgIC5hdHRyKCdmaWxsJywgKGQpID0+IG5vZGVDb2xvdXJzW2QuZGF0YS50eXBlXSk7XG5cbiAgd2l0aEJhclxuICAgIC5hcHBlbmQoJ3RleHQnKVxuICAgIC5jbGFzc2VkKCdiYXItbGFiZWwnLCB0cnVlKVxuICAgIC50ZXh0KCh7IGRhdGEgfSkgPT5cbiAgICAgIGRhdGEuZnJhY3Rpb24gPT09IDBcbiAgICAgICAgPyAnbm8gY29udHJpYnV0aW9uJ1xuICAgICAgICA6IGAke01hdGgucm91bmQoMTAwICogZGF0YS5mcmFjdGlvbil9JSAke01hdGgucm91bmQoMTAwICogZGF0YS5mcmFjdGlvbikgPT09IDAgPyAnIChyb3VuZGVkKScgOiAnJ31gXG4gICAgKVxuICAgIC5hdHRyKCd0ZXh0LWFuY2hvcicsIChkKSA9PiAoZC5kYXRhLmZyYWN0aW9uID09PSAwID8gJ21pZGRsZScgOiBkLmRhdGEuZnJhY3Rpb24gPiAwLjcgPyAnZW5kJyA6ICdzdGFydCcpKVxuICAgIC5hdHRyKCd4JywgKGQpID0+XG4gICAgICBkLmRhdGEuZnJhY3Rpb24gPT09IDBcbiAgICAgICAgPyBub2RlV2lkdGggLyAyXG4gICAgICAgIDogZC5kYXRhLmZyYWN0aW9uICogbm9kZUNvbnRlbnRXaWR0aCArIG5vZGVQYWRkaW5nICsgKGQuZGF0YS5mcmFjdGlvbiA+IDAuNyA/IC00IDogNClcbiAgICApXG4gICAgLmF0dHIoJ3knLCBub2RlSGVpZ2h0IC0gbm9kZVBhZGRpbmcgLSBiYXJIZWlnaHQgLyAyKTtcblxuICByZXR1cm4gc2VsZWN0aW9uO1xufTtcblxuY29uc3QgbWVyZ2VkTGlua3MgPSAoc2VsZWN0aW9uOiBMaW5rU2VsZWN0aW9uLCB7IHRvZ2dsaW5nR3JvdXAsIHN3aXRjaGluZ1NlbGVjdGlvbiB9KSA9PlxuICBzZWxlY3Rpb25cbiAgICAuc3R5bGUoJ3N0cm9rZScsIChkKSA9PiB7XG4gICAgICBjb25zdCBjb2xvdXJzID0ge1xuICAgICAgICBbQ2hhcnROb2RlVHlwZS5taWRwb2ludF06IG5vZGVDb2xvdXJzW0NoYXJ0Tm9kZVR5cGUubWlkcG9pbnRdLFxuICAgICAgICBbQ2hhcnROb2RlVHlwZS5lbmRwb2ludF06IG5vZGVDb2xvdXJzW0NoYXJ0Tm9kZVR5cGUuZW5kcG9pbnRdLFxuICAgICAgICBbQ2hhcnROb2RlVHlwZS5lbWlzc2lvbl06IG5vZGVDb2xvdXJzW0NoYXJ0Tm9kZVR5cGUuZW1pc3Npb25dXG4gICAgICB9O1xuICAgICAgcmV0dXJuIChkLnRhcmdldC5fb3BlbiAmJiBjb2xvdXJzW2Quc291cmNlLmRhdGEudHlwZV0pIHx8IG51bGw7XG4gICAgfSlcbiAgICAuYXR0cignc3Ryb2tlLWRhc2hhcnJheScsIChkKSA9PiAoZC50YXJnZXQuZGF0YS5ncm91cCA/ICcyLDUnIDogbnVsbCkpXG4gICAgLmF0dHIoJ3N0cm9rZS13aWR0aCcsIChkKSA9PiAoZC50YXJnZXQuX29wZW4gPyAzIDogZC50YXJnZXQuX2dyb3VwT3BlbiA/IDAgOiAyKSlcbiAgICAuYXR0cignc3Ryb2tlLW9wYWNpdHknLCAoZCkgPT4gKGQudGFyZ2V0Ll9ncmV5ZWQgPyAwLjEgOiAwLjYpKVxuICAgIC50cmFuc2l0aW9uKClcbiAgICAuZHVyYXRpb24obGlua0R1cmF0aW9uKVxuICAgIC5kZWxheSgoZCkgPT4ge1xuICAgICAgY29uc3QgZ3JvdXBDbG9zaW5nID0gdG9nZ2xpbmdHcm91cCAmJiAhZC50YXJnZXQucGFyZW50Py5jaGlsZHJlbj8uZmluZCgobikgPT4gbi5kYXRhLmdyb3VwKT8uX2dyb3VwT3BlbjtcbiAgICAgIHJldHVybiBncm91cENsb3NpbmdcbiAgICAgICAgPyBncm91cERlbGF5XG4gICAgICAgIDogKHN3aXRjaGluZ1NlbGVjdGlvbiA/IG5vZGVEdXJhdGlvbiA6IDApICsgZC5zb3VyY2UuY2hpbGRyZW4/LmluZGV4T2YoZC50YXJnZXQpICogMTA7XG4gICAgfSlcbiAgICAuYXR0cignb3BhY2l0eScsIDEpXG4gICAgLmF0dHIoJ2QnLCAoZCkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0RHkgPSBkLnRhcmdldC5fZ3JvdXBPcGVuID8gbm9kZVBhZGRpbmcgKyBsaW5lSGVpZ2h0IC8gMiArIG5vZGVNYXJnaW4gKiAyIDogbm9kZUhlaWdodCAvIDI7XG4gICAgICByZXR1cm4gZDNMaW5rSG9yaXpvbnRhbCgpKHtcbiAgICAgICAgc291cmNlOiBbZC5zb3VyY2UueSArIG5vZGVXaWR0aCwgZC5zb3VyY2UueCArIG5vZGVIZWlnaHQgLyAyXSxcbiAgICAgICAgdGFyZ2V0OiBbZC50YXJnZXQueSwgZC50YXJnZXQueCArIHRhcmdldER5XVxuICAgICAgfSk7XG4gICAgfSk7XG5cbmNvbnN0IGdyb3VwQnlQZXJjZW50YWdlID0gKG5vZGUpID0+XG4gIFtDaGFydE5vZGVUeXBlLmVuZHBvaW50LCBDaGFydE5vZGVUeXBlLm1pZHBvaW50LCBDaGFydE5vZGVUeXBlLmVtaXNzaW9uXS5pbmNsdWRlcyhub2RlLmRhdGEudHlwZSk7XG5cbmNvbnN0IGdyb3VwUGVyY2VudGFnZSA9IChub2RlLCBwZXJjZW50YWdlID0gMC4wMikgPT4ge1xuICBjb25zdCBncm91cGVkID0gbm9kZS5fY2hpbGRyZW4/LmZpbHRlcigoY2hpbGQpID0+IGNoaWxkLmRhdGEuZnJhY3Rpb24gPCBwZXJjZW50YWdlKTtcbiAgaWYgKG5vZGUuX2NoaWxkcmVuPy5sZW5ndGggPiA2ICYmIGdyb3VwZWQ/Lmxlbmd0aCA+IDEpIHtcbiAgICBjb25zdCB0eXBlID0gbm9kZS5fY2hpbGRyZW5bMF0uZGF0YS50eXBlO1xuICAgIGNvbnN0IGdyb3VwTm9kZSA9IHtcbiAgICAgIC4uLmQzSGllcmFyY2h5KHtcbiAgICAgICAgaWQ6IGAke3R5cGV9LWdyb3VwYCxcbiAgICAgICAgbGFiZWw6IGAke2dyb3VwZWQubGVuZ3RofSBtb3JlIHVuZGVyICR7TWF0aC5yb3VuZChwZXJjZW50YWdlICogMTAwKX0lLmAsXG4gICAgICAgIHdlaWdodGVkVmFsdWU6IG51bGwsXG4gICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICB0eXBlLFxuICAgICAgICBncm91cDogdHJ1ZVxuICAgICAgfSksXG4gICAgICBkZXB0aDogbm9kZS5kZXB0aCArIDEsXG4gICAgICBoZWlnaHQ6IDEsXG4gICAgICBwYXJlbnQ6IG5vZGVcbiAgICB9O1xuICAgIGNvbnN0IG5vdEdyb3VwZWQgPSBub2RlLl9jaGlsZHJlbj8uZmlsdGVyKChjaGlsZCkgPT4gY2hpbGQuZGF0YS5mcmFjdGlvbiA+PSBwZXJjZW50YWdlKTtcbiAgICBub2RlLl9jaGlsZHJlbi5zcGxpY2Uobm90R3JvdXBlZC5sZW5ndGgsIDAsIGdyb3VwTm9kZSk7XG4gICAgbm90R3JvdXBlZC5wdXNoKGdyb3VwTm9kZSk7XG4gICAgbm9kZS5fZ3JvdXBDaGlsZHJlbiA9IG5vZGUuX2NoaWxkcmVuO1xuICAgIG5vZGUuX2NoaWxkcmVuID0gbm90R3JvdXBlZDtcbiAgfVxufTtcblxuY29uc3Qgc2hvd0JhciA9IChub2RlKSA9PlxuICBbXG4gICAgbm9kZS5wYXJlbnQ/LmRhdGEudHlwZSAhPT0gQ2hhcnROb2RlVHlwZS5yb290LFxuICAgIG5vZGUucGFyZW50Py5kYXRhLmlkICE9PSBub25MQ0FJbmRpY2F0b3JzSWQsXG4gICAgIW5vZGUuZGF0YS5ncm91cCxcbiAgICBub2RlLmRhdGEuZnJhY3Rpb24gPj0gMFxuICBdLmV2ZXJ5KEJvb2xlYW4pO1xuXG5jb25zdCBnZXRVbml0c0FuZExhYmVsID0gKHRlcm06IFBhcnRpYWw8SVRlcm1KU09OTEQ+LCBmYWxsYmFja0xhYmVsID0gJ3Vua25vd24gdGVybScpID0+IHtcbiAgY29uc3QgbGFiZWwgPSB0ZXJtPy5uYW1lIHx8IHRlcm0/LlsnQGlkJ10gfHwgZmFsbGJhY2tMYWJlbDtcbiAgY29uc3QgdW5pdHMgPSBgKCR7dGVybT8udW5pdHMgfHwgJ3Vua25vd24gdW5pdHMnfSlgO1xuICByZXR1cm4geyBsYWJlbDogbGFiZWwucmVwbGFjZSh1bml0cywgJycpLnRyaW0oKSwgdGVybTogbGFiZWwsIHVuaXRzIH07XG59O1xuXG5jb25zdCBxdWVyeSA9IChzaG91bGQpID0+ICh7XG4gIGZpZWxkczogWydAdHlwZScsICdAaWQnLCAnbmFtZScsICd1bml0cycsICd0ZXJtVHlwZSddLFxuICBsaW1pdDogMTAwMDAsXG4gIHF1ZXJ5OiB7XG4gICAgYm9vbDoge1xuICAgICAgbXVzdDogW21hdGNoVHlwZShOb2RlVHlwZS5UZXJtKV0sXG4gICAgICBzaG91bGQsXG4gICAgICBtaW5pbXVtX3Nob3VsZF9tYXRjaDogMVxuICAgIH1cbiAgfVxufSk7XG5cbnR5cGUgVGVybSA9IElUZXJtSlNPTkxEICYgSVNlYXJjaFJlc3VsdEV4dGVuZGVkICYgeyBkb2NzPzogc3RyaW5nIH07XG5cbmNvbnN0IGxlZ2VuZCA9IFtcbiAgeyB0eXBlOiBDaGFydE5vZGVUeXBlLmVuZHBvaW50LCBtb2JpbGVUZXh0OiAnRW5kcG9pbnQnLCB0ZXh0OiAnRW5kcG9pbnQgSW5kaWNhdG9yJyB9LFxuICB7IHR5cGU6IENoYXJ0Tm9kZVR5cGUubWlkcG9pbnQsIHRleHQ6ICdDaGFyYWN0ZXJpc2VkIEluZGljYXRvcicsIG1vYmlsZVRleHQ6ICdJbXBhY3QnIH0sXG4gIHsgdHlwZTogQ2hhcnROb2RlVHlwZS5lbWlzc2lvbiwgbW9iaWxlVGV4dDogJ0VtaXNzaW9uJywgdGV4dDogJ0VtaXNzaW9uIG9yIFJlc291cmNlIFVzZScgfSxcbiAgeyB0eXBlOiBDaGFydE5vZGVUeXBlLmlucHV0LCB0ZXh0OiAnSW5wdXQnLCBtb2JpbGVUZXh0OiAnSW5wdXQnIH0sXG4gIHsgdHlwZTogQ2hhcnROb2RlVHlwZS5vcGVyYXRpb24sIHRleHQ6ICdPcGVyYXRpb24nLCBtb2JpbGVUZXh0OiAnT3BlcmF0aW9uJyB9XG5dO1xuXG5jb25zdCB3YXJuaW5ncyA9IChsb2dzOiBJTG9nW10sIHRlcm1zOiB7IFtpZDogc3RyaW5nXTogVGVybSB9KSA9PiBbXG4gICFsb2dzLmV2ZXJ5KGxvZyA9PiB0ZXJtc1tsb2cuaW5kaWNhdG9yXSAmJiB0ZXJtc1tsb2cuY29udHJpYnV0b3JdKSAmJiAnbWlzc2luZy10ZXJtcydcbl0uZmlsdGVyKEJvb2xlYW4pO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdoZS1pbXBhY3QtYXNzZXNzbWVudHMtZ3JhcGgnLFxuICB0ZW1wbGF0ZVVybDogJy4vaW1wYWN0LWFzc2Vzc21lbnRzLWdyYXBoLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaW1wYWN0LWFzc2Vzc21lbnRzLWdyYXBoLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgSW1wYWN0QXNzZXNzbWVudHNHcmFwaENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGluaXRpYWxUZXJtczogeyBbaWQ6IHN0cmluZ106IFRlcm0gfTtcbiAgcHJpdmF0ZSBhbGxUZXJtczogeyBbaWQ6IHN0cmluZ106IFRlcm0gfTtcblxuICBwcml2YXRlIHJvb3Q/OiBITm9kZTtcbiAgcHJpdmF0ZSBub2RlOiBOb2RlU2VsZWN0aW9uO1xuICBwcml2YXRlIGxpbms6IExpbmtTZWxlY3Rpb247XG4gIHByaXZhdGUgc3ZnOiBTZWxlY3Rpb248U1ZHU1ZHRWxlbWVudCwgYW55LCBIVE1MRWxlbWVudCwgdW5rbm93bj47XG4gIHByaXZhdGUgeU1pbjogbnVtYmVyO1xuICBwcml2YXRlIHlUb3RhbDogbnVtYmVyO1xuICBwcml2YXRlIGxvZ3NBbGxNb2RlbHM6IElMb2dbXTtcblxuICBAVmlld0NoaWxkKCdjaGFydCcpXG4gIHByaXZhdGUgY2hhcnRSZWY/OiBFbGVtZW50UmVmO1xuXG4gIEBWaWV3Q2hpbGQoJ3QnKVxuICBwcml2YXRlIHRvb2x0aXBPcGVyYXRvcj86IE5nYlBvcG92ZXI7XG5cbiAgQElucHV0KClcbiAgcHJpdmF0ZSBpbXBhY3RBc3Nlc3NtZW50czogSUltcGFjdEFzc2Vzc21lbnRKU09OTERbXSA9IFtdO1xuICBASW5wdXQoKVxuICBwcml2YXRlIGRhdGFTdGF0ZSA9IERhdGFTdGF0ZS5yZWNhbGN1bGF0ZWQ7XG5cbiAgcHVibGljIGxvYWRpbmcgPSB0cnVlO1xuICBwdWJsaWMgbm9kZUNvbG91cnMgPSBub2RlQ29sb3VycztcbiAgcHVibGljIG5vRGF0YSA9IGZhbHNlO1xuICBwdWJsaWMgZXJyb3I/OiBhbnk7XG4gIHB1YmxpYyB3YXJuaW5nczogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIHNob3dXYXJuaW5ncyA9IGZhbHNlO1xuICBwdWJsaWMgc2VsZWN0ZWRJbXBhY3RBc3Nlc3NtZW50SWQ6IHN0cmluZztcbiAgcHVibGljIGZpbHRlcmVkSW1wYWN0QXNzZXNzbWVudHM6IElJbXBhY3RBc3Nlc3NtZW50SlNPTkxEW107XG4gIHB1YmxpYyBzZWxlY3RlZE1vZGVsSWQ6IHN0cmluZztcbiAgcHVibGljIG1vZGVsczogUGFydGlhbDxJVGVybUpTT05MRD5bXTtcbiAgcHVibGljIGxlZ2VuZCA9IGxlZ2VuZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgIHByaXZhdGUgc2VhcmNoU2VydmljZTogSGVTZWFyY2hTZXJ2aWNlLFxuICAgIHByaXZhdGUgbm9kZVNlcnZpY2U6IEhlTm9kZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbmdpbmVTZXJ2aWNlOiBIZUVuZ2luZVNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHJldHVybiB0aGlzLmluaXRJbXBhY3RBc3Nlc3NtZW50cygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVsb2FkQ2hhcnQoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoJ2ltcGFjdEFzc2Vzc21lbnRzJyBpbiBjaGFuZ2VzKSB7XG4gICAgICB0aGlzLmluaXRJbXBhY3RBc3Nlc3NtZW50cygpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZWxvYWRDaGFydCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0SW1wYWN0QXNzZXNzbWVudHMoKSB7XG4gICAgdGhpcy5maWx0ZXJlZEltcGFjdEFzc2Vzc21lbnRzID0gdGhpcy5pbXBhY3RBc3Nlc3NtZW50cy5maWx0ZXIoKGlhKSA9PiBpYS5lbmRwb2ludHM/Lmxlbmd0aCB8fCBpYS5pbXBhY3RzPy5sZW5ndGgpO1xuICAgIHRoaXMuc2VsZWN0ZWRJbXBhY3RBc3Nlc3NtZW50SWQgPSB0aGlzLnNlbGVjdGVkSW1wYWN0QXNzZXNzbWVudElkIHx8IHRoaXMuZmlsdGVyZWRJbXBhY3RBc3Nlc3NtZW50cz8uWzBdPy5bJ0BpZCddO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkSW5pdGlhbFRlcm1zKCkge1xuICAgIGNvbnN0IHsgcmVzdWx0czogdGVybXMgfSA9IGF3YWl0IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2g8SVRlcm1KU09OTEQsIE5vZGVUeXBlLlRlcm0+KFxuICAgICAgcXVlcnkoZmlsdGVyVGVybVR5cGVzLm1hcCgodGVybVR5cGUpID0+IG1hdGNoVGVybVR5cGUodGVybVR5cGUpKSlcbiAgICApO1xuICAgIGNvbnN0IGF1Z21lbnRlZFRlcm1zID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICB0ZXJtcy5tYXAoYXN5bmMgKHQ6IFRlcm0pID0+IHtcbiAgICAgICAgaWYgKHQudGVybVR5cGUgPT09ICdtb2RlbCcpIHtcbiAgICAgICAgICBjb25zdCBtb2RlbCA9IGF3YWl0IHRoaXMuZW5naW5lU2VydmljZS5tb2RlbCh7IG1vZGVsOiB0WydAaWQnXSB9KTtcbiAgICAgICAgICB0LmRvY3MgPSBtb2RlbD8uYXBpRG9jc1BhdGggfHwgbW9kZWw/LmRvY1BhdGggfHwgbW9kZWw/LnBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5pbml0aWFsVGVybXMgPSBPYmplY3QuZnJvbUVudHJpZXMoYXVnbWVudGVkVGVybXMubWFwKCh0ZXJtKSA9PiBbdGVybVsnQGlkJ10sIHRlcm1dKSk7XG4gICAgcmV0dXJuIHRoaXMuaW5pdGlhbFRlcm1zO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkTG9nVGVybXMobG9nczogSUxvZ1tdKSB7XG4gICAgY29uc3QgaW5wdXRJZHMgPSB1bmlxdWUobG9ncy5mbGF0TWFwKChsKSA9PiBbbC5jb250cmlidXRvciwgbC5pbmRpY2F0b3JdKS5maWx0ZXIoKHRlcm1JZCkgPT4gIXRoaXMuaW5pdGlhbFRlcm1zW3Rlcm1JZF0pKTtcbiAgICBjb25zdCB7IHJlc3VsdHM6IGlucHV0cyB9ID0gYXdhaXQgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaDxJVGVybUpTT05MRCwgTm9kZVR5cGUuVGVybT4oXG4gICAgICBxdWVyeShpbnB1dElkcy5tYXAoKGlkKSA9PiBtYXRjaEV4YWN0UXVlcnkoJ0BpZCcsIGlkKSkpXG4gICAgKTtcbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGlucHV0cy5tYXAoKHRlcm0pID0+IFt0ZXJtWydAaWQnXSwgdGVybV0pKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNSZWNhbGN1bGF0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVN0YXRlID09PSBEYXRhU3RhdGUucmVjYWxjdWxhdGVkO1xuICB9XG5cbiAgcHVibGljIHJlbG9hZENoYXJ0KCkge1xuICAgIGNvbnN0IGltcGFjdEFzc2Vzc21lbnQgPVxuICAgICAgdGhpcy5maWx0ZXJlZEltcGFjdEFzc2Vzc21lbnRzLmZpbmQoKGlhKSA9PiBpYVsnQGlkJ10gPT09IHRoaXMuc2VsZWN0ZWRJbXBhY3RBc3Nlc3NtZW50SWQpIHx8XG4gICAgICB0aGlzLmZpbHRlcmVkSW1wYWN0QXNzZXNzbWVudHNbMF07XG4gICAgY29uc3QgaW5kaWNhdG9ycyA9IFtcbiAgICAgIC4uLihpbXBhY3RBc3Nlc3NtZW50Py5lbmRwb2ludHMgfHwgW10pLFxuICAgICAgLi4uKGltcGFjdEFzc2Vzc21lbnQ/LmltcGFjdHMgfHwgW10pXG4gICAgXTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gb2YoaW1wYWN0QXNzZXNzbWVudClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKCkgPT4gKHRoaXMubG9hZGluZyA9IHRydWUpKSxcbiAgICAgICAgbWVyZ2VNYXAobm9kZSA9PiAodGhpcy5pbml0aWFsVGVybXMgPyBvZihub2RlKSA6IGZyb20odGhpcy5sb2FkSW5pdGlhbFRlcm1zKCkpLnBpcGUobWFwKCgpID0+IG5vZGUpKSkpLFxuICAgICAgICBtZXJnZU1hcChub2RlID0+XG4gICAgICAgICAgdGhpcy5ub2RlU2VydmljZS5nZXRMb2coe1xuICAgICAgICAgICAgLi4ubm9kZSxcbiAgICAgICAgICAgIGRhdGFTdGF0ZTogRGF0YVN0YXRlLnJlY2FsY3VsYXRlZFxuICAgICAgICAgIH0pXG4gICAgICAgICksXG4gICAgICAgIG1hcCgodmFsdWUpID0+ICh2YWx1ZSA/IHBhcnNlTGluZXModmFsdWUpIDogW10pKSxcbiAgICAgICAgbWVyZ2VBbGwoKSxcbiAgICAgICAgZmlsdGVyKCh7IGRhdGEgfSkgPT4gZGF0YS5sb2dnZXIgPT09ICdoZXN0aWFfZWFydGgubW9kZWxzJyAmJiBkYXRhLmxldmVsID09PSBMZXZlbC5kZWJ1ZyksXG4gICAgICAgIG1hcCgoeyBkYXRhIH0pID0+IHBhcnNlTWVzc2FnZShkYXRhLm1lc3NhZ2UpKSxcbiAgICAgICAgZmlsdGVyKChtZXNzYWdlKSA9PiAnbm9kZScgaW4gbWVzc2FnZSksXG4gICAgICAgIG1hcChwYXJzZUxvZyksXG4gICAgICAgIGZpbHRlcigobG9nKSA9PiBbXG4gICAgICAgICAgISFsb2cuaW5kaWNhdG9yLFxuICAgICAgICAgICEhbG9nLmNvbnRyaWJ1dG9yLFxuICAgICAgICAgICFpc05hTihsb2cud2VpZ2h0ZWRWYWx1ZSksXG4gICAgICAgICAgbG9nLmNvZWZmaWNpZW50ID4gMCxcbiAgICAgICAgICBpbmRpY2F0b3JzLnNvbWUoKGVydSkgPT4gZXJ1LnRlcm1bJ0BpZCddID09PSBsb2cuaW5kaWNhdG9yKVxuICAgICAgICBdLmV2ZXJ5KEJvb2xlYW4pKSxcbiAgICAgICAgZ3JvdXBCeSgobG9nKSA9PiBbbG9nLmluZGljYXRvciwgbG9nLmNvbnRyaWJ1dG9yLCBsb2cubW9kZWxJZF0uam9pbignLycpKSxcbiAgICAgICAgbWVyZ2VNYXAoKGdyb3VwKSA9PiBncm91cC5waXBlKHRvQXJyYXkoKSkpLFxuICAgICAgICBtYXAoKHZhbHVlczogSUxvZ1tdKSA9PiB7XG4gICAgICAgICAgY29uc3QgbG9nID0gdmFsdWVzWzBdO1xuICAgICAgICAgIGNvbnN0IHsgd2VpZ2h0ZWRUb3RhbCwgdG90YWwgfSA9IHZhbHVlcy5yZWR1Y2UoXG4gICAgICAgICAgICAocHJldiwgY3VycikgPT4gKHtcbiAgICAgICAgICAgICAgd2VpZ2h0ZWRUb3RhbDogcHJldi53ZWlnaHRlZFRvdGFsICsgY3Vyci53ZWlnaHRlZFZhbHVlLFxuICAgICAgICAgICAgICB0b3RhbDogcHJldi50b3RhbCArIGN1cnIudmFsdWVcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgeyB3ZWlnaHRlZFRvdGFsOiAwLCB0b3RhbDogMCB9XG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGNvbnN0IGlucHV0c09iaiA9IChpbXBhY3RBc3Nlc3NtZW50LmVtaXNzaW9uc1Jlc291cmNlVXNlIHx8IFtdKVxuICAgICAgICAgICAgLmZpbHRlcigoZXJ1KSA9PiBlcnUudGVybVsnQGlkJ10gPT09IGxvZy5jb250cmlidXRvciAmJiBlcnUuaW5wdXRzPy5sZW5ndGgpXG4gICAgICAgICAgICAucmVkdWNlKChhY2MsIGVydSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBpbnB1dElkID0gZXJ1LmlucHV0cy5tYXAoKGkpID0+IGlbJ0BpZCddKS5qb2luKCc7Jyk7XG4gICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRPcGVyYXRpb25zID0gZXJ1Lm9wZXJhdGlvblxuICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgaWQ6IGVydS5vcGVyYXRpb25bJ0BpZCddLFxuICAgICAgICAgICAgICAgICAgICAgIC4uLmdldFVuaXRzQW5kTGFiZWwoZXJ1Lm9wZXJhdGlvbiksXG4gICAgICAgICAgICAgICAgICAgICAgbW9kZWxJZDogbG9nLm1vZGVsSWQsXG4gICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0ZWRWYWx1ZTogZXJ1LnZhbHVlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICA6IFtdO1xuXG4gICAgICAgICAgICAgIGFjY1tpbnB1dElkXSA9IGFjY1tpbnB1dElkXVxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAuLi5hY2NbaW5wdXRJZF0sXG4gICAgICAgICAgICAgICAgICAgIHdlaWdodGVkVmFsdWU6IGFjY1tpbnB1dElkXS53ZWlnaHRlZFZhbHVlICsgZXJ1LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBtb2RlbElkOiBsb2cubW9kZWxJZCxcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uczogWy4uLmFjY1tpbnB1dElkXS5vcGVyYXRpb25zLCAuLi5jdXJyZW50T3BlcmF0aW9uc11cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGlucHV0SWQsXG4gICAgICAgICAgICAgICAgICAgIC4uLmdldFVuaXRzQW5kTGFiZWwoXG4gICAgICAgICAgICAgICAgICAgICAgZXJ1LmlucHV0cy5sZW5ndGggPT09IDEgPyBlcnUuaW5wdXRzWzBdIDogeyBuYW1lOiAnSW5wdXQgZ3JvdXAgKHVuZGVyIGRldmVsb3BtZW50KScgfVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBtb2RlbElkOiBsb2cubW9kZWxJZCxcbiAgICAgICAgICAgICAgICAgICAgd2VpZ2h0ZWRWYWx1ZTogZXJ1LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25zOiBbLi4uY3VycmVudE9wZXJhdGlvbnNdXG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfSwge30pO1xuICAgICAgICAgIGNvbnN0IGlucHV0czogSUlucHV0TG9nW10gPSBPYmplY3QudmFsdWVzKGlucHV0c09iaik7XG4gICAgICAgICAgcmV0dXJuIHsgLi4ubG9nLCB3ZWlnaHRlZFZhbHVlOiB3ZWlnaHRlZFRvdGFsLCB2YWx1ZTogdG90YWwsIGlucHV0cyB9IGFzIElMb2c7XG4gICAgICAgIH0pLFxuICAgICAgICB0b0FycmF5KCksXG4gICAgICAgIG1lcmdlTWFwKChsb2dzKSA9PiBmcm9tKHRoaXMubG9hZExvZ1Rlcm1zKGxvZ3MpKS5waXBlKFxuICAgICAgICAgIG1hcChsb2dUZXJtcyA9PiB7XG4gICAgICAgICAgICB0aGlzLmFsbFRlcm1zID0geyAuLi50aGlzLmluaXRpYWxUZXJtcywgLi4ubG9nVGVybXMgfTtcbiAgICAgICAgICAgIHJldHVybiBsb2dzO1xuICAgICAgICAgIH0pXG4gICAgICAgICkpLFxuICAgICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgdGhpcy5lcnJvciA9IGVycjtcbiAgICAgICAgICByZXR1cm4gb2YoW10pO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFwKCgpID0+ICh0aGlzLmxvYWRpbmcgPSBmYWxzZSkpLFxuICAgICAgICB0YXAoKGxvZ3MpID0+ICh0aGlzLm5vRGF0YSA9ICFsb2dzLmxlbmd0aCkpLFxuICAgICAgICB0YXAoKGxvZ3M6IElMb2dbXSkgPT4ge1xuICAgICAgICAgIHRoaXMud2FybmluZ3MgPSB3YXJuaW5ncyhsb2dzLCB0aGlzLmFsbFRlcm1zKTtcbiAgICAgICAgICB0aGlzLnNob3dXYXJuaW5ncyA9IHRoaXMud2FybmluZ3MubGVuZ3RoID4gMDtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGxvZ3M6IElMb2dbXSkgPT4ge1xuICAgICAgICB0aGlzLnJvb3QgPSBudWxsO1xuICAgICAgICB0aGlzLm5vZGUgPSBudWxsO1xuICAgICAgICB0aGlzLmxpbmsgPSBudWxsO1xuICAgICAgICBjb25zdCBoYXNEZWZhdWx0TW9kZWxMb2dzID0gbG9ncy5zb21lKChsb2cpID0+IGxvZy5tb2RlbElkID09PSBnZXREZWZhdWx0TW9kZWxJZChsb2cuaW5kaWNhdG9yKSk7XG4gICAgICAgIHRoaXMubW9kZWxzID0gW1xuICAgICAgICAgIC4uLihoYXNEZWZhdWx0TW9kZWxMb2dzXG4gICAgICAgICAgICA/IFt7ICdAaWQnOiBkZWZhdWx0SW5kaWNhdG9yc01vZGVsSWQsIG5hbWU6IGRlZmF1bHRJbmRpY2F0b3JzTW9kZWxOYW1lIH1dXG4gICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgICAuLi51bmlxdWUobG9ncy5tYXAoKHsgbW9kZWxJZCB9KSA9PiB0aGlzLmFsbFRlcm1zW21vZGVsSWRdIHx8IHsgJ0BpZCc6IG1vZGVsSWQgfSkpXG4gICAgICAgIF07XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNb2RlbElkID0gdGhpcy5tb2RlbHM/LlswXT8uWydAaWQnXTtcbiAgICAgICAgaWYgKGxvZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5sb2dzQWxsTW9kZWxzID0gbG9ncztcbiAgICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluaXRDaGFydCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBpbml0Q2hhcnQoKSB7XG4gICAgY29uc3QgbG9ncyA9IHRoaXMubG9nc0FsbE1vZGVscy5maWx0ZXIoXG4gICAgICAobG9nKSA9PlxuICAgICAgICBsb2cubW9kZWxJZCA9PT1cbiAgICAgICAgKHRoaXMuc2VsZWN0ZWRNb2RlbElkID09PSBkZWZhdWx0SW5kaWNhdG9yc01vZGVsSWQgPyBnZXREZWZhdWx0TW9kZWxJZChsb2cuaW5kaWNhdG9yKSA6IHRoaXMuc2VsZWN0ZWRNb2RlbElkKVxuICAgICk7XG4gICAgY29uc3QgdG90YWxzUGVySW5kaWNhdG9yID0gbG9ncy5yZWR1Y2UoKGFjYywgbG9nKSA9PiB7XG4gICAgICBhY2NbbG9nLmluZGljYXRvcl0gPSAoYWNjW2xvZy5pbmRpY2F0b3JdIHx8IDApICsgbG9nLndlaWdodGVkVmFsdWU7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbiAgICBjb25zdCBpbmRpY2F0b3JzOiB7IFtpZDogc3RyaW5nXTogTm9kZURhdHVtIH0gPSBsb2dzLnJlZHVjZSgoYWNjLCBsb2cpID0+IHtcbiAgICAgIGNvbnN0IHR5cGVNYXBwaW5nID0ge1xuICAgICAgICBbVGVybVRlcm1UeXBlLmVuZHBvaW50SW5kaWNhdG9yXTogQ2hhcnROb2RlVHlwZS5lbmRwb2ludCxcbiAgICAgICAgW1Rlcm1UZXJtVHlwZS5jaGFyYWN0ZXJpc2VkSW5kaWNhdG9yXTogQ2hhcnROb2RlVHlwZS5taWRwb2ludCxcbiAgICAgICAgW1Rlcm1UZXJtVHlwZS5lbWlzc2lvbl06IENoYXJ0Tm9kZVR5cGUuZW1pc3Npb24sXG4gICAgICAgIFtUZXJtVGVybVR5cGUucmVzb3VyY2VVc2VdOiBDaGFydE5vZGVUeXBlLmVtaXNzaW9uLFxuICAgICAgICBbVGVybVRlcm1UeXBlLm9wZXJhdGlvbl06IENoYXJ0Tm9kZVR5cGUub3BlcmF0aW9uXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBjb250cmlidXRvclR5cGUgPSB0eXBlTWFwcGluZ1t0aGlzLmFsbFRlcm1zW2xvZy5jb250cmlidXRvcl0/LnRlcm1UeXBlXSB8fCBDaGFydE5vZGVUeXBlLmlucHV0O1xuICAgICAgY29uc3QgaW5kaWNhdG9yVHlwZSA9IHR5cGVNYXBwaW5nW3RoaXMuYWxsVGVybXNbbG9nLmluZGljYXRvcl0/LnRlcm1UeXBlXTtcbiAgICAgIGNvbnN0IGNvbnRyaWJ1dG9yTm9kZSA9IHtcbiAgICAgICAgaWQ6IGxvZy5jb250cmlidXRvcixcbiAgICAgICAgLi4uZ2V0VW5pdHNBbmRMYWJlbCh0aGlzLmFsbFRlcm1zW2xvZy5jb250cmlidXRvcl0sIGxvZy5jb250cmlidXRvciksXG4gICAgICAgIHR5cGU6IGNvbnRyaWJ1dG9yVHlwZSxcbiAgICAgICAgdmFsdWU6IGxvZy52YWx1ZSxcbiAgICAgICAgd2VpZ2h0ZWRWYWx1ZTogbG9nLndlaWdodGVkVmFsdWUsXG4gICAgICAgIG1vZGVsSWQ6IGxvZy5tb2RlbElkLFxuICAgICAgICBmcmFjdGlvbjogbG9nLndlaWdodGVkVmFsdWUgLyB0b3RhbHNQZXJJbmRpY2F0b3JbbG9nLmluZGljYXRvcl0sXG4gICAgICAgIGNoaWxkcmVuOlxuICAgICAgICAgIGNvbnRyaWJ1dG9yVHlwZSA9PT0gQ2hhcnROb2RlVHlwZS5lbWlzc2lvblxuICAgICAgICAgICAgPyBsb2cuaW5wdXRzLm1hcCgoaSkgPT4gKHtcbiAgICAgICAgICAgICAgICAuLi5pLFxuICAgICAgICAgICAgICAgIHR5cGU6IENoYXJ0Tm9kZVR5cGUuaW5wdXQsXG4gICAgICAgICAgICAgICAgZnJhY3Rpb246IGkud2VpZ2h0ZWRWYWx1ZSAvIGxvZy52YWx1ZSxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogaS5vcGVyYXRpb25zLm1hcCgobykgPT4gKHtcbiAgICAgICAgICAgICAgICAgIC4uLm8sXG4gICAgICAgICAgICAgICAgICB0eXBlOiBDaGFydE5vZGVUeXBlLm9wZXJhdGlvbixcbiAgICAgICAgICAgICAgICAgIGZyYWN0aW9uOiBvLndlaWdodGVkVmFsdWUgLyBpLndlaWdodGVkVmFsdWVcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICA6IFtdXG4gICAgICB9O1xuXG4gICAgICBhY2NbbG9nLmluZGljYXRvcl1cbiAgICAgICAgPyBhY2NbbG9nLmluZGljYXRvcl0uY2hpbGRyZW4ucHVzaChjb250cmlidXRvck5vZGUpXG4gICAgICAgIDogKGFjY1tsb2cuaW5kaWNhdG9yXSA9IHtcbiAgICAgICAgICAgIGlkOiBsb2cuaW5kaWNhdG9yLFxuICAgICAgICAgICAgLi4uZ2V0VW5pdHNBbmRMYWJlbCh0aGlzLmFsbFRlcm1zW2xvZy5pbmRpY2F0b3JdLCBsb2cuaW5kaWNhdG9yKSxcbiAgICAgICAgICAgIG1vZGVsSWQ6IGxvZy5tb2RlbElkLFxuICAgICAgICAgICAgdHlwZTogaW5kaWNhdG9yVHlwZSxcbiAgICAgICAgICAgIHZhbHVlOiB0b3RhbHNQZXJJbmRpY2F0b3JbbG9nLmluZGljYXRvcl0sXG4gICAgICAgICAgICBjaGlsZHJlbjogW2NvbnRyaWJ1dG9yTm9kZV1cbiAgICAgICAgICB9KTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuICAgIGNvbnN0IGluZGljYXRvckFycmF5ID0gT2JqZWN0LnZhbHVlcyhpbmRpY2F0b3JzKTtcbiAgICBjb25zdCBsaW5rZWRJbmRpY2F0b3JzID0gaW5kaWNhdG9yQXJyYXlcbiAgICAgIC8vIGxpbmsgZW5kcG9pbnRzIHRvIG1pZHBvaW50cyBhbmQgbWlkcG9pbnRzIHRvIGFueSBjaGlsZCBtaWRwb2ludHNcbiAgICAgIC5tYXAoKGluZGljYXRvcikgPT4gKHtcbiAgICAgICAgLi4uaW5kaWNhdG9yLFxuICAgICAgICBjaGlsZHJlbjogaW5kaWNhdG9yLmNoaWxkcmVuLm1hcCgoY2hpbGQpID0+IHtcbiAgICAgICAgICBjb25zdCBwcmVmaXhSZW1vdmVkID0gaW5kaWNhdG9yLnR5cGUgPT09IENoYXJ0Tm9kZVR5cGUuZW5kcG9pbnQgJiYgY2hpbGQubGFiZWwuc3BsaXQoJywgJylbMV07XG4gICAgICAgICAgcmV0dXJuIGNoaWxkLnR5cGUgPT09IENoYXJ0Tm9kZVR5cGUubWlkcG9pbnRcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIC4uLmNoaWxkLFxuICAgICAgICAgICAgICAgIGxhYmVsOiBwcmVmaXhSZW1vdmVkXG4gICAgICAgICAgICAgICAgICA/ICdbLi4uXScgKyBwcmVmaXhSZW1vdmVkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgcHJlZml4UmVtb3ZlZC5zbGljZSgxKVxuICAgICAgICAgICAgICAgICAgOiBjaGlsZC5sYWJlbCxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogaW5kaWNhdG9yc1tjaGlsZC5pZF0/LmNoaWxkcmVuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogY2hpbGQ7XG4gICAgICAgIH0pXG4gICAgICB9KSlcbiAgICAgIC8vIHJlbW92ZSBkdXBsaWNhdGVkIGluZGljYXRvcnNcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChpbmRpY2F0b3IpID0+ICFpbmRpY2F0b3JBcnJheS5zb21lKChwYXJlbnQpID0+IHBhcmVudC5jaGlsZHJlbi5zb21lKChjaGlsZCkgPT4gY2hpbGQuaWQgPT09IGluZGljYXRvci5pZCkpXG4gICAgICApO1xuXG4gICAgY29uc3QgZW5kcG9pbnRzID0gbGlua2VkSW5kaWNhdG9ycy5maWx0ZXIoKGluZGljYXRvcikgPT4gaW5kaWNhdG9yLnR5cGUgPT09IENoYXJ0Tm9kZVR5cGUuZW5kcG9pbnQpO1xuICAgIGNvbnN0IG5vbkxDQUluZGljYXRvcnMgPSBsaW5rZWRJbmRpY2F0b3JzLmZpbHRlcigoaW5kaWNhdG9yKSA9PiBpbmRpY2F0b3IudHlwZSA9PT0gQ2hhcnROb2RlVHlwZS5taWRwb2ludCk7XG5cbiAgICBlbmRwb2ludHMubGVuZ3RoICYmXG4gICAgICBub25MQ0FJbmRpY2F0b3JzLmxlbmd0aCAmJlxuICAgICAgZW5kcG9pbnRzLnB1c2goe1xuICAgICAgICBpZDogbm9uTENBSW5kaWNhdG9yc0lkLFxuICAgICAgICBsYWJlbDogJ090aGVyIGluZGljYXRvcnMnLFxuICAgICAgICB0ZXJtOiAnbi9hJyxcbiAgICAgICAgbW9kZWxJZDogJ24vYScsXG4gICAgICAgIHVuaXRzOiAnJyxcbiAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgIHdlaWdodGVkVmFsdWU6IG51bGwsXG4gICAgICAgIHR5cGU6IENoYXJ0Tm9kZVR5cGUuZW5kcG9pbnQsXG4gICAgICAgIGZyYWN0aW9uOiBudWxsLFxuICAgICAgICBjaGlsZHJlbjogbm9uTENBSW5kaWNhdG9yc1xuICAgICAgfSk7XG5cbiAgICBjb25zdCByb290ID0gZDNIaWVyYXJjaHk8Tm9kZURhdHVtPih7XG4gICAgICBpZDogJ2R1bW15LXJvb3QnLFxuICAgICAgbGFiZWw6ICcnLFxuICAgICAgdGVybTogJycsXG4gICAgICBtb2RlbElkOiAnJyxcbiAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgd2VpZ2h0ZWRWYWx1ZTogbnVsbCxcbiAgICAgIHVuaXRzOiAnJyxcbiAgICAgIHR5cGU6IENoYXJ0Tm9kZVR5cGUucm9vdCxcbiAgICAgIGNoaWxkcmVuOiBlbmRwb2ludHMubGVuZ3RoID8gZW5kcG9pbnRzIDogbGlua2VkSW5kaWNhdG9yc1xuICAgIH0pO1xuXG4gICAgY29uc3QgaW5jbHVkZWRUeXBlcyA9IHVuaXF1ZShyb290LmRlc2NlbmRhbnRzKCkubWFwKChuKSA9PiBuLmRhdGEudHlwZSkpO1xuICAgIHRoaXMubGVnZW5kID0gbGVnZW5kLmZpbHRlcigoeyB0eXBlIH0pID0+IGluY2x1ZGVkVHlwZXMuaW5jbHVkZXModHlwZSkpO1xuXG4gICAgdGhpcy5yb290ID0gcm9vdFxuICAgICAgLnNvcnQoKGEsIGIpID0+IGIuZGF0YS5mcmFjdGlvbiAtIGEuZGF0YS5mcmFjdGlvbilcbiAgICAgIC5lYWNoQWZ0ZXIoKG5vZGUpID0+IHtcbiAgICAgICAgaWYgKG5vZGUuZGF0YS5mcmFjdGlvbiA9PT0gMCkge1xuICAgICAgICAgIG5vZGUuY2hpbGRyZW4gPSBudWxsO1xuICAgICAgICAgIChub2RlLmhlaWdodCBhcyBudW1iZXIpID0gMDtcbiAgICAgICAgfVxuICAgICAgICBub2RlLmRhdGEudHlwZSAhPT0gQ2hhcnROb2RlVHlwZS5yb290ICYmIGNvbGxhcHNlQ2hpbGRyZW4obm9kZSk7XG4gICAgICAgIGdyb3VwQnlQZXJjZW50YWdlKG5vZGUpICYmIGdyb3VwUGVyY2VudGFnZShub2RlKTtcbiAgICAgICAgbm9kZS5kYXRhLnNob3dCYXIgPSBzaG93QmFyKG5vZGUpO1xuICAgICAgICBub2RlLmRhdGEubW9kZWxOYW1lID0gdGhpcy5hbGxUZXJtc1tub2RlLmRhdGEubW9kZWxJZF0/Lm5hbWU7XG4gICAgICAgIG5vZGUuZGF0YS5tb2RlbERvY3MgPSB0aGlzLmFsbFRlcm1zW25vZGUuZGF0YS5tb2RlbElkXT8uZG9jcztcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5yZW5kZXJDaGFydCgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJDaGFydCgpIHtcbiAgICB0aGlzLnN2ZyA9IGQzU2VsZWN0KHRoaXMuY2hhcnRSZWY/Lm5hdGl2ZUVsZW1lbnQpO1xuICAgIHRoaXMuc3ZnLnNlbGVjdEFsbCgnKicpLnJlbW92ZSgpO1xuICAgIC8vIHJvb3Qgbm9kZSBpcyBhbHdheXMgcG9zaXRpb25lZCBhdCDin6gwLCAw4p+pXG4gICAgY29uc3QgaW5uZXJIZWlnaHQgPSAodGhpcy5yb290LmNoaWxkcmVuLmxlbmd0aCAtIDEpICogbm9kZUhlaWdodCAqIG5vZGVTcGFjaW5nRmFjdG9yICsgbm9kZUhlaWdodDtcbiAgICB0aGlzLnlNaW4gPSAobm9kZUhlaWdodCAtIGlubmVySGVpZ2h0KSAvIDIgLSBtYXJnaW4udG9wO1xuICAgIHRoaXMueVRvdGFsID0gaW5uZXJIZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbTtcbiAgICB0aGlzLnN2Z1xuICAgICAgLmF0dHIoJ3ZpZXdCb3gnLCBbLW1hcmdpbi5sZWZ0LCB0aGlzLnlNaW4sIHdpZHRoLCB0aGlzLnlUb3RhbF0uam9pbignICcpKVxuICAgICAgLmF0dHIoJ2ZvbnQtc2l6ZScsIGAke2ZvbnRTaXplfXB4YCk7XG5cbiAgICB0aGlzLm5vZGUgPSB0aGlzLnN2Zy5hcHBlbmQoJ2cnKS5zZWxlY3RBbGwoJ2cnKTtcbiAgICB0aGlzLmxpbmsgPSB0aGlzLnN2Zy5hcHBlbmQoJ2cnKS5zZWxlY3RBbGwoJ3BhdGgnKTtcblxuICAgIHRoaXMuaGFuZGxlTm9kZUNsaWNrKFxuICAgICAgbnVsbCxcbiAgICAgIHRoaXMucm9vdC5maW5kKChub2RlKSA9PiBub2RlLmRlcHRoID09PSAxKVxuICAgICk7XG4gIH1cblxuICAvLyBmbGlwIHgveSB0byBnbyBsZWZ0LXJpZ2h0IGluc3RlYWQgb2YgdG9wLWJvdHRvbVxuICBwcml2YXRlIHVwZGF0ZUNoYXJ0KHsgdG9nZ2xpbmdHcm91cCA9IGZhbHNlLCBzd2l0Y2hpbmdTZWxlY3Rpb24gPSBmYWxzZSB9ID0ge30pIHtcbiAgICBjb25zdCByb290ID0gdGhpcy5yb290O1xuICAgIGNvbnN0IHRyZWVMYXlvdXQgPSBkM1RyZWU8Tm9kZURhdHVtPigpXG4gICAgICAubm9kZVNpemUoW25vZGVIZWlnaHQsIG5vZGVXaWR0aF0pXG4gICAgICAuc2VwYXJhdGlvbigoLi4ubmVpZ2hib3VyczogQ2hhcnROb2RlW10pID0+XG4gICAgICAgIG5laWdoYm91cnMuc29tZSgobikgPT4gbi5kYXRhLmdyb3VwICYmIG4uX2dyb3VwT3BlbikgPyAxIC0gZ3JvdXBPdmVybGFwIC8gbm9kZUhlaWdodCA6IG5vZGVTcGFjaW5nRmFjdG9yXG4gICAgICApO1xuICAgIGNvbnN0IHRyZWU6IENoYXJ0Tm9kZSA9IHRyZWVMYXlvdXQocm9vdCk7XG4gICAgY29uc3QgbGlua3M6IExpbmtbXSA9IHRyZWUubGlua3MoKS5maWx0ZXIoKGQpID0+IGQuc291cmNlLmRhdGEudHlwZSAhPT0gQ2hhcnROb2RlVHlwZS5yb290KSB8fCBbXTtcbiAgICBjb25zdCBub2RlcyA9IHRyZWUuZGVzY2VuZGFudHMoKS5yZXZlcnNlKCk7XG5cbiAgICBub2Rlcy5mb3JFYWNoKChkKSA9PiB7XG4gICAgICBkLnkgPVxuICAgICAgICAoZC5kZXB0aCAtIDEgKyAoT2JqZWN0LmtleXMoQ2hhcnROb2RlVHlwZSkubGVuZ3RoIC0gMSAtIHRoaXMubGVnZW5kLmxlbmd0aCkgLyAyKSAqIChub2RlV2lkdGggKyBsYXllclNwYWNpbmcpO1xuICAgIH0pO1xuXG4gICAgLy8gQnkgZGVmYXVsdCB0aGUgdHJlZSBleHBhbmRzIHN5bW1ldHJpY2FsbHkgdXB3YXJkcyBhbmQgZG93bndhcmRzIGZyb20gdGhlIHNlbGVjdGVkIG5vZGUuXG4gICAgLy8gV2UgbW92ZSBjaGlsZHJlbiBkb3duIHRvIHByZXZlbnQgZXhwYW5zaW9uIHVwd2FyZHMgb3IgdXAgdG8gbWluaW1pc2UgZXhwYW5zaW9uIGRvd253YXJkc1xuICAgIGNvbnN0IG1pbmltaXNlSGVpZ2h0ID0gKHsgcHJldmlvdXNUYW5zbGF0ZVksIHByZXZpb3VzWVRvdGFsIH0sIGRlcHRoOiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IG1heFlUb3RhbCA9IE1hdGgubWF4KHByZXZpb3VzWVRvdGFsLCB0aGlzLnlUb3RhbCk7XG4gICAgICBjb25zdCBwYXJlbnQgPSB0cmVlLmZpbmQoKG5vZGUpID0+IChub2RlLmRlcHRoID09PSBkZXB0aCAtIDEpICYmIG5vZGUuX29wZW4pO1xuICAgICAgcGFyZW50Py5jaGlsZHJlbj8uZm9yRWFjaCgobm9kZSkgPT4gKG5vZGUueCArPSBwcmV2aW91c1RhbnNsYXRlWSkpO1xuXG4gICAgICBjb25zdCB7IG1pbjogbWluWCwgbWF4OiBtYXhYIH0gPSAocGFyZW50Py5jaGlsZHJlbiB8fCBbXSkucmVkdWNlKFxuICAgICAgICAoeyBtaW4sIG1heCB9LCBuKSA9PiAoe1xuICAgICAgICAgIG1pbjogbi54IDwgbWluID8gbi54IDogbWluLFxuICAgICAgICAgIG1heDogbi54ID4gbWF4ID8gbi54IDogbWF4XG4gICAgICAgIH0pLFxuICAgICAgICB7IG1pbjogcGFyZW50Py54LCBtYXg6IHBhcmVudD8ueCB9XG4gICAgICApO1xuXG4gICAgICBjb25zdCB7IHlNaW4sIHlUb3RhbCB9ID0gcGFyZW50Py5jaGlsZHJlbj8ubGVuZ3RoXG4gICAgICAgID8geyB5TWluOiBtaW5YIC0gbWFyZ2luLnRvcCwgeVRvdGFsOiBtYXhYIC0gbWluWCArIG1hcmdpbi5ib3R0b20gKyBtYXJnaW4udG9wICsgbm9kZUhlaWdodCB9XG4gICAgICAgIDogeyB5TWluOiBudWxsLCB5VG90YWw6IG51bGwgfTtcblxuICAgICAgY29uc3Qgb3ZlcmZsb3dBYm92ZSA9IHRoaXMueU1pbiAtIHlNaW47IC8vIHBvc2l0aXZlIHdoZW4gb3ZlcmZsb3dzIGFib3ZlXG4gICAgICBjb25zdCBvdmVyZmxvd0JlbG93ID0geVRvdGFsICsgeU1pbiAtIChtYXhZVG90YWwgKyB0aGlzLnlNaW4pOyAvLyBwb3NpdGl2ZSB3aGVuIG92ZXJmbG93cyBiZWxvd1xuICAgICAgLy8gLSB0cmFuc2xhdGVZIHdoZW4gb3ZlcmZsb3dzIGFib3ZlOiBwb3NpdGl2ZVxuICAgICAgLy8gLSB0cmFuc2xhdGVZIHdoZW4gb3ZlcmZsb3dzIGJlbG93OiBuZWdhdGl2ZSBieSBzbWFsbGVzdCBvZiB1bmRlcmZsb3cgYWJvdmUgb3Igb3ZlcmZsb3cgYmVsb3dcbiAgICAgIC8vIC0gdHJhbnNsYXRlWSB3aGVuIG5vIG92ZXJmbG93OiAwXG4gICAgICBjb25zdCB0cmFuc2xhdGVZID1cbiAgICAgICAgb3ZlcmZsb3dBYm92ZSA+IDAgPyBvdmVyZmxvd0Fib3ZlIDogb3ZlcmZsb3dCZWxvdyA+IDAgPyBNYXRoLm1heCgtb3ZlcmZsb3dCZWxvdywgb3ZlcmZsb3dBYm92ZSkgOiAwO1xuXG4gICAgICBwYXJlbnQ/LmNoaWxkcmVuPy5mb3JFYWNoKChub2RlKSA9PiAobm9kZS54ICs9IHRyYW5zbGF0ZVkpKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJldmlvdXNZVG90YWw6IE1hdGgubWF4KHlUb3RhbCwgcHJldmlvdXNZVG90YWwpLFxuICAgICAgICBwcmV2aW91c1RhbnNsYXRlWTogdHJhbnNsYXRlWSArIHByZXZpb3VzVGFuc2xhdGVZXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCB7IHByZXZpb3VzWVRvdGFsOiBuZXdIZWlnaHQgfSA9IFtcbiAgICAgIDIsIDMsIDQsIDVcbiAgICBdLnJlZHVjZShtaW5pbWlzZUhlaWdodCwge1xuICAgICAgcHJldmlvdXNUYW5zbGF0ZVk6IDAsXG4gICAgICBwcmV2aW91c1lUb3RhbDogdGhpcy55VG90YWxcbiAgICB9KTtcblxuICAgIHRoaXMuc3ZnLnRyYW5zaXRpb24oKS5kdXJhdGlvbigzMDApLmF0dHIoJ3ZpZXdCb3gnLCBbLW1hcmdpbi5sZWZ0LCB0aGlzLnlNaW4sIHdpZHRoLCBuZXdIZWlnaHRdLmpvaW4oJyAnKSk7XG5cbiAgICB0aGlzLm5vZGUgPSB0aGlzLm5vZGVcbiAgICAgIC5kYXRhKFxuICAgICAgICBub2RlcyxcbiAgICAgICAgKGQpID0+IGAke2QucGFyZW50Py5wYXJlbnQ/LnBhcmVudD8uZGF0YS5pZH0tJHtkLnBhcmVudD8ucGFyZW50Py5kYXRhLmlkfS0ke2QucGFyZW50Py5kYXRhLmlkfS0ke2QuZGF0YS5pZH1gXG4gICAgICApXG4gICAgICAuam9pbihcbiAgICAgICAgKGVudGVyKSA9PlxuICAgICAgICAgIGVudGVyXG4gICAgICAgICAgICAuYXBwZW5kKCdnJylcbiAgICAgICAgICAgIC5jYWxsKGVudGVyTm9kZXMpXG4gICAgICAgICAgICAuYXR0cignb3BhY2l0eScsIDApXG4gICAgICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgKGQpID0+ICd0cmFuc2xhdGUoJyArICh0b2dnbGluZ0dyb3VwID8gZC55IDogZC55IC0gbm9kZVdpZHRoIC8gMikgKyAnLCcgKyBkLnggKyAnKScpLFxuICAgICAgICAodXBkYXRlKSA9PiB1cGRhdGUsXG4gICAgICAgIChleGl0KSA9PiB7XG4gICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHRoaXMudG9vbHRpcE9wZXJhdG9yLmNsb3NlKGZhbHNlKSk7XG4gICAgICAgICAgcmV0dXJuIGV4aXRcbiAgICAgICAgICAgIC5zdHlsZSgncG9pbnRlci1ldmVudHMnLCAnbm9uZScpXG4gICAgICAgICAgICAudHJhbnNpdGlvbigpXG4gICAgICAgICAgICAuZHVyYXRpb24obm9kZUR1cmF0aW9uIC8gMilcbiAgICAgICAgICAgIC5kZWxheSgoZCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGQucGFyZW50Py5jaGlsZHJlbiB8fCBkLnBhcmVudD8uX2NoaWxkcmVuO1xuICAgICAgICAgICAgICByZXR1cm4gKGNoaWxkcmVuPy5sZW5ndGggLSBjaGlsZHJlbj8uaW5kZXhPZihkKSAtIDEpICogMTA7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmVhc2UoZDNFYXNlRWxhc3RpY0luLmFtcGxpdHVkZSgwLjUpLnBlcmlvZCgxKSlcbiAgICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAoZCkgPT4gJ3RyYW5zbGF0ZSgnICsgKHRvZ2dsaW5nR3JvdXAgPyBkLnkgOiBkLnkgLSBub2RlV2lkdGggLyAyKSArICcsJyArIGQueCArICcpJylcbiAgICAgICAgICAgIC5hdHRyKCdvcGFjaXR5JywgMClcbiAgICAgICAgICAgIC5yZW1vdmUoKVxuICAgICAgICAgICAgLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgIC8vIGluIGNhc2UgYSB0b29sdGlwIHdhcyBvcGVuZWQgb24gYSB0cmFuc2l0aW9uaW5nIGVsZW1lbnRcbiAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHRoaXMudG9vbHRpcE9wZXJhdG9yLmNsb3NlKGZhbHNlKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgIHRoaXMubm9kZVxuICAgICAgLmNhbGwobWVyZ2VkTm9kZXMsIHsgdG9vbHRpcE9wZXJhdG9yOiB0aGlzLnRvb2x0aXBPcGVyYXRvciwgem9uZTogdGhpcy5uZ1pvbmUgfSlcbiAgICAgIC50cmFuc2l0aW9uKClcbiAgICAgIC5kZWxheSgoZCkgPT4ge1xuICAgICAgICBjb25zdCBncm91cENsb3NpbmcgPSB0b2dnbGluZ0dyb3VwICYmICFkLnBhcmVudD8uY2hpbGRyZW4/LmZpbmQoKG4pID0+IG4uZGF0YS5ncm91cCk/Ll9ncm91cE9wZW47XG4gICAgICAgIHJldHVybiBncm91cENsb3NpbmcgPyBncm91cERlbGF5IDogKHN3aXRjaGluZ1NlbGVjdGlvbiA/IG5vZGVEdXJhdGlvbiA6IDApICsgZC5wYXJlbnQ/LmNoaWxkcmVuLmluZGV4T2YoZCkgKiAxMDtcbiAgICAgIH0pXG4gICAgICAuZHVyYXRpb24obm9kZUR1cmF0aW9uKVxuICAgICAgLmVhc2UoZDNFYXNlRWxhc3RpY091dC5hbXBsaXR1ZGUoMC41KS5wZXJpb2QoMSkpXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgKGQpID0+IGB0cmFuc2xhdGUoJHtkLnl9LCR7ZC54fSlgKVxuICAgICAgLmF0dHIoJ29wYWNpdHknLCAxKTtcblxuICAgIHRoaXMubm9kZS5zZWxlY3RBbGwoJy5ub2RlLW9wZW5hYmxlJykub24oJ2NsaWNrJywgdGhpcy5oYW5kbGVOb2RlQ2xpY2suYmluZCh0aGlzKSk7XG4gICAgdGhpcy5ub2RlLnNlbGVjdEFsbCgnLmdyb3VwLWJ1dHRvbicpLm9uKCdjbGljaycsIHRoaXMuaGFuZGxlR3JvdXBCdXR0b25DbGljay5iaW5kKHRoaXMpKTtcblxuICAgIHRoaXMubGluayA9IHRoaXMubGlua1xuICAgICAgLmRhdGEoXG4gICAgICAgIGxpbmtzLFxuICAgICAgICAoZCkgPT4gYCR7ZC5zb3VyY2UucGFyZW50Py5wYXJlbnQ/LmRhdGEuaWR9LSR7ZC5zb3VyY2UucGFyZW50Py5kYXRhLmlkfS0ke2Quc291cmNlLmRhdGEuaWR9LSR7ZC50YXJnZXQuZGF0YS5pZH1gXG4gICAgICApXG4gICAgICAuam9pbihcbiAgICAgICAgKGVudGVyKSA9PiBlbnRlci5hcHBlbmQoJ3BhdGgnKS5jbGFzc2VkKCdsaW5rLXBhdGgnLCB0cnVlKS5hdHRyKCdvcGFjaXR5JywgMCksXG4gICAgICAgICh1cGRhdGUpID0+IHVwZGF0ZSxcbiAgICAgICAgKGV4aXQpID0+XG4gICAgICAgICAgZXhpdFxuICAgICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgLmR1cmF0aW9uKGxpbmtEdXJhdGlvbiAvIDIpXG4gICAgICAgICAgICAuZGVsYXkoKGQpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBkLnNvdXJjZS5wYXJlbnQ/LmNoaWxkcmVuIHx8IGQuc291cmNlLnBhcmVudD8uX2NoaWxkcmVuO1xuICAgICAgICAgICAgICByZXR1cm4gKGNoaWxkcmVuPy5sZW5ndGggLSBjaGlsZHJlbj8uaW5kZXhPZihkLnRhcmdldCkgLSAxKSAqIDEwO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hdHRyKCdvcGFjaXR5JywgMClcbiAgICAgICAgICAgIC5yZW1vdmUoKVxuICAgICAgKVxuICAgICAgLmNhbGwobWVyZ2VkTGlua3MsIHsgdG9nZ2xpbmdHcm91cCwgc3dpdGNoaW5nU2VsZWN0aW9uIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVHcm91cEJ1dHRvbkNsaWNrKF9ldmVudDogYW55LCBkOiBDaGFydE5vZGUpIHtcbiAgICBpZiAoZC5fZ3JleWVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGQuX2dyb3VwT3BlbiA9ICFkLl9ncm91cE9wZW47XG4gICAgY29uc3QgY2hpbGRyZW4gPSBkLnBhcmVudC5fZ3JvdXBDaGlsZHJlbjtcbiAgICBkLnBhcmVudC5fZ3JvdXBDaGlsZHJlbiA9IGQucGFyZW50LmNoaWxkcmVuO1xuICAgIGQucGFyZW50LmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgdGhpcy51cGRhdGVDaGFydCh7IHRvZ2dsaW5nR3JvdXA6IHRydWUgfSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZU5vZGVDbGljayhfZXZlbnQ6IGFueSwgZDogQ2hhcnROb2RlIHwgSE5vZGUpOiB2b2lkIHtcbiAgICBkLl9vcGVuID0gIWQuX29wZW47XG4gICAgY29uc3Qgc3dpdGNoaW5nU2VsZWN0aW9uID0gJ19ncmV5ZWQnIGluIGQgJiYgZC5fZ3JleWVkO1xuICAgIGQucGFyZW50LmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgICBjaGlsZC5fZ3JleWVkID0gZmFsc2U7XG4gICAgICBpZiAoY2hpbGQgIT09IGQpIHtcbiAgICAgICAgY2hpbGQuX29wZW4gPSBmYWxzZTtcbiAgICAgICAgY29sbGFwc2VDaGlsZHJlbihjaGlsZCk7XG4gICAgICAgIGNoaWxkLl9ncmV5ZWQgPSBkLl9vcGVuO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGQuY2hpbGRyZW4gPyBjb2xsYXBzZUNoaWxkcmVuKGQpIDogcmVzdG9yZUNoaWxkcmVuKGQpO1xuICAgIHRoaXMudXBkYXRlQ2hhcnQoeyBzd2l0Y2hpbmdTZWxlY3Rpb24gfSk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCIhbG9hZGluZzsgZWxzZSBsb2FkZXJcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzUmVjYWxjdWxhdGVkOyBlbHNlIHNob3dTd2l0Y2hSZWNhbGN1bGF0ZWRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmllbGQgaGFzLWFkZG9ucyBwdC0yIHB4LTMgbWItMFwiICpuZ0lmPVwiZmlsdGVyZWRJbXBhY3RBc3Nlc3NtZW50cy5sZW5ndGggPiAxXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbCBpcy1zdGF0aWMgaXMtc2Vjb25kYXJ5XCI+U2VsZWN0IGFuIEltcGFjdCBBc3Nlc3NtZW50PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbCBpcy1leHBhbmRlZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0IGlzLXNtYWxsIGlzLWZ1bGx3aWR0aCBpcy1zZWNvbmRhcnlcIj5cbiAgICAgICAgICA8c2VsZWN0IFsobmdNb2RlbCldPVwic2VsZWN0ZWRJbXBhY3RBc3Nlc3NtZW50SWRcIiAoY2hhbmdlKT1cInJlbG9hZENoYXJ0KClcIiBbZGlzYWJsZWRdPVwibG9hZGluZ1wiPlxuICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgZmlsdGVyZWRJbXBhY3RBc3Nlc3NtZW50c1wiIFt2YWx1ZV09XCJ2YWx1ZVsnQGlkJ11cIj5cbiAgICAgICAgICAgICAge3sgdmFsdWUubmFtZSB8fCB2YWx1ZVsnQGlkJ10gfX1cbiAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCIhbm9EYXRhXCIgY2xhc3M9XCJmaWVsZCBoYXMtYWRkb25zIHB5LTIgcHgtM1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJidXR0b24gaXMtc21hbGwgaXMtc3RhdGljIGlzLXNlY29uZGFyeVwiPlNlbGVjdCBhIG1vZGVsPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbCBpcy1leHBhbmRlZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0IGlzLXNtYWxsIGlzLWZ1bGx3aWR0aCBpcy1zZWNvbmRhcnlcIj5cbiAgICAgICAgICA8c2VsZWN0IFsobmdNb2RlbCldPVwic2VsZWN0ZWRNb2RlbElkXCIgKGNoYW5nZSk9XCJpbml0Q2hhcnQoKVwiIFtkaXNhYmxlZF09XCJsb2FkaW5nXCI+XG4gICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBtb2RlbCBvZiBtb2RlbHNcIiBbdmFsdWVdPVwibW9kZWxbJ0BpZCddXCI+e3sgbW9kZWwubmFtZSB8fCBtb2RlbFsnQGlkJ10gfX08L29wdGlvbj5cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbm9EYXRhICYmICFzaG93V2FybmluZ3NcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5zIGlzLWNlbnRlcmVkIHB5LTIgaXMtc2l6ZS03IGlzLW1vYmlsZSBpcy1tdWx0aWxpbmVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbGVnZW5kSXRlbSBvZiBsZWdlbmRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIGlzLW5hcnJvdyBweS0wIGlzLWZsZXgtbW9iaWxlIGlzLWZsZXgtZGlyZWN0aW9uLWNvbHVtbiBpcy1hbGlnbi1pdGVtcy1jZW50ZXIgaXMtbGVnZW5kLWl0ZW1cIj5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIGNsYXNzPVwia2V5LWNvbG91ciBpcy1pbmxpbmUtYmxvY2stdGFibGV0IGlzLWFsaWduLW1pZGRsZVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwibm9kZUNvbG91cnNbbGVnZW5kSXRlbS50eXBlXVwiXG4gICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgPHN0cm9uZyBjbGFzcz1cImhhcy10ZXh0LWJsYWNrIGlzLWFsaWduLW1pZGRsZSBrZXktbGFiZWwgaXMtcGwtdGFibGV0LTJcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpcy1oaWRkZW4tZGVza3RvcFwiPnt7bGVnZW5kSXRlbS5tb2JpbGVUZXh0fX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXMtaGlkZGVuLXRvdWNoXCI+e3tsZWdlbmRJdGVtLnRleHR9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Ryb25nPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPHAgKm5nSWY9XCJlcnJvclwiIGNsYXNzPVwiaGFzLXRleHQtZGFuZ2VyIHB5LTNcIj5cbiAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImVycm9yXCI+XG4gICAgICAgIDxwICpuZ1N3aXRjaENhc2U9XCInbm90LWZvdW5kJ1wiPkltcGFjdCBBc3Nlc3NtZW50IG5vdCBmb3VuZDwvcD5cbiAgICAgICAgPGRpdiAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAgICAgIDxzcGFuPkFuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQ6PC9zcGFuPlxuICAgICAgICAgIDxwIGNsYXNzPVwibXQtMVwiPnt7IGVycm9yIH19PC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvcD5cblxuICAgIDxkaXYgKm5nSWY9XCJzaG93V2FybmluZ3NcIiBjbGFzcz1cImhhcy10ZXh0LXdhcm5pbmcgcHktMyBoYXMtdGV4dC1jZW50ZXJlZFwiPlxuICAgICAgPHAgY2xhc3M9XCJpcy1tYi0yXCIgKm5nRm9yPVwibGV0IHdhcm5pbmcgb2Ygd2FybmluZ3NcIj5cbiAgICAgICAgPGZhLWljb24gY2xhc3M9XCJwci0yXCIgaWNvbj1cImV4Y2xhbWF0aW9uLXRyaWFuZ2xlXCI+PC9mYS1pY29uPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJ3YXJuaW5nXCI+XG4gICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidtaXNzaW5nLXRlcm1zJ1wiPkNhbGN1bGF0aW9ucyBhcmUgbm90IHVwIHRvIGRhdGUuIFNvbWUgdGVybXMgbWF5IG5vdCBkaXNwbGF5IGNvcnJlY3RseS48L3NwYW4+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9wPlxuICAgICAgPHAgY2xhc3M9XCJpcy11bmRlcmxpbmVkIGlzLXNpemUtN1wiPjxhIChjbGljayk9XCJzaG93V2FybmluZ3MgPSBmYWxzZVwiPlZpZXcgY2hhcnQgYW55d2F5LjwvYT48L3A+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwibm9EYXRhXCIgY2xhc3M9XCJweS0zXCI+XG4gICAgICA8cCBjbGFzcz1cImhhcy10ZXh0LWNlbnRlcmVkXCI+Tm8gY2hhcnQgYXZhaWxhYmxlLjwvcD5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cblxuPGRpdiBbY2xhc3MuaXMtaGlkZGVuXT1cIiFpc1JlY2FsY3VsYXRlZCB8fCBsb2FkaW5nIHx8IGVycm9yIHx8IG5vRGF0YSB8fCBzaG93V2FybmluZ3NcIiBjbGFzcz1cImNoYXJ0LWNvbnRhaW5lciBpcy1yZWxhdGl2ZSB3LTEwMFwiPlxuICA8c3ZnIGNsYXNzPVwidy0xMDAgaC0xMDBcIiAjY2hhcnQ+PC9zdmc+XG4gIDxzcGFuXG4gICAgY2xhc3M9XCJpcy1oaWRkZW5cIlxuICAgIFtuZ2JQb3BvdmVyXT1cInRpcENvbnRlbnRcIlxuICAgIHRyaWdnZXJzPVwibWFudWFsXCJcbiAgICBwbGFjZW1lbnQ9XCJyaWdodCBsZWZ0IGF1dG9cIlxuICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICN0PVwibmdiUG9wb3ZlclwiXG4gICAgcG9zaXRpb25UYXJnZXQ9XCIudGlwLXRhcmdldFwiXG4gICAgcG9wb3ZlckNsYXNzPVwiaXMtbmFycm93IGRyaXZlci1jaGFydC10b29sdGlwXCJcbiAgICBbYW5pbWF0aW9uXT1cInRydWVcIlxuICA+PC9zcGFuPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjbG9hZGVyPlxuICA8ZGl2IGNsYXNzPVwibG9hZGluZy1jb250YWluZXIgaGFzLXRleHQtY2VudGVyIG15LTUgcHktNVwiPlxuICAgIDxmYS1pY29uIGljb249XCJzcGlubmVyXCIgW3B1bHNlXT1cInRydWVcIiBzaXplPVwibGdcIj48L2ZhLWljb24+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzaG93U3dpdGNoUmVjYWxjdWxhdGVkPlxuICA8cCBjbGFzcz1cImhhcy10ZXh0LWNlbnRlcmVkIHB5LTNcIj5ObyBjaGFydCBhdmFpbGFibGUuIFN3aXRjaCB0byA8Y29kZT5yZWNhbGN1bGF0ZWQ8L2NvZGU+IHZlcnNpb24uPC9wPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0aXBDb250ZW50IGxldC10aXBEYXRhPVwidGlwRGF0YVwiPlxuICA8cCAqbmdJZj1cInRpcERhdGEuaGFzV2VpZ2h0ZWRWYWx1ZVwiPmNvbnRyaWJ1dGlvbjoge3sgdGlwRGF0YS53ZWlnaHRlZFZhbHVlVGV4dCB9fTwvcD5cbiAgPHA+XG4gICAgPGEgY2xhc3M9XCJpcy1kYXJrXCIgdGFyZ2V0PVwiX2JsYW5rXCIgW2hyZWZdPVwidGlwRGF0YS52YWx1ZUtleUhyZWZcIj52YWx1ZTwvYT46IHt7IHRpcERhdGEudmFsdWVWYWx1ZVRleHQgfX1cbiAgICA8YSBjbGFzcz1cImlzLWRhcmtcIiAqbmdJZj1cInRpcERhdGEuaGFzVmFsdWVcIiBbaHJlZl09XCJ0aXBEYXRhLm1vZGVsRG9jc0hyZWZcIiB0YXJnZXQ9XCJfYmxhbmtcIj5cbiAgICAgIDxzcGFuPkRvY3M8L3NwYW4+XG4gICAgICA8ZmEtaWNvbiBjbGFzcz1cIm1sLTFcIiBpY29uPVwiZXh0ZXJuYWwtbGluay1hbHRcIiBzaXplPVwic21cIj48L2ZhLWljb24+XG4gICAgPC9hPlxuICA8L3A+XG4gIDxwPlxuICAgIDxhIGNsYXNzPVwiaXMtZGFya1wiIHRhcmdldD1cIl9ibGFua1wiIFtocmVmXT1cInRpcERhdGEubW9kZWxLZXlIcmVmXCI+bWV0aG9kTW9kZWw8L2E+OiBcbiAgICA8YSBjbGFzcz1cImlzLWRhcmtcIiB0YXJnZXQ9XCJfYmxhbmtcIiBbaHJlZl09XCJ0aXBEYXRhLm1vZGVsVmFsdWVIcmVmXCI+e3sgdGlwRGF0YS5tb2RlbFZhbHVlIH19PC9hPlxuICA8L3A+XG4gIDxwPlxuICAgIDxhIGNsYXNzPVwiaXMtZGFya1wiIHRhcmdldD1cIl9ibGFua1wiIFtocmVmXT1cInRpcERhdGEudGVybUtleUhyZWZcIj50ZXJtPC9hPjogXG4gICAgPGEgY2xhc3M9XCJpcy1kYXJrXCIgdGFyZ2V0PVwiX2JsYW5rXCIgW2hyZWZdPVwidGlwRGF0YS50ZXJtVmFsdWVIcmVmXCI+e3sgdGlwRGF0YS50ZXJtVmFsdWUgfX08L2E+XG4gIDwvcD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|