@alauda-fe/common 1.4.9 → 1.4.11
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/core/pipes/parse-json-translate.pipe.d.ts +1 -1
- package/core/services/plugin-util.service.d.ts +31 -0
- package/core/services/public-api.d.ts +1 -0
- package/core/types/k8s/crd.d.ts +3 -2
- package/core/types/resource-definitions.d.ts +21 -1
- package/esm2022/api/project-api.service.mjs +7 -2
- package/esm2022/chart/common/axis/x-axis-ticks.component.mjs +8 -13
- package/esm2022/chart/common/legend/legend.component.mjs +5 -6
- package/esm2022/chart/common/tooltip/tooltip.component.mjs +6 -7
- package/esm2022/code/code-display-dialog/component.mjs +3 -3
- package/esm2022/core/pipes/parse-json-translate.pipe.mjs +3 -4
- package/esm2022/core/services/plugin-util.service.mjs +60 -0
- package/esm2022/core/services/public-api.mjs +2 -1
- package/esm2022/core/types/k8s/crd.mjs +1 -1
- package/esm2022/core/types/resource-definitions.mjs +11 -1
- package/esm2022/core/utils/resources.mjs +2 -2
- package/esm2022/editable/editable.component.mjs +5 -17
- package/esm2022/k8s-resource-list/footer/component.mjs +2 -2
- package/esm2022/multi-search/action-input/component.mjs +83 -51
- package/esm2022/multi-search/form/component.mjs +33 -16
- package/esm2022/multi-search/multi-search-tags/component.mjs +7 -5
- package/esm2022/page-scaffold/navigation/lottie-icons/animation-data.mjs +3 -1
- package/esm2022/page-scaffold/navigation/lottie-icons/animations/observe.json +1 -0
- package/esm2022/page-scaffold/page-header/common-layout/context.service.mjs +6 -11
- package/esm2022/page-scaffold/page-header/common-layout/product-select/component.mjs +12 -13
- package/esm2022/table/component.mjs +6 -6
- package/esm2022/translate/i18n-assets-loader.mjs +4 -4
- package/esm2022/translate/i18n-config.mjs +4 -1
- package/esm2022/translate/translate.pipe.mjs +17 -23
- package/esm2022/translate/translate.service.mjs +14 -24
- package/esm2022/view-chart/legend/legend.component.mjs +5 -6
- package/esm2022/view-chart/view-chart.component.mjs +7 -9
- package/esm2022/view-zchart/legend/legend.component.mjs +5 -6
- package/esm2022/view-zchart/view-zchart.component.mjs +8 -15
- package/esm2022/widget/field-set/item/component.mjs +2 -2
- package/multi-search/action-input/component.d.ts +4 -1
- package/multi-search/form/component.d.ts +4 -1
- package/multi-search/multi-search-tags/component.d.ts +2 -1
- package/package.json +1 -1
- package/page-scaffold/page-header/common-layout/context.service.d.ts +1 -2
- package/styles/markdown-body.scss +4 -2
- package/translate/i18n-config.d.ts +1 -0
- package/translate/translate.pipe.d.ts +1 -2
- package/translate/translate.service.d.ts +8 -10
|
@@ -20,7 +20,6 @@ const _c2 = ["tooltipItemVirtual"];
|
|
|
20
20
|
const _c3 = ["tooltipTitleVirtual"];
|
|
21
21
|
const _c4 = ["tooltipNameVirtual"];
|
|
22
22
|
const _c5 = ["pieLabelContainer"];
|
|
23
|
-
const _c6 = () => ({});
|
|
24
23
|
function ViewZChartComponent_ng_container_2_div_3_Template(rf, ctx) { if (rf & 1) {
|
|
25
24
|
i0.ɵɵelementStart(0, "div", 24);
|
|
26
25
|
i0.ɵɵelementContainer(1, 18);
|
|
@@ -199,7 +198,7 @@ function ViewZChartComponent_ng_template_8_Template(rf, ctx) { if (rf & 1) {
|
|
|
199
198
|
i0.ɵɵpipe(1, "translate");
|
|
200
199
|
} if (rf & 2) {
|
|
201
200
|
const ctx_r3 = i0.ɵɵnextContext();
|
|
202
|
-
i0.ɵɵtextInterpolate2(" ", ctx_r3.title, " ", ctx_r3.unit ? "(" + i0.ɵɵ
|
|
201
|
+
i0.ɵɵtextInterpolate2(" ", ctx_r3.title, " ", ctx_r3.unit ? "(" + i0.ɵɵpipeBind1(1, 2, ctx_r3.unit) + ")" : "", "\n");
|
|
203
202
|
} }
|
|
204
203
|
function ViewZChartComponent_ng_template_10_Template(rf, ctx) { if (rf & 1) {
|
|
205
204
|
i0.ɵɵtext(0);
|
|
@@ -245,7 +244,6 @@ export class ViewZChartComponent {
|
|
|
245
244
|
get chartEl() {
|
|
246
245
|
return this.chartContainer.nativeElement;
|
|
247
246
|
}
|
|
248
|
-
// eslint-disable-next-line sonarjs/cognitive-complexity
|
|
249
247
|
get options() {
|
|
250
248
|
const defaultXAxisTickFormatter = this.isScaleTime
|
|
251
249
|
? (value) => dayjs(+value).format(this.dateAxisLabelFormats || DATE_TIME_FORMAT)
|
|
@@ -294,9 +292,7 @@ export class ViewZChartComponent {
|
|
|
294
292
|
? this.tooltipItemVirtual.nativeElement.innerHTML
|
|
295
293
|
: this.tooltipItemContext.context;
|
|
296
294
|
},
|
|
297
|
-
nameFormatter: (name) => this.tooltipTranslation
|
|
298
|
-
? this.translate.get(name, null, true)
|
|
299
|
-
: name,
|
|
295
|
+
nameFormatter: (name) => this.tooltipTranslation ? this.translate.get(name) : name,
|
|
300
296
|
valueFormatter: this.valueFormatter,
|
|
301
297
|
sort: this.tooltipSortMethod || this.tooltipAutoSort
|
|
302
298
|
? this.tooltipSortMethod
|
|
@@ -304,9 +300,7 @@ export class ViewZChartComponent {
|
|
|
304
300
|
},
|
|
305
301
|
};
|
|
306
302
|
}
|
|
307
|
-
constructor(
|
|
308
|
-
// eslint-disable-next-line sonar/deprecation
|
|
309
|
-
componentFactoryResolver, injector, appRef, translate, cdr, viewContainerRef, theme, el) {
|
|
303
|
+
constructor(componentFactoryResolver, injector, appRef, translate, cdr, viewContainerRef, theme, el) {
|
|
310
304
|
this.componentFactoryResolver = componentFactoryResolver;
|
|
311
305
|
this.injector = injector;
|
|
312
306
|
this.appRef = appRef;
|
|
@@ -368,7 +362,7 @@ export class ViewZChartComponent {
|
|
|
368
362
|
this.titleFormatter = (value, values) => {
|
|
369
363
|
this.tooltipTitleContext = { context: { title: value, values } };
|
|
370
364
|
const title = this.tooltipTranslation && !this.tooltipTitleTemplate
|
|
371
|
-
? this.translate.get(value
|
|
365
|
+
? this.translate.get(value) || value
|
|
372
366
|
: value;
|
|
373
367
|
this.cdr.markForCheck();
|
|
374
368
|
return this.tooltipTitleTemplate
|
|
@@ -381,7 +375,7 @@ export class ViewZChartComponent {
|
|
|
381
375
|
: this.defaultPointFormat(+data);
|
|
382
376
|
return this.hideTooltipUnit && !this.unit
|
|
383
377
|
? res
|
|
384
|
-
: `${res} ${this.translate.get(this.unit
|
|
378
|
+
: `${res} ${this.translate.get(this.unit)}`;
|
|
385
379
|
};
|
|
386
380
|
}
|
|
387
381
|
ngAfterViewInit() {
|
|
@@ -403,7 +397,6 @@ export class ViewZChartComponent {
|
|
|
403
397
|
this.ngOnDestroy();
|
|
404
398
|
this.chartInit();
|
|
405
399
|
}
|
|
406
|
-
// eslint-disable-next-line sonarjs/cognitive-complexity
|
|
407
400
|
chartInit() {
|
|
408
401
|
if (this.chartType === 'stat') {
|
|
409
402
|
setTimeout(() => {
|
|
@@ -698,7 +691,7 @@ export class ViewZChartComponent {
|
|
|
698
691
|
i0.ɵɵtemplate(4, ViewZChartComponent_div_4_Template, 5, 4, "div", 15);
|
|
699
692
|
i0.ɵɵpipe(5, "async");
|
|
700
693
|
i0.ɵɵelementEnd();
|
|
701
|
-
i0.ɵɵtemplate(6, ViewZChartComponent_ng_template_6_Template, 2, 4, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor)(8, ViewZChartComponent_ng_template_8_Template, 2,
|
|
694
|
+
i0.ɵɵtemplate(6, ViewZChartComponent_ng_template_6_Template, 2, 4, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor)(8, ViewZChartComponent_ng_template_8_Template, 2, 4, "ng-template", null, 1, i0.ɵɵtemplateRefExtractor)(10, ViewZChartComponent_ng_template_10_Template, 1, 1, "ng-template", null, 2, i0.ɵɵtemplateRefExtractor);
|
|
702
695
|
i0.ɵɵelementStart(12, "div", 16, 3);
|
|
703
696
|
i0.ɵɵelementContainer(14, 17);
|
|
704
697
|
i0.ɵɵelementEnd();
|
|
@@ -801,7 +794,7 @@ __decorate([
|
|
|
801
794
|
], ViewZChartComponent.prototype, "chartStatus$", void 0);
|
|
802
795
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ViewZChartComponent, [{
|
|
803
796
|
type: Component,
|
|
804
|
-
args: [{ selector: 'acl-view-zchart', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"ac-chart\"\n [class.ac-non-chart]=\"chartType === 'pie'\"\n [style.background]=\"background\"\n>\n <ng-container [ngSwitch]=\"chartType\">\n <ng-container *ngSwitchCase=\"'stat'\">\n <div class=\"stat\">\n <div class=\"tw-flex\">\n <div\n class=\"achart-title tw-flex-1 tw-break-all\"\n *ngIf=\"!hideHeader\"\n >\n <ng-container [ngTemplateOutlet]=\"titleContainer\"></ng-container>\n </div>\n <div class=\"achart-legend\"></div>\n </div>\n <div\n class=\"stat\"\n *ngIf=\"series$ | async as statSeries\"\n >\n <div class=\"body\">\n <div\n class=\"item\"\n *ngFor=\"let item of statSeries\"\n >\n <div class=\"value\">{{ $any(item).value }}</div>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <div\n #chartContainer\n class=\"ac-chart-container\"\n style=\"height: 100%\"\n ></div>\n </ng-container>\n </ng-container>\n\n <div\n class=\"ac-chart-status\"\n *ngIf=\"status$ | async as status\"\n >\n <div\n *ngIf=\"status.failed && !status.loading\"\n class=\"status failed\"\n >\n <ng-container *ngIf=\"customErrorContainer; else noCustomErrorContainer\">\n <ng-container [ngTemplateOutlet]=\"customErrorContainer\"></ng-container>\n </ng-container>\n <ng-template #noCustomErrorContainer>\n <aui-icon\n icon=\"exclamation_triangle_s\"\n background=\"triangle\"\n ></aui-icon>\n {{ 'failed_load_please' | translate }}\n <button\n aui-button=\"text\"\n (click)=\"refresh()\"\n >\n {{ ('refresh' | translate).toLowerCase() }}\n </button>\n </ng-template>\n </div>\n <div\n *ngIf=\"status.loading\"\n class=\"status loading\"\n >\n <aui-icon icon=\"spinner\"></aui-icon> {{ 'loading' | translate }}\n </div>\n <div\n *ngIf=\"status.noLegend && !status.loading && !status.noData\"\n class=\"status no-legend\"\n >\n {{ 'no_indicator_selected' | translate }}\n </div>\n\n <div\n *ngIf=\"status.noData && !status.loading && !status.failed\"\n class=\"status no-data\"\n >\n <ng-container\n *ngIf=\"\n customNoDataTitle && isTemplateRef(customNoDataTitle);\n else noDataTitleTemplate\n \"\n >\n <ng-container [ngTemplateOutlet]=\"customNoDataTitle\"></ng-container>\n </ng-container>\n <ng-template #noDataTitleTemplate>\n {{ customNoDataTitle || ('no_data' | translate) }}\n </ng-template>\n </div>\n </div>\n</div>\n\n<!-- title Template -->\n<ng-template #titleContainer>\n <ng-container *ngIf=\"isTemplateRef(title); else TitleTemplate\">\n <ng-container [ngTemplateOutlet]=\"title\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"isTemplateRef(titleDescription); else TitleDesTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"titleDescription\"\n [ngTemplateOutletContext]=\"titleDescriptionContext\"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #TitleTemplate>\n {{ title }}\n {{ unit ? '(' + (unit | translate
|
|
797
|
+
args: [{ selector: 'acl-view-zchart', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"ac-chart\"\n [class.ac-non-chart]=\"chartType === 'pie'\"\n [style.background]=\"background\"\n>\n <ng-container [ngSwitch]=\"chartType\">\n <ng-container *ngSwitchCase=\"'stat'\">\n <div class=\"stat\">\n <div class=\"tw-flex\">\n <div\n class=\"achart-title tw-flex-1 tw-break-all\"\n *ngIf=\"!hideHeader\"\n >\n <ng-container [ngTemplateOutlet]=\"titleContainer\"></ng-container>\n </div>\n <div class=\"achart-legend\"></div>\n </div>\n <div\n class=\"stat\"\n *ngIf=\"series$ | async as statSeries\"\n >\n <div class=\"body\">\n <div\n class=\"item\"\n *ngFor=\"let item of statSeries\"\n >\n <div class=\"value\">{{ $any(item).value }}</div>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <div\n #chartContainer\n class=\"ac-chart-container\"\n style=\"height: 100%\"\n ></div>\n </ng-container>\n </ng-container>\n\n <div\n class=\"ac-chart-status\"\n *ngIf=\"status$ | async as status\"\n >\n <div\n *ngIf=\"status.failed && !status.loading\"\n class=\"status failed\"\n >\n <ng-container *ngIf=\"customErrorContainer; else noCustomErrorContainer\">\n <ng-container [ngTemplateOutlet]=\"customErrorContainer\"></ng-container>\n </ng-container>\n <ng-template #noCustomErrorContainer>\n <aui-icon\n icon=\"exclamation_triangle_s\"\n background=\"triangle\"\n ></aui-icon>\n {{ 'failed_load_please' | translate }}\n <button\n aui-button=\"text\"\n (click)=\"refresh()\"\n >\n {{ ('refresh' | translate).toLowerCase() }}\n </button>\n </ng-template>\n </div>\n <div\n *ngIf=\"status.loading\"\n class=\"status loading\"\n >\n <aui-icon icon=\"spinner\"></aui-icon> {{ 'loading' | translate }}\n </div>\n <div\n *ngIf=\"status.noLegend && !status.loading && !status.noData\"\n class=\"status no-legend\"\n >\n {{ 'no_indicator_selected' | translate }}\n </div>\n\n <div\n *ngIf=\"status.noData && !status.loading && !status.failed\"\n class=\"status no-data\"\n >\n <ng-container\n *ngIf=\"\n customNoDataTitle && isTemplateRef(customNoDataTitle);\n else noDataTitleTemplate\n \"\n >\n <ng-container [ngTemplateOutlet]=\"customNoDataTitle\"></ng-container>\n </ng-container>\n <ng-template #noDataTitleTemplate>\n {{ customNoDataTitle || ('no_data' | translate) }}\n </ng-template>\n </div>\n </div>\n</div>\n\n<!-- title Template -->\n<ng-template #titleContainer>\n <ng-container *ngIf=\"isTemplateRef(title); else TitleTemplate\">\n <ng-container [ngTemplateOutlet]=\"title\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"isTemplateRef(titleDescription); else TitleDesTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"titleDescription\"\n [ngTemplateOutletContext]=\"titleDescriptionContext\"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #TitleTemplate>\n {{ title }}\n {{ unit ? '(' + (unit | translate) + ')' : '' }}\n</ng-template>\n\n<ng-template #TitleDesTemplate>\n {{ titleDescription }}\n</ng-template>\n\n<!-- tooltip template -->\n<div\n #tooltipItemVirtual\n class=\"hide\"\n>\n <ng-container\n [ngTemplateOutlet]=\"tooltipPointTemplate\"\n [ngTemplateOutletContext]=\"tooltipItemContext\"\n ></ng-container>\n</div>\n\n<div\n #tooltipTitleVirtual\n class=\"hide\"\n>\n <ng-container\n [ngTemplateOutlet]=\"tooltipTitleTemplate\"\n [ngTemplateOutletContext]=\"tooltipTitleContext\"\n ></ng-container>\n</div>\n\n<div\n #tooltipNameVirtual\n class=\"hide\"\n>\n <ng-container [ngTemplateOutlet]=\"tooltipPointNameTemplate\"></ng-container>\n</div>\n\n<ng-template #pieLabelContainer>\n <ng-container\n *ngIf=\"pieLabelText && isTemplateRef(pieLabelText); else stringPieLabelText\"\n >\n <ng-container [ngTemplateOutlet]=\"pieLabelText\"></ng-container>\n </ng-container>\n <ng-template #stringPieLabelText>\n {{ pieLabelText }}\n </ng-template>\n</ng-template>\n", styles: [":host{width:100%;height:100%;display:block}:host ::ng-deep .achart-title{font-size:16px;word-break:break-word!important}:host ::ng-deep .achart-header{align-items:center}div.ac-non-chart{min-height:unset;padding:0}.ac-chart{display:flex;padding:20px 16px;width:100%;position:relative;height:210px;min-height:100%;max-height:100%;box-sizing:border-box;flex-direction:column}.ac-chart-container{width:100%}.ac-chart-status{left:50%;position:absolute;top:50%;white-space:nowrap;transform:translate(-50%,-50%)}.status{padding:6px 16px;display:flex;align-items:center;justify-content:center;background-color:rgb(var(--aui-color-n-8));color:rgb(var(--aui-color-n-4));border-radius:2px}.status aui-icon{font-size:14px;margin-right:4px}.loading aui-icon{color:rgb(var(--aui-color-primary))}.failed aui-icon{color:rgb(var(--aui-color-red))}.hide{display:none}.stat{display:flex;flex-direction:column;width:100%;height:100%}.stat .body{display:flex;height:100%}.stat .item{flex:1;padding:12px;display:flex;align-items:center;justify-content:center;flex-direction:column}.stat .title{font-size:20px}.stat .value{font-size:60px;line-height:initial}\n"] }]
|
|
805
798
|
}], () => [{ type: i0.ComponentFactoryResolver }, { type: i0.Injector }, { type: i0.ApplicationRef }, { type: i1.TranslateService }, { type: i0.ChangeDetectorRef }, { type: i0.ViewContainerRef }, { type: i2.ThemeService }, { type: i0.ElementRef }], { backgroundColor: [{
|
|
806
799
|
type: Input
|
|
807
800
|
}], hideHeader: [{
|
|
@@ -992,4 +985,4 @@ __decorate([
|
|
|
992
985
|
type: Output
|
|
993
986
|
}] }); })();
|
|
994
987
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ViewZChartComponent, { className: "ViewZChartComponent", filePath: "view-zchart/view-zchart.component.ts", lineNumber: 89 }); })();
|
|
995
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy16Y2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL3ZpZXctemNoYXJ0L3ZpZXctemNoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy92aWV3LXpjaGFydC92aWV3LXpjaGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUlMLFNBQVMsR0FFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbkUsT0FBTyxFQUNMLGVBQWUsRUFDZixlQUFlLEVBQ2YsY0FBYyxHQUNmLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUVMLGNBQWMsRUFDZCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCx3QkFBd0IsRUFFeEIsVUFBVSxFQUVWLFlBQVksRUFDWixRQUFRLEVBQ1IsS0FBSyxFQUVMLE1BQU0sRUFDTixXQUFXLEVBQ1gsU0FBUyxFQUNULGdCQUFnQixHQUNqQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUNMLGVBQWUsRUFDZixHQUFHLEVBQ0gsS0FBSyxFQUNMLFVBQVUsRUFDVixPQUFPLEVBQ1AsU0FBUyxFQUNULEdBQUcsRUFDSCxhQUFhLEVBQ2IsU0FBUyxFQUNULElBQUksRUFDSixZQUFZLEdBQ2IsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQ0wsS0FBSyxFQUdMLFVBQVUsRUFDVixVQUFVLEdBS1gsTUFBTSxVQUFVLENBQUM7QUFHbEIsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixlQUFlLEVBRWYsU0FBUyxFQUNULFVBQVUsR0FDWCxNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFB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LFdBQVc7a0JBQW5CLEtBQUs7WUFDRyxjQUFjO2tCQUF0QixLQUFLO1lBQ0csV0FBVztrQkFBbkIsS0FBSztZQUNHLGdCQUFnQjtrQkFBeEIsS0FBSztZQU1OLFdBQVcsTUFFRixVQUFVO2tCQUFsQixLQUFLO1lBRUcsVUFBVTtrQkFBbEIsS0FBSztZQUdOLFdBQVcsTUFHWCxZQUFZLE1BRUYsWUFBWTtrQkFBckIsTUFBTTtZQUVHLGNBQWM7a0JBQXZCLE1BQU07WUFFRyxZQUFZO2tCQUFyQixNQUFNOztrRkE3UEksbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQmFyQ29sdW1uUGFyYW1zLFxuICBDaGFydERhdGEsXG4gIFBlcmNlbnRhZ2UsXG4gIFNjYWxlVHlwZSxcbiAgVG9vbHRpcENvbnRleHQsXG59IGZyb20gJ0BhbGF1ZGEvY2hhcnQnO1xuaW1wb3J0IHsgaXNUZW1wbGF0ZVJlZiwgcmdiQ29sb3IsIFRoZW1lU2VydmljZSB9IGZyb20gJ0BhbGF1ZGEvdWknO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50UG9ydGFsLFxuICBEb21Qb3J0YWxPdXRsZXQsXG4gIFRlbXBsYXRlUG9ydGFsLFxufSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIEFwcGxpY2F0aW9uUmVmLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICBDb21wb25lbnRSZWYsXG4gIEVsZW1lbnRSZWYsXG4gIEVtYmVkZGVkVmlld1JlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3RvcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEN1cnZlRmFjdG9yeSwgQ3VydmVGYWN0b3J5TGluZU9ubHkgfSBmcm9tICdkMyc7XG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBtYXAsXG4gIG1lcmdlLFxuICBPYnNlcnZhYmxlLFxuICBTdWJqZWN0LFxuICB0YWtlVW50aWwsXG4gIHRhcCxcbiAgY29tYmluZUxhdGVzdCxcbiAgc3RhcnRXaXRoLFxuICBza2lwLFxuICBkZWJvdW5jZVRpbWUsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgQ2hhcnQsXG4gIE9wdGlvbnMsXG4gIFRvb2x0aXBWYWx1ZSxcbiAgQ2hhcnRFdmVudCxcbiAgQWN0aW9uVHlwZSxcbiAgQ2hhcnRPcHRpb24sXG4gIFRvb2x0aXBPcHQsXG4gIERhdGEsXG4gIExlZ2VuZCxcbn0gZnJvbSAnenotY2hhcnQnO1xuXG5pbXBvcnQgeyBBcmVhUG9zaXRpb24gfSBmcm9tICcuLi9jaGFydC9wdWJsaWMtYXBpJztcbmltcG9ydCB7XG4gIERBVEVfVElNRV9GT1JNQVQsXG4gIE9ic2VydmFibGVJbnB1dCxcbiAgU3RyaW5nTWFwLFxuICBWYWx1ZUhvb2ssXG4gIHB1Ymxpc2hSZWYsXG59IGZyb20gJy4uL2NvcmUvcHVibGljLWFwaSc7XG5pbXBvcnQgeyBoYXNOb0RhdGEgfSBmcm9tICcuLi9tZXRyaWMtY2hhcnQvdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uL3RyYW5zbGF0ZS9wdWJsaWMtYXBpJztcbmltcG9ydCB7IFhQbG90TGluZXMgfSBmcm9tICcuLi92aWV3LWNoYXJ0L3B1YmxpYy1hcGknO1xuXG5pbXBvcnQgeyBMZWdlbmRDb21wb25lbnQgfSBmcm9tICcuL2xlZ2VuZC9sZWdlbmQuY29tcG9uZW50JztcbmltcG9ydCB7IGhhbmRsZURhdGVGb3JtYXQsIHBvaW50Rm9ybWF0IH0gZnJvbSAnLi9wdWJsaWMtYXBpJztcbmltcG9ydCB7IENoYXJ0RGF0YUl0ZW0sIENoYXJ0U3RhdHVzIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnJ1c2hDb250ZXh0IHtcbiAgc3RhcnQ6IG51bWJlcjtcbiAgZW5kOiBudW1iZXI7XG59XG5cbmV4cG9ydCB0eXBlIENoYXJ0VHlwZSA9ICdsaW5lJyB8ICdhcmVhJyB8ICdiYXInIHwgJ3BvaW50JyB8ICdwaWUnIHwgJ3N0YXQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhY2wtdmlldy16Y2hhcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vdmlldy16Y2hhcnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi92aWV3LXpjaGFydC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgVmlld1pDaGFydENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIGJhY2tncm91bmRDb2xvcjogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIGhpZGVIZWFkZXI6IGJvb2xlYW47XG5cbiAgQFZpZXdDaGlsZCgnY2hhcnRDb250YWluZXInKSBjaGFydENvbnRhaW5lcjogRWxlbWVudFJlZjtcblxuICBAVmlld0NoaWxkKCd0aXRsZUNvbnRhaW5lcicpIHRpdGxlQ29udGFpbmVyOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICBAVmlld0NoaWxkKCd0b29sdGlwSXRlbVZpcnR1YWwnKSB0b29sdGlwSXRlbVZpcnR1YWw6IEVsZW1lbnRSZWY7XG5cbiAgQFZpZXdDaGlsZCgndG9vbHRpcFRpdGxlVmlydHVhbCcpIHRvb2x0aXBUaXRsZVZpcnR1YWw6IEVsZW1lbnRSZWY7XG5cbiAgQFZpZXdDaGlsZCgndG9vbHRpcE5hbWVWaXJ0dWFsJykgdG9vbHRpcE5hbWVWaXJ0dWFsOiBFbGVtZW50UmVmO1xuXG4gIEBWaWV3Q2hpbGQoJ3BpZUxhYmVsQ29udGFpbmVyJykgcGllTGFiZWxDb250YWluZXI6IFRlbXBsYXRlUmVmPHVua25vd24+O1xuXG4gIEBJbnB1dCgpIG1vZGU6ICdjYXJkJyB8ICdkZWZhdWx0JyA9ICdkZWZhdWx0JztcblxuICBASW5wdXQoKSBjdXN0b21Ob0RhdGFUaXRsZTogVGVtcGxhdGVSZWY8dW5rbm93bj4gfCBzdHJpbmc7XG5cbiAgQElucHV0KCkgY3VzdG9tRXJyb3JDb250YWluZXI6IFRlbXBsYXRlUmVmPHVua25vd24+O1xuXG4gIEBJbnB1dCgpIG1hcmdpbkxlZnQ6IG51bWJlcjtcblxuICBASW5wdXQoKSBncmlkT2Zmc2V0VG9wID0gMDtcblxuICBASW5wdXQoKSByb3RhdGVkOiBib29sZWFuO1xuICBAT2JzZXJ2YWJsZUlucHV0KClcbiAgcm90YXRlZCQhOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gIC8vIGJhc2VcbiAgQElucHV0KCkgY2hhcnRUeXBlOiBDaGFydFR5cGUgPSAnYXJlYSc7XG5cbiAgQE9ic2VydmFibGVJbnB1dCgpXG4gIGNoYXJ0VHlwZSQhOiBPYnNlcnZhYmxlPENoYXJ0VHlwZT47XG5cbiAgQElucHV0KCkgc2VyaWVzOiBDaGFydERhdGFbXTtcbiAgQE9ic2VydmFibGVJbnB1dCgpXG4gIHNlcmllcyQhOiBPYnNlcnZhYmxlPENoYXJ0RGF0YVtdPjtcblxuICBASW5wdXQoKSB4QWNjZXNzb3IgPSAoZDogQ2hhcnREYXRhSXRlbSkgPT4gZC54O1xuXG4gIEBJbnB1dCgpIHlBY2Nlc3NvciA9IChkOiBDaGFydERhdGFJdGVtKSA9PiBkLnk7XG5cbiAgQElucHV0KCkgdW5pdDogc3RyaW5nO1xuICBAT2JzZXJ2YWJsZUlucHV0KClcbiAgdW5pdCQhOiBPYnNlcnZhYmxlPHN0cmluZz47XG5cbiAgY2FsbGJhY2tGaXJzdCA9IGZhbHNlO1xuXG4gIEBWYWx1ZUhvb2soZnVuY3Rpb24gKFxuICAgIHRoaXM6IFZpZXdaQ2hhcnRDb21wb25lbnQsXG4gICAgY29udGV4dENhbGxiYWNrRnVuY3Rpb246IChjb250ZXh0OiBDaGFydCkgPT4gdm9pZCxcbiAgKSB7XG4gICAgaWYgKGNvbnRleHRDYWxsYmFja0Z1bmN0aW9uICYmICF0aGlzLmNhbGxiYWNrRmlyc3QgJiYgdGhpcy5jaGFydCkge1xuICAgICAgdGhpcy5jYWxsYmFja0ZpcnN0ID0gdHJ1ZTtcbiAgICAgIGNvbnRleHRDYWxsYmFja0Z1bmN0aW9uKHRoaXMuY2hhcnQpO1xuICAgIH1cbiAgfSlcbiAgQElucHV0KClcbiAgY29udGV4dENhbGxiYWNrRnVuY3Rpb246IChjb250ZXh0OiBDaGFydCkgPT4gdm9pZDtcblxuICAvLyB0aXRsZVxuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgQElucHV0KCkgaGlkZVRpdGxlOiBib29sZWFuO1xuXG4gIEBJbnB1dCgpIHRpdGxlRGVzY3JpcHRpb246IHN0cmluZyB8IFRlbXBsYXRlUmVmPHVua25vd24+O1xuXG4gIEBJbnB1dCgpIHRpdGxlRGVzY3JpcHRpb25Db250ZXh0OiBTdHJpbmdNYXA7XG5cbiAgQElucHV0KCkgdGl0bGVPZmZzZXRYOiBudW1iZXI7XG5cbiAgLy8gbGVnZW5kXG4gIEBJbnB1dCgpIGhpZGVMZWdlbmQgPSBmYWxzZTtcbiAgQE9ic2VydmFibGVJbnB1dCgpXG4gIGhpZGVMZWdlbmQkITogT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICBASW5wdXQoKSBsZWdlbmRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8dW5rbm93bj4gfCBzdHJpbmc7XG5cbiAgQE9ic2VydmFibGVJbnB1dCgpXG4gIGxlZ2VuZFRlbXBsYXRlJCE6IE9ic2VydmFibGU8VGVtcGxhdGVSZWY8dW5rbm93bj4gfCBzdHJpbmc+O1xuXG4gIC8vIGN1c3RvbSBsZWdlbmRcbiAgQElucHV0KCkgbGVmdE9wZXJhdGlvbjogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgQElucHV0KCkgbGVmdE9wZXJhdGlvbkNvbnRleHQ6IFN0cmluZ01hcDtcblxuICBAT2JzZXJ2YWJsZUlucHV0KClcbiAgbGVmdE9wZXJhdGlvbkNvbnRleHQkITogT2JzZXJ2YWJsZTxTdHJpbmdNYXA+O1xuXG4gIEBPYnNlcnZhYmxlSW5wdXQoKVxuICBsZWZ0T3BlcmF0aW9uJCE6IE9ic2VydmFibGU8VGVtcGxhdGVSZWY8dW5rbm93bj4+O1xuXG4gIEBJbnB1dCgpIHJpZ2h0T3BlcmF0aW9uOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICBAT2JzZXJ2YWJsZUlucHV0KClcbiAgcmlnaHRPcGVyYXRpb24kITogT2JzZXJ2YWJsZTxUZW1wbGF0ZVJlZjx1bmtub3duPj47XG5cbiAgQElucHV0KCkgbGVnZW5kU2VsZWN0QWxsT3BlcmF0aW9uID0gZmFsc2U7XG5cbiAgQElucHV0KCkgbGVnZW5kU2VsZWN0QWxsTmFtZTogc3RyaW5nO1xuXG4gIC8vIHNjYWxlXG5cbiAgQElucHV0KCkgc2NhbGVZTWluOiBudW1iZXI7XG5cbiAgQElucHV0KCkgc2NhbGVZTWF4OiBudW1iZXI7XG5cbiAgLy8gYXhpc1xuXG4gIEBJbnB1dCgpIHlBeGlzVGlja1N1ZmZpeDogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIGRhdGVBeGlzTGFiZWxGb3JtYXRzOiBzdHJpbmc7XG5cbiAgQElucHV0KCkgeEF4aXNMYWJlbFRyYW5zbGF0aW9uOiBib29sZWFuO1xuXG4gIEBJbnB1dCgpIHhTY2FsZVR5cGU6IFNjYWxlVHlwZTtcblxuICBASW5wdXQoKSB4QXhpc1RpY2tGb3JtYXR0ZXI6IHN0cmluZyB8ICgodmFsdWU6IHN0cmluZykgPT4gc3RyaW5nKTtcblxuICBASW5wdXQoKSB0aWNrczogdW5rbm93bjtcblxuICBASW5wdXQoKSB5QXhpc1RpY2tGb3JtYXR0ZXI6IHN0cmluZyB8ICgodmFsdWU6IG51bWJlciB8IHN0cmluZykgPT4gc3RyaW5nKTtcblxuICBASW5wdXQoKSB5QXhpc01pblN0ZXA/OiBudW1iZXI7XG5cbiAgLy8gdG9vbHRpcFxuICBASW5wdXQoKSB0b29sdGlwSGlkZTogYm9vbGVhbjtcbiAgQE9ic2VydmFibGVJbnB1dCgpXG4gIHRvb2x0aXBIaWRlJCE6IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cbiAgQElucHV0KCkgdG9vbHRpcEF1dG9Tb3J0ID0gZmFsc2U7XG5cbiAgQElucHV0KCkgdG9vbHRpcFNvcnRNZXRob2QgPSAoYTogVG9vbHRpcFZhbHVlLCBiOiBUb29sdGlwVmFsdWUpID0+XG4gICAgYi52YWx1ZSAtIGEudmFsdWU7XG5cbiAgQE9ic2VydmFibGVJbnB1dCgpXG4gIHRvb2x0aXBTb3J0TWV0aG9kJCE6IE9ic2VydmFibGU8KGE6IFRvb2x0aXBWYWx1ZSwgYjogVG9vbHRpcFZhbHVlKSA9PiBudW1iZXI+O1xuXG4gIEBJbnB1dCgpIHRvb2x0aXBIaWRlVGl0bGU6IGJvb2xlYW47XG5cbiAgQElucHV0KCkgdG9vbHRpcEFwcGVuZFRvQm9keSA9IHRydWU7XG5cbiAgQElucHV0KCkgdG9vbHRpcENvbHVtbkxheW91dDogYm9vbGVhbjtcblxuICBASW5wdXQoKSB0b29sdGlwVGl0bGVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgQElucHV0KCkgdG9vbHRpcFBvaW50TmFtZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICBASW5wdXQoKSB0b29sdGlwVHJhbnNsYXRpb246IGJvb2xlYW47XG5cbiAgQElucHV0KCkgdG9vbHRpcFRpdGxlVHJhbnNsYXRpb246IGJvb2xlYW47XG5cbiAgQElucHV0KCkgaGlkZVRvb2x0aXBVbml0OiBib29sZWFuO1xuXG4gIEBJbnB1dCgpIHRvb2x0aXBQb2ludEZvcm1hdDogKGQ6IG51bWJlcikgPT4gbnVtYmVyIHwgc3RyaW5nO1xuXG4gIEBJbnB1dCgpIHRvb2x0aXBQb2ludFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICBASW5wdXQoKSB0b29sdGlwUG9pbnRUZW1wbGF0ZUNvbnRleHQ6IHVua25vd247XG5cbiAgLy8gc2VyaWVzXG4gIEBJbnB1dCgpIGJhbmRXaWR0aCA9IDEwO1xuXG4gIEBJbnB1dCgpIG1pbkhlaWdodDogbnVtYmVyO1xuXG4gIEBJbnB1dCgpIHN0ZXBMaW5lOiBib29sZWFuO1xuICBAT2JzZXJ2YWJsZUlucHV0KClcbiAgc3RlcExpbmUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gIEBJbnB1dCgpIGN1cnZlVHlwZTogQ3VydmVGYWN0b3J5IHwgQ3VydmVGYWN0b3J5TGluZU9ubHk7XG5cbiAgQElucHV0KCkgYmFyVHlwZTogJ3N0YW5kYXJkJyB8ICdzdGFja2VkJyA9ICdzdGFuZGFyZCc7XG5cbiAgQElucHV0KCkgc3RhcnRPcGFjaXR5OiBudW1iZXI7XG5cbiAgQElucHV0KCkgZW5kT3BhY2l0eTogbnVtYmVyO1xuXG4gIEBJbnB1dCgpIGxpbmVXaWR0aD86IG51bWJlcjtcblxuICAvLyBiYXIgc2VyaWVzXG4gIEBJbnB1dCgpIGlzR3JvdXA6IGJvb2xlYW47XG5cbiAgQElucHV0KCkgYmFyUmFkaXVzOiBudW1iZXI7XG5cbiAgQElucHV0KCkgY2xvc2VSYWRpdXNMYWRkZXI6IGJvb2xlYW47XG5cbiAgQElucHV0KCkgY29sdW1uQ2xpY2s6IChkYXRhOiBCYXJDb2x1bW5QYXJhbXMpID0+IHZvaWQ7XG5cbiAgLy8gem9vbVxuICBASW5wdXQoKSBlbmFibGVab29tOiBib29sZWFuO1xuXG4gIEBPYnNlcnZhYmxlSW5wdXQoKVxuICBlbmFibGVab29tJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICBASW5wdXQoKSBjaGFydFN0YXR1czogQ2hhcnRTdGF0dXM7XG5cbiAgLy8gcGxvdCBsaW5lXG4gIEBJbnB1dCgpIHlQbG90TGluZXNIaWRlID0gZmFsc2U7XG5cbiAgQElucHV0KCkgeVBsb3RMaW5lczogVG9vbHRpcENvbnRleHQ7XG5cbiAgLy8gcGllXG4gIEBJbnB1dCgpIHBpZUlubmVyUmFkaXVzOiBudW1iZXIgfCBQZXJjZW50YWdlO1xuXG4gIEBJbnB1dCgpIHBpZU91dGVyUmFkaXVzOiBudW1iZXIgfCBQZXJjZW50YWdlO1xuXG4gIEBJbnB1dCgpIHBpZVN0YXJ0QW5nbGU6IG51bWJlcjtcblxuICBASW5wdXQoKSBwaWVFbmRBbmdsZTogbnVtYmVyO1xuXG4gIEBJbnB1dCgpIHBpZUJhY2tncm91bmRDb2xvcjogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIHBpZVRvdGFsOiBudW1iZXI7XG5cbiAgQElucHV0KCkgcGllSW5uZXJEaXNjOiBib29sZWFuO1xuXG4gIEBJbnB1dCgpIHBpZUxhYmVsVGV4dDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgQElucHV0KCkgcGllTGFiZWxQb3NpdGlvbjogeyB4OiBzdHJpbmc7IHk6IHN0cmluZyB9O1xuXG4gIEBJbnB1dCgpIHBpZUl0ZW1TdHlsZT86IHtcbiAgICBib3JkZXJSYWRpdXM/OiBudW1iZXI7XG4gIH07XG5cbiAgLy8gc2NhdHRlclxuICBASW5wdXQoKSBzY2F0dGVyVHlwZTogJ2J1YmJsZSc7XG4gIEBJbnB1dCgpIHNjYXR0ZXJPcGFjaXR5OiBudW1iZXI7XG4gIEBJbnB1dCgpIHNjYXR0ZXJTaXplOiBudW1iZXI7XG4gIEBJbnB1dCgpIHNjYXR0ZXJUaHJlc2hvbGQ6IHtcbiAgICBtaW5TaXplOiBudW1iZXI7XG4gICAgbWF4U2l6ZTogbnVtYmVyO1xuICB9O1xuXG4gIEBPYnNlcnZhYmxlSW5wdXQoKVxuICB5UGxvdExpbmVzJCE6IE9ic2VydmFibGU8VG9vbHRpcENvbnRleHQ+O1xuXG4gIEBJbnB1dCgpIHhQbG90TGluZXM6IFhQbG90TGluZXM7XG5cbiAgQElucHV0KCkgeFBsb3RFbXB0eTogYm9vbGVhbjtcblxuICBAT2JzZXJ2YWJsZUlucHV0KClcbiAgeFBsb3RMaW5lcyQhOiBPYnNlcnZhYmxlPFhQbG90TGluZXM+O1xuXG4gIEBPYnNlcnZhYmxlSW5wdXQoKVxuICBjaGFydFN0YXR1cyQhOiBPYnNlcnZhYmxlPENoYXJ0U3RhdHVzPjtcblxuICBAT3V0cHV0KCkgbW91c2VVcEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxBcmVhUG9zaXRpb24+KCk7XG5cbiAgQE91dHB1dCgpIG1hcmtDbGlja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxUb29sdGlwQ29udGV4dD4oKTtcblxuICBAT3V0cHV0KCkgcmVmcmVzaEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgb25EZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgX2NoYXJ0U3RhdHVzJCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENoYXJ0U3RhdHVzPih7XG4gICAgbG9hZGluZzogdHJ1ZSxcbiAgICBub0RhdGE6IGZhbHNlLFxuICAgIGZhaWxlZDogZmFsc2UsXG4gICAgbm9MZWdlbmQ6IGZhbHNlLFxuICB9KTtcblxuICBfc3RhdHVzOiBDaGFydFN0YXR1cyA9IHt9O1xuXG4gIGNoYXJ0OiBDaGFydDtcblxuICBjaGFydFJlYWN0aXZlOiBDaGFydE9wdGlvbjtcblxuICBhcmVhUG9zaXRpb246IEFyZWFQb3NpdGlvbiA9IHtcbiAgICB4MTogMCxcbiAgICB4MjogMCxcbiAgICBzdGFydFg6IDAsXG4gICAgZW5kWDogMCxcbiAgfTtcblxuICBzdGF0dXMkID0gbWVyZ2UodGhpcy5jaGFydFN0YXR1cyQsIHRoaXMuX2NoYXJ0U3RhdHVzJCQpLnBpcGUoXG4gICAgbWFwKHN0YXR1cyA9PiAoe1xuICAgICAgLi4udGhpcy5fc3RhdHVzLFxuICAgICAgLi4uc3RhdHVzLFxuICAgIH0pKSxcbiAgICB0YXAoc3RhdHVzID0+IHtcbiAgICAgIHRoaXMuX3N0YXR1cyA9IHN0YXR1cztcbiAgICB9KSxcbiAgICBwdWJsaXNoUmVmKCksXG4gICk7XG5cbiAgZ2V0IGJhY2tncm91bmQoKSB7XG4gICAgcmV0dXJuIHRoaXMuYmFja2dyb3VuZENvbG9yO1xuICB9XG5cbiAgaXNUZW1wbGF0ZVJlZiA9IGlzVGVtcGxhdGVSZWY7XG5cbiAgY3VzdG9tTGVnZW5kUmVmOiBDb21wb25lbnRSZWY8TGVnZW5kQ29tcG9uZW50PjtcblxuICBjdXN0b21UaXRsZVJlZjogRW1iZWRkZWRWaWV3UmVmPHVua25vd24+O1xuXG4gIGN1c3RvbVBpZUxhYmVsVGV4dFJlZjogRW1iZWRkZWRWaWV3UmVmPHVua25vd24+O1xuXG4gIHRvb2x0aXBJdGVtQ29udGV4dDogeyBjb250ZXh0OiBUb29sdGlwVmFsdWVbXSB9ID0geyBjb250ZXh0OiBbXSB9O1xuXG4gIHRvb2x0aXBUaXRsZUNvbnRleHQ6IHsgY29udGV4dDogeyB0aXRsZTogc3RyaW5nOyB2YWx1ZXM6IFRvb2x0aXBWYWx1ZVtdIH0gfSA9XG4gICAgeyBjb250ZXh0OiBudWxsIH07XG5cbiAgZ2V0IGlzQ2FyZE1vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gJ2NhcmQnO1xuICB9XG5cbiAgZ2V0IHNjYWxlVHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy54U2NhbGVUeXBlIHx8IFNjYWxlVHlwZS5USU1FO1xuICB9XG5cbiAgZ2V0IGlzU2NhbGVUaW1lKCkge1xuICAgIHJldHVybiB0aGlzLnNjYWxlVHlwZSA9PT0gU2NhbGVUeXBlLlRJTUU7XG4gIH1cblxuICBnZXQgY2hhcnRFbCgpIHtcbiAgICByZXR1cm4gdGhpcy5jaGFydENvbnRhaW5lci5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNvbmFyanMvY29nbml0aXZlLWNvbXBsZXhpdHlcbiAgZ2V0IG9wdGlvbnMoKTogT3B0aW9ucyB7XG4gICAgY29uc3QgZGVmYXVsdFhBeGlzVGlja0Zvcm1hdHRlciA9IHRoaXMuaXNTY2FsZVRpbWVcbiAgICAgID8gKHZhbHVlOiBzdHJpbmcpID0+XG4gICAgICAgICAgZGF5anMoK3ZhbHVlKS5mb3JtYXQodGhpcy5kYXRlQXhpc0xhYmVsRm9ybWF0cyB8fCBEQVRFX1RJTUVfRk9STUFUKVxuICAgICAgOiBudWxsO1xuICAgIGNvbnN0IHhBeGlzVGlja0Zvcm1hdHRlciA9XG4gICAgICB0aGlzLnhBeGlzVGlja0Zvcm1hdHRlciB8fCBkZWZhdWx0WEF4aXNUaWNrRm9ybWF0dGVyO1xuICAgIHJldHVybiB7XG4gICAgICB0aXRsZTpcbiAgICAgICAgdGhpcy5oaWRlVGl0bGUgfHwgdGhpcy5oaWRlSGVhZGVyXG4gICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICB0ZXh0OiB0aGlzLnRpdGxlIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgY3VzdG9tOiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgIGxlZ2VuZDogdGhpcy5oaWRlSGVhZGVyXG4gICAgICAgID8gZmFsc2VcbiAgICAgICAgOiB7XG4gICAgICAgICAgICBjdXN0b206IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgIHNjYWxlOiB7XG4gICAgICAgIHg6IHtcbiAgICAgICAgICB0aW1lOiAhIXRoaXMuaXNTY2FsZVRpbWUsXG4gICAgICAgIH0sXG4gICAgICAgIHk6IHtcbiAgICAgICAgICAuLi4odGhpcy5zY2FsZVlNaW4gJiYgeyBtaW46IHRoaXMuc2NhbGVZTWluIH0pLFxuICAgICAgICAgIC4uLih0aGlzLnNjYWxlWU1heCAmJiB7IG1heDogdGhpcy5zY2FsZVlNYXggfSksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYXhpczoge1xuICAgICAgICB4OiB7XG4gICAgICAgICAgZm9ybWF0dGVyOiB4QXhpc1RpY2tGb3JtYXR0ZXIsXG4gICAgICAgIH0sXG4gICAgICAgIHk6IHtcbiAgICAgICAgICBmb3JtYXR0ZXI6XG4gICAgICAgICAgICB0aGlzLnlBeGlzVGlja0Zvcm1hdHRlciB8fFxuICAgICAgICAgICAgKCh2YWx1ZTogbnVtYmVyIHwgc3RyaW5nKSA9PlxuICAgICAgICAgICAgICBgJHt0aGlzLmNvbnZlcnNpb25NYXhpbXVtKHZhbHVlKX0ke3RoaXMueUF4aXNUaWNrU3VmZml4IHx8ICcnfWApLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHRvb2x0aXA6IHRoaXMudG9vbHRpcEhpZGVcbiAgICAgICAgPyBmYWxzZVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIHBvcHVwQ29udGFpbmVyOiB0aGlzLnRvb2x0aXBBcHBlbmRUb0JvZHkgPyBudWxsIDogdGhpcy5jaGFydEVsLFxuICAgICAgICAgICAgc2hvd1RpdGxlOiAhdGhpcy50b29sdGlwSGlkZVRpdGxlLFxuICAgICAgICAgICAgdGl0bGVGb3JtYXR0ZXI6IHRoaXMudGl0bGVGb3JtYXR0ZXIsXG4gICAgICAgICAgICBpdGVtRm9ybWF0dGVyOiAoY29udGV4dDogVG9vbHRpcFZhbHVlW10pID0+IHtcbiAgICAgICAgICAgICAgdGhpcy50b29sdGlwSXRlbUNvbnRleHQgPSB0aGlzLm1lcmdlUG9pbnRDb250ZXh0KGNvbnRleHQpO1xuICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnRvb2x0aXBQb2ludFRlbXBsYXRlXG4gICAgICAgICAgICAgICAgPyB0aGlzLnRvb2x0aXBJdGVtVmlydHVhbC5uYXRpdmVFbGVtZW50LmlubmVySFRNTFxuICAgICAgICAgICAgICAgIDogdGhpcy50b29sdGlwSXRlbUNvbnRleHQuY29udGV4dDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuYW1lRm9ybWF0dGVyOiAobmFtZTogc3RyaW5nKSA9PlxuICAgICAgICAgICAgICB0aGlzLnRvb2x0aXBUcmFuc2xhdGlvblxuICAgICAgICAgICAgICAgID8gdGhpcy50cmFuc2xhdGUuZ2V0KG5hbWUsIG51bGwsIHRydWUpXG4gICAgICAgICAgICAgICAgOiBuYW1lLFxuICAgICAgICAgICAgdmFsdWVGb3JtYXR0ZXI6IHRoaXMudmFsdWVGb3JtYXR0ZXIsXG4gICAgICAgICAgICBzb3J0OlxuICAgICAgICAgICAgICB0aGlzLnRvb2x0aXBTb3J0TWV0aG9kIHx8IHRoaXMudG9vbHRpcEF1dG9Tb3J0XG4gICAgICAgICAgICAgICAgPyB0aGlzLnRvb2x0aXBTb3J0TWV0aG9kXG4gICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGNhY2hlRGF0YTogRGF0YSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzb25hci9kZXByZWNhdGlvblxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSByZWFkb25seSBhcHBSZWY6IEFwcGxpY2F0aW9uUmVmLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0aGVtZTogVGhlbWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZWw6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICApIHt9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMucm90YXRlZCQsIHRoaXMuY2hhcnRUeXBlJCwgdGhpcy5zdGVwTGluZSRdKS5zdWJzY3JpYmUoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNoYXJ0KSB7XG4gICAgICAgICAgdGhpcy5yZUluaXQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVJbml0KCk7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgKTtcbiAgICBpZiAoIXRoaXMuY2hhcnQpIHtcbiAgICAgIHRoaXMuY2hhcnRJbml0KCk7XG4gICAgfVxuICB9XG5cbiAgcmVJbml0KCkge1xuICAgIHRoaXMubmdPbkRlc3Ryb3koKTtcbiAgICB0aGlzLmNoYXJ0SW5pdCgpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNvbmFyanMvY29nbml0aXZlLWNvbXBsZXhpdHlcbiAgY2hhcnRJbml0KCkge1xuICAgIGlmICh0aGlzLmNoYXJ0VHlwZSA9PT0gJ3N0YXQnKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5hZGRDdXN0b21MZWdlbmQoKTtcbiAgICAgIH0sIDApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNoYXJ0ID0gbmV3IENoYXJ0KHtcbiAgICAgIGNvbnRhaW5lcjpcbiAgICAgICAgdGhpcy5jaGFydENvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCB8fFxuICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmFjLWNoYXJ0LWNvbnRhaW5lcicpLFxuICAgICAgcGFkZGluZzogWzE2LCAxMiwgMiwgMF0sXG4gICAgICBvcHRpb25zOiB0aGlzLm9wdGlvbnMsXG4gICAgICBkYXRhOiBbXSxcbiAgICB9KTtcbiAgICB0aGlzLmNoYXJ0UmVhY3RpdmUgPSB0aGlzLmNoYXJ0LnJlYWN0aXZlKCkgYXMgQ2hhcnRPcHRpb247XG4gICAgdGhpcy5oYW5kbGVPcHRpb25zUmVhY3RpdmUoKTtcbiAgICB0aGlzLnRoZW1lLmN1cnJlbnRUaGVtZSRcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSh0eXBlID0+IHtcbiAgICAgICAgdGhpcy5jaGFydC50aGVtZSh0eXBlKTtcbiAgICAgIH0pO1xuICAgIHRoaXMuZW5hYmxlWm9vbSQucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmVuYWJsZVpvb20pIHtcbiAgICAgICAgdGhpcy5jaGFydC5pbnRlcmFjdGlvbignYnJ1c2gteCcsIHtcbiAgICAgICAgICBlbmQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHJpZ2dlcjogQ2hhcnRFdmVudC5QTE9UX01PVVNFVVAsXG4gICAgICAgICAgICAgIGFjdGlvbjogQWN0aW9uVHlwZS5CUlVTSF9YX0VORCxcbiAgICAgICAgICAgICAgY2FsbGJhY2s6IChlOiBCcnVzaENvbnRleHQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vdXNlVXBFdmVudC5uZXh0KHtcbiAgICAgICAgICAgICAgICAgIHN0YXJ0WDogZS5zdGFydCxcbiAgICAgICAgICAgICAgICAgIGVuZFg6IGUuZW5kLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAodGhpcy5jaGFydFR5cGUgPT09ICdsaW5lJyB8fCB0aGlzLnN0ZXBMaW5lKSB7XG4gICAgICB0aGlzLnN0ZXBMaW5lID8gdGhpcy5jaGFydC5saW5lKCkuc3RlcCgnc3RhcnQnKSA6IHRoaXMuY2hhcnQubGluZSgpO1xuICAgIH0gZWxzZVxuICAgICAgc3dpdGNoICh0aGlzLmNoYXJ0VHlwZSkge1xuICAgICAgICBjYXNlICdhcmVhJzoge1xuICAgICAgICAgIHRoaXMuY2hhcnQuYXJlYSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ3BvaW50Jzoge1xuICAgICAgICAgIHRoaXMuY2hhcnQucG9pbnQoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdiYXInOiB7XG4gICAgICAgICAgaWYgKHRoaXMuYmFyVHlwZSA9PT0gJ3N0YWNrZWQnKSB7XG4gICAgICAgICAgICB0aGlzLmNoYXJ0LmJhcigpLmFkanVzdCh7IHR5cGU6ICdzdGFjaycgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2hhcnQuYmFyKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgaWYgKHRoaXMucm90YXRlZCkge1xuICAgICAgdGhpcy5jaGFydC5jb29yZGluYXRlKCkudHJhbnNwb3NlKCk7XG4gICAgfVxuICAgIHRoaXMuY2hhcnQucmVuZGVyKCk7XG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5zZXJpZXMkLCB0aGlzLnhQbG90TGluZXMkLnBpcGUoc3RhcnRXaXRoKG51bGwpKV0pXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kkKSwgZGVib3VuY2VUaW1lKDIwMCkpXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKFtkYXRhLCByZXNdKSA9PiB7XG4gICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuaGFuZGVsRGF0YShkYXRhKTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdmFsdWVzLmZpbHRlcihkID0+IGQubmFtZSkubGVuZ3RoICYmXG4gICAgICAgICAgICAgIHZhbHVlc1xuICAgICAgICAgICAgICAgIC5tYXAodiA9PiB2Lm5hbWUpXG4gICAgICAgICAgICAgICAgLnNvbWUoZCA9PiAhdGhpcy5jYWNoZURhdGEubWFwKGMgPT4gYy5uYW1lKS5pbmNsdWRlcyhkKSkgJiZcbiAgICAgICAgICAgICAgdGhpcy5jYWNoZURhdGEubGVuZ3RoXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5yZUluaXQoKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbHVlcz8uWzBdPy5uYW1lKSB7XG4gICAgICAgICAgICAgIHRoaXMuY2FjaGVEYXRhID0gdmFsdWVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5jaGFydD8uZGF0YSh2YWx1ZXMgYXMgYW55KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5hZGRDdXN0b21UaXRsZSgpO1xuICAgICAgICAgICAgY29uc3Qgbm9EYXRhID0gaGFzTm9EYXRhKHZhbHVlcyk7XG4gICAgICAgICAgICB0aGlzLmhhbmRlbENoYXJ0U3RhdHVzKHtcbiAgICAgICAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgICAgIG5vRGF0YSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHJlcyAmJiAhbm9EYXRhKSB7XG4gICAgICAgICAgICAgIHRoaXMuY2hhcnQ/LmFubm90YXRpb24oKS5saW5lWShcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiByZXM/LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgdGV4dDoge1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiByZXM/LnRleHQgfHwgU3RyaW5nKHJlcz8udmFsdWUpLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRoaXMueFBsb3RFbXB0eSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuY2hhcnQ/LnJlbmRlcigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbGVnZW5kID0gdGhpcy5jaGFydD8uY29tcG9uZW50cz8uZ2V0KCdsZWdlbmQnKSBhcyBMZWdlbmQ7XG4gICAgICAgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID4gMCAmJiBsZWdlbmQ/LmluYWN0aXZhdGVkU2V0Py5zaXplID4gMCkge1xuICAgICAgICAgICAgICAgIGxlZ2VuZC5pbmFjdGl2YXRlZFNldC5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGxlZyA9IGxlZ2VuZFxuICAgICAgICAgICAgICAgICAgICAuZ2V0TGVnZW5kKClcbiAgICAgICAgICAgICAgICAgICAgLmZpbmQoaXRlbSA9PiBpdGVtLm5hbWUgPT09IHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgIGlmIChsZWcpIHtcbiAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmxlZ2VuZEl0ZW1DbGljayh7XG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogbGVnLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgYWN0aXZhdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNvbnRleHRDYWxsYmFja0Z1bmN0aW9uICYmICF0aGlzLmNhbGxiYWNrRmlyc3QpIHtcbiAgICAgICAgdGhpcy5jYWxsYmFja0ZpcnN0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jb250ZXh0Q2FsbGJhY2tGdW5jdGlvbih0aGlzLmNoYXJ0KTtcbiAgICAgIH1cbiAgICB9LCAwKTtcbiAgICB0aGlzLmNoYXJ0Lm9uKENoYXJ0RXZlbnQuUExPVF9DTElDSywgKHZhbHVlOiBUb29sdGlwQ29udGV4dCkgPT4ge1xuICAgICAgdGhpcy5tYXJrQ2xpY2tFdmVudC5uZXh0KHZhbHVlKTtcbiAgICB9KTtcbiAgICB0aGlzLnlQbG90TGluZXMkLnBpcGUodGFrZVVudGlsKHRoaXMub25EZXN0cm95JCkpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgaWYgKHJlcykge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY2hhcnQuYW5ub3RhdGlvbigpLmxpbmVYKHtcbiAgICAgICAgICAgIGRhdGE6IHJlcy50aXRsZSBhcyBzdHJpbmcsXG4gICAgICAgICAgICB0ZXh0OiB7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IGRheWpzKHJlcy50aXRsZSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tOnNzJyksXG4gICAgICAgICAgICAgIGJvcmRlcjoge1xuICAgICAgICAgICAgICAgIHN0eWxlOiBgMXB4IHNvbGlkICR7cmdiQ29sb3IoJ24tNycpfWAsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmFkZEN1c3RvbUxlZ2VuZCgpO1xuICB9XG5cbiAgaGFuZGVsRGF0YShkYXRhOiBDaGFydERhdGFbXSkge1xuICAgIHJldHVybiBkYXRhLm1hcChkID0+ICh7XG4gICAgICAuLi5kLFxuICAgICAgdmFsdWVzOiBkLnZhbHVlcz8ubWFwKHYgPT4gKHtcbiAgICAgICAgLi4udixcbiAgICAgICAgeDogdGhpcy54QWNjZXNzb3IodiksXG4gICAgICAgIHk6IHRoaXMueUFjY2Vzc29yKHYpLFxuICAgICAgfSkpLFxuICAgIH0pKTtcbiAgfVxuXG4gIGFkZEN1c3RvbUxlZ2VuZCgpIHtcbiAgICBjb25zdCBjb250YWluZXIgPVxuICAgICAgdGhpcy5jaGFydFR5cGUgPT09ICdzdGF0JyA/IHRoaXMuZWwubmF0aXZlRWxlbWVudCA6IHRoaXMuY2hhcnRFbDtcbiAgICBjb25zdCBkb20gPSBjb250YWluZXIucXVlcnlTZWxlY3RvcihgLmFjaGFydC1sZWdlbmRgKTtcbiAgICBpZiAoZG9tICYmICF0aGlzLmhpZGVIZWFkZXIpIHtcbiAgICAgIGRvbS5pbm5lckhUTUwgPSAnJztcbiAgICAgIGNvbnN0IHAgPSBuZXcgQ29tcG9uZW50UG9ydGFsKExlZ2VuZENvbXBvbmVudCk7XG4gICAgICBjb25zdCBvID0gbmV3IERvbVBvcnRhbE91dGxldChcbiAgICAgICAgZG9tLFxuICAgICAgICB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICAgICAgdGhpcy5hcHBSZWYsXG4gICAgICAgIHRoaXMuaW5qZWN0b3IsXG4gICAgICApO1xuICAgICAgdGhpcy5jdXN0b21MZWdlbmRSZWYgPSBwLmF0dGFjaChvKTtcbiAgICAgIHRoaXMuY3VzdG9tTGVnZW5kUmVmLmluc3RhbmNlLmNoYXJ0ID0gdGhpcy5jaGFydDtcbiAgICAgIHRoaXMuY3VzdG9tTGVnZW5kUmVmLmluc3RhbmNlLnN5bWJvbCA9IFsnYmFyJywgJ3BpZScsICdzY2F0dGVyJ10uaW5jbHVkZXMoXG4gICAgICAgIHRoaXMuY2hhcnRUeXBlLFxuICAgICAgKVxuICAgICAgICA/ICdjaXJjbGUnXG4gICAgICAgIDogJ2xpbmUnO1xuICAgICAgdGhpcy5sZWZ0T3BlcmF0aW9uJC5waXBlKHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmN1c3RvbUxlZ2VuZFJlZi5pbnN0YW5jZS5sZWZ0T3BlcmF0aW9uID0gdGhpcy5sZWZ0T3BlcmF0aW9uO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMubGVmdE9wZXJhdGlvbkNvbnRleHQkXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmN1c3RvbUxlZ2VuZFJlZi5pbnN0YW5jZS5sZWZ0T3BlcmF0aW9uQ29udGV4dCA9XG4gICAgICAgICAgICB0aGlzLmxlZnRPcGVyYXRpb25Db250ZXh0O1xuICAgICAgICB9KTtcblxuICAgICAgdGhpcy5yaWdodE9wZXJhdGlvbiQucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5jdXN0b21MZWdlbmRSZWYuaW5zdGFuY2UucmlnaHRPcGVyYXRpb24gPSB0aGlzLnJpZ2h0T3BlcmF0aW9uO1xuICAgICAgICB0aGlzLmN1c3RvbUxlZ2VuZFJlZi5pbnN0YW5jZS5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuY3VzdG9tTGVnZW5kUmVmLmluc3RhbmNlLm1vZGUgPSB0aGlzLm1vZGU7XG4gICAgICB0aGlzLmN1c3RvbUxlZ2VuZFJlZi5pbnN0YW5jZS5oaWRlTGVnZW5kID0gdGhpcy5oaWRlTGVnZW5kO1xuICAgICAgdGhpcy5jdXN0b21MZWdlbmRSZWYuaW5zdGFuY2Uuc2VsZWN0QWxsTmFtZSA9IHRoaXMubGVnZW5kU2VsZWN0QWxsTmFtZTtcbiAgICAgIHRoaXMuY3VzdG9tTGVnZW5kUmVmLmluc3RhbmNlLnNlbGVjdEFsbE9wZXJhdGlvbiA9XG4gICAgICAgIHRoaXMubGVnZW5kU2VsZWN0QWxsT3BlcmF0aW9uO1xuICAgICAgdGhpcy5jdXN0b21MZWdlbmRSZWYuaW5zdGFuY2UudGVtcGxhdGUgPSB0aGlzLmxlZ2VuZFRlbXBsYXRlO1xuICAgICAgdGhpcy5jdXN0b21MZWdlbmRSZWYuaW5zdGFuY2UuY2hhbmdlTGVnZW5kXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpKVxuICAgICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgdGhpcy5oYW5kZWxDaGFydFN0YXR1cyh7XG4gICAgICAgICAgICBub0xlZ2VuZDogcmVzLmV2ZXJ5KGl0ZW0gPT4gIWl0ZW0uYWN0aXZhdGUpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhZGRDdXN0b21UaXRsZSgpIHtcbiAgICBjb25zdCBkb20gPSAoXG4gICAgICB0aGlzLmNoYXJ0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnRcbiAgICApLnF1ZXJ5U2VsZWN0b3IoYC5hY2hhcnQtdGl0bGVgKTtcbiAgICBpZiAoZG9tICYmICF0aGlzLmhpZGVIZWFkZXIpIHtcbiAgICAgIGRvbS5pbm5lckhUTUwgPSAnJztcbiAgICAgIGNvbnN0IHAgPSBuZXcgVGVtcGxhdGVQb3J0YWwodGhpcy50aXRsZUNvbnRhaW5lciwgdGhpcy52aWV3Q29udGFpbmVyUmVmKTtcbiAgICAgIGNvbnN0IG8gPSBuZXcgRG9tUG9ydGFsT3V0bGV0KFxuICAgICAgICBkb20sXG4gICAgICAgIHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgICAgICB0aGlzLmFwcFJlZixcbiAgICAgICAgdGhpcy5pbmplY3RvcixcbiAgICAgICk7XG4gICAgICB0aGlzLmN1c3RvbVRpdGxlUmVmID0gcC5hdHRhY2gobyk7XG4gICAgfVxuICB9XG5cbiAgYWRkUGllTGFiZWxUZXh0KGNoYXJ0VUlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBkb20gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuJHtjaGFydFVJZH0gLmFjLXBpZS1ndWlkZWApO1xuICAgIGlmICghdGhpcy5jdXN0b21QaWVMYWJlbFRleHRSZWYgJiYgZG9tICYmIHRoaXMucGllTGFiZWxUZXh0KSB7XG4gICAgICBjb25zdCBwID0gbmV3IFRlbXBsYXRlUG9ydGFsKFxuICAgICAgICB0aGlzLnBpZUxhYmVsQ29udGFpbmVyLFxuICAgICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYsXG4gICAgICApO1xuICAgICAgY29uc3QgbyA9IG5ldyBEb21Qb3J0YWxPdXRsZXQoXG4gICAgICAgIGRvbSxcbiAgICAgICAgdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgICAgIHRoaXMuYXBwUmVmLFxuICAgICAgICB0aGlzLmluamVjdG9yLFxuICAgICAgKTtcbiAgICAgIHRoaXMuY3VzdG9tUGllTGFiZWxUZXh0UmVmID0gcC5hdHRhY2gobyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVPcHRpb25zUmVhY3RpdmUoKSB7XG4gICAgdGhpcy50b29sdGlwSGlkZSRcbiAgICAgIC5waXBlKHNraXAoMSksIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZShoaWRlID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmNoYXJ0UmVhY3RpdmUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGFydFJlYWN0aXZlLm9wdGlvbnMudG9vbHRpcCA9IGhpZGUgPyAhaGlkZSA6IHt9O1xuICAgICAgfSk7XG5cbiAgICB0aGlzLmhpZGVMZWdlbmQkLnBpcGUoc2tpcCgxKSwgdGFrZVVudGlsKHRoaXMub25EZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmFkZEN1c3RvbUxlZ2VuZCgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy50b29sdGlwU29ydE1ldGhvZCRcbiAgICAgIC5waXBlKHNraXAoMSksIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSh0b29sdGlwU29ydE1ldGhvZCA9PiB7XG4gICAgICAgIGlmICghdGhpcy5jaGFydFJlYWN0aXZlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNoYXJ0UmVhY3RpdmUub3B0aW9ucy50b29sdGlwKSB7XG4gICAgICAgICAgKHRoaXMuY2hhcnRSZWFjdGl2ZS5vcHRpb25zLnRvb2x0aXAgYXMgVG9vbHRpcE9wdCkuc29ydCA9XG4gICAgICAgICAgICB0b29sdGlwU29ydE1ldGhvZCB8fCB0aGlzLnRvb2x0aXBBdXRvU29ydFxuICAgICAgICAgICAgICA/IHRvb2x0aXBTb3J0TWV0aG9kXG4gICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICByZWZyZXNoKCkge1xuICAgIHRoaXMucmVmcmVzaEV2ZW50Lm5leHQobnVsbCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmNhbGxiYWNrRmlyc3QgPSBmYWxzZTtcbiAgICB0aGlzLmNhY2hlRGF0YSA9IFtdO1xuICAgIHRoaXMuY2hhcnQ/LmRlc3Ryb3koKTtcbiAgICB0aGlzLmNoYXJ0ID0gbnVsbDtcbiAgICB0aGlzLm9uRGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuY3VzdG9tTGVnZW5kUmVmPy5kZXN0cm95KCk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IG1lcmdlUG9pbnRDb250ZXh0ID0gKGNvbnRleHQ6IFRvb2x0aXBWYWx1ZVtdKSA9PiAoe1xuICAgIGNvbnRleHQ6IHRoaXMubGltaXRNYXhDb250ZXh0KGNvbnRleHQpLFxuICAgIC4uLih0aGlzLnRvb2x0aXBQb2ludFRlbXBsYXRlQ29udGV4dCBhcyBTdHJpbmdNYXApLFxuICB9KTtcblxuICBwcml2YXRlIGhhbmRlbENoYXJ0U3RhdHVzKHN0YXR1czogQ2hhcnRTdGF0dXMpIHtcbiAgICB0aGlzLl9jaGFydFN0YXR1cyQkLm5leHQoe1xuICAgICAgLi4uc3RhdHVzLFxuICAgIH0pO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgbGltaXRNYXhDb250ZXh0KGNvbnRleHQ6IFRvb2x0aXBWYWx1ZVtdLCBsaW1pdCA9IDE1KSB7XG4gICAgcmV0dXJuIGNvbnRleHQuc2xpY2UoMCwgbGltaXQpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0UG9pbnRGb3JtYXQgPSBwb2ludEZvcm1hdDtcblxuICBwcml2YXRlIGNvbnZlcnNpb25NYXhpbXVtKHZhbHVlOiBudW1iZXIgfCBzdHJpbmcpIHtcbiAgICBjb25zdCB1bml0ID0gJ2snO1xuICAgIGNvbnN0IGRhdGEgPSBOdW1iZXIodmFsdWUpIHx8IDA7XG4gICAgaWYgKGRhdGEgPj0gMTAwMCkge1xuICAgICAgY29uc3QgbnVtID0gKyhkYXRhIC8gMTAwMCkudG9GaXhlZCgyKTtcbiAgICAgIHJldHVybiBgJHtudW19JHt1bml0fWA7XG4gICAgfVxuICAgIHJldHVybiAnJyArIHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSB0aXRsZUZvcm1hdHRlciA9ICh2YWx1ZTogc3RyaW5nLCB2YWx1ZXM6IFRvb2x0aXBWYWx1ZVtdKSA9PiB7XG4gICAgdGhpcy50b29sdGlwVGl0bGVDb250ZXh0ID0geyBjb250ZXh0OiB7IHRpdGxlOiB2YWx1ZSwgdmFsdWVzIH0gfTtcbiAgICBjb25zdCB0aXRsZSA9XG4gICAgICB0aGlzLnRvb2x0aXBUcmFuc2xhdGlvbiAmJiAhdGhpcy50b29sdGlwVGl0bGVUZW1wbGF0ZVxuICAgICAgICA/IHRoaXMudHJhbnNsYXRlLmdldCh2YWx1ZSwgbnVsbCwgdHJ1ZSkgfHwgdmFsdWVcbiAgICAgICAgOiB2YWx1ZTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICByZXR1cm4gdGhpcy50b29sdGlwVGl0bGVUZW1wbGF0ZVxuICAgICAgPyB0aGlzLnRvb2x0aXBUaXRsZVZpcnR1YWwubmF0aXZlRWxlbWVudC5pbm5lckhUTUxcbiAgICAgIDogaGFuZGxlRGF0ZUZvcm1hdCh0aXRsZSk7XG4gIH07XG5cbiAgcHJpdmF0ZSByZWFkb25seSB2YWx1ZUZvcm1hdHRlciA9IChkYXRhOiBhbnkpID0+IHtcbiAgICBjb25zdCByZXMgPSB0aGlzLnRvb2x0aXBQb2ludEZvcm1hdFxuICAgICAgPyB0aGlzLnRvb2x0aXBQb2ludEZvcm1hdChkYXRhKVxuICAgICAgOiB0aGlzLmRlZmF1bHRQb2ludEZvcm1hdCgrZGF0YSk7XG4gICAgcmV0dXJuIHRoaXMuaGlkZVRvb2x0aXBVbml0ICYmICF0aGlzLnVuaXRcbiAgICAgID8gKHJlcyBhcyBzdHJpbmcpXG4gICAgICA6IGAke3Jlc30gJHt0aGlzLnRyYW5zbGF0ZS5nZXQodGhpcy51bml0LCBudWxsLCB0cnVlKX1gO1xuICB9O1xufVxuIiwiPGRpdlxuICBjbGFzcz1cImFjLWNoYXJ0XCJcbiAgW2NsYXNzLmFjLW5vbi1jaGFydF09XCJjaGFydFR5cGUgPT09ICdwaWUnXCJcbiAgW3N0eWxlLmJhY2tncm91bmRdPVwiYmFja2dyb3VuZFwiXG4+XG4gIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNoYXJ0VHlwZVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzdGF0J1wiPlxuICAgICAgPGRpdiBjbGFzcz1cInN0YXRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInR3LWZsZXhcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImFjaGFydC10aXRsZSB0dy1mbGV4LTEgdHctYnJlYWstYWxsXCJcbiAgICAgICAgICAgICpuZ0lmPVwiIWhpZGVIZWFkZXJcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwidGl0bGVDb250YWluZXJcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWNoYXJ0LWxlZ2VuZFwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwic3RhdFwiXG4gICAgICAgICAgKm5nSWY9XCJzZXJpZXMkIHwgYXN5bmMgYXMgc3RhdFNlcmllc1wiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9keVwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cIml0ZW1cIlxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBzdGF0U2VyaWVzXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZhbHVlXCI+e3sgJGFueShpdGVtKS52YWx1ZSB9fTwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAgPGRpdlxuICAgICAgICAjY2hhcnRDb250YWluZXJcbiAgICAgICAgY2xhc3M9XCJhYy1jaGFydC1jb250YWluZXJcIlxuICAgICAgICBzdHlsZT1cImhlaWdodDogMTAwJVwiXG4gICAgICA+PC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxkaXZcbiAgICBjbGFzcz1cImFjLWNoYXJ0LXN0YXR1c1wiXG4gICAgKm5nSWY9XCJzdGF0dXMkIHwgYXN5bmMgYXMgc3RhdHVzXCJcbiAgPlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwic3RhdHVzLmZhaWxlZCAmJiAhc3RhdHVzLmxvYWRpbmdcIlxuICAgICAgY2xhc3M9XCJzdGF0dXMgZmFpbGVkXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VzdG9tRXJyb3JDb250YWluZXI7IGVsc2Ugbm9DdXN0b21FcnJvckNvbnRhaW5lclwiPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImN1c3RvbUVycm9yQ29udGFpbmVyXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjbm9DdXN0b21FcnJvckNvbnRhaW5lcj5cbiAgICAgICAgPGF1aS1pY29uXG4gICAgICAgICAgaWNvbj1cImV4Y2xhbWF0aW9uX3RyaWFuZ2xlX3NcIlxuICAgICAgICAgIGJhY2tncm91bmQ9XCJ0cmlhbmdsZVwiXG4gICAgICAgID48L2F1aS1pY29uPlxuICAgICAgICB7eyAnZmFpbGVkX2xvYWRfcGxlYXNlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgYXVpLWJ1dHRvbj1cInRleHRcIlxuICAgICAgICAgIChjbGljayk9XCJyZWZyZXNoKClcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgKCdyZWZyZXNoJyB8IHRyYW5zbGF0ZSkudG9Mb3dlckNhc2UoKSB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJzdGF0dXMubG9hZGluZ1wiXG4gICAgICBjbGFzcz1cInN0YXR1cyBsb2FkaW5nXCJcbiAgICA+XG4gICAgICA8YXVpLWljb24gaWNvbj1cInNwaW5uZXJcIj48L2F1aS1pY29uPiB7eyAnbG9hZGluZycgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cInN0YXR1cy5ub0xlZ2VuZCAmJiAhc3RhdHVzLmxvYWRpbmcgJiYgIXN0YXR1cy5ub0RhdGFcIlxuICAgICAgY2xhc3M9XCJzdGF0dXMgbm8tbGVnZW5kXCJcbiAgICA+XG4gICAgICB7eyAnbm9faW5kaWNhdG9yX3NlbGVjdGVkJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvZGl2PlxuXG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJzdGF0dXMubm9EYXRhICYmICFzdGF0dXMubG9hZGluZyAmJiAhc3RhdHVzLmZhaWxlZFwiXG4gICAgICBjbGFzcz1cInN0YXR1cyBuby1kYXRhXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgY3VzdG9tTm9EYXRhVGl0bGUgJiYgaXNUZW1wbGF0ZVJlZihjdXN0b21Ob0RhdGFUaXRsZSk7XG4gICAgICAgICAgZWxzZSBub0RhdGFUaXRsZVRlbXBsYXRlXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY3VzdG9tTm9EYXRhVGl0bGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNub0RhdGFUaXRsZVRlbXBsYXRlPlxuICAgICAgICB7eyBjdXN0b21Ob0RhdGFUaXRsZSB8fCAoJ25vX2RhdGEnIHwgdHJhbnNsYXRlKSB9fVxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPCEtLSB0aXRsZSBUZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZSAjdGl0bGVDb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1RlbXBsYXRlUmVmKHRpdGxlKTsgZWxzZSBUaXRsZVRlbXBsYXRlXCI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJ0aXRsZVwiPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNUZW1wbGF0ZVJlZih0aXRsZURlc2NyaXB0aW9uKTsgZWxzZSBUaXRsZURlc1RlbXBsYXRlXCI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidGl0bGVEZXNjcmlwdGlvblwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwidGl0bGVEZXNjcmlwdGlvbkNvbnRleHRcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI1RpdGxlVGVtcGxhdGU+XG4gIHt7IHRpdGxlIH19XG4gIHt7IHVuaXQgPyAnKCcgKyAodW5pdCB8IHRyYW5zbGF0ZToge306dHJ1ZSkgKyAnKScgOiAnJyB9fVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNUaXRsZURlc1RlbXBsYXRlPlxuICB7eyB0aXRsZURlc2NyaXB0aW9uIH19XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIHRvb2x0aXAgdGVtcGxhdGUgLS0+XG48ZGl2XG4gICN0b29sdGlwSXRlbVZpcnR1YWxcbiAgY2xhc3M9XCJoaWRlXCJcbj5cbiAgPG5nLWNvbnRhaW5lclxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRvb2x0aXBQb2ludFRlbXBsYXRlXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwidG9vbHRpcEl0ZW1Db250ZXh0XCJcbiAgPjwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxkaXZcbiAgI3Rvb2x0aXBUaXRsZVZpcnR1YWxcbiAgY2xhc3M9XCJoaWRlXCJcbj5cbiAgPG5nLWNvbnRhaW5lclxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRvb2x0aXBUaXRsZVRlbXBsYXRlXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwidG9vbHRpcFRpdGxlQ29udGV4dFwiXG4gID48L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48ZGl2XG4gICN0b29sdGlwTmFtZVZpcnR1YWxcbiAgY2xhc3M9XCJoaWRlXCJcbj5cbiAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJ0b29sdGlwUG9pbnROYW1lVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI3BpZUxhYmVsQ29udGFpbmVyPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJwaWVMYWJlbFRleHQgJiYgaXNUZW1wbGF0ZVJlZihwaWVMYWJlbFRleHQpOyBlbHNlIHN0cmluZ1BpZUxhYmVsVGV4dFwiXG4gID5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInBpZUxhYmVsVGV4dFwiPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLXRlbXBsYXRlICNzdHJpbmdQaWVMYWJlbFRleHQ+XG4gICAge3sgcGllTGFiZWxUZXh0IH19XG4gIDwvbmctdGVtcGxhdGU+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
988
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy16Y2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL3ZpZXctemNoYXJ0L3ZpZXctemNoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy92aWV3LXpjaGFydC92aWV3LXpjaGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUlMLFNBQVMsR0FFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbkUsT0FBTyxFQUNMLGVBQWUsRUFDZixlQUFlLEVBQ2YsY0FBYyxHQUNmLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUVMLGNBQWMsRUFDZCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCx3QkFBd0IsRUFFeEIsVUFBVSxFQUVWLFlBQVksRUFDWixRQUFRLEVBQ1IsS0FBSyxFQUVMLE1BQU0sRUFDTixXQUFXLEVBQ1gsU0FBUyxFQUNULGdCQUFnQixHQUNqQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUNMLGVBQWUsRUFDZixHQUFHLEVBQ0gsS0FBSyxFQUNMLFVBQVUsRUFDVixPQUFPLEVBQ1AsU0FBUyxFQUNULEdBQUcsRUFDSCxhQUFhLEVBQ2IsU0FBUyxFQUNULElBQUksRUFDSixZQUFZLEdBQ2IsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQ0wsS0FBSyxFQUdMLFVBQVUsRUFDVixVQUFVLEdBS1gsTUFBTSxVQUFVLENBQUM7QUFHbEIsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixlQUFlLEVBRWYsU0FBUyxFQUNULFVBQVUsR0FDWCxNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFB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QUFVO2tCQUFsQixLQUFLO1lBRUcsVUFBVTtrQkFBbEIsS0FBSztZQUdOLFdBQVcsTUFHWCxZQUFZLE1BRUYsWUFBWTtrQkFBckIsTUFBTTtZQUVHLGNBQWM7a0JBQXZCLE1BQU07WUFFRyxZQUFZO2tCQUFyQixNQUFNOztrRkE3UEksbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQmFyQ29sdW1uUGFyYW1zLFxuICBDaGFydERhdGEsXG4gIFBlcmNlbnRhZ2UsXG4gIFNjYWxlVHlwZSxcbiAgVG9vbHRpcENvbnRleHQsXG59IGZyb20gJ0BhbGF1ZGEvY2hhcnQnO1xuaW1wb3J0IHsgaXNUZW1wbGF0ZVJlZiwgcmdiQ29sb3IsIFRoZW1lU2VydmljZSB9IGZyb20gJ0BhbGF1ZGEvdWknO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50UG9ydGFsLFxuICBEb21Qb3J0YWxPdXRsZXQsXG4gIFRlbXBsYXRlUG9ydGFsLFxufSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIEFwcGxpY2F0aW9uUmVmLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICBDb21wb25lbnRSZWYsXG4gIEVsZW1lbnRSZWYsXG4gIEVtYmVkZGVkVmlld1JlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3RvcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEN1cnZlRmFjdG9yeSwgQ3VydmVGYWN0b3J5TGluZU9ubHkgfSBmcm9tICdkMyc7XG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBtYXAsXG4gIG1lcmdlLFxuICBPYnNlcnZhYmxlLFxuICBTdWJqZWN0LFxuICB0YWtlVW50aWwsXG4gIHRhcCxcbiAgY29tYmluZUxhdGVzdCxcbiAgc3RhcnRXaXRoLFxuICBza2lwLFxuICBkZWJvdW5jZVRpbWUsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgQ2hhcnQsXG4gIE9wdGlvbnMsXG4gIFRvb2x0aXBWYWx1ZSxcbiAgQ2hhcnRFdmVudCxcbiAgQWN0aW9uVHlwZSxcbiAgQ2hhcnRPcHRpb24sXG4gIFRvb2x0aXBPcHQsXG4gIERhdGEsXG4gIExlZ2VuZCxcbn0gZnJvbSAnenotY2hhcnQnO1xuXG5pbXBvcnQgeyBBcmVhUG9zaXRpb24gfSBmcm9tICcuLi9jaGFydC9wdWJsaWMtYXBpJztcbmltcG9ydCB7XG4gIERBVEVfVElNRV9GT1JNQVQsXG4gIE9ic2VydmFibGVJbnB1dCxcbiAgU3RyaW5nTWFwLFxuICBWYWx1ZUhvb2ssXG4gIHB1Ymxpc2hSZWYsXG59IGZyb20gJy4uL2NvcmUvcHVibGljLWFwaSc7XG5pbXBvcnQgeyBoYXNOb0RhdGEgfSBmcm9tICcuLi9tZXRyaWMtY2hhcnQvdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uL3RyYW5zbGF0ZS9wdWJsaWMtYXBpJztcbmltcG9ydCB7IFhQbG90TGluZXMgfSBmcm9tICcuLi92aWV3LWNoYXJ0L3B1YmxpYy1hcGknO1xuXG5pbXBvcnQgeyBMZWdlbmRDb21wb25lbnQgfSBmcm9tICcuL2xlZ2VuZC9sZWdlbmQuY29tcG9uZW50JztcbmltcG9ydCB7IGhhbmRsZURhdGVGb3JtYXQsIHBvaW50Rm9ybWF0IH0gZnJvbSAnLi9wdWJsaWMtYXBpJztcbmltcG9ydCB7IENoYXJ0RGF0YUl0ZW0sIENoYXJ0U3RhdHVzIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnJ1c2hDb250ZXh0IHtcbiAgc3RhcnQ6IG51bWJlcjtcbiAgZW5kOiBudW1iZXI7XG59XG5cbmV4cG9ydCB0eXBlIENoYXJ0VHlwZSA9ICdsaW5lJyB8ICdhcmVhJyB8ICdiYXInIHwgJ3BvaW50JyB8ICdwaWUnIHwgJ3N0YXQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhY2wtdmlldy16Y2hhcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vdmlldy16Y2hhcnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi92aWV3LXpjaGFydC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgVmlld1pDaGFydENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIGJhY2tncm91bmRDb2xvcjogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIGhpZGVIZWFkZXI6IGJvb2xlYW47XG5cbiAgQFZpZXdDaGlsZCgnY2hhcnRDb250YWluZXInKSBjaGFydENvbnRhaW5lcjogRWxlbWVudFJlZjtcblxuICBAVmlld0NoaWxkKCd0aXRsZUNvbnRhaW5lcicpIHRpdGxlQ29udGFpbmVyOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICBAVmlld0NoaWxkKCd0b29sdGlwSXRlbVZpcnR1YWwnKSB0b29sdGlwSXRlbVZpcnR1YWw6IEVsZW1lbnRSZWY7XG5cbiAgQFZpZXdDaGlsZCgndG9vbHRpcFRpdGxlVmlydHVhbCcpIHRvb2x0aXBUaXRsZVZpcnR1YWw6IEVsZW1lbnRSZWY7XG5cbiAgQFZpZXdDaGlsZCgndG9vbHRpcE5hbWVWaXJ0dWFsJykgdG9vbHRpcE5hbWVWaXJ0dWFsOiBFbGVtZW50UmVmO1xuXG4gIEBWaWV3Q2hpbGQoJ3BpZUxhYmVsQ29udGFpbmVyJykgcGllTGFiZWxDb250YWluZXI6IFRlbXBsYXRlUmVmPHVua25vd24+O1xuXG4gIEBJbnB1dCgpIG1vZGU6ICdjYXJkJyB8ICdkZWZhdWx0JyA9ICdkZWZhdWx0JztcblxuICBASW5wdXQoKSBjdXN0b21Ob0RhdGFUaXRsZTogVGVtcGxhdGVSZWY8dW5rbm93bj4gfCBzdHJpbmc7XG5cbiAgQElucHV0KCkgY3VzdG9tRXJyb3JDb250YWluZXI6IFRlbXBsYXRlUmVmPHVua25vd24+O1xuXG4gIEBJbnB1dCgpIG1hcmdpbkxlZnQ6IG51bWJlcjtcblxuICBASW5wdXQoKSBncmlkT2Zmc2V0VG9wID0gMDtcblxuICBASW5wdXQoKSByb3RhdGVkOiBib29sZWFuO1xuICBAT2JzZXJ2YWJsZUlucHV0KClcbiAgcm90YXRlZCQhOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gIC8vIGJhc2VcbiAgQElucHV0KCkgY2hhcnRUeXBlOiBDaGFydFR5cGUgPSAnYXJlYSc7XG5cbiAgQE9ic2VydmFibGVJbnB1dCgpXG4gIGNoYXJ0VHlwZSQhOiBPYnNlcnZhYmxlPENoYXJ0VHlwZT47XG5cbiAgQElucHV0KCkgc2VyaWVzOiBDaGFydERhdGFbXTtcbiAgQE9ic2VydmFibGVJbnB1dCgpXG4gIHNlcmllcyQhOiBPYnNlcnZhYmxlPENoYXJ0RGF0YVtdPjtcblxuICBASW5wdXQoKSB4QWNjZXNzb3IgPSAoZDogQ2hhcnREYXRhSXRlbSkgPT4gZC54O1xuXG4gIEBJbnB1dCgpIHlBY2Nlc3NvciA9IChkOiBDaGFydERhdGFJdGVtKSA9PiBkLnk7XG5cbiAgQElucHV0KCkgdW5pdDogc3RyaW5nO1xuICBAT2JzZXJ2YWJsZUlucHV0KClcbiAgdW5pdCQhOiBPYnNlcnZhYmxlPHN0cmluZz47XG5cbiAgY2FsbGJhY2tGaXJzdCA9IGZhbHNlO1xuXG4gIEBWYWx1ZUhvb2soZnVuY3Rpb24gKFxuICAgIHRoaXM6IFZpZXdaQ2hhcnRDb21wb25lbnQsXG4gICAgY29udGV4dENhbGxiYWNrRnVuY3Rpb246IChjb250ZXh0OiBDaGFydCkgPT4gdm9pZCxcbiAgKSB7XG4gICAgaWYgKGNvbnRleHRDYWxsYmFja0Z1bmN0aW9uICYmICF0aGlzLmNhbGxiYWNrRmlyc3QgJiYgdGhpcy5jaGFydCkge1xuICAgICAgdGhpcy5jYWxsYmFja0ZpcnN0ID0gdHJ1ZTtcbiAgICAgIGNvbnRleHRDYWxsYmFja0Z1bmN0aW9uKHRoaXMuY2hhcnQpO1xuICAgIH1cbiAgfSlcbiAgQElucHV0KClcbiAgY29udGV4dENhbGxiYWNrRnVuY3Rpb246IChjb250ZXh0OiBDaGFydCkgPT4gdm9pZDtcblxuICAvLyB0aXRsZVxuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgQElucHV0KCkgaGlkZVRpdGxlOiBib29sZWFuO1xuXG4gIEBJbnB1dCgpIHRpdGxlRGVzY3JpcHRpb246IHN0cmluZyB8IFRlbXBsYXRlUmVmPHVua25vd24+O1xuXG4gIEBJbnB1dCgpIHRpdGxlRGVzY3JpcHRpb25Db250ZXh0OiBTdHJpbmdNYXA7XG5cbiAgQElucHV0KCkgdGl0bGVPZmZzZXRYOiBudW1iZXI7XG5cbiAgLy8gbGVnZW5kXG4gIEBJbnB1dCgpIGhpZGVMZWdlbmQgPSBmYWxzZTtcbiAgQE9ic2VydmFibGVJbnB1dCgpXG4gIGhpZGVMZWdlbmQkITogT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICBASW5wdXQoKSBsZWdlbmRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8dW5rbm93bj4gfCBzdHJpbmc7XG5cbiAgQE9ic2VydmFibGVJbnB1dCgpXG4gIGxlZ2VuZFRlbXBsYXRlJCE6IE9ic2VydmFibGU8VGVtcGxhdGVSZWY8dW5rbm93bj4gfCBzdHJpbmc+O1xuXG4gIC8vIGN1c3RvbSBsZWdlbmRcbiAgQElucHV0KCkgbGVmdE9wZXJhdGlvbjogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgQElucHV0KCkgbGVmdE9wZXJhdGlvbkNvbnRleHQ6IFN0cmluZ01hcDtcblxuICBAT2JzZXJ2YWJsZUlucHV0KClcbiAgbGVmdE9wZXJhdGlvbkNvbnRleHQkITogT2JzZXJ2YWJsZTxTdHJpbmdNYXA+O1xuXG4gIEBPYnNlcnZhYmxlSW5wdXQoKVxuICBsZWZ0T3BlcmF0aW9uJCE6IE9ic2VydmFibGU8VGVtcGxhdGVSZWY8dW5rbm93bj4+O1xuXG4gIEBJbnB1dCgpIHJpZ2h0T3BlcmF0aW9uOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICBAT2JzZXJ2YWJsZUlucHV0KClcbiAgcmlnaHRPcGVyYXRpb24kITogT2JzZXJ2YWJsZTxUZW1wbGF0ZVJlZjx1bmtub3duPj47XG5cbiAgQElucHV0KCkgbGVnZW5kU2VsZWN0QWxsT3BlcmF0aW9uID0gZmFsc2U7XG5cbiAgQElucHV0KCkgbGVnZW5kU2VsZWN0QWxsTmFtZTogc3RyaW5nO1xuXG4gIC8vIHNjYWxlXG5cbiAgQElucHV0KCkgc2NhbGVZTWluOiBudW1iZXI7XG5cbiAgQElucHV0KCkgc2NhbGVZTWF4OiBudW1iZXI7XG5cbiAgLy8gYXhpc1xuXG4gIEBJbnB1dCgpIHlBeGlzVGlja1N1ZmZpeDogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIGRhdGVBeGlzTGFiZWxGb3JtYXRzOiBzdHJpbmc7XG5cbiAgQElucHV0KCkgeEF4aXNMYWJlbFRyYW5zbGF0aW9uOiBib29sZWFuO1xuXG4gIEBJbnB1dCgpIHhTY2FsZVR5cGU6IFNjYWxlVHlwZTtcblxuICBASW5wdXQoKSB4QXhpc1RpY2tGb3JtYXR0ZXI6IHN0cmluZyB8ICgodmFsdWU6IHN0cmluZykgPT4gc3RyaW5nKTtcblxuICBASW5wdXQoKSB0aWNrczogdW5rbm93bjtcblxuICBASW5wdXQoKSB5QXhpc1RpY2tGb3JtYXR0ZXI6IHN0cmluZyB8ICgodmFsdWU6IG51bWJlciB8IHN0cmluZykgPT4gc3RyaW5nKTtcblxuICBASW5wdXQoKSB5QXhpc01pblN0ZXA/OiBudW1iZXI7XG5cbiAgLy8gdG9vbHRpcFxuICBASW5wdXQoKSB0b29sdGlwSGlkZTogYm9vbGVhbjtcbiAgQE9ic2VydmFibGVJbnB1dCgpXG4gIHRvb2x0aXBIaWRlJCE6IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cbiAgQElucHV0KCkgdG9vbHRpcEF1dG9Tb3J0ID0gZmFsc2U7XG5cbiAgQElucHV0KCkgdG9vbHRpcFNvcnRNZXRob2QgPSAoYTogVG9vbHRpcFZhbHVlLCBiOiBUb29sdGlwVmFsdWUpID0+XG4gICAgYi52YWx1ZSAtIGEudmFsdWU7XG5cbiAgQE9ic2VydmFibGVJbnB1dCgpXG4gIHRvb2x0aXBTb3J0TWV0aG9kJCE6IE9ic2VydmFibGU8KGE6IFRvb2x0aXBWYWx1ZSwgYjogVG9vbHRpcFZhbHVlKSA9PiBudW1iZXI+O1xuXG4gIEBJbnB1dCgpIHRvb2x0aXBIaWRlVGl0bGU6IGJvb2xlYW47XG5cbiAgQElucHV0KCkgdG9vbHRpcEFwcGVuZFRvQm9keSA9IHRydWU7XG5cbiAgQElucHV0KCkgdG9vbHRpcENvbHVtbkxheW91dDogYm9vbGVhbjtcblxuICBASW5wdXQoKSB0b29sdGlwVGl0bGVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgQElucHV0KCkgdG9vbHRpcFBvaW50TmFtZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICBASW5wdXQoKSB0b29sdGlwVHJhbnNsYXRpb246IGJvb2xlYW47XG5cbiAgQElucHV0KCkgdG9vbHRpcFRpdGxlVHJhbnNsYXRpb246IGJvb2xlYW47XG5cbiAgQElucHV0KCkgaGlkZVRvb2x0aXBVbml0OiBib29sZWFuO1xuXG4gIEBJbnB1dCgpIHRvb2x0aXBQb2ludEZvcm1hdDogKGQ6IG51bWJlcikgPT4gbnVtYmVyIHwgc3RyaW5nO1xuXG4gIEBJbnB1dCgpIHRvb2x0aXBQb2ludFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICBASW5wdXQoKSB0b29sdGlwUG9pbnRUZW1wbGF0ZUNvbnRleHQ6IHVua25vd247XG5cbiAgLy8gc2VyaWVzXG4gIEBJbnB1dCgpIGJhbmRXaWR0aCA9IDEwO1xuXG4gIEBJbnB1dCgpIG1pbkhlaWdodDogbnVtYmVyO1xuXG4gIEBJbnB1dCgpIHN0ZXBMaW5lOiBib29sZWFuO1xuICBAT2JzZXJ2YWJsZUlucHV0KClcbiAgc3RlcExpbmUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gIEBJbnB1dCgpIGN1cnZlVHlwZTogQ3VydmVGYWN0b3J5IHwgQ3VydmVGYWN0b3J5TGluZU9ubHk7XG5cbiAgQElucHV0KCkgYmFyVHlwZTogJ3N0YW5kYXJkJyB8ICdzdGFja2VkJyA9ICdzdGFuZGFyZCc7XG5cbiAgQElucHV0KCkgc3RhcnRPcGFjaXR5OiBudW1iZXI7XG5cbiAgQElucHV0KCkgZW5kT3BhY2l0eTogbnVtYmVyO1xuXG4gIEBJbnB1dCgpIGxpbmVXaWR0aD86IG51bWJlcjtcblxuICAvLyBiYXIgc2VyaWVzXG4gIEBJbnB1dCgpIGlzR3JvdXA6IGJvb2xlYW47XG5cbiAgQElucHV0KCkgYmFyUmFkaXVzOiBudW1iZXI7XG5cbiAgQElucHV0KCkgY2xvc2VSYWRpdXNMYWRkZXI6IGJvb2xlYW47XG5cbiAgQElucHV0KCkgY29sdW1uQ2xpY2s6IChkYXRhOiBCYXJDb2x1bW5QYXJhbXMpID0+IHZvaWQ7XG5cbiAgLy8gem9vbVxuICBASW5wdXQoKSBlbmFibGVab29tOiBib29sZWFuO1xuXG4gIEBPYnNlcnZhYmxlSW5wdXQoKVxuICBlbmFibGVab29tJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICBASW5wdXQoKSBjaGFydFN0YXR1czogQ2hhcnRTdGF0dXM7XG5cbiAgLy8gcGxvdCBsaW5lXG4gIEBJbnB1dCgpIHlQbG90TGluZXNIaWRlID0gZmFsc2U7XG5cbiAgQElucHV0KCkgeVBsb3RMaW5lczogVG9vbHRpcENvbnRleHQ7XG5cbiAgLy8gcGllXG4gIEBJbnB1dCgpIHBpZUlubmVyUmFkaXVzOiBudW1iZXIgfCBQZXJjZW50YWdlO1xuXG4gIEBJbnB1dCgpIHBpZU91dGVyUmFkaXVzOiBudW1iZXIgfCBQZXJjZW50YWdlO1xuXG4gIEBJbnB1dCgpIHBpZVN0YXJ0QW5nbGU6IG51bWJlcjtcblxuICBASW5wdXQoKSBwaWVFbmRBbmdsZTogbnVtYmVyO1xuXG4gIEBJbnB1dCgpIHBpZUJhY2tncm91bmRDb2xvcjogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIHBpZVRvdGFsOiBudW1iZXI7XG5cbiAgQElucHV0KCkgcGllSW5uZXJEaXNjOiBib29sZWFuO1xuXG4gIEBJbnB1dCgpIHBpZUxhYmVsVGV4dDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgQElucHV0KCkgcGllTGFiZWxQb3NpdGlvbjogeyB4OiBzdHJpbmc7IHk6IHN0cmluZyB9O1xuXG4gIEBJbnB1dCgpIHBpZUl0ZW1TdHlsZT86IHtcbiAgICBib3JkZXJSYWRpdXM/OiBudW1iZXI7XG4gIH07XG5cbiAgLy8gc2NhdHRlclxuICBASW5wdXQoKSBzY2F0dGVyVHlwZTogJ2J1YmJsZSc7XG4gIEBJbnB1dCgpIHNjYXR0ZXJPcGFjaXR5OiBudW1iZXI7XG4gIEBJbnB1dCgpIHNjYXR0ZXJTaXplOiBudW1iZXI7XG4gIEBJbnB1dCgpIHNjYXR0ZXJUaHJlc2hvbGQ6IHtcbiAgICBtaW5TaXplOiBudW1iZXI7XG4gICAgbWF4U2l6ZTogbnVtYmVyO1xuICB9O1xuXG4gIEBPYnNlcnZhYmxlSW5wdXQoKVxuICB5UGxvdExpbmVzJCE6IE9ic2VydmFibGU8VG9vbHRpcENvbnRleHQ+O1xuXG4gIEBJbnB1dCgpIHhQbG90TGluZXM6IFhQbG90TGluZXM7XG5cbiAgQElucHV0KCkgeFBsb3RFbXB0eTogYm9vbGVhbjtcblxuICBAT2JzZXJ2YWJsZUlucHV0KClcbiAgeFBsb3RMaW5lcyQhOiBPYnNlcnZhYmxlPFhQbG90TGluZXM+O1xuXG4gIEBPYnNlcnZhYmxlSW5wdXQoKVxuICBjaGFydFN0YXR1cyQhOiBPYnNlcnZhYmxlPENoYXJ0U3RhdHVzPjtcblxuICBAT3V0cHV0KCkgbW91c2VVcEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxBcmVhUG9zaXRpb24+KCk7XG5cbiAgQE91dHB1dCgpIG1hcmtDbGlja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxUb29sdGlwQ29udGV4dD4oKTtcblxuICBAT3V0cHV0KCkgcmVmcmVzaEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgb25EZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgX2NoYXJ0U3RhdHVzJCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENoYXJ0U3RhdHVzPih7XG4gICAgbG9hZGluZzogdHJ1ZSxcbiAgICBub0RhdGE6IGZhbHNlLFxuICAgIGZhaWxlZDogZmFsc2UsXG4gICAgbm9MZWdlbmQ6IGZhbHNlLFxuICB9KTtcblxuICBfc3RhdHVzOiBDaGFydFN0YXR1cyA9IHt9O1xuXG4gIGNoYXJ0OiBDaGFydDtcblxuICBjaGFydFJlYWN0aXZlOiBDaGFydE9wdGlvbjtcblxuICBhcmVhUG9zaXRpb246IEFyZWFQb3NpdGlvbiA9IHtcbiAgICB4MTogMCxcbiAgICB4MjogMCxcbiAgICBzdGFydFg6IDAsXG4gICAgZW5kWDogMCxcbiAgfTtcblxuICBzdGF0dXMkID0gbWVyZ2UodGhpcy5jaGFydFN0YXR1cyQsIHRoaXMuX2NoYXJ0U3RhdHVzJCQpLnBpcGUoXG4gICAgbWFwKHN0YXR1cyA9PiAoe1xuICAgICAgLi4udGhpcy5fc3RhdHVzLFxuICAgICAgLi4uc3RhdHVzLFxuICAgIH0pKSxcbiAgICB0YXAoc3RhdHVzID0+IHtcbiAgICAgIHRoaXMuX3N0YXR1cyA9IHN0YXR1cztcbiAgICB9KSxcbiAgICBwdWJsaXNoUmVmKCksXG4gICk7XG5cbiAgZ2V0IGJhY2tncm91bmQoKSB7XG4gICAgcmV0dXJuIHRoaXMuYmFja2dyb3VuZENvbG9yO1xuICB9XG5cbiAgaXNUZW1wbGF0ZVJlZiA9IGlzVGVtcGxhdGVSZWY7XG5cbiAgY3VzdG9tTGVnZW5kUmVmOiBDb21wb25lbnRSZWY8TGVnZW5kQ29tcG9uZW50PjtcblxuICBjdXN0b21UaXRsZVJlZjogRW1iZWRkZWRWaWV3UmVmPHVua25vd24+O1xuXG4gIGN1c3RvbVBpZUxhYmVsVGV4dFJlZjogRW1iZWRkZWRWaWV3UmVmPHVua25vd24+O1xuXG4gIHRvb2x0aXBJdGVtQ29udGV4dDogeyBjb250ZXh0OiBUb29sdGlwVmFsdWVbXSB9ID0geyBjb250ZXh0OiBbXSB9O1xuXG4gIHRvb2x0aXBUaXRsZUNvbnRleHQ6IHsgY29udGV4dDogeyB0aXRsZTogc3RyaW5nOyB2YWx1ZXM6IFRvb2x0aXBWYWx1ZVtdIH0gfSA9XG4gICAgeyBjb250ZXh0OiBudWxsIH07XG5cbiAgZ2V0IGlzQ2FyZE1vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gJ2NhcmQnO1xuICB9XG5cbiAgZ2V0IHNjYWxlVHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy54U2NhbGVUeXBlIHx8IFNjYWxlVHlwZS5USU1FO1xuICB9XG5cbiAgZ2V0IGlzU2NhbGVUaW1lKCkge1xuICAgIHJldHVybiB0aGlzLnNjYWxlVHlwZSA9PT0gU2NhbGVUeXBlLlRJTUU7XG4gIH1cblxuICBnZXQgY2hhcnRFbCgpIHtcbiAgICByZXR1cm4gdGhpcy5jaGFydENvbnRhaW5lci5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICB9XG5cbiAgZ2V0IG9wdGlvbnMoKTogT3B0aW9ucyB7XG4gICAgY29uc3QgZGVmYXVsdFhBeGlzVGlja0Zvcm1hdHRlciA9IHRoaXMuaXNTY2FsZVRpbWVcbiAgICAgID8gKHZhbHVlOiBzdHJpbmcpID0+XG4gICAgICAgICAgZGF5anMoK3ZhbHVlKS5mb3JtYXQodGhpcy5kYXRlQXhpc0xhYmVsRm9ybWF0cyB8fCBEQVRFX1RJTUVfRk9STUFUKVxuICAgICAgOiBudWxsO1xuICAgIGNvbnN0IHhBeGlzVGlja0Zvcm1hdHRlciA9XG4gICAgICB0aGlzLnhBeGlzVGlja0Zvcm1hdHRlciB8fCBkZWZhdWx0WEF4aXNUaWNrRm9ybWF0dGVyO1xuICAgIHJldHVybiB7XG4gICAgICB0aXRsZTpcbiAgICAgICAgdGhpcy5oaWRlVGl0bGUgfHwgdGhpcy5oaWRlSGVhZGVyXG4gICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICB0ZXh0OiB0aGlzLnRpdGxlIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgY3VzdG9tOiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgIGxlZ2VuZDogdGhpcy5oaWRlSGVhZGVyXG4gICAgICAgID8gZmFsc2VcbiAgICAgICAgOiB7XG4gICAgICAgICAgICBjdXN0b206IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgIHNjYWxlOiB7XG4gICAgICAgIHg6IHtcbiAgICAgICAgICB0aW1lOiAhIXRoaXMuaXNTY2FsZVRpbWUsXG4gICAgICAgIH0sXG4gICAgICAgIHk6IHtcbiAgICAgICAgICAuLi4odGhpcy5zY2FsZVlNaW4gJiYgeyBtaW46IHRoaXMuc2NhbGVZTWluIH0pLFxuICAgICAgICAgIC4uLih0aGlzLnNjYWxlWU1heCAmJiB7IG1heDogdGhpcy5zY2FsZVlNYXggfSksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYXhpczoge1xuICAgICAgICB4OiB7XG4gICAgICAgICAgZm9ybWF0dGVyOiB4QXhpc1RpY2tGb3JtYXR0ZXIsXG4gICAgICAgIH0sXG4gICAgICAgIHk6IHtcbiAgICAgICAgICBmb3JtYXR0ZXI6XG4gICAgICAgICAgICB0aGlzLnlBeGlzVGlja0Zvcm1hdHRlciB8fFxuICAgICAgICAgICAgKCh2YWx1ZTogbnVtYmVyIHwgc3RyaW5nKSA9PlxuICAgICAgICAgICAgICBgJHt0aGlzLmNvbnZlcnNpb25NYXhpbXVtKHZhbHVlKX0ke3RoaXMueUF4aXNUaWNrU3VmZml4IHx8ICcnfWApLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHRvb2x0aXA6IHRoaXMudG9vbHRpcEhpZGVcbiAgICAgICAgPyBmYWxzZVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIHBvcHVwQ29udGFpbmVyOiB0aGlzLnRvb2x0aXBBcHBlbmRUb0JvZHkgPyBudWxsIDogdGhpcy5jaGFydEVsLFxuICAgICAgICAgICAgc2hvd1RpdGxlOiAhdGhpcy50b29sdGlwSGlkZVRpdGxlLFxuICAgICAgICAgICAgdGl0bGVGb3JtYXR0ZXI6IHRoaXMudGl0bGVGb3JtYXR0ZXIsXG4gICAgICAgICAgICBpdGVtRm9ybWF0dGVyOiAoY29udGV4dDogVG9vbHRpcFZhbHVlW10pID0+IHtcbiAgICAgICAgICAgICAgdGhpcy50b29sdGlwSXRlbUNvbnRleHQgPSB0aGlzLm1lcmdlUG9pbnRDb250ZXh0KGNvbnRleHQpO1xuICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnRvb2x0aXBQb2ludFRlbXBsYXRlXG4gICAgICAgICAgICAgICAgPyB0aGlzLnRvb2x0aXBJdGVtVmlydHVhbC5uYXRpdmVFbGVtZW50LmlubmVySFRNTFxuICAgICAgICAgICAgICAgIDogdGhpcy50b29sdGlwSXRlbUNvbnRleHQuY29udGV4dDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuYW1lRm9ybWF0dGVyOiAobmFtZTogc3RyaW5nKSA9PlxuICAgICAgICAgICAgICB0aGlzLnRvb2x0aXBUcmFuc2xhdGlvbiA/IHRoaXMudHJhbnNsYXRlLmdldChuYW1lKSA6IG5hbWUsXG4gICAgICAgICAgICB2YWx1ZUZvcm1hdHRlcjogdGhpcy52YWx1ZUZvcm1hdHRlcixcbiAgICAgICAgICAgIHNvcnQ6XG4gICAgICAgICAgICAgIHRoaXMudG9vbHRpcFNvcnRNZXRob2QgfHwgdGhpcy50b29sdGlwQXV0b1NvcnRcbiAgICAgICAgICAgICAgICA/IHRoaXMudG9vbHRpcFNvcnRNZXRob2RcbiAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgY2FjaGVEYXRhOiBEYXRhID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFwcFJlZjogQXBwbGljYXRpb25SZWYsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRoZW1lOiBUaGVtZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICkge31cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5yb3RhdGVkJCwgdGhpcy5jaGFydFR5cGUkLCB0aGlzLnN0ZXBMaW5lJF0pLnN1YnNjcmliZShcbiAgICAgICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY2hhcnQpIHtcbiAgICAgICAgICB0aGlzLnJlSW5pdCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZUluaXQoKTtcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICApO1xuICAgIGlmICghdGhpcy5jaGFydCkge1xuICAgICAgdGhpcy5jaGFydEluaXQoKTtcbiAgICB9XG4gIH1cblxuICByZUluaXQoKSB7XG4gICAgdGhpcy5uZ09uRGVzdHJveSgpO1xuICAgIHRoaXMuY2hhcnRJbml0KCk7XG4gIH1cblxuICBjaGFydEluaXQoKSB7XG4gICAgaWYgKHRoaXMuY2hhcnRUeXBlID09PSAnc3RhdCcpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmFkZEN1c3RvbUxlZ2VuZCgpO1xuICAgICAgfSwgMCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY2hhcnQgPSBuZXcgQ2hhcnQoe1xuICAgICAgY29udGFpbmVyOlxuICAgICAgICB0aGlzLmNoYXJ0Q29udGFpbmVyPy5uYXRpdmVFbGVtZW50IHx8XG4gICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuYWMtY2hhcnQtY29udGFpbmVyJyksXG4gICAgICBwYWRkaW5nOiBbMTYsIDEyLCAyLCAwXSxcbiAgICAgIG9wdGlvbnM6IHRoaXMub3B0aW9ucyxcbiAgICAgIGRhdGE6IFtdLFxuICAgIH0pO1xuICAgIHRoaXMuY2hhcnRSZWFjdGl2ZSA9IHRoaXMuY2hhcnQucmVhY3RpdmUoKSBhcyBDaGFydE9wdGlvbjtcbiAgICB0aGlzLmhhbmRsZU9wdGlvbnNSZWFjdGl2ZSgpO1xuICAgIHRoaXMudGhlbWUuY3VycmVudFRoZW1lJFxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMub25EZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKHR5cGUgPT4ge1xuICAgICAgICB0aGlzLmNoYXJ0LnRoZW1lKHR5cGUpO1xuICAgICAgfSk7XG4gICAgdGhpcy5lbmFibGVab29tJC5waXBlKHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZW5hYmxlWm9vbSkge1xuICAgICAgICB0aGlzLmNoYXJ0LmludGVyYWN0aW9uKCdicnVzaC14Jywge1xuICAgICAgICAgIGVuZDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0cmlnZ2VyOiBDaGFydEV2ZW50LlBMT1RfTU9VU0VVUCxcbiAgICAgICAgICAgICAgYWN0aW9uOiBBY3Rpb25UeXBlLkJSVVNIX1hfRU5ELFxuICAgICAgICAgICAgICBjYWxsYmFjazogKGU6IEJydXNoQ29udGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubW91c2VVcEV2ZW50Lm5leHQoe1xuICAgICAgICAgICAgICAgICAgc3RhcnRYOiBlLnN0YXJ0LFxuICAgICAgICAgICAgICAgICAgZW5kWDogZS5lbmQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICh0aGlzLmNoYXJ0VHlwZSA9PT0gJ2xpbmUnIHx8IHRoaXMuc3RlcExpbmUpIHtcbiAgICAgIHRoaXMuc3RlcExpbmUgPyB0aGlzLmNoYXJ0LmxpbmUoKS5zdGVwKCdzdGFydCcpIDogdGhpcy5jaGFydC5saW5lKCk7XG4gICAgfSBlbHNlXG4gICAgICBzd2l0Y2ggKHRoaXMuY2hhcnRUeXBlKSB7XG4gICAgICAgIGNhc2UgJ2FyZWEnOiB7XG4gICAgICAgICAgdGhpcy5jaGFydC5hcmVhKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAncG9pbnQnOiB7XG4gICAgICAgICAgdGhpcy5jaGFydC5wb2ludCgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ2Jhcic6IHtcbiAgICAgICAgICBpZiAodGhpcy5iYXJUeXBlID09PSAnc3RhY2tlZCcpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhcnQuYmFyKCkuYWRqdXN0KHsgdHlwZTogJ3N0YWNrJyB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jaGFydC5iYXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBpZiAodGhpcy5yb3RhdGVkKSB7XG4gICAgICB0aGlzLmNoYXJ0LmNvb3JkaW5hdGUoKS50cmFuc3Bvc2UoKTtcbiAgICB9XG4gICAgdGhpcy5jaGFydC5yZW5kZXIoKTtcbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLnNlcmllcyQsIHRoaXMueFBsb3RMaW5lcyQucGlwZShzdGFydFdpdGgobnVsbCkpXSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpLCBkZWJvdW5jZVRpbWUoMjAwKSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoW2RhdGEsIHJlc10pID0+IHtcbiAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5oYW5kZWxEYXRhKGRhdGEpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB2YWx1ZXMuZmlsdGVyKGQgPT4gZC5uYW1lKS5sZW5ndGggJiZcbiAgICAgICAgICAgICAgdmFsdWVzXG4gICAgICAgICAgICAgICAgLm1hcCh2ID0+IHYubmFtZSlcbiAgICAgICAgICAgICAgICAuc29tZShkID0+ICF0aGlzLmNhY2hlRGF0YS5tYXAoYyA9PiBjLm5hbWUpLmluY2x1ZGVzKGQpKSAmJlxuICAgICAgICAgICAgICB0aGlzLmNhY2hlRGF0YS5sZW5ndGhcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLnJlSW5pdCgpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmFsdWVzPy5bMF0/Lm5hbWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5jYWNoZURhdGEgPSB2YWx1ZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmNoYXJ0Py5kYXRhKHZhbHVlcyBhcyBhbnkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmFkZEN1c3RvbVRpdGxlKCk7XG4gICAgICAgICAgICBjb25zdCBub0RhdGEgPSBoYXNOb0RhdGEodmFsdWVzKTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGVsQ2hhcnRTdGF0dXMoe1xuICAgICAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgbm9EYXRhLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAocmVzICYmICFub0RhdGEpIHtcbiAgICAgICAgICAgICAgdGhpcy5jaGFydD8uYW5ub3RhdGlvbigpLmxpbmVZKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGRhdGE6IHJlcz8udmFsdWUsXG4gICAgICAgICAgICAgICAgICB0ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHJlcz8udGV4dCB8fCBTdHJpbmcocmVzPy52YWx1ZSksXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGhpcy54UGxvdEVtcHR5LFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5jaGFydD8ucmVuZGVyKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBsZWdlbmQgPSB0aGlzLmNoYXJ0Py5jb21wb25lbnRzPy5nZXQoJ2xlZ2VuZCcpIGFzIExlZ2VuZDtcbiAgICAgICAgICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPiAwICYmIGxlZ2VuZD8uaW5hY3RpdmF0ZWRTZXQ/LnNpemUgPiAwKSB7XG4gICAgICAgICAgICAgICAgbGVnZW5kLmluYWN0aXZhdGVkU2V0LmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgbGVnID0gbGVnZW5kXG4gICAgICAgICAgICAgICAgICAgIC5nZXRMZWdlbmQoKVxuICAgICAgICAgICAgICAgICAgICAuZmluZChpdGVtID0+IGl0ZW0ubmFtZSA9PT0gdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgaWYgKGxlZykge1xuICAgICAgICAgICAgICAgICAgICBsZWdlbmQubGVnZW5kSXRlbUNsaWNrKHtcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBsZWcubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICBhY3RpdmF0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY29udGV4dENhbGxiYWNrRnVuY3Rpb24gJiYgIXRoaXMuY2FsbGJhY2tGaXJzdCkge1xuICAgICAgICB0aGlzLmNhbGxiYWNrRmlyc3QgPSB0cnVlO1xuICAgICAgICB0aGlzLmNvbnRleHRDYWxsYmFja0Z1bmN0aW9uKHRoaXMuY2hhcnQpO1xuICAgICAgfVxuICAgIH0sIDApO1xuICAgIHRoaXMuY2hhcnQub24oQ2hhcnRFdmVudC5QTE9UX0NMSUNLLCAodmFsdWU6IFRvb2x0aXBDb250ZXh0KSA9PiB7XG4gICAgICB0aGlzLm1hcmtDbGlja0V2ZW50Lm5leHQodmFsdWUpO1xuICAgIH0pO1xuICAgIHRoaXMueVBsb3RMaW5lcyQucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICBpZiAocmVzKSB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jaGFydC5hbm5vdGF0aW9uKCkubGluZVgoe1xuICAgICAgICAgICAgZGF0YTogcmVzLnRpdGxlIGFzIHN0cmluZyxcbiAgICAgICAgICAgIHRleHQ6IHtcbiAgICAgICAgICAgICAgY29udGVudDogZGF5anMocmVzLnRpdGxlKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3MnKSxcbiAgICAgICAgICAgICAgYm9yZGVyOiB7XG4gICAgICAgICAgICAgICAgc3R5bGU6IGAxcHggc29saWQgJHtyZ2JDb2xvcignbi03Jyl9YCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuYWRkQ3VzdG9tTGVnZW5kKCk7XG4gIH1cblxuICBoYW5kZWxEYXRhKGRhdGE6IENoYXJ0RGF0YVtdKSB7XG4gICAgcmV0dXJuIGRhdGEubWFwKGQgPT4gKHtcbiAgICAgIC4uLmQsXG4gICAgICB2YWx1ZXM6IGQudmFsdWVzPy5tYXAodiA9PiAoe1xuICAgICAgICAuLi52LFxuICAgICAgICB4OiB0aGlzLnhBY2Nlc3Nvcih2KSxcbiAgICAgICAgeTogdGhpcy55QWNjZXNzb3IodiksXG4gICAgICB9KSksXG4gICAgfSkpO1xuICB9XG5cbiAgYWRkQ3VzdG9tTGVnZW5kKCkge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9XG4gICAgICB0aGlzLmNoYXJ0VHlwZSA9PT0gJ3N0YXQnID8gdGhpcy5lbC5uYXRpdmVFbGVtZW50IDogdGhpcy5jaGFydEVsO1xuICAgIGNvbnN0IGRvbSA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKGAuYWNoYXJ0LWxlZ2VuZGApO1xuICAgIGlmIChkb20gJiYgIXRoaXMuaGlkZUhlYWRlcikge1xuICAgICAgZG9tLmlubmVySFRNTCA9ICcnO1xuICAgICAgY29uc3QgcCA9IG5ldyBDb21wb25lbnRQb3J0YWwoTGVnZW5kQ29tcG9uZW50KTtcbiAgICAgIGNvbnN0IG8gPSBuZXcgRG9tUG9ydGFsT3V0bGV0KFxuICAgICAgICBkb20sXG4gICAgICAgIHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgICAgICB0aGlzLmFwcFJlZixcbiAgICAgICAgdGhpcy5pbmplY3RvcixcbiAgICAgICk7XG4gICAgICB0aGlzLmN1c3RvbUxlZ2VuZFJlZiA9IHAuYXR0YWNoKG8pO1xuICAgICAgdGhpcy5jdXN0b21MZWdlbmRSZWYuaW5zdGFuY2UuY2hhcnQgPSB0aGlzLmNoYXJ0O1xuICAgICAgdGhpcy5jdXN0b21MZWdlbmRSZWYuaW5zdGFuY2Uuc3ltYm9sID0gWydiYXInLCAncGllJywgJ3NjYXR0ZXInXS5pbmNsdWRlcyhcbiAgICAgICAgdGhpcy5jaGFydFR5cGUsXG4gICAgICApXG4gICAgICAgID8gJ2NpcmNsZSdcbiAgICAgICAgOiAnbGluZSc7XG4gICAgICB0aGlzLmxlZnRPcGVyYXRpb24kLnBpcGUodGFrZVVudGlsKHRoaXMub25EZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuY3VzdG9tTGVnZW5kUmVmLmluc3RhbmNlLmxlZnRPcGVyYXRpb24gPSB0aGlzLmxlZnRPcGVyYXRpb247XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5sZWZ0T3BlcmF0aW9uQ29udGV4dCRcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMub25EZXN0cm95JCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY3VzdG9tTGVnZW5kUmVmLmluc3RhbmNlLmxlZnRPcGVyYXRpb25Db250ZXh0ID1cbiAgICAgICAgICAgIHRoaXMubGVmdE9wZXJhdGlvbkNvbnRleHQ7XG4gICAgICAgIH0pO1xuXG4gICAgICB0aGlzLnJpZ2h0T3BlcmF0aW9uJC5waXBlKHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmN1c3RvbUxlZ2VuZFJlZi5pbnN0YW5jZS5yaWdodE9wZXJhdGlvbiA9IHRoaXMucmlnaHRPcGVyYXRpb247XG4gICAgICAgIHRoaXMuY3VzdG9tTGVnZW5kUmVmLmluc3RhbmNlLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5jdXN0b21MZWdlbmRSZWYuaW5zdGFuY2UubW9kZSA9IHRoaXMubW9kZTtcbiAgICAgIHRoaXMuY3VzdG9tTGVnZW5kUmVmLmluc3RhbmNlLmhpZGVMZWdlbmQgPSB0aGlzLmhpZGVMZWdlbmQ7XG4gICAgICB0aGlzLmN1c3RvbUxlZ2VuZFJlZi5pbnN0YW5jZS5zZWxlY3RBbGxOYW1lID0gdGhpcy5sZWdlbmRTZWxlY3RBbGxOYW1lO1xuICAgICAgdGhpcy5jdXN0b21MZWdlbmRSZWYuaW5zdGFuY2Uuc2VsZWN0QWxsT3BlcmF0aW9uID1cbiAgICAgICAgdGhpcy5sZWdlbmRTZWxlY3RBbGxPcGVyYXRpb247XG4gICAgICB0aGlzLmN1c3RvbUxlZ2VuZFJlZi5pbnN0YW5jZS50ZW1wbGF0ZSA9IHRoaXMubGVnZW5kVGVtcGxhdGU7XG4gICAgICB0aGlzLmN1c3RvbUxlZ2VuZFJlZi5pbnN0YW5jZS5jaGFuZ2VMZWdlbmRcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMub25EZXN0cm95JCkpXG4gICAgICAgIC5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICB0aGlzLmhhbmRlbENoYXJ0U3RhdHVzKHtcbiAgICAgICAgICAgIG5vTGVnZW5kOiByZXMuZXZlcnkoaXRlbSA9PiAhaXRlbS5hY3RpdmF0ZSksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFkZEN1c3RvbVRpdGxlKCkge1xuICAgIGNvbnN0IGRvbSA9IChcbiAgICAgIHRoaXMuY2hhcnRDb250YWluZXIubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudFxuICAgICkucXVlcnlTZWxlY3RvcihgLmFjaGFydC10aXRsZWApO1xuICAgIGlmIChkb20gJiYgIXRoaXMuaGlkZUhlYWRlcikge1xuICAgICAgZG9tLmlubmVySFRNTCA9ICcnO1xuICAgICAgY29uc3QgcCA9IG5ldyBUZW1wbGF0ZVBvcnRhbCh0aGlzLnRpdGxlQ29udGFpbmVyLCB0aGlzLnZpZXdDb250YWluZXJSZWYpO1xuICAgICAgY29uc3QgbyA9IG5ldyBEb21Qb3J0YWxPdXRsZXQoXG4gICAgICAgIGRvbSxcbiAgICAgICAgdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgICAgIHRoaXMuYXBwUmVmLFxuICAgICAgICB0aGlzLmluamVjdG9yLFxuICAgICAgKTtcbiAgICAgIHRoaXMuY3VzdG9tVGl0bGVSZWYgPSBwLmF0dGFjaChvKTtcbiAgICB9XG4gIH1cblxuICBhZGRQaWVMYWJlbFRleHQoY2hhcnRVSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGRvbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC4ke2NoYXJ0VUlkfSAuYWMtcGllLWd1aWRlYCk7XG4gICAgaWYgKCF0aGlzLmN1c3RvbVBpZUxhYmVsVGV4dFJlZiAmJiBkb20gJiYgdGhpcy5waWVMYWJlbFRleHQpIHtcbiAgICAgIGNvbnN0IHAgPSBuZXcgVGVtcGxhdGVQb3J0YWwoXG4gICAgICAgIHRoaXMucGllTGFiZWxDb250YWluZXIsXG4gICAgICAgIHRoaXMudmlld0NvbnRhaW5lclJlZixcbiAgICAgICk7XG4gICAgICBjb25zdCBvID0gbmV3IERvbVBvcnRhbE91dGxldChcbiAgICAgICAgZG9tLFxuICAgICAgICB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICAgICAgdGhpcy5hcHBSZWYsXG4gICAgICAgIHRoaXMuaW5qZWN0b3IsXG4gICAgICApO1xuICAgICAgdGhpcy5jdXN0b21QaWVMYWJlbFRleHRSZWYgPSBwLmF0dGFjaChvKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZU9wdGlvbnNSZWFjdGl2ZSgpIHtcbiAgICB0aGlzLnRvb2x0aXBIaWRlJFxuICAgICAgLnBpcGUoc2tpcCgxKSwgdGFrZVVudGlsKHRoaXMub25EZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKGhpZGUgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuY2hhcnRSZWFjdGl2ZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoYXJ0UmVhY3RpdmUub3B0aW9ucy50b29sdGlwID0gaGlkZSA/ICFoaWRlIDoge307XG4gICAgICB9KTtcblxuICAgIHRoaXMuaGlkZUxlZ2VuZCQucGlwZShza2lwKDEpLCB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuYWRkQ3VzdG9tTGVnZW5kKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnRvb2x0aXBTb3J0TWV0aG9kJFxuICAgICAgLnBpcGUoc2tpcCgxKSwgdGFrZVVudGlsKHRoaXMub25EZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKHRvb2x0aXBTb3J0TWV0aG9kID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmNoYXJ0UmVhY3RpdmUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY2hhcnRSZWFjdGl2ZS5vcHRpb25zLnRvb2x0aXApIHtcbiAgICAgICAgICAodGhpcy5jaGFydFJlYWN0aXZlLm9wdGlvbnMudG9vbHRpcCBhcyBUb29sdGlwT3B0KS5zb3J0ID1cbiAgICAgICAgICAgIHRvb2x0aXBTb3J0TWV0aG9kIHx8IHRoaXMudG9vbHRpcEF1dG9Tb3J0XG4gICAgICAgICAgICAgID8gdG9vbHRpcFNvcnRNZXRob2RcbiAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHJlZnJlc2goKSB7XG4gICAgdGhpcy5yZWZyZXNoRXZlbnQubmV4dChudWxsKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuY2FsbGJhY2tGaXJzdCA9IGZhbHNlO1xuICAgIHRoaXMuY2FjaGVEYXRhID0gW107XG4gICAgdGhpcy5jaGFydD8uZGVzdHJveSgpO1xuICAgIHRoaXMuY2hhcnQgPSBudWxsO1xuICAgIHRoaXMub25EZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5jdXN0b21MZWdlbmRSZWY/LmRlc3Ryb3koKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgbWVyZ2VQb2ludENvbnRleHQgPSAoY29udGV4dDogVG9vbHRpcFZhbHVlW10pID0+ICh7XG4gICAgY29udGV4dDogdGhpcy5saW1pdE1heENvbnRleHQoY29udGV4dCksXG4gICAgLi4uKHRoaXMudG9vbHRpcFBvaW50VGVtcGxhdGVDb250ZXh0IGFzIFN0cmluZ01hcCksXG4gIH0pO1xuXG4gIHByaXZhdGUgaGFuZGVsQ2hhcnRTdGF0dXMoc3RhdHVzOiBDaGFydFN0YXR1cykge1xuICAgIHRoaXMuX2NoYXJ0U3RhdHVzJCQubmV4dCh7XG4gICAgICAuLi5zdGF0dXMsXG4gICAgfSk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBsaW1pdE1heENvbnRleHQoY29udGV4dDogVG9vbHRpcFZhbHVlW10sIGxpbWl0ID0gMTUpIHtcbiAgICByZXR1cm4gY29udGV4dC5zbGljZSgwLCBsaW1pdCk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRQb2ludEZvcm1hdCA9IHBvaW50Rm9ybWF0O1xuXG4gIHByaXZhdGUgY29udmVyc2lvbk1heGltdW0odmFsdWU6IG51bWJlciB8IHN0cmluZykge1xuICAgIGNvbnN0IHVuaXQgPSAnayc7XG4gICAgY29uc3QgZGF0YSA9IE51bWJlcih2YWx1ZSkgfHwgMDtcbiAgICBpZiAoZGF0YSA+PSAxMDAwKSB7XG4gICAgICBjb25zdCBudW0gPSArKGRhdGEgLyAxMDAwKS50b0ZpeGVkKDIpO1xuICAgICAgcmV0dXJuIGAke251bX0ke3VuaXR9YDtcbiAgICB9XG4gICAgcmV0dXJuICcnICsgdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IHRpdGxlRm9ybWF0dGVyID0gKHZhbHVlOiBzdHJpbmcsIHZhbHVlczogVG9vbHRpcFZhbHVlW10pID0+IHtcbiAgICB0aGlzLnRvb2x0aXBUaXRsZUNvbnRleHQgPSB7IGNvbnRleHQ6IHsgdGl0bGU6IHZhbHVlLCB2YWx1ZXMgfSB9O1xuICAgIGNvbnN0IHRpdGxlID1cbiAgICAgIHRoaXMudG9vbHRpcFRyYW5zbGF0aW9uICYmICF0aGlzLnRvb2x0aXBUaXRsZVRlbXBsYXRlXG4gICAgICAgID8gdGhpcy50cmFuc2xhdGUuZ2V0KHZhbHVlKSB8fCB2YWx1ZVxuICAgICAgICA6IHZhbHVlO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIHJldHVybiB0aGlzLnRvb2x0aXBUaXRsZVRlbXBsYXRlXG4gICAgICA/IHRoaXMudG9vbHRpcFRpdGxlVmlydHVhbC5uYXRpdmVFbGVtZW50LmlubmVySFRNTFxuICAgICAgOiBoYW5kbGVEYXRlRm9ybWF0KHRpdGxlKTtcbiAgfTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHZhbHVlRm9ybWF0dGVyID0gKGRhdGE6IGFueSkgPT4ge1xuICAgIGNvbnN0IHJlcyA9IHRoaXMudG9vbHRpcFBvaW50Rm9ybWF0XG4gICAgICA/IHRoaXMudG9vbHRpcFBvaW50Rm9ybWF0KGRhdGEpXG4gICAgICA6IHRoaXMuZGVmYXVsdFBvaW50Rm9ybWF0KCtkYXRhKTtcbiAgICByZXR1cm4gdGhpcy5oaWRlVG9vbHRpcFVuaXQgJiYgIXRoaXMudW5pdFxuICAgICAgPyAocmVzIGFzIHN0cmluZylcbiAgICAgIDogYCR7cmVzfSAke3RoaXMudHJhbnNsYXRlLmdldCh0aGlzLnVuaXQpfWA7XG4gIH07XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwiYWMtY2hhcnRcIlxuICBbY2xhc3MuYWMtbm9uLWNoYXJ0XT1cImNoYXJ0VHlwZSA9PT0gJ3BpZSdcIlxuICBbc3R5bGUuYmFja2dyb3VuZF09XCJiYWNrZ3JvdW5kXCJcbj5cbiAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY2hhcnRUeXBlXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3N0YXQnXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic3RhdFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidHctZmxleFwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiYWNoYXJ0LXRpdGxlIHR3LWZsZXgtMSB0dy1icmVhay1hbGxcIlxuICAgICAgICAgICAgKm5nSWY9XCIhaGlkZUhlYWRlclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJ0aXRsZUNvbnRhaW5lclwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY2hhcnQtbGVnZW5kXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJzdGF0XCJcbiAgICAgICAgICAqbmdJZj1cInNlcmllcyQgfCBhc3luYyBhcyBzdGF0U2VyaWVzXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJib2R5XCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiaXRlbVwiXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIHN0YXRTZXJpZXNcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidmFsdWVcIj57eyAkYW55KGl0ZW0pLnZhbHVlIH19PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XG4gICAgICA8ZGl2XG4gICAgICAgICNjaGFydENvbnRhaW5lclxuICAgICAgICBjbGFzcz1cImFjLWNoYXJ0LWNvbnRhaW5lclwiXG4gICAgICAgIHN0eWxlPVwiaGVpZ2h0OiAxMDAlXCJcbiAgICAgID48L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPGRpdlxuICAgIGNsYXNzPVwiYWMtY2hhcnQtc3RhdHVzXCJcbiAgICAqbmdJZj1cInN0YXR1cyQgfCBhc3luYyBhcyBzdGF0dXNcIlxuICA+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJzdGF0dXMuZmFpbGVkICYmICFzdGF0dXMubG9hZGluZ1wiXG4gICAgICBjbGFzcz1cInN0YXR1cyBmYWlsZWRcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXN0b21FcnJvckNvbnRhaW5lcjsgZWxzZSBub0N1c3RvbUVycm9yQ29udGFpbmVyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY3VzdG9tRXJyb3JDb250YWluZXJcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNub0N1c3RvbUVycm9yQ29udGFpbmVyPlxuICAgICAgICA8YXVpLWljb25cbiAgICAgICAgICBpY29uPVwiZXhjbGFtYXRpb25fdHJpYW5nbGVfc1wiXG4gICAgICAgICAgYmFja2dyb3VuZD1cInRyaWFuZ2xlXCJcbiAgICAgICAgPjwvYXVpLWljb24+XG4gICAgICAgIHt7ICdmYWlsZWRfbG9hZF9wbGVhc2UnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBhdWktYnV0dG9uPVwidGV4dFwiXG4gICAgICAgICAgKGNsaWNrKT1cInJlZnJlc2goKVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyAoJ3JlZnJlc2gnIHwgdHJhbnNsYXRlKS50b0xvd2VyQ2FzZSgpIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cInN0YXR1cy5sb2FkaW5nXCJcbiAgICAgIGNsYXNzPVwic3RhdHVzIGxvYWRpbmdcIlxuICAgID5cbiAgICAgIDxhdWktaWNvbiBpY29uPVwic3Bpbm5lclwiPjwvYXVpLWljb24+IHt7ICdsb2FkaW5nJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwic3RhdHVzLm5vTGVnZW5kICYmICFzdGF0dXMubG9hZGluZyAmJiAhc3RhdHVzLm5vRGF0YVwiXG4gICAgICBjbGFzcz1cInN0YXR1cyBuby1sZWdlbmRcIlxuICAgID5cbiAgICAgIHt7ICdub19pbmRpY2F0b3Jfc2VsZWN0ZWQnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cInN0YXR1cy5ub0RhdGEgJiYgIXN0YXR1cy5sb2FkaW5nICYmICFzdGF0dXMuZmFpbGVkXCJcbiAgICAgIGNsYXNzPVwic3RhdHVzIG5vLWRhdGFcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICBjdXN0b21Ob0RhdGFUaXRsZSAmJiBpc1RlbXBsYXRlUmVmKGN1c3RvbU5vRGF0YVRpdGxlKTtcbiAgICAgICAgICBlbHNlIG5vRGF0YVRpdGxlVGVtcGxhdGVcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjdXN0b21Ob0RhdGFUaXRsZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctdGVtcGxhdGUgI25vRGF0YVRpdGxlVGVtcGxhdGU+XG4gICAgICAgIHt7IGN1c3RvbU5vRGF0YVRpdGxlIHx8ICgnbm9fZGF0YScgfCB0cmFuc2xhdGUpIH19XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIHRpdGxlIFRlbXBsYXRlIC0tPlxuPG5nLXRlbXBsYXRlICN0aXRsZUNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzVGVtcGxhdGVSZWYodGl0bGUpOyBlbHNlIFRpdGxlVGVtcGxhdGVcIj5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRpdGxlXCI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1RlbXBsYXRlUmVmKHRpdGxlRGVzY3JpcHRpb24pOyBlbHNlIFRpdGxlRGVzVGVtcGxhdGVcIj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0aXRsZURlc2NyaXB0aW9uXCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ0aXRsZURlc2NyaXB0aW9uQ29udGV4dFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjVGl0bGVUZW1wbGF0ZT5cbiAge3sgdGl0bGUgfX1cbiAge3sgdW5pdCA/ICcoJyArICh1bml0IHwgdHJhbnNsYXRlKSArICcpJyA6ICcnIH19XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI1RpdGxlRGVzVGVtcGxhdGU+XG4gIHt7IHRpdGxlRGVzY3JpcHRpb24gfX1cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gdG9vbHRpcCB0ZW1wbGF0ZSAtLT5cbjxkaXZcbiAgI3Rvb2x0aXBJdGVtVmlydHVhbFxuICBjbGFzcz1cImhpZGVcIlxuPlxuICA8bmctY29udGFpbmVyXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidG9vbHRpcFBvaW50VGVtcGxhdGVcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ0b29sdGlwSXRlbUNvbnRleHRcIlxuICA+PC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPGRpdlxuICAjdG9vbHRpcFRpdGxlVmlydHVhbFxuICBjbGFzcz1cImhpZGVcIlxuPlxuICA8bmctY29udGFpbmVyXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidG9vbHRpcFRpdGxlVGVtcGxhdGVcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ0b29sdGlwVGl0bGVDb250ZXh0XCJcbiAgPjwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxkaXZcbiAgI3Rvb2x0aXBOYW1lVmlydHVhbFxuICBjbGFzcz1cImhpZGVcIlxuPlxuICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRvb2x0aXBQb2ludE5hbWVUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjcGllTGFiZWxDb250YWluZXI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cInBpZUxhYmVsVGV4dCAmJiBpc1RlbXBsYXRlUmVmKHBpZUxhYmVsVGV4dCk7IGVsc2Ugc3RyaW5nUGllTGFiZWxUZXh0XCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwicGllTGFiZWxUZXh0XCI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctdGVtcGxhdGUgI3N0cmluZ1BpZUxhYmVsVGV4dD5cbiAgICB7eyBwaWVMYWJlbFRleHQgfX1cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
@@ -31,11 +31,11 @@ export class FieldSetItemComponent {
|
|
|
31
31
|
} if (rf & 2) {
|
|
32
32
|
i0.ɵɵadvance(3);
|
|
33
33
|
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction3(1, _c2, ctx.allowFullWidth, ctx.allowOverflow, ctx.allowWrap));
|
|
34
|
-
} }, dependencies: [NgClass, EffectDirectiveModule], styles: ["[_nghost-%COMP%]{display:flex;min-height:20px;line-height:20px;align-items:center;overflow:hidden;color:rgb(var(--aui-color-main-text));min-width:40%;flex:1}[_nghost-%COMP%] .field-set-item__label[_ngcontent-%COMP%]{white-space:nowrap;margin-right:8px;font-weight:500}[_nghost-%COMP%] .field-set-item__label[_ngcontent-%COMP%]:not(:empty):after{content:\":\";margin-left:2px}[_nghost-%COMP%] .field-set-item__value[_ngcontent-%COMP%]{display:flex;min-width:0;flex:1}[_nghost-%COMP%] .field-set-item__value__content[_ngcontent-%COMP%]{display:flex;min-width:0;overflow:hidden;white-space:nowrap}[_nghost-%COMP%] .field-set-item__value__content[_ngcontent-%COMP%] >*{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}[_nghost-%COMP%] .field-set-item__value__content[_ngcontent-%COMP%]
|
|
34
|
+
} }, dependencies: [NgClass, EffectDirectiveModule], styles: ["[_nghost-%COMP%]{display:flex;min-height:20px;line-height:20px;align-items:center;overflow:hidden;color:rgb(var(--aui-color-main-text));min-width:40%;flex:1}[_nghost-%COMP%] .field-set-item__label[_ngcontent-%COMP%]{white-space:nowrap;margin-right:8px;font-weight:500}[_nghost-%COMP%] .field-set-item__label[_ngcontent-%COMP%]:not(:empty):after{content:\":\";margin-left:2px}[_nghost-%COMP%] .field-set-item__value[_ngcontent-%COMP%]{display:flex;min-width:0;flex:1}[_nghost-%COMP%] .field-set-item__value__content[_ngcontent-%COMP%]{display:flex;min-width:0;overflow:hidden;white-space:nowrap}[_nghost-%COMP%] .field-set-item__value__content[_ngcontent-%COMP%] >*{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}[_nghost-%COMP%] .field-set-item__value__content[_ngcontent-%COMP%] *+.aui-button{margin-left:4px}[_nghost-%COMP%] .field-set-item__value__content[_ngcontent-%COMP%] aui-checkbox{display:inline-flex}[_nghost-%COMP%] .field-set-item__value__content__full-width[_ngcontent-%COMP%]{width:100%}[_nghost-%COMP%] .field-set-item__value__content__wrap[_ngcontent-%COMP%] >*{white-space:pre-wrap;flex-wrap:wrap}[_nghost-%COMP%] .field-set-item__value__action[_ngcontent-%COMP%]{white-space:nowrap}"], changeDetection: 0 }); }
|
|
35
35
|
}
|
|
36
36
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FieldSetItemComponent, [{
|
|
37
37
|
type: Component,
|
|
38
|
-
args: [{ selector: 'acl-field-set-item', preserveWhitespaces: false, changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgClass, EffectDirectiveModule], standalone: true, template: "<div class=\"field-set-item__label\">\n <ng-content select=\"label\"></ng-content>\n</div>\n<div class=\"field-set-item__value\">\n <div\n class=\"field-set-item__value__content\"\n [ngClass]=\"{\n 'field-set-item__value__content__full-width': allowFullWidth,\n 'field-set-item__value__content__overflow': allowOverflow,\n 'field-set-item__value__content__wrap': allowWrap\n }\"\n >\n <ng-content></ng-content>\n </div>\n <div class=\"field-set-item__value__action\">\n <ng-content select=\"[aclFieldSetItemAction]\"></ng-content>\n </div>\n</div>\n", styles: [":host{display:flex;min-height:20px;line-height:20px;align-items:center;overflow:hidden;color:rgb(var(--aui-color-main-text));min-width:40%;flex:1}:host .field-set-item__label{white-space:nowrap;margin-right:8px;font-weight:500}:host .field-set-item__label:not(:empty):after{content:\":\";margin-left:2px}:host .field-set-item__value{display:flex;min-width:0;flex:1}:host .field-set-item__value__content{display:flex;min-width:0;overflow:hidden;white-space:nowrap}:host .field-set-item__value__content ::ng-deep>*{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host .field-set-item__value__content ::ng-deep
|
|
38
|
+
args: [{ selector: 'acl-field-set-item', preserveWhitespaces: false, changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgClass, EffectDirectiveModule], standalone: true, template: "<div class=\"field-set-item__label\">\n <ng-content select=\"label\"></ng-content>\n</div>\n<div class=\"field-set-item__value\">\n <div\n class=\"field-set-item__value__content\"\n [ngClass]=\"{\n 'field-set-item__value__content__full-width': allowFullWidth,\n 'field-set-item__value__content__overflow': allowOverflow,\n 'field-set-item__value__content__wrap': allowWrap\n }\"\n >\n <ng-content></ng-content>\n </div>\n <div class=\"field-set-item__value__action\">\n <ng-content select=\"[aclFieldSetItemAction]\"></ng-content>\n </div>\n</div>\n", styles: [":host{display:flex;min-height:20px;line-height:20px;align-items:center;overflow:hidden;color:rgb(var(--aui-color-main-text));min-width:40%;flex:1}:host .field-set-item__label{white-space:nowrap;margin-right:8px;font-weight:500}:host .field-set-item__label:not(:empty):after{content:\":\";margin-left:2px}:host .field-set-item__value{display:flex;min-width:0;flex:1}:host .field-set-item__value__content{display:flex;min-width:0;overflow:hidden;white-space:nowrap}:host .field-set-item__value__content ::ng-deep>*{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host .field-set-item__value__content ::ng-deep *+.aui-button{margin-left:4px}:host .field-set-item__value__content ::ng-deep aui-checkbox{display:inline-flex}:host .field-set-item__value__content__full-width{width:100%}:host .field-set-item__value__content__wrap ::ng-deep>*{white-space:pre-wrap;flex-wrap:wrap}:host .field-set-item__value__action{white-space:nowrap}\n"] }]
|
|
39
39
|
}], null, { allowFullWidth: [{
|
|
40
40
|
type: Input
|
|
41
41
|
}], allowOverflow: [{
|
|
@@ -14,7 +14,9 @@ export declare class MultiSearchActionInputComponent extends BaseResourceFormCom
|
|
|
14
14
|
isEditing: boolean;
|
|
15
15
|
hidden: boolean;
|
|
16
16
|
hidden$: Observable<boolean>;
|
|
17
|
+
autoScroll: boolean;
|
|
17
18
|
conditionConfig: SearchConditionConfig[];
|
|
19
|
+
showFootAction: boolean;
|
|
18
20
|
conditionConfig$: Observable<SearchConditionConfig[]>;
|
|
19
21
|
existingConditions: SearchConditionModel[];
|
|
20
22
|
existingConditions$: Observable<SearchConditionModel[]>;
|
|
@@ -90,6 +92,7 @@ export declare class MultiSearchActionInputComponent extends BaseResourceFormCom
|
|
|
90
92
|
private changeToEditing;
|
|
91
93
|
inputFocus(): void;
|
|
92
94
|
inputKeydown(e: KeyboardEvent): void;
|
|
95
|
+
confirmSelection(): void;
|
|
93
96
|
private changeToEditingIfNeed;
|
|
94
97
|
private resolveTabEvent;
|
|
95
98
|
private resolveArrowEvent;
|
|
@@ -115,5 +118,5 @@ export declare class MultiSearchActionInputComponent extends BaseResourceFormCom
|
|
|
115
118
|
isConditionSelected(current: string, conditionsModel: string): boolean;
|
|
116
119
|
isValueSelected: (current: string, conditionsModel: string, condition: SearchConditionModel) => boolean;
|
|
117
120
|
static ɵfac: i0.ɵɵFactoryDeclaration<MultiSearchActionInputComponent, never>;
|
|
118
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<MultiSearchActionInputComponent, "acl-multi-search-action-input", never, { "placeholder": { "alias": "placeholder"; "required": false; }; "conditionCreatable": { "alias": "conditionCreatable"; "required": false; }; "isEditing": { "alias": "isEditing"; "required": false; }; "hidden": { "alias": "hidden"; "required": false; }; "conditionConfig": { "alias": "conditionConfig"; "required": false; }; "existingConditions": { "alias": "existingConditions"; "required": false; }; }, { "completed": "completed"; "editing": "editing"; "delete": "delete"; "search": "search"; }, never, never, true, never>;
|
|
121
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<MultiSearchActionInputComponent, "acl-multi-search-action-input", never, { "placeholder": { "alias": "placeholder"; "required": false; }; "conditionCreatable": { "alias": "conditionCreatable"; "required": false; }; "isEditing": { "alias": "isEditing"; "required": false; }; "hidden": { "alias": "hidden"; "required": false; }; "autoScroll": { "alias": "autoScroll"; "required": false; }; "conditionConfig": { "alias": "conditionConfig"; "required": false; }; "showFootAction": { "alias": "showFootAction"; "required": false; }; "existingConditions": { "alias": "existingConditions"; "required": false; }; }, { "completed": "completed"; "editing": "editing"; "delete": "delete"; "search": "search"; }, never, never, true, never>;
|
|
119
122
|
}
|
|
@@ -13,7 +13,10 @@ export declare class MultiSearchComponent implements OnDestroy {
|
|
|
13
13
|
conditions$: Observable<SearchCondition[]>;
|
|
14
14
|
conditionConfig: SearchConditionConfig[];
|
|
15
15
|
conditionConfig$: Observable<SearchConditionConfig[]>;
|
|
16
|
+
autoScroll: boolean;
|
|
17
|
+
searchSuffix: boolean;
|
|
16
18
|
search: EventEmitter<SearchCondition[]>;
|
|
19
|
+
showFootAction: boolean;
|
|
17
20
|
conditionsChange: EventEmitter<SearchCondition[]>;
|
|
18
21
|
normalInputComponent: MultiSearchActionInputComponent;
|
|
19
22
|
tagsComponent: MultiSearchTagsComponent;
|
|
@@ -59,5 +62,5 @@ export declare class MultiSearchComponent implements OnDestroy {
|
|
|
59
62
|
conditionInAction(condition: SearchConditionModel): boolean;
|
|
60
63
|
ngOnDestroy(): void;
|
|
61
64
|
static ɵfac: i0.ɵɵFactoryDeclaration<MultiSearchComponent, never>;
|
|
62
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<MultiSearchComponent, "acl-multi-search", never, { "placeholder": { "alias": "placeholder"; "required": false; }; "conditionCreatable": { "alias": "conditionCreatable"; "required": false; }; "conditions": { "alias": "conditions"; "required": false; }; "conditionConfig": { "alias": "conditionConfig"; "required": false; }; }, { "search": "search"; "conditionsChange": "conditionsChange"; }, never, never, true, never>;
|
|
65
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<MultiSearchComponent, "acl-multi-search", never, { "placeholder": { "alias": "placeholder"; "required": false; }; "conditionCreatable": { "alias": "conditionCreatable"; "required": false; }; "conditions": { "alias": "conditions"; "required": false; }; "conditionConfig": { "alias": "conditionConfig"; "required": false; }; "autoScroll": { "alias": "autoScroll"; "required": false; }; "searchSuffix": { "alias": "searchSuffix"; "required": false; }; "showFootAction": { "alias": "showFootAction"; "required": false; }; }, { "search": "search"; "conditionsChange": "conditionsChange"; }, never, never, true, never>;
|
|
63
66
|
}
|
|
@@ -7,6 +7,7 @@ export declare class MultiSearchTagsComponent {
|
|
|
7
7
|
conditionCreatable: boolean;
|
|
8
8
|
conditionConfig: SearchConditionConfig[];
|
|
9
9
|
existingConditions: SearchConditionModel[];
|
|
10
|
+
showFootAction: boolean;
|
|
10
11
|
removeCondition: EventEmitter<SearchConditionModel>;
|
|
11
12
|
setConditionEditing: EventEmitter<SearchConditionModel>;
|
|
12
13
|
setConditionDeleting: EventEmitter<number>;
|
|
@@ -22,5 +23,5 @@ export declare class MultiSearchTagsComponent {
|
|
|
22
23
|
getConditionLabel(condition: SearchConditionModel): string;
|
|
23
24
|
getValueContent(condition: SearchConditionModel): string;
|
|
24
25
|
static ɵfac: i0.ɵɵFactoryDeclaration<MultiSearchTagsComponent, never>;
|
|
25
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<MultiSearchTagsComponent, "acl-multi-search-tags", never, { "placeholder": { "alias": "placeholder"; "required": false; }; "conditionCreatable": { "alias": "conditionCreatable"; "required": false; }; "conditionConfig": { "alias": "conditionConfig"; "required": false; }; "existingConditions": { "alias": "existingConditions"; "required": false; }; }, { "removeCondition": "removeCondition"; "setConditionEditing": "setConditionEditing"; "setConditionDeleting": "setConditionDeleting"; "search": "search"; "completed": "completed"; }, never, ["*"], true, never>;
|
|
26
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<MultiSearchTagsComponent, "acl-multi-search-tags", never, { "placeholder": { "alias": "placeholder"; "required": false; }; "conditionCreatable": { "alias": "conditionCreatable"; "required": false; }; "conditionConfig": { "alias": "conditionConfig"; "required": false; }; "existingConditions": { "alias": "existingConditions"; "required": false; }; "showFootAction": { "alias": "showFootAction"; "required": false; }; }, { "removeCondition": "removeCondition"; "setConditionEditing": "setConditionEditing"; "setConditionDeleting": "setConditionDeleting"; "search": "search"; "completed": "completed"; }, never, ["*"], true, never>;
|
|
26
27
|
}
|
package/package.json
CHANGED
|
@@ -38,9 +38,8 @@ export type ProductEntryName = ValueOf<typeof ProductEntryName>;
|
|
|
38
38
|
export declare class CommonLayoutContextService {
|
|
39
39
|
private readonly k8sApi;
|
|
40
40
|
private readonly httpClient;
|
|
41
|
-
private readonly globalNamespace;
|
|
42
41
|
private readonly projectService;
|
|
43
|
-
constructor(k8sApi: K8sApiService, httpClient: HttpClient,
|
|
42
|
+
constructor(k8sApi: K8sApiService, httpClient: HttpClient, projectService: ProjectService);
|
|
44
43
|
getProjects(): Observable<Project[]>;
|
|
45
44
|
getProducts(): Observable<ProductEntry[]>;
|
|
46
45
|
getProduct(name: string): Observable<ProductEntry>;
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
--color-fg-default: #c9d1d9;
|
|
35
35
|
--color-fg-muted: #8b949e;
|
|
36
36
|
--color-fg-subtle: #484f58;
|
|
37
|
-
--color-canvas-default:
|
|
37
|
+
--color-canvas-default: transparent;
|
|
38
38
|
--color-canvas-subtle: #161b22;
|
|
39
39
|
--color-border-default: #30363d;
|
|
40
40
|
--color-border-muted: #21262d;
|
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
--color-fg-default: #24292f;
|
|
82
82
|
--color-fg-muted: #57606a;
|
|
83
83
|
--color-fg-subtle: #6e7781;
|
|
84
|
-
--color-canvas-default:
|
|
84
|
+
--color-canvas-default: transparent;
|
|
85
85
|
--color-canvas-subtle: #f6f8fa;
|
|
86
86
|
--color-border-default: #d0d7de;
|
|
87
87
|
--color-border-muted: hsl(210deg 18% 87% / 100%);
|
|
@@ -94,12 +94,14 @@
|
|
|
94
94
|
|
|
95
95
|
@include theme-light {
|
|
96
96
|
.markdown-body {
|
|
97
|
+
padding: 0;
|
|
97
98
|
@include markdown-theme-light;
|
|
98
99
|
}
|
|
99
100
|
}
|
|
100
101
|
|
|
101
102
|
@include theme-dark {
|
|
102
103
|
.markdown-body {
|
|
104
|
+
padding: 0;
|
|
103
105
|
@include markdown-theme-dark;
|
|
104
106
|
}
|
|
105
107
|
}
|
|
@@ -9,4 +9,5 @@ export declare function loadAvailableLanguages(): Promise<Array<{
|
|
|
9
9
|
}>>;
|
|
10
10
|
export declare function getAvailableLanguages(): DeepReadonly<typeof __availableLanguages>;
|
|
11
11
|
export declare function getUserLanguage(availableLanguages?: string[]): string;
|
|
12
|
+
export declare function isBuiltInLanguage(language: string): boolean;
|
|
12
13
|
export {};
|
|
@@ -12,11 +12,10 @@ export declare class TranslatePipe implements PipeTransform, OnDestroy {
|
|
|
12
12
|
private value;
|
|
13
13
|
private lastKey?;
|
|
14
14
|
private lastData?;
|
|
15
|
-
private lastRemoteLoaded?;
|
|
16
15
|
private onChange;
|
|
17
16
|
private readonly destroy$$;
|
|
18
17
|
constructor(injector: Injector);
|
|
19
|
-
transform(key: TranslateKey | any, data?: unknown
|
|
18
|
+
transform(key: TranslateKey | any, data?: unknown): string;
|
|
20
19
|
private updateValue;
|
|
21
20
|
private dispose;
|
|
22
21
|
ngOnDestroy(): void;
|