@veloceapps/sdk 7.0.2-51 → 7.0.2-53

Sign up to get free protection for your applications and to get access to all the features.
@@ -83,6 +83,18 @@ export class MetricsComponent {
83
83
  this.destroyed$.next();
84
84
  this.destroyed$.complete();
85
85
  }
86
+ toggleOverlay(event, overlay, target) {
87
+ event.stopPropagation();
88
+ if (this.restSelectedMetrics.length) {
89
+ if (!overlay.overlayVisible) {
90
+ document.dispatchEvent(new Event('click'));
91
+ }
92
+ overlay.toggle(event, target);
93
+ }
94
+ else {
95
+ this.openSidebar();
96
+ }
97
+ }
86
98
  openSidebar() {
87
99
  this.overlayPanel.hide();
88
100
  this.sidebarVisible = true;
@@ -129,6 +141,9 @@ export class MetricsComponent {
129
141
  }
130
142
  this.editingMetric = undefined;
131
143
  }
144
+ cancelMetric() {
145
+ this.editingMetric = undefined;
146
+ }
132
147
  resetToDefault() {
133
148
  this.collectAvailableMetrics(true);
134
149
  }
@@ -218,12 +233,12 @@ export class MetricsComponent {
218
233
  }
219
234
  }
220
235
  MetricsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: MetricsComponent, deps: [{ token: i1.ContextService }, { token: i1.QuoteDraftService }, { token: i0.ChangeDetectorRef }, { token: i1.MetricsCalculationService }, { token: i1.FlowConfigurationService }, { token: i2.ShoppingCartSettingsApiService }, { token: i1.RuntimeSettingsService }], target: i0.ɵɵFactoryTarget.Component });
221
- MetricsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: MetricsComponent, selector: "vl-metrics", viewQueries: [{ propertyName: "overlayPanel", first: true, predicate: OverlayPanel, descendants: true }], ngImport: i0, template: "<div class=\"header-metrics\" (click)=\"overlayPanel.toggle($event)\">\n <div *ngFor=\"let metric of visibleSelectedMetrics\" class=\"metric\">\n <span class=\"name\" [vlHiddenTextTooltip]=\"metric.name\" tooltipStyleClass=\"metric-tooltip\" tooltipPosition=\"bottom\">\n {{ metric.name }}\n </span>\n <span class=\"filler\"></span>\n <span\n class=\"value\"\n vlHiddenTextTooltip=\"{{ getMetricValue(metric.key) | vlPrice }}\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n {{ getMetricValue(metric.key) | vlPrice }}\n </span>\n </div>\n\n <ng-container *ngIf=\"!visibleSelectedMetrics.length\">\n <div *ngFor=\"let metric of emptyStateMetrics\" class=\"metric empty-state-metric\">\n <span\n class=\"name\"\n [vlHiddenTextTooltip]=\"metric.name\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n {{ metric.name }}\n </span>\n <span class=\"filler\"></span>\n <span\n class=\"value\"\n vlHiddenTextTooltip=\"{{ metric.value | vlPrice }}\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n {{ metric.value | vlPrice }}\n </span>\n </div>\n </ng-container>\n</div>\n\n<p-overlayPanel\n styleClass=\"metrics-overlay-container center no-padding\"\n showTransitionOptions=\"0ms\"\n hideTransitionOptions=\"0ms\"\n>\n <ng-template pTemplate>\n <div class=\"overlay-metrics\">\n <div *ngFor=\"let metric of restSelectedMetrics\" class=\"metric\">\n <span\n class=\"name\"\n [vlHiddenTextTooltip]=\"metric.name\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n {{ metric.name }}\n </span>\n <span class=\"filler\"></span>\n <span\n class=\"value\"\n vlHiddenTextTooltip=\"{{ getMetricValue(metric.key) | vlPrice }}\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n {{ getMetricValue(metric.key) | vlPrice }}\n </span>\n </div>\n </div>\n <button class=\"config\" (click)=\"openSidebar()\">\n Metrics Config\n <i class=\"vl-icon vl-icon-chevron-down\"></i>\n </button>\n </ng-template>\n</p-overlayPanel>\n\n<p-sidebar\n [visible]=\"sidebarVisible\"\n (visibleChange)=\"closeSidebar()\"\n position=\"right\"\n [baseZIndex]=\"1000\"\n [style]=\"{ width: '360px' }\"\n>\n <div class=\"container\">\n <div class=\"header\">\n Quote Metrics Config\n <i class=\"vl-icon vl-icon-close\" (click)=\"closeSidebar()\"></i>\n </div>\n\n <div class=\"search-container\">\n <input\n data-test-id=\"search\"\n [formControl]=\"searchControl\"\n pInputText\n placeholder=\"Search for metric\u2026\"\n class=\"w-full\"\n />\n </div>\n\n <div class=\"content\">\n <div class=\"sidebar-metrics\" cdkDropList (cdkDropListDropped)=\"changeMetricOrder($event)\">\n <div\n *ngFor=\"let metric of filteredMetrics\"\n class=\"sidebar-metric\"\n [class.edit]=\"metric.key === editingMetric?.key\"\n cdkDrag\n [cdkDragDisabled]=\"!!searchControl.value\"\n >\n <div class=\"drag-icon\">\n <i class=\"vl-icon vl-icon-reorder\" cdkDragHandle></i>\n </div>\n <ng-container\n [ngTemplateOutlet]=\"metricTemplate\"\n [ngTemplateOutletContext]=\"{ metric: metric }\"\n ></ng-container>\n </div>\n </div>\n\n <div class=\"empty-state\" *ngIf=\"!filteredMetrics.length\">There are no items matching your search criteria</div>\n </div>\n <div class=\"footer\">\n <p-button\n label=\"Reset to default\"\n styleClass=\"p-button-outlined p-button-sm\"\n (onClick)=\"resetToDefault()\"\n ></p-button>\n <p-button label=\"Save\" styleClass=\"p-button p-button-filled p-button-sm\" (onClick)=\"save()\"></p-button>\n </div>\n </div>\n</p-sidebar>\n\n<ng-template #metricTemplate let-metric=\"metric\">\n <div *ngIf=\"editingMetric?.key !== metric.key\" class=\"preview-state\">\n <p-checkbox\n [ngModel]=\"metric.visible\"\n (ngModelChange)=\"metric.visible = !metric.visible\"\n [binary]=\"true\"\n checkboxIcon=\"vl-icon vl-icon-checkmark\"\n ></p-checkbox>\n <div class=\"title\">{{ metric.name }}</div>\n </div>\n\n <div *ngIf=\"editingMetric?.key === metric.key\" class=\"edit-state\">\n <input data-test-id=\"name\" [formControl]=\"nameControl\" pInputText placeholder=\"Metric name\" class=\"w-full\" />\n <vl-error-tooltip [tooltip]=\"nameControl | error : 'name'\" [visible]=\"!!nameControl.errors\"></vl-error-tooltip>\n </div>\n <div *ngIf=\"editingMetric?.key !== metric.key\" (click)=\"editMetric(metric)\" class=\"action edit\">\n <i class=\"vl-icon vl-icon-edit-sm\"></i>\n </div>\n <div *ngIf=\"editingMetric?.key === metric.key\" (click)=\"saveMetric()\" class=\"action save\">\n <i class=\"vl-icon vl-icon-checkmark\"></i>\n </div>\n</ng-template>\n", styles: [":host .header-metrics{cursor:pointer;min-width:130px;max-width:260px;display:flex;flex-wrap:wrap;justify-content:flex-start;gap:0 16px;height:32px;align-items:flex-start}:host .header-metrics .metric{flex:1;flex-basis:114px;max-width:122px;display:flex;justify-content:space-between;align-items:flex-end;font-size:12px;line-height:16px;letter-spacing:.3px}:host .header-metrics .metric .name{max-width:55px;flex-shrink:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}:host .header-metrics .metric .value{font-weight:600;overflow:hidden;text-overflow:ellipsis}:host .header-metrics .metric.empty-state-metric{filter:blur(1.5px)}:host ::ng-deep .p-sidebar-header{display:none}:host ::ng-deep .p-sidebar-content{padding:0 24px;height:100%}::ng-deep .metrics-overlay-container{max-width:300px}::ng-deep .metrics-overlay-container .p-overlaypanel-content{padding:0}::ng-deep .metrics-overlay-container .overlay-metrics{max-height:110px;overflow:auto}::ng-deep .metrics-overlay-container .metric{display:flex;padding:0 12px;font-size:12px;line-height:16px;letter-spacing:.3px;align-items:flex-end}::ng-deep .metrics-overlay-container .metric .name{max-width:50%;flex-shrink:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}::ng-deep .metrics-overlay-container .metric .value{font-weight:600;overflow:hidden;text-overflow:ellipsis}::ng-deep .metrics-overlay-container .metric:not(:last-of-type){margin-bottom:4px}::ng-deep .metrics-overlay-container .metric:first-of-type{margin-top:12px}::ng-deep .metrics-overlay-container .metric:last-of-type{margin-bottom:12px}::ng-deep .metrics-overlay-container .config{display:flex;align-items:center;justify-content:space-between;padding:0 12px;cursor:pointer;background:var(--vl-color-light-blue);outline:none;border:none;width:100%;height:32px;font-size:12px;line-height:16px;letter-spacing:.3px}::ng-deep .metrics-overlay-container .config .vl-icon-chevron-down{color:var(--vl-text-color-accent-light);transform:rotate(-90deg)}.filler{flex:1;margin:0 4px 3px;min-width:5px}.filler:before{display:block;width:100%;height:2px;content:\"\";background-image:radial-gradient(circle at 1px 1px,var(--vl-text-color-accent-light) 1px,transparent 0);background-size:3px 2px}.container{display:flex;flex-direction:column;height:100%}.container .header{margin:15px 0 23px;flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;font-weight:600;font-size:18px;line-height:26px;letter-spacing:-.6px;color:var(--vl-accent-color)}.container .header i{cursor:pointer;font-size:15px}.container .search-container{margin-bottom:12px}.container .search-container input{width:100%}.container .content{display:flex;flex-direction:column;flex:1;overflow:hidden}.container .footer{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;height:60px;padding:0 20px;margin:0 -16px;border-top:1px solid var(--vl-border-color)}.container .footer p-button{flex:1}.container .footer p-button ::ng-deep button{width:100%}.container .footer p-button:not(:last-child){margin-right:16px}.container app-empty-state::ng-deep{margin-bottom:12px}.container app-empty-state::ng-deep .container{width:100%;padding-bottom:0}.sidebar-metrics{width:100%;overflow:auto;padding:1px 0}.empty-state{display:flex;flex:1;align-items:center;justify-content:center;color:var(--vl-text-color-deep-accent);font-size:12px;line-height:16px;letter-spacing:.3px}.sidebar-metric{display:flex;align-items:center;height:32px;position:relative;padding-left:8px;border-radius:2px}.sidebar-metric:hover:not(.edit){background:var(--vl-color-light-blue)}.sidebar-metric:hover:not(.edit) .edit{visibility:visible}.sidebar-metric p-checkbox{margin-right:8px}.sidebar-metric .drag-icon{width:16px;height:16px;margin-right:8px}.sidebar-metric .drag-icon i{cursor:pointer;color:#c5d1e2}.sidebar-metric.cdk-drag-disabled .drag-icon i{cursor:default}.sidebar-metric .title{font-weight:400;font-size:12px;line-height:16px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;-webkit-user-select:text;user-select:text;cursor:text;color:var(--vl-text-color-secondary)}.sidebar-metric .preview-state,.sidebar-metric .edit-state{position:relative;margin-right:8px;min-width:0;display:flex;align-items:center;flex:1}.sidebar-metric .preview-state input,.sidebar-metric .edit-state input{width:100%}.sidebar-metric .action{cursor:pointer;width:32px;height:32px;display:flex;align-items:center;justify-content:center}.sidebar-metric .edit{visibility:hidden}.sidebar-metric .edit i{color:var(--vl-text-color-deep-accent);width:12px;height:12px}.sidebar-metric .save{background:var(--vl-primary-color);border-radius:2px}.sidebar-metric .save i{color:#fff}.sidebar-metric ::ng-deep .p-checkbox{width:16px;height:16px}.sidebar-metric ::ng-deep .p-checkbox .p-checkbox-box{width:16px;height:16px}.cdk-drag-preview{z-index:10001!important;box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}::ng-deep .metric-tooltip .p-tooltip-text{font-size:11px;line-height:14px;letter-spacing:.3px;background:var(--vl-text-color-accent)}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i5.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i5.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: i6.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "style", "styleClass", "badgeClass"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i7.OverlayPanel, selector: "p-overlayPanel", inputs: ["dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i8.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i9.Sidebar, selector: "p-sidebar", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen"], outputs: ["onShow", "onHide", "visibleChange"] }, { kind: "directive", type: i10.InputText, selector: "[pInputText]" }, { kind: "component", type: i11.Checkbox, selector: "p-checkbox", inputs: ["value", "name", "disabled", "binary", "label", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "styleClass", "labelStyleClass", "formControl", "checkboxIcon", "readonly", "required", "trueValue", "falseValue"], outputs: ["onChange"] }, { kind: "component", type: i12.ErrorTooltipComponent, selector: "vl-error-tooltip", inputs: ["tooltip", "visible", "top"] }, { kind: "directive", type: i12.AppHiddenTextTooltipDirective, selector: "[vlHiddenTextTooltip]", inputs: ["vlHiddenTextTooltip"] }, { kind: "pipe", type: i12.ErrorPipe, name: "error" }, { kind: "pipe", type: i1.PricePipe, name: "vlPrice" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
236
+ MetricsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: MetricsComponent, selector: "vl-metrics", viewQueries: [{ propertyName: "overlayPanel", first: true, predicate: OverlayPanel, descendants: true }], ngImport: i0, template: "<div class=\"header-metrics\" (click)=\"toggleOverlay($event, overlayPanel, metricsTarget)\">\n <div class=\"metrics\">\n <div *ngFor=\"let metric of visibleSelectedMetrics\" class=\"metric\">\n <span\n class=\"name\"\n [vlHiddenTextTooltip]=\"metric.name\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n {{ metric.name }}\n </span>\n <span class=\"filler\"></span>\n <span\n class=\"value\"\n vlHiddenTextTooltip=\"{{ getMetricValue(metric.key) | vlPrice }}\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n {{ getMetricValue(metric.key) | vlPrice }}\n </span>\n </div>\n\n <ng-container *ngIf=\"!visibleSelectedMetrics.length\">\n <div *ngFor=\"let metric of emptyStateMetrics\" class=\"metric empty-state-metric\">\n <span\n class=\"name\"\n [vlHiddenTextTooltip]=\"metric.name\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n {{ metric.name }}\n </span>\n <span class=\"filler\"></span>\n <span\n class=\"value\"\n vlHiddenTextTooltip=\"{{ metric.value | vlPrice }}\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n {{ metric.value | vlPrice }}\n </span>\n </div>\n </ng-container>\n </div>\n\n <div #metricsTarget class=\"metrics-overlay-target\" [class.expanded]=\"overlayPanel?.overlayVisible\">\n <i class=\"vl-icon vl-arrow-down\"></i>\n </div>\n</div>\n\n<p-overlayPanel\n styleClass=\"catalog-overlay metrics-overlay-container right no-padding\"\n showTransitionOptions=\"0ms\"\n hideTransitionOptions=\"0ms\"\n>\n <ng-template pTemplate>\n <div class=\"overlay-metrics\">\n <div *ngFor=\"let metric of restSelectedMetrics\" class=\"metric\">\n <span\n class=\"name\"\n [vlHiddenTextTooltip]=\"metric.name\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n {{ metric.name }}\n </span>\n <span class=\"filler\"></span>\n <span\n class=\"value\"\n vlHiddenTextTooltip=\"{{ getMetricValue(metric.key) | vlPrice }}\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n {{ getMetricValue(metric.key) | vlPrice }}\n </span>\n </div>\n </div>\n <button class=\"config\" (click)=\"openSidebar()\">\n Metrics Config\n <i class=\"vl-icon vl-arrow-right\"></i>\n </button>\n </ng-template>\n</p-overlayPanel>\n\n<p-sidebar\n [visible]=\"sidebarVisible\"\n (visibleChange)=\"closeSidebar()\"\n position=\"right\"\n [baseZIndex]=\"1000\"\n [style]=\"{ width: '300px' }\"\n>\n <div class=\"container\">\n <div class=\"header\">\n Quote Metrics Config\n <i class=\"vl-icon vl-cross\" (click)=\"closeSidebar()\"></i>\n </div>\n\n <!-- <div class=\"search-container\">-->\n <!-- <input-->\n <!-- data-test-id=\"search\"-->\n <!-- [formControl]=\"searchControl\"-->\n <!-- pInputText-->\n <!-- placeholder=\"Search for metric\u2026\"-->\n <!-- class=\"w-full\"-->\n <!-- />-->\n <!-- </div>-->\n\n <div class=\"content\">\n <div class=\"sidebar-metrics\" cdkDropList (cdkDropListDropped)=\"changeMetricOrder($event)\">\n <div\n *ngFor=\"let metric of filteredMetrics\"\n class=\"sidebar-metric\"\n [class.edit]=\"metric.key === editingMetric?.key\"\n cdkDrag\n [cdkDragDisabled]=\"!!searchControl.value\"\n >\n <div class=\"drag-icon\">\n <i class=\"vl-icon vl-drag\" cdkDragHandle></i>\n </div>\n <ng-container\n [ngTemplateOutlet]=\"metricTemplate\"\n [ngTemplateOutletContext]=\"{ metric: metric }\"\n ></ng-container>\n </div>\n </div>\n\n <div class=\"empty-state\" *ngIf=\"!filteredMetrics.length\">There are no items matching your search criteria</div>\n </div>\n <div class=\"footer\">\n <p-button\n label=\"Reset to default\"\n styleClass=\"p-button-outlined p-button-sm\"\n (onClick)=\"resetToDefault()\"\n ></p-button>\n <p-button label=\"Save\" styleClass=\"p-button p-button-filled p-button-sm\" (onClick)=\"save()\"></p-button>\n </div>\n </div>\n</p-sidebar>\n\n<ng-template #metricTemplate let-metric=\"metric\">\n <div *ngIf=\"editingMetric?.key !== metric.key\" class=\"preview-state\">\n <p-checkbox\n [ngModel]=\"metric.visible\"\n (ngModelChange)=\"metric.visible = !metric.visible\"\n [binary]=\"true\"\n checkboxIcon=\"vl-icon vl-icon-checkmark\"\n ></p-checkbox>\n <div class=\"title\">{{ metric.name }}</div>\n </div>\n\n <div *ngIf=\"editingMetric?.key === metric.key\" class=\"edit-state\">\n <input data-test-id=\"name\" [formControl]=\"nameControl\" pInputText placeholder=\"Metric name\" class=\"w-full\" />\n <vl-error-tooltip [tooltip]=\"nameControl | error : 'name'\" [visible]=\"!!nameControl.errors\"></vl-error-tooltip>\n </div>\n <div *ngIf=\"editingMetric?.key !== metric.key\" (click)=\"editMetric(metric)\" class=\"action edit\">\n <i class=\"vl-icon vl-edit\"></i>\n </div>\n <div *ngIf=\"editingMetric?.key === metric.key\" (click)=\"cancelMetric()\" class=\"action\">\n <i class=\"vl-icon vl-cross\"></i>\n </div>\n <div *ngIf=\"editingMetric?.key === metric.key\" (click)=\"saveMetric()\" class=\"action save\">\n <i class=\"vl-icon vl-check\"></i>\n </div>\n</ng-template>\n", styles: [":host .header-metrics{display:flex;gap:8px;cursor:pointer}:host .header-metrics *{font-family:var(--cg-font-family)}:host .header-metrics .metrics{min-width:130px;max-width:260px;display:flex;flex-wrap:wrap;justify-content:flex-start;gap:0 8px;height:32px;align-items:flex-start}:host .header-metrics .metric{flex:1;flex-basis:114px;max-width:122px;display:flex;justify-content:space-between;align-items:flex-end;font-size:12px;line-height:16px;letter-spacing:.3px}:host .header-metrics .metric .name{color:#ffffffb3;max-width:55px;flex-shrink:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}:host .header-metrics .metric .value{overflow:hidden;text-overflow:ellipsis}:host .header-metrics .metric.empty-state-metric{filter:blur(1.5px)}:host .metrics-overlay-target{display:flex;align-items:center;width:16px;border-radius:4px;background:rgba(255,255,255,.1)}:host .metrics-overlay-target .vl-icon{color:var(--cg-white)}:host .metrics-overlay-target.expanded .vl-icon:before{transform:rotate(180deg)}:host ::ng-deep .p-sidebar-header{display:none}:host ::ng-deep .p-sidebar-content{padding:0;height:100%}::ng-deep .p-overlaypanel.metrics-overlay-container{max-width:300px;min-width:152px}::ng-deep .p-overlaypanel.metrics-overlay-container *{font-family:var(--cg-font-family)}::ng-deep .p-overlaypanel.metrics-overlay-container .p-overlaypanel-content{padding:0;margin-top:0}::ng-deep .p-overlaypanel.metrics-overlay-container .overlay-metrics{padding:16px;max-height:110px;overflow:auto}::ng-deep .p-overlaypanel.metrics-overlay-container .metric{display:flex;font-size:12px;line-height:16px;letter-spacing:.3px;align-items:flex-end}::ng-deep .p-overlaypanel.metrics-overlay-container .metric .name{color:var(--cg-text-color-secondary);max-width:50%;flex-shrink:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}::ng-deep .p-overlaypanel.metrics-overlay-container .metric .value{overflow:hidden;text-overflow:ellipsis}::ng-deep .p-overlaypanel.metrics-overlay-container .metric .filler:before{background-image:radial-gradient(circle at 1px 1px,var(--cg-text-color-secondary) 1px,transparent 0)}::ng-deep .p-overlaypanel.metrics-overlay-container .config{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 8px 8px 16px;cursor:pointer;background:var(--cg-white);outline:none;border:none;border-top:1px solid var(--cg-border-color);width:100%;height:32px;font-size:12px;line-height:16px;letter-spacing:.3px}::ng-deep .p-overlaypanel.metrics-overlay-container .config .vl-icon-chevron-down{color:var(--cg-primary-color)}.filler{flex:1;margin:0 4px 7px;min-width:7px}.filler:before{display:block;width:100%;height:2px;content:\"\";background-image:radial-gradient(circle at 1px 1px,rgba(255,255,255,.7) 1px,transparent 0);background-size:5px 2px}.container{display:flex;flex-direction:column;height:100%}.container .header{box-sizing:content-box;padding:24px 24px 0;margin-bottom:16px;height:32px;flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;font-family:var(--vl-font-family);font-size:20px;font-style:normal;font-weight:500;line-height:24px;letter-spacing:-.6px;color:var(--vl-accent-color)}.container .header i{cursor:pointer}.container .search-container{padding:0 24px;margin-bottom:16px}.container .search-container input{width:100%}.container .content{padding:0 24px;display:flex;flex-direction:column;flex:1;overflow:hidden}.container .footer{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;gap:16px;padding:16px 24px;border-top:1px solid var(--cg-border-color)}.container .footer p-button{flex:1}.container .footer p-button ::ng-deep button{border-radius:24px;width:100%;font-size:12px;font-family:var(--cg-font-family);font-weight:300;line-height:16px;letter-spacing:.3px;white-space:nowrap}.container .footer p-button ::ng-deep .p-button-outlined{background-color:var(--cg-white);color:var(--cg-primary-color)}.container .footer p-button ::ng-deep .p-button-outlined:hover{background-color:var(--cg-primary-color);color:var(--cg-white)}.container .footer p-button ::ng-deep .p-button-filled{background-color:var(--cg-primary-color);color:var(--cg-white);border:1px solid var(--cg-primary-color)}.container .footer p-button ::ng-deep .p-button-filled:hover{background-color:var(--cg-primary-color-hover);border-color:var(--cg-primary-color-hover)}.container app-empty-state::ng-deep{margin-bottom:12px}.container app-empty-state::ng-deep .container{width:100%;padding-bottom:0}.sidebar-metrics{width:100%;overflow:auto;padding:1px 0}.empty-state{display:flex;flex:1;align-items:center;justify-content:center;color:var(--vl-text-color-deep-accent);font-size:12px;line-height:16px;letter-spacing:.3px}.sidebar-metric{display:flex;align-items:center;height:32px;position:relative;border-bottom:1px solid var(--cg-border-color)}.sidebar-metric.edit{border-bottom-color:var(--cg-primary-color)}.sidebar-metric.edit .drag-icon{display:none}.sidebar-metric:hover:not(.edit){background:var(--cg-bg-color)}.sidebar-metric:hover:not(.edit) .edit{visibility:visible}.sidebar-metric p-checkbox{margin-right:8px}.sidebar-metric .drag-icon{width:16px;height:16px;margin-right:8px}.sidebar-metric .drag-icon i{cursor:pointer;color:#c5d1e2}.sidebar-metric.cdk-drag-disabled .drag-icon i{cursor:default}.sidebar-metric .title{font-weight:400;font-size:12px;line-height:16px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;-webkit-user-select:text;user-select:text;cursor:text;color:var(--cg-black)}.sidebar-metric .preview-state,.sidebar-metric .edit-state{position:relative;margin-right:8px;min-width:0;display:flex;align-items:center;flex:1}.sidebar-metric .preview-state input,.sidebar-metric .edit-state input{border:none;background:transparent;width:100%}.sidebar-metric .action{cursor:pointer;width:24px;height:24px;display:flex;align-items:center;justify-content:center;border:1px solid transparent}.sidebar-metric .edit{visibility:hidden}.sidebar-metric .save{border-color:var(--cg-primary-color);border-radius:4px}.sidebar-metric ::ng-deep .p-checkbox{width:16px;height:16px}.sidebar-metric ::ng-deep .p-checkbox .p-checkbox-box{width:16px;height:16px}.sidebar-metric ::ng-deep .p-checkbox .p-checkbox-box:hover{border-color:var(--cg-primary-color)}.sidebar-metric ::ng-deep .p-checkbox .p-checkbox-box.p-highlight{background:var(--cg-primary-color);border-color:var(--cg-primary-color)}.cdk-drag-preview{z-index:10001!important;box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}::ng-deep .metric-tooltip .p-tooltip-text{font-size:11px;line-height:14px;letter-spacing:.3px;background:var(--vl-text-color-accent)}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i5.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i5.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: i6.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "style", "styleClass", "badgeClass"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i7.OverlayPanel, selector: "p-overlayPanel", inputs: ["dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i8.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i9.Sidebar, selector: "p-sidebar", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen"], outputs: ["onShow", "onHide", "visibleChange"] }, { kind: "directive", type: i10.InputText, selector: "[pInputText]" }, { kind: "component", type: i11.Checkbox, selector: "p-checkbox", inputs: ["value", "name", "disabled", "binary", "label", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "styleClass", "labelStyleClass", "formControl", "checkboxIcon", "readonly", "required", "trueValue", "falseValue"], outputs: ["onChange"] }, { kind: "component", type: i12.ErrorTooltipComponent, selector: "vl-error-tooltip", inputs: ["tooltip", "visible", "top"] }, { kind: "directive", type: i12.AppHiddenTextTooltipDirective, selector: "[vlHiddenTextTooltip]", inputs: ["vlHiddenTextTooltip"] }, { kind: "pipe", type: i12.ErrorPipe, name: "error" }, { kind: "pipe", type: i1.PricePipe, name: "vlPrice" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
222
237
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: MetricsComponent, decorators: [{
223
238
  type: Component,
224
- args: [{ selector: 'vl-metrics', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"header-metrics\" (click)=\"overlayPanel.toggle($event)\">\n <div *ngFor=\"let metric of visibleSelectedMetrics\" class=\"metric\">\n <span class=\"name\" [vlHiddenTextTooltip]=\"metric.name\" tooltipStyleClass=\"metric-tooltip\" tooltipPosition=\"bottom\">\n {{ metric.name }}\n </span>\n <span class=\"filler\"></span>\n <span\n class=\"value\"\n vlHiddenTextTooltip=\"{{ getMetricValue(metric.key) | vlPrice }}\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n {{ getMetricValue(metric.key) | vlPrice }}\n </span>\n </div>\n\n <ng-container *ngIf=\"!visibleSelectedMetrics.length\">\n <div *ngFor=\"let metric of emptyStateMetrics\" class=\"metric empty-state-metric\">\n <span\n class=\"name\"\n [vlHiddenTextTooltip]=\"metric.name\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n {{ metric.name }}\n </span>\n <span class=\"filler\"></span>\n <span\n class=\"value\"\n vlHiddenTextTooltip=\"{{ metric.value | vlPrice }}\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n {{ metric.value | vlPrice }}\n </span>\n </div>\n </ng-container>\n</div>\n\n<p-overlayPanel\n styleClass=\"metrics-overlay-container center no-padding\"\n showTransitionOptions=\"0ms\"\n hideTransitionOptions=\"0ms\"\n>\n <ng-template pTemplate>\n <div class=\"overlay-metrics\">\n <div *ngFor=\"let metric of restSelectedMetrics\" class=\"metric\">\n <span\n class=\"name\"\n [vlHiddenTextTooltip]=\"metric.name\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n {{ metric.name }}\n </span>\n <span class=\"filler\"></span>\n <span\n class=\"value\"\n vlHiddenTextTooltip=\"{{ getMetricValue(metric.key) | vlPrice }}\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n {{ getMetricValue(metric.key) | vlPrice }}\n </span>\n </div>\n </div>\n <button class=\"config\" (click)=\"openSidebar()\">\n Metrics Config\n <i class=\"vl-icon vl-icon-chevron-down\"></i>\n </button>\n </ng-template>\n</p-overlayPanel>\n\n<p-sidebar\n [visible]=\"sidebarVisible\"\n (visibleChange)=\"closeSidebar()\"\n position=\"right\"\n [baseZIndex]=\"1000\"\n [style]=\"{ width: '360px' }\"\n>\n <div class=\"container\">\n <div class=\"header\">\n Quote Metrics Config\n <i class=\"vl-icon vl-icon-close\" (click)=\"closeSidebar()\"></i>\n </div>\n\n <div class=\"search-container\">\n <input\n data-test-id=\"search\"\n [formControl]=\"searchControl\"\n pInputText\n placeholder=\"Search for metric\u2026\"\n class=\"w-full\"\n />\n </div>\n\n <div class=\"content\">\n <div class=\"sidebar-metrics\" cdkDropList (cdkDropListDropped)=\"changeMetricOrder($event)\">\n <div\n *ngFor=\"let metric of filteredMetrics\"\n class=\"sidebar-metric\"\n [class.edit]=\"metric.key === editingMetric?.key\"\n cdkDrag\n [cdkDragDisabled]=\"!!searchControl.value\"\n >\n <div class=\"drag-icon\">\n <i class=\"vl-icon vl-icon-reorder\" cdkDragHandle></i>\n </div>\n <ng-container\n [ngTemplateOutlet]=\"metricTemplate\"\n [ngTemplateOutletContext]=\"{ metric: metric }\"\n ></ng-container>\n </div>\n </div>\n\n <div class=\"empty-state\" *ngIf=\"!filteredMetrics.length\">There are no items matching your search criteria</div>\n </div>\n <div class=\"footer\">\n <p-button\n label=\"Reset to default\"\n styleClass=\"p-button-outlined p-button-sm\"\n (onClick)=\"resetToDefault()\"\n ></p-button>\n <p-button label=\"Save\" styleClass=\"p-button p-button-filled p-button-sm\" (onClick)=\"save()\"></p-button>\n </div>\n </div>\n</p-sidebar>\n\n<ng-template #metricTemplate let-metric=\"metric\">\n <div *ngIf=\"editingMetric?.key !== metric.key\" class=\"preview-state\">\n <p-checkbox\n [ngModel]=\"metric.visible\"\n (ngModelChange)=\"metric.visible = !metric.visible\"\n [binary]=\"true\"\n checkboxIcon=\"vl-icon vl-icon-checkmark\"\n ></p-checkbox>\n <div class=\"title\">{{ metric.name }}</div>\n </div>\n\n <div *ngIf=\"editingMetric?.key === metric.key\" class=\"edit-state\">\n <input data-test-id=\"name\" [formControl]=\"nameControl\" pInputText placeholder=\"Metric name\" class=\"w-full\" />\n <vl-error-tooltip [tooltip]=\"nameControl | error : 'name'\" [visible]=\"!!nameControl.errors\"></vl-error-tooltip>\n </div>\n <div *ngIf=\"editingMetric?.key !== metric.key\" (click)=\"editMetric(metric)\" class=\"action edit\">\n <i class=\"vl-icon vl-icon-edit-sm\"></i>\n </div>\n <div *ngIf=\"editingMetric?.key === metric.key\" (click)=\"saveMetric()\" class=\"action save\">\n <i class=\"vl-icon vl-icon-checkmark\"></i>\n </div>\n</ng-template>\n", styles: [":host .header-metrics{cursor:pointer;min-width:130px;max-width:260px;display:flex;flex-wrap:wrap;justify-content:flex-start;gap:0 16px;height:32px;align-items:flex-start}:host .header-metrics .metric{flex:1;flex-basis:114px;max-width:122px;display:flex;justify-content:space-between;align-items:flex-end;font-size:12px;line-height:16px;letter-spacing:.3px}:host .header-metrics .metric .name{max-width:55px;flex-shrink:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}:host .header-metrics .metric .value{font-weight:600;overflow:hidden;text-overflow:ellipsis}:host .header-metrics .metric.empty-state-metric{filter:blur(1.5px)}:host ::ng-deep .p-sidebar-header{display:none}:host ::ng-deep .p-sidebar-content{padding:0 24px;height:100%}::ng-deep .metrics-overlay-container{max-width:300px}::ng-deep .metrics-overlay-container .p-overlaypanel-content{padding:0}::ng-deep .metrics-overlay-container .overlay-metrics{max-height:110px;overflow:auto}::ng-deep .metrics-overlay-container .metric{display:flex;padding:0 12px;font-size:12px;line-height:16px;letter-spacing:.3px;align-items:flex-end}::ng-deep .metrics-overlay-container .metric .name{max-width:50%;flex-shrink:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}::ng-deep .metrics-overlay-container .metric .value{font-weight:600;overflow:hidden;text-overflow:ellipsis}::ng-deep .metrics-overlay-container .metric:not(:last-of-type){margin-bottom:4px}::ng-deep .metrics-overlay-container .metric:first-of-type{margin-top:12px}::ng-deep .metrics-overlay-container .metric:last-of-type{margin-bottom:12px}::ng-deep .metrics-overlay-container .config{display:flex;align-items:center;justify-content:space-between;padding:0 12px;cursor:pointer;background:var(--vl-color-light-blue);outline:none;border:none;width:100%;height:32px;font-size:12px;line-height:16px;letter-spacing:.3px}::ng-deep .metrics-overlay-container .config .vl-icon-chevron-down{color:var(--vl-text-color-accent-light);transform:rotate(-90deg)}.filler{flex:1;margin:0 4px 3px;min-width:5px}.filler:before{display:block;width:100%;height:2px;content:\"\";background-image:radial-gradient(circle at 1px 1px,var(--vl-text-color-accent-light) 1px,transparent 0);background-size:3px 2px}.container{display:flex;flex-direction:column;height:100%}.container .header{margin:15px 0 23px;flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;font-weight:600;font-size:18px;line-height:26px;letter-spacing:-.6px;color:var(--vl-accent-color)}.container .header i{cursor:pointer;font-size:15px}.container .search-container{margin-bottom:12px}.container .search-container input{width:100%}.container .content{display:flex;flex-direction:column;flex:1;overflow:hidden}.container .footer{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;height:60px;padding:0 20px;margin:0 -16px;border-top:1px solid var(--vl-border-color)}.container .footer p-button{flex:1}.container .footer p-button ::ng-deep button{width:100%}.container .footer p-button:not(:last-child){margin-right:16px}.container app-empty-state::ng-deep{margin-bottom:12px}.container app-empty-state::ng-deep .container{width:100%;padding-bottom:0}.sidebar-metrics{width:100%;overflow:auto;padding:1px 0}.empty-state{display:flex;flex:1;align-items:center;justify-content:center;color:var(--vl-text-color-deep-accent);font-size:12px;line-height:16px;letter-spacing:.3px}.sidebar-metric{display:flex;align-items:center;height:32px;position:relative;padding-left:8px;border-radius:2px}.sidebar-metric:hover:not(.edit){background:var(--vl-color-light-blue)}.sidebar-metric:hover:not(.edit) .edit{visibility:visible}.sidebar-metric p-checkbox{margin-right:8px}.sidebar-metric .drag-icon{width:16px;height:16px;margin-right:8px}.sidebar-metric .drag-icon i{cursor:pointer;color:#c5d1e2}.sidebar-metric.cdk-drag-disabled .drag-icon i{cursor:default}.sidebar-metric .title{font-weight:400;font-size:12px;line-height:16px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;-webkit-user-select:text;user-select:text;cursor:text;color:var(--vl-text-color-secondary)}.sidebar-metric .preview-state,.sidebar-metric .edit-state{position:relative;margin-right:8px;min-width:0;display:flex;align-items:center;flex:1}.sidebar-metric .preview-state input,.sidebar-metric .edit-state input{width:100%}.sidebar-metric .action{cursor:pointer;width:32px;height:32px;display:flex;align-items:center;justify-content:center}.sidebar-metric .edit{visibility:hidden}.sidebar-metric .edit i{color:var(--vl-text-color-deep-accent);width:12px;height:12px}.sidebar-metric .save{background:var(--vl-primary-color);border-radius:2px}.sidebar-metric .save i{color:#fff}.sidebar-metric ::ng-deep .p-checkbox{width:16px;height:16px}.sidebar-metric ::ng-deep .p-checkbox .p-checkbox-box{width:16px;height:16px}.cdk-drag-preview{z-index:10001!important;box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}::ng-deep .metric-tooltip .p-tooltip-text{font-size:11px;line-height:14px;letter-spacing:.3px;background:var(--vl-text-color-accent)}\n"] }]
239
+ args: [{ selector: 'vl-metrics', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"header-metrics\" (click)=\"toggleOverlay($event, overlayPanel, metricsTarget)\">\n <div class=\"metrics\">\n <div *ngFor=\"let metric of visibleSelectedMetrics\" class=\"metric\">\n <span\n class=\"name\"\n [vlHiddenTextTooltip]=\"metric.name\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n {{ metric.name }}\n </span>\n <span class=\"filler\"></span>\n <span\n class=\"value\"\n vlHiddenTextTooltip=\"{{ getMetricValue(metric.key) | vlPrice }}\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n {{ getMetricValue(metric.key) | vlPrice }}\n </span>\n </div>\n\n <ng-container *ngIf=\"!visibleSelectedMetrics.length\">\n <div *ngFor=\"let metric of emptyStateMetrics\" class=\"metric empty-state-metric\">\n <span\n class=\"name\"\n [vlHiddenTextTooltip]=\"metric.name\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n {{ metric.name }}\n </span>\n <span class=\"filler\"></span>\n <span\n class=\"value\"\n vlHiddenTextTooltip=\"{{ metric.value | vlPrice }}\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n {{ metric.value | vlPrice }}\n </span>\n </div>\n </ng-container>\n </div>\n\n <div #metricsTarget class=\"metrics-overlay-target\" [class.expanded]=\"overlayPanel?.overlayVisible\">\n <i class=\"vl-icon vl-arrow-down\"></i>\n </div>\n</div>\n\n<p-overlayPanel\n styleClass=\"catalog-overlay metrics-overlay-container right no-padding\"\n showTransitionOptions=\"0ms\"\n hideTransitionOptions=\"0ms\"\n>\n <ng-template pTemplate>\n <div class=\"overlay-metrics\">\n <div *ngFor=\"let metric of restSelectedMetrics\" class=\"metric\">\n <span\n class=\"name\"\n [vlHiddenTextTooltip]=\"metric.name\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n {{ metric.name }}\n </span>\n <span class=\"filler\"></span>\n <span\n class=\"value\"\n vlHiddenTextTooltip=\"{{ getMetricValue(metric.key) | vlPrice }}\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n {{ getMetricValue(metric.key) | vlPrice }}\n </span>\n </div>\n </div>\n <button class=\"config\" (click)=\"openSidebar()\">\n Metrics Config\n <i class=\"vl-icon vl-arrow-right\"></i>\n </button>\n </ng-template>\n</p-overlayPanel>\n\n<p-sidebar\n [visible]=\"sidebarVisible\"\n (visibleChange)=\"closeSidebar()\"\n position=\"right\"\n [baseZIndex]=\"1000\"\n [style]=\"{ width: '300px' }\"\n>\n <div class=\"container\">\n <div class=\"header\">\n Quote Metrics Config\n <i class=\"vl-icon vl-cross\" (click)=\"closeSidebar()\"></i>\n </div>\n\n <!-- <div class=\"search-container\">-->\n <!-- <input-->\n <!-- data-test-id=\"search\"-->\n <!-- [formControl]=\"searchControl\"-->\n <!-- pInputText-->\n <!-- placeholder=\"Search for metric\u2026\"-->\n <!-- class=\"w-full\"-->\n <!-- />-->\n <!-- </div>-->\n\n <div class=\"content\">\n <div class=\"sidebar-metrics\" cdkDropList (cdkDropListDropped)=\"changeMetricOrder($event)\">\n <div\n *ngFor=\"let metric of filteredMetrics\"\n class=\"sidebar-metric\"\n [class.edit]=\"metric.key === editingMetric?.key\"\n cdkDrag\n [cdkDragDisabled]=\"!!searchControl.value\"\n >\n <div class=\"drag-icon\">\n <i class=\"vl-icon vl-drag\" cdkDragHandle></i>\n </div>\n <ng-container\n [ngTemplateOutlet]=\"metricTemplate\"\n [ngTemplateOutletContext]=\"{ metric: metric }\"\n ></ng-container>\n </div>\n </div>\n\n <div class=\"empty-state\" *ngIf=\"!filteredMetrics.length\">There are no items matching your search criteria</div>\n </div>\n <div class=\"footer\">\n <p-button\n label=\"Reset to default\"\n styleClass=\"p-button-outlined p-button-sm\"\n (onClick)=\"resetToDefault()\"\n ></p-button>\n <p-button label=\"Save\" styleClass=\"p-button p-button-filled p-button-sm\" (onClick)=\"save()\"></p-button>\n </div>\n </div>\n</p-sidebar>\n\n<ng-template #metricTemplate let-metric=\"metric\">\n <div *ngIf=\"editingMetric?.key !== metric.key\" class=\"preview-state\">\n <p-checkbox\n [ngModel]=\"metric.visible\"\n (ngModelChange)=\"metric.visible = !metric.visible\"\n [binary]=\"true\"\n checkboxIcon=\"vl-icon vl-icon-checkmark\"\n ></p-checkbox>\n <div class=\"title\">{{ metric.name }}</div>\n </div>\n\n <div *ngIf=\"editingMetric?.key === metric.key\" class=\"edit-state\">\n <input data-test-id=\"name\" [formControl]=\"nameControl\" pInputText placeholder=\"Metric name\" class=\"w-full\" />\n <vl-error-tooltip [tooltip]=\"nameControl | error : 'name'\" [visible]=\"!!nameControl.errors\"></vl-error-tooltip>\n </div>\n <div *ngIf=\"editingMetric?.key !== metric.key\" (click)=\"editMetric(metric)\" class=\"action edit\">\n <i class=\"vl-icon vl-edit\"></i>\n </div>\n <div *ngIf=\"editingMetric?.key === metric.key\" (click)=\"cancelMetric()\" class=\"action\">\n <i class=\"vl-icon vl-cross\"></i>\n </div>\n <div *ngIf=\"editingMetric?.key === metric.key\" (click)=\"saveMetric()\" class=\"action save\">\n <i class=\"vl-icon vl-check\"></i>\n </div>\n</ng-template>\n", styles: [":host .header-metrics{display:flex;gap:8px;cursor:pointer}:host .header-metrics *{font-family:var(--cg-font-family)}:host .header-metrics .metrics{min-width:130px;max-width:260px;display:flex;flex-wrap:wrap;justify-content:flex-start;gap:0 8px;height:32px;align-items:flex-start}:host .header-metrics .metric{flex:1;flex-basis:114px;max-width:122px;display:flex;justify-content:space-between;align-items:flex-end;font-size:12px;line-height:16px;letter-spacing:.3px}:host .header-metrics .metric .name{color:#ffffffb3;max-width:55px;flex-shrink:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}:host .header-metrics .metric .value{overflow:hidden;text-overflow:ellipsis}:host .header-metrics .metric.empty-state-metric{filter:blur(1.5px)}:host .metrics-overlay-target{display:flex;align-items:center;width:16px;border-radius:4px;background:rgba(255,255,255,.1)}:host .metrics-overlay-target .vl-icon{color:var(--cg-white)}:host .metrics-overlay-target.expanded .vl-icon:before{transform:rotate(180deg)}:host ::ng-deep .p-sidebar-header{display:none}:host ::ng-deep .p-sidebar-content{padding:0;height:100%}::ng-deep .p-overlaypanel.metrics-overlay-container{max-width:300px;min-width:152px}::ng-deep .p-overlaypanel.metrics-overlay-container *{font-family:var(--cg-font-family)}::ng-deep .p-overlaypanel.metrics-overlay-container .p-overlaypanel-content{padding:0;margin-top:0}::ng-deep .p-overlaypanel.metrics-overlay-container .overlay-metrics{padding:16px;max-height:110px;overflow:auto}::ng-deep .p-overlaypanel.metrics-overlay-container .metric{display:flex;font-size:12px;line-height:16px;letter-spacing:.3px;align-items:flex-end}::ng-deep .p-overlaypanel.metrics-overlay-container .metric .name{color:var(--cg-text-color-secondary);max-width:50%;flex-shrink:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}::ng-deep .p-overlaypanel.metrics-overlay-container .metric .value{overflow:hidden;text-overflow:ellipsis}::ng-deep .p-overlaypanel.metrics-overlay-container .metric .filler:before{background-image:radial-gradient(circle at 1px 1px,var(--cg-text-color-secondary) 1px,transparent 0)}::ng-deep .p-overlaypanel.metrics-overlay-container .config{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 8px 8px 16px;cursor:pointer;background:var(--cg-white);outline:none;border:none;border-top:1px solid var(--cg-border-color);width:100%;height:32px;font-size:12px;line-height:16px;letter-spacing:.3px}::ng-deep .p-overlaypanel.metrics-overlay-container .config .vl-icon-chevron-down{color:var(--cg-primary-color)}.filler{flex:1;margin:0 4px 7px;min-width:7px}.filler:before{display:block;width:100%;height:2px;content:\"\";background-image:radial-gradient(circle at 1px 1px,rgba(255,255,255,.7) 1px,transparent 0);background-size:5px 2px}.container{display:flex;flex-direction:column;height:100%}.container .header{box-sizing:content-box;padding:24px 24px 0;margin-bottom:16px;height:32px;flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;font-family:var(--vl-font-family);font-size:20px;font-style:normal;font-weight:500;line-height:24px;letter-spacing:-.6px;color:var(--vl-accent-color)}.container .header i{cursor:pointer}.container .search-container{padding:0 24px;margin-bottom:16px}.container .search-container input{width:100%}.container .content{padding:0 24px;display:flex;flex-direction:column;flex:1;overflow:hidden}.container .footer{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;gap:16px;padding:16px 24px;border-top:1px solid var(--cg-border-color)}.container .footer p-button{flex:1}.container .footer p-button ::ng-deep button{border-radius:24px;width:100%;font-size:12px;font-family:var(--cg-font-family);font-weight:300;line-height:16px;letter-spacing:.3px;white-space:nowrap}.container .footer p-button ::ng-deep .p-button-outlined{background-color:var(--cg-white);color:var(--cg-primary-color)}.container .footer p-button ::ng-deep .p-button-outlined:hover{background-color:var(--cg-primary-color);color:var(--cg-white)}.container .footer p-button ::ng-deep .p-button-filled{background-color:var(--cg-primary-color);color:var(--cg-white);border:1px solid var(--cg-primary-color)}.container .footer p-button ::ng-deep .p-button-filled:hover{background-color:var(--cg-primary-color-hover);border-color:var(--cg-primary-color-hover)}.container app-empty-state::ng-deep{margin-bottom:12px}.container app-empty-state::ng-deep .container{width:100%;padding-bottom:0}.sidebar-metrics{width:100%;overflow:auto;padding:1px 0}.empty-state{display:flex;flex:1;align-items:center;justify-content:center;color:var(--vl-text-color-deep-accent);font-size:12px;line-height:16px;letter-spacing:.3px}.sidebar-metric{display:flex;align-items:center;height:32px;position:relative;border-bottom:1px solid var(--cg-border-color)}.sidebar-metric.edit{border-bottom-color:var(--cg-primary-color)}.sidebar-metric.edit .drag-icon{display:none}.sidebar-metric:hover:not(.edit){background:var(--cg-bg-color)}.sidebar-metric:hover:not(.edit) .edit{visibility:visible}.sidebar-metric p-checkbox{margin-right:8px}.sidebar-metric .drag-icon{width:16px;height:16px;margin-right:8px}.sidebar-metric .drag-icon i{cursor:pointer;color:#c5d1e2}.sidebar-metric.cdk-drag-disabled .drag-icon i{cursor:default}.sidebar-metric .title{font-weight:400;font-size:12px;line-height:16px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;-webkit-user-select:text;user-select:text;cursor:text;color:var(--cg-black)}.sidebar-metric .preview-state,.sidebar-metric .edit-state{position:relative;margin-right:8px;min-width:0;display:flex;align-items:center;flex:1}.sidebar-metric .preview-state input,.sidebar-metric .edit-state input{border:none;background:transparent;width:100%}.sidebar-metric .action{cursor:pointer;width:24px;height:24px;display:flex;align-items:center;justify-content:center;border:1px solid transparent}.sidebar-metric .edit{visibility:hidden}.sidebar-metric .save{border-color:var(--cg-primary-color);border-radius:4px}.sidebar-metric ::ng-deep .p-checkbox{width:16px;height:16px}.sidebar-metric ::ng-deep .p-checkbox .p-checkbox-box{width:16px;height:16px}.sidebar-metric ::ng-deep .p-checkbox .p-checkbox-box:hover{border-color:var(--cg-primary-color)}.sidebar-metric ::ng-deep .p-checkbox .p-checkbox-box.p-highlight{background:var(--cg-primary-color);border-color:var(--cg-primary-color)}.cdk-drag-preview{z-index:10001!important;box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}::ng-deep .metric-tooltip .p-tooltip-text{font-size:11px;line-height:14px;letter-spacing:.3px;background:var(--vl-text-color-accent)}\n"] }]
225
240
  }], ctorParameters: function () { return [{ type: i1.ContextService }, { type: i1.QuoteDraftService }, { type: i0.ChangeDetectorRef }, { type: i1.MetricsCalculationService }, { type: i1.FlowConfigurationService }, { type: i2.ShoppingCartSettingsApiService }, { type: i1.RuntimeSettingsService }]; }, propDecorators: { overlayPanel: [{
226
241
  type: ViewChild,
227
242
  args: [OverlayPanel]
228
243
  }] } });
229
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Nkay9zcmMvY29tcG9uZW50cy9oZWFkZXIvbWV0cmljcy9tZXRyaWNzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL3NyYy9jb21wb25lbnRzL2hlYWRlci9tZXRyaWNzL21ldHJpY3MuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFlLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwSCxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpFLE9BQU8sRUFDTCwwQkFBMEIsRUFDMUIsaUJBQWlCLEVBQ2pCLDJCQUEyQixFQUMzQiw4QkFBOEIsR0FDL0IsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQ0wsY0FBYyxFQUNkLHdCQUF3QixFQUN4Qix5QkFBeUIsRUFDekIsaUJBQWlCLEVBQ2pCLHNCQUFzQixHQUN2QixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUs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SUFBSSxDQUFDLENBQUM7WUFFM0QsSUFBSSxNQUFNLEtBQUssQ0FBQyxDQUFDLElBQUksTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUNsQyxPQUFPLENBQUMsQ0FBQzthQUNWO1lBRUQsSUFBSSxNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ2pCLE9BQU8sQ0FBQyxDQUFDO2FBQ1Y7WUFFRCxJQUFJLE1BQU0sS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDakIsT0FBTyxDQUFDLENBQUMsQ0FBQzthQUNYO1lBRUQsT0FBTyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7NkdBdFBVLGdCQUFnQjtpR0FBaEIsZ0JBQWdCLGdHQUNoQixZQUFZLGdEQ2hDekIsc2xLQXNKQTsyRkR2SGEsZ0JBQWdCO2tCQU41QixTQUFTOytCQUNFLFlBQVksbUJBR0wsdUJBQXVCLENBQUMsTUFBTTtzVUFJeEMsWUFBWTtzQkFEbEIsU0FBUzt1QkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AsIG1vdmVJdGVtSW5BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2hvcHBpbmdDYXJ0U2V0dGluZ3NBcGlTZXJ2aWNlIH0gZnJvbSAnQHZlbG9jZWFwcHMvYXBpJztcbmltcG9ydCB7IExpbmVJdGVtLCBNZXRyaWNSdWxlIH0gZnJvbSAnQHZlbG9jZWFwcHMvY29yZSc7XG5pbXBvcnQge1xuICBpbnZhbGlkQ2hhcmFjdGVyc1ZhbGlkYXRvcixcbiAgcmVxdWlyZWRWYWxpZGF0b3IsXG4gIHJlc2VydmVkSWRlbnRpZmllclZhbGlkYXRvcixcbiAgc3RhbmRhcmRDaGFyU2V0V2l0aFNwYWNlUmVnRXhwLFxufSBmcm9tICdAdmVsb2NlYXBwcy9jb3JlL2Zvcm1zJztcbmltcG9ydCB7XG4gIENvbnRleHRTZXJ2aWNlLFxuICBGbG93Q29uZmlndXJhdGlvblNlcnZpY2UsXG4gIE1ldHJpY3NDYWxjdWxhdGlvblNlcnZpY2UsXG4gIFF1b3RlRHJhZnRTZXJ2aWNlLFxuICBSdW50aW1lU2V0dGluZ3NTZXJ2aWNlLFxufSBmcm9tICdAdmVsb2NlYXBwcy9zZGsvY29yZSc7XG5pbXBvcnQgeyBjbG9uZURlZXAsIHVuaXEgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgT3ZlcmxheVBhbmVsIH0gZnJvbSAncHJpbWVuZy9vdmVybGF5cGFuZWwnO1xuaW1wb3J0IHsgU3ViamVjdCwgc3RhcnRXaXRoIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwsIHRhcCwgd2l0aExhdGVzdEZyb20gfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBNZXRyaWMgfSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBNRVRSSUNTX1NUT1JBR0VfS0VZIH0gZnJvbSAnLi9tZXRyaWNzLmRlZmluaXRpb25zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmwtbWV0cmljcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9tZXRyaWNzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWV0cmljcy5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTWV0cmljc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZChPdmVybGF5UGFuZWwpXG4gIHB1YmxpYyBvdmVybGF5UGFuZWwhOiBPdmVybGF5UGFuZWw7XG5cbiAgcHVibGljIGVtcHR5U3RhdGVNZXRyaWNzID0gW1xuICAgIHsgbmFtZTogJ01SUicsIHZhbHVlOiAwIH0sXG4gICAgeyBuYW1lOiAnRS5NUlInLCB2YWx1ZTogMCB9LFxuICAgIHsgbmFtZTogJ05SUicsIHZhbHVlOiAwIH0sXG4gICAgeyBuYW1lOiAnRS5OUlInLCB2YWx1ZTogMCB9LFxuICBdO1xuICBwdWJsaWMgdmlzaWJsZVNlbGVjdGVkTWV0cmljczogTWV0cmljW10gPSBbXTtcbiAgcHVibGljIHJlc3RTZWxlY3RlZE1ldHJpY3M6IE1ldHJpY1tdID0gW107XG4gIHB1YmxpYyBtZXRyaWNzOiBNZXRyaWNbXSA9IFtdO1xuICBwdWJsaWMgZmlsdGVyZWRNZXRyaWNzOiBNZXRyaWNbXSA9IFtdO1xuICBwdWJsaWMgZWRpdGluZ01ldHJpYzogTWV0cmljIHwgdW5kZWZpbmVkO1xuICBwdWJsaWMgY3VycmVuY3lTeW1ib2w6IHN0cmluZztcbiAgcHVibGljIHNpZGViYXJWaXNpYmxlID0gZmFsc2U7XG4gIHB1YmxpYyBzZWFyY2hDb250cm9sOiBGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XG4gIHB1YmxpYyBuYW1lQ29udHJvbDogRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycsIFtcbiAgICByZXF1aXJlZFZhbGlkYXRvcixcbiAgICBpbnZhbGlkQ2hhcmFjdGVyc1ZhbGlkYXRvcihzdGFuZGFyZENoYXJTZXRXaXRoU3BhY2VSZWdFeHApLFxuICAgIHJlc2VydmVkSWRlbnRpZmllclZhbGlkYXRvcixcbiAgICBWYWxpZGF0b3JzLm1heExlbmd0aCg4MCksXG4gIF0pO1xuXG4gIHByaXZhdGUgYWN0aXZlTWV0cmljUnVsZXM6IE1ldHJpY1J1bGVbXSA9IFtdO1xuICBwcml2YXRlIGFjdGl2ZU1ldHJpY1J1bGVOYW1lczogTWV0cmljW10gPSBbXTtcbiAgcHJpdmF0ZSBkZWZhdWx0TWV0cmljUnVsZU5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIG1ldHJpY0tleXM6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgbGFzdFNhdmVkTWV0cmljczogTWV0cmljW10gPSBbXTtcbiAgcHJpdmF0ZSBkZXN0cm95ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNvbnRleHRTZXJ2aWNlOiBDb250ZXh0U2VydmljZSxcbiAgICBwcml2YXRlIHF1b3RlRHJhZnRTZXJ2aWNlOiBRdW90ZURyYWZ0U2VydmljZSxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBtZXRyaWNzQ2FsY3VsYXRpb25TZXJ2aWNlOiBNZXRyaWNzQ2FsY3VsYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgZmxvd0NvbmZpZ3VyYXRpb246IEZsb3dDb25maWd1cmF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHNob3BwaW5nQ2FydFNldHRpbmdzQXBpU2VydmljZTogU2hvcHBpbmdDYXJ0U2V0dGluZ3NBcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUgcnVudGltZVNldHRpbmdzOiBSdW50aW1lU2V0dGluZ3NTZXJ2aWNlLFxuICApIHtcbiAgICB0aGlzLmN1cnJlbmN5U3ltYm9sID0gdGhpcy5ydW50aW1lU2V0dGluZ3MuZ2V0Q3VycmVuY3lTZXR0aW5ncygpLnN5bWJvbDtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZU1ldHJpY1J1bGVzID0gdGhpcy5mbG93Q29uZmlndXJhdGlvbi5hY3RpdmVNZXRyaWNzU25hcHNob3QuZmlsdGVyKG1ldHJpY1J1bGUgPT5cbiAgICAgIG1ldHJpY1J1bGUubWV0cmljcy5zb21lKG1ldHJpYyA9PiAhIW1ldHJpYy50b3RhbE5hbWUpLFxuICAgICk7XG4gICAgY29uc3QgYWN0aXZlTWV0cmljUnVsZU5hbWVzID0gdGhpcy5hY3RpdmVNZXRyaWNSdWxlcy5tYXAobWV0cmljUnVsZSA9PiBtZXRyaWNSdWxlLnRpdGxlKTtcblxuICAgIHRoaXMuc2hvcHBpbmdDYXJ0U2V0dGluZ3NBcGlTZXJ2aWNlXG4gICAgICAuZ2V0U2V0dGluZ3NNYXAoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMucXVvdGVEcmFmdFNlcnZpY2UuY3VycmVudFN0YXRlJCksXG4gICAgICAgIHRhcCgoW3NldHRpbmdzLCBsaW5lSXRlbXNdKSA9PiB7XG4gICAgICAgICAgdGhpcy5kZWZhdWx0TWV0cmljUnVsZU5hbWVzID0gKHNldHRpbmdzPy5ERUZBVUxUX0hFQURFUl9NRVRSSUNTIHx8IFtdKS5maWx0ZXIocnVsZU5hbWUgPT5cbiAgICAgICAgICAgIGFjdGl2ZU1ldHJpY1J1bGVOYW1lcy5pbmNsdWRlcyhydWxlTmFtZSksXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLm1ldHJpY0tleXMgPSB0aGlzLmNvbGxlY3RNZXRyaWNLZXlzKGxpbmVJdGVtcyk7XG4gICAgICAgICAgdGhpcy5hY3RpdmVNZXRyaWNSdWxlTmFtZXMgPSB0aGlzLmdldEFjdGl2ZU1ldHJpY1J1bGVOYW1lcygpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5jb2xsZWN0QXZhaWxhYmxlTWV0cmljcygpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLnNlYXJjaENvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCksIHN0YXJ0V2l0aCgnJykpLnN1YnNjcmliZShxdWVyeSA9PiB7XG4gICAgICB0aGlzLmZpbHRlcmVkTWV0cmljcyA9IHRoaXMubWV0cmljcy5maWx0ZXIoKHsgbmFtZSB9KSA9PiB7XG4gICAgICAgIHJldHVybiAobmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeT8udG9Mb3dlckNhc2UoKSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMubWV0cmljc0NhbGN1bGF0aW9uU2VydmljZS5vbk1ldHJpY3NVcGRhdGUkXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3llZCQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveWVkJC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHVibGljIG9wZW5TaWRlYmFyKCk6IHZvaWQge1xuICAgIHRoaXMub3ZlcmxheVBhbmVsLmhpZGUoKTtcbiAgICB0aGlzLnNpZGViYXJWaXNpYmxlID0gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBjbG9zZVNpZGViYXIoKTogdm9pZCB7XG4gICAgdGhpcy5zaWRlYmFyVmlzaWJsZSA9IGZhbHNlO1xuICAgIHRoaXMubWV0cmljcyA9IGNsb25lRGVlcCh0aGlzLmxhc3RTYXZlZE1ldHJpY3MpO1xuICAgIHRoaXMuZWRpdGluZ01ldHJpYyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnNlYXJjaENvbnRyb2wuc2V0VmFsdWUoJycpO1xuICB9XG5cbiAgcHVibGljIGdldE1ldHJpY1ZhbHVlKGtleTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jb250ZXh0U2VydmljZS5yZXNvbHZlKCk7XG4gICAgaWYgKGtleS5zdGFydHNXaXRoKCdFZmZlY3RpdmVfJykpIHtcbiAgICAgIGNvbnN0IGNvcnJlY3RLZXkgPSBrZXkucmVwbGFjZSgnRWZmZWN0aXZlXycsICcnKTtcbiAgICAgIHJldHVybiB0aGlzLnRvTnVtYmVyKGNvbnRleHQucHJvcGVydGllc1tjb3JyZWN0S2V5XSkgLSB0aGlzLnRvTnVtYmVyKGNvbnRleHQucHJvcGVydGllc1tgUHJldmlvdXMke2NvcnJlY3RLZXl9YF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXRyaWNzQ2FsY3VsYXRpb25TZXJ2aWNlLmdldE1ldHJpY1ZhbHVlKGtleSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNhdmUoKTogdm9pZCB7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oTUVUUklDU19TVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkodGhpcy5tZXRyaWNzKSk7XG4gICAgdGhpcy5zZXRNZXRyaWNzKCk7XG4gICAgdGhpcy5sYXN0U2F2ZWRNZXRyaWNzID0gY2xvbmVEZWVwKHRoaXMubWV0cmljcyk7XG4gICAgdGhpcy5jbG9zZVNpZGViYXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBjaGFuZ2VNZXRyaWNPcmRlcihldmVudDogQ2RrRHJhZ0Ryb3A8c3RyaW5nW10+KTogdm9pZCB7XG4gICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMubWV0cmljcywgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICB0aGlzLmZpbHRlcmVkTWV0cmljcyA9IHRoaXMubWV0cmljcztcbiAgfVxuXG4gIHB1YmxpYyBlZGl0TWV0cmljKG1ldHJpYzogTWV0cmljKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZWRpdGluZ01ldHJpYyAmJiB0aGlzLm5hbWVDb250cm9sLmludmFsaWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5lZGl0aW5nTWV0cmljID0gbWV0cmljO1xuICAgIHRoaXMubmFtZUNvbnRyb2wuc2V0VmFsdWUobWV0cmljLm5hbWUpO1xuICB9XG5cbiAgcHVibGljIHNhdmVNZXRyaWMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubmFtZUNvbnRyb2wuaW52YWxpZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5lZGl0aW5nTWV0cmljKSB7XG4gICAgICB0aGlzLmVkaXRpbmdNZXRyaWMubmFtZSA9IHRoaXMubmFtZUNvbnRyb2wudmFsdWU/LnRyaW0oKTtcbiAgICB9XG4gICAgdGhpcy5lZGl0aW5nTWV0cmljID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHJlc2V0VG9EZWZhdWx0KCk6IHZvaWQge1xuICAgIHRoaXMuY29sbGVjdEF2YWlsYWJsZU1ldHJpY3ModHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIGNvbGxlY3RNZXRyaWNLZXlzKGxpbmVJdGVtczogTGluZUl0ZW1bXSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBrZXlzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxpbmVJdGVtcy5mb3JFYWNoKGxpbmVJdGVtID0+IHtcbiAgICAgIGtleXMucHVzaCguLi5PYmplY3Qua2V5cyhsaW5lSXRlbS50b3RhbE1ldHJpY3MgfHwge30pKTtcbiAgICAgIGtleXMucHVzaCguLi50aGlzLmNvbGxlY3RNZXRyaWNLZXlzKGxpbmVJdGVtLmxpbmVJdGVtcykpO1xuICAgIH0pO1xuICAgIHJldHVybiB1bmlxKGtleXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRNZXRyaWNzKCk6IHZvaWQge1xuICAgIGNvbnN0IG1ldHJpY3MgPSBjbG9uZURlZXAodGhpcy5tZXRyaWNzLmZpbHRlcigoeyB2aXNpYmxlIH0pID0+IHZpc2libGUpKTtcblxuICAgIHRoaXMudmlzaWJsZVNlbGVjdGVkTWV0cmljcyA9IG1ldHJpY3Muc2xpY2UoMCwgNCk7XG4gICAgdGhpcy5yZXN0U2VsZWN0ZWRNZXRyaWNzID0gbWV0cmljcy5zbGljZSg0KTtcbiAgfVxuXG4gIHByaXZhdGUgY29sbGVjdEF2YWlsYWJsZU1ldHJpY3MocmVzZXRUb0RlZmF1bHQgPSBmYWxzZSk6IHZvaWQge1xuICAgIGNvbnN0IHN0b3JlZE1ldHJpY3M6IE1ldHJpY1tdID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShNRVRSSUNTX1NUT1JBR0VfS0VZKSB8fCAnW10nKTtcbiAgICBjb25zdCBtZXRyaWNLZXlzID0gdGhpcy5tZXRyaWNLZXlzLnNsaWNlKCk7XG4gICAgY29uc3QgaXNEZWZhdWx0Q29uZmlndXJhdGlvbiA9ICFzdG9yZWRNZXRyaWNzLmxlbmd0aCB8fCByZXNldFRvRGVmYXVsdDtcblxuICAgIHRoaXMubWV0cmljcyA9IChpc0RlZmF1bHRDb25maWd1cmF0aW9uID8gdGhpcy5hY3RpdmVNZXRyaWNSdWxlTmFtZXMgOiBzdG9yZWRNZXRyaWNzKS5yZWR1Y2UoKHJlc3VsdCwgbWV0cmljKSA9PiB7XG4gICAgICBjb25zdCBtZXRyaWNLZXlJbmRleCA9IG1ldHJpY0tleXMuZmluZEluZGV4KGtleSA9PiBrZXkgPT09IG1ldHJpYy5rZXkpO1xuXG4gICAgICBpZiAobWV0cmljS2V5SW5kZXggPj0gMCkge1xuICAgICAgICBtZXRyaWNLZXlzLnNwbGljZShtZXRyaWNLZXlJbmRleCwgMSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0RlZmF1bHRDb25maWd1cmF0aW9uICYmIHRoaXMuZGVmYXVsdE1ldHJpY1J1bGVOYW1lcy5pbmNsdWRlcyhtZXRyaWMubmFtZSkpIHtcbiAgICAgICAgbWV0cmljLnZpc2libGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gWy4uLnJlc3VsdCwgbWV0cmljXTtcbiAgICB9LCBbXSBhcyBNZXRyaWNbXSk7XG5cbiAgICB0aGlzLm1ldHJpY3MgPSBbXG4gICAgICAuLi50aGlzLm1ldHJpY3MsXG4gICAgICAuLi5tZXRyaWNLZXlzLm1hcChtZXRyaWNLZXkgPT4ge1xuICAgICAgICByZXR1cm4geyBrZXk6IG1ldHJpY0tleSwgbmFtZTogdGhpcy5nZXRNZXRyaWNOYW1lKG1ldHJpY0tleSksIHZpc2libGU6IGZhbHNlIH07XG4gICAgICB9KSxcbiAgICBdO1xuXG4gICAgLy8gc29ydCB0aGUgbWV0cmljcyBieSB0aGUgb3JkZXIgb2YgZGVmYXVsdCBtZXRyaWMgcnVsZSBuYW1lcyBmcm9tIHRoZSBzaG9wcGluZyBjYXJ0IHNldHRpbmdzXG4gICAgdGhpcy5tZXRyaWNzID0gdGhpcy5zb3J0TWV0cmljcygpO1xuXG4gICAgdGhpcy5tZXRyaWNzID0gY2xvbmVEZWVwKHRoaXMubWV0cmljcyk7XG4gICAgdGhpcy5zZWFyY2hDb250cm9sLnNldFZhbHVlKCcnKTtcblxuICAgIGlmICghcmVzZXRUb0RlZmF1bHQpIHtcbiAgICAgIHRoaXMubGFzdFNhdmVkTWV0cmljcyA9IGNsb25lRGVlcCh0aGlzLm1ldHJpY3MpO1xuICAgICAgdGhpcy5zZXRNZXRyaWNzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGdldE1ldHJpY05hbWUoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmFjdGl2ZU1ldHJpY1J1bGVzLmZpbmQobWV0cmljUnVsZSA9PiBtZXRyaWNSdWxlLm1ldHJpY3MuZmluZChtZXRyaWMgPT4gbWV0cmljLnRvdGFsTmFtZSA9PT0ga2V5KSk/LnRpdGxlIHx8XG4gICAgICBrZXlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB0b051bWJlcih2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKyh2YWx1ZSB8fCAwKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWN0aXZlTWV0cmljUnVsZU5hbWVzKCk6IE1ldHJpY1tdIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVNZXRyaWNSdWxlcy5yZWR1Y2UoKHJlc3VsdCwgbWV0cmljUnVsZSkgPT4ge1xuICAgICAgY29uc3QgbmFtZSA9IG1ldHJpY1J1bGUudGl0bGU7XG4gICAgICBjb25zdCB2aXNpYmxlID0gdGhpcy5kZWZhdWx0TWV0cmljUnVsZU5hbWVzLmluY2x1ZGVzKG5hbWUpO1xuXG4gICAgICBtZXRyaWNSdWxlLm1ldHJpY3MuZm9yRWFjaChtZXRyaWMgPT4ge1xuICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAga2V5OiBtZXRyaWMudG90YWxOYW1lIHx8IG1ldHJpYy5uYW1lLFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgdmlzaWJsZSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCBbXSBhcyBNZXRyaWNbXSk7XG4gIH1cblxuICAvKipcbiAgICogU29ydHMgdGhlIE1ldHJpY3MgYXJyYXkgYnkgdGhlIG9yZGVyIG9mIHRoZSBkZWZhdWx0IG1ldHJpYyBydWxlIG5hbWVzIGZyb20gdGhlIHNob3BwaW5nIGNhcnQgc2V0dGluZ3MuXG4gICAqIElmIGEgbWV0cmljIGlzIGluY2x1ZGVkIGluIHRoZSBsaXN0IG9mIGRlZmF1bHQgbWV0cmljcywgaXQgcmFpc2VzIHRoZSBtZXRyaWMgdG8gdGhlIHRvcCBvZiB0aGUgbWV0cmljcyBhcnJheS5cbiAgICovXG4gIHByaXZhdGUgc29ydE1ldHJpY3MoKTogTWV0cmljW10ge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY3Muc2xpY2UoKS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBjb25zdCBpbmRleEEgPSB0aGlzLmRlZmF1bHRNZXRyaWNSdWxlTmFtZXMuaW5kZXhPZihhLm5hbWUpO1xuICAgICAgY29uc3QgaW5kZXhCID0gdGhpcy5kZWZhdWx0TWV0cmljUnVsZU5hbWVzLmluZGV4T2YoYi5uYW1lKTtcblxuICAgICAgaWYgKGluZGV4QSA9PT0gLTEgJiYgaW5kZXhCID09PSAtMSkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cblxuICAgICAgaWYgKGluZGV4QSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG5cbiAgICAgIGlmIChpbmRleEIgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGluZGV4QSAtIGluZGV4QjtcbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImhlYWRlci1tZXRyaWNzXCIgKGNsaWNrKT1cIm92ZXJsYXlQYW5lbC50b2dnbGUoJGV2ZW50KVwiPlxuICA8ZGl2ICpuZ0Zvcj1cImxldCBtZXRyaWMgb2YgdmlzaWJsZVNlbGVjdGVkTWV0cmljc1wiIGNsYXNzPVwibWV0cmljXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJuYW1lXCIgW3ZsSGlkZGVuVGV4dFRvb2x0aXBdPVwibWV0cmljLm5hbWVcIiB0b29sdGlwU3R5bGVDbGFzcz1cIm1ldHJpYy10b29sdGlwXCIgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCI+XG4gICAgICB7eyBtZXRyaWMubmFtZSB9fVxuICAgIDwvc3Bhbj5cbiAgICA8c3BhbiBjbGFzcz1cImZpbGxlclwiPjwvc3Bhbj5cbiAgICA8c3BhblxuICAgICAgY2xhc3M9XCJ2YWx1ZVwiXG4gICAgICB2bEhpZGRlblRleHRUb29sdGlwPVwie3sgZ2V0TWV0cmljVmFsdWUobWV0cmljLmtleSkgfCB2bFByaWNlIH19XCJcbiAgICAgIHRvb2x0aXBTdHlsZUNsYXNzPVwibWV0cmljLXRvb2x0aXBcIlxuICAgICAgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgICA+XG4gICAgICB7eyBnZXRNZXRyaWNWYWx1ZShtZXRyaWMua2V5KSB8IHZsUHJpY2UgfX1cbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdmlzaWJsZVNlbGVjdGVkTWV0cmljcy5sZW5ndGhcIj5cbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBtZXRyaWMgb2YgZW1wdHlTdGF0ZU1ldHJpY3NcIiBjbGFzcz1cIm1ldHJpYyBlbXB0eS1zdGF0ZS1tZXRyaWNcIj5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzPVwibmFtZVwiXG4gICAgICAgIFt2bEhpZGRlblRleHRUb29sdGlwXT1cIm1ldHJpYy5uYW1lXCJcbiAgICAgICAgdG9vbHRpcFN0eWxlQ2xhc3M9XCJtZXRyaWMtdG9vbHRpcFwiXG4gICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiXG4gICAgICA+XG4gICAgICAgIHt7IG1ldHJpYy5uYW1lIH19XG4gICAgICA8L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cImZpbGxlclwiPjwvc3Bhbj5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzPVwidmFsdWVcIlxuICAgICAgICB2bEhpZGRlblRleHRUb29sdGlwPVwie3sgbWV0cmljLnZhbHVlIHwgdmxQcmljZSB9fVwiXG4gICAgICAgIHRvb2x0aXBTdHlsZUNsYXNzPVwibWV0cmljLXRvb2x0aXBcIlxuICAgICAgICB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIlxuICAgICAgPlxuICAgICAgICB7eyBtZXRyaWMudmFsdWUgfCB2bFByaWNlIH19XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxwLW92ZXJsYXlQYW5lbFxuICBzdHlsZUNsYXNzPVwibWV0cmljcy1vdmVybGF5LWNvbnRhaW5lciBjZW50ZXIgbm8tcGFkZGluZ1wiXG4gIHNob3dUcmFuc2l0aW9uT3B0aW9ucz1cIjBtc1wiXG4gIGhpZGVUcmFuc2l0aW9uT3B0aW9ucz1cIjBtc1wiXG4+XG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU+XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJsYXktbWV0cmljc1wiPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgbWV0cmljIG9mIHJlc3RTZWxlY3RlZE1ldHJpY3NcIiBjbGFzcz1cIm1ldHJpY1wiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwibmFtZVwiXG4gICAgICAgICAgW3ZsSGlkZGVuVGV4dFRvb2x0aXBdPVwibWV0cmljLm5hbWVcIlxuICAgICAgICAgIHRvb2x0aXBTdHlsZUNsYXNzPVwibWV0cmljLXRvb2x0aXBcIlxuICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBtZXRyaWMubmFtZSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZmlsbGVyXCI+PC9zcGFuPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwidmFsdWVcIlxuICAgICAgICAgIHZsSGlkZGVuVGV4dFRvb2x0aXA9XCJ7eyBnZXRNZXRyaWNWYWx1ZShtZXRyaWMua2V5KSB8IHZsUHJpY2UgfX1cIlxuICAgICAgICAgIHRvb2x0aXBTdHlsZUNsYXNzPVwibWV0cmljLXRvb2x0aXBcIlxuICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBnZXRNZXRyaWNWYWx1ZShtZXRyaWMua2V5KSB8IHZsUHJpY2UgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImNvbmZpZ1wiIChjbGljayk9XCJvcGVuU2lkZWJhcigpXCI+XG4gICAgICBNZXRyaWNzIENvbmZpZ1xuICAgICAgPGkgY2xhc3M9XCJ2bC1pY29uIHZsLWljb24tY2hldnJvbi1kb3duXCI+PC9pPlxuICAgIDwvYnV0dG9uPlxuICA8L25nLXRlbXBsYXRlPlxuPC9wLW92ZXJsYXlQYW5lbD5cblxuPHAtc2lkZWJhclxuICBbdmlzaWJsZV09XCJzaWRlYmFyVmlzaWJsZVwiXG4gICh2aXNpYmxlQ2hhbmdlKT1cImNsb3NlU2lkZWJhcigpXCJcbiAgcG9zaXRpb249XCJyaWdodFwiXG4gIFtiYXNlWkluZGV4XT1cIjEwMDBcIlxuICBbc3R5bGVdPVwieyB3aWR0aDogJzM2MHB4JyB9XCJcbj5cbiAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgIDxkaXYgY2xhc3M9XCJoZWFkZXJcIj5cbiAgICAgIFF1b3RlIE1ldHJpY3MgQ29uZmlnXG4gICAgICA8aSBjbGFzcz1cInZsLWljb24gdmwtaWNvbi1jbG9zZVwiIChjbGljayk9XCJjbG9zZVNpZGViYXIoKVwiPjwvaT5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtY29udGFpbmVyXCI+XG4gICAgICA8aW5wdXRcbiAgICAgICAgZGF0YS10ZXN0LWlkPVwic2VhcmNoXCJcbiAgICAgICAgW2Zvcm1Db250cm9sXT1cInNlYXJjaENvbnRyb2xcIlxuICAgICAgICBwSW5wdXRUZXh0XG4gICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGZvciBtZXRyaWPigKZcIlxuICAgICAgICBjbGFzcz1cInctZnVsbFwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzaWRlYmFyLW1ldHJpY3NcIiBjZGtEcm9wTGlzdCAoY2RrRHJvcExpc3REcm9wcGVkKT1cImNoYW5nZU1ldHJpY09yZGVyKCRldmVudClcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBtZXRyaWMgb2YgZmlsdGVyZWRNZXRyaWNzXCJcbiAgICAgICAgICBjbGFzcz1cInNpZGViYXItbWV0cmljXCJcbiAgICAgICAgICBbY2xhc3MuZWRpdF09XCJtZXRyaWMua2V5ID09PSBlZGl0aW5nTWV0cmljPy5rZXlcIlxuICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cIiEhc2VhcmNoQ29udHJvbC52YWx1ZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJhZy1pY29uXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cInZsLWljb24gdmwtaWNvbi1yZW9yZGVyXCIgY2RrRHJhZ0hhbmRsZT48L2k+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibWV0cmljVGVtcGxhdGVcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgbWV0cmljOiBtZXRyaWMgfVwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiZW1wdHktc3RhdGVcIiAqbmdJZj1cIiFmaWx0ZXJlZE1ldHJpY3MubGVuZ3RoXCI+VGhlcmUgYXJlIG5vIGl0ZW1zIG1hdGNoaW5nIHlvdXIgc2VhcmNoIGNyaXRlcmlhPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImZvb3RlclwiPlxuICAgICAgPHAtYnV0dG9uXG4gICAgICAgIGxhYmVsPVwiUmVzZXQgdG8gZGVmYXVsdFwiXG4gICAgICAgIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1vdXRsaW5lZCBwLWJ1dHRvbi1zbVwiXG4gICAgICAgIChvbkNsaWNrKT1cInJlc2V0VG9EZWZhdWx0KClcIlxuICAgICAgPjwvcC1idXR0b24+XG4gICAgICA8cC1idXR0b24gbGFiZWw9XCJTYXZlXCIgc3R5bGVDbGFzcz1cInAtYnV0dG9uIHAtYnV0dG9uLWZpbGxlZCBwLWJ1dHRvbi1zbVwiIChvbkNsaWNrKT1cInNhdmUoKVwiPjwvcC1idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9wLXNpZGViYXI+XG5cbjxuZy10ZW1wbGF0ZSAjbWV0cmljVGVtcGxhdGUgbGV0LW1ldHJpYz1cIm1ldHJpY1wiPlxuICA8ZGl2ICpuZ0lmPVwiZWRpdGluZ01ldHJpYz8ua2V5ICE9PSBtZXRyaWMua2V5XCIgY2xhc3M9XCJwcmV2aWV3LXN0YXRlXCI+XG4gICAgPHAtY2hlY2tib3hcbiAgICAgIFtuZ01vZGVsXT1cIm1ldHJpYy52aXNpYmxlXCJcbiAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm1ldHJpYy52aXNpYmxlID0gIW1ldHJpYy52aXNpYmxlXCJcbiAgICAgIFtiaW5hcnldPVwidHJ1ZVwiXG4gICAgICBjaGVja2JveEljb249XCJ2bC1pY29uIHZsLWljb24tY2hlY2ttYXJrXCJcbiAgICA+PC9wLWNoZWNrYm94PlxuICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPnt7IG1ldHJpYy5uYW1lIH19PC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9XCJlZGl0aW5nTWV0cmljPy5rZXkgPT09IG1ldHJpYy5rZXlcIiBjbGFzcz1cImVkaXQtc3RhdGVcIj5cbiAgICA8aW5wdXQgZGF0YS10ZXN0LWlkPVwibmFtZVwiIFtmb3JtQ29udHJvbF09XCJuYW1lQ29udHJvbFwiIHBJbnB1dFRleHQgcGxhY2Vob2xkZXI9XCJNZXRyaWMgbmFtZVwiIGNsYXNzPVwidy1mdWxsXCIgLz5cbiAgICA8dmwtZXJyb3ItdG9vbHRpcCBbdG9vbHRpcF09XCJuYW1lQ29udHJvbCB8IGVycm9yIDogJ25hbWUnXCIgW3Zpc2libGVdPVwiISFuYW1lQ29udHJvbC5lcnJvcnNcIj48L3ZsLWVycm9yLXRvb2x0aXA+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwiZWRpdGluZ01ldHJpYz8ua2V5ICE9PSBtZXRyaWMua2V5XCIgKGNsaWNrKT1cImVkaXRNZXRyaWMobWV0cmljKVwiIGNsYXNzPVwiYWN0aW9uIGVkaXRcIj5cbiAgICA8aSBjbGFzcz1cInZsLWljb24gdmwtaWNvbi1lZGl0LXNtXCI+PC9pPlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cImVkaXRpbmdNZXRyaWM/LmtleSA9PT0gbWV0cmljLmtleVwiIChjbGljayk9XCJzYXZlTWV0cmljKClcIiBjbGFzcz1cImFjdGlvbiBzYXZlXCI+XG4gICAgPGkgY2xhc3M9XCJ2bC1pY29uIHZsLWljb24tY2hlY2ttYXJrXCI+PC9pPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
244
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Nkay9zcmMvY29tcG9uZW50cy9oZWFkZXIvbWV0cmljcy9tZXRyaWNzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL3NyYy9jb21wb25lbnRzL2hlYWRlci9tZXRyaWNzL21ldHJpY3MuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFlLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwSCxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpFLE9BQU8sRUFDTCwwQkFBMEIsRUFDMUIsaUJBQWlCLEVBQ2pCLDJCQUEyQixFQUMzQiw4QkFBOEIsR0FDL0IsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQ0wsY0FBYyxFQUNkLHdCQUF3QixFQUN4Qix5QkFBeUIsRUFDekIsaUJBQWlCLEVBQ2pCLHNCQUFzQixHQUN2QixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUs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dWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNob3BwaW5nQ2FydFNldHRpbmdzQXBpU2VydmljZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL2FwaSc7XG5pbXBvcnQgeyBMaW5lSXRlbSwgTWV0cmljUnVsZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL2NvcmUnO1xuaW1wb3J0IHtcbiAgaW52YWxpZENoYXJhY3RlcnNWYWxpZGF0b3IsXG4gIHJlcXVpcmVkVmFsaWRhdG9yLFxuICByZXNlcnZlZElkZW50aWZpZXJWYWxpZGF0b3IsXG4gIHN0YW5kYXJkQ2hhclNldFdpdGhTcGFjZVJlZ0V4cCxcbn0gZnJvbSAnQHZlbG9jZWFwcHMvY29yZS9mb3Jtcyc7XG5pbXBvcnQge1xuICBDb250ZXh0U2VydmljZSxcbiAgRmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICBNZXRyaWNzQ2FsY3VsYXRpb25TZXJ2aWNlLFxuICBRdW90ZURyYWZ0U2VydmljZSxcbiAgUnVudGltZVNldHRpbmdzU2VydmljZSxcbn0gZnJvbSAnQHZlbG9jZWFwcHMvc2RrL2NvcmUnO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCB1bmlxIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IE92ZXJsYXlQYW5lbCB9IGZyb20gJ3ByaW1lbmcvb3ZlcmxheXBhbmVsJztcbmltcG9ydCB7IFN1YmplY3QsIHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsLCB0YXAsIHdpdGhMYXRlc3RGcm9tIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTWV0cmljIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgTUVUUklDU19TVE9SQUdFX0tFWSB9IGZyb20gJy4vbWV0cmljcy5kZWZpbml0aW9ucyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZsLW1ldHJpY3MnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWV0cmljcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21ldHJpY3MuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE1ldHJpY3NDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoT3ZlcmxheVBhbmVsKVxuICBwdWJsaWMgb3ZlcmxheVBhbmVsITogT3ZlcmxheVBhbmVsO1xuXG4gIHB1YmxpYyBlbXB0eVN0YXRlTWV0cmljcyA9IFtcbiAgICB7IG5hbWU6ICdNUlInLCB2YWx1ZTogMCB9LFxuICAgIHsgbmFtZTogJ0UuTVJSJywgdmFsdWU6IDAgfSxcbiAgICB7IG5hbWU6ICdOUlInLCB2YWx1ZTogMCB9LFxuICAgIHsgbmFtZTogJ0UuTlJSJywgdmFsdWU6IDAgfSxcbiAgXTtcbiAgcHVibGljIHZpc2libGVTZWxlY3RlZE1ldHJpY3M6IE1ldHJpY1tdID0gW107XG4gIHB1YmxpYyByZXN0U2VsZWN0ZWRNZXRyaWNzOiBNZXRyaWNbXSA9IFtdO1xuICBwdWJsaWMgbWV0cmljczogTWV0cmljW10gPSBbXTtcbiAgcHVibGljIGZpbHRlcmVkTWV0cmljczogTWV0cmljW10gPSBbXTtcbiAgcHVibGljIGVkaXRpbmdNZXRyaWM6IE1ldHJpYyB8IHVuZGVmaW5lZDtcbiAgcHVibGljIGN1cnJlbmN5U3ltYm9sOiBzdHJpbmc7XG4gIHB1YmxpYyBzaWRlYmFyVmlzaWJsZSA9IGZhbHNlO1xuICBwdWJsaWMgc2VhcmNoQ29udHJvbDogRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xuICBwdWJsaWMgbmFtZUNvbnRyb2w6IEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnLCBbXG4gICAgcmVxdWlyZWRWYWxpZGF0b3IsXG4gICAgaW52YWxpZENoYXJhY3RlcnNWYWxpZGF0b3Ioc3RhbmRhcmRDaGFyU2V0V2l0aFNwYWNlUmVnRXhwKSxcbiAgICByZXNlcnZlZElkZW50aWZpZXJWYWxpZGF0b3IsXG4gICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgoODApLFxuICBdKTtcblxuICBwcml2YXRlIGFjdGl2ZU1ldHJpY1J1bGVzOiBNZXRyaWNSdWxlW10gPSBbXTtcbiAgcHJpdmF0ZSBhY3RpdmVNZXRyaWNSdWxlTmFtZXM6IE1ldHJpY1tdID0gW107XG4gIHByaXZhdGUgZGVmYXVsdE1ldHJpY1J1bGVOYW1lczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBtZXRyaWNLZXlzOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIGxhc3RTYXZlZE1ldHJpY3M6IE1ldHJpY1tdID0gW107XG4gIHByaXZhdGUgZGVzdHJveWVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjb250ZXh0U2VydmljZTogQ29udGV4dFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBxdW90ZURyYWZ0U2VydmljZTogUXVvdGVEcmFmdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgbWV0cmljc0NhbGN1bGF0aW9uU2VydmljZTogTWV0cmljc0NhbGN1bGF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGZsb3dDb25maWd1cmF0aW9uOiBGbG93Q29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzaG9wcGluZ0NhcnRTZXR0aW5nc0FwaVNlcnZpY2U6IFNob3BwaW5nQ2FydFNldHRpbmdzQXBpU2VydmljZSxcbiAgICBwcml2YXRlIHJ1bnRpbWVTZXR0aW5nczogUnVudGltZVNldHRpbmdzU2VydmljZSxcbiAgKSB7XG4gICAgdGhpcy5jdXJyZW5jeVN5bWJvbCA9IHRoaXMucnVudGltZVNldHRpbmdzLmdldEN1cnJlbmN5U2V0dGluZ3MoKS5zeW1ib2w7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVNZXRyaWNSdWxlcyA9IHRoaXMuZmxvd0NvbmZpZ3VyYXRpb24uYWN0aXZlTWV0cmljc1NuYXBzaG90LmZpbHRlcihtZXRyaWNSdWxlID0+XG4gICAgICBtZXRyaWNSdWxlLm1ldHJpY3Muc29tZShtZXRyaWMgPT4gISFtZXRyaWMudG90YWxOYW1lKSxcbiAgICApO1xuICAgIGNvbnN0IGFjdGl2ZU1ldHJpY1J1bGVOYW1lcyA9IHRoaXMuYWN0aXZlTWV0cmljUnVsZXMubWFwKG1ldHJpY1J1bGUgPT4gbWV0cmljUnVsZS50aXRsZSk7XG5cbiAgICB0aGlzLnNob3BwaW5nQ2FydFNldHRpbmdzQXBpU2VydmljZVxuICAgICAgLmdldFNldHRpbmdzTWFwKClcbiAgICAgIC5waXBlKFxuICAgICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLmN1cnJlbnRTdGF0ZSQpLFxuICAgICAgICB0YXAoKFtzZXR0aW5ncywgbGluZUl0ZW1zXSkgPT4ge1xuICAgICAgICAgIHRoaXMuZGVmYXVsdE1ldHJpY1J1bGVOYW1lcyA9IChzZXR0aW5ncz8uREVGQVVMVF9IRUFERVJfTUVUUklDUyB8fCBbXSkuZmlsdGVyKHJ1bGVOYW1lID0+XG4gICAgICAgICAgICBhY3RpdmVNZXRyaWNSdWxlTmFtZXMuaW5jbHVkZXMocnVsZU5hbWUpLFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5tZXRyaWNLZXlzID0gdGhpcy5jb2xsZWN0TWV0cmljS2V5cyhsaW5lSXRlbXMpO1xuICAgICAgICAgIHRoaXMuYWN0aXZlTWV0cmljUnVsZU5hbWVzID0gdGhpcy5nZXRBY3RpdmVNZXRyaWNSdWxlTmFtZXMoKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuY29sbGVjdEF2YWlsYWJsZU1ldHJpY3MoKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5zZWFyY2hDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpLCBzdGFydFdpdGgoJycpKS5zdWJzY3JpYmUocXVlcnkgPT4ge1xuICAgICAgdGhpcy5maWx0ZXJlZE1ldHJpY3MgPSB0aGlzLm1ldHJpY3MuZmlsdGVyKCh7IG5hbWUgfSkgPT4ge1xuICAgICAgICByZXR1cm4gKG5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocXVlcnk/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLm1ldHJpY3NDYWxjdWxhdGlvblNlcnZpY2Uub25NZXRyaWNzVXBkYXRlJFxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95ZWQkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3llZCQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVPdmVybGF5KGV2ZW50OiBNb3VzZUV2ZW50LCBvdmVybGF5OiBPdmVybGF5UGFuZWwsIHRhcmdldDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGlmICh0aGlzLnJlc3RTZWxlY3RlZE1ldHJpY3MubGVuZ3RoKSB7XG4gICAgICBpZiAoIW92ZXJsYXkub3ZlcmxheVZpc2libGUpIHtcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2NsaWNrJykpO1xuICAgICAgfVxuXG4gICAgICBvdmVybGF5LnRvZ2dsZShldmVudCwgdGFyZ2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGVuU2lkZWJhcigpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvcGVuU2lkZWJhcigpOiB2b2lkIHtcbiAgICB0aGlzLm92ZXJsYXlQYW5lbC5oaWRlKCk7XG4gICAgdGhpcy5zaWRlYmFyVmlzaWJsZSA9IHRydWU7XG4gIH1cblxuICBwdWJsaWMgY2xvc2VTaWRlYmFyKCk6IHZvaWQge1xuICAgIHRoaXMuc2lkZWJhclZpc2libGUgPSBmYWxzZTtcbiAgICB0aGlzLm1ldHJpY3MgPSBjbG9uZURlZXAodGhpcy5sYXN0U2F2ZWRNZXRyaWNzKTtcbiAgICB0aGlzLmVkaXRpbmdNZXRyaWMgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5zZWFyY2hDb250cm9sLnNldFZhbHVlKCcnKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNZXRyaWNWYWx1ZShrZXk6IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dFNlcnZpY2UucmVzb2x2ZSgpO1xuICAgIGlmIChrZXkuc3RhcnRzV2l0aCgnRWZmZWN0aXZlXycpKSB7XG4gICAgICBjb25zdCBjb3JyZWN0S2V5ID0ga2V5LnJlcGxhY2UoJ0VmZmVjdGl2ZV8nLCAnJyk7XG4gICAgICByZXR1cm4gdGhpcy50b051bWJlcihjb250ZXh0LnByb3BlcnRpZXNbY29ycmVjdEtleV0pIC0gdGhpcy50b051bWJlcihjb250ZXh0LnByb3BlcnRpZXNbYFByZXZpb3VzJHtjb3JyZWN0S2V5fWBdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMubWV0cmljc0NhbGN1bGF0aW9uU2VydmljZS5nZXRNZXRyaWNWYWx1ZShrZXkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzYXZlKCk6IHZvaWQge1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKE1FVFJJQ1NfU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KHRoaXMubWV0cmljcykpO1xuICAgIHRoaXMuc2V0TWV0cmljcygpO1xuICAgIHRoaXMubGFzdFNhdmVkTWV0cmljcyA9IGNsb25lRGVlcCh0aGlzLm1ldHJpY3MpO1xuICAgIHRoaXMuY2xvc2VTaWRlYmFyKCk7XG4gIH1cblxuICBwdWJsaWMgY2hhbmdlTWV0cmljT3JkZXIoZXZlbnQ6IENka0RyYWdEcm9wPHN0cmluZ1tdPik6IHZvaWQge1xuICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLm1ldHJpY3MsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XG4gICAgdGhpcy5maWx0ZXJlZE1ldHJpY3MgPSB0aGlzLm1ldHJpY3M7XG4gIH1cblxuICBwdWJsaWMgZWRpdE1ldHJpYyhtZXRyaWM6IE1ldHJpYyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVkaXRpbmdNZXRyaWMgJiYgdGhpcy5uYW1lQ29udHJvbC5pbnZhbGlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZWRpdGluZ01ldHJpYyA9IG1ldHJpYztcbiAgICB0aGlzLm5hbWVDb250cm9sLnNldFZhbHVlKG1ldHJpYy5uYW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBzYXZlTWV0cmljKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm5hbWVDb250cm9sLmludmFsaWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuZWRpdGluZ01ldHJpYykge1xuICAgICAgdGhpcy5lZGl0aW5nTWV0cmljLm5hbWUgPSB0aGlzLm5hbWVDb250cm9sLnZhbHVlPy50cmltKCk7XG4gICAgfVxuICAgIHRoaXMuZWRpdGluZ01ldHJpYyA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBjYW5jZWxNZXRyaWMoKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0aW5nTWV0cmljID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHJlc2V0VG9EZWZhdWx0KCk6IHZvaWQge1xuICAgIHRoaXMuY29sbGVjdEF2YWlsYWJsZU1ldHJpY3ModHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIGNvbGxlY3RNZXRyaWNLZXlzKGxpbmVJdGVtczogTGluZUl0ZW1bXSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBrZXlzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxpbmVJdGVtcy5mb3JFYWNoKGxpbmVJdGVtID0+IHtcbiAgICAgIGtleXMucHVzaCguLi5PYmplY3Qua2V5cyhsaW5lSXRlbS50b3RhbE1ldHJpY3MgfHwge30pKTtcbiAgICAgIGtleXMucHVzaCguLi50aGlzLmNvbGxlY3RNZXRyaWNLZXlzKGxpbmVJdGVtLmxpbmVJdGVtcykpO1xuICAgIH0pO1xuICAgIHJldHVybiB1bmlxKGtleXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRNZXRyaWNzKCk6IHZvaWQge1xuICAgIGNvbnN0IG1ldHJpY3MgPSBjbG9uZURlZXAodGhpcy5tZXRyaWNzLmZpbHRlcigoeyB2aXNpYmxlIH0pID0+IHZpc2libGUpKTtcblxuICAgIHRoaXMudmlzaWJsZVNlbGVjdGVkTWV0cmljcyA9IG1ldHJpY3Muc2xpY2UoMCwgNCk7XG4gICAgdGhpcy5yZXN0U2VsZWN0ZWRNZXRyaWNzID0gbWV0cmljcy5zbGljZSg0KTtcbiAgfVxuXG4gIHByaXZhdGUgY29sbGVjdEF2YWlsYWJsZU1ldHJpY3MocmVzZXRUb0RlZmF1bHQgPSBmYWxzZSk6IHZvaWQge1xuICAgIGNvbnN0IHN0b3JlZE1ldHJpY3M6IE1ldHJpY1tdID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShNRVRSSUNTX1NUT1JBR0VfS0VZKSB8fCAnW10nKTtcbiAgICBjb25zdCBtZXRyaWNLZXlzID0gdGhpcy5tZXRyaWNLZXlzLnNsaWNlKCk7XG4gICAgY29uc3QgaXNEZWZhdWx0Q29uZmlndXJhdGlvbiA9ICFzdG9yZWRNZXRyaWNzLmxlbmd0aCB8fCByZXNldFRvRGVmYXVsdDtcblxuICAgIHRoaXMubWV0cmljcyA9IChpc0RlZmF1bHRDb25maWd1cmF0aW9uID8gdGhpcy5hY3RpdmVNZXRyaWNSdWxlTmFtZXMgOiBzdG9yZWRNZXRyaWNzKS5yZWR1Y2UoKHJlc3VsdCwgbWV0cmljKSA9PiB7XG4gICAgICBjb25zdCBtZXRyaWNLZXlJbmRleCA9IG1ldHJpY0tleXMuZmluZEluZGV4KGtleSA9PiBrZXkgPT09IG1ldHJpYy5rZXkpO1xuXG4gICAgICBpZiAobWV0cmljS2V5SW5kZXggPj0gMCkge1xuICAgICAgICBtZXRyaWNLZXlzLnNwbGljZShtZXRyaWNLZXlJbmRleCwgMSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0RlZmF1bHRDb25maWd1cmF0aW9uICYmIHRoaXMuZGVmYXVsdE1ldHJpY1J1bGVOYW1lcy5pbmNsdWRlcyhtZXRyaWMubmFtZSkpIHtcbiAgICAgICAgbWV0cmljLnZpc2libGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gWy4uLnJlc3VsdCwgbWV0cmljXTtcbiAgICB9LCBbXSBhcyBNZXRyaWNbXSk7XG5cbiAgICB0aGlzLm1ldHJpY3MgPSBbXG4gICAgICAuLi50aGlzLm1ldHJpY3MsXG4gICAgICAuLi5tZXRyaWNLZXlzLm1hcChtZXRyaWNLZXkgPT4ge1xuICAgICAgICByZXR1cm4geyBrZXk6IG1ldHJpY0tleSwgbmFtZTogdGhpcy5nZXRNZXRyaWNOYW1lKG1ldHJpY0tleSksIHZpc2libGU6IGZhbHNlIH07XG4gICAgICB9KSxcbiAgICBdO1xuXG4gICAgLy8gc29ydCB0aGUgbWV0cmljcyBieSB0aGUgb3JkZXIgb2YgZGVmYXVsdCBtZXRyaWMgcnVsZSBuYW1lcyBmcm9tIHRoZSBzaG9wcGluZyBjYXJ0IHNldHRpbmdzXG4gICAgdGhpcy5tZXRyaWNzID0gdGhpcy5zb3J0TWV0cmljcygpO1xuXG4gICAgdGhpcy5tZXRyaWNzID0gY2xvbmVEZWVwKHRoaXMubWV0cmljcyk7XG4gICAgdGhpcy5zZWFyY2hDb250cm9sLnNldFZhbHVlKCcnKTtcblxuICAgIGlmICghcmVzZXRUb0RlZmF1bHQpIHtcbiAgICAgIHRoaXMubGFzdFNhdmVkTWV0cmljcyA9IGNsb25lRGVlcCh0aGlzLm1ldHJpY3MpO1xuICAgICAgdGhpcy5zZXRNZXRyaWNzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGdldE1ldHJpY05hbWUoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmFjdGl2ZU1ldHJpY1J1bGVzLmZpbmQobWV0cmljUnVsZSA9PiBtZXRyaWNSdWxlLm1ldHJpY3MuZmluZChtZXRyaWMgPT4gbWV0cmljLnRvdGFsTmFtZSA9PT0ga2V5KSk/LnRpdGxlIHx8XG4gICAgICBrZXlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB0b051bWJlcih2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKyh2YWx1ZSB8fCAwKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWN0aXZlTWV0cmljUnVsZU5hbWVzKCk6IE1ldHJpY1tdIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVNZXRyaWNSdWxlcy5yZWR1Y2UoKHJlc3VsdCwgbWV0cmljUnVsZSkgPT4ge1xuICAgICAgY29uc3QgbmFtZSA9IG1ldHJpY1J1bGUudGl0bGU7XG4gICAgICBjb25zdCB2aXNpYmxlID0gdGhpcy5kZWZhdWx0TWV0cmljUnVsZU5hbWVzLmluY2x1ZGVzKG5hbWUpO1xuXG4gICAgICBtZXRyaWNSdWxlLm1ldHJpY3MuZm9yRWFjaChtZXRyaWMgPT4ge1xuICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAga2V5OiBtZXRyaWMudG90YWxOYW1lIHx8IG1ldHJpYy5uYW1lLFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgdmlzaWJsZSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCBbXSBhcyBNZXRyaWNbXSk7XG4gIH1cblxuICAvKipcbiAgICogU29ydHMgdGhlIE1ldHJpY3MgYXJyYXkgYnkgdGhlIG9yZGVyIG9mIHRoZSBkZWZhdWx0IG1ldHJpYyBydWxlIG5hbWVzIGZyb20gdGhlIHNob3BwaW5nIGNhcnQgc2V0dGluZ3MuXG4gICAqIElmIGEgbWV0cmljIGlzIGluY2x1ZGVkIGluIHRoZSBsaXN0IG9mIGRlZmF1bHQgbWV0cmljcywgaXQgcmFpc2VzIHRoZSBtZXRyaWMgdG8gdGhlIHRvcCBvZiB0aGUgbWV0cmljcyBhcnJheS5cbiAgICovXG4gIHByaXZhdGUgc29ydE1ldHJpY3MoKTogTWV0cmljW10ge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY3Muc2xpY2UoKS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBjb25zdCBpbmRleEEgPSB0aGlzLmRlZmF1bHRNZXRyaWNSdWxlTmFtZXMuaW5kZXhPZihhLm5hbWUpO1xuICAgICAgY29uc3QgaW5kZXhCID0gdGhpcy5kZWZhdWx0TWV0cmljUnVsZU5hbWVzLmluZGV4T2YoYi5uYW1lKTtcblxuICAgICAgaWYgKGluZGV4QSA9PT0gLTEgJiYgaW5kZXhCID09PSAtMSkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cblxuICAgICAgaWYgKGluZGV4QSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG5cbiAgICAgIGlmIChpbmRleEIgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGluZGV4QSAtIGluZGV4QjtcbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImhlYWRlci1tZXRyaWNzXCIgKGNsaWNrKT1cInRvZ2dsZU92ZXJsYXkoJGV2ZW50LCBvdmVybGF5UGFuZWwsIG1ldHJpY3NUYXJnZXQpXCI+XG4gIDxkaXYgY2xhc3M9XCJtZXRyaWNzXCI+XG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgbWV0cmljIG9mIHZpc2libGVTZWxlY3RlZE1ldHJpY3NcIiBjbGFzcz1cIm1ldHJpY1wiPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJuYW1lXCJcbiAgICAgICAgW3ZsSGlkZGVuVGV4dFRvb2x0aXBdPVwibWV0cmljLm5hbWVcIlxuICAgICAgICB0b29sdGlwU3R5bGVDbGFzcz1cIm1ldHJpYy10b29sdGlwXCJcbiAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgICAgID5cbiAgICAgICAge3sgbWV0cmljLm5hbWUgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiZmlsbGVyXCI+PC9zcGFuPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJ2YWx1ZVwiXG4gICAgICAgIHZsSGlkZGVuVGV4dFRvb2x0aXA9XCJ7eyBnZXRNZXRyaWNWYWx1ZShtZXRyaWMua2V5KSB8IHZsUHJpY2UgfX1cIlxuICAgICAgICB0b29sdGlwU3R5bGVDbGFzcz1cIm1ldHJpYy10b29sdGlwXCJcbiAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgICAgID5cbiAgICAgICAge3sgZ2V0TWV0cmljVmFsdWUobWV0cmljLmtleSkgfCB2bFByaWNlIH19XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXZpc2libGVTZWxlY3RlZE1ldHJpY3MubGVuZ3RoXCI+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBtZXRyaWMgb2YgZW1wdHlTdGF0ZU1ldHJpY3NcIiBjbGFzcz1cIm1ldHJpYyBlbXB0eS1zdGF0ZS1tZXRyaWNcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cIm5hbWVcIlxuICAgICAgICAgIFt2bEhpZGRlblRleHRUb29sdGlwXT1cIm1ldHJpYy5uYW1lXCJcbiAgICAgICAgICB0b29sdGlwU3R5bGVDbGFzcz1cIm1ldHJpYy10b29sdGlwXCJcbiAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIlxuICAgICAgICA+XG4gICAgICAgICAge3sgbWV0cmljLm5hbWUgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImZpbGxlclwiPjwvc3Bhbj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cInZhbHVlXCJcbiAgICAgICAgICB2bEhpZGRlblRleHRUb29sdGlwPVwie3sgbWV0cmljLnZhbHVlIHwgdmxQcmljZSB9fVwiXG4gICAgICAgICAgdG9vbHRpcFN0eWxlQ2xhc3M9XCJtZXRyaWMtdG9vbHRpcFwiXG4gICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IG1ldHJpYy52YWx1ZSB8IHZsUHJpY2UgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuXG4gIDxkaXYgI21ldHJpY3NUYXJnZXQgY2xhc3M9XCJtZXRyaWNzLW92ZXJsYXktdGFyZ2V0XCIgW2NsYXNzLmV4cGFuZGVkXT1cIm92ZXJsYXlQYW5lbD8ub3ZlcmxheVZpc2libGVcIj5cbiAgICA8aSBjbGFzcz1cInZsLWljb24gdmwtYXJyb3ctZG93blwiPjwvaT5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPHAtb3ZlcmxheVBhbmVsXG4gIHN0eWxlQ2xhc3M9XCJjYXRhbG9nLW92ZXJsYXkgbWV0cmljcy1vdmVybGF5LWNvbnRhaW5lciByaWdodCBuby1wYWRkaW5nXCJcbiAgc2hvd1RyYW5zaXRpb25PcHRpb25zPVwiMG1zXCJcbiAgaGlkZVRyYW5zaXRpb25PcHRpb25zPVwiMG1zXCJcbj5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT5cbiAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheS1tZXRyaWNzXCI+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBtZXRyaWMgb2YgcmVzdFNlbGVjdGVkTWV0cmljc1wiIGNsYXNzPVwibWV0cmljXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJuYW1lXCJcbiAgICAgICAgICBbdmxIaWRkZW5UZXh0VG9vbHRpcF09XCJtZXRyaWMubmFtZVwiXG4gICAgICAgICAgdG9vbHRpcFN0eWxlQ2xhc3M9XCJtZXRyaWMtdG9vbHRpcFwiXG4gICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IG1ldHJpYy5uYW1lIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWxsZXJcIj48L3NwYW4+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJ2YWx1ZVwiXG4gICAgICAgICAgdmxIaWRkZW5UZXh0VG9vbHRpcD1cInt7IGdldE1ldHJpY1ZhbHVlKG1ldHJpYy5rZXkpIHwgdmxQcmljZSB9fVwiXG4gICAgICAgICAgdG9vbHRpcFN0eWxlQ2xhc3M9XCJtZXRyaWMtdG9vbHRpcFwiXG4gICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGdldE1ldHJpY1ZhbHVlKG1ldHJpYy5rZXkpIHwgdmxQcmljZSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiY29uZmlnXCIgKGNsaWNrKT1cIm9wZW5TaWRlYmFyKClcIj5cbiAgICAgIE1ldHJpY3MgQ29uZmlnXG4gICAgICA8aSBjbGFzcz1cInZsLWljb24gdmwtYXJyb3ctcmlnaHRcIj48L2k+XG4gICAgPC9idXR0b24+XG4gIDwvbmctdGVtcGxhdGU+XG48L3Atb3ZlcmxheVBhbmVsPlxuXG48cC1zaWRlYmFyXG4gIFt2aXNpYmxlXT1cInNpZGViYXJWaXNpYmxlXCJcbiAgKHZpc2libGVDaGFuZ2UpPVwiY2xvc2VTaWRlYmFyKClcIlxuICBwb3NpdGlvbj1cInJpZ2h0XCJcbiAgW2Jhc2VaSW5kZXhdPVwiMTAwMFwiXG4gIFtzdHlsZV09XCJ7IHdpZHRoOiAnMzAwcHgnIH1cIlxuPlxuICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImhlYWRlclwiPlxuICAgICAgUXVvdGUgTWV0cmljcyBDb25maWdcbiAgICAgIDxpIGNsYXNzPVwidmwtaWNvbiB2bC1jcm9zc1wiIChjbGljayk9XCJjbG9zZVNpZGViYXIoKVwiPjwvaT5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gICAgPGRpdiBjbGFzcz1cInNlYXJjaC1jb250YWluZXJcIj4tLT5cbiAgICA8IS0tICAgICAgPGlucHV0LS0+XG4gICAgPCEtLSAgICAgICAgZGF0YS10ZXN0LWlkPVwic2VhcmNoXCItLT5cbiAgICA8IS0tICAgICAgICBbZm9ybUNvbnRyb2xdPVwic2VhcmNoQ29udHJvbFwiLS0+XG4gICAgPCEtLSAgICAgICAgcElucHV0VGV4dC0tPlxuICAgIDwhLS0gICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGZvciBtZXRyaWPigKZcIi0tPlxuICAgIDwhLS0gICAgICAgIGNsYXNzPVwidy1mdWxsXCItLT5cbiAgICA8IS0tICAgICAgLz4tLT5cbiAgICA8IS0tICAgIDwvZGl2Pi0tPlxuXG4gICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzaWRlYmFyLW1ldHJpY3NcIiBjZGtEcm9wTGlzdCAoY2RrRHJvcExpc3REcm9wcGVkKT1cImNoYW5nZU1ldHJpY09yZGVyKCRldmVudClcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBtZXRyaWMgb2YgZmlsdGVyZWRNZXRyaWNzXCJcbiAgICAgICAgICBjbGFzcz1cInNpZGViYXItbWV0cmljXCJcbiAgICAgICAgICBbY2xhc3MuZWRpdF09XCJtZXRyaWMua2V5ID09PSBlZGl0aW5nTWV0cmljPy5rZXlcIlxuICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cIiEhc2VhcmNoQ29udHJvbC52YWx1ZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJhZy1pY29uXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cInZsLWljb24gdmwtZHJhZ1wiIGNka0RyYWdIYW5kbGU+PC9pPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm1ldHJpY1RlbXBsYXRlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IG1ldHJpYzogbWV0cmljIH1cIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlXCIgKm5nSWY9XCIhZmlsdGVyZWRNZXRyaWNzLmxlbmd0aFwiPlRoZXJlIGFyZSBubyBpdGVtcyBtYXRjaGluZyB5b3VyIHNlYXJjaCBjcml0ZXJpYTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmb290ZXJcIj5cbiAgICAgIDxwLWJ1dHRvblxuICAgICAgICBsYWJlbD1cIlJlc2V0IHRvIGRlZmF1bHRcIlxuICAgICAgICBzdHlsZUNsYXNzPVwicC1idXR0b24tb3V0bGluZWQgcC1idXR0b24tc21cIlxuICAgICAgICAob25DbGljayk9XCJyZXNldFRvRGVmYXVsdCgpXCJcbiAgICAgID48L3AtYnV0dG9uPlxuICAgICAgPHAtYnV0dG9uIGxhYmVsPVwiU2F2ZVwiIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbiBwLWJ1dHRvbi1maWxsZWQgcC1idXR0b24tc21cIiAob25DbGljayk9XCJzYXZlKClcIj48L3AtYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvcC1zaWRlYmFyPlxuXG48bmctdGVtcGxhdGUgI21ldHJpY1RlbXBsYXRlIGxldC1tZXRyaWM9XCJtZXRyaWNcIj5cbiAgPGRpdiAqbmdJZj1cImVkaXRpbmdNZXRyaWM/LmtleSAhPT0gbWV0cmljLmtleVwiIGNsYXNzPVwicHJldmlldy1zdGF0ZVwiPlxuICAgIDxwLWNoZWNrYm94XG4gICAgICBbbmdNb2RlbF09XCJtZXRyaWMudmlzaWJsZVwiXG4gICAgICAobmdNb2RlbENoYW5nZSk9XCJtZXRyaWMudmlzaWJsZSA9ICFtZXRyaWMudmlzaWJsZVwiXG4gICAgICBbYmluYXJ5XT1cInRydWVcIlxuICAgICAgY2hlY2tib3hJY29uPVwidmwtaWNvbiB2bC1pY29uLWNoZWNrbWFya1wiXG4gICAgPjwvcC1jaGVja2JveD5cbiAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj57eyBtZXRyaWMubmFtZSB9fTwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2ICpuZ0lmPVwiZWRpdGluZ01ldHJpYz8ua2V5ID09PSBtZXRyaWMua2V5XCIgY2xhc3M9XCJlZGl0LXN0YXRlXCI+XG4gICAgPGlucHV0IGRhdGEtdGVzdC1pZD1cIm5hbWVcIiBbZm9ybUNvbnRyb2xdPVwibmFtZUNvbnRyb2xcIiBwSW5wdXRUZXh0IHBsYWNlaG9sZGVyPVwiTWV0cmljIG5hbWVcIiBjbGFzcz1cInctZnVsbFwiIC8+XG4gICAgPHZsLWVycm9yLXRvb2x0aXAgW3Rvb2x0aXBdPVwibmFtZUNvbnRyb2wgfCBlcnJvciA6ICduYW1lJ1wiIFt2aXNpYmxlXT1cIiEhbmFtZUNvbnRyb2wuZXJyb3JzXCI+PC92bC1lcnJvci10b29sdGlwPlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cImVkaXRpbmdNZXRyaWM/LmtleSAhPT0gbWV0cmljLmtleVwiIChjbGljayk9XCJlZGl0TWV0cmljKG1ldHJpYylcIiBjbGFzcz1cImFjdGlvbiBlZGl0XCI+XG4gICAgPGkgY2xhc3M9XCJ2bC1pY29uIHZsLWVkaXRcIj48L2k+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwiZWRpdGluZ01ldHJpYz8ua2V5ID09PSBtZXRyaWMua2V5XCIgKGNsaWNrKT1cImNhbmNlbE1ldHJpYygpXCIgY2xhc3M9XCJhY3Rpb25cIj5cbiAgICA8aSBjbGFzcz1cInZsLWljb24gdmwtY3Jvc3NcIj48L2k+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwiZWRpdGluZ01ldHJpYz8ua2V5ID09PSBtZXRyaWMua2V5XCIgKGNsaWNrKT1cInNhdmVNZXRyaWMoKVwiIGNsYXNzPVwiYWN0aW9uIHNhdmVcIj5cbiAgICA8aSBjbGFzcz1cInZsLWljb24gdmwtY2hlY2tcIj48L2k+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -15,17 +15,17 @@ export class FlowDialogService {
15
15
  dismissableMask: true,
16
16
  closeOnEscape: true,
17
17
  closable: true,
18
- showHeader: true,
19
- header: config.title,
20
- width: '440px',
18
+ showHeader: false,
19
+ width: '320px',
21
20
  data: { config },
21
+ styleClass: 'flow-dialog',
22
22
  }).onClose;
23
23
  }
24
24
  showEmptyCartDialog() {
25
25
  return this.show({
26
26
  title: 'No Products in Quote',
27
27
  description: 'There are no products in your Quote. To save a Quote, add at least one product.',
28
- primaryButton: 'OK',
28
+ primaryButton: 'Ok',
29
29
  });
30
30
  }
31
31
  showReadonlyModeDialog() {
@@ -34,28 +34,28 @@ export class FlowDialogService {
34
34
  return this.show({
35
35
  title: 'Error',
36
36
  description: `${objectName} Cannot be Saved`,
37
- primaryButton: 'OK',
37
+ primaryButton: 'Ok',
38
38
  });
39
39
  }
40
40
  showQuoteReadonlyModeDialog() {
41
41
  return this.show({
42
42
  title: 'Quote Cannot be Saved',
43
43
  description: 'It is only possible to save quotes with the “Draft” status. Please create a new quote to make and save changes.',
44
- primaryButton: 'OK',
44
+ primaryButton: 'Ok',
45
45
  });
46
46
  }
47
47
  showQuoteOutsideShoppingCartDialog() {
48
48
  return this.show({
49
49
  title: 'Quote Cannot be Saved',
50
50
  description: 'It is only possible to save quotes from the Shopping Cart. To proceed, go to the Shopping Cart.',
51
- primaryButton: 'OK',
51
+ primaryButton: 'Ok',
52
52
  });
53
53
  }
54
54
  showAccountNoChangesDialog() {
55
55
  return this.show({
56
56
  title: 'No Changes to Save',
57
57
  description: 'There are no changes since the last update. Please make changes to proceed.',
58
- primaryButton: 'OK',
58
+ primaryButton: 'Ok',
59
59
  });
60
60
  }
61
61
  showUnsavedChangesDialog() {
@@ -71,42 +71,42 @@ export class FlowDialogService {
71
71
  return this.show({
72
72
  title: 'Cannot Submit for Approval',
73
73
  description: 'It is only possible to submit for approval quotes with the “Draft“ status. Please create a new quote to proceed.',
74
- primaryButton: 'OK',
74
+ primaryButton: 'Ok',
75
75
  });
76
76
  }
77
77
  showOutsideShoppingCartQuoteSubmitFailureDialog() {
78
78
  return this.show({
79
79
  title: 'Cannot Submit for Approval',
80
80
  description: 'It is only possible to submit quotes for approval from the Shopping Cart. To proceed, go to the Shopping Cart.',
81
- primaryButton: 'OK',
81
+ primaryButton: 'Ok',
82
82
  });
83
83
  }
84
84
  showAccountSubmitFailureDialog() {
85
85
  return this.show({
86
86
  title: 'Save Changes',
87
87
  description: 'To submit for approval, save the quote first, and then submit it for approval from the Shopping Cart.',
88
- primaryButton: 'OK',
88
+ primaryButton: 'Ok',
89
89
  });
90
90
  }
91
91
  showDocgenAccountUnsavedChangesDialog() {
92
92
  return this.show({
93
93
  title: 'Save Quote',
94
94
  description: 'To generate a document, save the quote first, and then generate the document from the Shopping Cart.',
95
- primaryButton: 'OK',
95
+ primaryButton: 'Ok',
96
96
  });
97
97
  }
98
98
  showDocgenReadonlyDialog() {
99
99
  return this.show({
100
100
  title: 'Document Generation is not Available',
101
101
  description: 'It is only possible to generate documents for quotes with the “Draft” status. Please create a new quote to generate a document.',
102
- primaryButton: 'OK',
102
+ primaryButton: 'Ok',
103
103
  });
104
104
  }
105
105
  showDocgenOutsideShoppingCartDialog() {
106
106
  return this.show({
107
107
  title: 'Document Generation is not Available',
108
108
  description: 'It is only possible to generate documents for quotes from the Shopping Cart. To proceed, go to the Shopping Cart.',
109
- primaryButton: 'OK',
109
+ primaryButton: 'Ok',
110
110
  });
111
111
  }
112
112
  showDocgenUnsavedChangesDialog() {
@@ -123,4 +123,4 @@ FlowDialogService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", ve
123
123
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: FlowDialogService, decorators: [{
124
124
  type: Injectable
125
125
  }], ctorParameters: function () { return [{ type: i1.DialogService }, { type: i2.ContextService }]; } });
126
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy1kaWFsb2cuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL3NyYy9zZXJ2aWNlcy9mbG93LWRpYWxvZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQzs7OztBQUk1RSxNQUFNLE9BQU8saUJBQWlCO0lBQzVCLFlBQW9CLGFBQTRCLEVBQVUsY0FBOEI7UUFBcEUsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFBVSxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7SUFBRyxDQUFDO0lBRXJGLElBQUksQ0FBQyxNQUF3QjtRQUNsQyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQ2xELGVBQWUsRUFBRSxJQUFJO1lBQ3JCLGFBQWEsRUFBRSxJQUFJO1lBQ25CLFFBQVEsRUFBRSxJQUFJO1lBQ2QsVUFBVSxFQUFFLElBQUk7WUFDaEIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLO1lBQ3BCLEtBQUssRUFBRSxPQUFPO1lBQ2QsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFO1NBQ2pCLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDYixDQUFDO0lBRU0sbUJBQW1CO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztZQUNmLEtBQUssRUFBRSxzQkFBc0I7WUFDN0IsV0FBVyxFQUFFLGlGQUFpRjtZQUM5RixhQUFhLEVBQUUsSUFBSTtTQUNwQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sc0JBQXNCO1FBQzNCLE1BQU0sR0FBRyxHQUFHLElBQUks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Q3hCLFdBQVcsRUFBRSwrQ0FBK0M7WUFDNUQsYUFBYSxFQUFFLGtCQUFrQjtZQUNqQyxlQUFlLEVBQUUsUUFBUTtTQUMxQixDQUFDLENBQUM7SUFDTCxDQUFDOzs4R0FsSVUsaUJBQWlCO2tIQUFqQixpQkFBaUI7MkZBQWpCLGlCQUFpQjtrQkFEN0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnQHZlbG9jZWFwcHMvc2RrL2NvcmUnO1xuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGbG93RGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9kaWFsb2cvZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGbG93RGlhbG9nQ29uZmlnIH0gZnJvbSAnLi4vY29tcG9uZW50cy9kaWFsb2cvZGlhbG9nLnR5cGVzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEZsb3dEaWFsb2dTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLCBwcml2YXRlIGNvbnRleHRTZXJ2aWNlOiBDb250ZXh0U2VydmljZSkge31cblxuICBwdWJsaWMgc2hvdyhjb25maWc6IEZsb3dEaWFsb2dDb25maWcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oRmxvd0RpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgZGlzbWlzc2FibGVNYXNrOiB0cnVlLFxuICAgICAgY2xvc2VPbkVzY2FwZTogdHJ1ZSxcbiAgICAgIGNsb3NhYmxlOiB0cnVlLFxuICAgICAgc2hvd0hlYWRlcjogdHJ1ZSxcbiAgICAgIGhlYWRlcjogY29uZmlnLnRpdGxlLFxuICAgICAgd2lkdGg6ICc0NDBweCcsXG4gICAgICBkYXRhOiB7IGNvbmZpZyB9LFxuICAgIH0pLm9uQ2xvc2U7XG4gIH1cblxuICBwdWJsaWMgc2hvd0VtcHR5Q2FydERpYWxvZygpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5zaG93KHtcbiAgICAgIHRpdGxlOiAnTm8gUHJvZHVjdHMgaW4gUXVvdGUnLFxuICAgICAgZGVzY3JpcHRpb246ICdUaGVyZSBhcmUgbm8gcHJvZHVjdHMgaW4geW91ciBRdW90ZS4gVG8gc2F2ZSBhIFF1b3RlLCBhZGQgYXQgbGVhc3Qgb25lIHByb2R1Y3QuJyxcbiAgICAgIHByaW1hcnlCdXR0b246ICdPSycsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2hvd1JlYWRvbmx5TW9kZURpYWxvZygpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBjdHggPSB0aGlzLmNvbnRleHRTZXJ2aWNlLnJlc29sdmUoKTtcbiAgICBjb25zdCBvYmplY3ROYW1lID0gY3R4Lm1vZGUgPyBjdHgubW9kZVswXS50b1VwcGVyQ2FzZSgpICsgY3R4Lm1vZGUuc3Vic3RyaW5nKDEpLnRvTG93ZXJDYXNlKCkgOiAnT2JqZWN0JztcblxuICAgIHJldHVybiB0aGlzLnNob3coe1xuICAgICAgdGl0bGU6ICdFcnJvcicsXG4gICAgICBkZXNjcmlwdGlvbjogYCR7b2JqZWN0TmFtZX0gQ2Fubm90IGJlIFNhdmVkYCxcbiAgICAgIHByaW1hcnlCdXR0b246ICdPSycsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2hvd1F1b3RlUmVhZG9ubHlNb2RlRGlhbG9nKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnNob3coe1xuICAgICAgdGl0bGU6ICdRdW90ZSBDYW5ub3QgYmUgU2F2ZWQnLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdJdCBpcyBvbmx5IHBvc3NpYmxlIHRvIHNhdmUgcXVvdGVzIHdpdGggdGhlIOKAnERyYWZ04oCdIHN0YXR1cy4gUGxlYXNlIGNyZWF0ZSBhIG5ldyBxdW90ZSB0byBtYWtlIGFuZCBzYXZlIGNoYW5nZXMuJyxcbiAgICAgIHByaW1hcnlCdXR0b246ICdPSycsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2hvd1F1b3RlT3V0c2lkZVNob3BwaW5nQ2FydERpYWxvZygpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5zaG93KHtcbiAgICAgIHRpdGxlOiAnUXVvdGUgQ2Fubm90IGJlIFNhdmVkJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnSXQgaXMgb25seSBwb3NzaWJsZSB0byBzYXZlIHF1b3RlcyBmcm9tIHRoZSBTaG9wcGluZyBDYXJ0LiBUbyBwcm9jZWVkLCBnbyB0byB0aGUgU2hvcHBpbmcgQ2FydC4nLFxuICAgICAgcHJpbWFyeUJ1dHRvbjogJ09LJyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzaG93QWNjb3VudE5vQ2hhbmdlc0RpYWxvZygpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5zaG93KHtcbiAgICAgIHRpdGxlOiAnTm8gQ2hhbmdlcyB0byBTYXZlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnVGhlcmUgYXJlIG5vIGNoYW5nZXMgc2luY2UgdGhlIGxhc3QgdXBkYXRlLiBQbGVhc2UgbWFrZSBjaGFuZ2VzIHRvIHByb2NlZWQuJyxcbiAgICAgIHByaW1hcnlCdXR0b246ICdPSycsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2hvd1Vuc2F2ZWRDaGFuZ2VzRGlhbG9nKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnNob3coe1xuICAgICAgdGl0bGU6ICdVbnNhdmVkIENoYW5nZXMnLFxuICAgICAgZGVzY3JpcHRpb246ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gbGVhdmUgdGhpcyBwYWdlIGFuZCBkaXNjYXJkIHlvdXIgdW5zYXZlZCBjaGFuZ2VzPycsXG4gICAgICBwcmltYXJ5QnV0dG9uOiAnS2VlcCBFZGl0aW5nJyxcbiAgICAgIHNlY29uZGFyeUJ1dHRvbjogJ0Rpc2NhcmQgQ2hhbmdlcycsXG4gICAgICBvcHBvc2l0ZUJ1dHRvbkFjdGlvbnM6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2hvd1JlYWRvbmx5UXVvdGVTdWJtaXRGYWlsdXJlRGlhbG9nKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnNob3coe1xuICAgICAgdGl0bGU6ICdDYW5ub3QgU3VibWl0IGZvciBBcHByb3ZhbCcsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ0l0IGlzIG9ubHkgcG9zc2libGUgdG8gc3VibWl0IGZvciBhcHByb3ZhbCBxdW90ZXMgd2l0aCB0aGUg4oCcRHJhZnTigJwgc3RhdHVzLiBQbGVhc2UgY3JlYXRlIGEgbmV3IHF1b3RlIHRvIHByb2NlZWQuJyxcbiAgICAgIHByaW1hcnlCdXR0b246ICdPSycsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2hvd091dHNpZGVTaG9wcGluZ0NhcnRRdW90ZVN1Ym1pdEZhaWx1cmVEaWFsb2coKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuc2hvdyh7XG4gICAgICB0aXRsZTogJ0Nhbm5vdCBTdWJtaXQgZm9yIEFwcHJvdmFsJyxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnSXQgaXMgb25seSBwb3NzaWJsZSB0byBzdWJtaXQgcXVvdGVzIGZvciBhcHByb3ZhbCBmcm9tIHRoZSBTaG9wcGluZyBDYXJ0LiBUbyBwcm9jZWVkLCBnbyB0byB0aGUgU2hvcHBpbmcgQ2FydC4nLFxuICAgICAgcHJpbWFyeUJ1dHRvbjogJ09LJyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzaG93QWNjb3VudFN1Ym1pdEZhaWx1cmVEaWFsb2coKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuc2hvdyh7XG4gICAgICB0aXRsZTogJ1NhdmUgQ2hhbmdlcycsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ1RvIHN1Ym1pdCBmb3IgYXBwcm92YWwsIHNhdmUgdGhlIHF1b3RlIGZpcnN0LCBhbmQgdGhlbiBzdWJtaXQgaXQgZm9yIGFwcHJvdmFsIGZyb20gdGhlIFNob3BwaW5nIENhcnQuJyxcbiAgICAgIHByaW1hcnlCdXR0b246ICdPSycsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2hvd0RvY2dlbkFjY291bnRVbnNhdmVkQ2hhbmdlc0RpYWxvZygpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5zaG93KHtcbiAgICAgIHRpdGxlOiAnU2F2ZSBRdW90ZScsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ1RvIGdlbmVyYXRlIGEgZG9jdW1lbnQsIHNhdmUgdGhlIHF1b3RlIGZpcnN0LCBhbmQgdGhlbiBnZW5lcmF0ZSB0aGUgZG9jdW1lbnQgZnJvbSB0aGUgU2hvcHBpbmcgQ2FydC4nLFxuICAgICAgcHJpbWFyeUJ1dHRvbjogJ09LJyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzaG93RG9jZ2VuUmVhZG9ubHlEaWFsb2coKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuc2hvdyh7XG4gICAgICB0aXRsZTogJ0RvY3VtZW50IEdlbmVyYXRpb24gaXMgbm90IEF2YWlsYWJsZScsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ0l0IGlzIG9ubHkgcG9zc2libGUgdG8gZ2VuZXJhdGUgZG9jdW1lbnRzIGZvciBxdW90ZXMgd2l0aCB0aGUg4oCcRHJhZnTigJ0gc3RhdHVzLiBQbGVhc2UgY3JlYXRlIGEgbmV3IHF1b3RlIHRvIGdlbmVyYXRlIGEgZG9jdW1lbnQuJyxcbiAgICAgIHByaW1hcnlCdXR0b246ICdPSycsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2hvd0RvY2dlbk91dHNpZGVTaG9wcGluZ0NhcnREaWFsb2coKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuc2hvdyh7XG4gICAgICB0aXRsZTogJ0RvY3VtZW50IEdlbmVyYXRpb24gaXMgbm90IEF2YWlsYWJsZScsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ0l0IGlzIG9ubHkgcG9zc2libGUgdG8gZ2VuZXJhdGUgZG9jdW1lbnRzIGZvciBxdW90ZXMgZnJvbSB0aGUgU2hvcHBpbmcgQ2FydC4gVG8gcHJvY2VlZCwgZ28gdG8gdGhlIFNob3BwaW5nIENhcnQuJyxcbiAgICAgIHByaW1hcnlCdXR0b246ICdPSycsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2hvd0RvY2dlblVuc2F2ZWRDaGFuZ2VzRGlhbG9nKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnNob3coe1xuICAgICAgdGl0bGU6ICdVbnNhdmVkIENoYW5nZXMnLFxuICAgICAgZGVzY3JpcHRpb246ICdUbyBnZW5lcmF0ZSBhIGRvY3VtZW50LCBzYXZlIHRoZSBxdW90ZSBmaXJzdC4nLFxuICAgICAgcHJpbWFyeUJ1dHRvbjogJ1NhdmUgYW5kIHByb2NlZWQnLFxuICAgICAgc2Vjb25kYXJ5QnV0dG9uOiAnQ2FuY2VsJyxcbiAgICB9KTtcbiAgfVxufVxuIl19
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy1kaWFsb2cuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL3NyYy9zZXJ2aWNlcy9mbG93LWRpYWxvZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQzs7OztBQUk1RSxNQUFNLE9BQU8saUJBQWlCO0lBQzVCLFlBQW9CLGFBQTRCLEVBQVUsY0FBOEI7UUFBcEUsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFBVSxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7SUFBRyxDQUFDO0lBRXJGLElBQUksQ0FBQyxNQUF3QjtRQUNsQyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQ2xELGVBQWUsRUFBRSxJQUFJO1lBQ3JCLGFBQWEsRUFBRSxJQUFJO1lBQ25CLFFBQVEsRUFBRSxJQUFJO1lBQ2QsVUFBVSxFQUFFLEtBQUs7WUFDakIsS0FBSyxFQUFFLE9BQU87WUFDZCxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUU7WUFDaEIsVUFBVSxFQUFFLGFBQWE7U0FDMUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUNiLENBQUM7SUFFTSxtQkFBbUI7UUFDeEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ2YsS0FBSyxFQUFFLHNCQUFzQjtZQUM3QixXQUFXLEVBQUUsaUZBQWlGO1lBQzlGLGFBQWEsRUFBRSxJQUFJO1NBQ3BCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxzQkFBc0I7UUFDM0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGNBQWMs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QUFFLCtDQUErQztZQUM1RCxhQUFhLEVBQUUsa0JBQWtCO1lBQ2pDLGVBQWUsRUFBRSxRQUFRO1NBQzFCLENBQUMsQ0FBQztJQUNMLENBQUM7OzhHQWxJVSxpQkFBaUI7a0hBQWpCLGlCQUFpQjsyRkFBakIsaUJBQWlCO2tCQUQ3QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udGV4dFNlcnZpY2UgfSBmcm9tICdAdmVsb2NlYXBwcy9zZGsvY29yZSc7XG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEZsb3dEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2RpYWxvZy9kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IEZsb3dEaWFsb2dDb25maWcgfSBmcm9tICcuLi9jb21wb25lbnRzL2RpYWxvZy9kaWFsb2cudHlwZXMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRmxvd0RpYWxvZ1NlcnZpY2Uge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsIHByaXZhdGUgY29udGV4dFNlcnZpY2U6IENvbnRleHRTZXJ2aWNlKSB7fVxuXG4gIHB1YmxpYyBzaG93KGNvbmZpZzogRmxvd0RpYWxvZ0NvbmZpZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihGbG93RGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICBkaXNtaXNzYWJsZU1hc2s6IHRydWUsXG4gICAgICBjbG9zZU9uRXNjYXBlOiB0cnVlLFxuICAgICAgY2xvc2FibGU6IHRydWUsXG4gICAgICBzaG93SGVhZGVyOiBmYWxzZSxcbiAgICAgIHdpZHRoOiAnMzIwcHgnLFxuICAgICAgZGF0YTogeyBjb25maWcgfSxcbiAgICAgIHN0eWxlQ2xhc3M6ICdmbG93LWRpYWxvZycsXG4gICAgfSkub25DbG9zZTtcbiAgfVxuXG4gIHB1YmxpYyBzaG93RW1wdHlDYXJ0RGlhbG9nKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnNob3coe1xuICAgICAgdGl0bGU6ICdObyBQcm9kdWN0cyBpbiBRdW90ZScsXG4gICAgICBkZXNjcmlwdGlvbjogJ1RoZXJlIGFyZSBubyBwcm9kdWN0cyBpbiB5b3VyIFF1b3RlLiBUbyBzYXZlIGEgUXVvdGUsIGFkZCBhdCBsZWFzdCBvbmUgcHJvZHVjdC4nLFxuICAgICAgcHJpbWFyeUJ1dHRvbjogJ09rJyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzaG93UmVhZG9ubHlNb2RlRGlhbG9nKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuY29udGV4dFNlcnZpY2UucmVzb2x2ZSgpO1xuICAgIGNvbnN0IG9iamVjdE5hbWUgPSBjdHgubW9kZSA/IGN0eC5tb2RlWzBdLnRvVXBwZXJDYXNlKCkgKyBjdHgubW9kZS5zdWJzdHJpbmcoMSkudG9Mb3dlckNhc2UoKSA6ICdPYmplY3QnO1xuXG4gICAgcmV0dXJuIHRoaXMuc2hvdyh7XG4gICAgICB0aXRsZTogJ0Vycm9yJyxcbiAgICAgIGRlc2NyaXB0aW9uOiBgJHtvYmplY3ROYW1lfSBDYW5ub3QgYmUgU2F2ZWRgLFxuICAgICAgcHJpbWFyeUJ1dHRvbjogJ09rJyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzaG93UXVvdGVSZWFkb25seU1vZGVEaWFsb2coKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuc2hvdyh7XG4gICAgICB0aXRsZTogJ1F1b3RlIENhbm5vdCBiZSBTYXZlZCcsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ0l0IGlzIG9ubHkgcG9zc2libGUgdG8gc2F2ZSBxdW90ZXMgd2l0aCB0aGUg4oCcRHJhZnTigJ0gc3RhdHVzLiBQbGVhc2UgY3JlYXRlIGEgbmV3IHF1b3RlIHRvIG1ha2UgYW5kIHNhdmUgY2hhbmdlcy4nLFxuICAgICAgcHJpbWFyeUJ1dHRvbjogJ09rJyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzaG93UXVvdGVPdXRzaWRlU2hvcHBpbmdDYXJ0RGlhbG9nKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnNob3coe1xuICAgICAgdGl0bGU6ICdRdW90ZSBDYW5ub3QgYmUgU2F2ZWQnLFxuICAgICAgZGVzY3JpcHRpb246ICdJdCBpcyBvbmx5IHBvc3NpYmxlIHRvIHNhdmUgcXVvdGVzIGZyb20gdGhlIFNob3BwaW5nIENhcnQuIFRvIHByb2NlZWQsIGdvIHRvIHRoZSBTaG9wcGluZyBDYXJ0LicsXG4gICAgICBwcmltYXJ5QnV0dG9uOiAnT2snLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNob3dBY2NvdW50Tm9DaGFuZ2VzRGlhbG9nKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnNob3coe1xuICAgICAgdGl0bGU6ICdObyBDaGFuZ2VzIHRvIFNhdmUnLFxuICAgICAgZGVzY3JpcHRpb246ICdUaGVyZSBhcmUgbm8gY2hhbmdlcyBzaW5jZSB0aGUgbGFzdCB1cGRhdGUuIFBsZWFzZSBtYWtlIGNoYW5nZXMgdG8gcHJvY2VlZC4nLFxuICAgICAgcHJpbWFyeUJ1dHRvbjogJ09rJyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzaG93VW5zYXZlZENoYW5nZXNEaWFsb2coKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuc2hvdyh7XG4gICAgICB0aXRsZTogJ1Vuc2F2ZWQgQ2hhbmdlcycsXG4gICAgICBkZXNjcmlwdGlvbjogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBsZWF2ZSB0aGlzIHBhZ2UgYW5kIGRpc2NhcmQgeW91ciB1bnNhdmVkIGNoYW5nZXM/JyxcbiAgICAgIHByaW1hcnlCdXR0b246ICdLZWVwIEVkaXRpbmcnLFxuICAgICAgc2Vjb25kYXJ5QnV0dG9uOiAnRGlzY2FyZCBDaGFuZ2VzJyxcbiAgICAgIG9wcG9zaXRlQnV0dG9uQWN0aW9uczogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzaG93UmVhZG9ubHlRdW90ZVN1Ym1pdEZhaWx1cmVEaWFsb2coKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuc2hvdyh7XG4gICAgICB0aXRsZTogJ0Nhbm5vdCBTdWJtaXQgZm9yIEFwcHJvdmFsJyxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnSXQgaXMgb25seSBwb3NzaWJsZSB0byBzdWJtaXQgZm9yIGFwcHJvdmFsIHF1b3RlcyB3aXRoIHRoZSDigJxEcmFmdOKAnCBzdGF0dXMuIFBsZWFzZSBjcmVhdGUgYSBuZXcgcXVvdGUgdG8gcHJvY2VlZC4nLFxuICAgICAgcHJpbWFyeUJ1dHRvbjogJ09rJyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzaG93T3V0c2lkZVNob3BwaW5nQ2FydFF1b3RlU3VibWl0RmFpbHVyZURpYWxvZygpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5zaG93KHtcbiAgICAgIHRpdGxlOiAnQ2Fubm90IFN1Ym1pdCBmb3IgQXBwcm92YWwnLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdJdCBpcyBvbmx5IHBvc3NpYmxlIHRvIHN1Ym1pdCBxdW90ZXMgZm9yIGFwcHJvdmFsIGZyb20gdGhlIFNob3BwaW5nIENhcnQuIFRvIHByb2NlZWQsIGdvIHRvIHRoZSBTaG9wcGluZyBDYXJ0LicsXG4gICAgICBwcmltYXJ5QnV0dG9uOiAnT2snLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNob3dBY2NvdW50U3VibWl0RmFpbHVyZURpYWxvZygpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5zaG93KHtcbiAgICAgIHRpdGxlOiAnU2F2ZSBDaGFuZ2VzJyxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnVG8gc3VibWl0IGZvciBhcHByb3ZhbCwgc2F2ZSB0aGUgcXVvdGUgZmlyc3QsIGFuZCB0aGVuIHN1Ym1pdCBpdCBmb3IgYXBwcm92YWwgZnJvbSB0aGUgU2hvcHBpbmcgQ2FydC4nLFxuICAgICAgcHJpbWFyeUJ1dHRvbjogJ09rJyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzaG93RG9jZ2VuQWNjb3VudFVuc2F2ZWRDaGFuZ2VzRGlhbG9nKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnNob3coe1xuICAgICAgdGl0bGU6ICdTYXZlIFF1b3RlJyxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnVG8gZ2VuZXJhdGUgYSBkb2N1bWVudCwgc2F2ZSB0aGUgcXVvdGUgZmlyc3QsIGFuZCB0aGVuIGdlbmVyYXRlIHRoZSBkb2N1bWVudCBmcm9tIHRoZSBTaG9wcGluZyBDYXJ0LicsXG4gICAgICBwcmltYXJ5QnV0dG9uOiAnT2snLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNob3dEb2NnZW5SZWFkb25seURpYWxvZygpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5zaG93KHtcbiAgICAgIHRpdGxlOiAnRG9jdW1lbnQgR2VuZXJhdGlvbiBpcyBub3QgQXZhaWxhYmxlJyxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnSXQgaXMgb25seSBwb3NzaWJsZSB0byBnZW5lcmF0ZSBkb2N1bWVudHMgZm9yIHF1b3RlcyB3aXRoIHRoZSDigJxEcmFmdOKAnSBzdGF0dXMuIFBsZWFzZSBjcmVhdGUgYSBuZXcgcXVvdGUgdG8gZ2VuZXJhdGUgYSBkb2N1bWVudC4nLFxuICAgICAgcHJpbWFyeUJ1dHRvbjogJ09rJyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzaG93RG9jZ2VuT3V0c2lkZVNob3BwaW5nQ2FydERpYWxvZygpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5zaG93KHtcbiAgICAgIHRpdGxlOiAnRG9jdW1lbnQgR2VuZXJhdGlvbiBpcyBub3QgQXZhaWxhYmxlJyxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnSXQgaXMgb25seSBwb3NzaWJsZSB0byBnZW5lcmF0ZSBkb2N1bWVudHMgZm9yIHF1b3RlcyBmcm9tIHRoZSBTaG9wcGluZyBDYXJ0LiBUbyBwcm9jZWVkLCBnbyB0byB0aGUgU2hvcHBpbmcgQ2FydC4nLFxuICAgICAgcHJpbWFyeUJ1dHRvbjogJ09rJyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzaG93RG9jZ2VuVW5zYXZlZENoYW5nZXNEaWFsb2coKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuc2hvdyh7XG4gICAgICB0aXRsZTogJ1Vuc2F2ZWQgQ2hhbmdlcycsXG4gICAgICBkZXNjcmlwdGlvbjogJ1RvIGdlbmVyYXRlIGEgZG9jdW1lbnQsIHNhdmUgdGhlIHF1b3RlIGZpcnN0LicsXG4gICAgICBwcmltYXJ5QnV0dG9uOiAnU2F2ZSBhbmQgcHJvY2VlZCcsXG4gICAgICBzZWNvbmRhcnlCdXR0b246ICdDYW5jZWwnLFxuICAgIH0pO1xuICB9XG59XG4iXX0=