@loxia/mst-viewer 5.3.1-202305221148 → 5.4.0
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/generated.version.mjs +2 -2
- package/esm2020/lib/components/mstviewer/mstviewer.component.mjs +3 -17
- package/esm2020/lib/components/ritdelen-lijst/ritdelen-lijst.component.mjs +4 -10
- package/esm2020/lib/components/ritdelen-view/ritdelen-view.component.mjs +2 -2
- package/esm2020/lib/mst-viewer.module.mjs +4 -9
- package/esm2020/lib/state/actions/actions.mjs +2 -8
- package/esm2020/lib/state/effect/ritdelen.effect.mjs +3 -1
- package/esm2020/lib/state/mst-editor-state.mjs +2 -4
- package/esm2020/lib/util/actie-helper.mjs +2 -2
- package/esm2020/lib/util/actie-popover-bepaler.mjs +1 -1
- package/fesm2015/loxia-mst-viewer.mjs +30 -101
- package/fesm2015/loxia-mst-viewer.mjs.map +1 -1
- package/fesm2020/loxia-mst-viewer.mjs +30 -100
- package/fesm2020/loxia-mst-viewer.mjs.map +1 -1
- package/generated.version.d.ts +1 -1
- package/lib/components/mstviewer/mstviewer.component.d.ts +2 -5
- package/lib/components/ritdelen-lijst/ritdelen-lijst.component.d.ts +0 -4
- package/lib/state/actions/actions.d.ts +2 -16
- package/lib/state/mst-editor-state.d.ts +1 -4
- package/package.json +1 -1
- package/esm2020/lib/components/mstviewer/RitActiesGoedkeuren.mjs +0 -2
- package/esm2020/lib/services/beweging-verrijker.service.mjs +0 -30
- package/esm2020/lib/state/effect/rit-goedkeuren.effect.mjs +0 -23
- package/lib/components/mstviewer/RitActiesGoedkeuren.d.ts +0 -3
- package/lib/services/beweging-verrijker.service.d.ts +0 -13
- package/lib/state/effect/rit-goedkeuren.effect.d.ts +0 -16
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const version = '5.
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
export const version = '5.4.0';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVkLnZlcnNpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9tc3Qtdmlld2VyL3NyYy9nZW5lcmF0ZWQudmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHZlcnNpb24gPSAnNS40LjAnO1xuXG4iXX0=
|
|
@@ -10,8 +10,8 @@ import { MeldingEvent } from '../../model/melding-event';
|
|
|
10
10
|
import { OngeplandeActie } from '../../model/ongeplande-actie';
|
|
11
11
|
import { SeinOpRitdeel } from '../../model/sein-op-ritdeel';
|
|
12
12
|
import { AlgemeneRitInfoDto } from '../../resources/mstlogging.resource';
|
|
13
|
-
import { AddOngeplandeActie, BepaalOngeplandeActies, BewegingInvoegen, ClearProgress,
|
|
14
|
-
import { navigeer, navigeerVanaf, ritdeelInvoegen, setAlternatieveRitDelen,
|
|
13
|
+
import { AddOngeplandeActie, BepaalOngeplandeActies, BewegingInvoegen, ClearProgress, ResetNieuweRoute, SetActieOpRitSelectieIds, SetAlgemeneRitInfo, SetAlternatievenClickableIds, SetAlternatievenSelectieIds, SetBeginSeinRightClickableIds, SetBeginSeinSelectieIds, SetDebug, SetEindSeinenClickableIds, SetEindSeinSelectieIds, SetGebrokenRitSelectieIds, SetGeplandeActies, SetIaVersie, SetNieuwRouteEindSein, SetOngeplandeActiesBepaald, SetRitSelectieIds, SetSignaleringsbeeldInfoDtos, SetVisibleSignaleringsbeeldInfoDtos, ShowProgress } from '../../state/actions/actions';
|
|
14
|
+
import { navigeer, navigeerVanaf, ritdeelInvoegen, setAlternatieveRitDelen, setZichtbaarheidAlleRitdelen, toggleZichtbaarheidVoorBewegingen } from '../../state/actions/ritdelen.actions';
|
|
15
15
|
import { ActiePopoverBepaler } from '../../util/actie-popover-bepaler';
|
|
16
16
|
import { MeldingBuilder } from '../../util/melding-builder';
|
|
17
17
|
import { ArrayMultimap } from '../../util/multi-map';
|
|
@@ -75,14 +75,6 @@ export class MstviewerComponent {
|
|
|
75
75
|
this.subscriptions.push(this.store.select('editable').subscribe(editable => this.editable = editable));
|
|
76
76
|
this.subscriptions.push(this.store.select('ongeplandeActiesBepaald')
|
|
77
77
|
.subscribe(ongeplandeActiesBepaald => this.ongeplandeActiesBepaald = ongeplandeActiesBepaald));
|
|
78
|
-
this.subscriptions.push(this.store.select('nieuweBewegingen').subscribe(nieuweRit => {
|
|
79
|
-
if (this.treinpad) {
|
|
80
|
-
this.treinpad.bewegingen = nieuweRit;
|
|
81
|
-
store.dispatch(setRitdelenAfterUpdate([]));
|
|
82
|
-
store.dispatch(SetOngeplandeActiesBepaald(false));
|
|
83
|
-
this.bepaalSbInfos();
|
|
84
|
-
}
|
|
85
|
-
}));
|
|
86
78
|
this.progressIndicator$ = this.store.pipe(select(s => s.progressState?.progressIndicator));
|
|
87
79
|
}
|
|
88
80
|
ngOnInit() {
|
|
@@ -90,9 +82,6 @@ export class MstviewerComponent {
|
|
|
90
82
|
console.log('MST viewer versie: ' + version);
|
|
91
83
|
document.getElementById('contextMenu').addEventListener('mouseleave', () => this.hideContextMenu());
|
|
92
84
|
}
|
|
93
|
-
ngAfterContentInit() {
|
|
94
|
-
setTimeout(() => this.ritdelenlijst.registerMain(this), 50);
|
|
95
|
-
}
|
|
96
85
|
ngOnChanges({ debug, baseurl, treinpad, ongeplandeActies, iaversieinfo }) {
|
|
97
86
|
if (debug) {
|
|
98
87
|
this.setDebugFlag(debug.currentValue);
|
|
@@ -548,9 +537,6 @@ export class MstviewerComponent {
|
|
|
548
537
|
pplgs.push(pplg);
|
|
549
538
|
}
|
|
550
539
|
}
|
|
551
|
-
keurAlleActiesGoed() {
|
|
552
|
-
this.store.dispatch(KeurAlleActiesGoed(this.treinpad.bewegingen, this.ongeplandeActies));
|
|
553
|
-
}
|
|
554
540
|
}
|
|
555
541
|
MstviewerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.6", ngImport: i0, type: MstviewerComponent, deps: [{ token: i1.SignaleringsbeeldInfoResource }, { token: i2.MstLoggingResource }, { token: i3.EditorService }, { token: i4.SignaleringsBeeldManagerService }, { token: i5.Store }, { token: i6.MeldingEmitterService }, { token: i7.ActieHelper }, { token: i8.BewegingUtils }], target: i0.ɵɵFactoryTarget.Component });
|
|
556
542
|
MstviewerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.6", type: MstviewerComponent, selector: "mst-viewer", inputs: { iaversieinfo: "iaversieinfo", treinpad: "treinpad", ongeplandeActies: "ongeplandeActies", paginationSize: "paginationSize", baseurl: "baseurl", debug: "debug", viewer: "viewer", useClickArea: "useClickArea" }, outputs: { meldingen: "meldingen", goedgekeurd: "goedgekeurd" }, viewQueries: [{ propertyName: "imxviewer", first: true, predicate: ["imxviewercontainer"], descendants: true }, { propertyName: "ritdelenlijst", first: true, predicate: ["ritdelenlijstcontainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<loxia-overlay *ngIf=\"(progressIndicator$ | async)\">\n <loxia-progress-indicator id=\"progress-indicator\" [border]=\"false\" upperText=\"\">\n </loxia-progress-indicator>\n</loxia-overlay>\n<div style=\"position: relative\">\n <rpe-component [baseurl]=\"baseurl\" path=\"/mst/editor/editor.nocache.js\"></rpe-component>\n\n <div class=\"container-fluid\" style=\"width:100%;margin-top:10px;position:absolute;\">\n <button [class.active]=\"isActive\" id=\"toonSideNavKnop\" (click)=\"toggleSideNavVisible()\"\n class=\"btn btn-primary btn-sm\" [hidden]=\"printing\">Ritdetails\n </button>\n <button *ngIf=\"showGoedkeuren()\" id=\"goedkeurenKnop\" (click)=\"goedkeurenClick()\"\n class=\"btn btn-primary btn-sm\"\n [disabled]=\"!valideRit\" [hidden]=\"printing\">Goedkeuren\n </button>\n </div>\n\n <imx-viewer [useClickArea]=\"useClickArea\" #imxviewercontainer [svgInfo]=\"svgInfos\" [selectieInfos]=\"selectieInfos\"\n [clickableIds]=\"clickableIds\" [rightClickableIds]=\"rightClickableIds\"\n (clickHandler)=\"handleImxviewClick($event)\" (rightClickHandler)=\"handleImxviewRightClick($event)\"\n [popoverInfos]=\"popoverInfos\" [inlineDgnCssImport]=\"false\"></imx-viewer>\n\n <nav [class.active]=\"!isActive\" id=\"sidebar\">\n <div id=\"dismiss\">\n <em id=\"verbergSideNav\" class=\"fa fa-arrow-left\" (click)=\"toggleSideNavVisible()\">×</em>\n </div>\n <ritdelen-lijst *ngIf=\"!viewer\" (focusEmitter)=\"focusRitdeel($event)\" #ritdelenlijstcontainer></ritdelen-lijst>\n <ritdelen-view *ngIf=\"viewer\" (focusEmitter)=\"focusRitdeel($event)\" #ritdelenlijstcontainer></ritdelen-view>\n </nav>\n <ul id=\"contextMenu\" class=\"dropdown-menu\" role=\"menu\" [ngStyle]=\"contextMenuStyle\">\n <li *ngFor=\"let action of contextMenuActions\"><a class=\"dropdown-item\" tabindex=\"-1\"\n (click)=\"action.click()\">{{action.label}}</a></li>\n </ul>\n\n <a class=\"carousel-control-prev\" [ngClass]=\"(isActive)?'carousel-sidebar-open':'carousel-sidebar'\" role=\"button\"\n data-slide=\"prev\" (click)=\"navigeerNaarLinks($event)\" [hidden]=\"!kanLinks\">\n <span id=\"previous-page\" class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n <span class=\"sr-only\">Previous</span>\n </a>\n <a class=\"carousel-control-next\" style=\"width: 2%;\" role=\"button\" data-slide=\"next\" (click)=\"navigeerNaarRechts($event)\"\n [hidden]=\"!kanRechts\">\n <span id=\"next-page\" class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n <span class=\"sr-only\">Next</span>\n </a>\n</div>\n", styles: ["#toonSideNavKnop{float:left;position:relative;z-index:600}#toonSideNavKnop.active{visibility:hidden}#goedkeurenKnop{float:right;position:relative;z-index:600}#sidebar{min-width:350px;max-width:475px;background:white;transition:all .3s;height:93vh;position:absolute;top:0;z-index:20}#sidebar.active{margin-left:-475px}#sidebar .sidebar-header{padding:20px;background:#6d7fcc}#dismiss{width:20px;height:20px;position:absolute;cursor:pointer;top:5px;right:0;color:#000}[hidden]{display:none}.carousel-sidebar{width:2%}.carousel-sidebar-open{width:2%;transition:all .3s;left:350px}\n"], components: [{ type: i9.OverlayComponent, selector: "loxia-overlay" }, { type: i10.ProgressIndicatorComponent, selector: "loxia-progress-indicator", inputs: ["iconClass", "border", "primary", "inverted", "disabled", "background", "upperText", "lowerText"] }, { type: i11.RpeComponent, selector: "rpe-component", inputs: ["baseurl", "path"] }, { type: i12.ImxViewerComponent, selector: "imx-viewer", inputs: ["useClickArea", "inlineDgnCssImport", "svgInfo", "selectieInfos", "clickableIds", "rightClickableIds", "popoverInfos"], outputs: ["clickHandler", "rightClickHandler", "svgLoaded"] }, { type: i13.RitdelenLijstComponent, selector: "ritdelen-lijst", outputs: ["focusEmitter"] }, { type: i14.RitdelenViewComponent, selector: "ritdelen-view", outputs: ["focusEmitter"] }], directives: [{ type: i15.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i15.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i15.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i15.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], pipes: { "async": i15.AsyncPipe } });
|
|
@@ -584,4 +570,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.6", ngImpor
|
|
|
584
570
|
type: ViewChild,
|
|
585
571
|
args: ['ritdelenlijstcontainer']
|
|
586
572
|
}] } });
|
|
587
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXN0dmlld2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21zdC12aWV3ZXIvc3JjL2xpYi9jb21wb25lbnRzL21zdHZpZXdlci9tc3R2aWV3ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXN0LXZpZXdlci9zcmMvbGliL2NvbXBvbmVudHMvbXN0dmlld2VyL21zdHZpZXdlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUVOLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWtELFlBQVksRUFBVyxNQUFNLG1CQUFtQixDQUFDO0FBQzFHLE9BQU8sRUFBVSxVQUFVLEVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsTUFBTSxFQUFTLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxhQUFhLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRy9ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsa0JBQWtCLEVBQXNCLE1BQU0scUNBQXFDLENBQUM7QUFNN0YsT0FBTyxFQUNILGtCQUFrQixFQUNsQixzQkFBc0IsRUFDdEIsZ0JBQWdCLEVBQ2hCLGFBQWEsRUFD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b0IsRUFBRSxJQUFZO1FBQ3hELElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2pDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDcEI7SUFDTCxDQUFDO0lBRUQsa0JBQWtCO1FBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztJQUM3RixDQUFDOzsrR0FwbUJRLGtCQUFrQjttR0FBbEIsa0JBQWtCLCtqQkNqRi9CLHV3RkE2Q0E7MkZEb0NhLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDSSxZQUFZOzZVQUtiLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVJLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFFMEIsU0FBUztzQkFBekMsU0FBUzt1QkFBQyxvQkFBb0I7Z0JBQ00sYUFBYTtzQkFBakQsU0FBUzt1QkFBQyx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJbXhWaWV3ZXJDb21wb25lbnQsIFBvcG92ZXJJbmZvLCBTZWxlY3RpZUV2ZW50LCBTZWxlY3RpZUluZm8sIFN2Z0luZm8gfSBmcm9tICdAbG94aWEvaW14LXZpZXdlcic7XG5pbXBvcnQgeyBkb21laW4sIEpzSmF2YVV0aWwsIHNiYmxhZCB9IGZyb20gJ0Bsb3hpYS9yaWp3ZWdlbic7XG5pbXBvcnQgeyBzZWxlY3QsIFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMvU3Vic2NyaXB0aW9uJztcbmltcG9ydCB7IHZlcnNpb24gfSBmcm9tICcuLi8uLi8uLi9nZW5lcmF0ZWQudmVyc2lvbic7XG5pbXBvcnQgeyBQcm9ncmVzc0luZGljYXRvciB9IGZyb20gJy4uLy4uL2F0b21pYy1jb21wb25lbnRzL3Byb2dyZXNzLWluZGljYXRvci9wcm9ncmVzcy1pbmRpY2F0b3IuZW50aXR5JztcbmltcG9ydCB7IEFsdGVybmF0aWVmUml0RGVlbCB9IGZyb20gJy4uLy4uL21vZGVsL2FsdGVybmF0aWVmLXJpdC1kZWVsJztcbmltcG9ydCB7IE1lbGRpbmdFdmVudCB9IGZyb20gJy4uLy4uL21vZGVsL21lbGRpbmctZXZlbnQnO1xuaW1wb3J0IHsgT25nZXBsYW5kZUFjdGllIH0gZnJvbSAnLi4vLi4vbW9kZWwvb25nZXBsYW5kZS1hY3RpZSc7XG5pbXBvcnQgeyBSaWp3ZWdwbGFuUmlqd2VnRHdhbmdDb21iaW5hdGllIH0gZnJvbSAnLi4vLi4vbW9kZWwvcmlqd2VncGxhbi1yaWp3ZWctZHdhbmctY29tYmluYXRpZSc7XG5pbXBvcnQgeyBSaXRkZWVsIH0gZnJvbSAnLi4vLi4vbW9kZWwvcml0ZGVlbCc7XG5pbXBvcnQgeyBTZWluT3BSaXRkZWVsIH0gZnJvbSAnLi4vLi4vbW9kZWwvc2Vpbi1vcC1yaXRkZWVsJztcbmltcG9ydCB7IEFjdGllLCBJbmZyYU1vZGVsLCBSaXQgfSBmcm9tICcuLi8uLi9vcHRpbW8nO1xuaW1wb3J0IHsgQWxnZW1lbmVSaXRJbmZvRHRvLCBNc3RMb2dnaW5nUmVzb3VyY2UgfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvbXN0bG9nZ2luZy5yZXNvdXJjZSc7XG5pbXBvcnQgeyBJU2lnbmFsZXJpbmdzYmVlbGRJbmZvRHRvLCBTaWduYWxlcmluZ3NiZWVsZEluZm9SZXNvdXJjZSB9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9zaWduYWxlcmluZ3NiZWVsZGluZm8ucmVzb3VyY2UnO1xuaW1wb3J0IHsgQmV3ZWdpbmdVdGlscyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Jld2VnaW5nLXV0aWxzLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWRpdG9yU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VkaXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IE1lbGRpbmdFbWl0dGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21lbGRpbmctZW1pdHRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFNpZ25hbGVyaW5nc0JlZWxkTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zaWduYWxlcmluZ3MtYmVlbGQtbWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7XG4gICAgQWRkT25nZXBsYW5kZUFjdGllLFxuICAgIEJlcGFhbE9uZ2VwbGFuZGVBY3RpZXMsXG4gICAgQmV3ZWdpbmdJbnZvZWdlbixcbiAgICBDbGVhclByb2dyZXNzLFxuICAgIEtldXJBbGxlQWN0aWVzR29lZCxcbiAgICBSZXNldE5pZXV3ZVJvdXRlLFxuICAgIFNldEFjdGllT3BSaXRTZWxlY3RpZUlkcyxcbiAgICBTZXRBbGdlbWVuZVJpdEluZm8sXG4gICAgU2V0QWx0ZXJuYXRpZXZlbkNsaWNrYWJsZUlkcyxcbiAgICBTZXRBbHRlcm5hdGlldmVuU2VsZWN0aWVJZHMsXG4gICAgU2V0QmVnaW5TZWluUmlnaHRDbGlja2FibGVJZHMsXG4gICAgU2V0QmVnaW5TZWluU2VsZWN0aWVJZHMsXG4gICAgU2V0RGVidWcsXG4gICAgU2V0RWluZFNlaW5lbkNsaWNrYWJsZUlkcyxcbiAgICBTZXRFaW5kU2VpblNlbGVjdGllSWRzLFxuICAgIFNldEdlYnJva2VuUml0U2VsZWN0aWVJZHMsXG4gICAgU2V0R2VwbGFuZGVBY3RpZXMsXG4gICAgU2V0SWFWZXJzaWUsXG4gICAgU2V0TmlldXdSb3V0ZUVpbmRTZWluLFxuICAgIFNldE9uZ2VwbGFuZGVBY3RpZXNCZXBhYWxkLFxuICAgIFNldFJpdFNlbGVjdGllSWRzLFxuICAgIFNldFNpZ25hbGVyaW5nc2JlZWxkSW5mb0R0b3MsXG4gICAgU2V0VmlzaWJsZVNpZ25hbGVyaW5nc2JlZWxkSW5mb0R0b3MsXG4gICAgU2hvd1Byb2dyZXNzXG59IGZyb20gJy4uLy4uL3N0YXRlL2FjdGlvbnMvYWN0aW9ucyc7XG5pbXBvcnQge1xuICAgIG5hdmlnZWVyLFxuICAgIG5hdmlnZWVyVmFuYWYsXG4gICAgcml0ZGVlbEludm9lZ2VuLFxuICAgIHNldEFsdGVybmF0aWV2ZVJpdERlbGVuLCBzZXRSaXRkZWxlbkFmdGVyVXBkYXRlLFxuICAgIHNldFppY2h0YmFhcmhlaWRBbGxlUml0ZGVsZW4sXG4gICAgdG9nZ2xlWmljaHRiYWFyaGVpZFZvb3JCZXdlZ2luZ2VuXG59IGZyb20gJy4uLy4uL3N0YXRlL2FjdGlvbnMvcml0ZGVsZW4uYWN0aW9ucyc7XG5pbXBvcnQgeyBNc3RFZGl0b3JTdGF0ZSB9IGZyb20gJy4uLy4uL3N0YXRlL21zdC1lZGl0b3Itc3RhdGUnO1xuaW1wb3J0IHsgQWN0aWVIZWxwZXIgfSBmcm9tICcuLi8uLi91dGlsL2FjdGllLWhlbHBlcic7XG5pbXBvcnQgeyBBY3RpZVBvcG92ZXJCZXBhbGVyIH0gZnJvbSAnLi4vLi4vdXRpbC9hY3RpZS1wb3BvdmVyLWJlcGFsZXInO1xuaW1wb3J0IHsgTWVsZGluZ0J1aWxkZXIgfSBmcm9tICcuLi8uLi91dGlsL21lbGRpbmctYnVpbGRlcic7XG5pbXBvcnQgeyBBcnJheU11bHRpbWFwIH0gZnJvbSAnLi4vLi4vdXRpbC9tdWx0aS1tYXAnO1xuaW1wb3J0IFV0aWxzIGZyb20gJy4uLy4uL3V0aWwvdXRpbHMnO1xuaW1wb3J0IHsgUml0ZGVsZW5MaWpzdENvbXBvbmVudCB9IGZyb20gJy4uL3JpdGRlbGVuLWxpanN0L3JpdGRlbGVuLWxpanN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSaXRBY3RpZXNHb2Vka2V1cmVuIH0gZnJvbSAnLi9SaXRBY3RpZXNHb2Vka2V1cmVuJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdtc3Qtdmlld2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbXN0dmlld2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9tc3R2aWV3ZXIuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBNc3R2aWV3ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlckNvbnRlbnRJbml0LCBSaXRBY3RpZXNHb2Vka2V1cmVuIHtcbiAgICBASW5wdXQoKSBpYXZlcnNpZWluZm86IEluZnJhTW9kZWw7IC8vIHppZSBvcHRpbW8uSW5mcmFNb2RlbFxuICAgIEBJbnB1dCgpIHRyZWlucGFkOiBhbnk7IC8vIHppZSBvcHRpbW8uUml0XG4gICAgQElucHV0KCkgb25nZXBsYW5kZUFjdGllczogYW55W107IC8vIHppZSBvcHRpbW8uQWN0aWVcbiAgICBASW5wdXQoKSBwYWdpbmF0aW9uU2l6ZSA9IDQ7XG4gICAgQElucHV0KCkgYmFzZXVybCA9ICdodHRwczovL2FjY2VwdGF0aWUucmFpbGRlc2lnbi5ubCc7XG4gICAgQElucHV0KCkgZGVidWc6IGJvb2xlYW47XG4gICAgQElucHV0KCkgdmlld2VyOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHVzZUNsaWNrQXJlYTogYm9vbGVhbjtcblxuICAgIEBPdXRwdXQoKSBtZWxkaW5nZW4gPSB0aGlzLm1lbGRpbmdFbWl0dGVyU2VydmljZS5nZXRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIGdvZWRnZWtldXJkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBWaWV3Q2hpbGQoJ2lteHZpZXdlcmNvbnRhaW5lcicpIGlteHZpZXdlcjogSW14Vmlld2VyQ29tcG9uZW50O1xuICAgIEBWaWV3Q2hpbGQoJ3JpdGRlbGVubGlqc3Rjb250YWluZXInKSByaXRkZWxlbmxpanN0OiBSaXRkZWxlbkxpanN0Q29tcG9uZW50O1xuXG4gICAgYnVzeTogUHJvbWlzZTxhbnk+O1xuXG4gICAgcG9wb3ZlckluZm9zOiBQb3BvdmVySW5mb1tdID0gW107XG4gICAgc3ZnSW5mb3M6IFN2Z0luZm9bXSA9IFtdO1xuICAgIHNlbGVjdGllSW5mb3M6IFNlbGVjdGllSW5mb1tdID0gW107XG4gICAgY2xpY2thYmxlSWRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgcmlnaHRDbGlja2FibGVJZHM6IHN0cmluZ1tdID0gW107XG4gICAgY29udGV4dE1lbnVBY3Rpb25zOiBhbnkgPSBbXTtcbiAgICBjb250ZXh0TWVudVN0eWxlOiBhbnkgPSB7IGRpc3BsYXk6ICdub25lJyB9O1xuICAgIG9yaWdpbmVlbFRyZWluUGFkOiBSaXQ7XG4gICAgaXNBY3RpdmUgPSBmYWxzZTtcbiAgICBlZGl0YWJsZTogYm9vbGVhbjtcblxuICAgIHZhbGlkZVJpdCA9IGZhbHNlO1xuICAgIHByaW50aW5nID0gZmFsc2U7XG4gICAga2FuTGlua3MgPSBmYWxzZTtcbiAgICBrYW5SZWNodHMgPSBmYWxzZTtcblxuICAgIGJ1c3lQcm9taXNlUmVzb2x2ZTtcbiAgICBwcm9ncmVzc0luZGljYXRvciQ6IE9ic2VydmFibGU8UHJvZ3Jlc3NJbmRpY2F0b3I+O1xuXG4gICAgcHJpdmF0ZSBwdWljTmFhckJlZ2luU2VpblJpdGRlZWwgPSBuZXcgTWFwPHN0cmluZywgU2Vpbk9wUml0ZGVlbD4oKTtcbiAgICBwcml2YXRlIHB1aWNOYWFyRWluZFNlaW5Db21iaW5hdGllID0gbmV3IE1hcDxzdHJpbmcsIFJpandlZ3BsYW5SaWp3ZWdEd2FuZ0NvbWJpbmF0aWU+KCk7XG4gICAgcHJpdmF0ZSBwdWljTmFhckFsdGVybmF0aWV2ZVJvdXRlID0gbmV3IE1hcDxzdHJpbmcsIEFsdGVybmF0aWVmUml0RGVlbD4oKTtcbiAgICBwcml2YXRlIG9uZ2VwbGFuZGVBY3RpZXNCZXBhYWxkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBzYmlSZXNvdXJjZTogU2lnbmFsZXJpbmdzYmVlbGRJbmZvUmVzb3VyY2UsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBtc3RMb2dSZXNvdXJjZTogTXN0TG9nZ2luZ1Jlc291cmNlLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgZWRpdG9yU2VydmljZTogRWRpdG9yU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNibVNlcnZpY2U6IFNpZ25hbGVyaW5nc0JlZWxkTWFuYWdlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzdG9yZTogU3RvcmU8TXN0RWRpdG9yU3RhdGU+LFxuICAgICAgICAgICAgICAgIHByaXZhdGUgbWVsZGluZ0VtaXR0ZXJTZXJ2aWNlOiBNZWxkaW5nRW1pdHRlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhY3RpZUhlbHBlcjogQWN0aWVIZWxwZXIsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBiZXdlZ2luZ1V0aWxzOiBCZXdlZ2luZ1V0aWxzKSB7XG4gICAgICAgIHRoaXMub25SaXRkZWxlblVwZGF0ZSgpO1xuICAgICAgICB0aGlzLnRyaWdnZXJTZWxlY3RpZUluZm9CZXBhbGluZygpO1xuICAgICAgICB0aGlzLnRyaWdnZXJDbGlja2FibGVJZEJlcGFsaW5nKCk7XG4gICAgICAgIHRoaXMudHJpZ2dlclJpZ2h0Q2xpY2thYmxlSWRCZXBhbGluZygpO1xuICAgICAgICB0aGlzLmhhbmRsZU5pZXV3ZVJvdXRlVG9lZ2V2b2VnZCgpO1xuICAgICAgICB0aGlzLnNldHVwVHJpZ2dlclBvcG92ZXJCZXBhbGluZygpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnN0b3JlLnNlbGVjdCgnc3ZnSW5mb3MnKS5zdWJzY3JpYmUoc3ZnSW5mb3MgPT4gdGhpcy5zdmdJbmZvcyA9IHN2Z0luZm9zKSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuc3RvcmUuc2VsZWN0KCdidXN5Jykuc3Vic2NyaWJlKGIgPT4gYiA/IHRoaXMuY3JlYXRlUHJvbWlzZVJlc29sdmUoKSA6IHRoaXMucmVzb2x2ZUJ1c3lQcm9taXNlKCkpKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5zdG9yZS5zZWxlY3QoJ2RlYnVnJykuc3Vic2NyaWJlKGRlYnVnID0+IHRoaXMuZGVidWcgPSBkZWJ1ZykpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnN0b3JlLnNlbGVjdCgnZWRpdGFibGUnKS5zdWJzY3JpYmUoZWRpdGFibGUgPT4gdGhpcy5lZGl0YWJsZSA9IGVkaXRhYmxlKSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuc3RvcmUuc2VsZWN0KCdvbmdlcGxhbmRlQWN0aWVzQmVwYWFsZCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKG9uZ2VwbGFuZGVBY3RpZXNCZXBhYWxkID0+IHRoaXMub25nZXBsYW5kZUFjdGllc0JlcGFhbGQgPSBvbmdlcGxhbmRlQWN0aWVzQmVwYWFsZCkpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnN0b3JlLnNlbGVjdCgnbmlldXdlQmV3ZWdpbmdlbicpLnN1YnNjcmliZShuaWV1d2VSaXQgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMudHJlaW5wYWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWlucGFkLmJld2VnaW5nZW4gPSBuaWV1d2VSaXQ7XG4gICAgICAgICAgICAgICAgc3RvcmUuZGlzcGF0Y2goc2V0Uml0ZGVsZW5BZnRlclVwZGF0ZShbXSkpO1xuICAgICAgICAgICAgICAgIHN0b3JlLmRpc3BhdGNoKFNldE9uZ2VwbGFuZGVBY3RpZXNCZXBhYWxkKGZhbHNlKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5iZXBhYWxTYkluZm9zKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgICAgdGhpcy5wcm9ncmVzc0luZGljYXRvciQgPSB0aGlzLnN0b3JlLnBpcGUoc2VsZWN0KHMgPT4gcy5wcm9ncmVzc1N0YXRlPy5wcm9ncmVzc0luZGljYXRvcikpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldERlYnVnRmxhZygpO1xuICAgICAgICBjb25zb2xlLmxvZygnTVNUIHZpZXdlciB2ZXJzaWU6ICcgKyB2ZXJzaW9uKTtcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRleHRNZW51JykuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsICgpID0+IHRoaXMuaGlkZUNvbnRleHRNZW51KCkpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnJpdGRlbGVubGlqc3QucmVnaXN0ZXJNYWluKHRoaXMpLCA1MCk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoeyBkZWJ1ZywgYmFzZXVybCwgdHJlaW5wYWQsIG9uZ2VwbGFuZGVBY3RpZXMsIGlhdmVyc2llaW5mbyB9OiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChkZWJ1Zykge1xuICAgICAgICAgICAgdGhpcy5zZXREZWJ1Z0ZsYWcoZGVidWcuY3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYmFzZXVybCkge1xuICAgICAgICAgICAgdGhpcy5zYmlSZXNvdXJjZS4kc2V0VXJsKHRoaXMuYmFzZXVybCk7XG4gICAgICAgICAgICB0aGlzLm1zdExvZ1Jlc291cmNlLiRzZXRVcmwodGhpcy5iYXNldXJsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHJlaW5wYWQgfHwgb25nZXBsYW5kZUFjdGllcykge1xuICAgICAgICAgICAgdGhpcy5iZXBhYWxTYkluZm9zKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlhdmVyc2llaW5mbykge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChTZXRJYVZlcnNpZSh0aGlzLmlhdmVyc2llaW5mbykpO1xuICAgICAgICAgICAgdGhpcy5iZXBhYWxTYkluZm9zKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRyZWlucGFkICYmIHRoaXMudHJlaW5wYWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0T3JpZ2luZWVsVHJlaW5QYWQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob25nZXBsYW5kZUFjdGllcykge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChTZXRPbmdlcGxhbmRlQWN0aWVzQmVwYWFsZChmYWxzZSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdmdDb250YWluZXInKS5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCB0aGlzLmRlYnVnRXZlbnRMaXN0ZW5lcigpKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgIH1cblxuICAgIGZvY3VzUml0ZGVlbChyaXRkZWVsOiBSaXRkZWVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRvcG9FbGVtZW50ZW4gPSB0aGlzLnNibVNlcnZpY2UuYmVwYWFsUm91dGVFbGVtZW50ZW4ocml0ZGVlbC5nZXRSb3V0ZSgpKTtcbiAgICAgICAgY29uc3QgZHdhbmdQdWljcyA9IHRoaXMuZ2V0UHVpY3ModG9wb0VsZW1lbnRlbik7XG5cbiAgICAgICAgaWYgKHJpdGRlZWwuaXNOaWV0QmVzY2hpa2JhYXIoKSkge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChTZXRPbmdlcGxhbmRlQWN0aWVzQmVwYWFsZChmYWxzZSkpO1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuYXZpZ2VlclZhbmFmKHRoaXMucGFnaW5hdGlvblNpemUsIHRoaXMuaWF2ZXJzaWVpbmZvLCByaXRkZWVsKSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlteHZpZXdlci5mb2N1c09uSWRzKGR3YW5nUHVpY3MpO1xuICAgIH1cblxuICAgIGZvY3VzUHVpYyhwdWljczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbXh2aWV3ZXIuZm9jdXNPbklkcyhwdWljcyk7XG4gICAgfVxuXG4gICAgYWRkRGVidWdIYW5kbGVyKCkge1xuICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N2Z0NvbnRhaW5lcicpLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3ZlcicsIHRoaXMuZGVidWdFdmVudExpc3RlbmVyKCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZWJ1Z0V2ZW50TGlzdGVuZXIoKSB7XG4gICAgICAgIHJldHVybiBldmVudCA9PiB7XG4gICAgICAgICAgICBsZXQgZWxlbSA9IGV2ZW50LnRhcmdldDtcbiAgICAgICAgICAgIGxldCBpZDogc3RyaW5nID0gZWxlbS5pZDtcbiAgICAgICAgICAgIGlmICghaWQuc3RhcnRzV2l0aCgncCcpKSB7XG4gICAgICAgICAgICAgICAgZWxlbSA9IGVsZW0ucGFyZW50RWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZCA9IGVsZW0uaWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpZC5zdGFydHNXaXRoKCdwJykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0cCA9IHRoaXMuc2JtU2VydmljZS5nZXRUb3BvbG9neUVsZW1lbnRCeVB1aWMoaWQuc3Vic3RyaW5nKDEpKTtcbiAgICAgICAgICAgICAgICBpZiAodHApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qga21zOiBzYmJsYWQuS2lsb21ldHJlcmluZ1tdID0gSnNKYXZhVXRpbC5saXN0VG9BcnJheSh0cC5nZXRLaWxvbWV0cmVyaW5nZW4oKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxvZ2xpbmUgPSAnS21pbmZvOiAnICsgdHAuZ2V0Q29tcG9uZW50TmFtZSgpICsgJywgJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga20gb2Yga21zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nbGluZSArPSBrbS5nZXRLbUxpbnQoKSArICcgJyArIGttLmdldEttV2FhcmRlKCkgKyAnICc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhsb2dsaW5lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBiZXBhYWxPbmdlcGxhbmRlQWN0aWVzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5vbmdlcGxhbmRlQWN0aWVzICYmIHRoaXMudHJlaW5wYWQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQmVwYWFsT25nZXBsYW5kZUFjdGllcyh0aGlzLm9uZ2VwbGFuZGVBY3RpZXMsIHRoaXMudHJlaW5wYWQpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGJlcGFhbFNiSW5mb3MoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnRyZWlucGFkICYmIHRoaXMub25nZXBsYW5kZUFjdGllcyAmJiB0aGlzLmlhdmVyc2llaW5mbz8udmVyc2llKSB7XG4gICAgICAgICAgICBsZXQgcHBsZ3MgPSB0aGlzLmJlcGFhbFBwbGdzKHRoaXMudHJlaW5wYWQpO1xuICAgICAgICAgICAgcHBsZ3MgPSB0aGlzLmJlcGFhbFBwbGdzVWl0QWN0aWVzKHRoaXMub25nZXBsYW5kZUFjdGllcywgcHBsZ3MpO1xuICAgICAgICAgICAgaWYgKHBwbGdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxhYWRTaWduYWxlcmluZ3NiZWVsZEluZm8ocHBsZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYmVwYWFsUHBsZ3ModHJlaW5wYWQ6IFJpdCk6IEFycmF5PHN0cmluZz4ge1xuICAgICAgICBjb25zdCBwcGxncyA9IFtdO1xuICAgICAgICBpZiAodHJlaW5wYWQgJiYgdHJlaW5wYWQuYmV3ZWdpbmdlbikge1xuICAgICAgICAgICAgdHJlaW5wYWQuYmV3ZWdpbmdlbi5mb3JFYWNoKGJld2VnaW5nID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnZvZWdOaWV1d2VQcGxnVG9lKHBwbGdzLCBiZXdlZ2luZy52YW5QcGxnKTtcbiAgICAgICAgICAgICAgICB0aGlzLnZvZWdOaWV1d2VQcGxnVG9lKHBwbGdzLCBiZXdlZ2luZy5uYWFyUHBsZyk7XG4gICAgICAgICAgICAgICAgdGhpcy52b2VnTmlldXdlUHBsZ1RvZShwcGxncywgYmV3ZWdpbmcudmFuU2VpblBwbGcpO1xuICAgICAgICAgICAgICAgIHRoaXMudm9lZ05pZXV3ZVBwbGdUb2UocHBsZ3MsIGJld2VnaW5nLm5hYXJTZWluUHBsZyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHBsZ3M7XG4gICAgfVxuXG4gICAgYmVwYWFsUHBsZ3NVaXRBY3RpZXMoYWN0aWVzOiBBY3RpZVtdLCBwcGxnczogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgICAgIGFjdGllcy5mb3JFYWNoKGFjdGllID0+IHtcbiAgICAgICAgICAgIHRoaXMudm9lZ05pZXV3ZVBwbGdUb2UocHBsZ3MsIGFjdGllLnBwbGdOYWFtKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwcGxncztcbiAgICB9XG5cbiAgICBiZXdlZ2luZ0ludm9lZ2VuKHN0YXJ0U2Vpbk9wUml0ZGVlbDogU2Vpbk9wUml0ZGVlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhpZGVDb250ZXh0TWVudSgpO1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKEJld2VnaW5nSW52b2VnZW4oc3RhcnRTZWluT3BSaXRkZWVsLCB0aGlzLnB1aWNOYWFyRWluZFNlaW5Db21iaW5hdGllKSk7XG4gICAgfVxuXG4gICAgc2V0RGVidWdGbGFnKGRlYnVnOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tZWxkaW5nRW1pdHRlclNlcnZpY2Uuc2V0RGVidWcoZGVidWcpO1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFNldERlYnVnKGRlYnVnKSk7XG4gICAgfVxuXG4gICAgc2V0T3JpZ2luZWVsVHJlaW5QYWQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJpdCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy50cmVpbnBhZCkpO1xuXG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goU2V0QWxnZW1lbmVSaXRJbmZvKFxuICAgICAgICAgICAgbmV3IEFsZ2VtZW5lUml0SW5mb0R0byh7XG4gICAgICAgICAgICAgICAgaWQ6IHJpdC5pZCxcbiAgICAgICAgICAgICAgICBqYWFycGxhbklkOiByaXQuamFhcnBsYW5JZCxcbiAgICAgICAgICAgICAgICB2b2xnbnVtbWVyOiByaXQudm9sZ251bW1lcixcbiAgICAgICAgICAgICAgICBtYWNoaW5lVHlwZUlkOiByaXQubWFjaGluZVR5cGVJZCxcbiAgICAgICAgICAgICAgICBtYWNoaW5lVHlwZU9tc2NocmlqdmluZzogcml0Lm1hY2hpbmVUeXBlT21zY2hyaWp2aW5nLFxuICAgICAgICAgICAgICAgIHJpdERhdHVtOiByaXQucml0RGF0dW0sXG4gICAgICAgICAgICAgICAgc3RhcnREYXR1bTogcml0LnN0YXJ0RGF0dW0sXG4gICAgICAgICAgICAgICAgZWluZERhdHVtOiByaXQuZWluZERhdHVtLFxuICAgICAgICAgICAgICAgIHJpdE5hYW06IHJpdC5yaXROYWFtLFxuICAgICAgICAgICAgICAgIHN0YXJ0TG9jYXRpZTogcml0LnN0YXJ0TG9jYXRpZSxcbiAgICAgICAgICAgICAgICBlaW5kTG9jYXRpZTogcml0LmVpbmRMb2NhdGllLFxuICAgICAgICAgICAgICAgIHJpdFN0YXR1czogcml0LnJpdFN0YXR1cyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZDogcml0Lm1vZGlmaWVkLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQnk6IHJpdC5tb2RpZmllZEJ5LFxuICAgICAgICAgICAgICAgIHBsYW5Kb2JJZDogcml0LnBsYW5Kb2JJZFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKSk7XG4gICAgICAgIHRoaXMub3JpZ2luZWVsVHJlaW5QYWQgPSByaXQ7XG4gICAgfVxuXG4gICAgZ29lZGtldXJlbkNsaWNrKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KCdyaXREZWxlbicpXVxuICAgICAgICApLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKChbcml0RGVsZW5dKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJpdERlbGVuKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnRyZWlucGFkLmFhbnRhbFJpdEFjdGllcztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVpbnBhZC5iZXdlZ2luZ2VuID0gdGhpcy5iZXdlZ2luZ1V0aWxzLnZlcndlcmtCZXdlZ2luZ2VuVm9vckV4cG9ydChyaXREZWxlbiwgdGhpcy5vcmlnaW5lZWxUcmVpblBhZC5iZXdlZ2luZ2VuKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nb2VkZ2VrZXVyZC5lbWl0KHRoaXMudHJlaW5wYWQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldE9yaWdpbmVlbFRyZWluUGFkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApKTtcbiAgICB9XG5cbiAgICBoYW5kbGVJbXh2aWV3Q2xpY2soZXZ0OiBTZWxlY3RpZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHB1aWMgPSBldnQuaWQ7XG4gICAgICAgIGNvbnN0IGFsdGVybmF0aWV2ZVJpdERlZWwgPSB0aGlzLnB1aWNOYWFyQWx0ZXJuYXRpZXZlUm91dGUuZ2V0KHB1aWMpO1xuICAgICAgICBpZiAoYWx0ZXJuYXRpZXZlUml0RGVlbCkge1xuICAgICAgICAgICAgYWx0ZXJuYXRpZXZlUml0RGVlbC5yaXREZWVsLmFjdGllcy5mb3JFYWNoKGFjdGllID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwdWljcyA9IHRoaXMuYWN0aWVIZWxwZXIuYmVwYWFsUHVpY3NWb29yQWN0aWUoYWN0aWUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHB1aWNzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChBZGRPbmdlcGxhbmRlQWN0aWUobmV3IE9uZ2VwbGFuZGVBY3RpZShhY3RpZSwgcHVpY3MpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goc2V0QWx0ZXJuYXRpZXZlUml0RGVsZW4oYWx0ZXJuYXRpZXZlUml0RGVlbCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbWJpbmF0aWUgPSB0aGlzLnB1aWNOYWFyRWluZFNlaW5Db21iaW5hdGllLmdldChwdWljKTtcbiAgICAgICAgaWYgKGNvbWJpbmF0aWUpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goU2V0TmlldXdSb3V0ZUVpbmRTZWluKGNvbWJpbmF0aWUpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJpdGRlbGVubGlqc3QuZGVzZWxlY3RSaXRkZWVsKCk7XG4gICAgfVxuXG4gICAgaGFuZGxlSW14dmlld1JpZ2h0Q2xpY2soZXZ0OiBTZWxlY3RpZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZuID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRTZWluT3BSaXRkZWVsID0gdGhpcy5wdWljTmFhckJlZ2luU2VpblJpdGRlZWwuZ2V0KGV2dC5pZCk7XG4gICAgICAgICAgICBpZiAoc3RhcnRTZWluT3BSaXRkZWVsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5iZXdlZ2luZ0ludm9lZ2VuKHN0YXJ0U2Vpbk9wUml0ZGVlbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuY29udGV4dE1lbnVBY3Rpb25zID0gW107XG4gICAgICAgIHRoaXMuY29udGV4dE1lbnVBY3Rpb25zLnB1c2goeyBsYWJlbDogJ2Jld2VnaW5nIGludm9lZ2VuJywgY2xpY2s6IGZuIH0pO1xuICAgICAgICB0aGlzLmNvbnRleHRNZW51U3R5bGUgPSB7XG4gICAgICAgICAgICBsZWZ0OiAoZXZ0LmV2ZW50Lm9mZnNldFggLSA1KSArICdweCcsXG4gICAgICAgICAgICB0b3A6IChldnQuZXZlbnQub2Zmc2V0WSAtIDUpICsgJ3B4JyxcbiAgICAgICAgICAgIGRpc3BsYXk6ICdpbmxpbmUnLFxuICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZSdcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBoaWRlQ29udGV4dE1lbnUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29udGV4dE1lbnVTdHlsZSA9IHtcbiAgICAgICAgICAgIGRpc3BsYXk6ICdub25lJyxcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAga2FuTGlua3NOYXZpZ2VyZW4ocml0RGVsZW46IFJpdGRlZWxbXSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gcml0RGVsZW4ubGVuZ3RoID4gdGhpcy5wYWdpbmF0aW9uU2l6ZSAmJiAhcml0RGVsZW5bMF0uaXNCaW5uZW5XaW5kb3coKTtcbiAgICB9XG5cbiAgICBrYW5SZWNodHNOYXZpZ2VyZW4ocml0RGVsZW46IFJpdGRlZWxbXSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gcml0RGVsZW4ubGVuZ3RoID4gdGhpcy5wYWdpbmF0aW9uU2l6ZSAmJiAhcml0RGVsZW5bcml0RGVsZW4ubGVuZ3RoIC0gMV0uaXNCaW5uZW5XaW5kb3coKTtcbiAgICB9XG5cbiAgICBuYXZpZ2Vlck5hYXJMaW5rcyhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5hdmlnZWVyKGV2ZW50ICYmIGV2ZW50LmN0cmxLZXkgPyAtMSA6IC0odGhpcy5wYWdpbmF0aW9uU2l6ZSAtIDEpLCB0aGlzLnBhZ2luYXRpb25TaXplLCB0aGlzLmlhdmVyc2llaW5mbykpO1xuICAgIH1cblxuICAgIG5hdmlnZWVyTmFhclJlY2h0cyhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5hdmlnZWVyKGV2ZW50ICYmIGV2ZW50LmN0cmxLZXkgPyAxIDogdGhpcy5wYWdpbmF0aW9uU2l6ZSAtIDEsIHRoaXMucGFnaW5hdGlvblNpemUsIHRoaXMuaWF2ZXJzaWVpbmZvKSk7XG4gICAgfVxuXG4gICAgcmVzb2x2ZUJ1c3lQcm9taXNlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5idXN5UHJvbWlzZVJlc29sdmUpIHtcbiAgICAgICAgICAgIHRoaXMuYnVzeVByb21pc2VSZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0b2dnbGVTaWRlTmF2VmlzaWJsZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc0FjdGl2ZSA9ICF0aGlzLmlzQWN0aXZlO1xuICAgIH1cblxuICAgIHNob3dHb2Vka2V1cmVuKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0YWJsZSAmJiB0aGlzLnNlbGVjdGllSW5mb3MubGVuZ3RoICE9PSAwO1xuICAgIH1cblxuICAgIHByaXZhdGUgYmVwYWFsQ29udGV4dE1lbnVWb29yQmVnaW5TZWluZW4ocml0RGVsZW46IFJpdGRlZWxbXSk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc2JtU2VydmljZS5pc1JlYWR5KCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBpZHMgPSBbXTtcbiAgICAgICAgcml0RGVsZW4uZmlsdGVyKHJpdERlZWwgPT4gcml0RGVlbC5pc1ppY2h0YmFhcigpKS5mb3JFYWNoKHJpdERlZWwgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHVpY3MgPSByaXREZWVsLmdldFNlaW5lbigpLmZsYXRNYXAoc2VpbiA9PiB0aGlzLnZlcnphbWVsQmVnaW5TZWluSW5mb3JtYXRpZShzZWluLCByaXREZWVsKSk7XG4gICAgICAgICAgICBpZHMgPSBpZHMuY29uY2F0KHB1aWNzKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChTZXRCZWdpblNlaW5SaWdodENsaWNrYWJsZUlkcyhpZHMpKTtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChTZXRCZWdpblNlaW5TZWxlY3RpZUlkcyhbXSkpO1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFNldEVpbmRTZWluU2VsZWN0aWVJZHMoW10pKTtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChTZXRFaW5kU2VpbmVuQ2xpY2thYmxlSWRzKFtdKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2ZXJ6YW1lbEJlZ2luU2VpbkluZm9ybWF0aWUoc2VpbjogZG9tZWluLlNlaW4sIHJpdERlZWw6IFJpdGRlZWwpOiBzdHJpbmdbXSB7XG4gICAgICAgIGNvbnN0IHB1aWNzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBjb25zdCBzYlNlaW4gPSB0aGlzLnNibVNlcnZpY2UuZ2V0U0JTZWluKHNlaW4pO1xuICAgICAgICBpZiAoc2JTZWluKSB7XG4gICAgICAgICAgICBjb25zdCBwdWljID0gc2JTZWluLmdldFB1aWMoKTtcbiAgICAgICAgICAgIHB1aWNzLnB1c2gocHVpYyk7XG4gICAgICAgICAgICB0aGlzLnB1aWNOYWFyQmVnaW5TZWluUml0ZGVlbC5zZXQocHVpYywgbmV3IFNlaW5PcFJpdGRlZWwoc2Vpbiwgcml0RGVlbCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFsdFNiU2VpbiA9IHRoaXMuc2JtU2VydmljZS5nZXRUZWNobmlzY2hBbHRlcm5hdGllZlNCU2VpbihzYlNlaW4pO1xuICAgICAgICBpZiAoYWx0U2JTZWluKSB7XG4gICAgICAgICAgICBjb25zdCBwdWljID0gYWx0U2JTZWluLmdldFB1aWMoKTtcbiAgICAgICAgICAgIHB1aWNzLnB1c2gocHVpYyk7XG4gICAgICAgICAgICBjb25zdCByd3AgPSB0aGlzLmVkaXRvclNlcnZpY2UuZ2V0Umlqd2VncGxhbihhbHRTYlNlaW4uZ2V0UFBMRygpKTtcbiAgICAgICAgICAgIGNvbnN0IGRvbWVpblNlaW4gPSByd3AuZ2V0QmVnaW5TZWluKGFsdFNiU2Vpbi5nZXROYW1lKCkpO1xuICAgICAgICAgICAgLy8gc2VpbiBrYW4gbmlldCBhbHRpamQgZ2V2b25kZW4gd29yZGVuIG9tZGF0IGVyIG5pZXQgYWx0aWpkIGVlbiByaWp3ZWcgdmFuYWYgZGl0IHNlaW4gaXMsIGJpanYgYmlqIHZlZXJ3aXNzZWwuXG4gICAgICAgICAgICBpZiAoZG9tZWluU2Vpbikge1xuICAgICAgICAgICAgICAgIHRoaXMucHVpY05hYXJCZWdpblNlaW5SaXRkZWVsLnNldChwdWljLCBuZXcgU2Vpbk9wUml0ZGVlbChkb21laW5TZWluLCByaXREZWVsKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHB1aWNzO1xuICAgIH1cblxuICAgIHByaXZhdGUgYmVwYWFsUm91dGVIaWdobGlnaHRzKHJpdERlbGVuOiBSaXRkZWVsW10pOiB2b2lkIHtcbiAgICAgICAgbGV0IHJpdFNlbGVjdGllUHVpY3MgPSBbXTtcbiAgICAgICAgY29uc3QgYWN0aWVPcFJpdFNlbGVjdGllUHVpY3MgPSBuZXcgQXJyYXlNdWx0aW1hcDxBY3RpZSwgc3RyaW5nPigpO1xuICAgICAgICBsZXQgZ2Vicm9rZW5SaXRTZWxlY3RpZVB1aWNzID0gW107XG4gICAgICAgIGNvbnN0IGFsdGVybmF0aWV2ZVJvdXRlUHVpY3MgPSBbXTtcbiAgICAgICAgY29uc3QgY2xpY2thYmxlSWRzID0gW107XG4gICAgICAgIGxldCBsYWF0c3RlTmFhclNwb29yO1xuICAgICAgICBjb25zdCBiZXN0YWF0VWl0MVJpdGRlZWwgPSByaXREZWxlbi5sZW5ndGggPT09IDE7XG4gICAgICAgIGxldCBnZWJyb2tlblJpdCA9IGZhbHNlO1xuICAgICAgICByaXREZWxlbi5mb3JFYWNoKHJpdERlZWwgPT4ge1xuICAgICAgICAgICAgaWYgKHJpdERlZWwuaXNaaWNodGJhYXIoKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hcDogQXJyYXlNdWx0aW1hcDxBY3RpZSwgc3RyaW5nPiA9IHRoaXMuYWN0aWVIZWxwZXIuYmVwYWFsQWN0aWVQdWljc1VpdFJpdGRlZWwocml0RGVlbCk7XG4gICAgICAgICAgICAgICAgbWFwLmtleXMoKS5mb3JFYWNoKGtleSA9PiBhY3RpZU9wUml0U2VsZWN0aWVQdWljcy5wdXRBbGwoa2V5LCBtYXAuZ2V0KGtleSkpKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGlzR2Vicm9rZW5SaXRkZWVsID0gIWJlc3RhYXRVaXQxUml0ZGVlbCAmJiB0aGlzLmlzR2Vicm9rZW5SaXRkZWVsKHJpdERlZWwsIGxhYXRzdGVOYWFyU3Bvb3IpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGR3YW5nUHVpY3MgPSB0aGlzLmdldFB1aWNzKHJpdERlZWwuZ2V0VG9wb2xvZ2llRWxlbWVudGVuKCkpO1xuICAgICAgICAgICAgICAgIGlmIChkd2FuZ1B1aWNzICYmIGlzR2Vicm9rZW5SaXRkZWVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGdlYnJva2VuUml0U2VsZWN0aWVQdWljcyA9IGdlYnJva2VuUml0U2VsZWN0aWVQdWljcy5jb25jYXQoZHdhbmdQdWljcyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkd2FuZ1B1aWNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJpdFNlbGVjdGllUHVpY3MgPSByaXRTZWxlY3RpZVB1aWNzLmNvbmNhdChkd2FuZ1B1aWNzKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmJlcGFhbEFsdGVybmF0aXZlbihyaXREZWVsLCBjbGlja2FibGVJZHMsIGFsdGVybmF0aWV2ZVJvdXRlUHVpY3MpO1xuXG4gICAgICAgICAgICAgICAgZ2Vicm9rZW5SaXQgPSBnZWJyb2tlblJpdCA/IGdlYnJva2VuUml0IDogaXNHZWJyb2tlblJpdGRlZWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYWF0c3RlTmFhclNwb29yID0gcml0RGVlbC5nZXRWaXN1ZWVsTmFhclBybFNwb29yKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudmFsaWRlUml0ID0gIWdlYnJva2VuUml0O1xuXG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goU2V0R2VwbGFuZGVBY3RpZXMoYWN0aWVPcFJpdFNlbGVjdGllUHVpY3MpKTtcbiAgICAgICAgY29uc3QgYWN0aWVPcFJpdFNlbGVjdGllUHVpY3NBcnJheSA9IFV0aWxzLmZsYXRNYXAoQXJyYXkuZnJvbShhY3RpZU9wUml0U2VsZWN0aWVQdWljcy52YWx1ZXMoKSksIHggPT4geCk7XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goU2V0QWN0aWVPcFJpdFNlbGVjdGllSWRzKGFjdGllT3BSaXRTZWxlY3RpZVB1aWNzQXJyYXkpKTtcbiAgICAgICAgcml0U2VsZWN0aWVQdWljcyA9IHJpdFNlbGVjdGllUHVpY3MuZmlsdGVyKGl0ZW0gPT4gYWN0aWVPcFJpdFNlbGVjdGllUHVpY3NBcnJheS5pbmRleE9mKGl0ZW0pIDwgMCk7IC8vIG1ha2UgbXV0dWFsbHkgZXhjbHVzaXZlXG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goU2V0Uml0U2VsZWN0aWVJZHMocml0U2VsZWN0aWVQdWljcykpO1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFNldEdlYnJva2VuUml0U2VsZWN0aWVJZHMoZ2Vicm9rZW5SaXRTZWxlY3RpZVB1aWNzKSk7XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goU2V0QWx0ZXJuYXRpZXZlbkNsaWNrYWJsZUlkcyh0aGlzLmVkaXRhYmxlID8gY2xpY2thYmxlSWRzIDogW10pKTtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChTZXRBbHRlcm5hdGlldmVuU2VsZWN0aWVJZHModGhpcy5lZGl0YWJsZSA/IGFsdGVybmF0aWV2ZVJvdXRlUHVpY3MgOiBbXSkpO1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENsZWFyUHJvZ3Jlc3MoKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiZXBhYWxBbHRlcm5hdGl2ZW4ocml0RGVlbDogUml0ZGVlbCwgY2xpY2thYmxlSWRzOiBzdHJpbmdbXSwgYWx0ZXJuYXRpZXZlUm91dGVQdWljczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgcml0RGVlbC5nZXRBbHRlcm5hdGlldmVSb3V0ZXMoKT8uZm9yRWFjaChhbHRlcm5hdGlldmVSb3V0ZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhbHRlcm5hdGlldmVUb3BvRWxlbWVudGVuID1cbiAgICAgICAgICAgICAgICB0aGlzLnNibVNlcnZpY2UuYmVwYWFsQWx0ZXJuYXRpdmVSb3V0ZUhpZ2hsaWdodHMoYWx0ZXJuYXRpZXZlUm91dGUsIHJpdERlZWwuZ2V0VG9wb2xvZ2llRWxlbWVudGVuKCkpO1xuXG4gICAgICAgICAgICBjb25zdCBhbHRQdWljcyA9IHRoaXMuZ2V0UHVpY3MoYWx0ZXJuYXRpZXZlVG9wb0VsZW1lbnRlbik7XG4gICAgICAgICAgICBpZiAoYWx0UHVpY3MpIHtcbiAgICAgICAgICAgICAgICBjbGlja2FibGVJZHMucHVzaCguLi5hbHRQdWljcyk7XG4gICAgICAgICAgICAgICAgYWx0UHVpY3MuZm9yRWFjaChwdWljID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wdWljTmFhckFsdGVybmF0aWV2ZVJvdXRlLnNldChwdWljLCBuZXcgQWx0ZXJuYXRpZWZSaXREZWVsKHJpdERlZWwsIGFsdGVybmF0aWV2ZVJvdXRlKSk7XG4gICAgICAgICAgICAgICAgICAgIGFsdGVybmF0aWV2ZVJvdXRlUHVpY3MucHVzaChwdWljKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVQcm9taXNlUmVzb2x2ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5idXN5ID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYnVzeVByb21pc2VSZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVTaWduYWxlcmluZ3NiZWVsZEluZm9RdWVyeUR0byhwcGxnczogc3RyaW5nW10sIGlhaW5mbzogSW5mcmFNb2RlbCkge1xuICAgICAgICBjb25zdCBkYXR1bSA9IGlhaW5mby5pbmdhbmdzRGF0dW0gJiYgIWlzTmFOKGlhaW5mby5pbmdhbmdzRGF0dW0uZ2V0VGltZSgpKSA/IGlhaW5mby5pbmdhbmdzRGF0dW0udG9JU09TdHJpbmcoKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHsgcHBsZ3MsIHZlcnNpZTogaWFpbmZvLnZlcnNpZSwgaW5nYW5nc0RhdHVtOiBkYXR1bSB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZm9jdXNPcEJld2VnaW5nKHJpdGRlZWw6IFJpdGRlZWwsIHJlc29sdmU6IEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgICAgIC8vIGRlc2VsZWN0ZWVyIGFsbGVzXG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goc2V0WmljaHRiYWFyaGVpZEFsbGVSaXRkZWxlbihmYWxzZSkpO1xuICAgICAgICAvLyBlbmFibGUgcml0YWN0aWVzIChjaGVja2JveCkgdm9vciBhbGxlIHJpdGRlbGVuIG1ldCBiZXdlZ2luZyBkaWUgbWF0Y2hlZCBtZXQgYmV3ZWdpbmdJZChzKVxuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKHRvZ2dsZVppY2h0YmFhcmhlaWRWb29yQmV3ZWdpbmdlbihbcGFyc2VJbnQocml0ZGVlbC5nZXRCZXdlZ2luZ0lkKCksIDEwKV0pKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RpZUluZm9zKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBzZWxlY3RpZUluZm8gb2YgdGhpcy5zZWxlY3RpZUluZm9zKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RpZUluZm8uY2xhenogPT09ICdyaXQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGRpdCBuZWVtIG5pZXQgZGUgdnJpamViYWFuIGVsZW1lbnRlbiBtZWVcbiAgICAgICAgICAgICAgICBjb25zdCB0b3BvRWxlbWVudGVuID0gdGhpcy5zYm1TZXJ2aWNlLmJlcGFhbFJvdXRlRWxlbWVudGVuKHJpdGRlZWwuZ2V0Um91dGUoKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZHdhbmdQdWljcyA9IHRoaXMuZ2V0UHVpY3ModG9wb0VsZW1lbnRlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5pbXh2aWV3ZXIuZm9jdXNPbklkcyhkd2FuZ1B1aWNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIHJlc29sdmUgZGUgcHJvbWlzZSwgb20gYWFuIHRlIGdldmVuIGRhdCBmb2N1cyBrbGFhciBpc1xuICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChDbGVhclByb2dyZXNzKCkpO1xuICAgICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UHVpY3ModG9wb0VsZW1lbnRlbjogc2JibGFkLkhhc0lkZW50aWZpZXJbXSk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRvcG9FbGVtZW50ZW4ubWFwKGUgPT4gZS5nZXRQdWljKCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNHZWJyb2tlblJpdGRlZWwocml0RGVlbCwgbGFhdHN0ZU5hYXJTcG9vcik6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBpc0dlYnJva2VuUml0ZGVlbCA9ICEoIWxhYXRzdGVOYWFyU3Bvb3IgfHwgcml0RGVlbC5nZXRWYW5QcmxTcG9vcigpID09PSBsYWF0c3RlTmFhclNwb29yKTtcbiAgICAgICAgaWYgKGlzR2Vicm9rZW5SaXRkZWVsKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnUml0IHZhbiAnICsgcml0RGVlbC5nZXRWYW5QcmxTcG9vcigpICsgJyBuYWFyICcgKyByaXREZWVsLmdldE5hYXJQcmxTcG9vcigpXG4gICAgICAgICAgICAgICAgKyAnIGluIHBwbGcgJyArIHJpdERlZWwuZ2V0UHBsZygpICsgJyBzbHVpdCBuaWV0IGFhbiBvcCB2b3JpZ2UgYmV3ZWdpbmcuJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzR2Vicm9rZW5SaXRkZWVsO1xuICAgIH1cblxuICAgIHByaXZhdGUgbGFhZFNpZ25hbGVyaW5nc2JlZWxkSW5mbyhwcGxnczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb2JzID0gdGhpcy5zYmlSZXNvdXJjZS5nZXRCZXN0YWF0SUFMZXZlcmluZyh7IHZlcnNpZTogdGhpcy5pYXZlcnNpZWluZm8udmVyc2llIH0pO1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFNob3dQcm9ncmVzcygpKTtcbiAgICAgICAgb2JzLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgICB0aGlzLmxhYWRFblZlcndlcmtTaWduYWxlcmluZ3NiZWVsZEluZm8ocHBsZ3MpO1xuICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgdGhpcy5tZWxkaW5nZW4uZW1pdChuZXcgTWVsZGluZ0V2ZW50KFV0aWxzLmdldFZhbGlkRXJvcnJNZXNzYWdlKGVyciksICdpbmZvJykpO1xuICAgICAgICAgICAgdGhpcy5pYXZlcnNpZWluZm8gPSB7IHZlcnNpZTogJ0RPTk5BXzc3MTM2X1ZFUl8xJywgaW5nYW5nc0RhdHVtOiBuZXcgRGF0ZSgpIH07XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFNldElhVmVyc2llKHRoaXMuaWF2ZXJzaWVpbmZvKSk7XG4gICAgICAgICAgICB0aGlzLmxhYWRFblZlcndlcmtTaWduYWxlcmluZ3NiZWVsZEluZm8ocHBsZ3MpO1xuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIHByaXZhdGUgbGFhZEVuVmVyd2Vya1NpZ25hbGVyaW5nc2JlZWxkSW5mbyhwcGxnczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0lBIHZlcnNpZTogJyArIHRoaXMuaWF2ZXJzaWVpbmZvLnZlcnNpZSk7XG4gICAgICAgIGNvbnN0IG9icyA9IHRoaXMuc2JpUmVzb3VyY2UubGFhZFNpZ25hbGVyaW5nc2JlZWxkSW5mbyh0aGlzLmNyZWF0ZVNpZ25hbGVyaW5nc2JlZWxkSW5mb1F1ZXJ5RHRvKHBwbGdzLCB0aGlzLmlhdmVyc2llaW5mbykpO1xuICAgICAgICBvYnMucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWRkRGVidWdIYW5kbGVyKCk7XG4gICAgICAgICAgICBjb25zdCBkdG9zOiBJU2lnbmFsZXJpbmdzYmVlbGRJbmZvRHRvW10gPSByZXM7XG4gICAgICAgICAgICBpZiAoZHRvcyAmJiBkdG9zLmZpbHRlcihkdG8gPT4gZHRvLm1ldFZpc3VhbGlzYXRpZSkubGVuZ3RoID4gMTIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1lbGRpbmdlbi5lbWl0KE1lbGRpbmdCdWlsZGVyLm1lZXJEYW4xMkJsYWRlbkdldm9uZGVuKGR0b3MubGVuZ3RoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFNldFNpZ25hbGVyaW5nc2JlZWxkSW5mb0R0b3MoZHRvcywgdGhpcy5pYXZlcnNpZWluZm8sIHRoaXMudHJlaW5wYWQsIHRoaXMucGFnaW5hdGlvblNpemUpKTtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goU2V0VmlzaWJsZVNpZ25hbGVyaW5nc2JlZWxkSW5mb0R0b3MoZHRvcykpO1xuICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgdGhpcy5tZWxkaW5nZW4uZW1pdChNZWxkaW5nQnVpbGRlci5uaWV0R2V2b25kZW5TQkkoZXJyKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlTmlldXdlUm91dGVUb2VnZXZvZWdkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0b3JlLnNlbGVjdCgnbmlldXdlUm91dGUnKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobmlldXdlUm91dGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5pZXV3ZVJvdXRlLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChSZXNldE5pZXV3ZVJvdXRlKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChyaXRkZWVsSW52b2VnZW4obmlldXdlUm91dGUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvblJpdGRlbGVuVXBkYXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnN0b3JlLnNlbGVjdCgncml0RGVsZW4nKS5zdWJzY3JpYmUocml0RGVsZW4gPT4ge1xuICAgICAgICAgICAgaWYgKHJpdERlbGVuICYmIHJpdERlbGVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmthbkxpbmtzID0gdGhpcy5rYW5MaW5rc05hdmlnZXJlbihyaXREZWxlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5rYW5SZWNodHMgPSB0aGlzLmthblJlY2h0c05hdmlnZXJlbihyaXREZWxlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5iZXBhYWxSb3V0ZUhpZ2hsaWdodHMocml0RGVsZW4pO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmVkaXRhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYmVwYWFsQ29udGV4dE1lbnVWb29yQmVnaW5TZWluZW4ocml0RGVsZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMub25nZXBsYW5kZUFjdGllc0JlcGFhbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iZXBhYWxPbmdlcGxhbmRlQWN0aWVzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJpbnRGb2N1c0Jld2VnaW5nKGJld2VnaW5nSWQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICBjb25zdCB0ZW1wUml0RGVsZW4gPSBbXTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5zdG9yZS5zZWxlY3QoJ3JpdERlbGVuJykucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUocml0RGVsZW4gPT4gdGVtcFJpdERlbGVuLnB1c2goLi4ucml0RGVsZW4pKSk7XG4gICAgICAgIGNvbnN0IGdldm9uZGVuUml0ZGVlbDogUml0ZGVlbFtdID0gdGVtcFJpdERlbGVuLmZpbHRlcihyID0+IHBhcnNlSW50KHIuZ2V0QmV3ZWdpbmdJZCgpLCAxMCkgPT09IGJld2VnaW5nSWQpO1xuXG4gICAgICAgIC8vIGhpZGUvc2hvdyBkZSBrbm9wcGVuXG4gICAgICAgIHRoaXMucHJpbnRpbmcgPSAhIWJld2VnaW5nSWQgJiYgZ2V2b25kZW5SaXRkZWVsLmxlbmd0aCA9PT0gMTtcblxuICAgICAgICBpZiAoIXRoaXMucHJpbnRpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgnR2VlbiBiZXdlZ2luZyBnZXZvbmRlbiB2b29yICcgKyBiZXdlZ2luZ0lkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxib29sZWFuPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgcml0ZGVlbCA9IGdldm9uZGVuUml0ZGVlbFswXTtcbiAgICAgICAgICAgIGlmIChyaXRkZWVsLmlzTmlldEJlc2NoaWtiYWFyKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5hdmlnZWVyVmFuYWYodGhpcy5wYWdpbmF0aW9uU2l6ZSwgdGhpcy5pYXZlcnNpZWluZm8sIHJpdGRlZWwpKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFNob3dQcm9ncmVzcygpKTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c09wQmV3ZWdpbmcocml0ZGVlbCwgcmVzb2x2ZSk7XG4gICAgICAgICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNPcEJld2VnaW5nKHJpdGRlZWwsIHJlc29sdmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwVHJpZ2dlclBvcG92ZXJCZXBhbGluZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICB0aGlzLnN0b3JlLnNlbGVjdCgncml0RGVsZW4nKSxcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KCdvbmdlcGxhbmRlQWN0aWVzJyksXG4gICAgICAgICAgICB0aGlzLnN0b3JlLnNlbGVjdCgnZ2VwbGFuZGVBY3RpZXMnKV1cbiAgICAgICAgKS5zdWJzY3JpYmUoKFtyaXRkZWxlbiwgb25nZXBsYW5kZUFjdGllcywgZ2VwbGFuZGVBY3RpZXNdKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJpdGRlbGVuICYmIHJpdGRlbGVuLmxlbmd0aCA+IDAgJiYgZ2VwbGFuZGVBY3RpZXMgJiYgb25nZXBsYW5kZUFjdGllcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcG92ZXJJbmZvcyA9IEFjdGllUG9wb3ZlckJlcGFsZXIuYmVwYWFsUG9wb3ZlckluZm9zKHJpdGRlbGVuLCBnZXBsYW5kZUFjdGllcywgb25nZXBsYW5kZUFjdGllcywgdGhpcy5zYm1TZXJ2aWNlLmdldEFsbGVTb29ydGVuV2lzc2VscygpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdHJpZ2dlckNsaWNrYWJsZUlkQmVwYWxpbmcoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoJ2FsdGVybmF0aWV2ZW5DbGlja2FibGVJZHMnKSxcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KCdlaW5kU2VpbmVuQ2xpY2thYmxlSWRzJyldXG4gICAgICAgICkuc3Vic2NyaWJlKChbYWx0ZXJuYXRpZXZlbkNsaWNrYWJsZUlkcywgZWluZFNlaW5lbkNsaWNrYWJsZUlkc10pID0+XG4gICAgICAgICAgICB0aGlzLmNsaWNrYWJsZUlkcyA9IFsuLi5hbHRlcm5hdGlldmVuQ2xpY2thYmxlSWRzLCAuLi5laW5kU2VpbmVuQ2xpY2thYmxlSWRzXSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdHJpZ2dlclJpZ2h0Q2xpY2thYmxlSWRCZXBhbGluZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goY29tYmluZUxhdGVzdChbdGhpcy5zdG9yZS5zZWxlY3QoJ2JlZ2luU2VpblJpZ2h0Q2xpY2thYmxlSWRzJyldXG4gICAgICAgICkuc3Vic2NyaWJlKChbYmVnaW5TZWluUmlnaHRDbGlja2FibGVJZHNdKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaWRzID0gW107XG4gICAgICAgICAgICAgICAgaWRzLnB1c2goLi4uYmVnaW5TZWluUmlnaHRDbGlja2FibGVJZHMpO1xuICAgICAgICAgICAgICAgIHRoaXMucmlnaHRDbGlja2FibGVJZHMgPSBpZHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdHJpZ2dlclNlbGVjdGllSW5mb0JlcGFsaW5nKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KCdyaXRTZWxlY3RpZUlkcycpLFxuICAgICAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoJ2FjdGllT3BSaXRTZWxlY3RpZUlkcycpLFxuICAgICAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoJ29uZ2VwbGFuZGVBY3RpZVNlbGVjdGllSWRzJyksXG4gICAgICAgICAgICB0aGlzLnN0b3JlLnNlbGVjdCgnZ2Vicm9rZW5SaXRTZWxlY3RpZUlkcycpLFxuICAgICAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoJ2FsdGVybmF0aWV2ZW5TZWxlY3RpZUlkcycpLFxuICAgICAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoJ2JlZ2luU2VpblNlbGVjdGllSWRzJyksXG4gICAgICAgICAgICB0aGlzLnN0b3JlLnNlbGVjdCgnZWluZFNlaW5TZWxlY3RpZUlkcycpXVxuICAgICAgICApLnN1YnNjcmliZSgoW3JpdCwgYWN0aWVPcFJpdFNlbGVjdGllSWRzLCBvbmdlcGxhbmRlQWN0aWVTZWxlY3RpZUlkcywgZ2Vicm9rZW5yaXQsIGFsdGVybmF0aWV2ZW4sIGJlZ2luLCBlaW5kXSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGllID0gW107XG4gICAgICAgICAgICAgICAgc2VsZWN0aWUucHVzaChuZXcgU2VsZWN0aWVJbmZvKHJpdCwgJ3JpdCcpKTtcbiAgICAgICAgICAgICAgICBzZWxlY3RpZS5wdXNoKG5ldyBTZWxlY3RpZUluZm8oYWN0aWVPcFJpdFNlbGVjdGllSWRzLCAnYWN0aWVvcHJpdCcpKTtcbiAgICAgICAgICAgICAgICBzZWxlY3RpZS5wdXNoKG5ldyBTZWxlY3RpZUluZm8ob25nZXBsYW5kZUFjdGllU2VsZWN0aWVJZHMsICdvbmdlcGxhbmRlQWN0aWUnKSk7XG4gICAgICAgICAgICAgICAgc2VsZWN0aWUucHVzaChuZXcgU2VsZWN0aWVJbmZvKGdlYnJva2Vucml0LCAnZ2Vicm9rZW5yaXQnKSk7XG4gICAgICAgICAgICAgICAgc2VsZWN0aWUucHVzaChuZXcgU2VsZWN0aWVJbmZvKGFsdGVybmF0aWV2ZW4sICdhbHRlcm5hdGlldmVSb3V0ZScpKTtcbiAgICAgICAgICAgICAgICBzZWxlY3RpZS5wdXNoKG5ldyBTZWxlY3RpZUluZm8oYmVnaW4sICd6aWd6YWdWYW4nKSk7XG4gICAgICAgICAgICAgICAgc2VsZWN0aWUucHVzaChuZXcgU2VsZWN0aWVJbmZvKGVpbmQsICd6aWd6YWdOYWFyJykpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aWVJbmZvcyA9IHNlbGVjdGllO1xuICAgICAgICAgICAgfVxuICAgICAgICApKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZvZWdOaWV1d2VQcGxnVG9lKHBwbGdzOiBBcnJheTxzdHJpbmc+LCBwcGxnOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHBwbGcgJiYgcHBsZ3MuaW5kZXhPZihwcGxnKSA8IDApIHtcbiAgICAgICAgICAgIHBwbGdzLnB1c2gocHBsZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBrZXVyQWxsZUFjdGllc0dvZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goS2V1ckFsbGVBY3RpZXNHb2VkKHRoaXMudHJlaW5wYWQuYmV3ZWdpbmdlbiwgdGhpcy5vbmdlcGxhbmRlQWN0aWVzKSk7XG4gICAgfVxufVxuIiwiPGxveGlhLW92ZXJsYXkgKm5nSWY9XCIocHJvZ3Jlc3NJbmRpY2F0b3IkIHwgYXN5bmMpXCI+XG4gICAgPGxveGlhLXByb2dyZXNzLWluZGljYXRvciBpZD1cInByb2dyZXNzLWluZGljYXRvclwiIFtib3JkZXJdPVwiZmFsc2VcIiB1cHBlclRleHQ9XCJcIj5cbiAgICA8L2xveGlhLXByb2dyZXNzLWluZGljYXRvcj5cbjwvbG94aWEtb3ZlcmxheT5cbjxkaXYgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmVcIj5cbiAgICA8cnBlLWNvbXBvbmVudCBbYmFzZXVybF09XCJiYXNldXJsXCIgcGF0aD1cIi9tc3QvZWRpdG9yL2VkaXRvci5ub2NhY2hlLmpzXCI+PC9ycGUtY29tcG9uZW50PlxuXG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiIHN0eWxlPVwid2lkdGg6MTAwJTttYXJnaW4tdG9wOjEwcHg7cG9zaXRpb246YWJzb2x1dGU7XCI+XG4gICAgICAgIDxidXR0b24gW2NsYXNzLmFjdGl2ZV09XCJpc0FjdGl2ZVwiIGlkPVwidG9vblNpZGVOYXZLbm9wXCIgKGNsaWNrKT1cInRvZ2dsZVNpZGVOYXZWaXNpYmxlKClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiIFtoaWRkZW5dPVwicHJpbnRpbmdcIj5SaXRkZXRhaWxzXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2hvd0dvZWRrZXVyZW4oKVwiIGlkPVwiZ29lZGtldXJlbktub3BcIiAoY2xpY2spPVwiZ29lZGtldXJlbkNsaWNrKClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiF2YWxpZGVSaXRcIiBbaGlkZGVuXT1cInByaW50aW5nXCI+R29lZGtldXJlblxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxpbXgtdmlld2VyIFt1c2VDbGlja0FyZWFdPVwidXNlQ2xpY2tBcmVhXCIgI2lteHZpZXdlcmNvbnRhaW5lciBbc3ZnSW5mb109XCJzdmdJbmZvc1wiIFtzZWxlY3RpZUluZm9zXT1cInNlbGVjdGllSW5mb3NcIlxuICAgICAgICAgICAgICAgIFtjbGlja2FibGVJZHNdPVwiY2xpY2thYmxlSWRzXCIgW3JpZ2h0Q2xpY2thYmxlSWRzXT1cInJpZ2h0Q2xpY2thYmxlSWRzXCJcbiAgICAgICAgICAgICAgICAoY2xpY2tIYW5kbGVyKT1cImhhbmRsZUlteHZpZXdDbGljaygkZXZlbnQpXCIgKHJpZ2h0Q2xpY2tIYW5kbGVyKT1cImhhbmRsZUlteHZpZXdSaWdodENsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtwb3BvdmVySW5mb3NdPVwicG9wb3ZlckluZm9zXCIgW2lubGluZURnbkNzc0ltcG9ydF09XCJmYWxzZVwiPjwvaW14LXZpZXdlcj5cblxuICAgIDxuYXYgW2NsYXNzLmFjdGl2ZV09XCIhaXNBY3RpdmVcIiBpZD1cInNpZGViYXJcIj5cbiAgICAgICAgPGRpdiBpZD1cImRpc21pc3NcIj5cbiAgICAgICAgICAgIDxlbSBpZD1cInZlcmJlcmdTaWRlTmF2XCIgY2xhc3M9XCJmYSBmYS1hcnJvdy1sZWZ0XCIgKGNsaWNrKT1cInRvZ2dsZVNpZGVOYXZWaXNpYmxlKClcIj4mdGltZXM7PC9lbT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxyaXRkZWxlbi1saWpzdCAqbmdJZj1cIiF2aWV3ZXJcIiAoZm9jdXNFbWl0dGVyKT1cImZvY3VzUml0ZGVlbCgkZXZlbnQpXCIgI3JpdGRlbGVubGlqc3Rjb250YWluZXI+PC9yaXRkZWxlbi1saWpzdD5cbiAgICAgICAgPHJpdGRlbGVuLXZpZXcgKm5nSWY9XCJ2aWV3ZXJcIiAoZm9jdXNFbWl0dGVyKT1cImZvY3VzUml0ZGVlbCgkZXZlbnQpXCIgI3JpdGRlbGVubGlqc3Rjb250YWluZXI+PC9yaXRkZWxlbi12aWV3PlxuICAgIDwvbmF2PlxuICAgIDx1bCBpZD1cImNvbnRleHRNZW51XCIgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgcm9sZT1cIm1lbnVcIiBbbmdTdHlsZV09XCJjb250ZXh0TWVudVN0eWxlXCI+XG4gICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGNvbnRleHRNZW51QWN0aW9uc1wiPjxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGlvbi5jbGljaygpXCI+e3thY3Rpb24ubGFiZWx9fTwvYT48L2xpPlxuICAgIDwvdWw+XG5cbiAgICA8YSBjbGFzcz1cImNhcm91c2VsLWNvbnRyb2wtcHJldlwiIFtuZ0NsYXNzXT1cIihpc0FjdGl2ZSk/J2Nhcm91c2VsLXNpZGViYXItb3Blbic6J2Nhcm91c2VsLXNpZGViYXInXCIgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgZGF0YS1zbGlkZT1cInByZXZcIiAoY2xpY2spPVwibmF2aWdlZXJOYWFyTGlua3MoJGV2ZW50KVwiIFtoaWRkZW5dPVwiIWthbkxpbmtzXCI+XG4gICAgICAgIDxzcGFuIGlkPVwicHJldmlvdXMtcGFnZVwiIGNsYXNzPVwiY2Fyb3VzZWwtY29udHJvbC1wcmV2LWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPlByZXZpb3VzPC9zcGFuPlxuICAgIDwvYT5cbiAgICA8YSBjbGFzcz1cImNhcm91c2VsLWNvbnRyb2wtbmV4dFwiIHN0eWxlPVwid2lkdGg6IDIlO1wiIHJvbGU9XCJidXR0b25cIiBkYXRhLXNsaWRlPVwibmV4dFwiIChjbGljayk9XCJuYXZpZ2Vlck5hYXJSZWNodHMoJGV2ZW50KVwiXG4gICAgICAgW2hpZGRlbl09XCIha2FuUmVjaHRzXCI+XG4gICAgICAgIDxzcGFuIGlkPVwibmV4dC1wYWdlXCIgY2xhc3M9XCJjYXJvdXNlbC1jb250cm9sLW5leHQtaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+TmV4dDwvc3Bhbj5cbiAgICA8L2E+XG48L2Rpdj5cbiJdfQ==
|
|
573
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXN0dmlld2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21zdC12aWV3ZXIvc3JjL2xpYi9jb21wb25lbnRzL21zdHZpZXdlci9tc3R2aWV3ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXN0LXZpZXdlci9zcmMvbGliL2NvbXBvbmVudHMvbXN0dmlld2VyL21zdHZpZXdlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWdDLE1BQU0sRUFBaUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9ILE9BQU8sRUFBa0QsWUFBWSxFQUFXLE1BQU0sbUJBQW1CLENBQUM7QUFDMUcsT0FBTyxFQUFVLFVBQVUsRUFBVSxNQUFNLGlCQUFpQixDQUFDO0FBQzdELE9BQU8sRUFBRSxNQUFNLEVBQVMsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLGFBQWEsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXJELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHL0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTVELE9BQU8sRUFBRSxrQkFBa0IsRUFBc0IsTUFBTSxxQ0FBcUMsQ0FBQztBQU03RixPQUFPLEVBQ0gsa0JBQWtCLEVBQ2xCLHNCQUFzQixFQUN0QixnQkFBZ0IsRUFDaEIsYUFBYSxF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akQsU0FBUzt1QkFBQyx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJbXhWaWV3ZXJDb21wb25lbnQsIFBvcG92ZXJJbmZvLCBTZWxlY3RpZUV2ZW50LCBTZWxlY3RpZUluZm8sIFN2Z0luZm8gfSBmcm9tICdAbG94aWEvaW14LXZpZXdlcic7XG5pbXBvcnQgeyBkb21laW4sIEpzSmF2YVV0aWwsIHNiYmxhZCB9IGZyb20gJ0Bsb3hpYS9yaWp3ZWdlbic7XG5pbXBvcnQgeyBzZWxlY3QsIFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMvU3Vic2NyaXB0aW9uJztcbmltcG9ydCB7IHZlcnNpb24gfSBmcm9tICcuLi8uLi8uLi9nZW5lcmF0ZWQudmVyc2lvbic7XG5pbXBvcnQgeyBQcm9ncmVzc0luZGljYXRvciB9IGZyb20gJy4uLy4uL2F0b21pYy1jb21wb25lbnRzL3Byb2dyZXNzLWluZGljYXRvci9wcm9ncmVzcy1pbmRpY2F0b3IuZW50aXR5JztcbmltcG9ydCB7IEFsdGVybmF0aWVmUml0RGVlbCB9IGZyb20gJy4uLy4uL21vZGVsL2FsdGVybmF0aWVmLXJpdC1kZWVsJztcbmltcG9ydCB7IE1lbGRpbmdFdmVudCB9IGZyb20gJy4uLy4uL21vZGVsL21lbGRpbmctZXZlbnQnO1xuaW1wb3J0IHsgT25nZXBsYW5kZUFjdGllIH0gZnJvbSAnLi4vLi4vbW9kZWwvb25nZXBsYW5kZS1hY3RpZSc7XG5pbXBvcnQgeyBSaWp3ZWdwbGFuUmlqd2VnRHdhbmdDb21iaW5hdGllIH0gZnJvbSAnLi4vLi4vbW9kZWwvcmlqd2VncGxhbi1yaWp3ZWctZHdhbmctY29tYmluYXRpZSc7XG5pbXBvcnQgeyBSaXRkZWVsIH0gZnJvbSAnLi4vLi4vbW9kZWwvcml0ZGVlbCc7XG5pbXBvcnQgeyBTZWluT3BSaXRkZWVsIH0gZnJvbSAnLi4vLi4vbW9kZWwvc2Vpbi1vcC1yaXRkZWVsJztcbmltcG9ydCB7IEFjdGllLCBJbmZyYU1vZGVsLCBSaXQgfSBmcm9tICcuLi8uLi9vcHRpbW8nO1xuaW1wb3J0IHsgQWxnZW1lbmVSaXRJbmZvRHRvLCBNc3RMb2dnaW5nUmVzb3VyY2UgfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvbXN0bG9nZ2luZy5yZXNvdXJjZSc7XG5pbXBvcnQgeyBJU2lnbmFsZXJpbmdzYmVlbGRJbmZvRHRvLCBTaWduYWxlcmluZ3NiZWVsZEluZm9SZXNvdXJjZSB9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9zaWduYWxlcmluZ3NiZWVsZGluZm8ucmVzb3VyY2UnO1xuaW1wb3J0IHsgQmV3ZWdpbmdVdGlscyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Jld2VnaW5nLXV0aWxzLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWRpdG9yU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VkaXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IE1lbGRpbmdFbWl0dGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21lbGRpbmctZW1pdHRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFNpZ25hbGVyaW5nc0JlZWxkTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zaWduYWxlcmluZ3MtYmVlbGQtbWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7XG4gICAgQWRkT25nZXBsYW5kZUFjdGllLFxuICAgIEJlcGFhbE9uZ2VwbGFuZGVBY3RpZXMsXG4gICAgQmV3ZWdpbmdJbnZvZWdlbixcbiAgICBDbGVhclByb2dyZXNzLFxuICAgIFJlc2V0TmlldXdlUm91dGUsXG4gICAgU2V0QWN0aWVPcFJpdFNlbGVjdGllSWRzLFxuICAgIFNldEFsZ2VtZW5lUml0SW5mbyxcbiAgICBTZXRBbHRlcm5hdGlldmVuQ2xpY2thYmxlSWRzLFxuICAgIFNldEFsdGVybmF0aWV2ZW5TZWxlY3RpZUlkcyxcbiAgICBTZXRCZWdpblNlaW5SaWdodENsaWNrYWJsZUlkcyxcbiAgICBTZXRCZWdpblNlaW5TZWxlY3RpZUlkcyxcbiAgICBTZXREZWJ1ZyxcbiAgICBTZXRFaW5kU2VpbmVuQ2xpY2thYmxlSWRzLFxuICAgIFNldEVpbmRTZWluU2VsZWN0aWVJZHMsXG4gICAgU2V0R2Vicm9rZW5SaXRTZWxlY3RpZUlkcyxcbiAgICBTZXRHZXBsYW5kZUFjdGllcyxcbiAgICBTZXRJYVZlcnNpZSxcbiAgICBTZXROaWV1d1JvdXRlRWluZFNlaW4sXG4gICAgU2V0T25nZXBsYW5kZUFjdGllc0JlcGFhbGQsXG4gICAgU2V0Uml0U2VsZWN0aWVJZHMsXG4gICAgU2V0U2lnbmFsZXJpbmdzYmVlbGRJbmZvRHRvcyxcbiAgICBTZXRWaXNpYmxlU2lnbmFsZXJpbmdzYmVlbGRJbmZvRHRvcyxcbiAgICBTaG93UHJvZ3Jlc3Ncbn0gZnJvbSAnLi4vLi4vc3RhdGUvYWN0aW9ucy9hY3Rpb25zJztcbmltcG9ydCB7XG4gICAgbmF2aWdlZXIsXG4gICAgbmF2aWdlZXJWYW5hZixcbiAgICByaXRkZWVsSW52b2VnZW4sXG4gICAgc2V0QWx0ZXJuYXRpZXZlUml0RGVsZW4sXG4gICAgc2V0WmljaHRiYWFyaGVpZEFsbGVSaXRkZWxlbixcbiAgICB0b2dnbGVaaWNodGJhYXJoZWlkVm9vckJld2VnaW5nZW5cbn0gZnJvbSAnLi4vLi4vc3RhdGUvYWN0aW9ucy9yaXRkZWxlbi5hY3Rpb25zJztcbmltcG9ydCB7IE1zdEVkaXRvclN0YXRlIH0gZnJvbSAnLi4vLi4vc3RhdGUvbXN0LWVkaXRvci1zdGF0ZSc7XG5pbXBvcnQgeyBBY3RpZUhlbHBlciB9IGZyb20gJy4uLy4uL3V0aWwvYWN0aWUtaGVscGVyJztcbmltcG9ydCB7IEFjdGllUG9wb3ZlckJlcGFsZXIgfSBmcm9tICcuLi8uLi91dGlsL2FjdGllLXBvcG92ZXItYmVwYWxlcic7XG5pbXBvcnQgeyBNZWxkaW5nQnVpbGRlciB9IGZyb20gJy4uLy4uL3V0aWwvbWVsZGluZy1idWlsZGVyJztcbmltcG9ydCB7IEFycmF5TXVsdGltYXAgfSBmcm9tICcuLi8uLi91dGlsL211bHRpLW1hcCc7XG5pbXBvcnQgVXRpbHMgZnJvbSAnLi4vLi4vdXRpbC91dGlscyc7XG5pbXBvcnQgeyBSaXRkZWxlbkxpanN0Q29tcG9uZW50IH0gZnJvbSAnLi4vcml0ZGVsZW4tbGlqc3Qvcml0ZGVsZW4tbGlqc3QuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdtc3Qtdmlld2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbXN0dmlld2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9tc3R2aWV3ZXIuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBNc3R2aWV3ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBASW5wdXQoKSBpYXZlcnNpZWluZm86IEluZnJhTW9kZWw7IC8vIHppZSBvcHRpbW8uSW5mcmFNb2RlbFxuICAgIEBJbnB1dCgpIHRyZWlucGFkOiBhbnk7IC8vIHppZSBvcHRpbW8uUml0XG4gICAgQElucHV0KCkgb25nZXBsYW5kZUFjdGllczogYW55W107IC8vIHppZSBvcHRpbW8uQWN0aWVcbiAgICBASW5wdXQoKSBwYWdpbmF0aW9uU2l6ZSA9IDQ7XG4gICAgQElucHV0KCkgYmFzZXVybCA9ICdodHRwczovL2FjY2VwdGF0aWUucmFpbGRlc2lnbi5ubCc7XG4gICAgQElucHV0KCkgZGVidWc6IGJvb2xlYW47XG4gICAgQElucHV0KCkgdmlld2VyOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHVzZUNsaWNrQXJlYTogYm9vbGVhbjtcblxuICAgIEBPdXRwdXQoKSBtZWxkaW5nZW4gPSB0aGlzLm1lbGRpbmdFbWl0dGVyU2VydmljZS5nZXRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIGdvZWRnZWtldXJkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBWaWV3Q2hpbGQoJ2lteHZpZXdlcmNvbnRhaW5lcicpIGlteHZpZXdlcjogSW14Vmlld2VyQ29tcG9uZW50O1xuICAgIEBWaWV3Q2hpbGQoJ3JpdGRlbGVubGlqc3Rjb250YWluZXInKSByaXRkZWxlbmxpanN0OiBSaXRkZWxlbkxpanN0Q29tcG9uZW50O1xuXG4gICAgYnVzeTogUHJvbWlzZTxhbnk+O1xuXG4gICAgcG9wb3ZlckluZm9zOiBQb3BvdmVySW5mb1tdID0gW107XG4gICAgc3ZnSW5mb3M6IFN2Z0luZm9bXSA9IFtdO1xuICAgIHNlbGVjdGllSW5mb3M6IFNlbGVjdGllSW5mb1tdID0gW107XG4gICAgY2xpY2thYmxlSWRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgcmlnaHRDbGlja2FibGVJZHM6IHN0cmluZ1tdID0gW107XG4gICAgY29udGV4dE1lbnVBY3Rpb25zOiBhbnkgPSBbXTtcbiAgICBjb250ZXh0TWVudVN0eWxlOiBhbnkgPSB7IGRpc3BsYXk6ICdub25lJyB9O1xuICAgIG9yaWdpbmVlbFRyZWluUGFkOiBSaXQ7XG4gICAgaXNBY3RpdmUgPSBmYWxzZTtcbiAgICBlZGl0YWJsZTogYm9vbGVhbjtcblxuICAgIHZhbGlkZVJpdCA9IGZhbHNlO1xuICAgIHByaW50aW5nID0gZmFsc2U7XG4gICAga2FuTGlua3MgPSBmYWxzZTtcbiAgICBrYW5SZWNodHMgPSBmYWxzZTtcblxuICAgIGJ1c3lQcm9taXNlUmVzb2x2ZTtcbiAgICBwcm9ncmVzc0luZGljYXRvciQ6IE9ic2VydmFibGU8UHJvZ3Jlc3NJbmRpY2F0b3I+O1xuXG4gICAgcHJpdmF0ZSBwdWljTmFhckJlZ2luU2VpblJpdGRlZWwgPSBuZXcgTWFwPHN0cmluZywgU2Vpbk9wUml0ZGVlbD4oKTtcbiAgICBwcml2YXRlIHB1aWNOYWFyRWluZFNlaW5Db21iaW5hdGllID0gbmV3IE1hcDxzdHJpbmcsIFJpandlZ3BsYW5SaWp3ZWdEd2FuZ0NvbWJpbmF0aWU+KCk7XG4gICAgcHJpdmF0ZSBwdWljTmFhckFsdGVybmF0aWV2ZVJvdXRlID0gbmV3IE1hcDxzdHJpbmcsIEFsdGVybmF0aWVmUml0RGVlbD4oKTtcbiAgICBwcml2YXRlIG9uZ2VwbGFuZGVBY3RpZXNCZXBhYWxkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBzYmlSZXNvdXJjZTogU2lnbmFsZXJpbmdzYmVlbGRJbmZvUmVzb3VyY2UsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBtc3RMb2dSZXNvdXJjZTogTXN0TG9nZ2luZ1Jlc291cmNlLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgZWRpdG9yU2VydmljZTogRWRpdG9yU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNibVNlcnZpY2U6IFNpZ25hbGVyaW5nc0JlZWxkTWFuYWdlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzdG9yZTogU3RvcmU8TXN0RWRpdG9yU3RhdGU+LFxuICAgICAgICAgICAgICAgIHByaXZhdGUgbWVsZGluZ0VtaXR0ZXJTZXJ2aWNlOiBNZWxkaW5nRW1pdHRlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBhY3RpZUhlbHBlcjogQWN0aWVIZWxwZXIsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBiZXdlZ2luZ1V0aWxzOiBCZXdlZ2luZ1V0aWxzKSB7XG4gICAgICAgIHRoaXMub25SaXRkZWxlblVwZGF0ZSgpO1xuICAgICAgICB0aGlzLnRyaWdnZXJTZWxlY3RpZUluZm9CZXBhbGluZygpO1xuICAgICAgICB0aGlzLnRyaWdnZXJDbGlja2FibGVJZEJlcGFsaW5nKCk7XG4gICAgICAgIHRoaXMudHJpZ2dlclJpZ2h0Q2xpY2thYmxlSWRCZXBhbGluZygpO1xuICAgICAgICB0aGlzLmhhbmRsZU5pZXV3ZVJvdXRlVG9lZ2V2b2VnZCgpO1xuICAgICAgICB0aGlzLnNldHVwVHJpZ2dlclBvcG92ZXJCZXBhbGluZygpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnN0b3JlLnNlbGVjdCgnc3ZnSW5mb3MnKS5zdWJzY3JpYmUoc3ZnSW5mb3MgPT4gdGhpcy5zdmdJbmZvcyA9IHN2Z0luZm9zKSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuc3RvcmUuc2VsZWN0KCdidXN5Jykuc3Vic2NyaWJlKGIgPT4gYiA/IHRoaXMuY3JlYXRlUHJvbWlzZVJlc29sdmUoKSA6IHRoaXMucmVzb2x2ZUJ1c3lQcm9taXNlKCkpKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5zdG9yZS5zZWxlY3QoJ2RlYnVnJykuc3Vic2NyaWJlKGRlYnVnID0+IHRoaXMuZGVidWcgPSBkZWJ1ZykpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnN0b3JlLnNlbGVjdCgnZWRpdGFibGUnKS5zdWJzY3JpYmUoZWRpdGFibGUgPT4gdGhpcy5lZGl0YWJsZSA9IGVkaXRhYmxlKSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuc3RvcmUuc2VsZWN0KCdvbmdlcGxhbmRlQWN0aWVzQmVwYWFsZCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKG9uZ2VwbGFuZGVBY3RpZXNCZXBhYWxkID0+IHRoaXMub25nZXBsYW5kZUFjdGllc0JlcGFhbGQgPSBvbmdlcGxhbmRlQWN0aWVzQmVwYWFsZCkpO1xuICAgICAgICB0aGlzLnByb2dyZXNzSW5kaWNhdG9yJCA9IHRoaXMuc3RvcmUucGlwZShzZWxlY3QocyA9PiBzLnByb2dyZXNzU3RhdGU/LnByb2dyZXNzSW5kaWNhdG9yKSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0RGVidWdGbGFnKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdNU1Qgdmlld2VyIHZlcnNpZTogJyArIHZlcnNpb24pO1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGV4dE1lbnUnKS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgKCkgPT4gdGhpcy5oaWRlQ29udGV4dE1lbnUoKSk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoeyBkZWJ1ZywgYmFzZXVybCwgdHJlaW5wYWQsIG9uZ2VwbGFuZGVBY3RpZXMsIGlhdmVyc2llaW5mbyB9OiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChkZWJ1Zykge1xuICAgICAgICAgICAgdGhpcy5zZXREZWJ1Z0ZsYWcoZGVidWcuY3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYmFzZXVybCkge1xuICAgICAgICAgICAgdGhpcy5zYmlSZXNvdXJjZS4kc2V0VXJsKHRoaXMuYmFzZXVybCk7XG4gICAgICAgICAgICB0aGlzLm1zdExvZ1Jlc291cmNlLiRzZXRVcmwodGhpcy5iYXNldXJsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHJlaW5wYWQgfHwgb25nZXBsYW5kZUFjdGllcykge1xuICAgICAgICAgICAgdGhpcy5iZXBhYWxTYkluZm9zKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlhdmVyc2llaW5mbykge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChTZXRJYVZlcnNpZSh0aGlzLmlhdmVyc2llaW5mbykpO1xuICAgICAgICAgICAgdGhpcy5iZXBhYWxTYkluZm9zKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRyZWlucGFkICYmIHRoaXMudHJlaW5wYWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0T3JpZ2luZWVsVHJlaW5QYWQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob25nZXBsYW5kZUFjdGllcykge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChTZXRPbmdlcGxhbmRlQWN0aWVzQmVwYWFsZChmYWxzZSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdmdDb250YWluZXInKS5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCB0aGlzLmRlYnVnRXZlbnRMaXN0ZW5lcigpKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgIH1cblxuICAgIGZvY3VzUml0ZGVlbChyaXRkZWVsOiBSaXRkZWVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRvcG9FbGVtZW50ZW4gPSB0aGlzLnNibVNlcnZpY2UuYmVwYWFsUm91dGVFbGVtZW50ZW4ocml0ZGVlbC5nZXRSb3V0ZSgpKTtcbiAgICAgICAgY29uc3QgZHdhbmdQdWljcyA9IHRoaXMuZ2V0UHVpY3ModG9wb0VsZW1lbnRlbik7XG5cbiAgICAgICAgaWYgKHJpdGRlZWwuaXNOaWV0QmVzY2hpa2JhYXIoKSkge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChTZXRPbmdlcGxhbmRlQWN0aWVzQmVwYWFsZChmYWxzZSkpO1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuYXZpZ2VlclZhbmFmKHRoaXMucGFnaW5hdGlvblNpemUsIHRoaXMuaWF2ZXJzaWVpbmZvLCByaXRkZWVsKSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlteHZpZXdlci5mb2N1c09uSWRzKGR3YW5nUHVpY3MpO1xuICAgIH1cblxuICAgIGZvY3VzUHVpYyhwdWljczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbXh2aWV3ZXIuZm9jdXNPbklkcyhwdWljcyk7XG4gICAgfVxuXG4gICAgYWRkRGVidWdIYW5kbGVyKCkge1xuICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N2Z0NvbnRhaW5lcicpLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3ZlcicsIHRoaXMuZGVidWdFdmVudExpc3RlbmVyKCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZWJ1Z0V2ZW50TGlzdGVuZXIoKSB7XG4gICAgICAgIHJldHVybiBldmVudCA9PiB7XG4gICAgICAgICAgICBsZXQgZWxlbSA9IGV2ZW50LnRhcmdldDtcbiAgICAgICAgICAgIGxldCBpZDogc3RyaW5nID0gZWxlbS5pZDtcbiAgICAgICAgICAgIGlmICghaWQuc3RhcnRzV2l0aCgncCcpKSB7XG4gICAgICAgICAgICAgICAgZWxlbSA9IGVsZW0ucGFyZW50RWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZCA9IGVsZW0uaWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpZC5zdGFydHNXaXRoKCdwJykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0cCA9IHRoaXMuc2JtU2VydmljZS5nZXRUb3BvbG9neUVsZW1lbnRCeVB1aWMoaWQuc3Vic3RyaW5nKDEpKTtcbiAgICAgICAgICAgICAgICBpZiAodHApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qga21zOiBzYmJsYWQuS2lsb21ldHJlcmluZ1tdID0gSnNKYXZhVXRpbC5saXN0VG9BcnJheSh0cC5nZXRLaWxvbWV0cmVyaW5nZW4oKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxvZ2xpbmUgPSAnS21pbmZvOiAnICsgdHAuZ2V0Q29tcG9uZW50TmFtZSgpICsgJywgJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga20gb2Yga21zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nbGluZSArPSBrbS5nZXRLbUxpbnQoKSArICcgJyArIGttLmdldEttV2FhcmRlKCkgKyAnICc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhsb2dsaW5lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBiZXBhYWxPbmdlcGxhbmRlQWN0aWVzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5vbmdlcGxhbmRlQWN0aWVzICYmIHRoaXMudHJlaW5wYWQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQmVwYWFsT25nZXBsYW5kZUFjdGllcyh0aGlzLm9uZ2VwbGFuZGVBY3RpZXMsIHRoaXMudHJlaW5wYWQpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGJlcGFhbFNiSW5mb3MoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnRyZWlucGFkICYmIHRoaXMub25nZXBsYW5kZUFjdGllcyAmJiB0aGlzLmlhdmVyc2llaW5mbz8udmVyc2llKSB7XG4gICAgICAgICAgICBsZXQgcHBsZ3MgPSB0aGlzLmJlcGFhbFBwbGdzKHRoaXMudHJlaW5wYWQpO1xuICAgICAgICAgICAgcHBsZ3MgPSB0aGlzLmJlcGFhbFBwbGdzVWl0QWN0aWVzKHRoaXMub25nZXBsYW5kZUFjdGllcywgcHBsZ3MpO1xuICAgICAgICAgICAgaWYgKHBwbGdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxhYWRTaWduYWxlcmluZ3NiZWVsZEluZm8ocHBsZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYmVwYWFsUHBsZ3ModHJlaW5wYWQ6IFJpdCk6IEFycmF5PHN0cmluZz4ge1xuICAgICAgICBjb25zdCBwcGxncyA9IFtdO1xuICAgICAgICBpZiAodHJlaW5wYWQgJiYgdHJlaW5wYWQuYmV3ZWdpbmdlbikge1xuICAgICAgICAgICAgdHJlaW5wYWQuYmV3ZWdpbmdlbi5mb3JFYWNoKGJld2VnaW5nID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnZvZWdOaWV1d2VQcGxnVG9lKHBwbGdzLCBiZXdlZ2luZy52YW5QcGxnKTtcbiAgICAgICAgICAgICAgICB0aGlzLnZvZWdOaWV1d2VQcGxnVG9lKHBwbGdzLCBiZXdlZ2luZy5uYWFyUHBsZyk7XG4gICAgICAgICAgICAgICAgdGhpcy52b2VnTmlldXdlUHBsZ1RvZShwcGxncywgYmV3ZWdpbmcudmFuU2VpblBwbGcpO1xuICAgICAgICAgICAgICAgIHRoaXMudm9lZ05pZXV3ZVBwbGdUb2UocHBsZ3MsIGJld2VnaW5nLm5hYXJTZWluUHBsZyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHBsZ3M7XG4gICAgfVxuXG4gICAgYmVwYWFsUHBsZ3NVaXRBY3RpZXMoYWN0aWVzOiBBY3RpZVtdLCBwcGxnczogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgICAgIGFjdGllcy5mb3JFYWNoKGFjdGllID0+IHtcbiAgICAgICAgICAgIHRoaXMudm9lZ05pZXV3ZVBwbGdUb2UocHBsZ3MsIGFjdGllLnBwbGdOYWFtKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwcGxncztcbiAgICB9XG5cbiAgICBiZXdlZ2luZ0ludm9lZ2VuKHN0YXJ0U2Vpbk9wUml0ZGVlbDogU2Vpbk9wUml0ZGVlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhpZGVDb250ZXh0TWVudSgpO1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKEJld2VnaW5nSW52b2VnZW4oc3RhcnRTZWluT3BSaXRkZWVsLCB0aGlzLnB1aWNOYWFyRWluZFNlaW5Db21iaW5hdGllKSk7XG4gICAgfVxuXG4gICAgc2V0RGVidWdGbGFnKGRlYnVnOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tZWxkaW5nRW1pdHRlclNlcnZpY2Uuc2V0RGVidWcoZGVidWcpO1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFNldERlYnVnKGRlYnVnKSk7XG4gICAgfVxuXG4gICAgc2V0T3JpZ2luZWVsVHJlaW5QYWQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJpdCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy50cmVpbnBhZCkpO1xuXG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goU2V0QWxnZW1lbmVSaXRJbmZvKFxuICAgICAgICAgICAgbmV3IEFsZ2VtZW5lUml0SW5mb0R0byh7XG4gICAgICAgICAgICAgICAgaWQ6IHJpdC5pZCxcbiAgICAgICAgICAgICAgICBqYWFycGxhbklkOiByaXQuamFhcnBsYW5JZCxcbiAgICAgICAgICAgICAgICB2b2xnbnVtbWVyOiByaXQudm9sZ251bW1lcixcbiAgICAgICAgICAgICAgICBtYWNoaW5lVHlwZUlkOiByaXQubWFjaGluZVR5cGVJZCxcbiAgICAgICAgICAgICAgICBtYWNoaW5lVHlwZU9tc2NocmlqdmluZzogcml0Lm1hY2hpbmVUeXBlT21zY2hyaWp2aW5nLFxuICAgICAgICAgICAgICAgIHJpdERhdHVtOiByaXQucml0RGF0dW0sXG4gICAgICAgICAgICAgICAgc3RhcnREYXR1bTogcml0LnN0YXJ0RGF0dW0sXG4gICAgICAgICAgICAgICAgZWluZERhdHVtOiByaXQuZWluZERhdHVtLFxuICAgICAgICAgICAgICAgIHJpdE5hYW06IHJpdC5yaXROYWFtLFxuICAgICAgICAgICAgICAgIHN0YXJ0TG9jYXRpZTogcml0LnN0YXJ0TG9jYXRpZSxcbiAgICAgICAgICAgICAgICBlaW5kTG9jYXRpZTogcml0LmVpbmRMb2NhdGllLFxuICAgICAgICAgICAgICAgIHJpdFN0YXR1czogcml0LnJpdFN0YXR1cyxcbiAgICAgICAgICAgICAgICBtb2RpZmllZDogcml0Lm1vZGlmaWVkLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQnk6IHJpdC5tb2RpZmllZEJ5LFxuICAgICAgICAgICAgICAgIHBsYW5Kb2JJZDogcml0LnBsYW5Kb2JJZFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKSk7XG4gICAgICAgIHRoaXMub3JpZ2luZWVsVHJlaW5QYWQgPSByaXQ7XG4gICAgfVxuXG4gICAgZ29lZGtldXJlbkNsaWNrKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KCdyaXREZWxlbicpXVxuICAgICAgICApLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKChbcml0RGVsZW5dKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJpdERlbGVuKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnRyZWlucGFkLmFhbnRhbFJpdEFjdGllcztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVpbnBhZC5iZXdlZ2luZ2VuID0gdGhpcy5iZXdlZ2luZ1V0aWxzLnZlcndlcmtCZXdlZ2luZ2VuVm9vckV4cG9ydChyaXREZWxlbiwgdGhpcy5vcmlnaW5lZWxUcmVpblBhZC5iZXdlZ2luZ2VuKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nb2VkZ2VrZXVyZC5lbWl0KHRoaXMudHJlaW5wYWQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldE9yaWdpbmVlbFRyZWluUGFkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApKTtcbiAgICB9XG5cbiAgICBoYW5kbGVJbXh2aWV3Q2xpY2soZXZ0OiBTZWxlY3RpZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHB1aWMgPSBldnQuaWQ7XG4gICAgICAgIGNvbnN0IGFsdGVybmF0aWV2ZVJpdERlZWwgPSB0aGlzLnB1aWNOYWFyQWx0ZXJuYXRpZXZlUm91dGUuZ2V0KHB1aWMpO1xuICAgICAgICBpZiAoYWx0ZXJuYXRpZXZlUml0RGVlbCkge1xuICAgICAgICAgICAgYWx0ZXJuYXRpZXZlUml0RGVlbC5yaXREZWVsLmFjdGllcy5mb3JFYWNoKGFjdGllID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwdWljcyA9IHRoaXMuYWN0aWVIZWxwZXIuYmVwYWFsUHVpY3NWb29yQWN0aWUoYWN0aWUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHB1aWNzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChBZGRPbmdlcGxhbmRlQWN0aWUobmV3IE9uZ2VwbGFuZGVBY3RpZShhY3RpZSwgcHVpY3MpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goc2V0QWx0ZXJuYXRpZXZlUml0RGVsZW4oYWx0ZXJuYXRpZXZlUml0RGVlbCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbWJpbmF0aWUgPSB0aGlzLnB1aWNOYWFyRWluZFNlaW5Db21iaW5hdGllLmdldChwdWljKTtcbiAgICAgICAgaWYgKGNvbWJpbmF0aWUpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goU2V0TmlldXdSb3V0ZUVpbmRTZWluKGNvbWJpbmF0aWUpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJpdGRlbGVubGlqc3QuZGVzZWxlY3RSaXRkZWVsKCk7XG4gICAgfVxuXG4gICAgaGFuZGxlSW14dmlld1JpZ2h0Q2xpY2soZXZ0OiBTZWxlY3RpZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZuID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRTZWluT3BSaXRkZWVsID0gdGhpcy5wdWljTmFhckJlZ2luU2VpblJpdGRlZWwuZ2V0KGV2dC5pZCk7XG4gICAgICAgICAgICBpZiAoc3RhcnRTZWluT3BSaXRkZWVsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5iZXdlZ2luZ0ludm9lZ2VuKHN0YXJ0U2Vpbk9wUml0ZGVlbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuY29udGV4dE1lbnVBY3Rpb25zID0gW107XG4gICAgICAgIHRoaXMuY29udGV4dE1lbnVBY3Rpb25zLnB1c2goeyBsYWJlbDogJ2Jld2VnaW5nIGludm9lZ2VuJywgY2xpY2s6IGZuIH0pO1xuICAgICAgICB0aGlzLmNvbnRleHRNZW51U3R5bGUgPSB7XG4gICAgICAgICAgICBsZWZ0OiAoZXZ0LmV2ZW50Lm9mZnNldFggLSA1KSArICdweCcsXG4gICAgICAgICAgICB0b3A6IChldnQuZXZlbnQub2Zmc2V0WSAtIDUpICsgJ3B4JyxcbiAgICAgICAgICAgIGRpc3BsYXk6ICdpbmxpbmUnLFxuICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZSdcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBoaWRlQ29udGV4dE1lbnUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29udGV4dE1lbnVTdHlsZSA9IHtcbiAgICAgICAgICAgIGRpc3BsYXk6ICdub25lJyxcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAga2FuTGlua3NOYXZpZ2VyZW4ocml0RGVsZW46IFJpdGRlZWxbXSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gcml0RGVsZW4ubGVuZ3RoID4gdGhpcy5wYWdpbmF0aW9uU2l6ZSAmJiAhcml0RGVsZW5bMF0uaXNCaW5uZW5XaW5kb3coKTtcbiAgICB9XG5cbiAgICBrYW5SZWNodHNOYXZpZ2VyZW4ocml0RGVsZW46IFJpdGRlZWxbXSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gcml0RGVsZW4ubGVuZ3RoID4gdGhpcy5wYWdpbmF0aW9uU2l6ZSAmJiAhcml0RGVsZW5bcml0RGVsZW4ubGVuZ3RoIC0gMV0uaXNCaW5uZW5XaW5kb3coKTtcbiAgICB9XG5cbiAgICBuYXZpZ2Vlck5hYXJMaW5rcyhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5hdmlnZWVyKGV2ZW50ICYmIGV2ZW50LmN0cmxLZXkgPyAtMSA6IC0odGhpcy5wYWdpbmF0aW9uU2l6ZSAtIDEpLCB0aGlzLnBhZ2luYXRpb25TaXplLCB0aGlzLmlhdmVyc2llaW5mbykpO1xuICAgIH1cblxuICAgIG5hdmlnZWVyTmFhclJlY2h0cyhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5hdmlnZWVyKGV2ZW50ICYmIGV2ZW50LmN0cmxLZXkgPyAxIDogdGhpcy5wYWdpbmF0aW9uU2l6ZSAtIDEsIHRoaXMucGFnaW5hdGlvblNpemUsIHRoaXMuaWF2ZXJzaWVpbmZvKSk7XG4gICAgfVxuXG4gICAgcmVzb2x2ZUJ1c3lQcm9taXNlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5idXN5UHJvbWlzZVJlc29sdmUpIHtcbiAgICAgICAgICAgIHRoaXMuYnVzeVByb21pc2VSZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0b2dnbGVTaWRlTmF2VmlzaWJsZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc0FjdGl2ZSA9ICF0aGlzLmlzQWN0aXZlO1xuICAgIH1cblxuICAgIHNob3dHb2Vka2V1cmVuKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0YWJsZSAmJiB0aGlzLnNlbGVjdGllSW5mb3MubGVuZ3RoICE9PSAwO1xuICAgIH1cblxuICAgIHByaXZhdGUgYmVwYWFsQ29udGV4dE1lbnVWb29yQmVnaW5TZWluZW4ocml0RGVsZW46IFJpdGRlZWxbXSk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc2JtU2VydmljZS5pc1JlYWR5KCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBpZHMgPSBbXTtcbiAgICAgICAgcml0RGVsZW4uZmlsdGVyKHJpdERlZWwgPT4gcml0RGVlbC5pc1ppY2h0YmFhcigpKS5mb3JFYWNoKHJpdERlZWwgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHVpY3MgPSByaXREZWVsLmdldFNlaW5lbigpLmZsYXRNYXAoc2VpbiA9PiB0aGlzLnZlcnphbWVsQmVnaW5TZWluSW5mb3JtYXRpZShzZWluLCByaXREZWVsKSk7XG4gICAgICAgICAgICBpZHMgPSBpZHMuY29uY2F0KHB1aWNzKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChTZXRCZWdpblNlaW5SaWdodENsaWNrYWJsZUlkcyhpZHMpKTtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChTZXRCZWdpblNlaW5TZWxlY3RpZUlkcyhbXSkpO1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFNldEVpbmRTZWluU2VsZWN0aWVJZHMoW10pKTtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChTZXRFaW5kU2VpbmVuQ2xpY2thYmxlSWRzKFtdKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2ZXJ6YW1lbEJlZ2luU2VpbkluZm9ybWF0aWUoc2VpbjogZG9tZWluLlNlaW4sIHJpdERlZWw6IFJpdGRlZWwpOiBzdHJpbmdbXSB7XG4gICAgICAgIGNvbnN0IHB1aWNzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBjb25zdCBzYlNlaW4gPSB0aGlzLnNibVNlcnZpY2UuZ2V0U0JTZWluKHNlaW4pO1xuICAgICAgICBpZiAoc2JTZWluKSB7XG4gICAgICAgICAgICBjb25zdCBwdWljID0gc2JTZWluLmdldFB1aWMoKTtcbiAgICAgICAgICAgIHB1aWNzLnB1c2gocHVpYyk7XG4gICAgICAgICAgICB0aGlzLnB1aWNOYWFyQmVnaW5TZWluUml0ZGVlbC5zZXQocHVpYywgbmV3IFNlaW5PcFJpdGRlZWwoc2Vpbiwgcml0RGVlbCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFsdFNiU2VpbiA9IHRoaXMuc2JtU2VydmljZS5nZXRUZWNobmlzY2hBbHRlcm5hdGllZlNCU2VpbihzYlNlaW4pO1xuICAgICAgICBpZiAoYWx0U2JTZWluKSB7XG4gICAgICAgICAgICBjb25zdCBwdWljID0gYWx0U2JTZWluLmdldFB1aWMoKTtcbiAgICAgICAgICAgIHB1aWNzLnB1c2gocHVpYyk7XG4gICAgICAgICAgICBjb25zdCByd3AgPSB0aGlzLmVkaXRvclNlcnZpY2UuZ2V0Umlqd2VncGxhbihhbHRTYlNlaW4uZ2V0UFBMRygpKTtcbiAgICAgICAgICAgIGNvbnN0IGRvbWVpblNlaW4gPSByd3AuZ2V0QmVnaW5TZWluKGFsdFNiU2Vpbi5nZXROYW1lKCkpO1xuICAgICAgICAgICAgLy8gc2VpbiBrYW4gbmlldCBhbHRpamQgZ2V2b25kZW4gd29yZGVuIG9tZGF0IGVyIG5pZXQgYWx0aWpkIGVlbiByaWp3ZWcgdmFuYWYgZGl0IHNlaW4gaXMsIGJpanYgYmlqIHZlZXJ3aXNzZWwuXG4gICAgICAgICAgICBpZiAoZG9tZWluU2Vpbikge1xuICAgICAgICAgICAgICAgIHRoaXMucHVpY05hYXJCZWdpblNlaW5SaXRkZWVsLnNldChwdWljLCBuZXcgU2Vpbk9wUml0ZGVlbChkb21laW5TZWluLCByaXREZWVsKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHB1aWNzO1xuICAgIH1cblxuICAgIHByaXZhdGUgYmVwYWFsUm91dGVIaWdobGlnaHRzKHJpdERlbGVuOiBSaXRkZWVsW10pOiB2b2lkIHtcbiAgICAgICAgbGV0IHJpdFNlbGVjdGllUHVpY3MgPSBbXTtcbiAgICAgICAgY29uc3QgYWN0aWVPcFJpdFNlbGVjdGllUHVpY3MgPSBuZXcgQXJyYXlNdWx0aW1hcDxBY3RpZSwgc3RyaW5nPigpO1xuICAgICAgICBsZXQgZ2Vicm9rZW5SaXRTZWxlY3RpZVB1aWNzID0gW107XG4gICAgICAgIGNvbnN0IGFsdGVybmF0aWV2ZVJvdXRlUHVpY3MgPSBbXTtcbiAgICAgICAgY29uc3QgY2xpY2thYmxlSWRzID0gW107XG4gICAgICAgIGxldCBsYWF0c3RlTmFhclNwb29yO1xuICAgICAgICBjb25zdCBiZXN0YWF0VWl0MVJpdGRlZWwgPSByaXREZWxlbi5sZW5ndGggPT09IDE7XG4gICAgICAgIGxldCBnZWJyb2tlblJpdCA9IGZhbHNlO1xuICAgICAgICByaXREZWxlbi5mb3JFYWNoKHJpdERlZWwgPT4ge1xuICAgICAgICAgICAgaWYgKHJpdERlZWwuaXNaaWNodGJhYXIoKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hcDogQXJyYXlNdWx0aW1hcDxBY3RpZSwgc3RyaW5nPiA9IHRoaXMuYWN0aWVIZWxwZXIuYmVwYWFsQWN0aWVQdWljc1VpdFJpdGRlZWwocml0RGVlbCk7XG4gICAgICAgICAgICAgICAgbWFwLmtleXMoKS5mb3JFYWNoKGtleSA9PiBhY3RpZU9wUml0U2VsZWN0aWVQdWljcy5wdXRBbGwoa2V5LCBtYXAuZ2V0KGtleSkpKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGlzR2Vicm9rZW5SaXRkZWVsID0gIWJlc3RhYXRVaXQxUml0ZGVlbCAmJiB0aGlzLmlzR2Vicm9rZW5SaXRkZWVsKHJpdERlZWwsIGxhYXRzdGVOYWFyU3Bvb3IpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGR3YW5nUHVpY3MgPSB0aGlzLmdldFB1aWNzKHJpdERlZWwuZ2V0VG9wb2xvZ2llRWxlbWVudGVuKCkpO1xuICAgICAgICAgICAgICAgIGlmIChkd2FuZ1B1aWNzICYmIGlzR2Vicm9rZW5SaXRkZWVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGdlYnJva2VuUml0U2VsZWN0aWVQdWljcyA9IGdlYnJva2VuUml0U2VsZWN0aWVQdWljcy5jb25jYXQoZHdhbmdQdWljcyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkd2FuZ1B1aWNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJpdFNlbGVjdGllUHVpY3MgPSByaXRTZWxlY3RpZVB1aWNzLmNvbmNhdChkd2FuZ1B1aWNzKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmJlcGFhbEFsdGVybmF0aXZlbihyaXREZWVsLCBjbGlja2FibGVJZHMsIGFsdGVybmF0aWV2ZVJvdXRlUHVpY3MpO1xuXG4gICAgICAgICAgICAgICAgZ2Vicm9rZW5SaXQgPSBnZWJyb2tlblJpdCA/IGdlYnJva2VuUml0IDogaXNHZWJyb2tlblJpdGRlZWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYWF0c3RlTmFhclNwb29yID0gcml0RGVlbC5nZXRWaXN1ZWVsTmFhclBybFNwb29yKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudmFsaWRlUml0ID0gIWdlYnJva2VuUml0O1xuXG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goU2V0R2VwbGFuZGVBY3RpZXMoYWN0aWVPcFJpdFNlbGVjdGllUHVpY3MpKTtcbiAgICAgICAgY29uc3QgYWN0aWVPcFJpdFNlbGVjdGllUHVpY3NBcnJheSA9IFV0aWxzLmZsYXRNYXAoQXJyYXkuZnJvbShhY3RpZU9wUml0U2VsZWN0aWVQdWljcy52YWx1ZXMoKSksIHggPT4geCk7XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goU2V0QWN0aWVPcFJpdFNlbGVjdGllSWRzKGFjdGllT3BSaXRTZWxlY3RpZVB1aWNzQXJyYXkpKTtcbiAgICAgICAgcml0U2VsZWN0aWVQdWljcyA9IHJpdFNlbGVjdGllUHVpY3MuZmlsdGVyKGl0ZW0gPT4gYWN0aWVPcFJpdFNlbGVjdGllUHVpY3NBcnJheS5pbmRleE9mKGl0ZW0pIDwgMCk7IC8vIG1ha2UgbXV0dWFsbHkgZXhjbHVzaXZlXG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goU2V0Uml0U2VsZWN0aWVJZHMocml0U2VsZWN0aWVQdWljcykpO1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFNldEdlYnJva2VuUml0U2VsZWN0aWVJZHMoZ2Vicm9rZW5SaXRTZWxlY3RpZVB1aWNzKSk7XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goU2V0QWx0ZXJuYXRpZXZlbkNsaWNrYWJsZUlkcyh0aGlzLmVkaXRhYmxlID8gY2xpY2thYmxlSWRzIDogW10pKTtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChTZXRBbHRlcm5hdGlldmVuU2VsZWN0aWVJZHModGhpcy5lZGl0YWJsZSA/IGFsdGVybmF0aWV2ZVJvdXRlUHVpY3MgOiBbXSkpO1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENsZWFyUHJvZ3Jlc3MoKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiZXBhYWxBbHRlcm5hdGl2ZW4ocml0RGVlbDogUml0ZGVlbCwgY2xpY2thYmxlSWRzOiBzdHJpbmdbXSwgYWx0ZXJuYXRpZXZlUm91dGVQdWljczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgcml0RGVlbC5nZXRBbHRlcm5hdGlldmVSb3V0ZXMoKT8uZm9yRWFjaChhbHRlcm5hdGlldmVSb3V0ZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhbHRlcm5hdGlldmVUb3BvRWxlbWVudGVuID1cbiAgICAgICAgICAgICAgICB0aGlzLnNibVNlcnZpY2UuYmVwYWFsQWx0ZXJuYXRpdmVSb3V0ZUhpZ2hsaWdodHMoYWx0ZXJuYXRpZXZlUm91dGUsIHJpdERlZWwuZ2V0VG9wb2xvZ2llRWxlbWVudGVuKCkpO1xuXG4gICAgICAgICAgICBjb25zdCBhbHRQdWljcyA9IHRoaXMuZ2V0UHVpY3MoYWx0ZXJuYXRpZXZlVG9wb0VsZW1lbnRlbik7XG4gICAgICAgICAgICBpZiAoYWx0UHVpY3MpIHtcbiAgICAgICAgICAgICAgICBjbGlja2FibGVJZHMucHVzaCguLi5hbHRQdWljcyk7XG4gICAgICAgICAgICAgICAgYWx0UHVpY3MuZm9yRWFjaChwdWljID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wdWljTmFhckFsdGVybmF0aWV2ZVJvdXRlLnNldChwdWljLCBuZXcgQWx0ZXJuYXRpZWZSaXREZWVsKHJpdERlZWwsIGFsdGVybmF0aWV2ZVJvdXRlKSk7XG4gICAgICAgICAgICAgICAgICAgIGFsdGVybmF0aWV2ZVJvdXRlUHVpY3MucHVzaChwdWljKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVQcm9taXNlUmVzb2x2ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5idXN5ID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYnVzeVByb21pc2VSZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVTaWduYWxlcmluZ3NiZWVsZEluZm9RdWVyeUR0byhwcGxnczogc3RyaW5nW10sIGlhaW5mbzogSW5mcmFNb2RlbCkge1xuICAgICAgICBjb25zdCBkYXR1bSA9IGlhaW5mby5pbmdhbmdzRGF0dW0gJiYgIWlzTmFOKGlhaW5mby5pbmdhbmdzRGF0dW0uZ2V0VGltZSgpKSA/IGlhaW5mby5pbmdhbmdzRGF0dW0udG9JU09TdHJpbmcoKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHsgcHBsZ3MsIHZlcnNpZTogaWFpbmZvLnZlcnNpZSwgaW5nYW5nc0RhdHVtOiBkYXR1bSB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZm9jdXNPcEJld2VnaW5nKHJpdGRlZWw6IFJpdGRlZWwsIHJlc29sdmU6IEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgICAgIC8vIGRlc2VsZWN0ZWVyIGFsbGVzXG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goc2V0WmljaHRiYWFyaGVpZEFsbGVSaXRkZWxlbihmYWxzZSkpO1xuICAgICAgICAvLyBlbmFibGUgcml0YWN0aWVzIChjaGVja2JveCkgdm9vciBhbGxlIHJpdGRlbGVuIG1ldCBiZXdlZ2luZyBkaWUgbWF0Y2hlZCBtZXQgYmV3ZWdpbmdJZChzKVxuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKHRvZ2dsZVppY2h0YmFhcmhlaWRWb29yQmV3ZWdpbmdlbihbcGFyc2VJbnQocml0ZGVlbC5nZXRCZXdlZ2luZ0lkKCksIDEwKV0pKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RpZUluZm9zKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBzZWxlY3RpZUluZm8gb2YgdGhpcy5zZWxlY3RpZUluZm9zKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RpZUluZm8uY2xhenogPT09ICdyaXQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGRpdCBuZWVtIG5pZXQgZGUgdnJpamViYWFuIGVsZW1lbnRlbiBtZWVcbiAgICAgICAgICAgICAgICBjb25zdCB0b3BvRWxlbWVudGVuID0gdGhpcy5zYm1TZXJ2aWNlLmJlcGFhbFJvdXRlRWxlbWVudGVuKHJpdGRlZWwuZ2V0Um91dGUoKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZHdhbmdQdWljcyA9IHRoaXMuZ2V0UHVpY3ModG9wb0VsZW1lbnRlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5pbXh2aWV3ZXIuZm9jdXNPbklkcyhkd2FuZ1B1aWNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIHJlc29sdmUgZGUgcHJvbWlzZSwgb20gYWFuIHRlIGdldmVuIGRhdCBmb2N1cyBrbGFhciBpc1xuICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChDbGVhclByb2dyZXNzKCkpO1xuICAgICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UHVpY3ModG9wb0VsZW1lbnRlbjogc2JibGFkLkhhc0lkZW50aWZpZXJbXSk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRvcG9FbGVtZW50ZW4ubWFwKGUgPT4gZS5nZXRQdWljKCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNHZWJyb2tlblJpdGRlZWwocml0RGVlbCwgbGFhdHN0ZU5hYXJTcG9vcik6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBpc0dlYnJva2VuUml0ZGVlbCA9ICEoIWxhYXRzdGVOYWFyU3Bvb3IgfHwgcml0RGVlbC5nZXRWYW5QcmxTcG9vcigpID09PSBsYWF0c3RlTmFhclNwb29yKTtcbiAgICAgICAgaWYgKGlzR2Vicm9rZW5SaXRkZWVsKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnUml0IHZhbiAnICsgcml0RGVlbC5nZXRWYW5QcmxTcG9vcigpICsgJyBuYWFyICcgKyByaXREZWVsLmdldE5hYXJQcmxTcG9vcigpXG4gICAgICAgICAgICAgICAgKyAnIGluIHBwbGcgJyArIHJpdERlZWwuZ2V0UHBsZygpICsgJyBzbHVpdCBuaWV0IGFhbiBvcCB2b3JpZ2UgYmV3ZWdpbmcuJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzR2Vicm9rZW5SaXRkZWVsO1xuICAgIH1cblxuICAgIHByaXZhdGUgbGFhZFNpZ25hbGVyaW5nc2JlZWxkSW5mbyhwcGxnczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb2JzID0gdGhpcy5zYmlSZXNvdXJjZS5nZXRCZXN0YWF0SUFMZXZlcmluZyh7IHZlcnNpZTogdGhpcy5pYXZlcnNpZWluZm8udmVyc2llIH0pO1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFNob3dQcm9ncmVzcygpKTtcbiAgICAgICAgb2JzLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgICB0aGlzLmxhYWRFblZlcndlcmtTaWduYWxlcmluZ3NiZWVsZEluZm8ocHBsZ3MpO1xuICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgdGhpcy5tZWxkaW5nZW4uZW1pdChuZXcgTWVsZGluZ0V2ZW50KFV0aWxzLmdldFZhbGlkRXJvcnJNZXNzYWdlKGVyciksICdpbmZvJykpO1xuICAgICAgICAgICAgdGhpcy5pYXZlcnNpZWluZm8gPSB7IHZlcnNpZTogJ0RPTk5BXzc3MTM2X1ZFUl8xJywgaW5nYW5nc0RhdHVtOiBuZXcgRGF0ZSgpIH07XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFNldElhVmVyc2llKHRoaXMuaWF2ZXJzaWVpbmZvKSk7XG4gICAgICAgICAgICB0aGlzLmxhYWRFblZlcndlcmtTaWduYWxlcmluZ3NiZWVsZEluZm8ocHBsZ3MpO1xuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIHByaXZhdGUgbGFhZEVuVmVyd2Vya1NpZ25hbGVyaW5nc2JlZWxkSW5mbyhwcGxnczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0lBIHZlcnNpZTogJyArIHRoaXMuaWF2ZXJzaWVpbmZvLnZlcnNpZSk7XG4gICAgICAgIGNvbnN0IG9icyA9IHRoaXMuc2JpUmVzb3VyY2UubGFhZFNpZ25hbGVyaW5nc2JlZWxkSW5mbyh0aGlzLmNyZWF0ZVNpZ25hbGVyaW5nc2JlZWxkSW5mb1F1ZXJ5RHRvKHBwbGdzLCB0aGlzLmlhdmVyc2llaW5mbykpO1xuICAgICAgICBvYnMucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWRkRGVidWdIYW5kbGVyKCk7XG4gICAgICAgICAgICBjb25zdCBkdG9zOiBJU2lnbmFsZXJpbmdzYmVlbGRJbmZvRHRvW10gPSByZXM7XG4gICAgICAgICAgICBpZiAoZHRvcyAmJiBkdG9zLmZpbHRlcihkdG8gPT4gZHRvLm1ldFZpc3VhbGlzYXRpZSkubGVuZ3RoID4gMTIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1lbGRpbmdlbi5lbWl0KE1lbGRpbmdCdWlsZGVyLm1lZXJEYW4xMkJsYWRlbkdldm9uZGVuKGR0b3MubGVuZ3RoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFNldFNpZ25hbGVyaW5nc2JlZWxkSW5mb0R0b3MoZHRvcywgdGhpcy5pYXZlcnNpZWluZm8sIHRoaXMudHJlaW5wYWQsIHRoaXMucGFnaW5hdGlvblNpemUpKTtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goU2V0VmlzaWJsZVNpZ25hbGVyaW5nc2JlZWxkSW5mb0R0b3MoZHRvcykpO1xuICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgdGhpcy5tZWxkaW5nZW4uZW1pdChNZWxkaW5nQnVpbGRlci5uaWV0R2V2b25kZW5TQkkoZXJyKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlTmlldXdlUm91dGVUb2VnZXZvZWdkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0b3JlLnNlbGVjdCgnbmlldXdlUm91dGUnKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobmlldXdlUm91dGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5pZXV3ZVJvdXRlLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChSZXNldE5pZXV3ZVJvdXRlKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChyaXRkZWVsSW52b2VnZW4obmlldXdlUm91dGUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvblJpdGRlbGVuVXBkYXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnN0b3JlLnNlbGVjdCgncml0RGVsZW4nKS5zdWJzY3JpYmUocml0RGVsZW4gPT4ge1xuICAgICAgICAgICAgaWYgKHJpdERlbGVuICYmIHJpdERlbGVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmthbkxpbmtzID0gdGhpcy5rYW5MaW5rc05hdmlnZXJlbihyaXREZWxlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5rYW5SZWNodHMgPSB0aGlzLmthblJlY2h0c05hdmlnZXJlbihyaXREZWxlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5iZXBhYWxSb3V0ZUhpZ2hsaWdodHMocml0RGVsZW4pO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmVkaXRhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYmVwYWFsQ29udGV4dE1lbnVWb29yQmVnaW5TZWluZW4ocml0RGVsZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMub25nZXBsYW5kZUFjdGllc0JlcGFhbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iZXBhYWxPbmdlcGxhbmRlQWN0aWVzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJpbnRGb2N1c0Jld2VnaW5nKGJld2VnaW5nSWQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICBjb25zdCB0ZW1wUml0RGVsZW4gPSBbXTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5zdG9yZS5zZWxlY3QoJ3JpdERlbGVuJykucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUocml0RGVsZW4gPT4gdGVtcFJpdERlbGVuLnB1c2goLi4ucml0RGVsZW4pKSk7XG4gICAgICAgIGNvbnN0IGdldm9uZGVuUml0ZGVlbDogUml0ZGVlbFtdID0gdGVtcFJpdERlbGVuLmZpbHRlcihyID0+IHBhcnNlSW50KHIuZ2V0QmV3ZWdpbmdJZCgpLCAxMCkgPT09IGJld2VnaW5nSWQpO1xuXG4gICAgICAgIC8vIGhpZGUvc2hvdyBkZSBrbm9wcGVuXG4gICAgICAgIHRoaXMucHJpbnRpbmcgPSAhIWJld2VnaW5nSWQgJiYgZ2V2b25kZW5SaXRkZWVsLmxlbmd0aCA9PT0gMTtcblxuICAgICAgICBpZiAoIXRoaXMucHJpbnRpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgnR2VlbiBiZXdlZ2luZyBnZXZvbmRlbiB2b29yICcgKyBiZXdlZ2luZ0lkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxib29sZWFuPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgcml0ZGVlbCA9IGdldm9uZGVuUml0ZGVlbFswXTtcbiAgICAgICAgICAgIGlmIChyaXRkZWVsLmlzTmlldEJlc2NoaWtiYWFyKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5hdmlnZWVyVmFuYWYodGhpcy5wYWdpbmF0aW9uU2l6ZSwgdGhpcy5pYXZlcnNpZWluZm8sIHJpdGRlZWwpKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFNob3dQcm9ncmVzcygpKTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c09wQmV3ZWdpbmcocml0ZGVlbCwgcmVzb2x2ZSk7XG4gICAgICAgICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNPcEJld2VnaW5nKHJpdGRlZWwsIHJlc29sdmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwVHJpZ2dlclBvcG92ZXJCZXBhbGluZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICB0aGlzLnN0b3JlLnNlbGVjdCgncml0RGVsZW4nKSxcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KCdvbmdlcGxhbmRlQWN0aWVzJyksXG4gICAgICAgICAgICB0aGlzLnN0b3JlLnNlbGVjdCgnZ2VwbGFuZGVBY3RpZXMnKV1cbiAgICAgICAgKS5zdWJzY3JpYmUoKFtyaXRkZWxlbiwgb25nZXBsYW5kZUFjdGllcywgZ2VwbGFuZGVBY3RpZXNdKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJpdGRlbGVuICYmIHJpdGRlbGVuLmxlbmd0aCA+IDAgJiYgZ2VwbGFuZGVBY3RpZXMgJiYgb25nZXBsYW5kZUFjdGllcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcG92ZXJJbmZvcyA9IEFjdGllUG9wb3ZlckJlcGFsZXIuYmVwYWFsUG9wb3ZlckluZm9zKHJpdGRlbGVuLCBnZXBsYW5kZUFjdGllcywgb25nZXBsYW5kZUFjdGllcywgdGhpcy5zYm1TZXJ2aWNlLmdldEFsbGVTb29ydGVuV2lzc2VscygpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdHJpZ2dlckNsaWNrYWJsZUlkQmVwYWxpbmcoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoJ2FsdGVybmF0aWV2ZW5DbGlja2FibGVJZHMnKSxcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KCdlaW5kU2VpbmVuQ2xpY2thYmxlSWRzJyldXG4gICAgICAgICkuc3Vic2NyaWJlKChbYWx0ZXJuYXRpZXZlbkNsaWNrYWJsZUlkcywgZWluZFNlaW5lbkNsaWNrYWJsZUlkc10pID0+XG4gICAgICAgICAgICB0aGlzLmNsaWNrYWJsZUlkcyA9IFsuLi5hbHRlcm5hdGlldmVuQ2xpY2thYmxlSWRzLCAuLi5laW5kU2VpbmVuQ2xpY2thYmxlSWRzXSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdHJpZ2dlclJpZ2h0Q2xpY2thYmxlSWRCZXBhbGluZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goY29tYmluZUxhdGVzdChbdGhpcy5zdG9yZS5zZWxlY3QoJ2JlZ2luU2VpblJpZ2h0Q2xpY2thYmxlSWRzJyldXG4gICAgICAgICkuc3Vic2NyaWJlKChbYmVnaW5TZWluUmlnaHRDbGlja2FibGVJZHNdKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaWRzID0gW107XG4gICAgICAgICAgICAgICAgaWRzLnB1c2goLi4uYmVnaW5TZWluUmlnaHRDbGlja2FibGVJZHMpO1xuICAgICAgICAgICAgICAgIHRoaXMucmlnaHRDbGlja2FibGVJZHMgPSBpZHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdHJpZ2dlclNlbGVjdGllSW5mb0JlcGFsaW5nKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KCdyaXRTZWxlY3RpZUlkcycpLFxuICAgICAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoJ2FjdGllT3BSaXRTZWxlY3RpZUlkcycpLFxuICAgICAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoJ29uZ2VwbGFuZGVBY3RpZVNlbGVjdGllSWRzJyksXG4gICAgICAgICAgICB0aGlzLnN0b3JlLnNlbGVjdCgnZ2Vicm9rZW5SaXRTZWxlY3RpZUlkcycpLFxuICAgICAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoJ2FsdGVybmF0aWV2ZW5TZWxlY3RpZUlkcycpLFxuICAgICAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoJ2JlZ2luU2VpblNlbGVjdGllSWRzJyksXG4gICAgICAgICAgICB0aGlzLnN0b3JlLnNlbGVjdCgnZWluZFNlaW5TZWxlY3RpZUlkcycpXVxuICAgICAgICApLnN1YnNjcmliZSgoW3JpdCwgYWN0aWVPcFJpdFNlbGVjdGllSWRzLCBvbmdlcGxhbmRlQWN0aWVTZWxlY3RpZUlkcywgZ2Vicm9rZW5yaXQsIGFsdGVybmF0aWV2ZW4sIGJlZ2luLCBlaW5kXSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGllID0gW107XG4gICAgICAgICAgICAgICAgc2VsZWN0aWUucHVzaChuZXcgU2VsZWN0aWVJbmZvKHJpdCwgJ3JpdCcpKTtcbiAgICAgICAgICAgICAgICBzZWxlY3RpZS5wdXNoKG5ldyBTZWxlY3RpZUluZm8oYWN0aWVPcFJpdFNlbGVjdGllSWRzLCAnYWN0aWVvcHJpdCcpKTtcbiAgICAgICAgICAgICAgICBzZWxlY3RpZS5wdXNoKG5ldyBTZWxlY3RpZUluZm8ob25nZXBsYW5kZUFjdGllU2VsZWN0aWVJZHMsICdvbmdlcGxhbmRlQWN0aWUnKSk7XG4gICAgICAgICAgICAgICAgc2VsZWN0aWUucHVzaChuZXcgU2VsZWN0aWVJbmZvKGdlYnJva2Vucml0LCAnZ2Vicm9rZW5yaXQnKSk7XG4gICAgICAgICAgICAgICAgc2VsZWN0aWUucHVzaChuZXcgU2VsZWN0aWVJbmZvKGFsdGVybmF0aWV2ZW4sICdhbHRlcm5hdGlldmVSb3V0ZScpKTtcbiAgICAgICAgICAgICAgICBzZWxlY3RpZS5wdXNoKG5ldyBTZWxlY3RpZUluZm8oYmVnaW4sICd6aWd6YWdWYW4nKSk7XG4gICAgICAgICAgICAgICAgc2VsZWN0aWUucHVzaChuZXcgU2VsZWN0aWVJbmZvKGVpbmQsICd6aWd6YWdOYWFyJykpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aWVJbmZvcyA9IHNlbGVjdGllO1xuICAgICAgICAgICAgfVxuICAgICAgICApKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZvZWdOaWV1d2VQcGxnVG9lKHBwbGdzOiBBcnJheTxzdHJpbmc+LCBwcGxnOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHBwbGcgJiYgcHBsZ3MuaW5kZXhPZihwcGxnKSA8IDApIHtcbiAgICAgICAgICAgIHBwbGdzLnB1c2gocHBsZyk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8bG94aWEtb3ZlcmxheSAqbmdJZj1cIihwcm9ncmVzc0luZGljYXRvciQgfCBhc3luYylcIj5cbiAgICA8bG94aWEtcHJvZ3Jlc3MtaW5kaWNhdG9yIGlkPVwicHJvZ3Jlc3MtaW5kaWNhdG9yXCIgW2JvcmRlcl09XCJmYWxzZVwiIHVwcGVyVGV4dD1cIlwiPlxuICAgIDwvbG94aWEtcHJvZ3Jlc3MtaW5kaWNhdG9yPlxuPC9sb3hpYS1vdmVybGF5PlxuPGRpdiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZVwiPlxuICAgIDxycGUtY29tcG9uZW50IFtiYXNldXJsXT1cImJhc2V1cmxcIiBwYXRoPVwiL21zdC9lZGl0b3IvZWRpdG9yLm5vY2FjaGUuanNcIj48L3JwZS1jb21wb25lbnQ+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCIgc3R5bGU9XCJ3aWR0aDoxMDAlO21hcmdpbi10b3A6MTBweDtwb3NpdGlvbjphYnNvbHV0ZTtcIj5cbiAgICAgICAgPGJ1dHRvbiBbY2xhc3MuYWN0aXZlXT1cImlzQWN0aXZlXCIgaWQ9XCJ0b29uU2lkZU5hdktub3BcIiAoY2xpY2spPVwidG9nZ2xlU2lkZU5hdlZpc2libGUoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCIgW2hpZGRlbl09XCJwcmludGluZ1wiPlJpdGRldGFpbHNcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJzaG93R29lZGtldXJlbigpXCIgaWQ9XCJnb2Vka2V1cmVuS25vcFwiIChjbGljayk9XCJnb2Vka2V1cmVuQ2xpY2soKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXZhbGlkZVJpdFwiIFtoaWRkZW5dPVwicHJpbnRpbmdcIj5Hb2Vka2V1cmVuXG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPGlteC12aWV3ZXIgW3VzZUNsaWNrQXJlYV09XCJ1c2VDbGlja0FyZWFcIiAjaW14dmlld2VyY29udGFpbmVyIFtzdmdJbmZvXT1cInN2Z0luZm9zXCIgW3NlbGVjdGllSW5mb3NdPVwic2VsZWN0aWVJbmZvc1wiXG4gICAgICAgICAgICAgICAgW2NsaWNrYWJsZUlkc109XCJjbGlja2FibGVJZHNcIiBbcmlnaHRDbGlja2FibGVJZHNdPVwicmlnaHRDbGlja2FibGVJZHNcIlxuICAgICAgICAgICAgICAgIChjbGlja0hhbmRsZXIpPVwiaGFuZGxlSW14dmlld0NsaWNrKCRldmVudClcIiAocmlnaHRDbGlja0hhbmRsZXIpPVwiaGFuZGxlSW14dmlld1JpZ2h0Q2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW3BvcG92ZXJJbmZvc109XCJwb3BvdmVySW5mb3NcIiBbaW5saW5lRGduQ3NzSW1wb3J0XT1cImZhbHNlXCI+PC9pbXgtdmlld2VyPlxuXG4gICAgPG5hdiBbY2xhc3MuYWN0aXZlXT1cIiFpc0FjdGl2ZVwiIGlkPVwic2lkZWJhclwiPlxuICAgICAgICA8ZGl2IGlkPVwiZGlzbWlzc1wiPlxuICAgICAgICAgICAgPGVtIGlkPVwidmVyYmVyZ1NpZGVOYXZcIiBjbGFzcz1cImZhIGZhLWFycm93LWxlZnRcIiAoY2xpY2spPVwidG9nZ2xlU2lkZU5hdlZpc2libGUoKVwiPiZ0aW1lczs8L2VtPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHJpdGRlbGVuLWxpanN0ICpuZ0lmPVwiIXZpZXdlclwiIChmb2N1c0VtaXR0ZXIpPVwiZm9jdXNSaXRkZWVsKCRldmVudClcIiAjcml0ZGVsZW5saWpzdGNvbnRhaW5lcj48L3JpdGRlbGVuLWxpanN0PlxuICAgICAgICA8cml0ZGVsZW4tdmlldyAqbmdJZj1cInZpZXdlclwiIChmb2N1c0VtaXR0ZXIpPVwiZm9jdXNSaXRkZWVsKCRldmVudClcIiAjcml0ZGVsZW5saWpzdGNvbnRhaW5lcj48L3JpdGRlbGVuLXZpZXc+XG4gICAgPC9uYXY+XG4gICAgPHVsIGlkPVwiY29udGV4dE1lbnVcIiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiByb2xlPVwibWVudVwiIFtuZ1N0eWxlXT1cImNvbnRleHRNZW51U3R5bGVcIj5cbiAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgY29udGV4dE1lbnVBY3Rpb25zXCI+PGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aW9uLmNsaWNrKClcIj57e2FjdGlvbi5sYWJlbH19PC9hPjwvbGk+XG4gICAgPC91bD5cblxuICAgIDxhIGNsYXNzPVwiY2Fyb3VzZWwtY29udHJvbC1wcmV2XCIgW25nQ2xhc3NdPVwiKGlzQWN0aXZlKT8nY2Fyb3VzZWwtc2lkZWJhci1vcGVuJzonY2Fyb3VzZWwtc2lkZWJhcidcIiByb2xlPVwiYnV0dG9uXCJcbiAgICAgICBkYXRhLXNsaWRlPVwicHJldlwiIChjbGljayk9XCJuYXZpZ2Vlck5hYXJMaW5rcygkZXZlbnQpXCIgW2hpZGRlbl09XCIha2FuTGlua3NcIj5cbiAgICAgICAgPHNwYW4gaWQ9XCJwcmV2aW91cy1wYWdlXCIgY2xhc3M9XCJjYXJvdXNlbC1jb250cm9sLXByZXYtaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+UHJldmlvdXM8L3NwYW4+XG4gICAgPC9hPlxuICAgIDxhIGNsYXNzPVwiY2Fyb3VzZWwtY29udHJvbC1uZXh0XCIgc3R5bGU9XCJ3aWR0aDogMiU7XCIgcm9sZT1cImJ1dHRvblwiIGRhdGEtc2xpZGU9XCJuZXh0XCIgKGNsaWNrKT1cIm5hdmlnZWVyTmFhclJlY2h0cygkZXZlbnQpXCJcbiAgICAgICBbaGlkZGVuXT1cIiFrYW5SZWNodHNcIj5cbiAgICAgICAgPHNwYW4gaWQ9XCJuZXh0LXBhZ2VcIiBjbGFzcz1cImNhcm91c2VsLWNvbnRyb2wtbmV4dC1pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5OZXh0PC9zcGFuPlxuICAgIDwvYT5cbjwvZGl2PlxuIl19
|