@c8y/ngx-components 1021.22.0 → 1021.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/alarms/alarms-date-filter.component.d.ts +22 -10
- package/alarms/alarms-date-filter.component.d.ts.map +1 -1
- package/alarms/alarms-type-filter.component.d.ts +21 -14
- package/alarms/alarms-type-filter.component.d.ts.map +1 -1
- package/alarms/alarms-view.service.d.ts +7 -0
- package/alarms/alarms-view.service.d.ts.map +1 -1
- package/alarms/alarms.model.d.ts +1 -6
- package/alarms/alarms.model.d.ts.map +1 -1
- package/alarms/alarms.module.d.ts +1 -1
- package/alarms/index.d.ts +1 -0
- package/alarms/index.d.ts.map +1 -1
- package/context-dashboard/context-dashboard.service.d.ts.map +1 -1
- package/core/router/scoped-context-route.service.d.ts.map +1 -1
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.d.ts +4 -2
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.d.ts.map +1 -1
- package/datapoints-export-selector/datapoints-export-selector.component.d.ts +3 -1
- package/datapoints-export-selector/datapoints-export-selector.component.d.ts.map +1 -1
- package/datapoints-export-selector/datapoints-export-selector.model.d.ts +17 -0
- package/datapoints-export-selector/datapoints-export-selector.model.d.ts.map +1 -1
- package/esm2022/alarms/alarm-info.component.mjs +3 -3
- package/esm2022/alarms/alarm-severity-to-label.pipe.mjs +2 -2
- package/esm2022/alarms/alarms-date-filter.component.mjs +92 -42
- package/esm2022/alarms/alarms-type-filter.component.mjs +102 -72
- package/esm2022/alarms/alarms-view.service.mjs +16 -2
- package/esm2022/alarms/alarms.component.mjs +3 -3
- package/esm2022/alarms/alarms.model.mjs +1 -1
- package/esm2022/alarms/alarms.module.mjs +3 -3
- package/esm2022/alarms/index.mjs +2 -1
- package/esm2022/context-dashboard/context-dashboard.service.mjs +18 -5
- package/esm2022/core/router/scoped-context-route.service.mjs +9 -4
- package/esm2022/core/tabs/tabs-outlet.component.mjs +3 -3
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.mjs +29 -6
- package/esm2022/datapoints-export-selector/datapoints-export-selector.component.mjs +11 -5
- package/esm2022/datapoints-export-selector/datapoints-export-selector.model.mjs +18 -1
- package/esm2022/interval-picker/interval-picker.component.mjs +1 -1
- package/esm2022/interval-picker/interval-picker.model.mjs +1 -1
- package/esm2022/widgets/definitions/alarms/alarm-list/index.mjs +2 -1
- package/esm2022/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.mjs +73 -4
- package/esm2022/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.mjs +29 -5
- package/esm2022/widgets/implementations/alarms/alarm-list-widget.model.mjs +7 -1
- package/esm2022/widgets/implementations/alarms/alarm-widget.service.mjs +11 -1
- package/fesm2022/c8y-ngx-components-alarms.mjs +199 -107
- package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs +17 -4
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs +52 -7
- package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-interval-picker.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs +1 -0
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +123 -14
- package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +10 -5
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/interval-picker/interval-picker.component.d.ts +2 -2
- package/interval-picker/interval-picker.component.d.ts.map +1 -1
- package/interval-picker/interval-picker.model.d.ts +5 -0
- package/interval-picker/interval-picker.model.d.ts.map +1 -1
- package/locales/de.po +2 -2
- package/locales/locales.pot +18 -6
- package/package.json +1 -1
- package/widgets/definitions/alarms/alarm-list/index.d.ts.map +1 -1
- package/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.d.ts +12 -1
- package/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.d.ts.map +1 -1
- package/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.d.ts +12 -1
- package/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.d.ts.map +1 -1
- package/widgets/implementations/alarms/alarm-list-widget.model.d.ts +11 -1
- package/widgets/implementations/alarms/alarm-list-widget.model.d.ts.map +1 -1
- package/widgets/implementations/alarms/alarm-widget.service.d.ts.map +1 -1
|
@@ -120,11 +120,11 @@ export class TabsOutletComponent {
|
|
|
120
120
|
return { widthScroll, width, scrollLeft };
|
|
121
121
|
}
|
|
122
122
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TabsOutletComponent, deps: [{ token: i1.Router }, { token: i0.Renderer2 }, { token: i2.HeaderService }, { token: i3.TabsService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
123
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: TabsOutletComponent, selector: "c8y-tabs-outlet,c8y-ui-tabs", inputs: { tabs: "tabs", orientation: "orientation", navigatorOpen: "navigatorOpen", outletName: "outletName", context: "context", hasHeader: "hasHeader" }, host: { properties: { "class.has-header": "this.hasHeader", "class.navigator-open": "this.isNavigatorOpen", "class.page-tabs": "this.hasTabs", "class.page-tabs-horizontal": "this.isHorizontal", "class.page-tabs-vertical": "this.isVertical" } }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ElementRef, static: true }, { propertyName: "tabsContainer", first: true, predicate: ["tabsContainer"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"tabContainer\"\n [ngClass]=\"{ 'hidden-xs': !outletName }\"\n #container\n>\n <button\n class=\"tabs-slider tabs-slider-left\"\n title=\"{{ 'Scroll to the left' | translate }}\"\n type=\"button\"\n #left\n *ngIf=\"showLeft || showRight\"\n [disabled]=\"!showLeft\"\n (click)=\"scroll('left')\"\n >\n <i [c8yIcon]=\"'chevron-left'\"></i>\n </button>\n <button\n class=\"tabs-slider tabs-slider-right\"\n title=\"{{ 'Scroll to the right' | translate }}\"\n type=\"button\"\n #right\n *ngIf=\"showRight || showLeft\"\n [disabled]=\"!showRight\"\n (click)=\"scroll('right')\"\n >\n <i [c8yIcon]=\"'chevron-right'\"></i>\n </button>\n <ng-container *ngIf=\"!outletName\">\n <div\n class=\"nav nav-tabs nav-tabsc8y\"\n role=\"list\"\n #tabsContainer\n >\n <ng-container *ngFor=\"let tab of tabs\">\n <div\n role=\"listitem\"\n [ngClass]=\"{ active: rla?.isActive }\"\n *ngIf=\"!tab.component && !tab.hide\"\n >\n <a\n [routerLink]=\"tab.path\"\n routerLinkActive\n #rla=\"routerLinkActive\"\n [ngClass]=\"{ 'p-r-24': !tab.template && tab?.badge }\"\n (click)=\"tab.onSelect?.emit()\"\n >\n <i\n [c8yIcon]=\"tab?.icon\"\n *ngIf=\"!tab.template && tab?.icon\"\n ></i>\n <span\n title=\"{{ tab?.label | translate }}\"\n *ngIf=\"!tab.template && !tab.component\"\n >\n {{ tab?.label | translate }}\n </span>\n <span\n class=\"dashboard-template-marker\"\n tooltip=\"{{ tab?.tooltipText | translate }}\"\n placement=\"bottom\"\n container=\"body\"\n [adaptivePosition]=\"false\"\n [delay]=\"300\"\n *ngIf=\"!tab.template && tab?.badge\"\n ></span>\n </a>\n <ng-container *ngTemplateOutlet=\"tab.template; injector: tab.injector\"></ng-container>\n </div>\n <ng-container *ngComponentOutlet=\"tab.component; injector: tab.injector\"></ng-container>\n </ng-container>\n </div>\n </ng-container>\n\n <div\n class=\"component-tabs nav nav-tabs nav-tabsc8y\"\n *ngIf=\"outletName\"\n #tabsContainer\n >\n <ng-container *ngFor=\"let tab of tabs; trackBy: trackByPath\">\n <div\n [ngClass]=\"{ active: tab.isActive }\"\n [routerLink]=\"tab.path\"\n [routerLinkActive]=\"tab.path ? 'active' : ''\"\n >\n <a\n class=\"pointer\"\n title=\"{{ tab?.label | translate }}\"\n (click)=\"tab.onSelect?.emit()\"\n >\n <i [c8yIcon]=\"tab?.icon\"></i>\n <span>\n {{ tab?.label | translate }}\n </span>\n </a>\n </div>\n </ng-container>\n </div>\n</div>\n\n<div\n class=\"visible-xs mobile-tabs\"\n *ngIf=\"!outletName\"\n>\n <ul class=\"list-unstyled d-flex m-b-0\">\n <li class=\"c8y-select-wrapper flex-grow\">\n <select\n (change)=\"navigateTo($event.target.value)\"\n #select\n >\n <ng-container *ngFor=\"let tab of tabs\">\n <option\n *ngIf=\"!tab.component\"\n [value]=\"tab.path\"\n [selected]=\"isActive(tab)\"\n >\n {{ tab?.label | translate }}\n </option>\n </ng-container>\n </select>\n </li>\n <ng-container *ngFor=\"let tab of tabs\">\n <ng-container *ngIf=\"tab.component\">\n <ng-container\n *c8yComponentOutlet=\"tab.component; environmentInjector: tab.injector\"\n ></ng-container>\n </ng-container>\n </ng-container>\n </ul>\n</div>\n", dependencies: [{ kind: "directive", type: i4.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.C8yComponentOutlet, selector: "[c8yComponentOutlet]", inputs: ["c8yComponentOutlet", "c8yComponentOutletInjector", "c8yComponentOutletEnvironmentInjector"] }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i7.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "pipe", type: i8.C8yTranslatePipe, name: "translate" }] }); }
|
|
123
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: TabsOutletComponent, selector: "c8y-tabs-outlet,c8y-ui-tabs", inputs: { tabs: "tabs", orientation: "orientation", navigatorOpen: "navigatorOpen", outletName: "outletName", context: "context", hasHeader: "hasHeader" }, host: { properties: { "class.has-header": "this.hasHeader", "class.navigator-open": "this.isNavigatorOpen", "class.page-tabs": "this.hasTabs", "class.page-tabs-horizontal": "this.isHorizontal", "class.page-tabs-vertical": "this.isVertical" } }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ElementRef, static: true }, { propertyName: "tabsContainer", first: true, predicate: ["tabsContainer"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"tabContainer\"\n [ngClass]=\"{ 'hidden-xs': !outletName }\"\n #container\n>\n <button\n class=\"tabs-slider tabs-slider-left\"\n title=\"{{ 'Scroll to the left' | translate }}\"\n type=\"button\"\n #left\n *ngIf=\"showLeft || showRight\"\n [disabled]=\"!showLeft\"\n (click)=\"scroll('left')\"\n >\n <i [c8yIcon]=\"'chevron-left'\"></i>\n </button>\n <button\n class=\"tabs-slider tabs-slider-right\"\n title=\"{{ 'Scroll to the right' | translate }}\"\n type=\"button\"\n #right\n *ngIf=\"showRight || showLeft\"\n [disabled]=\"!showRight\"\n (click)=\"scroll('right')\"\n >\n <i [c8yIcon]=\"'chevron-right'\"></i>\n </button>\n <ng-container *ngIf=\"!outletName\">\n <div\n class=\"nav nav-tabs nav-tabsc8y\"\n role=\"list\"\n #tabsContainer\n >\n <ng-container *ngFor=\"let tab of tabs\">\n <div\n role=\"listitem\"\n [ngClass]=\"{ active: rla?.isActive }\"\n *ngIf=\"!tab.component && !tab.hide\"\n >\n <a\n [routerLink]=\"tab.path\"\n routerLinkActive\n [queryParamsHandling]=\"'preserve'\"\n #rla=\"routerLinkActive\"\n [ngClass]=\"{ 'p-r-24': !tab.template && tab?.badge }\"\n (click)=\"tab.onSelect?.emit()\"\n >\n <i\n [c8yIcon]=\"tab?.icon\"\n *ngIf=\"!tab.template && tab?.icon\"\n ></i>\n <span\n title=\"{{ tab?.label | translate }}\"\n *ngIf=\"!tab.template && !tab.component\"\n >\n {{ tab?.label | translate }}\n </span>\n <span\n class=\"dashboard-template-marker\"\n tooltip=\"{{ tab?.tooltipText | translate }}\"\n placement=\"bottom\"\n container=\"body\"\n [adaptivePosition]=\"false\"\n [delay]=\"300\"\n *ngIf=\"!tab.template && tab?.badge\"\n ></span>\n </a>\n <ng-container *ngTemplateOutlet=\"tab.template; injector: tab.injector\"></ng-container>\n </div>\n <ng-container *ngComponentOutlet=\"tab.component; injector: tab.injector\"></ng-container>\n </ng-container>\n </div>\n </ng-container>\n\n <div\n class=\"component-tabs nav nav-tabs nav-tabsc8y\"\n *ngIf=\"outletName\"\n #tabsContainer\n >\n <ng-container *ngFor=\"let tab of tabs; trackBy: trackByPath\">\n <div\n [ngClass]=\"{ active: tab.isActive }\"\n [routerLink]=\"tab.path\"\n [routerLinkActive]=\"tab.path ? 'active' : ''\"\n [queryParamsHandling]=\"'preserve'\"\n >\n <a\n class=\"pointer\"\n title=\"{{ tab?.label | translate }}\"\n (click)=\"tab.onSelect?.emit()\"\n >\n <i [c8yIcon]=\"tab?.icon\"></i>\n <span>\n {{ tab?.label | translate }}\n </span>\n </a>\n </div>\n </ng-container>\n </div>\n</div>\n\n<div\n class=\"visible-xs mobile-tabs\"\n *ngIf=\"!outletName\"\n>\n <ul class=\"list-unstyled d-flex m-b-0\">\n <li class=\"c8y-select-wrapper flex-grow\">\n <select\n (change)=\"navigateTo($event.target.value)\"\n #select\n >\n <ng-container *ngFor=\"let tab of tabs\">\n <option\n *ngIf=\"!tab.component\"\n [value]=\"tab.path\"\n [selected]=\"isActive(tab)\"\n >\n {{ tab?.label | translate }}\n </option>\n </ng-container>\n </select>\n </li>\n <ng-container *ngFor=\"let tab of tabs\">\n <ng-container *ngIf=\"tab.component\">\n <ng-container\n *c8yComponentOutlet=\"tab.component; environmentInjector: tab.injector\"\n ></ng-container>\n </ng-container>\n </ng-container>\n </ul>\n</div>\n", dependencies: [{ kind: "directive", type: i4.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.C8yComponentOutlet, selector: "[c8yComponentOutlet]", inputs: ["c8yComponentOutlet", "c8yComponentOutletInjector", "c8yComponentOutletEnvironmentInjector"] }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i7.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "pipe", type: i8.C8yTranslatePipe, name: "translate" }] }); }
|
|
124
124
|
}
|
|
125
125
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TabsOutletComponent, decorators: [{
|
|
126
126
|
type: Component,
|
|
127
|
-
args: [{ selector: 'c8y-tabs-outlet,c8y-ui-tabs', template: "<div\n class=\"tabContainer\"\n [ngClass]=\"{ 'hidden-xs': !outletName }\"\n #container\n>\n <button\n class=\"tabs-slider tabs-slider-left\"\n title=\"{{ 'Scroll to the left' | translate }}\"\n type=\"button\"\n #left\n *ngIf=\"showLeft || showRight\"\n [disabled]=\"!showLeft\"\n (click)=\"scroll('left')\"\n >\n <i [c8yIcon]=\"'chevron-left'\"></i>\n </button>\n <button\n class=\"tabs-slider tabs-slider-right\"\n title=\"{{ 'Scroll to the right' | translate }}\"\n type=\"button\"\n #right\n *ngIf=\"showRight || showLeft\"\n [disabled]=\"!showRight\"\n (click)=\"scroll('right')\"\n >\n <i [c8yIcon]=\"'chevron-right'\"></i>\n </button>\n <ng-container *ngIf=\"!outletName\">\n <div\n class=\"nav nav-tabs nav-tabsc8y\"\n role=\"list\"\n #tabsContainer\n >\n <ng-container *ngFor=\"let tab of tabs\">\n <div\n role=\"listitem\"\n [ngClass]=\"{ active: rla?.isActive }\"\n *ngIf=\"!tab.component && !tab.hide\"\n >\n <a\n [routerLink]=\"tab.path\"\n routerLinkActive\n #rla=\"routerLinkActive\"\n [ngClass]=\"{ 'p-r-24': !tab.template && tab?.badge }\"\n (click)=\"tab.onSelect?.emit()\"\n >\n <i\n [c8yIcon]=\"tab?.icon\"\n *ngIf=\"!tab.template && tab?.icon\"\n ></i>\n <span\n title=\"{{ tab?.label | translate }}\"\n *ngIf=\"!tab.template && !tab.component\"\n >\n {{ tab?.label | translate }}\n </span>\n <span\n class=\"dashboard-template-marker\"\n tooltip=\"{{ tab?.tooltipText | translate }}\"\n placement=\"bottom\"\n container=\"body\"\n [adaptivePosition]=\"false\"\n [delay]=\"300\"\n *ngIf=\"!tab.template && tab?.badge\"\n ></span>\n </a>\n <ng-container *ngTemplateOutlet=\"tab.template; injector: tab.injector\"></ng-container>\n </div>\n <ng-container *ngComponentOutlet=\"tab.component; injector: tab.injector\"></ng-container>\n </ng-container>\n </div>\n </ng-container>\n\n <div\n class=\"component-tabs nav nav-tabs nav-tabsc8y\"\n *ngIf=\"outletName\"\n #tabsContainer\n >\n <ng-container *ngFor=\"let tab of tabs; trackBy: trackByPath\">\n <div\n [ngClass]=\"{ active: tab.isActive }\"\n [routerLink]=\"tab.path\"\n [routerLinkActive]=\"tab.path ? 'active' : ''\"\n >\n <a\n class=\"pointer\"\n title=\"{{ tab?.label | translate }}\"\n (click)=\"tab.onSelect?.emit()\"\n >\n <i [c8yIcon]=\"tab?.icon\"></i>\n <span>\n {{ tab?.label | translate }}\n </span>\n </a>\n </div>\n </ng-container>\n </div>\n</div>\n\n<div\n class=\"visible-xs mobile-tabs\"\n *ngIf=\"!outletName\"\n>\n <ul class=\"list-unstyled d-flex m-b-0\">\n <li class=\"c8y-select-wrapper flex-grow\">\n <select\n (change)=\"navigateTo($event.target.value)\"\n #select\n >\n <ng-container *ngFor=\"let tab of tabs\">\n <option\n *ngIf=\"!tab.component\"\n [value]=\"tab.path\"\n [selected]=\"isActive(tab)\"\n >\n {{ tab?.label | translate }}\n </option>\n </ng-container>\n </select>\n </li>\n <ng-container *ngFor=\"let tab of tabs\">\n <ng-container *ngIf=\"tab.component\">\n <ng-container\n *c8yComponentOutlet=\"tab.component; environmentInjector: tab.injector\"\n ></ng-container>\n </ng-container>\n </ng-container>\n </ul>\n</div>\n" }]
|
|
127
|
+
args: [{ selector: 'c8y-tabs-outlet,c8y-ui-tabs', template: "<div\n class=\"tabContainer\"\n [ngClass]=\"{ 'hidden-xs': !outletName }\"\n #container\n>\n <button\n class=\"tabs-slider tabs-slider-left\"\n title=\"{{ 'Scroll to the left' | translate }}\"\n type=\"button\"\n #left\n *ngIf=\"showLeft || showRight\"\n [disabled]=\"!showLeft\"\n (click)=\"scroll('left')\"\n >\n <i [c8yIcon]=\"'chevron-left'\"></i>\n </button>\n <button\n class=\"tabs-slider tabs-slider-right\"\n title=\"{{ 'Scroll to the right' | translate }}\"\n type=\"button\"\n #right\n *ngIf=\"showRight || showLeft\"\n [disabled]=\"!showRight\"\n (click)=\"scroll('right')\"\n >\n <i [c8yIcon]=\"'chevron-right'\"></i>\n </button>\n <ng-container *ngIf=\"!outletName\">\n <div\n class=\"nav nav-tabs nav-tabsc8y\"\n role=\"list\"\n #tabsContainer\n >\n <ng-container *ngFor=\"let tab of tabs\">\n <div\n role=\"listitem\"\n [ngClass]=\"{ active: rla?.isActive }\"\n *ngIf=\"!tab.component && !tab.hide\"\n >\n <a\n [routerLink]=\"tab.path\"\n routerLinkActive\n [queryParamsHandling]=\"'preserve'\"\n #rla=\"routerLinkActive\"\n [ngClass]=\"{ 'p-r-24': !tab.template && tab?.badge }\"\n (click)=\"tab.onSelect?.emit()\"\n >\n <i\n [c8yIcon]=\"tab?.icon\"\n *ngIf=\"!tab.template && tab?.icon\"\n ></i>\n <span\n title=\"{{ tab?.label | translate }}\"\n *ngIf=\"!tab.template && !tab.component\"\n >\n {{ tab?.label | translate }}\n </span>\n <span\n class=\"dashboard-template-marker\"\n tooltip=\"{{ tab?.tooltipText | translate }}\"\n placement=\"bottom\"\n container=\"body\"\n [adaptivePosition]=\"false\"\n [delay]=\"300\"\n *ngIf=\"!tab.template && tab?.badge\"\n ></span>\n </a>\n <ng-container *ngTemplateOutlet=\"tab.template; injector: tab.injector\"></ng-container>\n </div>\n <ng-container *ngComponentOutlet=\"tab.component; injector: tab.injector\"></ng-container>\n </ng-container>\n </div>\n </ng-container>\n\n <div\n class=\"component-tabs nav nav-tabs nav-tabsc8y\"\n *ngIf=\"outletName\"\n #tabsContainer\n >\n <ng-container *ngFor=\"let tab of tabs; trackBy: trackByPath\">\n <div\n [ngClass]=\"{ active: tab.isActive }\"\n [routerLink]=\"tab.path\"\n [routerLinkActive]=\"tab.path ? 'active' : ''\"\n [queryParamsHandling]=\"'preserve'\"\n >\n <a\n class=\"pointer\"\n title=\"{{ tab?.label | translate }}\"\n (click)=\"tab.onSelect?.emit()\"\n >\n <i [c8yIcon]=\"tab?.icon\"></i>\n <span>\n {{ tab?.label | translate }}\n </span>\n </a>\n </div>\n </ng-container>\n </div>\n</div>\n\n<div\n class=\"visible-xs mobile-tabs\"\n *ngIf=\"!outletName\"\n>\n <ul class=\"list-unstyled d-flex m-b-0\">\n <li class=\"c8y-select-wrapper flex-grow\">\n <select\n (change)=\"navigateTo($event.target.value)\"\n #select\n >\n <ng-container *ngFor=\"let tab of tabs\">\n <option\n *ngIf=\"!tab.component\"\n [value]=\"tab.path\"\n [selected]=\"isActive(tab)\"\n >\n {{ tab?.label | translate }}\n </option>\n </ng-container>\n </select>\n </li>\n <ng-container *ngFor=\"let tab of tabs\">\n <ng-container *ngIf=\"tab.component\">\n <ng-container\n *c8yComponentOutlet=\"tab.component; environmentInjector: tab.injector\"\n ></ng-container>\n </ng-container>\n </ng-container>\n </ul>\n</div>\n" }]
|
|
128
128
|
}], ctorParameters: () => [{ type: i1.Router }, { type: i0.Renderer2 }, { type: i2.HeaderService }, { type: i3.TabsService }], propDecorators: { tabs: [{
|
|
129
129
|
type: Input
|
|
130
130
|
}], orientation: [{
|
|
@@ -159,4 +159,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
159
159
|
type: ViewChild,
|
|
160
160
|
args: ['tabsContainer', { read: ElementRef, static: false }]
|
|
161
161
|
}] } });
|
|
162
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy1vdXRsZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS90YWJzL3RhYnMtb3V0bGV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL2NvcmUvdGFicy90YWJzLW91dGxldC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxXQUFXLEVBQ1gsU0FBUyxFQUNULFVBQVUsRUFDVixTQUFTLEVBS1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7OztBQU03QyxNQUFNLE9BQU8sbUJBQW1CO0lBYTlCLElBQXlDLGVBQWU7UUFDdEQsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFDRCxJQUFvQyxPQUFPO1FBQ3pDLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNkLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUNELE9BQU8sV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksV0FBVyxDQUFDLElB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V0FBVzt1QkFBQyxrQkFBa0I7Z0JBSUMsZUFBZTtzQkFBdkQsV0FBVzt1QkFBQyxzQkFBc0I7Z0JBR0MsT0FBTztzQkFBMUMsV0FBVzt1QkFBQyxpQkFBaUI7Z0JBT2lCLFlBQVk7c0JBQTFELFdBQVc7dUJBQUMsNEJBQTRCO2dCQUdJLFVBQVU7c0JBQXRELFdBQVc7dUJBQUMsMEJBQTBCO2dCQUc2QixTQUFTO3NCQUE1RSxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFbEQsYUFBYTtzQkFEcEIsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBIb3N0QmluZGluZyxcbiAgUmVuZGVyZXIyLFxuICBFbGVtZW50UmVmLFxuICBWaWV3Q2hpbGQsXG4gIE9uRGVzdHJveSxcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBtYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGZyb21FdmVudFBhdHRlcm4sIGZyb21FdmVudCwgbWVyZ2UsIEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFRhYiB9IGZyb20gJy4vdGFiLm1vZGVsJztcbmltcG9ydCB7IEhlYWRlclNlcnZpY2UgfSBmcm9tICcuLi9oZWFkZXIvaGVhZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGFic1NlcnZpY2UgfSBmcm9tICcuL3RhYnMuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS10YWJzLW91dGxldCxjOHktdWktdGFicycsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJzLW91dGxldC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgVGFic091dGxldENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgQWZ0ZXJDb250ZW50SW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgdGFiczogVGFiW10gPSBbXTtcbiAgQElucHV0KCkgb3JpZW50YXRpb246ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCcgPSAndmVydGljYWwnO1xuICBASW5wdXQoKSBuYXZpZ2F0b3JPcGVuID0gZmFsc2U7XG4gIEBJbnB1dCgpIG91dGxldE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgQElucHV0KCkgY29udGV4dDogYW55O1xuICAvKipcbiAgICogSWRlbnRpZmllcyBpZiB0aGUgY3VycmVudCB2aWV3IGhhcyBhIGhlYWRlciBlbGVtZW50LlxuICAgKi9cbiAgQElucHV0KCkgQEhvc3RCaW5kaW5nKCdjbGFzcy5oYXMtaGVhZGVyJykgaGFzSGVhZGVyID0gZmFsc2U7XG5cbiAgc2hvd0xlZnQgPSBmYWxzZTtcbiAgc2hvd1JpZ2h0ID0gZmFsc2U7XG4gIEBIb3N0QmluZGluZygnY2xhc3MubmF2aWdhdG9yLW9wZW4nKSBnZXQgaXNOYXZpZ2F0b3JPcGVuKCkge1xuICAgIHJldHVybiB0aGlzLm5hdmlnYXRvck9wZW47XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5wYWdlLXRhYnMnKSBnZXQgaGFzVGFicygpIHtcbiAgICBsZXQgdmlzaWJsZVRhYnMgPSBbXTtcbiAgICBpZiAodGhpcy50YWJzKSB7XG4gICAgICB2aXNpYmxlVGFicyA9IHRoaXMudGFicy5maWx0ZXIodGFiID0+IHRhYi5oaWRlICE9PSB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZpc2libGVUYWJzLmxlbmd0aCA+IDEgfHwgdmlzaWJsZVRhYnMuZmluZCh0YWIgPT4gdGFiLnNob3dBbHdheXMpO1xuICB9XG4gIEBIb3N0QmluZGluZygnY2xhc3MucGFnZS10YWJzLWhvcml6b250YWwnKSBnZXQgaXNIb3Jpem9udGFsKCkge1xuICAgIHJldHVybiB0aGlzLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCc7XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5wYWdlLXRhYnMtdmVydGljYWwnKSBnZXQgaXNWZXJ0aWNhbCgpIHtcbiAgICByZXR1cm4gdGhpcy5vcmllbnRhdGlvbiAhPT0gJ2hvcml6b250YWwnO1xuICB9XG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgY29udGFpbmVyOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCd0YWJzQ29udGFpbmVyJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IGZhbHNlIH0pXG4gIHByaXZhdGUgdGFic0NvbnRhaW5lcjogRWxlbWVudFJlZjtcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgdGFic0NoYW5nZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUYWJbXT4oW10pO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgaGVhZGVyOiBIZWFkZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGFic1NlcnZpY2U6IFRhYnNTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vdXRsZXROYW1lICYmIHRoaXMudGFicy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMudGFic1NlcnZpY2UuaXRlbXMkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCh0YWJzID0+IHRhYnMuZmlsdGVyKHRhYiA9PiB0YWIudGFic091dGxldCA9PT0gdGhpcy5vdXRsZXROYW1lKSksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSh0YWJzID0+IHtcbiAgICAgICAgICB0aGlzLnRhYnMgPSB0YWJzO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMudGFicykge1xuICAgICAgdGhpcy50YWJzID0gdGhpcy50YWJzLmZpbHRlcih0YWIgPT4gdGFiLnRhYnNPdXRsZXQgPT09IHRoaXMub3V0bGV0TmFtZSk7XG4gICAgICB0aGlzLnRhYnNDaGFuZ2VzJC5uZXh0KHRoaXMudGFicyk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIGlmICh0aGlzLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgIHRoaXMuc2Nyb2xsU3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgdHJhY2tCeVBhdGgoaW5kZXgsIHRhYjogVGFiKSB7XG4gICAgcmV0dXJuIHRhYi5wYXRoID8gdGFiLnBhdGggOiBpbmRleDtcbiAgfVxuXG4gIGlzQWN0aXZlKHRhYjogVGFiKSB7XG4gICAgaWYgKHRhYiAmJiB0YWIucGF0aCkge1xuICAgICAgcmV0dXJuIHRoaXMucm91dGVyLmlzQWN0aXZlKHRhYi5wYXRoLCBmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBuYXZpZ2F0ZVRvKHBhdGgpIHtcbiAgICB0aGlzLmhlYWRlci50b2dnbGUoKTtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbcGF0aF0pO1xuICB9XG5cbiAgc2Nyb2xsKGRpcmVjdGlvbjogJ3JpZ2h0JyB8ICdsZWZ0JyA9ICdyaWdodCcpIHtcbiAgICBjb25zdCB7IHdpZHRoU2Nyb2xsLCB3aWR0aCwgc2Nyb2xsTGVmdCB9ID0gdGhpcy5nZXREaW1lbnNpb25zKCk7XG4gICAgY29uc3QgbXVsdGlwbGllciA9IGRpcmVjdGlvbiA9PT0gJ2xlZnQnID8gLTEgOiAxO1xuXG4gICAgbGV0IHRhcmdldFNjcm9sbCA9IHNjcm9sbExlZnQgKyB3aWR0aCAqIG11bHRpcGxpZXI7XG4gICAgaWYgKHRhcmdldFNjcm9sbCA8IDApIHtcbiAgICAgIHRhcmdldFNjcm9sbCA9IDA7XG4gICAgfVxuICAgIGlmICh0YXJnZXRTY3JvbGwgPiB3aWR0aFNjcm9sbCAtIHdpZHRoKSB7XG4gICAgICB0YXJnZXRTY3JvbGwgPSB3aWR0aFNjcm9sbCAtIHdpZHRoO1xuICAgIH1cbiAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSB0YXJnZXRTY3JvbGw7XG4gIH1cblxuICBwcml2YXRlIHNjcm9sbFN1YnNjcmliZSgpIHtcbiAgICBsZXQgdW5saXN0ZW47XG4gICAgbWVyZ2UoXG4gICAgICB0aGlzLnRhYnNDaGFuZ2VzJCxcbiAgICAgIGZyb21FdmVudCh0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LCAnc2Nyb2xsJyksXG4gICAgICBmcm9tRXZlbnRQYXR0ZXJuKFxuICAgICAgICAoaGFuZGxlcjogYW55KSA9PiB7XG4gICAgICAgICAgdW5saXN0ZW4gPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbignd2luZG93JywgJ3Jlc2l6ZScsIGhhbmRsZXIpO1xuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB1bmxpc3RlbigpXG4gICAgICApXG4gICAgKVxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDI1MCksIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVTY3JvbGwoKSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNjcm9sbCgpIHtcbiAgICBjb25zdCB7IHdpZHRoU2Nyb2xsLCB3aWR0aCwgc2Nyb2xsTGVmdCB9ID0gdGhpcy5nZXREaW1lbnNpb25zKCk7XG4gICAgdGhpcy5zaG93TGVmdCA9ICEhc2Nyb2xsTGVmdDtcbiAgICB0aGlzLnNob3dSaWdodCA9IHdpZHRoU2Nyb2xsID4gd2lkdGggKyBzY3JvbGxMZWZ0O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREaW1lbnNpb25zKCkge1xuICAgIGNvbnN0IGVsVGFicyA9IHRoaXMudGFic0NvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IGVsID0gdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCB3aWR0aFNjcm9sbCA9IGVsVGFicy5zY3JvbGxXaWR0aDtcbiAgICBjb25zdCB3aWR0aCA9IGVsLmNsaWVudFdpZHRoO1xuICAgIGNvbnN0IHNjcm9sbExlZnQgPSBlbC5zY3JvbGxMZWZ0O1xuICAgIHJldHVybiB7IHdpZHRoU2Nyb2xsLCB3aWR0aCwgc2Nyb2xsTGVmdCB9O1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwidGFiQ29udGFpbmVyXCJcbiAgW25nQ2xhc3NdPVwieyAnaGlkZGVuLXhzJzogIW91dGxldE5hbWUgfVwiXG4gICNjb250YWluZXJcbj5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwidGFicy1zbGlkZXIgdGFicy1zbGlkZXItbGVmdFwiXG4gICAgdGl0bGU9XCJ7eyAnU2Nyb2xsIHRvIHRoZSBsZWZ0JyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgI2xlZnRcbiAgICAqbmdJZj1cInNob3dMZWZ0IHx8IHNob3dSaWdodFwiXG4gICAgW2Rpc2FibGVkXT1cIiFzaG93TGVmdFwiXG4gICAgKGNsaWNrKT1cInNjcm9sbCgnbGVmdCcpXCJcbiAgPlxuICAgIDxpIFtjOHlJY29uXT1cIidjaGV2cm9uLWxlZnQnXCI+PC9pPlxuICA8L2J1dHRvbj5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwidGFicy1zbGlkZXIgdGFicy1zbGlkZXItcmlnaHRcIlxuICAgIHRpdGxlPVwie3sgJ1Njcm9sbCB0byB0aGUgcmlnaHQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAjcmlnaHRcbiAgICAqbmdJZj1cInNob3dSaWdodCB8fCBzaG93TGVmdFwiXG4gICAgW2Rpc2FibGVkXT1cIiFzaG93UmlnaHRcIlxuICAgIChjbGljayk9XCJzY3JvbGwoJ3JpZ2h0JylcIlxuICA+XG4gICAgPGkgW2M4eUljb25dPVwiJ2NoZXZyb24tcmlnaHQnXCI+PC9pPlxuICA8L2J1dHRvbj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFvdXRsZXROYW1lXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJuYXYgbmF2LXRhYnMgbmF2LXRhYnNjOHlcIlxuICAgICAgcm9sZT1cImxpc3RcIlxuICAgICAgI3RhYnNDb250YWluZXJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0YWIgb2YgdGFic1wiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgcm9sZT1cImxpc3RpdGVtXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7IGFjdGl2ZTogcmxhPy5pc0FjdGl2ZSB9XCJcbiAgICAgICAgICAqbmdJZj1cIiF0YWIuY29tcG9uZW50ICYmICF0YWIuaGlkZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8YVxuICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwidGFiLnBhdGhcIlxuICAgICAgICAgICAgcm91dGVyTGlua0FjdGl2ZVxuICAgICAgICAgICAgI3JsYT1cInJvdXRlckxpbmtBY3RpdmVcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAncC1yLTI0JzogIXRhYi50ZW1wbGF0ZSAmJiB0YWI/LmJhZGdlIH1cIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRhYi5vblNlbGVjdD8uZW1pdCgpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICBbYzh5SWNvbl09XCJ0YWI/Lmljb25cIlxuICAgICAgICAgICAgICAqbmdJZj1cIiF0YWIudGVtcGxhdGUgJiYgdGFiPy5pY29uXCJcbiAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICB0aXRsZT1cInt7IHRhYj8ubGFiZWwgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAqbmdJZj1cIiF0YWIudGVtcGxhdGUgJiYgIXRhYi5jb21wb25lbnRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyB0YWI/LmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBjbGFzcz1cImRhc2hib2FyZC10ZW1wbGF0ZS1tYXJrZXJcIlxuICAgICAgICAgICAgICB0b29sdGlwPVwie3sgdGFiPy50b29sdGlwVGV4dCB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXG4gICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICBbYWRhcHRpdmVQb3NpdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtkZWxheV09XCIzMDBcIlxuICAgICAgICAgICAgICAqbmdJZj1cIiF0YWIudGVtcGxhdGUgJiYgdGFiPy5iYWRnZVwiXG4gICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGFiLnRlbXBsYXRlOyBpbmplY3RvcjogdGFiLmluamVjdG9yXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0NvbXBvbmVudE91dGxldD1cInRhYi5jb21wb25lbnQ7IGluamVjdG9yOiB0YWIuaW5qZWN0b3JcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8ZGl2XG4gICAgY2xhc3M9XCJjb21wb25lbnQtdGFicyBuYXYgbmF2LXRhYnMgbmF2LXRhYnNjOHlcIlxuICAgICpuZ0lmPVwib3V0bGV0TmFtZVwiXG4gICAgI3RhYnNDb250YWluZXJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHRhYiBvZiB0YWJzOyB0cmFja0J5OiB0cmFja0J5UGF0aFwiPlxuICAgICAgPGRpdlxuICAgICAgICBbbmdDbGFzc109XCJ7IGFjdGl2ZTogdGFiLmlzQWN0aXZlIH1cIlxuICAgICAgICBbcm91dGVyTGlua109XCJ0YWIucGF0aFwiXG4gICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlXT1cInRhYi5wYXRoID8gJ2FjdGl2ZScgOiAnJ1wiXG4gICAgICA+XG4gICAgICAgIDxhXG4gICAgICAgICAgY2xhc3M9XCJwb2ludGVyXCJcbiAgICAgICAgICB0aXRsZT1cInt7IHRhYj8ubGFiZWwgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgIChjbGljayk9XCJ0YWIub25TZWxlY3Q/LmVtaXQoKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBbYzh5SWNvbl09XCJ0YWI/Lmljb25cIj48L2k+XG4gICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICB7eyB0YWI/LmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2E+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdlxuICBjbGFzcz1cInZpc2libGUteHMgbW9iaWxlLXRhYnNcIlxuICAqbmdJZj1cIiFvdXRsZXROYW1lXCJcbj5cbiAgPHVsIGNsYXNzPVwibGlzdC11bnN0eWxlZCBkLWZsZXggbS1iLTBcIj5cbiAgICA8bGkgY2xhc3M9XCJjOHktc2VsZWN0LXdyYXBwZXIgZmxleC1ncm93XCI+XG4gICAgICA8c2VsZWN0XG4gICAgICAgIChjaGFuZ2UpPVwibmF2aWdhdGVUbygkZXZlbnQudGFyZ2V0LnZhbHVlKVwiXG4gICAgICAgICNzZWxlY3RcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdGFiIG9mIHRhYnNcIj5cbiAgICAgICAgICA8b3B0aW9uXG4gICAgICAgICAgICAqbmdJZj1cIiF0YWIuY29tcG9uZW50XCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJ0YWIucGF0aFwiXG4gICAgICAgICAgICBbc2VsZWN0ZWRdPVwiaXNBY3RpdmUodGFiKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgdGFiPy5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvc2VsZWN0PlxuICAgIDwvbGk+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdGFiIG9mIHRhYnNcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWIuY29tcG9uZW50XCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqYzh5Q29tcG9uZW50T3V0bGV0PVwidGFiLmNvbXBvbmVudDsgZW52aXJvbm1lbnRJbmplY3RvcjogdGFiLmluamVjdG9yXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvdWw+XG48L2Rpdj5cbiJdfQ==
|
|
162
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy1vdXRsZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS90YWJzL3RhYnMtb3V0bGV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL2NvcmUvdGFicy90YWJzLW91dGxldC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxXQUFXLEVBQ1gsU0FBUyxFQUNULFVBQVUsRUFDVixTQUFTLEVBS1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7OztBQU03QyxNQUFNLE9BQU8sbUJBQW1CO0lBYTlCLElBQXlDLGVBQWU7UUFDdEQsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFDRCxJQUFvQyxPQUFPO1FBQ3pDLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNkLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUNELE9BQU8sV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksV0FBVyxDQUFDLElB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V0FBVzt1QkFBQyxrQkFBa0I7Z0JBSUMsZUFBZTtzQkFBdkQsV0FBVzt1QkFBQyxzQkFBc0I7Z0JBR0MsT0FBTztzQkFBMUMsV0FBVzt1QkFBQyxpQkFBaUI7Z0JBT2lCLFlBQVk7c0JBQTFELFdBQVc7dUJBQUMsNEJBQTRCO2dCQUdJLFVBQVU7c0JBQXRELFdBQVc7dUJBQUMsMEJBQTBCO2dCQUc2QixTQUFTO3NCQUE1RSxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFbEQsYUFBYTtzQkFEcEIsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBIb3N0QmluZGluZyxcbiAgUmVuZGVyZXIyLFxuICBFbGVtZW50UmVmLFxuICBWaWV3Q2hpbGQsXG4gIE9uRGVzdHJveSxcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBtYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGZyb21FdmVudFBhdHRlcm4sIGZyb21FdmVudCwgbWVyZ2UsIEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFRhYiB9IGZyb20gJy4vdGFiLm1vZGVsJztcbmltcG9ydCB7IEhlYWRlclNlcnZpY2UgfSBmcm9tICcuLi9oZWFkZXIvaGVhZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGFic1NlcnZpY2UgfSBmcm9tICcuL3RhYnMuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS10YWJzLW91dGxldCxjOHktdWktdGFicycsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJzLW91dGxldC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgVGFic091dGxldENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgQWZ0ZXJDb250ZW50SW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgdGFiczogVGFiW10gPSBbXTtcbiAgQElucHV0KCkgb3JpZW50YXRpb246ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCcgPSAndmVydGljYWwnO1xuICBASW5wdXQoKSBuYXZpZ2F0b3JPcGVuID0gZmFsc2U7XG4gIEBJbnB1dCgpIG91dGxldE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgQElucHV0KCkgY29udGV4dDogYW55O1xuICAvKipcbiAgICogSWRlbnRpZmllcyBpZiB0aGUgY3VycmVudCB2aWV3IGhhcyBhIGhlYWRlciBlbGVtZW50LlxuICAgKi9cbiAgQElucHV0KCkgQEhvc3RCaW5kaW5nKCdjbGFzcy5oYXMtaGVhZGVyJykgaGFzSGVhZGVyID0gZmFsc2U7XG5cbiAgc2hvd0xlZnQgPSBmYWxzZTtcbiAgc2hvd1JpZ2h0ID0gZmFsc2U7XG4gIEBIb3N0QmluZGluZygnY2xhc3MubmF2aWdhdG9yLW9wZW4nKSBnZXQgaXNOYXZpZ2F0b3JPcGVuKCkge1xuICAgIHJldHVybiB0aGlzLm5hdmlnYXRvck9wZW47XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5wYWdlLXRhYnMnKSBnZXQgaGFzVGFicygpIHtcbiAgICBsZXQgdmlzaWJsZVRhYnMgPSBbXTtcbiAgICBpZiAodGhpcy50YWJzKSB7XG4gICAgICB2aXNpYmxlVGFicyA9IHRoaXMudGFicy5maWx0ZXIodGFiID0+IHRhYi5oaWRlICE9PSB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZpc2libGVUYWJzLmxlbmd0aCA+IDEgfHwgdmlzaWJsZVRhYnMuZmluZCh0YWIgPT4gdGFiLnNob3dBbHdheXMpO1xuICB9XG4gIEBIb3N0QmluZGluZygnY2xhc3MucGFnZS10YWJzLWhvcml6b250YWwnKSBnZXQgaXNIb3Jpem9udGFsKCkge1xuICAgIHJldHVybiB0aGlzLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCc7XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5wYWdlLXRhYnMtdmVydGljYWwnKSBnZXQgaXNWZXJ0aWNhbCgpIHtcbiAgICByZXR1cm4gdGhpcy5vcmllbnRhdGlvbiAhPT0gJ2hvcml6b250YWwnO1xuICB9XG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgY29udGFpbmVyOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCd0YWJzQ29udGFpbmVyJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IGZhbHNlIH0pXG4gIHByaXZhdGUgdGFic0NvbnRhaW5lcjogRWxlbWVudFJlZjtcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgdGFic0NoYW5nZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUYWJbXT4oW10pO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgaGVhZGVyOiBIZWFkZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGFic1NlcnZpY2U6IFRhYnNTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vdXRsZXROYW1lICYmIHRoaXMudGFicy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMudGFic1NlcnZpY2UuaXRlbXMkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCh0YWJzID0+IHRhYnMuZmlsdGVyKHRhYiA9PiB0YWIudGFic091dGxldCA9PT0gdGhpcy5vdXRsZXROYW1lKSksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSh0YWJzID0+IHtcbiAgICAgICAgICB0aGlzLnRhYnMgPSB0YWJzO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMudGFicykge1xuICAgICAgdGhpcy50YWJzID0gdGhpcy50YWJzLmZpbHRlcih0YWIgPT4gdGFiLnRhYnNPdXRsZXQgPT09IHRoaXMub3V0bGV0TmFtZSk7XG4gICAgICB0aGlzLnRhYnNDaGFuZ2VzJC5uZXh0KHRoaXMudGFicyk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIGlmICh0aGlzLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgIHRoaXMuc2Nyb2xsU3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgdHJhY2tCeVBhdGgoaW5kZXgsIHRhYjogVGFiKSB7XG4gICAgcmV0dXJuIHRhYi5wYXRoID8gdGFiLnBhdGggOiBpbmRleDtcbiAgfVxuXG4gIGlzQWN0aXZlKHRhYjogVGFiKSB7XG4gICAgaWYgKHRhYiAmJiB0YWIucGF0aCkge1xuICAgICAgcmV0dXJuIHRoaXMucm91dGVyLmlzQWN0aXZlKHRhYi5wYXRoLCBmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBuYXZpZ2F0ZVRvKHBhdGgpIHtcbiAgICB0aGlzLmhlYWRlci50b2dnbGUoKTtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbcGF0aF0pO1xuICB9XG5cbiAgc2Nyb2xsKGRpcmVjdGlvbjogJ3JpZ2h0JyB8ICdsZWZ0JyA9ICdyaWdodCcpIHtcbiAgICBjb25zdCB7IHdpZHRoU2Nyb2xsLCB3aWR0aCwgc2Nyb2xsTGVmdCB9ID0gdGhpcy5nZXREaW1lbnNpb25zKCk7XG4gICAgY29uc3QgbXVsdGlwbGllciA9IGRpcmVjdGlvbiA9PT0gJ2xlZnQnID8gLTEgOiAxO1xuXG4gICAgbGV0IHRhcmdldFNjcm9sbCA9IHNjcm9sbExlZnQgKyB3aWR0aCAqIG11bHRpcGxpZXI7XG4gICAgaWYgKHRhcmdldFNjcm9sbCA8IDApIHtcbiAgICAgIHRhcmdldFNjcm9sbCA9IDA7XG4gICAgfVxuICAgIGlmICh0YXJnZXRTY3JvbGwgPiB3aWR0aFNjcm9sbCAtIHdpZHRoKSB7XG4gICAgICB0YXJnZXRTY3JvbGwgPSB3aWR0aFNjcm9sbCAtIHdpZHRoO1xuICAgIH1cbiAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSB0YXJnZXRTY3JvbGw7XG4gIH1cblxuICBwcml2YXRlIHNjcm9sbFN1YnNjcmliZSgpIHtcbiAgICBsZXQgdW5saXN0ZW47XG4gICAgbWVyZ2UoXG4gICAgICB0aGlzLnRhYnNDaGFuZ2VzJCxcbiAgICAgIGZyb21FdmVudCh0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LCAnc2Nyb2xsJyksXG4gICAgICBmcm9tRXZlbnRQYXR0ZXJuKFxuICAgICAgICAoaGFuZGxlcjogYW55KSA9PiB7XG4gICAgICAgICAgdW5saXN0ZW4gPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbignd2luZG93JywgJ3Jlc2l6ZScsIGhhbmRsZXIpO1xuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB1bmxpc3RlbigpXG4gICAgICApXG4gICAgKVxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDI1MCksIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVTY3JvbGwoKSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNjcm9sbCgpIHtcbiAgICBjb25zdCB7IHdpZHRoU2Nyb2xsLCB3aWR0aCwgc2Nyb2xsTGVmdCB9ID0gdGhpcy5nZXREaW1lbnNpb25zKCk7XG4gICAgdGhpcy5zaG93TGVmdCA9ICEhc2Nyb2xsTGVmdDtcbiAgICB0aGlzLnNob3dSaWdodCA9IHdpZHRoU2Nyb2xsID4gd2lkdGggKyBzY3JvbGxMZWZ0O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREaW1lbnNpb25zKCkge1xuICAgIGNvbnN0IGVsVGFicyA9IHRoaXMudGFic0NvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IGVsID0gdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCB3aWR0aFNjcm9sbCA9IGVsVGFicy5zY3JvbGxXaWR0aDtcbiAgICBjb25zdCB3aWR0aCA9IGVsLmNsaWVudFdpZHRoO1xuICAgIGNvbnN0IHNjcm9sbExlZnQgPSBlbC5zY3JvbGxMZWZ0O1xuICAgIHJldHVybiB7IHdpZHRoU2Nyb2xsLCB3aWR0aCwgc2Nyb2xsTGVmdCB9O1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwidGFiQ29udGFpbmVyXCJcbiAgW25nQ2xhc3NdPVwieyAnaGlkZGVuLXhzJzogIW91dGxldE5hbWUgfVwiXG4gICNjb250YWluZXJcbj5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwidGFicy1zbGlkZXIgdGFicy1zbGlkZXItbGVmdFwiXG4gICAgdGl0bGU9XCJ7eyAnU2Nyb2xsIHRvIHRoZSBsZWZ0JyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgI2xlZnRcbiAgICAqbmdJZj1cInNob3dMZWZ0IHx8IHNob3dSaWdodFwiXG4gICAgW2Rpc2FibGVkXT1cIiFzaG93TGVmdFwiXG4gICAgKGNsaWNrKT1cInNjcm9sbCgnbGVmdCcpXCJcbiAgPlxuICAgIDxpIFtjOHlJY29uXT1cIidjaGV2cm9uLWxlZnQnXCI+PC9pPlxuICA8L2J1dHRvbj5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwidGFicy1zbGlkZXIgdGFicy1zbGlkZXItcmlnaHRcIlxuICAgIHRpdGxlPVwie3sgJ1Njcm9sbCB0byB0aGUgcmlnaHQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAjcmlnaHRcbiAgICAqbmdJZj1cInNob3dSaWdodCB8fCBzaG93TGVmdFwiXG4gICAgW2Rpc2FibGVkXT1cIiFzaG93UmlnaHRcIlxuICAgIChjbGljayk9XCJzY3JvbGwoJ3JpZ2h0JylcIlxuICA+XG4gICAgPGkgW2M4eUljb25dPVwiJ2NoZXZyb24tcmlnaHQnXCI+PC9pPlxuICA8L2J1dHRvbj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFvdXRsZXROYW1lXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJuYXYgbmF2LXRhYnMgbmF2LXRhYnNjOHlcIlxuICAgICAgcm9sZT1cImxpc3RcIlxuICAgICAgI3RhYnNDb250YWluZXJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0YWIgb2YgdGFic1wiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgcm9sZT1cImxpc3RpdGVtXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7IGFjdGl2ZTogcmxhPy5pc0FjdGl2ZSB9XCJcbiAgICAgICAgICAqbmdJZj1cIiF0YWIuY29tcG9uZW50ICYmICF0YWIuaGlkZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8YVxuICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwidGFiLnBhdGhcIlxuICAgICAgICAgICAgcm91dGVyTGlua0FjdGl2ZVxuICAgICAgICAgICAgW3F1ZXJ5UGFyYW1zSGFuZGxpbmddPVwiJ3ByZXNlcnZlJ1wiXG4gICAgICAgICAgICAjcmxhPVwicm91dGVyTGlua0FjdGl2ZVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdwLXItMjQnOiAhdGFiLnRlbXBsYXRlICYmIHRhYj8uYmFkZ2UgfVwiXG4gICAgICAgICAgICAoY2xpY2spPVwidGFiLm9uU2VsZWN0Py5lbWl0KClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgIFtjOHlJY29uXT1cInRhYj8uaWNvblwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiIXRhYi50ZW1wbGF0ZSAmJiB0YWI/Lmljb25cIlxuICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIHRpdGxlPVwie3sgdGFiPy5sYWJlbCB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiIXRhYi50ZW1wbGF0ZSAmJiAhdGFiLmNvbXBvbmVudFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IHRhYj8ubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIGNsYXNzPVwiZGFzaGJvYXJkLXRlbXBsYXRlLW1hcmtlclwiXG4gICAgICAgICAgICAgIHRvb2x0aXA9XCJ7eyB0YWI/LnRvb2x0aXBUZXh0IHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcbiAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgIFthZGFwdGl2ZVBvc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2RlbGF5XT1cIjMwMFwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiIXRhYi50ZW1wbGF0ZSAmJiB0YWI/LmJhZGdlXCJcbiAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgPC9hPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0YWIudGVtcGxhdGU7IGluamVjdG9yOiB0YWIuaW5qZWN0b3JcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nQ29tcG9uZW50T3V0bGV0PVwidGFiLmNvbXBvbmVudDsgaW5qZWN0b3I6IHRhYi5pbmplY3RvclwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxkaXZcbiAgICBjbGFzcz1cImNvbXBvbmVudC10YWJzIG5hdiBuYXYtdGFicyBuYXYtdGFic2M4eVwiXG4gICAgKm5nSWY9XCJvdXRsZXROYW1lXCJcbiAgICAjdGFic0NvbnRhaW5lclxuICA+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdGFiIG9mIHRhYnM7IHRyYWNrQnk6IHRyYWNrQnlQYXRoXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIFtuZ0NsYXNzXT1cInsgYWN0aXZlOiB0YWIuaXNBY3RpdmUgfVwiXG4gICAgICAgIFtyb3V0ZXJMaW5rXT1cInRhYi5wYXRoXCJcbiAgICAgICAgW3JvdXRlckxpbmtBY3RpdmVdPVwidGFiLnBhdGggPyAnYWN0aXZlJyA6ICcnXCJcbiAgICAgICAgW3F1ZXJ5UGFyYW1zSGFuZGxpbmddPVwiJ3ByZXNlcnZlJ1wiXG4gICAgICA+XG4gICAgICAgIDxhXG4gICAgICAgICAgY2xhc3M9XCJwb2ludGVyXCJcbiAgICAgICAgICB0aXRsZT1cInt7IHRhYj8ubGFiZWwgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgIChjbGljayk9XCJ0YWIub25TZWxlY3Q/LmVtaXQoKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBbYzh5SWNvbl09XCJ0YWI/Lmljb25cIj48L2k+XG4gICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICB7eyB0YWI/LmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2E+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdlxuICBjbGFzcz1cInZpc2libGUteHMgbW9iaWxlLXRhYnNcIlxuICAqbmdJZj1cIiFvdXRsZXROYW1lXCJcbj5cbiAgPHVsIGNsYXNzPVwibGlzdC11bnN0eWxlZCBkLWZsZXggbS1iLTBcIj5cbiAgICA8bGkgY2xhc3M9XCJjOHktc2VsZWN0LXdyYXBwZXIgZmxleC1ncm93XCI+XG4gICAgICA8c2VsZWN0XG4gICAgICAgIChjaGFuZ2UpPVwibmF2aWdhdGVUbygkZXZlbnQudGFyZ2V0LnZhbHVlKVwiXG4gICAgICAgICNzZWxlY3RcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdGFiIG9mIHRhYnNcIj5cbiAgICAgICAgICA8b3B0aW9uXG4gICAgICAgICAgICAqbmdJZj1cIiF0YWIuY29tcG9uZW50XCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJ0YWIucGF0aFwiXG4gICAgICAgICAgICBbc2VsZWN0ZWRdPVwiaXNBY3RpdmUodGFiKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgdGFiPy5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvc2VsZWN0PlxuICAgIDwvbGk+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdGFiIG9mIHRhYnNcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWIuY29tcG9uZW50XCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqYzh5Q29tcG9uZW50T3V0bGV0PVwidGFiLmNvbXBvbmVudDsgZW52aXJvbm1lbnRJbmplY3RvcjogdGFiLmluamVjdG9yXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvdWw+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -2,10 +2,10 @@ import { KeyValuePipe } from '@angular/common';
|
|
|
2
2
|
import { Component, EventEmitter, Inject, InjectionToken, Input, Output } from '@angular/core';
|
|
3
3
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
4
4
|
import { FormBuilder, FormControl, ReactiveFormsModule } from '@angular/forms';
|
|
5
|
-
import { AGGREGATION_VALUES, CoreModule } from '@c8y/ngx-components';
|
|
5
|
+
import { AGGREGATION_VALUES, CoreModule, GainsightService } from '@c8y/ngx-components';
|
|
6
6
|
import saveAs from 'file-saver';
|
|
7
7
|
import { debounceTime, merge, Subject, takeUntil } from 'rxjs';
|
|
8
|
-
import { EXPORT_MODE_VALUES, SERIES_DATA_MERGED_FILE_NAME } from '../../datapoints-export-selector.model';
|
|
8
|
+
import { EXPORT_MODE_VALUES, PRODUCT_EXPERIENCE_DATAPOINTS_EXPORT_SELECTOR, SERIES_DATA_MERGED_FILE_NAME } from '../../datapoints-export-selector.model';
|
|
9
9
|
import { DataFetchingService } from './data-fetching.service';
|
|
10
10
|
import { DataProcessingService } from './data-processing.service';
|
|
11
11
|
import { DatapointsExportSelectorFileExporterService } from './datapoints-export-selector-file-exporter.service';
|
|
@@ -47,12 +47,13 @@ export const dateRangeValidator = (control) => {
|
|
|
47
47
|
return null;
|
|
48
48
|
};
|
|
49
49
|
export class DatapointsExportSelectorFileExporterComponent {
|
|
50
|
-
constructor(datapointsExportModalService, datapointsExportSelectorService, datapointsExportSelectorFileExporterService, formBuilder, generators) {
|
|
50
|
+
constructor(datapointsExportModalService, datapointsExportSelectorService, datapointsExportSelectorFileExporterService, formBuilder, generators, gainsightService) {
|
|
51
51
|
this.datapointsExportModalService = datapointsExportModalService;
|
|
52
52
|
this.datapointsExportSelectorService = datapointsExportSelectorService;
|
|
53
53
|
this.datapointsExportSelectorFileExporterService = datapointsExportSelectorFileExporterService;
|
|
54
54
|
this.formBuilder = formBuilder;
|
|
55
55
|
this.generators = generators;
|
|
56
|
+
this.gainsightService = gainsightService;
|
|
56
57
|
this.onDownloadButtonStateChange = new EventEmitter();
|
|
57
58
|
/**
|
|
58
59
|
* Represents aggregation selector options that are disabled.
|
|
@@ -147,6 +148,7 @@ export class DatapointsExportSelectorFileExporterComponent {
|
|
|
147
148
|
zipName: value.zipName
|
|
148
149
|
}));
|
|
149
150
|
const selectedFileExports = this.getOnlySelectedFileExports(fileExports);
|
|
151
|
+
this.triggerGainsightDownloadEvent(selectedFileExports);
|
|
150
152
|
await Promise.all(selectedFileExports.map(async ({ fileType, zipName }) => {
|
|
151
153
|
const blob = await this.exportFile(fileType);
|
|
152
154
|
await this.downloadFile(blob, fileType, zipName);
|
|
@@ -442,7 +444,28 @@ export class DatapointsExportSelectorFileExporterComponent {
|
|
|
442
444
|
});
|
|
443
445
|
return initialSelection;
|
|
444
446
|
}
|
|
445
|
-
|
|
447
|
+
triggerGainsightDownloadEvent(selectedFileExports) {
|
|
448
|
+
const commonEventData = {
|
|
449
|
+
action: PRODUCT_EXPERIENCE_DATAPOINTS_EXPORT_SELECTOR.ACTIONS.DOWNLOAD_STARTED,
|
|
450
|
+
component: PRODUCT_EXPERIENCE_DATAPOINTS_EXPORT_SELECTOR.COMPONENTS
|
|
451
|
+
.DATAPOINTS_EXPORT_SELECTOR_FILE_EXPORTER,
|
|
452
|
+
selectedFileType: selectedFileExports.map(item => item.fileType)
|
|
453
|
+
};
|
|
454
|
+
if (this.isFullTypeOfExport) {
|
|
455
|
+
this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_DATAPOINTS_EXPORT_SELECTOR.EVENTS.EXPORT_SELECTOR, {
|
|
456
|
+
...commonEventData,
|
|
457
|
+
selectedExportType: PRODUCT_EXPERIENCE_DATAPOINTS_EXPORT_SELECTOR.EXPORT_CONFIG.FULL_EXPORT_TYPE
|
|
458
|
+
});
|
|
459
|
+
}
|
|
460
|
+
else {
|
|
461
|
+
this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_DATAPOINTS_EXPORT_SELECTOR.EVENTS.EXPORT_SELECTOR, {
|
|
462
|
+
...commonEventData,
|
|
463
|
+
selectedExportType: PRODUCT_EXPERIENCE_DATAPOINTS_EXPORT_SELECTOR.EXPORT_CONFIG.COMPACT_EXPORT_TYPE,
|
|
464
|
+
selectedAggregation: this.exportConfig.aggregation ?? AGGREGATION_VALUES.none
|
|
465
|
+
});
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DatapointsExportSelectorFileExporterComponent, deps: [{ token: i1.DataProcessingService }, { token: i2.DataFetchingService }, { token: i3.DatapointsExportSelectorFileExporterService }, { token: i4.FormBuilder }, { token: FILE_GENERATORS }, { token: i5.GainsightService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
446
469
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: DatapointsExportSelectorFileExporterComponent, isStandalone: true, selector: "c8y-datapoints-export-selector-file-exporter", inputs: { exportConfig: "exportConfig" }, outputs: { onDownloadButtonStateChange: "onDownloadButtonStateChange" }, ngImport: i0, template: "<div class=\"p-b-16\">\n <ng-container *ngIf=\"hasPermissionToReadAnyMeasurements; else hasNoRoleToReadAnyMeasurements\">\n <div class=\"p-16 text-center separator-bottom sticky-top bg-component\">\n <p class=\"text-medium text-16\">\n {{ 'Configure export' | translate }}\n </p>\n </div>\n <div\n class=\"p-t-24 p-r-16 p-l-16 gap-8 p-b-16 flex-wrap\"\n [ngClass]=\"{ 'separator-bottom': isFullTypeOfExport }\"\n >\n <div class=\"row\">\n <div class=\"col-md-4\">\n <c8y-datapoints-export-selector-time-range\n *ngIf=\"this.hasPermissionToReadAnyMeasurements\"\n [formGroup]=\"formGroup\"\n (onDateFromChange)=\"onDateFromChange($event)\"\n (onDateToChange)=\"onDateToChange($event)\"\n ></c8y-datapoints-export-selector-time-range>\n </div>\n <div class=\"col-md-4\">\n <c8y-datapoints-export-selector-data-scope\n *ngIf=\"this.hasPermissionToReadAnyMeasurements\"\n [disabledAggregationOptions]=\"disabledAggregationOptions\"\n [formGroup]=\"formGroup\"\n (onAggregationChange)=\"onAggregationChange($event)\"\n (onExportTypeChange)=\"onExportTypeChange($event)\"\n ></c8y-datapoints-export-selector-data-scope>\n </div>\n <div class=\"col-md-4\">\n <c8y-datapoints-export-selector-file-types\n *ngIf=\"this.hasPermissionToReadAnyMeasurements\"\n [dynamicFilesTypeMetadata]=\"dynamicFilesTypeMetadata\"\n [formGroup]=\"formGroup\"\n ></c8y-datapoints-export-selector-file-types>\n </div>\n </div>\n </div>\n <ng-container\n *ngIf=\"!isFullTypeOfExport && !hasFetchedDataAnyValuesToExport && !isPreviewLoading\"\n >\n <div class=\"p-t-24 p-r-16 p-l-16 p-b-16 separator-bottom d-flex\">\n <div\n class=\"alert alert-warning center-block\"\n role=\"alert\"\n data-cy=\"file-exporter--no-data-available\"\n translate\n >\n No data available.\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"datapointsExceedingBrowserDownloadLimit.length > 0\">\n <div class=\"p-t-24 p-r-16 p-l-16 p-b-16 separator-bottom d-flex\">\n <div\n [class]=\"\n hasNoExportableData\n ? 'alert alert-warning center-block'\n : 'alert alert-info center-block'\n \"\n role=\"alert\"\n [innerHTML]=\"limitExceededMessage\"\n ></div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"isFullTypeOfExport\">\n <c8y-datapoints-export-selector-preview\n *ngIf=\"this.hasPermissionToReadAnyMeasurements\"\n [hasFetchedDataAnyValuesToExport]=\"hasFetchedDataAnyValuesToExport\"\n [isPreviewLoading]=\"isPreviewLoading\"\n [previewTableData]=\"previewTableData\"\n ></c8y-datapoints-export-selector-preview>\n </ng-container>\n </ng-container>\n <ng-template #hasNoRoleToReadAnyMeasurements>\n <div class=\"p-t-24 p-r-16 p-l-16 p-b-16 d-flex\">\n <div\n class=\"alert alert-info center-block\"\n role=\"alert\"\n translate\n >\n <p>To export data, you must meet at least one of these criteria:</p>\n <ul>\n <li>\n Have\n <b>READ permission for \"Measurements\" permission type</b>\n (either as a global role or for the specific source)\n </li>\n <li>\n Be the\n <b>owner of the source</b>\n you want to export data from\n </li>\n </ul>\n <p>Don't meet these requirements? Contact your system administrator for assistance.</p>\n </div>\n </div>\n </ng-template>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "pipe", type: i5.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i5.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: DataPointsExportSelectorDataScopeComponent, selector: "c8y-datapoints-export-selector-data-scope", inputs: ["disabledAggregationOptions", "formGroup"], outputs: ["onAggregationChange", "onExportTypeChange"] }, { kind: "component", type: DataPointsExportSelectorFileTypesComponent, selector: "c8y-datapoints-export-selector-file-types", inputs: ["dynamicFilesTypeMetadata", "formGroup"] }, { kind: "component", type: DataPointsExportSelectorPreviewComponent, selector: "c8y-datapoints-export-selector-preview", inputs: ["hasFetchedDataAnyValuesToExport", "isPreviewLoading", "previewTableData"] }, { kind: "component", type: DataPointsExportSelectorTimeRangeComponent, selector: "c8y-datapoints-export-selector-time-range", inputs: ["formGroup"], outputs: ["onDateFromChange", "onDateToChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }] }); }
|
|
447
470
|
}
|
|
448
471
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DatapointsExportSelectorFileExporterComponent, decorators: [{
|
|
@@ -459,9 +482,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
459
482
|
}], ctorParameters: () => [{ type: i1.DataProcessingService }, { type: i2.DataFetchingService }, { type: i3.DatapointsExportSelectorFileExporterService }, { type: i4.FormBuilder }, { type: undefined, decorators: [{
|
|
460
483
|
type: Inject,
|
|
461
484
|
args: [FILE_GENERATORS]
|
|
462
|
-
}] }], propDecorators: { exportConfig: [{
|
|
485
|
+
}] }, { type: i5.GainsightService }], propDecorators: { exportConfig: [{
|
|
463
486
|
type: Input
|
|
464
487
|
}], onDownloadButtonStateChange: [{
|
|
465
488
|
type: Output
|
|
466
489
|
}] } });
|
|
467
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItZmlsZS1leHBvcnRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1tb2RhbC9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1maWxlLWV4cG9ydGVyL2RhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yLWZpbGUtZXhwb3J0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3IvZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItbW9kYWwvZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItZmlsZS1leHBvcnRlci9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1maWxlLWV4cG9ydGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sY0FBYyxFQUNkLEtBQUssRUFHTCxNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUVMLFdBQVcsRUFDWCxXQUFXLEVBQ1gsbUJBQW1CLEVBR3BCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUNMLGtCQUFrQixFQUdsQixVQUFVLEVBQ1gsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLE1BQU0sTUFBTSxZQUFZLENBQUM7QUFDaEMsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBTUwsa0JBQWtCLEVB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Q29udGVudCI6WyJpbXBvcnQgeyBLZXlWYWx1ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5qZWN0aW9uVG9rZW4sXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBGb3JtQnVpbGRlcixcbiAgRm9ybUNvbnRyb2wsXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gIFZhbGlkYXRpb25FcnJvcnMsXG4gIFZhbGlkYXRvckZuXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIEFHR1JFR0FUSU9OX1ZBTFVFUyxcbiAgQWdncmVnYXRpb25PcHRpb24sXG4gIEFnZ3JlZ2F0aW9uT3B0aW9uU3RhdHVzLFxuICBDb3JlTW9kdWxlXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHNhdmVBcyBmcm9tICdmaWxlLXNhdmVyJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgbWVyZ2UsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgRGF0YXBvaW50Q291bnRzLFxuICBEYXRhcG9pbnREZXRhaWxzLFxuICBEYXRhcG9pbnRzRXhjZWVkaW5nTGltaXQsXG4gIERhdGFUb0V4cG9ydCxcbiAgRGF0YVRvRXhwb3J0V2l0aEJhY2tlbmRDcmVhdGVkRmlsZSxcbiAgRVhQT1JUX01PREVfVkFMVUVTLFxuICBFeHBvcnRDb25maWcsXG4gIEV4cG9ydERhdGEsXG4gIEZpbGVFeHBvcnRDb25maWcsXG4gIEZpbGVHZW5lcmF0b3IsXG4gIEZpbGVUeXBlTWV0YWRhdGEsXG4gIE1lcmdlZEV4cG9ydERldGFpbHMsXG4gIFNFUklFU19EQVRBX01FUkdFRF9GSUxFX05BTUVcbn0gZnJvbSAnLi4vLi4vZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3IubW9kZWwnO1xuaW1wb3J0IHsgRGF0YUZldGNoaW5nU2VydmljZSB9IGZyb20gJy4vZGF0YS1mZXRjaGluZy5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGFQcm9jZXNzaW5nU2VydmljZSB9IGZyb20gJy4vZGF0YS1wcm9jZXNzaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0YXBvaW50c0V4cG9ydFNlbGVjdG9yRmlsZUV4cG9ydGVyU2VydmljZSB9IGZyb20gJy4vZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItZmlsZS1leHBvcnRlci5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGFQb2ludHNFeHBvcnRTZWxlY3RvclByZXZpZXdDb21wb25lbnQgfSBmcm9tICcuL2RhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yLXByZXZpZXcvZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItcHJldmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0YVBvaW50c0V4cG9ydFNlbGVjdG9yRGF0YVNjb3BlQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRhcG9pbnRzLWV4cG9ydHMtc2VsZWN0b3ItZGF0YS1zY29wZS9kYXRhcG9pbnRzLWV4cG9ydHMtc2VsZWN0b3ItZGF0YS1zY29wZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0YVBvaW50c0V4cG9ydFNlbGVjdG9yRmlsZVR5cGVzQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRhcG9pbnRzLWV4cG9ydHMtc2VsZWN0b3ItZmlsZS10eXBlcy9kYXRhcG9pbnRzLWV4cG9ydHMtc2VsZWN0b3ItZmlsZS10eXBlcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0YVBvaW50c0V4cG9ydFNlbGVjdG9yVGltZVJhbmdlQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRhcG9pbnRzLWV4cG9ydHMtc2VsZWN0b3ItdGltZS1yYW5nZS9kYXRhcG9pbnRzLWV4cG9ydHMtc2VsZWN0b3ItdGltZS1yYW5nZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ1NWR2VuZXJhdG9yQWRhcHRlciB9IGZyb20gJy4vZ2VuZXJhdG9ycy9jc3YtZ2VuZXJhdG9yJztcbmltcG9ydCB7IEV4Y2VsR2VuZXJhdG9yQWRhcHRlciB9IGZyb20gJy4vZ2VuZXJhdG9ycy9leGNlbC1nZW5lcmF0b3InO1xuXG5leHBvcnQgY29uc3QgRklMRV9HRU5FUkFUT1JTID0gbmV3IEluamVjdGlvblRva2VuPEZpbGVHZW5lcmF0b3JbXT4oJ0ZJTEVfR0VORVJBVE9SUycsIHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICBmYWN0b3J5OiAoKSA9PiBbRXhjZWxHZW5lcmF0b3JBZGFwdGVyLCBDU1ZHZW5lcmF0b3JBZGFwdGVyXVxufSk7XG5cbmV4cG9ydCBjb25zdCBkYXRlUmFuZ2VWYWxpZGF0b3I6IFZhbGlkYXRvckZuID0gKFxuICBjb250cm9sOiBBYnN0cmFjdENvbnRyb2xcbik6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgY29uc3QgZGF0ZUZyb20gPSBjb250cm9sLmdldCgnZGF0ZUZyb20nKTtcbiAgY29uc3QgZGF0ZVRvID0gY29udHJvbC5nZXQoJ2RhdGVUbycpO1xuXG4gIGlmICghZGF0ZUZyb20gfHwgIWRhdGVUbykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgZGF0ZUZyb21WYWx1ZSA9IGRhdGVGcm9tLnZhbHVlO1xuICBjb25zdCBkYXRlVG9WYWx1ZSA9IGRhdGVUby52YWx1ZTtcbiAgaWYgKGRhdGVGcm9tVmFsdWUgJiYgZGF0ZVRvVmFsdWUpIHtcbiAgICBpZiAobmV3IERhdGUoZGF0ZUZyb21WYWx1ZSkgPiBuZXcgRGF0ZShkYXRlVG9WYWx1ZSkpIHtcbiAgICAgIGRhdGVGcm9tLnNldEVycm9ycyh7IGRhdGVBZnRlclJhbmdlTWF4OiB0cnVlIH0pO1xuICAgICAgZGF0ZVRvLnNldEVycm9ycyh7IGRhdGVCZWZvcmVSYW5nZU1pbjogdHJ1ZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0ZUZyb20uc2V0RXJyb3JzKG51bGwpO1xuICAgICAgZGF0ZVRvLnNldEVycm9ycyhudWxsKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItZmlsZS1leHBvcnRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1maWxlLWV4cG9ydGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvcmVNb2R1bGUsXG4gICAgRGF0YVBvaW50c0V4cG9ydFNlbGVjdG9yRGF0YVNjb3BlQ29tcG9uZW50LFxuICAgIERhdGFQb2ludHNFeHBvcnRTZWxlY3RvckZpbGVUeXBlc0NvbXBvbmVudCxcbiAgICBEYXRhUG9pbnRzRXhwb3J0U2VsZWN0b3JQcmV2aWV3Q29tcG9uZW50LFxuICAgIERhdGFQb2ludHNFeHBvcnRTZWxlY3RvclRpbWVSYW5nZUNvbXBvbmVudCxcbiAgICBLZXlWYWx1ZVBpcGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIERhdGFwb2ludHNFeHBvcnRTZWxlY3RvckZpbGVFeHBvcnRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgZXhwb3J0Q29uZmlnOiBFeHBvcnRDb25maWc7XG4gIEBPdXRwdXQoKSBvbkRvd25sb2FkQnV0dG9uU3RhdGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAvKipcbiAgICogUmVwcmVzZW50cyBhZ2dyZWdhdGlvbiBzZWxlY3RvciBvcHRpb25zIHRoYXQgYXJlIGRpc2FibGVkLlxuICAgKiBUaGlzIHN0YXRlIGlzIGRldGVybWluZWQgYmFzZWQgb24gdGhlIGN1cnJlbnQgZGF0ZSByYW5nZS5cbiAgICovXG4gIGRpc2FibGVkQWdncmVnYXRpb25PcHRpb25zOiBBZ2dyZWdhdGlvbk9wdGlvblN0YXR1cyA9IHt9O1xuXG4gIGZvcm1Hcm91cDogUmV0dXJuVHlwZTxEYXRhcG9pbnRzRXhwb3J0U2VsZWN0b3JGaWxlRXhwb3J0ZXJDb21wb25lbnRbJ2NyZWF0ZUZvcm0nXT47XG5cbiAgLyoqXG4gICAqIENvbnRhaW5zIGFsbCBkYXRhcG9pbnRzIHRoYXQgbnVtYmVyIG9mIHJlY29yZHMgZXhjZWVkcyBhIHRocmVzaG9sZCwgd2hlcmUgZGF0YSBmb3IgdGhlc2UgZGF0YXBvaW50cyB3aWxsIGJlIHByb2Nlc3NlZCBieSB0aGUgYmFja2VuZC5cbiAgICogQXBwbGllcyBvbmx5IHRvIG1lYXN1cmVtZW50IEFQSSB3aGljaCBjYW4gcmV0dXJuIHByb2Nlc3NlZCBDU1YsIEV4Y2VsIG9yIFhNTCBkYXRhLlxuICAgKi9cbiAgZGF0YXBvaW50c0V4Y2VlZGluZ0Jyb3dzZXJEb3dubG9hZExpbWl0OiBEYXRhcG9pbnRzRXhjZWVkaW5nTGltaXRbXSA9IFtdO1xuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgYW55IG9mIERhdGFUb0V4cG9ydCBvYmplY3RzIHRpbWVWYWx1ZU1hcCBwcm9wZXJ0eSBpcyBub3QgdW5kZWZpbmVkIChzZXJpZXMgZGF0YSlcbiAgICogb3IgZGF0YVBvaW50VG9FeHBvcnQgaXMgbm90IHVuZGVmaW5lZCBhdCBhbGwgKG1lYXN1cmVtZW50IGRhdGEpLlxuICAgKi9cblxuICBoYXNGZXRjaGVkRGF0YUFueVZhbHVlc1RvRXhwb3J0ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGVyZSBpcyBubyBleHBvcnRhYmxlIGRhdGEgYmVjYXVzZSB0aGUgZGF0ZSByYW5nZSBvZiBhbGwgc2VsZWN0ZWQgZGF0YXBvaW50cyBleGNlZWRzIDEsMDAwLDAwMCByZWNvcmRzLlxuICAgKi9cbiAgaGFzTm9FeHBvcnRhYmxlRGF0YTogYm9vbGVhbjtcblxuICBoYXNQZXJtaXNzaW9uVG9SZWFkQW55TWVhc3VyZW1lbnRzID0gZmFsc2U7XG5cbiAgaXNQcmV2aWV3TG9hZGluZyA9IHRydWU7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZnVsbCBvciBjb21wYWN0IHR5cGUgb2YgZXhwb3J0IGlzIHNlbGVjdGVkLlxuICAgKiBGdWxsIHR5cGUgb2YgZXhwb3J0IGlzIGJhc2VkIG9uIG1lYXN1cmVtZW50IEFQSSBkYXRhLlxuICAgKiBDb21wYWN0IHR5cGUgb2YgZXhwb3J0IGlzIGJhc2VkIG9uIHNlcmllcyBBUEkgZGF0YS5cbiAgICovXG4gIGlzRnVsbFR5cGVPZkV4cG9ydCA9IGZhbHNlO1xuXG4gIHByZXZpZXdUYWJsZURhdGE6IEV4cG9ydERhdGFbXTtcblxuICBsaW1pdEV4Y2VlZGVkTWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb250YWlucyBwcm9jZXNzZWQgZGF0YSB0aGF0IGlzIHByZXBhcmVkIHRvIGJlIGV4cG9ydGVkIGlmIHNlcmllcyBkYXRhIHdhcyBmZXRjaGVkXG4gICAqIG9yIHNob3duIGluIHRoZSBwcmV2aWV3IHRhYmxlIGluIGNhc2Ugb2YgbWVhc3VyZW1lbnRzIGRhdGEuXG4gICAqL1xuICBwcml2YXRlIGRhdGFUb0V4cG9ydDogRGF0YVRvRXhwb3J0W107XG4gIC8qKlxuICAgKiBDb250YWlucyBhIGxpc3Qgb2YgZGF0YXBvaW50cyB0aGF0IHNlbGVjdGVkIGRhdGUgcmFuZ2UgZXhjZWVkcyBBUEkgbGltaXQgb2YgMV8wMDBfMDAwIHJlY29yZHMuXG4gICAqL1xuICBwcml2YXRlIGRhdGFQb2ludHNFeGNlZWRpbmdPbmVNaWxsaW9uTGltaXQ6IERhdGFwb2ludHNFeGNlZWRpbmdMaW1pdFtdO1xuICAvKipcbiAgICogUmVwcmVzZW50cyB0aGUgc3RhdGUgb2YgZmlsZSB0eXBlIHNlbGVjdGlvbiBjaGVja2JveGVzLlxuICAgKi9cbiAgcHJpdmF0ZSBmaWxlVHlwZVNlbGVjdGlvblN0YXRlOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfTtcbiAgLyoqXG4gICAqIEhvbGQgdGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIGFnZ3JlZ2F0aW9uIGZyb20gdGhlIGV4cG9ydCBjb25maWcuXG4gICAqIFZhbHVlIHdpbGwgYmUgbG9hZGVkIG9uIGNvbXBvbmVudCBkZXN0cm95LlxuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsQWdncmVnYXRpb246IEFnZ3JlZ2F0aW9uT3B0aW9uO1xuICAvKipcbiAgICogSG9sZCB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgZGF0ZUZyb20gZnJvbSB0aGUgZXhwb3J0IGNvbmZpZy5cbiAgICogVmFsdWUgd2lsbCBiZSBsb2FkZWQgb24gY29tcG9uZW50IGRlc3Ryb3kuXG4gICAqL1xuICBwcml2YXRlIGluaXRpYWxEYXRlRnJvbTogc3RyaW5nO1xuICAvKipcbiAgICogSG9sZCB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgZGF0ZVRvIGZyb20gdGhlIGV4cG9ydCBjb25maWcuXG4gICAqIFZhbHVlIHdpbGwgYmUgbG9hZGVkIG9uIGNvbXBvbmVudCBkZXN0cm95LlxuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsRGF0ZVRvOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBIb2xkIHRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSBkYXRhcG9pbnREZXRhaWxzIGZyb20gdGhlIGV4cG9ydCBjb25maWcuXG4gICAqIFNvbWUgbG9naWMgbWF5IGZpbHRlciBvdXQgZGF0YXBvaW50cyBpbiBkYXRhcG9pbnREZXRhaWxzIGFycmF5LCB0aGF0IGV4Y2VlZHMgMV8wMDBfMDAwIGxpbWl0IGZvciBtZWFzdXJlbWVudHMgQVBJLFxuICAgKiBidXQgZnVsbCBsaXN0IGlzIHN0aWxsIG5lZWRlZCB3aGVuIGNvbXBvbmVudCBpcyByZW9wZW5lZC5cbiAgICogVmFsdWUgd2lsbCBiZSBsb2FkZWQgb24gY29tcG9uZW50IGRlc3Ryb3kuXG4gICAqL1xuICBwcml2YXRlIGluaXRpYWxEYXRhcG9pbnREZXRhaWxzOiBEYXRhcG9pbnREZXRhaWxzW107XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgYWdncmVnYXRpb24gdmFsdWUgd2FzIGNoYW5nZWQgcHJvZ3JhbW1hdGljYWxseS5cbiAgICogSXQgcHJldmVudHMgYSBjYXNlIHdoZXJlIGZldGNoaW5nIG1heSBiZSB0cmlnZ2VyZWQgdHdpY2Ugd2hlbiBleHBvcnQgdHlwZSBpcyBjaGFuZ2VkLlxuICAgKiBCb3RoIG9wdGlvbnMgYWxvbmUgY2FuIHRyaWdnZXIgZmV0Y2hpbmcgZGF0YS5cbiAgICovXG4gIHByaXZhdGUgaXNBZ2dyZWdhdGlvbkNoYW5nZWRQcm9ncmFtbWF0aWNhbGx5ID0gZmFsc2U7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciBhbnkgb2YgdGhlIGV4cG9ydCBmaWxlIHR5cGVzIChDU1YsIEV4Y2VsKSBhcmUgY2hlY2tlZC5cbiAgICovXG4gIHByaXZhdGUgaXNBbnlPZkV4cG9ydEZpbGVUeXBlQ2hlY2tlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgZGF0ZUZyb21TdWJqZWN0ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuICBwcml2YXRlIGRhdGVUb1N1YmplY3QgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGR5bmFtaWNGaWxlc1R5cGVNZXRhZGF0YTogeyBba2V5OiBzdHJpbmddOiBGaWxlVHlwZU1ldGFkYXRhIH0gPSB7fTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGRhdGFwb2ludHNFeHBvcnRNb2RhbFNlcnZpY2U6IERhdGFQcm9jZXNzaW5nU2VydmljZSxcbiAgICBwcml2YXRlIGRhdGFwb2ludHNFeHBvcnRTZWxlY3RvclNlcnZpY2U6IERhdGFGZXRjaGluZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXRhcG9pbnRzRXhwb3J0U2VsZWN0b3JGaWxlRXhwb3J0ZXJTZXJ2aWNlOiBEYXRhcG9pbnRzRXhwb3J0U2VsZWN0b3JGaWxlRXhwb3J0ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIEBJbmplY3QoRklMRV9HRU5FUkFUT1JTKSBwcml2YXRlIGdlbmVyYXRvcnM6IEZpbGVHZW5lcmF0b3JbXVxuICApIHtcbiAgICB0aGlzLnNldEZpbGVzVHlwZSh0aGlzLmdlbmVyYXRvcnMpO1xuXG4gICAgdGhpcy5kYXRlRnJvbVN1YmplY3RcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSgzMDApLCB0YWtlVW50aWxEZXN0cm95ZWQoKSlcbiAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKHVwZGF0ZWREYXRlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVEYXRlQW5kRmV0Y2hEYXRhKCdkYXRlRnJvbScsIHVwZGF0ZWREYXRlKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5kYXRlVG9TdWJqZWN0XG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoMzAwKSwgdGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAuc3Vic2NyaWJlKGFzeW5jICh1cGRhdGVkRGF0ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlRGF0ZUFuZEZldGNoRGF0YSgnZGF0ZVRvJywgdXBkYXRlZERhdGUpO1xuICAgICAgfSk7XG4gIH1cblxuICBzZXRGaWxlc1R5cGUoZ2VuZXJhdG9yczogRmlsZUdlbmVyYXRvcltdKSB7XG4gICAgZ2VuZXJhdG9ycy5mb3JFYWNoKGcgPT4ge1xuICAgICAgdGhpcy5keW5hbWljRmlsZXNUeXBlTWV0YWRhdGFbZy5nZXRUeXBlKCldID0ge1xuICAgICAgICBsYWJlbDogZy5nZXRMYWJlbCgpLFxuICAgICAgICBpY29uOiBnLmdldEljb24oKSxcbiAgICAgICAgdGl0bGU6IGcuZ2V0VGl0bGUoKSxcbiAgICAgICAgZXh0ZW5zaW9uOiBnLmdldEZpbGVFeHRlbnNpb24oKSxcbiAgICAgICAgemlwTmFtZTogZy5nZXRaaXBOYW1lKCksXG4gICAgICAgIHR5cGU6IGcuZ2V0VHlwZSgpXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc291cmNlc1Blcm1pdHRlZFRvUmVhZDogc3RyaW5nW10gPVxuICAgICAgYXdhaXQgdGhpcy5kYXRhcG9pbnRzRXhwb3J0U2VsZWN0b3JTZXJ2aWNlLmdldFNvdXJjZXNXaXRoUGVybWlzc2lvbnNUb1JlYWQoXG4gICAgICAgIHRoaXMuZXhwb3J0Q29uZmlnLmRhdGFwb2ludERldGFpbHNcbiAgICAgICk7XG5cbiAgICBpZiAoc291cmNlc1Blcm1pdHRlZFRvUmVhZC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc291cmNlc1Blcm1pdHRlZFRvUmVhZC5sZW5ndGggIT09IHRoaXMuZXhwb3J0Q29uZmlnLmRhdGFwb2ludERldGFpbHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmV4cG9ydENvbmZpZy5kYXRhcG9pbnREZXRhaWxzID0gdGhpcy5leHBvcnRDb25maWcuZGF0YXBvaW50RGV0YWlscy5maWx0ZXIoZGF0YVBvaW50ID0+XG4gICAgICAgIHNvdXJjZXNQZXJtaXR0ZWRUb1JlYWQuaW5jbHVkZXMoU3RyaW5nKGRhdGFQb2ludC5zb3VyY2UpKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmhhc1Blcm1pc3Npb25Ub1JlYWRBbnlNZWFzdXJlbWVudHMgPSB0cnVlO1xuXG4gICAgdGhpcy5zdG9yZUluaXRpYWxDaGFuZ2VhYmxlQ29uZmlnKCk7XG5cbiAgICB0aGlzLmZpbGVUeXBlU2VsZWN0aW9uU3RhdGUgPSB0aGlzLmdldEluaXRpYWxTZWxlY3Rpb24odGhpcy5keW5hbWljRmlsZXNUeXBlTWV0YWRhdGEsIFswXSk7XG5cbiAgICB0aGlzLmZvcm1Hcm91cCA9IHRoaXMuY3JlYXRlRm9ybSgpO1xuICAgIHRoaXMuZGF0YVRvRXhwb3J0ID0gYXdhaXQgdGhpcy5kYXRhcG9pbnRzRXhwb3J0U2VsZWN0b3JTZXJ2aWNlLmZldGNoQW5kUHJlcGFyZURhdGFUb0V4cG9ydChcbiAgICAgIHRoaXMuZXhwb3J0Q29uZmlnLFxuICAgICAgdGhpcy5pc0Z1bGxUeXBlT2ZFeHBvcnRcbiAgICApO1xuXG4gICAgdGhpcy5oYW5kbGVEYXRlU2VsZWN0b3JDaGFuZ2VzKCk7XG4gICAgdGhpcy5kZXRlcm1pbmVTaG93aW5nUHJldmlld09yRW1wdHlTdGF0ZSgpO1xuICAgIHRoaXMuaGFuZGxlRXhwb3J0TW9kZUNoYW5nZXMoKTtcbiAgICB0aGlzLmhhbmRsZUZpbGVUeXBlU2VsZWN0aW9uQ2hhbmdlcygpO1xuICAgIHRoaXMuaGFuZGxlRm9ybVZhbGlkYXRpb25DaGFuZ2VzKCk7XG5cbiAgICB0aGlzLnVwZGF0ZUZpbGVUeXBlQ29udHJvbCgpO1xuXG4gICAgdGhpcy51cGRhdGVEaXNhYmxlZEFnZ3JlZ2F0aW9uT3B0aW9uc1N0YXRlKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5sb2FkSW5pdGlhbENoYW5nZWFibGVDb25maWcoKTtcbiAgfVxuXG4gIGFzeW5jIGV4cG9ydEFuZERvd25sb2FkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZpbGVFeHBvcnRzOiBGaWxlRXhwb3J0Q29uZmlnW10gPSBPYmplY3QuZW50cmllcyh0aGlzLmR5bmFtaWNGaWxlc1R5cGVNZXRhZGF0YSkubWFwKFxuICAgICAgKFtfLCB2YWx1ZV0pID0+ICh7XG4gICAgICAgIGZpbGVUeXBlOiB2YWx1ZS50eXBlIGFzIHN0cmluZyxcbiAgICAgICAgemlwTmFtZTogdmFsdWUuemlwTmFtZVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3Qgc2VsZWN0ZWRGaWxlRXhwb3J0cyA9IHRoaXMuZ2V0T25seVNlbGVjdGVkRmlsZUV4cG9ydHMoZmlsZUV4cG9ydHMpO1xuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBzZWxlY3RlZEZpbGVFeHBvcnRzLm1hcChhc3luYyAoeyBmaWxlVHlwZSwgemlwTmFtZSB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGJsb2IgPSBhd2FpdCB0aGlzLmV4cG9ydEZpbGUoZmlsZVR5cGUpO1xuICAgICAgICBhd2FpdCB0aGlzLmRvd25sb2FkRmlsZShibG9iLCBmaWxlVHlwZSwgemlwTmFtZSk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLmRhdGFwb2ludHNFeHBvcnRTZWxlY3RvckZpbGVFeHBvcnRlclNlcnZpY2UuY2xlYW51cENhY2hlZERhdGEoKTtcbiAgfVxuXG4gIGdldE9ubHlTZWxlY3RlZEZpbGVFeHBvcnRzKGZpbGVFeHBvcnRzOiBGaWxlRXhwb3J0Q29uZmlnW10pOiBGaWxlRXhwb3J0Q29uZmlnW10ge1xuICAgIHJldHVybiBmaWxlRXhwb3J0cy5maWx0ZXIoZiA9PiB0aGlzLmZpbGVUeXBlU2VsZWN0aW9uU3RhdGVbZi5maWxlVHlwZV0gPT09IHRydWUpO1xuICB9XG5cbiAgYXN5bmMgZXhwb3J0RmlsZShmaWxlVHlwZTogc3RyaW5nKTogUHJvbWlzZTxCbG9iIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmlzRnVsbFR5cGVPZkV4cG9ydFxuICAgICAgPyBhd2FpdCB0aGlzLmV4cG9ydE1lYXN1cmVtZW50RmlsZShmaWxlVHlwZSlcbiAgICAgIDogYXdhaXQgdGhpcy5leHBvcnRTZXJpZXNGaWxlKGZpbGVUeXBlKTtcbiAgfVxuXG4gIGFzeW5jIGRvd25sb2FkRmlsZShcbiAgICBibG9iOiBCbG9iIHwgbnVsbCxcbiAgICBmaWxlVHlwZTogc3RyaW5nLFxuICAgIG1lYXN1cmVtZW50c1ppcEZpbGVOYW1lOiBzdHJpbmdcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5kYXRhcG9pbnRzRXhjZWVkaW5nQnJvd3NlckRvd25sb2FkTGltaXQgPVxuICAgICAgdGhpcy5kYXRhcG9pbnRzRXhjZWVkaW5nQnJvd3NlckRvd25sb2FkTGltaXQuZmlsdGVyKFxuICAgICAgICBkYXRhcG9pbnQgPT4gIXRoaXMuZGF0YVBvaW50c0V4Y2VlZGluZ09uZU1pbGxpb25MaW1pdC5pbmNsdWRlcyhkYXRhcG9pbnQpXG4gICAgICApO1xuXG4gICAgY29uc3Qgc2hvdWxkU2hvd0FsZXJ0ID0gdGhpcy5kYXRhcG9pbnRzRXhjZWVkaW5nQnJvd3NlckRvd25sb2FkTGltaXQubGVuZ3RoID4gMDtcblxuICAgIC8vIEhhbmRsZXMgYSBjYXNlIHdoZXJlIGFsbCBmaWxlcyBhcmUgc2VudCBieSBlbWFpbC5cbiAgICBpZiAoIWJsb2IgJiYgc2hvdWxkU2hvd0FsZXJ0KSB7XG4gICAgICB0aGlzLmRhdGFwb2ludHNFeHBvcnRTZWxlY3RvclNlcnZpY2Uuc2hvd1NlbmRWaWFFbWFpbEluZm9BbGVydChcbiAgICAgICAgZmlsZVR5cGUsXG4gICAgICAgIHRoaXMuZGF0YXBvaW50c0V4Y2VlZGluZ0Jyb3dzZXJEb3dubG9hZExpbWl0XG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChibG9iKSB7XG4gICAgICAvLyBIYW5kbGVzIHRoZSBjYXNlIHdoZXJlIHNvbWUgb2YgdGhlIGZpbGVzIGFyZSBzZW50IGJ5IGVtYWlsLlxuICAgICAgaWYgKHNob3VsZFNob3dBbGVydCkge1xuICAgICAgICB0aGlzLmRhdGFwb2ludHNFeHBvcnRTZWxlY3RvclNlcnZpY2Uuc2hvd1NlbmRWaWFFbWFpbEluZm9BbGVydChcbiAgICAgICAgICBmaWxlVHlwZSxcbiAgICAgICAgICB0aGlzLmRhdGFwb2ludHNFeGNlZWRpbmdCcm93c2VyRG93bmxvYWRMaW1pdFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmlzRnVsbFR5cGVPZkV4cG9ydFxuICAgICAgICA/IHNhdmVBcyhibG9iLCBtZWFzdXJlbWVudHNaaXBGaWxlTmFtZSlcbiAgICAgICAgOiBzYXZlQXMoYmxvYiwgYmxvYltTRVJJRVNfREFUQV9NRVJHRURfRklMRV9OQU1FXSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydHMgYSBtZWFzdXJlbWVudCBmaWxlIG9mIHRoZSBzcGVjaWZpZWQgdHlwZS5cbiAgICpcbiAgICogTWVhc3VyZW1lbnRzIEFQSSBkb2VzIHByb3ZpZGUgYSB3YXkgdG8gZmV0Y2ggYSBwcmVwcm9jZXNzZWQgQ1NWL0V4Y2VsIGZpbGUuXG4gICAqXG4gICAqIEF0IHRoaXMgcG9pbnQgYSBiYWNrZWQgZmlsZSBuZWVkcyB0byBiZSBmZXRjaGVkLlxuICAgKiBNZWFzdXJlbWVudCBkYXRhIHVzZWQgZm9yIGEgcHJldmlldyBjb250YWlucyBqdXN0IDUgZmlyc3QgcmVjb3Jkc1xuICAgKiBhbmQgaXQncyBub3QgZmV0Y2hlZCB3aXRoIENTVi9FeGNlbCBoZWFkZXJzLlxuICAgKlxuICAgKiBAcGFyYW0gZmlsZVR5cGUgLSBUaGUgdHlwZSBvZiBmaWxlIHRvIGV4cG9ydC5cbiAgICogQHJldHVybnMgQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBCbG9iIHJlcHJlc2VudGluZyB0aGUgZXhwb3J0ZWQgZmlsZSBvciBudWxsIHdoZW4gbm8gZGF0YSB0byBleHBvcnQgb3IgaXQncyBzZW50IHZpYSBlbWFpbC5cbiAgICovXG4gIGFzeW5jIGV4cG9ydE1lYXN1cmVtZW50RmlsZShmaWxlVHlwZTogc3RyaW5nKTogUHJvbWlzZTxCbG9iPiB8IG51bGwge1xuICAgIGNvbnN0IHsgYWNjZXB0VHlwZSwgZXh0ZW5zaW9uIH0gPSB0aGlzLmRhdGFwb2ludHNFeHBvcnRNb2RhbFNlcnZpY2UuZmlsZVR5cGVzQ29uZmlnc1tmaWxlVHlwZV07XG5cbiAgICBjb25zdCB1cGRhdGVkRXhwb3J0Q29uZmlnOiBFeHBvcnRDb25maWcgPSB0aGlzLmV4Y2x1ZGVEYXRhcG9pbnRzVGhhdEV4Y2VlZHNBcGlMaW1pdChcbiAgICAgIHRoaXMuZXhwb3J0Q29uZmlnXG4gICAgKTtcblxuICAgIGNvbnN0IGRhdGFUb0V4cG9ydDogRGF0YVRvRXhwb3J0V2l0aEJhY2tlbmRDcmVhdGVkRmlsZVtdID1cbiAgICAgIGF3YWl0IHRoaXMuZGF0YXBvaW50c0V4cG9ydFNlbGVjdG9yU2VydmljZS5mZXRjaE1lYXN1cmVtZW50RGF0YUZpbGVzQW5kUGFpcldpdGhTb3VyY2VEZXRhaWxzKFxuICAgICAgICBhY2NlcHRUeXBlLFxuICAgICAgICB1cGRhdGVkRXhwb3J0Q29uZmlnXG4gICAgICApO1xuXG4gICAgY29uc3QgaXNBbGxVbmRlZmluZWQgPSBkYXRhVG9FeHBvcnQuZXZlcnkoZGF0YSA9PiBkYXRhID09PSB1bmRlZmluZWQpO1xuICAgIGlmIChpc0FsbFVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGF0YXBvaW50c0V4cG9ydFNlbGVjdG9yRmlsZUV4cG9ydGVyU2VydmljZS5nZXRNZWFzdXJlbWVudEV4cG9ydGVkRGF0YUJsb2IoXG4gICAgICBleHRlbnNpb24sXG4gICAgICBkYXRhVG9FeHBvcnRcbiAgICApO1xuICB9XG5cbiAgZXhjbHVkZURhdGFwb2ludHNUaGF0RXhjZWVkc0FwaUxpbWl0KGV4cG9ydENvbmZpZzogRXhwb3J0Q29uZmlnKTogRXhwb3J0Q29uZmlnIHtcbiAgICBjb25zdCBza2lwcGVkRGF0YXBvaW50c1NvdXJjZTogc3RyaW5nW10gPSB0aGlzLmRhdGFQb2ludHNFeGNlZWRpbmdPbmVNaWxsaW9uTGltaXQubWFwKFxuICAgICAgZGF0YXBvaW50ID0+IGRhdGFwb2ludC5kYXRhcG9pbnREZXRhaWwuc291cmNlLnRvU3RyaW5nKClcbiAgICApO1xuXG4gICAgY29uc3QgZmlsdGVyZWREYXRhcG9pbnRzOiBEYXRhcG9pbnREZXRhaWxzW10gPSBleHBvcnRDb25maWcuZGF0YXBvaW50RGV0YWlscy5maWx0ZXIoXG4gICAgICBkYXRhcG9pbnQgPT4gIXNraXBwZWREYXRhcG9pbnRzU291cmNlLmluY2x1ZGVzKFN0cmluZyhkYXRhcG9pbnQuc291cmNlKSlcbiAgICApO1xuXG4gICAgZXhwb3J0Q29uZmlnLmRhdGFwb2ludERldGFpbHMgPSBmaWx0ZXJlZERhdGFwb2ludHM7XG4gICAgcmV0dXJuIGV4cG9ydENvbmZpZztcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnRzIHRoZSBzZXJpZXMgZGF0YSB0byBhIGZpbGUgb2YgdGhlIHNwZWNpZmllZCB0eXBlLlxuICAgKlxuICAgKiBTZXJpZXMgQVBJIGRvZXMgbm90IHByb3ZpZGUgYSB3YXkgdG8gZmV0Y2ggYSBwcmVwcm9jZXNzZWQgQ1NWL0V4Y2VsIGZpbGUuXG4gICAqXG4gICAqIFNlcmllcyBkYXRhIHVzZWQgZm9yIGV4cG9ydGluZyBhIGZpbGUgaXMgYWxyZWFkeSBmZXRjaGVkIGZvciBhIHByZXZpZXdcbiAgICogYW5kIGNhbiBiZSByZXVzZWQgZm9yIGV4cG9ydGluZy5cbiAgICpcbiAgICogQHBhcmFtIGZpbGVUeXBlIC0gVGhlIHR5cGUgb2YgZmlsZSB0byBleHBvcnQgKGUuZy4sIENTViwgRXhjZWwpLlxuICAgKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIEJsb2IgcmVwcmVzZW50aW5nIHRoZSBleHBvcnRlZCBmaWxlLlxuICAgKi9cbiAgYXN5bmMgZXhwb3J0U2VyaWVzRmlsZShmaWxlVHlwZTogc3RyaW5nKTogUHJvbWlzZTxCbG9iPiB7XG4gICAgY29uc3QgbWVyZ2VkRXhwb3J0RGV0YWlsczogTWVyZ2VkRXhwb3J0RGV0YWlscyA9IHtcbiAgICAgIGFnZ3JlZ2F0aW9uOiB0aGlzLmV4cG9ydENvbmZpZy5hZ2dyZWdhdGlvbixcbiAgICAgIGRhdGVGcm9tOiB0aGlzLmV4cG9ydENvbmZpZy5kYXRlRnJvbSxcbiAgICAgIGRhdGVUbzogdGhpcy5leHBvcnRDb25maWcuZGF0ZVRvXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmRhdGFwb2ludHNFeHBvcnRTZWxlY3RvckZpbGVFeHBvcnRlclNlcnZpY2UuZ2V0U2VyaWVzRXhwb3J0ZWREYXRhQmxvYihcbiAgICAgIGZpbGVUeXBlLFxuICAgICAgdGhpcy5kYXRhVG9FeHBvcnQsXG4gICAgICBtZXJnZWRFeHBvcnREZXRhaWxzXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIG9uQWdncmVnYXRpb25DaGFuZ2UoYWdncmVnYXRpb246IEFnZ3JlZ2F0aW9uT3B0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5leHBvcnRDb25maWcuYWdncmVnYXRpb24gPSBhZ2dyZWdhdGlvbjtcbiAgICBpZiAoIXRoaXMuaXNBZ2dyZWdhdGlvbkNoYW5nZWRQcm9ncmFtbWF0aWNhbGx5KSB7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZUV4cG9ydENvbmZpZ0FuZEZldGNoRGF0YSgpO1xuICAgICAgdGhpcy51cGRhdGVEb3dubG9hZEJ1dHRvblN0YXRlKCk7XG4gICAgfVxuICB9XG5cbiAgb25EYXRlRnJvbUNoYW5nZSh1cGRhdGVkRGF0ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5kYXRlRnJvbVN1YmplY3QubmV4dCh1cGRhdGVkRGF0ZSk7XG4gIH1cblxuICBvbkRhdGVUb0NoYW5nZSh1cGRhdGVkRGF0ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5kYXRlVG9TdWJqZWN0Lm5leHQodXBkYXRlZERhdGUpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRGF0ZUFuZEZldGNoRGF0YShcbiAgICBkYXRlVHlwZTogJ2RhdGVGcm9tJyB8ICdkYXRlVG8nLFxuICAgIHVwZGF0ZWREYXRlOiBzdHJpbmdcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5leHBvcnRDb25maWdbZGF0ZVR5cGVdID0gdXBkYXRlZERhdGU7XG4gICAgYXdhaXQgdGhpcy51cGRhdGVFeHBvcnRDb25maWdBbmRGZXRjaERhdGEoKTtcblxuICAgIGlmICh0aGlzLmlzRnVsbFR5cGVPZkV4cG9ydCkge1xuICAgICAgYXdhaXQgdGhpcy5kZXRlcm1pbmVJZk1lYXN1cmVtZW50UmVzcG9uc2VXaWxsQmVQcm9jZXNzZWRCeUJhY2tlbmQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVEb3dubG9hZEJ1dHRvblN0YXRlKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgb25FeHBvcnRUeXBlQ2hhbmdlKGV4cG9ydFR5cGU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChleHBvcnRUeXBlID09PSBFWFBPUlRfTU9ERV9WQUxVRVMuZnVsbCkge1xuICAgICAgdGhpcy5pc0FnZ3JlZ2F0aW9uQ2hhbmdlZFByb2dyYW1tYXRpY2FsbHkgPSB0cnVlO1xuICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuYWdncmVnYXRpb24uc2V0VmFsdWUoQUdHUkVHQVRJT05fVkFMVUVTLm5vbmUpO1xuICAgICAgdGhpcy5pc0FnZ3JlZ2F0aW9uQ2hhbmdlZFByb2dyYW1tYXRpY2FsbHkgPSBmYWxzZTtcblxuICAgICAgdGhpcy5pc0Z1bGxUeXBlT2ZFeHBvcnQgPSB0cnVlO1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVFeHBvcnRDb25maWdBbmRGZXRjaERhdGEoKTtcbiAgICAgIGF3YWl0IHRoaXMuZGV0ZXJtaW5lSWZNZWFzdXJlbWVudFJlc3BvbnNlV2lsbEJlUHJvY2Vzc2VkQnlCYWNrZW5kKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5yZXNldEZ1bGxFeHBvcnRSZWxhdGVkUHJvcGVydGllcygpO1xuICAgIHRoaXMuaXNGdWxsVHlwZU9mRXhwb3J0ID0gZmFsc2U7XG4gICAgYXdhaXQgdGhpcy51cGRhdGVFeHBvcnRDb25maWdBbmRGZXRjaERhdGEoKTtcblxuICAgIHRoaXMudXBkYXRlRGlzYWJsZWRBZ2dyZWdhdGlvbk9wdGlvbnNTdGF0ZSgpO1xuXG4gICAgdGhpcy51cGRhdGVEb3dubG9hZEJ1dHRvblN0YXRlKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZURpc2FibGVkQWdncmVnYXRpb25PcHRpb25zU3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZEFnZ3JlZ2F0aW9uT3B0aW9ucyA9XG4gICAgICB0aGlzLmRhdGFwb2ludHNFeHBvcnRTZWxlY3RvckZpbGVFeHBvcnRlclNlcnZpY2UudXBkYXRlRGlzYWJsZWRTdGF0ZU9mQWdncmVnYXRpb25PcHRpb25FbnRyaWVzKFxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5kYXRlRnJvbS52YWx1ZSxcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuZGF0ZVRvLnZhbHVlLFxuICAgICAgICB0aGlzLmRpc2FibGVkQWdncmVnYXRpb25PcHRpb25zXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVGb3JtKCkge1xuICAgIHJldHVybiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKFxuICAgICAge1xuICAgICAgICBkYXRlRnJvbTogbmV3IEZvcm1Db250cm9sKHRoaXMuZXhwb3J0Q29uZmlnLmRhdGVGcm9tKSxcbiAgICAgICAgZGF0ZVRvOiBuZXcgRm9ybUNvbnRyb2wodGhpcy5leHBvcnRDb25maWcuZGF0ZVRvKSxcbiAgICAgICAgYWdncmVnYXRpb246IG5ldyBGb3JtQ29udHJvbChcbiAgICAgICAgICB0aGlzLmV4cG9ydENvbmZpZy5hZ2dyZWdhdGlvbiA/IHRoaXMuZXhwb3J0Q29uZmlnLmFnZ3JlZ2F0aW9uIDogQUdHUkVHQVRJT05fVkFMVUVTLm5vbmVcbiAgICAgICAgKSxcbiAgICAgICAgZXhwb3J0TW9kZTogbmV3IEZvcm1Db250cm9sKEVYUE9SVF9NT0RFX1ZBTFVFUy5jb21wYWN0KSxcbiAgICAgICAgZmlsZVR5cGVzOiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKFxuICAgICAgICAgIHRoaXMuZ2VuZXJhdG9ycy5yZWR1Y2UoKGEsIGMpID0+IHtcbiAgICAgICAgICAgIGFbYy5nZXRUeXBlKCldID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgICB9LCB7fSlcbiAgICAgICAgKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdmFsaWRhdG9yczogW2RhdGVSYW5nZVZhbGlkYXRvcl1cbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVwYXJlUHJldmlldygpOiB2b2lkIHtcbiAgICB0aGlzLmlzUHJldmlld0xvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMucHJldmlld1RhYmxlRGF0YSA9XG4gICAgICB0aGlzLmRhdGFwb2ludHNFeHBvcnRNb2RhbFNlcnZpY2UudHJhbnNmb3JtVG9FeHBvcnRGaWxlU3RydWN0dXJlRm9yUHJldmlldyh0aGlzLmRhdGFUb0V4cG9ydCk7XG4gICAgdGhpcy5pc1ByZXZpZXdMb2FkaW5nID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZURhdGVTZWxlY3RvckNoYW5nZXMoKTogdm9pZCB7XG4gICAgY29uc3QgYWdncmVnYXRpb25Db250cm9sID0gdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuYWdncmVnYXRpb247XG4gICAgY29uc3QgZGF0ZUZyb21TZWxlY3RvciA9IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmRhdGVGcm9tO1xuICAgIGNvbnN0IGRhdGVUb1NlbGVjdG9yID0gdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuZGF0ZVRvO1xuXG4gICAgY29uc3QgdXBkYXRlQWdncmVnYXRpb25PcHRpb25zID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmlzRnVsbFR5cGVPZkV4cG9ydCkge1xuICAgICAgICB0aGlzLnVwZGF0ZURpc2FibGVkQWdncmVnYXRpb25PcHRpb25zU3RhdGUoKTtcblxuICAgICAgICBjb25zdCBmaXJzdEF2YWlsYWJsZUFnZ3JlZ2F0aW9uVmFsdWU6IEFnZ3JlZ2F0aW9uT3B0aW9uID1cbiAgICAgICAgICB0aGlzLmRhdGFwb2ludHNFeHBvcnRTZWxlY3RvckZpbGVFeHBvcnRlclNlcnZpY2Uuc2V0VG9GaXJzdEF2YWlsYWJsZUFnZ3JlZ2F0aW9uT3B0aW9uSWZDdXJyZW50SXNEaXNhYmxlZChcbiAgICAgICAgICAgIGFnZ3JlZ2F0aW9uQ29udHJvbC52YWx1ZSxcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRBZ2dyZWdhdGlvbk9wdGlvbnNcbiAgICAgICAgICApO1xuXG4gICAgICAgIGlmIChmaXJzdEF2YWlsYWJsZUFnZ3JlZ2F0aW9uVmFsdWUpIHtcbiAgICAgICAgICBhZ2dyZWdhdGlvbkNvbnRyb2wuc2V0VmFsdWUoZmlyc3RBdmFpbGFibGVBZ2dyZWdhdGlvblZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBtZXJnZShkYXRlRnJvbVNlbGVjdG9yLnZhbHVlQ2hhbmdlcywgZGF0ZVRvU2VsZWN0b3IudmFsdWVDaGFuZ2VzKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSh1cGRhdGVBZ2dyZWdhdGlvbk9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVFeHBvcnRNb2RlQ2hhbmdlcygpOiB2b2lkIHtcbiAgICBjb25zdCBhZ2dyZWdhdGlvbkNvbnRyb2wgPSB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5hZ2dyZWdhdGlvbjtcblxuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmV4cG9ydE1vZGUudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKGV4cG9ydE1vZGVWYWx1ZSA9PiB7XG4gICAgICAgIGlmIChleHBvcnRNb2RlVmFsdWUudG9TdHJpbmcoKSA9PT0gRVhQT1JUX01PREVfVkFMVUVTLmZ1bGwpIHtcbiAgICAgICAgICBhZ2dyZWdhdGlvbkNvbnRyb2wuZGlzYWJsZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFnZ3JlZ2F0aW9uQ29udHJvbC5lbmFibGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUZpbGVUeXBlU2VsZWN0aW9uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5maWxlVHlwZXMudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKGZpbGVUeXBlc1NlbGVjdGlvblN0YXRlID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVGaWxlVHlwZVNlbGVjdGlvblN0YXRlKGZpbGVUeXBlc1NlbGVjdGlvblN0YXRlKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGaWxlVHlwZVNlbGVjdGlvblN0YXRlKGNoZWNrYm94ZXNTdGF0ZTogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0pOiB2b2lkIHtcbiAgICB0aGlzLmlzQW55T2ZFeHBvcnRGaWxlVHlwZUNoZWNrZWQgPSBPYmplY3QudmFsdWVzKGNoZWNrYm94ZXNTdGF0ZSkuc29tZShcbiAgICAgIHZhbHVlID0+IHZhbHVlID09PSB0cnVlXG4gICAgKTtcbiAgICB0aGlzLmZpbGVUeXBlU2VsZWN0aW9uU3RhdGUgPSBjaGVja2JveGVzU3RhdGU7XG4gICAgdGhpcy51cGRhdGVEb3dubG9hZEJ1dHRvblN0YXRlKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUZvcm1WYWxpZGF0aW9uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1Hcm91cC5zdGF0dXNDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVEb3dubG9hZEJ1dHRvblN0YXRlKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUZpbGVUeXBlQ29udHJvbCgpOiB2b2lkIHtcbiAgICBjb25zdCBmaWxlVHlwZXNDb250cm9sID0gdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuZmlsZVR5cGVzO1xuICAgIGlmIChmaWxlVHlwZXNDb250cm9sKSB7XG4gICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBmaWxlVHlwZXNDb250cm9sLnZhbHVlIHx8IHt9O1xuICAgICAgY29uc3QgdXBkYXRlZFZhbHVlID0geyAuLi5jdXJyZW50VmFsdWUgfTtcblxuICAgICAgT2JqZWN0LmVudHJpZXModGhpcy5maWxlVHlwZVNlbGVjdGlvblN0YXRlKS5mb3JFYWNoKChbZmlsZVR5cGUsIGlzU2VsZWN0ZWRdKSA9PiB7XG4gICAgICAgIGlmIChmaWxlVHlwZSBpbiBjdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICB1cGRhdGVkVmFsdWVbZmlsZVR5cGVdID0gaXNTZWxlY3RlZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGZpbGVUeXBlc0NvbnRyb2wucGF0Y2hWYWx1ZSh1cGRhdGVkVmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGV0ZXJtaW5lU2hvd2luZ1ByZXZpZXdPckVtcHR5U3RhdGUoKTogdm9pZCB7XG4gICAgY29uc3QgaGFzRGF0YVRvU2hvdyA9IHRoaXMuZGF0YVRvRXhwb3J0LnNvbWUoZGF0YVRvRXhwb3J0SXRlbSA9PlxuICAgICAgdGhpcy5pc0Z1bGxUeXBlT2ZFeHBvcnRcbiAgICAgICAgPyAhIWRhdGFUb0V4cG9ydEl0ZW1cbiAgICAgICAgOiBkYXRhVG9FeHBvcnRJdGVtLnRpbWVWYWx1ZU1hcCAmJiBPYmplY3Qua2V5cyhkYXRhVG9FeHBvcnRJdGVtLnRpbWVWYWx1ZU1hcCkubGVuZ3RoID4gMFxuICAgICk7XG5cbiAgICB0aGlzLmhhc0ZldGNoZWREYXRhQW55VmFsdWVzVG9FeHBvcnQgPSBoYXNEYXRhVG9TaG93O1xuXG4gICAgaWYgKGhhc0RhdGFUb1Nob3cpIHtcbiAgICAgIHRoaXMucHJlcGFyZVByZXZpZXcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc1ByZXZpZXdMb2FkaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZXRlcm1pbmVJZk1lYXN1cmVtZW50UmVzcG9uc2VXaWxsQmVQcm9jZXNzZWRCeUJhY2tlbmQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5pc1ByZXZpZXdMb2FkaW5nID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YXBvaW50c0V4Y2VlZGluZ0Jyb3dzZXJEb3dubG9hZExpbWl0ID1cbiAgICAgIGF3YWl0IHRoaXMuZGF0YXBvaW50c0V4cG9ydFNlbGVjdG9yU2VydmljZS5nZXREYXRhcG9pbnRzRXhjZWVkaW5nTGltaXQodGhpcy5leHBvcnRDb25maWcpO1xuXG4gICAgY29uc3QgeyBicm93c2VyRG93bmxvYWRhYmxlQ291bnQsIGVtYWlsRGVsaXZlcmFibGVDb3VudCwgbm9uUmV0cmlldmFibGVDb3VudCB9ID1cbiAgICAgIHRoaXMuY2FsY3VsYXRlRGF0YXBvaW50Q291bnRzKCk7XG5cbiAgICB0aGlzLmhhc05vRXhwb3J0YWJsZURhdGEgPVxuICAgICAgYnJvd3NlckRvd25sb2FkYWJsZUNvdW50ID09PSAwICYmIGVtYWlsRGVsaXZlcmFibGVDb3VudCA9PT0gMCAmJiBub25SZXRyaWV2YWJsZUNvdW50ID4gMDtcblxuICAgIGlmICh0aGlzLmRhdGFwb2ludHNFeGNlZWRpbmdCcm93c2VyRG93bmxvYWRMaW1pdC5sZW5ndGggPiAwICYmICF0aGlzLmhhc05vRXhwb3J0YWJsZURhdGEpIHtcbiAgICAgIHRoaXMubGltaXRFeGNlZWRlZE1lc3NhZ2UgPSB0aGlzLmRhdGFwb2ludHNFeHBvcnRTZWxlY3RvclNlcnZpY2UuZ2V0TGltaXRFeGNlZWRlZE1lc3NhZ2UoXG4gICAgICAgIHRoaXMuaGFzTm9FeHBvcnRhYmxlRGF0YSxcbiAgICAgICAgZW1haWxEZWxpdmVyYWJsZUNvdW50LFxuICAgICAgICBicm93c2VyRG93bmxvYWRhYmxlQ291bnQsXG4gICAgICAgIG5vblJldHJpZXZhYmxlQ291bnQsXG4gICAgICAgIHRoaXMuZXhwb3J0Q29uZmlnLmRhdGFwb2ludERldGFpbHMubGVuZ3RoXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRhdGFwb2ludHNFeGNlZWRpbmdCcm93c2VyRG93bmxvYWRMaW1pdC5sZW5ndGggPiAwICYmIHRoaXMuaGFzTm9FeHBvcnRhYmxlRGF0YSkge1xuICAgICAgdGhpcy5saW1pdEV4Y2VlZGVkTWVzc2FnZSA9IHRoaXMuZGF0YXBvaW50c0V4cG9ydFNlbGVjdG9yU2VydmljZS5nZXRMaW1pdEV4Y2VlZGVkTWVzc2FnZShcbiAgICAgICAgdGhpcy5oYXNOb0V4cG9ydGFibGVEYXRhXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlRG93bmxvYWRCdXR0b25TdGF0ZSgpO1xuXG4gICAgdGhpcy5pc1ByZXZpZXdMb2FkaW5nID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGNhbGN1bGF0ZURhdGFwb2ludENvdW50cygpOiBEYXRhcG9pbnRDb3VudHMge1xuICAgIGNvbnN0IFJFQ09SRF9BUElfTElNSVQgPSAxXzAwMF8wMDA7XG5cbiAgICB0aGlzLmRhdGFQb2ludHNFeGNlZWRpbmdPbmVNaWxsaW9uTGltaXQgPSB0aGlzLmRhdGFwb2ludHNFeGNlZWRpbmdCcm93c2VyRG93bmxvYWRMaW1pdC5maWx0ZXIoXG4gICAgICBkYXRhcG9pbnRzRXhjZWVkaW5nQnJvd3NlckRvd25sb2FkTGltaXQgPT5cbiAgICAgICAgZGF0YXBvaW50c0V4Y2VlZGluZ0Jyb3dzZXJEb3dubG9hZExpbWl0LnRvdGFsRWxlbWVudHMgPiBSRUNPUkRfQVBJX0xJTUlUXG4gICAgKTtcblxuICAgIGNvbnN0IG5vblJldHJpZXZhYmxlQ291bnQgPSB0aGlzLmRhdGFQb2ludHNFeGNlZWRpbmdPbmVNaWxsaW9uTGltaXQubGVuZ3RoO1xuXG4gICAgY29uc3QgZW1haWxEZWxpdmVyYWJsZUNvdW50ID1cbiAgICAgIHRoaXMuZGF0YXBvaW50c0V4Y2VlZGluZ0Jyb3dzZXJEb3dubG9hZExpbWl0Lmxlbmd0aCAtIG5vblJldHJpZXZhYmxlQ291bnQ7XG5cbiAgICBjb25zdCBicm93c2VyRG93bmxvYWRhYmxlQ291bnQgPVxuICAgICAgdGhpcy5leHBvcnRDb25maWcuZGF0YXBvaW50RGV0YWlscy5sZW5ndGggLSBlbWFpbERlbGl2ZXJhYmxlQ291bnQgLSBub25SZXRyaWV2YWJsZUNvdW50O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGJyb3dzZXJEb3dubG9hZGFibGVDb3VudCxcbiAgICAgIGVtYWlsRGVsaXZlcmFibGVDb3VudCxcbiAgICAgIG5vblJldHJpZXZhYmxlQ291bnRcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdG9yZUluaXRpYWxDaGFuZ2VhYmxlQ29uZmlnKCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdGlhbERhdGVGcm9tID0gdGhpcy5leHBvcnRDb25maWcuZGF0ZUZyb207XG4gICAgdGhpcy5pbml0aWFsRGF0ZVRvID0gdGhpcy5leHBvcnRDb25maWcuZGF0ZVRvO1xuICAgIHRoaXMuaW5pdGlhbERhdGFwb2ludERldGFpbHMgPSB0aGlzLmV4cG9ydENvbmZpZy5kYXRhcG9pbnREZXRhaWxzO1xuICAgIGlmICghdGhpcy5pc0Z1bGxUeXBlT2ZFeHBvcnQpIHtcbiAgICAgIHRoaXMuaW5pdGlhbEFnZ3JlZ2F0aW9uID0gdGhpcy5leHBvcnRDb25maWcuYWdncmVnYXRpb247XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsb2FkSW5pdGlhbENoYW5nZWFibGVDb25maWcoKTogdm9pZCB7XG4gICAgdGhpcy5leHBvcnRDb25maWcuZGF0ZUZyb20gPSB0aGlzLmluaXRpYWxEYXRlRnJvbTtcbiAgICB0aGlzLmV4cG9ydENvbmZpZy5kYXRlVG8gPSB0aGlzLmluaXRpYWxEYXRlVG87XG4gICAgdGhpcy5leHBvcnRDb25maWcuZGF0YXBvaW50RGV0YWlscyA9IHRoaXMuaW5pdGlhbERhdGFwb2ludERldGFpbHM7XG4gICAgaWYgKCF0aGlzLmlzRnVsbFR5cGVPZkV4cG9ydCkge1xuICAgICAgdGhpcy5leHBvcnRDb25maWcuYWdncmVnYXRpb24gPSB0aGlzLmluaXRpYWxBZ2dyZWdhdGlvbjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZUV4cG9ydENvbmZpZ0FuZEZldGNoRGF0YSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5mb3JtR3JvdXAuaW52YWxpZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNQcmV2aWV3TG9hZGluZyA9IHRydWU7XG5cbiAgICB0aGlzLm9uRG93bmxvYWRCdXR0b25TdGF0ZUNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgICB0aGlzLmRhdGFUb0V4cG9ydCA9IGF3YWl0IHRoaXMuZGF0YXBvaW50c0V4cG9ydFNlbGVjdG9yU2VydmljZS5mZXRjaEFuZFByZXBhcmVEYXRhVG9FeHBvcnQoXG4gICAgICB0aGlzLmV4cG9ydENvbmZpZyxcbiAgICAgIHRoaXMuaXNGdWxsVHlwZU9mRXhwb3J0XG4gICAgKTtcblxuICAgIHRoaXMuZGV0ZXJtaW5lU2hvd2luZ1ByZXZpZXdPckVtcHR5U3RhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRG93bmxvYWRCdXR0b25TdGF0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBjYW5FbmFibGVEb3dubG9hZEJ1dHRvbiA9XG4gICAgICB0aGlzLmhhc0ZldGNoZWREYXRhQW55VmFsdWVzVG9FeHBvcnQgJiZcbiAgICAgICF0aGlzLmZvcm1Hcm91cC5pbnZhbGlkICYmXG4gICAgICB0aGlzLmlzQW55T2ZFeHBvcnRGaWxlVHlwZUNoZWNrZWQgJiZcbiAgICAgICF0aGlzLmhhc05vRXhwb3J0YWJsZURhdGE7XG5cbiAgICB0aGlzLm9uRG93bmxvYWRCdXR0b25TdGF0ZUNoYW5nZS5lbWl0KGNhbkVuYWJsZURvd25sb2FkQnV0dG9uKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRGdWxsRXhwb3J0UmVsYXRlZFByb3BlcnRpZXMoKTogdm9pZCB7XG4gICAgdGhpcy5oYXNOb0V4cG9ydGFibGVEYXRhID0gZmFsc2U7XG4gICAgdGhpcy5kYXRhcG9pbnRzRXhjZWVkaW5nQnJvd3NlckRvd25sb2FkTGltaXQgPSBbXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW5pdGlhbFNlbGVjdGlvbihcbiAgICBmaWxlVHlwZTogeyBba2V5OiBzdHJpbmddOiBGaWxlVHlwZU1ldGFkYXRhIH0sXG4gICAgc2VsZWN0QnlEZWZhdWx0OiBudW1iZXJbXVxuICApIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZmlsZVR5cGUpO1xuICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIGNvbnN0IGluaXRpYWxTZWxlY3Rpb24gPSBrZXlzLnJlZHVjZTx7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfT4oKGFjYywga2V5KSA9PiB7XG4gICAgICBhY2Nba2V5XSA9IGZhbHNlO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG5cbiAgICBzZWxlY3RCeURlZmF1bHQuZm9yRWFjaChpbmRleCA9PiB7XG4gICAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IGtleXMubGVuZ3RoKSB7XG4gICAgICAgIGluaXRpYWxTZWxlY3Rpb25ba2V5c1tpbmRleF1dID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBpbml0aWFsU2VsZWN0aW9uO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicC1iLTE2XCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNQZXJtaXNzaW9uVG9SZWFkQW55TWVhc3VyZW1lbnRzOyBlbHNlIGhhc05vUm9sZVRvUmVhZEFueU1lYXN1cmVtZW50c1wiPlxuICAgIDxkaXYgY2xhc3M9XCJwLTE2IHRleHQtY2VudGVyIHNlcGFyYXRvci1ib3R0b20gc3RpY2t5LXRvcCBiZy1jb21wb25lbnRcIj5cbiAgICAgIDxwIGNsYXNzPVwidGV4dC1tZWRpdW0gdGV4dC0xNlwiPlxuICAgICAgICB7eyAnQ29uZmlndXJlIGV4cG9ydCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvcD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInAtdC0yNCBwLXItMTYgcC1sLTE2IGdhcC04IHAtYi0xNiBmbGV4LXdyYXBcIlxuICAgICAgW25nQ2xhc3NdPVwieyAnc2VwYXJhdG9yLWJvdHRvbSc6IGlzRnVsbFR5cGVPZkV4cG9ydCB9XCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxuICAgICAgICAgIDxjOHktZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItdGltZS1yYW5nZVxuICAgICAgICAgICAgKm5nSWY9XCJ0aGlzLmhhc1Blcm1pc3Npb25Ub1JlYWRBbnlNZWFzdXJlbWVudHNcIlxuICAgICAgICAgICAgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIlxuICAgICAgICAgICAgKG9uRGF0ZUZyb21DaGFuZ2UpPVwib25EYXRlRnJvbUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChvbkRhdGVUb0NoYW5nZSk9XCJvbkRhdGVUb0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICA+PC9jOHktZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItdGltZS1yYW5nZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxuICAgICAgICAgIDxjOHktZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItZGF0YS1zY29wZVxuICAgICAgICAgICAgKm5nSWY9XCJ0aGlzLmhhc1Blcm1pc3Npb25Ub1JlYWRBbnlNZWFzdXJlbWVudHNcIlxuICAgICAgICAgICAgW2Rpc2FibGVkQWdncmVnYXRpb25PcHRpb25zXT1cImRpc2FibGVkQWdncmVnYXRpb25PcHRpb25zXCJcbiAgICAgICAgICAgIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCJcbiAgICAgICAgICAgIChvbkFnZ3JlZ2F0aW9uQ2hhbmdlKT1cIm9uQWdncmVnYXRpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAob25FeHBvcnRUeXBlQ2hhbmdlKT1cIm9uRXhwb3J0VHlwZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICA+PC9jOHktZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItZGF0YS1zY29wZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxuICAgICAgICAgIDxjOHktZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItZmlsZS10eXBlc1xuICAgICAgICAgICAgKm5nSWY9XCJ0aGlzLmhhc1Blcm1pc3Npb25Ub1JlYWRBbnlNZWFzdXJlbWVudHNcIlxuICAgICAgICAgICAgW2R5bmFtaWNGaWxlc1R5cGVNZXRhZGF0YV09XCJkeW5hbWljRmlsZXNUeXBlTWV0YWRhdGFcIlxuICAgICAgICAgICAgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIlxuICAgICAgICAgID48L2M4eS1kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1maWxlLXR5cGVzPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0lmPVwiIWlzRnVsbFR5cGVPZkV4cG9ydCAmJiAhaGFzRmV0Y2hlZERhdGFBbnlWYWx1ZXNUb0V4cG9ydCAmJiAhaXNQcmV2aWV3TG9hZGluZ1wiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cInAtdC0yNCBwLXItMTYgcC1sLTE2IHAtYi0xNiBzZXBhcmF0b3ItYm90dG9tIGQtZmxleFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJhbGVydCBhbGVydC13YXJuaW5nIGNlbnRlci1ibG9ja1wiXG4gICAgICAgICAgcm9sZT1cImFsZXJ0XCJcbiAgICAgICAgICBkYXRhLWN5PVwiZmlsZS1leHBvcnRlci0tbm8tZGF0YS1hdmFpbGFibGVcIlxuICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICA+XG4gICAgICAgICAgTm8gZGF0YSBhdmFpbGFibGUuXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGFwb2ludHNFeGNlZWRpbmdCcm93c2VyRG93bmxvYWRMaW1pdC5sZW5ndGggPiAwXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicC10LTI0IHAtci0xNiBwLWwtMTYgcC1iLTE2IHNlcGFyYXRvci1ib3R0b20gZC1mbGV4XCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBbY2xhc3NdPVwiXG4gICAgICAgICAgICBoYXNOb0V4cG9ydGFibGVEYXRhXG4gICAgICAgICAgICAgID8gJ2FsZXJ0IGFsZXJ0LXdhcm5pbmcgY2VudGVyLWJsb2NrJ1xuICAgICAgICAgICAgICA6ICdhbGVydCBhbGVydC1pbmZvIGNlbnRlci1ibG9jaydcbiAgICAgICAgICBcIlxuICAgICAgICAgIHJvbGU9XCJhbGVydFwiXG4gICAgICAgICAgW2lubmVySFRNTF09XCJsaW1pdEV4Y2VlZGVkTWVzc2FnZVwiXG4gICAgICAgID48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0Z1bGxUeXBlT2ZFeHBvcnRcIj5cbiAgICAgIDxjOHktZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItcHJldmlld1xuICAgICAgICAqbmdJZj1cInRoaXMuaGFzUGVybWlzc2lvblRvUmVhZEFueU1lYXN1cmVtZW50c1wiXG4gICAgICAgIFtoYXNGZXRjaGVkRGF0YUFueVZhbHVlc1RvRXhwb3J0XT1cImhhc0ZldGNoZWREYXRhQW55VmFsdWVzVG9FeHBvcnRcIlxuICAgICAgICBbaXNQcmV2aWV3TG9hZGluZ109XCJpc1ByZXZpZXdMb2FkaW5nXCJcbiAgICAgICAgW3ByZXZpZXdUYWJsZURhdGFdPVwicHJldmlld1RhYmxlRGF0YVwiXG4gICAgICA+PC9jOHktZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItcHJldmlldz5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy10ZW1wbGF0ZSAjaGFzTm9Sb2xlVG9SZWFkQW55TWVhc3VyZW1lbnRzPlxuICAgIDxkaXYgY2xhc3M9XCJwLXQtMjQgcC1yLTE2IHAtbC0xNiBwLWItMTYgZC1mbGV4XCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mbyBjZW50ZXItYmxvY2tcIlxuICAgICAgICByb2xlPVwiYWxlcnRcIlxuICAgICAgICB0cmFuc2xhdGVcbiAgICAgID5cbiAgICAgICAgPHA+VG8gZXhwb3J0IGRhdGEsIHlvdSBtdXN0IG1lZXQgYXQgbGVhc3Qgb25lIG9mIHRoZXNlIGNyaXRlcmlhOjwvcD5cbiAgICAgICAgPHVsPlxuICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgIEhhdmVcbiAgICAgICAgICAgIDxiPlJFQUQgcGVybWlzc2lvbiBmb3IgXCJNZWFzdXJlbWVudHNcIiBwZXJtaXNzaW9uIHR5cGU8L2I+XG4gICAgICAgICAgICAoZWl0aGVyIGFzIGEgZ2xvYmFsIHJvbGUgb3IgZm9yIHRoZSBzcGVjaWZpYyBzb3VyY2UpXG4gICAgICAgICAgPC9saT5cbiAgICAgICAgICA8bGk+XG4gICAgICAgICAgICBCZSB0aGVcbiAgICAgICAgICAgIDxiPm93bmVyIG9mIHRoZSBzb3VyY2U8L2I+XG4gICAgICAgICAgICB5b3Ugd2FudCB0byBleHBvcnQgZGF0YSBmcm9tXG4gICAgICAgICAgPC9saT5cbiAgICAgICAgPC91bD5cbiAgICAgICAgPHA+RG9uJ3QgbWVldCB0aGVzZSByZXF1aXJlbWVudHM/IENvbnRhY3QgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBmb3IgYXNzaXN0YW5jZS48L3A+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuIl19
|
|
490
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItZmlsZS1leHBvcnRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1tb2RhbC9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1maWxlLWV4cG9ydGVyL2RhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yLWZpbGUtZXhwb3J0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3IvZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItbW9kYWwvZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItZmlsZS1leHBvcnRlci9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1maWxlLWV4cG9ydGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sY0FBYyxFQUNkLEtBQUssRUFHTCxNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUVMLFdBQVcsRUFDWCxXQUFXLEVBQ1gsbUJBQW1CLEVBR3BCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUNMLGtCQUFrQixFQUdsQixVQUFVLEVBQ1YsZ0JBQWdCLEVBQ2pCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxNQUFNLE1BQU0sWUFBWSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0QsT0FBTyxF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RSxDQUFDO1lBQzVCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQ2hDLDZDQUE2QyxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQ3BFO2dCQUNFLEdBQUcsZUFBZTtnQkFDbEIsa0JBQWtCLEVBQ2hCLDZDQUE2QyxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0I7YUFDL0UsQ0FDRixDQUFDO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUNoQyw2Q0FBNkMsQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUNwRTtnQkFDRSxHQUFHLGVBQWU7Z0JBQ2xCLGtCQUFrQixFQUNoQiw2Q0FBNkMsQ0FBQyxhQUFhLENBQUMsbUJBQW1CO2dCQUNqRixtQkFBbUIsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJO2FBQzlFLENBQ0YsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDOzhHQWxwQlUsNkNBQTZDLGdMQW9HOUMsZUFBZTtrR0FwR2QsNkNBQTZDLDJOQ2xHMUQsNnZIQW1HQSwyQ0RWSSxVQUFVLDhxQkFDViwwQ0FBMEMsbU1BQzFDLDBDQUEwQyx5SUFDMUMsd0NBQXdDLHdLQUN4QywwQ0FBMEMsNkpBRTFDLG1CQUFtQjs7MkZBR1YsNkNBQTZDO2tCQWR6RCxTQUFTOytCQUNFLDhDQUE4QyxjQUU1QyxJQUFJLFdBQ1A7d0JBQ1AsVUFBVTt3QkFDViwwQ0FBMEM7d0JBQzFDLDBDQUEwQzt3QkFDMUMsd0NBQXdDO3dCQUN4QywwQ0FBMEM7d0JBQzFDLFlBQVk7d0JBQ1osbUJBQW1CO3FCQUNwQjs7MEJBc0dFLE1BQU07MkJBQUMsZUFBZTt3RUFuR2hCLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0ksMkJBQTJCO3NCQUFwQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgS2V5VmFsdWVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIEluamVjdGlvblRva2VuLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgRm9ybUJ1aWxkZXIsXG4gIEZvcm1Db250cm9sLFxuICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3JGblxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBBR0dSRUdBVElPTl9WQUxVRVMsXG4gIEFnZ3JlZ2F0aW9uT3B0aW9uLFxuICBBZ2dyZWdhdGlvbk9wdGlvblN0YXR1cyxcbiAgQ29yZU1vZHVsZSxcbiAgR2FpbnNpZ2h0U2VydmljZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCBzYXZlQXMgZnJvbSAnZmlsZS1zYXZlcic7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIG1lcmdlLCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIERhdGFwb2ludENvdW50cyxcbiAgRGF0YXBvaW50RGV0YWlscyxcbiAgRGF0YXBvaW50c0V4Y2VlZGluZ0xpbWl0LFxuICBEYXRhVG9FeHBvcnQsXG4gIERhdGFUb0V4cG9ydFdpdGhCYWNrZW5kQ3JlYXRlZEZpbGUsXG4gIEVYUE9SVF9NT0RFX1ZBTFVFUyxcbiAgRXhwb3J0Q29uZmlnLFxuICBFeHBvcnREYXRhLFxuICBGaWxlRXhwb3J0Q29uZmlnLFxuICBGaWxlR2VuZXJhdG9yLFxuICBGaWxlVHlwZU1ldGFkYXRhLFxuICBNZXJnZWRFeHBvcnREZXRhaWxzLFxuICBQUk9EVUNUX0VYUEVSSUVOQ0VfREFUQVBPSU5UU19FWFBPUlRfU0VMRUNUT1IsXG4gIFNFUklFU19EQVRBX01FUkdFRF9GSUxFX05BTUVcbn0gZnJvbSAnLi4vLi4vZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3IubW9kZWwnO1xuaW1wb3J0IHsgRGF0YUZldGNoaW5nU2VydmljZSB9IGZyb20gJy4vZGF0YS1mZXRjaGluZy5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGFQcm9jZXNzaW5nU2VydmljZSB9IGZyb20gJy4vZGF0YS1wcm9jZXNzaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0YXBvaW50c0V4cG9ydFNlbGVjdG9yRmlsZUV4cG9ydGVyU2VydmljZSB9IGZyb20gJy4vZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItZmlsZS1leHBvcnRlci5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGFQb2ludHNFeHBvcnRTZWxlY3RvclByZXZpZXdDb21wb25lbnQgfSBmcm9tICcuL2RhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yLXByZXZpZXcvZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItcHJldmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0YVBvaW50c0V4cG9ydFNlbGVjdG9yRGF0YVNjb3BlQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRhcG9pbnRzLWV4cG9ydHMtc2VsZWN0b3ItZGF0YS1zY29wZS9kYXRhcG9pbnRzLWV4cG9ydHMtc2VsZWN0b3ItZGF0YS1zY29wZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0YVBvaW50c0V4cG9ydFNlbGVjdG9yRmlsZVR5cGVzQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRhcG9pbnRzLWV4cG9ydHMtc2VsZWN0b3ItZmlsZS10eXBlcy9kYXRhcG9pbnRzLWV4cG9ydHMtc2VsZWN0b3ItZmlsZS10eXBlcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0YVBvaW50c0V4cG9ydFNlbGVjdG9yVGltZVJhbmdlQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRhcG9pbnRzLWV4cG9ydHMtc2VsZWN0b3ItdGltZS1yYW5nZS9kYXRhcG9pbnRzLWV4cG9ydHMtc2VsZWN0b3ItdGltZS1yYW5nZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ1NWR2VuZXJhdG9yQWRhcHRlciB9IGZyb20gJy4vZ2VuZXJhdG9ycy9jc3YtZ2VuZXJhdG9yJztcbmltcG9ydCB7IEV4Y2VsR2VuZXJhdG9yQWRhcHRlciB9IGZyb20gJy4vZ2VuZXJhdG9ycy9leGNlbC1nZW5lcmF0b3InO1xuXG5leHBvcnQgY29uc3QgRklMRV9HRU5FUkFUT1JTID0gbmV3IEluamVjdGlvblRva2VuPEZpbGVHZW5lcmF0b3JbXT4oJ0ZJTEVfR0VORVJBVE9SUycsIHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICBmYWN0b3J5OiAoKSA9PiBbRXhjZWxHZW5lcmF0b3JBZGFwdGVyLCBDU1ZHZW5lcmF0b3JBZGFwdGVyXVxufSk7XG5cbmV4cG9ydCBjb25zdCBkYXRlUmFuZ2VWYWxpZGF0b3I6IFZhbGlkYXRvckZuID0gKFxuICBjb250cm9sOiBBYnN0cmFjdENvbnRyb2xcbik6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgY29uc3QgZGF0ZUZyb20gPSBjb250cm9sLmdldCgnZGF0ZUZyb20nKTtcbiAgY29uc3QgZGF0ZVRvID0gY29udHJvbC5nZXQoJ2RhdGVUbycpO1xuXG4gIGlmICghZGF0ZUZyb20gfHwgIWRhdGVUbykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgZGF0ZUZyb21WYWx1ZSA9IGRhdGVGcm9tLnZhbHVlO1xuICBjb25zdCBkYXRlVG9WYWx1ZSA9IGRhdGVUby52YWx1ZTtcbiAgaWYgKGRhdGVGcm9tVmFsdWUgJiYgZGF0ZVRvVmFsdWUpIHtcbiAgICBpZiAobmV3IERhdGUoZGF0ZUZyb21WYWx1ZSkgPiBuZXcgRGF0ZShkYXRlVG9WYWx1ZSkpIHtcbiAgICAgIGRhdGVGcm9tLnNldEVycm9ycyh7IGRhdGVBZnRlclJhbmdlTWF4OiB0cnVlIH0pO1xuICAgICAgZGF0ZVRvLnNldEVycm9ycyh7IGRhdGVCZWZvcmVSYW5nZU1pbjogdHJ1ZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0ZUZyb20uc2V0RXJyb3JzKG51bGwpO1xuICAgICAgZGF0ZVRvLnNldEVycm9ycyhudWxsKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItZmlsZS1leHBvcnRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1maWxlLWV4cG9ydGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvcmVNb2R1bGUsXG4gICAgRGF0YVBvaW50c0V4cG9ydFNlbGVjdG9yRGF0YVNjb3BlQ29tcG9uZW50LFxuICAgIERhdGFQb2ludHNFeHBvcnRTZWxlY3RvckZpbGVUeXBlc0NvbXBvbmVudCxcbiAgICBEYXRhUG9pbnRzRXhwb3J0U2VsZWN0b3JQcmV2aWV3Q29tcG9uZW50LFxuICAgIERhdGFQb2ludHNFeHBvcnRTZWxlY3RvclRpbWVSYW5nZUNvbXBvbmVudCxcbiAgICBLZXlWYWx1ZVBpcGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIERhdGFwb2ludHNFeHBvcnRTZWxlY3RvckZpbGVFeHBvcnRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgZXhwb3J0Q29uZmlnOiBFeHBvcnRDb25maWc7XG4gIEBPdXRwdXQoKSBvbkRvd25sb2FkQnV0dG9uU3RhdGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAvKipcbiAgICogUmVwcmVzZW50cyBhZ2dyZWdhdGlvbiBzZWxlY3RvciBvcHRpb25zIHRoYXQgYXJlIGRpc2FibGVkLlxuICAgKiBUaGlzIHN0YXRlIGlzIGRldGVybWluZWQgYmFzZWQgb24gdGhlIGN1cnJlbnQgZGF0ZSByYW5nZS5cbiAgICovXG4gIGRpc2FibGVkQWdncmVnYXRpb25PcHRpb25zOiBBZ2dyZWdhdGlvbk9wdGlvblN0YXR1cyA9IHt9O1xuXG4gIGZvcm1Hcm91cDogUmV0dXJuVHlwZTxEYXRhcG9pbnRzRXhwb3J0U2VsZWN0b3JGaWxlRXhwb3J0ZXJDb21wb25lbnRbJ2NyZWF0ZUZvcm0nXT47XG5cbiAgLyoqXG4gICAqIENvbnRhaW5zIGFsbCBkYXRhcG9pbnRzIHRoYXQgbnVtYmVyIG9mIHJlY29yZHMgZXhjZWVkcyBhIHRocmVzaG9sZCwgd2hlcmUgZGF0YSBmb3IgdGhlc2UgZGF0YXBvaW50cyB3aWxsIGJlIHByb2Nlc3NlZCBieSB0aGUgYmFja2VuZC5cbiAgICogQXBwbGllcyBvbmx5IHRvIG1lYXN1cmVtZW50IEFQSSB3aGljaCBjYW4gcmV0dXJuIHByb2Nlc3NlZCBDU1YsIEV4Y2VsIG9yIFhNTCBkYXRhLlxuICAgKi9cbiAgZGF0YXBvaW50c0V4Y2VlZGluZ0Jyb3dzZXJEb3dubG9hZExpbWl0OiBEYXRhcG9pbnRzRXhjZWVkaW5nTGltaXRbXSA9IFtdO1xuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgYW55IG9mIERhdGFUb0V4cG9ydCBvYmplY3RzIHRpbWVWYWx1ZU1hcCBwcm9wZXJ0eSBpcyBub3QgdW5kZWZpbmVkIChzZXJpZXMgZGF0YSlcbiAgICogb3IgZGF0YVBvaW50VG9FeHBvcnQgaXMgbm90IHVuZGVmaW5lZCBhdCBhbGwgKG1lYXN1cmVtZW50IGRhdGEpLlxuICAgKi9cblxuICBoYXNGZXRjaGVkRGF0YUFueVZhbHVlc1RvRXhwb3J0ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGVyZSBpcyBubyBleHBvcnRhYmxlIGRhdGEgYmVjYXVzZSB0aGUgZGF0ZSByYW5nZSBvZiBhbGwgc2VsZWN0ZWQgZGF0YXBvaW50cyBleGNlZWRzIDEsMDAwLDAwMCByZWNvcmRzLlxuICAgKi9cbiAgaGFzTm9FeHBvcnRhYmxlRGF0YTogYm9vbGVhbjtcblxuICBoYXNQZXJtaXNzaW9uVG9SZWFkQW55TWVhc3VyZW1lbnRzID0gZmFsc2U7XG5cbiAgaXNQcmV2aWV3TG9hZGluZyA9IHRydWU7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZnVsbCBvciBjb21wYWN0IHR5cGUgb2YgZXhwb3J0IGlzIHNlbGVjdGVkLlxuICAgKiBGdWxsIHR5cGUgb2YgZXhwb3J0IGlzIGJhc2VkIG9uIG1lYXN1cmVtZW50IEFQSSBkYXRhLlxuICAgKiBDb21wYWN0IHR5cGUgb2YgZXhwb3J0IGlzIGJhc2VkIG9uIHNlcmllcyBBUEkgZGF0YS5cbiAgICovXG4gIGlzRnVsbFR5cGVPZkV4cG9ydCA9IGZhbHNlO1xuXG4gIHByZXZpZXdUYWJsZURhdGE6IEV4cG9ydERhdGFbXTtcblxuICBsaW1pdEV4Y2VlZGVkTWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb250YWlucyBwcm9jZXNzZWQgZGF0YSB0aGF0IGlzIHByZXBhcmVkIHRvIGJlIGV4cG9ydGVkIGlmIHNlcmllcyBkYXRhIHdhcyBmZXRjaGVkXG4gICAqIG9yIHNob3duIGluIHRoZSBwcmV2aWV3IHRhYmxlIGluIGNhc2Ugb2YgbWVhc3VyZW1lbnRzIGRhdGEuXG4gICAqL1xuICBwcml2YXRlIGRhdGFUb0V4cG9ydDogRGF0YVRvRXhwb3J0W107XG4gIC8qKlxuICAgKiBDb250YWlucyBhIGxpc3Qgb2YgZGF0YXBvaW50cyB0aGF0IHNlbGVjdGVkIGRhdGUgcmFuZ2UgZXhjZWVkcyBBUEkgbGltaXQgb2YgMV8wMDBfMDAwIHJlY29yZHMuXG4gICAqL1xuICBwcml2YXRlIGRhdGFQb2ludHNFeGNlZWRpbmdPbmVNaWxsaW9uTGltaXQ6IERhdGFwb2ludHNFeGNlZWRpbmdMaW1pdFtdO1xuICAvKipcbiAgICogUmVwcmVzZW50cyB0aGUgc3RhdGUgb2YgZmlsZSB0eXBlIHNlbGVjdGlvbiBjaGVja2JveGVzLlxuICAgKi9cbiAgcHJpdmF0ZSBmaWxlVHlwZVNlbGVjdGlvblN0YXRlOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfTtcbiAgLyoqXG4gICAqIEhvbGQgdGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIGFnZ3JlZ2F0aW9uIGZyb20gdGhlIGV4cG9ydCBjb25maWcuXG4gICAqIFZhbHVlIHdpbGwgYmUgbG9hZGVkIG9uIGNvbXBvbmVudCBkZXN0cm95LlxuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsQWdncmVnYXRpb246IEFnZ3JlZ2F0aW9uT3B0aW9uO1xuICAvKipcbiAgICogSG9sZCB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgZGF0ZUZyb20gZnJvbSB0aGUgZXhwb3J0IGNvbmZpZy5cbiAgICogVmFsdWUgd2lsbCBiZSBsb2FkZWQgb24gY29tcG9uZW50IGRlc3Ryb3kuXG4gICAqL1xuICBwcml2YXRlIGluaXRpYWxEYXRlRnJvbTogc3RyaW5nO1xuICAvKipcbiAgICogSG9sZCB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgZGF0ZVRvIGZyb20gdGhlIGV4cG9ydCBjb25maWcuXG4gICAqIFZhbHVlIHdpbGwgYmUgbG9hZGVkIG9uIGNvbXBvbmVudCBkZXN0cm95LlxuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsRGF0ZVRvOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBIb2xkIHRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSBkYXRhcG9pbnREZXRhaWxzIGZyb20gdGhlIGV4cG9ydCBjb25maWcuXG4gICAqIFNvbWUgbG9naWMgbWF5IGZpbHRlciBvdXQgZGF0YXBvaW50cyBpbiBkYXRhcG9pbnREZXRhaWxzIGFycmF5LCB0aGF0IGV4Y2VlZHMgMV8wMDBfMDAwIGxpbWl0IGZvciBtZWFzdXJlbWVudHMgQVBJLFxuICAgKiBidXQgZnVsbCBsaXN0IGlzIHN0aWxsIG5lZWRlZCB3aGVuIGNvbXBvbmVudCBpcyByZW9wZW5lZC5cbiAgICogVmFsdWUgd2lsbCBiZSBsb2FkZWQgb24gY29tcG9uZW50IGRlc3Ryb3kuXG4gICAqL1xuICBwcml2YXRlIGluaXRpYWxEYXRhcG9pbnREZXRhaWxzOiBEYXRhcG9pbnREZXRhaWxzW107XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgYWdncmVnYXRpb24gdmFsdWUgd2FzIGNoYW5nZWQgcHJvZ3JhbW1hdGljYWxseS5cbiAgICogSXQgcHJldmVudHMgYSBjYXNlIHdoZXJlIGZldGNoaW5nIG1heSBiZSB0cmlnZ2VyZWQgdHdpY2Ugd2hlbiBleHBvcnQgdHlwZSBpcyBjaGFuZ2VkLlxuICAgKiBCb3RoIG9wdGlvbnMgYWxvbmUgY2FuIHRyaWdnZXIgZmV0Y2hpbmcgZGF0YS5cbiAgICovXG4gIHByaXZhdGUgaXNBZ2dyZWdhdGlvbkNoYW5nZWRQcm9ncmFtbWF0aWNhbGx5ID0gZmFsc2U7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciBhbnkgb2YgdGhlIGV4cG9ydCBmaWxlIHR5cGVzIChDU1YsIEV4Y2VsKSBhcmUgY2hlY2tlZC5cbiAgICovXG4gIHByaXZhdGUgaXNBbnlPZkV4cG9ydEZpbGVUeXBlQ2hlY2tlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgZGF0ZUZyb21TdWJqZWN0ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuICBwcml2YXRlIGRhdGVUb1N1YmplY3QgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGR5bmFtaWNGaWxlc1R5cGVNZXRhZGF0YTogeyBba2V5OiBzdHJpbmddOiBGaWxlVHlwZU1ldGFkYXRhIH0gPSB7fTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGRhdGFwb2ludHNFeHBvcnRNb2RhbFNlcnZpY2U6IERhdGFQcm9jZXNzaW5nU2VydmljZSxcbiAgICBwcml2YXRlIGRhdGFwb2ludHNFeHBvcnRTZWxlY3RvclNlcnZpY2U6IERhdGFGZXRjaGluZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXRhcG9pbnRzRXhwb3J0U2VsZWN0b3JGaWxlRXhwb3J0ZXJTZXJ2aWNlOiBEYXRhcG9pbnRzRXhwb3J0U2VsZWN0b3JGaWxlRXhwb3J0ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIEBJbmplY3QoRklMRV9HRU5FUkFUT1JTKSBwcml2YXRlIGdlbmVyYXRvcnM6IEZpbGVHZW5lcmF0b3JbXSxcbiAgICBwcml2YXRlIGdhaW5zaWdodFNlcnZpY2U6IEdhaW5zaWdodFNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5zZXRGaWxlc1R5cGUodGhpcy5nZW5lcmF0b3JzKTtcblxuICAgIHRoaXMuZGF0ZUZyb21TdWJqZWN0XG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoMzAwKSwgdGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAuc3Vic2NyaWJlKGFzeW5jICh1cGRhdGVkRGF0ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlRGF0ZUFuZEZldGNoRGF0YSgnZGF0ZUZyb20nLCB1cGRhdGVkRGF0ZSk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuZGF0ZVRvU3ViamVjdFxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDMwMCksIHRha2VVbnRpbERlc3Ryb3llZCgpKVxuICAgICAgLnN1YnNjcmliZShhc3luYyAodXBkYXRlZERhdGU6IHN0cmluZykgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZURhdGVBbmRGZXRjaERhdGEoJ2RhdGVUbycsIHVwZGF0ZWREYXRlKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgc2V0RmlsZXNUeXBlKGdlbmVyYXRvcnM6IEZpbGVHZW5lcmF0b3JbXSkge1xuICAgIGdlbmVyYXRvcnMuZm9yRWFjaChnID0+IHtcbiAgICAgIHRoaXMuZHluYW1pY0ZpbGVzVHlwZU1ldGFkYXRhW2cuZ2V0VHlwZSgpXSA9IHtcbiAgICAgICAgbGFiZWw6IGcuZ2V0TGFiZWwoKSxcbiAgICAgICAgaWNvbjogZy5nZXRJY29uKCksXG4gICAgICAgIHRpdGxlOiBnLmdldFRpdGxlKCksXG4gICAgICAgIGV4dGVuc2lvbjogZy5nZXRGaWxlRXh0ZW5zaW9uKCksXG4gICAgICAgIHppcE5hbWU6IGcuZ2V0WmlwTmFtZSgpLFxuICAgICAgICB0eXBlOiBnLmdldFR5cGUoKVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNvdXJjZXNQZXJtaXR0ZWRUb1JlYWQ6IHN0cmluZ1tdID1cbiAgICAgIGF3YWl0IHRoaXMuZGF0YXBvaW50c0V4cG9ydFNlbGVjdG9yU2VydmljZS5nZXRTb3VyY2VzV2l0aFBlcm1pc3Npb25zVG9SZWFkKFxuICAgICAgICB0aGlzLmV4cG9ydENvbmZpZy5kYXRhcG9pbnREZXRhaWxzXG4gICAgICApO1xuXG4gICAgaWYgKHNvdXJjZXNQZXJtaXR0ZWRUb1JlYWQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHNvdXJjZXNQZXJtaXR0ZWRUb1JlYWQubGVuZ3RoICE9PSB0aGlzLmV4cG9ydENvbmZpZy5kYXRhcG9pbnREZXRhaWxzLmxlbmd0aCkge1xuICAgICAgdGhpcy5leHBvcnRDb25maWcuZGF0YXBvaW50RGV0YWlscyA9IHRoaXMuZXhwb3J0Q29uZmlnLmRhdGFwb2ludERldGFpbHMuZmlsdGVyKGRhdGFQb2ludCA9PlxuICAgICAgICBzb3VyY2VzUGVybWl0dGVkVG9SZWFkLmluY2x1ZGVzKFN0cmluZyhkYXRhUG9pbnQuc291cmNlKSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5oYXNQZXJtaXNzaW9uVG9SZWFkQW55TWVhc3VyZW1lbnRzID0gdHJ1ZTtcblxuICAgIHRoaXMuc3RvcmVJbml0aWFsQ2hhbmdlYWJsZUNvbmZpZygpO1xuXG4gICAgdGhpcy5maWxlVHlwZVNlbGVjdGlvblN0YXRlID0gdGhpcy5nZXRJbml0aWFsU2VsZWN0aW9uKHRoaXMuZHluYW1pY0ZpbGVzVHlwZU1ldGFkYXRhLCBbMF0pO1xuXG4gICAgdGhpcy5mb3JtR3JvdXAgPSB0aGlzLmNyZWF0ZUZvcm0oKTtcbiAgICB0aGlzLmRhdGFUb0V4cG9ydCA9IGF3YWl0IHRoaXMuZGF0YXBvaW50c0V4cG9ydFNlbGVjdG9yU2VydmljZS5mZXRjaEFuZFByZXBhcmVEYXRhVG9FeHBvcnQoXG4gICAgICB0aGlzLmV4cG9ydENvbmZpZyxcbiAgICAgIHRoaXMuaXNGdWxsVHlwZU9mRXhwb3J0XG4gICAgKTtcblxuICAgIHRoaXMuaGFuZGxlRGF0ZVNlbGVjdG9yQ2hhbmdlcygpO1xuICAgIHRoaXMuZGV0ZXJtaW5lU2hvd2luZ1ByZXZpZXdPckVtcHR5U3RhdGUoKTtcbiAgICB0aGlzLmhhbmRsZUV4cG9ydE1vZGVDaGFuZ2VzKCk7XG4gICAgdGhpcy5oYW5kbGVGaWxlVHlwZVNlbGVjdGlvbkNoYW5nZXMoKTtcbiAgICB0aGlzLmhhbmRsZUZvcm1WYWxpZGF0aW9uQ2hhbmdlcygpO1xuXG4gICAgdGhpcy51cGRhdGVGaWxlVHlwZUNvbnRyb2woKTtcblxuICAgIHRoaXMudXBkYXRlRGlzYWJsZWRBZ2dyZWdhdGlvbk9wdGlvbnNTdGF0ZSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIHRoaXMubG9hZEluaXRpYWxDaGFuZ2VhYmxlQ29uZmlnKCk7XG4gIH1cblxuICBhc3luYyBleHBvcnRBbmREb3dubG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmaWxlRXhwb3J0czogRmlsZUV4cG9ydENvbmZpZ1tdID0gT2JqZWN0LmVudHJpZXModGhpcy5keW5hbWljRmlsZXNUeXBlTWV0YWRhdGEpLm1hcChcbiAgICAgIChbXywgdmFsdWVdKSA9PiAoe1xuICAgICAgICBmaWxlVHlwZTogdmFsdWUudHlwZSBhcyBzdHJpbmcsXG4gICAgICAgIHppcE5hbWU6IHZhbHVlLnppcE5hbWVcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IHNlbGVjdGVkRmlsZUV4cG9ydHM6IEZpbGVFeHBvcnRDb25maWdbXSA9IHRoaXMuZ2V0T25seVNlbGVjdGVkRmlsZUV4cG9ydHMoZmlsZUV4cG9ydHMpO1xuXG4gICAgdGhpcy50cmlnZ2VyR2FpbnNpZ2h0RG93bmxvYWRFdmVudChzZWxlY3RlZEZpbGVFeHBvcnRzKTtcblxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgc2VsZWN0ZWRGaWxlRXhwb3J0cy5tYXAoYXN5bmMgKHsgZmlsZVR5cGUsIHppcE5hbWUgfSkgPT4ge1xuICAgICAgICBjb25zdCBibG9iID0gYXdhaXQgdGhpcy5leHBvcnRGaWxlKGZpbGVUeXBlKTtcbiAgICAgICAgYXdhaXQgdGhpcy5kb3dubG9hZEZpbGUoYmxvYiwgZmlsZVR5cGUsIHppcE5hbWUpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5kYXRhcG9pbnRzRXhwb3J0U2VsZWN0b3JGaWxlRXhwb3J0ZXJTZXJ2aWNlLmNsZWFudXBDYWNoZWREYXRhKCk7XG4gIH1cblxuICBnZXRPbmx5U2VsZWN0ZWRGaWxlRXhwb3J0cyhmaWxlRXhwb3J0czogRmlsZUV4cG9ydENvbmZpZ1tdKTogRmlsZUV4cG9ydENvbmZpZ1tdIHtcbiAgICByZXR1cm4gZmlsZUV4cG9ydHMuZmlsdGVyKGYgPT4gdGhpcy5maWxlVHlwZVNlbGVjdGlvblN0YXRlW2YuZmlsZVR5cGVdID09PSB0cnVlKTtcbiAgfVxuXG4gIGFzeW5jIGV4cG9ydEZpbGUoZmlsZVR5cGU6IHN0cmluZyk6IFByb21pc2U8QmxvYiB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5pc0Z1bGxUeXBlT2ZFeHBvcnRcbiAgICAgID8gYXdhaXQgdGhpcy5leHBvcnRNZWFzdXJlbWVudEZpbGUoZmlsZVR5cGUpXG4gICAgICA6IGF3YWl0IHRoaXMuZXhwb3J0U2VyaWVzRmlsZShmaWxlVHlwZSk7XG4gIH1cblxuICBhc3luYyBkb3dubG9hZEZpbGUoXG4gICAgYmxvYjogQmxvYiB8IG51bGwsXG4gICAgZmlsZVR5cGU6IHN0cmluZyxcbiAgICBtZWFzdXJlbWVudHNaaXBGaWxlTmFtZTogc3RyaW5nXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuZGF0YXBvaW50c0V4Y2VlZGluZ0Jyb3dzZXJEb3dubG9hZExpbWl0ID1cbiAgICAgIHRoaXMuZGF0YXBvaW50c0V4Y2VlZGluZ0Jyb3dzZXJEb3dubG9hZExpbWl0LmZpbHRlcihcbiAgICAgICAgZGF0YXBvaW50ID0+ICF0aGlzLmRhdGFQb2ludHNFeGNlZWRpbmdPbmVNaWxsaW9uTGltaXQuaW5jbHVkZXMoZGF0YXBvaW50KVxuICAgICAgKTtcblxuICAgIGNvbnN0IHNob3VsZFNob3dBbGVydCA9IHRoaXMuZGF0YXBvaW50c0V4Y2VlZGluZ0Jyb3dzZXJEb3dubG9hZExpbWl0Lmxlbmd0aCA+IDA7XG5cbiAgICAvLyBIYW5kbGVzIGEgY2FzZSB3aGVyZSBhbGwgZmlsZXMgYXJlIHNlbnQgYnkgZW1haWwuXG4gICAgaWYgKCFibG9iICYmIHNob3VsZFNob3dBbGVydCkge1xuICAgICAgdGhpcy5kYXRhcG9pbnRzRXhwb3J0U2VsZWN0b3JTZXJ2aWNlLnNob3dTZW5kVmlhRW1haWxJbmZvQWxlcnQoXG4gICAgICAgIGZpbGVUeXBlLFxuICAgICAgICB0aGlzLmRhdGFwb2ludHNFeGNlZWRpbmdCcm93c2VyRG93bmxvYWRMaW1pdFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoYmxvYikge1xuICAgICAgLy8gSGFuZGxlcyB0aGUgY2FzZSB3aGVyZSBzb21lIG9mIHRoZSBmaWxlcyBhcmUgc2VudCBieSBlbWFpbC5cbiAgICAgIGlmIChzaG91bGRTaG93QWxlcnQpIHtcbiAgICAgICAgdGhpcy5kYXRhcG9pbnRzRXhwb3J0U2VsZWN0b3JTZXJ2aWNlLnNob3dTZW5kVmlhRW1haWxJbmZvQWxlcnQoXG4gICAgICAgICAgZmlsZVR5cGUsXG4gICAgICAgICAgdGhpcy5kYXRhcG9pbnRzRXhjZWVkaW5nQnJvd3NlckRvd25sb2FkTGltaXRcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pc0Z1bGxUeXBlT2ZFeHBvcnRcbiAgICAgICAgPyBzYXZlQXMoYmxvYiwgbWVhc3VyZW1lbnRzWmlwRmlsZU5hbWUpXG4gICAgICAgIDogc2F2ZUFzKGJsb2IsIGJsb2JbU0VSSUVTX0RBVEFfTUVSR0VEX0ZJTEVfTkFNRV0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnRzIGEgbWVhc3VyZW1lbnQgZmlsZSBvZiB0aGUgc3BlY2lmaWVkIHR5cGUuXG4gICAqXG4gICAqIE1lYXN1cmVtZW50cyBBUEkgZG9lcyBwcm92aWRlIGEgd2F5IHRvIGZldGNoIGEgcHJlcHJvY2Vzc2VkIENTVi9FeGNlbCBmaWxlLlxuICAgKlxuICAgKiBBdCB0aGlzIHBvaW50IGEgYmFja2VkIGZpbGUgbmVlZHMgdG8gYmUgZmV0Y2hlZC5cbiAgICogTWVhc3VyZW1lbnQgZGF0YSB1c2VkIGZvciBhIHByZXZpZXcgY29udGFpbnMganVzdCA1IGZpcnN0IHJlY29yZHNcbiAgICogYW5kIGl0J3Mgbm90IGZldGNoZWQgd2l0aCBDU1YvRXhjZWwgaGVhZGVycy5cbiAgICpcbiAgICogQHBhcmFtIGZpbGVUeXBlIC0gVGhlIHR5cGUgb2YgZmlsZSB0byBleHBvcnQuXG4gICAqIEByZXR1cm5zIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgQmxvYiByZXByZXNlbnRpbmcgdGhlIGV4cG9ydGVkIGZpbGUgb3IgbnVsbCB3aGVuIG5vIGRhdGEgdG8gZXhwb3J0IG9yIGl0J3Mgc2VudCB2aWEgZW1haWwuXG4gICAqL1xuICBhc3luYyBleHBvcnRNZWFzdXJlbWVudEZpbGUoZmlsZVR5cGU6IHN0cmluZyk6IFByb21pc2U8QmxvYj4gfCBudWxsIHtcbiAgICBjb25zdCB7IGFjY2VwdFR5cGUsIGV4dGVuc2lvbiB9ID0gdGhpcy5kYXRhcG9pbnRzRXhwb3J0TW9kYWxTZXJ2aWNlLmZpbGVUeXBlc0NvbmZpZ3NbZmlsZVR5cGVdO1xuXG4gICAgY29uc3QgdXBkYXRlZEV4cG9ydENvbmZpZzogRXhwb3J0Q29uZmlnID0gdGhpcy5leGNsdWRlRGF0YXBvaW50c1RoYXRFeGNlZWRzQXBpTGltaXQoXG4gICAgICB0aGlzLmV4cG9ydENvbmZpZ1xuICAgICk7XG5cbiAgICBjb25zdCBkYXRhVG9FeHBvcnQ6IERhdGFUb0V4cG9ydFdpdGhCYWNrZW5kQ3JlYXRlZEZpbGVbXSA9XG4gICAgICBhd2FpdCB0aGlzLmRhdGFwb2ludHNFeHBvcnRTZWxlY3RvclNlcnZpY2UuZmV0Y2hNZWFzdXJlbWVudERhdGFGaWxlc0FuZFBhaXJXaXRoU291cmNlRGV0YWlscyhcbiAgICAgICAgYWNjZXB0VHlwZSxcbiAgICAgICAgdXBkYXRlZEV4cG9ydENvbmZpZ1xuICAgICAgKTtcblxuICAgIGNvbnN0IGlzQWxsVW5kZWZpbmVkID0gZGF0YVRvRXhwb3J0LmV2ZXJ5KGRhdGEgPT4gZGF0YSA9PT0gdW5kZWZpbmVkKTtcbiAgICBpZiAoaXNBbGxVbmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmRhdGFwb2ludHNFeHBvcnRTZWxlY3RvckZpbGVFeHBvcnRlclNlcnZpY2UuZ2V0TWVhc3VyZW1lbnRFeHBvcnRlZERhdGFCbG9iKFxuICAgICAgZXh0ZW5zaW9uLFxuICAgICAgZGF0YVRvRXhwb3J0XG4gICAgKTtcbiAgfVxuXG4gIGV4Y2x1ZGVEYXRhcG9pbnRzVGhhdEV4Y2VlZHNBcGlMaW1pdChleHBvcnRDb25maWc6IEV4cG9ydENvbmZpZyk6IEV4cG9ydENvbmZpZyB7XG4gICAgY29uc3Qgc2tpcHBlZERhdGFwb2ludHNTb3VyY2U6IHN0cmluZ1tdID0gdGhpcy5kYXRhUG9pbnRzRXhjZWVkaW5nT25lTWlsbGlvbkxpbWl0Lm1hcChcbiAgICAgIGRhdGFwb2ludCA9PiBkYXRhcG9pbnQuZGF0YXBvaW50RGV0YWlsLnNvdXJjZS50b1N0cmluZygpXG4gICAgKTtcblxuICAgIGNvbnN0IGZpbHRlcmVkRGF0YXBvaW50czogRGF0YXBvaW50RGV0YWlsc1tdID0gZXhwb3J0Q29uZmlnLmRhdGFwb2ludERldGFpbHMuZmlsdGVyKFxuICAgICAgZGF0YXBvaW50ID0+ICFza2lwcGVkRGF0YXBvaW50c1NvdXJjZS5pbmNsdWRlcyhTdHJpbmcoZGF0YXBvaW50LnNvdXJjZSkpXG4gICAgKTtcblxuICAgIGV4cG9ydENvbmZpZy5kYXRhcG9pbnREZXRhaWxzID0gZmlsdGVyZWREYXRhcG9pbnRzO1xuICAgIHJldHVybiBleHBvcnRDb25maWc7XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0cyB0aGUgc2VyaWVzIGRhdGEgdG8gYSBmaWxlIG9mIHRoZSBzcGVjaWZpZWQgdHlwZS5cbiAgICpcbiAgICogU2VyaWVzIEFQSSBkb2VzIG5vdCBwcm92aWRlIGEgd2F5IHRvIGZldGNoIGEgcHJlcHJvY2Vzc2VkIENTVi9FeGNlbCBmaWxlLlxuICAgKlxuICAgKiBTZXJpZXMgZGF0YSB1c2VkIGZvciBleHBvcnRpbmcgYSBmaWxlIGlzIGFscmVhZHkgZmV0Y2hlZCBmb3IgYSBwcmV2aWV3XG4gICAqIGFuZCBjYW4gYmUgcmV1c2VkIGZvciBleHBvcnRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBmaWxlVHlwZSAtIFRoZSB0eXBlIG9mIGZpbGUgdG8gZXhwb3J0IChlLmcuLCBDU1YsIEV4Y2VsKS5cbiAgICogQHJldHVybnMgQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBCbG9iIHJlcHJlc2VudGluZyB0aGUgZXhwb3J0ZWQgZmlsZS5cbiAgICovXG4gIGFzeW5jIGV4cG9ydFNlcmllc0ZpbGUoZmlsZVR5cGU6IHN0cmluZyk6IFByb21pc2U8QmxvYj4ge1xuICAgIGNvbnN0IG1lcmdlZEV4cG9ydERldGFpbHM6IE1lcmdlZEV4cG9ydERldGFpbHMgPSB7XG4gICAgICBhZ2dyZWdhdGlvbjogdGhpcy5leHBvcnRDb25maWcuYWdncmVnYXRpb24sXG4gICAgICBkYXRlRnJvbTogdGhpcy5leHBvcnRDb25maWcuZGF0ZUZyb20sXG4gICAgICBkYXRlVG86IHRoaXMuZXhwb3J0Q29uZmlnLmRhdGVUb1xuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5kYXRhcG9pbnRzRXhwb3J0U2VsZWN0b3JGaWxlRXhwb3J0ZXJTZXJ2aWNlLmdldFNlcmllc0V4cG9ydGVkRGF0YUJsb2IoXG4gICAgICBmaWxlVHlwZSxcbiAgICAgIHRoaXMuZGF0YVRvRXhwb3J0LFxuICAgICAgbWVyZ2VkRXhwb3J0RGV0YWlsc1xuICAgICk7XG4gIH1cblxuICBhc3luYyBvbkFnZ3JlZ2F0aW9uQ2hhbmdlKGFnZ3JlZ2F0aW9uOiBBZ2dyZWdhdGlvbk9wdGlvbik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuZXhwb3J0Q29uZmlnLmFnZ3JlZ2F0aW9uID0gYWdncmVnYXRpb247XG4gICAgaWYgKCF0aGlzLmlzQWdncmVnYXRpb25DaGFuZ2VkUHJvZ3JhbW1hdGljYWxseSkge1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVFeHBvcnRDb25maWdBbmRGZXRjaERhdGEoKTtcbiAgICAgIHRoaXMudXBkYXRlRG93bmxvYWRCdXR0b25TdGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIG9uRGF0ZUZyb21DaGFuZ2UodXBkYXRlZERhdGU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZGF0ZUZyb21TdWJqZWN0Lm5leHQodXBkYXRlZERhdGUpO1xuICB9XG5cbiAgb25EYXRlVG9DaGFuZ2UodXBkYXRlZERhdGU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZGF0ZVRvU3ViamVjdC5uZXh0KHVwZGF0ZWREYXRlKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZURhdGVBbmRGZXRjaERhdGEoXG4gICAgZGF0ZVR5cGU6ICdkYXRlRnJvbScgfCAnZGF0ZVRvJyxcbiAgICB1cGRhdGVkRGF0ZTogc3RyaW5nXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuZXhwb3J0Q29uZmlnW2RhdGVUeXBlXSA9IHVwZGF0ZWREYXRlO1xuICAgIGF3YWl0IHRoaXMudXBkYXRlRXhwb3J0Q29uZmlnQW5kRmV0Y2hEYXRhKCk7XG5cbiAgICBpZiAodGhpcy5pc0Z1bGxUeXBlT2ZFeHBvcnQpIHtcbiAgICAgIGF3YWl0IHRoaXMuZGV0ZXJtaW5lSWZNZWFzdXJlbWVudFJlc3BvbnNlV2lsbEJlUHJvY2Vzc2VkQnlCYWNrZW5kKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXBkYXRlRG93bmxvYWRCdXR0b25TdGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9uRXhwb3J0VHlwZUNoYW5nZShleHBvcnRUeXBlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoZXhwb3J0VHlwZSA9PT0gRVhQT1JUX01PREVfVkFMVUVTLmZ1bGwpIHtcbiAgICAgIHRoaXMuaXNBZ2dyZWdhdGlvbkNoYW5nZWRQcm9ncmFtbWF0aWNhbGx5ID0gdHJ1ZTtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmFnZ3JlZ2F0aW9uLnNldFZhbHVlKEFHR1JFR0FUSU9OX1ZBTFVFUy5ub25lKTtcbiAgICAgIHRoaXMuaXNBZ2dyZWdhdGlvbkNoYW5nZWRQcm9ncmFtbWF0aWNhbGx5ID0gZmFsc2U7XG5cbiAgICAgIHRoaXMuaXNGdWxsVHlwZU9mRXhwb3J0ID0gdHJ1ZTtcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlRXhwb3J0Q29uZmlnQW5kRmV0Y2hEYXRhKCk7XG4gICAgICBhd2FpdCB0aGlzLmRldGVybWluZUlmTWVhc3VyZW1lbnRSZXNwb25zZVdpbGxCZVByb2Nlc3NlZEJ5QmFja2VuZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucmVzZXRGdWxsRXhwb3J0UmVsYXRlZFByb3BlcnRpZXMoKTtcbiAgICB0aGlzLmlzRnVsbFR5cGVPZkV4cG9ydCA9IGZhbHNlO1xuICAgIGF3YWl0IHRoaXMudXBkYXRlRXhwb3J0Q29uZmlnQW5kRmV0Y2hEYXRhKCk7XG5cbiAgICB0aGlzLnVwZGF0ZURpc2FibGVkQWdncmVnYXRpb25PcHRpb25zU3RhdGUoKTtcblxuICAgIHRoaXMudXBkYXRlRG93bmxvYWRCdXR0b25TdGF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEaXNhYmxlZEFnZ3JlZ2F0aW9uT3B0aW9uc1N0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWRBZ2dyZWdhdGlvbk9wdGlvbnMgPVxuICAgICAgdGhpcy5kYXRhcG9pbnRzRXhwb3J0U2VsZWN0b3JGaWxlRXhwb3J0ZXJTZXJ2aWNlLnVwZGF0ZURpc2FibGVkU3RhdGVPZkFnZ3JlZ2F0aW9uT3B0aW9uRW50cmllcyhcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuZGF0ZUZyb20udmFsdWUsXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmRhdGVUby52YWx1ZSxcbiAgICAgICAgdGhpcy5kaXNhYmxlZEFnZ3JlZ2F0aW9uT3B0aW9uc1xuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRm9ybSgpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cChcbiAgICAgIHtcbiAgICAgICAgZGF0ZUZyb206IG5ldyBGb3JtQ29udHJvbCh0aGlzLmV4cG9ydENvbmZpZy5kYXRlRnJvbSksXG4gICAgICAgIGRhdGVUbzogbmV3IEZvcm1Db250cm9sKHRoaXMuZXhwb3J0Q29uZmlnLmRhdGVUbyksXG4gICAgICAgIGFnZ3JlZ2F0aW9uOiBuZXcgRm9ybUNvbnRyb2woXG4gICAgICAgICAgdGhpcy5leHBvcnRDb25maWcuYWdncmVnYXRpb24gPyB0aGlzLmV4cG9ydENvbmZpZy5hZ2dyZWdhdGlvbiA6IEFHR1JFR0FUSU9OX1ZBTFVFUy5ub25lXG4gICAgICAgICksXG4gICAgICAgIGV4cG9ydE1vZGU6IG5ldyBGb3JtQ29udHJvbChFWFBPUlRfTU9ERV9WQUxVRVMuY29tcGFjdCksXG4gICAgICAgIGZpbGVUeXBlczogdGhpcy5mb3JtQnVpbGRlci5ncm91cChcbiAgICAgICAgICB0aGlzLmdlbmVyYXRvcnMucmVkdWNlKChhLCBjKSA9PiB7XG4gICAgICAgICAgICBhW2MuZ2V0VHlwZSgpXSA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgICAgfSwge30pXG4gICAgICAgIClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHZhbGlkYXRvcnM6IFtkYXRlUmFuZ2VWYWxpZGF0b3JdXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZVByZXZpZXcoKTogdm9pZCB7XG4gICAgdGhpcy5pc1ByZXZpZXdMb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnByZXZpZXdUYWJsZURhdGEgPVxuICAgICAgdGhpcy5kYXRhcG9pbnRzRXhwb3J0TW9kYWxTZXJ2aWNlLnRyYW5zZm9ybVRvRXhwb3J0RmlsZVN0cnVjdHVyZUZvclByZXZpZXcodGhpcy5kYXRhVG9FeHBvcnQpO1xuICAgIHRoaXMuaXNQcmV2aWV3TG9hZGluZyA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVEYXRlU2VsZWN0b3JDaGFuZ2VzKCk6IHZvaWQge1xuICAgIGNvbnN0IGFnZ3JlZ2F0aW9uQ29udHJvbCA9IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmFnZ3JlZ2F0aW9uO1xuICAgIGNvbnN0IGRhdGVGcm9tU2VsZWN0b3IgPSB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5kYXRlRnJvbTtcbiAgICBjb25zdCBkYXRlVG9TZWxlY3RvciA9IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmRhdGVUbztcblxuICAgIGNvbnN0IHVwZGF0ZUFnZ3JlZ2F0aW9uT3B0aW9ucyA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5pc0Z1bGxUeXBlT2ZFeHBvcnQpIHtcbiAgICAgICAgdGhpcy51cGRhdGVEaXNhYmxlZEFnZ3JlZ2F0aW9uT3B0aW9uc1N0YXRlKCk7XG5cbiAgICAgICAgY29uc3QgZmlyc3RBdmFpbGFibGVBZ2dyZWdhdGlvblZhbHVlOiBBZ2dyZWdhdGlvbk9wdGlvbiA9XG4gICAgICAgICAgdGhpcy5kYXRhcG9pbnRzRXhwb3J0U2VsZWN0b3JGaWxlRXhwb3J0ZXJTZXJ2aWNlLnNldFRvRmlyc3RBdmFpbGFibGVBZ2dyZWdhdGlvbk9wdGlvbklmQ3VycmVudElzRGlzYWJsZWQoXG4gICAgICAgICAgICBhZ2dyZWdhdGlvbkNvbnRyb2wudmFsdWUsXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkQWdncmVnYXRpb25PcHRpb25zXG4gICAgICAgICAgKTtcblxuICAgICAgICBpZiAoZmlyc3RBdmFpbGFibGVBZ2dyZWdhdGlvblZhbHVlKSB7XG4gICAgICAgICAgYWdncmVnYXRpb25Db250cm9sLnNldFZhbHVlKGZpcnN0QXZhaWxhYmxlQWdncmVnYXRpb25WYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgbWVyZ2UoZGF0ZUZyb21TZWxlY3Rvci52YWx1ZUNoYW5nZXMsIGRhdGVUb1NlbGVjdG9yLnZhbHVlQ2hhbmdlcylcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUodXBkYXRlQWdncmVnYXRpb25PcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRXhwb3J0TW9kZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgY29uc3QgYWdncmVnYXRpb25Db250cm9sID0gdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuYWdncmVnYXRpb247XG5cbiAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5leHBvcnRNb2RlLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZShleHBvcnRNb2RlVmFsdWUgPT4ge1xuICAgICAgICBpZiAoZXhwb3J0TW9kZVZhbHVlLnRvU3RyaW5nKCkgPT09IEVYUE9SVF9NT0RFX1ZBTFVFUy5mdWxsKSB7XG4gICAgICAgICAgYWdncmVnYXRpb25Db250cm9sLmRpc2FibGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZ2dyZWdhdGlvbkNvbnRyb2wuZW5hYmxlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVGaWxlVHlwZVNlbGVjdGlvbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuZmlsZVR5cGVzLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZShmaWxlVHlwZXNTZWxlY3Rpb25TdGF0ZSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlRmlsZVR5cGVTZWxlY3Rpb25TdGF0ZShmaWxlVHlwZXNTZWxlY3Rpb25TdGF0ZSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRmlsZVR5cGVTZWxlY3Rpb25TdGF0ZShjaGVja2JveGVzU3RhdGU6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9KTogdm9pZCB7XG4gICAgdGhpcy5pc0FueU9mRXhwb3J0RmlsZVR5cGVDaGVja2VkID0gT2JqZWN0LnZhbHVlcyhjaGVja2JveGVzU3RhdGUpLnNvbWUoXG4gICAgICB2YWx1ZSA9PiB2YWx1ZSA9PT0gdHJ1ZVxuICAgICk7XG4gICAgdGhpcy5maWxlVHlwZVNlbGVjdGlvblN0YXRlID0gY2hlY2tib3hlc1N0YXRlO1xuICAgIHRoaXMudXBkYXRlRG93bmxvYWRCdXR0b25TdGF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVGb3JtVmFsaWRhdGlvbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtR3JvdXAuc3RhdHVzQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlRG93bmxvYWRCdXR0b25TdGF0ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGaWxlVHlwZUNvbnRyb2woKTogdm9pZCB7XG4gICAgY29uc3QgZmlsZVR5cGVzQ29udHJvbCA9IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmZpbGVUeXBlcztcbiAgICBpZiAoZmlsZVR5cGVzQ29udHJvbCkge1xuICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gZmlsZVR5cGVzQ29udHJvbC52YWx1ZSB8fCB7fTtcbiAgICAgIGNvbnN0IHVwZGF0ZWRWYWx1ZSA9IHsgLi4uY3VycmVudFZhbHVlIH07XG5cbiAgICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuZmlsZVR5cGVTZWxlY3Rpb25TdGF0ZSkuZm9yRWFjaCgoW2ZpbGVUeXBlLCBpc1NlbGVjdGVkXSkgPT4ge1xuICAgICAgICBpZiAoZmlsZVR5cGUgaW4gY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgdXBkYXRlZFZhbHVlW2ZpbGVUeXBlXSA9IGlzU2VsZWN0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBmaWxlVHlwZXNDb250cm9sLnBhdGNoVmFsdWUodXBkYXRlZFZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRldGVybWluZVNob3dpbmdQcmV2aWV3T3JFbXB0eVN0YXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IGhhc0RhdGFUb1Nob3cgPSB0aGlzLmRhdGFUb0V4cG9ydC5zb21lKGRhdGFUb0V4cG9ydEl0ZW0gPT5cbiAgICAgIHRoaXMuaXNGdWxsVHlwZU9mRXhwb3J0XG4gICAgICAgID8gISFkYXRhVG9FeHBvcnRJdGVtXG4gICAgICAgIDogZGF0YVRvRXhwb3J0SXRlbS50aW1lVmFsdWVNYXAgJiYgT2JqZWN0LmtleXMoZGF0YVRvRXhwb3J0SXRlbS50aW1lVmFsdWVNYXApLmxlbmd0aCA+IDBcbiAgICApO1xuXG4gICAgdGhpcy5oYXNGZXRjaGVkRGF0YUFueVZhbHVlc1RvRXhwb3J0ID0gaGFzRGF0YVRvU2hvdztcblxuICAgIGlmIChoYXNEYXRhVG9TaG93KSB7XG4gICAgICB0aGlzLnByZXBhcmVQcmV2aWV3KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNQcmV2aWV3TG9hZGluZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGV0ZXJtaW5lSWZNZWFzdXJlbWVudFJlc3BvbnNlV2lsbEJlUHJvY2Vzc2VkQnlCYWNrZW5kKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuaXNQcmV2aWV3TG9hZGluZyA9IHRydWU7XG5cbiAgICB0aGlzLmRhdGFwb2ludHNFeGNlZWRpbmdCcm93c2VyRG93bmxvYWRMaW1pdCA9XG4gICAgICBhd2FpdCB0aGlzLmRhdGFwb2ludHNFeHBvcnRTZWxlY3RvclNlcnZpY2UuZ2V0RGF0YXBvaW50c0V4Y2VlZGluZ0xpbWl0KHRoaXMuZXhwb3J0Q29uZmlnKTtcblxuICAgIGNvbnN0IHsgYnJvd3NlckRvd25sb2FkYWJsZUNvdW50LCBlbWFpbERlbGl2ZXJhYmxlQ291bnQsIG5vblJldHJpZXZhYmxlQ291bnQgfSA9XG4gICAgICB0aGlzLmNhbGN1bGF0ZURhdGFwb2ludENvdW50cygpO1xuXG4gICAgdGhpcy5oYXNOb0V4cG9ydGFibGVEYXRhID1cbiAgICAgIGJyb3dzZXJEb3dubG9hZGFibGVDb3VudCA9PT0gMCAmJiBlbWFpbERlbGl2ZXJhYmxlQ291bnQgPT09IDAgJiYgbm9uUmV0cmlldmFibGVDb3VudCA+IDA7XG5cbiAgICBpZiAodGhpcy5kYXRhcG9pbnRzRXhjZWVkaW5nQnJvd3NlckRvd25sb2FkTGltaXQubGVuZ3RoID4gMCAmJiAhdGhpcy5oYXNOb0V4cG9ydGFibGVEYXRhKSB7XG4gICAgICB0aGlzLmxpbWl0RXhjZWVkZWRNZXNzYWdlID0gdGhpcy5kYXRhcG9pbnRzRXhwb3J0U2VsZWN0b3JTZXJ2aWNlLmdldExpbWl0RXhjZWVkZWRNZXNzYWdlKFxuICAgICAgICB0aGlzLmhhc05vRXhwb3J0YWJsZURhdGEsXG4gICAgICAgIGVtYWlsRGVsaXZlcmFibGVDb3VudCxcbiAgICAgICAgYnJvd3NlckRvd25sb2FkYWJsZUNvdW50LFxuICAgICAgICBub25SZXRyaWV2YWJsZUNvdW50LFxuICAgICAgICB0aGlzLmV4cG9ydENvbmZpZy5kYXRhcG9pbnREZXRhaWxzLmxlbmd0aFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhcG9pbnRzRXhjZWVkaW5nQnJvd3NlckRvd25sb2FkTGltaXQubGVuZ3RoID4gMCAmJiB0aGlzLmhhc05vRXhwb3J0YWJsZURhdGEpIHtcbiAgICAgIHRoaXMubGltaXRFeGNlZWRlZE1lc3NhZ2UgPSB0aGlzLmRhdGFwb2ludHNFeHBvcnRTZWxlY3RvclNlcnZpY2UuZ2V0TGltaXRFeGNlZWRlZE1lc3NhZ2UoXG4gICAgICAgIHRoaXMuaGFzTm9FeHBvcnRhYmxlRGF0YVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZURvd25sb2FkQnV0dG9uU3RhdGUoKTtcblxuICAgIHRoaXMuaXNQcmV2aWV3TG9hZGluZyA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdGVEYXRhcG9pbnRDb3VudHMoKTogRGF0YXBvaW50Q291bnRzIHtcbiAgICBjb25zdCBSRUNPUkRfQVBJX0xJTUlUID0gMV8wMDBfMDAwO1xuXG4gICAgdGhpcy5kYXRhUG9pbnRzRXhjZWVkaW5nT25lTWlsbGlvbkxpbWl0ID0gdGhpcy5kYXRhcG9pbnRzRXhjZWVkaW5nQnJvd3NlckRvd25sb2FkTGltaXQuZmlsdGVyKFxuICAgICAgZGF0YXBvaW50c0V4Y2VlZGluZ0Jyb3dzZXJEb3dubG9hZExpbWl0ID0+XG4gICAgICAgIGRhdGFwb2ludHNFeGNlZWRpbmdCcm93c2VyRG93bmxvYWRMaW1pdC50b3RhbEVsZW1lbnRzID4gUkVDT1JEX0FQSV9MSU1JVFxuICAgICk7XG5cbiAgICBjb25zdCBub25SZXRyaWV2YWJsZUNvdW50ID0gdGhpcy5kYXRhUG9pbnRzRXhjZWVkaW5nT25lTWlsbGlvbkxpbWl0Lmxlbmd0aDtcblxuICAgIGNvbnN0IGVtYWlsRGVsaXZlcmFibGVDb3VudCA9XG4gICAgICB0aGlzLmRhdGFwb2ludHNFeGNlZWRpbmdCcm93c2VyRG93bmxvYWRMaW1pdC5sZW5ndGggLSBub25SZXRyaWV2YWJsZUNvdW50O1xuXG4gICAgY29uc3QgYnJvd3NlckRvd25sb2FkYWJsZUNvdW50ID1cbiAgICAgIHRoaXMuZXhwb3J0Q29uZmlnLmRhdGFwb2ludERldGFpbHMubGVuZ3RoIC0gZW1haWxEZWxpdmVyYWJsZUNvdW50IC0gbm9uUmV0cmlldmFibGVDb3VudDtcblxuICAgIHJldHVybiB7XG4gICAgICBicm93c2VyRG93bmxvYWRhYmxlQ291bnQsXG4gICAgICBlbWFpbERlbGl2ZXJhYmxlQ291bnQsXG4gICAgICBub25SZXRyaWV2YWJsZUNvdW50XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcmVJbml0aWFsQ2hhbmdlYWJsZUNvbmZpZygpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxEYXRlRnJvbSA9IHRoaXMuZXhwb3J0Q29uZmlnLmRhdGVGcm9tO1xuICAgIHRoaXMuaW5pdGlhbERhdGVUbyA9IHRoaXMuZXhwb3J0Q29uZmlnLmRhdGVUbztcbiAgICB0aGlzLmluaXRpYWxEYXRhcG9pbnREZXRhaWxzID0gdGhpcy5leHBvcnRDb25maWcuZGF0YXBvaW50RGV0YWlscztcbiAgICBpZiAoIXRoaXMuaXNGdWxsVHlwZU9mRXhwb3J0KSB7XG4gICAgICB0aGlzLmluaXRpYWxBZ2dyZWdhdGlvbiA9IHRoaXMuZXhwb3J0Q29uZmlnLmFnZ3JlZ2F0aW9uO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9hZEluaXRpYWxDaGFuZ2VhYmxlQ29uZmlnKCk6IHZvaWQge1xuICAgIHRoaXMuZXhwb3J0Q29uZmlnLmRhdGVGcm9tID0gdGhpcy5pbml0aWFsRGF0ZUZyb207XG4gICAgdGhpcy5leHBvcnRDb25maWcuZGF0ZVRvID0gdGhpcy5pbml0aWFsRGF0ZVRvO1xuICAgIHRoaXMuZXhwb3J0Q29uZmlnLmRhdGFwb2ludERldGFpbHMgPSB0aGlzLmluaXRpYWxEYXRhcG9pbnREZXRhaWxzO1xuICAgIGlmICghdGhpcy5pc0Z1bGxUeXBlT2ZFeHBvcnQpIHtcbiAgICAgIHRoaXMuZXhwb3J0Q29uZmlnLmFnZ3JlZ2F0aW9uID0gdGhpcy5pbml0aWFsQWdncmVnYXRpb247XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVFeHBvcnRDb25maWdBbmRGZXRjaERhdGEoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwLmludmFsaWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmlzUHJldmlld0xvYWRpbmcgPSB0cnVlO1xuXG4gICAgdGhpcy5vbkRvd25sb2FkQnV0dG9uU3RhdGVDaGFuZ2UuZW1pdChmYWxzZSk7XG4gICAgdGhpcy5kYXRhVG9FeHBvcnQgPSBhd2FpdCB0aGlzLmRhdGFwb2ludHNFeHBvcnRTZWxlY3RvclNlcnZpY2UuZmV0Y2hBbmRQcmVwYXJlRGF0YVRvRXhwb3J0KFxuICAgICAgdGhpcy5leHBvcnRDb25maWcsXG4gICAgICB0aGlzLmlzRnVsbFR5cGVPZkV4cG9ydFxuICAgICk7XG5cbiAgICB0aGlzLmRldGVybWluZVNob3dpbmdQcmV2aWV3T3JFbXB0eVN0YXRlKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZURvd25sb2FkQnV0dG9uU3RhdGUoKTogdm9pZCB7XG4gICAgY29uc3QgY2FuRW5hYmxlRG93bmxvYWRCdXR0b24gPVxuICAgICAgdGhpcy5oYXNGZXRjaGVkRGF0YUFueVZhbHVlc1RvRXhwb3J0ICYmXG4gICAgICAhdGhpcy5mb3JtR3JvdXAuaW52YWxpZCAmJlxuICAgICAgdGhpcy5pc0FueU9mRXhwb3J0RmlsZVR5cGVDaGVja2VkICYmXG4gICAgICAhdGhpcy5oYXNOb0V4cG9ydGFibGVEYXRhO1xuXG4gICAgdGhpcy5vbkRvd25sb2FkQnV0dG9uU3RhdGVDaGFuZ2UuZW1pdChjYW5FbmFibGVEb3dubG9hZEJ1dHRvbik7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0RnVsbEV4cG9ydFJlbGF0ZWRQcm9wZXJ0aWVzKCk6IHZvaWQge1xuICAgIHRoaXMuaGFzTm9FeHBvcnRhYmxlRGF0YSA9IGZhbHNlO1xuICAgIHRoaXMuZGF0YXBvaW50c0V4Y2VlZGluZ0Jyb3dzZXJEb3dubG9hZExpbWl0ID0gW107XG4gIH1cblxuICBwcml2YXRlIGdldEluaXRpYWxTZWxlY3Rpb24oXG4gICAgZmlsZVR5cGU6IHsgW2tleTogc3RyaW5nXTogRmlsZVR5cGVNZXRhZGF0YSB9LFxuICAgIHNlbGVjdEJ5RGVmYXVsdDogbnVtYmVyW11cbiAgKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGZpbGVUeXBlKTtcbiAgICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICBjb25zdCBpbml0aWFsU2VsZWN0aW9uID0ga2V5cy5yZWR1Y2U8eyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0+KChhY2MsIGtleSkgPT4ge1xuICAgICAgYWNjW2tleV0gPSBmYWxzZTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuXG4gICAgc2VsZWN0QnlEZWZhdWx0LmZvckVhY2goaW5kZXggPT4ge1xuICAgICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPCBrZXlzLmxlbmd0aCkge1xuICAgICAgICBpbml0aWFsU2VsZWN0aW9uW2tleXNbaW5kZXhdXSA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaW5pdGlhbFNlbGVjdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgdHJpZ2dlckdhaW5zaWdodERvd25sb2FkRXZlbnQoc2VsZWN0ZWRGaWxlRXhwb3J0czogRmlsZUV4cG9ydENvbmZpZ1tdKTogdm9pZCB7XG4gICAgY29uc3QgY29tbW9uRXZlbnREYXRhID0ge1xuICAgICAgYWN0aW9uOiBQUk9EVUNUX0VYUEVSSUVOQ0VfREFUQVBPSU5UU19FWFBPUlRfU0VMRUNUT1IuQUNUSU9OUy5ET1dOTE9BRF9TVEFSVEVELFxuICAgICAgY29tcG9uZW50OlxuICAgICAgICBQUk9EVUNUX0VYUEVSSUVOQ0VfREFUQVBPSU5UU19FWFBPUlRfU0VMRUNUT1IuQ09NUE9ORU5UU1xuICAgICAgICAgIC5EQVRBUE9JTlRTX0VYUE9SVF9TRUxFQ1RPUl9GSUxFX0VYUE9SVEVSLFxuICAgICAgc2VsZWN0ZWRGaWxlVHlwZTogc2VsZWN0ZWRGaWxlRXhwb3J0cy5tYXAoaXRlbSA9PiBpdGVtLmZpbGVUeXBlKVxuICAgIH07XG5cbiAgICBpZiAodGhpcy5pc0Z1bGxUeXBlT2ZFeHBvcnQpIHtcbiAgICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQoXG4gICAgICAgIFBST0RVQ1RfRVhQRVJJRU5DRV9EQVRBUE9JTlRTX0VYUE9SVF9TRUxFQ1RPUi5FVkVOVFMuRVhQT1JUX1NFTEVDVE9SLFxuICAgICAgICB7XG4gICAgICAgICAgLi4uY29tbW9uRXZlbnREYXRhLFxuICAgICAgICAgIHNlbGVjdGVkRXhwb3J0VHlwZTpcbiAgICAgICAgICAgIFBST0RVQ1RfRVhQRVJJRU5DRV9EQVRBUE9JTlRTX0VYUE9SVF9TRUxFQ1RPUi5FWFBPUlRfQ09ORklHLkZVTExfRVhQT1JUX1RZUEVcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChcbiAgICAgICAgUFJPRFVDVF9FWFBFUklFTkNFX0RBVEFQT0lOVFNfRVhQT1JUX1NFTEVDVE9SLkVWRU5UUy5FWFBPUlRfU0VMRUNUT1IsXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5jb21tb25FdmVudERhdGEsXG4gICAgICAgICAgc2VsZWN0ZWRFeHBvcnRUeXBlOlxuICAgICAgICAgICAgUFJPRFVDVF9FWFBFUklFTkNFX0RBVEFQT0lOVFNfRVhQT1JUX1NFTEVDVE9SLkVYUE9SVF9DT05GSUcuQ09NUEFDVF9FWFBPUlRfVFlQRSxcbiAgICAgICAgICBzZWxlY3RlZEFnZ3JlZ2F0aW9uOiB0aGlzLmV4cG9ydENvbmZpZy5hZ2dyZWdhdGlvbiA/PyBBR0dSRUdBVElPTl9WQUxVRVMubm9uZVxuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInAtYi0xNlwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzUGVybWlzc2lvblRvUmVhZEFueU1lYXN1cmVtZW50czsgZWxzZSBoYXNOb1JvbGVUb1JlYWRBbnlNZWFzdXJlbWVudHNcIj5cbiAgICA8ZGl2IGNsYXNzPVwicC0xNiB0ZXh0LWNlbnRlciBzZXBhcmF0b3ItYm90dG9tIHN0aWNreS10b3AgYmctY29tcG9uZW50XCI+XG4gICAgICA8cCBjbGFzcz1cInRleHQtbWVkaXVtIHRleHQtMTZcIj5cbiAgICAgICAge3sgJ0NvbmZpZ3VyZSBleHBvcnQnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3A+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJwLXQtMjQgcC1yLTE2IHAtbC0xNiBnYXAtOCBwLWItMTYgZmxleC13cmFwXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsgJ3NlcGFyYXRvci1ib3R0b20nOiBpc0Z1bGxUeXBlT2ZFeHBvcnQgfVwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICA8Yzh5LWRhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yLXRpbWUtcmFuZ2VcbiAgICAgICAgICAgICpuZ0lmPVwidGhpcy5oYXNQZXJtaXNzaW9uVG9SZWFkQW55TWVhc3VyZW1lbnRzXCJcbiAgICAgICAgICAgIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCJcbiAgICAgICAgICAgIChvbkRhdGVGcm9tQ2hhbmdlKT1cIm9uRGF0ZUZyb21DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAob25EYXRlVG9DaGFuZ2UpPVwib25EYXRlVG9DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgPjwvYzh5LWRhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yLXRpbWUtcmFuZ2U+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICA8Yzh5LWRhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yLWRhdGEtc2NvcGVcbiAgICAgICAgICAgICpuZ0lmPVwidGhpcy5oYXNQZXJtaXNzaW9uVG9SZWFkQW55TWVhc3VyZW1lbnRzXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZEFnZ3JlZ2F0aW9uT3B0aW9uc109XCJkaXNhYmxlZEFnZ3JlZ2F0aW9uT3B0aW9uc1wiXG4gICAgICAgICAgICBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiXG4gICAgICAgICAgICAob25BZ2dyZWdhdGlvbkNoYW5nZSk9XCJvbkFnZ3JlZ2F0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgKG9uRXhwb3J0VHlwZUNoYW5nZSk9XCJvbkV4cG9ydFR5cGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgPjwvYzh5LWRhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yLWRhdGEtc2NvcGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICA8Yzh5LWRhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yLWZpbGUtdHlwZXNcbiAgICAgICAgICAgICpuZ0lmPVwidGhpcy5oYXNQZXJtaXNzaW9uVG9SZWFkQW55TWVhc3VyZW1lbnRzXCJcbiAgICAgICAgICAgIFtkeW5hbWljRmlsZXNUeXBlTWV0YWRhdGFdPVwiZHluYW1pY0ZpbGVzVHlwZU1ldGFkYXRhXCJcbiAgICAgICAgICAgIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCJcbiAgICAgICAgICA+PC9jOHktZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItZmlsZS10eXBlcz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdJZj1cIiFpc0Z1bGxUeXBlT2ZFeHBvcnQgJiYgIWhhc0ZldGNoZWREYXRhQW55VmFsdWVzVG9FeHBvcnQgJiYgIWlzUHJldmlld0xvYWRpbmdcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLXQtMjQgcC1yLTE2IHAtbC0xNiBwLWItMTYgc2VwYXJhdG9yLWJvdHRvbSBkLWZsZXhcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiYWxlcnQgYWxlcnQtd2FybmluZyBjZW50ZXItYmxvY2tcIlxuICAgICAgICAgIHJvbGU9XCJhbGVydFwiXG4gICAgICAgICAgZGF0YS1jeT1cImZpbGUtZXhwb3J0ZXItLW5vLWRhdGEtYXZhaWxhYmxlXCJcbiAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgPlxuICAgICAgICAgIE5vIGRhdGEgYXZhaWxhYmxlLlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhcG9pbnRzRXhjZWVkaW5nQnJvd3NlckRvd25sb2FkTGltaXQubGVuZ3RoID4gMFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInAtdC0yNCBwLXItMTYgcC1sLTE2IHAtYi0xNiBzZXBhcmF0b3ItYm90dG9tIGQtZmxleFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgW2NsYXNzXT1cIlxuICAgICAgICAgICAgaGFzTm9FeHBvcnRhYmxlRGF0YVxuICAgICAgICAgICAgICA/ICdhbGVydCBhbGVydC13YXJuaW5nIGNlbnRlci1ibG9jaydcbiAgICAgICAgICAgICAgOiAnYWxlcnQgYWxlcnQtaW5mbyBjZW50ZXItYmxvY2snXG4gICAgICAgICAgXCJcbiAgICAgICAgICByb2xlPVwiYWxlcnRcIlxuICAgICAgICAgIFtpbm5lckhUTUxdPVwibGltaXRFeGNlZWRlZE1lc3NhZ2VcIlxuICAgICAgICA+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNGdWxsVHlwZU9mRXhwb3J0XCI+XG4gICAgICA8Yzh5LWRhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yLXByZXZpZXdcbiAgICAgICAgKm5nSWY9XCJ0aGlzLmhhc1Blcm1pc3Npb25Ub1JlYWRBbnlNZWFzdXJlbWVudHNcIlxuICAgICAgICBbaGFzRmV0Y2hlZERhdGFBbnlWYWx1ZXNUb0V4cG9ydF09XCJoYXNGZXRjaGVkRGF0YUFueVZhbHVlc1RvRXhwb3J0XCJcbiAgICAgICAgW2lzUHJldmlld0xvYWRpbmddPVwiaXNQcmV2aWV3TG9hZGluZ1wiXG4gICAgICAgIFtwcmV2aWV3VGFibGVEYXRhXT1cInByZXZpZXdUYWJsZURhdGFcIlxuICAgICAgPjwvYzh5LWRhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yLXByZXZpZXc+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctdGVtcGxhdGUgI2hhc05vUm9sZVRvUmVhZEFueU1lYXN1cmVtZW50cz5cbiAgICA8ZGl2IGNsYXNzPVwicC10LTI0IHAtci0xNiBwLWwtMTYgcC1iLTE2IGQtZmxleFwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImFsZXJ0IGFsZXJ0LWluZm8gY2VudGVyLWJsb2NrXCJcbiAgICAgICAgcm9sZT1cImFsZXJ0XCJcbiAgICAgICAgdHJhbnNsYXRlXG4gICAgICA+XG4gICAgICAgIDxwPlRvIGV4cG9ydCBkYXRhLCB5b3UgbXVzdCBtZWV0IGF0IGxlYXN0IG9uZSBvZiB0aGVzZSBjcml0ZXJpYTo8L3A+XG4gICAgICAgIDx1bD5cbiAgICAgICAgICA8bGk+XG4gICAgICAgICAgICBIYXZlXG4gICAgICAgICAgICA8Yj5SRUFEIHBlcm1pc3Npb24gZm9yIFwiTWVhc3VyZW1lbnRzXCIgcGVybWlzc2lvbiB0eXBlPC9iPlxuICAgICAgICAgICAgKGVpdGhlciBhcyBhIGdsb2JhbCByb2xlIG9yIGZvciB0aGUgc3BlY2lmaWMgc291cmNlKVxuICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgPGxpPlxuICAgICAgICAgICAgQmUgdGhlXG4gICAgICAgICAgICA8Yj5vd25lciBvZiB0aGUgc291cmNlPC9iPlxuICAgICAgICAgICAgeW91IHdhbnQgdG8gZXhwb3J0IGRhdGEgZnJvbVxuICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICAgIDxwPkRvbid0IG1lZXQgdGhlc2UgcmVxdWlyZW1lbnRzPyBDb250YWN0IHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IgZm9yIGFzc2lzdGFuY2UuPC9wPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbiJdfQ==
|